[Mlir-commits] [mlir] [MLIR][NVVM] Update support for conversions to f8x2 and f6x2 types (PR #137781)

Durgadoss R llvmlistbot at llvm.org
Fri May 2 09:41:21 PDT 2025


================
@@ -133,6 +133,66 @@ LogicalResult CvtFloatToTF32Op::verify() {
   return success();
 }
 
+LogicalResult CvtFloatToF8x2Op::verify() {
+  using RndMode = NVVM::FPRoundingMode;
+  using SatMode = NVVM::SaturationMode;
+
+  bool isRoundingModeRN = getRnd() == RndMode::RN;
+  bool isRoundingModeRZ = getRnd() == RndMode::RZ;
+  bool isRoundingModeRP = getRnd() == RndMode::RP;
+  bool isSatFinite = getSat() == SatMode::SATFINITE;
+
+  bool hasRelu = getRelu();
+
+  switch (getType()) {
+  case CVTFP8Type::E4M3:
+  case CVTFP8Type::E5M2:
+    if (!(isRoundingModeRN && isSatFinite))
+      return emitOpError(
+          "Only RN rounding mode and SATFINITE saturation mode "
+          "are supported for conversions to .e4m3x2 or .e5m2x2 types from f32");
+    break;
+  case CVTFP8Type::UE8M0:
+    if (!(isRoundingModeRZ || isRoundingModeRP))
+      return emitOpError("Only RZ or RP rounding modes are supported for "
+                         "conversions to .ue8m0x2 type from f32");
+    if (hasRelu)
+      return emitOpError("relu not supported for conversions to .ue8m0x2 type");
+    break;
+  }
+  return success();
+}
+
+LogicalResult CvtF16x2ToF8x2Op::verify() {
+  switch (getType()) {
+  case CVTFP8Type::E4M3:
+  case CVTFP8Type::E5M2:
+    break;
+  case CVTFP8Type::UE8M0:
+    return emitOpError("Only .e4m3 or .e5m2 types are supported for "
+                       "conversions from f16x2 to f8x2.");
----------------
durga4github wrote:

Since this is only one type being checked now, we can just use an if-check:
if (type == ue8m0) emitError(...)

https://github.com/llvm/llvm-project/pull/137781


More information about the Mlir-commits mailing list