diff --git a/flang/lib/Optimizer/HLFIR/Transforms/SimplifyHLFIRIntrinsics.cpp b/flang/lib/Optimizer/HLFIR/Transforms/SimplifyHLFIRIntrinsics.cpp index ace63a970db93..b61f9767ccc2b 100644 --- a/flang/lib/Optimizer/HLFIR/Transforms/SimplifyHLFIRIntrinsics.cpp +++ b/flang/lib/Optimizer/HLFIR/Transforms/SimplifyHLFIRIntrinsics.cpp @@ -29,6 +29,10 @@ namespace hlfir { #include "flang/Optimizer/HLFIR/Passes.h.inc" } // namespace hlfir +static llvm::cl::opt + simplifySum("flang-simplify-hlfir-sum", + llvm::cl::desc("Expand hlfir.sum into an inline sequence"), + llvm::cl::init(false)); namespace { class TransposeAsElementalConversion @@ -349,6 +353,8 @@ class SimplifyHLFIRIntrinsics // expanding the SUM into a total reduction loop nest // would avoid creating a temporary for the elemental array expression. target.addDynamicallyLegalOp([](hlfir::SumOp sum) { + if (!simplifySum) + return true; if (mlir::Value dim = sum.getDim()) { if (auto dimVal = fir::getIntIfConstant(dim)) { if (!fir::isa_trivial(sum.getType())) { diff --git a/flang/test/HLFIR/simplify-hlfir-intrinsics-sum.fir b/flang/test/HLFIR/simplify-hlfir-intrinsics-sum.fir index 313e54d5d0c4a..54a592a66670f 100644 --- a/flang/test/HLFIR/simplify-hlfir-intrinsics-sum.fir +++ b/flang/test/HLFIR/simplify-hlfir-intrinsics-sum.fir @@ -1,4 +1,4 @@ -// RUN: fir-opt --simplify-hlfir-intrinsics %s | FileCheck %s +// RUN: fir-opt --simplify-hlfir-intrinsics -flang-simplify-hlfir-sum %s | FileCheck %s // box with known extents func.func @sum_box_known_extents(%arg0: !fir.box>) {