@@ -72,7 +72,6 @@ func.func @_QPsb2(%arg0: !fir.ref<i32> {fir.bindc_name = "x"}, %arg1: !fir.ref<i
72
72
// CHECK: llvm.return
73
73
// CHECK: }
74
74
75
-
76
75
// -----
77
76
78
77
func.func @_QPsb(%arr: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "arr"}) {
@@ -218,6 +217,8 @@ func.func @_QPsimd1(%arg0: !fir.ref<i32> {fir.bindc_name = "n"}, %arg1: !fir.ref
218
217
// CHECK: llvm.return
219
218
// CHECK: }
220
219
220
+ // -----
221
+
221
222
func.func @_QPomp_target_data() {
222
223
%0 = fir.alloca !fir.array<1024xi32> {bindc_name = "a", uniq_name = "_QFomp_target_dataEa"}
223
224
%1 = fir.alloca !fir.array<1024xi32> {bindc_name = "b", uniq_name = "_QFomp_target_dataEb"}
@@ -242,6 +243,84 @@ func.func @_QPomp_target_data() {
242
243
// CHECK: llvm.return
243
244
// CHECK: }
244
245
246
+ // -----
247
+
248
+ func.func @_QPopenmp_target_data_region() {
249
+ %0 = fir.alloca !fir.array<1024xi32> {bindc_name = "a", uniq_name = "_QFopenmp_target_data_regionEa"}
250
+ %1 = fir.alloca i32 {bindc_name = "i", uniq_name = "_QFopenmp_target_data_regionEi"}
251
+ omp.target_data map((tofrom -> %0 : !fir.ref<!fir.array<1024xi32>>)) {
252
+ %c1_i32 = arith.constant 1 : i32
253
+ %2 = fir.convert %c1_i32 : (i32) -> index
254
+ %c1024_i32 = arith.constant 1024 : i32
255
+ %3 = fir.convert %c1024_i32 : (i32) -> index
256
+ %c1 = arith.constant 1 : index
257
+ %4 = fir.convert %2 : (index) -> i32
258
+ %5:2 = fir.do_loop %arg0 = %2 to %3 step %c1 iter_args(%arg1 = %4) -> (index, i32) {
259
+ fir.store %arg1 to %1 : !fir.ref<i32>
260
+ %6 = fir.load %1 : !fir.ref<i32>
261
+ %7 = fir.load %1 : !fir.ref<i32>
262
+ %8 = fir.convert %7 : (i32) -> i64
263
+ %c1_i64 = arith.constant 1 : i64
264
+ %9 = arith.subi %8, %c1_i64 : i64
265
+ %10 = fir.coordinate_of %0, %9 : (!fir.ref<!fir.array<1024xi32>>, i64) -> !fir.ref<i32>
266
+ fir.store %6 to %10 : !fir.ref<i32>
267
+ %11 = arith.addi %arg0, %c1 : index
268
+ %12 = fir.convert %c1 : (index) -> i32
269
+ %13 = fir.load %1 : !fir.ref<i32>
270
+ %14 = arith.addi %13, %12 : i32
271
+ fir.result %11, %14 : index, i32
272
+ }
273
+ fir.store %5#1 to %1 : !fir.ref<i32>
274
+ omp.terminator
275
+ }
276
+ return
277
+ }
278
+
279
+ // CHECK-LABEL: llvm.func @_QPopenmp_target_data_region() {
280
+ // CHECK: %[[VAL_0:.*]] = llvm.mlir.constant(1 : i64) : i64
281
+ // CHECK: %[[VAL_1:.*]] = llvm.alloca %[[VAL_0]] x !llvm.array<1024 x i32> {bindc_name = "a", in_type = !fir.array<1024xi32>, operand_segment_sizes = array<i32: 0, 0>, uniq_name = "_QFopenmp_target_data_regionEa"} : (i64) -> !llvm.ptr<array<1024 x i32>>
282
+ // CHECK: %[[VAL_2:.*]] = llvm.mlir.constant(1 : i64) : i64
283
+ // CHECK: %[[VAL_3:.*]] = llvm.alloca %[[VAL_2]] x i32 {bindc_name = "i", in_type = i32, operand_segment_sizes = array<i32: 0, 0>, uniq_name = "_QFopenmp_target_data_regionEi"} : (i64) -> !llvm.ptr<i32>
284
+ // CHECK: omp.target_data map((tofrom -> %[[VAL_1]] : !llvm.ptr<array<1024 x i32>>)) {
285
+ // CHECK: %[[VAL_4:.*]] = llvm.mlir.constant(1 : i32) : i32
286
+ // CHECK: %[[VAL_5:.*]] = llvm.sext %[[VAL_4]] : i32 to i64
287
+ // CHECK: %[[VAL_6:.*]] = llvm.mlir.constant(1024 : i32) : i32
288
+ // CHECK: %[[VAL_7:.*]] = llvm.sext %[[VAL_6]] : i32 to i64
289
+ // CHECK: %[[VAL_8:.*]] = llvm.mlir.constant(1 : index) : i64
290
+ // CHECK: %[[VAL_9:.*]] = llvm.trunc %[[VAL_5]] : i64 to i32
291
+ // CHECK: %[[VAL_10:.*]] = llvm.sub %[[VAL_7]], %[[VAL_5]] : i64
292
+ // CHECK: %[[VAL_11:.*]] = llvm.add %[[VAL_10]], %[[VAL_8]] : i64
293
+ // CHECK: llvm.br ^bb1(%[[VAL_5]], %[[VAL_9]], %[[VAL_11]] : i64, i32, i64)
294
+ // CHECK: ^bb1(%[[VAL_12:.*]]: i64, %[[VAL_13:.*]]: i32, %[[VAL_14:.*]]: i64):
295
+ // CHECK: %[[VAL_15:.*]] = llvm.mlir.constant(0 : index) : i64
296
+ // CHECK: %[[VAL_16:.*]] = llvm.icmp "sgt" %[[VAL_14]], %[[VAL_15]] : i64
297
+ // CHECK: llvm.cond_br %[[VAL_16]], ^bb2, ^bb3
298
+ // CHECK: ^bb2:
299
+ // CHECK: llvm.store %[[VAL_13]], %[[VAL_3]] : !llvm.ptr<i32>
300
+ // CHECK: %[[VAL_17:.*]] = llvm.load %[[VAL_3]] : !llvm.ptr<i32>
301
+ // CHECK: %[[VAL_18:.*]] = llvm.load %[[VAL_3]] : !llvm.ptr<i32>
302
+ // CHECK: %[[VAL_19:.*]] = llvm.sext %[[VAL_18]] : i32 to i64
303
+ // CHECK: %[[VAL_20:.*]] = llvm.mlir.constant(1 : i64) : i64
304
+ // CHECK: %[[VAL_21:.*]] = llvm.sub %[[VAL_19]], %[[VAL_20]] : i64
305
+ // CHECK: %[[VAL_22:.*]] = llvm.getelementptr %[[VAL_1]][0, %[[VAL_21]]] : (!llvm.ptr<array<1024 x i32>>, i64) -> !llvm.ptr<i32>
306
+ // CHECK: llvm.store %[[VAL_17]], %[[VAL_22]] : !llvm.ptr<i32>
307
+ // CHECK: %[[VAL_23:.*]] = llvm.add %[[VAL_12]], %[[VAL_8]] : i64
308
+ // CHECK: %[[VAL_24:.*]] = llvm.trunc %[[VAL_8]] : i64 to i32
309
+ // CHECK: %[[VAL_25:.*]] = llvm.load %[[VAL_3]] : !llvm.ptr<i32>
310
+ // CHECK: %[[VAL_26:.*]] = llvm.add %[[VAL_25]], %[[VAL_24]] : i32
311
+ // CHECK: %[[VAL_27:.*]] = llvm.add %[[VAL_12]], %[[VAL_8]] : i64
312
+ // CHECK: %[[VAL_28:.*]] = llvm.mlir.constant(1 : index) : i64
313
+ // CHECK: %[[VAL_29:.*]] = llvm.sub %[[VAL_14]], %[[VAL_28]] : i64
314
+ // CHECK: llvm.br ^bb1(%[[VAL_27]], %[[VAL_26]], %[[VAL_29]] : i64, i32, i64)
315
+ // CHECK: ^bb3:
316
+ // CHECK: llvm.store %[[VAL_13]], %[[VAL_3]] : !llvm.ptr<i32>
317
+ // CHECK: omp.terminator
318
+ // CHECK: }
319
+ // CHECK: llvm.return
320
+ // CHECK: }
321
+
322
+ // -----
323
+
245
324
func.func @_QPsimdloop_with_nested_loop() {
246
325
%0 = fir.alloca i32 {adapt.valuebyref}
247
326
%1 = fir.alloca !fir.array<10xi32> {bindc_name = "a", uniq_name = "_QFsimdloop_with_nested_loopEa"}
0 commit comments