1 #define THE_LOOP \
2 for (i = j + 1; i < n; i += 3) \
3 a[i] = i
4
5 void __attribute__((noinline, noclone))
foo(int j,int n,int * a)6 foo (int j, int n, int *a)
7 {
8 #pragma omp parallel
9 {
10 #pragma omp single
11 {
12 int i;
13 #pragma omp target
14 #pragma omp teams
15 #pragma omp distribute parallel for shared(a) firstprivate(n) private(i) firstprivate(j)
16 THE_LOOP;
17 }
18 }
19 }
20
21 void __attribute__((noinline, noclone))
bar(int j,int n,int * a)22 bar (int j, int n, int *a)
23 {
24 int i;
25 THE_LOOP;
26 }
27
main(int argc,char ** argv)28 int main (int argc, char **argv)
29 {
30 int n = 32;
31 int *a = __builtin_malloc (sizeof (int) * n);
32 int *ref = __builtin_malloc (sizeof (int) * n);
33 int i, j = 4;
34
35 __builtin_memset (a, 0, sizeof (int) * n);
36 __builtin_memset (ref, 0, sizeof (int) * n);
37 bar (j, n, ref);
38 foo (j, n, a);
39 for (i = 0; i < n; i ++)
40 {
41 if (a[i] != ref[i])
42 __builtin_abort ();
43 }
44 return 0;
45 }
46