RFR: 8347515: C2: assert(!success || (C->macro_count() == (old_macro_count - 1))) failed: elimination must have deleted one node from macro list [v5]
    Tobias Hartmann 
    thartmann at openjdk.org
       
    Thu May  8 11:48:58 UTC 2025
    
    
  
On Thu, 8 May 2025 09:47:11 GMT, Saranya Natarajan <duke at openjdk.org> wrote:
>> Issue: The assertion failure , `assert(!success || (C->macro_count() == (old_macro_count - 1))) failed: elimination must have deleted one node from macro list`, occurs when [loop striping mining  ](https://bugs.openjdk.org/browse/JDK-8186027)may create a [MaxL](https://bugs.openjdk.org/browse/JDK-8324655)  after macro expansion.
>> 
>> Analysis : Before the macro nodes are expanded in` expand_macro_nodes`, there is a process where nodes from the macro list are eliminated. This also includes elimination of  any `OuterStripMinedLoop` node in the macro list. The bug occurs due to the refining of the strip mined loop in `adjust_strip_mined_loop` function just before it is eliminated. In this case, a` MaxL` node is added to the macro list in `adjust_strip_mined_loop`. 
>> 
>> Fix: The fix involves performing the refining of the strip mined loop before elimination process. More specifically, moving the `adjust_strip_mined_loop` function outside the elimination loop.
>> 
>> Improvement:  The process of eliminating macro nodes by calling `eliminate_macro_nodes` and performing additional Opaque and LoopLimit nodes elimination in ` expand_macro_nodes` is unintuitive as suggested in [JDK-8325478 ](https://bugs.openjdk.org/browse/JDK-8325478) and the current fix should be moved along with the other elimination code.
>
> Saranya Natarajan has updated the pull request incrementally with one additional commit since the last revision:
> 
>   removing redundant comment
Looks good to me otherwise.
src/hotspot/share/opto/macro.cpp line 2354:
> 2352: 
> 2353: //------------------refine_strip_mined_loop_macro_node-------------------
> 2354: // Perform refining of strip mined loop node in the macro nodes list.
Suggestion:
// Perform refining of strip mined loop nodes in the macro nodes list.
src/hotspot/share/opto/macro.cpp line 2355:
> 2353: //------------------refine_strip_mined_loop_macro_node-------------------
> 2354: // Perform refining of strip mined loop node in the macro nodes list.
> 2355: void PhaseMacroExpand::refine_strip_mined_loop_macro_node() {
Suggestion:
void PhaseMacroExpand::refine_strip_mined_loop_macro_nodes() {
src/hotspot/share/opto/macro.cpp line 2471:
> 2469: //  Returns true if a failure occurred.
> 2470: bool PhaseMacroExpand::expand_macro_nodes() {
> 2471:   refine_strip_mined_loop_macro_node();
Suggestion:
  refine_strip_mined_loop_macro_nodes();
src/hotspot/share/opto/macro.hpp line 206:
> 204:   }
> 205: 
> 206:   void refine_strip_mined_loop_macro_node();
Suggestion:
  void refine_strip_mined_loop_macro_nodes();
-------------
Marked as reviewed by thartmann (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/24890#pullrequestreview-2824859469
PR Review Comment: https://git.openjdk.org/jdk/pull/24890#discussion_r2079556192
PR Review Comment: https://git.openjdk.org/jdk/pull/24890#discussion_r2079556743
PR Review Comment: https://git.openjdk.org/jdk/pull/24890#discussion_r2079556616
PR Review Comment: https://git.openjdk.org/jdk/pull/24890#discussion_r2079557080
    
    
More information about the hotspot-compiler-dev
mailing list