Integrated: 8351392: C2 crash: failed: Expected Bool, but got OpaqueMultiversioning

Emanuel Peter epeter at openjdk.org
Mon Mar 10 09:47:59 UTC 2025


On Fri, 7 Mar 2025 10:35:58 GMT, Emanuel Peter <epeter at openjdk.org> wrote:

> With https://github.com/openjdk/jdk/pull/23865 I mark the `OpaqueMultiversioning` useless once there are no loops for the multiversioning any more. The idea was that this way the `multiversion_if` would be folded away once the loops are gone, and then we should not encounter the `OpaqueMultiversioning` in `PhaseIdealLoop::conditional_move`.
> 
> But there is a case where we do not remove the `OpaqueMultiversioning` fast enough, see the attached regression test:
> - The loops disappear during IGVN.
> - At the beginning of the next loop-opts we mark the `OpaqueMultiversioning` as useless.
> - Later during loop-opts we encounter the useless `OpaqueMultiversioning` in `PhaseIdealLoop::conditional_move`, and assert.
> - But in the IGVN after this loop-opts phase we would have constant folded the `OpaqueMultiversioning` and `multiversion_if` anyway... we just did not get there fast enough ;)
> 
> Hence I propose to just create an explicit bailout for useless `OpaqueMultiversioning` nodes in `PhaseIdealLoop::conditional_move`.

This pull request has now been integrated.

Changeset: 19b9f11c
Author:    Emanuel Peter <epeter at openjdk.org>
URL:       https://git.openjdk.org/jdk/commit/19b9f11c2ec37ef115c14adcfc31161786d46e95
Stats:     33 lines in 3 files changed: 33 ins; 0 del; 0 mod

8351392: C2 crash: failed: Expected Bool, but got OpaqueMultiversioning

Reviewed-by: thartmann, kvn, vlivanov, chagedorn

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

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


More information about the hotspot-compiler-dev mailing list