3 /* Based on '../libgomp.oacc-fortran/asyncwait-1.f90'. */
5 /* { dg-additional-options "--param=openacc-kernels=decompose" } */
7 /* { dg-additional-options "-fopt-info-all-omp" }
8 { dg-additional-options "-foffload=-fopt-info-all-omp" } */
10 /* { dg-additional-options "--param=openacc-privatization=noisy" }
11 { dg-additional-options "-foffload=--param=openacc-privatization=noisy" }
12 Prune a few: uninteresting, and potentially varying depending on GCC configuration (data types):
13 { dg-prune-output {note: variable '[Di]\.[0-9]+' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} } */
15 /* It's only with Tcl 8.5 (released in 2007) that "the variable 'varName'
16 passed to 'incr' may be unset, and in that case, it will be set to [...]",
17 so to maintain compatibility with earlier Tcl releases, we manually
18 initialize counter variables:
19 { dg-line l_dummy[variable c_compute 0 c_loop_i 0] }
20 { dg-message "dummy" "" { target iN-VAl-Id } l_dummy } to avoid
21 "WARNING: dg-line var l_dummy defined, but not used". */
30 int *a
, *b
, *c
, *d
, *e
;
32 a
= (int*)malloc (N
* sizeof (*a
));
33 b
= (int*)malloc (N
* sizeof (*b
));
34 c
= (int*)malloc (N
* sizeof (*c
));
35 d
= (int*)malloc (N
* sizeof (*d
));
36 e
= (int*)malloc (N
* sizeof (*e
));
38 for (int i
= 0; i
< N
; ++i
)
44 #pragma acc data copy (a[0:N]) copy (b[0:N])
47 #pragma acc parallel async /* { dg-line l_compute[incr c_compute] } */
48 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_compute$c_compute } */
49 #pragma acc loop /* { dg-line l_loop_i[incr c_loop_i] } */
50 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
51 /* { dg-optimized "assigned OpenACC gang vector loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } */
52 for (int i
= 0; i
< N
; ++i
)
58 for (int i
= 0; i
< N
; ++i
)
66 for (int i
= 0; i
< N
; ++i
)
72 #pragma acc data copy (a[0:N]) copy (b[0:N])
74 #pragma acc parallel async (1) /* { dg-line l_compute[incr c_compute] } */
75 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_compute$c_compute } */
76 #pragma acc loop /* { dg-line l_loop_i[incr c_loop_i] } */
77 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
78 /* { dg-optimized "assigned OpenACC gang vector loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } */
79 for (int i
= 0; i
< N
; ++i
)
85 for (int i
= 0; i
< N
; ++i
)
87 if (a
[i
] != 2) abort ();
88 if (b
[i
] != 2) abort ();
91 for (int i
= 0; i
< N
; ++i
)
99 #pragma acc data copy (a[0:N]) copy (b[0:N]) copy (c[0:N]) copy (d[0:N])
102 #pragma acc parallel async (1) /* { dg-line l_compute[incr c_compute] } */
103 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_compute$c_compute } */
104 for (int i
= 0; i
< N
; ++i
)
105 b
[i
] = (a
[i
] * a
[i
] * a
[i
]) / a
[i
];
107 #pragma acc parallel async (1) /* { dg-line l_compute[incr c_compute] } */
108 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_compute$c_compute } */
109 for (int i
= 0; i
< N
; ++i
)
110 c
[i
] = (a
[i
] * 4) / a
[i
];
113 #pragma acc parallel async (1) /* { dg-line l_compute[incr c_compute] } */
114 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_compute$c_compute } */
115 #pragma acc loop /* { dg-line l_loop_i[incr c_loop_i] } */
116 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
117 /* { dg-optimized "assigned OpenACC gang vector loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } */
118 for (int i
= 0; i
< N
; ++i
)
119 d
[i
] = ((a
[i
] * a
[i
] + a
[i
]) / a
[i
]) - a
[i
];
124 for (int i
= 0; i
< N
; ++i
)
136 for (int i
= 0; i
< N
; ++i
)
145 #pragma acc data copy (a[0:N], b[0:N], c[0:N], d[0:N], e[0:N])
148 #pragma acc parallel async (1) /* { dg-line l_compute[incr c_compute] } */
149 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_compute$c_compute } */
150 for (int i
= 0; i
< N
; ++i
)
151 b
[i
] = (a
[i
] * a
[i
] * a
[i
]) / a
[i
];
153 #pragma acc parallel async (1) /* { dg-line l_compute[incr c_compute] } */
154 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_compute$c_compute } */
155 #pragma acc loop /* { dg-line l_loop_i[incr c_loop_i] } */
156 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
157 /* { dg-optimized "assigned OpenACC gang vector loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } */
158 for (int i
= 0; i
< N
; ++i
)
159 c
[i
] = (a
[i
] * 4) / a
[i
];
161 #pragma acc parallel async (1) /* { dg-line l_compute[incr c_compute] } */
162 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_compute$c_compute } */
163 #pragma acc loop /* { dg-line l_loop_i[incr c_loop_i] } */
164 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
165 /* { dg-optimized "assigned OpenACC gang vector loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } */
166 for (int i
= 0; i
< N
; ++i
)
167 d
[i
] = ((a
[i
] * a
[i
] + a
[i
]) / a
[i
]) - a
[i
];
170 #pragma acc parallel wait (1) async (1) /* { dg-line l_compute[incr c_compute] } */
171 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_compute$c_compute } */
172 #pragma acc loop /* { dg-line l_loop_i[incr c_loop_i] } */
173 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
174 /* { dg-optimized "assigned OpenACC gang vector loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } */
175 for (int i
= 0; i
< N
; ++i
)
176 e
[i
] = a
[i
] + b
[i
] + c
[i
] + d
[i
];
181 for (int i
= 0; i
< N
; ++i
)
195 for (int i
= 0; i
< N
; ++i
)
201 #pragma acc data copy (a[0:N]) copy (b[0:N])
204 #pragma acc kernels async
205 #pragma acc loop /* { dg-line l_loop_i[incr c_loop_i] } */
206 /* { dg-note {forwarded loop nest in OpenACC 'kernels' region to 'parloops' for analysis} {} { target *-*-* } l_loop_i$c_loop_i } */
207 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
208 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
209 /* { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } */
210 for (int i
= 0; i
< N
; ++i
)
216 for (int i
= 0; i
< N
; ++i
)
224 for (int i
= 0; i
< N
; ++i
)
230 #pragma acc data copy (a[0:N]) copy (b[0:N])
232 #pragma acc kernels async (1)
233 #pragma acc loop /* { dg-line l_loop_i[incr c_loop_i] } */
234 /* { dg-note {forwarded loop nest in OpenACC 'kernels' region to 'parloops' for analysis} {} { target *-*-* } l_loop_i$c_loop_i } */
235 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
236 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
237 /* { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } */
238 for (int i
= 0; i
< N
; ++i
)
244 for (int i
= 0; i
< N
; ++i
)
252 for (int i
= 0; i
< N
; ++i
)
260 #pragma acc data copy (a[0:N]) copy (b[0:N]) copy (c[0:N]) copy (d[0:N])
262 #pragma acc kernels async (1) /* { dg-line l_compute[incr c_compute] } */
263 /* { dg-note {OpenACC 'kernels' decomposition: variable 'i' declared in block requested to be made addressable} "" { target *-*-* } l_compute$c_compute } */
264 /* { dg-note {variable 'i' made addressable} {} { target *-*-* } l_compute$c_compute } */
265 /* { dg-note {variable 'i' declared in block is candidate for adjusting OpenACC privatization level} "" { target *-*-* } l_compute$c_compute } */
266 /* { dg-optimized "assigned OpenACC seq loop parallelism" "" { target { ! __OPTIMIZE__ } } l_compute$c_compute }
267 { dg-optimized "assigned OpenACC gang loop parallelism" "" { target { __OPTIMIZE__ } } l_compute$c_compute } */
268 /* { dg-note {beginning 'parloops' part in OpenACC 'kernels' region} {} { target *-*-* } .+1 } */
269 for (int i
= 0; i
< N
; ++i
)
270 b
[i
] = (a
[i
] * a
[i
] * a
[i
]) / a
[i
];
272 #pragma acc kernels async (1) /* { dg-line l_compute[incr c_compute] } */
273 /* { dg-note {OpenACC 'kernels' decomposition: variable 'i' declared in block requested to be made addressable} "" { target *-*-* } l_compute$c_compute } */
274 /* { dg-note {variable 'i' made addressable} {} { target *-*-* } l_compute$c_compute } */
275 /* { dg-note {variable 'i' declared in block is candidate for adjusting OpenACC privatization level} "" { target *-*-* } l_compute$c_compute } */
276 /* { dg-optimized "assigned OpenACC seq loop parallelism" "" { target { ! __OPTIMIZE__ } } l_compute$c_compute }
277 { dg-optimized "assigned OpenACC gang loop parallelism" "" { target { __OPTIMIZE__ } } l_compute$c_compute } */
278 /* { dg-note {beginning 'parloops' part in OpenACC 'kernels' region} {} { target *-*-* } .+1 } */
279 for (int i
= 0; i
< N
; ++i
)
280 c
[i
] = (a
[i
] * 4) / a
[i
];
282 #pragma acc kernels async (1)
283 #pragma acc loop /* { dg-line l_loop_i[incr c_loop_i] } */
284 /* { dg-note {forwarded loop nest in OpenACC 'kernels' region to 'parloops' for analysis} {} { target *-*-* } l_loop_i$c_loop_i } */
285 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
286 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
287 /* { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } */
288 for (int i
= 0; i
< N
; ++i
)
289 d
[i
] = ((a
[i
] * a
[i
] + a
[i
]) / a
[i
]) - a
[i
];
294 for (int i
= 0; i
< N
; ++i
)
306 for (int i
= 0; i
< N
; ++i
)
315 #pragma acc data copy (a[0:N], b[0:N], c[0:N], d[0:N], e[0:N])
317 #pragma acc kernels async (1) /* { dg-line l_compute[incr c_compute] } */
318 /* { dg-note {OpenACC 'kernels' decomposition: variable 'i' declared in block requested to be made addressable} "" { target *-*-* } l_compute$c_compute } */
319 /* { dg-note {variable 'i' made addressable} {} { target *-*-* } l_compute$c_compute } */
320 /* { dg-note {variable 'i' declared in block is candidate for adjusting OpenACC privatization level} "" { target *-*-* } l_compute$c_compute } */
321 /* { dg-optimized "assigned OpenACC seq loop parallelism" "" { target { ! __OPTIMIZE__ } } l_compute$c_compute }
322 { dg-optimized "assigned OpenACC gang loop parallelism" "" { target { __OPTIMIZE__ } } l_compute$c_compute } */
323 /* { dg-note {beginning 'parloops' part in OpenACC 'kernels' region} {} { target *-*-* } .+1 } */
324 for (int i
= 0; i
< N
; ++i
)
325 b
[i
] = (a
[i
] * a
[i
] * a
[i
]) / a
[i
];
327 #pragma acc kernels async (1)
328 #pragma acc loop /* { dg-line l_loop_i[incr c_loop_i] } */
329 /* { dg-note {forwarded loop nest in OpenACC 'kernels' region to 'parloops' for analysis} {} { target *-*-* } l_loop_i$c_loop_i } */
330 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
331 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
332 /* { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } */
333 for (int i
= 0; i
< N
; ++i
)
334 c
[i
] = (a
[i
] * 4) / a
[i
];
336 #pragma acc kernels async (1)
337 #pragma acc loop /* { dg-line l_loop_i[incr c_loop_i] } */
338 /* { dg-note {forwarded loop nest in OpenACC 'kernels' region to 'parloops' for analysis} {} { target *-*-* } l_loop_i$c_loop_i } */
339 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
340 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
341 /* { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } */
342 for (int i
= 0; i
< N
; ++i
)
343 d
[i
] = ((a
[i
] * a
[i
] + a
[i
]) / a
[i
]) - a
[i
];
345 #pragma acc kernels wait (1) async (1)
346 #pragma acc loop /* { dg-line l_loop_i[incr c_loop_i] } */
347 /* { dg-note {forwarded loop nest in OpenACC 'kernels' region to 'parloops' for analysis} {} { target *-*-* } l_loop_i$c_loop_i } */
348 /* { dg-note {variable 'i' declared in block isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
349 /* { dg-note {variable 'i' in 'private' clause isn't candidate for adjusting OpenACC privatization level: not addressable} "" { target *-*-* } l_loop_i$c_loop_i } */
350 /* { dg-optimized "assigned OpenACC seq loop parallelism" "" { target *-*-* } l_loop_i$c_loop_i } */
351 for (int i
= 0; i
< N
; ++i
)
352 e
[i
] = a
[i
] + b
[i
] + c
[i
] + d
[i
];
357 for (int i
= 0; i
< N
; ++i
)