RFR: 8290529: C2: assert(BoolTest(btest).is_canonical()) failure [v4]

Roland Westrelin roland at openjdk.org
Fri Sep 2 08:34:05 UTC 2022


On Wed, 31 Aug 2022 14:37:09 GMT, Roland Westrelin <roland at openjdk.org> wrote:

>> For the test case:
>> 
>> 1) In Parse::do_if(), tst0 is:
>> 
>> (Bool#lt (CmpU 0 Parm0))
>> 
>> 2) transformed by gvn in tst:
>> 
>> (Bool#gt (CmpU Parm0 0))
>> 
>> 3) That test is not canonical and is negated and retransformed which
>> results in:
>> 
>> (Bool#eq (CmpI Parm0 0))
>> 
>> The assert fires because that test is not canonical either.
>> 
>> The root cause I think is that the (CmpU .. 0) -> (CmpI .. 0) only
>> triggers if the condition of the CmpU is canonical (and results in a
>> non canonical test). Tweaking it so it applies even if the condition
>> is not leads to the following change in the steps above:
>> 
>> 2) (Bool#ne (CmpI Parm0 0))
>> 
>> which is a canonical test.
>
> Roland Westrelin has updated the pull request incrementally with one additional commit since the last revision:
> 
>   comment

For the record: Test CmpUWithZero.java requires the compareUnsigned intrinsic which in turn requires the CmpU3 only implemented on x86_64 so I made that test x86_64 only.

-------------

PR: https://git.openjdk.org/jdk/pull/9553


More information about the hotspot-compiler-dev mailing list