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 }; 43 44 //===----------------------------------------------------------------------===// 45 // SparseTensorEncodingAttr 46 //===----------------------------------------------------------------------===// 47 48 /// Checks whether the given attribute is a `sparse_tensor.encoding` attribute. 49 MLIR_CAPI_EXPORTED bool 50 mlirAttributeIsASparseTensorEncodingAttr(MlirAttribute attr); 51 52 /// Creates a `sparse_tensor.encoding` attribute with the given parameters. 53 MLIR_CAPI_EXPORTED MlirAttribute mlirSparseTensorEncodingAttrGet( 54 MlirContext ctx, intptr_t lvlRank, 55 MlirSparseTensorLevelType const *lvlTypes, MlirAffineMap dimToLvl, 56 MlirAffineMap lvlTodim, int posWidth, int crdWidth, 57 MlirAttribute explicitVal, MlirAttribute implicitVal); 58 59 /// Returns the level-rank of the `sparse_tensor.encoding` attribute. 60 MLIR_CAPI_EXPORTED intptr_t 61 mlirSparseTensorEncodingGetLvlRank(MlirAttribute attr); 62 63 /// Returns a specified level-type of the `sparse_tensor.encoding` attribute. 64 MLIR_CAPI_EXPORTED MlirSparseTensorLevelType 65 mlirSparseTensorEncodingAttrGetLvlType(MlirAttribute attr, intptr_t lvl); 66 67 /// Returns a specified level-format of the `sparse_tensor.encoding` attribute. 68 MLIR_CAPI_EXPORTED enum MlirSparseTensorLevelFormat 69 mlirSparseTensorEncodingAttrGetLvlFmt(MlirAttribute attr, intptr_t lvl); 70 71 /// Returns the dimension-to-level mapping of the `sparse_tensor.encoding` 72 /// attribute. 73 MLIR_CAPI_EXPORTED MlirAffineMap 74 mlirSparseTensorEncodingAttrGetDimToLvl(MlirAttribute attr); 75 76 /// Returns the level-to-dimension mapping of the `sparse_tensor.encoding` 77 /// attribute. 78 MLIR_CAPI_EXPORTED MlirAffineMap 79 mlirSparseTensorEncodingAttrGetLvlToDim(MlirAttribute attr); 80 81 /// Returns the position bitwidth of the `sparse_tensor.encoding` attribute. 82 MLIR_CAPI_EXPORTED int 83 mlirSparseTensorEncodingAttrGetPosWidth(MlirAttribute attr); 84 85 /// Returns the coordinate bitwidth of the `sparse_tensor.encoding` attribute. 86 MLIR_CAPI_EXPORTED int 87 mlirSparseTensorEncodingAttrGetCrdWidth(MlirAttribute attr); 88 89 /// Returns the explicit value of the `sparse_tensor.encoding` attribute. 90 MLIR_CAPI_EXPORTED MlirAttribute 91 mlirSparseTensorEncodingAttrGetExplicitVal(MlirAttribute attr); 92 93 /// Returns the implicit value of the `sparse_tensor.encoding` attribute. 94 MLIR_CAPI_EXPORTED MlirAttribute 95 mlirSparseTensorEncodingAttrGetImplicitVal(MlirAttribute attr); 96 97 MLIR_CAPI_EXPORTED unsigned 98 mlirSparseTensorEncodingAttrGetStructuredN(MlirSparseTensorLevelType lvlType); 99 100 MLIR_CAPI_EXPORTED unsigned 101 mlirSparseTensorEncodingAttrGetStructuredM(MlirSparseTensorLevelType lvlType); 102 103 MLIR_CAPI_EXPORTED MlirSparseTensorLevelType 104 mlirSparseTensorEncodingAttrBuildLvlType( 105 enum MlirSparseTensorLevelFormat lvlFmt, 106 const enum MlirSparseTensorLevelPropertyNondefault *properties, 107 unsigned propSize, unsigned n, unsigned m); 108 109 #ifdef __cplusplus 110 } 111 #endif 112 113 #include "mlir/Dialect/SparseTensor/Transforms/Passes.capi.h.inc" 114 115 #endif // MLIR_C_DIALECT_SPARSETENSOR_H 116