Skip to content

Commit fe705c3

Browse files
[Flang][HLFIR] Intrinsics: Propagate fast math flags
Add a new FirOpBuilder constructor to propagate the fast math flag from an operation. Use this constructor in the LowerHLFIRIntrinsics pass. This fixes the performance issue with the hlfir intrinsics flow for polyhedron/test_fpu2. Reviewed By: tblah, vzakhari Differential Revision: https://reviews.llvm.org/D155438
1 parent 41f478f commit fe705c3

File tree

5 files changed

+31
-25
lines changed

5 files changed

+31
-25
lines changed

flang/include/flang/Optimizer/Builder/FIRBuilder.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,16 @@ class FirOpBuilder : public mlir::OpBuilder, public mlir::OpBuilder::Listener {
5353
kindMap{getKindMapping(mod)} {
5454
setListener(this);
5555
}
56+
explicit FirOpBuilder(mlir::OpBuilder &builder, fir::KindMapping kindMap,
57+
mlir::Operation *op)
58+
: OpBuilder(builder), OpBuilder::Listener(), kindMap{std::move(kindMap)} {
59+
setListener(this);
60+
auto fmi = mlir::dyn_cast<mlir::arith::ArithFastMathInterface>(*op);
61+
if (fmi) {
62+
// Set the builder with FastMathFlags attached to the operation.
63+
setFastMathFlags(fmi.getFastMathFlagsAttr().getValue());
64+
}
65+
}
5666

5767
// The listener self-reference has to be updated in case of copy-construction.
5868
FirOpBuilder(const FirOpBuilder &other)

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class HlfirIntrinsicConversion : public mlir::OpRewritePattern<OP> {
6161
mlir::Type desiredType;
6262
};
6363

64-
/// Lower the arguments to the intrinsic: adding nesecarry boxing and
64+
/// Lower the arguments to the intrinsic: adding necessary boxing and
6565
/// conversion to match the signature of the intrinsic in the runtime library.
6666
llvm::SmallVector<fir::ExtendedValue, 3>
6767
lowerArguments(mlir::Operation *op,
@@ -70,7 +70,7 @@ class HlfirIntrinsicConversion : public mlir::OpRewritePattern<OP> {
7070
const fir::IntrinsicArgumentLoweringRules *argLowering) const {
7171
mlir::Location loc = op->getLoc();
7272
fir::KindMapping kindMapping{rewriter.getContext()};
73-
fir::FirOpBuilder builder{rewriter, kindMapping};
73+
fir::FirOpBuilder builder{rewriter, kindMapping, op};
7474

7575
llvm::SmallVector<fir::ExtendedValue, 3> ret;
7676
llvm::SmallVector<std::function<void()>, 2> cleanupFns;
@@ -227,7 +227,7 @@ class HlfirReductionIntrinsicConversion : public HlfirIntrinsicConversion<OP> {
227227
}
228228

229229
fir::KindMapping kindMapping{rewriter.getContext()};
230-
fir::FirOpBuilder builder{rewriter, kindMapping};
230+
fir::FirOpBuilder builder{rewriter, kindMapping, operation};
231231
const mlir::Location &loc = operation->getLoc();
232232

233233
mlir::Type i32 = builder.getI32Type();
@@ -269,7 +269,7 @@ struct CountOpConversion : public HlfirIntrinsicConversion<hlfir::CountOp> {
269269
matchAndRewrite(hlfir::CountOp count,
270270
mlir::PatternRewriter &rewriter) const override {
271271
fir::KindMapping kindMapping{rewriter.getContext()};
272-
fir::FirOpBuilder builder{rewriter, kindMapping};
272+
fir::FirOpBuilder builder{rewriter, kindMapping, count};
273273
const mlir::Location &loc = count->getLoc();
274274

275275
mlir::Type i32 = builder.getI32Type();
@@ -302,7 +302,7 @@ struct MatmulOpConversion : public HlfirIntrinsicConversion<hlfir::MatmulOp> {
302302
matchAndRewrite(hlfir::MatmulOp matmul,
303303
mlir::PatternRewriter &rewriter) const override {
304304
fir::KindMapping kindMapping{rewriter.getContext()};
305-
fir::FirOpBuilder builder{rewriter, kindMapping};
305+
fir::FirOpBuilder builder{rewriter, kindMapping, matmul};
306306
const mlir::Location &loc = matmul->getLoc();
307307

308308
mlir::Value lhs = matmul.getLhs();
@@ -334,7 +334,7 @@ struct DotProductOpConversion
334334
matchAndRewrite(hlfir::DotProductOp dotProduct,
335335
mlir::PatternRewriter &rewriter) const override {
336336
fir::KindMapping kindMapping{rewriter.getContext()};
337-
fir::FirOpBuilder builder{rewriter, kindMapping};
337+
fir::FirOpBuilder builder{rewriter, kindMapping, dotProduct};
338338
const mlir::Location &loc = dotProduct->getLoc();
339339

340340
mlir::Value lhs = dotProduct.getLhs();
@@ -366,7 +366,7 @@ class TransposeOpConversion
366366
matchAndRewrite(hlfir::TransposeOp transpose,
367367
mlir::PatternRewriter &rewriter) const override {
368368
fir::KindMapping kindMapping{rewriter.getContext()};
369-
fir::FirOpBuilder builder{rewriter, kindMapping};
369+
fir::FirOpBuilder builder{rewriter, kindMapping, transpose};
370370
const mlir::Location &loc = transpose->getLoc();
371371

372372
mlir::Value arg = transpose.getArray();
@@ -397,7 +397,7 @@ struct MatmulTransposeOpConversion
397397
matchAndRewrite(hlfir::MatmulTransposeOp multranspose,
398398
mlir::PatternRewriter &rewriter) const override {
399399
fir::KindMapping kindMapping{rewriter.getContext()};
400-
fir::FirOpBuilder builder{rewriter, kindMapping};
400+
fir::FirOpBuilder builder{rewriter, kindMapping, multranspose};
401401
const mlir::Location &loc = multranspose->getLoc();
402402

403403
mlir::Value lhs = multranspose.getLhs();

flang/test/HLFIR/matmul-lowering.fir

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ func.func @_QPmatmul1(%arg0: !fir.box<!fir.array<?x?xi32>> {fir.bindc_name = "lh
2828
// CHECK: %[[RET_ARG:.*]] = fir.convert %[[RET_BOX]] : (!fir.ref<!fir.box<!fir.heap<!fir.array<?x?xi32>>>>) -> !fir.ref<!fir.box<none>>
2929
// CHECK-DAG: %[[LHS_ARG:.*]] = fir.convert %[[LHS_VAR]]#1 : (!fir.box<!fir.array<?x?xi32>>) -> !fir.box<none>
3030
// CHECK-DAG: %[[RHS_ARG:.*]] = fir.convert %[[RHS_VAR]]#1 : (!fir.box<!fir.array<?x?xi32>>) -> !fir.box<none>
31-
// CHECK: %[[NONE:.*]] = fir.call @_FortranAMatmul(%[[RET_ARG]], %[[LHS_ARG]], %[[RHS_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]])
31+
// CHECK: %[[NONE:.*]] = fir.call @_FortranAMatmul(%[[RET_ARG]], %[[LHS_ARG]], %[[RHS_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]]) fastmath<contract>
3232

3333
// CHECK: %[[RET:.*]] = fir.load %[[RET_BOX]]
3434
// CHECK-DAG: %[[BOX_DIMS:.*]]:3 = fir.box_dims %[[RET]]
@@ -71,11 +71,7 @@ func.func @_QPtest(%arg0: !fir.ref<!fir.array<3x3xf32>> {fir.bindc_name = "a"},
7171
}
7272
// just check that we apply the patterns successfully. The details are checked above
7373
// CHECK-LABEL: func.func @_QPtest(
74-
// CHECK: %arg0: !fir.ref<!fir.array<3x3xf32>> {fir.bindc_name = "a"},
75-
// CHECK-SAME: %arg1: !fir.ref<!fir.array<3x3xf32>> {fir.bindc_name = "b"},
76-
// CHECK-SAME: %arg2: !fir.ref<!fir.array<3x3xf32>> {fir.bindc_name = "c"},
77-
// CHECK-SAME: %arg3: !fir.ref<!fir.array<3x3xf32>> {fir.bindc_name = "out"}) {
78-
// CHECK: fir.call @_FortranAMatmul(
79-
// CHECK; fir.call @_FortranAMatmul(%40, %41, %42, %43, %c20_i32) : (!fir.ref<!fir.box<none>>, !fir.box<none>, !fir.box<none>, !fir.ref<i8>, i32) -> none
74+
// CHECK: fir.call @_FortranAMatmul({{.*}}, {{.*}}, {{.*}}, {{.*}}, {{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.box<none>, !fir.box<none>, !fir.ref<i8>, i32) -> none
75+
// CHECK: fir.call @_FortranAMatmul({{.*}}, {{.*}}, {{.*}}, {{.*}}, {{.*}}) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.box<none>, !fir.box<none>, !fir.ref<i8>, i32) -> none
8076
// CHECK: return
8177
// CHECK-NEXT: }

flang/test/HLFIR/product-lowering.fir

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func.func @_QPproduct1(%arg0: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"}
1818
// CHECK-DAG: %[[MASK:.*]] = fir.absent !fir.box<i1>
1919
// CHECK-DAG: %[[ARRAY_ARG:.*]] = fir.convert %[[ARRAY]]#1 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
2020
// CHECK-DAG: %[[MASK_ARG:.*]] = fir.convert %[[MASK]] : (!fir.box<i1>) -> !fir.box<none>
21-
// CHECK: %[[RET:.*]] = fir.call @_FortranAProductInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
21+
// CHECK: %[[RET:.*]] = fir.call @_FortranAProductInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) fastmath<contract> : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
2222
// CHECK-NEXT: hlfir.assign %[[RET]] to %[[RES]]#0 : i32, !fir.ref<i32>
2323
// CHECK-NEXT: return
2424
// CHECK-NEXT: }
@@ -58,7 +58,7 @@ func.func @_QPproduct2(%arg0: !fir.box<!fir.array<?x?xi32>> {fir.bindc_name = "a
5858
// CHECK-DAG: %[[ARRAY_ARG:.*]] = fir.convert %[[ARRAY]]
5959
// CHECK-DAG: %[[MASK_ARG:.*]] = fir.convert %[[MASK]]
6060

61-
// CHECK: %[[NONE:.*]] = fir.call @_FortranAProductDim(%[[RET_ARG]], %[[ARRAY_ARG]], %[[DIM]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[MASK_ARG]]) : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32, !fir.box<none>) -> none
61+
// CHECK: %[[NONE:.*]] = fir.call @_FortranAProductDim(%[[RET_ARG]], %[[ARRAY_ARG]], %[[DIM]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[MASK_ARG]]) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32, !fir.box<none>) -> none
6262
// CHECK: %[[RET:.*]] = fir.load %[[RET_BOX]]
6363
// CHECK: %[[BOX_DIMS:.*]]:3 = fir.box_dims %[[RET]]
6464
// CHECK-NEXT: %[[ADDR:.*]] = fir.box_addr %[[RET]]
@@ -91,7 +91,7 @@ func.func @_QPproduct3(%arg0: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"}
9191
// CHECK-DAG: %[[MASK_BOX:.*]] = fir.embox %[[MASK]]#1 : (!fir.ref<!fir.logical<4>>) -> !fir.box<!fir.logical<4>>
9292
// CHECK-DAG: %[[ARRAY_ARG:.*]] = fir.convert %[[ARRAY]]#1 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
9393
// CHECK-DAG: %[[MASK_ARG:.*]] = fir.convert %[[MASK_BOX]] : (!fir.box<!fir.logical<4>>) -> !fir.box<none>
94-
// CHECK: %[[RET:.*]] = fir.call @_FortranAProductInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
94+
// CHECK: %[[RET:.*]] = fir.call @_FortranAProductInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) fastmath<contract> : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
9595
// CHECK-NEXT: hlfir.assign %[[RET]] to %[[RES]]#0 : i32, !fir.ref<i32>
9696
// CHECK-NEXT: return
9797
// CHECK-NEXT: }
@@ -115,7 +115,7 @@ func.func @_QPproduct4(%arg0: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"}
115115
// CHECK-DAG: %[[MASK]]:2 = hlfir.declare %[[ARG2]]
116116
// CHECK-DAG: %[[ARRAY_ARG:.*]] = fir.convert %[[ARRAY]]#1 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
117117
// CHECK-DAG: %[[MASK_ARG:.*]] = fir.convert %[[MASK]]#1 : (!fir.box<!fir.array<?x!fir.logical<4>>>) -> !fir.box<none>
118-
// CHECK: %[[RET:.*]] = fir.call @_FortranAProductInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
118+
// CHECK: %[[RET:.*]] = fir.call @_FortranAProductInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) fastmath<contract> : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
119119
// CHECK-NEXT: hlfir.assign %[[RET]] to %[[RES]]#0 : i32, !fir.ref<i32>
120120
// CHECK-NEXT: return
121121
// CHECK-NEXT: }
@@ -165,4 +165,4 @@ func.func @_QPproduct5(%arg0: !fir.ref<!fir.array<2xi32>> {fir.bindc_name = "s"}
165165
// CHECK-DAG: %[[RET_ARG:.*]] = fir.convert %[[RET_BOX]]
166166
// CHECK-DAG: %[[ARRAY_ARG:.*]] = fir.convert %[[ARRAY_BOX]] : (!fir.box<!fir.array<2x2xi32>>) -> !fir.box<none>
167167
// CHECK-DAG: %[[MASK_ARG:.*]] = fir.convert %[[MASK_BOX]] : (!fir.box<!fir.logical<4>>) -> !fir.box<none>
168-
// CHECK: %[[NONE:.*]] = fir.call @_FortranAProductDim(%[[RET_ARG]], %[[ARRAY_ARG]], %[[DIM]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[MASK_ARG]]) : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32, !fir.box<none>) -> none
168+
// CHECK: %[[NONE:.*]] = fir.call @_FortranAProductDim(%[[RET_ARG]], %[[ARRAY_ARG]], %[[DIM]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[MASK_ARG]]) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32, !fir.box<none>) -> none

flang/test/HLFIR/sum-lowering.fir

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func.func @_QPsum1(%arg0: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"}, %a
1717
// CHECK-DAG: %[[MASK:.*]] = fir.absent !fir.box<i1>
1818
// CHECK-DAG: %[[ARRAY_ARG:.*]] = fir.convert %[[ARRAY]]#1 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
1919
// CHECK-DAG: %[[MASK_ARG:.*]] = fir.convert %[[MASK]] : (!fir.box<i1>) -> !fir.box<none>
20-
// CHECK: %[[RET:.*]] = fir.call @_FortranASumInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
20+
// CHECK: %[[RET:.*]] = fir.call @_FortranASumInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) fastmath<contract> : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
2121
// CHECK-NEXT: hlfir.assign %[[RET]] to %[[RES]]#0 : i32, !fir.ref<i32>
2222
// CHECK-NEXT: return
2323
// CHECK-NEXT: }
@@ -55,7 +55,7 @@ func.func @_QPsum2(%arg0: !fir.box<!fir.array<?x?xi32>> {fir.bindc_name = "a"},
5555
// CHECK-DAG: %[[RET_ARG:.*]] = fir.convert %[[RET_BOX]]
5656
// CHECK-DAG: %[[ARRAY_ARG:.*]] = fir.convert %[[ARRAY]]#1 : (!fir.box<!fir.array<?x?xi32>>) -> !fir.box<none>
5757
// CHECK-DAG: %[[MASK_ARG:.*]] = fir.convert %[[MASK]] : (!fir.box<i1>) -> !fir.box<none>
58-
// CHECK: %[[NONE:.*]] = fir.call @_FortranASumDim(%[[RET_ARG]], %[[ARRAY_ARG]], %[[DIM]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[MASK_ARG]]) : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32, !fir.box<none>) -> none
58+
// CHECK: %[[NONE:.*]] = fir.call @_FortranASumDim(%[[RET_ARG]], %[[ARRAY_ARG]], %[[DIM]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[MASK_ARG]]) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32, !fir.box<none>) -> none
5959

6060
// CHECK: %[[RET:.*]] = fir.load %[[RET_BOX]]
6161
// CHECK: %[[BOX_DIMS:.*]]:3 = fir.box_dims %[[RET]]
@@ -89,7 +89,7 @@ func.func @_QPsum3(%arg0: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"}, %a
8989
// CHECK-DAG: %[[MASK_BOX:.*]] = fir.embox %[[MASK]]#1 : (!fir.ref<!fir.logical<4>>) -> !fir.box<!fir.logical<4>>
9090
// CHECK-DAG: %[[ARRAY_ARG:.*]] = fir.convert %[[ARRAY]]#1 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
9191
// CHECK-DAG: %[[MASK_ARG:.*]] = fir.convert %[[MASK_BOX]] : (!fir.box<!fir.logical<4>>) -> !fir.box<none>
92-
// CHECK: %[[RET:.*]] = fir.call @_FortranASumInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
92+
// CHECK: %[[RET:.*]] = fir.call @_FortranASumInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) fastmath<contract> : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
9393
// CHECK-NEXT: hlfir.assign %[[RET]] to %[[RES]]#0 : i32, !fir.ref<i32>
9494
// CHECK-NEXT: return
9595
// CHECK-NEXT: }
@@ -112,7 +112,7 @@ func.func @_QPsum4(%arg0: !fir.box<!fir.array<?xi32>> {fir.bindc_name = "a"}, %a
112112
// CHECK-DAG: %[[MASK:.*]]:2 = hlfir.declare %[[ARG2]]
113113
// CHECK-DAG: %[[ARRAY_ARG:.*]] = fir.convert %[[ARRAY]]#1 : (!fir.box<!fir.array<?xi32>>) -> !fir.box<none>
114114
// CHECK-DAG: %[[MASK_ARG:.*]] = fir.convert %[[MASK]]#1 : (!fir.box<!fir.array<?x!fir.logical<4>>>) -> !fir.box<none>
115-
// CHECK: %[[RET:.*]] = fir.call @_FortranASumInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
115+
// CHECK: %[[RET:.*]] = fir.call @_FortranASumInteger4(%[[ARRAY_ARG]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[INT:.*]], %[[MASK_ARG]]) fastmath<contract> : (!fir.box<none>, !fir.ref<i8>, i32, i32, !fir.box<none>) -> i32
116116
// CHECK-NEXT: hlfir.assign %[[RET]] to %[[RES]]#0 : i32, !fir.ref<i32>
117117
// CHECK-NEXT: return
118118
// CHECK-NEXT: }
@@ -175,4 +175,4 @@ func.func @_QPsum5(%arg0: !fir.ref<!fir.array<2xi32>> {fir.bindc_name = "s"}) {
175175
// CHECK-DAG: %[[RET_ARG:.*]] = fir.convert %[[RET_BOX]]
176176
// CHECK-DAG: %[[ARRAY_ARG:.*]] = fir.convert %[[ARRAY_BOX]] : (!fir.box<!fir.array<2x2xi32>>) -> !fir.box<none>
177177
// CHECK-DAG: %[[MASK_ARG:.*]] = fir.convert %[[MASK_BOX]] : (!fir.box<!fir.logical<4>>) -> !fir.box<none>
178-
// CHECK: %[[NONE:.*]] = fir.call @_FortranASumDim(%[[RET_ARG]], %[[ARRAY_ARG]], %[[DIM]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[MASK_ARG]]) : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32, !fir.box<none>) -> none
178+
// CHECK: %[[NONE:.*]] = fir.call @_FortranASumDim(%[[RET_ARG]], %[[ARRAY_ARG]], %[[DIM]], %[[LOC_STR:.*]], %[[LOC_N:.*]], %[[MASK_ARG]]) fastmath<contract> : (!fir.ref<!fir.box<none>>, !fir.box<none>, i32, !fir.ref<i8>, i32, !fir.box<none>) -> none

0 commit comments

Comments
 (0)