1 | //===-- mlir-c/BuiltinAttributes.h - C API for Builtin Attributes -*- C -*-===// |
2 | // |
3 | // Part of the LLVM Project, under the Apache License v2.0 with LLVM |
4 | // Exceptions. |
5 | // See https://llvm.org/LICENSE.txt for license information. |
6 | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
7 | // |
8 | //===----------------------------------------------------------------------===// |
9 | // |
10 | // This header declares the C interface to MLIR Builtin attributes. |
11 | // |
12 | //===----------------------------------------------------------------------===// |
13 | |
14 | #ifndef MLIR_C_BUILTINATTRIBUTES_H |
15 | #define MLIR_C_BUILTINATTRIBUTES_H |
16 | |
17 | #include "mlir-c/AffineMap.h" |
18 | #include "mlir-c/IR.h" |
19 | #include "mlir-c/IntegerSet.h" |
20 | #include "mlir-c/Support.h" |
21 | |
22 | #ifdef __cplusplus |
23 | extern "C" { |
24 | #endif |
25 | |
26 | /// Returns an empty attribute. |
27 | MLIR_CAPI_EXPORTED MlirAttribute mlirAttributeGetNull(void); |
28 | |
29 | //===----------------------------------------------------------------------===// |
30 | // Location attribute. |
31 | //===----------------------------------------------------------------------===// |
32 | |
33 | MLIR_CAPI_EXPORTED bool mlirAttributeIsALocation(MlirAttribute attr); |
34 | |
35 | //===----------------------------------------------------------------------===// |
36 | // Affine map attribute. |
37 | //===----------------------------------------------------------------------===// |
38 | |
39 | /// Checks whether the given attribute is an affine map attribute. |
40 | MLIR_CAPI_EXPORTED bool mlirAttributeIsAAffineMap(MlirAttribute attr); |
41 | |
42 | /// Creates an affine map attribute wrapping the given map. The attribute |
43 | /// belongs to the same context as the affine map. |
44 | MLIR_CAPI_EXPORTED MlirAttribute mlirAffineMapAttrGet(MlirAffineMap map); |
45 | |
46 | /// Returns the affine map wrapped in the given affine map attribute. |
47 | MLIR_CAPI_EXPORTED MlirAffineMap mlirAffineMapAttrGetValue(MlirAttribute attr); |
48 | |
49 | /// Returns the typeID of an AffineMap attribute. |
50 | MLIR_CAPI_EXPORTED MlirTypeID mlirAffineMapAttrGetTypeID(void); |
51 | |
52 | //===----------------------------------------------------------------------===// |
53 | // Array attribute. |
54 | //===----------------------------------------------------------------------===// |
55 | |
56 | /// Checks whether the given attribute is an array attribute. |
57 | MLIR_CAPI_EXPORTED bool mlirAttributeIsAArray(MlirAttribute attr); |
58 | |
59 | /// Creates an array element containing the given list of elements in the given |
60 | /// context. |
61 | MLIR_CAPI_EXPORTED MlirAttribute mlirArrayAttrGet( |
62 | MlirContext ctx, intptr_t numElements, MlirAttribute const *elements); |
63 | |
64 | /// Returns the number of elements stored in the given array attribute. |
65 | MLIR_CAPI_EXPORTED intptr_t mlirArrayAttrGetNumElements(MlirAttribute attr); |
66 | |
67 | /// Returns pos-th element stored in the given array attribute. |
68 | MLIR_CAPI_EXPORTED MlirAttribute mlirArrayAttrGetElement(MlirAttribute attr, |
69 | intptr_t pos); |
70 | |
71 | /// Returns the typeID of an Array attribute. |
72 | MLIR_CAPI_EXPORTED MlirTypeID mlirArrayAttrGetTypeID(void); |
73 | |
74 | //===----------------------------------------------------------------------===// |
75 | // Dictionary attribute. |
76 | //===----------------------------------------------------------------------===// |
77 | |
78 | /// Checks whether the given attribute is a dictionary attribute. |
79 | MLIR_CAPI_EXPORTED bool mlirAttributeIsADictionary(MlirAttribute attr); |
80 | |
81 | /// Creates a dictionary attribute containing the given list of elements in the |
82 | /// provided context. |
83 | MLIR_CAPI_EXPORTED MlirAttribute mlirDictionaryAttrGet( |
84 | MlirContext ctx, intptr_t numElements, MlirNamedAttribute const *elements); |
85 | |
86 | /// Returns the number of attributes contained in a dictionary attribute. |
87 | MLIR_CAPI_EXPORTED intptr_t |
88 | mlirDictionaryAttrGetNumElements(MlirAttribute attr); |
89 | |
90 | /// Returns pos-th element of the given dictionary attribute. |
91 | MLIR_CAPI_EXPORTED MlirNamedAttribute |
92 | mlirDictionaryAttrGetElement(MlirAttribute attr, intptr_t pos); |
93 | |
94 | /// Returns the dictionary attribute element with the given name or NULL if the |
95 | /// given name does not exist in the dictionary. |
96 | MLIR_CAPI_EXPORTED MlirAttribute |
97 | mlirDictionaryAttrGetElementByName(MlirAttribute attr, MlirStringRef name); |
98 | |
99 | /// Returns the typeID of a Dictionary attribute. |
100 | MLIR_CAPI_EXPORTED MlirTypeID mlirDictionaryAttrGetTypeID(void); |
101 | |
102 | //===----------------------------------------------------------------------===// |
103 | // Floating point attribute. |
104 | //===----------------------------------------------------------------------===// |
105 | |
106 | // TODO: add support for APFloat and APInt to LLVM IR C API, then expose the |
107 | // relevant functions here. |
108 | |
109 | /// Checks whether the given attribute is a floating point attribute. |
110 | MLIR_CAPI_EXPORTED bool mlirAttributeIsAFloat(MlirAttribute attr); |
111 | |
112 | /// Creates a floating point attribute in the given context with the given |
113 | /// double value and double-precision FP semantics. |
114 | MLIR_CAPI_EXPORTED MlirAttribute mlirFloatAttrDoubleGet(MlirContext ctx, |
115 | MlirType type, |
116 | double value); |
117 | |
118 | /// Same as "mlirFloatAttrDoubleGet", but if the type is not valid for a |
119 | /// construction of a FloatAttr, returns a null MlirAttribute. |
120 | MLIR_CAPI_EXPORTED MlirAttribute mlirFloatAttrDoubleGetChecked(MlirLocation loc, |
121 | MlirType type, |
122 | double value); |
123 | |
124 | /// Returns the value stored in the given floating point attribute, interpreting |
125 | /// the value as double. |
126 | MLIR_CAPI_EXPORTED double mlirFloatAttrGetValueDouble(MlirAttribute attr); |
127 | |
128 | /// Returns the typeID of a Float attribute. |
129 | MLIR_CAPI_EXPORTED MlirTypeID mlirFloatAttrGetTypeID(void); |
130 | |
131 | //===----------------------------------------------------------------------===// |
132 | // Integer attribute. |
133 | //===----------------------------------------------------------------------===// |
134 | |
135 | // TODO: add support for APFloat and APInt to LLVM IR C API, then expose the |
136 | // relevant functions here. |
137 | |
138 | /// Checks whether the given attribute is an integer attribute. |
139 | MLIR_CAPI_EXPORTED bool mlirAttributeIsAInteger(MlirAttribute attr); |
140 | |
141 | /// Creates an integer attribute of the given type with the given integer |
142 | /// value. |
143 | MLIR_CAPI_EXPORTED MlirAttribute mlirIntegerAttrGet(MlirType type, |
144 | int64_t value); |
145 | |
146 | /// Returns the value stored in the given integer attribute, assuming the value |
147 | /// is of signless type and fits into a signed 64-bit integer. |
148 | MLIR_CAPI_EXPORTED int64_t mlirIntegerAttrGetValueInt(MlirAttribute attr); |
149 | |
150 | /// Returns the value stored in the given integer attribute, assuming the value |
151 | /// is of signed type and fits into a signed 64-bit integer. |
152 | MLIR_CAPI_EXPORTED int64_t mlirIntegerAttrGetValueSInt(MlirAttribute attr); |
153 | |
154 | /// Returns the value stored in the given integer attribute, assuming the value |
155 | /// is of unsigned type and fits into an unsigned 64-bit integer. |
156 | MLIR_CAPI_EXPORTED uint64_t mlirIntegerAttrGetValueUInt(MlirAttribute attr); |
157 | |
158 | /// Returns the typeID of an Integer attribute. |
159 | MLIR_CAPI_EXPORTED MlirTypeID mlirIntegerAttrGetTypeID(void); |
160 | |
161 | //===----------------------------------------------------------------------===// |
162 | // Bool attribute. |
163 | //===----------------------------------------------------------------------===// |
164 | |
165 | /// Checks whether the given attribute is a bool attribute. |
166 | MLIR_CAPI_EXPORTED bool mlirAttributeIsABool(MlirAttribute attr); |
167 | |
168 | /// Creates a bool attribute in the given context with the given value. |
169 | MLIR_CAPI_EXPORTED MlirAttribute mlirBoolAttrGet(MlirContext ctx, int value); |
170 | |
171 | /// Returns the value stored in the given bool attribute. |
172 | MLIR_CAPI_EXPORTED bool mlirBoolAttrGetValue(MlirAttribute attr); |
173 | |
174 | //===----------------------------------------------------------------------===// |
175 | // Integer set attribute. |
176 | //===----------------------------------------------------------------------===// |
177 | |
178 | /// Checks whether the given attribute is an integer set attribute. |
179 | MLIR_CAPI_EXPORTED bool mlirAttributeIsAIntegerSet(MlirAttribute attr); |
180 | |
181 | /// Creates an integer set attribute wrapping the given set. The attribute |
182 | /// belongs to the same context as the integer set. |
183 | MLIR_CAPI_EXPORTED MlirAttribute mlirIntegerSetAttrGet(MlirIntegerSet set); |
184 | |
185 | /// Returns the integer set wrapped in the given integer set attribute. |
186 | MLIR_CAPI_EXPORTED MlirIntegerSet |
187 | mlirIntegerSetAttrGetValue(MlirAttribute attr); |
188 | |
189 | /// Returns the typeID of an IntegerSet attribute. |
190 | MLIR_CAPI_EXPORTED MlirTypeID mlirIntegerSetAttrGetTypeID(void); |
191 | |
192 | //===----------------------------------------------------------------------===// |
193 | // Opaque attribute. |
194 | //===----------------------------------------------------------------------===// |
195 | |
196 | /// Checks whether the given attribute is an opaque attribute. |
197 | MLIR_CAPI_EXPORTED bool mlirAttributeIsAOpaque(MlirAttribute attr); |
198 | |
199 | /// Creates an opaque attribute in the given context associated with the dialect |
200 | /// identified by its namespace. The attribute contains opaque byte data of the |
201 | /// specified length (data need not be null-terminated). |
202 | MLIR_CAPI_EXPORTED MlirAttribute |
203 | mlirOpaqueAttrGet(MlirContext ctx, MlirStringRef dialectNamespace, |
204 | intptr_t dataLength, const char *data, MlirType type); |
205 | |
206 | /// Returns the namespace of the dialect with which the given opaque attribute |
207 | /// is associated. The namespace string is owned by the context. |
208 | MLIR_CAPI_EXPORTED MlirStringRef |
209 | mlirOpaqueAttrGetDialectNamespace(MlirAttribute attr); |
210 | |
211 | /// Returns the raw data as a string reference. The data remains live as long as |
212 | /// the context in which the attribute lives. |
213 | MLIR_CAPI_EXPORTED MlirStringRef mlirOpaqueAttrGetData(MlirAttribute attr); |
214 | |
215 | /// Returns the typeID of an Opaque attribute. |
216 | MLIR_CAPI_EXPORTED MlirTypeID mlirOpaqueAttrGetTypeID(void); |
217 | |
218 | //===----------------------------------------------------------------------===// |
219 | // String attribute. |
220 | //===----------------------------------------------------------------------===// |
221 | |
222 | /// Checks whether the given attribute is a string attribute. |
223 | MLIR_CAPI_EXPORTED bool mlirAttributeIsAString(MlirAttribute attr); |
224 | |
225 | /// Creates a string attribute in the given context containing the given string. |
226 | |
227 | MLIR_CAPI_EXPORTED MlirAttribute mlirStringAttrGet(MlirContext ctx, |
228 | MlirStringRef str); |
229 | |
230 | /// Creates a string attribute in the given context containing the given string. |
231 | /// Additionally, the attribute has the given type. |
232 | MLIR_CAPI_EXPORTED MlirAttribute mlirStringAttrTypedGet(MlirType type, |
233 | MlirStringRef str); |
234 | |
235 | /// Returns the attribute values as a string reference. The data remains live as |
236 | /// long as the context in which the attribute lives. |
237 | MLIR_CAPI_EXPORTED MlirStringRef mlirStringAttrGetValue(MlirAttribute attr); |
238 | |
239 | /// Returns the typeID of a String attribute. |
240 | MLIR_CAPI_EXPORTED MlirTypeID mlirStringAttrGetTypeID(void); |
241 | |
242 | //===----------------------------------------------------------------------===// |
243 | // SymbolRef attribute. |
244 | //===----------------------------------------------------------------------===// |
245 | |
246 | /// Checks whether the given attribute is a symbol reference attribute. |
247 | MLIR_CAPI_EXPORTED bool mlirAttributeIsASymbolRef(MlirAttribute attr); |
248 | |
249 | /// Creates a symbol reference attribute in the given context referencing a |
250 | /// symbol identified by the given string inside a list of nested references. |
251 | /// Each of the references in the list must not be nested. |
252 | MLIR_CAPI_EXPORTED MlirAttribute |
253 | mlirSymbolRefAttrGet(MlirContext ctx, MlirStringRef symbol, |
254 | intptr_t numReferences, MlirAttribute const *references); |
255 | |
256 | /// Returns the string reference to the root referenced symbol. The data remains |
257 | /// live as long as the context in which the attribute lives. |
258 | MLIR_CAPI_EXPORTED MlirStringRef |
259 | mlirSymbolRefAttrGetRootReference(MlirAttribute attr); |
260 | |
261 | /// Returns the string reference to the leaf referenced symbol. The data remains |
262 | /// live as long as the context in which the attribute lives. |
263 | MLIR_CAPI_EXPORTED MlirStringRef |
264 | mlirSymbolRefAttrGetLeafReference(MlirAttribute attr); |
265 | |
266 | /// Returns the number of references nested in the given symbol reference |
267 | /// attribute. |
268 | MLIR_CAPI_EXPORTED intptr_t |
269 | mlirSymbolRefAttrGetNumNestedReferences(MlirAttribute attr); |
270 | |
271 | /// Returns pos-th reference nested in the given symbol reference attribute. |
272 | MLIR_CAPI_EXPORTED MlirAttribute |
273 | mlirSymbolRefAttrGetNestedReference(MlirAttribute attr, intptr_t pos); |
274 | |
275 | /// Returns the typeID of an SymbolRef attribute. |
276 | MLIR_CAPI_EXPORTED MlirTypeID mlirSymbolRefAttrGetTypeID(void); |
277 | |
278 | /// Creates a DisctinctAttr with the referenced attribute. |
279 | MLIR_CAPI_EXPORTED MlirAttribute |
280 | mlirDisctinctAttrCreate(MlirAttribute referencedAttr); |
281 | |
282 | //===----------------------------------------------------------------------===// |
283 | // Flat SymbolRef attribute. |
284 | //===----------------------------------------------------------------------===// |
285 | |
286 | /// Checks whether the given attribute is a flat symbol reference attribute. |
287 | MLIR_CAPI_EXPORTED bool mlirAttributeIsAFlatSymbolRef(MlirAttribute attr); |
288 | |
289 | /// Creates a flat symbol reference attribute in the given context referencing a |
290 | /// symbol identified by the given string. |
291 | MLIR_CAPI_EXPORTED MlirAttribute mlirFlatSymbolRefAttrGet(MlirContext ctx, |
292 | MlirStringRef symbol); |
293 | |
294 | /// Returns the referenced symbol as a string reference. The data remains live |
295 | /// as long as the context in which the attribute lives. |
296 | MLIR_CAPI_EXPORTED MlirStringRef |
297 | mlirFlatSymbolRefAttrGetValue(MlirAttribute attr); |
298 | |
299 | //===----------------------------------------------------------------------===// |
300 | // Type attribute. |
301 | //===----------------------------------------------------------------------===// |
302 | |
303 | /// Checks whether the given attribute is a type attribute. |
304 | MLIR_CAPI_EXPORTED bool mlirAttributeIsAType(MlirAttribute attr); |
305 | |
306 | /// Creates a type attribute wrapping the given type in the same context as the |
307 | /// type. |
308 | MLIR_CAPI_EXPORTED MlirAttribute mlirTypeAttrGet(MlirType type); |
309 | |
310 | /// Returns the type stored in the given type attribute. |
311 | MLIR_CAPI_EXPORTED MlirType mlirTypeAttrGetValue(MlirAttribute attr); |
312 | |
313 | /// Returns the typeID of a Type attribute. |
314 | MLIR_CAPI_EXPORTED MlirTypeID mlirTypeAttrGetTypeID(void); |
315 | |
316 | //===----------------------------------------------------------------------===// |
317 | // Unit attribute. |
318 | //===----------------------------------------------------------------------===// |
319 | |
320 | /// Checks whether the given attribute is a unit attribute. |
321 | MLIR_CAPI_EXPORTED bool mlirAttributeIsAUnit(MlirAttribute attr); |
322 | |
323 | /// Creates a unit attribute in the given context. |
324 | MLIR_CAPI_EXPORTED MlirAttribute mlirUnitAttrGet(MlirContext ctx); |
325 | |
326 | /// Returns the typeID of a Unit attribute. |
327 | MLIR_CAPI_EXPORTED MlirTypeID mlirUnitAttrGetTypeID(void); |
328 | |
329 | //===----------------------------------------------------------------------===// |
330 | // Elements attributes. |
331 | //===----------------------------------------------------------------------===// |
332 | |
333 | /// Checks whether the given attribute is an elements attribute. |
334 | MLIR_CAPI_EXPORTED bool mlirAttributeIsAElements(MlirAttribute attr); |
335 | |
336 | /// Returns the element at the given rank-dimensional index. |
337 | MLIR_CAPI_EXPORTED MlirAttribute mlirElementsAttrGetValue(MlirAttribute attr, |
338 | intptr_t rank, |
339 | uint64_t *idxs); |
340 | |
341 | /// Checks whether the given rank-dimensional index is valid in the given |
342 | /// elements attribute. |
343 | MLIR_CAPI_EXPORTED bool |
344 | mlirElementsAttrIsValidIndex(MlirAttribute attr, intptr_t rank, uint64_t *idxs); |
345 | |
346 | /// Gets the total number of elements in the given elements attribute. In order |
347 | /// to iterate over the attribute, obtain its type, which must be a statically |
348 | /// shaped type and use its sizes to build a multi-dimensional index. |
349 | MLIR_CAPI_EXPORTED int64_t mlirElementsAttrGetNumElements(MlirAttribute attr); |
350 | |
351 | //===----------------------------------------------------------------------===// |
352 | // Dense array attribute. |
353 | //===----------------------------------------------------------------------===// |
354 | |
355 | MLIR_CAPI_EXPORTED MlirTypeID mlirDenseArrayAttrGetTypeID(void); |
356 | |
357 | /// Checks whether the given attribute is a dense array attribute. |
358 | MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseBoolArray(MlirAttribute attr); |
359 | MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseI8Array(MlirAttribute attr); |
360 | MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseI16Array(MlirAttribute attr); |
361 | MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseI32Array(MlirAttribute attr); |
362 | MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseI64Array(MlirAttribute attr); |
363 | MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseF32Array(MlirAttribute attr); |
364 | MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseF64Array(MlirAttribute attr); |
365 | |
366 | /// Create a dense array attribute with the given elements. |
367 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseBoolArrayGet(MlirContext ctx, |
368 | intptr_t size, |
369 | int const *values); |
370 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseI8ArrayGet(MlirContext ctx, |
371 | intptr_t size, |
372 | int8_t const *values); |
373 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseI16ArrayGet(MlirContext ctx, |
374 | intptr_t size, |
375 | int16_t const *values); |
376 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseI32ArrayGet(MlirContext ctx, |
377 | intptr_t size, |
378 | int32_t const *values); |
379 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseI64ArrayGet(MlirContext ctx, |
380 | intptr_t size, |
381 | int64_t const *values); |
382 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseF32ArrayGet(MlirContext ctx, |
383 | intptr_t size, |
384 | float const *values); |
385 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseF64ArrayGet(MlirContext ctx, |
386 | intptr_t size, |
387 | double const *values); |
388 | |
389 | /// Get the size of a dense array. |
390 | MLIR_CAPI_EXPORTED intptr_t mlirDenseArrayGetNumElements(MlirAttribute attr); |
391 | |
392 | /// Get an element of a dense array. |
393 | MLIR_CAPI_EXPORTED bool mlirDenseBoolArrayGetElement(MlirAttribute attr, |
394 | intptr_t pos); |
395 | MLIR_CAPI_EXPORTED int8_t mlirDenseI8ArrayGetElement(MlirAttribute attr, |
396 | intptr_t pos); |
397 | MLIR_CAPI_EXPORTED int16_t mlirDenseI16ArrayGetElement(MlirAttribute attr, |
398 | intptr_t pos); |
399 | MLIR_CAPI_EXPORTED int32_t mlirDenseI32ArrayGetElement(MlirAttribute attr, |
400 | intptr_t pos); |
401 | MLIR_CAPI_EXPORTED int64_t mlirDenseI64ArrayGetElement(MlirAttribute attr, |
402 | intptr_t pos); |
403 | MLIR_CAPI_EXPORTED float mlirDenseF32ArrayGetElement(MlirAttribute attr, |
404 | intptr_t pos); |
405 | MLIR_CAPI_EXPORTED double mlirDenseF64ArrayGetElement(MlirAttribute attr, |
406 | intptr_t pos); |
407 | |
408 | //===----------------------------------------------------------------------===// |
409 | // Dense elements attribute. |
410 | //===----------------------------------------------------------------------===// |
411 | |
412 | // TODO: decide on the interface and add support for complex elements. |
413 | // TODO: add support for APFloat and APInt to LLVM IR C API, then expose the |
414 | // relevant functions here. |
415 | |
416 | /// Checks whether the given attribute is a dense elements attribute. |
417 | MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseElements(MlirAttribute attr); |
418 | MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseIntElements(MlirAttribute attr); |
419 | MLIR_CAPI_EXPORTED bool mlirAttributeIsADenseFPElements(MlirAttribute attr); |
420 | |
421 | /// Returns the typeID of an DenseIntOrFPElements attribute. |
422 | MLIR_CAPI_EXPORTED MlirTypeID mlirDenseIntOrFPElementsAttrGetTypeID(void); |
423 | |
424 | /// Creates a dense elements attribute with the given Shaped type and elements |
425 | /// in the same context as the type. |
426 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrGet( |
427 | MlirType shapedType, intptr_t numElements, MlirAttribute const *elements); |
428 | |
429 | /// Creates a dense elements attribute with the given Shaped type and elements |
430 | /// populated from a packed, row-major opaque buffer of contents. |
431 | /// |
432 | /// The format of the raw buffer is a densely packed array of values that |
433 | /// can be bitcast to the storage format of the element type specified. |
434 | /// Types that are not byte aligned will be: |
435 | /// - For bitwidth > 1: Rounded up to the next byte. |
436 | /// - For bitwidth = 1: Packed into 8bit bytes with bits corresponding to |
437 | /// the linear order of the shape type from MSB to LSB, padded to on the |
438 | /// right. |
439 | /// |
440 | /// A raw buffer of a single element (or for 1-bit, a byte of value 0 or 255) |
441 | /// will be interpreted as a splat. User code should be prepared for additional, |
442 | /// conformant patterns to be identified as splats in the future. |
443 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrRawBufferGet( |
444 | MlirType shapedType, size_t rawBufferSize, const void *rawBuffer); |
445 | |
446 | /// Creates a dense elements attribute with the given Shaped type containing a |
447 | /// single replicated element (splat). |
448 | MLIR_CAPI_EXPORTED MlirAttribute |
449 | mlirDenseElementsAttrSplatGet(MlirType shapedType, MlirAttribute element); |
450 | MLIR_CAPI_EXPORTED MlirAttribute |
451 | mlirDenseElementsAttrBoolSplatGet(MlirType shapedType, bool element); |
452 | MLIR_CAPI_EXPORTED MlirAttribute |
453 | mlirDenseElementsAttrUInt8SplatGet(MlirType shapedType, uint8_t element); |
454 | MLIR_CAPI_EXPORTED MlirAttribute |
455 | mlirDenseElementsAttrInt8SplatGet(MlirType shapedType, int8_t element); |
456 | MLIR_CAPI_EXPORTED MlirAttribute |
457 | mlirDenseElementsAttrUInt32SplatGet(MlirType shapedType, uint32_t element); |
458 | MLIR_CAPI_EXPORTED MlirAttribute |
459 | mlirDenseElementsAttrInt32SplatGet(MlirType shapedType, int32_t element); |
460 | MLIR_CAPI_EXPORTED MlirAttribute |
461 | mlirDenseElementsAttrUInt64SplatGet(MlirType shapedType, uint64_t element); |
462 | MLIR_CAPI_EXPORTED MlirAttribute |
463 | mlirDenseElementsAttrInt64SplatGet(MlirType shapedType, int64_t element); |
464 | MLIR_CAPI_EXPORTED MlirAttribute |
465 | mlirDenseElementsAttrFloatSplatGet(MlirType shapedType, float element); |
466 | MLIR_CAPI_EXPORTED MlirAttribute |
467 | mlirDenseElementsAttrDoubleSplatGet(MlirType shapedType, double element); |
468 | |
469 | /// Creates a dense elements attribute with the given shaped type from elements |
470 | /// of a specific type. Expects the element type of the shaped type to match the |
471 | /// data element type. |
472 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrBoolGet( |
473 | MlirType shapedType, intptr_t numElements, const int *elements); |
474 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrUInt8Get( |
475 | MlirType shapedType, intptr_t numElements, const uint8_t *elements); |
476 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrInt8Get( |
477 | MlirType shapedType, intptr_t numElements, const int8_t *elements); |
478 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrUInt16Get( |
479 | MlirType shapedType, intptr_t numElements, const uint16_t *elements); |
480 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrInt16Get( |
481 | MlirType shapedType, intptr_t numElements, const int16_t *elements); |
482 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrUInt32Get( |
483 | MlirType shapedType, intptr_t numElements, const uint32_t *elements); |
484 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrInt32Get( |
485 | MlirType shapedType, intptr_t numElements, const int32_t *elements); |
486 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrUInt64Get( |
487 | MlirType shapedType, intptr_t numElements, const uint64_t *elements); |
488 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrInt64Get( |
489 | MlirType shapedType, intptr_t numElements, const int64_t *elements); |
490 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrFloatGet( |
491 | MlirType shapedType, intptr_t numElements, const float *elements); |
492 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrDoubleGet( |
493 | MlirType shapedType, intptr_t numElements, const double *elements); |
494 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrBFloat16Get( |
495 | MlirType shapedType, intptr_t numElements, const uint16_t *elements); |
496 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrFloat16Get( |
497 | MlirType shapedType, intptr_t numElements, const uint16_t *elements); |
498 | |
499 | /// Creates a dense elements attribute with the given shaped type from string |
500 | /// elements. |
501 | MLIR_CAPI_EXPORTED MlirAttribute mlirDenseElementsAttrStringGet( |
502 | MlirType shapedType, intptr_t numElements, MlirStringRef *strs); |
503 | |
504 | /// Creates a dense elements attribute that has the same data as the given dense |
505 | /// elements attribute and a different shaped type. The new type must have the |
506 | /// same total number of elements. |
507 | MLIR_CAPI_EXPORTED MlirAttribute |
508 | mlirDenseElementsAttrReshapeGet(MlirAttribute attr, MlirType shapedType); |
509 | |
510 | /// Checks whether the given dense elements attribute contains a single |
511 | /// replicated value (splat). |
512 | MLIR_CAPI_EXPORTED bool mlirDenseElementsAttrIsSplat(MlirAttribute attr); |
513 | |
514 | /// Returns the single replicated value (splat) of a specific type contained by |
515 | /// the given dense elements attribute. |
516 | MLIR_CAPI_EXPORTED MlirAttribute |
517 | mlirDenseElementsAttrGetSplatValue(MlirAttribute attr); |
518 | MLIR_CAPI_EXPORTED int |
519 | mlirDenseElementsAttrGetBoolSplatValue(MlirAttribute attr); |
520 | MLIR_CAPI_EXPORTED int8_t |
521 | mlirDenseElementsAttrGetInt8SplatValue(MlirAttribute attr); |
522 | MLIR_CAPI_EXPORTED uint8_t |
523 | mlirDenseElementsAttrGetUInt8SplatValue(MlirAttribute attr); |
524 | MLIR_CAPI_EXPORTED int32_t |
525 | mlirDenseElementsAttrGetInt32SplatValue(MlirAttribute attr); |
526 | MLIR_CAPI_EXPORTED uint32_t |
527 | mlirDenseElementsAttrGetUInt32SplatValue(MlirAttribute attr); |
528 | MLIR_CAPI_EXPORTED int64_t |
529 | mlirDenseElementsAttrGetInt64SplatValue(MlirAttribute attr); |
530 | MLIR_CAPI_EXPORTED uint64_t |
531 | mlirDenseElementsAttrGetUInt64SplatValue(MlirAttribute attr); |
532 | MLIR_CAPI_EXPORTED float |
533 | mlirDenseElementsAttrGetFloatSplatValue(MlirAttribute attr); |
534 | MLIR_CAPI_EXPORTED double |
535 | mlirDenseElementsAttrGetDoubleSplatValue(MlirAttribute attr); |
536 | MLIR_CAPI_EXPORTED MlirStringRef |
537 | mlirDenseElementsAttrGetStringSplatValue(MlirAttribute attr); |
538 | |
539 | /// Returns the pos-th value (flat contiguous indexing) of a specific type |
540 | /// contained by the given dense elements attribute. |
541 | MLIR_CAPI_EXPORTED bool mlirDenseElementsAttrGetBoolValue(MlirAttribute attr, |
542 | intptr_t pos); |
543 | MLIR_CAPI_EXPORTED int8_t mlirDenseElementsAttrGetInt8Value(MlirAttribute attr, |
544 | intptr_t pos); |
545 | MLIR_CAPI_EXPORTED uint8_t |
546 | mlirDenseElementsAttrGetUInt8Value(MlirAttribute attr, intptr_t pos); |
547 | MLIR_CAPI_EXPORTED int16_t |
548 | mlirDenseElementsAttrGetInt16Value(MlirAttribute attr, intptr_t pos); |
549 | MLIR_CAPI_EXPORTED uint16_t |
550 | mlirDenseElementsAttrGetUInt16Value(MlirAttribute attr, intptr_t pos); |
551 | MLIR_CAPI_EXPORTED int32_t |
552 | mlirDenseElementsAttrGetInt32Value(MlirAttribute attr, intptr_t pos); |
553 | MLIR_CAPI_EXPORTED uint32_t |
554 | mlirDenseElementsAttrGetUInt32Value(MlirAttribute attr, intptr_t pos); |
555 | MLIR_CAPI_EXPORTED int64_t |
556 | mlirDenseElementsAttrGetInt64Value(MlirAttribute attr, intptr_t pos); |
557 | MLIR_CAPI_EXPORTED uint64_t |
558 | mlirDenseElementsAttrGetUInt64Value(MlirAttribute attr, intptr_t pos); |
559 | MLIR_CAPI_EXPORTED uint64_t |
560 | mlirDenseElementsAttrGetIndexValue(MlirAttribute attr, intptr_t pos); |
561 | MLIR_CAPI_EXPORTED float mlirDenseElementsAttrGetFloatValue(MlirAttribute attr, |
562 | intptr_t pos); |
563 | MLIR_CAPI_EXPORTED double |
564 | mlirDenseElementsAttrGetDoubleValue(MlirAttribute attr, intptr_t pos); |
565 | MLIR_CAPI_EXPORTED MlirStringRef |
566 | mlirDenseElementsAttrGetStringValue(MlirAttribute attr, intptr_t pos); |
567 | |
568 | /// Returns the raw data of the given dense elements attribute. |
569 | MLIR_CAPI_EXPORTED const void * |
570 | mlirDenseElementsAttrGetRawData(MlirAttribute attr); |
571 | |
572 | //===----------------------------------------------------------------------===// |
573 | // Resource blob attributes. |
574 | //===----------------------------------------------------------------------===// |
575 | |
576 | MLIR_CAPI_EXPORTED bool |
577 | mlirAttributeIsADenseResourceElements(MlirAttribute attr); |
578 | |
579 | /// Unlike the typed accessors below, constructs the attribute with a raw |
580 | /// data buffer and no type/alignment checking. Use a more strongly typed |
581 | /// accessor if possible. If dataIsMutable is false, then an immutable |
582 | /// AsmResourceBlob will be created and that passed data contents will be |
583 | /// treated as const. |
584 | /// If the deleter is non NULL, then it will be called when the data buffer |
585 | /// can no longer be accessed (passing userData to it). |
586 | MLIR_CAPI_EXPORTED MlirAttribute mlirUnmanagedDenseResourceElementsAttrGet( |
587 | MlirType shapedType, MlirStringRef name, void *data, size_t dataLength, |
588 | size_t dataAlignment, bool dataIsMutable, |
589 | void (*deleter)(void *userData, const void *data, size_t size, |
590 | size_t align), |
591 | void *userData); |
592 | |
593 | MLIR_CAPI_EXPORTED MlirAttribute mlirUnmanagedDenseBoolResourceElementsAttrGet( |
594 | MlirType shapedType, MlirStringRef name, intptr_t numElements, |
595 | const int *elements); |
596 | MLIR_CAPI_EXPORTED MlirAttribute mlirUnmanagedDenseUInt8ResourceElementsAttrGet( |
597 | MlirType shapedType, MlirStringRef name, intptr_t numElements, |
598 | const uint8_t *elements); |
599 | MLIR_CAPI_EXPORTED MlirAttribute mlirUnmanagedDenseInt8ResourceElementsAttrGet( |
600 | MlirType shapedType, MlirStringRef name, intptr_t numElements, |
601 | const int8_t *elements); |
602 | MLIR_CAPI_EXPORTED MlirAttribute |
603 | mlirUnmanagedDenseUInt16ResourceElementsAttrGet(MlirType shapedType, |
604 | MlirStringRef name, |
605 | intptr_t numElements, |
606 | const uint16_t *elements); |
607 | MLIR_CAPI_EXPORTED MlirAttribute mlirUnmanagedDenseInt16ResourceElementsAttrGet( |
608 | MlirType shapedType, MlirStringRef name, intptr_t numElements, |
609 | const int16_t *elements); |
610 | MLIR_CAPI_EXPORTED MlirAttribute |
611 | mlirUnmanagedDenseUInt32ResourceElementsAttrGet(MlirType shapedType, |
612 | MlirStringRef name, |
613 | intptr_t numElements, |
614 | const uint32_t *elements); |
615 | MLIR_CAPI_EXPORTED MlirAttribute mlirUnmanagedDenseInt32ResourceElementsAttrGet( |
616 | MlirType shapedType, MlirStringRef name, intptr_t numElements, |
617 | const int32_t *elements); |
618 | MLIR_CAPI_EXPORTED MlirAttribute |
619 | mlirUnmanagedDenseUInt64ResourceElementsAttrGet(MlirType shapedType, |
620 | MlirStringRef name, |
621 | intptr_t numElements, |
622 | const uint64_t *elements); |
623 | MLIR_CAPI_EXPORTED MlirAttribute mlirUnmanagedDenseInt64ResourceElementsAttrGet( |
624 | MlirType shapedType, MlirStringRef name, intptr_t numElements, |
625 | const int64_t *elements); |
626 | MLIR_CAPI_EXPORTED MlirAttribute mlirUnmanagedDenseFloatResourceElementsAttrGet( |
627 | MlirType shapedType, MlirStringRef name, intptr_t numElements, |
628 | const float *elements); |
629 | MLIR_CAPI_EXPORTED MlirAttribute |
630 | mlirUnmanagedDenseDoubleResourceElementsAttrGet(MlirType shapedType, |
631 | MlirStringRef name, |
632 | intptr_t numElements, |
633 | const double *elements); |
634 | |
635 | /// Returns the pos-th value (flat contiguous indexing) of a specific type |
636 | /// contained by the given dense resource elements attribute. |
637 | MLIR_CAPI_EXPORTED bool |
638 | mlirDenseBoolResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos); |
639 | MLIR_CAPI_EXPORTED int8_t |
640 | mlirDenseInt8ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos); |
641 | MLIR_CAPI_EXPORTED uint8_t |
642 | mlirDenseUInt8ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos); |
643 | MLIR_CAPI_EXPORTED int16_t |
644 | mlirDenseInt16ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos); |
645 | MLIR_CAPI_EXPORTED uint16_t |
646 | mlirDenseUInt16ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos); |
647 | MLIR_CAPI_EXPORTED int32_t |
648 | mlirDenseInt32ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos); |
649 | MLIR_CAPI_EXPORTED uint32_t |
650 | mlirDenseUInt32ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos); |
651 | MLIR_CAPI_EXPORTED int64_t |
652 | mlirDenseInt64ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos); |
653 | MLIR_CAPI_EXPORTED uint64_t |
654 | mlirDenseUInt64ResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos); |
655 | MLIR_CAPI_EXPORTED float |
656 | mlirDenseFloatResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos); |
657 | MLIR_CAPI_EXPORTED double |
658 | mlirDenseDoubleResourceElementsAttrGetValue(MlirAttribute attr, intptr_t pos); |
659 | |
660 | //===----------------------------------------------------------------------===// |
661 | // Sparse elements attribute. |
662 | //===----------------------------------------------------------------------===// |
663 | |
664 | /// Checks whether the given attribute is a sparse elements attribute. |
665 | MLIR_CAPI_EXPORTED bool mlirAttributeIsASparseElements(MlirAttribute attr); |
666 | |
667 | /// Creates a sparse elements attribute of the given shape from a list of |
668 | /// indices and a list of associated values. Both lists are expected to be dense |
669 | /// elements attributes with the same number of elements. The list of indices is |
670 | /// expected to contain 64-bit integers. The attribute is created in the same |
671 | /// context as the type. |
672 | MLIR_CAPI_EXPORTED MlirAttribute mlirSparseElementsAttribute( |
673 | MlirType shapedType, MlirAttribute denseIndices, MlirAttribute denseValues); |
674 | |
675 | /// Returns the dense elements attribute containing 64-bit integer indices of |
676 | /// non-null elements in the given sparse elements attribute. |
677 | MLIR_CAPI_EXPORTED MlirAttribute |
678 | mlirSparseElementsAttrGetIndices(MlirAttribute attr); |
679 | |
680 | /// Returns the dense elements attribute containing the non-null elements in the |
681 | /// given sparse elements attribute. |
682 | MLIR_CAPI_EXPORTED MlirAttribute |
683 | mlirSparseElementsAttrGetValues(MlirAttribute attr); |
684 | |
685 | /// Returns the typeID of a SparseElements attribute. |
686 | MLIR_CAPI_EXPORTED MlirTypeID mlirSparseElementsAttrGetTypeID(void); |
687 | |
688 | //===----------------------------------------------------------------------===// |
689 | // Strided layout attribute. |
690 | //===----------------------------------------------------------------------===// |
691 | |
692 | // Checks wheather the given attribute is a strided layout attribute. |
693 | MLIR_CAPI_EXPORTED bool mlirAttributeIsAStridedLayout(MlirAttribute attr); |
694 | |
695 | // Creates a strided layout attribute from given strides and offset. |
696 | MLIR_CAPI_EXPORTED MlirAttribute |
697 | mlirStridedLayoutAttrGet(MlirContext ctx, int64_t offset, intptr_t numStrides, |
698 | const int64_t *strides); |
699 | |
700 | // Returns the offset in the given strided layout layout attribute. |
701 | MLIR_CAPI_EXPORTED int64_t mlirStridedLayoutAttrGetOffset(MlirAttribute attr); |
702 | |
703 | // Returns the number of strides in the given strided layout attribute. |
704 | MLIR_CAPI_EXPORTED intptr_t |
705 | mlirStridedLayoutAttrGetNumStrides(MlirAttribute attr); |
706 | |
707 | // Returns the pos-th stride stored in the given strided layout attribute. |
708 | MLIR_CAPI_EXPORTED int64_t mlirStridedLayoutAttrGetStride(MlirAttribute attr, |
709 | intptr_t pos); |
710 | |
711 | /// Returns the typeID of a StridedLayout attribute. |
712 | MLIR_CAPI_EXPORTED MlirTypeID mlirStridedLayoutAttrGetTypeID(void); |
713 | |
714 | #ifdef __cplusplus |
715 | } |
716 | #endif |
717 | |
718 | #endif // MLIR_C_BUILTINATTRIBUTES_H |
719 | |