brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.6 KiB · 70cf94e Raw
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