summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
authorCraig Topper <craig.topper@intel.com>2017-08-21 22:56:12 +0000
committerCraig Topper <craig.topper@intel.com>2017-08-21 22:56:12 +0000
commit7227ebad9cc6775ee63656315811b8233cf28085 (patch)
tree93e6f2c52d922e4df9bd9623a77b19ddb8fd6109 /llvm/lib
parent416bc3d70ab774514c896f966040cdf854874c1f (diff)
downloadbcm5719-llvm-7227ebad9cc6775ee63656315811b8233cf28085.tar.gz
bcm5719-llvm-7227ebad9cc6775ee63656315811b8233cf28085.zip
[ValueTracking] Add assertions that the starting Depth in isKnownToBeAPowerOfTwo and ComputeNumSignBitsImpl is not above MaxDepth
The function does an equality check later to terminate the recursion, but that won't work if its starts out too high. Similar assert already exists in computeKnownBits. llvm-svn: 311400
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index d936c48a3a6..4bf17b1502b 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -1562,6 +1562,8 @@ void computeKnownBits(const Value *V, KnownBits &Known, unsigned Depth,
/// types and vectors of integers.
bool isKnownToBeAPowerOfTwo(const Value *V, bool OrZero, unsigned Depth,
const Query &Q) {
+ assert(Depth <= MaxDepth && "Limit Search Depth");
+
if (const Constant *C = dyn_cast<Constant>(V)) {
if (C->isNullValue())
return OrZero;
@@ -2021,6 +2023,7 @@ static unsigned ComputeNumSignBits(const Value *V, unsigned Depth,
/// vector element with the mininum number of known sign bits.
static unsigned ComputeNumSignBitsImpl(const Value *V, unsigned Depth,
const Query &Q) {
+ assert(Depth <= MaxDepth && "Limit Search Depth");
// We return the minimum number of sign bits that are guaranteed to be present
// in V, so for undef we have to conservatively return 1. We don't have the
OpenPOWER on IntegriCloud