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