RFR: 8340532: C2: assert(is_OuterStripMinedLoop()) failed: invalid node class: IfTrue

Christian Hagedorn chagedorn at openjdk.org
Thu Nov 7 15:05:44 UTC 2024


On Thu, 7 Nov 2024 14:42:41 GMT, Roland Westrelin <roland at openjdk.org> wrote:

> A `CountedLoopEnd` (that marks the end of a still existing
> `CountedLoop`) is optimized out because a dominating identical
> `CountedLoopEnd` (that no longer marks the end of an existing
> `CountedLoop` but was left behind by previous loop opts) is
> found. That causes the path out of `CountedLoopEnd` to become dead
> including the `OuterStripMinedLoopEnd`. The `OuterStripMinedLoop`
> looses its backedge as a consequence. The `CountedLoop` is still
> marked as strip mined but the outer loop doesn't exist anymore.
> 
> The fix I propose for this corner case is to simply detect when that
> happens (during igvn AFAICT) and clear the strip mined flag from the
> `CountedLoop`.

Looks reasonable to me.

test/hotspot/jtreg/compiler/loopstripmining/TestIdenticalDominatingCLE.java line 28:

> 26:  * @bug 8340532
> 27:  * @summary C2: assert(is_OuterStripMinedLoop()) failed: invalid node class: IfTrue
> 28:  *

Since you use C2 only flags, you should add:
Suggestion:

 * @requires vm.compiler2.enabled

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

Marked as reviewed by chagedorn (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/21956#pullrequestreview-2421244527
PR Review Comment: https://git.openjdk.org/jdk/pull/21956#discussion_r1832837462


More information about the hotspot-compiler-dev mailing list