summaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ValueTracking.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2023-04-17 22:14:36 -0400
committerMatt Arsenault <arsenm2@gmail.com>2023-05-17 23:40:06 +0100
commitdd61b63b5ca1c8a15013e2154bf3b30243df66bd (patch)
tree20ac548e78dfabddf682bf7b3fe8f2f28857c71d /llvm/lib/Analysis/ValueTracking.cpp
parent6666969a08001c37b564cdd9e8da7b5c7291788c (diff)
downloadllvm-dd61b63b5ca1c8a15013e2154bf3b30243df66bd.tar.gz
ValueTracking: Handle sign bit for fptrunc in computeKnownFPClass
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 37414de4c240..05ed497b7601 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -4617,17 +4617,22 @@ static void computeKnownFPClassForFPTrunc(const Operator *Op,
KnownFPClass &Known, unsigned Depth,
const Query &Q,
const TargetLibraryInfo *TLI) {
- if ((InterestedClasses & fcNan) == fcNone)
+ if ((InterestedClasses &
+ (KnownFPClass::OrderedLessThanZeroMask | fcNan)) == fcNone)
return;
KnownFPClass KnownSrc;
computeKnownFPClass(Op->getOperand(0), DemandedElts, InterestedClasses,
KnownSrc, Depth + 1, Q, TLI);
- if (KnownSrc.isKnownNeverNaN())
- Known.knownNot(fcNan);
+
+ // Sign should be preserved
+ // TODO: Handle cannot be ordered greater than zero
+ if (KnownSrc.cannotBeOrderedLessThanZero())
+ Known.knownNot(KnownFPClass::OrderedLessThanZeroMask);
+
+ Known.propagateNaN(KnownSrc, true);
// Infinity needs a range check.
- // TODO: Sign bit should be preserved
}
// TODO: Merge implementations of isKnownNeverNaN, isKnownNeverInfinity,