Rebase.
[official-gcc.git] / libgomp / testsuite / libgomp.c / pr58392.c
blob6ca97adc2d3f2c0d892aa7db25e0004e5a1eb0e1
1 /* PR tree-optimization/58392 */
2 /* { dg-do run } */
3 /* { dg-options "-O2" } */
4 /* { dg-additional-options "-msse2" { target sse2_runtime } } */
5 /* { dg-additional-options "-mavx" { target avx_runtime } } */
7 extern void abort (void);
8 int d[32 * 32];
10 __attribute__((noinline, noclone)) int
11 foo (int a, int b)
13 int j, c = 0;
14 #pragma omp parallel for reduction(+: c)
15 for (j = 0; j < a; j += 32)
17 int l;
18 #pragma omp simd reduction(+: c)
19 for (l = 0; l < b; ++l)
20 c += d[j + l];
22 return c;
25 __attribute__((noinline, noclone)) int
26 bar (int a)
28 int j, c = 0;
29 #pragma omp parallel for simd reduction(+: c)
30 for (j = 0; j < a; ++j)
31 c += d[j];
32 return c;
35 __attribute__((noinline)) static int
36 baz (int a)
38 int j, c = 0;
39 #pragma omp simd reduction(+: c)
40 for (j = 0; j < a; ++j)
41 c += d[j];
42 return c;
45 int
46 main ()
48 int i;
49 for (i = 0; i < 32 * 32; i++)
50 d[i] = (i & 31);
51 if (foo (32 * 32, 32) != (31 * 32 / 2) * 32)
52 abort ();
53 if (bar (32 * 32) != (31 * 32 / 2) * 32)
54 abort ();
55 if (baz (32 * 32) != (31 * 32 / 2) * 32)
56 abort ();
57 return 0;