RFR: 8336830: C2: assert(get_loop(lca)->_nest < n_loop->_nest || lca->in(0)->is_NeverBranch()) failed: must not be moved into inner loop [v2]
Tobias Hartmann
thartmann at openjdk.org
Mon Aug 26 05:23:10 UTC 2024
On Thu, 22 Aug 2024 15:09:19 GMT, Roland Westrelin <roland at openjdk.org> wrote:
>> A store is sunk from a counted loop into an enclosing infinite
>> loop. The assert fires because:
>>
>>
>> get_loop(lca)->_nest < n_loop->_nest
>>
>>
>> is false. That happens because the outer loop was found to be infinite
>> in the current loop opts pass. When that happens, it's not properly
>> attached to the loop tree. The second part of the assert was added to
>> cover a similar case:
>>
>>
>> lca->in(0)->is_NeverBranch()
>>
>>
>> but it doesn't work in this case bcause lca is not a projection of the
>> `NeverBranch`. It's the exit projection of the counted loop. The fix I
>> propose changes that part of the assert to test that lca is, indeed,
>> in an infinite loop in a way that's robust.
>>
>> I also removed some code that I believe to be useless following
>> 8335709.
>
> Roland Westrelin has updated the pull request incrementally with one additional commit since the last revision:
>
> undo unrelated change
Still good.
-------------
Marked as reviewed by thartmann (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/20334#pullrequestreview-2259766162
More information about the hotspot-compiler-dev
mailing list