RFR: 8305189: C2 failed "assert(_outcnt==1) failed: not unique"
Roland Westrelin
roland at openjdk.org
Wed May 10 11:33:30 UTC 2023
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.
-------------
Commit messages:
- fix & test
Changes: https://git.openjdk.org/jdk/pull/13901/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=13901&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8305189
Stats: 134 lines in 5 files changed: 134 ins; 0 del; 0 mod
Patch: https://git.openjdk.org/jdk/pull/13901.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/13901/head:pull/13901
PR: https://git.openjdk.org/jdk/pull/13901
More information about the hotspot-compiler-dev
mailing list