| //===-- mlir-c/Dialect/Quant.h - C API for LLVM -------------------*- 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_QUANT_H |
| #define MLIR_C_DIALECT_QUANT_H |
| |
| #include "mlir-c/IR.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| MLIR_DECLARE_CAPI_DIALECT_REGISTRATION(quant, quant); |
| |
| //===---------------------------------------------------------------------===// |
| // QuantizedType |
| //===---------------------------------------------------------------------===// |
| |
| /// Returns `true` if the given type is a quantization dialect type. |
| MLIR_CAPI_EXPORTED bool mlirTypeIsAQuantizedType(MlirType type); |
| |
| /// Returns the bit flag used to indicate signedness of a quantized type. |
| MLIR_CAPI_EXPORTED unsigned mlirQuantizedTypeGetSignedFlag(void); |
| |
| /// Returns the minimum possible value stored by a quantized type. |
| MLIR_CAPI_EXPORTED int64_t mlirQuantizedTypeGetDefaultMinimumForInteger( |
| bool isSigned, unsigned integralWidth); |
| |
| /// Returns the maximum possible value stored by a quantized type. |
| MLIR_CAPI_EXPORTED int64_t mlirQuantizedTypeGetDefaultMaximumForInteger( |
| bool isSigned, unsigned integralWidth); |
| |
| /// Gets the original type approximated by the given quantized type. |
| MLIR_CAPI_EXPORTED MlirType mlirQuantizedTypeGetExpressedType(MlirType type); |
| |
| /// Gets the flags associated with the given quantized type. |
| MLIR_CAPI_EXPORTED unsigned mlirQuantizedTypeGetFlags(MlirType type); |
| |
| /// Returns `true` if the given type is signed, `false` otherwise. |
| MLIR_CAPI_EXPORTED bool mlirQuantizedTypeIsSigned(MlirType type); |
| |
| /// Returns the underlying type used to store the values. |
| MLIR_CAPI_EXPORTED MlirType mlirQuantizedTypeGetStorageType(MlirType type); |
| |
| /// Returns the minimum value that the storage type of the given quantized type |
| /// can take. |
| MLIR_CAPI_EXPORTED int64_t mlirQuantizedTypeGetStorageTypeMin(MlirType type); |
| |
| /// Returns the maximum value that the storage type of the given quantized type |
| /// can take. |
| MLIR_CAPI_EXPORTED int64_t mlirQuantizedTypeGetStorageTypeMax(MlirType type); |
| |
| /// Returns the integral bitwidth that the storage type of the given quantized |
| /// type can represent exactly. |
| MLIR_CAPI_EXPORTED unsigned |
| mlirQuantizedTypeGetStorageTypeIntegralWidth(MlirType type); |
| |
| /// Returns `true` if the `candidate` type is compatible with the given |
| /// quantized `type`. |
| MLIR_CAPI_EXPORTED bool |
| mlirQuantizedTypeIsCompatibleExpressedType(MlirType type, MlirType candidate); |
| |
| /// Returns the element type of the given quantized type as another quantized |
| /// type. |
| MLIR_CAPI_EXPORTED MlirType |
| mlirQuantizedTypeGetQuantizedElementType(MlirType type); |
| |
| /// Casts from a type based on the storage type of the given type to a |
| /// corresponding type based on the given type. Returns a null type if the cast |
| /// is not valid. |
| MLIR_CAPI_EXPORTED MlirType |
| mlirQuantizedTypeCastFromStorageType(MlirType type, MlirType candidate); |
| |
| /// Casts from a type based on a quantized type to a corresponding typed based |
| /// on the storage type. Returns a null type if the cast is not valid. |
| MLIR_CAPI_EXPORTED MlirType mlirQuantizedTypeCastToStorageType(MlirType type); |
| |
| /// Casts from a type based on the expressed type of the given type to a |
| /// corresponding type based on the given type. Returns a null type if the cast |
| /// is not valid. |
| MLIR_CAPI_EXPORTED MlirType |
| mlirQuantizedTypeCastFromExpressedType(MlirType type, MlirType candidate); |
| |
| /// Casts from a type based on a quantized type to a corresponding typed based |
| /// on the expressed type. Returns a null type if the cast is not valid. |
| MLIR_CAPI_EXPORTED MlirType mlirQuantizedTypeCastToExpressedType(MlirType type); |
| |
| /// Casts from a type based on the expressed type of the given quantized type to |
| /// equivalent type based on storage type of the same quantized type. |
| MLIR_CAPI_EXPORTED MlirType |
| mlirQuantizedTypeCastExpressedToStorageType(MlirType type, MlirType candidate); |
| |
| //===---------------------------------------------------------------------===// |
| // AnyQuantizedType |
| //===---------------------------------------------------------------------===// |
| |
| /// Returns `true` if the given type is an AnyQuantizedType. |
| MLIR_CAPI_EXPORTED bool mlirTypeIsAAnyQuantizedType(MlirType type); |
| |
| /// Creates an instance of AnyQuantizedType with the given parameters in the |
| /// same context as `storageType` and returns it. The instance is owned by the |
| /// context. |
| MLIR_CAPI_EXPORTED MlirType mlirAnyQuantizedTypeGet(unsigned flags, |
| MlirType storageType, |
| MlirType expressedType, |
| int64_t storageTypeMin, |
| int64_t storageTypeMax); |
| |
| //===---------------------------------------------------------------------===// |
| // UniformQuantizedType |
| //===---------------------------------------------------------------------===// |
| |
| /// Returns `true` if the given type is a UniformQuantizedType. |
| MLIR_CAPI_EXPORTED bool mlirTypeIsAUniformQuantizedType(MlirType type); |
| |
| /// Creates an instance of UniformQuantizedType with the given parameters in the |
| /// same context as `storageType` and returns it. The instance is owned by the |
| /// context. |
| MLIR_CAPI_EXPORTED MlirType mlirUniformQuantizedTypeGet( |
| unsigned flags, MlirType storageType, MlirType expressedType, double scale, |
| int64_t zeroPoint, int64_t storageTypeMin, int64_t storageTypeMax); |
| |
| /// Returns the scale of the given uniform quantized type. |
| MLIR_CAPI_EXPORTED double mlirUniformQuantizedTypeGetScale(MlirType type); |
| |
| /// Returns the zero point of the given uniform quantized type. |
| MLIR_CAPI_EXPORTED int64_t mlirUniformQuantizedTypeGetZeroPoint(MlirType type); |
| |
| /// Returns `true` if the given uniform quantized type is fixed-point. |
| MLIR_CAPI_EXPORTED bool mlirUniformQuantizedTypeIsFixedPoint(MlirType type); |
| |
| //===---------------------------------------------------------------------===// |
| // UniformQuantizedPerAxisType |
| //===---------------------------------------------------------------------===// |
| |
| /// Returns `true` if the given type is a UniformQuantizedPerAxisType. |
| MLIR_CAPI_EXPORTED bool mlirTypeIsAUniformQuantizedPerAxisType(MlirType type); |
| |
| /// Creates an instance of UniformQuantizedPerAxisType with the given parameters |
| /// in the same context as `storageType` and returns it. `scales` and |
| /// `zeroPoints` point to `nDims` number of elements. The instance is owned |
| /// by the context. |
| MLIR_CAPI_EXPORTED MlirType mlirUniformQuantizedPerAxisTypeGet( |
| unsigned flags, MlirType storageType, MlirType expressedType, |
| intptr_t nDims, double *scales, int64_t *zeroPoints, |
| int32_t quantizedDimension, int64_t storageTypeMin, int64_t storageTypeMax); |
| |
| /// Returns the number of axes in the given quantized per-axis type. |
| MLIR_CAPI_EXPORTED intptr_t |
| mlirUniformQuantizedPerAxisTypeGetNumDims(MlirType type); |
| |
| /// Returns `pos`-th scale of the given quantized per-axis type. |
| MLIR_CAPI_EXPORTED double mlirUniformQuantizedPerAxisTypeGetScale(MlirType type, |
| intptr_t pos); |
| |
| /// Returns `pos`-th zero point of the given quantized per-axis type. |
| MLIR_CAPI_EXPORTED int64_t |
| mlirUniformQuantizedPerAxisTypeGetZeroPoint(MlirType type, intptr_t pos); |
| |
| /// Returns the index of the quantized dimension in the given quantized per-axis |
| /// type. |
| MLIR_CAPI_EXPORTED int32_t |
| mlirUniformQuantizedPerAxisTypeGetQuantizedDimension(MlirType type); |
| |
| /// Returns `true` if the given uniform quantized per-axis type is fixed-point. |
| MLIR_CAPI_EXPORTED bool |
| mlirUniformQuantizedPerAxisTypeIsFixedPoint(MlirType type); |
| |
| //===---------------------------------------------------------------------===// |
| // CalibratedQuantizedType |
| //===---------------------------------------------------------------------===// |
| |
| /// Returns `true` if the given type is a CalibratedQuantizedType. |
| MLIR_CAPI_EXPORTED bool mlirTypeIsACalibratedQuantizedType(MlirType type); |
| |
| /// Creates an instance of CalibratedQuantizedType with the given parameters |
| /// in the same context as `expressedType` and returns it. The instance is owned |
| /// by the context. |
| MLIR_CAPI_EXPORTED MlirType |
| mlirCalibratedQuantizedTypeGet(MlirType expressedType, double min, double max); |
| |
| /// Returns the min value of the given calibrated quantized type. |
| MLIR_CAPI_EXPORTED double mlirCalibratedQuantizedTypeGetMin(MlirType type); |
| |
| /// Returns the max value of the given calibrated quantized type. |
| MLIR_CAPI_EXPORTED double mlirCalibratedQuantizedTypeGetMax(MlirType type); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // MLIR_C_DIALECT_QUANT_H |