[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