* gcc-interface/trans.c (Call_to_gnu): If this is a function call and
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-c-c++-common / update-1.c
blob1b2a46072d608fa2859f08b40a7b640b097aee89
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 int NDIV2 = N / 2;
15 float *a, *b, *c;
16 float *d_a, *d_b, *d_c;
17 int i;
19 a = (float *) malloc (N * sizeof (float));
20 b = (float *) malloc (N * sizeof (float));
21 c = (float *) malloc (N * sizeof (float));
23 d_a = (float *) acc_malloc (N * sizeof (float));
24 d_b = (float *) acc_malloc (N * sizeof (float));
25 d_c = (float *) acc_malloc (N * sizeof (float));
27 for (i = 0; i < N; i++)
29 a[i] = 3.0;
30 b[i] = 0.0;
33 acc_map_data (a, d_a, N * sizeof (float));
34 acc_map_data (b, d_b, N * sizeof (float));
35 acc_map_data (c, d_c, N * sizeof (float));
37 #pragma acc update device (a[0:N], b[0:N])
39 #pragma acc parallel present (a[0:N], b[0:N])
41 int ii;
43 for (ii = 0; ii < N; ii++)
44 b[ii] = a[ii];
47 #pragma acc update host (a[0:N], b[0:N])
49 for (i = 0; i < N; i++)
51 if (a[i] != 3.0)
52 abort ();
54 if (b[i] != 3.0)
55 abort ();
58 if (!acc_is_present (&a[0], (N * sizeof (float))))
59 abort ();
61 if (!acc_is_present (&b[0], (N * sizeof (float))))
62 abort ();
64 for (i = 0; i < N; i++)
66 a[i] = 5.0;
67 b[i] = 1.0;
70 #pragma acc update device (a[0:N], b[0:N])
72 #pragma acc parallel present (a[0:N], b[0:N])
74 int ii;
76 for (ii = 0; ii < N; ii++)
77 b[ii] = a[ii];
80 #pragma acc update host (a[0:N], b[0:N])
82 for (i = 0; i < N; i++)
84 if (a[i] != 5.0)
85 abort ();
87 if (b[i] != 5.0)
88 abort ();
91 if (!acc_is_present (&a[0], (N * sizeof (float))))
92 abort ();
94 if (!acc_is_present (&b[0], (N * sizeof (float))))
95 abort ();
97 for (i = 0; i < N; i++)
99 a[i] = 5.0;
100 b[i] = 1.0;
103 #pragma acc update device (a[0:N], b[0:N])
105 #pragma acc parallel present (a[0:N], b[0:N])
107 int ii;
109 for (ii = 0; ii < N; ii++)
110 b[ii] = a[ii];
113 #pragma acc update host (a[0:N], b[0:N])
115 for (i = 0; i < N; i++)
117 if (a[i] != 5.0)
118 abort ();
120 if (b[i] != 5.0)
121 abort ();
124 if (!acc_is_present (&a[0], (N * sizeof (float))))
125 abort ();
127 if (!acc_is_present (&b[0], (N * sizeof (float))))
128 abort ();
130 for (i = 0; i < N; i++)
132 a[i] = 6.0;
133 b[i] = 0.0;
136 #pragma acc update device (a[0:N], b[0:N])
138 for (i = 0; i < N; i++)
140 a[i] = 9.0;
143 #pragma acc parallel present (a[0:N], b[0:N])
145 int ii;
147 for (ii = 0; ii < N; ii++)
148 b[ii] = a[ii];
151 #pragma acc update host (a[0:N], b[0:N])
153 for (i = 0; i < N; i++)
155 if (a[i] != 6.0)
156 abort ();
158 if (b[i] != 6.0)
159 abort ();
162 if (!acc_is_present (&a[0], (N * sizeof (float))))
163 abort ();
165 if (!acc_is_present (&b[0], (N * sizeof (float))))
166 abort ();
168 for (i = 0; i < N; i++)
170 a[i] = 7.0;
171 b[i] = 2.0;
174 #pragma acc update device (a[0:N], b[0:N])
176 for (i = 0; i < N; i++)
178 a[i] = 9.0;
181 #pragma acc parallel present (a[0:N], b[0:N])
183 int ii;
185 for (ii = 0; ii < N; ii++)
186 b[ii] = a[ii];
189 #pragma acc update host (a[0:N], b[0:N])
191 for (i = 0; i < N; i++)
193 if (a[i] != 7.0)
194 abort ();
196 if (b[i] != 7.0)
197 abort ();
200 for (i = 0; i < N; i++)
202 a[i] = 9.0;
205 #pragma acc update device (a[0:N])
207 #pragma acc parallel present (a[0:N], b[0:N])
209 int ii;
211 for (ii = 0; ii < N; ii++)
212 b[ii] = a[ii];
215 #pragma acc update host (a[0:N], b[0:N])
217 for (i = 0; i < N; i++)
219 if (a[i] != 9.0)
220 abort ();
222 if (b[i] != 9.0)
223 abort ();
226 if (!acc_is_present (&a[0], (N * sizeof (float))))
227 abort ();
229 if (!acc_is_present (&b[0], (N * sizeof (float))))
230 abort ();
232 for (i = 0; i < N; i++)
234 a[i] = 5.0;
237 #pragma acc update device (a[0:N])
239 for (i = 0; i < N; i++)
241 a[i] = 6.0;
244 #pragma acc update device (a[0:NDIV2])
246 #pragma acc parallel present (a[0:N], b[0:N])
248 int ii;
250 for (ii = 0; ii < N; ii++)
251 b[ii] = a[ii];
254 #pragma acc update host (a[0:N], b[0:N])
256 for (i = 0; i < NDIV2; i++)
258 if (a[i] != 6.0)
259 abort ();
261 if (b[i] != 6.0)
262 abort ();
265 for (i = NDIV2; i < N; i++)
267 if (a[i] != 5.0)
268 abort ();
270 if (b[i] != 5.0)
271 abort ();
274 if (!acc_is_present (&a[0], (N * sizeof (float))))
275 abort ();
277 if (!acc_is_present (&b[0], (N * sizeof (float))))
278 abort ();
280 for (i = 0; i < N; i++)
282 a[i] = 0.0;
285 #pragma acc update device (a[0:4])
287 #pragma acc parallel present (a[0:N])
289 int ii;
291 for (ii = 0; ii < N; ii++)
292 a[ii] = a[ii] + 1.0;
295 #pragma acc update host (a[4:4])
297 for (i = 0; i < NDIV2; i++)
299 if (a[i] != 0.0)
300 abort ();
303 for (i = NDIV2; i < N; i++)
305 if (a[i] != 6.0)
306 abort ();
309 #pragma acc update host (a[0:4])
311 for (i = 0; i < NDIV2; i++)
313 if (a[i] != 1.0)
314 abort ();
317 for (i = NDIV2; i < N; i++)
319 if (a[i] != 6.0)
320 abort ();
323 a[2] = 9;
324 a[3] = 9;
325 a[4] = 9;
326 a[5] = 9;
328 #pragma acc update device (a[2:4])
330 #pragma acc parallel present (a[0:N])
332 int ii;
334 for (ii = 0; ii < N; ii++)
335 a[ii] = a[ii] + 1.0;
338 #pragma acc update host (a[2:4])
340 for (i = 0; i < 2; i++)
342 if (a[i] != 1.0)
343 abort ();
346 for (i = 2; i < 6; i++)
348 if (a[i] != 10.0)
349 abort ();
352 for (i = 6; i < N; i++)
354 if (a[i] != 6.0)
355 abort ();
358 return 0;