[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