[llvm] [RFC][SPIR-V] Add intrinsics to convert to/from ap.float (PR #164252)

Dmitry Sidorov via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 8 17:49:56 PST 2025


================
@@ -5848,6 +5849,39 @@ void Verifier::visitIntrinsicCall(Intrinsic::ID ID, CallBase &Call) {
           "unsupported rounding mode argument", Call);
     break;
   }
+  case Intrinsic::convert_to_arbitrary_fp:
+  case Intrinsic::convert_from_arbitrary_fp: {
+    // Check interpretation metadata (argoperand 1)
+    auto *InterpMAV = dyn_cast<MetadataAsValue>(Call.getArgOperand(1));
+    Check(InterpMAV, "missing interpretation metadata operand", Call);
+    auto *InterpStr = dyn_cast<MDString>(InterpMAV->getMetadata());
+    Check(InterpStr, "interpretation metadata operand must be a string", Call);
+    StringRef Interp = InterpStr->getString();
+
+    Check(!Interp.empty(), "interpretation metadata string must not be empty",
+          Call);
+
+    // Valid interpretation strings: mini-float format names
+    bool IsKnown = Interp == "Float8E5M2" || Interp == "Float8E5M2FNUZ" ||
+                   Interp == "Float8E4M3" || Interp == "Float8E4M3FN" ||
+                   Interp == "Float8E4M3FNUZ" || Interp == "Float8E4M3B11FNUZ" ||
+                   Interp == "Float8E3M4" || Interp == "Float8E8M0FNU" ||
+                   Interp == "Float6E3M2FN" || Interp == "Float6E2M3FN" ||
+                   Interp == "Float4E2M1FN";
----------------
MrSidims wrote:

Moved to utility function in Intrinsics.cpp

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


More information about the llvm-commits mailing list