From: Chris Lattner Date: Thu, 11 Dec 2003 06:02:00 +0000 (+0000) Subject: Realize the gep P, must aliases P. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=88d3e03429bf3b0e78b1cccbad8a9246a7fdb23e;p=oota-llvm.git Realize the gep P, must aliases P. This is a partial fix for PR 86 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@10399 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index 30249171c13..b5a72f002e9 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -175,12 +175,22 @@ BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size, // If there is at least one non-zero constant index, we know they cannot // alias. bool ConstantFound = false; + bool AllZerosFound = true; for (unsigned i = 1, e = GEP->getNumOperands(); i != e; ++i) - if (const Constant *C = dyn_cast(GEP->getOperand(i))) + if (const Constant *C = dyn_cast(GEP->getOperand(i))) { if (!C->isNullValue()) { ConstantFound = true; break; + } + } else { + AllZerosFound = false; } + + // If we have getelementptr , 0, 0, 0, 0, ... and V2 must aliases + // the ptr, the end result is a must alias also. + if (AllZerosFound) + return MustAlias; + if (ConstantFound) { if (V2Size <= 1 && V1Size <= 1) // Just pointer check? return NoAlias;