Ping
> -----Original Message-----
> From: Tamar Christina
> Sent: Friday, January 24, 2025 9:18 AM
> To: Alex Coplan <alex.cop...@arm.com>; gcc-patches@gcc.gnu.org
> Cc: Richard Biener <rguent...@suse.de>; Jan Hubicka <hubi...@ucw.cz>
> Subject: RE: [PATCH 3/4] vect: Ensure profile consistency when adding epilog
> guard [PR117790]
>
> ping
>
> > -----Original Message-----
> > From: Tamar Christina
> > Sent: Wednesday, January 15, 2025 2:08 PM
> > To: Alex Coplan <alex.cop...@arm.com>; gcc-patches@gcc.gnu.org
> > Cc: Richard Biener <rguent...@suse.de>; Jan Hubicka <hubi...@ucw.cz>
> > Subject: RE: [PATCH 3/4] vect: Ensure profile consistency when adding epilog
> > guard [PR117790]
> >
> > Ping
> >
> > > -----Original Message-----
> > > From: Alex Coplan <alex.cop...@arm.com>
> > > Sent: Monday, January 6, 2025 11:35 AM
> > > To: gcc-patches@gcc.gnu.org
> > > Cc: Richard Biener <rguent...@suse.de>; Jan Hubicka <hubi...@ucw.cz>;
> Tamar
> > > Christina <tamar.christ...@arm.com>
> > > Subject: [PATCH 3/4] vect: Ensure profile consistency when adding epilog
> > > guard
> > > [PR117790]
> > >
> > > This patch tries to make the CFG profile consistent when adding a guard
> > > edge to skip the epilog during peeling.
> > >
> > > The changes can be summarized as follows:
> > > - We avoid adding the guard edge entirely if the guard condition folds
> > > to false, otherwise the profile will become inconsistent since
> > > the cfgcleanup code doesn't attempt to update it on removing the dead
> > > edge.
> > > - If the guard condition instead folds to true, we account for this by
> > > giving the skip edge 100% probability (otherwise the profile will
> > > again become inconsistent when removing the other now-dead edge).
> > > - Finally, we use the new helper scale_loop_freqs_with_new_exit_count
> instead
> > > of scale_loop_profile to update the epilog frequencies / probabiltiies.
> > > We make the assumption here that if the IV exit is taken in the vector
> > > loop,
> > > then it will also be taken in the epilog (and not an early exit).
> > > Since we
> > > add the guard to the vector iv exit, we know any reduction in count
> > > associated with the epilog skip should be accounted for by a reduction
> > > in the
> > > epilog's iv exit edge count.
> > >
> > > Bootstrapped/regtested 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 (vect_do_peeling): Attempt to maintain
> > > consistency of the CFG profile when adding an epilog skip edge.
> > >
> > > gcc/testsuite/ChangeLog:
> > >
> > > PR tree-optimization/117790
> > > * gcc.dg/vect/vect-early-break-profile-1.c: New test.
> > > ---
> > > .../gcc.dg/vect/vect-early-break-profile-1.c | 10 ++++
> > > gcc/tree-vect-loop-manip.cc | 48 ++++++++++++++-----
> > > 2 files changed, 47 insertions(+), 11 deletions(-)
> > > create mode 100644 gcc/testsuite/gcc.dg/vect/vect-early-break-profile-1.c