Skip to content

Commit c69710d

Browse files
committed
Fixed MINLOC/MAXLOC coordinates computation.
1 parent 7045cb0 commit c69710d

File tree

5 files changed

+21
-144
lines changed

5 files changed

+21
-144
lines changed

flang/include/flang/Optimizer/Builder/HLFIRTools.h

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -301,11 +301,6 @@ mlir::Value genExtent(mlir::Location loc, fir::FirOpBuilder &builder,
301301
mlir::Value genLBound(mlir::Location loc, fir::FirOpBuilder &builder,
302302
hlfir::Entity entity, unsigned dim);
303303

304-
/// Compute the lower bounds of \p entity, which is an array of known rank.
305-
llvm::SmallVector<mlir::Value> genLBounds(mlir::Location loc,
306-
fir::FirOpBuilder &builder,
307-
hlfir::Entity entity);
308-
309304
/// Generate a vector of extents with index type from a fir.shape
310305
/// of fir.shape_shift value.
311306
llvm::SmallVector<mlir::Value> getIndexExtents(mlir::Location loc,

flang/lib/Optimizer/Builder/HLFIRTools.cpp

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -659,33 +659,6 @@ mlir::Value hlfir::genLBound(mlir::Location loc, fir::FirOpBuilder &builder,
659659
return dimInfo.getLowerBound();
660660
}
661661

662-
llvm::SmallVector<mlir::Value> hlfir::genLBounds(mlir::Location loc,
663-
fir::FirOpBuilder &builder,
664-
hlfir::Entity entity) {
665-
assert(!entity.isAssumedRank() &&
666-
"cannot compute all lower bounds for assumed rank");
667-
assert(!entity.isScalar() && "expected an array entity");
668-
int rank = entity.getRank();
669-
mlir::Type idxTy = builder.getIndexType();
670-
if (!entity.mayHaveNonDefaultLowerBounds())
671-
return {static_cast<std::size_t>(rank),
672-
builder.createIntegerConstant(loc, idxTy, 1)};
673-
674-
if (auto shape = tryRetrievingShapeOrShift(entity)) {
675-
auto lbounds = getExplicitLboundsFromShape(shape);
676-
if (!lbounds.empty())
677-
return lbounds;
678-
}
679-
680-
if (entity.isMutableBox())
681-
entity = hlfir::derefPointersAndAllocatables(loc, builder, entity);
682-
683-
llvm::SmallVector<mlir::Value> lbounds;
684-
fir::factory::genDimInfoFromBox(builder, loc, entity, &lbounds,
685-
/*extents=*/nullptr, /*strides=*/nullptr);
686-
return lbounds;
687-
}
688-
689662
void hlfir::genLengthParameters(mlir::Location loc, fir::FirOpBuilder &builder,
690663
Entity entity,
691664
llvm::SmallVectorImpl<mlir::Value> &result) {

flang/lib/Optimizer/HLFIR/Transforms/SimplifyHLFIRIntrinsics.cpp

Lines changed: 5 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -556,45 +556,18 @@ hlfir::Entity MinMaxlocAsElementalConverter<T>::genFinalResult(
556556
// - The result is an array of rank RANK(ARRAY)-1.
557557
checkReductions(reductionResults);
558558

559-
// We need to adjust the one-based indices to real array indices.
560-
// The adjustment must only be done, if there was an actual update
561-
// of the coordinates in the reduction loop. For this check we only
562-
// need to compare if any of the reduction results is not zero.
563-
mlir::Value zero = fir::factory::createZeroValue(
564-
builder, loc, reductionResults[0].getType());
565-
mlir::Value doAdjust = builder.create<mlir::arith::CmpIOp>(
566-
loc, mlir::arith::CmpIPredicate::ne, reductionResults[0], zero);
559+
// 16.9.137 & 16.9.143:
560+
// The subscripts returned by MINLOC/MAXLOC are in the range
561+
// 1 to the extent of the corresponding dimension.
567562
mlir::Type indexType = builder.getIndexType();
568-
mlir::Value one = builder.createIntegerConstant(loc, indexType, 1);
569-
570-
auto adjustCoor = [&](mlir::Value coor, mlir::Value lbound) {
571-
assert(mlir::isa<mlir::IndexType>(lbound.getType()));
572-
mlir::Value coorAsIndex = builder.createConvert(loc, indexType, coor);
573-
mlir::Value tmp =
574-
builder.create<mlir::arith::AddIOp>(loc, coorAsIndex, lbound);
575-
tmp = builder.create<mlir::arith::SubIOp>(loc, tmp, one);
576-
tmp =
577-
builder.create<mlir::arith::SelectOp>(loc, doAdjust, tmp, coorAsIndex);
578-
return builder.createConvert(loc, coor.getType(), tmp);
579-
};
580563

581564
// For partial reductions, the final result of the reduction
582565
// loop is just a scalar - the coordinate within DIM dimension.
583566
if (getResultRank() == 0 || !isTotalReduction()) {
584567
// The result is a scalar, so just return the scalar.
585568
assert(getNumCoors() == 1 &&
586569
"unpexpected number of coordinates for scalar result");
587-
588-
int64_t dim = 1;
589-
if (!isTotalReduction()) {
590-
auto dimVal = getConstDim();
591-
assert(mlir::succeeded(dimVal) &&
592-
"partial MINLOC/MAXLOC reduction with invalid DIM");
593-
dim = *dimVal;
594-
}
595-
mlir::Value dimLbound =
596-
hlfir::genLBound(loc, builder, hlfir::Entity{getSource()}, dim - 1);
597-
return hlfir::Entity{adjustCoor(reductionResults[0], dimLbound)};
570+
return hlfir::Entity{reductionResults[0]};
598571
}
599572
// This is a total reduction, and there is no wrapping hlfir.elemental.
600573
// We have to pack the reduced coordinates into a rank-one array.
@@ -606,10 +579,8 @@ hlfir::Entity MinMaxlocAsElementalConverter<T>::genFinalResult(
606579
// for this.
607580
mlir::Value tempArray = builder.createTemporary(
608581
loc, fir::SequenceType::get(rank, getResultElementType()));
609-
llvm::SmallVector<mlir::Value, maxRank> arrayLbounds =
610-
hlfir::genLBounds(loc, builder, hlfir::Entity(getSource()));
611582
for (unsigned i = 0; i < rank; ++i) {
612-
mlir::Value coor = adjustCoor(reductionResults[i], arrayLbounds[i]);
583+
mlir::Value coor = reductionResults[i];
613584
mlir::Value idx = builder.createIntegerConstant(loc, indexType, i + 1);
614585
mlir::Value resultElement =
615586
hlfir::getElementAt(loc, builder, hlfir::Entity{tempArray}, {idx});

flang/test/HLFIR/simplify-hlfir-intrinsics-maxloc.fir

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,8 @@ func.func @test_1d_total_expr(%input: !hlfir.expr<?xi32>, %mask: !hlfir.expr<?x!
3131
// CHECK: }
3232
// CHECK: fir.result %[[VAL_24:.*]]#0, %[[VAL_24]]#1, %[[VAL_24]]#2 : i32, i32, i1
3333
// CHECK: }
34-
// CHECK: %[[VAL_25:.*]] = fir.convert %[[VAL_26:.*]]#0 : (i32) -> index
35-
// CHECK: %[[VAL_27:.*]] = fir.convert %[[VAL_25]] : (index) -> i32
3634
// CHECK: %[[VAL_28:.*]] = hlfir.designate %[[VAL_7]] (%[[VAL_3]]) : (!fir.ref<!fir.array<1xi32>>, index) -> !fir.ref<i32>
37-
// CHECK: hlfir.assign %[[VAL_27]] to %[[VAL_28]] : i32, !fir.ref<i32>
35+
// CHECK: hlfir.assign %[[VAL_10]]#0 to %[[VAL_28]] : i32, !fir.ref<i32>
3836
// CHECK: %[[VAL_29:.*]] = hlfir.as_expr %[[VAL_7]] move %[[VAL_2]] : (!fir.ref<!fir.array<1xi32>>, i1) -> !hlfir.expr<1xi32>
3937
// CHECK: return %[[VAL_29]] : !hlfir.expr<1xi32>
4038
// CHECK: }
@@ -74,9 +72,7 @@ func.func @test_1d_dim_expr(%input: !hlfir.expr<?xf32>, %mask: !hlfir.expr<?x!fi
7472
// CHECK: }
7573
// CHECK: fir.result %[[VAL_27:.*]]#0, %[[VAL_27]]#1, %[[VAL_27]]#2 : i32, f32, i1
7674
// CHECK: }
77-
// CHECK: %[[VAL_28:.*]] = fir.convert %[[VAL_29:.*]]#0 : (i32) -> index
78-
// CHECK: %[[VAL_30:.*]] = fir.convert %[[VAL_28]] : (index) -> i32
79-
// CHECK: return %[[VAL_30]] : i32
75+
// CHECK: return %[[VAL_9]]#0 : i32
8076
// CHECK: }
8177

8278
func.func @test_1d_total_var(%input: !fir.box<!fir.array<?xf32>>, %mask: !hlfir.expr<?x!fir.logical<4>>) -> !hlfir.expr<1xi16> {
@@ -118,15 +114,8 @@ func.func @test_1d_total_var(%input: !fir.box<!fir.array<?xf32>>, %mask: !hlfir.
118114
// CHECK: }
119115
// CHECK: fir.result %[[VAL_32:.*]]#0, %[[VAL_32]]#1, %[[VAL_32]]#2 : i16, f32, i1
120116
// CHECK: }
121-
// CHECK: %[[VAL_33:.*]] = arith.cmpi ne, %[[VAL_34:.*]]#0, %[[VAL_6]] : i16
122-
// CHECK: %[[VAL_35:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_7]] : (!fir.box<!fir.array<?xf32>>, index) -> (index, index, index)
123-
// CHECK: %[[VAL_36:.*]] = fir.convert %[[VAL_34]]#0 : (i16) -> index
124-
// CHECK: %[[VAL_37:.*]] = arith.addi %[[VAL_36]], %[[VAL_35]]#0 : index
125-
// CHECK: %[[VAL_38:.*]] = arith.subi %[[VAL_37]], %[[VAL_3]] : index
126-
// CHECK: %[[VAL_39:.*]] = arith.select %[[VAL_33]], %[[VAL_38]], %[[VAL_36]] : index
127-
// CHECK: %[[VAL_40:.*]] = fir.convert %[[VAL_39]] : (index) -> i16
128117
// CHECK: %[[VAL_41:.*]] = hlfir.designate %[[VAL_8]] (%[[VAL_3]]) : (!fir.ref<!fir.array<1xi16>>, index) -> !fir.ref<i16>
129-
// CHECK: hlfir.assign %[[VAL_40]] to %[[VAL_41]] : i16, !fir.ref<i16>
118+
// CHECK: hlfir.assign %[[VAL_10]]#0 to %[[VAL_41]] : i16, !fir.ref<i16>
130119
// CHECK: %[[VAL_42:.*]] = hlfir.as_expr %[[VAL_8]] move %[[VAL_2]] : (!fir.ref<!fir.array<1xi16>>, i1) -> !hlfir.expr<1xi16>
131120
// CHECK: return %[[VAL_42]] : !hlfir.expr<1xi16>
132121
// CHECK: }
@@ -170,14 +159,7 @@ func.func @test_1d_dim_var(%input: !fir.box<!fir.array<?xf64>>, %mask: !hlfir.ex
170159
// CHECK: }
171160
// CHECK: fir.result %[[VAL_31:.*]]#0, %[[VAL_31]]#1, %[[VAL_31]]#2 : i64, f64, i1
172161
// CHECK: }
173-
// CHECK: %[[VAL_32:.*]] = arith.cmpi ne, %[[VAL_33:.*]]#0, %[[VAL_6]] : i64
174-
// CHECK: %[[VAL_34:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_7]] : (!fir.box<!fir.array<?xf64>>, index) -> (index, index, index)
175-
// CHECK: %[[VAL_35:.*]] = fir.convert %[[VAL_33]]#0 : (i64) -> index
176-
// CHECK: %[[VAL_36:.*]] = arith.addi %[[VAL_35]], %[[VAL_34]]#0 : index
177-
// CHECK: %[[VAL_37:.*]] = arith.subi %[[VAL_36]], %[[VAL_3]] : index
178-
// CHECK: %[[VAL_38:.*]] = arith.select %[[VAL_32]], %[[VAL_37]], %[[VAL_35]] : index
179-
// CHECK: %[[VAL_39:.*]] = fir.convert %[[VAL_38]] : (index) -> i64
180-
// CHECK: return %[[VAL_39]] : i64
162+
// CHECK: return %[[VAL_9]]#0 : i64
181163
// CHECK: }
182164

183165
func.func @test_total_expr(%input: !hlfir.expr<?x?x?xf32>, %mask: !hlfir.expr<?x?x?x!fir.logical<4>>) -> !hlfir.expr<3xi32> {
@@ -229,18 +211,12 @@ func.func @test_total_expr(%input: !hlfir.expr<?x?x?xf32>, %mask: !hlfir.expr<?x
229211
// CHECK: }
230212
// CHECK: fir.result %[[VAL_54:.*]]#0, %[[VAL_54]]#1, %[[VAL_54]]#2, %[[VAL_54]]#3, %[[VAL_54]]#4 : i32, i32, i32, f32, i1
231213
// CHECK: }
232-
// CHECK: %[[VAL_55:.*]] = fir.convert %[[VAL_56:.*]]#0 : (i32) -> index
233-
// CHECK: %[[VAL_57:.*]] = fir.convert %[[VAL_55]] : (index) -> i32
234214
// CHECK: %[[VAL_58:.*]] = hlfir.designate %[[VAL_9]] (%[[VAL_5]]) : (!fir.ref<!fir.array<3xi32>>, index) -> !fir.ref<i32>
235-
// CHECK: hlfir.assign %[[VAL_57]] to %[[VAL_58]] : i32, !fir.ref<i32>
236-
// CHECK: %[[VAL_59:.*]] = fir.convert %[[VAL_56]]#1 : (i32) -> index
237-
// CHECK: %[[VAL_60:.*]] = fir.convert %[[VAL_59]] : (index) -> i32
215+
// CHECK: hlfir.assign %[[VAL_14]]#0 to %[[VAL_58]] : i32, !fir.ref<i32>
238216
// CHECK: %[[VAL_61:.*]] = hlfir.designate %[[VAL_9]] (%[[VAL_3]]) : (!fir.ref<!fir.array<3xi32>>, index) -> !fir.ref<i32>
239-
// CHECK: hlfir.assign %[[VAL_60]] to %[[VAL_61]] : i32, !fir.ref<i32>
240-
// CHECK: %[[VAL_62:.*]] = fir.convert %[[VAL_56]]#2 : (i32) -> index
241-
// CHECK: %[[VAL_63:.*]] = fir.convert %[[VAL_62]] : (index) -> i32
217+
// CHECK: hlfir.assign %[[VAL_14]]#1 to %[[VAL_61]] : i32, !fir.ref<i32>
242218
// CHECK: %[[VAL_64:.*]] = hlfir.designate %[[VAL_9]] (%[[VAL_2]]) : (!fir.ref<!fir.array<3xi32>>, index) -> !fir.ref<i32>
243-
// CHECK: hlfir.assign %[[VAL_63]] to %[[VAL_64]] : i32, !fir.ref<i32>
219+
// CHECK: hlfir.assign %[[VAL_14]]#2 to %[[VAL_64]] : i32, !fir.ref<i32>
244220
// CHECK: %[[VAL_65:.*]] = hlfir.as_expr %[[VAL_9]] move %[[VAL_4]] : (!fir.ref<!fir.array<3xi32>>, i1) -> !hlfir.expr<3xi32>
245221
// CHECK: return %[[VAL_65]] : !hlfir.expr<3xi32>
246222
// CHECK: }
@@ -313,14 +289,7 @@ func.func @test_partial_var(%input: !fir.box<!fir.array<?x?x?xf32>>, %mask: !fir
313289
// CHECK: }
314290
// CHECK: fir.result %[[VAL_57:.*]]#0, %[[VAL_57]]#1, %[[VAL_57]]#2 : i32, f32, i1
315291
// CHECK: }
316-
// CHECK: %[[VAL_58:.*]] = arith.cmpi ne, %[[VAL_59:.*]]#0, %[[VAL_5]] : i32
317-
// CHECK: %[[VAL_60:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_7]] : (!fir.box<!fir.array<?x?x?xf32>>, index) -> (index, index, index)
318-
// CHECK: %[[VAL_61:.*]] = fir.convert %[[VAL_59]]#0 : (i32) -> index
319-
// CHECK: %[[VAL_62:.*]] = arith.addi %[[VAL_61]], %[[VAL_60]]#0 : index
320-
// CHECK: %[[VAL_63:.*]] = arith.subi %[[VAL_62]], %[[VAL_7]] : index
321-
// CHECK: %[[VAL_64:.*]] = arith.select %[[VAL_58]], %[[VAL_63]], %[[VAL_61]] : index
322-
// CHECK: %[[VAL_65:.*]] = fir.convert %[[VAL_64]] : (index) -> i32
323-
// CHECK: hlfir.yield_element %[[VAL_65]] : i32
292+
// CHECK: hlfir.yield_element %[[VAL_17]]#0 : i32
324293
// CHECK: }
325294
// CHECK: return %[[VAL_14]] : !hlfir.expr<?x?xi32>
326295
// CHECK: }

flang/test/HLFIR/simplify-hlfir-intrinsics-minloc.fir

Lines changed: 8 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,8 @@ func.func @test_1d_total_expr(%input: !hlfir.expr<?xi32>, %mask: !hlfir.expr<?x!
3131
// CHECK: }
3232
// CHECK: fir.result %[[VAL_24:.*]]#0, %[[VAL_24]]#1, %[[VAL_24]]#2 : i32, i32, i1
3333
// CHECK: }
34-
// CHECK: %[[VAL_25:.*]] = fir.convert %[[VAL_26:.*]]#0 : (i32) -> index
35-
// CHECK: %[[VAL_27:.*]] = fir.convert %[[VAL_25]] : (index) -> i32
3634
// CHECK: %[[VAL_28:.*]] = hlfir.designate %[[VAL_7]] (%[[VAL_3]]) : (!fir.ref<!fir.array<1xi32>>, index) -> !fir.ref<i32>
37-
// CHECK: hlfir.assign %[[VAL_27]] to %[[VAL_28]] : i32, !fir.ref<i32>
35+
// CHECK: hlfir.assign %[[VAL_10]]#0 to %[[VAL_28]] : i32, !fir.ref<i32>
3836
// CHECK: %[[VAL_29:.*]] = hlfir.as_expr %[[VAL_7]] move %[[VAL_2]] : (!fir.ref<!fir.array<1xi32>>, i1) -> !hlfir.expr<1xi32>
3937
// CHECK: return %[[VAL_29]] : !hlfir.expr<1xi32>
4038
// CHECK: }
@@ -74,9 +72,7 @@ func.func @test_1d_dim_expr(%input: !hlfir.expr<?xf32>, %mask: !hlfir.expr<?x!fi
7472
// CHECK: }
7573
// CHECK: fir.result %[[VAL_27:.*]]#0, %[[VAL_27]]#1, %[[VAL_27]]#2 : i32, f32, i1
7674
// CHECK: }
77-
// CHECK: %[[VAL_28:.*]] = fir.convert %[[VAL_29:.*]]#0 : (i32) -> index
78-
// CHECK: %[[VAL_30:.*]] = fir.convert %[[VAL_28]] : (index) -> i32
79-
// CHECK: return %[[VAL_30]] : i32
75+
// CHECK: return %[[VAL_9]]#0 : i32
8076
// CHECK: }
8177

8278
func.func @test_1d_total_var(%input: !fir.box<!fir.array<?xf32>>, %mask: !hlfir.expr<?x!fir.logical<4>>) -> !hlfir.expr<1xi16> {
@@ -118,15 +114,8 @@ func.func @test_1d_total_var(%input: !fir.box<!fir.array<?xf32>>, %mask: !hlfir.
118114
// CHECK: }
119115
// CHECK: fir.result %[[VAL_32:.*]]#0, %[[VAL_32]]#1, %[[VAL_32]]#2 : i16, f32, i1
120116
// CHECK: }
121-
// CHECK: %[[VAL_33:.*]] = arith.cmpi ne, %[[VAL_34:.*]]#0, %[[VAL_6]] : i16
122-
// CHECK: %[[VAL_35:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_7]] : (!fir.box<!fir.array<?xf32>>, index) -> (index, index, index)
123-
// CHECK: %[[VAL_36:.*]] = fir.convert %[[VAL_34]]#0 : (i16) -> index
124-
// CHECK: %[[VAL_37:.*]] = arith.addi %[[VAL_36]], %[[VAL_35]]#0 : index
125-
// CHECK: %[[VAL_38:.*]] = arith.subi %[[VAL_37]], %[[VAL_3]] : index
126-
// CHECK: %[[VAL_39:.*]] = arith.select %[[VAL_33]], %[[VAL_38]], %[[VAL_36]] : index
127-
// CHECK: %[[VAL_40:.*]] = fir.convert %[[VAL_39]] : (index) -> i16
128117
// CHECK: %[[VAL_41:.*]] = hlfir.designate %[[VAL_8]] (%[[VAL_3]]) : (!fir.ref<!fir.array<1xi16>>, index) -> !fir.ref<i16>
129-
// CHECK: hlfir.assign %[[VAL_40]] to %[[VAL_41]] : i16, !fir.ref<i16>
118+
// CHECK: hlfir.assign %[[VAL_10]]#0 to %[[VAL_41]] : i16, !fir.ref<i16>
130119
// CHECK: %[[VAL_42:.*]] = hlfir.as_expr %[[VAL_8]] move %[[VAL_2]] : (!fir.ref<!fir.array<1xi16>>, i1) -> !hlfir.expr<1xi16>
131120
// CHECK: return %[[VAL_42]] : !hlfir.expr<1xi16>
132121
// CHECK: }
@@ -170,14 +159,7 @@ func.func @test_1d_dim_var(%input: !fir.box<!fir.array<?xf64>>, %mask: !hlfir.ex
170159
// CHECK: }
171160
// CHECK: fir.result %[[VAL_31:.*]]#0, %[[VAL_31]]#1, %[[VAL_31]]#2 : i64, f64, i1
172161
// CHECK: }
173-
// CHECK: %[[VAL_32:.*]] = arith.cmpi ne, %[[VAL_33:.*]]#0, %[[VAL_6]] : i64
174-
// CHECK: %[[VAL_34:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_7]] : (!fir.box<!fir.array<?xf64>>, index) -> (index, index, index)
175-
// CHECK: %[[VAL_35:.*]] = fir.convert %[[VAL_33]]#0 : (i64) -> index
176-
// CHECK: %[[VAL_36:.*]] = arith.addi %[[VAL_35]], %[[VAL_34]]#0 : index
177-
// CHECK: %[[VAL_37:.*]] = arith.subi %[[VAL_36]], %[[VAL_3]] : index
178-
// CHECK: %[[VAL_38:.*]] = arith.select %[[VAL_32]], %[[VAL_37]], %[[VAL_35]] : index
179-
// CHECK: %[[VAL_39:.*]] = fir.convert %[[VAL_38]] : (index) -> i64
180-
// CHECK: return %[[VAL_39]] : i64
162+
// CHECK: return %[[VAL_9]]#0 : i64
181163
// CHECK: }
182164

183165
func.func @test_total_expr(%input: !hlfir.expr<?x?x?xf32>, %mask: !hlfir.expr<?x?x?x!fir.logical<4>>) -> !hlfir.expr<3xi32> {
@@ -229,18 +211,12 @@ func.func @test_total_expr(%input: !hlfir.expr<?x?x?xf32>, %mask: !hlfir.expr<?x
229211
// CHECK: }
230212
// CHECK: fir.result %[[VAL_54:.*]]#0, %[[VAL_54]]#1, %[[VAL_54]]#2, %[[VAL_54]]#3, %[[VAL_54]]#4 : i32, i32, i32, f32, i1
231213
// CHECK: }
232-
// CHECK: %[[VAL_55:.*]] = fir.convert %[[VAL_56:.*]]#0 : (i32) -> index
233-
// CHECK: %[[VAL_57:.*]] = fir.convert %[[VAL_55]] : (index) -> i32
234214
// CHECK: %[[VAL_58:.*]] = hlfir.designate %[[VAL_9]] (%[[VAL_5]]) : (!fir.ref<!fir.array<3xi32>>, index) -> !fir.ref<i32>
235-
// CHECK: hlfir.assign %[[VAL_57]] to %[[VAL_58]] : i32, !fir.ref<i32>
236-
// CHECK: %[[VAL_59:.*]] = fir.convert %[[VAL_56]]#1 : (i32) -> index
237-
// CHECK: %[[VAL_60:.*]] = fir.convert %[[VAL_59]] : (index) -> i32
215+
// CHECK: hlfir.assign %[[VAL_14]]#0 to %[[VAL_58]] : i32, !fir.ref<i32>
238216
// CHECK: %[[VAL_61:.*]] = hlfir.designate %[[VAL_9]] (%[[VAL_3]]) : (!fir.ref<!fir.array<3xi32>>, index) -> !fir.ref<i32>
239-
// CHECK: hlfir.assign %[[VAL_60]] to %[[VAL_61]] : i32, !fir.ref<i32>
240-
// CHECK: %[[VAL_62:.*]] = fir.convert %[[VAL_56]]#2 : (i32) -> index
241-
// CHECK: %[[VAL_63:.*]] = fir.convert %[[VAL_62]] : (index) -> i32
217+
// CHECK: hlfir.assign %[[VAL_14]]#1 to %[[VAL_61]] : i32, !fir.ref<i32>
242218
// CHECK: %[[VAL_64:.*]] = hlfir.designate %[[VAL_9]] (%[[VAL_2]]) : (!fir.ref<!fir.array<3xi32>>, index) -> !fir.ref<i32>
243-
// CHECK: hlfir.assign %[[VAL_63]] to %[[VAL_64]] : i32, !fir.ref<i32>
219+
// CHECK: hlfir.assign %[[VAL_14]]#2 to %[[VAL_64]] : i32, !fir.ref<i32>
244220
// CHECK: %[[VAL_65:.*]] = hlfir.as_expr %[[VAL_9]] move %[[VAL_4]] : (!fir.ref<!fir.array<3xi32>>, i1) -> !hlfir.expr<3xi32>
245221
// CHECK: return %[[VAL_65]] : !hlfir.expr<3xi32>
246222
// CHECK: }
@@ -313,14 +289,7 @@ func.func @test_partial_var(%input: !fir.box<!fir.array<?x?x?xf32>>, %mask: !fir
313289
// CHECK: }
314290
// CHECK: fir.result %[[VAL_57:.*]]#0, %[[VAL_57]]#1, %[[VAL_57]]#2 : i32, f32, i1
315291
// CHECK: }
316-
// CHECK: %[[VAL_58:.*]] = arith.cmpi ne, %[[VAL_59:.*]]#0, %[[VAL_5]] : i32
317-
// CHECK: %[[VAL_60:.*]]:3 = fir.box_dims %[[VAL_0]], %[[VAL_7]] : (!fir.box<!fir.array<?x?x?xf32>>, index) -> (index, index, index)
318-
// CHECK: %[[VAL_61:.*]] = fir.convert %[[VAL_59]]#0 : (i32) -> index
319-
// CHECK: %[[VAL_62:.*]] = arith.addi %[[VAL_61]], %[[VAL_60]]#0 : index
320-
// CHECK: %[[VAL_63:.*]] = arith.subi %[[VAL_62]], %[[VAL_7]] : index
321-
// CHECK: %[[VAL_64:.*]] = arith.select %[[VAL_58]], %[[VAL_63]], %[[VAL_61]] : index
322-
// CHECK: %[[VAL_65:.*]] = fir.convert %[[VAL_64]] : (index) -> i32
323-
// CHECK: hlfir.yield_element %[[VAL_65]] : i32
292+
// CHECK: hlfir.yield_element %[[VAL_17]]#0 : i32
324293
// CHECK: }
325294
// CHECK: return %[[VAL_14]] : !hlfir.expr<?x?xi32>
326295
// CHECK: }

0 commit comments

Comments
 (0)