]> git.ipfire.org Git - thirdparty/gcc.git/blob - libgomp/testsuite/libgomp.oacc-c-c++-common/clauses-1.c
Merge current set of OpenACC changes from gomp-4_0-branch.
[thirdparty/gcc.git] / libgomp / testsuite / libgomp.oacc-c-c++-common / clauses-1.c
1 /* { dg-do run } */
2 /* { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } } */
3
4 #include <openacc.h>
5 #include <string.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <stdbool.h>
9
10 int
11 main (int argc, char **argv)
12 {
13 int N = 8;
14 float *a, *b, *c, *d;
15 int i;
16
17 a = (float *) malloc (N * sizeof (float));
18 b = (float *) malloc (N * sizeof (float));
19 c = (float *) malloc (N * sizeof (float));
20
21 for (i = 0; i < N; i++)
22 {
23 a[i] = 3.0;
24 b[i] = 0.0;
25 }
26
27 #pragma acc parallel copyin (a[0:N]) copyout (b[0:N])
28 {
29 int ii;
30
31 for (ii = 0; ii < N; ii++)
32 b[ii] = a[ii];
33 }
34
35 for (i = 0; i < N; i++)
36 {
37 if (b[i] != 3.0)
38 abort ();
39 }
40
41 if (acc_is_present (&a[0], (N * sizeof (float))))
42 abort ();
43
44 if (acc_is_present (&b[0], (N * sizeof (float))))
45 abort ();
46
47 for (i = 0; i < N; i++)
48 {
49 a[i] = 5.0;
50 b[i] = 1.0;
51 }
52
53 #pragma acc parallel copyin (a[0:N]) copyout (b[0:N])
54 {
55 int ii;
56
57 for (ii = 0; ii < N; ii++)
58 b[ii] = a[ii];
59 }
60
61 for (i = 0; i < N; i++)
62 {
63 if (b[i] != 5.0)
64 abort ();
65 }
66
67 if (acc_is_present (&a[0], (N * sizeof (float))))
68 abort ();
69
70 if (acc_is_present (&b[0], (N * sizeof (float))))
71 abort ();
72
73 for (i = 0; i < N; i++)
74 {
75 a[i] = 6.0;
76 b[i] = 0.0;
77 }
78
79 d = (float *) acc_copyin (&a[0], N * sizeof (float));
80
81 for (i = 0; i < N; i++)
82 {
83 a[i] = 9.0;
84 }
85
86 #pragma acc parallel present_or_copyin (a[0:N]) copyout (b[0:N])
87 {
88 int ii;
89
90 for (ii = 0; ii < N; ii++)
91 b[ii] = a[ii];
92 }
93
94 for (i = 0; i < N; i++)
95 {
96 if (b[i] != 6.0)
97 abort ();
98 }
99
100 if (!acc_is_present (&a[0], (N * sizeof (float))))
101 abort ();
102
103 if (acc_is_present (&b[0], (N * sizeof (float))))
104 abort ();
105
106 acc_free (d);
107
108 for (i = 0; i < N; i++)
109 {
110 a[i] = 6.0;
111 b[i] = 0.0;
112 }
113
114 #pragma acc parallel copyin (a[0:N]) present_or_copyout (b[0:N])
115 {
116 int ii;
117
118 for (ii = 0; ii < N; ii++)
119 b[ii] = a[ii];
120 }
121
122 for (i = 0; i < N; i++)
123 {
124 if (b[i] != 6.0)
125 abort ();
126 }
127
128 if (acc_is_present (&a[0], (N * sizeof (float))))
129 abort ();
130
131 if (acc_is_present (&b[0], (N * sizeof (float))))
132 abort ();
133
134 for (i = 0; i < N; i++)
135 {
136 a[i] = 5.0;
137 b[i] = 2.0;
138 }
139
140 d = (float *) acc_copyin (&b[0], N * sizeof (float));
141
142 #pragma acc parallel copyin (a[0:N]) present_or_copyout (b[0:N])
143 {
144 int ii;
145
146 for (ii = 0; ii < N; ii++)
147 b[ii] = a[ii];
148 }
149
150 for (i = 0; i < N; i++)
151 {
152 if (a[i] != 5.0)
153 abort ();
154
155 if (b[i] != 2.0)
156 abort ();
157 }
158
159 if (acc_is_present (&a[0], (N * sizeof (float))))
160 abort ();
161
162 if (!acc_is_present (&b[0], (N * sizeof (float))))
163 abort ();
164
165 acc_free (d);
166
167 if (acc_is_present (&b[0], (N * sizeof (float))))
168 abort ();
169
170 for (i = 0; i < N; i++)
171 {
172 a[i] = 3.0;
173 b[i] = 4.0;
174 }
175
176 #pragma acc parallel copy (a[0:N]) copyout (b[0:N])
177 {
178 int ii;
179
180 for (ii = 0; ii < N; ii++)
181 {
182 a[ii] = a[ii] + 1;
183 b[ii] = a[ii] + 2;
184 }
185 }
186
187 for (i = 0; i < N; i++)
188 {
189 if (a[i] != 4.0)
190 abort ();
191
192 if (b[i] != 6.0)
193 abort ();
194 }
195
196 if (acc_is_present (&a[0], (N * sizeof (float))))
197 abort ();
198
199 if (acc_is_present (&b[0], (N * sizeof (float))))
200 abort ();
201
202 for (i = 0; i < N; i++)
203 {
204 a[i] = 4.0;
205 b[i] = 7.0;
206 }
207
208 #pragma acc parallel present_or_copy (a[0:N]) present_or_copy (b[0:N])
209 {
210 int ii;
211
212 for (ii = 0; ii < N; ii++)
213 {
214 a[ii] = a[ii] + 1;
215 b[ii] = b[ii] + 2;
216 }
217 }
218
219 for (i = 0; i < N; i++)
220 {
221 if (a[i] != 5.0)
222 abort ();
223
224 if (b[i] != 9.0)
225 abort ();
226 }
227
228 if (acc_is_present (&a[0], (N * sizeof (float))))
229 abort ();
230
231 if (acc_is_present (&b[0], (N * sizeof (float))))
232 abort ();
233
234 for (i = 0; i < N; i++)
235 {
236 a[i] = 3.0;
237 b[i] = 7.0;
238 }
239
240 d = (float *) acc_copyin (&a[0], N * sizeof (float));
241 d = (float *) acc_copyin (&b[0], N * sizeof (float));
242
243 #pragma acc parallel present_or_copy (a[0:N]) present_or_copy (b[0:N])
244 {
245 int ii;
246
247 for (ii = 0; ii < N; ii++)
248 {
249 a[ii] = a[ii] + 1;
250 b[ii] = b[ii] + 2;
251 }
252 }
253
254 for (i = 0; i < N; i++)
255 {
256 if (a[i] != 3.0)
257 abort ();
258
259 if (b[i] != 7.0)
260 abort ();
261 }
262
263 if (!acc_is_present (&a[0], (N * sizeof (float))))
264 abort ();
265
266 if (!acc_is_present (&b[0], (N * sizeof (float))))
267 abort ();
268
269 d = (float *) acc_deviceptr (&a[0]);
270 acc_unmap_data (&a[0]);
271 acc_free (d);
272
273 d = (float *) acc_deviceptr (&b[0]);
274 acc_unmap_data (&b[0]);
275 acc_free (d);
276
277 for (i = 0; i < N; i++)
278 {
279 a[i] = 3.0;
280 b[i] = 7.0;
281 }
282
283 #pragma acc parallel copyin (a[0:N]) create (c[0:N]) copyout (b[0:N])
284 {
285 int ii;
286
287 for (ii = 0; ii < N; ii++)
288 {
289 c[ii] = a[ii];
290 b[ii] = c[ii];
291 }
292 }
293
294 for (i = 0; i < N; i++)
295 {
296 if (a[i] != 3.0)
297 abort ();
298
299 if (b[i] != 3.0)
300 abort ();
301 }
302
303 if (acc_is_present (&a[0], (N * sizeof (float))))
304 abort ();
305
306 if (acc_is_present (&b[0], (N * sizeof (float))))
307 abort ();
308
309 if (acc_is_present (&c[0], (N * sizeof (float))))
310 abort ();
311
312 for (i = 0; i < N; i++)
313 {
314 a[i] = 4.0;
315 b[i] = 8.0;
316 }
317
318 #pragma acc parallel copyin (a[0:N]) present_or_create (c[0:N]) copyout (b[0:N])
319 {
320 int ii;
321
322 for (ii = 0; ii < N; ii++)
323 {
324 c[ii] = a[ii];
325 b[ii] = c[ii];
326 }
327 }
328
329 for (i = 0; i < N; i++)
330 {
331 if (a[i] != 4.0)
332 abort ();
333
334 if (b[i] != 4.0)
335 abort ();
336 }
337
338 if (acc_is_present (&a[0], (N * sizeof (float))))
339 abort ();
340
341 if (acc_is_present (&b[0], (N * sizeof (float))))
342 abort ();
343
344 if (acc_is_present (&c[0], (N * sizeof (float))))
345 abort ();
346
347 for (i = 0; i < N; i++)
348 {
349 a[i] = 2.0;
350 b[i] = 5.0;
351 }
352
353 d = (float *) acc_malloc (N * sizeof (float));
354 acc_map_data (c, d, N * sizeof (float));
355
356 #pragma acc parallel copyin (a[0:N]) present_or_create (c[0:N]) copyout (b[0:N])
357 {
358 int ii;
359
360 for (ii = 0; ii < N; ii++)
361 {
362 c[ii] = a[ii];
363 b[ii] = c[ii];
364 }
365 }
366
367 for (i = 0; i < N; i++)
368 {
369 if (a[i] != 2.0)
370 abort ();
371
372 if (b[i] != 2.0)
373 abort ();
374 }
375
376 if (acc_is_present (a, (N * sizeof (float))))
377 abort ();
378
379 if (acc_is_present (b, (N * sizeof (float))))
380 abort ();
381
382 if (!acc_is_present (c, (N * sizeof (float))))
383 abort ();
384
385 d = (float *) acc_deviceptr (c);
386
387 acc_unmap_data (c);
388
389 acc_free (d);
390
391 for (i = 0; i < N; i++)
392 {
393 a[i] = 4.0;
394 b[i] = 8.0;
395 }
396
397 d = (float *) acc_malloc (N * sizeof (float));
398 acc_map_data (c, d, N * sizeof (float));
399
400 #pragma acc parallel copyin (a[0:N]) present (c[0:N]) copyout (b[0:N])
401 {
402 int ii;
403
404 for (ii = 0; ii < N; ii++)
405 {
406 c[ii] = a[ii];
407 b[ii] = c[ii];
408 }
409 }
410
411 for (i = 0; i < N; i++)
412 {
413 if (a[i] != 4.0)
414 abort ();
415
416 if (b[i] != 4.0)
417 abort ();
418 }
419
420 if (acc_is_present (a, (N * sizeof (float))))
421 abort ();
422
423 if (acc_is_present (b, (N * sizeof (float))))
424 abort ();
425
426 if (!acc_is_present (c, (N * sizeof (float))))
427 abort ();
428
429 acc_unmap_data (c);
430
431 acc_free (d);
432
433 for (i = 0; i < N; i++)
434 {
435 a[i] = 4.0;
436 b[i] = 8.0;
437 }
438
439 acc_copyin (a, N * sizeof (float));
440
441 d = (float *) acc_malloc (N * sizeof (float));
442 acc_map_data (b, d, N * sizeof (float));
443
444 d = (float *) acc_malloc (N * sizeof (float));
445 acc_map_data (c, d, N * sizeof (float));
446
447 #pragma acc parallel present (a[0:N]) present (c[0:N]) present (b[0:N])
448 {
449 int ii;
450
451 for (ii = 0; ii < N; ii++)
452 {
453 c[ii] = a[ii];
454 b[ii] = c[ii];
455 }
456 }
457
458 if (!acc_is_present (a, (N * sizeof (float))))
459 abort ();
460
461 if (!acc_is_present (b, (N * sizeof (float))))
462 abort ();
463
464 if (!acc_is_present (c, (N * sizeof (float))))
465 abort ();
466
467 acc_copyout (b, N * sizeof (float));
468
469 for (i = 0; i < N; i++)
470 {
471 if (a[i] != 4.0)
472 abort ();
473
474 if (b[i] != 4.0)
475 abort ();
476 }
477
478 d = (float *) acc_deviceptr (a);
479
480 acc_unmap_data (a);
481
482 acc_free (d);
483
484 d = (float *) acc_deviceptr (c);
485
486 acc_unmap_data (c);
487
488 acc_free (d);
489
490 for (i = 0; i < N; i++)
491 {
492 a[i] = 3.0;
493 b[i] = 6.0;
494 }
495
496 d = (float *) acc_malloc (N * sizeof (float));
497
498 #pragma acc parallel copyin (a[0:N]) deviceptr (d) copyout (b[0:N])
499 {
500 int ii;
501
502 for (ii = 0; ii < N; ii++)
503 {
504 d[ii] = a[ii];
505 b[ii] = d[ii];
506 }
507 }
508
509 for (i = 0; i < N; i++)
510 {
511 if (a[i] != 3.0)
512 abort ();
513
514 if (b[i] != 3.0)
515 abort ();
516 }
517
518 if (acc_is_present (a, (N * sizeof (float))))
519 abort ();
520
521 if (acc_is_present (b, (N * sizeof (float))))
522 abort ();
523
524 acc_free (d);
525
526 for (i = 0; i < N; i++)
527 {
528 a[i] = 6.0;
529 b[i] = 0.0;
530 }
531
532 d = (float *) acc_copyin (&a[0], N * sizeof (float));
533
534 for (i = 0; i < N; i++)
535 {
536 a[i] = 9.0;
537 }
538
539 #pragma acc parallel pcopyin (a[0:N]) copyout (b[0:N])
540 {
541 int ii;
542
543 for (ii = 0; ii < N; ii++)
544 b[ii] = a[ii];
545 }
546
547 for (i = 0; i < N; i++)
548 {
549 if (b[i] != 6.0)
550 abort ();
551 }
552
553 if (!acc_is_present (&a[0], (N * sizeof (float))))
554 abort ();
555
556 if (acc_is_present (&b[0], (N * sizeof (float))))
557 abort ();
558
559 acc_free (d);
560
561 for (i = 0; i < N; i++)
562 {
563 a[i] = 6.0;
564 b[i] = 0.0;
565 }
566
567 #pragma acc parallel copyin (a[0:N]) pcopyout (b[0:N])
568 {
569 int ii;
570
571 for (ii = 0; ii < N; ii++)
572 b[ii] = a[ii];
573 }
574
575 for (i = 0; i < N; i++)
576 {
577 if (b[i] != 6.0)
578 abort ();
579 }
580
581 if (acc_is_present (&a[0], (N * sizeof (float))))
582 abort ();
583
584 if (acc_is_present (&b[0], (N * sizeof (float))))
585 abort ();
586
587 for (i = 0; i < N; i++)
588 {
589 a[i] = 5.0;
590 b[i] = 7.0;
591 }
592
593 #pragma acc parallel copyin (a[0:N]) pcreate (c[0:N]) copyout (b[0:N])
594 {
595 int ii;
596
597 for (ii = 0; ii < N; ii++)
598 {
599 c[ii] = a[ii];
600 b[ii] = c[ii];
601 }
602 }
603
604 for (i = 0; i < N; i++)
605 {
606 if (a[i] != 5.0)
607 abort ();
608
609 if (b[i] != 5.0)
610 abort ();
611 }
612
613 if (acc_is_present (&a[0], (N * sizeof (float))))
614 abort ();
615
616 if (acc_is_present (&b[0], (N * sizeof (float))))
617 abort ();
618
619 if (acc_is_present (&c[0], (N * sizeof (float))))
620 abort ();
621
622 return 0;
623 }