RFR: 8344251: C2: remove blackholes with dead control input [v2]

Hendrik Schick duke at openjdk.org
Wed Apr 16 12:39:48 UTC 2025


On Wed, 16 Apr 2025 06:29:25 GMT, Marc Chevalier <mchevalier at openjdk.org> wrote:

>> 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.
>
> Marc Chevalier has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - Using PerMethod(Spec)?TrapLimit
>  - Address review comments

test/hotspot/jtreg/compiler/blackhole/DeadBhElimination.java line 64:

> 62:         // loop is detected as empty loop
> 63: 
> 64:         if(b == 78) { // dead

Suggestion:

        if (b == 78) { // dead

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

PR Review Comment: https://git.openjdk.org/jdk/pull/24663#discussion_r2046834769


More information about the hotspot-compiler-dev mailing list