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)8 foo (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)18 bar (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()28 main()
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