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