xref: /llvm-project/mlir/lib/CAPI/IR/BuiltinAttributes.cpp (revision 5d3ae5161210c068d01ffba36c8e0761e9971179)
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"
10fb5a64f0SJacques Pienaar #include "mlir-c/Support.h"
11c7cae0e4SRiver Riddle #include "mlir/CAPI/AffineMap.h"
12c7cae0e4SRiver Riddle #include "mlir/CAPI/IR.h"
13334873feSAmy Wang #include "mlir/CAPI/IntegerSet.h"
14c7cae0e4SRiver Riddle #include "mlir/CAPI/Support.h"
15fb5a64f0SJacques Pienaar #include "mlir/IR/AsmState.h"
16c7cae0e4SRiver Riddle #include "mlir/IR/Attributes.h"
17fb5a64f0SJacques Pienaar #include "mlir/IR/BuiltinAttributes.h"
18c7cae0e4SRiver Riddle #include "mlir/IR/BuiltinTypes.h"
19c7cae0e4SRiver Riddle 
20c7cae0e4SRiver Riddle using namespace mlir;
21c7cae0e4SRiver Riddle 
227714b405SAart Bik MlirAttribute mlirAttributeGetNull() { return {nullptr}; }
237714b405SAart Bik 
24c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
257bfdac0eSAndrew Young // Location attribute.
267bfdac0eSAndrew Young //===----------------------------------------------------------------------===//
277bfdac0eSAndrew Young 
287bfdac0eSAndrew Young bool mlirAttributeIsALocation(MlirAttribute attr) {
29c1fa60b4STres Popp   return llvm::isa<LocationAttr>(unwrap(attr));
307bfdac0eSAndrew Young }
317bfdac0eSAndrew Young 
327bfdac0eSAndrew Young //===----------------------------------------------------------------------===//
33c7cae0e4SRiver Riddle // Affine map attribute.
34c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
35c7cae0e4SRiver Riddle 
36c7cae0e4SRiver Riddle bool mlirAttributeIsAAffineMap(MlirAttribute attr) {
37c1fa60b4STres Popp   return llvm::isa<AffineMapAttr>(unwrap(attr));
38c7cae0e4SRiver Riddle }
39c7cae0e4SRiver Riddle 
40c7cae0e4SRiver Riddle MlirAttribute mlirAffineMapAttrGet(MlirAffineMap map) {
41c7cae0e4SRiver Riddle   return wrap(AffineMapAttr::get(unwrap(map)));
42c7cae0e4SRiver Riddle }
43c7cae0e4SRiver Riddle 
44c7cae0e4SRiver Riddle MlirAffineMap mlirAffineMapAttrGetValue(MlirAttribute attr) {
45c1fa60b4STres Popp   return wrap(llvm::cast<AffineMapAttr>(unwrap(attr)).getValue());
46c7cae0e4SRiver Riddle }
47c7cae0e4SRiver Riddle 
489566ee28Smax MlirTypeID mlirAffineMapAttrGetTypeID(void) {
499566ee28Smax   return wrap(AffineMapAttr::getTypeID());
509566ee28Smax }
519566ee28Smax 
52c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
53c7cae0e4SRiver Riddle // Array attribute.
54c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
55c7cae0e4SRiver Riddle 
56c7cae0e4SRiver Riddle bool mlirAttributeIsAArray(MlirAttribute attr) {
57c1fa60b4STres Popp   return llvm::isa<ArrayAttr>(unwrap(attr));
58c7cae0e4SRiver Riddle }
59c7cae0e4SRiver Riddle 
60c7cae0e4SRiver Riddle MlirAttribute mlirArrayAttrGet(MlirContext ctx, intptr_t numElements,
61c7cae0e4SRiver Riddle                                MlirAttribute const *elements) {
62c7cae0e4SRiver Riddle   SmallVector<Attribute, 8> attrs;
63c2c83e97STres Popp   return wrap(
64c2c83e97STres Popp       ArrayAttr::get(unwrap(ctx), unwrapList(static_cast<size_t>(numElements),
65c2c83e97STres Popp                                              elements, attrs)));
66c7cae0e4SRiver Riddle }
67c7cae0e4SRiver Riddle 
68c7cae0e4SRiver Riddle intptr_t mlirArrayAttrGetNumElements(MlirAttribute attr) {
69c1fa60b4STres Popp   return static_cast<intptr_t>(llvm::cast<ArrayAttr>(unwrap(attr)).size());
70c7cae0e4SRiver Riddle }
71c7cae0e4SRiver Riddle 
72c7cae0e4SRiver Riddle MlirAttribute mlirArrayAttrGetElement(MlirAttribute attr, intptr_t pos) {
73c1fa60b4STres Popp   return wrap(llvm::cast<ArrayAttr>(unwrap(attr)).getValue()[pos]);
74c7cae0e4SRiver Riddle }
75c7cae0e4SRiver Riddle 
769566ee28Smax MlirTypeID mlirArrayAttrGetTypeID(void) { return wrap(ArrayAttr::getTypeID()); }
779566ee28Smax 
78c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
79c7cae0e4SRiver Riddle // Dictionary attribute.
80c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
81c7cae0e4SRiver Riddle 
82c7cae0e4SRiver Riddle bool mlirAttributeIsADictionary(MlirAttribute attr) {
83c1fa60b4STres Popp   return llvm::isa<DictionaryAttr>(unwrap(attr));
84c7cae0e4SRiver Riddle }
85c7cae0e4SRiver Riddle 
86c7cae0e4SRiver Riddle MlirAttribute mlirDictionaryAttrGet(MlirContext ctx, intptr_t numElements,
87c7cae0e4SRiver Riddle                                     MlirNamedAttribute const *elements) {
88c7cae0e4SRiver Riddle   SmallVector<NamedAttribute, 8> attributes;
89c7cae0e4SRiver Riddle   attributes.reserve(numElements);
90c7cae0e4SRiver Riddle   for (intptr_t i = 0; i < numElements; ++i)
9192a79dbeSChris Lattner     attributes.emplace_back(unwrap(elements[i].name),
92c7cae0e4SRiver Riddle                             unwrap(elements[i].attribute));
93c2c83e97STres Popp   return wrap(DictionaryAttr::get(unwrap(ctx), attributes));
94c7cae0e4SRiver Riddle }
95c7cae0e4SRiver Riddle 
96c7cae0e4SRiver Riddle intptr_t mlirDictionaryAttrGetNumElements(MlirAttribute attr) {
97c1fa60b4STres Popp   return static_cast<intptr_t>(llvm::cast<DictionaryAttr>(unwrap(attr)).size());
98c7cae0e4SRiver Riddle }
99c7cae0e4SRiver Riddle 
100c7cae0e4SRiver Riddle MlirNamedAttribute mlirDictionaryAttrGetElement(MlirAttribute attr,
101c7cae0e4SRiver Riddle                                                 intptr_t pos) {
102c7cae0e4SRiver Riddle   NamedAttribute attribute =
103c1fa60b4STres Popp       llvm::cast<DictionaryAttr>(unwrap(attr)).getValue()[pos];
1040c7890c8SRiver Riddle   return {wrap(attribute.getName()), wrap(attribute.getValue())};
105c7cae0e4SRiver Riddle }
106c7cae0e4SRiver Riddle 
107c7cae0e4SRiver Riddle MlirAttribute mlirDictionaryAttrGetElementByName(MlirAttribute attr,
108c7cae0e4SRiver Riddle                                                  MlirStringRef name) {
109c1fa60b4STres Popp   return wrap(llvm::cast<DictionaryAttr>(unwrap(attr)).get(unwrap(name)));
110c7cae0e4SRiver Riddle }
111c7cae0e4SRiver Riddle 
1129566ee28Smax MlirTypeID mlirDictionaryAttrGetTypeID(void) {
1139566ee28Smax   return wrap(DictionaryAttr::getTypeID());
1149566ee28Smax }
1159566ee28Smax 
116c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
117c7cae0e4SRiver Riddle // Floating point attribute.
118c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
119c7cae0e4SRiver Riddle 
120c7cae0e4SRiver Riddle bool mlirAttributeIsAFloat(MlirAttribute attr) {
121c1fa60b4STres Popp   return llvm::isa<FloatAttr>(unwrap(attr));
122c7cae0e4SRiver Riddle }
123c7cae0e4SRiver Riddle 
124c7cae0e4SRiver Riddle MlirAttribute mlirFloatAttrDoubleGet(MlirContext ctx, MlirType type,
125c7cae0e4SRiver Riddle                                      double value) {
126c7cae0e4SRiver Riddle   return wrap(FloatAttr::get(unwrap(type), value));
127c7cae0e4SRiver Riddle }
128c7cae0e4SRiver Riddle 
12906e25d56SRiver Riddle MlirAttribute mlirFloatAttrDoubleGetChecked(MlirLocation loc, MlirType type,
13006e25d56SRiver Riddle                                             double value) {
13106e25d56SRiver Riddle   return wrap(FloatAttr::getChecked(unwrap(loc), unwrap(type), value));
132c7cae0e4SRiver Riddle }
133c7cae0e4SRiver Riddle 
134c7cae0e4SRiver Riddle double mlirFloatAttrGetValueDouble(MlirAttribute attr) {
135c1fa60b4STres Popp   return llvm::cast<FloatAttr>(unwrap(attr)).getValueAsDouble();
136c7cae0e4SRiver Riddle }
137c7cae0e4SRiver Riddle 
1389566ee28Smax MlirTypeID mlirFloatAttrGetTypeID(void) { return wrap(FloatAttr::getTypeID()); }
1399566ee28Smax 
140c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
141c7cae0e4SRiver Riddle // Integer attribute.
142c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
143c7cae0e4SRiver Riddle 
144c7cae0e4SRiver Riddle bool mlirAttributeIsAInteger(MlirAttribute attr) {
145c1fa60b4STres Popp   return llvm::isa<IntegerAttr>(unwrap(attr));
146c7cae0e4SRiver Riddle }
147c7cae0e4SRiver Riddle 
148c7cae0e4SRiver Riddle MlirAttribute mlirIntegerAttrGet(MlirType type, int64_t value) {
149c7cae0e4SRiver Riddle   return wrap(IntegerAttr::get(unwrap(type), value));
150c7cae0e4SRiver Riddle }
151c7cae0e4SRiver Riddle 
152c7cae0e4SRiver Riddle int64_t mlirIntegerAttrGetValueInt(MlirAttribute attr) {
153c1fa60b4STres Popp   return llvm::cast<IntegerAttr>(unwrap(attr)).getInt();
154c7cae0e4SRiver Riddle }
155c7cae0e4SRiver Riddle 
156e9db306dSrkayaith int64_t mlirIntegerAttrGetValueSInt(MlirAttribute attr) {
157c1fa60b4STres Popp   return llvm::cast<IntegerAttr>(unwrap(attr)).getSInt();
158e9db306dSrkayaith }
159e9db306dSrkayaith 
160e9db306dSrkayaith uint64_t mlirIntegerAttrGetValueUInt(MlirAttribute attr) {
161c1fa60b4STres Popp   return llvm::cast<IntegerAttr>(unwrap(attr)).getUInt();
162e9db306dSrkayaith }
163e9db306dSrkayaith 
1649566ee28Smax MlirTypeID mlirIntegerAttrGetTypeID(void) {
1659566ee28Smax   return wrap(IntegerAttr::getTypeID());
1669566ee28Smax }
1679566ee28Smax 
168c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
169c7cae0e4SRiver Riddle // Bool attribute.
170c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
171c7cae0e4SRiver Riddle 
172c7cae0e4SRiver Riddle bool mlirAttributeIsABool(MlirAttribute attr) {
173c1fa60b4STres Popp   return llvm::isa<BoolAttr>(unwrap(attr));
174c7cae0e4SRiver Riddle }
175c7cae0e4SRiver Riddle 
176c7cae0e4SRiver Riddle MlirAttribute mlirBoolAttrGet(MlirContext ctx, int value) {
177c2c83e97STres Popp   return wrap(BoolAttr::get(unwrap(ctx), value));
178c7cae0e4SRiver Riddle }
179c7cae0e4SRiver Riddle 
180c7cae0e4SRiver Riddle bool mlirBoolAttrGetValue(MlirAttribute attr) {
181c1fa60b4STres Popp   return llvm::cast<BoolAttr>(unwrap(attr)).getValue();
182c7cae0e4SRiver Riddle }
183c7cae0e4SRiver Riddle 
184c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
185c7cae0e4SRiver Riddle // Integer set attribute.
186c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
187c7cae0e4SRiver Riddle 
188c7cae0e4SRiver Riddle bool mlirAttributeIsAIntegerSet(MlirAttribute attr) {
189c1fa60b4STres Popp   return llvm::isa<IntegerSetAttr>(unwrap(attr));
190c7cae0e4SRiver Riddle }
191c7cae0e4SRiver Riddle 
1929566ee28Smax MlirTypeID mlirIntegerSetAttrGetTypeID(void) {
1939566ee28Smax   return wrap(IntegerSetAttr::getTypeID());
1949566ee28Smax }
1959566ee28Smax 
196334873feSAmy Wang MlirAttribute mlirIntegerSetAttrGet(MlirIntegerSet set) {
197334873feSAmy Wang   return wrap(IntegerSetAttr::get(unwrap(set)));
198334873feSAmy Wang }
199334873feSAmy Wang 
200334873feSAmy Wang MlirIntegerSet mlirIntegerSetAttrGetValue(MlirAttribute attr) {
201334873feSAmy Wang   return wrap(llvm::cast<IntegerSetAttr>(unwrap(attr)).getValue());
202334873feSAmy Wang }
203334873feSAmy Wang 
204c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
205c7cae0e4SRiver Riddle // Opaque attribute.
206c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
207c7cae0e4SRiver Riddle 
208c7cae0e4SRiver Riddle bool mlirAttributeIsAOpaque(MlirAttribute attr) {
209c1fa60b4STres Popp   return llvm::isa<OpaqueAttr>(unwrap(attr));
210c7cae0e4SRiver Riddle }
211c7cae0e4SRiver Riddle 
212c7cae0e4SRiver Riddle MlirAttribute mlirOpaqueAttrGet(MlirContext ctx, MlirStringRef dialectNamespace,
213c7cae0e4SRiver Riddle                                 intptr_t dataLength, const char *data,
214c7cae0e4SRiver Riddle                                 MlirType type) {
215e6260ad0SRiver Riddle   return wrap(
216195730a6SRiver Riddle       OpaqueAttr::get(StringAttr::get(unwrap(ctx), unwrap(dialectNamespace)),
217c2c83e97STres Popp                       StringRef(data, dataLength), unwrap(type)));
218c7cae0e4SRiver Riddle }
219c7cae0e4SRiver Riddle 
220c7cae0e4SRiver Riddle MlirStringRef mlirOpaqueAttrGetDialectNamespace(MlirAttribute attr) {
221c1fa60b4STres Popp   return wrap(
222c1fa60b4STres Popp       llvm::cast<OpaqueAttr>(unwrap(attr)).getDialectNamespace().strref());
223c7cae0e4SRiver Riddle }
224c7cae0e4SRiver Riddle 
225c7cae0e4SRiver Riddle MlirStringRef mlirOpaqueAttrGetData(MlirAttribute attr) {
226c1fa60b4STres Popp   return wrap(llvm::cast<OpaqueAttr>(unwrap(attr)).getAttrData());
227c7cae0e4SRiver Riddle }
228c7cae0e4SRiver Riddle 
2299566ee28Smax MlirTypeID mlirOpaqueAttrGetTypeID(void) {
2309566ee28Smax   return wrap(OpaqueAttr::getTypeID());
2319566ee28Smax }
2329566ee28Smax 
233c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
234c7cae0e4SRiver Riddle // String attribute.
235c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
236c7cae0e4SRiver Riddle 
237c7cae0e4SRiver Riddle bool mlirAttributeIsAString(MlirAttribute attr) {
238c1fa60b4STres Popp   return llvm::isa<StringAttr>(unwrap(attr));
239c7cae0e4SRiver Riddle }
240c7cae0e4SRiver Riddle 
241c7cae0e4SRiver Riddle MlirAttribute mlirStringAttrGet(MlirContext ctx, MlirStringRef str) {
242120591e1SRiver Riddle   return wrap((Attribute)StringAttr::get(unwrap(ctx), unwrap(str)));
243c7cae0e4SRiver Riddle }
244c7cae0e4SRiver Riddle 
245c7cae0e4SRiver Riddle MlirAttribute mlirStringAttrTypedGet(MlirType type, MlirStringRef str) {
246120591e1SRiver Riddle   return wrap((Attribute)StringAttr::get(unwrap(str), unwrap(type)));
247c7cae0e4SRiver Riddle }
248c7cae0e4SRiver Riddle 
249c7cae0e4SRiver Riddle MlirStringRef mlirStringAttrGetValue(MlirAttribute attr) {
250c1fa60b4STres Popp   return wrap(llvm::cast<StringAttr>(unwrap(attr)).getValue());
251c7cae0e4SRiver Riddle }
252c7cae0e4SRiver Riddle 
2539566ee28Smax MlirTypeID mlirStringAttrGetTypeID(void) {
2549566ee28Smax   return wrap(StringAttr::getTypeID());
2559566ee28Smax }
2569566ee28Smax 
257c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
258c7cae0e4SRiver Riddle // SymbolRef attribute.
259c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
260c7cae0e4SRiver Riddle 
261c7cae0e4SRiver Riddle bool mlirAttributeIsASymbolRef(MlirAttribute attr) {
262c1fa60b4STres Popp   return llvm::isa<SymbolRefAttr>(unwrap(attr));
263c7cae0e4SRiver Riddle }
264c7cae0e4SRiver Riddle 
265c7cae0e4SRiver Riddle MlirAttribute mlirSymbolRefAttrGet(MlirContext ctx, MlirStringRef symbol,
266c7cae0e4SRiver Riddle                                    intptr_t numReferences,
267c7cae0e4SRiver Riddle                                    MlirAttribute const *references) {
268c7cae0e4SRiver Riddle   SmallVector<FlatSymbolRefAttr, 4> refs;
269c7cae0e4SRiver Riddle   refs.reserve(numReferences);
270c7cae0e4SRiver Riddle   for (intptr_t i = 0; i < numReferences; ++i)
271c1fa60b4STres Popp     refs.push_back(llvm::cast<FlatSymbolRefAttr>(unwrap(references[i])));
27241d4aa7dSChris Lattner   auto symbolAttr = StringAttr::get(unwrap(ctx), unwrap(symbol));
27341d4aa7dSChris Lattner   return wrap(SymbolRefAttr::get(symbolAttr, refs));
274c7cae0e4SRiver Riddle }
275c7cae0e4SRiver Riddle 
276c7cae0e4SRiver Riddle MlirStringRef mlirSymbolRefAttrGetRootReference(MlirAttribute attr) {
277c1fa60b4STres Popp   return wrap(
278c1fa60b4STres Popp       llvm::cast<SymbolRefAttr>(unwrap(attr)).getRootReference().getValue());
279c7cae0e4SRiver Riddle }
280c7cae0e4SRiver Riddle 
281c7cae0e4SRiver Riddle MlirStringRef mlirSymbolRefAttrGetLeafReference(MlirAttribute attr) {
282c1fa60b4STres Popp   return wrap(
283c1fa60b4STres Popp       llvm::cast<SymbolRefAttr>(unwrap(attr)).getLeafReference().getValue());
284c7cae0e4SRiver Riddle }
285c7cae0e4SRiver Riddle 
286c7cae0e4SRiver Riddle intptr_t mlirSymbolRefAttrGetNumNestedReferences(MlirAttribute attr) {
287c7cae0e4SRiver Riddle   return static_cast<intptr_t>(
288c1fa60b4STres Popp       llvm::cast<SymbolRefAttr>(unwrap(attr)).getNestedReferences().size());
289c7cae0e4SRiver Riddle }
290c7cae0e4SRiver Riddle 
291c7cae0e4SRiver Riddle MlirAttribute mlirSymbolRefAttrGetNestedReference(MlirAttribute attr,
292c7cae0e4SRiver Riddle                                                   intptr_t pos) {
293c1fa60b4STres Popp   return wrap(
294c1fa60b4STres Popp       llvm::cast<SymbolRefAttr>(unwrap(attr)).getNestedReferences()[pos]);
295c7cae0e4SRiver Riddle }
296c7cae0e4SRiver Riddle 
2979566ee28Smax MlirTypeID mlirSymbolRefAttrGetTypeID(void) {
2989566ee28Smax   return wrap(SymbolRefAttr::getTypeID());
2999566ee28Smax }
3009566ee28Smax 
3013714f937SEdgar MlirAttribute mlirDisctinctAttrCreate(MlirAttribute referencedAttr) {
3023714f937SEdgar   return wrap(mlir::DistinctAttr::create(unwrap(referencedAttr)));
3033714f937SEdgar }
3043714f937SEdgar 
305c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
306c7cae0e4SRiver Riddle // Flat SymbolRef attribute.
307c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
308c7cae0e4SRiver Riddle 
309c7cae0e4SRiver Riddle bool mlirAttributeIsAFlatSymbolRef(MlirAttribute attr) {
310c1fa60b4STres Popp   return llvm::isa<FlatSymbolRefAttr>(unwrap(attr));
311c7cae0e4SRiver Riddle }
312c7cae0e4SRiver Riddle 
313c7cae0e4SRiver Riddle MlirAttribute mlirFlatSymbolRefAttrGet(MlirContext ctx, MlirStringRef symbol) {
314c2c83e97STres Popp   return wrap(FlatSymbolRefAttr::get(unwrap(ctx), unwrap(symbol)));
315c7cae0e4SRiver Riddle }
316c7cae0e4SRiver Riddle 
317c7cae0e4SRiver Riddle MlirStringRef mlirFlatSymbolRefAttrGetValue(MlirAttribute attr) {
318c1fa60b4STres Popp   return wrap(llvm::cast<FlatSymbolRefAttr>(unwrap(attr)).getValue());
319c7cae0e4SRiver Riddle }
320c7cae0e4SRiver Riddle 
321c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
322c7cae0e4SRiver Riddle // Type attribute.
323c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
324c7cae0e4SRiver Riddle 
325c7cae0e4SRiver Riddle bool mlirAttributeIsAType(MlirAttribute attr) {
326c1fa60b4STres Popp   return llvm::isa<TypeAttr>(unwrap(attr));
327c7cae0e4SRiver Riddle }
328c7cae0e4SRiver Riddle 
329c7cae0e4SRiver Riddle MlirAttribute mlirTypeAttrGet(MlirType type) {
330c7cae0e4SRiver Riddle   return wrap(TypeAttr::get(unwrap(type)));
331c7cae0e4SRiver Riddle }
332c7cae0e4SRiver Riddle 
333c7cae0e4SRiver Riddle MlirType mlirTypeAttrGetValue(MlirAttribute attr) {
334c1fa60b4STres Popp   return wrap(llvm::cast<TypeAttr>(unwrap(attr)).getValue());
335c7cae0e4SRiver Riddle }
336c7cae0e4SRiver Riddle 
3379566ee28Smax MlirTypeID mlirTypeAttrGetTypeID(void) { return wrap(TypeAttr::getTypeID()); }
3389566ee28Smax 
339c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
340c7cae0e4SRiver Riddle // Unit attribute.
341c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
342c7cae0e4SRiver Riddle 
343c7cae0e4SRiver Riddle bool mlirAttributeIsAUnit(MlirAttribute attr) {
344c1fa60b4STres Popp   return llvm::isa<UnitAttr>(unwrap(attr));
345c7cae0e4SRiver Riddle }
346c7cae0e4SRiver Riddle 
347c7cae0e4SRiver Riddle MlirAttribute mlirUnitAttrGet(MlirContext ctx) {
348c7cae0e4SRiver Riddle   return wrap(UnitAttr::get(unwrap(ctx)));
349c7cae0e4SRiver Riddle }
350c7cae0e4SRiver Riddle 
3519566ee28Smax MlirTypeID mlirUnitAttrGetTypeID(void) { return wrap(UnitAttr::getTypeID()); }
3529566ee28Smax 
353c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
354c7cae0e4SRiver Riddle // Elements attributes.
355c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
356c7cae0e4SRiver Riddle 
357c7cae0e4SRiver Riddle bool mlirAttributeIsAElements(MlirAttribute attr) {
358c1fa60b4STres Popp   return llvm::isa<ElementsAttr>(unwrap(attr));
359c7cae0e4SRiver Riddle }
360c7cae0e4SRiver Riddle 
361c7cae0e4SRiver Riddle MlirAttribute mlirElementsAttrGetValue(MlirAttribute attr, intptr_t rank,
362c7cae0e4SRiver Riddle                                        uint64_t *idxs) {
363c1fa60b4STres Popp   return wrap(llvm::cast<ElementsAttr>(unwrap(attr))
364984b800aSserge-sans-paille                   .getValues<Attribute>()[llvm::ArrayRef(idxs, rank)]);
365c7cae0e4SRiver Riddle }
366c7cae0e4SRiver Riddle 
367c7cae0e4SRiver Riddle bool mlirElementsAttrIsValidIndex(MlirAttribute attr, intptr_t rank,
368c7cae0e4SRiver Riddle                                   uint64_t *idxs) {
369c1fa60b4STres Popp   return llvm::cast<ElementsAttr>(unwrap(attr))
370c1fa60b4STres Popp       .isValidIndex(llvm::ArrayRef(idxs, rank));
371c7cae0e4SRiver Riddle }
372c7cae0e4SRiver Riddle 
373c7cae0e4SRiver Riddle int64_t mlirElementsAttrGetNumElements(MlirAttribute attr) {
374c1fa60b4STres Popp   return llvm::cast<ElementsAttr>(unwrap(attr)).getNumElements();
375c7cae0e4SRiver Riddle }
376c7cae0e4SRiver Riddle 
377c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
378619fd8c2SJeff Niu // Dense array attribute.
379619fd8c2SJeff Niu //===----------------------------------------------------------------------===//
380619fd8c2SJeff Niu 
3819566ee28Smax MlirTypeID mlirDenseArrayAttrGetTypeID() {
3829566ee28Smax   return wrap(DenseArrayAttr::getTypeID());
3839566ee28Smax }
3849566ee28Smax 
385619fd8c2SJeff Niu //===----------------------------------------------------------------------===//
386619fd8c2SJeff Niu // IsA support.
3879566ee28Smax //===----------------------------------------------------------------------===//
388619fd8c2SJeff Niu 
389619fd8c2SJeff Niu bool mlirAttributeIsADenseBoolArray(MlirAttribute attr) {
390c1fa60b4STres Popp   return llvm::isa<DenseBoolArrayAttr>(unwrap(attr));
391619fd8c2SJeff Niu }
392619fd8c2SJeff Niu bool mlirAttributeIsADenseI8Array(MlirAttribute attr) {
393c1fa60b4STres Popp   return llvm::isa<DenseI8ArrayAttr>(unwrap(attr));
394619fd8c2SJeff Niu }
395619fd8c2SJeff Niu bool mlirAttributeIsADenseI16Array(MlirAttribute attr) {
396c1fa60b4STres Popp   return llvm::isa<DenseI16ArrayAttr>(unwrap(attr));
397619fd8c2SJeff Niu }
398619fd8c2SJeff Niu bool mlirAttributeIsADenseI32Array(MlirAttribute attr) {
399c1fa60b4STres Popp   return llvm::isa<DenseI32ArrayAttr>(unwrap(attr));
400619fd8c2SJeff Niu }
401619fd8c2SJeff Niu bool mlirAttributeIsADenseI64Array(MlirAttribute attr) {
402c1fa60b4STres Popp   return llvm::isa<DenseI64ArrayAttr>(unwrap(attr));
403619fd8c2SJeff Niu }
404619fd8c2SJeff Niu bool mlirAttributeIsADenseF32Array(MlirAttribute attr) {
405c1fa60b4STres Popp   return llvm::isa<DenseF32ArrayAttr>(unwrap(attr));
406619fd8c2SJeff Niu }
407619fd8c2SJeff Niu bool mlirAttributeIsADenseF64Array(MlirAttribute attr) {
408c1fa60b4STres Popp   return llvm::isa<DenseF64ArrayAttr>(unwrap(attr));
409619fd8c2SJeff Niu }
410619fd8c2SJeff Niu 
411619fd8c2SJeff Niu //===----------------------------------------------------------------------===//
412619fd8c2SJeff Niu // Constructors.
4139566ee28Smax //===----------------------------------------------------------------------===//
414619fd8c2SJeff Niu 
415619fd8c2SJeff Niu MlirAttribute mlirDenseBoolArrayGet(MlirContext ctx, intptr_t size,
416619fd8c2SJeff Niu                                     int const *values) {
417619fd8c2SJeff Niu   SmallVector<bool, 4> elements(values, values + size);
418619fd8c2SJeff Niu   return wrap(DenseBoolArrayAttr::get(unwrap(ctx), elements));
419619fd8c2SJeff Niu }
420619fd8c2SJeff Niu MlirAttribute mlirDenseI8ArrayGet(MlirContext ctx, intptr_t size,
421619fd8c2SJeff Niu                                   int8_t const *values) {
422619fd8c2SJeff Niu   return wrap(
423619fd8c2SJeff Niu       DenseI8ArrayAttr::get(unwrap(ctx), ArrayRef<int8_t>(values, size)));
424619fd8c2SJeff Niu }
425619fd8c2SJeff Niu MlirAttribute mlirDenseI16ArrayGet(MlirContext ctx, intptr_t size,
426619fd8c2SJeff Niu                                    int16_t const *values) {
427619fd8c2SJeff Niu   return wrap(
428619fd8c2SJeff Niu       DenseI16ArrayAttr::get(unwrap(ctx), ArrayRef<int16_t>(values, size)));
429619fd8c2SJeff Niu }
430619fd8c2SJeff Niu MlirAttribute mlirDenseI32ArrayGet(MlirContext ctx, intptr_t size,
431619fd8c2SJeff Niu                                    int32_t const *values) {
432619fd8c2SJeff Niu   return wrap(
433619fd8c2SJeff Niu       DenseI32ArrayAttr::get(unwrap(ctx), ArrayRef<int32_t>(values, size)));
434619fd8c2SJeff Niu }
435619fd8c2SJeff Niu MlirAttribute mlirDenseI64ArrayGet(MlirContext ctx, intptr_t size,
436619fd8c2SJeff Niu                                    int64_t const *values) {
437619fd8c2SJeff Niu   return wrap(
438619fd8c2SJeff Niu       DenseI64ArrayAttr::get(unwrap(ctx), ArrayRef<int64_t>(values, size)));
439619fd8c2SJeff Niu }
440619fd8c2SJeff Niu MlirAttribute mlirDenseF32ArrayGet(MlirContext ctx, intptr_t size,
441619fd8c2SJeff Niu                                    float const *values) {
442619fd8c2SJeff Niu   return wrap(
443619fd8c2SJeff Niu       DenseF32ArrayAttr::get(unwrap(ctx), ArrayRef<float>(values, size)));
444619fd8c2SJeff Niu }
445619fd8c2SJeff Niu MlirAttribute mlirDenseF64ArrayGet(MlirContext ctx, intptr_t size,
446619fd8c2SJeff Niu                                    double const *values) {
447619fd8c2SJeff Niu   return wrap(
448619fd8c2SJeff Niu       DenseF64ArrayAttr::get(unwrap(ctx), ArrayRef<double>(values, size)));
449619fd8c2SJeff Niu }
450619fd8c2SJeff Niu 
451619fd8c2SJeff Niu //===----------------------------------------------------------------------===//
452619fd8c2SJeff Niu // Accessors.
4539566ee28Smax //===----------------------------------------------------------------------===//
454619fd8c2SJeff Niu 
455619fd8c2SJeff Niu intptr_t mlirDenseArrayGetNumElements(MlirAttribute attr) {
456c1fa60b4STres Popp   return llvm::cast<DenseArrayAttr>(unwrap(attr)).size();
457619fd8c2SJeff Niu }
458619fd8c2SJeff Niu 
459619fd8c2SJeff Niu //===----------------------------------------------------------------------===//
460619fd8c2SJeff Niu // Indexed accessors.
4619566ee28Smax //===----------------------------------------------------------------------===//
462619fd8c2SJeff Niu 
463619fd8c2SJeff Niu bool mlirDenseBoolArrayGetElement(MlirAttribute attr, intptr_t pos) {
464c1fa60b4STres Popp   return llvm::cast<DenseBoolArrayAttr>(unwrap(attr))[pos];
465619fd8c2SJeff Niu }
466619fd8c2SJeff Niu int8_t mlirDenseI8ArrayGetElement(MlirAttribute attr, intptr_t pos) {
467c1fa60b4STres Popp   return llvm::cast<DenseI8ArrayAttr>(unwrap(attr))[pos];
468619fd8c2SJeff Niu }
469619fd8c2SJeff Niu int16_t mlirDenseI16ArrayGetElement(MlirAttribute attr, intptr_t pos) {
470c1fa60b4STres Popp   return llvm::cast<DenseI16ArrayAttr>(unwrap(attr))[pos];
471619fd8c2SJeff Niu }
472619fd8c2SJeff Niu int32_t mlirDenseI32ArrayGetElement(MlirAttribute attr, intptr_t pos) {
473c1fa60b4STres Popp   return llvm::cast<DenseI32ArrayAttr>(unwrap(attr))[pos];
474619fd8c2SJeff Niu }
475619fd8c2SJeff Niu int64_t mlirDenseI64ArrayGetElement(MlirAttribute attr, intptr_t pos) {
476c1fa60b4STres Popp   return llvm::cast<DenseI64ArrayAttr>(unwrap(attr))[pos];
477619fd8c2SJeff Niu }
478619fd8c2SJeff Niu float mlirDenseF32ArrayGetElement(MlirAttribute attr, intptr_t pos) {
479c1fa60b4STres Popp   return llvm::cast<DenseF32ArrayAttr>(unwrap(attr))[pos];
480619fd8c2SJeff Niu }
481619fd8c2SJeff Niu double mlirDenseF64ArrayGetElement(MlirAttribute attr, intptr_t pos) {
482c1fa60b4STres Popp   return llvm::cast<DenseF64ArrayAttr>(unwrap(attr))[pos];
483619fd8c2SJeff Niu }
484619fd8c2SJeff Niu 
485619fd8c2SJeff Niu //===----------------------------------------------------------------------===//
486c7cae0e4SRiver Riddle // Dense elements attribute.
487c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
488c7cae0e4SRiver Riddle 
489c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
490c7cae0e4SRiver Riddle // IsA support.
4919566ee28Smax //===----------------------------------------------------------------------===//
492c7cae0e4SRiver Riddle 
493c7cae0e4SRiver Riddle bool mlirAttributeIsADenseElements(MlirAttribute attr) {
494c1fa60b4STres Popp   return llvm::isa<DenseElementsAttr>(unwrap(attr));
495c7cae0e4SRiver Riddle }
4969566ee28Smax 
497c7cae0e4SRiver Riddle bool mlirAttributeIsADenseIntElements(MlirAttribute attr) {
498c1fa60b4STres Popp   return llvm::isa<DenseIntElementsAttr>(unwrap(attr));
499c7cae0e4SRiver Riddle }
5009566ee28Smax 
501c7cae0e4SRiver Riddle bool mlirAttributeIsADenseFPElements(MlirAttribute attr) {
502c1fa60b4STres Popp   return llvm::isa<DenseFPElementsAttr>(unwrap(attr));
503c7cae0e4SRiver Riddle }
504c7cae0e4SRiver Riddle 
5059566ee28Smax MlirTypeID mlirDenseIntOrFPElementsAttrGetTypeID(void) {
5069566ee28Smax   return wrap(DenseIntOrFPElementsAttr::getTypeID());
5079566ee28Smax }
5089566ee28Smax 
509c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
510c7cae0e4SRiver Riddle // Constructors.
5119566ee28Smax //===----------------------------------------------------------------------===//
512c7cae0e4SRiver Riddle 
513c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrGet(MlirType shapedType,
514c7cae0e4SRiver Riddle                                        intptr_t numElements,
515c7cae0e4SRiver Riddle                                        MlirAttribute const *elements) {
516c7cae0e4SRiver Riddle   SmallVector<Attribute, 8> attributes;
517c7cae0e4SRiver Riddle   return wrap(
518c1fa60b4STres Popp       DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
519c7cae0e4SRiver Riddle                              unwrapList(numElements, elements, attributes)));
520c7cae0e4SRiver Riddle }
521c7cae0e4SRiver Riddle 
5225d6d30edSStella Laurenzo MlirAttribute mlirDenseElementsAttrRawBufferGet(MlirType shapedType,
5235d6d30edSStella Laurenzo                                                 size_t rawBufferSize,
5245d6d30edSStella Laurenzo                                                 const void *rawBuffer) {
525c1fa60b4STres Popp   auto shapedTypeCpp = llvm::cast<ShapedType>(unwrap(shapedType));
5265d6d30edSStella Laurenzo   ArrayRef<char> rawBufferCpp(static_cast<const char *>(rawBuffer),
5275d6d30edSStella Laurenzo                               rawBufferSize);
5285d6d30edSStella Laurenzo   bool isSplat = false;
5295d6d30edSStella Laurenzo   if (!DenseElementsAttr::isValidRawBuffer(shapedTypeCpp, rawBufferCpp,
530f21896f2SChris Lattner                                            isSplat))
5315d6d30edSStella Laurenzo     return mlirAttributeGetNull();
532f21896f2SChris Lattner   return wrap(DenseElementsAttr::getFromRawBuffer(shapedTypeCpp, rawBufferCpp));
5335d6d30edSStella Laurenzo }
5345d6d30edSStella Laurenzo 
535c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrSplatGet(MlirType shapedType,
536c7cae0e4SRiver Riddle                                             MlirAttribute element) {
537c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
538c7cae0e4SRiver Riddle                                      unwrap(element)));
539c7cae0e4SRiver Riddle }
540c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrBoolSplatGet(MlirType shapedType,
541c7cae0e4SRiver Riddle                                                 bool element) {
542c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
543c1fa60b4STres Popp                                      element));
544c7cae0e4SRiver Riddle }
54535454268SSean Silva MlirAttribute mlirDenseElementsAttrUInt8SplatGet(MlirType shapedType,
54635454268SSean Silva                                                  uint8_t element) {
547c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
548c1fa60b4STres Popp                                      element));
54935454268SSean Silva }
55035454268SSean Silva MlirAttribute mlirDenseElementsAttrInt8SplatGet(MlirType shapedType,
55135454268SSean Silva                                                 int8_t element) {
552c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
553c1fa60b4STres Popp                                      element));
55435454268SSean Silva }
555c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrUInt32SplatGet(MlirType shapedType,
556c7cae0e4SRiver Riddle                                                   uint32_t element) {
557c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
558c1fa60b4STres Popp                                      element));
559c7cae0e4SRiver Riddle }
560c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrInt32SplatGet(MlirType shapedType,
561c7cae0e4SRiver Riddle                                                  int32_t element) {
562c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
563c1fa60b4STres Popp                                      element));
564c7cae0e4SRiver Riddle }
565c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrUInt64SplatGet(MlirType shapedType,
566c7cae0e4SRiver Riddle                                                   uint64_t element) {
567c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
568c1fa60b4STres Popp                                      element));
569c7cae0e4SRiver Riddle }
570c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrInt64SplatGet(MlirType shapedType,
571c7cae0e4SRiver Riddle                                                  int64_t element) {
572c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
573c1fa60b4STres Popp                                      element));
574c7cae0e4SRiver Riddle }
575c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrFloatSplatGet(MlirType shapedType,
576c7cae0e4SRiver Riddle                                                  float element) {
577c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
578c1fa60b4STres Popp                                      element));
579c7cae0e4SRiver Riddle }
580c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrDoubleSplatGet(MlirType shapedType,
581c7cae0e4SRiver Riddle                                                   double element) {
582c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
583c1fa60b4STres Popp                                      element));
584c7cae0e4SRiver Riddle }
585c7cae0e4SRiver Riddle 
586c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrBoolGet(MlirType shapedType,
587c7cae0e4SRiver Riddle                                            intptr_t numElements,
588c7cae0e4SRiver Riddle                                            const int *elements) {
589c7cae0e4SRiver Riddle   SmallVector<bool, 8> values(elements, elements + numElements);
590c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
591c1fa60b4STres Popp                                      values));
592c7cae0e4SRiver Riddle }
593c7cae0e4SRiver Riddle 
594c7cae0e4SRiver Riddle /// Creates a dense attribute with elements of the type deduced by templates.
595c7cae0e4SRiver Riddle template <typename T>
596c7cae0e4SRiver Riddle static MlirAttribute getDenseAttribute(MlirType shapedType,
597c7cae0e4SRiver Riddle                                        intptr_t numElements,
598c7cae0e4SRiver Riddle                                        const T *elements) {
599c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
600984b800aSserge-sans-paille                                      llvm::ArrayRef(elements, numElements)));
601c7cae0e4SRiver Riddle }
602c7cae0e4SRiver Riddle 
60335454268SSean Silva MlirAttribute mlirDenseElementsAttrUInt8Get(MlirType shapedType,
60435454268SSean Silva                                             intptr_t numElements,
60535454268SSean Silva                                             const uint8_t *elements) {
60635454268SSean Silva   return getDenseAttribute(shapedType, numElements, elements);
60735454268SSean Silva }
60835454268SSean Silva MlirAttribute mlirDenseElementsAttrInt8Get(MlirType shapedType,
60935454268SSean Silva                                            intptr_t numElements,
61035454268SSean Silva                                            const int8_t *elements) {
61135454268SSean Silva   return getDenseAttribute(shapedType, numElements, elements);
61235454268SSean Silva }
613308d8b8cSRahul Kayaith MlirAttribute mlirDenseElementsAttrUInt16Get(MlirType shapedType,
614308d8b8cSRahul Kayaith                                              intptr_t numElements,
615308d8b8cSRahul Kayaith                                              const uint16_t *elements) {
616308d8b8cSRahul Kayaith   return getDenseAttribute(shapedType, numElements, elements);
617308d8b8cSRahul Kayaith }
618308d8b8cSRahul Kayaith MlirAttribute mlirDenseElementsAttrInt16Get(MlirType shapedType,
619308d8b8cSRahul Kayaith                                             intptr_t numElements,
620308d8b8cSRahul Kayaith                                             const int16_t *elements) {
621308d8b8cSRahul Kayaith   return getDenseAttribute(shapedType, numElements, elements);
622308d8b8cSRahul Kayaith }
623c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrUInt32Get(MlirType shapedType,
624c7cae0e4SRiver Riddle                                              intptr_t numElements,
625c7cae0e4SRiver Riddle                                              const uint32_t *elements) {
626c7cae0e4SRiver Riddle   return getDenseAttribute(shapedType, numElements, elements);
627c7cae0e4SRiver Riddle }
628c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrInt32Get(MlirType shapedType,
629c7cae0e4SRiver Riddle                                             intptr_t numElements,
630c7cae0e4SRiver Riddle                                             const int32_t *elements) {
631c7cae0e4SRiver Riddle   return getDenseAttribute(shapedType, numElements, elements);
632c7cae0e4SRiver Riddle }
633c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrUInt64Get(MlirType shapedType,
634c7cae0e4SRiver Riddle                                              intptr_t numElements,
635c7cae0e4SRiver Riddle                                              const uint64_t *elements) {
636c7cae0e4SRiver Riddle   return getDenseAttribute(shapedType, numElements, elements);
637c7cae0e4SRiver Riddle }
638c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrInt64Get(MlirType shapedType,
639c7cae0e4SRiver Riddle                                             intptr_t numElements,
640c7cae0e4SRiver Riddle                                             const int64_t *elements) {
641c7cae0e4SRiver Riddle   return getDenseAttribute(shapedType, numElements, elements);
642c7cae0e4SRiver Riddle }
643c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrFloatGet(MlirType shapedType,
644c7cae0e4SRiver Riddle                                             intptr_t numElements,
645c7cae0e4SRiver Riddle                                             const float *elements) {
646c7cae0e4SRiver Riddle   return getDenseAttribute(shapedType, numElements, elements);
647c7cae0e4SRiver Riddle }
648c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrDoubleGet(MlirType shapedType,
649c7cae0e4SRiver Riddle                                              intptr_t numElements,
650c7cae0e4SRiver Riddle                                              const double *elements) {
651c7cae0e4SRiver Riddle   return getDenseAttribute(shapedType, numElements, elements);
652c7cae0e4SRiver Riddle }
65325c218beSAshay Rane MlirAttribute mlirDenseElementsAttrBFloat16Get(MlirType shapedType,
65425c218beSAshay Rane                                                intptr_t numElements,
65525c218beSAshay Rane                                                const uint16_t *elements) {
65625c218beSAshay Rane   size_t bufferSize = numElements * 2;
65725c218beSAshay Rane   const void *buffer = static_cast<const void *>(elements);
65825c218beSAshay Rane   return mlirDenseElementsAttrRawBufferGet(shapedType, bufferSize, buffer);
65925c218beSAshay Rane }
6605b0d6bf2STanyo Kwok MlirAttribute mlirDenseElementsAttrFloat16Get(MlirType shapedType,
6615b0d6bf2STanyo Kwok                                               intptr_t numElements,
6625b0d6bf2STanyo Kwok                                               const uint16_t *elements) {
6635b0d6bf2STanyo Kwok   size_t bufferSize = numElements * 2;
6645b0d6bf2STanyo Kwok   const void *buffer = static_cast<const void *>(elements);
6655b0d6bf2STanyo Kwok   return mlirDenseElementsAttrRawBufferGet(shapedType, bufferSize, buffer);
6665b0d6bf2STanyo Kwok }
667c7cae0e4SRiver Riddle 
668c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrStringGet(MlirType shapedType,
669c7cae0e4SRiver Riddle                                              intptr_t numElements,
670c7cae0e4SRiver Riddle                                              MlirStringRef *strs) {
671c7cae0e4SRiver Riddle   SmallVector<StringRef, 8> values;
672c7cae0e4SRiver Riddle   values.reserve(numElements);
673c7cae0e4SRiver Riddle   for (intptr_t i = 0; i < numElements; ++i)
674c7cae0e4SRiver Riddle     values.push_back(unwrap(strs[i]));
675c7cae0e4SRiver Riddle 
676c1fa60b4STres Popp   return wrap(DenseElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
677c1fa60b4STres Popp                                      values));
678c7cae0e4SRiver Riddle }
679c7cae0e4SRiver Riddle 
680c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrReshapeGet(MlirAttribute attr,
681c7cae0e4SRiver Riddle                                               MlirType shapedType) {
682c1fa60b4STres Popp   return wrap(llvm::cast<DenseElementsAttr>(unwrap(attr))
683c1fa60b4STres Popp                   .reshape(llvm::cast<ShapedType>(unwrap(shapedType))));
684c7cae0e4SRiver Riddle }
685c7cae0e4SRiver Riddle 
686c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
687c7cae0e4SRiver Riddle // Splat accessors.
6889566ee28Smax //===----------------------------------------------------------------------===//
689c7cae0e4SRiver Riddle 
690c7cae0e4SRiver Riddle bool mlirDenseElementsAttrIsSplat(MlirAttribute attr) {
691c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).isSplat();
692c7cae0e4SRiver Riddle }
693c7cae0e4SRiver Riddle 
694c7cae0e4SRiver Riddle MlirAttribute mlirDenseElementsAttrGetSplatValue(MlirAttribute attr) {
695ae40d625SRiver Riddle   return wrap(
696c1fa60b4STres Popp       llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<Attribute>());
697c7cae0e4SRiver Riddle }
698c7cae0e4SRiver Riddle int mlirDenseElementsAttrGetBoolSplatValue(MlirAttribute attr) {
699c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<bool>();
700c7cae0e4SRiver Riddle }
70135454268SSean Silva int8_t mlirDenseElementsAttrGetInt8SplatValue(MlirAttribute attr) {
702c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<int8_t>();
70335454268SSean Silva }
70435454268SSean Silva uint8_t mlirDenseElementsAttrGetUInt8SplatValue(MlirAttribute attr) {
705c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<uint8_t>();
70635454268SSean Silva }
707c7cae0e4SRiver Riddle int32_t mlirDenseElementsAttrGetInt32SplatValue(MlirAttribute attr) {
708c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<int32_t>();
709c7cae0e4SRiver Riddle }
710c7cae0e4SRiver Riddle uint32_t mlirDenseElementsAttrGetUInt32SplatValue(MlirAttribute attr) {
711c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<uint32_t>();
712c7cae0e4SRiver Riddle }
713c7cae0e4SRiver Riddle int64_t mlirDenseElementsAttrGetInt64SplatValue(MlirAttribute attr) {
714c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<int64_t>();
715c7cae0e4SRiver Riddle }
716c7cae0e4SRiver Riddle uint64_t mlirDenseElementsAttrGetUInt64SplatValue(MlirAttribute attr) {
717c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<uint64_t>();
718c7cae0e4SRiver Riddle }
719c7cae0e4SRiver Riddle float mlirDenseElementsAttrGetFloatSplatValue(MlirAttribute attr) {
720c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<float>();
721c7cae0e4SRiver Riddle }
722c7cae0e4SRiver Riddle double mlirDenseElementsAttrGetDoubleSplatValue(MlirAttribute attr) {
723c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<double>();
724c7cae0e4SRiver Riddle }
725c7cae0e4SRiver Riddle MlirStringRef mlirDenseElementsAttrGetStringSplatValue(MlirAttribute attr) {
726c7cae0e4SRiver Riddle   return wrap(
727c1fa60b4STres Popp       llvm::cast<DenseElementsAttr>(unwrap(attr)).getSplatValue<StringRef>());
728c7cae0e4SRiver Riddle }
729c7cae0e4SRiver Riddle 
730c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
731c7cae0e4SRiver Riddle // Indexed accessors.
7329566ee28Smax //===----------------------------------------------------------------------===//
733c7cae0e4SRiver Riddle 
734c7cae0e4SRiver Riddle bool mlirDenseElementsAttrGetBoolValue(MlirAttribute attr, intptr_t pos) {
735c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<bool>()[pos];
736c7cae0e4SRiver Riddle }
73735454268SSean Silva int8_t mlirDenseElementsAttrGetInt8Value(MlirAttribute attr, intptr_t pos) {
738c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<int8_t>()[pos];
73935454268SSean Silva }
74035454268SSean Silva uint8_t mlirDenseElementsAttrGetUInt8Value(MlirAttribute attr, intptr_t pos) {
741c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint8_t>()[pos];
74235454268SSean Silva }
743308d8b8cSRahul Kayaith int16_t mlirDenseElementsAttrGetInt16Value(MlirAttribute attr, intptr_t pos) {
744c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<int16_t>()[pos];
745308d8b8cSRahul Kayaith }
746308d8b8cSRahul Kayaith uint16_t mlirDenseElementsAttrGetUInt16Value(MlirAttribute attr, intptr_t pos) {
747c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint16_t>()[pos];
748308d8b8cSRahul Kayaith }
749c7cae0e4SRiver Riddle int32_t mlirDenseElementsAttrGetInt32Value(MlirAttribute attr, intptr_t pos) {
750c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<int32_t>()[pos];
751c7cae0e4SRiver Riddle }
752c7cae0e4SRiver Riddle uint32_t mlirDenseElementsAttrGetUInt32Value(MlirAttribute attr, intptr_t pos) {
753c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint32_t>()[pos];
754c7cae0e4SRiver Riddle }
755c7cae0e4SRiver Riddle int64_t mlirDenseElementsAttrGetInt64Value(MlirAttribute attr, intptr_t pos) {
756c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<int64_t>()[pos];
757c7cae0e4SRiver Riddle }
758c7cae0e4SRiver Riddle uint64_t mlirDenseElementsAttrGetUInt64Value(MlirAttribute attr, intptr_t pos) {
759c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint64_t>()[pos];
760c7cae0e4SRiver Riddle }
761*5d3ae516SMatthias Gehre uint64_t mlirDenseElementsAttrGetIndexValue(MlirAttribute attr, intptr_t pos) {
762*5d3ae516SMatthias Gehre   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<uint64_t>()[pos];
763*5d3ae516SMatthias Gehre }
764c7cae0e4SRiver Riddle float mlirDenseElementsAttrGetFloatValue(MlirAttribute attr, intptr_t pos) {
765c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<float>()[pos];
766c7cae0e4SRiver Riddle }
767c7cae0e4SRiver Riddle double mlirDenseElementsAttrGetDoubleValue(MlirAttribute attr, intptr_t pos) {
768c1fa60b4STres Popp   return llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<double>()[pos];
769c7cae0e4SRiver Riddle }
770c7cae0e4SRiver Riddle MlirStringRef mlirDenseElementsAttrGetStringValue(MlirAttribute attr,
771c7cae0e4SRiver Riddle                                                   intptr_t pos) {
772c7cae0e4SRiver Riddle   return wrap(
773c1fa60b4STres Popp       llvm::cast<DenseElementsAttr>(unwrap(attr)).getValues<StringRef>()[pos]);
774c7cae0e4SRiver Riddle }
775c7cae0e4SRiver Riddle 
776c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
777c7cae0e4SRiver Riddle // Raw data accessors.
7789566ee28Smax //===----------------------------------------------------------------------===//
779c7cae0e4SRiver Riddle 
780c7cae0e4SRiver Riddle const void *mlirDenseElementsAttrGetRawData(MlirAttribute attr) {
781c7cae0e4SRiver Riddle   return static_cast<const void *>(
782c1fa60b4STres Popp       llvm::cast<DenseElementsAttr>(unwrap(attr)).getRawData().data());
783c7cae0e4SRiver Riddle }
784c7cae0e4SRiver Riddle 
785c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
786fb5a64f0SJacques Pienaar // Resource blob attributes.
787fb5a64f0SJacques Pienaar //===----------------------------------------------------------------------===//
788fb5a64f0SJacques Pienaar 
789f66cd9e9SStella Laurenzo bool mlirAttributeIsADenseResourceElements(MlirAttribute attr) {
790f66cd9e9SStella Laurenzo   return llvm::isa<DenseResourceElementsAttr>(unwrap(attr));
791f66cd9e9SStella Laurenzo }
792f66cd9e9SStella Laurenzo 
793f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseResourceElementsAttrGet(
794f66cd9e9SStella Laurenzo     MlirType shapedType, MlirStringRef name, void *data, size_t dataLength,
795f66cd9e9SStella Laurenzo     size_t dataAlignment, bool dataIsMutable,
796f66cd9e9SStella Laurenzo     void (*deleter)(void *userData, const void *data, size_t size,
797f66cd9e9SStella Laurenzo                     size_t align),
798f66cd9e9SStella Laurenzo     void *userData) {
799f66cd9e9SStella Laurenzo   AsmResourceBlob::DeleterFn cppDeleter = {};
800f66cd9e9SStella Laurenzo   if (deleter) {
801f66cd9e9SStella Laurenzo     cppDeleter = [deleter, userData](void *data, size_t size, size_t align) {
802f66cd9e9SStella Laurenzo       deleter(userData, data, size, align);
803f66cd9e9SStella Laurenzo     };
804f66cd9e9SStella Laurenzo   }
805f66cd9e9SStella Laurenzo   AsmResourceBlob blob(
806f66cd9e9SStella Laurenzo       llvm::ArrayRef(static_cast<const char *>(data), dataLength),
807f66cd9e9SStella Laurenzo       dataAlignment, std::move(cppDeleter), dataIsMutable);
808f66cd9e9SStella Laurenzo   return wrap(
809f66cd9e9SStella Laurenzo       DenseResourceElementsAttr::get(llvm::cast<ShapedType>(unwrap(shapedType)),
810f66cd9e9SStella Laurenzo                                      unwrap(name), std::move(blob)));
811f66cd9e9SStella Laurenzo }
812f66cd9e9SStella Laurenzo 
813fb5a64f0SJacques Pienaar template <typename U, typename T>
814fb5a64f0SJacques Pienaar static MlirAttribute getDenseResource(MlirType shapedType, MlirStringRef name,
815fb5a64f0SJacques Pienaar                                       intptr_t numElements, const T *elements) {
816c1fa60b4STres Popp   return wrap(U::get(llvm::cast<ShapedType>(unwrap(shapedType)), unwrap(name),
817fb5a64f0SJacques Pienaar                      UnmanagedAsmResourceBlob::allocateInferAlign(
818984b800aSserge-sans-paille                          llvm::ArrayRef(elements, numElements))));
819fb5a64f0SJacques Pienaar }
820fb5a64f0SJacques Pienaar 
821f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseBoolResourceElementsAttrGet(
822fb5a64f0SJacques Pienaar     MlirType shapedType, MlirStringRef name, intptr_t numElements,
823fb5a64f0SJacques Pienaar     const int *elements) {
824fb5a64f0SJacques Pienaar   return getDenseResource<DenseBoolResourceElementsAttr>(shapedType, name,
825fb5a64f0SJacques Pienaar                                                          numElements, elements);
826fb5a64f0SJacques Pienaar }
827f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseUInt8ResourceElementsAttrGet(
828fb5a64f0SJacques Pienaar     MlirType shapedType, MlirStringRef name, intptr_t numElements,
829fb5a64f0SJacques Pienaar     const uint8_t *elements) {
830fb5a64f0SJacques Pienaar   return getDenseResource<DenseUI8ResourceElementsAttr>(shapedType, name,
831fb5a64f0SJacques Pienaar                                                         numElements, elements);
832fb5a64f0SJacques Pienaar }
833f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseUInt16ResourceElementsAttrGet(
834f66cd9e9SStella Laurenzo     MlirType shapedType, MlirStringRef name, intptr_t numElements,
835fb5a64f0SJacques Pienaar     const uint16_t *elements) {
836fb5a64f0SJacques Pienaar   return getDenseResource<DenseUI16ResourceElementsAttr>(shapedType, name,
837fb5a64f0SJacques Pienaar                                                          numElements, elements);
838fb5a64f0SJacques Pienaar }
839f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseUInt32ResourceElementsAttrGet(
840f66cd9e9SStella Laurenzo     MlirType shapedType, MlirStringRef name, intptr_t numElements,
841fb5a64f0SJacques Pienaar     const uint32_t *elements) {
842fb5a64f0SJacques Pienaar   return getDenseResource<DenseUI32ResourceElementsAttr>(shapedType, name,
843fb5a64f0SJacques Pienaar                                                          numElements, elements);
844fb5a64f0SJacques Pienaar }
845f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseUInt64ResourceElementsAttrGet(
846f66cd9e9SStella Laurenzo     MlirType shapedType, MlirStringRef name, intptr_t numElements,
847fb5a64f0SJacques Pienaar     const uint64_t *elements) {
848fb5a64f0SJacques Pienaar   return getDenseResource<DenseUI64ResourceElementsAttr>(shapedType, name,
849fb5a64f0SJacques Pienaar                                                          numElements, elements);
850fb5a64f0SJacques Pienaar }
851f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseInt8ResourceElementsAttrGet(
852fb5a64f0SJacques Pienaar     MlirType shapedType, MlirStringRef name, intptr_t numElements,
853fb5a64f0SJacques Pienaar     const int8_t *elements) {
854fb5a64f0SJacques Pienaar   return getDenseResource<DenseUI8ResourceElementsAttr>(shapedType, name,
855fb5a64f0SJacques Pienaar                                                         numElements, elements);
856fb5a64f0SJacques Pienaar }
857f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseInt16ResourceElementsAttrGet(
858fb5a64f0SJacques Pienaar     MlirType shapedType, MlirStringRef name, intptr_t numElements,
859fb5a64f0SJacques Pienaar     const int16_t *elements) {
860fb5a64f0SJacques Pienaar   return getDenseResource<DenseUI16ResourceElementsAttr>(shapedType, name,
861fb5a64f0SJacques Pienaar                                                          numElements, elements);
862fb5a64f0SJacques Pienaar }
863f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseInt32ResourceElementsAttrGet(
864fb5a64f0SJacques Pienaar     MlirType shapedType, MlirStringRef name, intptr_t numElements,
865fb5a64f0SJacques Pienaar     const int32_t *elements) {
866fb5a64f0SJacques Pienaar   return getDenseResource<DenseUI32ResourceElementsAttr>(shapedType, name,
867fb5a64f0SJacques Pienaar                                                          numElements, elements);
868fb5a64f0SJacques Pienaar }
869f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseInt64ResourceElementsAttrGet(
870fb5a64f0SJacques Pienaar     MlirType shapedType, MlirStringRef name, intptr_t numElements,
871fb5a64f0SJacques Pienaar     const int64_t *elements) {
872fb5a64f0SJacques Pienaar   return getDenseResource<DenseUI64ResourceElementsAttr>(shapedType, name,
873fb5a64f0SJacques Pienaar                                                          numElements, elements);
874fb5a64f0SJacques Pienaar }
875f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseFloatResourceElementsAttrGet(
876fb5a64f0SJacques Pienaar     MlirType shapedType, MlirStringRef name, intptr_t numElements,
877fb5a64f0SJacques Pienaar     const float *elements) {
878fb5a64f0SJacques Pienaar   return getDenseResource<DenseF32ResourceElementsAttr>(shapedType, name,
879fb5a64f0SJacques Pienaar                                                         numElements, elements);
880fb5a64f0SJacques Pienaar }
881f66cd9e9SStella Laurenzo MlirAttribute mlirUnmanagedDenseDoubleResourceElementsAttrGet(
882f66cd9e9SStella Laurenzo     MlirType shapedType, MlirStringRef name, intptr_t numElements,
883fb5a64f0SJacques Pienaar     const double *elements) {
884fb5a64f0SJacques Pienaar   return getDenseResource<DenseF64ResourceElementsAttr>(shapedType, name,
885fb5a64f0SJacques Pienaar                                                         numElements, elements);
886fb5a64f0SJacques Pienaar }
887fb5a64f0SJacques Pienaar template <typename U, typename T>
888fb5a64f0SJacques Pienaar static T getDenseResourceVal(MlirAttribute attr, intptr_t pos) {
889c1fa60b4STres Popp   return (*llvm::cast<U>(unwrap(attr)).tryGetAsArrayRef())[pos];
890fb5a64f0SJacques Pienaar }
891fb5a64f0SJacques Pienaar 
892f66cd9e9SStella Laurenzo bool mlirDenseBoolResourceElementsAttrGetValue(MlirAttribute attr,
893f66cd9e9SStella Laurenzo                                                intptr_t pos) {
894fb5a64f0SJacques Pienaar   return getDenseResourceVal<DenseBoolResourceElementsAttr, uint8_t>(attr, pos);
895fb5a64f0SJacques Pienaar }
896f66cd9e9SStella Laurenzo uint8_t mlirDenseUInt8ResourceElementsAttrGetValue(MlirAttribute attr,
897f66cd9e9SStella Laurenzo                                                    intptr_t pos) {
898fb5a64f0SJacques Pienaar   return getDenseResourceVal<DenseUI8ResourceElementsAttr, uint8_t>(attr, pos);
899fb5a64f0SJacques Pienaar }
900f66cd9e9SStella Laurenzo uint16_t mlirDenseUInt16ResourceElementsAttrGetValue(MlirAttribute attr,
901f66cd9e9SStella Laurenzo                                                      intptr_t pos) {
902fb5a64f0SJacques Pienaar   return getDenseResourceVal<DenseUI16ResourceElementsAttr, uint16_t>(attr,
903fb5a64f0SJacques Pienaar                                                                       pos);
904fb5a64f0SJacques Pienaar }
905f66cd9e9SStella Laurenzo uint32_t mlirDenseUInt32ResourceElementsAttrGetValue(MlirAttribute attr,
906f66cd9e9SStella Laurenzo                                                      intptr_t pos) {
907fb5a64f0SJacques Pienaar   return getDenseResourceVal<DenseUI32ResourceElementsAttr, uint32_t>(attr,
908fb5a64f0SJacques Pienaar                                                                       pos);
909fb5a64f0SJacques Pienaar }
910f66cd9e9SStella Laurenzo uint64_t mlirDenseUInt64ResourceElementsAttrGetValue(MlirAttribute attr,
911f66cd9e9SStella Laurenzo                                                      intptr_t pos) {
912fb5a64f0SJacques Pienaar   return getDenseResourceVal<DenseUI64ResourceElementsAttr, uint64_t>(attr,
913fb5a64f0SJacques Pienaar                                                                       pos);
914fb5a64f0SJacques Pienaar }
915f66cd9e9SStella Laurenzo int8_t mlirDenseInt8ResourceElementsAttrGetValue(MlirAttribute attr,
916f66cd9e9SStella Laurenzo                                                  intptr_t pos) {
917fb5a64f0SJacques Pienaar   return getDenseResourceVal<DenseUI8ResourceElementsAttr, int8_t>(attr, pos);
918fb5a64f0SJacques Pienaar }
919f66cd9e9SStella Laurenzo int16_t mlirDenseInt16ResourceElementsAttrGetValue(MlirAttribute attr,
920f66cd9e9SStella Laurenzo                                                    intptr_t pos) {
921fb5a64f0SJacques Pienaar   return getDenseResourceVal<DenseUI16ResourceElementsAttr, int16_t>(attr, pos);
922fb5a64f0SJacques Pienaar }
923f66cd9e9SStella Laurenzo int32_t mlirDenseInt32ResourceElementsAttrGetValue(MlirAttribute attr,
924f66cd9e9SStella Laurenzo                                                    intptr_t pos) {
925fb5a64f0SJacques Pienaar   return getDenseResourceVal<DenseUI32ResourceElementsAttr, int32_t>(attr, pos);
926fb5a64f0SJacques Pienaar }
927f66cd9e9SStella Laurenzo int64_t mlirDenseInt64ResourceElementsAttrGetValue(MlirAttribute attr,
928f66cd9e9SStella Laurenzo                                                    intptr_t pos) {
929fb5a64f0SJacques Pienaar   return getDenseResourceVal<DenseUI64ResourceElementsAttr, int64_t>(attr, pos);
930fb5a64f0SJacques Pienaar }
931f66cd9e9SStella Laurenzo float mlirDenseFloatResourceElementsAttrGetValue(MlirAttribute attr,
932f66cd9e9SStella Laurenzo                                                  intptr_t pos) {
933fb5a64f0SJacques Pienaar   return getDenseResourceVal<DenseF32ResourceElementsAttr, float>(attr, pos);
934fb5a64f0SJacques Pienaar }
935f66cd9e9SStella Laurenzo double mlirDenseDoubleResourceElementsAttrGetValue(MlirAttribute attr,
936f66cd9e9SStella Laurenzo                                                    intptr_t pos) {
937fb5a64f0SJacques Pienaar   return getDenseResourceVal<DenseF64ResourceElementsAttr, double>(attr, pos);
938fb5a64f0SJacques Pienaar }
939fb5a64f0SJacques Pienaar 
940fb5a64f0SJacques Pienaar //===----------------------------------------------------------------------===//
941c7cae0e4SRiver Riddle // Sparse elements attribute.
942c7cae0e4SRiver Riddle //===----------------------------------------------------------------------===//
943c7cae0e4SRiver Riddle 
944c7cae0e4SRiver Riddle bool mlirAttributeIsASparseElements(MlirAttribute attr) {
945c1fa60b4STres Popp   return llvm::isa<SparseElementsAttr>(unwrap(attr));
946c7cae0e4SRiver Riddle }
947c7cae0e4SRiver Riddle 
948c7cae0e4SRiver Riddle MlirAttribute mlirSparseElementsAttribute(MlirType shapedType,
949c7cae0e4SRiver Riddle                                           MlirAttribute denseIndices,
950c7cae0e4SRiver Riddle                                           MlirAttribute denseValues) {
951c1fa60b4STres Popp   return wrap(SparseElementsAttr::get(
952c1fa60b4STres Popp       llvm::cast<ShapedType>(unwrap(shapedType)),
953c1fa60b4STres Popp       llvm::cast<DenseElementsAttr>(unwrap(denseIndices)),
954c1fa60b4STres Popp       llvm::cast<DenseElementsAttr>(unwrap(denseValues))));
955c7cae0e4SRiver Riddle }
956c7cae0e4SRiver Riddle 
957c7cae0e4SRiver Riddle MlirAttribute mlirSparseElementsAttrGetIndices(MlirAttribute attr) {
958c1fa60b4STres Popp   return wrap(llvm::cast<SparseElementsAttr>(unwrap(attr)).getIndices());
959c7cae0e4SRiver Riddle }
960c7cae0e4SRiver Riddle 
961c7cae0e4SRiver Riddle MlirAttribute mlirSparseElementsAttrGetValues(MlirAttribute attr) {
962c1fa60b4STres Popp   return wrap(llvm::cast<SparseElementsAttr>(unwrap(attr)).getValues());
963c7cae0e4SRiver Riddle }
9640aced4e0SDenys Shabalin 
9659566ee28Smax MlirTypeID mlirSparseElementsAttrGetTypeID(void) {
9669566ee28Smax   return wrap(SparseElementsAttr::getTypeID());
9679566ee28Smax }
9689566ee28Smax 
9690aced4e0SDenys Shabalin //===----------------------------------------------------------------------===//
9700aced4e0SDenys Shabalin // Strided layout attribute.
9710aced4e0SDenys Shabalin //===----------------------------------------------------------------------===//
9720aced4e0SDenys Shabalin 
9730aced4e0SDenys Shabalin bool mlirAttributeIsAStridedLayout(MlirAttribute attr) {
974c1fa60b4STres Popp   return llvm::isa<StridedLayoutAttr>(unwrap(attr));
9750aced4e0SDenys Shabalin }
9760aced4e0SDenys Shabalin 
9770aced4e0SDenys Shabalin MlirAttribute mlirStridedLayoutAttrGet(MlirContext ctx, int64_t offset,
978ac2e2d65SDenys Shabalin                                        intptr_t numStrides,
979ac2e2d65SDenys Shabalin                                        const int64_t *strides) {
9800aced4e0SDenys Shabalin   return wrap(StridedLayoutAttr::get(unwrap(ctx), offset,
9810aced4e0SDenys Shabalin                                      ArrayRef<int64_t>(strides, numStrides)));
9820aced4e0SDenys Shabalin }
9830aced4e0SDenys Shabalin 
9840aced4e0SDenys Shabalin int64_t mlirStridedLayoutAttrGetOffset(MlirAttribute attr) {
985c1fa60b4STres Popp   return llvm::cast<StridedLayoutAttr>(unwrap(attr)).getOffset();
9860aced4e0SDenys Shabalin }
9870aced4e0SDenys Shabalin 
9880aced4e0SDenys Shabalin intptr_t mlirStridedLayoutAttrGetNumStrides(MlirAttribute attr) {
9890aced4e0SDenys Shabalin   return static_cast<intptr_t>(
990c1fa60b4STres Popp       llvm::cast<StridedLayoutAttr>(unwrap(attr)).getStrides().size());
9910aced4e0SDenys Shabalin }
9920aced4e0SDenys Shabalin 
9930aced4e0SDenys Shabalin int64_t mlirStridedLayoutAttrGetStride(MlirAttribute attr, intptr_t pos) {
994c1fa60b4STres Popp   return llvm::cast<StridedLayoutAttr>(unwrap(attr)).getStrides()[pos];
9950aced4e0SDenys Shabalin }
9969566ee28Smax 
9979566ee28Smax MlirTypeID mlirStridedLayoutAttrGetTypeID(void) {
9989566ee28Smax   return wrap(StridedLayoutAttr::getTypeID());
9999566ee28Smax }
1000