aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ValueTracking.cpp
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2022-12-04 08:29:17 -0500
committerMatt Arsenault <Matthew.Arsenault@amd.com>2022-12-20 12:45:07 -0500
commit4e37d00b9dcd88dbe76ad1d3c6d7cb84b8dd28aa (patch)
treea242715c423fdc18833d537aaaf66cb931da56e7 /llvm/lib/Analysis/ValueTracking.cpp
parent2bfe62ed6a52e2ac92ead8203afe585e5da3c83a (diff)
downloadllvm-4e37d00b9dcd88dbe76ad1d3c6d7cb84b8dd28aa.zip
llvm-4e37d00b9dcd88dbe76ad1d3c6d7cb84b8dd28aa.tar.gz
llvm-4e37d00b9dcd88dbe76ad1d3c6d7cb84b8dd28aa.tar.bz2
ValueTracking: Teach isKnownNeverInfinity about rounding intrinsics
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 36fcec9..c25506e 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -3807,7 +3807,21 @@ bool llvm::isKnownNeverInfinity(const Value *V, const TargetLibraryInfo *TLI,
case Intrinsic::canonicalize:
case Intrinsic::copysign:
case Intrinsic::arithmetic_fence:
+ case Intrinsic::trunc:
return isKnownNeverInfinity(Inst->getOperand(0), TLI, Depth + 1);
+ case Intrinsic::floor:
+ case Intrinsic::ceil:
+ case Intrinsic::rint:
+ case Intrinsic::nearbyint:
+ case Intrinsic::round:
+ case Intrinsic::roundeven:
+ // PPC_FP128 is a special case.
+ if (V->getType()->isMultiUnitFPType())
+ return false;
+ return isKnownNeverInfinity(Inst->getOperand(0), TLI, Depth + 1);
+ case Intrinsic::fptrunc_round:
+ // Requires knowing the value range.
+ return false;
default:
break;
}