[llvm] ValueTracking: Move sin/cos computeKnownFPClass handling to support (PR #178240)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jan 27 07:46:10 PST 2026
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-support
@llvm/pr-subscribers-llvm-analysis
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
These are the same for now but keep the separate names for future
use.
---
Full diff: https://github.com/llvm/llvm-project/pull/178240.diff
3 Files Affected:
- (modified) llvm/include/llvm/Support/KnownFPClass.h (+6)
- (modified) llvm/lib/Analysis/ValueTracking.cpp (+2-3)
- (modified) llvm/lib/Support/KnownFPClass.cpp (+15)
``````````diff
diff --git a/llvm/include/llvm/Support/KnownFPClass.h b/llvm/include/llvm/Support/KnownFPClass.h
index b222bbe7bad9a..2ce4fcbe34bba 100644
--- a/llvm/include/llvm/Support/KnownFPClass.h
+++ b/llvm/include/llvm/Support/KnownFPClass.h
@@ -284,6 +284,12 @@ struct KnownFPClass {
/// Report known values for exp, exp2 and exp10.
LLVM_ABI static KnownFPClass exp(const KnownFPClass &Src);
+ /// Report known values for sin
+ LLVM_ABI static KnownFPClass sin(const KnownFPClass &Src);
+
+ /// Report known values for cos
+ LLVM_ABI static KnownFPClass cos(const KnownFPClass &Src);
+
/// Return true if the sign bit must be 0, ignoring the sign of nans.
bool signBitIsZeroOrNaN() const { return isKnownNever(fcNegative); }
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index a02ec1983b9b3..ffd26e55eac29 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -5218,9 +5218,8 @@ void computeKnownFPClass(const Value *V, const APInt &DemandedElts,
KnownFPClass KnownSrc;
computeKnownFPClass(II->getArgOperand(0), DemandedElts, InterestedClasses,
KnownSrc, Q, Depth + 1);
- Known.knownNot(fcInf);
- if (KnownSrc.isKnownNeverNaN() && KnownSrc.isKnownNeverInfinity())
- Known.knownNot(fcNan);
+ Known = IID == Intrinsic::sin ? KnownFPClass::sin(KnownSrc)
+ : KnownFPClass::cos(KnownSrc);
break;
}
case Intrinsic::maxnum:
diff --git a/llvm/lib/Support/KnownFPClass.cpp b/llvm/lib/Support/KnownFPClass.cpp
index 30b355f8d4c90..6e92322ab4fe2 100644
--- a/llvm/lib/Support/KnownFPClass.cpp
+++ b/llvm/lib/Support/KnownFPClass.cpp
@@ -521,6 +521,21 @@ KnownFPClass KnownFPClass::sqrt(const KnownFPClass &KnownSrc,
return Known;
}
+KnownFPClass KnownFPClass::sin(const KnownFPClass &KnownSrc) {
+ KnownFPClass Known;
+
+ // Return NaN on infinite inputs.
+ Known.knownNot(fcInf);
+ if (KnownSrc.isKnownNeverNaN() && KnownSrc.isKnownNeverInfinity())
+ Known.knownNot(fcNan);
+
+ return Known;
+}
+
+KnownFPClass KnownFPClass::cos(const KnownFPClass &KnownSrc) {
+ return sin(KnownSrc);
+}
+
KnownFPClass KnownFPClass::fpext(const KnownFPClass &KnownSrc,
const fltSemantics &DstTy,
const fltSemantics &SrcTy) {
``````````
</details>
https://github.com/llvm/llvm-project/pull/178240
More information about the llvm-commits
mailing list