RFR(XS): 8191153: assert(u_ctrl != blk1 && u_ctrl != blk2) failed: won't converge

Roland Westrelin rwestrel at redhat.com
Mon Nov 20 14:10:47 UTC 2017


The assert that I added with 8186125 is too strong. It assumes that Cmp
and its uses are being cloned down but it's not always the case.

When the TestSplitIfPinnedCMove::test() from the test case is compiled,
line 63 becomes a CMoveP which is pinned and the if line 66 can then be
split through phi. For that to happen, the CMoveP must first be moved
out of the way: it can be split up but the CmpI that feeds into the
CMoveP has more than one use. A first pass through
PhaseIdealLoop::split_up() causes the CmpI->Bol->CMoveP chain to be
cloned and a second call to PhaseIdealLoop::split_up() splits the CmpI
up. The assert fires on the first call but it's too strong because we're
not splitting the CmpI->Bol->CMoveP chain down.


More information about the hotspot-compiler-dev mailing list