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

Roland Westrelin roland at openjdk.org
Fri Sep 2 08:34:05 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.

Roland Westrelin has updated the pull request incrementally with one additional commit since the last revision:

  make CmpUWithZero test x64 only

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/9553/files
  - new: https://git.openjdk.org/jdk/pull/9553/files/8850b36c..a3c5557f

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=9553&range=04
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=9553&range=03-04

  Stats: 1 line in 1 file changed: 1 ins; 0 del; 0 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