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