@@ -29,7 +29,8 @@ struct Canonicalizer : public impl::CanonicalizerBase<Canonicalizer> {
29
29
Canonicalizer () = default ;
30
30
Canonicalizer (const GreedyRewriteConfig &config,
31
31
ArrayRef<std::string> disabledPatterns,
32
- ArrayRef<std::string> enabledPatterns) {
32
+ ArrayRef<std::string> enabledPatterns)
33
+ : config(config) {
33
34
this ->topDownProcessingEnabled = config.useTopDownTraversal ;
34
35
this ->enableRegionSimplification = config.enableRegionSimplification ;
35
36
this ->maxIterations = config.maxIterations ;
@@ -41,30 +42,31 @@ struct Canonicalizer : public impl::CanonicalizerBase<Canonicalizer> {
41
42
// / Initialize the canonicalizer by building the set of patterns used during
42
43
// / execution.
43
44
LogicalResult initialize (MLIRContext *context) override {
45
+ // Set the config from possible pass options set in the meantime.
46
+ config.useTopDownTraversal = topDownProcessingEnabled;
47
+ config.enableRegionSimplification = enableRegionSimplification;
48
+ config.maxIterations = maxIterations;
49
+ config.maxNumRewrites = maxNumRewrites;
50
+
44
51
RewritePatternSet owningPatterns (context);
45
52
for (auto *dialect : context->getLoadedDialects ())
46
53
dialect->getCanonicalizationPatterns (owningPatterns);
47
54
for (RegisteredOperationName op : context->getRegisteredOperations ())
48
55
op.getCanonicalizationPatterns (owningPatterns, context);
49
56
50
- patterns = FrozenRewritePatternSet ( std::move (owningPatterns),
51
- disabledPatterns, enabledPatterns);
57
+ patterns = std::make_shared<FrozenRewritePatternSet>(
58
+ std::move (owningPatterns), disabledPatterns, enabledPatterns);
52
59
return success ();
53
60
}
54
61
void runOnOperation () override {
55
- GreedyRewriteConfig config;
56
- config.useTopDownTraversal = topDownProcessingEnabled;
57
- config.enableRegionSimplification = enableRegionSimplification;
58
- config.maxIterations = maxIterations;
59
- config.maxNumRewrites = maxNumRewrites;
60
62
LogicalResult converged =
61
- applyPatternsAndFoldGreedily (getOperation (), patterns, config);
63
+ applyPatternsAndFoldGreedily (getOperation (), * patterns, config);
62
64
// Canonicalization is best-effort. Non-convergence is not a pass failure.
63
65
if (testConvergence && failed (converged))
64
66
signalPassFailure ();
65
67
}
66
-
67
- FrozenRewritePatternSet patterns;
68
+ GreedyRewriteConfig config;
69
+ std::shared_ptr< const FrozenRewritePatternSet> patterns;
68
70
};
69
71
} // namespace
70
72
0 commit comments