[Mlir-commits] [mlir] [mlir][mlir-tblgen] Emit correct error message if method is pruned (PR #160334)
Justin Kim
llvmlistbot at llvm.org
Wed Sep 24 09:05:23 PDT 2025
https://github.com/JustinKim98 updated https://github.com/llvm/llvm-project/pull/160334
>From 0e28604f8687389ad2db09f83a029121d577e86f Mon Sep 17 00:00:00 2001
From: Justin Kim <jaewoo.kim at hyperaccel.ai>
Date: Wed, 24 Sep 2025 00:57:59 +0900
Subject: [PATCH 1/2] [mlir][mlir-tblgen] emit correct error message if method
is pruned
---
.../mlir/Dialect/Tosa/IR/TosaTypesBase.td | 3 +--
mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp | 19 +++++++++++++++++++
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td b/mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td
index 553d69cc21d17..93ab120339d55 100644
--- a/mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td
+++ b/mlir/include/mlir/Dialect/Tosa/IR/TosaTypesBase.td
@@ -282,8 +282,7 @@ def Tosa_Shape : Tosa_Type<"shape", "shape"> {
!tosa.shape<0>
```
}];
- let parameters = (ins "int" : $rank);
- let builders = [TypeBuilder<(ins "int" : $rank)>];
+ let parameters = (ins "int":$rank);
let assemblyFormat = "`<` $rank `>`";
let genVerifyDecl = 1;
diff --git a/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp b/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp
index 3140f12c0b7e8..b27e4cdcd5b38 100644
--- a/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp
+++ b/mlir/tools/mlir-tblgen/AttrOrTypeDefGen.cpp
@@ -513,6 +513,17 @@ getCustomBuilderParams(std::initializer_list<MethodParameter> prefix,
return builderParams;
}
+static void errorIfPruned(size_t line, Method *m, const Twine &methodName,
+ const AttrOrTypeDef &def) {
+ if (m)
+ return;
+ PrintFatalError(def.getLoc(), "Unexpected overlap when generating `" +
+ methodName + "` for " + def.getName() +
+ " (from line " + Twine(line) + ")");
+}
+
+#define ERROR_IF_PRUNED(M, N, O) errorIfPruned(__LINE__, M, N, O)
+
void DefGen::emitCustomBuilder(const AttrOrTypeBuilder &builder) {
// Don't emit a body if there isn't one.
auto props = builder.getBody() ? Method::Static : Method::StaticDeclaration;
@@ -521,6 +532,10 @@ void DefGen::emitCustomBuilder(const AttrOrTypeBuilder &builder) {
returnType = *builderReturnType;
Method *m = defCls.addMethod(returnType, "get", props,
getCustomBuilderParams({}, builder));
+
+ // If method is pruned, report error and terminate.
+ ERROR_IF_PRUNED(m, "get", def);
+
if (!builder.getBody())
return;
@@ -552,6 +567,10 @@ void DefGen::emitCheckedCustomBuilder(const AttrOrTypeBuilder &builder) {
getCustomBuilderParams(
{{"::llvm::function_ref<::mlir::InFlightDiagnostic()>", "emitError"}},
builder));
+
+ // If method is pruned, report error and terminate.
+ ERROR_IF_PRUNED(m, "getChecked", def);
+
if (!builder.getBody())
return;
>From cac13aa6e594e59839488a64b97e07ea503611ac Mon Sep 17 00:00:00 2001
From: Justin Kim <jaewoo.kim at hyperaccel.ai>
Date: Thu, 25 Sep 2025 01:04:55 +0900
Subject: [PATCH 2/2] fix : check for pruned builder regardless of body
prescence
---
mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
index 4fdde76a613bb..7e8e559baf878 100644
--- a/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
+++ b/mlir/tools/mlir-tblgen/OpDefinitionsGen.cpp
@@ -3104,8 +3104,8 @@ void OpEmitter::genBuilder() {
std::optional<StringRef> body = builder.getBody();
auto properties = body ? Method::Static : Method::StaticDeclaration;
auto *method = opClass.addMethod("void", "build", properties, arguments);
- if (body)
- ERROR_IF_PRUNED(method, "build", op);
+
+ ERROR_IF_PRUNED(method, "build", op);
if (method)
method->setDeprecated(builder.getDeprecatedMessage());
More information about the Mlir-commits
mailing list