[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