PR middle-end/77357 - strlen of constant strings not folded
[official-gcc.git] / gcc / testsuite / gcc.dg / goacc / nested-function-1.c
blobe17c0e2227fc84affe292bfa49be786a4234b94a
1 /* Exercise nested function decomposition, gcc/tree-nested.c. */
2 /* See gcc/testsuite/gfortran.dg/goacc/nested-function-1.f90 for the Fortran
3 version. */
5 int main ()
7 #define N 100
8 int nonlocal_arg;
9 int nonlocal_a[N];
10 int nonlocal_i;
11 int nonlocal_j;
13 for (int i = 0; i < N; ++i)
14 nonlocal_a[i] = 5;
15 nonlocal_arg = 5;
17 void local ()
19 int local_i;
20 int local_arg;
21 int local_a[N];
22 int local_j;
24 for (int i = 0; i < N; ++i)
25 local_a[i] = 5;
26 local_arg = 5;
28 #pragma acc kernels loop \
29 gang(num:local_arg) worker(local_arg) vector(local_arg) \
30 wait async(local_arg)
31 for (local_i = 0; local_i < N; ++local_i)
33 #pragma acc cache (local_a[local_i:5])
34 local_a[local_i] = 100;
35 #pragma acc loop seq tile(*)
36 for (local_j = 0; local_j < N; ++local_j)
38 #pragma acc loop auto independent tile(1)
39 for (local_j = 0; local_j < N; ++local_j)
43 #pragma acc kernels loop \
44 gang(static:local_arg) worker(local_arg) vector(local_arg) \
45 wait(local_arg, local_arg + 1, local_arg + 2) async
46 for (local_i = 0; local_i < N; ++local_i)
48 #pragma acc cache (local_a[local_i:4])
49 local_a[local_i] = 100;
50 #pragma acc loop seq tile(1)
51 for (local_j = 0; local_j < N; ++local_j)
53 #pragma acc loop auto independent tile(*)
54 for (local_j = 0; local_j < N; ++local_j)
59 void nonlocal ()
61 for (int i = 0; i < N; ++i)
62 nonlocal_a[i] = 5;
63 nonlocal_arg = 5;
65 #pragma acc kernels loop \
66 gang(num:nonlocal_arg) worker(nonlocal_arg) vector(nonlocal_arg) \
67 wait async(nonlocal_arg)
68 for (nonlocal_i = 0; nonlocal_i < N; ++nonlocal_i)
70 #pragma acc cache (nonlocal_a[nonlocal_i:3])
71 nonlocal_a[nonlocal_i] = 100;
72 #pragma acc loop seq tile(2)
73 for (nonlocal_j = 0; nonlocal_j < N; ++nonlocal_j)
75 #pragma acc loop auto independent tile(3)
76 for (nonlocal_j = 0; nonlocal_j < N; ++nonlocal_j)
80 #pragma acc kernels loop \
81 gang(static:nonlocal_arg) worker(nonlocal_arg) vector(nonlocal_arg) \
82 wait(nonlocal_arg, nonlocal_arg + 1, nonlocal_arg + 2) async
83 for (nonlocal_i = 0; nonlocal_i < N; ++nonlocal_i)
85 #pragma acc cache (nonlocal_a[nonlocal_i:2])
86 nonlocal_a[nonlocal_i] = 100;
87 #pragma acc loop seq tile(*)
88 for (nonlocal_j = 0; nonlocal_j < N; ++nonlocal_j)
90 #pragma acc loop auto independent tile(*)
91 for (nonlocal_j = 0; nonlocal_j < N; ++nonlocal_j)
96 local ();
97 nonlocal ();
99 return 0;