aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ValueTracking.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2023-04-08 19:15:26 -0400
committerMatt Arsenault <arsenm2@gmail.com>2023-04-14 14:36:55 -0400
commitc603fd2f39beab13cd1df700467afcc324ec1d85 (patch)
tree4a163dfb20f0837af0d8ff535ec713cb8ac2f939 /llvm/lib/Analysis/ValueTracking.cpp
parent64ae7669a7cefa12ea1117680cf9bfb5c3f6084c (diff)
downloadllvm-c603fd2f39beab13cd1df700467afcc324ec1d85.zip
llvm-c603fd2f39beab13cd1df700467afcc324ec1d85.tar.gz
llvm-c603fd2f39beab13cd1df700467afcc324ec1d85.tar.bz2
ValueTracking: Implement computeKnownFPClass for sin/cos
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 8a23100..48a9dc1 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -4437,6 +4437,17 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,
Known.copysign(KnownSign);
break;
}
+ case Intrinsic::sin:
+ case Intrinsic::cos: {
+ // Return NaN on infinite inputs.
+ KnownFPClass KnownSrc;
+ computeKnownFPClass(II->getArgOperand(0), DemandedElts,
+ InterestedClasses, KnownSrc, Depth + 1, Q, TLI);
+ Known.knownNot(fcInf);
+ if (KnownSrc.isKnownNeverNaN() && KnownSrc.isKnownNeverInfinity())
+ Known.knownNot(fcNan);
+ break;
+ }
default:
break;
}