1 /* Verify that 'acc_copyout' etc. is a no-op if there's still a structured
4 /* { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } } */
15 assign_array (char *array
, size_t size
, char value
)
17 for (size_t i
= 0; i
< size
; ++i
)
22 verify_array (const char *array
, size_t size
, char value
)
24 for (size_t i
= 0; i
< size
; ++i
)
25 assert (array
[i
] == value
);
30 #pragma acc declare create (global_var)
35 assert (acc_is_present (&global_var
, sizeof global_var
));
38 #pragma acc update device (global_var)
41 acc_copyout (&global_var
, sizeof global_var
);
42 assert (acc_is_present (&global_var
, sizeof global_var
));
43 assert (global_var
== c1
);
46 acc_copyout_finalize (&global_var
, sizeof global_var
);
47 assert (acc_is_present (&global_var
, sizeof global_var
));
48 assert (global_var
== c1
);
50 void *global_var_d_p
= acc_deviceptr (&global_var
);
51 assert (global_var_d_p
);
53 void *d_p
= acc_copyin (&global_var
, sizeof global_var
);
54 assert (d_p
== global_var_d_p
);
56 acc_copyout (&global_var
, sizeof global_var
);
57 assert (acc_is_present (&global_var
, sizeof global_var
));
59 d_p
= acc_copyin (&global_var
, sizeof global_var
);
60 assert (d_p
== global_var_d_p
);
62 d_p
= acc_copyin (&global_var
, sizeof global_var
);
63 assert (d_p
== global_var_d_p
);
66 acc_copyout_finalize (&global_var
, sizeof global_var
);
67 assert (acc_is_present (&global_var
, sizeof global_var
));
68 assert (global_var
== c1
);
71 acc_copyout (&global_var
, sizeof global_var
);
72 assert (acc_is_present (&global_var
, sizeof global_var
));
73 assert (global_var
== c1
);
82 char *h
= (char *) malloc (N
);
84 void *d
= acc_malloc (N
);
86 acc_map_data (h
, d
, N
);
87 assert (acc_is_present (h
, N
));
89 assign_array (h
, N
, c0
);
90 #pragma acc update device (h[0:N])
92 assign_array (h
, N
, c1
);
93 #pragma acc exit data copyout (h[0:N])
94 assert (acc_is_present (h
, N
));
95 verify_array (h
, N
, c1
);
97 assign_array (h
, N
, c1
);
98 #pragma acc exit data copyout (h[0:N]) finalize
99 assert (acc_is_present (h
, N
));
100 verify_array (h
, N
, c1
);
102 #pragma acc enter data copyin (h[0:N])
104 assign_array (h
, N
, c1
);
105 #pragma acc exit data copyout (h[0:N])
106 assert (acc_is_present (h
, N
));
107 verify_array (h
, N
, c1
);
109 #pragma acc enter data copyin (h[0:N])
111 #pragma acc enter data copyin (h[0:N])
113 assign_array (h
, N
, c1
);
114 #pragma acc exit data copyout (h[0:N]) finalize
115 assert (acc_is_present (h
, N
));
116 verify_array (h
, N
, c1
);
118 assign_array (h
, N
, c1
);
119 #pragma acc exit data copyout (h[0:N])
120 assert (acc_is_present (h
, N
));
121 verify_array (h
, N
, c1
);
131 assign_array (h
, N
, c0
);
132 #pragma acc data copyin (h)
134 assert (acc_is_present (h
, sizeof h
));
136 assign_array (h
, N
, c1
);
137 acc_copyout_finalize (h
, sizeof h
);
138 assert (acc_is_present (h
, sizeof h
));
139 verify_array (h
, N
, c1
);
141 assign_array (h
, N
, c1
);
142 acc_copyout (h
, sizeof h
);
143 assert (acc_is_present (h
, sizeof h
));
144 verify_array (h
, N
, c1
);
146 acc_copyin (h
, sizeof h
);
148 assign_array (h
, N
, c1
);
149 acc_copyout (h
, sizeof h
);
150 assert (acc_is_present (h
, sizeof h
));
151 verify_array (h
, N
, c1
);
153 acc_copyin (h
, sizeof h
);
155 acc_copyin (h
, sizeof h
);
157 assign_array (h
, N
, c1
);
158 acc_copyout_finalize (h
, sizeof h
);
159 assert (acc_is_present (h
, sizeof h
));
160 verify_array (h
, N
, c1
);
162 assign_array (h
, N
, c1
);
163 acc_copyout (h
, sizeof h
);
164 assert (acc_is_present (h
, sizeof h
));
165 verify_array (h
, N
, c1
);
175 test_acc_map_data ();