brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.4 KiB · ef39818 Raw
120 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8//9// Dialect wrapper to simplify using TableGen Record defining a MLIR dialect.10//11//===----------------------------------------------------------------------===//12 13#include "mlir/TableGen/Dialect.h"14#include "llvm/TableGen/Error.h"15#include "llvm/TableGen/Record.h"16 17using namespace mlir;18using namespace mlir::tblgen;19Dialect::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);24}25 26StringRef Dialect::getName() const { return def->getValueAsString("name"); }27 28StringRef Dialect::getCppNamespace() const {29  return def->getValueAsString("cppNamespace");30}31 32std::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;37}38 39static 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);44  }45  return "";46}47 48StringRef Dialect::getSummary() const {49  return getAsStringOrEmpty(*def, "summary");50}51 52StringRef Dialect::getDescription() const {53  return getAsStringOrEmpty(*def, "description");54}55 56ArrayRef<StringRef> Dialect::getDependentDialects() const {57  return dependentDialects;58}59 60std::optional<StringRef> Dialect::getExtraClassDeclaration() const {61  auto value = def->getValueAsString("extraClassDeclaration");62  return value.empty() ? std::optional<StringRef>() : value;63}64 65bool Dialect::hasCanonicalizer() const {66  return def->getValueAsBit("hasCanonicalizer");67}68 69bool Dialect::hasConstantMaterializer() const {70  return def->getValueAsBit("hasConstantMaterializer");71}72 73bool Dialect::hasNonDefaultDestructor() const {74  return def->getValueAsBit("hasNonDefaultDestructor");75}76 77bool Dialect::hasOperationAttrVerify() const {78  return def->getValueAsBit("hasOperationAttrVerify");79}80 81bool Dialect::hasRegionArgAttrVerify() const {82  return def->getValueAsBit("hasRegionArgAttrVerify");83}84 85bool Dialect::hasRegionResultAttrVerify() const {86  return def->getValueAsBit("hasRegionResultAttrVerify");87}88 89bool Dialect::hasOperationInterfaceFallback() const {90  return def->getValueAsBit("hasOperationInterfaceFallback");91}92 93bool Dialect::useDefaultAttributePrinterParser() const {94  return def->getValueAsBit("useDefaultAttributePrinterParser");95}96 97bool Dialect::useDefaultTypePrinterParser() const {98  return def->getValueAsBit("useDefaultTypePrinterParser");99}100 101bool Dialect::isExtensible() const {102  return def->getValueAsBit("isExtensible");103}104 105bool Dialect::usePropertiesForAttributes() const {106  return def->getValueAsBit("usePropertiesForAttributes");107}108 109const llvm::DagInit *Dialect::getDiscardableAttributes() const {110  return def->getValueAsDag("discardableAttrs");111}112 113bool Dialect::operator==(const Dialect &other) const {114  return def == other.def;115}116 117bool Dialect::operator<(const Dialect &other) const {118  return getName() < other.getName();119}120