Hi, We now determine depnedencies across union fields correctly so 2 instead of 1 loops are vectorized.
regtsted x86_64-linux, comitted. * gcc.dg/vect/vect-35-big-array.c: Excpect 2 loops to be vectorized. * gcc.dg/vect/vect-35.c: Excpect 2 loops to be vectorized. diff --git a/gcc/testsuite/gcc.dg/vect/vect-35-big-array.c b/gcc/testsuite/gcc.dg/vect/vect-35-big-array.c index ca57a10f714..28a99c910fd 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-35-big-array.c +++ b/gcc/testsuite/gcc.dg/vect/vect-35-big-array.c @@ -20,10 +20,6 @@ int main1 () s.b[i] = i; } - /* Dependence analysis fails cause s.a and s.b may overlap. - Try to use runtime aliasing test with versioning, and - later versioning/vectorization are skipped because the - overlap is proven at compilation time. */ for (i = 0; i < N; i++) { s.a[i] = s.b[i] + 1; @@ -47,5 +43,4 @@ int main (void) } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { ia64-*-* sparc*-*-* } } } } */ -/* { dg-final { scan-tree-dump "can't determine dependence between" "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { xfail { ia64-*-* sparc*-*-* } } } } */ diff --git a/gcc/testsuite/gcc.dg/vect/vect-35.c b/gcc/testsuite/gcc.dg/vect/vect-35.c index 76fe32d68ad..a7ec0f16d4c 100644 --- a/gcc/testsuite/gcc.dg/vect/vect-35.c +++ b/gcc/testsuite/gcc.dg/vect/vect-35.c @@ -20,10 +20,6 @@ int main1 () s.b[i] = i; } - /* Dependence analysis fails cause s.a and s.b may overlap. - Try to use runtime aliasing test with versioning, and - later versioning/vectorization are skipped because the - overlap is proven at compilation time. */ for (i = 0; i < N; i++) { s.a[i] = s.b[i] + 1; @@ -47,5 +43,4 @@ int main (void) } -/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { xfail { ia64-*-* sparc*-*-* } } } } */ -/* { dg-final { scan-tree-dump "can't determine dependence between" "vect" } } */ +/* { dg-final { scan-tree-dump-times "vectorized 2 loops" 1 "vect" { xfail { ia64-*-* sparc*-*-* } } } } */