[Mlir-commits] [mlir] [TableGen] Use getValue instead of getInt for enum attributes (PR #144030)
Mihir Patil
llvmlistbot at llvm.org
Fri Jun 13 02:57:47 PDT 2025
https://github.com/0xMihir updated https://github.com/llvm/llvm-project/pull/144030
>From 0978e13b6c02ba60522ba5b106539043233c9e97 Mon Sep 17 00:00:00 2001
From: Mihir Patil <me at mihirpatil.me>
Date: Fri, 13 Jun 2025 01:18:46 -0700
Subject: [PATCH] [TableGen] Use getValue instead of getInt for enum attributes
getInt is deprecated. We can instead compare APInt for the predicate and
getZExtValue to return the underlying data
---
mlir/include/mlir/IR/EnumAttr.td | 5 +++--
mlir/test/IR/attribute.mlir | 4 ++++
mlir/test/lib/Dialect/Test/TestEnumDefs.td | 8 ++++++--
mlir/tools/mlir-tblgen/EnumsGen.cpp | 6 ++++--
4 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/mlir/include/mlir/IR/EnumAttr.td b/mlir/include/mlir/IR/EnumAttr.td
index 3f7f747ac20d3..7049116d59344 100644
--- a/mlir/include/mlir/IR/EnumAttr.td
+++ b/mlir/include/mlir/IR/EnumAttr.td
@@ -39,8 +39,9 @@ class EnumCase<string sym, int intVal, string strVal, int widthVal> {
class IntEnumAttrCaseBase<I intType, string sym, string strVal, int intVal> :
EnumCase<sym, intVal, strVal, intType.bitwidth>,
SignlessIntegerAttrBase<intType, "case " # strVal> {
- let predicate =
- CPred<"::llvm::cast<::mlir::IntegerAttr>($_self).getInt() == " # intVal>;
+ let predicate = CPred<
+ "::llvm::cast<::mlir::IntegerAttr>($_self).getValue().eq(::llvm::APInt("#intType
+ .bitwidth#", "#intVal#"))">;
}
// Cases of integer enums with a specific type. By default, the string
diff --git a/mlir/test/IR/attribute.mlir b/mlir/test/IR/attribute.mlir
index 4f280bde1aecc..edb7357e4e04b 100644
--- a/mlir/test/IR/attribute.mlir
+++ b/mlir/test/IR/attribute.mlir
@@ -454,6 +454,10 @@ func.func @allowed_cases_pass() {
%0 = "test.i32_enum_attr"() {attr = 5: i32} : () -> i32
// CHECK: test.i32_enum_attr
%1 = "test.i32_enum_attr"() {attr = 10: i32} : () -> i32
+ // CHECK: test.i32_enum_attr
+ %2 = "test.i32_enum_attr"() {attr = 2147483648: i32} : () -> i32
+ // CHECK: test.i32_enum_attr
+ %3 = "test.i32_enum_attr"() {attr = 4294967295: i32} : () -> i32
return
}
diff --git a/mlir/test/lib/Dialect/Test/TestEnumDefs.td b/mlir/test/lib/Dialect/Test/TestEnumDefs.td
index 5b785a600aad2..10e424a0f2523 100644
--- a/mlir/test/lib/Dialect/Test/TestEnumDefs.td
+++ b/mlir/test/lib/Dialect/Test/TestEnumDefs.td
@@ -17,9 +17,13 @@ include "mlir/IR/EnumAttr.td"
def I32Case5: I32EnumAttrCase<"case5", 5>;
def I32Case10: I32EnumAttrCase<"case10", 10>;
+def I32CaseSignedMaxPlusOne
+ : I32EnumAttrCase<"caseSignedMaxPlusOne", 2147483648>;
+def I32CaseUnsignedMax : I32EnumAttrCase<"caseUnsignedMax", 4294967295>;
-def SomeI32Enum: I32EnumAttr<
- "SomeI32Enum", "", [I32Case5, I32Case10]>;
+def SomeI32Enum : I32EnumAttr<"SomeI32Enum", "",
+ [I32Case5, I32Case10, I32CaseSignedMaxPlusOne,
+ I32CaseUnsignedMax]>;
def I64Case5: I64EnumAttrCase<"case5", 5>;
def I64Case10: I64EnumAttrCase<"case10", 10>;
diff --git a/mlir/tools/mlir-tblgen/EnumsGen.cpp b/mlir/tools/mlir-tblgen/EnumsGen.cpp
index 9941a203bc5cb..06dc588f90203 100644
--- a/mlir/tools/mlir-tblgen/EnumsGen.cpp
+++ b/mlir/tools/mlir-tblgen/EnumsGen.cpp
@@ -648,8 +648,10 @@ static void emitSpecializedAttrDef(const Record &enumDef, raw_ostream &os) {
os << formatv("{0} {1}::getValue() const {{\n", enumName, attrClassName);
- os << formatv(" return static_cast<{0}>(::mlir::IntegerAttr::getInt());\n",
- enumName);
+ os << formatv(
+ " return "
+ "static_cast<{0}>(::mlir::IntegerAttr::getValue().getZExtValue());\n",
+ enumName);
os << "}\n";
}
More information about the Mlir-commits
mailing list