[Mlir-commits] [mlir] [mlir][PDL] PDLToPDLInterp: Use the pdl pattern name in the generated rewriter. (PR #149481)
llvmlistbot at llvm.org
llvmlistbot at llvm.org
Tue Sep 2 00:53:58 PDT 2025
https://github.com/jumerckx updated https://github.com/llvm/llvm-project/pull/149481
>From 2462896361bab852fe8ebda0ebc6d78708c0a0c1 Mon Sep 17 00:00:00 2001
From: jumerckx <31353884+jumerckx at users.noreply.github.com>
Date: Fri, 18 Jul 2025 10:54:52 +0200
Subject: [PATCH 1/4] PDLToPDLInterp: Use the pdl pattern name in the generated
rewriter.
---
mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp b/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp
index 7d20109b3db59..3a1c1fd2d57af 100644
--- a/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp
+++ b/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp
@@ -632,8 +632,14 @@ void PatternLowering::generate(SuccessNode *successNode, Block *¤tBlock) {
SymbolRefAttr PatternLowering::generateRewriter(
pdl::PatternOp pattern, SmallVectorImpl<Position *> &usedMatchValues) {
builder.setInsertionPointToEnd(rewriterModule.getBody());
+ // Get the pattern name if available, otherwise use default
+ StringRef rewriterName = "pdl_generated_rewriter";
+ if (auto symName = pattern.getSymName()) {
+ rewriterName = symName.value();
+ }
+
auto rewriterFunc = builder.create<pdl_interp::FuncOp>(
- pattern.getLoc(), "pdl_generated_rewriter",
+ pattern.getLoc(), rewriterName,
builder.getFunctionType({}, {}));
rewriterSymbolTable.insert(rewriterFunc);
>From 3ed12197be76db1a75bdca964334850516a9e04e Mon Sep 17 00:00:00 2001
From: jumerckx <31353884+jumerckx at users.noreply.github.com>
Date: Tue, 2 Sep 2025 09:47:04 +0200
Subject: [PATCH 2/4] review
Co-authored-by: Mehdi Amini <joker-eph at gmail.com>
---
mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp b/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp
index fd2c02f022b9d..4e4313900769b 100644
--- a/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp
+++ b/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp
@@ -641,9 +641,8 @@ SymbolRefAttr PatternLowering::generateRewriter(
builder.setInsertionPointToEnd(rewriterModule.getBody());
// Get the pattern name if available, otherwise use default
StringRef rewriterName = "pdl_generated_rewriter";
- if (auto symName = pattern.getSymName()) {
+ if (auto symName = pattern.getSymName())
rewriterName = symName.value();
- }
auto rewriterFunc = pdl_interp::FuncOp::create(
builder, pattern.getLoc(), rewriterName,
builder.getFunctionType({}, {}));
>From bff70da233c5d2d2a597d7bc06710b5cae7416cf Mon Sep 17 00:00:00 2001
From: jumerckx <31353884+jumerckx at users.noreply.github.com>
Date: Tue, 2 Sep 2025 09:47:13 +0200
Subject: [PATCH 3/4] lit test
---
.../pdl-to-pdl-interp-rewriter.mlir | 27 +++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/mlir/test/Conversion/PDLToPDLInterp/pdl-to-pdl-interp-rewriter.mlir b/mlir/test/Conversion/PDLToPDLInterp/pdl-to-pdl-interp-rewriter.mlir
index e5a84d69dcad9..cf0cefd3280a8 100644
--- a/mlir/test/Conversion/PDLToPDLInterp/pdl-to-pdl-interp-rewriter.mlir
+++ b/mlir/test/Conversion/PDLToPDLInterp/pdl-to-pdl-interp-rewriter.mlir
@@ -260,3 +260,30 @@ module @range_op {
}
}
}
+
+// -----
+
+// CHECK-LABEL: module @named_pattern
+module @named_pattern {
+ // CHECK: pdl_interp.func @matcher(%[[ARG0:.*]]: !pdl.operation) {
+ // CHECK: pdl_interp.check_operation_name of %[[ARG0]] is "foo.op" -> ^bb2, ^bb1
+ // CHECK: ^bb1:
+ // CHECK: pdl_interp.finalize
+ // CHECK: ^bb2:
+ // CHECK: pdl_interp.check_operand_count of %[[ARG0]] is 0 -> ^bb3, ^bb1
+ // CHECK: ^bb3:
+ // CHECK: pdl_interp.check_result_count of %[[ARG0]] is 0 -> ^bb4, ^bb1
+ // CHECK: ^bb4:
+ // CHECK: pdl_interp.record_match @rewriters::@my_pattern(%[[ARG0]] : !pdl.operation) : benefit(1), loc([%[[ARG0]]]), root("foo.op") -> ^bb1
+ // CHECK: }
+ // CHECK: module @rewriters {
+ // CHECK: pdl_interp.func @my_pattern(%[[ARG0:.*]]: !pdl.operation) {
+ // CHECK: pdl_interp.apply_rewrite "rewriter"(%[[ARG0]] : !pdl.operation)
+ // CHECK: pdl_interp.finalize
+ // CHECK: }
+ // CHECK: }
+ pdl.pattern @my_pattern : benefit(1) {
+ %root = operation "foo.op"
+ rewrite %root with "rewriter"
+ }
+}
>From efb61c4137142503b2a9936d5586fa3ef4707e99 Mon Sep 17 00:00:00 2001
From: jumerckx <31353884+jumerckx at users.noreply.github.com>
Date: Tue, 2 Sep 2025 09:50:05 +0200
Subject: [PATCH 4/4] clang-format
---
mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp b/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp
index 4e4313900769b..c06824ce837dd 100644
--- a/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp
+++ b/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp
@@ -644,8 +644,7 @@ SymbolRefAttr PatternLowering::generateRewriter(
if (auto symName = pattern.getSymName())
rewriterName = symName.value();
auto rewriterFunc = pdl_interp::FuncOp::create(
- builder, pattern.getLoc(), rewriterName,
- builder.getFunctionType({}, {}));
+ builder, pattern.getLoc(), rewriterName, builder.getFunctionType({}, {}));
rewriterSymbolTable.insert(rewriterFunc);
// Generate the rewriter function body.
More information about the Mlir-commits
mailing list