From 4dece4007cc2fb261f29d14287836e28a355810a Mon Sep 17 00:00:00 2001 From: Valentin Clement Date: Tue, 9 Aug 2022 16:05:15 +0200 Subject: [PATCH] [flang] Pass the pipeline config to the pass The newly added AlgebraicSimplification pass is triggering the greedy pattern rewriter. Since we define a specific config in the flang pipeline, this patch adds the ability to pass the config to the pass directly. Reviewed By: jeanPerier Differential Revision: https://reviews.llvm.org/D131474 --- flang/include/flang/Optimizer/Transforms/Passes.h | 3 +++ flang/include/flang/Tools/CLOptions.inc | 2 +- .../lib/Optimizer/Transforms/AlgebraicSimplification.cpp | 15 +++++++++++++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/flang/include/flang/Optimizer/Transforms/Passes.h b/flang/include/flang/Optimizer/Transforms/Passes.h index e6e2bbbd..2835f3e 100644 --- a/flang/include/flang/Optimizer/Transforms/Passes.h +++ b/flang/include/flang/Optimizer/Transforms/Passes.h @@ -15,6 +15,7 @@ namespace mlir { class BlockAndValueMapping; +class GreedyRewriteConfig; class Operation; class Pass; class Region; @@ -42,6 +43,8 @@ createMemoryAllocationPass(bool dynOnHeap, std::size_t maxStackSize); std::unique_ptr createAnnotateConstantOperandsPass(); std::unique_ptr createSimplifyRegionLitePass(); std::unique_ptr createAlgebraicSimplificationPass(); +std::unique_ptr +createAlgebraicSimplificationPass(const mlir::GreedyRewriteConfig &config); // declarative passes #define GEN_PASS_REGISTRATION diff --git a/flang/include/flang/Tools/CLOptions.inc b/flang/include/flang/Tools/CLOptions.inc index fd770fe..97bdddb 100644 --- a/flang/include/flang/Tools/CLOptions.inc +++ b/flang/include/flang/Tools/CLOptions.inc @@ -167,7 +167,7 @@ inline void createDefaultFIROptimizerPassPipeline( pm.addPass(fir::createSimplifyRegionLitePass()); // Algebraic simplifications may increase code size. if (optLevel.isOptimizingForSpeed()) - pm.addPass(fir::createAlgebraicSimplificationPass()); + pm.addPass(fir::createAlgebraicSimplificationPass(config)); pm.addPass(mlir::createCSEPass()); fir::addMemoryAllocationOpt(pm); diff --git a/flang/lib/Optimizer/Transforms/AlgebraicSimplification.cpp b/flang/lib/Optimizer/Transforms/AlgebraicSimplification.cpp index 25a6a8d..607ba59 100644 --- a/flang/lib/Optimizer/Transforms/AlgebraicSimplification.cpp +++ b/flang/lib/Optimizer/Transforms/AlgebraicSimplification.cpp @@ -21,17 +21,28 @@ using namespace mlir; namespace { struct AlgebraicSimplification : public fir::AlgebraicSimplificationBase { + AlgebraicSimplification(const GreedyRewriteConfig &rewriteConfig) { + config = rewriteConfig; + } void runOnOperation() override; + + mlir::GreedyRewriteConfig config; }; } // namespace void AlgebraicSimplification::runOnOperation() { RewritePatternSet patterns(&getContext()); populateMathAlgebraicSimplificationPatterns(patterns); - (void)applyPatternsAndFoldGreedily(getOperation(), std::move(patterns)); + (void)applyPatternsAndFoldGreedily(getOperation(), std::move(patterns), + config); } std::unique_ptr fir::createAlgebraicSimplificationPass() { - return std::make_unique(); + return std::make_unique(GreedyRewriteConfig()); +} + +std::unique_ptr fir::createAlgebraicSimplificationPass( + const mlir::GreedyRewriteConfig &config) { + return std::make_unique(config); } -- 2.7.4