RFR [9] (XS): 8179882: C2: Stale control info after cast node elimination during loop optimization pass

Vladimir Kozlov vladimir.kozlov at oracle.com
Wed May 24 22:36:52 UTC 2017


Yes, calling IGVN during loop opts is dangerous - we always have to 
remember adjust loops info.

On 5/24/17 9:18 AM, Vladimir Ivanov wrote:
> http://cr.openjdk.java.net/~vlivanov/8179882/webrev.00
> https://bugs.openjdk.java.net/browse/JDK-8179882
> 
> There's cast elimination logic in 
> PhaseIdealLoop::split_if_with_blocks_pre() which was introduced by 
> JDK-8139771.
> 
> The problem with it is that ConstraintCastNode::dominating_cast() relies 
> on immediate control info (in(0)) which can get out of sync with what is 
> cached in PhaseIdealLoop (get_ctrl()).

Should we fix this instead? It means somewhere we forgot to update loop 
info.

Thanks,
Vladimir

> 
> The fix is to catch the case when dom_cast doesn't dominate n based on 
> info from PhaseIdealLoop and update control info accordingly.
> 
> Testing: manual (replayed problematic compilation & eyeballed the IR), 
> JPRT, RBT (hs-tier0-comp, in progress).
> 
> Best regards,
> Vladimir Ivanov
> 
> PS: thanks to Roland for helping with the fix.


More information about the hotspot-compiler-dev mailing list