Set num_threads to 50 on 32-bit hppa in two libgomp loop tests
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-c-c++-common / pr92843-1.c
blobdb5b35b08d9f56b95eb8dae42d07141540f816b5
1 /* Verify that 'acc_copyout' etc. is a no-op if there's still a structured
2 reference count. */
4 /* { dg-skip-if "" { *-*-* } { "*" } { "-DACC_MEM_SHARED=0" } } */
6 #include <assert.h>
7 #include <stdlib.h>
8 #include <openacc.h>
11 const int c0 = 58;
12 const int c1 = 81;
14 static void
15 assign_array (char *array, size_t size, char value)
17 for (size_t i = 0; i < size; ++i)
18 array[i] = value;
21 static void
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);
29 float global_var;
30 #pragma acc declare create (global_var)
32 static void
33 test_acc_declare ()
35 assert (acc_is_present (&global_var, sizeof global_var));
37 global_var = c0;
38 #pragma acc update device (global_var)
40 global_var = c1;
41 acc_copyout (&global_var, sizeof global_var);
42 assert (acc_is_present (&global_var, sizeof global_var));
43 assert (global_var == c1);
45 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);
65 global_var = c1;
66 acc_copyout_finalize (&global_var, sizeof global_var);
67 assert (acc_is_present (&global_var, sizeof global_var));
68 assert (global_var == c1);
70 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);
77 static void
78 test_acc_map_data ()
80 const int N = 801;
82 char *h = (char *) malloc (N);
83 assert (h);
84 void *d = acc_malloc (N);
85 assert (d);
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);
125 static void
126 test_acc_data ()
128 #define N 23
129 char h[N];
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);
167 #undef N
172 main ()
174 test_acc_declare ();
175 test_acc_map_data ();
176 test_acc_data ();
178 return 0;