110 lines · plain
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-exception6//7//===----------------------------------------------------------------------===//8//9// TableGen enum definitions for Test dialect.10//11//===----------------------------------------------------------------------===//12 13#ifndef TEST_ENUMDEFS14#define TEST_ENUMDEFS15 16include "mlir/IR/EnumAttr.td"17 18def I32Case5: I32EnumAttrCase<"case5", 5>;19def I32Case10: I32EnumAttrCase<"case10", 10>;20def I32CaseSignedMaxPlusOne21 : I32EnumAttrCase<"caseSignedMaxPlusOne", 2147483648>;22def I32CaseUnsignedMax : I32EnumAttrCase<"caseUnsignedMax", 4294967295>;23 24def SomeI32Enum : I32EnumAttr<"SomeI32Enum", "",25 [I32Case5, I32Case10, I32CaseSignedMaxPlusOne,26 I32CaseUnsignedMax]>;27 28def I64Case5: I64EnumAttrCase<"case5", 5>;29def I64Case10: I64EnumAttrCase<"case10", 10>;30def I64Case1p32 : I64EnumAttrCase<"caseLarse", 4294967296>;31 32def SomeI64Enum: I64EnumAttr<33 "SomeI64Enum", "", [I64Case5, I64Case10, I64Case1p32]>;34 35//===----------------------------------------------------------------------===//36// Test Enum37//===----------------------------------------------------------------------===//38 39// Define the C++ enum.40def TestEnum41 : I32EnumAttr<"TestEnum", "a test enum", [42 I32EnumAttrCase<"First", 0, "first">,43 I32EnumAttrCase<"Second", 1, "second">,44 I32EnumAttrCase<"Third", 2, "third">,45 ]> {46 let genSpecializedAttr = 0;47 let cppNamespace = "test";48}49 50def TestSimpleEnum : I32Enum<"SimpleEnum", "", [51 I32EnumCase<"a", 0>,52 I32EnumCase<"b", 1>,53 I32EnumCase<"Plus", 2, "+">,54 I32EnumCase<"LongString", 3, "dash-separated-sentence">,55 ]> {56 let cppNamespace = "::test";57}58 59def TestSimpleEnum64 : I64Enum<"SimpleEnum64", "", [60 I64EnumCase<"a", 4294967296>,61 I64EnumCase<"b", 4294967297>62 ]> {63 let cppNamespace = "::test";64}65 66//===----------------------------------------------------------------------===//67// Test Bit Enum68//===----------------------------------------------------------------------===//69 70// Define the C++ enum.71def TestBitEnum72 : I32BitEnum<"TestBitEnum", "a test bit enum", [73 I32BitEnumCaseBit<"Read", 0, "read">,74 I32BitEnumCaseBit<"Write", 1, "write">,75 I32BitEnumCaseBit<"Execute", 2, "execute">,76 ]> {77 let cppNamespace = "test";78 let separator = ", ";79}80 81// Define an enum with a different separator82def TestBitEnumVerticalBar83 : I32BitEnum<"TestBitEnumVerticalBar", "another test bit enum", [84 I32BitEnumCaseBit<"User", 0, "user">,85 I32BitEnumCaseBit<"Group", 1, "group">,86 I32BitEnumCaseBit<"Other", 2, "other">,87 ]> {88 let cppNamespace = "test";89 let separator = " | ";90}91 92//===----------------------------------------------------------------------===//93// Test Patterns (Multi-result Ops)94//===----------------------------------------------------------------------===//95 96def MultiResultOpKind1: I64EnumAttrCase<"kind1", 1>;97def MultiResultOpKind2: I64EnumAttrCase<"kind2", 2>;98def MultiResultOpKind3: I64EnumAttrCase<"kind3", 3>;99def MultiResultOpKind4: I64EnumAttrCase<"kind4", 4>;100def MultiResultOpKind5: I64EnumAttrCase<"kind5", 5>;101def MultiResultOpKind6: I64EnumAttrCase<"kind6", 6>;102 103def MultiResultOpEnum: I64EnumAttr<104 "MultiResultOpEnum", "Multi-result op kinds", [105 MultiResultOpKind1, MultiResultOpKind2, MultiResultOpKind3,106 MultiResultOpKind4, MultiResultOpKind5, MultiResultOpKind6107 ]>;108 109#endif // TEST_ENUMDEFS110