[llvm] [mlir] [mlir][core] Add an MLIR "pattern catalog" generator (PR #146228)

Mehdi Amini via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 30 02:49:31 PDT 2025


================
@@ -206,14 +206,24 @@ LogicalResult PatternApplicator::matchAndRewrite(
           } else {
             LLVM_DEBUG(llvm::dbgs() << "Trying to match \""
                                     << bestPattern->getDebugName() << "\"\n");
-
             const auto *pattern =
                 static_cast<const RewritePattern *>(bestPattern);
-            result = pattern->matchAndRewrite(op, rewriter);
 
+#ifndef NDEBUG
+            OpBuilder::Listener *oldListener = rewriter.getListener();
+            RewriterBase::CatalogingListener *catalogingListener =
+                new RewriterBase::CatalogingListener(oldListener,
+                                                     pattern->getDebugName());
+            rewriter.setListener(catalogingListener);
+#endif
+            result = pattern->matchAndRewrite(op, rewriter);
----------------
joker-eph wrote:

```suggestion
#ifndef NDEBUG
            OpBuilder::Listener *oldListener = rewriter.getListener();
            auto catalogingListener =
                std::make_unique<RewriterBase::CatalogingListener>(oldListener,
                                                     pattern->getDebugName());
            rewriter.setListener(catalogingListener.get());
            llvm::make_scope_exit([&] { rewriter.setListener(oldListener); };
#endif
            result = pattern->matchAndRewrite(op, rewriter);
```

Nit: RAII.

https://github.com/llvm/llvm-project/pull/146228


More information about the llvm-commits mailing list