------- Comment #19 from rakdver at kam dot mff dot cuni dot cz  2010-07-07 
10:35 -------
Subject: Re:  [4.6 regression] RTL loop
        unrolling causes FAIL: gcc.dg/pr39794.c

> > > > I am not sure what you mean -- I may be misunderstanding how rtl alias 
> > > > analysis
> > > > works, but as far as I can tell, what unroller does (just preserving the
> > > > MEM_ATTRs) is conservatively correct (so, potentially it may make us 
> > > > believe
> > > > that there are dependences that are not really present, but it should 
> > > > not cause
> > > > a wrong-code bug).
> > > 
> > > Consider this simplified example:
> > > 
> > > for (i ...)
> > >   {
> > > /*A*/  t = a[i];
> > > /*B*/  a[i+1] = t;
> > >   }
> > > MEM_ATTRS would indicate that memory references in A and B do not alias.
> > 
> > but this is clearly wrong, since B in iteration X aliases with A in 
> > iteration
> > X+1.
> > So, not a problem in unroller.
> 
> It is not wrong.  You have the two identical pointers p = &a[i] and
> q = p + 1.  *p and *q do not alias.  Never.

Well, then you have some other definition of aliasing than me.  For me, two
memory references M1 and M2 do not alias, if on every code path, the locations
accessed by M1 and M2 are different.  With this definition, *p and *q may
alias,
as the example above shows.  What is your definition?


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44838

Reply via email to