summaryrefslogtreecommitdiffstats
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
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
-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