[C++ PATCH] Deprecate -ffriend-injection
[official-gcc.git] / gcc / testsuite / g++.dg / goacc / template.C
blob852f42f2b42776d0eeb55925cf81d292ab611819
1 #pragma acc routine
2 template <typename T> T
3 accDouble(int val)
5   return val * 2;
8 template<typename T, int I> T
9 oacc_parallel_copy (T a)
11   T b = 0;
12   char w = 1;
13   int x = 2;
14   float y = 3;
15   double z = 4;
17 #pragma acc parallel num_gangs (a) num_workers (a) vector_length (a) default (none) copyout (b) copyin (a)
18 #pragma acc loop gang worker vector
19   for (int i = 0; i < 1; i++)
20     b = a;
22 #pragma acc parallel num_gangs (a) copy (w, x, y, z)
23 #pragma acc loop
24   for (int i = 0; i < 1; i++)
25     {
26       w = accDouble<char>(w);
27       x = accDouble<int>(x);
28       y = accDouble<float>(y);
29       z = accDouble<double>(z);
30     }
32 #pragma acc parallel num_gangs (a) if (1)
33   {
34 #pragma acc loop independent collapse (2) gang
35     for (int i = 0; i < a; i++)
36       for (int j = 0; j < 5; j++)
37         b = a;
39 #pragma acc loop auto tile (I, 3)
40     for (int i = 0; i < a; i++)
41       for (int j = 0; j < 5; j++)
42         b = a;
44 #pragma acc loop seq
45     for (int i = 0; i < a; i++)
46       b = a;
47   }
49   T c;
51 #pragma acc parallel num_workers (10)
52 #pragma acc loop worker
53   for (int i = 0; i < 1; i++)
54     {
55 #pragma acc atomic capture
56       c = b++;
58 #pragma atomic update
59       c++;
61 #pragma acc atomic read
62       b = a;
64 #pragma acc atomic write
65       b = a;
66     }
68 #pragma acc parallel reduction (+:c)
69   c = 1;
71 #pragma acc data if (1) copy (b)
72   {
73 #pragma acc parallel
74     {
75       b = a;
76     }
77   }
79 #pragma acc enter data copyin (b)
80 #pragma acc parallel present (b)
81   {
82     b = a;
83   }
85 #pragma acc update host (b)
86 #pragma acc update self (b)
87 #pragma acc update device (b)
88 #pragma acc exit data delete (b)
90   return b;
93 template<typename T> T
94 oacc_kernels_copy (T a)
96   T b = 0;
97   T c = 0;
98   char w = 1;
99   int x = 2;
100   float y = 3;
101   double z = 4;
103 #pragma acc kernels num_gangs (a) num_workers (a) vector_length (a) default (none) copyout (b) copyin (a)
104   for (int i = 0; i < 1; i++)
105     b = a;
107 #pragma acc kernels copy (w, x, y, z)
108   {
109     w = accDouble<char>(w);
110     x = accDouble<int>(x);
111     y = accDouble<float>(y);
112     z = accDouble<double>(z);
113   }
115 #pragma acc kernels copyout (b) copyin (a)
116   b = a;
118 #pragma acc kernels loop reduction (+:c)
119   for (int i = 0; i < 10; i++)
120     c = 1;
122 #pragma acc data if (1) copy (b)
123   {
124     #pragma acc kernels
125     {
126       b = a;
127     }
128   }
130 #pragma acc enter data copyin (b)
131 #pragma acc kernels present (b)
132   {
133     b = a;
134   }
136   return b;
140 main ()
142   int b = oacc_parallel_copy<int, 4> (5);
143   int c = oacc_kernels_copy<int> (5);
145   return b + c;