Reset prologue_location before calling code_end
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-c-c++-common / nested-1.c
blob3e8b42527cf9b3ac5f44aebbef80380dc1471145
1 /* { dg-do run } */
2 /* { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } } */
4 #include <openacc.h>
5 #include <string.h>
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <stdbool.h>
10 int
11 main (int argc, char **argv)
13 int N = 8;
14 float *a, *b, *c, *d;
15 int i;
17 a = (float *) malloc (N * sizeof (float));
18 b = (float *) malloc (N * sizeof (float));
19 c = (float *) malloc (N * sizeof (float));
21 for (i = 0; i < N; i++)
23 a[i] = 3.0;
24 b[i] = 0.0;
27 #pragma acc data copyin (a[0:N]) copyout (b[0:N])
29 #pragma acc parallel
31 int ii;
33 for (ii = 0; ii < N; ii++)
34 b[ii] = a[ii];
38 for (i = 0; i < N; i++)
40 if (b[i] != 3.0)
41 abort ();
44 if (acc_is_present (&a[0], (N * sizeof (float))))
45 abort ();
47 if (acc_is_present (&b[0], (N * sizeof (float))))
48 abort ();
50 for (i = 0; i < N; i++)
52 a[i] = 5.0;
53 b[i] = 1.0;
56 #pragma acc data copyin (a[0:N]) copyout (b[0:N])
58 #pragma acc parallel
60 int ii;
62 for (ii = 0; ii < N; ii++)
63 b[ii] = a[ii];
67 for (i = 0; i < N; i++)
69 if (b[i] != 5.0)
70 abort ();
73 if (acc_is_present (&a[0], (N * sizeof (float))))
74 abort ();
76 if (acc_is_present (&b[0], (N * sizeof (float))))
77 abort ();
79 for (i = 0; i < N; i++)
81 a[i] = 6.0;
82 b[i] = 0.0;
85 d = (float *) acc_copyin (&a[0], N * sizeof (float));
87 for (i = 0; i < N; i++)
89 a[i] = 9.0;
92 #pragma acc data present_or_copyin (a[0:N]) copyout (b[0:N])
94 #pragma acc parallel
96 int ii;
98 for (ii = 0; ii < N; ii++)
99 b[ii] = a[ii];
103 for (i = 0; i < N; i++)
105 if (b[i] != 6.0)
106 abort ();
109 if (!acc_is_present (&a[0], (N * sizeof (float))))
110 abort ();
112 if (acc_is_present (&b[0], (N * sizeof (float))))
113 abort ();
115 acc_delete (&a[0], N * sizeof (float));
117 if (acc_is_present (&a[0], N * sizeof (float)))
118 abort ();
120 for (i = 0; i < N; i++)
122 a[i] = 6.0;
123 b[i] = 0.0;
126 #pragma acc data copyin (a[0:N]) present_or_copyout (b[0:N])
128 #pragma acc parallel
130 int ii;
132 for (ii = 0; ii < N; ii++)
133 b[ii] = a[ii];
137 for (i = 0; i < N; i++)
139 if (b[i] != 6.0)
140 abort ();
143 if (acc_is_present (&a[0], (N * sizeof (float))))
144 abort ();
146 if (acc_is_present (&b[0], (N * sizeof (float))))
147 abort ();
149 for (i = 0; i < N; i++)
151 a[i] = 5.0;
152 b[i] = 2.0;
155 d = (float *) acc_copyin (&b[0], N * sizeof (float));
157 #pragma acc data copyin (a[0:N]) present_or_copyout (b[0:N])
159 #pragma acc parallel
161 int ii;
163 for (ii = 0; ii < N; ii++)
164 b[ii] = a[ii];
168 for (i = 0; i < N; i++)
170 if (a[i] != 5.0)
171 abort ();
173 if (b[i] != 2.0)
174 abort ();
177 if (acc_is_present (&a[0], (N * sizeof (float))))
178 abort ();
180 if (!acc_is_present (&b[0], (N * sizeof (float))))
181 abort ();
183 acc_delete (&b[0], N * sizeof (float));
185 if (acc_is_present (&b[0], (N * sizeof (float))))
186 abort ();
188 for (i = 0; i < N; i++)
190 a[i] = 3.0;
191 b[i] = 4.0;
194 #pragma acc data copy (a[0:N]) copyout (b[0:N])
196 #pragma acc parallel
198 int ii;
200 for (ii = 0; ii < N; ii++)
202 a[ii] = a[ii] + 1;
203 b[ii] = a[ii] + 2;
208 for (i = 0; i < N; i++)
210 if (a[i] != 4.0)
211 abort ();
213 if (b[i] != 6.0)
214 abort ();
217 if (acc_is_present (&a[0], (N * sizeof (float))))
218 abort ();
220 if (acc_is_present (&b[0], (N * sizeof (float))))
221 abort ();
223 for (i = 0; i < N; i++)
225 a[i] = 4.0;
226 b[i] = 7.0;
229 #pragma acc data present_or_copy (a[0:N]) present_or_copy (b[0:N])
231 #pragma acc parallel
233 int ii;
235 for (ii = 0; ii < N; ii++)
237 a[ii] = a[ii] + 1;
238 b[ii] = b[ii] + 2;
243 for (i = 0; i < N; i++)
245 if (a[i] != 5.0)
246 abort ();
248 if (b[i] != 9.0)
249 abort ();
252 if (acc_is_present (&a[0], (N * sizeof (float))))
253 abort ();
255 if (acc_is_present (&b[0], (N * sizeof (float))))
256 abort ();
258 for (i = 0; i < N; i++)
260 a[i] = 3.0;
261 b[i] = 7.0;
264 d = (float *) acc_copyin (&a[0], N * sizeof (float));
265 d = (float *) acc_copyin (&b[0], N * sizeof (float));
267 #pragma acc data present_or_copy (a[0:N]) present_or_copy (b[0:N])
269 #pragma acc parallel
271 int ii;
273 for (ii = 0; ii < N; ii++)
275 a[ii] = a[ii] + 1;
276 b[ii] = b[ii] + 2;
281 for (i = 0; i < N; i++)
283 if (a[i] != 3.0)
284 abort ();
286 if (b[i] != 7.0)
287 abort ();
290 if (!acc_is_present (&a[0], (N * sizeof (float))))
291 abort ();
293 if (!acc_is_present (&b[0], (N * sizeof (float))))
294 abort ();
296 acc_delete (&a[0], N * sizeof (float));
298 if (acc_is_present (&a[0], N * sizeof (float)))
299 abort ();
301 acc_delete (&b[0], N * sizeof (float));
303 if (acc_is_present (&b[0], N * sizeof (float)))
304 abort ();
307 for (i = 0; i < N; i++)
309 a[i] = 3.0;
310 b[i] = 7.0;
313 #pragma acc data copyin (a[0:N]) create (c[0:N]) copyout (b[0:N])
315 #pragma acc parallel
317 int ii;
319 for (ii = 0; ii < N; ii++)
321 c[ii] = a[ii];
322 b[ii] = c[ii];
327 for (i = 0; i < N; i++)
329 if (a[i] != 3.0)
330 abort ();
332 if (b[i] != 3.0)
333 abort ();
336 if (acc_is_present (&a[0], (N * sizeof (float))))
337 abort ();
339 if (acc_is_present (&b[0], (N * sizeof (float))))
340 abort ();
342 if (acc_is_present (&c[0], (N * sizeof (float))))
343 abort ();
345 for (i = 0; i < N; i++)
347 a[i] = 4.0;
348 b[i] = 8.0;
351 #pragma acc data copyin (a[0:N]) present_or_create (c[0:N]) copyout (b[0:N])
353 #pragma acc parallel
355 int ii;
357 for (ii = 0; ii < N; ii++)
359 c[ii] = a[ii];
360 b[ii] = c[ii];
365 for (i = 0; i < N; i++)
367 if (a[i] != 4.0)
368 abort ();
370 if (b[i] != 4.0)
371 abort ();
374 if (acc_is_present (&a[0], (N * sizeof (float))))
375 abort ();
377 if (acc_is_present (&b[0], (N * sizeof (float))))
378 abort ();
380 if (acc_is_present (&c[0], (N * sizeof (float))))
381 abort ();
383 for (i = 0; i < N; i++)
385 a[i] = 2.0;
386 b[i] = 5.0;
389 d = (float *) acc_malloc (N * sizeof (float));
390 acc_map_data (c, d, N * sizeof (float));
392 #pragma acc data copyin (a[0:N]) present_or_create (c[0:N]) copyout (b[0:N])
394 #pragma acc parallel
396 int ii;
398 for (ii = 0; ii < N; ii++)
400 c[ii] = a[ii];
401 b[ii] = c[ii];
406 for (i = 0; i < N; i++)
408 if (a[i] != 2.0)
409 abort ();
411 if (b[i] != 2.0)
412 abort ();
415 if (acc_is_present (a, (N * sizeof (float))))
416 abort ();
418 if (acc_is_present (b, (N * sizeof (float))))
419 abort ();
421 if (!acc_is_present (c, (N * sizeof (float))))
422 abort ();
424 d = (float *) acc_deviceptr (c);
426 acc_unmap_data (c);
428 acc_free (d);
430 for (i = 0; i < N; i++)
432 a[i] = 4.0;
433 b[i] = 8.0;
436 d = (float *) acc_malloc (N * sizeof (float));
437 acc_map_data (c, d, N * sizeof (float));
439 #pragma acc data copyin (a[0:N]) present (c[0:N]) copyout (b[0:N])
441 #pragma acc parallel
443 int ii;
445 for (ii = 0; ii < N; ii++)
447 c[ii] = a[ii];
448 b[ii] = c[ii];
453 for (i = 0; i < N; i++)
455 if (a[i] != 4.0)
456 abort ();
458 if (b[i] != 4.0)
459 abort ();
462 if (acc_is_present (a, (N * sizeof (float))))
463 abort ();
465 if (acc_is_present (b, (N * sizeof (float))))
466 abort ();
468 if (!acc_is_present (c, (N * sizeof (float))))
469 abort ();
471 acc_unmap_data (c);
473 if (acc_is_present (c, (N * sizeof (float))))
474 abort ();
476 acc_free (d);
478 d = (float *) acc_malloc (N * sizeof (float));
479 acc_map_data (c, d, N * sizeof (float));
481 if (!acc_is_present (c, (N * sizeof (float))))
482 abort ();
484 d = (float *) acc_malloc (N * sizeof (float));
485 acc_map_data (b, d, N * sizeof (float));
487 if (!acc_is_present (b, (N * sizeof (float))))
488 abort ();
490 d = (float *) acc_malloc (N * sizeof (float));
491 acc_map_data (a, d, N * sizeof (float));
493 if (!acc_is_present (a, (N * sizeof (float))))
494 abort ();
496 #pragma acc data present (a[0:N]) present (c[0:N]) present (b[0:N])
498 #pragma acc parallel
500 int ii;
502 for (ii = 0; ii < N; ii++)
504 a[ii] = 1.0;
505 c[ii] = 2.0;
506 b[ii] = 4.0;
511 if (!acc_is_present (a, (N * sizeof (float))))
512 abort ();
514 if (!acc_is_present (b, (N * sizeof (float))))
515 abort ();
517 if (!acc_is_present (c, (N * sizeof (float))))
518 abort ();
520 d = (float *) acc_deviceptr (b);
522 acc_memcpy_from_device (b, d, N * sizeof (float));
524 for (i = 0; i < N; i++)
526 if (a[i] != 4.0)
527 abort ();
529 if (b[i] != 4.0)
530 abort ();
533 d = (float *) acc_deviceptr (a);
535 acc_unmap_data (a);
537 acc_free (d);
539 d = (float *) acc_deviceptr (b);
541 acc_unmap_data (b);
543 acc_free (d);
545 d = (float *) acc_deviceptr (c);
547 acc_unmap_data (c);
549 acc_free (d);
551 for (i = 0; i < N; i++)
553 a[i] = 3.0;
554 b[i] = 6.0;
557 d = (float *) acc_malloc (N * sizeof (float));
559 #pragma acc parallel copyin (a[0:N]) deviceptr (d) copyout (b[0:N])
561 int ii;
563 for (ii = 0; ii < N; ii++)
565 d[ii] = a[ii];
566 b[ii] = d[ii];
570 for (i = 0; i < N; i++)
572 if (a[i] != 3.0)
573 abort ();
575 if (b[i] != 3.0)
576 abort ();
579 if (acc_is_present (a, (N * sizeof (float))))
580 abort ();
582 if (acc_is_present (b, (N * sizeof (float))))
583 abort ();
585 acc_free (d);
587 for (i = 0; i < N; i++)
589 a[i] = 6.0;
590 b[i] = 0.0;
593 d = (float *) acc_copyin (&a[0], N * sizeof (float));
595 for (i = 0; i < N; i++)
597 a[i] = 9.0;
600 #pragma acc data pcopyin (a[0:N]) copyout (b[0:N])
602 #pragma acc parallel
604 int ii;
606 for (ii = 0; ii < N; ii++)
607 b[ii] = a[ii];
611 for (i = 0; i < N; i++)
613 if (b[i] != 6.0)
614 abort ();
617 if (!acc_is_present (&a[0], (N * sizeof (float))))
618 abort ();
620 if (acc_is_present (&b[0], (N * sizeof (float))))
621 abort ();
623 acc_delete (&a[0], N * sizeof (float));
625 if (acc_is_present (&a[0], N * sizeof (float)))
626 abort ();
628 for (i = 0; i < N; i++)
630 a[i] = 6.0;
631 b[i] = 0.0;
634 #pragma acc data copyin (a[0:N]) pcopyout (b[0:N])
636 #pragma acc parallel
638 int ii;
640 for (ii = 0; ii < N; ii++)
641 b[ii] = a[ii];
645 for (i = 0; i < N; i++)
647 if (b[i] != 6.0)
648 abort ();
651 if (acc_is_present (&a[0], (N * sizeof (float))))
652 abort ();
654 if (acc_is_present (&b[0], (N * sizeof (float))))
655 abort ();
657 for (i = 0; i < N; i++)
659 a[i] = 5.0;
660 b[i] = 7.0;
663 #pragma acc data copyin (a[0:N]) pcreate (c[0:N]) copyout (b[0:N])
665 #pragma acc parallel
667 int ii;
669 for (ii = 0; ii < N; ii++)
671 c[ii] = a[ii];
672 b[ii] = c[ii];
677 for (i = 0; i < N; i++)
679 if (a[i] != 5.0)
680 abort ();
682 if (b[i] != 5.0)
683 abort ();
686 if (acc_is_present (&a[0], (N * sizeof (float))))
687 abort ();
689 if (acc_is_present (&b[0], (N * sizeof (float))))
690 abort ();
692 if (acc_is_present (&c[0], (N * sizeof (float))))
693 abort ();
695 return 0;