1//===-- TestEnumDefs.td - Test dialect enum definitions ----*- tablegen -*-===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8// 9// TableGen enum definitions for Test dialect. 10// 11//===----------------------------------------------------------------------===// 12 13#ifndef TEST_ENUMDEFS 14#define TEST_ENUMDEFS 15 16include "mlir/IR/EnumAttr.td" 17 18def I32Case5: I32EnumAttrCase<"case5", 5>; 19def I32Case10: I32EnumAttrCase<"case10", 10>; 20 21def SomeI32Enum: I32EnumAttr< 22 "SomeI32Enum", "", [I32Case5, I32Case10]>; 23 24def I64Case5: I64EnumAttrCase<"case5", 5>; 25def I64Case10: I64EnumAttrCase<"case10", 10>; 26 27def SomeI64Enum: I64EnumAttr< 28 "SomeI64Enum", "", [I64Case5, I64Case10]>; 29 30//===----------------------------------------------------------------------===// 31// Test Enum 32//===----------------------------------------------------------------------===// 33 34// Define the C++ enum. 35def TestEnum 36 : I32EnumAttr<"TestEnum", "a test enum", [ 37 I32EnumAttrCase<"First", 0, "first">, 38 I32EnumAttrCase<"Second", 1, "second">, 39 I32EnumAttrCase<"Third", 2, "third">, 40 ]> { 41 let genSpecializedAttr = 0; 42 let cppNamespace = "test"; 43} 44 45def TestSimpleEnum : I32EnumAttr<"SimpleEnum", "", [ 46 I32EnumAttrCase<"a", 0>, 47 I32EnumAttrCase<"b", 1> 48 ]> { 49 let genSpecializedAttr = 0; 50 let cppNamespace = "::test"; 51} 52 53//===----------------------------------------------------------------------===// 54// Test Bit Enum 55//===----------------------------------------------------------------------===// 56 57// Define the C++ enum. 58def TestBitEnum 59 : I32BitEnumAttr<"TestBitEnum", "a test bit enum", [ 60 I32BitEnumAttrCaseBit<"Read", 0, "read">, 61 I32BitEnumAttrCaseBit<"Write", 1, "write">, 62 I32BitEnumAttrCaseBit<"Execute", 2, "execute">, 63 ]> { 64 let genSpecializedAttr = 0; 65 let cppNamespace = "test"; 66 let separator = ", "; 67} 68 69// Define an enum with a different separator 70def TestBitEnumVerticalBar 71 : I32BitEnumAttr<"TestBitEnumVerticalBar", "another test bit enum", [ 72 I32BitEnumAttrCaseBit<"User", 0, "user">, 73 I32BitEnumAttrCaseBit<"Group", 1, "group">, 74 I32BitEnumAttrCaseBit<"Other", 2, "other">, 75 ]> { 76 let genSpecializedAttr = 0; 77 let cppNamespace = "test"; 78 let separator = " | "; 79} 80 81//===----------------------------------------------------------------------===// 82// Test Patterns (Multi-result Ops) 83 84def MultiResultOpKind1: I64EnumAttrCase<"kind1", 1>; 85def MultiResultOpKind2: I64EnumAttrCase<"kind2", 2>; 86def MultiResultOpKind3: I64EnumAttrCase<"kind3", 3>; 87def MultiResultOpKind4: I64EnumAttrCase<"kind4", 4>; 88def MultiResultOpKind5: I64EnumAttrCase<"kind5", 5>; 89def MultiResultOpKind6: I64EnumAttrCase<"kind6", 6>; 90 91def MultiResultOpEnum: I64EnumAttr< 92 "MultiResultOpEnum", "Multi-result op kinds", [ 93 MultiResultOpKind1, MultiResultOpKind2, MultiResultOpKind3, 94 MultiResultOpKind4, MultiResultOpKind5, MultiResultOpKind6 95 ]>; 96 97#endif // TEST_ENUMDEFS 98