This is the mail archive of the 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: Loop reversal

On Mon, Jul 17, 2017 at 11:56:50AM +0200, Richard Biener wrote:
> On Thu, Jul 13, 2017 at 2:18 AM, Kugan Vivekanandarajah
> <> wrote:
> > I am looking into reversing loop to increased efficiency. There is
> > already a PR22041 for this and an old patch
> > by Zdenek
> > which never made it to mainline.
> >
> > For constant loop count, ivcanon pass is adding reverse iv but this
> > not selected by ivopt.
> ivopt will never do loop reversal, if it would select this IV it would need to
> keep the original one as well or compute the old i based on the new.
> loop reversal needs dependence analysis and it's not clear if for the copy
> case you quote would be profitable (HW prefetchers like that?).  For your
> case it's also invalid as a and c may overlap.

If the goal is to make the induction variable end at 0, you can transform
[0..N) into [-N..0).  I have some old patches to do that; it probably
is better to start from scratch if you want it though.

Two issues that had to be solved for this:

1) ivopts didn't cost the cheaper loop ending condition correctly;
2) where you had say a[i] in the loop it will be (a+N)[i] afterwards,
and the calculation of a+N wasn't properly hoisted out of the loop.


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