[flang] Pass the pipeline config to the pass
authorValentin Clement <clementval@gmail.com>
Tue, 9 Aug 2022 14:05:15 +0000 (16:05 +0200)
committerValentin Clement <clementval@gmail.com>
Tue, 9 Aug 2022 14:05:34 +0000 (16:05 +0200)
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
flang/include/flang/Tools/CLOptions.inc
flang/lib/Optimizer/Transforms/AlgebraicSimplification.cpp

index e6e2bbb..2835f3e 100644 (file)
@@ -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<mlir::Pass> createAnnotateConstantOperandsPass();
 std::unique_ptr<mlir::Pass> createSimplifyRegionLitePass();
 std::unique_ptr<mlir::Pass> createAlgebraicSimplificationPass();
+std::unique_ptr<mlir::Pass>
+createAlgebraicSimplificationPass(const mlir::GreedyRewriteConfig &config);
 
 // declarative passes
 #define GEN_PASS_REGISTRATION
index fd770fe..97bdddb 100644 (file)
@@ -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);
 
index 25a6a8d..607ba59 100644 (file)
@@ -21,17 +21,28 @@ using namespace mlir;
 namespace {
 struct AlgebraicSimplification
     : public fir::AlgebraicSimplificationBase<AlgebraicSimplification> {
+  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<mlir::Pass> fir::createAlgebraicSimplificationPass() {
-  return std::make_unique<AlgebraicSimplification>();
+  return std::make_unique<AlgebraicSimplification>(GreedyRewriteConfig());
+}
+
+std::unique_ptr<mlir::Pass> fir::createAlgebraicSimplificationPass(
+    const mlir::GreedyRewriteConfig &config) {
+  return std::make_unique<AlgebraicSimplification>(config);
 }