------- Comment #16 from amonakov at gcc dot gnu dot org  2010-07-07 09:54 
-------
(In reply to comment #15)
> 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.

Unrolling by 2 produces:
for (i ...)
  {
/*A */ t = a[i];
/*B */ a[i+1] = t;
/*A'*/ t = a[i+1];
/*B'*/ a[i+2] = t;
  }
Preserving MEM_ATTRS wrongly indicates that memory references in B and A' do
not alias, and the scheduler then may happen to lift A' above B.


-- 

amonakov at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |amonakov at gcc dot gnu dot
                   |                            |org


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

Reply via email to