brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.1 KiB · cd23b6a Raw
116 lines · plain
1// RUN: mlir-tblgen -gen-python-enum-bindings %s -I %S/../../include | FileCheck %s2 3include "mlir/IR/EnumAttr.td"4 5def Test_Dialect : Dialect {6  let name = "TestDialect";7  let cppNamespace = "::test";8}9 10// CHECK: Autogenerated by mlir-tblgen; don't manually edit.11 12// CHECK: from enum import IntEnum, auto, IntFlag13// CHECK: from ._ods_common import _cext as _ods_cext14// CHECK: from ..ir import register_attribute_builder15// CHECK: _ods_ir = _ods_cext.ir16 17def One : I32EnumAttrCase<"CaseOne", 1, "one">;18def Two : I32EnumAttrCase<"CaseTwo", 2, "two">;19def NegOne : I32EnumAttrCase<"CaseNegOne", -1, "negone">;20 21def MyEnum : I32EnumAttr<"MyEnum", "An example 32-bit enum", [One, Two, NegOne]>;22// CHECK-LABEL: class MyEnum(IntEnum):23// CHECK:     """An example 32-bit enum"""24 25// CHECK:     CaseOne = 126// CHECK:     CaseTwo = 227// CHECK:     CaseNegOne = auto()28 29// CHECK:     def __str__(self):30// CHECK:         if self is MyEnum.CaseOne:31// CHECK:             return "one"32// CHECK:         if self is MyEnum.CaseTwo:33// CHECK:             return "two"34// CHECK:         if self is MyEnum.CaseNegOne:35// CHECK:             return "negone"36// CHECK:         raise ValueError("Unknown MyEnum enum entry.")37 38// CHECK: @register_attribute_builder("MyEnum")39// CHECK: def _myenum(x, context):40// CHECK:     return _ods_ir.IntegerAttr.get(_ods_ir.IntegerType.get_signless(32, context=context), int(x))41 42def TestMyEnum_Attr : EnumAttr<Test_Dialect, MyEnum, "enum">;43 44def One64 : I64EnumAttrCase<"CaseOne64", 1, "one">;45def Two64 : I64EnumAttrCase<"CaseTwo64", 2, "two">;46 47def MyEnum64 : I64EnumAttr<"MyEnum64", "An example 64-bit enum", [One64, Two64]>;48// CHECK-LABEL: class MyEnum64(IntEnum):49// CHECK:     """An example 64-bit enum"""50 51// CHECK:     CaseOne64 = 152// CHECK:     CaseTwo64 = 253 54// CHECK:     def __str__(self):55// CHECK:         if self is MyEnum64.CaseOne64:56// CHECK:             return "one"57// CHECK:         if self is MyEnum64.CaseTwo64:58// CHECK:             return "two"59// CHECK:         raise ValueError("Unknown MyEnum64 enum entry.")60 61// CHECK: @register_attribute_builder("MyEnum64")62// CHECK: def _myenum64(x, context):63// CHECK:     return _ods_ir.IntegerAttr.get(_ods_ir.IntegerType.get_signless(64, context=context), int(x))64 65def User : I32BitEnumAttrCaseBit<"User", 0, "user">;66def Group : I32BitEnumAttrCaseBit<"Group", 1, "group">;67def Other : I32BitEnumAttrCaseBit<"Other", 2, "other">;68 69def TestBitEnum70    : I32BitEnumAttr<71          "TestBitEnum", "",72          [User, Group, Other,73           I32BitEnumAttrCaseGroup<"Any", [User, Group, Other], "any">]> {74  let genSpecializedAttr = 0;75  let separator = " | ";76}77 78def TestBitEnum_Attr : EnumAttr<Test_Dialect, TestBitEnum, "testbitenum">;79 80// CHECK-LABEL: class TestBitEnum(IntFlag):81 82// CHECK:     User = 183// CHECK:     Group = 284// CHECK:     Other = 485// CHECK:     Any = 786 87// CHECK:     def __iter__(self):88// CHECK:         return iter([case for case in type(self) if (self & case) is case and self is not case])89// CHECK:     def __len__(self):90// CHECK:         return bin(self).count("1")91 92// CHECK:     def __str__(self):93// CHECK:         if len(self) > 1:94// CHECK:             return " | ".join(map(str, self))95// CHECK:         if self is TestBitEnum.User:96// CHECK:             return "user"97// CHECK:         if self is TestBitEnum.Group:98// CHECK:             return "group"99// CHECK:         if self is TestBitEnum.Other:100// CHECK:             return "other"101// CHECK:         if self is TestBitEnum.Any:102// CHECK:             return "any"103// CHECK:         raise ValueError("Unknown TestBitEnum enum entry.")104 105// CHECK: @register_attribute_builder("TestBitEnum")106// CHECK: def _testbitenum(x, context):107// CHECK:     return _ods_ir.IntegerAttr.get(_ods_ir.IntegerType.get_signless(32, context=context), int(x))108 109// CHECK: @register_attribute_builder("TestBitEnum_Attr")110// CHECK: def _testbitenum_attr(x, context):111// CHECK:     return _ods_ir.Attribute.parse(f'#TestDialect<testbitenum {str(x)}>', context=context)112 113// CHECK: @register_attribute_builder("TestMyEnum_Attr")114// CHECK: def _testmyenum_attr(x, context):115// CHECK:     return _ods_ir.Attribute.parse(f'#TestDialect<enum {str(x)}>', context=context)116