@@ -7,32 +7,35 @@ func.func @test_total_expr(%input: !hlfir.expr<?x?xf32>, %mask: !hlfir.expr<?x?x
77// CHECK-LABEL: func.func @test_total_expr(
88// CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !hlfir.expr<?x?xf32>,
99// CHECK-SAME: %[[VAL_1:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !hlfir.expr<?x?x!fir.logical<4>>) -> f32 {
10+ // CHECK: %[[FALSE:.*]] = arith.constant false
1011// CHECK: %[[VAL_2:.*]] = arith.constant 1 : index
12+ // CHECK: %[[TRUE:.*]] = arith.constant true
1113// CHECK: %[[VAL_3:.*]] = arith.constant -3.40282347E+38 : f32
1214// CHECK: %[[VAL_4:.*]] = hlfir.shape_of %[[VAL_0]] : (!hlfir.expr<?x?xf32>) -> !fir.shape<2>
1315// CHECK: %[[VAL_5:.*]] = hlfir.get_extent %[[VAL_4]] {dim = 0 : index} : (!fir.shape<2>) -> index
1416// CHECK: %[[VAL_6:.*]] = hlfir.get_extent %[[VAL_4]] {dim = 1 : index} : (!fir.shape<2>) -> index
15- // CHECK: %[[VAL_7:.*]] = fir.do_loop %[[VAL_8:.*]] = %[[VAL_2]] to %[[VAL_6]] step %[[VAL_2]] iter_args(%[[VAL_9:.*]] = %[[VAL_3]]) -> (f32) {
16- // CHECK: %[[VAL_10:.*]] = fir.do_loop %[[VAL_11:.*]] = %[[VAL_2]] to %[[VAL_5]] step %[[VAL_2]] iter_args(%[[VAL_12:.*]] = %[[VAL_9]]) -> (f32) {
17+ // CHECK: %[[VAL_7:.*]]:2 = fir.do_loop %[[VAL_8:.*]] = %[[VAL_2]] to %[[VAL_6]] step %[[VAL_2]] iter_args(%[[VAL_9:.*]] = %[[VAL_3]], %[[FIRST1:.*]] = %[[TRUE]] ) -> (f32, i1 ) {
18+ // CHECK: %[[VAL_10:.*]]:2 = fir.do_loop %[[VAL_11:.*]] = %[[VAL_2]] to %[[VAL_5]] step %[[VAL_2]] iter_args(%[[VAL_12:.*]] = %[[VAL_9]], %[[FIRST2:.*]] = %[[FIRST1]] ) -> (f32, i1 ) {
1719// CHECK: %[[VAL_13:.*]] = hlfir.apply %[[VAL_1]], %[[VAL_11]], %[[VAL_8]] : (!hlfir.expr<?x?x!fir.logical<4>>, index, index) -> !fir.logical<4>
1820// CHECK: %[[VAL_14:.*]] = fir.convert %[[VAL_13]] : (!fir.logical<4>) -> i1
19- // CHECK: %[[VAL_15:.*]] = fir.if %[[VAL_14]] -> (f32) {
21+ // CHECK: %[[VAL_15:.*]]:2 = fir.if %[[VAL_14]] -> (f32, i1 ) {
2022// CHECK: %[[VAL_16:.*]] = hlfir.apply %[[VAL_0]], %[[VAL_11]], %[[VAL_8]] : (!hlfir.expr<?x?xf32>, index, index) -> f32
2123// CHECK: %[[VAL_17:.*]] = arith.cmpf ogt, %[[VAL_16]], %[[VAL_12]] fastmath<contract> : f32
2224// CHECK: %[[VAL_18:.*]] = arith.cmpf une, %[[VAL_12]], %[[VAL_12]] fastmath<contract> : f32
2325// CHECK: %[[VAL_19:.*]] = arith.cmpf oeq, %[[VAL_16]], %[[VAL_16]] fastmath<contract> : f32
2426// CHECK: %[[VAL_20:.*]] = arith.andi %[[VAL_18]], %[[VAL_19]] : i1
2527// CHECK: %[[VAL_21:.*]] = arith.ori %[[VAL_17]], %[[VAL_20]] : i1
26- // CHECK: %[[VAL_22:.*]] = arith.select %[[VAL_21]], %[[VAL_16]], %[[VAL_12]] : f32
27- // CHECK: fir.result %[[VAL_22]] : f32
28+ // CHECK: %[[IS_FIRST:.*]] = arith.ori %[[VAL_21]], %[[FIRST2]] : i1
29+ // CHECK: %[[VAL_22:.*]] = arith.select %[[IS_FIRST]], %[[VAL_16]], %[[VAL_12]] : f32
30+ // CHECK: fir.result %[[VAL_22]], %[[FALSE]] : f32, i1
2831// CHECK: } else {
29- // CHECK: fir.result %[[VAL_12]] : f32
32+ // CHECK: fir.result %[[VAL_12]], %[[FIRST2]] : f32, i1
3033// CHECK: }
31- // CHECK: fir.result %[[VAL_15]] : f32
34+ // CHECK: fir.result %[[VAL_15]]#0, %[[VAL_15]]#1 : f32, i1
3235// CHECK: }
33- // CHECK: fir.result %[[VAL_10]] : f32
36+ // CHECK: fir.result %[[VAL_10]]#0, %[[VAL_10]]#1 : f32, i1
3437// CHECK: }
35- // CHECK: return %[[VAL_7]] : f32
38+ // CHECK: return %[[VAL_7]]#0 : f32
3639// CHECK: }
3740
3841func.func @test_partial_expr(%input: !hlfir.expr<?x?xf64>, %mask: !hlfir.expr<?x?x!fir.logical<4>>) -> !hlfir.expr<?xf64> {
@@ -43,32 +46,35 @@ func.func @test_partial_expr(%input: !hlfir.expr<?x?xf64>, %mask: !hlfir.expr<?x
4346// CHECK-LABEL: func.func @test_partial_expr(
4447// CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !hlfir.expr<?x?xf64>,
4548// CHECK-SAME: %[[VAL_1:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !hlfir.expr<?x?x!fir.logical<4>>) -> !hlfir.expr<?xf64> {
49+ // CHECK: %[[FALSE:.*]] = arith.constant false
4650// CHECK: %[[VAL_2:.*]] = arith.constant 1 : index
51+ // CHECK: %[[TRUE:.*]] = arith.constant true
4752// CHECK: %[[VAL_3:.*]] = arith.constant -1.7976931348623157E+308 : f64
4853// CHECK: %[[VAL_4:.*]] = hlfir.shape_of %[[VAL_0]] : (!hlfir.expr<?x?xf64>) -> !fir.shape<2>
4954// CHECK: %[[VAL_5:.*]] = hlfir.get_extent %[[VAL_4]] {dim = 0 : index} : (!fir.shape<2>) -> index
5055// CHECK: %[[VAL_6:.*]] = hlfir.get_extent %[[VAL_4]] {dim = 1 : index} : (!fir.shape<2>) -> index
5156// CHECK: %[[VAL_7:.*]] = fir.shape %[[VAL_6]] : (index) -> !fir.shape<1>
5257// CHECK: %[[VAL_8:.*]] = hlfir.elemental %[[VAL_7]] unordered : (!fir.shape<1>) -> !hlfir.expr<?xf64> {
5358// CHECK: ^bb0(%[[VAL_9:.*]]: index):
54- // CHECK: %[[VAL_10:.*]] = fir.do_loop %[[VAL_11:.*]] = %[[VAL_2]] to %[[VAL_5]] step %[[VAL_2]] unordered iter_args(%[[VAL_12:.*]] = %[[VAL_3]]) -> (f64) {
59+ // CHECK: %[[VAL_10:.*]]:2 = fir.do_loop %[[VAL_11:.*]] = %[[VAL_2]] to %[[VAL_5]] step %[[VAL_2]] unordered iter_args(%[[VAL_12:.*]] = %[[VAL_3]], %[[FIRST:.*]] = %[[TRUE]] ) -> (f64, i1 ) {
5560// CHECK: %[[VAL_13:.*]] = hlfir.apply %[[VAL_1]], %[[VAL_11]], %[[VAL_9]] : (!hlfir.expr<?x?x!fir.logical<4>>, index, index) -> !fir.logical<4>
5661// CHECK: %[[VAL_14:.*]] = fir.convert %[[VAL_13]] : (!fir.logical<4>) -> i1
57- // CHECK: %[[VAL_15:.*]] = fir.if %[[VAL_14]] -> (f64) {
62+ // CHECK: %[[VAL_15:.*]]:2 = fir.if %[[VAL_14]] -> (f64, i1 ) {
5863// CHECK: %[[VAL_16:.*]] = hlfir.apply %[[VAL_0]], %[[VAL_11]], %[[VAL_9]] : (!hlfir.expr<?x?xf64>, index, index) -> f64
5964// CHECK: %[[VAL_17:.*]] = arith.cmpf ogt, %[[VAL_16]], %[[VAL_12]] fastmath<reassoc> : f64
6065// CHECK: %[[VAL_18:.*]] = arith.cmpf une, %[[VAL_12]], %[[VAL_12]] fastmath<reassoc> : f64
6166// CHECK: %[[VAL_19:.*]] = arith.cmpf oeq, %[[VAL_16]], %[[VAL_16]] fastmath<reassoc> : f64
6267// CHECK: %[[VAL_20:.*]] = arith.andi %[[VAL_18]], %[[VAL_19]] : i1
6368// CHECK: %[[VAL_21:.*]] = arith.ori %[[VAL_17]], %[[VAL_20]] : i1
64- // CHECK: %[[VAL_22:.*]] = arith.select %[[VAL_21]], %[[VAL_16]], %[[VAL_12]] : f64
65- // CHECK: fir.result %[[VAL_22]] : f64
69+ // CHECK: %[[IS_FIRST:.*]] = arith.ori %[[VAL_21]], %[[FIRST]] : i1
70+ // CHECK: %[[VAL_22:.*]] = arith.select %[[IS_FIRST]], %[[VAL_16]], %[[VAL_12]] : f64
71+ // CHECK: fir.result %[[VAL_22]], %[[FALSE]] : f64, i1
6672// CHECK: } else {
67- // CHECK: fir.result %[[VAL_12]] : f64
73+ // CHECK: fir.result %[[VAL_12]], %[[FIRST]] : f64, i1
6874// CHECK: }
69- // CHECK: fir.result %[[VAL_15]] : f64
75+ // CHECK: fir.result %[[VAL_15]]#0, %[[VAL_15]]#1 : f64, i1
7076// CHECK: }
71- // CHECK: hlfir.yield_element %[[VAL_10]] : f64
77+ // CHECK: hlfir.yield_element %[[VAL_10]]#0 : f64
7278// CHECK: }
7379// CHECK: return %[[VAL_8]] : !hlfir.expr<?xf64>
7480// CHECK: }
@@ -85,12 +91,12 @@ func.func @test_total_var(%input: !fir.box<!fir.array<?x?xf16>>, %mask: !fir.ref
8591// CHECK: %[[VAL_4:.*]] = arith.constant 0 : index
8692// CHECK: %[[VAL_5:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_4]] : (!fir.box<!fir.array<?x?xf16>>, index) -> (index, index, index)
8793// CHECK: %[[VAL_6:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_3]] : (!fir.box<!fir.array<?x?xf16>>, index) -> (index, index, index)
88- // CHECK: %[[VAL_7:.*]] = fir.do_loop %[[VAL_8:.*]] = %[[VAL_3]] to %[[VAL_6]]#1 step %[[VAL_3]] unordered iter_args(%[[VAL_9:.*]] = %[[VAL_2]]) -> (f16) {
89- // CHECK: %[[VAL_10:.*]] = fir.do_loop %[[VAL_11:.*]] = %[[VAL_3]] to %[[VAL_5]]#1 step %[[VAL_3]] unordered iter_args(%[[VAL_12:.*]] = %[[VAL_9]]) -> (f16) {
94+ // CHECK: %[[VAL_7:.*]]:2 = fir.do_loop %[[VAL_8:.*]] = %[[VAL_3]] to %[[VAL_6]]#1 step %[[VAL_3]] unordered iter_args(%[[VAL_9:.*]] = %[[VAL_2]], %[[FIRST1:.*]] = %[[TRUE]] ) -> (f16, i1 ) {
95+ // CHECK: %[[VAL_10:.*]]:2 = fir.do_loop %[[VAL_11:.*]] = %[[VAL_3]] to %[[VAL_5]]#1 step %[[VAL_3]] unordered iter_args(%[[VAL_12:.*]] = %[[VAL_9]], %[[FIRST2:.*]] = %[[FIRST1]] ) -> (f16, i1 ) {
9096// CHECK: %[[VAL_13:.*]] = hlfir.designate %[[VAL_1]] (%[[VAL_11]], %[[VAL_8]]) : (!fir.ref<!fir.array<2x2x!fir.logical<1>>>, index, index) -> !fir.ref<!fir.logical<1>>
9197// CHECK: %[[VAL_14:.*]] = fir.load %[[VAL_13]] : !fir.ref<!fir.logical<1>>
9298// CHECK: %[[VAL_15:.*]] = fir.convert %[[VAL_14]] : (!fir.logical<1>) -> i1
93- // CHECK: %[[VAL_16:.*]] = fir.if %[[VAL_15]] -> (f16) {
99+ // CHECK: %[[VAL_16:.*]]:2 = fir.if %[[VAL_15]] -> (f16, i1 ) {
94100// CHECK: %[[VAL_17:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_4]] : (!fir.box<!fir.array<?x?xf16>>, index) -> (index, index, index)
95101// CHECK: %[[VAL_18:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_3]] : (!fir.box<!fir.array<?x?xf16>>, index) -> (index, index, index)
96102// CHECK: %[[VAL_19:.*]] = arith.subi %[[VAL_17]]#0, %[[VAL_3]] : index
@@ -104,16 +110,17 @@ func.func @test_total_var(%input: !fir.box<!fir.array<?x?xf16>>, %mask: !fir.ref
104110// CHECK: %[[VAL_27:.*]] = arith.cmpf oeq, %[[VAL_24]], %[[VAL_24]] fastmath<reassoc> : f16
105111// CHECK: %[[VAL_28:.*]] = arith.andi %[[VAL_26]], %[[VAL_27]] : i1
106112// CHECK: %[[VAL_29:.*]] = arith.ori %[[VAL_25]], %[[VAL_28]] : i1
107- // CHECK: %[[VAL_30:.*]] = arith.select %[[VAL_29]], %[[VAL_24]], %[[VAL_12]] : f16
108- // CHECK: fir.result %[[VAL_30]] : f16
113+ // CHECK: %[[IS_FIRST:.*]] = arith.ori %[[VAL_29]], %[[FIRST2]] : i1
114+ // CHECK: %[[VAL_30:.*]] = arith.select %[[IS_FIRST]], %[[VAL_24]], %[[VAL_12]] : f16
115+ // CHECK: fir.result %[[VAL_30]], %[[FALSE]] : f16, i1
109116// CHECK: } else {
110- // CHECK: fir.result %[[VAL_12]] : f16
117+ // CHECK: fir.result %[[VAL_12]], %[[FIRST2]] : f16, i1
111118// CHECK: }
112- // CHECK: fir.result %[[VAL_16]] : f16
119+ // CHECK: fir.result %[[VAL_16]]#0, %[[VAL_16]]#1 : f16, i1
113120// CHECK: }
114- // CHECK: fir.result %[[VAL_10]] : f16
121+ // CHECK: fir.result %[[VAL_10]]#0, %[[VAL_10]]#1 : f16, i1
115122// CHECK: }
116- // CHECK: return %[[VAL_7]] : f16
123+ // CHECK: return %[[VAL_7]]#0 : f16
117124// CHECK: }
118125
119126func.func @test_partial_var(%input: !fir.box<!fir.array<?x?xf16>>, %mask: !fir.box<!fir.array<2x2x!fir.logical<1>>>) -> !hlfir.expr<?xf16> {
@@ -124,6 +131,7 @@ func.func @test_partial_var(%input: !fir.box<!fir.array<?x?xf16>>, %mask: !fir.b
124131// CHECK-LABEL: func.func @test_partial_var(
125132// CHECK-SAME: %[[VAL_0:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<?x?xf16>>,
126133// CHECK-SAME: %[[VAL_1:[0-9]+|[a-zA-Z$._-][a-zA-Z0-9$._-]*]]: !fir.box<!fir.array<2x2x!fir.logical<1>>>) -> !hlfir.expr<?xf16> {
134+ // CHECK: %[[FALSE:.*]] = arith.constant false
127135// CHECK: %[[VAL_2:.*]] = arith.constant true
128136// CHECK: %[[VAL_3:.*]] = arith.constant -6.550400e+04 : f16
129137// CHECK: %[[VAL_4:.*]] = arith.constant 1 : index
@@ -134,7 +142,7 @@ func.func @test_partial_var(%input: !fir.box<!fir.array<?x?xf16>>, %mask: !fir.b
134142// CHECK: %[[VAL_9:.*]] = fir.is_present %[[VAL_1]] : (!fir.box<!fir.array<2x2x!fir.logical<1>>>) -> i1
135143// CHECK: %[[VAL_10:.*]] = hlfir.elemental %[[VAL_8]] unordered : (!fir.shape<1>) -> !hlfir.expr<?xf16> {
136144// CHECK: ^bb0(%[[VAL_11:.*]]: index):
137- // CHECK: %[[VAL_12:.*]] = fir.do_loop %[[VAL_13:.*]] = %[[VAL_4]] to %[[VAL_7]]#1 step %[[VAL_4]] unordered iter_args(%[[VAL_14:.*]] = %[[VAL_3]]) -> (f16) {
145+ // CHECK: %[[VAL_12:.*]]:2 = fir.do_loop %[[VAL_13:.*]] = %[[VAL_4]] to %[[VAL_7]]#1 step %[[VAL_4]] unordered iter_args(%[[VAL_14:.*]] = %[[VAL_3]], %[[FIRST:.*]] = %[[TRUE]] ) -> (f16, i1 ) {
138146// CHECK: %[[VAL_15:.*]] = fir.if %[[VAL_9]] -> (!fir.logical<1>) {
139147// CHECK: %[[VAL_16:.*]]:3 = fir.box_dims %[[VAL_1]], %[[VAL_5]] : (!fir.box<!fir.array<2x2x!fir.logical<1>>>, index) -> (index, index, index)
140148// CHECK: %[[VAL_17:.*]]:3 = fir.box_dims %[[VAL_1]], %[[VAL_4]] : (!fir.box<!fir.array<2x2x!fir.logical<1>>>, index) -> (index, index, index)
@@ -150,7 +158,7 @@ func.func @test_partial_var(%input: !fir.box<!fir.array<?x?xf16>>, %mask: !fir.b
150158// CHECK: fir.result %[[VAL_24]] : !fir.logical<1>
151159// CHECK: }
152160// CHECK: %[[VAL_25:.*]] = fir.convert %[[VAL_15]] : (!fir.logical<1>) -> i1
153- // CHECK: %[[VAL_26:.*]] = fir.if %[[VAL_25]] -> (f16) {
161+ // CHECK: %[[VAL_26:.*]]:2 = fir.if %[[VAL_25]] -> (f16, i1 ) {
154162// CHECK: %[[VAL_27:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_5]] : (!fir.box<!fir.array<?x?xf16>>, index) -> (index, index, index)
155163// CHECK: %[[VAL_28:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_4]] : (!fir.box<!fir.array<?x?xf16>>, index) -> (index, index, index)
156164// CHECK: %[[VAL_29:.*]] = arith.subi %[[VAL_27]]#0, %[[VAL_4]] : index
@@ -164,14 +172,15 @@ func.func @test_partial_var(%input: !fir.box<!fir.array<?x?xf16>>, %mask: !fir.b
164172// CHECK: %[[VAL_37:.*]] = arith.cmpf oeq, %[[VAL_34]], %[[VAL_34]] fastmath<reassoc> : f16
165173// CHECK: %[[VAL_38:.*]] = arith.andi %[[VAL_36]], %[[VAL_37]] : i1
166174// CHECK: %[[VAL_39:.*]] = arith.ori %[[VAL_35]], %[[VAL_38]] : i1
167- // CHECK: %[[VAL_40:.*]] = arith.select %[[VAL_39]], %[[VAL_34]], %[[VAL_14]] : f16
168- // CHECK: fir.result %[[VAL_40]] : f16
175+ // CHECK: %[[IS_FIRST:.*]] = arith.ori %[[VAL_39]], %[[FIRST]] : i1
176+ // CHECK: %[[VAL_40:.*]] = arith.select %[[IS_FIRST]], %[[VAL_34]], %[[VAL_14]] : f16
177+ // CHECK: fir.result %[[VAL_40]], %[[FALSE]] : f16, i1
169178// CHECK: } else {
170- // CHECK: fir.result %[[VAL_14]] : f16
179+ // CHECK: fir.result %[[VAL_14]], %[[FIRST]] : f16, i1
171180// CHECK: }
172- // CHECK: fir.result %[[VAL_26]] : f16
181+ // CHECK: fir.result %[[VAL_26]]#0, %[[VAL_26]]#1 : f16, i1
173182// CHECK: }
174- // CHECK: hlfir.yield_element %[[VAL_12]] : f16
183+ // CHECK: hlfir.yield_element %[[VAL_12]]#0 : f16
175184// CHECK: }
176185// CHECK: return %[[VAL_10]] : !hlfir.expr<?xf16>
177186// CHECK: }
0 commit comments