RFR(S): 8231620: assert(bol->is_Bool()) crash during split if due to FastLockNode

Tobias Hartmann tobias.hartmann at oracle.com
Mon Oct 7 07:18:52 UTC 2019


Hi Roland,

looks good to me but the merge_point_safe method is now useless on 32 bit.

Best regards,
Tobias

On 02.10.19 09:34, Roland Westrelin wrote:
> 
> http://cr.openjdk.java.net/~roland/8231620/webrev.00/
> 
> In test1() of the regression test, the loop is unswitched. Once it is
> there are 2 Lock nodes but a single shared FastLock node. Split if then
> happens with the shared FastLock between the If to be split and the
> dominating Region. C2 then crashes in PhaseIdealLoop::split_up() because
> the pattern with the FastLock is unhandled there. merge_point_safe()
> checks for a FastLock node and it is expected to prevent split if when
> that pattern is encountered. But in the case test1(), There's a CastPP
> between the Phi and the FastLock.
> 
> test2() of the regression test is similar except that, instead of a
> CastPP, a load node is between the Phi and the FastLock. That one
> crashes the same way but only on 32 bits because a ConvI2L prevents
> split if on 64 bits.
> 
> Rather than try to fix merge_point_safe() to handle every node that can
> be in between the FastLock and the Phi, I propose handling FastLock
> nodes in PhaseIdealLoop::split_up() which is AFAICT straightforward.
> 
> Roland.
> 


More information about the hotspot-compiler-dev mailing list