< prev index next >
src/hotspot/share/opto/split_if.cpp
Print this page
rev 53952 : 8219448: split-if update_uses accesses stale idom data
Reviewed-by:
*** 521,531 ****
new_true = ifpx;
}
}
_igvn.remove_dead_node(new_iff);
// Lazy replace IDOM info with the region's dominator
! lazy_replace( iff, region_dom );
// Now make the original merge point go dead, by handling all its uses.
small_cache region_cache;
// Preload some control flow in region-cache
region_cache.lru_insert( new_false, new_false );
--- 521,533 ----
new_true = ifpx;
}
}
_igvn.remove_dead_node(new_iff);
// Lazy replace IDOM info with the region's dominator
! lazy_replace(iff, region_dom);
! lazy_update(region, region_dom); // idom must be update before handle_uses, the replacement is done after
! region->set_req(0, NULL); // Break the self-cycle. Required for lazy_update to work on region
// Now make the original merge point go dead, by handling all its uses.
small_cache region_cache;
// Preload some control flow in region-cache
region_cache.lru_insert( new_false, new_false );
*** 564,575 ****
// calling get_ctrl calling get_ctrl_no_update looking for dead
// regions). So roll back the DUIterator innards.
--k;
} // End of while merge point has phis
! assert(region->outcnt() == 1, "Only self reference should remain"); // Just Self on the Region
! region->set_req(0, NULL); // Break the self-cycle
// Any leftover bits in the splitting block must not have depended on local
// Phi inputs (these have already been split-up). Hence it's safe to hoist
// these guys to the dominating point.
lazy_replace( region, region_dom );
--- 566,576 ----
// calling get_ctrl calling get_ctrl_no_update looking for dead
// regions). So roll back the DUIterator innards.
--k;
} // End of while merge point has phis
! assert(region->outcnt() == 0, "Should be empty now");
// Any leftover bits in the splitting block must not have depended on local
// Phi inputs (these have already been split-up). Hence it's safe to hoist
// these guys to the dominating point.
lazy_replace( region, region_dom );
< prev index next >