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