From 767326bfc7b41098a6e36fdfa8a1e60618a476fb Mon Sep 17 00:00:00 2001 From: Saranya Natarajan Date: Wed, 11 Jun 2025 15:43:19 +0200 Subject: [PATCH] Initial Fix --- src/hotspot/share/opto/loopTransform.cpp | 7 +++++++ src/hotspot/share/opto/phasetype.hpp | 6 ++++++ .../jtreg/compiler/lib/ir_framework/CompilePhase.java | 6 ++++++ 3 files changed, 19 insertions(+) diff --git a/src/hotspot/share/opto/loopTransform.cpp b/src/hotspot/share/opto/loopTransform.cpp index 58105afd9d5..7a7b279ef64 100644 --- a/src/hotspot/share/opto/loopTransform.cpp +++ b/src/hotspot/share/opto/loopTransform.cpp @@ -1399,6 +1399,7 @@ void PhaseIdealLoop::insert_pre_post_loops(IdealLoopTree *loop, Node_List &old_n CountedLoopNode *post_head = nullptr; Node* post_incr = incr; Node* main_exit = insert_post_loop(loop, old_new, main_head, main_end, post_incr, limit, post_head); + C->print_method(PHASE_AFTER_POST_LOOP, 4, main_head); //------------------------------ // Step B: Create Pre-Loop. @@ -1613,8 +1614,10 @@ void PhaseIdealLoop::insert_vector_post_loop(IdealLoopTree *loop, Node_List &old Node *limit = main_end->limit(); // In this case we throw away the result as we are not using it to connect anything else. + C->print_method(PHASE_BEFORE_POST_LOOP, 4, main_head); CountedLoopNode *post_head = nullptr; insert_post_loop(loop, old_new, main_head, main_end, incr, limit, post_head); + C->print_method(PHASE_AFTER_POST_LOOP, 4, main_head); // It's difficult to be precise about the trip-counts // for post loops. They are usually very short, @@ -3077,6 +3080,7 @@ bool IdealLoopTree::do_remove_empty_loop(PhaseIdealLoop *phase) { return false; } } + phase->C->print_method(PHASE_BEFORE_REMOVE_EMPTY_LOOP, 4, cl); if (cl->is_pre_loop()) { // If the loop we are removing is a pre-loop then the main and post loop // can be removed as well. @@ -3179,6 +3183,7 @@ bool IdealLoopTree::do_remove_empty_loop(PhaseIdealLoop *phase) { phase->_igvn.replace_input_of(cl->loopexit(), CountedLoopEndNode::TestValue, zero); phase->C->set_major_progress(); + phase->C->print_method(PHASE_AFTER_REMOVE_EMPTY_LOOP, 4, cl); return true; } @@ -3331,6 +3336,7 @@ bool IdealLoopTree::do_one_iteration_loop(PhaseIdealLoop *phase) { } #endif + phase->C->print_method(PHASE_BEFORE_ONE_ITERATION_LOOP, 4, cl); Node *init_n = cl->init_trip(); // Loop boundaries should be constant since trip count is exact. assert((cl->stride_con() > 0 && init_n->get_int() + cl->stride_con() >= cl->limit()->get_int()) || @@ -3340,6 +3346,7 @@ bool IdealLoopTree::do_one_iteration_loop(PhaseIdealLoop *phase) { // and all loop-invariant uses of the exit values will be correct. phase->_igvn.replace_node(cl->phi(), cl->init_trip()); phase->C->set_major_progress(); + phase->C->print_method(PHASE_AFTER_ONE_INTERATION_LOOP, 4, cl); return true; } diff --git a/src/hotspot/share/opto/phasetype.hpp b/src/hotspot/share/opto/phasetype.hpp index 2546b319762..9189c64994d 100644 --- a/src/hotspot/share/opto/phasetype.hpp +++ b/src/hotspot/share/opto/phasetype.hpp @@ -71,6 +71,12 @@ flags(AFTER_RANGE_CHECK_ELIMINATION, "After Range Check Elimination") \ flags(BEFORE_PRE_MAIN_POST, "Before Pre/Main/Post Loops") \ flags(AFTER_PRE_MAIN_POST, "After Pre/Main/Post Loops") \ + flags(BEFORE_POST_LOOP, "Before Post Loops") \ + flags(AFTER_POST_LOOP, "After Post Loops") \ + flags(BEFORE_REMOVE_EMPTY_LOOP, "Before Remove Empty Loops") \ + flags(AFTER_REMOVE_EMPTY_LOOP, "After Remove Empty Loops") \ + flags(BEFORE_ONE_ITERATION_LOOP, "Before Replacing One Iteration Loops") \ + flags(AFTER_ONE_INTERATION_LOOP, "After Replacing One Iteration Loops") \ flags(AUTO_VECTORIZATION1_BEFORE_APPLY, "AutoVectorization 1, Before Apply") \ flags(AUTO_VECTORIZATION2_AFTER_REORDER, "AutoVectorization 2, After Apply Memop Reordering") \ flags(AUTO_VECTORIZATION3_AFTER_ADJUST_LIMIT, "AutoVectorization 3, After Adjusting Pre-Loop Limit") \ diff --git a/test/hotspot/jtreg/compiler/lib/ir_framework/CompilePhase.java b/test/hotspot/jtreg/compiler/lib/ir_framework/CompilePhase.java index 46900085b12..706649bd1d7 100644 --- a/test/hotspot/jtreg/compiler/lib/ir_framework/CompilePhase.java +++ b/test/hotspot/jtreg/compiler/lib/ir_framework/CompilePhase.java @@ -79,6 +79,12 @@ public enum CompilePhase { AFTER_RANGE_CHECK_ELIMINATION("After Range Check Elimination"), BEFORE_PRE_MAIN_POST("Before Pre/Main/Post Loops"), AFTER_PRE_MAIN_POST("After Pre/Main/Post Loops"), + BEFORE_POST_LOOP("Before Post Loops"), + AFTER_POST_LOOP("After Post Loop"), + BEFORE_REMOVE_EMPTY_LOOP("Before Remove Empty Loops"), + AFTER_REMOVE_EMPTY_LOOP("After Remove Empty Loops"), + BEFORE_ONE_ITERATION_LOOP("Before Replacing One Iteration Loops"), + AFTER_ONE_INTERATION_LOOP("After Replacing One Iteration Loops"), SUPERWORD1_BEFORE_SCHEDULE("Superword 1, Before Schedule"), SUPERWORD2_BEFORE_OUTPUT("Superword 2, Before Output"), SUPERWORD3_AFTER_OUTPUT("Superword 3, After Output"),