summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Analysis
diff options
context:
space:
mode:
authorWojciech Matyjewicz <wmatyjewicz@fastmail.fm>2007-12-13 16:22:58 +0000
committerWojciech Matyjewicz <wmatyjewicz@fastmail.fm>2007-12-13 16:22:58 +0000
commit86d51b896ea8ff4fe3dc78a0b302286e80ead920 (patch)
tree271b06d17c68f5bbfb4ab48652553636e0b9e253 /llvm/lib/Analysis
parenta5be19d3df1da35e1a091c1d063192e922c58ab0 (diff)
downloadbcm5719-llvm-86d51b896ea8ff4fe3dc78a0b302286e80ead920.tar.gz
bcm5719-llvm-86d51b896ea8ff4fe3dc78a0b302286e80ead920.zip
Make these loops follow GetGEPOperands() behavior.
Let: %q = GEP %p, X, ... If %p is a GEP, we can chase baseptr further, only if X==0. llvm-svn: 44999
Diffstat (limited to 'llvm/lib/Analysis')
-rw-r--r--llvm/lib/Analysis/BasicAliasAnalysis.cpp24
1 files changed, 13 insertions, 11 deletions
diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
index 557d521546c..7ce9d1651f7 100644
--- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp
+++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp
@@ -391,17 +391,19 @@ BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size,
if (isGEP(V1) && isGEP(V2)) {
// Drill down into the first non-gep value, to test for must-aliasing of
// the base pointers.
- const Value *BasePtr1 = V1, *BasePtr2 = V2;
- do {
- BasePtr1 = cast<User>(BasePtr1)->getOperand(0);
- } while (isGEP(BasePtr1) &&
- cast<User>(BasePtr1)->getOperand(1) ==
- Constant::getNullValue(cast<User>(BasePtr1)->getOperand(1)->getType()));
- do {
- BasePtr2 = cast<User>(BasePtr2)->getOperand(0);
- } while (isGEP(BasePtr2) &&
- cast<User>(BasePtr2)->getOperand(1) ==
- Constant::getNullValue(cast<User>(BasePtr2)->getOperand(1)->getType()));
+ const User *G = cast<User>(V1);
+ while (isGEP(G->getOperand(0)) &&
+ G->getOperand(1) ==
+ Constant::getNullValue(G->getOperand(1)->getType()))
+ G = cast<User>(G->getOperand(0));
+ const Value *BasePtr1 = G->getOperand(0);
+
+ G = cast<User>(V2);
+ while (isGEP(G->getOperand(0)) &&
+ G->getOperand(1) ==
+ Constant::getNullValue(G->getOperand(1)->getType()))
+ G = cast<User>(G->getOperand(0));
+ const Value *BasePtr2 = G->getOperand(0);
// Do the base pointers alias?
AliasResult BaseAlias = alias(BasePtr1, ~0U, BasePtr2, ~0U);
OpenPOWER on IntegriCloud