[llvm] ValueTracking: Improve handling of fadd in computeKnownFPClass. (PR #174123)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 3 02:26:45 PST 2026
================
@@ -5640,18 +5644,29 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,
if (KnownLHS.cannotBeOrderedLessThanZero() &&
KnownRHS.cannotBeOrderedLessThanZero())
Known.knownNot(KnownFPClass::OrderedLessThanZeroMask);
+ if (KnownLHS.cannotBeOrderedGreaterThanZero() &&
+ KnownRHS.cannotBeOrderedGreaterThanZero())
+ Known.knownNot(KnownFPClass::OrderedGreaterThanZeroMask);
+
if (!F)
break;
const fltSemantics &FltSem =
Op->getType()->getScalarType()->getFltSemantics();
DenormalMode Mode = F->getDenormalMode(FltSem);
+ // Doubling 0 will give the same 0.
+ if (SelfAdd && KnownRHS.isKnownNeverLogicalPosZero(Mode) &&
+ (Mode.Output == DenormalMode::IEEE ||
+ Mode.Output == DenormalMode::PreserveSign))
+ Known.knownNot(fcPosZero);
+
// (fadd x, 0.0) is guaranteed to return +0.0, not -0.0.
if ((KnownLHS.isKnownNeverLogicalNegZero(Mode) ||
KnownRHS.isKnownNeverLogicalNegZero(Mode)) &&
// Make sure output negative denormal can't flush to -0
- outputDenormalIsIEEEOrPosZero(*F, Op->getType()))
+ (Mode.Output == DenormalMode::IEEE ||
----------------
arsenm wrote:
No? If the sign is preserved this will flush to -0
https://github.com/llvm/llvm-project/pull/174123
More information about the llvm-commits
mailing list