On 05/02/2025 08:05, Tamar Christina wrote:
> 
> 
> > -----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, now pushed to trunk (after rebasing and re-testing) as
g:cfdb961588ba318a78e995d2e2cde43130acd993.

Alex

> 
> Thanks!
> Tamar
> 
> > Honza

Reply via email to