RFR: 8306933: C2: "assert(false) failed: infinite loop" failure

Roland Westrelin roland at openjdk.org
Wed Apr 26 15:54:00 UTC 2023


The assert fires because an infinite loop appears in the graph after
loop opts are over.

After loop opts, the `for(;;)` loop contains a null check and a range
check for `array[i]`. So it's not considered an infinite loop (it has
exits to uncommon traps). The null check and range check are redundant
with the one right before the loop: `int v = array2[k];` IGVN can
optimize it but it doesn't happen until after loop opts when a
`ConvI2L` for the `array[i]` access is processed as part of post loop
opts IGVN. The `for(;;)` loop is then emptied and only contains a
`Loop` and a `Safepoint` nodes.

I propose removing the assert (at least for now) as I don't see a way
to guarantee no infinite loop can appear after loop opts.

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

Commit messages:
 - test & fix

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

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


More information about the hotspot-compiler-dev mailing list