RFR: 8323972: C2 compilation fails with assert(!x->as_Loop()->is_loop_nest_inner_loop()) failed: loop was transformed

Christian Hagedorn chagedorn at openjdk.org
Wed Mar 6 14:52:46 UTC 2024


On Thu, 22 Feb 2024 14:36:52 GMT, Roland Westrelin <roland 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).

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

PR Review: https://git.openjdk.org/jdk/pull/17965#pullrequestreview-1919967526


More information about the hotspot-compiler-dev mailing list