Integrated: 8318826: C2: "Bad graph detected in build_loop_late" with incremental inlining

Roland Westrelin roland at openjdk.org
Thu Nov 16 12:44:47 UTC 2023


On Thu, 9 Nov 2023 13:07:55 GMT, Roland Westrelin <roland at openjdk.org> wrote:

> In test case, `test1()`, `inlined1()` returns null which is used as
> receiver for the `notInlined()` virtual call. On the fallthrough
> projection of the call, the receiver is casted to not null. In the
> case of `test1()` the fallthrough should be unreachable:
> `CatchNode::Value()` makes that path dead if it is a projection of a
> virtual call with a null receiver. When `test1()` is compiled with
> incremental inlining, before `inlined1()` is inlined, the receiver of
> the virtual call is not known to be null so the fallthrough path is
> not killed. When it is inlined, the first input argument to the
> virtual call node is updated to be null. So that node is pushed on the
> igvn work list. But the `CatchNode` that's not change in the the
> process is not. As a result, the fallthrough path of the virtual call
> is not killed. The input to the cast node in the fallthrough path is
> changed to null which causes that node to become top. That causes the
> crash.
> 
> IGVN has logic to enqueue nodes that are related to an edge change but
> are not directly modified. We would need similar logic to be called
> from late inlining code. This change refactors the igvn logic so it
> can be called from elsewhere.
> 
> `test2()` is similar to `test1()` except the return of the inlined
> method `inlined2()` is not set to null. Instead, a replaced node is
> recorded from `a` to null (because class `D` is unrelated to `A` so
> casting a `A` to `D` successfully only happens for null) and applied
> when `inlined2()` is late inlined.

This pull request has now been integrated.

Changeset: 6868b371
Author:    Roland Westrelin <roland at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/6868b371c68cddbfaef4f5c6800d2c5ed64fb70f
Stats:     344 lines in 5 files changed: 160 ins; 15 del; 169 mod

8318826: C2: "Bad graph detected in build_loop_late" with incremental inlining

Reviewed-by: thartmann, chagedorn, kvn

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

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


More information about the hotspot-compiler-dev mailing list