Author: wmat Date: Thu Dec 13 10:22:58 2007 New Revision: 44999 URL: http://llvm.org/viewvc/llvm-project?rev=44999&view=rev Log: 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.
Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=44999&r1=44998&r2=44999&view=diff ============================================================================== --- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original) +++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Thu Dec 13 10:22:58 2007 @@ -391,17 +391,19 @@ 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); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits