brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 6128c53 Raw
137 lines · cpp
1//===- EnumInfo.cpp - EnumInfo 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#include "mlir/TableGen/EnumInfo.h"10#include "mlir/TableGen/Attribute.h"11#include "llvm/TableGen/Record.h"12 13using namespace mlir;14using namespace mlir::tblgen;15 16using llvm::DefInit;17using llvm::Init;18using llvm::Record;19 20EnumCase::EnumCase(const Record *record) : def(record) {21  assert(def->isSubClassOf("EnumCase") &&22         "must be subclass of TableGen 'EnumCase' class");23}24 25EnumCase::EnumCase(const DefInit *init) : EnumCase(init->getDef()) {}26 27StringRef EnumCase::getSymbol() const {28  return def->getValueAsString("symbol");29}30 31StringRef EnumCase::getStr() const { return def->getValueAsString("str"); }32 33int64_t EnumCase::getValue() const { return def->getValueAsInt("value"); }34 35const Record &EnumCase::getDef() const { return *def; }36 37EnumInfo::EnumInfo(const Record *record) : def(record) {38  assert(isSubClassOf("EnumInfo") &&39         "must be subclass of TableGen 'EnumInfo' class");40}41 42EnumInfo::EnumInfo(const Record &record) : EnumInfo(&record) {}43 44EnumInfo::EnumInfo(const DefInit *init) : EnumInfo(init->getDef()) {}45 46bool EnumInfo::isSubClassOf(StringRef className) const {47  return def->isSubClassOf(className);48}49 50bool EnumInfo::isEnumAttr() const { return isSubClassOf("EnumAttrInfo"); }51 52std::optional<Attribute> EnumInfo::asEnumAttr() const {53  if (isEnumAttr())54    return Attribute(def);55  return std::nullopt;56}57 58bool EnumInfo::isBitEnum() const { return isSubClassOf("BitEnumBase"); }59 60StringRef EnumInfo::getEnumClassName() const {61  return def->getValueAsString("className");62}63 64StringRef EnumInfo::getSummary() const {65  return def->getValueAsString("summary");66}67 68StringRef EnumInfo::getDescription() const {69  return def->getValueAsString("description");70}71 72StringRef EnumInfo::getCppNamespace() const {73  return def->getValueAsString("cppNamespace");74}75 76int64_t EnumInfo::getBitwidth() const { return def->getValueAsInt("bitwidth"); }77 78StringRef EnumInfo::getUnderlyingType() const {79  return def->getValueAsString("underlyingType");80}81 82StringRef EnumInfo::getUnderlyingToSymbolFnName() const {83  return def->getValueAsString("underlyingToSymbolFnName");84}85 86StringRef EnumInfo::getStringToSymbolFnName() const {87  return def->getValueAsString("stringToSymbolFnName");88}89 90StringRef EnumInfo::getSymbolToStringFnName() const {91  return def->getValueAsString("symbolToStringFnName");92}93 94StringRef EnumInfo::getSymbolToStringFnRetType() const {95  return def->getValueAsString("symbolToStringFnRetType");96}97 98StringRef EnumInfo::getMaxEnumValFnName() const {99  return def->getValueAsString("maxEnumValFnName");100}101 102std::vector<EnumCase> EnumInfo::getAllCases() const {103  const auto *inits = def->getValueAsListInit("enumerants");104 105  std::vector<EnumCase> cases;106  cases.reserve(inits->size());107 108  for (const Init *init : *inits) {109    cases.emplace_back(cast<DefInit>(init));110  }111 112  return cases;113}114 115bool EnumInfo::genSpecializedAttr() const {116  return isSubClassOf("EnumAttrInfo") &&117         def->getValueAsBit("genSpecializedAttr");118}119 120const Record *EnumInfo::getBaseAttrClass() const {121  return def->getValueAsDef("baseAttrClass");122}123 124StringRef EnumInfo::getSpecializedAttrClassName() const {125  return def->getValueAsString("specializedAttrClassName");126}127 128bool EnumInfo::printBitEnumPrimaryGroups() const {129  return def->getValueAsBit("printBitEnumPrimaryGroups");130}131 132bool EnumInfo::printBitEnumQuoted() const {133  return def->getValueAsBit("printBitEnumQuoted");134}135 136const Record &EnumInfo::getDef() const { return *def; }137