[Mlir-commits] [mlir] [MLIR] Add I{8, 16}Enum tablegen classes (PR #190825)
Robert Konicar
llvmlistbot at llvm.org
Tue Apr 7 10:16:25 PDT 2026
https://github.com/Jezurko created https://github.com/llvm/llvm-project/pull/190825
Add utility tablegen classes for creating 8 and 16 bit enums, simplifying defining enums that fit into smaller types.
>From 718800629122f070636229eef919abaf4614759f Mon Sep 17 00:00:00 2001
From: Robert Konicar <rkonicar at mail.muni.cz>
Date: Tue, 7 Apr 2026 19:09:50 +0200
Subject: [PATCH] [MLIR] Add I{8,16}Enum tablegen classes
Add utility tablegen classes for creating 8 and 16 bit enums, simplifying defining enums that fit into smaller types.
---
mlir/include/mlir/IR/EnumAttr.td | 8 ++++++++
mlir/test/lib/Dialect/Test/TestEnumDefs.td | 14 ++++++++++++++
2 files changed, 22 insertions(+)
diff --git a/mlir/include/mlir/IR/EnumAttr.td b/mlir/include/mlir/IR/EnumAttr.td
index cfa2ac89350a1..6eef5075fe18a 100644
--- a/mlir/include/mlir/IR/EnumAttr.td
+++ b/mlir/include/mlir/IR/EnumAttr.td
@@ -48,6 +48,10 @@ class IntEnumAttrCaseBase<I intType, string sym, string strVal, int intVal> :
// Cases of integer enums with a specific type. By default, the string
// representation is the same as the C++ symbol name.
+class I8EnumCase<string sym, int val, string str = sym>
+ : EnumCase<sym, val, str, 8>;
+class I16EnumCase<string sym, int val, string str = sym>
+ : EnumCase<sym, val, str, 16>;
class I32EnumCase<string sym, int val, string str = sym>
: EnumCase<sym, val, str, 32>;
class I64EnumCase<string sym, int val, string str = sym>
@@ -292,6 +296,10 @@ class IntEnum<string name, string summary, list<EnumCase> cases, int width>
summary),
cases, width>;
+class I8Enum<string name, string summary, list<EnumCase> cases>
+ : IntEnum<name, summary, cases, 8>;
+class I16Enum<string name, string summary, list<EnumCase> cases>
+ : IntEnum<name, summary, cases, 16>;
class I32Enum<string name, string summary, list<EnumCase> cases>
: IntEnum<name, summary, cases, 32>;
class I64Enum<string name, string summary, list<EnumCase> cases>
diff --git a/mlir/test/lib/Dialect/Test/TestEnumDefs.td b/mlir/test/lib/Dialect/Test/TestEnumDefs.td
index bf805c4c54998..5d7c60d53c2c0 100644
--- a/mlir/test/lib/Dialect/Test/TestEnumDefs.td
+++ b/mlir/test/lib/Dialect/Test/TestEnumDefs.td
@@ -65,6 +65,20 @@ def TestSimpleEnum : I32Enum<"SimpleEnum", "", [
let cppNamespace = "::test";
}
+def TestSimpleEnum8: I8Enum<"SimpleEnum8", "", [
+ I8EnumCase<"a", 254>,
+ I8EnumCase<"b", 255>,
+ ]> {
+ let cppNamespace = "::test";
+}
+
+def TestSimpleEnum16: I16Enum<"SimpleEnum16", "", [
+ I16EnumCase<"a", 65534>,
+ I16EnumCase<"b", 65535>,
+ ]> {
+ let cppNamespace = "::test";
+}
+
def TestSimpleEnum64 : I64Enum<"SimpleEnum64", "", [
I64EnumCase<"a", 4294967296>,
I64EnumCase<"b", 4294967297>
More information about the Mlir-commits
mailing list