1 /* { dg-require-effective-target vect_int } */ 2 3 #include "tree-vect.h" 4 5 int x[1024], y[1024], z[1024]; 6 7 int __attribute__((noinline,noclone)) foo(int n)8foo (int n) 9 { 10 int sum = 0; 11 /* Can vectorize this. */ 12 for (int i = 0; i < n; ++i) 13 sum = (y[i] - (x[i] - sum)); 14 return sum; 15 } 16 17 int __attribute__((noinline,noclone)) bar(int n)18bar (int n) 19 { 20 int sum = 0; 21 /* Cannot vectorize this, sum is negated. */ 22 for (int i = 0; i < n; ++i) 23 sum = z[i] - (y[i] - (x[i] - sum)); 24 return sum; 25 } 26 27 int main()28main() 29 { 30 check_vect (); 31 for (int i = 0; i < 1024; ++i) 32 { 33 x[i] = i; 34 y[i] = i + 1; 35 z[i] = 0; 36 __asm__ volatile ("" : : : "memory"); 37 } 38 if (foo (1024) != 1024) 39 __builtin_abort (); 40 if (bar (1023) != -1 || bar (1024) != 0) 41 __builtin_abort (); 42 return 0; 43 } 44 45 /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" } } */ 46