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

Roland Westrelin roland at openjdk.org
Tue Jul 19 12:36:07 UTC 2022


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.

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

Commit messages:
 - test
 - more
 - fix

Changes: https://git.openjdk.org/jdk/pull/9553/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=9553&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8290529
  Stats: 49 lines in 2 files changed: 46 ins; 0 del; 3 mod
  Patch: https://git.openjdk.org/jdk/pull/9553.diff
  Fetch: git fetch https://git.openjdk.org/jdk pull/9553/head:pull/9553

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


More information about the hotspot-compiler-dev mailing list