gimplify.c (gimplify_scan_omp_clauses): No special handling for OMP_CLAUSE_TILE.
[gcc.git] / gcc / testsuite / g++.dg / goacc / template.C
1 #pragma acc routine
2 template <typename T> T
3 accDouble(int val)
4 {
5 return val * 2;
6 }
7
8 template<typename T, int I> T
9 oacc_parallel_copy (T a)
10 {
11 T b = 0;
12 char w = 1;
13 int x = 2;
14 float y = 3;
15 double z = 4;
16
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;
21
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 }
31
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;
38
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;
43
44 #pragma acc loop seq
45 for (int i = 0; i < a; i++)
46 b = a;
47 }
48
49 T c;
50
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++;
57
58 #pragma atomic update
59 c++;
60
61 #pragma acc atomic read
62 b = a;
63
64 #pragma acc atomic write
65 b = a;
66 }
67
68 #pragma acc parallel reduction (+:c)
69 c = 1;
70
71 #pragma acc data if (1) copy (b)
72 {
73 #pragma acc parallel
74 {
75 b = a;
76 }
77 }
78
79 #pragma acc enter data copyin (b)
80 #pragma acc parallel present (b)
81 {
82 b = a;
83 }
84
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)
89
90 return b;
91 }
92
93 template<typename T> T
94 oacc_kernels_copy (T a)
95 {
96 T b = 0;
97 T c = 0;
98 char w = 1;
99 int x = 2;
100 float y = 3;
101 double z = 4;
102
103 #pragma acc kernels copy (w, x, y, z)
104 {
105 w = accDouble<char>(w);
106 x = accDouble<int>(x);
107 y = accDouble<float>(y);
108 z = accDouble<double>(z);
109 }
110
111 #pragma acc kernels copyout (b) copyin (a)
112 b = a;
113
114 #pragma acc kernels loop reduction (+:c)
115 for (int i = 0; i < 10; i++)
116 c = 1;
117
118 #pragma acc data if (1) copy (b)
119 {
120 #pragma acc kernels
121 {
122 b = a;
123 }
124 }
125
126 #pragma acc enter data copyin (b)
127 #pragma acc kernels present (b)
128 {
129 b = a;
130 }
131
132 return b;
133 }
134
135 int
136 main ()
137 {
138 int b = oacc_parallel_copy<int, 4> (5);
139 int c = oacc_kernels_copy<int> (5);
140
141 return b + c;
142 }