[CodeGen][NFC] Remove redundant map lookup (#125342)
[llvm-project.git] / mlir / lib / TableGen / Dialect.cpp
blobef39818e439b3e393b61104e84a1c725762226e0
1 //===- Dialect.cpp - Dialect wrapper class --------------------------------===//
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-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // Dialect wrapper to simplify using TableGen Record defining a MLIR dialect.
11 //===----------------------------------------------------------------------===//
13 #include "mlir/TableGen/Dialect.h"
14 #include "llvm/TableGen/Error.h"
15 #include "llvm/TableGen/Record.h"
17 using namespace mlir;
18 using namespace mlir::tblgen;
19 Dialect::Dialect(const llvm::Record *def) : def(def) {
20 if (def == nullptr)
21 return;
22 for (StringRef dialect : def->getValueAsListOfStrings("dependentDialects"))
23 dependentDialects.push_back(dialect);
26 StringRef Dialect::getName() const { return def->getValueAsString("name"); }
28 StringRef Dialect::getCppNamespace() const {
29 return def->getValueAsString("cppNamespace");
32 std::string Dialect::getCppClassName() const {
33 // Simply use the name and remove any '_' tokens.
34 std::string cppName = def->getName().str();
35 llvm::erase(cppName, '_');
36 return cppName;
39 static StringRef getAsStringOrEmpty(const llvm::Record &record,
40 StringRef fieldName) {
41 if (auto *valueInit = record.getValueInit(fieldName)) {
42 if (llvm::isa<llvm::StringInit>(valueInit))
43 return record.getValueAsString(fieldName);
45 return "";
48 StringRef Dialect::getSummary() const {
49 return getAsStringOrEmpty(*def, "summary");
52 StringRef Dialect::getDescription() const {
53 return getAsStringOrEmpty(*def, "description");
56 ArrayRef<StringRef> Dialect::getDependentDialects() const {
57 return dependentDialects;
60 std::optional<StringRef> Dialect::getExtraClassDeclaration() const {
61 auto value = def->getValueAsString("extraClassDeclaration");
62 return value.empty() ? std::optional<StringRef>() : value;
65 bool Dialect::hasCanonicalizer() const {
66 return def->getValueAsBit("hasCanonicalizer");
69 bool Dialect::hasConstantMaterializer() const {
70 return def->getValueAsBit("hasConstantMaterializer");
73 bool Dialect::hasNonDefaultDestructor() const {
74 return def->getValueAsBit("hasNonDefaultDestructor");
77 bool Dialect::hasOperationAttrVerify() const {
78 return def->getValueAsBit("hasOperationAttrVerify");
81 bool Dialect::hasRegionArgAttrVerify() const {
82 return def->getValueAsBit("hasRegionArgAttrVerify");
85 bool Dialect::hasRegionResultAttrVerify() const {
86 return def->getValueAsBit("hasRegionResultAttrVerify");
89 bool Dialect::hasOperationInterfaceFallback() const {
90 return def->getValueAsBit("hasOperationInterfaceFallback");
93 bool Dialect::useDefaultAttributePrinterParser() const {
94 return def->getValueAsBit("useDefaultAttributePrinterParser");
97 bool Dialect::useDefaultTypePrinterParser() const {
98 return def->getValueAsBit("useDefaultTypePrinterParser");
101 bool Dialect::isExtensible() const {
102 return def->getValueAsBit("isExtensible");
105 bool Dialect::usePropertiesForAttributes() const {
106 return def->getValueAsBit("usePropertiesForAttributes");
109 const llvm::DagInit *Dialect::getDiscardableAttributes() const {
110 return def->getValueAsDag("discardableAttrs");
113 bool Dialect::operator==(const Dialect &other) const {
114 return def == other.def;
117 bool Dialect::operator<(const Dialect &other) const {
118 return getName() < other.getName();