1 /* { dg-do run } */
2 /* { dg-additional-options "-msse2" { target sse2_runtime } } */
3 /* { dg-additional-options "-mavx" { target avx_runtime } } */
4 /* { dg-additional-options "-std=c99" {target c } } */
5 
6 int
main()7 main ()
8 {
9   int b, c = 0;
10   b = 7;
11   #pragma omp simd linear(b:2) reduction(+:c)
12   for (int i = 0; i < 64; i++)
13     {
14       c = c + (b != 7 + 2 * i);
15       b = b + 2;
16     }
17   if (c || b != 7 + 64 * 2)
18     __builtin_abort ();
19   b = 7;
20   #pragma omp simd linear(b:3) reduction(+:c)
21   for (int i = 0; i < 64; i += 4)
22     {
23       c = c + (b != 7 + i / 4 * 3);
24       b = b + 3;
25     }
26   if (c || b != 7 + 16 * 3)
27     __builtin_abort ();
28   b = 7;
29   #pragma omp simd collapse (2) linear(b:2) reduction(+:c)
30   for (int i = 0; i < 8; i++)
31     for (int j = 0; j < 8; j++)
32       {
33 	c = c + (b != 7 + 2 * j + 2 * 8 * i);
34 	b = b + 2;
35       }
36   if (c || b != 7 + 64 * 2)
37     __builtin_abort ();
38   b = 7;
39   #pragma omp parallel for simd schedule (static, 4) linear(b:2) reduction(+:c)
40   for (int i = 0; i < 64; i++)
41     {
42       c = c + (b != 7 + 2 * i);
43       b = b + 2;
44     }
45   if (c || b != 7 + 64 * 2)
46     __builtin_abort ();
47   b = 7;
48   #pragma omp parallel for simd schedule (static, 4) linear(b:3) reduction(+:c)
49   for (int i = 0; i < 64; i += 4)
50     {
51       c = c + (b != 7 + i / 4 * 3);
52       b = b + 3;
53     }
54   if (c || b != 7 + 16 * 3)
55     __builtin_abort ();
56   b = 7;
57   #pragma omp parallel for simd collapse (2) schedule (static, 4) linear(b:2) reduction(+:c)
58   for (int i = 0; i < 8; i++)
59     for (int j = 0; j < 8; j++)
60       {
61 	c = c + (b != 7 + 2 * j + 2 * 8 * i);
62 	b = b + 2;
63       }
64   if (c || b != 7 + 64 * 2)
65     __builtin_abort ();
66   return 0;
67 }
68