[llvm] [mlir] [mlir][core] Add an MLIR "pattern catalog" generator (PR #146228)
Jeremy Kun via llvm-commits
llvm-commits at lists.llvm.org
Sat Jun 28 19:53:01 PDT 2025
================
@@ -206,14 +227,38 @@ 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);
+#ifdef MLIR_ENABLE_CATALOG_GENERATOR
+ OpBuilder::Listener *oldListener = rewriter.getListener();
+ int status;
+ const char *mangledPatternName = typeid(*pattern).name();
+ char *demangled = abi::__cxa_demangle(mangledPatternName, nullptr,
+ nullptr, &status);
+ std::string demangledPatternName;
+ if (status == 0 && demangled) {
+ demangledPatternName = demangled;
+ free(demangled);
+ } else {
+ // Fallback in case demangling fails.
+ demangledPatternName = mangledPatternName;
+ }
----------------
j2kun wrote:
It looks like the demangling differences are pretty significant in the two implementations. For example, RTTI can get this one:
`:mlir::RewritePatternSet::add<mlir::acc::AtomicUpdateOp>(llvm::LogicalResult (*)(mlir::acc::AtomicUpdateOp, mlir::PatternRewriter&), mlir::PatternBenefit, llvm::ArrayRef<llvm::StringRef>)::FnPattern | notifyOperationErased | acc.atomic.update`
But that corresponds to an empty debugName. I _think_ this corresponds to canonicalization patterns that are automatically added during mlir-tablegen via [this code path](https://github.com/llvm/llvm-project/blob/68d83fae70b2fa136b6c4a8c91af9e615eeedf95/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp#L3548-L3560)
https://github.com/llvm/llvm-project/pull/146228
More information about the llvm-commits
mailing list