RFR: 8295788: C2 compilation hits "assert((mode == ControlAroundStripMined && use == sfpt) || !use->is_reachable_from_root()) failed: missed a node" [v3]
Roland Westrelin
roland at openjdk.org
Fri Nov 18 09:10:09 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).
Roland Westrelin has updated the pull request incrementally with one additional commit since the last revision:
more
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/11162/files
- new: https://git.openjdk.org/jdk/pull/11162/files/b824a622..c35cbf42
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=11162&range=02
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=11162&range=01-02
Stats: 7 lines in 1 file changed: 0 ins; 0 del; 7 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