< prev index next >

src/hotspot/share/opto/macroArrayCopy.cpp

Print this page
rev 56288 : 8231085: C2/GC: Better GC-interface for expanding clone

*** 1091,1116 **** Node* dest_offset = ac->in(ArrayCopyNode::DestPos); Node* length = ac->in(ArrayCopyNode::Length); MergeMemNode* merge_mem = NULL; if (ac->is_clonebasic()) { - assert (src_offset == NULL && dest_offset == NULL, "for clone offsets should be null"); - Node* mem = ac->in(TypeFunc::Memory); - const char* copyfunc_name = "arraycopy"; - address copyfunc_addr = - basictype2arraycopy(T_LONG, NULL, NULL, - true, copyfunc_name, true); - - const TypePtr* raw_adr_type = TypeRawPtr::BOTTOM; - const TypeFunc* call_type = OptoRuntime::fast_arraycopy_Type(); - - Node* call = make_leaf_call(ctrl, mem, call_type, copyfunc_addr, copyfunc_name, raw_adr_type, src, dest, length XTOP); - transform_later(call); - BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2(); ! bs->clone_barrier_at_expansion(ac, call, _igvn); ! return; } else if (ac->is_copyof() || ac->is_copyofrange() || ac->is_cloneoop()) { Node* mem = ac->in(TypeFunc::Memory); merge_mem = MergeMemNode::make(mem); transform_later(merge_mem); --- 1091,1102 ---- Node* dest_offset = ac->in(ArrayCopyNode::DestPos); Node* length = ac->in(ArrayCopyNode::Length); MergeMemNode* merge_mem = NULL; if (ac->is_clonebasic()) { BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2(); ! bs->clone_at_expansion(this, ac); return; } else if (ac->is_copyof() || ac->is_copyofrange() || ac->is_cloneoop()) { Node* mem = ac->in(TypeFunc::Memory); merge_mem = MergeMemNode::make(mem); transform_later(merge_mem);
< prev index next >