RFR(S): 8231620: assert(bol->is_Bool()) crash during split if due to FastLockNode
Roland Westrelin
rwestrel at redhat.com
Wed Oct 2 07:34:29 UTC 2019
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