This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][1/n] Fix PR81303


On Fri, 21 Jul 2017, Bin.Cheng wrote:

> On Fri, Jul 21, 2017 at 8:12 AM, Richard Biener <rguenther@suse.de> wrote:
> >
> > The following is sth I noticed when looking at a way to fix PR81303.
> > We happily compute a runtime cost model threshold that executes the
> > vectorized variant even though no vector iteration takes place due
> > to the number of prologue/epilogue iterations.  The following fixes
> > that -- note that if we do not know the prologue/epilogue counts
> > statically they are estimated at vf/2 which means there's still the
> > chance the vector iteration won't execute.  To fix that we'd have to
> > estimate those as vf-1 instead, sth we might consider doing anyway
> > given that we regularly completely peel the epilogues vf-1 times
> > in that case.  Maybe as followup.
> Hi,
> Do we consider disabling epilogue peeling if # of iters is unknown at
> compilation time?

Well, we peel which if size doesn't explode should be profitable because 
of better branch prediction.

>  When loop is versioned, could we share epilogue
> with versioned loop?  Epilogue was shared before?

When not versioning we share the epilogue, yes.  With versioning
we don't because we use the versioning code.  It looks like sharing
the epilogue makes RAs job harder though.

Richard.

> Thanks,
> bin
> >
> > Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.
> >
> > Richard.
> >
> > 2016-07-21  Richard Biener  <rguenther@suse.de>
> >
> >         PR tree-optimization/81303
> >         * tree-vect-loop.c (vect_estimate_min_profitable_iters): Take
> >         into account prologue and epilogue iterations when raising
> >         min_profitable_iters to sth at least covering one vector iteration.
> >
> > Index: gcc/tree-vect-loop.c
> > ===================================================================
> > --- gcc/tree-vect-loop.c        (revision 250384)
> > +++ gcc/tree-vect-loop.c        (working copy)
> > @@ -3702,8 +3702,9 @@ vect_estimate_min_profitable_iters (loop
> >                "  Calculated minimum iters for profitability: %d\n",
> >                min_profitable_iters);
> >
> > -  min_profitable_iters =
> > -       min_profitable_iters < vf ? vf : min_profitable_iters;
> > +  /* We want the vectorized loop to execute at least once.  */
> > +  if (min_profitable_iters < (vf + peel_iters_prologue + peel_iters_epilogue))
> > +    min_profitable_iters = vf + peel_iters_prologue + peel_iters_epilogue;
> >
> >    if (dump_enabled_p ())
> >      dump_printf_loc (MSG_NOTE, vect_location,
> 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]