On 10/03/11 17:26, Richard Sandiford wrote:
> are necessarily equivalent to:
> 
> Loop 3:
>   A
>   B A
>   C B A
>   D C B A
>   A D C B
>   B A D C
>   C B A D
>   D C B A
>     D C B
>       D C
>         D

Sort of. The insns wouldn't rotate like this in a modulo-scheduled loop.

> Is that right?  So if D from iteration N*4 of loop 1 doesn't alias A
> from iteration N*4+1 of loop 1 (meaning loop 2 is correct) then it
> follows that the D from any iteration M doesn't alias A from M+1
> (meaning loop 3 is correct?  I'm still not convinced that follows
> for sufficiently clever alias analysis.

Is there any reason to believe that gcc does sufficiently clever alias
analysis? Again, think RTL loop unrolling, if you unroll 3 times

A1
B1
  A2
  B2
    A3
    B3

then you get identical insns An as well as Bn, and I don't believe
you'll ever get rtl alias analysis to answer differently for pairs
(B1/A2) and (B2/A3). So if there is a way for any of these pairs to
alias in any iteration, it must always detect the conflict.

Also consider that the code in sched-deps doesn't know which loop
iteration it is. Imagine a fully unrolled loop; insns Xn are identical
for a given X and all n. It doesn't matter where you put your
N-iteration window that you pass to sched-deps; since it doesn't know
about the initial conditions, it must act as if it could be from any
start iteration.

Put another way: unless I see a testcase that demonstrates otherwise, I
don't believe there is a problem. If there were a problem, it would be
with the alias analysis rather than the scheduling code.

> Reason for asking is that (AIUI) SMS used to use stronger memory
> disambiguation, but had to pull back to something more conservative
> for similar reasons.

Pointers? All I could find is a thread where rth seems to be of the same
opinion as me:

  http://gcc.gnu.org/ml/gcc/2004-09/msg01648.html


Bernd

Reply via email to