@@ -176,4 +176,80 @@ extern "C" void acc_combined(int N) {
176
176
// CHECK-NEXT: } attributes {collapse = [1, 2, 2, 3], collapseDeviceType = [#acc.device_type<none>, #acc.device_type<radeon>, #acc.device_type<nvidia>, #acc.device_type<host>]}
177
177
// CHECK: acc.yield
178
178
// CHECK-NEXT: } loc
179
+
180
+ #pragma acc kernels loop self
181
+ for (unsigned I = 0 ; I < N; ++I);
182
+ // CHECK-NEXT: acc.kernels combined(loop) {
183
+ // CHECK-NEXT: acc.loop combined(kernels) {
184
+ // CHECK: acc.yield
185
+ // CHECK-NEXT: } loc
186
+ // CHECK-NEXT: acc.terminator
187
+ // CHECK-NEXT: } attributes {selfAttr}
188
+
189
+ #pragma acc serial loop self(N)
190
+ for (unsigned I = 0 ; I < N; ++I);
191
+ // CHECK-NEXT: %[[N_LOAD:.*]] = cir.load %[[ALLOCA_N]] : !cir.ptr<!s32i>, !s32i
192
+ // CHECK-NEXT: %[[BOOL_CAST:.*]] = cir.cast(int_to_bool, %[[N_LOAD]] : !s32i), !cir.bool
193
+ // CHECK-NEXT: %[[CONV_CAST:.*]] = builtin.unrealized_conversion_cast %[[BOOL_CAST]] : !cir.bool to i1
194
+ // CHECK-NEXT: acc.serial combined(loop) self(%[[CONV_CAST]]) {
195
+ // CHECK-NEXT: acc.loop combined(serial) {
196
+ // CHECK: acc.yield
197
+ // CHECK-NEXT: } loc
198
+ // CHECK-NEXT: acc.yield
199
+ // CHECK-NEXT: } loc
200
+
201
+ #pragma acc parallel loop if(N)
202
+ for (unsigned I = 0 ; I < N; ++I);
203
+ // CHECK-NEXT: %[[N_LOAD:.*]] = cir.load %[[ALLOCA_N]] : !cir.ptr<!s32i>, !s32i
204
+ // CHECK-NEXT: %[[BOOL_CAST:.*]] = cir.cast(int_to_bool, %[[N_LOAD]] : !s32i), !cir.bool
205
+ // CHECK-NEXT: %[[CONV_CAST:.*]] = builtin.unrealized_conversion_cast %[[BOOL_CAST]] : !cir.bool to i1
206
+ // CHECK-NEXT: acc.parallel combined(loop) if(%[[CONV_CAST]]) {
207
+ // CHECK-NEXT: acc.loop combined(parallel) {
208
+ // CHECK: acc.yield
209
+ // CHECK-NEXT: } loc
210
+ // CHECK-NEXT: acc.yield
211
+ // CHECK-NEXT: } loc
212
+
213
+ #pragma acc serial loop if(1)
214
+ for (unsigned I = 0 ; I < N; ++I);
215
+ // CHECK-NEXT: %[[ONE_LITERAL:.*]] = cir.const #cir.int<1> : !s32i
216
+ // CHECK-NEXT: %[[BOOL_CAST:.*]] = cir.cast(int_to_bool, %[[ONE_LITERAL]] : !s32i), !cir.bool
217
+ // CHECK-NEXT: %[[CONV_CAST:.*]] = builtin.unrealized_conversion_cast %[[BOOL_CAST]] : !cir.bool to i1
218
+ // CHECK-NEXT: acc.serial combined(loop) if(%[[CONV_CAST]]) {
219
+ // CHECK-NEXT: acc.loop combined(serial) {
220
+ // CHECK: acc.yield
221
+ // CHECK-NEXT: } loc
222
+ // CHECK-NEXT: acc.yield
223
+ // CHECK-NEXT: } loc
224
+
225
+ #pragma acc kernels loop if(N == 1)
226
+ for (unsigned I = 0 ; I < N; ++I);
227
+ // CHECK-NEXT: %[[N_LOAD:.*]] = cir.load %[[ALLOCA_N]] : !cir.ptr<!s32i>, !s32i
228
+ // CHECK-NEXT: %[[ONE_LITERAL:.*]] = cir.const #cir.int<1> : !s32i
229
+ // CHECK-NEXT: %[[EQ_RES:.*]] = cir.cmp(eq, %[[N_LOAD]], %[[ONE_LITERAL]]) : !s32i, !cir.bool
230
+ // CHECK-NEXT: %[[CONV_CAST:.*]] = builtin.unrealized_conversion_cast %[[EQ_RES]] : !cir.bool to i1
231
+ // CHECK-NEXT: acc.kernels combined(loop) if(%[[CONV_CAST]]) {
232
+ // CHECK-NEXT: acc.loop combined(kernels) {
233
+ // CHECK: acc.yield
234
+ // CHECK-NEXT: } loc
235
+ // CHECK-NEXT: acc.terminator
236
+ // CHECK-NEXT: } loc
237
+
238
+ #pragma acc parallel loop if(N == 1) self(N == 2)
239
+ for (unsigned I = 0 ; I < N; ++I);
240
+ // CHECK-NEXT: %[[N_LOAD:.*]] = cir.load %[[ALLOCA_N]] : !cir.ptr<!s32i>, !s32i
241
+ // CHECK-NEXT: %[[ONE_LITERAL:.*]] = cir.const #cir.int<1> : !s32i
242
+ // CHECK-NEXT: %[[EQ_RES_IF:.*]] = cir.cmp(eq, %[[N_LOAD]], %[[ONE_LITERAL]]) : !s32i, !cir.bool
243
+ // CHECK-NEXT: %[[CONV_CAST_IF:.*]] = builtin.unrealized_conversion_cast %[[EQ_RES_IF]] : !cir.bool to i1
244
+ // CHECK-NEXT: %[[N_LOAD:.*]] = cir.load %[[ALLOCA_N]] : !cir.ptr<!s32i>, !s32i
245
+ // CHECK-NEXT: %[[TWO_LITERAL:.*]] = cir.const #cir.int<2> : !s32i
246
+ // CHECK-NEXT: %[[EQ_RES_SELF:.*]] = cir.cmp(eq, %[[N_LOAD]], %[[TWO_LITERAL]]) : !s32i, !cir.bool
247
+ // CHECK-NEXT: %[[CONV_CAST_SELF:.*]] = builtin.unrealized_conversion_cast %[[EQ_RES_SELF]] : !cir.bool to i1
248
+ // CHECK-NEXT: acc.parallel combined(loop) self(%[[CONV_CAST_SELF]]) if(%[[CONV_CAST_IF]]) {
249
+ // CHECK-NEXT: acc.loop combined(parallel) {
250
+ // CHECK: acc.yield
251
+ // CHECK-NEXT: } loc
252
+ // CHECK-NEXT: acc.yield
253
+ // CHECK-NEXT: } loc
254
+
179
255
}
0 commit comments