[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
This commit is contained in:
Valentin Clement 2022-08-09 16:05:15 +02:00
parent f5ed0cb217
commit 4dece4007c
No known key found for this signature in database
GPG Key ID: 086D54783C928776
3 changed files with 17 additions and 3 deletions

View 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

View 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);

View 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);
}