MLIR 24.0.0git
Trait.cpp
Go to the documentation of this file.
1//===- Trait.cpp ----------------------------------------------------------===//
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// Trait wrapper to simplify using TableGen Record defining a MLIR Trait.
10//
11//===----------------------------------------------------------------------===//
12
13#include "mlir/TableGen/Trait.h"
16#include "llvm/TableGen/Error.h"
17#include "llvm/TableGen/Record.h"
18
19using namespace mlir;
20using namespace mlir::tblgen;
21
22//===----------------------------------------------------------------------===//
23// Trait
24//===----------------------------------------------------------------------===//
25
26Trait Trait::create(const llvm::Init *init) {
27 auto *def = cast<llvm::DefInit>(init)->getDef();
28 if (def->isSubClassOf("PredTrait"))
29 return Trait(Kind::Pred, def);
30 if (def->isSubClassOf("GenInternalTrait"))
31 return Trait(Kind::Internal, def);
32 if (def->isSubClassOf("InterfaceTrait"))
33 return Trait(Kind::Interface, def);
34 assert(def->isSubClassOf("NativeTrait"));
35 return Trait(Kind::Native, def);
36}
37
38Trait::Trait(Kind kind, const llvm::Record *def) : def(def), kind(kind) {}
39
40std::vector<StringRef> Trait::getCppIncludes() const {
41 return def->getValueAsListOfStrings("cppIncludes");
42}
43
44//===----------------------------------------------------------------------===//
45// NativeTrait
46//===----------------------------------------------------------------------===//
47
49 llvm::StringRef trait = def->getValueAsString("trait");
50 llvm::StringRef cppNamespace = def->getValueAsString("cppNamespace");
51 return cppNamespace.empty() ? trait.str()
52 : (cppNamespace + "::" + trait).str();
53}
54
56 return def->isSubClassOf("StructuralOpTrait");
57}
58
60 return def->getValueAsString("extraConcreteClassDeclaration");
61}
62
64 return def->getValueAsString("extraConcreteClassDefinition");
65}
66
67//===----------------------------------------------------------------------===//
68// InternalTrait
69//===----------------------------------------------------------------------===//
70
72 return def->getValueAsString("trait");
73}
74
75//===----------------------------------------------------------------------===//
76// PredTrait
77//===----------------------------------------------------------------------===//
78
79std::string PredTrait::getPredTemplate() const {
80 auto pred = Pred(def->getValueInit("predicate"));
81 return pred.getCondition();
82}
83
84llvm::StringRef PredTrait::getSummary() const {
85 return def->getValueAsString("summary");
86}
87
88//===----------------------------------------------------------------------===//
89// InterfaceTrait
90//===----------------------------------------------------------------------===//
91
93
95 llvm::StringRef trait = def->getValueAsString("trait");
96 llvm::StringRef cppNamespace = def->getValueAsString("cppNamespace");
97 return cppNamespace.empty() ? trait.str()
98 : (cppNamespace + "::" + trait).str();
99}
100
102 return def->isSubClassOf("DeclareInterfaceMethods");
103}
104
105std::vector<StringRef> InterfaceTrait::getAlwaysDeclaredMethods() const {
106 return def->getValueAsListOfStrings("alwaysOverriddenMethods");
107}
std::vector< StringRef > getAlwaysDeclaredMethods() const
Definition Trait.cpp:105
std::string getFullyQualifiedTraitName() const
Definition Trait.cpp:94
Interface getInterface() const
Definition Trait.cpp:92
bool shouldDeclareMethods() const
Definition Trait.cpp:101
StringRef getFullyQualifiedTraitName() const
Definition Trait.cpp:71
bool isStructuralOpTrait() const
Definition Trait.cpp:55
std::string getFullyQualifiedTraitName() const
Definition Trait.cpp:48
StringRef getExtraConcreteClassDeclaration() const
Definition Trait.cpp:59
StringRef getExtraConcreteClassDefinition() const
Definition Trait.cpp:63
StringRef getSummary() const
Definition Trait.cpp:84
std::string getPredTemplate() const
Definition Trait.cpp:79
std::vector< StringRef > getCppIncludes() const
Definition Trait.cpp:40
const llvm::Record * def
Definition Trait.h:61
Trait(Kind kind, const llvm::Record *def)
Definition Trait.cpp:38
static Trait create(const llvm::Init *init)
Definition Trait.cpp:26
Include the generated interface declarations.