RFR: 8292285: C2: remove unreachable block after NeverBranch-to-Goto conversion

Vladimir Kozlov kvn at openjdk.org
Mon Aug 15 15:45:25 UTC 2022


On Fri, 12 Aug 2022 12:42:29 GMT, Roberto Castañeda Lozano <rcastanedalo at openjdk.org> wrote:

> `NeverBranch` nodes introduce fake branches out of infinite loops to simplify intermediate optimizations that assume full reachability:
> ![before](https://user-images.githubusercontent.com/8792647/184355521-8b54725e-f7d2-4d37-a7ba-e0f7d1086421.png)
> `PhaseCFG::convert_NeverBranch_to_Goto()` transforms such nodes into simple `Goto` nodes, removing the fake branch and thus making its destination block unreachable:
> ![after](https://user-images.githubusercontent.com/8792647/184355553-3b862832-7302-4de2-aa29-86d7da0d985a.png)
> This changeset removes the unreachable destination block created by `PhaseCFG::convert_NeverBranch_to_Goto()` from the list of basic blocks:
> ![after-removal](https://user-images.githubusercontent.com/8792647/184355581-82038683-3f4f-4f4f-a8d7-16e507bfdf0c.png)
> Removing unreachable blocks created by `PhaseCFG::convert_NeverBranch_to_Goto()` simplifies late control-flow analysis (for example, recomputing dominators during the output phase as required for late barrier analysis in Generational ZGC) and slightly reduces the size of the generated code.
> 
> #### Testing
> 
> - hs-tier1-3 (windows-x64, linux-x64, linux-aarch64, and macosx-x64; release and debug mode). The changeset does not introduce new test cases because it is already exercised by at least two existing ones (`compiler/inlining/StringConcatInfiniteLoop.java`, `compiler/loopopts/TestInfiniteLoopNotInnerMost.java`).
> - fuzzing (~30 min. on each platform).

src/hotspot/share/opto/block.cpp line 606:

> 604:   for( int k = 1; dead->get_node(k)->is_Phi(); k++ )
> 605:     dead->get_node(k)->del_req(j);
> 606:   // If the fake exit block becomes unreachable, remove it from the block list.

Can you add missing {} in preceding code (lines 593 - 605)?

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

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


More information about the hotspot-compiler-dev mailing list