* c-c++-common/Wrestrict.c (test_strcpy_range): Revert latest change.
[official-gcc.git] / libgomp / testsuite / libgomp.oacc-c-c++-common / firstprivate-1.c
blob689a443ca43b573439a20406f4db71cd2f645d5c
1 #include <openacc.h>
4 void t1 ()
6 int ok = 1;
7 int val = 2;
8 int ary[32];
9 int ondev = 0;
11 for (int i = 0; i < 32; i++)
12 ary[i] = ~0;
14 #pragma acc parallel num_gangs (32) copy (ok) firstprivate (val) copy(ary, ondev)
16 ondev = acc_on_device (acc_device_not_host);
17 #pragma acc loop gang(static:1)
18 for (unsigned i = 0; i < 32; i++)
20 if (val != 2)
21 ok = 0;
22 val += i;
23 ary[i] = val;
27 if (ondev)
29 if (!ok)
30 __builtin_abort ();
31 if (val != 2)
32 __builtin_abort ();
34 for (int i = 0; i < 32; i++)
35 if (ary[i] != 2 + i)
36 __builtin_abort ();
41 void t2 ()
43 int ok = 1;
44 int val = 2;
46 #pragma acc data copy(val)
48 #pragma acc parallel present (val)
50 val = 7;
53 #pragma acc parallel firstprivate (val) copy(ok)
55 ok = val == 7;
56 val = 9;
60 if (!ok)
61 __builtin_abort ();
62 if (val != 7)
63 __builtin_abort ();
67 #define N 100
68 void t3 ()
70 int a, b[N], c, d, i;
71 int n = acc_get_device_type () == acc_device_nvidia ? N : 1;
73 a = 5;
74 for (i = 0; i < n; i++)
75 b[i] = -1;
77 #pragma acc parallel num_gangs (n) firstprivate (a)
78 #pragma acc loop gang
79 for (i = 0; i < n; i++)
81 a = a + i;
82 b[i] = a;
85 for (i = 0; i < n; i++)
86 if (a + i != b[i])
87 __builtin_abort ();
89 #pragma acc data copy (a)
91 #pragma acc parallel firstprivate (a) copyout (c)
93 a = 10;
94 c = a;
97 /* This version of 'a' should still be 5. */
98 #pragma acc parallel copyout (d) present (a)
100 d = a;
104 if (c != 10)
105 __builtin_abort ();
106 if (d != 5)
107 __builtin_abort ();
109 #undef N
112 void t4 ()
114 int x = 5, i, arr[32];
116 for (i = 0; i < 32; i++)
117 arr[i] = 3;
119 #pragma acc parallel firstprivate(x) copy(arr) num_gangs(32) num_workers(8) vector_length(32)
121 #pragma acc loop gang
122 for (i = 0; i < 32; i++)
123 arr[i] += x;
126 for (i = 0; i < 32; i++)
127 if (arr[i] != 8)
128 __builtin_abort ();
133 main()
135 t1 ();
136 t2 ();
137 t3 ();
138 t4 ();
140 return 0;