RFR: 8319764: C2 compilation asserts during incremental inlining because Phi input is out of bounds

Roland Westrelin roland at openjdk.org
Tue Nov 14 09:08:48 UTC 2023


In the test case:

`lateInlined1()` and `lateInlined2()` are inlined incrementally
because they are invoked wih a method handle which is known constant
only after igvn. For the failure to reproduce, `lateInlined2()` must
be inlined after `lateInlined1()` which depends on igvn processing
order (that's why the test needs `StressIGVN`). `lateInlined1()` has 2
virtual calls that are inlined with bimorphic inlining. At each call
site, exception state is merged from `A.m()` and `B.m()`, the 2
methods that are inlined. `c` is casted to non null in `A.m()`. At the
first call site, `c` is live and merging the exception states causes
the creation of a `Phi` for `c` that merges `c` and the cast to non
null of `c`. At the second call site, `c` is not live so it's ignored
when merging exception states. When the exception states for the 2
call sites are combined, the region that merges the states at the
first call site is extended to have 4 inputs but the `Phi` for `c` at
the first call site is left with 2 inputs. When `lateInlined2()` is
inlined, it records a replaced node for a cast of `c` to non null. On
completion of incremental inlining, that replaced nodes is "applied".
In the process, the dead `Phi` for `c` created at the previous
incremental inline is found and because it has less inputs that its
region, the crash occurs.

The fix I propose is to simply ignore phi nodes that don't have the
same number of inputs as their region because they can only be a dead
Phi.

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

Commit messages:
 - fix & test

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

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


More information about the hotspot-compiler-dev mailing list