RFR: 8305189: C2 failed "assert(_outcnt==1) failed: not unique" [v3]
Christian Hagedorn
chagedorn at openjdk.org
Tue May 23 06:36:53 UTC 2023
On Mon, 22 May 2023 15:10:33 GMT, Roland Westrelin <roland at openjdk.org> wrote:
>> pre/main/post loops are created for an inner loop of a loop nest but
>> assert predicates cause the main and post loops to be removed. The
>> OpaqueZeroTripGuard nodes for the loops are not removed: there's no
>> logic to trigger removal of the opaque nodes once the loops are no
>> longer there. With the inner loops gone, the outer loop becomes
>> candidate for optimizations and is unrolled which causes the zero trip
>> guards of the now removed loops to be duplicated and the opaque nodes
>> to have more than one use.
>>
>> The fix I propose is, using logic similar to
>> `PhaseIdealLoop::eliminate_useless_predicates()`, to check during loop
>> opts if every OpaqueZeroTripGuard node guards a loop and if not,
>> remove it.
>
> Roland Westrelin has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains four additional commits since the last revision:
>
> - test failure
> - Merge branch 'master' into JDK-8305189
> - review
> - fix & test
Would it still be required/useful to keep an `OpaqueZeroTripGuardNode` for such a counted loop inside an infinite loop?
-------------
PR Comment: https://git.openjdk.org/jdk/pull/13901#issuecomment-1558618408
More information about the hotspot-compiler-dev
mailing list