| /* { dg-do run { target openacc_nvidia_accel_selected } } */ |
| |
| #include <stdlib.h> |
| #include <openacc.h> |
| |
| float *b; |
| #pragma acc declare deviceptr (b) |
| |
| #pragma acc routine |
| float * |
| subr2 (void) |
| { |
| return b; |
| } |
| |
| float |
| subr1 (float a) |
| { |
| float b; |
| #pragma acc declare present_or_copy (b) |
| float c; |
| #pragma acc declare present_or_copyin (c) |
| float d; |
| #pragma acc declare present_or_create (d) |
| float e; |
| #pragma acc declare present_or_copyout (e) |
| |
| #pragma acc parallel copy (a) |
| { |
| b = a; |
| c = b; |
| d = c; |
| e = d; |
| a = e; |
| } |
| |
| return a; |
| } |
| |
| int |
| main (int argc, char **argv) |
| { |
| float a; |
| float *c; |
| |
| a = 2.0; |
| |
| a = subr1 (a); |
| |
| if (a != 2.0) |
| abort (); |
| |
| b = (float *) acc_malloc (sizeof (float)); |
| |
| c = subr2 (); |
| |
| if (b != c) |
| abort (); |
| |
| return 0; |
| } |