From: Chris Lattner Date: Sun, 9 Feb 2003 19:38:11 +0000 (+0000) Subject: Implement knowledge in BasicAA that &A->field != &A and (P+1) != P X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=762d2f0897a453bab92800b7aaadb0872e98aabd;p=oota-llvm.git Implement knowledge in BasicAA that &A->field != &A and (P+1) != P git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5519 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/AliasAnalysis.cpp b/lib/Analysis/AliasAnalysis.cpp index 510db5700e8..57867dd6eed 100644 --- a/lib/Analysis/AliasAnalysis.cpp +++ b/lib/Analysis/AliasAnalysis.cpp @@ -220,5 +220,22 @@ AliasAnalysis::Result BasicAliasAnalysis::alias(const Value *V1, return NoAlias; // Unique values don't alias null } + // Check to see if these two pointers are related by a getelementptr + // instruction. If one pointer is a GEP with a non-zero index of the other + // pointer, we know they cannot alias. + // + if (isa(V2)) + std::swap(V1, V2); + + if (const GetElementPtrInst *GEP = dyn_cast(V1)) + if (GEP->getOperand(0) == V2) { + // If there is at least one non-zero constant index, we know they cannot + // alias. + for (unsigned i = 1, e = GEP->getNumOperands(); i != e; ++i) + if (const Constant *C = dyn_cast(GEP->getOperand(i))) + if (!C->isNullValue()) + return NoAlias; + } + return MayAlias; }