forked from OSchip/llvm-project
[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:
parent
f5ed0cb217
commit
4dece4007c
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue