https://gcc.gnu.org/g:cfdb961588ba318a78e995d2e2cde43130acd993

commit r15-7491-gcfdb961588ba318a78e995d2e2cde43130acd993
Author: Alex Coplan <alex.cop...@arm.com>
Date:   Tue Nov 26 17:48:14 2024 +0000

    vect: Set counts of early break exit blocks correctly [PR117790]
    
    This adds missing code to correctly set the counts of the exit blocks we
    create when building the CFG for a vectorized early break loop.
    
    gcc/ChangeLog:
    
            PR tree-optimization/117790
            * tree-vect-loop-manip.cc (slpeel_tree_duplicate_loop_to_edge_cfg):
            Set profile counts for {main,alt}_loop_exit_block.

Diff:
---
 gcc/tree-vect-loop-manip.cc | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/gcc/tree-vect-loop-manip.cc b/gcc/tree-vect-loop-manip.cc
index 06ca99eaab95..56a4e9a8b63f 100644
--- a/gcc/tree-vect-loop-manip.cc
+++ b/gcc/tree-vect-loop-manip.cc
@@ -1686,6 +1686,16 @@ slpeel_tree_duplicate_loop_to_edge_cfg (class loop 
*loop, edge loop_exit,
 
          set_immediate_dominator (CDI_DOMINATORS, new_preheader,
                                   loop->header);
+
+         /* Fix up the profile counts of the new exit blocks.
+            main_loop_exit_block was created by duplicating the
+            preheader, so needs its count scaling according to the main
+            exit edge's probability.  The remaining count from the
+            preheader goes to the alt_loop_exit_block, since all
+            alternative exits have been redirected there.  */
+         main_loop_exit_block->count = loop_exit->count ();
+         alt_loop_exit_block->count
+           = preheader->count - main_loop_exit_block->count;
        }
 
       /* Adjust the epilog loop PHI entry values to continue iteration.

Reply via email to