| 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 | |