//===- Property.cpp - Property wrapper class ----------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // Property wrapper to simplify using TableGen Record defining a MLIR // Property. // //===----------------------------------------------------------------------===// #include "mlir/TableGen/Property.h" #include "mlir/TableGen/Format.h" #include "mlir/TableGen/Operator.h" #include "llvm/TableGen/Record.h" using namespace mlir; using namespace mlir::tblgen; using llvm::DefInit; using llvm::Init; using llvm::Record; using llvm::StringInit; // Returns the initializer's value as string if the given TableGen initializer // is a code or string initializer. Returns the empty StringRef otherwise. static StringRef getValueAsString(const Init *init) { if (const auto *str = dyn_cast(init)) return str->getValue().trim(); return {}; } Property::Property(const Record *def) : Property(getValueAsString(def->getValueInit("storageType")), getValueAsString(def->getValueInit("interfaceType")), getValueAsString(def->getValueInit("convertFromStorage")), getValueAsString(def->getValueInit("assignToStorage")), getValueAsString(def->getValueInit("convertToAttribute")), getValueAsString(def->getValueInit("convertFromAttribute")), getValueAsString(def->getValueInit("readFromMlirBytecode")), getValueAsString(def->getValueInit("writeToMlirBytecode")), getValueAsString(def->getValueInit("hashProperty")), getValueAsString(def->getValueInit("defaultValue"))) { this->def = def; assert((def->isSubClassOf("Property") || def->isSubClassOf("Attr")) && "must be subclass of TableGen 'Property' class"); } Property::Property(const DefInit *init) : Property(init->getDef()) {} Property::Property(StringRef storageType, StringRef interfaceType, StringRef convertFromStorageCall, StringRef assignToStorageCall, StringRef convertToAttributeCall, StringRef convertFromAttributeCall, StringRef readFromMlirBytecodeCall, StringRef writeToMlirBytecodeCall, StringRef hashPropertyCall, StringRef defaultValue) : storageType(storageType), interfaceType(interfaceType), convertFromStorageCall(convertFromStorageCall), assignToStorageCall(assignToStorageCall), convertToAttributeCall(convertToAttributeCall), convertFromAttributeCall(convertFromAttributeCall), readFromMlirBytecodeCall(readFromMlirBytecodeCall), writeToMlirBytecodeCall(writeToMlirBytecodeCall), hashPropertyCall(hashPropertyCall), defaultValue(defaultValue) { if (storageType.empty()) storageType = "Property"; }