//===-- 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, MLIR_SPARSE_PROPERTY_SOA = 0x0004, }; //===----------------------------------------------------------------------===// // 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