User account creation filtered due to spam.
// David Li
Gcc's scalar replacement and predictive commoning implementation is very good. There are some missing cases. Handling output dependence is one of them.
Handling of output dependence. In this case, the store at (1) is dead except for the last iteration -- it should be sinked out of the loop. (-O3 -fno-tree-vectorize)
void foo(int n)
int i = 1;
for(; i < n; i++)
a[i+1] =i; // (1)
a[i] = i+1;