RFR: 8275330: C2: assert(n->is_Root() || n->is_Region() || n->is_Phi() || n->is_MachMerge() || def_block->dominates(block)) failed: uses must be dominated by definitions

Roland Westrelin roland at openjdk.java.net
Wed Nov 17 12:23:03 UTC 2021


This is similar to previous bugs where:

- a cast/conv node captures a narrow type in a loop body because of a
  range check,

- the range check is optimized out of the loop, pre/main/post loop are
  created

- overunrolling causes the main loop to become unreachable (the range
  check, if still in the main loop, would fail), the cast transforms to
  top but c2 can't optimize the loop out

This was fixed by adding predicates above the main loop. With this
particular bug, the cast node is in the post loop. The fix I propose
is to also add predicates above the post loop. There are a few
locations in the code that cause a post loop to be added: either the
initial post loop or some other post loops for vectorization
support. I think the new predicates are needed in a all cases. To be
able to add predicates at these different points in the optimization
process, the new predicates are copied from the main loop predicates.

I also delayed folding of Opaque4 nodes to macro expansion rather than
post loop opts igvn. The reason for that is that I believe there's a
risk that an Opaque4 is removed (that is replaced by its input 2)
before its input 1 has a chance to constant fold. That wouldn't happen
with a debug build because we leave the tests in (that is replace the
Opaque4 node by its input 1) so that corner case is not properly
tested currently. The reason for leaving the tests in was to sanity
check that the tests are indeed correct.

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

Commit messages:
 - fix

Changes: https://git.openjdk.java.net/jdk/pull/6429/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6429&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8275330
  Stats: 189 lines in 8 files changed: 136 ins; 22 del; 31 mod
  Patch: https://git.openjdk.java.net/jdk/pull/6429.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/6429/head:pull/6429

PR: https://git.openjdk.java.net/jdk/pull/6429


More information about the hotspot-compiler-dev mailing list