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.