@@ -183,7 +183,7 @@ Node* ArrayCopyNode::try_clone_instance(PhaseGVN *phase, bool can_reshape, int c
183183
184184 const Type* src_type = phase->type (base_src);
185185
186- MergeMemNode* mem = MergeMemNode::make (in_mem);
186+ MergeMemNode* mem = phase-> transform ( MergeMemNode::make (in_mem))-> as_MergeMem ( );
187187
188188 const TypeInstPtr* inst_src = src_type->isa_instptr ();
189189
@@ -367,7 +367,7 @@ void ArrayCopyNode::array_copy_test_overlap(PhaseGVN *phase, bool can_reshape, b
367367Node* ArrayCopyNode::array_copy_forward (PhaseGVN *phase,
368368 bool can_reshape,
369369 Node*& forward_ctl,
370- MergeMemNode* mm ,
370+ Node* mem ,
371371 const TypePtr* atp_src,
372372 const TypePtr* atp_dest,
373373 Node* adr_src,
@@ -379,7 +379,7 @@ Node* ArrayCopyNode::array_copy_forward(PhaseGVN *phase,
379379 int count) {
380380 if (!forward_ctl->is_top ()) {
381381 // copy forward
382- mm = mm-> clone ()-> as_MergeMem ( );
382+ MergeMemNode* mm = MergeMemNode::make (mem );
383383
384384 if (count > 0 ) {
385385 BarrierSetC2* bs = BarrierSet::barrier_set ()->barrier_set_c2 ();
@@ -392,7 +392,7 @@ Node* ArrayCopyNode::array_copy_forward(PhaseGVN *phase,
392392 v = load (bs, phase, forward_ctl, mm, next_src, atp_src, value_type, copy_type);
393393 store (bs, phase, forward_ctl, mm, next_dest, atp_dest, v, value_type, copy_type);
394394 }
395- } else if (can_reshape) {
395+ } else if (can_reshape) {
396396 PhaseIterGVN* igvn = phase->is_IterGVN ();
397397 igvn->_worklist .push (adr_src);
398398 igvn->_worklist .push (adr_dest);
@@ -405,7 +405,7 @@ Node* ArrayCopyNode::array_copy_forward(PhaseGVN *phase,
405405Node* ArrayCopyNode::array_copy_backward (PhaseGVN *phase,
406406 bool can_reshape,
407407 Node*& backward_ctl,
408- MergeMemNode* mm ,
408+ Node* mem ,
409409 const TypePtr* atp_src,
410410 const TypePtr* atp_dest,
411411 Node* adr_src,
@@ -417,7 +417,7 @@ Node* ArrayCopyNode::array_copy_backward(PhaseGVN *phase,
417417 int count) {
418418 if (!backward_ctl->is_top ()) {
419419 // copy backward
420- mm = mm-> clone ()-> as_MergeMem ( );
420+ MergeMemNode* mm = MergeMemNode::make (mem );
421421
422422 BarrierSetC2* bs = BarrierSet::barrier_set ()->barrier_set_c2 ();
423423 assert (copy_type != T_OBJECT || !bs->array_copy_requires_gc_barriers (false , T_OBJECT, false , BarrierSetC2::Optimization), " only tightly coupled allocations for object arrays" );
@@ -432,7 +432,7 @@ Node* ArrayCopyNode::array_copy_backward(PhaseGVN *phase,
432432 }
433433 Node* v = load (bs, phase, backward_ctl, mm, adr_src, atp_src, value_type, copy_type);
434434 store (bs, phase, backward_ctl, mm, adr_dest, atp_dest, v, value_type, copy_type);
435- } else if (can_reshape) {
435+ } else if (can_reshape) {
436436 PhaseIterGVN* igvn = phase->is_IterGVN ();
437437 igvn->_worklist .push (adr_src);
438438 igvn->_worklist .push (adr_dest);
@@ -564,11 +564,7 @@ Node *ArrayCopyNode::Ideal(PhaseGVN *phase, bool can_reshape) {
564564 Node* dest = in (ArrayCopyNode::Dest);
565565 const TypePtr* atp_src = get_address_type (phase, _src_type, src);
566566 const TypePtr* atp_dest = get_address_type (phase, _dest_type, dest);
567-
568- Node *in_mem = in (TypeFunc::Memory);
569- if (!in_mem->is_MergeMem ()) {
570- in_mem = MergeMemNode::make (in_mem);
571- }
567+ Node* in_mem = in (TypeFunc::Memory);
572568
573569 if (can_reshape) {
574570 assert (!phase->is_IterGVN ()->delay_transform (), " cannot delay transforms" );
@@ -580,13 +576,13 @@ Node *ArrayCopyNode::Ideal(PhaseGVN *phase, bool can_reshape) {
580576 array_copy_test_overlap (phase, can_reshape, disjoint_bases, count, forward_ctl, backward_ctl);
581577
582578 Node* forward_mem = array_copy_forward (phase, can_reshape, forward_ctl,
583- in_mem-> as_MergeMem () ,
579+ in_mem,
584580 atp_src, atp_dest,
585581 adr_src, base_src, adr_dest, base_dest,
586582 copy_type, value_type, count);
587583
588584 Node* backward_mem = array_copy_backward (phase, can_reshape, backward_ctl,
589- in_mem-> as_MergeMem () ,
585+ in_mem,
590586 atp_src, atp_dest,
591587 adr_src, base_src, adr_dest, base_dest,
592588 copy_type, value_type, count);
0 commit comments