Set num_threads to 50 on 32-bit hppa in two libgomp loop tests
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-c-c++-common / deep-copy-8.c
blobe705f78c3112dd692e95aba8ae8be4940f977f62
1 /* { dg-do run { target { ! openacc_host_selected } } } */
3 #include <stdlib.h>
4 #include <assert.h>
5 #include <openacc.h>
7 struct dc
9 int a;
10 int *b;
11 int *c;
12 int *d;
15 static void
16 test (unsigned variant)
18 int n = 100, i, j, k;
19 struct dc v = { .a = 3 };
21 v.b = (int *) malloc (sizeof (int) * n);
22 v.c = (int *) malloc (sizeof (int) * n);
23 v.d = (int *) malloc (sizeof (int) * n);
25 if (variant & 1)
27 #pragma acc enter data copyin(v)
29 else
31 void *v_d = acc_malloc (sizeof v);
32 acc_map_data (&v, v_d, sizeof v);
33 acc_memcpy_to_device (v_d, &v, sizeof v);
36 for (k = 0; k < 16; k++)
38 #pragma acc enter data copyin(v.a, v.b[:n], v.c[:n], v.d[:n])
40 #pragma acc parallel loop
41 for (i = 0; i < n; i++)
42 v.b[i] = v.a + i;
44 #pragma acc exit data copyout(v.b[:n])
45 #pragma acc exit data copyout(v.c[:n])
46 #pragma acc exit data copyout(v.d[:n])
47 #pragma acc exit data copyout(v.a)
49 for (i = 0; i < n; i++)
50 assert (v.b[i] == v.a + i);
52 assert (acc_is_present (&v, sizeof (v)));
53 assert (!acc_is_present (v.b, sizeof (int) * n));
54 assert (!acc_is_present (v.c, sizeof (int) * n));
55 assert (!acc_is_present (v.d, sizeof (int) * n));
58 if (variant & 1)
60 #pragma acc exit data copyout(v)
62 else
64 void *v_d = acc_deviceptr (&v);
65 acc_unmap_data (&v);
66 acc_free (v_d);
69 assert (!acc_is_present (&v, sizeof (v)));
72 int
73 main ()
75 for (unsigned variant = 0; variant < 2; ++variant)
76 test (variant);
78 return 0;