MLIR: lib/Tools/PDLL/ODS/Context.cpp Source File (original) (raw)
1
2
3
4
5
6
7
8
13 #include "llvm/Support/ScopedPrinter.h"
14 #include "llvm/Support/raw_ostream.h"
15 #include
16
17 using namespace mlir;
19
20
21
22
23
26
29 StringRef cppClass) {
30 std::unique_ptr &constraint = attributeConstraints[name];
31 if (!constraint) {
33 } else {
34 assert(constraint->getCppClass() == cppClass &&
35 constraint->getSummary() == summary &&
36 "constraint with the same name was already registered with a "
37 "different class");
38 }
39 return *constraint;
40 }
41
43 StringRef summary,
44 StringRef cppClass) {
45 std::unique_ptr &constraint = typeConstraints[name];
46 if (!constraint)
47 constraint.reset(new TypeConstraint(name, summary, cppClass));
48 return *constraint;
49 }
50
52 std::unique_ptr &dialect = dialects[name];
53 if (!dialect)
54 dialect.reset(new Dialect(name));
55 return *dialect;
56 }
57
59 auto it = dialects.find(name);
60 return it == dialects.end() ? nullptr : &*it->second;
61 }
62
63 std::pair<Operation *, bool>
65 StringRef nativeClassName,
66 bool supportsResultTypeInferrence, SMLoc loc) {
67 std::pair<StringRef, StringRef> dialectAndName = name.split('.');
70 supportsResultTypeInferrence, loc);
71 }
72
74 std::pair<StringRef, StringRef> dialectAndName = name.split('.');
76 return dialect->lookupOperation(name);
77 return nullptr;
78 }
79
80 template
83 for (auto &entry : map)
84 storage.push_back(entry.second.get());
85 llvm::sort(storage, [](const auto &lhs, const auto &rhs) {
86 return lhs->getName() < rhs->getName();
87 });
88 return storage;
89 }
90
93 switch (kind) {
95 os << "Optional<" << cst << ">";
96 break;
98 os << cst;
99 break;
101 os << "Variadic<" << cst << ">";
102 break;
103 }
104 };
105
106 llvm::ScopedPrinter printer(os);
107 llvm::DictScope odsScope(printer, "ODSContext");
109 printer.startLine() << "Dialect `" << dialect->getName() << "` {\n";
110 printer.indent();
111
113 printer.startLine() << "Operation `" << op->getName() << "` {\n";
114 printer.indent();
115
116
118 if (!attributes.empty()) {
119 printer.startLine() << "Attributes { ";
120 llvm::interleaveComma(attributes, os, [&](const Attribute &attr) {
121 os << attr.getName() << " : ";
122
126 });
127 os << " }\n";
128 }
129
130
132 if (!operands.empty()) {
133 printer.startLine() << "Operands { ";
134 llvm::interleaveComma(
136 os << operand.getName() << " : ";
139 });
140 os << " }\n";
141 }
142
143
145 if (!results.empty()) {
146 printer.startLine() << "Results { ";
147 llvm::interleaveComma(results, os, [&](const OperandOrResult &result) {
148 os << result.getName() << " : ";
151 });
152 os << " }\n";
153 }
154
155 printer.objectEnd();
156 }
157 printer.objectEnd();
158 }
160 printer.startLine() << "AttributeConstraint `" << cst->getDemangledName()
161 << "` {\n";
162 printer.indent();
163
164 printer.startLine() << "Summary: " << cst->getSummary() << "\n";
165 printer.startLine() << "CppClass: " << cst->getCppClass() << "\n";
166 printer.objectEnd();
167 }
169 printer.startLine() << "TypeConstraint `" << cst->getDemangledName()
170 << "` {\n";
171 printer.indent();
172
173 printer.startLine() << "Summary: " << cst->getSummary() << "\n";
174 printer.startLine() << "CppClass: " << cst->getCppClass() << "\n";
175 printer.objectEnd();
176 }
177 printer.objectEnd();
178 }
union mlir::linalg::@1203::ArityGroupAndKind::Kind kind
SmallVector< T * > sortMapByName(const llvm::StringMap< std::unique_ptr< T >> &map)
This class represents a generic ODS Attribute constraint.
This class provides an ODS representation of a specific operation attribute.
StringRef getName() const
Return the name of this operand.
const AttributeConstraint & getConstraint() const
Return the constraint of this attribute.
bool isOptional() const
Return true if this attribute is optional.
StringRef getDemangledName() const
Return the demangled name of this constraint.
std::pair< Operation *, bool > insertOperation(StringRef name, StringRef summary, StringRef desc, StringRef nativeClassName, bool supportsResultTypeInferrence, SMLoc loc)
Insert a new operation with the context.
const TypeConstraint & insertTypeConstraint(StringRef name, StringRef summary, StringRef cppClass)
Insert a new type constraint with the context.
Dialect & insertDialect(StringRef name)
Insert a new dialect with the context.
const Dialect * lookupDialect(StringRef name) const
Lookup a dialect registered with the given name, or null if no dialect with that name was inserted.
const AttributeConstraint & insertAttributeConstraint(StringRef name, StringRef summary, StringRef cppClass)
Insert a new attribute constraint with the context.
const Operation * lookupOperation(StringRef name) const
Lookup an operation registered with the given name, or null if no operation with that name is registe...
void print(raw_ostream &os) const
Print the contents of this context to the provided stream.
This class represents an ODS dialect, and contains information on the constructs held within the dial...
std::pair< Operation *, bool > insertOperation(StringRef name, StringRef summary, StringRef desc, StringRef nativeClassName, bool supportsResultTypeInferrence, SMLoc loc)
Insert a new operation with the dialect.
This class provides an ODS representation of a specific operation operand or result.
const TypeConstraint & getConstraint() const
Return the constraint of this value.
VariableLengthKind getVariableLengthKind() const
Returns the variable length kind of this value.
StringRef getName() const
Return the name of this value.
This class provides an ODS representation of a specific operation.
This class represents a generic ODS Type constraint.
Include the generated interface declarations.