20#define GEN_PASS_DEF_CANONICALIZERPASS
21#include "mlir/Transforms/Passes.h.inc"
29 using impl::CanonicalizerPassBase<Canonicalizer>::CanonicalizerPassBase;
30 Canonicalizer(
const GreedyRewriteConfig &config,
31 ArrayRef<std::string> disabledPatterns,
32 ArrayRef<std::string> enabledPatterns)
34 this->topDownProcessingEnabled = config.getUseTopDownTraversal();
35 this->regionSimplifyLevel = config.getRegionSimplificationLevel();
36 this->maxIterations = config.getMaxIterations();
37 this->maxNumRewrites = config.getMaxNumRewrites();
38 this->cseBetweenIterations = config.isCSEBetweenIterationsEnabled();
39 this->disabledPatterns = disabledPatterns;
40 this->enabledPatterns = enabledPatterns;
45 LogicalResult
initialize(MLIRContext *context)
override {
47 config.setUseTopDownTraversal(topDownProcessingEnabled);
48 config.setRegionSimplificationLevel(regionSimplifyLevel);
49 config.setMaxIterations(maxIterations);
50 config.setMaxNumRewrites(maxNumRewrites);
51 config.enableCSEBetweenIterations(cseBetweenIterations);
53 RewritePatternSet owningPatterns(context);
55 dialect->getCanonicalizationPatterns(owningPatterns);
57 op.getCanonicalizationPatterns(owningPatterns, context);
59 patterns = std::make_shared<FrozenRewritePatternSet>(
60 std::move(owningPatterns), disabledPatterns, enabledPatterns);
63 void runOnOperation()
override {
64 LogicalResult converged =
67 if (testConvergence &&
failed(converged))
70 GreedyRewriteConfig config;
71 std::shared_ptr<const FrozenRewritePatternSet> patterns;
80 return std::make_unique<Canonicalizer>(config, disabledPatterns,
LogicalResult initialize(unsigned origNumLoops, ArrayRef< ReassociationIndices > foldedIterationDims)
This class allows control over how the GreedyPatternRewriteDriver works.
std::vector< Dialect * > getLoadedDialects()
Return information about all IR dialects loaded in the context.
ArrayRef< RegisteredOperationName > getRegisteredOperations()
Return a sorted array containing the information about all registered operations.
Include the generated interface declarations.
LogicalResult applyPatternsGreedily(Region ®ion, const FrozenRewritePatternSet &patterns, GreedyRewriteConfig config=GreedyRewriteConfig(), bool *changed=nullptr)
Rewrite ops in the given region, which must be isolated from above, by repeatedly applying the highes...
std::unique_ptr<::mlir::Pass > createCanonicalizerPass()