1c7cae0e4SRiver Riddle //===- BuiltinAttributes.cpp - C Interface to MLIR Builtin Attributes -----===//
2c7cae0e4SRiver Riddle //
3c7cae0e4SRiver Riddle // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4c7cae0e4SRiver Riddle // See https://llvm.org/LICENSE.txt for license information.
5c7cae0e4SRiver Riddle // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6c7cae0e4SRiver Riddle //
7c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
8c7cae0e4SRiver Riddle
9c7cae0e4SRiver Riddle #include "mlir-c/BuiltinAttributes.h"
10c7cae0e4SRiver Riddle #include "mlir/CAPI/AffineMap.h"
11c7cae0e4SRiver Riddle #include "mlir/CAPI/IR.h"
12c7cae0e4SRiver Riddle #include "mlir/CAPI/Support.h"
13c7cae0e4SRiver Riddle #include "mlir/IR/Attributes.h"
14c7cae0e4SRiver Riddle #include "mlir/IR/BuiltinTypes.h"
15c7cae0e4SRiver Riddle
16c7cae0e4SRiver Riddle using namespace mlir;
17c7cae0e4SRiver Riddle
mlirAttributeGetNull()187714b405SAart Bik MlirAttribute mlirAttributeGetNull() { return {nullptr}; }
197714b405SAart Bik
20c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
21c7cae0e4SRiver Riddle // Affine map attribute.
22c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
23c7cae0e4SRiver Riddle
mlirAttributeIsAAffineMap(MlirAttribute attr)24c7cae0e4SRiver Riddle bool mlirAttributeIsAAffineMap(MlirAttribute attr) {
25c7cae0e4SRiver Riddle return unwrap(attr).isa<AffineMapAttr>();
26c7cae0e4SRiver Riddle }
27c7cae0e4SRiver Riddle
mlirAffineMapAttrGet(MlirAffineMap map)28c7cae0e4SRiver Riddle MlirAttribute mlirAffineMapAttrGet(MlirAffineMap map) {
29c7cae0e4SRiver Riddle return wrap(AffineMapAttr::get(unwrap(map)));
30c7cae0e4SRiver Riddle }
31c7cae0e4SRiver Riddle
mlirAffineMapAttrGetValue(MlirAttribute attr)32c7cae0e4SRiver Riddle MlirAffineMap mlirAffineMapAttrGetValue(MlirAttribute attr) {
33c7cae0e4SRiver Riddle return wrap(unwrap(attr).cast<AffineMapAttr>().getValue());
34c7cae0e4SRiver Riddle }
35c7cae0e4SRiver Riddle
36c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
37c7cae0e4SRiver Riddle // Array attribute.
38c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
39c7cae0e4SRiver Riddle
mlirAttributeIsAArray(MlirAttribute attr)40c7cae0e4SRiver Riddle bool mlirAttributeIsAArray(MlirAttribute attr) {
41c7cae0e4SRiver Riddle return unwrap(attr).isa<ArrayAttr>();
42c7cae0e4SRiver Riddle }
43c7cae0e4SRiver Riddle
mlirArrayAttrGet(MlirContext ctx,intptr_t numElements,MlirAttribute const * elements)44c7cae0e4SRiver Riddle MlirAttribute mlirArrayAttrGet(MlirContext ctx, intptr_t numElements,
45c7cae0e4SRiver Riddle MlirAttribute const *elements) {
46c7cae0e4SRiver Riddle SmallVector<Attribute, 8> attrs;
47c2c83e97STres Popp return wrap(
48c2c83e97STres Popp ArrayAttr::get(unwrap(ctx), unwrapList(static_cast<size_t>(numElements),
49c2c83e97STres Popp elements, attrs)));
50c7cae0e4SRiver Riddle }
51c7cae0e4SRiver Riddle
mlirArrayAttrGetNumElements(MlirAttribute attr)52c7cae0e4SRiver Riddle intptr_t mlirArrayAttrGetNumElements(MlirAttribute attr) {
53c7cae0e4SRiver Riddle return static_cast<intptr_t>(unwrap(attr).cast<ArrayAttr>().size());
54c7cae0e4SRiver Riddle }
55c7cae0e4SRiver Riddle
mlirArrayAttrGetElement(MlirAttribute attr,intptr_t pos)56c7cae0e4SRiver Riddle MlirAttribute mlirArrayAttrGetElement(MlirAttribute attr, intptr_t pos) {
57c7cae0e4SRiver Riddle return wrap(unwrap(attr).cast<ArrayAttr>().getValue()[pos]);
58c7cae0e4SRiver Riddle }
59c7cae0e4SRiver Riddle
60c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
61c7cae0e4SRiver Riddle // Dictionary attribute.
62c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
63c7cae0e4SRiver Riddle
mlirAttributeIsADictionary(MlirAttribute attr)64c7cae0e4SRiver Riddle bool mlirAttributeIsADictionary(MlirAttribute attr) {
65c7cae0e4SRiver Riddle return unwrap(attr).isa<DictionaryAttr>();
66c7cae0e4SRiver Riddle }
67c7cae0e4SRiver Riddle
mlirDictionaryAttrGet(MlirContext ctx,intptr_t numElements,MlirNamedAttribute const * elements)68c7cae0e4SRiver Riddle MlirAttribute mlirDictionaryAttrGet(MlirContext ctx, intptr_t numElements,
69c7cae0e4SRiver Riddle MlirNamedAttribute const *elements) {
70c7cae0e4SRiver Riddle SmallVector<NamedAttribute, 8> attributes;
71c7cae0e4SRiver Riddle attributes.reserve(numElements);
72c7cae0e4SRiver Riddle for (intptr_t i = 0; i < numElements; ++i)
7392a79dbeSChris Lattner attributes.emplace_back(unwrap(elements[i].name),
74c7cae0e4SRiver Riddle unwrap(elements[i].attribute));
75c2c83e97STres Popp return wrap(DictionaryAttr::get(unwrap(ctx), attributes));
76c7cae0e4SRiver Riddle }
77c7cae0e4SRiver Riddle
mlirDictionaryAttrGetNumElements(MlirAttribute attr)78c7cae0e4SRiver Riddle intptr_t mlirDictionaryAttrGetNumElements(MlirAttribute attr) {
79c7cae0e4SRiver Riddle return static_cast<intptr_t>(unwrap(attr).cast<DictionaryAttr>().size());
80c7cae0e4SRiver Riddle }
81c7cae0e4SRiver Riddle
mlirDictionaryAttrGetElement(MlirAttribute attr,intptr_t pos)82c7cae0e4SRiver Riddle MlirNamedAttribute mlirDictionaryAttrGetElement(MlirAttribute attr,
83c7cae0e4SRiver Riddle intptr_t pos) {
84c7cae0e4SRiver Riddle NamedAttribute attribute =
85c7cae0e4SRiver Riddle unwrap(attr).cast<DictionaryAttr>().getValue()[pos];
860c7890c8SRiver Riddle return {wrap(attribute.getName()), wrap(attribute.getValue())};
87c7cae0e4SRiver Riddle }
88c7cae0e4SRiver Riddle
mlirDictionaryAttrGetElementByName(MlirAttribute attr,MlirStringRef name)89c7cae0e4SRiver Riddle MlirAttribute mlirDictionaryAttrGetElementByName(MlirAttribute attr,
90c7cae0e4SRiver Riddle MlirStringRef name) {
91c7cae0e4SRiver Riddle return wrap(unwrap(attr).cast<DictionaryAttr>().get(unwrap(name)));
92c7cae0e4SRiver Riddle }
93c7cae0e4SRiver Riddle
94c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
95c7cae0e4SRiver Riddle // Floating point attribute.
96c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
97c7cae0e4SRiver Riddle
mlirAttributeIsAFloat(MlirAttribute attr)98c7cae0e4SRiver Riddle bool mlirAttributeIsAFloat(MlirAttribute attr) {
99c7cae0e4SRiver Riddle return unwrap(attr).isa<FloatAttr>();
100c7cae0e4SRiver Riddle }
101c7cae0e4SRiver Riddle
mlirFloatAttrDoubleGet(MlirContext ctx,MlirType type,double value)102c7cae0e4SRiver Riddle MlirAttribute mlirFloatAttrDoubleGet(MlirContext ctx, MlirType type,
103c7cae0e4SRiver Riddle double value) {
104c7cae0e4SRiver Riddle return wrap(FloatAttr::get(unwrap(type), value));
105c7cae0e4SRiver Riddle }
106c7cae0e4SRiver Riddle
mlirFloatAttrDoubleGetChecked(MlirLocation loc,MlirType type,double value)10706e25d56SRiver Riddle MlirAttribute mlirFloatAttrDoubleGetChecked(MlirLocation loc, MlirType type,
10806e25d56SRiver Riddle double value) {
10906e25d56SRiver Riddle return wrap(FloatAttr::getChecked(unwrap(loc), unwrap(type), value));
110c7cae0e4SRiver Riddle }
111c7cae0e4SRiver Riddle
mlirFloatAttrGetValueDouble(MlirAttribute attr)112c7cae0e4SRiver Riddle double mlirFloatAttrGetValueDouble(MlirAttribute attr) {
113c7cae0e4SRiver Riddle return unwrap(attr).cast<FloatAttr>().getValueAsDouble();
114c7cae0e4SRiver Riddle }
115c7cae0e4SRiver Riddle
116c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
117c7cae0e4SRiver Riddle // Integer attribute.
118c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
119c7cae0e4SRiver Riddle
mlirAttributeIsAInteger(MlirAttribute attr)120c7cae0e4SRiver Riddle bool mlirAttributeIsAInteger(MlirAttribute attr) {
121c7cae0e4SRiver Riddle return unwrap(attr).isa<IntegerAttr>();
122c7cae0e4SRiver Riddle }
123c7cae0e4SRiver Riddle
mlirIntegerAttrGet(MlirType type,int64_t value)124c7cae0e4SRiver Riddle MlirAttribute mlirIntegerAttrGet(MlirType type, int64_t value) {
125c7cae0e4SRiver Riddle return wrap(IntegerAttr::get(unwrap(type), value));
126c7cae0e4SRiver Riddle }
127c7cae0e4SRiver Riddle
mlirIntegerAttrGetValueInt(MlirAttribute attr)128c7cae0e4SRiver Riddle int64_t mlirIntegerAttrGetValueInt(MlirAttribute attr) {
129c7cae0e4SRiver Riddle return unwrap(attr).cast<IntegerAttr>().getInt();
130c7cae0e4SRiver Riddle }
131c7cae0e4SRiver Riddle
mlirIntegerAttrGetValueSInt(MlirAttribute attr)132e9db306dSrkayaith int64_t mlirIntegerAttrGetValueSInt(MlirAttribute attr) {
133e9db306dSrkayaith return unwrap(attr).cast<IntegerAttr>().getSInt();
134e9db306dSrkayaith }
135e9db306dSrkayaith
mlirIntegerAttrGetValueUInt(MlirAttribute attr)136e9db306dSrkayaith uint64_t mlirIntegerAttrGetValueUInt(MlirAttribute attr) {
137e9db306dSrkayaith return unwrap(attr).cast<IntegerAttr>().getUInt();
138e9db306dSrkayaith }
139e9db306dSrkayaith
140c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
141c7cae0e4SRiver Riddle // Bool attribute.
142c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
143c7cae0e4SRiver Riddle
mlirAttributeIsABool(MlirAttribute attr)144c7cae0e4SRiver Riddle bool mlirAttributeIsABool(MlirAttribute attr) {
145c7cae0e4SRiver Riddle return unwrap(attr).isa<BoolAttr>();
146c7cae0e4SRiver Riddle }
147c7cae0e4SRiver Riddle
mlirBoolAttrGet(MlirContext ctx,int value)148c7cae0e4SRiver Riddle MlirAttribute mlirBoolAttrGet(MlirContext ctx, int value) {
149c2c83e97STres Popp return wrap(BoolAttr::get(unwrap(ctx), value));
150c7cae0e4SRiver Riddle }
151c7cae0e4SRiver Riddle
mlirBoolAttrGetValue(MlirAttribute attr)152c7cae0e4SRiver Riddle bool mlirBoolAttrGetValue(MlirAttribute attr) {
153c7cae0e4SRiver Riddle return unwrap(attr).cast<BoolAttr>().getValue();
154c7cae0e4SRiver Riddle }
155c7cae0e4SRiver Riddle
156c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
157c7cae0e4SRiver Riddle // Integer set attribute.
158c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
159c7cae0e4SRiver Riddle
mlirAttributeIsAIntegerSet(MlirAttribute attr)160c7cae0e4SRiver Riddle bool mlirAttributeIsAIntegerSet(MlirAttribute attr) {
161c7cae0e4SRiver Riddle return unwrap(attr).isa<IntegerSetAttr>();
162c7cae0e4SRiver Riddle }
163c7cae0e4SRiver Riddle
164c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
165c7cae0e4SRiver Riddle // Opaque attribute.
166c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
167c7cae0e4SRiver Riddle
mlirAttributeIsAOpaque(MlirAttribute attr)168c7cae0e4SRiver Riddle bool mlirAttributeIsAOpaque(MlirAttribute attr) {
169c7cae0e4SRiver Riddle return unwrap(attr).isa<OpaqueAttr>();
170c7cae0e4SRiver Riddle }
171c7cae0e4SRiver Riddle
mlirOpaqueAttrGet(MlirContext ctx,MlirStringRef dialectNamespace,intptr_t dataLength,const char * data,MlirType type)172c7cae0e4SRiver Riddle MlirAttribute mlirOpaqueAttrGet(MlirContext ctx, MlirStringRef dialectNamespace,
173c7cae0e4SRiver Riddle intptr_t dataLength, const char *data,
174c7cae0e4SRiver Riddle MlirType type) {
175e6260ad0SRiver Riddle return wrap(
176195730a6SRiver Riddle OpaqueAttr::get(StringAttr::get(unwrap(ctx), unwrap(dialectNamespace)),
177c2c83e97STres Popp StringRef(data, dataLength), unwrap(type)));
178c7cae0e4SRiver Riddle }
179c7cae0e4SRiver Riddle
mlirOpaqueAttrGetDialectNamespace(MlirAttribute attr)180c7cae0e4SRiver Riddle MlirStringRef mlirOpaqueAttrGetDialectNamespace(MlirAttribute attr) {
181c7cae0e4SRiver Riddle return wrap(unwrap(attr).cast<OpaqueAttr>().getDialectNamespace().strref());
182c7cae0e4SRiver Riddle }
183c7cae0e4SRiver Riddle
mlirOpaqueAttrGetData(MlirAttribute attr)184c7cae0e4SRiver Riddle MlirStringRef mlirOpaqueAttrGetData(MlirAttribute attr) {
185c7cae0e4SRiver Riddle return wrap(unwrap(attr).cast<OpaqueAttr>().getAttrData());
186c7cae0e4SRiver Riddle }
187c7cae0e4SRiver Riddle
188c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
189c7cae0e4SRiver Riddle // String attribute.
190c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
191c7cae0e4SRiver Riddle
mlirAttributeIsAString(MlirAttribute attr)192c7cae0e4SRiver Riddle bool mlirAttributeIsAString(MlirAttribute attr) {
193c7cae0e4SRiver Riddle return unwrap(attr).isa<StringAttr>();
194c7cae0e4SRiver Riddle }
195c7cae0e4SRiver Riddle
mlirStringAttrGet(MlirContext ctx,MlirStringRef str)196c7cae0e4SRiver Riddle MlirAttribute mlirStringAttrGet(MlirContext ctx, MlirStringRef str) {
197120591e1SRiver Riddle return wrap((Attribute)StringAttr::get(unwrap(ctx), unwrap(str)));
198c7cae0e4SRiver Riddle }
199c7cae0e4SRiver Riddle
mlirStringAttrTypedGet(MlirType type,MlirStringRef str)200c7cae0e4SRiver Riddle MlirAttribute mlirStringAttrTypedGet(MlirType type, MlirStringRef str) {
201120591e1SRiver Riddle return wrap((Attribute)StringAttr::get(unwrap(str), unwrap(type)));
202c7cae0e4SRiver Riddle }
203c7cae0e4SRiver Riddle
mlirStringAttrGetValue(MlirAttribute attr)204c7cae0e4SRiver Riddle MlirStringRef mlirStringAttrGetValue(MlirAttribute attr) {
205c7cae0e4SRiver Riddle return wrap(unwrap(attr).cast<StringAttr>().getValue());
206c7cae0e4SRiver Riddle }
207c7cae0e4SRiver Riddle
208c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
209c7cae0e4SRiver Riddle // SymbolRef attribute.
210c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
211c7cae0e4SRiver Riddle
mlirAttributeIsASymbolRef(MlirAttribute attr)212c7cae0e4SRiver Riddle bool mlirAttributeIsASymbolRef(MlirAttribute attr) {
213c7cae0e4SRiver Riddle return unwrap(attr).isa<SymbolRefAttr>();
214c7cae0e4SRiver Riddle }
215c7cae0e4SRiver Riddle
mlirSymbolRefAttrGet(MlirContext ctx,MlirStringRef symbol,intptr_t numReferences,MlirAttribute const * references)216c7cae0e4SRiver Riddle MlirAttribute mlirSymbolRefAttrGet(MlirContext ctx, MlirStringRef symbol,
217c7cae0e4SRiver Riddle intptr_t numReferences,
218c7cae0e4SRiver Riddle MlirAttribute const *references) {
219c7cae0e4SRiver Riddle SmallVector<FlatSymbolRefAttr, 4> refs;
220c7cae0e4SRiver Riddle refs.reserve(numReferences);
221c7cae0e4SRiver Riddle for (intptr_t i = 0; i < numReferences; ++i)
222c7cae0e4SRiver Riddle refs.push_back(unwrap(references[i]).cast<FlatSymbolRefAttr>());
22341d4aa7dSChris Lattner auto symbolAttr = StringAttr::get(unwrap(ctx), unwrap(symbol));
22441d4aa7dSChris Lattner return wrap(SymbolRefAttr::get(symbolAttr, refs));
225c7cae0e4SRiver Riddle }
226c7cae0e4SRiver Riddle
mlirSymbolRefAttrGetRootReference(MlirAttribute attr)227c7cae0e4SRiver Riddle MlirStringRef mlirSymbolRefAttrGetRootReference(MlirAttribute attr) {
22841d4aa7dSChris Lattner return wrap(unwrap(attr).cast<SymbolRefAttr>().getRootReference().getValue());
229c7cae0e4SRiver Riddle }
230c7cae0e4SRiver Riddle
mlirSymbolRefAttrGetLeafReference(MlirAttribute attr)231c7cae0e4SRiver Riddle MlirStringRef mlirSymbolRefAttrGetLeafReference(MlirAttribute attr) {
23241d4aa7dSChris Lattner return wrap(unwrap(attr).cast<SymbolRefAttr>().getLeafReference().getValue());
233c7cae0e4SRiver Riddle }
234c7cae0e4SRiver Riddle
mlirSymbolRefAttrGetNumNestedReferences(MlirAttribute attr)235c7cae0e4SRiver Riddle intptr_t mlirSymbolRefAttrGetNumNestedReferences(MlirAttribute attr) {
236c7cae0e4SRiver Riddle return static_cast<intptr_t>(
237c7cae0e4SRiver Riddle unwrap(attr).cast<SymbolRefAttr>().getNestedReferences().size());
238c7cae0e4SRiver Riddle }
239c7cae0e4SRiver Riddle
mlirSymbolRefAttrGetNestedReference(MlirAttribute attr,intptr_t pos)240c7cae0e4SRiver Riddle MlirAttribute mlirSymbolRefAttrGetNestedReference(MlirAttribute attr,
241c7cae0e4SRiver Riddle intptr_t pos) {
242c7cae0e4SRiver Riddle return wrap(unwrap(attr).cast<SymbolRefAttr>().getNestedReferences()[pos]);
243c7cae0e4SRiver Riddle }
244c7cae0e4SRiver Riddle
245c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
246c7cae0e4SRiver Riddle // Flat SymbolRef attribute.
247c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
248c7cae0e4SRiver Riddle
mlirAttributeIsAFlatSymbolRef(MlirAttribute attr)249c7cae0e4SRiver Riddle bool mlirAttributeIsAFlatSymbolRef(MlirAttribute attr) {
250c7cae0e4SRiver Riddle return unwrap(attr).isa<FlatSymbolRefAttr>();
251c7cae0e4SRiver Riddle }
252c7cae0e4SRiver Riddle
mlirFlatSymbolRefAttrGet(MlirContext ctx,MlirStringRef symbol)253c7cae0e4SRiver Riddle MlirAttribute mlirFlatSymbolRefAttrGet(MlirContext ctx, MlirStringRef symbol) {
254c2c83e97STres Popp return wrap(FlatSymbolRefAttr::get(unwrap(ctx), unwrap(symbol)));
255c7cae0e4SRiver Riddle }
256c7cae0e4SRiver Riddle
mlirFlatSymbolRefAttrGetValue(MlirAttribute attr)257c7cae0e4SRiver Riddle MlirStringRef mlirFlatSymbolRefAttrGetValue(MlirAttribute attr) {
258c7cae0e4SRiver Riddle return wrap(unwrap(attr).cast<FlatSymbolRefAttr>().getValue());
259c7cae0e4SRiver Riddle }
260c7cae0e4SRiver Riddle
261c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
262c7cae0e4SRiver Riddle // Type attribute.
263c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
264c7cae0e4SRiver Riddle
mlirAttributeIsAType(MlirAttribute attr)265c7cae0e4SRiver Riddle bool mlirAttributeIsAType(MlirAttribute attr) {
266c7cae0e4SRiver Riddle return unwrap(attr).isa<TypeAttr>();
267c7cae0e4SRiver Riddle }
268c7cae0e4SRiver Riddle
mlirTypeAttrGet(MlirType type)269c7cae0e4SRiver Riddle MlirAttribute mlirTypeAttrGet(MlirType type) {
270c7cae0e4SRiver Riddle return wrap(TypeAttr::get(unwrap(type)));
271c7cae0e4SRiver Riddle }
272c7cae0e4SRiver Riddle
mlirTypeAttrGetValue(MlirAttribute attr)273c7cae0e4SRiver Riddle MlirType mlirTypeAttrGetValue(MlirAttribute attr) {
274c7cae0e4SRiver Riddle return wrap(unwrap(attr).cast<TypeAttr>().getValue());
275c7cae0e4SRiver Riddle }
276c7cae0e4SRiver Riddle
277c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
278c7cae0e4SRiver Riddle // Unit attribute.
279c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
280c7cae0e4SRiver Riddle
mlirAttributeIsAUnit(MlirAttribute attr)281c7cae0e4SRiver Riddle bool mlirAttributeIsAUnit(MlirAttribute attr) {
282c7cae0e4SRiver Riddle return unwrap(attr).isa<UnitAttr>();
283c7cae0e4SRiver Riddle }
284c7cae0e4SRiver Riddle
mlirUnitAttrGet(MlirContext ctx)285c7cae0e4SRiver Riddle MlirAttribute mlirUnitAttrGet(MlirContext ctx) {
286c7cae0e4SRiver Riddle return wrap(UnitAttr::get(unwrap(ctx)));
287c7cae0e4SRiver Riddle }
288c7cae0e4SRiver Riddle
289c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
290c7cae0e4SRiver Riddle // Elements attributes.
291c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
292c7cae0e4SRiver Riddle
mlirAttributeIsAElements(MlirAttribute attr)293c7cae0e4SRiver Riddle bool mlirAttributeIsAElements(MlirAttribute attr) {
294c7cae0e4SRiver Riddle return unwrap(attr).isa<ElementsAttr>();
295c7cae0e4SRiver Riddle }
296c7cae0e4SRiver Riddle
mlirElementsAttrGetValue(MlirAttribute attr,intptr_t rank,uint64_t * idxs)297c7cae0e4SRiver Riddle MlirAttribute mlirElementsAttrGetValue(MlirAttribute attr, intptr_t rank,
298c7cae0e4SRiver Riddle uint64_t *idxs) {
299ae40d625SRiver Riddle return wrap(unwrap(attr)
300ae40d625SRiver Riddle .cast<ElementsAttr>()
301ae40d625SRiver Riddle .getValues<Attribute>()[llvm::makeArrayRef(idxs, rank)]);
302c7cae0e4SRiver Riddle }
303c7cae0e4SRiver Riddle
mlirElementsAttrIsValidIndex(MlirAttribute attr,intptr_t rank,uint64_t * idxs)304c7cae0e4SRiver Riddle bool mlirElementsAttrIsValidIndex(MlirAttribute attr, intptr_t rank,
305c7cae0e4SRiver Riddle uint64_t *idxs) {
306c7cae0e4SRiver Riddle return unwrap(attr).cast<ElementsAttr>().isValidIndex(
307c7cae0e4SRiver Riddle llvm::makeArrayRef(idxs, rank));
308c7cae0e4SRiver Riddle }
309c7cae0e4SRiver Riddle
mlirElementsAttrGetNumElements(MlirAttribute attr)310c7cae0e4SRiver Riddle int64_t mlirElementsAttrGetNumElements(MlirAttribute attr) {
311c7cae0e4SRiver Riddle return unwrap(attr).cast<ElementsAttr>().getNumElements();
312c7cae0e4SRiver Riddle }
313c7cae0e4SRiver Riddle
314c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
315c7cae0e4SRiver Riddle // Dense elements attribute.
316c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
317c7cae0e4SRiver Riddle
318c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
319c7cae0e4SRiver Riddle // IsA support.
320c7cae0e4SRiver Riddle
mlirAttributeIsADenseElements(MlirAttribute attr)321c7cae0e4SRiver Riddle bool mlirAttributeIsADenseElements(MlirAttribute attr) {
322c7cae0e4SRiver Riddle return unwrap(attr).isa<DenseElementsAttr>();
323c7cae0e4SRiver Riddle }
mlirAttributeIsADenseIntElements(MlirAttribute attr)324c7cae0e4SRiver Riddle bool mlirAttributeIsADenseIntElements(MlirAttribute attr) {
325c7cae0e4SRiver Riddle return unwrap(attr).isa<DenseIntElementsAttr>();
326c7cae0e4SRiver Riddle }
mlirAttributeIsADenseFPElements(MlirAttribute attr)327c7cae0e4SRiver Riddle bool mlirAttributeIsADenseFPElements(MlirAttribute attr) {
328c7cae0e4SRiver Riddle return unwrap(attr).isa<DenseFPElementsAttr>();
329c7cae0e4SRiver Riddle }
330c7cae0e4SRiver Riddle
331c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
332c7cae0e4SRiver Riddle // Constructors.
333c7cae0e4SRiver Riddle
mlirDenseElementsAttrGet(MlirType shapedType,intptr_t numElements,MlirAttribute const * elements)334c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrGet(MlirType shapedType,
335c7cae0e4SRiver Riddle intptr_t numElements,
336c7cae0e4SRiver Riddle MlirAttribute const *elements) {
337c7cae0e4SRiver Riddle SmallVector<Attribute, 8> attributes;
338c7cae0e4SRiver Riddle return wrap(
339c7cae0e4SRiver Riddle DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(),
340c7cae0e4SRiver Riddle unwrapList(numElements, elements, attributes)));
341c7cae0e4SRiver Riddle }
342c7cae0e4SRiver Riddle
mlirDenseElementsAttrRawBufferGet(MlirType shapedType,size_t rawBufferSize,const void * rawBuffer)3435d6d30edSStella Laurenzo MlirAttribute mlirDenseElementsAttrRawBufferGet(MlirType shapedType,
3445d6d30edSStella Laurenzo size_t rawBufferSize,
3455d6d30edSStella Laurenzo const void *rawBuffer) {
3465d6d30edSStella Laurenzo auto shapedTypeCpp = unwrap(shapedType).cast<ShapedType>();
3475d6d30edSStella Laurenzo ArrayRef<char> rawBufferCpp(static_cast<const char *>(rawBuffer),
3485d6d30edSStella Laurenzo rawBufferSize);
3495d6d30edSStella Laurenzo bool isSplat = false;
3505d6d30edSStella Laurenzo if (!DenseElementsAttr::isValidRawBuffer(shapedTypeCpp, rawBufferCpp,
351f21896f2SChris Lattner isSplat))
3525d6d30edSStella Laurenzo return mlirAttributeGetNull();
353f21896f2SChris Lattner return wrap(DenseElementsAttr::getFromRawBuffer(shapedTypeCpp, rawBufferCpp));
3545d6d30edSStella Laurenzo }
3555d6d30edSStella Laurenzo
mlirDenseElementsAttrSplatGet(MlirType shapedType,MlirAttribute element)356c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrSplatGet(MlirType shapedType,
357c7cae0e4SRiver Riddle MlirAttribute element) {
358c7cae0e4SRiver Riddle return wrap(DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(),
359c7cae0e4SRiver Riddle unwrap(element)));
360c7cae0e4SRiver Riddle }
mlirDenseElementsAttrBoolSplatGet(MlirType shapedType,bool element)361c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrBoolSplatGet(MlirType shapedType,
362c7cae0e4SRiver Riddle bool element) {
363c7cae0e4SRiver Riddle return wrap(
364c7cae0e4SRiver Riddle DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(), element));
365c7cae0e4SRiver Riddle }
mlirDenseElementsAttrUInt8SplatGet(MlirType shapedType,uint8_t element)36635454268SSean Silva MlirAttribute mlirDenseElementsAttrUInt8SplatGet(MlirType shapedType,
36735454268SSean Silva uint8_t element) {
36835454268SSean Silva return wrap(
36935454268SSean Silva DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(), element));
37035454268SSean Silva }
mlirDenseElementsAttrInt8SplatGet(MlirType shapedType,int8_t element)37135454268SSean Silva MlirAttribute mlirDenseElementsAttrInt8SplatGet(MlirType shapedType,
37235454268SSean Silva int8_t element) {
37335454268SSean Silva return wrap(
37435454268SSean Silva DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(), element));
37535454268SSean Silva }
mlirDenseElementsAttrUInt32SplatGet(MlirType shapedType,uint32_t element)376c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrUInt32SplatGet(MlirType shapedType,
377c7cae0e4SRiver Riddle uint32_t element) {
378c7cae0e4SRiver Riddle return wrap(
379c7cae0e4SRiver Riddle DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(), element));
380c7cae0e4SRiver Riddle }
mlirDenseElementsAttrInt32SplatGet(MlirType shapedType,int32_t element)381c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrInt32SplatGet(MlirType shapedType,
382c7cae0e4SRiver Riddle int32_t element) {
383c7cae0e4SRiver Riddle return wrap(
384c7cae0e4SRiver Riddle DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(), element));
385c7cae0e4SRiver Riddle }
mlirDenseElementsAttrUInt64SplatGet(MlirType shapedType,uint64_t element)386c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrUInt64SplatGet(MlirType shapedType,
387c7cae0e4SRiver Riddle uint64_t element) {
388c7cae0e4SRiver Riddle return wrap(
389c7cae0e4SRiver Riddle DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(), element));
390c7cae0e4SRiver Riddle }
mlirDenseElementsAttrInt64SplatGet(MlirType shapedType,int64_t element)391c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrInt64SplatGet(MlirType shapedType,
392c7cae0e4SRiver Riddle int64_t element) {
393c7cae0e4SRiver Riddle return wrap(
394c7cae0e4SRiver Riddle DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(), element));
395c7cae0e4SRiver Riddle }
mlirDenseElementsAttrFloatSplatGet(MlirType shapedType,float element)396c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrFloatSplatGet(MlirType shapedType,
397c7cae0e4SRiver Riddle float element) {
398c7cae0e4SRiver Riddle return wrap(
399c7cae0e4SRiver Riddle DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(), element));
400c7cae0e4SRiver Riddle }
mlirDenseElementsAttrDoubleSplatGet(MlirType shapedType,double element)401c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrDoubleSplatGet(MlirType shapedType,
402c7cae0e4SRiver Riddle double element) {
403c7cae0e4SRiver Riddle return wrap(
404c7cae0e4SRiver Riddle DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(), element));
405c7cae0e4SRiver Riddle }
406c7cae0e4SRiver Riddle
mlirDenseElementsAttrBoolGet(MlirType shapedType,intptr_t numElements,const int * elements)407c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrBoolGet(MlirType shapedType,
408c7cae0e4SRiver Riddle intptr_t numElements,
409c7cae0e4SRiver Riddle const int *elements) {
410c7cae0e4SRiver Riddle SmallVector<bool, 8> values(elements, elements + numElements);
411c7cae0e4SRiver Riddle return wrap(
412c7cae0e4SRiver Riddle DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(), values));
413c7cae0e4SRiver Riddle }
414c7cae0e4SRiver Riddle
415c7cae0e4SRiver Riddle /// Creates a dense attribute with elements of the type deduced by templates.
416c7cae0e4SRiver Riddle template <typename T>
getDenseAttribute(MlirType shapedType,intptr_t numElements,const T * elements)417c7cae0e4SRiver Riddle static MlirAttribute getDenseAttribute(MlirType shapedType,
418c7cae0e4SRiver Riddle intptr_t numElements,
419c7cae0e4SRiver Riddle const T *elements) {
420c7cae0e4SRiver Riddle return wrap(
421c7cae0e4SRiver Riddle DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(),
422c7cae0e4SRiver Riddle llvm::makeArrayRef(elements, numElements)));
423c7cae0e4SRiver Riddle }
424c7cae0e4SRiver Riddle
mlirDenseElementsAttrUInt8Get(MlirType shapedType,intptr_t numElements,const uint8_t * elements)42535454268SSean Silva MlirAttribute mlirDenseElementsAttrUInt8Get(MlirType shapedType,
42635454268SSean Silva intptr_t numElements,
42735454268SSean Silva const uint8_t *elements) {
42835454268SSean Silva return getDenseAttribute(shapedType, numElements, elements);
42935454268SSean Silva }
mlirDenseElementsAttrInt8Get(MlirType shapedType,intptr_t numElements,const int8_t * elements)43035454268SSean Silva MlirAttribute mlirDenseElementsAttrInt8Get(MlirType shapedType,
43135454268SSean Silva intptr_t numElements,
43235454268SSean Silva const int8_t *elements) {
43335454268SSean Silva return getDenseAttribute(shapedType, numElements, elements);
43435454268SSean Silva }
mlirDenseElementsAttrUInt16Get(MlirType shapedType,intptr_t numElements,const uint16_t * elements)435308d8b8cSRahul Kayaith MlirAttribute mlirDenseElementsAttrUInt16Get(MlirType shapedType,
436308d8b8cSRahul Kayaith intptr_t numElements,
437308d8b8cSRahul Kayaith const uint16_t *elements) {
438308d8b8cSRahul Kayaith return getDenseAttribute(shapedType, numElements, elements);
439308d8b8cSRahul Kayaith }
mlirDenseElementsAttrInt16Get(MlirType shapedType,intptr_t numElements,const int16_t * elements)440308d8b8cSRahul Kayaith MlirAttribute mlirDenseElementsAttrInt16Get(MlirType shapedType,
441308d8b8cSRahul Kayaith intptr_t numElements,
442308d8b8cSRahul Kayaith const int16_t *elements) {
443308d8b8cSRahul Kayaith return getDenseAttribute(shapedType, numElements, elements);
444308d8b8cSRahul Kayaith }
mlirDenseElementsAttrUInt32Get(MlirType shapedType,intptr_t numElements,const uint32_t * elements)445c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrUInt32Get(MlirType shapedType,
446c7cae0e4SRiver Riddle intptr_t numElements,
447c7cae0e4SRiver Riddle const uint32_t *elements) {
448c7cae0e4SRiver Riddle return getDenseAttribute(shapedType, numElements, elements);
449c7cae0e4SRiver Riddle }
mlirDenseElementsAttrInt32Get(MlirType shapedType,intptr_t numElements,const int32_t * elements)450c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrInt32Get(MlirType shapedType,
451c7cae0e4SRiver Riddle intptr_t numElements,
452c7cae0e4SRiver Riddle const int32_t *elements) {
453c7cae0e4SRiver Riddle return getDenseAttribute(shapedType, numElements, elements);
454c7cae0e4SRiver Riddle }
mlirDenseElementsAttrUInt64Get(MlirType shapedType,intptr_t numElements,const uint64_t * elements)455c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrUInt64Get(MlirType shapedType,
456c7cae0e4SRiver Riddle intptr_t numElements,
457c7cae0e4SRiver Riddle const uint64_t *elements) {
458c7cae0e4SRiver Riddle return getDenseAttribute(shapedType, numElements, elements);
459c7cae0e4SRiver Riddle }
mlirDenseElementsAttrInt64Get(MlirType shapedType,intptr_t numElements,const int64_t * elements)460c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrInt64Get(MlirType shapedType,
461c7cae0e4SRiver Riddle intptr_t numElements,
462c7cae0e4SRiver Riddle const int64_t *elements) {
463c7cae0e4SRiver Riddle return getDenseAttribute(shapedType, numElements, elements);
464c7cae0e4SRiver Riddle }
mlirDenseElementsAttrFloatGet(MlirType shapedType,intptr_t numElements,const float * elements)465c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrFloatGet(MlirType shapedType,
466c7cae0e4SRiver Riddle intptr_t numElements,
467c7cae0e4SRiver Riddle const float *elements) {
468c7cae0e4SRiver Riddle return getDenseAttribute(shapedType, numElements, elements);
469c7cae0e4SRiver Riddle }
mlirDenseElementsAttrDoubleGet(MlirType shapedType,intptr_t numElements,const double * elements)470c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrDoubleGet(MlirType shapedType,
471c7cae0e4SRiver Riddle intptr_t numElements,
472c7cae0e4SRiver Riddle const double *elements) {
473c7cae0e4SRiver Riddle return getDenseAttribute(shapedType, numElements, elements);
474c7cae0e4SRiver Riddle }
mlirDenseElementsAttrBFloat16Get(MlirType shapedType,intptr_t numElements,const uint16_t * elements)47525c218beSAshay Rane MlirAttribute mlirDenseElementsAttrBFloat16Get(MlirType shapedType,
47625c218beSAshay Rane intptr_t numElements,
47725c218beSAshay Rane const uint16_t *elements) {
47825c218beSAshay Rane size_t bufferSize = numElements * 2;
47925c218beSAshay Rane const void *buffer = static_cast<const void *>(elements);
48025c218beSAshay Rane return mlirDenseElementsAttrRawBufferGet(shapedType, bufferSize, buffer);
48125c218beSAshay Rane }
mlirDenseElementsAttrFloat16Get(MlirType shapedType,intptr_t numElements,const uint16_t * elements)482*5b0d6bf2STanyo Kwok MlirAttribute mlirDenseElementsAttrFloat16Get(MlirType shapedType,
483*5b0d6bf2STanyo Kwok intptr_t numElements,
484*5b0d6bf2STanyo Kwok const uint16_t *elements) {
485*5b0d6bf2STanyo Kwok size_t bufferSize = numElements * 2;
486*5b0d6bf2STanyo Kwok const void *buffer = static_cast<const void *>(elements);
487*5b0d6bf2STanyo Kwok return mlirDenseElementsAttrRawBufferGet(shapedType, bufferSize, buffer);
488*5b0d6bf2STanyo Kwok }
489c7cae0e4SRiver Riddle
mlirDenseElementsAttrStringGet(MlirType shapedType,intptr_t numElements,MlirStringRef * strs)490c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrStringGet(MlirType shapedType,
491c7cae0e4SRiver Riddle intptr_t numElements,
492c7cae0e4SRiver Riddle MlirStringRef *strs) {
493c7cae0e4SRiver Riddle SmallVector<StringRef, 8> values;
494c7cae0e4SRiver Riddle values.reserve(numElements);
495c7cae0e4SRiver Riddle for (intptr_t i = 0; i < numElements; ++i)
496c7cae0e4SRiver Riddle values.push_back(unwrap(strs[i]));
497c7cae0e4SRiver Riddle
498c7cae0e4SRiver Riddle return wrap(
499c7cae0e4SRiver Riddle DenseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(), values));
500c7cae0e4SRiver Riddle }
501c7cae0e4SRiver Riddle
mlirDenseElementsAttrReshapeGet(MlirAttribute attr,MlirType shapedType)502c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrReshapeGet(MlirAttribute attr,
503c7cae0e4SRiver Riddle MlirType shapedType) {
504c7cae0e4SRiver Riddle return wrap(unwrap(attr).cast<DenseElementsAttr>().reshape(
505c7cae0e4SRiver Riddle unwrap(shapedType).cast<ShapedType>()));
506c7cae0e4SRiver Riddle }
507c7cae0e4SRiver Riddle
508c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
509c7cae0e4SRiver Riddle // Splat accessors.
510c7cae0e4SRiver Riddle
mlirDenseElementsAttrIsSplat(MlirAttribute attr)511c7cae0e4SRiver Riddle bool mlirDenseElementsAttrIsSplat(MlirAttribute attr) {
512c7cae0e4SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().isSplat();
513c7cae0e4SRiver Riddle }
514c7cae0e4SRiver Riddle
mlirDenseElementsAttrGetSplatValue(MlirAttribute attr)515c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrGetSplatValue(MlirAttribute attr) {
516ae40d625SRiver Riddle return wrap(
517ae40d625SRiver Riddle unwrap(attr).cast<DenseElementsAttr>().getSplatValue<Attribute>());
518c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetBoolSplatValue(MlirAttribute attr)519c7cae0e4SRiver Riddle int mlirDenseElementsAttrGetBoolSplatValue(MlirAttribute attr) {
520c7cae0e4SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getSplatValue<bool>();
521c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetInt8SplatValue(MlirAttribute attr)52235454268SSean Silva int8_t mlirDenseElementsAttrGetInt8SplatValue(MlirAttribute attr) {
52335454268SSean Silva return unwrap(attr).cast<DenseElementsAttr>().getSplatValue<int8_t>();
52435454268SSean Silva }
mlirDenseElementsAttrGetUInt8SplatValue(MlirAttribute attr)52535454268SSean Silva uint8_t mlirDenseElementsAttrGetUInt8SplatValue(MlirAttribute attr) {
52635454268SSean Silva return unwrap(attr).cast<DenseElementsAttr>().getSplatValue<uint8_t>();
52735454268SSean Silva }
mlirDenseElementsAttrGetInt32SplatValue(MlirAttribute attr)528c7cae0e4SRiver Riddle int32_t mlirDenseElementsAttrGetInt32SplatValue(MlirAttribute attr) {
529c7cae0e4SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getSplatValue<int32_t>();
530c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetUInt32SplatValue(MlirAttribute attr)531c7cae0e4SRiver Riddle uint32_t mlirDenseElementsAttrGetUInt32SplatValue(MlirAttribute attr) {
532c7cae0e4SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getSplatValue<uint32_t>();
533c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetInt64SplatValue(MlirAttribute attr)534c7cae0e4SRiver Riddle int64_t mlirDenseElementsAttrGetInt64SplatValue(MlirAttribute attr) {
535c7cae0e4SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getSplatValue<int64_t>();
536c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetUInt64SplatValue(MlirAttribute attr)537c7cae0e4SRiver Riddle uint64_t mlirDenseElementsAttrGetUInt64SplatValue(MlirAttribute attr) {
538c7cae0e4SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getSplatValue<uint64_t>();
539c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetFloatSplatValue(MlirAttribute attr)540c7cae0e4SRiver Riddle float mlirDenseElementsAttrGetFloatSplatValue(MlirAttribute attr) {
541c7cae0e4SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getSplatValue<float>();
542c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetDoubleSplatValue(MlirAttribute attr)543c7cae0e4SRiver Riddle double mlirDenseElementsAttrGetDoubleSplatValue(MlirAttribute attr) {
544c7cae0e4SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getSplatValue<double>();
545c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetStringSplatValue(MlirAttribute attr)546c7cae0e4SRiver Riddle MlirStringRef mlirDenseElementsAttrGetStringSplatValue(MlirAttribute attr) {
547c7cae0e4SRiver Riddle return wrap(
548c7cae0e4SRiver Riddle unwrap(attr).cast<DenseElementsAttr>().getSplatValue<StringRef>());
549c7cae0e4SRiver Riddle }
550c7cae0e4SRiver Riddle
551c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
552c7cae0e4SRiver Riddle // Indexed accessors.
553c7cae0e4SRiver Riddle
mlirDenseElementsAttrGetBoolValue(MlirAttribute attr,intptr_t pos)554c7cae0e4SRiver Riddle bool mlirDenseElementsAttrGetBoolValue(MlirAttribute attr, intptr_t pos) {
555ae40d625SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getValues<bool>()[pos];
556c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetInt8Value(MlirAttribute attr,intptr_t pos)55735454268SSean Silva int8_t mlirDenseElementsAttrGetInt8Value(MlirAttribute attr, intptr_t pos) {
558ae40d625SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getValues<int8_t>()[pos];
55935454268SSean Silva }
mlirDenseElementsAttrGetUInt8Value(MlirAttribute attr,intptr_t pos)56035454268SSean Silva uint8_t mlirDenseElementsAttrGetUInt8Value(MlirAttribute attr, intptr_t pos) {
561ae40d625SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getValues<uint8_t>()[pos];
56235454268SSean Silva }
mlirDenseElementsAttrGetInt16Value(MlirAttribute attr,intptr_t pos)563308d8b8cSRahul Kayaith int16_t mlirDenseElementsAttrGetInt16Value(MlirAttribute attr, intptr_t pos) {
564308d8b8cSRahul Kayaith return unwrap(attr).cast<DenseElementsAttr>().getValues<int16_t>()[pos];
565308d8b8cSRahul Kayaith }
mlirDenseElementsAttrGetUInt16Value(MlirAttribute attr,intptr_t pos)566308d8b8cSRahul Kayaith uint16_t mlirDenseElementsAttrGetUInt16Value(MlirAttribute attr, intptr_t pos) {
567308d8b8cSRahul Kayaith return unwrap(attr).cast<DenseElementsAttr>().getValues<uint16_t>()[pos];
568308d8b8cSRahul Kayaith }
mlirDenseElementsAttrGetInt32Value(MlirAttribute attr,intptr_t pos)569c7cae0e4SRiver Riddle int32_t mlirDenseElementsAttrGetInt32Value(MlirAttribute attr, intptr_t pos) {
570ae40d625SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getValues<int32_t>()[pos];
571c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetUInt32Value(MlirAttribute attr,intptr_t pos)572c7cae0e4SRiver Riddle uint32_t mlirDenseElementsAttrGetUInt32Value(MlirAttribute attr, intptr_t pos) {
573ae40d625SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getValues<uint32_t>()[pos];
574c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetInt64Value(MlirAttribute attr,intptr_t pos)575c7cae0e4SRiver Riddle int64_t mlirDenseElementsAttrGetInt64Value(MlirAttribute attr, intptr_t pos) {
576ae40d625SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getValues<int64_t>()[pos];
577c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetUInt64Value(MlirAttribute attr,intptr_t pos)578c7cae0e4SRiver Riddle uint64_t mlirDenseElementsAttrGetUInt64Value(MlirAttribute attr, intptr_t pos) {
579ae40d625SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getValues<uint64_t>()[pos];
580c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetFloatValue(MlirAttribute attr,intptr_t pos)581c7cae0e4SRiver Riddle float mlirDenseElementsAttrGetFloatValue(MlirAttribute attr, intptr_t pos) {
582ae40d625SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getValues<float>()[pos];
583c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetDoubleValue(MlirAttribute attr,intptr_t pos)584c7cae0e4SRiver Riddle double mlirDenseElementsAttrGetDoubleValue(MlirAttribute attr, intptr_t pos) {
585ae40d625SRiver Riddle return unwrap(attr).cast<DenseElementsAttr>().getValues<double>()[pos];
586c7cae0e4SRiver Riddle }
mlirDenseElementsAttrGetStringValue(MlirAttribute attr,intptr_t pos)587c7cae0e4SRiver Riddle MlirStringRef mlirDenseElementsAttrGetStringValue(MlirAttribute attr,
588c7cae0e4SRiver Riddle intptr_t pos) {
589c7cae0e4SRiver Riddle return wrap(
590ae40d625SRiver Riddle unwrap(attr).cast<DenseElementsAttr>().getValues<StringRef>()[pos]);
591c7cae0e4SRiver Riddle }
592c7cae0e4SRiver Riddle
593c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
594c7cae0e4SRiver Riddle // Raw data accessors.
595c7cae0e4SRiver Riddle
mlirDenseElementsAttrGetRawData(MlirAttribute attr)596c7cae0e4SRiver Riddle const void *mlirDenseElementsAttrGetRawData(MlirAttribute attr) {
597c7cae0e4SRiver Riddle return static_cast<const void *>(
598c7cae0e4SRiver Riddle unwrap(attr).cast<DenseElementsAttr>().getRawData().data());
599c7cae0e4SRiver Riddle }
600c7cae0e4SRiver Riddle
601c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
602c7cae0e4SRiver Riddle // Opaque elements attribute.
603c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
604c7cae0e4SRiver Riddle
mlirAttributeIsAOpaqueElements(MlirAttribute attr)605c7cae0e4SRiver Riddle bool mlirAttributeIsAOpaqueElements(MlirAttribute attr) {
606c7cae0e4SRiver Riddle return unwrap(attr).isa<OpaqueElementsAttr>();
607c7cae0e4SRiver Riddle }
608c7cae0e4SRiver Riddle
609c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
610c7cae0e4SRiver Riddle // Sparse elements attribute.
611c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
612c7cae0e4SRiver Riddle
mlirAttributeIsASparseElements(MlirAttribute attr)613c7cae0e4SRiver Riddle bool mlirAttributeIsASparseElements(MlirAttribute attr) {
614c7cae0e4SRiver Riddle return unwrap(attr).isa<SparseElementsAttr>();
615c7cae0e4SRiver Riddle }
616c7cae0e4SRiver Riddle
mlirSparseElementsAttribute(MlirType shapedType,MlirAttribute denseIndices,MlirAttribute denseValues)617c7cae0e4SRiver Riddle MlirAttribute mlirSparseElementsAttribute(MlirType shapedType,
618c7cae0e4SRiver Riddle MlirAttribute denseIndices,
619c7cae0e4SRiver Riddle MlirAttribute denseValues) {
620c7cae0e4SRiver Riddle return wrap(
621c7cae0e4SRiver Riddle SparseElementsAttr::get(unwrap(shapedType).cast<ShapedType>(),
622c7cae0e4SRiver Riddle unwrap(denseIndices).cast<DenseElementsAttr>(),
623c7cae0e4SRiver Riddle unwrap(denseValues).cast<DenseElementsAttr>()));
624c7cae0e4SRiver Riddle }
625c7cae0e4SRiver Riddle
mlirSparseElementsAttrGetIndices(MlirAttribute attr)626c7cae0e4SRiver Riddle MlirAttribute mlirSparseElementsAttrGetIndices(MlirAttribute attr) {
627c7cae0e4SRiver Riddle return wrap(unwrap(attr).cast<SparseElementsAttr>().getIndices());
628c7cae0e4SRiver Riddle }
629c7cae0e4SRiver Riddle
mlirSparseElementsAttrGetValues(MlirAttribute attr)630c7cae0e4SRiver Riddle MlirAttribute mlirSparseElementsAttrGetValues(MlirAttribute attr) {
631c7cae0e4SRiver Riddle return wrap(unwrap(attr).cast<SparseElementsAttr>().getValues());
632c7cae0e4SRiver Riddle }
633