|  | //===-- mlir-c/Dialect/SparseTensor.h - C API for SparseTensor ----*- C -*-===// | 
|  | // | 
|  | // Part of the LLVM Project, under the Apache License v2.0 with LLVM | 
|  | // Exceptions. | 
|  | // See https://llvm.org/LICENSE.txt for license information. | 
|  | // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef MLIR_C_DIALECT_SPARSETENSOR_H | 
|  | #define MLIR_C_DIALECT_SPARSETENSOR_H | 
|  |  | 
|  | #include "mlir-c/AffineMap.h" | 
|  | #include "mlir-c/IR.h" | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(SparseTensor, sparse_tensor); | 
|  |  | 
|  | /// Dimension level types (and properties) that define sparse tensors. | 
|  | /// See the documentation in SparseTensorAttrDefs.td for their meaning. | 
|  | /// | 
|  | /// These correspond to SparseTensorEncodingAttr::LevelType in the C++ API. | 
|  | /// If updating, keep them in sync and update the static_assert in the impl | 
|  | /// file. | 
|  | typedef uint64_t MlirSparseTensorLevelType; | 
|  |  | 
|  | enum MlirSparseTensorLevelFormat { | 
|  | MLIR_SPARSE_TENSOR_LEVEL_DENSE = 0x000000010000, | 
|  | MLIR_SPARSE_TENSOR_LEVEL_BATCH = 0x000000020000, | 
|  | MLIR_SPARSE_TENSOR_LEVEL_COMPRESSED = 0x000000040000, | 
|  | MLIR_SPARSE_TENSOR_LEVEL_SINGLETON = 0x000000080000, | 
|  | MLIR_SPARSE_TENSOR_LEVEL_LOOSE_COMPRESSED = 0x000000100000, | 
|  | MLIR_SPARSE_TENSOR_LEVEL_N_OUT_OF_M = 0x000000200000, | 
|  | }; | 
|  |  | 
|  | enum MlirSparseTensorLevelPropertyNondefault { | 
|  | MLIR_SPARSE_PROPERTY_NON_UNIQUE = 0x0001, | 
|  | MLIR_SPARSE_PROPERTY_NON_ORDERED = 0x0002, | 
|  | }; | 
|  |  | 
|  | //===----------------------------------------------------------------------===// | 
|  | // SparseTensorEncodingAttr | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | /// Checks whether the given attribute is a `sparse_tensor.encoding` attribute. | 
|  | MLIR_CAPI_EXPORTED bool | 
|  | mlirAttributeIsASparseTensorEncodingAttr(MlirAttribute attr); | 
|  |  | 
|  | /// Creates a `sparse_tensor.encoding` attribute with the given parameters. | 
|  | MLIR_CAPI_EXPORTED MlirAttribute mlirSparseTensorEncodingAttrGet( | 
|  | MlirContext ctx, intptr_t lvlRank, | 
|  | MlirSparseTensorLevelType const *lvlTypes, MlirAffineMap dimToLvl, | 
|  | MlirAffineMap lvlTodim, int posWidth, int crdWidth, | 
|  | MlirAttribute explicitVal, MlirAttribute implicitVal); | 
|  |  | 
|  | /// Returns the level-rank of the `sparse_tensor.encoding` attribute. | 
|  | MLIR_CAPI_EXPORTED intptr_t | 
|  | mlirSparseTensorEncodingGetLvlRank(MlirAttribute attr); | 
|  |  | 
|  | /// Returns a specified level-type of the `sparse_tensor.encoding` attribute. | 
|  | MLIR_CAPI_EXPORTED MlirSparseTensorLevelType | 
|  | mlirSparseTensorEncodingAttrGetLvlType(MlirAttribute attr, intptr_t lvl); | 
|  |  | 
|  | /// Returns a specified level-format of the `sparse_tensor.encoding` attribute. | 
|  | MLIR_CAPI_EXPORTED enum MlirSparseTensorLevelFormat | 
|  | mlirSparseTensorEncodingAttrGetLvlFmt(MlirAttribute attr, intptr_t lvl); | 
|  |  | 
|  | /// Returns the dimension-to-level mapping of the `sparse_tensor.encoding` | 
|  | /// attribute. | 
|  | MLIR_CAPI_EXPORTED MlirAffineMap | 
|  | mlirSparseTensorEncodingAttrGetDimToLvl(MlirAttribute attr); | 
|  |  | 
|  | /// Returns the level-to-dimension mapping of the `sparse_tensor.encoding` | 
|  | /// attribute. | 
|  | MLIR_CAPI_EXPORTED MlirAffineMap | 
|  | mlirSparseTensorEncodingAttrGetLvlToDim(MlirAttribute attr); | 
|  |  | 
|  | /// Returns the position bitwidth of the `sparse_tensor.encoding` attribute. | 
|  | MLIR_CAPI_EXPORTED int | 
|  | mlirSparseTensorEncodingAttrGetPosWidth(MlirAttribute attr); | 
|  |  | 
|  | /// Returns the coordinate bitwidth of the `sparse_tensor.encoding` attribute. | 
|  | MLIR_CAPI_EXPORTED int | 
|  | mlirSparseTensorEncodingAttrGetCrdWidth(MlirAttribute attr); | 
|  |  | 
|  | /// Returns the explicit value of the `sparse_tensor.encoding` attribute. | 
|  | MLIR_CAPI_EXPORTED MlirAttribute | 
|  | mlirSparseTensorEncodingAttrGetExplicitVal(MlirAttribute attr); | 
|  |  | 
|  | /// Returns the implicit value of the `sparse_tensor.encoding` attribute. | 
|  | MLIR_CAPI_EXPORTED MlirAttribute | 
|  | mlirSparseTensorEncodingAttrGetImplicitVal(MlirAttribute attr); | 
|  |  | 
|  | MLIR_CAPI_EXPORTED unsigned | 
|  | mlirSparseTensorEncodingAttrGetStructuredN(MlirSparseTensorLevelType lvlType); | 
|  |  | 
|  | MLIR_CAPI_EXPORTED unsigned | 
|  | mlirSparseTensorEncodingAttrGetStructuredM(MlirSparseTensorLevelType lvlType); | 
|  |  | 
|  | MLIR_CAPI_EXPORTED MlirSparseTensorLevelType | 
|  | mlirSparseTensorEncodingAttrBuildLvlType( | 
|  | enum MlirSparseTensorLevelFormat lvlFmt, | 
|  | const enum MlirSparseTensorLevelPropertyNondefault *properties, | 
|  | unsigned propSize, unsigned n, unsigned m); | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #include "mlir/Dialect/SparseTensor/Transforms/Passes.capi.h.inc" | 
|  |  | 
|  | #endif // MLIR_C_DIALECT_SPARSETENSOR_H |