@@ -1335,6 +1335,7 @@ void ShenandoahBarrierC2Support::pin_and_expand(PhaseIdealLoop* phase) {
13351335 Node* orig_ctrl = ctrl;
13361336
13371337 Node* raw_mem = fixer.find_mem (ctrl, lrb);
1338+ Node* raw_mem_for_ctrl = fixer.find_mem (ctrl, NULL );
13381339
13391340 IdealLoopTree *loop = phase->get_loop (ctrl);
13401341
@@ -1436,6 +1437,7 @@ void ShenandoahBarrierC2Support::pin_and_expand(PhaseIdealLoop* phase) {
14361437 phase->set_ctrl (n, region);
14371438 follow_barrier_uses (n, ctrl, uses, phase);
14381439 }
1440+ fixer.record_new_ctrl (ctrl, region, raw_mem, raw_mem_for_ctrl);
14391441 }
14401442 // Done expanding load-reference-barriers.
14411443 assert (ShenandoahBarrierSetC2::bsc2 ()->state ()->load_reference_barriers_count () == 0 , " all load reference barrier nodes should have been replaced" );
@@ -2671,6 +2673,13 @@ void MemoryGraphFixer::fix_mem(Node* ctrl, Node* new_ctrl, Node* mem, Node* mem_
26712673#endif
26722674}
26732675
2676+ void MemoryGraphFixer::record_new_ctrl (Node* ctrl, Node* new_ctrl, Node* mem, Node* mem_for_ctrl) {
2677+ if (mem_for_ctrl != mem && new_ctrl != ctrl) {
2678+ _memory_nodes.map (ctrl->_idx , mem);
2679+ _memory_nodes.map (new_ctrl->_idx , mem_for_ctrl);
2680+ }
2681+ }
2682+
26742683MergeMemNode* MemoryGraphFixer::allocate_merge_mem (Node* mem, Node* rep_proj, Node* rep_ctrl) const {
26752684 MergeMemNode* mm = MergeMemNode::make (mem);
26762685 mm->set_memory_at (_alias, rep_proj);
0 commit comments