RFR: 8295788: C2 compilation hits "assert((mode == ControlAroundStripMined && use == sfpt) || !use->is_reachable_from_root()) failed: missed a node"
Roland Westrelin
roland at openjdk.org
Tue Nov 15 11:47:56 UTC 2022
This failure is similar to previous failures with loop strip mining: a
node is encountered that has control set in the outer strip mined loop
but is not reachable from the safepoint. There's already logic in loop
cloning to find those and fix their control to be outside the
loop. Usually a node ends up in the outer loop because some of its
inputs is in the outer loop. The current logic to catch nodes that are
erroneously assigned control in the outer loop is to start from
safepoint's inputs and look for uses with incorrect control. That
doesn't work in this case because: 1) the node is created by
IdealLoopTree::reassociate in the outer loop because its inputs are
indeed there 2) but a pass of split if updates the control to be
inside the inner loop.
To fix this, I propose reusing the existing clone_outer_loop_helper()
but apply it to the loop body as well. I had to tweak that method
because I ran into cases of dead nodes still reachable from a node in
the loop body but removed from the _body list by
IdealLoopTree::DCE_loop_body() (and as a result not cloned).
-------------
Commit messages:
- test
- fix
Changes: https://git.openjdk.org/jdk/pull/11162/files
Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=11162&range=00
Issue: https://bugs.openjdk.org/browse/JDK-8295788
Stats: 79 lines in 2 files changed: 68 ins; 0 del; 11 mod
Patch: https://git.openjdk.org/jdk/pull/11162.diff
Fetch: git fetch https://git.openjdk.org/jdk pull/11162/head:pull/11162
PR: https://git.openjdk.org/jdk/pull/11162
More information about the hotspot-compiler-dev
mailing list