@@ -62,12 +62,15 @@ def MyEnum64 : I64EnumAttr<"MyEnum64", "An example 64-bit enum", [One64, Two64]>
6262// CHECK: def _myenum64(x, context):
6363// CHECK: return _ods_ir.IntegerAttr.get(_ods_ir.IntegerType.get_signless(64, context=context), int(x))
6464
65+ def User : I32BitEnumAttrCaseBit<"User", 0, "user">;
66+ def Group : I32BitEnumAttrCaseBit<"Group", 1, "group">;
67+ def Other : I32BitEnumAttrCaseBit<"Other", 2, "other">;
68+
6569def TestBitEnum
66- : I32BitEnumAttr<"TestBitEnum", "", [
67- I32BitEnumAttrCaseBit<"User", 0, "user">,
68- I32BitEnumAttrCaseBit<"Group", 1, "group">,
69- I32BitEnumAttrCaseBit<"Other", 2, "other">,
70- ]> {
70+ : I32BitEnumAttr<
71+ "TestBitEnum", "",
72+ [User, Group, Other,
73+ I32BitEnumAttrCaseGroup<"Any", [User, Group, Other], "any">]> {
7174 let genSpecializedAttr = 0;
7275 let separator = " | ";
7376}
@@ -79,9 +82,10 @@ def TestBitEnum_Attr : EnumAttr<Test_Dialect, TestBitEnum, "testbitenum">;
7982// CHECK: User = 1
8083// CHECK: Group = 2
8184// CHECK: Other = 4
85+ // CHECK: Any = 7
8286
8387// CHECK: def __iter__(self):
84- // CHECK: return iter([case for case in type(self) if (self & case) is case])
88+ // CHECK: return iter([case for case in type(self) if (self & case) is case and self is not case ])
8589// CHECK: def __len__(self):
8690// CHECK: return bin(self).count("1")
8791
@@ -94,6 +98,8 @@ def TestBitEnum_Attr : EnumAttr<Test_Dialect, TestBitEnum, "testbitenum">;
9498// CHECK: return "group"
9599// CHECK: if self is TestBitEnum.Other:
96100// CHECK: return "other"
101+ // CHECK: if self is TestBitEnum.Any:
102+ // CHECK: return "any"
97103// CHECK: raise ValueError("Unknown TestBitEnum enum entry.")
98104
99105// CHECK: @register_attribute_builder("TestBitEnum")
0 commit comments