[12] RFR (S): 8215757: C2: PhaseIdealLoop::spinup() computes wrong post-dominating point

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Fri Jan 11 18:23:40 UTC 2019

>>     #2: As part of loop limit check insertion, new IfNode is created (If
>> 1854) and linked to R1722 as an input which causes R1722 IDOM to be
>> updated [2]. It changes R1722 IDOM (I1511 => R1784), since dom_lca()
>> normalizes the result using find_non_split_ctrl().
> Isn't that the root cause: the idom of R1722 is still I1511 and not
> R1784?

If it were the case, then PhaseIdealLoop::handle_use()/spinup() would 
reliably crash on all users of Phi 1790. There are 2 other Regions 
(R1710 and R1716) which keep their IDOM (I1511) intact and the 
transformation works fine for them.

R1722 is changed during strip mining transformation and its IDOM is 
recomputed (I1511 => R1784). Then PhaseIdealLoop::handle_use()/spinup() 
crashes trying to process R1722 user (CallStaticJava 199) and the 
problem is caused by IDOM(R1722) which is still R1784 and not I798 
(region_dom/iff_dom) as for the other Regions (that's the effect of 
"lazy_replace(iff, region_dom)" in PhaseIdealLoop::do_split_if()).

Best regards,
Vladimir Ivanov

More information about the hotspot-compiler-dev mailing list