Changeset View
Changeset View
Standalone View
Standalone View
mlir/include/mlir/ExecutionEngine/SparseTensor/Enums.h
Show First 20 Lines • Show All 140 Lines • ▼ Show 20 Lines | enum class MLIR_SPARSETENSOR_EXPORT Action : uint32_t { | ||||
kToCOO = 5, | kToCOO = 5, | ||||
kToIterator = 6, | kToIterator = 6, | ||||
}; | }; | ||||
/// This enum mimics `SparseTensorEncodingAttr::DimLevelType` for | /// This enum mimics `SparseTensorEncodingAttr::DimLevelType` for | ||||
/// breaking dependency cycles. `SparseTensorEncodingAttr::DimLevelType` | /// breaking dependency cycles. `SparseTensorEncodingAttr::DimLevelType` | ||||
/// is the source of truth and this enum should be kept consistent with it. | /// is the source of truth and this enum should be kept consistent with it. | ||||
enum class MLIR_SPARSETENSOR_EXPORT DimLevelType : uint8_t { | enum class MLIR_SPARSETENSOR_EXPORT DimLevelType : uint8_t { | ||||
kDense = 0, | kDense = 4, // 0b001_00 | ||||
kCompressed = 1, | kCompressed = 8, // 0b010_00 | ||||
kCompressedNu = 2, | kCompressedNu = 9, // 0b010_01 | ||||
kCompressedNo = 3, | kCompressedNo = 10, // 0b010_10 | ||||
kCompressedNuNo = 4, | kCompressedNuNo = 11, // 0b010_11 | ||||
kSingleton = 5, | kSingleton = 16, // 0b100_00 | ||||
kSingletonNu = 6, | kSingletonNu = 17, // 0b100_01 | ||||
kSingletonNo = 7, | kSingletonNo = 18, // 0b100_10 | ||||
kSingletonNuNo = 8, | kSingletonNuNo = 19, // 0b100_11 | ||||
}; | }; | ||||
/// Check if the `DimLevelType` is dense. | /// Check if the `DimLevelType` is dense. | ||||
constexpr MLIR_SPARSETENSOR_EXPORT bool isDenseDLT(DimLevelType dlt) { | constexpr MLIR_SPARSETENSOR_EXPORT bool isDenseDLT(DimLevelType dlt) { | ||||
return dlt == DimLevelType::kDense; | return dlt == DimLevelType::kDense; | ||||
} | } | ||||
/// Check if the `DimLevelType` is compressed (regardless of properties). | /// Check if the `DimLevelType` is compressed (regardless of properties). | ||||
constexpr MLIR_SPARSETENSOR_EXPORT bool isCompressedDLT(DimLevelType dlt) { | constexpr MLIR_SPARSETENSOR_EXPORT bool isCompressedDLT(DimLevelType dlt) { | ||||
switch (dlt) { | return static_cast<uint8_t>(dlt) & | ||||
case DimLevelType::kCompressed: | static_cast<uint8_t>(DimLevelType::kCompressed); | ||||
case DimLevelType::kCompressedNu: | |||||
case DimLevelType::kCompressedNo: | |||||
case DimLevelType::kCompressedNuNo: | |||||
return true; | |||||
default: | |||||
return false; | |||||
} | |||||
} | } | ||||
/// Check if the `DimLevelType` is singleton (regardless of properties). | /// Check if the `DimLevelType` is singleton (regardless of properties). | ||||
constexpr MLIR_SPARSETENSOR_EXPORT bool isSingletonDLT(DimLevelType dlt) { | constexpr MLIR_SPARSETENSOR_EXPORT bool isSingletonDLT(DimLevelType dlt) { | ||||
switch (dlt) { | return static_cast<uint8_t>(dlt) & | ||||
case DimLevelType::kSingleton: | static_cast<uint8_t>(DimLevelType::kSingleton); | ||||
case DimLevelType::kSingletonNu: | |||||
case DimLevelType::kSingletonNo: | |||||
case DimLevelType::kSingletonNuNo: | |||||
return true; | |||||
default: | |||||
return false; | |||||
} | |||||
} | } | ||||
/// Check if the `DimLevelType` is ordered (regardless of storage format). | /// Check if the `DimLevelType` is ordered (regardless of storage format). | ||||
constexpr MLIR_SPARSETENSOR_EXPORT bool isOrderedDLT(DimLevelType dlt) { | constexpr MLIR_SPARSETENSOR_EXPORT bool isOrderedDLT(DimLevelType dlt) { | ||||
switch (dlt) { | return !(static_cast<uint8_t>(dlt) & 2); | ||||
case DimLevelType::kCompressedNo: | |||||
case DimLevelType::kCompressedNuNo: | |||||
case DimLevelType::kSingletonNo: | |||||
case DimLevelType::kSingletonNuNo: | |||||
return false; | |||||
default: | |||||
return true; | |||||
} | |||||
} | } | ||||
/// Check if the `DimLevelType` is unique (regardless of storage format). | /// Check if the `DimLevelType` is unique (regardless of storage format). | ||||
constexpr MLIR_SPARSETENSOR_EXPORT bool isUniqueDLT(DimLevelType dlt) { | constexpr MLIR_SPARSETENSOR_EXPORT bool isUniqueDLT(DimLevelType dlt) { | ||||
switch (dlt) { | return !(static_cast<uint8_t>(dlt) & 1); | ||||
case DimLevelType::kCompressedNu: | |||||
case DimLevelType::kCompressedNuNo: | |||||
case DimLevelType::kSingletonNu: | |||||
case DimLevelType::kSingletonNuNo: | |||||
return false; | |||||
default: | |||||
return true; | |||||
} | |||||
} | } | ||||
// Ensure the above predicates work as intended. | |||||
static_assert((!isCompressedDLT(DimLevelType::kDense) && | |||||
isCompressedDLT(DimLevelType::kCompressed) && | |||||
isCompressedDLT(DimLevelType::kCompressedNu) && | |||||
isCompressedDLT(DimLevelType::kCompressedNo) && | |||||
isCompressedDLT(DimLevelType::kCompressedNuNo) && | |||||
!isCompressedDLT(DimLevelType::kSingleton) && | |||||
!isCompressedDLT(DimLevelType::kSingletonNu) && | |||||
!isCompressedDLT(DimLevelType::kSingletonNo) && | |||||
!isCompressedDLT(DimLevelType::kSingletonNuNo)), | |||||
"isCompressedDLT definition is broken"); | |||||
static_assert((!isSingletonDLT(DimLevelType::kDense) && | |||||
!isSingletonDLT(DimLevelType::kCompressed) && | |||||
!isSingletonDLT(DimLevelType::kCompressedNu) && | |||||
!isSingletonDLT(DimLevelType::kCompressedNo) && | |||||
!isSingletonDLT(DimLevelType::kCompressedNuNo) && | |||||
isSingletonDLT(DimLevelType::kSingleton) && | |||||
isSingletonDLT(DimLevelType::kSingletonNu) && | |||||
isSingletonDLT(DimLevelType::kSingletonNo) && | |||||
isSingletonDLT(DimLevelType::kSingletonNuNo)), | |||||
"isSingletonDLT definition is broken"); | |||||
static_assert((isOrderedDLT(DimLevelType::kDense) && | |||||
isOrderedDLT(DimLevelType::kCompressed) && | |||||
isOrderedDLT(DimLevelType::kCompressedNu) && | |||||
!isOrderedDLT(DimLevelType::kCompressedNo) && | |||||
!isOrderedDLT(DimLevelType::kCompressedNuNo) && | |||||
isOrderedDLT(DimLevelType::kSingleton) && | |||||
isOrderedDLT(DimLevelType::kSingletonNu) && | |||||
!isOrderedDLT(DimLevelType::kSingletonNo) && | |||||
!isOrderedDLT(DimLevelType::kSingletonNuNo)), | |||||
"isOrderedDLT definition is broken"); | |||||
static_assert((isUniqueDLT(DimLevelType::kDense) && | |||||
isUniqueDLT(DimLevelType::kCompressed) && | |||||
!isUniqueDLT(DimLevelType::kCompressedNu) && | |||||
isUniqueDLT(DimLevelType::kCompressedNo) && | |||||
!isUniqueDLT(DimLevelType::kCompressedNuNo) && | |||||
isUniqueDLT(DimLevelType::kSingleton) && | |||||
!isUniqueDLT(DimLevelType::kSingletonNu) && | |||||
isUniqueDLT(DimLevelType::kSingletonNo) && | |||||
!isUniqueDLT(DimLevelType::kSingletonNuNo)), | |||||
"isUniqueDLT definition is broken"); | |||||
} // namespace sparse_tensor | } // namespace sparse_tensor | ||||
} // namespace mlir | } // namespace mlir | ||||
#endif // MLIR_EXECUTIONENGINE_SPARSETENSOR_ENUMS_H | #endif // MLIR_EXECUTIONENGINE_SPARSETENSOR_ENUMS_H |