< 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 >