| 1 | //===-- mlir-c/Dialect/SparseTensor.h - C API for SparseTensor ----*- 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 | #ifndef MLIR_C_DIALECT_SPARSETENSOR_H |
| 11 | #define MLIR_C_DIALECT_SPARSETENSOR_H |
| 12 | |
| 13 | #include "mlir-c/AffineMap.h" |
| 14 | #include "mlir-c/IR.h" |
| 15 | |
| 16 | #ifdef __cplusplus |
| 17 | extern "C" { |
| 18 | #endif |
| 19 | |
| 20 | MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(SparseTensor, sparse_tensor); |
| 21 | |
| 22 | /// Dimension level types (and properties) that define sparse tensors. |
| 23 | /// See the documentation in SparseTensorAttrDefs.td for their meaning. |
| 24 | /// |
| 25 | /// These correspond to SparseTensorEncodingAttr::LevelType in the C++ API. |
| 26 | /// If updating, keep them in sync and update the static_assert in the impl |
| 27 | /// file. |
| 28 | typedef uint64_t MlirSparseTensorLevelType; |
| 29 | |
| 30 | enum MlirSparseTensorLevelFormat { |
| 31 | MLIR_SPARSE_TENSOR_LEVEL_DENSE = 0x000000010000, |
| 32 | MLIR_SPARSE_TENSOR_LEVEL_BATCH = 0x000000020000, |
| 33 | MLIR_SPARSE_TENSOR_LEVEL_COMPRESSED = 0x000000040000, |
| 34 | MLIR_SPARSE_TENSOR_LEVEL_SINGLETON = 0x000000080000, |
| 35 | MLIR_SPARSE_TENSOR_LEVEL_LOOSE_COMPRESSED = 0x000000100000, |
| 36 | MLIR_SPARSE_TENSOR_LEVEL_N_OUT_OF_M = 0x000000200000, |
| 37 | }; |
| 38 | |
| 39 | enum MlirSparseTensorLevelPropertyNondefault { |
| 40 | MLIR_SPARSE_PROPERTY_NON_UNIQUE = 0x0001, |
| 41 | MLIR_SPARSE_PROPERTY_NON_ORDERED = 0x0002, |
| 42 | MLIR_SPARSE_PROPERTY_SOA = 0x0004, |
| 43 | }; |
| 44 | |
| 45 | //===----------------------------------------------------------------------===// |
| 46 | // SparseTensorEncodingAttr |
| 47 | //===----------------------------------------------------------------------===// |
| 48 | |
| 49 | /// Checks whether the given attribute is a `sparse_tensor.encoding` attribute. |
| 50 | MLIR_CAPI_EXPORTED bool |
| 51 | mlirAttributeIsASparseTensorEncodingAttr(MlirAttribute attr); |
| 52 | |
| 53 | /// Creates a `sparse_tensor.encoding` attribute with the given parameters. |
| 54 | MLIR_CAPI_EXPORTED MlirAttribute mlirSparseTensorEncodingAttrGet( |
| 55 | MlirContext ctx, intptr_t lvlRank, |
| 56 | MlirSparseTensorLevelType const *lvlTypes, MlirAffineMap dimToLvl, |
| 57 | MlirAffineMap lvlTodim, int posWidth, int crdWidth, |
| 58 | MlirAttribute explicitVal, MlirAttribute implicitVal); |
| 59 | |
| 60 | /// Returns the level-rank of the `sparse_tensor.encoding` attribute. |
| 61 | MLIR_CAPI_EXPORTED intptr_t |
| 62 | mlirSparseTensorEncodingGetLvlRank(MlirAttribute attr); |
| 63 | |
| 64 | /// Returns a specified level-type of the `sparse_tensor.encoding` attribute. |
| 65 | MLIR_CAPI_EXPORTED MlirSparseTensorLevelType |
| 66 | mlirSparseTensorEncodingAttrGetLvlType(MlirAttribute attr, intptr_t lvl); |
| 67 | |
| 68 | /// Returns a specified level-format of the `sparse_tensor.encoding` attribute. |
| 69 | MLIR_CAPI_EXPORTED enum MlirSparseTensorLevelFormat |
| 70 | mlirSparseTensorEncodingAttrGetLvlFmt(MlirAttribute attr, intptr_t lvl); |
| 71 | |
| 72 | /// Returns the dimension-to-level mapping of the `sparse_tensor.encoding` |
| 73 | /// attribute. |
| 74 | MLIR_CAPI_EXPORTED MlirAffineMap |
| 75 | mlirSparseTensorEncodingAttrGetDimToLvl(MlirAttribute attr); |
| 76 | |
| 77 | /// Returns the level-to-dimension mapping of the `sparse_tensor.encoding` |
| 78 | /// attribute. |
| 79 | MLIR_CAPI_EXPORTED MlirAffineMap |
| 80 | mlirSparseTensorEncodingAttrGetLvlToDim(MlirAttribute attr); |
| 81 | |
| 82 | /// Returns the position bitwidth of the `sparse_tensor.encoding` attribute. |
| 83 | MLIR_CAPI_EXPORTED int |
| 84 | mlirSparseTensorEncodingAttrGetPosWidth(MlirAttribute attr); |
| 85 | |
| 86 | /// Returns the coordinate bitwidth of the `sparse_tensor.encoding` attribute. |
| 87 | MLIR_CAPI_EXPORTED int |
| 88 | mlirSparseTensorEncodingAttrGetCrdWidth(MlirAttribute attr); |
| 89 | |
| 90 | /// Returns the explicit value of the `sparse_tensor.encoding` attribute. |
| 91 | MLIR_CAPI_EXPORTED MlirAttribute |
| 92 | mlirSparseTensorEncodingAttrGetExplicitVal(MlirAttribute attr); |
| 93 | |
| 94 | /// Returns the implicit value of the `sparse_tensor.encoding` attribute. |
| 95 | MLIR_CAPI_EXPORTED MlirAttribute |
| 96 | mlirSparseTensorEncodingAttrGetImplicitVal(MlirAttribute attr); |
| 97 | |
| 98 | MLIR_CAPI_EXPORTED unsigned |
| 99 | mlirSparseTensorEncodingAttrGetStructuredN(MlirSparseTensorLevelType lvlType); |
| 100 | |
| 101 | MLIR_CAPI_EXPORTED unsigned |
| 102 | mlirSparseTensorEncodingAttrGetStructuredM(MlirSparseTensorLevelType lvlType); |
| 103 | |
| 104 | MLIR_CAPI_EXPORTED MlirSparseTensorLevelType |
| 105 | mlirSparseTensorEncodingAttrBuildLvlType( |
| 106 | enum MlirSparseTensorLevelFormat lvlFmt, |
| 107 | const enum MlirSparseTensorLevelPropertyNondefault *properties, |
| 108 | unsigned propSize, unsigned n, unsigned m); |
| 109 | |
| 110 | #ifdef __cplusplus |
| 111 | } |
| 112 | #endif |
| 113 | |
| 114 | #include "mlir/Dialect/SparseTensor/Transforms/Passes.capi.h.inc" |
| 115 | |
| 116 | #endif // MLIR_C_DIALECT_SPARSETENSOR_H |
| 117 | |