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

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Tue May 5 05:20:20 PDT 2026


================
@@ -126,22 +129,46 @@ class InstExecutor : public InstVisitor<InstExecutor, void>,
     return Val;
   }
 
-  NaNPropagationBehavior resolveNaNPropagationBehavior() {
-    NaNPropagationBehavior Choice = Ctx.getNaNPropagationBehavior();
-    if (Choice == NaNPropagationBehavior::NonDeterministic) {
-      uint64_t NonDetChoice = Ctx.getRandomUInt64() % 4 + 1;
-      Choice = static_cast<NaNPropagationBehavior>(NonDetChoice);
-    }
-    return Choice;
+  void addNaNCandidate(SmallVectorImpl<APFloat> &Candidates,
+                       APFloat Candidate) {
+    APInt Bits = Candidate.bitcastToAPInt();
+    if (any_of(Candidates, [&](const APFloat &Existing) {
+          return Existing.bitcastToAPInt() == Bits;
+        }))
+      return;
+    Candidates.push_back(std::move(Candidate));
+  }
+
+  APFloat pickNaNCandidate(ArrayRef<APFloat> Candidates) {
+    assert(!Candidates.empty() && "Need at least one NaN candidate.");
+    return Candidates[Ctx.getRandomUInt64() % Candidates.size()];
   }
 
-  const APFloat &pickNaNSource(ArrayRef<const APFloat *> Inputs,
-                               const APFloat &Fallback) {
+  APInt getRandomNaNPayload(const fltSemantics &Sem) {
+    const unsigned NumBits = Sem.precision - 1;
+    SmallVector<APInt::WordType, 2> RandomWords;
+    const unsigned NumWords = APInt::getNumWords(NumBits);
+    RandomWords.reserve(NumWords);
+    for (unsigned I = 0; I != NumWords; ++I)
+      RandomWords.push_back(Ctx.getRandomUInt64());
+    return APInt(NumBits, RandomWords);
+  }
+
+  bool isPreferredNaN(const APFloat &Val) {
+    assert(Val.isNaN() && "Expected NaN.");
+    const APFloat Preferred =
+        APFloat::getQNaN(Val.getSemantics(), Val.isNegative());
+    return Val.bitcastToAPInt() == Preferred.bitcastToAPInt();
----------------
nikic wrote:

Use bitwiseIsEqual() instead?

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


More information about the llvm-commits mailing list