1 // RUN: %clang_cc1 -fopenacc -Wno-openacc-deprecated-clause-alias -ast-print %s -o - | FileCheck %s 2 3 struct SomeStruct{}; 4 5 constexpr int get_value() { return 1; } 6 void foo() { 7 // CHECK: #pragma acc loop 8 // CHECK-NEXT: for (;;) 9 // CHECK-NEXT: ; 10 #pragma acc loop 11 for(;;); 12 13 // CHECK: #pragma acc loop device_type(SomeStruct) 14 // CHECK-NEXT: for (;;) 15 // CHECK-NEXT: ; 16 #pragma acc loop device_type(SomeStruct) 17 for(;;); 18 19 // CHECK: #pragma acc loop device_type(int) 20 // CHECK-NEXT: for (;;) 21 // CHECK-NEXT: ; 22 #pragma acc loop device_type(int) 23 for(;;); 24 25 // CHECK: #pragma acc loop dtype(bool) 26 // CHECK-NEXT: for (;;) 27 // CHECK-NEXT: ; 28 #pragma acc loop dtype(bool) 29 for(;;); 30 31 // CHECK: #pragma acc loop dtype(AnotherIdent) 32 // CHECK-NEXT: for (;;) 33 // CHECK-NEXT: ; 34 #pragma acc loop dtype(AnotherIdent) 35 for(;;); 36 37 // CHECK: #pragma acc loop independent 38 // CHECK-NEXT: for (;;) 39 // CHECK-NEXT: ; 40 #pragma acc loop independent 41 for(;;); 42 // CHECK: #pragma acc loop seq 43 // CHECK-NEXT: for (;;) 44 // CHECK-NEXT: ; 45 #pragma acc loop seq 46 for(;;); 47 // CHECK: #pragma acc loop auto 48 // CHECK-NEXT: for (;;) 49 // CHECK-NEXT: ; 50 #pragma acc loop auto 51 for(;;); 52 53 int i; 54 float array[5]; 55 56 // CHECK: #pragma acc loop private(i, array[1], array, array[1:2]) 57 // CHECK-NEXT: for (;;) 58 // CHECK-NEXT: ; 59 #pragma acc loop private(i, array[1], array, array[1:2]) 60 for(;;); 61 62 // CHECK: #pragma acc loop collapse(1) 63 // CHECK-NEXT: for (;;) 64 // CHECK-NEXT: ; 65 #pragma acc loop collapse(1) 66 for(;;); 67 // CHECK: #pragma acc loop collapse(force:1) 68 // CHECK-NEXT: for (;;) 69 // CHECK-NEXT: ; 70 #pragma acc loop collapse(force:1) 71 for(;;); 72 // CHECK: #pragma acc loop collapse(2) 73 // CHECK-NEXT: for (;;) 74 // CHECK-NEXT: for (;;) 75 // CHECK-NEXT: ; 76 #pragma acc loop collapse(2) 77 for(;;) 78 for(;;); 79 // CHECK: #pragma acc loop collapse(force:2) 80 // CHECK-NEXT: for (;;) 81 // CHECK-NEXT: for (;;) 82 // CHECK-NEXT: ; 83 #pragma acc loop collapse(force:2) 84 for(;;) 85 for(;;); 86 87 // CHECK: #pragma acc loop tile(1, 3, *, get_value()) 88 // CHECK-NEXT: for (;;) 89 // CHECK-NEXT: for (;;) 90 // CHECK-NEXT: for (;;) 91 // CHECK-NEXT: for (;;) 92 // CHECK-NEXT: ; 93 #pragma acc loop tile(1, 3, *, get_value()) 94 for(;;) 95 for(;;) 96 for(;;) 97 for(;;); 98 99 // CHECK: #pragma acc loop gang(dim: 2) 100 // CHECK-NEXT: for (;;) 101 // CHECK-NEXT: ; 102 #pragma acc loop gang(dim:2) 103 for(;;); 104 105 // CHECK: #pragma acc loop gang(static: i) 106 // CHECK-NEXT: for (;;) 107 // CHECK-NEXT: ; 108 #pragma acc loop gang(static:i) 109 for(;;); 110 111 // CHECK: #pragma acc loop gang(static: i) gang(dim: 2) 112 // CHECK-NEXT: for (;;) 113 // CHECK-NEXT: ; 114 #pragma acc loop gang(static:i) gang(dim:2) 115 for(;;); 116 117 // CHECK: #pragma acc parallel 118 // CHECK-NEXT: #pragma acc loop gang(dim: 2) 119 // CHECK-NEXT: for (;;) 120 // CHECK-NEXT: ; 121 #pragma acc parallel 122 #pragma acc loop gang(dim:2) 123 for(;;); 124 125 // CHECK: #pragma acc parallel 126 // CHECK-NEXT: #pragma acc loop gang(static: i) 127 // CHECK-NEXT: for (;;) 128 // CHECK-NEXT: ; 129 #pragma acc parallel 130 #pragma acc loop gang(static:i) 131 for(;;); 132 133 // CHECK: #pragma acc parallel 134 // CHECK-NEXT: #pragma acc loop gang(static: i) gang(dim: 2) 135 // CHECK-NEXT: for (;;) 136 // CHECK-NEXT: ; 137 #pragma acc parallel 138 #pragma acc loop gang(static:i) gang(dim:2) 139 for(;;); 140 141 // CHECK: #pragma acc kernels 142 // CHECK-NEXT: #pragma acc loop gang(num: i) gang(static: i) 143 // CHECK-NEXT: for (;;) 144 // CHECK-NEXT: ; 145 #pragma acc kernels 146 #pragma acc loop gang(i) gang(static:i) 147 for(;;); 148 149 // CHECK: #pragma acc kernels 150 // CHECK-NEXT: #pragma acc loop gang(num: i) gang(static: i) 151 // CHECK-NEXT: for (;;) 152 // CHECK-NEXT: ; 153 #pragma acc kernels 154 #pragma acc loop gang(num:i) gang(static:i) 155 for(;;); 156 157 // CHECK: #pragma acc serial 158 // CHECK-NEXT: #pragma acc loop gang(static: i) 159 // CHECK-NEXT: for (;;) 160 // CHECK-NEXT: ; 161 #pragma acc serial 162 #pragma acc loop gang(static:i) 163 for(;;); 164 165 // CHECK: #pragma acc serial 166 // CHECK-NEXT: #pragma acc loop gang(static: *) 167 // CHECK-NEXT: for (;;) 168 // CHECK-NEXT: ; 169 #pragma acc serial 170 #pragma acc loop gang(static:*) 171 for(;;); 172 173 // CHECK: #pragma acc serial 174 // CHECK-NEXT: #pragma acc loop 175 // CHECK-NEXT: for (;;) 176 // CHECK-NEXT: ; 177 #pragma acc serial 178 #pragma acc loop gang 179 for(;;); 180 181 // CHECK: #pragma acc loop worker 182 // CHECK-NEXT: for (;;) 183 // CHECK-NEXT: ; 184 #pragma acc parallel 185 #pragma acc loop worker 186 for(;;); 187 188 // CHECK: #pragma acc parallel 189 // CHECK-NEXT: #pragma acc loop worker 190 // CHECK-NEXT: for (;;) 191 // CHECK-NEXT: ; 192 #pragma acc parallel 193 #pragma acc loop worker 194 for(;;); 195 196 // CHECK: #pragma acc serial 197 // CHECK-NEXT: #pragma acc loop worker 198 // CHECK-NEXT: for (;;) 199 // CHECK-NEXT: ; 200 #pragma acc serial 201 #pragma acc loop worker 202 for(;;); 203 204 // CHECK: #pragma acc kernels 205 // CHECK-NEXT: #pragma acc loop worker(num: 5) 206 // CHECK-NEXT: for (;;) 207 // CHECK-NEXT: ; 208 #pragma acc kernels 209 #pragma acc loop worker(5) 210 for(;;); 211 212 // CHECK: #pragma acc kernels 213 // CHECK-NEXT: #pragma acc loop worker(num: 5) 214 // CHECK-NEXT: for (;;) 215 // CHECK-NEXT: ; 216 #pragma acc kernels 217 #pragma acc loop worker(num:5) 218 for(;;); 219 220 // CHECK: #pragma acc loop vector 221 // CHECK-NEXT: for (;;) 222 // CHECK-NEXT: ; 223 #pragma acc loop vector 224 for(;;); 225 226 // CHECK: #pragma acc loop vector(length: 5) 227 // CHECK-NEXT: for (;;) 228 // CHECK-NEXT: ; 229 #pragma acc loop vector(5) 230 for(;;); 231 232 // CHECK: #pragma acc loop vector(length: 5) 233 // CHECK-NEXT: for (;;) 234 // CHECK-NEXT: ; 235 #pragma acc loop vector(length:5) 236 for(;;); 237 238 // CHECK: #pragma acc parallel 239 // CHECK-NEXT: #pragma acc loop vector 240 // CHECK-NEXT: for (;;) 241 // CHECK-NEXT: ; 242 #pragma acc parallel 243 #pragma acc loop vector 244 for(;;); 245 246 // CHECK: #pragma acc parallel 247 // CHECK-NEXT: #pragma acc loop vector(length: 5) 248 // CHECK-NEXT: for (;;) 249 // CHECK-NEXT: ; 250 #pragma acc parallel 251 #pragma acc loop vector(5) 252 for(;;); 253 254 // CHECK: #pragma acc parallel 255 // CHECK-NEXT: #pragma acc loop vector(length: 5) 256 // CHECK-NEXT: for (;;) 257 // CHECK-NEXT: ; 258 #pragma acc parallel 259 #pragma acc loop vector(length:5) 260 for(;;); 261 262 // CHECK: #pragma acc kernels 263 // CHECK-NEXT: #pragma acc loop vector 264 // CHECK-NEXT: for (;;) 265 // CHECK-NEXT: ; 266 #pragma acc kernels 267 #pragma acc loop vector 268 for(;;); 269 270 // CHECK: #pragma acc kernels 271 // CHECK-NEXT: #pragma acc loop vector(length: 5) 272 // CHECK-NEXT: for (;;) 273 // CHECK-NEXT: ; 274 #pragma acc kernels 275 #pragma acc loop vector(5) 276 for(;;); 277 278 // CHECK: #pragma acc kernels 279 // CHECK-NEXT: #pragma acc loop vector(length: 5) 280 // CHECK-NEXT: for (;;) 281 // CHECK-NEXT: ; 282 #pragma acc kernels 283 #pragma acc loop vector(length:5) 284 for(;;); 285 286 // CHECK: #pragma acc serial 287 // CHECK-NEXT: #pragma acc loop vector 288 // CHECK-NEXT: for (;;) 289 // CHECK-NEXT: ; 290 #pragma acc serial 291 #pragma acc loop vector 292 for(;;); 293 294 int *iPtr; 295 bool SomeB; 296 297 //CHECK: #pragma acc loop reduction(+: iPtr) 298 #pragma acc loop reduction(+: iPtr) 299 for(;;); 300 //CHECK: #pragma acc loop reduction(*: i) 301 #pragma acc loop reduction(*: i) 302 for(;;); 303 //CHECK: #pragma acc loop reduction(max: SomeB) 304 #pragma acc loop reduction(max: SomeB) 305 for(;;); 306 //CHECK: #pragma acc loop reduction(min: iPtr) 307 #pragma acc loop reduction(min: iPtr) 308 for(;;); 309 //CHECK: #pragma acc loop reduction(&: i) 310 #pragma acc loop reduction(&: i) 311 for(;;); 312 //CHECK: #pragma acc loop reduction(|: SomeB) 313 #pragma acc loop reduction(|: SomeB) 314 for(;;); 315 //CHECK: #pragma acc loop reduction(^: iPtr) 316 #pragma acc loop reduction(^: iPtr) 317 for(;;); 318 //CHECK: #pragma acc loop reduction(&&: i) 319 #pragma acc loop reduction(&&: i) 320 for(;;); 321 //CHECK: #pragma acc loop reduction(||: SomeB) 322 #pragma acc loop reduction(||: SomeB) 323 for(;;); 324 } 325