[llvm-branch-commits] [llvm] InstCombine: Handle fdiv in SimplifyDemandedFPClass (PR #175946)
Yingwei Zheng via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Wed Jan 14 10:08:46 PST 2026
================
@@ -332,6 +332,52 @@ KnownFPClass KnownFPClass::fmul(const KnownFPClass &KnownLHS,
return Known;
}
+KnownFPClass KnownFPClass::fdiv(const KnownFPClass &KnownLHS,
+ const KnownFPClass &KnownRHS,
+ DenormalMode Mode) {
+ KnownFPClass Known;
+
+ // Only 0/0, Inf/Inf produce NaN.
+ if (KnownLHS.isKnownNeverNaN() && KnownRHS.isKnownNeverNaN() &&
+ (KnownLHS.isKnownNeverInfinity() || KnownRHS.isKnownNeverInfinity()) &&
+ (KnownLHS.isKnownNeverLogicalZero(Mode) ||
+ KnownRHS.isKnownNeverLogicalZero(Mode))) {
+ Known.knownNot(fcNan);
+ }
+
+ // xor sign bit.
+ // X / -0.0 is -Inf (or NaN).
+ // +X / +X is +X
+ if ((KnownLHS.isKnownNever(fcNegative) &&
+ KnownRHS.isKnownNever(fcNegative)) ||
+ (KnownLHS.isKnownNever(fcPositive) && KnownRHS.isKnownNever(fcPositive)))
+ Known.knownNot(fcNegative);
+
+ if ((KnownLHS.isKnownNever(fcPositive) &&
+ KnownRHS.isKnownNever(fcNegative)) ||
+ (KnownLHS.isKnownNever(fcNegative) && KnownRHS.isKnownNever(fcPositive)))
+ Known.knownNot(fcPositive);
+
+ // 0 / x => 0 or nan
+ if (KnownLHS.isKnownAlways(fcZero))
+ Known.knownNot(fcSubnormal | fcNormal | fcInf);
+
+ // x / 0 => nan or inf
+ if (KnownRHS.isKnownAlways(fcZero))
+ Known.knownNot(fcFinite);
+
+ return Known;
+}
+
+KnownFPClass KnownFPClass::fdiv_self(const KnownFPClass &KnownSrc,
+ DenormalMode Mode) {
+ // X / X is always exactly 1.0 or a NaN.
+ KnownFPClass Known(fcNan | fcPosNormal);
+
+ // Known.propagateNaN(KnownSrc);
----------------
dtcxzyw wrote:
Unused?
https://github.com/llvm/llvm-project/pull/175946
More information about the llvm-branch-commits
mailing list