fortran: Factor the evaluation of MINLOC/MAXLOC's BACK argument
[official-gcc.git] / libgomp / testsuite / libgomp.c / scan-5.c
blobc50418264efc391201d252f4a28a430ee1035b52
1 /* { dg-require-effective-target size32plus } */
3 extern void abort (void);
4 int r, a[1024], b[1024];
6 __attribute__((noipa)) void
7 foo (int *a, int *b)
9 #pragma omp for reduction (inscan, +:r)
10 for (int i = 0; i < 1024; i++)
12 b[i] = r;
13 #pragma omp scan exclusive(r)
14 r += a[i];
18 __attribute__((noipa)) int
19 bar (void)
21 int s = 0;
22 #pragma omp parallel
23 #pragma omp for reduction (inscan, +:s)
24 for (int i = 0; i < 1024; i++)
26 b[i] = s;
27 #pragma omp scan exclusive(s)
28 s += 2 * a[i];
30 return s;
33 __attribute__((noipa)) void
34 baz (int *a, int *b)
36 #pragma omp parallel for reduction (inscan, +:r)
37 for (int i = 0; i < 1024; i++)
39 b[i] = r;
40 #pragma omp scan exclusive(r)
41 r += a[i];
45 __attribute__((noipa)) int
46 qux (void)
48 int s = 0;
49 #pragma omp parallel for reduction (inscan, +:s)
50 for (int i = 0; i < 1024; i++)
52 b[i] = s;
53 #pragma omp scan exclusive(s)
54 s += 2 * a[i];
56 return s;
59 int
60 main ()
62 int s = 0;
63 for (int i = 0; i < 1024; ++i)
65 a[i] = i;
66 b[i] = -1;
67 asm ("" : "+g" (i));
69 #pragma omp parallel
70 foo (a, b);
71 if (r != 1024 * 1023 / 2)
72 abort ();
73 for (int i = 0; i < 1024; ++i)
75 if (b[i] != s)
76 abort ();
77 else
78 b[i] = 25;
79 s += i;
81 if (bar () != 1024 * 1023)
82 abort ();
83 s = 0;
84 for (int i = 0; i < 1024; ++i)
86 if (b[i] != s)
87 abort ();
88 else
89 b[i] = -1;
90 s += 2 * i;
92 r = 0;
93 baz (a, b);
94 if (r != 1024 * 1023 / 2)
95 abort ();
96 s = 0;
97 for (int i = 0; i < 1024; ++i)
99 if (b[i] != s)
100 abort ();
101 else
102 b[i] = -25;
103 s += i;
105 if (qux () != 1024 * 1023)
106 abort ();
107 s = 0;
108 for (int i = 0; i < 1024; ++i)
110 if (b[i] != s)
111 abort ();
112 s += 2 * i;
114 return 0;