diff options
author | Craig Topper <craig.topper@intel.com> | 2017-08-21 22:56:12 +0000 |
---|---|---|
committer | Craig Topper <craig.topper@intel.com> | 2017-08-21 22:56:12 +0000 |
commit | 7227ebad9cc6775ee63656315811b8233cf28085 (patch) | |
tree | 93e6f2c52d922e4df9bd9623a77b19ddb8fd6109 /llvm/lib | |
parent | 416bc3d70ab774514c896f966040cdf854874c1f (diff) | |
download | bcm5719-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.cpp | 3 |
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 |