RFR: 8370332: C2 SuperWord: SIGSEGV because PhaseIdealLoop::split_thru_phi left dead nodes in loop _body [v3]

Emanuel Peter epeter at openjdk.org
Mon Nov 3 10:20:52 UTC 2025


> Analysis:
> `split_thru_phi` can split a node out of the loop, through some loop phi. As a consequence, that node and the phi we split through can become dead. But `split_thru_phi` did not have any logic to yank the dead node and phi from the `_body`. If this happens in the same loop-opts-phase as a later SuperWord, and that SuperWord pass somehow accesses that loop `_body`, then we may find dead nodes, which is not expected.
> 
> It is not ok that `split_thru_phi` leaves dead nodes in the `_body`, so they have to be yanked.
> 
> What I did additionally: I went through all uses of `split_thru_phi`, and moved the `replace_node` from the call-site to the method itself. Removing the node and yanking from `_body` conceptually belongs together, so they should be together in code.
> 
> I suspect that `split_thru_phi` was broken for a long time already. But JDK26 changes in SuperWord started to check inputs of all nodes in `_body`, and that fails with dead nodes.
> 
> Future Work:
> - Continue work on making `VerifyLoopOptimizations` work again, we should assert that there are no dead nodes in the `_body`. We may do that with the following task, or a subsequent one.
>   - [JDK-8370332](https://bugs.openjdk.org/browse/JDK-8370332) Fix VerifyLoopOptimizations - step 3 - fix ctrl/loop

Emanuel Peter has updated the pull request incrementally with one additional commit since the last revision:

  Update src/hotspot/share/opto/loopopts.cpp
  
  Co-authored-by: Christian Hagedorn <christian.hagedorn at oracle.com>

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/27955/files
  - new: https://git.openjdk.org/jdk/pull/27955/files/98dbf27b..833085f2

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=27955&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=27955&range=01-02

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/27955.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/27955/head:pull/27955

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


More information about the hotspot-compiler-dev mailing list