// Comparison functions (compares relative to zero on a subtraction result).
//===----------------------------------------------------------------------===//
-def fxpmath_CompareZ : EnumAttrCase<"CMPZ">;
-def fxpmath_CompareNZ : EnumAttrCase<"CMPNZ">;
-def fxpmath_CompareLZ : EnumAttrCase<"CMPLZ">;
-def fxpmath_CompareLZE : EnumAttrCase<"CMPLZE">;
-def fxpmath_CompareGZ : EnumAttrCase<"CMPGZ">;
-def fxpmath_CompareGZE : EnumAttrCase<"CMPGZE">;
-
-def fxpmath_CompareFnAttr : EnumAttr<"ComparisonFn",
+def fxpmath_CompareZ : StrEnumAttrCase<"CMPZ">;
+def fxpmath_CompareNZ : StrEnumAttrCase<"CMPNZ">;
+def fxpmath_CompareLZ : StrEnumAttrCase<"CMPLZ">;
+def fxpmath_CompareLZE : StrEnumAttrCase<"CMPLZE">;
+def fxpmath_CompareGZ : StrEnumAttrCase<"CMPGZ">;
+def fxpmath_CompareGZE : StrEnumAttrCase<"CMPGZE">;
+
+def fxpmath_CompareFnAttr : StrEnumAttr<"ComparisonFn",
"Type of subtraction-result comparison to perform.",
[
fxpmath_CompareZ,
}
// An enum attribute case stored with StringAttr.
-// TODO(antiagainst): rename this to StrEnumAttrCase to be consistent
-class EnumAttrCase<string sym, int val = -1> :
+class StrEnumAttrCase<string sym, int val = -1> :
EnumAttrCaseInfo<sym, val>,
StringBasedAttr<
CPred<"$_self.cast<StringAttr>().getValue() == \"" # sym # "\"">,
// Op attributes of this kind are stored as StringAttr. Extra verification will
// be generated on the string though: only the symbols of the allowed cases are
// permitted as the string value.
-// TODO(antiagainst): rename this to StrEnumAttr to be consistent
-class EnumAttr<string name, string description,
- list<EnumAttrCase> cases> :
+class StrEnumAttr<string name, string description,
+ list<StrEnumAttrCase> cases> :
EnumAttrInfo<name, cases>,
StringBasedAttr<
And<[StrAttr.predicate, Or<!foreach(case, cases, case.predicate)>]>,
}
bool tblgen::EnumAttrCase::isStrCase() const {
- return def->isSubClassOf("EnumAttrCase");
+ return def->isSubClassOf("StrEnumAttrCase");
}
StringRef tblgen::EnumAttrCase::getSymbol() const {
: EnumAttr(init->getDef()) {}
bool tblgen::EnumAttr::isStrEnum() const {
- return def->isSubClassOf("EnumAttr");
+ return def->isSubClassOf("StrEnumAttr");
}
StringRef tblgen::EnumAttr::getEnumClassName() const {
}];
}
-def StrCaseA: EnumAttrCase<"A">;
-def StrCaseB: EnumAttrCase<"B">;
+def StrCaseA: StrEnumAttrCase<"A">;
+def StrCaseB: StrEnumAttrCase<"B">;
-def SomeStrEnum: EnumAttr<
+def SomeStrEnum: StrEnumAttr<
"SomeStrEnum", "", [StrCaseA, StrCaseB]>;
def StrEnumAttrOp : TEST_Op<"str_enum_attr"> {
// Test Legalization
//===----------------------------------------------------------------------===//
-def Test_LegalizerEnum_Success : EnumAttrCase<"Success">;
-def Test_LegalizerEnum_Failure : EnumAttrCase<"Failure">;
+def Test_LegalizerEnum_Success : StrEnumAttrCase<"Success">;
+def Test_LegalizerEnum_Failure : StrEnumAttrCase<"Failure">;
-def Test_LegalizerEnum : EnumAttr<"Success", "Failure",
+def Test_LegalizerEnum : StrEnumAttr<"Success", "Failure",
[Test_LegalizerEnum_Success, Test_LegalizerEnum_Failure]>;
def ILLegalOpA : TEST_Op<"illegal_op_a">, Results<(outs I32:$res)>;
include "mlir/IR/OpBase.td"
-def CaseA: EnumAttrCase<"CaseA">;
-def CaseB: EnumAttrCase<"CaseB", 10>;
+def CaseA: StrEnumAttrCase<"CaseA">;
+def CaseB: StrEnumAttrCase<"CaseB", 10>;
-def StrEnum: EnumAttr<"StrEnum", "A test enum", [CaseA, CaseB]> {
+def StrEnum: StrEnumAttr<"StrEnum", "A test enum", [CaseA, CaseB]> {
let cppNamespace = "Outer::Inner";
let stringToSymbolFnName = "ConvertToEnum";
let symbolToStringFnName = "ConvertToString";