17 #include "llvm/TableGen/Record.h"
25 using llvm::StringInit;
30 if (
const auto *str = dyn_cast<StringInit>(init))
31 return str->getValue().trim();
57 assert((
def->isSubClassOf(
"Property") ||
def->isSubClassOf(
"Attr")) &&
58 "must be subclass of TableGen 'Property' class");
64 StringRef description, StringRef storageType,
65 StringRef interfaceType, StringRef convertFromStorageCall,
66 StringRef assignToStorageCall,
67 StringRef convertToAttributeCall,
68 StringRef convertFromAttributeCall, StringRef parserCall,
69 StringRef optionalParserCall, StringRef printerCall,
70 StringRef readFromMlirBytecodeCall,
71 StringRef writeToMlirBytecodeCall,
72 StringRef hashPropertyCall, StringRef defaultValue,
73 StringRef storageTypeValueOverride)
75 description(description), storageType(storageType),
76 interfaceType(interfaceType),
77 convertFromStorageCall(convertFromStorageCall),
78 assignToStorageCall(assignToStorageCall),
79 convertToAttributeCall(convertToAttributeCall),
80 convertFromAttributeCall(convertFromAttributeCall),
81 parserCall(parserCall), optionalParserCall(optionalParserCall),
82 printerCall(printerCall),
83 readFromMlirBytecodeCall(readFromMlirBytecodeCall),
84 writeToMlirBytecodeCall(writeToMlirBytecodeCall),
85 hashPropertyCall(hashPropertyCall), defaultValue(defaultValue),
86 storageTypeValueOverride(storageTypeValueOverride) {
87 if (storageType.empty())
88 storageType =
"Property";
92 if (
def->isAnonymous()) {
95 return def->getName();
101 const llvm::RecordVal *maybePred =
def->getValue(
"predicate");
102 if (!maybePred || !maybePred->getValue())
104 return Pred(maybePred->getValue());
108 if (
const auto *defInit =
109 llvm::dyn_cast<llvm::DefInit>(
def->getValueInit(
"baseProperty"))) {
110 return Property(defInit).getBaseProperty();
116 return def &&
def->isSubClassOf(className);
120 return def->getValueAsString(
"value");
static StringRef getValueAsString(const Init *init)
StringRef getValue() const
StringRef getInterfaceType() const
StringRef getPropertyDefName() const
Pred getPredicate() const
bool isSubClassOf(StringRef className) const
Property(const llvm::Record *def)
Property getBaseProperty() const
Include the generated interface declarations.