Not pulling out obvious non-aliasing global from the loop

Zdenek Dvorak rakdver@atrey.karlin.mff.cuni.cz
Tue Aug 31 08:55:00 GMT 2004


Hello,

> >On Aug 25, 2004, at 8:33 PM, Andrew Pinski wrote:
> >
> >>While working on a loop pass, I noticed that we were not pulling out 
> >>the load
> >>from a global variable from a loop where it obviously cannot alias 
> >>anything in
> >>the loop.  This seems like it would hurt the vectorizer also.
> >>
> >>This example comes from bzip2:
> >>unsigned short *q;
> >>#define NOSB 10
> >>void h1(int last)
> >>{
> >>  int i;
> >>  for (i=0;i<last+NOSB;i++)
> >>    q[i] = 0;
> >>}
> >>
> >>Tree after lim:
> >
> >
> >I looked at this again with respect to lim and found that lim was doing
> >invariant load motion because the cost was not high enough,  I think
> >we need to change the cost for this case even though it increases
> >register pressure as we then can do other optimizations on the loop 
> >which
> >actually decrease it and maybe even vectorize the loop.
> 
> And here is the patch which I am testing to fix this.
> Is this the right approach or is something else needed?

it seems right to me.

Zdenek



More information about the Gcc-patches mailing list