https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117014
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |RESOLVED
Resolution|--- |WORKSFORME
--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
As 'k' is arr1[i] + arr2[i] you can at most use vector gather to implement
data[i+k] vectorized but then you have
t.c:5:17: missed: possible alias involving gather/scatter between *_5 and
data[_8]
t.c:4:22: missed: bad data dependence.
altering the testcase slightly to
int data[100];
void f(int *arr1, int * __restrict arr2)
{
for(int i = 0; i < 100; i++){
arr2[i] = -arr1[i];
int k = arr1[i] + arr2[i];
data[i] = data[i + k] + 1;
}
}
get's you the desired simplification k == 0. Otherwise the store to arr2[i]
can alter arr1[i] since arr1 and arr2 can alias.