1 /* { dg-additional-options "-fdump-tree-oaccloops" } */
3 #pragma acc routine nohost
4 template <typename T> T
10 template<typename T, int I> T
11 oacc_parallel_copy (T a)
19 #pragma acc parallel num_gangs (a) num_workers (a) vector_length (a) default (none) copyout (b) copyin (a)
20 #pragma acc loop gang worker vector
21 for (int i = 0; i < 1; i++)
24 #pragma acc parallel num_gangs (a) copy (w, x, y, z)
26 for (int i = 0; i < 1; i++)
28 w = accDouble<char>(w);
29 x = accDouble<int>(x);
30 y = accDouble<float>(y);
31 z = accDouble<double>(z);
34 #pragma acc parallel num_gangs (a) if (1)
36 #pragma acc loop independent collapse (2)
37 for (int i = 0; i < a; i++)
38 for (int j = 0; j < 5; j++)
41 #pragma acc loop auto tile (I, 3)
42 for (int i = 0; i < a; i++)
43 for (int j = 0; j < 5; j++)
47 for (int i = 0; i < a; i++)
53 #pragma acc parallel num_workers (10)
54 #pragma acc loop worker
55 for (int i = 0; i < 1; i++)
57 #pragma acc atomic capture
60 #pragma acc atomic update
63 #pragma acc atomic read
66 #pragma acc atomic write
70 #pragma acc parallel reduction (+:c)
73 #pragma acc data if (1) copy (b)
81 #pragma acc enter data copyin (b)
82 #pragma acc parallel present (b)
87 #pragma acc update host (b)
88 #pragma acc update self (b)
89 #pragma acc update device (b)
90 #pragma acc exit data delete (b)
91 #pragma acc exit data finalize copyout (b)
92 #pragma acc exit data delete (b) finalize
97 template<typename T> T
98 oacc_kernels_copy (T a)
107 #pragma acc kernels num_gangs (a) num_workers (a) vector_length (a) default (none) copyout (b) copyin (a)
108 for (int i = 0; i < 1; i++)
111 #pragma acc kernels copy (w, x, y, z)
113 w = accDouble<char>(w);
114 x = accDouble<int>(x);
115 y = accDouble<float>(y);
116 z = accDouble<double>(z);
119 #pragma acc kernels copyout (b) copyin (a)
122 #pragma acc kernels loop reduction (+:c)
123 for (int i = 0; i < 10; i++)
126 #pragma acc data if (1) copy (b)
134 #pragma acc enter data copyin (b)
135 #pragma acc kernels present (b)
140 #pragma acc update host (b)
141 #pragma acc update self (b)
142 #pragma acc update device (b)
143 #pragma acc exit data delete (b)
144 #pragma acc exit data finalize copyout (b)
145 #pragma acc exit data delete (b) finalize
150 template<typename T, int I> T
151 oacc_serial_copy (T a)
159 #pragma acc serial default (none) copyout (b) copyin (a)
160 #pragma acc loop gang worker vector
161 for (int i = 0; i < 1; i++)
164 #pragma acc serial copy (w, x, y, z)
166 for (int i = 0; i < 1; i++)
168 w = accDouble<char>(w);
169 x = accDouble<int>(x);
170 y = accDouble<float>(y);
171 z = accDouble<double>(z);
174 #pragma acc serial if (1)
176 #pragma acc loop independent collapse (2)
177 for (int i = 0; i < a; i++)
178 for (int j = 0; j < 5; j++)
181 #pragma acc loop auto tile (I, 3)
182 for (int i = 0; i < a; i++)
183 for (int j = 0; j < 5; j++)
187 for (int i = 0; i < a; i++)
194 #pragma acc loop worker
195 for (int i = 0; i < 1; i++)
197 #pragma acc atomic capture
200 #pragma atomic update
203 #pragma acc atomic read
206 #pragma acc atomic write
210 #pragma acc serial reduction (+:c)
213 #pragma acc data if (1) copy (b)
221 #pragma acc enter data copyin (b)
222 #pragma acc serial present (b)
227 #pragma acc update host (b)
228 #pragma acc update self (b)
229 #pragma acc update device (b)
230 #pragma acc exit data delete (b)
231 #pragma acc exit data finalize copyout (b)
232 #pragma acc exit data delete (b) finalize
240 int b = oacc_parallel_copy<int, 4> (5);
241 int c = oacc_kernels_copy<int> (5);
242 int d = oacc_serial_copy<int, 6> (5);
247 /* { dg-final { scan-tree-dump-times {(?n)^OpenACC routine '[^']+' has 'nohost' clause\.$} 4 oaccloops } }
248 { dg-final { scan-tree-dump-times {(?n)^OpenACC routine 'T accDouble\(int\) \[with T = char\]' has 'nohost' clause\.$} 1 oaccloops { target { ! offloading_enabled } } } }
249 { dg-final { scan-tree-dump-times {(?n)^OpenACC routine 'accDouble<char>\(int\)char' has 'nohost' clause\.$} 1 oaccloops { target offloading_enabled } } }
250 { dg-final { scan-tree-dump-times {(?n)^OpenACC routine 'T accDouble\(int\) \[with T = int\]' has 'nohost' clause\.$} 1 oaccloops { target { ! offloading_enabled } } } }
251 { dg-final { scan-tree-dump-times {(?n)^OpenACC routine 'accDouble<int>\(int\)int' has 'nohost' clause\.$} 1 oaccloops { target offloading_enabled } } }
252 { dg-final { scan-tree-dump-times {(?n)^OpenACC routine 'T accDouble\(int\) \[with T = float\]' has 'nohost' clause\.$} 1 oaccloops { target { ! offloading_enabled } } } }
253 { dg-final { scan-tree-dump-times {(?n)^OpenACC routine 'accDouble<float>\(int\)float' has 'nohost' clause\.$} 1 oaccloops { target offloading_enabled } } }
254 { dg-final { scan-tree-dump-times {(?n)^OpenACC routine 'T accDouble\(int\) \[with T = double\]' has 'nohost' clause\.$} 1 oaccloops { target { ! offloading_enabled } } } }
255 { dg-final { scan-tree-dump-times {(?n)^OpenACC routine 'accDouble<double>\(int\)double' has 'nohost' clause\.$} 1 oaccloops { target offloading_enabled } } }
256 TODO See PR101551 for 'offloading_enabled' differences. */