80 lines
2.9 KiB
C
80 lines
2.9 KiB
C
//===-- 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_SPARSE_TENSOR_H
|
|
#define MLIR_C_DIALECT_SPARSE_TENSOR_H
|
|
|
|
#include "mlir-c/AffineMap.h"
|
|
#include "mlir-c/Registration.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(SparseTensor, sparse_tensor);
|
|
|
|
/// Dimension level types that define sparse tensors:
|
|
/// - MLIR_SPARSE_TENSOR_DIM_LEVEL_DENSE - dimension is dense, every
|
|
/// entry is stored
|
|
/// - MLIR_SPARSE_TENSOR_DIM_LEVEL_COMPRESSED - dimension is sparse,
|
|
/// only nonzeros are stored.
|
|
/// - MLIR_SPARSE_TENSOR_DIM_LEVEL_SINGLETON - dimension contains single
|
|
/// coordinate, no siblings.
|
|
///
|
|
/// These correspond to SparseTensorEncodingAttr::DimLevelType in the C++ API.
|
|
/// If updating, keep them in sync and update the static_assert in the impl
|
|
/// file.
|
|
enum MlirSparseTensorDimLevelType {
|
|
MLIR_SPARSE_TENSOR_DIM_LEVEL_DENSE,
|
|
MLIR_SPARSE_TENSOR_DIM_LEVEL_COMPRESSED,
|
|
MLIR_SPARSE_TENSOR_DIM_LEVEL_SINGLETON,
|
|
};
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// 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 numDimLevelTypes,
|
|
enum MlirSparseTensorDimLevelType const *dimLevelTypes,
|
|
MlirAffineMap dimOrdering, int pointerBitWidth, int indexBitWidth);
|
|
|
|
/// Returns the number of dim level types in a sparse_tensor.encoding attribute.
|
|
MLIR_CAPI_EXPORTED intptr_t
|
|
mlirSparseTensorEncodingGetNumDimLevelTypes(MlirAttribute attr);
|
|
|
|
/// Returns a specified dim level type in a sparse_tensor.encoding attribute.
|
|
MLIR_CAPI_EXPORTED enum MlirSparseTensorDimLevelType
|
|
mlirSparseTensorEncodingAttrGetDimLevelType(MlirAttribute attr, intptr_t pos);
|
|
|
|
/// Returns the dimension ordering in a sparse_tensor.encoding attribute.
|
|
MLIR_CAPI_EXPORTED MlirAffineMap
|
|
mlirSparseTensorEncodingAttrGetDimOrdering(MlirAttribute attr);
|
|
|
|
/// Returns the pointer bit width in a sparse_tensor.encoding attribute.
|
|
MLIR_CAPI_EXPORTED int
|
|
mlirSparseTensorEncodingAttrGetPointerBitWidth(MlirAttribute attr);
|
|
|
|
/// Returns the index bit width in a sparse_tensor.encoding attribute.
|
|
MLIR_CAPI_EXPORTED int
|
|
mlirSparseTensorEncodingAttrGetIndexBitWidth(MlirAttribute attr);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#include "mlir/Dialect/SparseTensor/Transforms/Passes.capi.h.inc"
|
|
|
|
#endif // MLIR_C_DIALECT_SPARSE_TENSOR_H
|