> -----Original Message-----
> From: Jan Hubicka <hubi...@ucw.cz>
> Sent: Tuesday, February 4, 2025 4:25 PM
> To: Alex Coplan <alex.cop...@arm.com>
> Cc: gcc-patches@gcc.gnu.org; Richard Biener <rguent...@suse.de>; Tamar
> Christina <tamar.christ...@arm.com>
> Subject: Re: [PATCH 1/4] 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.
> >
> > Tested as a series on aarch64-linux-gnu, arm-linux-gnueabihf, and
> > x86_64-linux-gnu.  OK for trunk?
> >
> > Thanks,
> > Alex
> >
> > 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.
> > ---
> >  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 5d1b70aea43..53d36eaa25f 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;
> 
> Reading the code, we orignaly have new_preheader that is split into
> several pieces and loop exits are redirected to them and exit edges of
> pieces are redirected to the last part?
> 

Indeed, All alternate exits are redirected to the same block, as they share
the same induction values, that block and the main exit are then directed to
a join block which is created just above the guard block for the epilogue.


> In that case patch is OK.

Thanks!
Tamar

> Honza

Reply via email to