[Mlir-commits] [mlir] [mlir][tosa] Add constant block scaled support (PR #205506)
Sayan Saha
llvmlistbot at llvm.org
Tue Jul 7 18:08:37 PDT 2026
================
@@ -771,6 +825,43 @@ LogicalResult OpTrait::tosa::verifyBlockScaledTensorType(Operation &op,
return success();
}
+LogicalResult OpTrait::tosa::verifyBlockScaledTensorType(Operation &op,
+ mlir::Type type) {
+ return ::verifyBlockScaledTensorType(op, type, /*allowScaleValues=*/false);
+}
+
+size_t mlir::tosa::BlockScaledType::getDenseElementBitSize() const {
+ const Type valueType = getValueType();
+ if (isa<tosa::mxint8Type>(valueType))
+ return 8;
+ return valueType.getIntOrFloatBitWidth();
+}
+
+Attribute
+mlir::tosa::BlockScaledType::convertToAttribute(ArrayRef<char> rawData) const {
+ assert(rawData.size() == 1 && "expected 1 byte for block_scaled element");
+ const Type valueType = getValueType();
+ if (const auto mxint8Value = dyn_cast<tosa::mxint8Type>(valueType))
+ return mxint8Value.convertToAttribute(rawData);
+ if (!isa<FloatType>(valueType))
+ return {};
+ return mlir::detail::convertFloatTypeToAttribute(valueType, rawData);
+}
+
+LogicalResult mlir::tosa::BlockScaledType::convertFromAttribute(
+ Attribute attr, SmallVectorImpl<char> &result) const {
+ const Type valueType = getValueType();
+ if (const auto mxint8Value = dyn_cast<tosa::mxint8Type>(valueType))
+ return mxint8Value.convertFromAttribute(attr, result);
+
+ const auto floatAttr = dyn_cast<FloatAttr>(attr);
+ if (!floatAttr || floatAttr.getType() != valueType)
+ return failure();
+ const APFloat value = floatAttr.getValue();
+ return mlir::detail::convertFloatTypeFromAttribute(
+ valueType, FloatAttr::get(valueType, value), result);
----------------
sahas3 wrote:
```suggestion
valueType, floatAttr, result);
```
https://github.com/llvm/llvm-project/pull/205506
More information about the Mlir-commits
mailing list