142f4e505SErich Keane // RUN: %clang_cc1 -fopenacc -Wno-openacc-deprecated-clause-alias -ast-print %s -o - | FileCheck %s 242f4e505SErich Keane 3f10e71f6Serichkeane struct SomeStruct{}; 4f10e71f6Serichkeane 5d412cea8SErich Keane constexpr int get_value() { return 1; } 642f4e505SErich Keane void foo() { 742f4e505SErich Keane // CHECK: #pragma acc loop 8*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 942f4e505SErich Keane // CHECK-NEXT: ; 1042f4e505SErich Keane #pragma acc loop 11*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 12f10e71f6Serichkeane 13f10e71f6Serichkeane // CHECK: #pragma acc loop device_type(SomeStruct) 14*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 15f10e71f6Serichkeane // CHECK-NEXT: ; 16f10e71f6Serichkeane #pragma acc loop device_type(SomeStruct) 17*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 18f10e71f6Serichkeane 19f10e71f6Serichkeane // CHECK: #pragma acc loop device_type(int) 20*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 21f10e71f6Serichkeane // CHECK-NEXT: ; 22f10e71f6Serichkeane #pragma acc loop device_type(int) 23*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 24f10e71f6Serichkeane 25f10e71f6Serichkeane // CHECK: #pragma acc loop dtype(bool) 26*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 27f10e71f6Serichkeane // CHECK-NEXT: ; 28f10e71f6Serichkeane #pragma acc loop dtype(bool) 29*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 30f10e71f6Serichkeane 31f10e71f6Serichkeane // CHECK: #pragma acc loop dtype(AnotherIdent) 32*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 33f10e71f6Serichkeane // CHECK-NEXT: ; 34f10e71f6Serichkeane #pragma acc loop dtype(AnotherIdent) 35*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 362b939e18Serichkeane 372b939e18Serichkeane // CHECK: #pragma acc loop independent 38*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 392b939e18Serichkeane // CHECK-NEXT: ; 402b939e18Serichkeane #pragma acc loop independent 41*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 422b939e18Serichkeane // CHECK: #pragma acc loop seq 43*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 442b939e18Serichkeane // CHECK-NEXT: ; 452b939e18Serichkeane #pragma acc loop seq 46*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 472b939e18Serichkeane // CHECK: #pragma acc loop auto 48*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 492b939e18Serichkeane // CHECK-NEXT: ; 502b939e18Serichkeane #pragma acc loop auto 51*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 527dcff591Serichkeane 537dcff591Serichkeane int i; 547dcff591Serichkeane float array[5]; 557dcff591Serichkeane 567dcff591Serichkeane // CHECK: #pragma acc loop private(i, array[1], array, array[1:2]) 57*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 587dcff591Serichkeane // CHECK-NEXT: ; 597dcff591Serichkeane #pragma acc loop private(i, array[1], array, array[1:2]) 60*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 6197da34e0SErich Keane 6297da34e0SErich Keane // CHECK: #pragma acc loop collapse(1) 63*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 6497da34e0SErich Keane // CHECK-NEXT: ; 6597da34e0SErich Keane #pragma acc loop collapse(1) 66*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 6797da34e0SErich Keane // CHECK: #pragma acc loop collapse(force:1) 68*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 6997da34e0SErich Keane // CHECK-NEXT: ; 7097da34e0SErich Keane #pragma acc loop collapse(force:1) 71*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 7297da34e0SErich Keane // CHECK: #pragma acc loop collapse(2) 73*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 74*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 7597da34e0SErich Keane // CHECK-NEXT: ; 7697da34e0SErich Keane #pragma acc loop collapse(2) 77*b0cfbfd7SErich Keane for(int i = 0;i<5;++i) 78*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 7997da34e0SErich Keane // CHECK: #pragma acc loop collapse(force:2) 80*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 81*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 8297da34e0SErich Keane // CHECK-NEXT: ; 8397da34e0SErich Keane #pragma acc loop collapse(force:2) 84*b0cfbfd7SErich Keane for(int i = 0;i<5;++i) 85*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 86d412cea8SErich Keane 87d412cea8SErich Keane // CHECK: #pragma acc loop tile(1, 3, *, get_value()) 88*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 89*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 90*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 91*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 92d412cea8SErich Keane // CHECK-NEXT: ; 93d412cea8SErich Keane #pragma acc loop tile(1, 3, *, get_value()) 94*b0cfbfd7SErich Keane for(int i = 0;i<5;++i) 95*b0cfbfd7SErich Keane for(int i = 0;i<5;++i) 96*b0cfbfd7SErich Keane for(int i = 0;i<5;++i) 97*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 985b25c313SErich Keane 995b25c313SErich Keane // CHECK: #pragma acc loop gang(dim: 2) 100*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 1015b25c313SErich Keane // CHECK-NEXT: ; 1025b25c313SErich Keane #pragma acc loop gang(dim:2) 103*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 1045b25c313SErich Keane 1055b25c313SErich Keane // CHECK: #pragma acc loop gang(static: i) 106*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 1075b25c313SErich Keane // CHECK-NEXT: ; 1085b25c313SErich Keane #pragma acc loop gang(static:i) 109*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 1105b25c313SErich Keane 1115b25c313SErich Keane // CHECK: #pragma acc loop gang(static: i) gang(dim: 2) 112*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 1135b25c313SErich Keane // CHECK-NEXT: ; 1145b25c313SErich Keane #pragma acc loop gang(static:i) gang(dim:2) 115*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 1165b25c313SErich Keane 1175b25c313SErich Keane // CHECK: #pragma acc parallel 1185b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(dim: 2) 119*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 1205b25c313SErich Keane // CHECK-NEXT: ; 1215b25c313SErich Keane #pragma acc parallel 1225b25c313SErich Keane #pragma acc loop gang(dim:2) 123*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 1245b25c313SErich Keane 1255b25c313SErich Keane // CHECK: #pragma acc parallel 1265b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(static: i) 127*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 1285b25c313SErich Keane // CHECK-NEXT: ; 1295b25c313SErich Keane #pragma acc parallel 1305b25c313SErich Keane #pragma acc loop gang(static:i) 131*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 1325b25c313SErich Keane 1335b25c313SErich Keane // CHECK: #pragma acc parallel 1345b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(static: i) gang(dim: 2) 135*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 1365b25c313SErich Keane // CHECK-NEXT: ; 1375b25c313SErich Keane #pragma acc parallel 1385b25c313SErich Keane #pragma acc loop gang(static:i) gang(dim:2) 139*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 1405b25c313SErich Keane 1415b25c313SErich Keane // CHECK: #pragma acc kernels 1425b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(num: i) gang(static: i) 143*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 1445b25c313SErich Keane // CHECK-NEXT: ; 1455b25c313SErich Keane #pragma acc kernels 1465b25c313SErich Keane #pragma acc loop gang(i) gang(static:i) 147*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 1485b25c313SErich Keane 1495b25c313SErich Keane // CHECK: #pragma acc kernels 1505b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(num: i) gang(static: i) 151*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 1525b25c313SErich Keane // CHECK-NEXT: ; 1535b25c313SErich Keane #pragma acc kernels 1545b25c313SErich Keane #pragma acc loop gang(num:i) gang(static:i) 155*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 1565b25c313SErich Keane 1575b25c313SErich Keane // CHECK: #pragma acc serial 1585b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(static: i) 159*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 1605b25c313SErich Keane // CHECK-NEXT: ; 1615b25c313SErich Keane #pragma acc serial 1625b25c313SErich Keane #pragma acc loop gang(static:i) 163*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 1645b25c313SErich Keane 1655b25c313SErich Keane // CHECK: #pragma acc serial 1665b25c313SErich Keane // CHECK-NEXT: #pragma acc loop gang(static: *) 167*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 1685b25c313SErich Keane // CHECK-NEXT: ; 1695b25c313SErich Keane #pragma acc serial 1705b25c313SErich Keane #pragma acc loop gang(static:*) 171*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 1725b25c313SErich Keane 1735b25c313SErich Keane // CHECK: #pragma acc serial 1745b25c313SErich Keane // CHECK-NEXT: #pragma acc loop 175*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 1765b25c313SErich Keane // CHECK-NEXT: ; 1775b25c313SErich Keane #pragma acc serial 1785b25c313SErich Keane #pragma acc loop gang 179*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 180cf456ed2SErich Keane 181cf456ed2SErich Keane // CHECK: #pragma acc loop worker 182*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 183cf456ed2SErich Keane // CHECK-NEXT: ; 184cf456ed2SErich Keane #pragma acc parallel 185cf456ed2SErich Keane #pragma acc loop worker 186*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 187cf456ed2SErich Keane 188cf456ed2SErich Keane // CHECK: #pragma acc parallel 189cf456ed2SErich Keane // CHECK-NEXT: #pragma acc loop worker 190*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 191cf456ed2SErich Keane // CHECK-NEXT: ; 192cf456ed2SErich Keane #pragma acc parallel 193cf456ed2SErich Keane #pragma acc loop worker 194*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 195cf456ed2SErich Keane 196cf456ed2SErich Keane // CHECK: #pragma acc serial 197cf456ed2SErich Keane // CHECK-NEXT: #pragma acc loop worker 198*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 199cf456ed2SErich Keane // CHECK-NEXT: ; 200cf456ed2SErich Keane #pragma acc serial 201cf456ed2SErich Keane #pragma acc loop worker 202*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 203cf456ed2SErich Keane 204cf456ed2SErich Keane // CHECK: #pragma acc kernels 205cf456ed2SErich Keane // CHECK-NEXT: #pragma acc loop worker(num: 5) 206*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 207cf456ed2SErich Keane // CHECK-NEXT: ; 208cf456ed2SErich Keane #pragma acc kernels 209cf456ed2SErich Keane #pragma acc loop worker(5) 210*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 211cf456ed2SErich Keane 212cf456ed2SErich Keane // CHECK: #pragma acc kernels 213cf456ed2SErich Keane // CHECK-NEXT: #pragma acc loop worker(num: 5) 214*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 215cf456ed2SErich Keane // CHECK-NEXT: ; 216cf456ed2SErich Keane #pragma acc kernels 217cf456ed2SErich Keane #pragma acc loop worker(num:5) 218*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 219c8cbdc65SErich Keane 220c8cbdc65SErich Keane // CHECK: #pragma acc loop vector 221*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 222c8cbdc65SErich Keane // CHECK-NEXT: ; 223c8cbdc65SErich Keane #pragma acc loop vector 224*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 225c8cbdc65SErich Keane 226c8cbdc65SErich Keane // CHECK: #pragma acc loop vector(length: 5) 227*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 228c8cbdc65SErich Keane // CHECK-NEXT: ; 229c8cbdc65SErich Keane #pragma acc loop vector(5) 230*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 231c8cbdc65SErich Keane 232c8cbdc65SErich Keane // CHECK: #pragma acc loop vector(length: 5) 233*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 234c8cbdc65SErich Keane // CHECK-NEXT: ; 235c8cbdc65SErich Keane #pragma acc loop vector(length:5) 236*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 237c8cbdc65SErich Keane 238c8cbdc65SErich Keane // CHECK: #pragma acc parallel 239c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector 240*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 241c8cbdc65SErich Keane // CHECK-NEXT: ; 242c8cbdc65SErich Keane #pragma acc parallel 243c8cbdc65SErich Keane #pragma acc loop vector 244*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 245c8cbdc65SErich Keane 246c8cbdc65SErich Keane // CHECK: #pragma acc parallel 247c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector(length: 5) 248*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 249c8cbdc65SErich Keane // CHECK-NEXT: ; 250c8cbdc65SErich Keane #pragma acc parallel 251c8cbdc65SErich Keane #pragma acc loop vector(5) 252*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 253c8cbdc65SErich Keane 254c8cbdc65SErich Keane // CHECK: #pragma acc parallel 255c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector(length: 5) 256*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 257c8cbdc65SErich Keane // CHECK-NEXT: ; 258c8cbdc65SErich Keane #pragma acc parallel 259c8cbdc65SErich Keane #pragma acc loop vector(length:5) 260*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 261c8cbdc65SErich Keane 262c8cbdc65SErich Keane // CHECK: #pragma acc kernels 263c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector 264*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 265c8cbdc65SErich Keane // CHECK-NEXT: ; 266c8cbdc65SErich Keane #pragma acc kernels 267c8cbdc65SErich Keane #pragma acc loop vector 268*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 269c8cbdc65SErich Keane 270c8cbdc65SErich Keane // CHECK: #pragma acc kernels 271c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector(length: 5) 272*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 273c8cbdc65SErich Keane // CHECK-NEXT: ; 274c8cbdc65SErich Keane #pragma acc kernels 275c8cbdc65SErich Keane #pragma acc loop vector(5) 276*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 277c8cbdc65SErich Keane 278c8cbdc65SErich Keane // CHECK: #pragma acc kernels 279c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector(length: 5) 280*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 281c8cbdc65SErich Keane // CHECK-NEXT: ; 282c8cbdc65SErich Keane #pragma acc kernels 283c8cbdc65SErich Keane #pragma acc loop vector(length:5) 284*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 285c8cbdc65SErich Keane 286c8cbdc65SErich Keane // CHECK: #pragma acc serial 287c8cbdc65SErich Keane // CHECK-NEXT: #pragma acc loop vector 288*b0cfbfd7SErich Keane // CHECK-NEXT: for (int i = 0; i < 5; ++i) 289c8cbdc65SErich Keane // CHECK-NEXT: ; 290c8cbdc65SErich Keane #pragma acc serial 291c8cbdc65SErich Keane #pragma acc loop vector 292*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 293c8cbdc65SErich Keane 2940b0b1530Serichkeane int *iPtr; 2950b0b1530Serichkeane bool SomeB; 2960b0b1530Serichkeane 2970b0b1530Serichkeane //CHECK: #pragma acc loop reduction(+: iPtr) 2980b0b1530Serichkeane #pragma acc loop reduction(+: iPtr) 299*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 3000b0b1530Serichkeane //CHECK: #pragma acc loop reduction(*: i) 3010b0b1530Serichkeane #pragma acc loop reduction(*: i) 302*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 3030b0b1530Serichkeane //CHECK: #pragma acc loop reduction(max: SomeB) 3040b0b1530Serichkeane #pragma acc loop reduction(max: SomeB) 305*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 3060b0b1530Serichkeane //CHECK: #pragma acc loop reduction(min: iPtr) 3070b0b1530Serichkeane #pragma acc loop reduction(min: iPtr) 308*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 3090b0b1530Serichkeane //CHECK: #pragma acc loop reduction(&: i) 3100b0b1530Serichkeane #pragma acc loop reduction(&: i) 311*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 3120b0b1530Serichkeane //CHECK: #pragma acc loop reduction(|: SomeB) 3130b0b1530Serichkeane #pragma acc loop reduction(|: SomeB) 314*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 3150b0b1530Serichkeane //CHECK: #pragma acc loop reduction(^: iPtr) 3160b0b1530Serichkeane #pragma acc loop reduction(^: iPtr) 317*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 3180b0b1530Serichkeane //CHECK: #pragma acc loop reduction(&&: i) 3190b0b1530Serichkeane #pragma acc loop reduction(&&: i) 320*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 3210b0b1530Serichkeane //CHECK: #pragma acc loop reduction(||: SomeB) 3220b0b1530Serichkeane #pragma acc loop reduction(||: SomeB) 323*b0cfbfd7SErich Keane for(int i = 0;i<5;++i); 32442f4e505SErich Keane } 325