RFR: 8323972: C2 compilation fails with assert(!x->as_Loop()->is_loop_nest_inner_loop()) failed: loop was transformed
Roland Westrelin
roland at openjdk.org
Tue Mar 19 07:59:26 UTC 2024
On Wed, 6 Mar 2024 14:50:30 GMT, Christian Hagedorn <chagedorn at openjdk.org> wrote:
>> Long counted loop are transformed into a loop nest of 2 "regular"
>> loops and in a subsequent loop opts round, the inner loop is
>> transformed into a counted loop. The limit for the inner loop is set,
>> when the loop nest is created, so it's expected there's no need for a
>> loop limit check when the counted loop is created. The assert fires
>> because, when the counted loop is created, it is found that it needs a
>> loop limit check. The reason for that is that the limit is
>> transformed, between nest creation and counted loop creation, in a way
>> that the range of values of the inner loop's limit becomes
>> unknown. The limit when the nest is created is:
>>
>>
>> 111 ConL === 0 [[ 112 ]] #long:-9223372034707292158
>> 106 Phi === 105 20 94 [[ 112 ]] #long:9223372034707292160..9223372034707292164:www !orig=72 !jvms: TestInaccurateInnerLoopLimit::test @ bci:12 (line 40)
>> 112 AddL === _ 106 111 [[ 122 ]] !orig=[110]
>> 122 ConvL2I === _ 112 [[ ]] #int
>>
>>
>> The type of 122 is `2..6` but it is then transformed to:
>>
>>
>> 106 Phi === 105 20 154 [[ 191 130 137 ]] #long:9223372034707292160..9223372034707292164:www !orig=[72] !jvms: TestInaccurateInnerLoopLimit::test @ bci:12 (line 40)
>> 191 ConvL2I === _ 106 [[ 196 ]] #int
>> 195 ConI === 0 [[ 196 ]] #int:max-1
>> 196 SubI === _ 195 191 [[ 201 127 ]] !orig=[123]
>>
>>
>> That is the `(ConvL2I (AddL ...))` is transformed into a `(SubI
>> (ConvL2I ))`. `ConvL2I` for an input that's out of the int range of
>> values returns TypeInt::INT and the bounds of the limit are lost. I
>> propose adding a `CastII` after the `ConvL2I` so the range of values
>> of the limit doesn't get lost.
>
> Marked as reviewed by chagedorn (Reviewer).
@chhagedorn @eme64 thanks for the reviews!
-------------
PR Comment: https://git.openjdk.org/jdk/pull/17965#issuecomment-2006179280
More information about the hotspot-compiler-dev
mailing list