aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ValueTracking.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2023-04-18 22:49:37 -0400
committerMatt Arsenault <arsenm2@gmail.com>2023-04-24 14:25:06 -0400
commitb0aa6d76eb3aa7c1ea4abf509d5177a92bfd72a5 (patch)
treedd33aee173a87ae0c43c8ba35c1058bd45a1c68c /llvm/lib/Analysis/ValueTracking.cpp
parent167351e59673b6287e34887b39f60213faea09ba (diff)
downloadllvm-b0aa6d76eb3aa7c1ea4abf509d5177a92bfd72a5.zip
llvm-b0aa6d76eb3aa7c1ea4abf509d5177a92bfd72a5.tar.gz
llvm-b0aa6d76eb3aa7c1ea4abf509d5177a92bfd72a5.tar.bz2
ValueTracking: Fix computeKnownFPClass for fabs
The fabs utility functions have the opposite purpose and probably should not be a general utility.
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index c3e0eb7..d361bf4 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -4525,11 +4525,17 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,
if (const IntrinsicInst *II = dyn_cast<IntrinsicInst>(Op)) {
const Intrinsic::ID IID = II->getIntrinsicID();
switch (IID) {
- case Intrinsic::fabs:
- computeKnownFPClass(II->getArgOperand(0), DemandedElts,
- InterestedClasses, Known, Depth + 1, Q, TLI);
+ case Intrinsic::fabs: {
+ if ((InterestedClasses & (fcNan | fcPositive)) != fcNone) {
+ // If we only care about the sign bit we don't need to inspect the
+ // operand.
+ computeKnownFPClass(II->getArgOperand(0), DemandedElts,
+ InterestedClasses, Known, Depth + 1, Q, TLI);
+ }
+
Known.fabs();
break;
+ }
case Intrinsic::copysign: {
KnownFPClass KnownSign;