aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/ValueTracking.cpp
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2020-05-02 11:47:04 +0200
committerNikita Popov <nikita.ppv@gmail.com>2020-05-02 12:29:26 +0200
commit8148b116474614c176d69de8c246fc21494faf5f (patch)
tree65af29f7b3d28b0e6e3f9a9dd73bfbd7ae18543b /llvm/lib/Analysis/ValueTracking.cpp
parentb7e2358220f26ee82e0e958f2d691d2f00341a0a (diff)
downloadllvm-8148b116474614c176d69de8c246fc21494faf5f.zip
llvm-8148b116474614c176d69de8c246fc21494faf5f.tar.gz
llvm-8148b116474614c176d69de8c246fc21494faf5f.tar.bz2
[ValueTracking] Short-circuit GEP known bits calculation (NFC)
Don't compute known bits of all GEP operands, if we already know that we don't know anything.
Diffstat (limited to 'llvm/lib/Analysis/ValueTracking.cpp')
-rw-r--r--llvm/lib/Analysis/ValueTracking.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 6fbf246..3d1e627 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -1454,6 +1454,10 @@ static void computeKnownBitsFromOperator(const Operator *I,
gep_type_iterator GTI = gep_type_begin(I);
for (unsigned i = 1, e = I->getNumOperands(); i != e; ++i, ++GTI) {
+ // TrailZ can only become smaller, short-circuit if we hit zero.
+ if (TrailZ == 0)
+ break;
+
Value *Index = I->getOperand(i);
if (StructType *STy = GTI.getStructTypeOrNull()) {
// Handle struct member offset arithmetic.