[Mlir-commits] [mlir] [mlir][tosa] Add F32 to F16 type narrowing pass (PR #218900)
Luke Hutton
llvmlistbot at llvm.org
Tue Sep 1 07:57:58 PDT 2026
================
@@ -263,13 +276,27 @@ FailureOr<Attribute> convertDenseResourceElementsAttr(
return attr;
}
- auto narrow = [](From value) {
+ if (Kind == TosaNarrowKind::Float32ToFloat16 &&
+ !isa<DenseF32ResourceElementsAttr>(attr)) {
+ return attr;
+ }
+
+ auto narrow = [](From value) -> std::pair<To, bool> {
if constexpr (Kind == TosaNarrowKind::Int64ToInt32) {
- value = std::clamp<From>(value, std::numeric_limits<To>::min(),
- std::numeric_limits<To>::max());
+ From clamped = std::clamp<From>(value, std::numeric_limits<To>::min(),
+ std::numeric_limits<To>::max());
+ return {static_cast<To>(clamped), clamped != value};
+ } else if constexpr (Kind == TosaNarrowKind::Float64ToFloat32) {
+ To converted = static_cast<To>(value);
+ return {converted, converted != value};
+ } else {
+ APFloat converted(value);
+ bool losesInfo = false;
+ converted.convert(APFloat::IEEEhalf(), APFloat::rmNearestTiesToEven,
+ &losesInfo);
+ return {static_cast<To>(converted.bitcastToAPInt().getZExtValue()),
----------------
lhutton1 wrote:
As a follow up for the question above, can `convertFloatConstant` handle this?
https://github.com/llvm/llvm-project/pull/218900
More information about the Mlir-commits
mailing list