RFR: 8344251: C2: remove blackholes with dead control input

Marc Chevalier mchevalier at openjdk.org
Tue Apr 15 14:41:20 UTC 2025


When a BlackholeNode's control input becomes dead, the node is not removed causing the crash

 assert(!in->is_CFG()) failed: CFG Node with no controlling input?

In the case reported in the issue, after a round of peeling, a condition becomes constant, and the branch containing the blackhole becomes dead:

<img src="https://github.com/user-attachments/assets/f8e5ec85-ddf5-4018-a01e-30ea90d9d74f" width="400">
<img src="https://github.com/user-attachments/assets/626e40a1-be2f-4b1c-bc56-9760a26660f2" width="400">

I simply use `Node::remove_dead_region(PhaseGVN*, bool)` to remove the blackhole, as many other node types do.

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

Commit messages:
 - Format
 - Add test
 - remove_dead_region in Blackhole::Ideal

Changes: https://git.openjdk.org/jdk/pull/24663/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24663&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8344251
  Stats: 83 lines in 4 files changed: 83 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/24663.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24663/head:pull/24663

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


More information about the hotspot-compiler-dev mailing list