79 Operation *op,
const FrozenRewritePatternSet &patterns, RewriterBase::Listener *listener
81#if MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS
82 if (failed(verify(op))) {
83 llvm::report_fatal_error(
"walk pattern rewriter input IR failed to verify");
87 struct PatternRewriterImpl :
public PatternRewriter {
88 PatternRewriterImpl(MLIRContext *ctx) : PatternRewriter(ctx) {}
91 MLIRContext *ctx = op->getContext();
92 PatternRewriterImpl rewriter(ctx);
93#if MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS
94 ErasedOpsListener erasedListener(listener);
95 rewriter.setListener(&erasedListener);
97 rewriter.setListener(listener);
100 PatternApplicator applicator(patterns);
101 applicator.applyDefaultCostModel();
103 ctx->executeAction<WalkAndApplyPatternsAction>([&] {
104 for (Region ®ion : op->getRegions()) {
105 region.walk([&](Operation *visitedOp) {
106 LLVM_DEBUG(llvm::dbgs() <<
"Visiting op: ";
107 visitedOp->print(llvm::dbgs(), OpPrintingFlags().skipRegions());
108 llvm::dbgs() <<
"\n";);
109#if MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS
110 erasedListener.visitedOp = visitedOp;
112 if (succeeded(applicator.matchAndRewrite(visitedOp, rewriter))) {
113 LLVM_DEBUG(llvm::dbgs() <<
"\tOp matched and rewritten\n";);
119#if MLIR_ENABLE_EXPENSIVE_PATTERN_API_CHECKS
120 if (failed(verify(op))) {
121 llvm::report_fatal_error(
"walk pattern rewriter result IR failed to verify");