[llvm] [KnownFPClass] Split FDIV and FREM in `computeKnownFPClass` [NFC] (PR #218726)

Tim Gymnich via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 25 10:52:43 PDT 2026


================
@@ -5916,57 +5905,86 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,
       break;
 
     KnownFPClass KnownLHS, KnownRHS;
-    const bool IsFDiv = Opc == Instruction::FDiv;
-    FPClassTest InterestedRHS =
-        IsFDiv ? fcAllFlags : fcNan | fcInf | fcZero | fcNegative;
+    computeKnownFPClass(Op->getOperand(1), DemandedElts, fcAllFlags, KnownRHS,
+                        Q, Depth + 1);
 
-    computeKnownFPClass(Op->getOperand(1), DemandedElts, InterestedRHS,
-                        KnownRHS, Q, Depth + 1);
+    bool KnowSomethingUseful =
+        KnownRHS.isKnownNeverNaN() ||
+        KnownRHS.isKnownNever(fcNegNormal | fcNegSubnormal) ||
+        KnownRHS.isKnownNever(fcPosNormal | fcPosSubnormal);
 
-    bool KnowSomethingUseful = KnownRHS.isKnownNeverNaN();
-    if (IsFDiv) {
-      KnowSomethingUseful |=
-          KnownRHS.isKnownNever(fcNegNormal | fcNegSubnormal) ||
-          KnownRHS.isKnownNever(fcPosNormal | fcPosSubnormal);
-    } else {
-      KnowSomethingUseful |= KnownRHS.isKnownNever(fcNegative) ||
-                             KnownRHS.isKnownNever(fcPositive);
-    }
-
-    if (KnowSomethingUseful || (!IsFDiv && WantPositive)) {
+    if (KnowSomethingUseful)
       computeKnownFPClass(Op->getOperand(0), DemandedElts, fcAllFlags, KnownLHS,
                           Q, Depth + 1);
-    }
+
+    Known = KnownFPClass::fdiv(KnownLHS, KnownRHS, Mode);
+    break;
+  }
+  case Instruction::FRem: {
+    const bool WantNan = (InterestedClasses & fcNan) != fcNone;
+
+    Known.knownNot(fcInf);
 
     const Function *F = cast<Instruction>(Op)->getFunction();
-    const fltSemantics &FltSem =
-        Op->getType()->getScalarType()->getFltSemantics();
+    DenormalMode Mode =
+        F ? F->getDenormalMode(
+                Op->getType()->getScalarType()->getFltSemantics())
+          : DenormalMode::getDynamic();
 
-    if (IsFDiv) {
-      DenormalMode Mode =
-          F ? F->getDenormalMode(FltSem) : DenormalMode::getDynamic();
-      Known = KnownFPClass::fdiv(KnownLHS, KnownRHS, Mode);
-    } else {
-      // Inf REM x and x REM 0 produce NaN.
-      if (KnownLHS.isKnownNeverNaN() && KnownRHS.isKnownNeverNaN() &&
-          KnownLHS.isKnownNeverInfinity() && F &&
-          KnownRHS.isKnownNeverLogicalZero(F->getDenormalMode(FltSem))) {
----------------
tgymnich wrote:

yes

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


More information about the llvm-commits mailing list