1
1
// RUN: fir-opt --lower-workdistribute %s | FileCheck %s
2
2
3
- // CHECK-LABEL: func.func @x
3
+ // CHECK-LABEL: func.func @x(
4
4
// CHECK: %[[VAL_0:.*]] = fir.alloca index {bindc_name = "lb"}
5
5
// CHECK: fir.store %[[ARG0:.*]] to %[[VAL_0]] : !fir.ref<index>
6
6
// CHECK: %[[VAL_1:.*]] = fir.alloca index {bindc_name = "ub"}
19
19
// CHECK: %[[VAL_11:.*]] = fir.alloca !fir.heap<index>
20
20
// CHECK: %[[VAL_12:.*]] = omp.map.info var_ptr(%[[VAL_11]] : !fir.ref<!fir.heap<index>>, !fir.heap<index>) map_clauses(from) capture(ByRef) -> !fir.ref<!fir.heap<index>> {name = "__flang_workdistribute_from"}
21
21
// CHECK: %[[VAL_13:.*]] = omp.map.info var_ptr(%[[VAL_11]] : !fir.ref<!fir.heap<index>>, !fir.heap<index>) map_clauses(to) capture(ByRef) -> !fir.ref<!fir.heap<index>> {name = "__flang_workdistribute_to"}
22
- // CHECK: omp.target map_entries(%[[VAL_7]] -> %[[VAL_14:.*]], %[[VAL_8]] -> %[[VAL_15:.*]], %[[VAL_9]] -> %[[VAL_16:.*]], %[[VAL_10]] -> %[[VAL_17:.*]], %[[VAL_12]] -> %[[VAL_18:.*]] : !fir.ref<index>, !fir.ref<index>, !fir.ref<index>, !fir.ref<index>, !fir.ref<!fir.heap<index>>) {
23
- // CHECK: %[[VAL_19:.*]] = arith.constant 1 : index
24
- // CHECK: %[[VAL_20:.*]] = fir.load %[[VAL_14]] : !fir.ref<index>
25
- // CHECK: %[[VAL_21:.*]] = fir.load %[[VAL_15]] : !fir.ref<index>
26
- // CHECK: %[[VAL_22:.*]] = fir.load %[[VAL_16]] : !fir.ref<index>
27
- // CHECK: %[[VAL_23:.*]] = arith.addi %[[VAL_21]], %[[VAL_21]] : index
28
- // CHECK: %[[VAL_24:.*]] = fir.allocmem index, %[[VAL_19]] {uniq_name = "dev_buf"}
29
- // CHECK: fir.store %[[VAL_24]] to %[[VAL_18]] : !fir.llvm_ptr<!fir.heap<index>>
30
- // CHECK: omp.terminator
31
- // CHECK: }
32
- // CHECK: omp.target map_entries(%[[VAL_7]] -> %[[VAL_25:.*]], %[[VAL_8]] -> %[[VAL_26:.*]], %[[VAL_9]] -> %[[VAL_27:.*]], %[[VAL_10]] -> %[[VAL_28:.*]], %[[VAL_13]] -> %[[VAL_29:.*]] : !fir.ref<index>, !fir.ref<index>, !fir.ref<index>, !fir.ref<index>, !fir.ref<!fir.heap<index>>) {
33
- // CHECK: %[[VAL_30:.*]] = fir.load %[[VAL_29]] : !fir.llvm_ptr<!fir.heap<index>>
34
- // CHECK: %[[VAL_31:.*]] = fir.load %[[VAL_25]] : !fir.ref<index>
35
- // CHECK: %[[VAL_32:.*]] = fir.load %[[VAL_26]] : !fir.ref<index>
36
- // CHECK: %[[VAL_33:.*]] = fir.load %[[VAL_27]] : !fir.ref<index>
37
- // CHECK: %[[VAL_34:.*]] = arith.addi %[[VAL_32]], %[[VAL_32]] : index
22
+ // CHECK: %[[VAL_14:.*]] = arith.constant 1 : index
23
+ // CHECK: %[[VAL_15:.*]] = fir.load %[[VAL_0]] : !fir.ref<index>
24
+ // CHECK: %[[VAL_16:.*]] = fir.load %[[VAL_1]] : !fir.ref<index>
25
+ // CHECK: %[[VAL_17:.*]] = fir.load %[[VAL_2]] : !fir.ref<index>
26
+ // CHECK: %[[VAL_18:.*]] = arith.addi %[[VAL_16]], %[[VAL_16]] : index
27
+ // CHECK: %[[VAL_19:.*]] = llvm.mlir.constant(0 : i32) : i32
28
+ // CHECK: %[[VAL_20:.*]] = "fir.omp_target_allocmem"(%[[VAL_19]], %[[VAL_14]]) <{in_type = index, operandSegmentSizes = array<i32: 1, 0, 1>, uniq_name = "dev_buf"}> : (i32, index) -> !fir.heap<index>
29
+ // CHECK: fir.store %[[VAL_20]] to %[[VAL_11]] : !fir.ref<!fir.heap<index>>
30
+ // CHECK: omp.target map_entries(%[[VAL_7]] -> %[[VAL_21:.*]], %[[VAL_8]] -> %[[VAL_22:.*]], %[[VAL_9]] -> %[[VAL_23:.*]], %[[VAL_10]] -> %[[VAL_24:.*]], %[[VAL_13]] -> %[[VAL_25:.*]] : !fir.ref<index>, !fir.ref<index>, !fir.ref<index>, !fir.ref<index>, !fir.ref<!fir.heap<index>>) {
31
+ // CHECK: %[[VAL_26:.*]] = fir.load %[[VAL_25]] : !fir.llvm_ptr<!fir.heap<index>>
32
+ // CHECK: %[[VAL_27:.*]] = fir.load %[[VAL_21]] : !fir.ref<index>
33
+ // CHECK: %[[VAL_28:.*]] = fir.load %[[VAL_22]] : !fir.ref<index>
34
+ // CHECK: %[[VAL_29:.*]] = fir.load %[[VAL_23]] : !fir.ref<index>
35
+ // CHECK: %[[VAL_30:.*]] = arith.addi %[[VAL_28]], %[[VAL_28]] : index
38
36
// CHECK: omp.teams {
39
37
// CHECK: omp.parallel {
40
38
// CHECK: omp.distribute {
41
39
// CHECK: omp.wsloop {
42
- // CHECK: omp.loop_nest (%[[VAL_35 :.*]]) : index = (%[[VAL_31 ]]) to (%[[VAL_32 ]]) inclusive step (%[[VAL_33 ]]) {
43
- // CHECK: fir.store %[[VAL_34 ]] to %[[VAL_30 ]] : !fir.heap<index>
40
+ // CHECK: omp.loop_nest (%[[VAL_31 :.*]]) : index = (%[[VAL_27 ]]) to (%[[VAL_28 ]]) inclusive step (%[[VAL_29 ]]) {
41
+ // CHECK: fir.store %[[VAL_30 ]] to %[[VAL_26 ]] : !fir.heap<index>
44
42
// CHECK: omp.yield
45
43
// CHECK: }
46
44
// CHECK: } {omp.composite}
51
49
// CHECK: }
52
50
// CHECK: omp.terminator
53
51
// CHECK: }
54
- // CHECK: omp.target map_entries(%[[VAL_7]] -> %[[VAL_36:.*]], %[[VAL_8]] -> %[[VAL_37:.*]], %[[VAL_9]] -> %[[VAL_38:.*]], %[[VAL_10]] -> %[[VAL_39:.*]], %[[VAL_13]] -> %[[VAL_40:.*]] : !fir.ref<index>, !fir.ref<index>, !fir.ref<index>, !fir.ref<index>, !fir.ref<!fir.heap<index>>) {
55
- // CHECK: %[[VAL_41:.*]] = fir.load %[[VAL_40]] : !fir.llvm_ptr<!fir.heap<index>>
56
- // CHECK: %[[VAL_42:.*]] = fir.load %[[VAL_36]] : !fir.ref<index>
57
- // CHECK: %[[VAL_43:.*]] = fir.load %[[VAL_37]] : !fir.ref<index>
58
- // CHECK: %[[VAL_44:.*]] = fir.load %[[VAL_38]] : !fir.ref<index>
59
- // CHECK: %[[VAL_45:.*]] = arith.addi %[[VAL_43]], %[[VAL_43]] : index
60
- // CHECK: fir.store %[[VAL_42]] to %[[VAL_41]] : !fir.heap<index>
61
- // CHECK: fir.freemem %[[VAL_41]] : !fir.heap<index>
62
- // CHECK: omp.terminator
63
- // CHECK: }
52
+ // CHECK: %[[VAL_32:.*]] = fir.load %[[VAL_11]] : !fir.ref<!fir.heap<index>>
53
+ // CHECK: %[[VAL_33:.*]] = fir.load %[[VAL_0]] : !fir.ref<index>
54
+ // CHECK: %[[VAL_34:.*]] = fir.load %[[VAL_1]] : !fir.ref<index>
55
+ // CHECK: %[[VAL_35:.*]] = fir.load %[[VAL_2]] : !fir.ref<index>
56
+ // CHECK: %[[VAL_36:.*]] = arith.addi %[[VAL_34]], %[[VAL_34]] : index
57
+ // CHECK: fir.store %[[VAL_33]] to %[[VAL_32]] : !fir.heap<index>
58
+ // CHECK: %[[VAL_37:.*]] = llvm.mlir.constant(0 : i32) : i32
59
+ // CHECK: "fir.omp_target_freemem"(%[[VAL_37]], %[[VAL_32]]) : (i32, !fir.heap<index>) -> ()
64
60
// CHECK: omp.terminator
65
61
// CHECK: }
66
62
// CHECK: return
@@ -79,10 +75,10 @@ func.func @x(%lb : index, %ub : index, %step : index, %addr : !fir.ref<index>) {
79
75
%step_map = omp.map.info var_ptr (%step_ref : !fir.ref <index >, index ) map_clauses (to ) capture (ByRef ) -> !fir.ref <index > {name = " step" }
80
76
%addr_map = omp.map.info var_ptr (%addr : !fir.ref <index >, index ) map_clauses (tofrom ) capture (ByRef ) -> !fir.ref <index > {name = " addr" }
81
77
82
- omp.target map_entries (%lb_map -> %arg0 , %ub_map -> %arg1 , %step_map -> %arg2 , %addr_map -> %arg3 : !fir.ref <index >, !fir.ref <index >, !fir.ref <index >, !fir.ref <index >) {
83
- %lb_val = fir.load %arg0 : !fir.ref <index >
84
- %ub_val = fir.load %arg1 : !fir.ref <index >
85
- %step_val = fir.load %arg2 : !fir.ref <index >
78
+ omp.target map_entries (%lb_map -> %ARG0 , %ub_map -> %ARG1 , %step_map -> %ARG2 , %addr_map -> %ARG3 : !fir.ref <index >, !fir.ref <index >, !fir.ref <index >, !fir.ref <index >) {
79
+ %lb_val = fir.load %ARG0 : !fir.ref <index >
80
+ %ub_val = fir.load %ARG1 : !fir.ref <index >
81
+ %step_val = fir.load %ARG2 : !fir.ref <index >
86
82
%one = arith.constant 1 : index
87
83
88
84
%20 = arith.addi %ub_val , %ub_val : index
0 commit comments