The paper on Superblock Technique talks about a lot of compiler
optimizations to break data dependences. Another of these optimizations
useful for loops is to replace array variables by scalars.

for i = 1 to 10
 A[i+1] = A[i] + c

For such loops, there exists a memory dependencebetween two successive
iterations. But it is always the case that the current "i" is the
previous "i+1" and the current "i+1" is the next "i". So we can replace
loading of these array variables by passing them via registers to the
next iteration or in effect, treat the array values as scalars. This is
also renaming in a way.

Subramanian Rajagopalan