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

Vladimir Kozlov vladimir.kozlov at oracle.com
Tue Nov 21 23:16:24 UTC 2017



On 11/20/17 6:10 AM, Roland Westrelin wrote:
> http://cr.openjdk.java.net/~roland/8191153/webrev.00/
> 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.
> Roland.

More information about the hotspot-compiler-dev mailing list