1R"(
2//===----------------------------------------------------------------------===//
3// __NAMESPACE_PATH__::__OP_CPP_NAME__ declarations
4//===----------------------------------------------------------------------===//
5
6__NAMESPACE_OPEN__
7
8namespace detail {
9
10class __OP_CPP_NAME__GenericAdaptorBase {
11public:
12 struct Properties {
13 };
14public:
15 __OP_CPP_NAME__GenericAdaptorBase(::mlir::Operation *op)
16 : odsAttrs(op->getRawDictionaryAttrs()), odsOpName(op->getName()),
17 odsRegions(op->getRegions())
18 {}
19
20 /// Return the unstructured operand index of a structured operand along with
21 // the amount of unstructured operands it contains.
22 std::pair<unsigned, unsigned>
23 getStructuredOperandIndexAndLength (unsigned index,
24 unsigned odsOperandsSize) {
25 return {index, 1};
26 }
27
28 const Properties &getProperties() {
29 return properties;
30 }
31
32 ::mlir::DictionaryAttr getAttributes() {
33 return odsAttrs;
34 }
35protected:
36 ::mlir::DictionaryAttr odsAttrs;
37 ::std::optional<::mlir::OperationName> odsOpName;
38 Properties properties;
39 ::mlir::RegionRange odsRegions;
40};
41
42} // namespace detail
43
44template <typename RangeT>
45class __OP_CPP_NAME__GenericAdaptor
46 : public detail::__OP_CPP_NAME__GenericAdaptorBase {
47 using ValueT = ::llvm::detail::ValueOfRange<RangeT>;
48 using Base = detail::__OP_CPP_NAME__GenericAdaptorBase;
49public:
50 __OP_CPP_NAME__GenericAdaptor(RangeT values, ::mlir::DictionaryAttr attrs,
51 ::mlir::OpaqueProperties properties,
52 ::mlir::RegionRange regions = {})
53 : __OP_CPP_NAME__GenericAdaptor(values, attrs,
54 (properties ? *properties.as<::mlir::EmptyProperties *>()
55 : ::mlir::EmptyProperties{}), regions) {}
56
57 __OP_CPP_NAME__GenericAdaptor(RangeT values,
58 const __OP_CPP_NAME__GenericAdaptorBase &base)
59 : Base(base), odsOperands(values) {}
60
61 // This template parameter allows using __OP_CPP_NAME__ which is declared
62 // later.
63 template <typename LateInst = __OP_CPP_NAME__,
64 typename = std::enable_if_t<
65 std::is_same_v<LateInst, __OP_CPP_NAME__>>>
66 __OP_CPP_NAME__GenericAdaptor(RangeT values, LateInst op)
67 : Base(op), odsOperands(values) {}
68
69 /// Return the unstructured operand index of a structured operand along with
70 // the amount of unstructured operands it contains.
71 std::pair<unsigned, unsigned>
72 getStructuredOperandIndexAndLength(unsigned index) {
73 return Base::getStructuredOperandIndexAndLength(index, odsOperands.size());
74 }
75
76 /// Get the n-th structured operand (single value, variadic or optional).
77 RangeT getStructuredOperands(unsigned index) {
78 auto valueRange = getStructuredOperandIndexAndLength(index);
79 return {std::next(odsOperands.begin(), valueRange.first),
80 std::next(odsOperands.begin(),
81 valueRange.first + valueRange.second)};
82 }
83
84 RangeT getOperands() {
85 return odsOperands;
86 }
87
88 __OP_OPERAND_GETTER_DECLS__
89
90private:
91 RangeT odsOperands;
92};
93
94class __OP_CPP_NAME__Adaptor
95 : public __OP_CPP_NAME__GenericAdaptor<::mlir::ValueRange> {
96public:
97 using __OP_CPP_NAME__GenericAdaptor::__OP_CPP_NAME__GenericAdaptor;
98 __OP_CPP_NAME__Adaptor(__OP_CPP_NAME__ op);
99
100 ::llvm::LogicalResult verify(::mlir::Location loc);
101};
102
103class __OP_CPP_NAME__ : public ::mlir::Op<__OP_CPP_NAME__> {
104public:
105 using Op::Op;
106 using Op::print;
107 using Adaptor = __OP_CPP_NAME__Adaptor;
108 template <typename RangeT>
109 using GenericAdaptor = __OP_CPP_NAME__GenericAdaptor<RangeT>;
110 using FoldAdaptor = GenericAdaptor<::llvm::ArrayRef<::mlir::Attribute>>;
111 static ::llvm::ArrayRef<::llvm::StringRef> getAttributeNames() {
112 return {};
113 }
114
115 static constexpr ::llvm::StringLiteral getOperationName() {
116 return ::llvm::StringLiteral("__DIALECT_NAME__.__OP_NAME__");
117 }
118
119 static ::llvm::ArrayRef<::llvm::StringRef> getOperandNames() {
120 static ::llvm::StringRef operandNames[] = __OP_OPERAND_INITIALIZER_LIST__;
121 return operandNames;
122 }
123
124 static ::llvm::StringRef getOperandName(unsigned index) {
125 assert(index < __OP_OPERAND_COUNT__ && "invalid attribute index");
126 return getOperandNames()[index];
127 }
128
129 static ::llvm::ArrayRef<::llvm::StringRef> getResultNames() {
130 static ::llvm::StringRef resultNames[] = __OP_RESULT_INITIALIZER_LIST__;
131 return resultNames;
132 }
133
134 static ::llvm::StringRef getResultName(unsigned index) {
135 assert(index < __OP_RESULT_COUNT__ && "invalid attribute index");
136 return getResultNames()[index];
137 }
138
139 /// Return the unstructured operand index of a structured operand along with
140 // the amount of unstructured operands it contains.
141 std::pair<unsigned, unsigned>
142 getStructuredOperandIndexAndLength(unsigned index) {
143 return {index, 1};
144 }
145
146 /// Get the n-th structured operand (single value, variadic or optional).
147 ::mlir::Operation::operand_range getStructuredOperands(unsigned index) {
148 auto valueRange = getStructuredOperandIndexAndLength(index);
149 return {std::next(getOperation()->operand_begin(), valueRange.first),
150 std::next(getOperation()->operand_begin(),
151 valueRange.first + valueRange.second)};
152 }
153
154 /// Return the unstructured result index of a structured result along with
155 // the amount of unstructured results it contains.
156 std::pair<unsigned, unsigned>
157 getStructuredResultIndexAndLength(unsigned index) {
158 return {index, 1};
159 }
160
161 /// Get the n-th structured result (single value, variadic or optional).
162 ::mlir::Operation::result_range getStructuredResults(unsigned index) {
163 auto valueRange = getStructuredResultIndexAndLength(index);
164 return {std::next(getOperation()->result_begin(), valueRange.first),
165 std::next(getOperation()->result_begin(),
166 valueRange.first + valueRange.second)};
167 }
168
169 __OP_OPERAND_GETTER_DECLS__
170 __OP_RESULT_GETTER_DECLS__
171
172 __OP_BUILD_DECLS__
173 static void build(::mlir::OpBuilder &odsBuilder,
174 ::mlir::OperationState &odsState,
175 ::mlir::TypeRange resultTypes,
176 ::mlir::ValueRange operands,
177 ::llvm::ArrayRef<::mlir::NamedAttribute> attributes = {});
178};
179
180
181__NAMESPACE_CLOSE__
182
183MLIR_DECLARE_EXPLICIT_TYPE_ID(__NAMESPACE_PATH__::__OP_CPP_NAME__)
184
185)"
186

source code of mlir/lib/Target/IRDLToCpp/Templates/PerOperationDecl.txt