RFR: 8351392: C2 crash: failed: Expected Bool, but got OpaqueMultiversioning [v2]

Tobias Hartmann thartmann at openjdk.org
Fri Mar 7 14:32:16 UTC 2025


On Fri, 7 Mar 2025 12:20:05 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`.
>
> Emanuel Peter has updated the pull request incrementally with one additional commit since the last revision:
> 
>   for Christian

Looks good to me.

test/hotspot/jtreg/compiler/loopopts/superword/TestMultiversionRemoveUselessSlowLoop.java line 133:

> 131:     // Then the loops disappear during IGVN, and in the next loop-opts phase, the
> 132:     // OpaqueMultiversioning is marked useless, but then we already run
> 133:     // PhaseIdealLoop::conditional_move before the next IGVN round,  and find a

Suggestion:

    // PhaseIdealLoop::conditional_move before the next IGVN round, and find a

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

Marked as reviewed by thartmann (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/23943#pullrequestreview-2667405463
PR Review Comment: https://git.openjdk.org/jdk/pull/23943#discussion_r1985147772


More information about the hotspot-compiler-dev mailing list