RFR: 8295788: C2 compilation hits "assert((mode == ControlAroundStripMined && use == sfpt) || !use->is_reachable_from_root()) failed: missed a node" [v3]

Tobias Hartmann thartmann at openjdk.org
Fri Nov 18 10:02:23 UTC 2022


On Fri, 18 Nov 2022 09:10:09 GMT, Roland Westrelin <roland at openjdk.org> wrote:

>> 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

Looks good, thanks for updating!

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

Marked as reviewed by thartmann (Reviewer).

PR: https://git.openjdk.org/jdk/pull/11162


More information about the hotspot-compiler-dev mailing list