1 /* Test 'no_create' clause on 'data' construct and nested compute construct,
2 with data present on the device. */
3
4 #include <stdlib.h>
5 #include <stdio.h>
6 #include <openacc.h>
7
8 #define N 128
9
10 int
11 main (int argc, char *argv[])
12 {
13 int var;
14 int *arr = (int *) malloc (N * sizeof (*arr));
15 int *devptr[2];
16
17 acc_copyin (&var, sizeof (var));
18 acc_copyin (arr, N * sizeof (*arr));
19
20 #pragma acc data no_create(var, arr[0:N])
21 {
22 devptr[0] = (int *) acc_deviceptr (&var);
23 devptr[1] = (int *) acc_deviceptr (&arr[2]);
24
25 if (devptr[0] == NULL)
26 __builtin_abort ();
27 if (devptr[1] == NULL)
28 __builtin_abort ();
29
30 if (acc_hostptr (devptr[0]) != (void *) &var)
31 __builtin_abort ();
32 if (acc_hostptr (devptr[1]) != (void *) &arr[2])
33 __builtin_abort ();
34
35 #if ACC_MEM_SHARED
36 if (devptr[0] != &var)
37 __builtin_abort ();
38 if (devptr[1] != &arr[2])
39 __builtin_abort ();
40 #else
41 if (devptr[0] == &var)
42 __builtin_abort ();
43 if (devptr[1] == &arr[2])
44 __builtin_abort ();
45 #endif
46
47 #pragma acc parallel copyout(devptr)
48 {
49 devptr[0] = &var;
50 devptr[1] = &arr[2];
51 }
52
53 if (devptr[0] == NULL)
54 __builtin_abort ();
55 if (devptr[1] == NULL)
56 __builtin_abort ();
57
58 if (acc_hostptr (devptr[0]) != (void *) &var)
59 __builtin_abort ();
60 if (acc_hostptr (devptr[1]) != (void *) &arr[2])
61 __builtin_abort ();
62
63 #if ACC_MEM_SHARED
64 if (devptr[0] != &var)
65 __builtin_abort ();
66 if (devptr[1] != &arr[2])
67 __builtin_abort ();
68 #else
69 if (devptr[0] == &var)
70 __builtin_abort ();
71 if (devptr[1] == &arr[2])
72 __builtin_abort ();
73 #endif
74 }
75
76 acc_delete (&var, sizeof (var));
77 acc_delete (arr, N * sizeof (*arr));
78
79 free (arr);
80
81 return 0;
82 }