@@ -183,7 +183,7 @@ Node* ArrayCopyNode::try_clone_instance(PhaseGVN *phase, bool can_reshape, int c
183
183
184
184
const Type* src_type = phase->type (base_src);
185
185
186
- MergeMemNode* mem = MergeMemNode::make (in_mem);
186
+ MergeMemNode* mem = phase-> transform ( MergeMemNode::make (in_mem))-> as_MergeMem ( );
187
187
188
188
const TypeInstPtr* inst_src = src_type->isa_instptr ();
189
189
@@ -367,7 +367,7 @@ void ArrayCopyNode::array_copy_test_overlap(PhaseGVN *phase, bool can_reshape, b
367
367
Node* ArrayCopyNode::array_copy_forward (PhaseGVN *phase,
368
368
bool can_reshape,
369
369
Node*& forward_ctl,
370
- MergeMemNode* mm ,
370
+ Node* mem ,
371
371
const TypePtr* atp_src,
372
372
const TypePtr* atp_dest,
373
373
Node* adr_src,
@@ -379,7 +379,7 @@ Node* ArrayCopyNode::array_copy_forward(PhaseGVN *phase,
379
379
int count) {
380
380
if (!forward_ctl->is_top ()) {
381
381
// copy forward
382
- mm = mm-> clone ()-> as_MergeMem ( );
382
+ MergeMemNode* mm = MergeMemNode::make (mem );
383
383
384
384
if (count > 0 ) {
385
385
BarrierSetC2* bs = BarrierSet::barrier_set ()->barrier_set_c2 ();
@@ -392,7 +392,7 @@ Node* ArrayCopyNode::array_copy_forward(PhaseGVN *phase,
392
392
v = load (bs, phase, forward_ctl, mm, next_src, atp_src, value_type, copy_type);
393
393
store (bs, phase, forward_ctl, mm, next_dest, atp_dest, v, value_type, copy_type);
394
394
}
395
- } else if (can_reshape) {
395
+ } else if (can_reshape) {
396
396
PhaseIterGVN* igvn = phase->is_IterGVN ();
397
397
igvn->_worklist .push (adr_src);
398
398
igvn->_worklist .push (adr_dest);
@@ -405,7 +405,7 @@ Node* ArrayCopyNode::array_copy_forward(PhaseGVN *phase,
405
405
Node* ArrayCopyNode::array_copy_backward (PhaseGVN *phase,
406
406
bool can_reshape,
407
407
Node*& backward_ctl,
408
- MergeMemNode* mm ,
408
+ Node* mem ,
409
409
const TypePtr* atp_src,
410
410
const TypePtr* atp_dest,
411
411
Node* adr_src,
@@ -417,7 +417,7 @@ Node* ArrayCopyNode::array_copy_backward(PhaseGVN *phase,
417
417
int count) {
418
418
if (!backward_ctl->is_top ()) {
419
419
// copy backward
420
- mm = mm-> clone ()-> as_MergeMem ( );
420
+ MergeMemNode* mm = MergeMemNode::make (mem );
421
421
422
422
BarrierSetC2* bs = BarrierSet::barrier_set ()->barrier_set_c2 ();
423
423
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,
432
432
}
433
433
Node* v = load (bs, phase, backward_ctl, mm, adr_src, atp_src, value_type, copy_type);
434
434
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) {
436
436
PhaseIterGVN* igvn = phase->is_IterGVN ();
437
437
igvn->_worklist .push (adr_src);
438
438
igvn->_worklist .push (adr_dest);
@@ -564,11 +564,7 @@ Node *ArrayCopyNode::Ideal(PhaseGVN *phase, bool can_reshape) {
564
564
Node* dest = in (ArrayCopyNode::Dest);
565
565
const TypePtr* atp_src = get_address_type (phase, _src_type, src);
566
566
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);
572
568
573
569
if (can_reshape) {
574
570
assert (!phase->is_IterGVN ()->delay_transform (), " cannot delay transforms" );
@@ -580,13 +576,13 @@ Node *ArrayCopyNode::Ideal(PhaseGVN *phase, bool can_reshape) {
580
576
array_copy_test_overlap (phase, can_reshape, disjoint_bases, count, forward_ctl, backward_ctl);
581
577
582
578
Node* forward_mem = array_copy_forward (phase, can_reshape, forward_ctl,
583
- in_mem-> as_MergeMem () ,
579
+ in_mem,
584
580
atp_src, atp_dest,
585
581
adr_src, base_src, adr_dest, base_dest,
586
582
copy_type, value_type, count);
587
583
588
584
Node* backward_mem = array_copy_backward (phase, can_reshape, backward_ctl,
589
- in_mem-> as_MergeMem () ,
585
+ in_mem,
590
586
atp_src, atp_dest,
591
587
adr_src, base_src, adr_dest, base_dest,
592
588
copy_type, value_type, count);
0 commit comments