[llvm] [llubi] Initial support for floating-point numbers (PR #188453)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Thu Mar 26 08:00:15 PDT 2026


================
@@ -219,6 +277,37 @@ class InstExecutor : public InstVisitor<InstExecutor, void> {
     });
   }
 
+  void visitFPBinOp(
+      Instruction &I,
+      function_ref<AnyValue(const APFloat &, const APFloat &)> ScalarFn) {
+    FastMathFlags FMF = cast<FPMathOperator>(I).getFastMathFlags();
+    DenormalMode DenormMode = CurrentFrame->Func.getDenormalMode(
+        I.getType()->getScalarType()->getFltSemantics());
+
+    visitBinOp(I, [&](const AnyValue &LHS, const AnyValue &RHS) -> AnyValue {
+      if (LHS.isPoison() || RHS.isPoison())
+        return AnyValue::poison();
+
+      if (auto ValidateRes = handleFMFFlags(LHS, FMF); ValidateRes.isPoison()) {
+        return ValidateRes;
+      }
+      if (auto ValidateRes = handleFMFFlags(RHS, FMF); ValidateRes.isPoison()) {
+        return ValidateRes;
+      }
+
+      // Flush input denormals
+      APFloat FLHS = handleDenormal(LHS.asFloat(), DenormMode.Input);
+      APFloat FRHS = handleDenormal(RHS.asFloat(), DenormMode.Input);
+
+      APFloat Result = ScalarFn(FLHS, FRHS).asFloat();
+
+      // Flush output denormals
+      APFloat FResult = handleDenormal(Result, DenormMode.Output);
+
+      return handleFMFFlags(FResult, FMF);
----------------
nikic wrote:

Though of course we should have an option for deterministic execution as well, similar to `-undef-behavior`.

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


More information about the llvm-commits mailing list