RFR(S): 8231620: assert(bol->is_Bool()) crash during split if due to FastLockNode
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Mon Oct 7 10:57:48 UTC 2019
Testing results are clean.
Best regards,
Vladimir Ivanov
On 04/10/2019 17:06, Vladimir Ivanov wrote:
> Looks good.
>
> (Submitted for testing.)
>
> Best regards,
> Vladimir Ivanov
>
> On 02/10/2019 10: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