diff --git a/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp b/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp index df2887ff1422e..3baac62dd69f2 100644 --- a/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp +++ b/flang/lib/Optimizer/Transforms/SimplifyIntrinsics.cpp @@ -821,7 +821,8 @@ static void genRuntimeMinMaxlocBody(fir::FirOpBuilder &builder, // if mask is a logical scalar, we can check its value before the main loop // and either ignore the fact it is there or exit early. if (maskRank == 0) { - mlir::Type logical = builder.getI1Type(); + mlir::Type i1Type = builder.getI1Type(); + mlir::Type logical = maskElemType; mlir::IndexType idxTy = builder.getIndexType(); fir::SequenceType::Shape singleElement(1, 1); @@ -834,8 +835,9 @@ static void genRuntimeMinMaxlocBody(fir::FirOpBuilder &builder, mlir::Value condAddr = builder.create(loc, logicalRefTy, array, indx); mlir::Value cond = builder.create(loc, condAddr); + mlir::Value condI1 = builder.create(loc, i1Type, cond); - fir::IfOp ifOp = builder.create(loc, elementType, cond, + fir::IfOp ifOp = builder.create(loc, elementType, condI1, /*withElseRegion=*/true); builder.setInsertionPointToStart(&ifOp.getElseRegion().front()); diff --git a/flang/test/Transforms/simplifyintrinsics.fir b/flang/test/Transforms/simplifyintrinsics.fir index 9a95748c17258..1a66e077165b0 100644 --- a/flang/test/Transforms/simplifyintrinsics.fir +++ b/flang/test/Transforms/simplifyintrinsics.fir @@ -1996,10 +1996,11 @@ func.func @_QPtestminloc_works1d_scalarmask_f64(%arg0: !fir.ref>>, index) -> !fir.ref // CHECK: fir.store %[[INIT_OUT_IDX]] to %[[OUTARR_ITEM0]] : !fir.ref -// CHECK: %[[BOX_MASK:.*]] = fir.convert %[[BOX_MASK_NONE]] : (!fir.box) -> !fir.box> +// CHECK: %[[BOX_MASK:.*]] = fir.convert %[[BOX_MASK_NONE]] : (!fir.box) -> !fir.box>> // CHECK: %[[MASK_IDX0:.*]] = arith.constant 0 : index -// CHECK: %[[MASK_ITEM:.*]] = fir.coordinate_of %[[BOX_MASK]], %[[MASK_IDX0]] : (!fir.box>, index) -> !fir.ref -// CHECK: %[[MASK:.*]] = fir.load %[[MASK_ITEM]] : !fir.ref +// CHECK: %[[MASK_ITEM:.*]] = fir.coordinate_of %[[BOX_MASK]], %[[MASK_IDX0]] : (!fir.box>>, index) -> !fir.ref> +// CHECK: %[[MASK_LOGICAL:.*]] = fir.load %[[MASK_ITEM]] : !fir.ref> +// CHECK: %[[MASK:.*]] = fir.convert %[[MASK_LOGICAL]] : (!fir.logical<4>) -> i1 // CHECK: %[[INIT_RES:.*]] = fir.if %[[MASK]] -> (f64) { // CHECK: %[[C_INDEX0:.*]] = arith.constant 0 : index // CHECK: %[[BOX_INARR:.*]] = fir.convert %[[BOX_INARR_NONE]] : (!fir.box) -> !fir.box> @@ -2573,10 +2574,11 @@ func.func @_QPtestmaxloc_works1d_scalarmask_f64(%arg0: !fir.ref>>, index) -> !fir.ref // CHECK: fir.store %[[INIT_OUT_IDX]] to %[[OUTARR_ITEM0]] : !fir.ref -// CHECK: %[[BOX_MASK:.*]] = fir.convert %[[BOX_MASK_NONE]] : (!fir.box) -> !fir.box> +// CHECK: %[[BOX_MASK:.*]] = fir.convert %[[BOX_MASK_NONE]] : (!fir.box) -> !fir.box>> // CHECK: %[[MASK_IDX0:.*]] = arith.constant 0 : index -// CHECK: %[[MASK_ITEM:.*]] = fir.coordinate_of %[[BOX_MASK]], %[[MASK_IDX0]] : (!fir.box>, index) -> !fir.ref -// CHECK: %[[MASK:.*]] = fir.load %[[MASK_ITEM]] : !fir.ref +// CHECK: %[[MASK_ITEM:.*]] = fir.coordinate_of %[[BOX_MASK]], %[[MASK_IDX0]] : (!fir.box>>, index) -> !fir.ref> +// CHECK: %[[MASK_LOGICAL:.*]] = fir.load %[[MASK_ITEM]] : !fir.ref> +// CHECK: %[[MASK:.*]] = fir.convert %[[MASK_LOGICAL]] : (!fir.logical<4>) -> i1 // CHECK: %[[INIT_RES:.*]] = fir.if %[[MASK]] -> (f64) { // CHECK: %[[C_INDEX0:.*]] = arith.constant 0 : index // CHECK: %[[BOX_INARR:.*]] = fir.convert %[[BOX_INARR_NONE]] : (!fir.box) -> !fir.box>