diff --git a/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp b/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp --- a/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp +++ b/mlir/lib/Conversion/PDLToPDLInterp/PDLToPDLInterp.cpp @@ -613,7 +613,7 @@ pdl::PatternOp pattern, SmallVectorImpl &usedMatchValues) { builder.setInsertionPointToEnd(rewriterModule.getBody()); auto rewriterFunc = builder.create( - pattern.getLoc(), "pdl_generated_rewriter", + pattern.getLoc(), pattern.getSymName().value_or("pdl_generated_rewriter"), builder.getFunctionType(std::nullopt, std::nullopt)); rewriterSymbolTable.insert(rewriterFunc); diff --git a/mlir/lib/Rewrite/ByteCode.cpp b/mlir/lib/Rewrite/ByteCode.cpp --- a/mlir/lib/Rewrite/ByteCode.cpp +++ b/mlir/lib/Rewrite/ByteCode.cpp @@ -992,9 +992,11 @@ } void Generator::generate(pdl_interp::RecordMatchOp op, ByteCodeWriter &writer) { ByteCodeField patternIndex = patterns.size(); - patterns.emplace_back(PDLByteCodePattern::create( - op, configMap.lookup(op), - rewriterToAddr[op.getRewriter().getLeafReference().getValue()])); + auto rewriterName = op.getRewriter().getLeafReference().getValue(); + auto pattern = PDLByteCodePattern::create(op, configMap.lookup(op), + rewriterToAddr[rewriterName]); + pattern.setDebugName(rewriterName); + patterns.emplace_back(std::move(pattern)); writer.append(OpCode::RecordMatch, patternIndex, SuccessorRange(op.getOperation()), op.getMatchedOps()); writer.appendPDLValueList(op.getInputs()); diff --git a/mlir/test/Conversion/PDLToPDLInterp/pdl-to-pdl-interp-rewriter.mlir b/mlir/test/Conversion/PDLToPDLInterp/pdl-to-pdl-interp-rewriter.mlir --- a/mlir/test/Conversion/PDLToPDLInterp/pdl-to-pdl-interp-rewriter.mlir +++ b/mlir/test/Conversion/PDLToPDLInterp/pdl-to-pdl-interp-rewriter.mlir @@ -16,6 +16,20 @@ // ----- +// CHECK-LABEL: module @named_pattern +module @named_pattern { + // CHECK: module @rewriters + // CHECK: func @pattern_sym_name(%[[ROOT:.*]]: !pdl.operation, %[[INPUT:.*]]: !pdl.value) + // CHECK: pdl_interp.apply_rewrite "rewriter"(%[[ROOT]], %[[INPUT]] : !pdl.operation, !pdl.value) + pdl.pattern @pattern_sym_name : benefit(1) { + %input = operand + %root = operation "foo.op"(%input : !pdl.value) + rewrite %root with "rewriter"(%input : !pdl.value) + } +} + +// ----- + // CHECK-LABEL: module @erase module @erase { // CHECK: module @rewriters