RFR: 8348572: C2 compilation asserts due to unexpected irreducible loop [v2]

Vladimir Kozlov kvn at openjdk.org
Tue Feb 4 17:30:19 UTC 2025


On Tue, 4 Feb 2025 07:20:22 GMT, Emanuel Peter <epeter at openjdk.org> wrote:

>> First, I am fine with this "band-aid" change. I understand that it simple replaces assert with bailout which is fine.
>> But I am trying to understand what it does.
>> 
>> There are few states when we come to this part of code:
>>  - `l` is or not marked as irreducible
>>  - `m` is or not marked with MaybeIrreducibleEntry (is it set only for not Loop?)
>>  - `m` is or not Loop 
>>  
>>  So we have 8 combinations. I would like to hear reasons in which cases we should bailout and in which not.
>
> @vnkozlov Does that help you, or do you have more questions?

Yes, thank you for explaining this to me. I think I got it finally.
So default `Region` state is `NeverIrreducibleEntry` and it set to `MaybeIrreducibleEntry` when we find it inside irreducible loop during parsing. And that is the only valid state (MaybeIrreducibleEntry) we allow in this part of code.
Yes, `Loop` node can't be irreducible and we should not allow it here too.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/23363#discussion_r1941597842


More information about the hotspot-compiler-dev mailing list