Factorize code: remove variants of "strip off
[oota-llvm.git] / lib / Analysis / BasicAliasAnalysis.cpp
1 //===- BasicAliasAnalysis.cpp - Local Alias Analysis Impl -----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines the default implementation of the Alias Analysis interface
11 // that simply implements a few identities (two different globals cannot alias,
12 // etc), but otherwise does no analysis.
13 //
14 //===----------------------------------------------------------------------===//
15
16 #include "llvm/Analysis/AliasAnalysis.h"
17 #include "llvm/Analysis/Passes.h"
18 #include "llvm/Constants.h"
19 #include "llvm/DerivedTypes.h"
20 #include "llvm/Function.h"
21 #include "llvm/GlobalVariable.h"
22 #include "llvm/Instructions.h"
23 #include "llvm/IntrinsicInst.h"
24 #include "llvm/Pass.h"
25 #include "llvm/Target/TargetData.h"
26 #include "llvm/ADT/SmallVector.h"
27 #include "llvm/ADT/STLExtras.h"
28 #include "llvm/Support/Compiler.h"
29 #include "llvm/Support/GetElementPtrTypeIterator.h"
30 #include "llvm/Support/ManagedStatic.h"
31 #include <algorithm>
32 using namespace llvm;
33
34 //===----------------------------------------------------------------------===//
35 // Useful predicates
36 //===----------------------------------------------------------------------===//
37
38 // Determine if an AllocationInst instruction escapes from the function it is
39 // contained in. If it does not escape, there is no way for another function to
40 // mod/ref it.  We do this by looking at its uses and determining if the uses
41 // can escape (recursively).
42 static bool AddressMightEscape(const Value *V) {
43   for (Value::use_const_iterator UI = V->use_begin(), E = V->use_end();
44        UI != E; ++UI) {
45     const Instruction *I = cast<Instruction>(*UI);
46     switch (I->getOpcode()) {
47     case Instruction::Load: 
48       break; //next use.
49     case Instruction::Store:
50       if (I->getOperand(0) == V)
51         return true; // Escapes if the pointer is stored.
52       break; // next use.
53     case Instruction::GetElementPtr:
54       if (AddressMightEscape(I))
55         return true;
56       break; // next use.
57     case Instruction::BitCast:
58       if (AddressMightEscape(I))
59         return true;
60       break; // next use
61     case Instruction::Ret:
62       // If returned, the address will escape to calling functions, but no
63       // callees could modify it.
64       break; // next use
65     case Instruction::Call:
66       // If the call is to a few known safe intrinsics, we know that it does
67       // not escape.
68       // TODO: Eventually just check the 'nocapture' attribute.
69       if (!isa<MemIntrinsic>(I))
70         return true;
71       break;  // next use
72     default:
73       return true;
74     }
75   }
76   return false;
77 }
78
79 static const User *isGEP(const Value *V) {
80   if (isa<GetElementPtrInst>(V) ||
81       (isa<ConstantExpr>(V) &&
82        cast<ConstantExpr>(V)->getOpcode() == Instruction::GetElementPtr))
83     return cast<User>(V);
84   return 0;
85 }
86
87 static const Value *GetGEPOperands(const Value *V, 
88                                    SmallVector<Value*, 16> &GEPOps){
89   assert(GEPOps.empty() && "Expect empty list to populate!");
90   GEPOps.insert(GEPOps.end(), cast<User>(V)->op_begin()+1,
91                 cast<User>(V)->op_end());
92
93   // Accumulate all of the chained indexes into the operand array
94   V = cast<User>(V)->getOperand(0);
95
96   while (const User *G = isGEP(V)) {
97     if (!isa<Constant>(GEPOps[0]) || isa<GlobalValue>(GEPOps[0]) ||
98         !cast<Constant>(GEPOps[0])->isNullValue())
99       break;  // Don't handle folding arbitrary pointer offsets yet...
100     GEPOps.erase(GEPOps.begin());   // Drop the zero index
101     GEPOps.insert(GEPOps.begin(), G->op_begin()+1, G->op_end());
102     V = G->getOperand(0);
103   }
104   return V;
105 }
106
107 /// isIdentifiedObject - Return true if this pointer refers to a distinct and
108 /// identifiable object.  This returns true for:
109 ///    Global Variables and Functions
110 ///    Allocas and Mallocs
111 ///    ByVal and NoAlias Arguments
112 ///
113 static bool isIdentifiedObject(const Value *V) {
114   if (isa<GlobalValue>(V) || isa<AllocationInst>(V))
115     return true;
116   if (const Argument *A = dyn_cast<Argument>(V))
117     return A->hasNoAliasAttr() || A->hasByValAttr();
118   return false;
119 }
120
121 /// isKnownNonNull - Return true if we know that the specified value is never
122 /// null.
123 static bool isKnownNonNull(const Value *V) {
124   // Alloca never returns null, malloc might.
125   if (isa<AllocaInst>(V)) return true;
126   
127   // A byval argument is never null.
128   if (const Argument *A = dyn_cast<Argument>(V))
129     return A->hasByValAttr();
130
131   // Global values are not null unless extern weak.
132   if (const GlobalValue *GV = dyn_cast<GlobalValue>(V))
133     return !GV->hasExternalWeakLinkage();
134   return false;
135 }
136
137 /// isNonEscapingLocalObject - Return true if the pointer is to a function-local
138 /// object that never escapes from the function.
139 static bool isNonEscapingLocalObject(const Value *V) {
140   // If this is a local allocation, check to see if it escapes.
141   if (isa<AllocationInst>(V))
142     return !AddressMightEscape(V);
143       
144   // If this is an argument that corresponds to a byval or noalias argument,
145   // it can't escape either.
146   if (const Argument *A = dyn_cast<Argument>(V))
147     if (A->hasByValAttr() || A->hasNoAliasAttr())
148       return !AddressMightEscape(V);
149   return false;
150 }
151
152
153 /// isObjectSmallerThan - Return true if we can prove that the object specified
154 /// by V is smaller than Size.
155 static bool isObjectSmallerThan(const Value *V, unsigned Size,
156                                 const TargetData &TD) {
157   const Type *AccessTy = 0;
158   if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(V))
159     AccessTy = GV->getType()->getElementType();
160   
161   if (const AllocationInst *AI = dyn_cast<AllocationInst>(V))
162     if (!AI->isArrayAllocation())
163       AccessTy = AI->getType()->getElementType();
164
165   if (const Argument *A = dyn_cast<Argument>(V))
166     if (A->hasByValAttr())
167       AccessTy = cast<PointerType>(A->getType())->getElementType();
168   
169   if (AccessTy && AccessTy->isSized())
170     return TD.getABITypeSize(AccessTy) < Size;
171   return false;
172 }
173
174 //===----------------------------------------------------------------------===//
175 // NoAA Pass
176 //===----------------------------------------------------------------------===//
177
178 namespace {
179   /// NoAA - This class implements the -no-aa pass, which always returns "I
180   /// don't know" for alias queries.  NoAA is unlike other alias analysis
181   /// implementations, in that it does not chain to a previous analysis.  As
182   /// such it doesn't follow many of the rules that other alias analyses must.
183   ///
184   struct VISIBILITY_HIDDEN NoAA : public ImmutablePass, public AliasAnalysis {
185     static char ID; // Class identification, replacement for typeinfo
186     NoAA() : ImmutablePass(&ID) {}
187     explicit NoAA(void *PID) : ImmutablePass(PID) { }
188
189     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
190       AU.addRequired<TargetData>();
191     }
192
193     virtual void initializePass() {
194       TD = &getAnalysis<TargetData>();
195     }
196
197     virtual AliasResult alias(const Value *V1, unsigned V1Size,
198                               const Value *V2, unsigned V2Size) {
199       return MayAlias;
200     }
201
202     virtual ModRefBehavior getModRefBehavior(Function *F, CallSite CS,
203                                          std::vector<PointerAccessInfo> *Info) {
204       return UnknownModRefBehavior;
205     }
206
207     virtual void getArgumentAccesses(Function *F, CallSite CS,
208                                      std::vector<PointerAccessInfo> &Info) {
209       assert(0 && "This method may not be called on this function!");
210     }
211
212     virtual void getMustAliases(Value *P, std::vector<Value*> &RetVals) { }
213     virtual bool pointsToConstantMemory(const Value *P) { return false; }
214     virtual ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size) {
215       return ModRef;
216     }
217     virtual ModRefResult getModRefInfo(CallSite CS1, CallSite CS2) {
218       return ModRef;
219     }
220     virtual bool hasNoModRefInfoForCalls() const { return true; }
221
222     virtual void deleteValue(Value *V) {}
223     virtual void copyValue(Value *From, Value *To) {}
224   };
225 }  // End of anonymous namespace
226
227 // Register this pass...
228 char NoAA::ID = 0;
229 static RegisterPass<NoAA>
230 U("no-aa", "No Alias Analysis (always returns 'may' alias)", true, true);
231
232 // Declare that we implement the AliasAnalysis interface
233 static RegisterAnalysisGroup<AliasAnalysis> V(U);
234
235 ImmutablePass *llvm::createNoAAPass() { return new NoAA(); }
236
237 //===----------------------------------------------------------------------===//
238 // BasicAA Pass
239 //===----------------------------------------------------------------------===//
240
241 namespace {
242   /// BasicAliasAnalysis - This is the default alias analysis implementation.
243   /// Because it doesn't chain to a previous alias analysis (like -no-aa), it
244   /// derives from the NoAA class.
245   struct VISIBILITY_HIDDEN BasicAliasAnalysis : public NoAA {
246     static char ID; // Class identification, replacement for typeinfo
247     BasicAliasAnalysis() : NoAA(&ID) {}
248     AliasResult alias(const Value *V1, unsigned V1Size,
249                       const Value *V2, unsigned V2Size);
250
251     ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size);
252     ModRefResult getModRefInfo(CallSite CS1, CallSite CS2) {
253       return NoAA::getModRefInfo(CS1,CS2);
254     }
255
256     /// hasNoModRefInfoForCalls - We can provide mod/ref information against
257     /// non-escaping allocations.
258     virtual bool hasNoModRefInfoForCalls() const { return false; }
259
260     /// pointsToConstantMemory - Chase pointers until we find a (constant
261     /// global) or not.
262     bool pointsToConstantMemory(const Value *P);
263
264   private:
265     // CheckGEPInstructions - Check two GEP instructions with known
266     // must-aliasing base pointers.  This checks to see if the index expressions
267     // preclude the pointers from aliasing...
268     AliasResult
269     CheckGEPInstructions(const Type* BasePtr1Ty,
270                          Value **GEP1Ops, unsigned NumGEP1Ops, unsigned G1Size,
271                          const Type *BasePtr2Ty,
272                          Value **GEP2Ops, unsigned NumGEP2Ops, unsigned G2Size);
273   };
274 }  // End of anonymous namespace
275
276 // Register this pass...
277 char BasicAliasAnalysis::ID = 0;
278 static RegisterPass<BasicAliasAnalysis>
279 X("basicaa", "Basic Alias Analysis (default AA impl)", false, true);
280
281 // Declare that we implement the AliasAnalysis interface
282 static RegisterAnalysisGroup<AliasAnalysis, true> Y(X);
283
284 ImmutablePass *llvm::createBasicAliasAnalysisPass() {
285   return new BasicAliasAnalysis();
286 }
287
288
289 /// pointsToConstantMemory - Chase pointers until we find a (constant
290 /// global) or not.
291 bool BasicAliasAnalysis::pointsToConstantMemory(const Value *P) {
292   if (const GlobalVariable *GV = 
293         dyn_cast<GlobalVariable>(P->getUnderlyingObject()))
294     return GV->isConstant();
295   return false;
296 }
297
298 // getModRefInfo - Check to see if the specified callsite can clobber the
299 // specified memory object.  Since we only look at local properties of this
300 // function, we really can't say much about this query.  We do, however, use
301 // simple "address taken" analysis on local objects.
302 //
303 AliasAnalysis::ModRefResult
304 BasicAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) {
305   if (!isa<Constant>(P)) {
306     const Value *Object = P->getUnderlyingObject();
307     
308     // If this is a tail call and P points to a stack location, we know that
309     // the tail call cannot access or modify the local stack.
310     // We cannot exclude byval arguments here; these belong to the caller of
311     // the current function not to the current function, and a tail callee
312     // may reference them.
313     if (isa<AllocaInst>(Object))
314       if (CallInst *CI = dyn_cast<CallInst>(CS.getInstruction()))
315         if (CI->isTailCall())
316           return NoModRef;
317     
318     // If the pointer is to a locally allocated object that does not escape,
319     // then the call can not mod/ref the pointer unless the call takes the
320     // argument without capturing it.
321     if (isNonEscapingLocalObject(Object)) {
322       bool passedAsArg = false;
323       // TODO: Eventually only check 'nocapture' arguments.
324       for (CallSite::arg_iterator CI = CS.arg_begin(), CE = CS.arg_end();
325            CI != CE; ++CI)
326         if (isa<PointerType>((*CI)->getType()) &&
327             alias(cast<Value>(CI), ~0U, P, ~0U) != NoAlias)
328           passedAsArg = true;
329       
330       if (!passedAsArg)
331         return NoModRef;
332     }
333   }
334
335   // The AliasAnalysis base class has some smarts, lets use them.
336   return AliasAnalysis::getModRefInfo(CS, P, Size);
337 }
338
339
340 // alias - Provide a bunch of ad-hoc rules to disambiguate in common cases, such
341 // as array references.  Note that this function is heavily tail recursive.
342 // Hopefully we have a smart C++ compiler.  :)
343 //
344 AliasAnalysis::AliasResult
345 BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size,
346                           const Value *V2, unsigned V2Size) {
347   // Strip off any constant expression casts if they exist
348   if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V1))
349     if (CE->isCast() && isa<PointerType>(CE->getOperand(0)->getType()))
350       V1 = CE->getOperand(0);
351   if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V2))
352     if (CE->isCast() && isa<PointerType>(CE->getOperand(0)->getType()))
353       V2 = CE->getOperand(0);
354
355   // Are we checking for alias of the same value?
356   if (V1 == V2) return MustAlias;
357
358   if ((!isa<PointerType>(V1->getType()) || !isa<PointerType>(V2->getType())) &&
359       V1->getType() != Type::Int64Ty && V2->getType() != Type::Int64Ty)
360     return NoAlias;  // Scalars cannot alias each other
361
362   // Strip off cast instructions...
363   if (const BitCastInst *I = dyn_cast<BitCastInst>(V1))
364     return alias(I->getOperand(0), V1Size, V2, V2Size);
365   if (const BitCastInst *I = dyn_cast<BitCastInst>(V2))
366     return alias(V1, V1Size, I->getOperand(0), V2Size);
367
368   // Figure out what objects these things are pointing to if we can...
369   const Value *O1 = V1->getUnderlyingObject();
370   const Value *O2 = V2->getUnderlyingObject();
371
372   if (O1 != O2) {
373     // If V1/V2 point to two different objects we know that we have no alias.
374     if (isIdentifiedObject(O1) && isIdentifiedObject(O2))
375       return NoAlias;
376   
377     // Incoming argument cannot alias locally allocated object!
378     if ((isa<Argument>(O1) && isa<AllocationInst>(O2)) ||
379         (isa<Argument>(O2) && isa<AllocationInst>(O1)))
380       return NoAlias;
381     
382     // Most objects can't alias null.
383     if ((isa<ConstantPointerNull>(V2) && isKnownNonNull(O1)) ||
384         (isa<ConstantPointerNull>(V1) && isKnownNonNull(O2)))
385       return NoAlias;
386   }
387   
388   // If the size of one access is larger than the entire object on the other
389   // side, then we know such behavior is undefined and can assume no alias.
390   const TargetData &TD = getTargetData();
391   if ((V1Size != ~0U && isObjectSmallerThan(O2, V1Size, TD)) ||
392       (V2Size != ~0U && isObjectSmallerThan(O1, V2Size, TD)))
393     return NoAlias;
394   
395   // If one pointer is the result of a call/invoke and the other is a
396   // non-escaping local object, then we know the object couldn't escape to a
397   // point where the call could return it.
398   if ((isa<CallInst>(O1) || isa<InvokeInst>(O1)) &&
399       isNonEscapingLocalObject(O2))
400     return NoAlias;
401   if ((isa<CallInst>(O2) || isa<InvokeInst>(O2)) &&
402       isNonEscapingLocalObject(O1))
403     return NoAlias;
404   
405   // If we have two gep instructions with must-alias'ing base pointers, figure
406   // out if the indexes to the GEP tell us anything about the derived pointer.
407   // Note that we also handle chains of getelementptr instructions as well as
408   // constant expression getelementptrs here.
409   //
410   if (isGEP(V1) && isGEP(V2)) {
411     // Drill down into the first non-gep value, to test for must-aliasing of
412     // the base pointers.
413     const User *G = cast<User>(V1);
414     while (isGEP(G->getOperand(0)) &&
415            G->getOperand(1) ==
416            Constant::getNullValue(G->getOperand(1)->getType()))
417       G = cast<User>(G->getOperand(0));
418     const Value *BasePtr1 = G->getOperand(0);
419
420     G = cast<User>(V2);
421     while (isGEP(G->getOperand(0)) &&
422            G->getOperand(1) ==
423            Constant::getNullValue(G->getOperand(1)->getType()))
424       G = cast<User>(G->getOperand(0));
425     const Value *BasePtr2 = G->getOperand(0);
426
427     // Do the base pointers alias?
428     AliasResult BaseAlias = alias(BasePtr1, ~0U, BasePtr2, ~0U);
429     if (BaseAlias == NoAlias) return NoAlias;
430     if (BaseAlias == MustAlias) {
431       // If the base pointers alias each other exactly, check to see if we can
432       // figure out anything about the resultant pointers, to try to prove
433       // non-aliasing.
434
435       // Collect all of the chained GEP operands together into one simple place
436       SmallVector<Value*, 16> GEP1Ops, GEP2Ops;
437       BasePtr1 = GetGEPOperands(V1, GEP1Ops);
438       BasePtr2 = GetGEPOperands(V2, GEP2Ops);
439
440       // If GetGEPOperands were able to fold to the same must-aliased pointer,
441       // do the comparison.
442       if (BasePtr1 == BasePtr2) {
443         AliasResult GAlias =
444           CheckGEPInstructions(BasePtr1->getType(),
445                                &GEP1Ops[0], GEP1Ops.size(), V1Size,
446                                BasePtr2->getType(),
447                                &GEP2Ops[0], GEP2Ops.size(), V2Size);
448         if (GAlias != MayAlias)
449           return GAlias;
450       }
451     }
452   }
453
454   // Check to see if these two pointers are related by a getelementptr
455   // instruction.  If one pointer is a GEP with a non-zero index of the other
456   // pointer, we know they cannot alias.
457   //
458   if (isGEP(V2)) {
459     std::swap(V1, V2);
460     std::swap(V1Size, V2Size);
461   }
462
463   if (V1Size != ~0U && V2Size != ~0U)
464     if (isGEP(V1)) {
465       SmallVector<Value*, 16> GEPOperands;
466       const Value *BasePtr = GetGEPOperands(V1, GEPOperands);
467
468       AliasResult R = alias(BasePtr, V1Size, V2, V2Size);
469       if (R == MustAlias) {
470         // If there is at least one non-zero constant index, we know they cannot
471         // alias.
472         bool ConstantFound = false;
473         bool AllZerosFound = true;
474         for (unsigned i = 0, e = GEPOperands.size(); i != e; ++i)
475           if (const Constant *C = dyn_cast<Constant>(GEPOperands[i])) {
476             if (!C->isNullValue()) {
477               ConstantFound = true;
478               AllZerosFound = false;
479               break;
480             }
481           } else {
482             AllZerosFound = false;
483           }
484
485         // If we have getelementptr <ptr>, 0, 0, 0, 0, ... and V2 must aliases
486         // the ptr, the end result is a must alias also.
487         if (AllZerosFound)
488           return MustAlias;
489
490         if (ConstantFound) {
491           if (V2Size <= 1 && V1Size <= 1)  // Just pointer check?
492             return NoAlias;
493
494           // Otherwise we have to check to see that the distance is more than
495           // the size of the argument... build an index vector that is equal to
496           // the arguments provided, except substitute 0's for any variable
497           // indexes we find...
498           if (cast<PointerType>(
499                 BasePtr->getType())->getElementType()->isSized()) {
500             for (unsigned i = 0; i != GEPOperands.size(); ++i)
501               if (!isa<ConstantInt>(GEPOperands[i]))
502                 GEPOperands[i] =
503                   Constant::getNullValue(GEPOperands[i]->getType());
504             int64_t Offset =
505               getTargetData().getIndexedOffset(BasePtr->getType(),
506                                                &GEPOperands[0],
507                                                GEPOperands.size());
508
509             if (Offset >= (int64_t)V2Size || Offset <= -(int64_t)V1Size)
510               return NoAlias;
511           }
512         }
513       }
514     }
515
516   return MayAlias;
517 }
518
519 // This function is used to determin if the indices of two GEP instructions are
520 // equal. V1 and V2 are the indices.
521 static bool IndexOperandsEqual(Value *V1, Value *V2) {
522   if (V1->getType() == V2->getType())
523     return V1 == V2;
524   if (Constant *C1 = dyn_cast<Constant>(V1))
525     if (Constant *C2 = dyn_cast<Constant>(V2)) {
526       // Sign extend the constants to long types, if necessary
527       if (C1->getType() != Type::Int64Ty)
528         C1 = ConstantExpr::getSExt(C1, Type::Int64Ty);
529       if (C2->getType() != Type::Int64Ty) 
530         C2 = ConstantExpr::getSExt(C2, Type::Int64Ty);
531       return C1 == C2;
532     }
533   return false;
534 }
535
536 /// CheckGEPInstructions - Check two GEP instructions with known must-aliasing
537 /// base pointers.  This checks to see if the index expressions preclude the
538 /// pointers from aliasing...
539 AliasAnalysis::AliasResult 
540 BasicAliasAnalysis::CheckGEPInstructions(
541   const Type* BasePtr1Ty, Value **GEP1Ops, unsigned NumGEP1Ops, unsigned G1S,
542   const Type *BasePtr2Ty, Value **GEP2Ops, unsigned NumGEP2Ops, unsigned G2S) {
543   // We currently can't handle the case when the base pointers have different
544   // primitive types.  Since this is uncommon anyway, we are happy being
545   // extremely conservative.
546   if (BasePtr1Ty != BasePtr2Ty)
547     return MayAlias;
548
549   const PointerType *GEPPointerTy = cast<PointerType>(BasePtr1Ty);
550
551   // Find the (possibly empty) initial sequence of equal values... which are not
552   // necessarily constants.
553   unsigned NumGEP1Operands = NumGEP1Ops, NumGEP2Operands = NumGEP2Ops;
554   unsigned MinOperands = std::min(NumGEP1Operands, NumGEP2Operands);
555   unsigned MaxOperands = std::max(NumGEP1Operands, NumGEP2Operands);
556   unsigned UnequalOper = 0;
557   while (UnequalOper != MinOperands &&
558          IndexOperandsEqual(GEP1Ops[UnequalOper], GEP2Ops[UnequalOper])) {
559     // Advance through the type as we go...
560     ++UnequalOper;
561     if (const CompositeType *CT = dyn_cast<CompositeType>(BasePtr1Ty))
562       BasePtr1Ty = CT->getTypeAtIndex(GEP1Ops[UnequalOper-1]);
563     else {
564       // If all operands equal each other, then the derived pointers must
565       // alias each other...
566       BasePtr1Ty = 0;
567       assert(UnequalOper == NumGEP1Operands && UnequalOper == NumGEP2Operands &&
568              "Ran out of type nesting, but not out of operands?");
569       return MustAlias;
570     }
571   }
572
573   // If we have seen all constant operands, and run out of indexes on one of the
574   // getelementptrs, check to see if the tail of the leftover one is all zeros.
575   // If so, return mustalias.
576   if (UnequalOper == MinOperands) {
577     if (NumGEP1Ops < NumGEP2Ops) {
578       std::swap(GEP1Ops, GEP2Ops);
579       std::swap(NumGEP1Ops, NumGEP2Ops);
580     }
581
582     bool AllAreZeros = true;
583     for (unsigned i = UnequalOper; i != MaxOperands; ++i)
584       if (!isa<Constant>(GEP1Ops[i]) ||
585           !cast<Constant>(GEP1Ops[i])->isNullValue()) {
586         AllAreZeros = false;
587         break;
588       }
589     if (AllAreZeros) return MustAlias;
590   }
591
592
593   // So now we know that the indexes derived from the base pointers,
594   // which are known to alias, are different.  We can still determine a
595   // no-alias result if there are differing constant pairs in the index
596   // chain.  For example:
597   //        A[i][0] != A[j][1] iff (&A[0][1]-&A[0][0] >= std::max(G1S, G2S))
598   //
599   // We have to be careful here about array accesses.  In particular, consider:
600   //        A[1][0] vs A[0][i]
601   // In this case, we don't *know* that the array will be accessed in bounds:
602   // the index could even be negative.  Because of this, we have to
603   // conservatively *give up* and return may alias.  We disregard differing
604   // array subscripts that are followed by a variable index without going
605   // through a struct.
606   //
607   unsigned SizeMax = std::max(G1S, G2S);
608   if (SizeMax == ~0U) return MayAlias; // Avoid frivolous work.
609
610   // Scan for the first operand that is constant and unequal in the
611   // two getelementptrs...
612   unsigned FirstConstantOper = UnequalOper;
613   for (; FirstConstantOper != MinOperands; ++FirstConstantOper) {
614     const Value *G1Oper = GEP1Ops[FirstConstantOper];
615     const Value *G2Oper = GEP2Ops[FirstConstantOper];
616
617     if (G1Oper != G2Oper)   // Found non-equal constant indexes...
618       if (Constant *G1OC = dyn_cast<ConstantInt>(const_cast<Value*>(G1Oper)))
619         if (Constant *G2OC = dyn_cast<ConstantInt>(const_cast<Value*>(G2Oper))){
620           if (G1OC->getType() != G2OC->getType()) {
621             // Sign extend both operands to long.
622             if (G1OC->getType() != Type::Int64Ty)
623               G1OC = ConstantExpr::getSExt(G1OC, Type::Int64Ty);
624             if (G2OC->getType() != Type::Int64Ty) 
625               G2OC = ConstantExpr::getSExt(G2OC, Type::Int64Ty);
626             GEP1Ops[FirstConstantOper] = G1OC;
627             GEP2Ops[FirstConstantOper] = G2OC;
628           }
629           
630           if (G1OC != G2OC) {
631             // Handle the "be careful" case above: if this is an array/vector
632             // subscript, scan for a subsequent variable array index.
633             if (isa<SequentialType>(BasePtr1Ty))  {
634               const Type *NextTy =
635                 cast<SequentialType>(BasePtr1Ty)->getElementType();
636               bool isBadCase = false;
637               
638               for (unsigned Idx = FirstConstantOper+1;
639                    Idx != MinOperands && isa<SequentialType>(NextTy); ++Idx) {
640                 const Value *V1 = GEP1Ops[Idx], *V2 = GEP2Ops[Idx];
641                 if (!isa<Constant>(V1) || !isa<Constant>(V2)) {
642                   isBadCase = true;
643                   break;
644                 }
645                 NextTy = cast<SequentialType>(NextTy)->getElementType();
646               }
647               
648               if (isBadCase) G1OC = 0;
649             }
650
651             // Make sure they are comparable (ie, not constant expressions), and
652             // make sure the GEP with the smaller leading constant is GEP1.
653             if (G1OC) {
654               Constant *Compare = ConstantExpr::getICmp(ICmpInst::ICMP_SGT, 
655                                                         G1OC, G2OC);
656               if (ConstantInt *CV = dyn_cast<ConstantInt>(Compare)) {
657                 if (CV->getZExtValue()) {  // If they are comparable and G2 > G1
658                   std::swap(GEP1Ops, GEP2Ops);  // Make GEP1 < GEP2
659                   std::swap(NumGEP1Ops, NumGEP2Ops);
660                 }
661                 break;
662               }
663             }
664           }
665         }
666     BasePtr1Ty = cast<CompositeType>(BasePtr1Ty)->getTypeAtIndex(G1Oper);
667   }
668
669   // No shared constant operands, and we ran out of common operands.  At this
670   // point, the GEP instructions have run through all of their operands, and we
671   // haven't found evidence that there are any deltas between the GEP's.
672   // However, one GEP may have more operands than the other.  If this is the
673   // case, there may still be hope.  Check this now.
674   if (FirstConstantOper == MinOperands) {
675     // Make GEP1Ops be the longer one if there is a longer one.
676     if (NumGEP1Ops < NumGEP2Ops) {
677       std::swap(GEP1Ops, GEP2Ops);
678       std::swap(NumGEP1Ops, NumGEP2Ops);
679     }
680
681     // Is there anything to check?
682     if (NumGEP1Ops > MinOperands) {
683       for (unsigned i = FirstConstantOper; i != MaxOperands; ++i)
684         if (isa<ConstantInt>(GEP1Ops[i]) && 
685             !cast<ConstantInt>(GEP1Ops[i])->isZero()) {
686           // Yup, there's a constant in the tail.  Set all variables to
687           // constants in the GEP instruction to make it suitable for
688           // TargetData::getIndexedOffset.
689           for (i = 0; i != MaxOperands; ++i)
690             if (!isa<ConstantInt>(GEP1Ops[i]))
691               GEP1Ops[i] = Constant::getNullValue(GEP1Ops[i]->getType());
692           // Okay, now get the offset.  This is the relative offset for the full
693           // instruction.
694           const TargetData &TD = getTargetData();
695           int64_t Offset1 = TD.getIndexedOffset(GEPPointerTy, GEP1Ops,
696                                                 NumGEP1Ops);
697
698           // Now check without any constants at the end.
699           int64_t Offset2 = TD.getIndexedOffset(GEPPointerTy, GEP1Ops,
700                                                 MinOperands);
701
702           // Make sure we compare the absolute difference.
703           if (Offset1 > Offset2)
704             std::swap(Offset1, Offset2);
705
706           // If the tail provided a bit enough offset, return noalias!
707           if ((uint64_t)(Offset2-Offset1) >= SizeMax)
708             return NoAlias;
709           // Otherwise break - we don't look for another constant in the tail.
710           break;
711         }
712     }
713
714     // Couldn't find anything useful.
715     return MayAlias;
716   }
717
718   // If there are non-equal constants arguments, then we can figure
719   // out a minimum known delta between the two index expressions... at
720   // this point we know that the first constant index of GEP1 is less
721   // than the first constant index of GEP2.
722
723   // Advance BasePtr[12]Ty over this first differing constant operand.
724   BasePtr2Ty = cast<CompositeType>(BasePtr1Ty)->
725       getTypeAtIndex(GEP2Ops[FirstConstantOper]);
726   BasePtr1Ty = cast<CompositeType>(BasePtr1Ty)->
727       getTypeAtIndex(GEP1Ops[FirstConstantOper]);
728
729   // We are going to be using TargetData::getIndexedOffset to determine the
730   // offset that each of the GEP's is reaching.  To do this, we have to convert
731   // all variable references to constant references.  To do this, we convert the
732   // initial sequence of array subscripts into constant zeros to start with.
733   const Type *ZeroIdxTy = GEPPointerTy;
734   for (unsigned i = 0; i != FirstConstantOper; ++i) {
735     if (!isa<StructType>(ZeroIdxTy))
736       GEP1Ops[i] = GEP2Ops[i] = Constant::getNullValue(Type::Int32Ty);
737
738     if (const CompositeType *CT = dyn_cast<CompositeType>(ZeroIdxTy))
739       ZeroIdxTy = CT->getTypeAtIndex(GEP1Ops[i]);
740   }
741
742   // We know that GEP1Ops[FirstConstantOper] & GEP2Ops[FirstConstantOper] are ok
743
744   // Loop over the rest of the operands...
745   for (unsigned i = FirstConstantOper+1; i != MaxOperands; ++i) {
746     const Value *Op1 = i < NumGEP1Ops ? GEP1Ops[i] : 0;
747     const Value *Op2 = i < NumGEP2Ops ? GEP2Ops[i] : 0;
748     // If they are equal, use a zero index...
749     if (Op1 == Op2 && BasePtr1Ty == BasePtr2Ty) {
750       if (!isa<ConstantInt>(Op1))
751         GEP1Ops[i] = GEP2Ops[i] = Constant::getNullValue(Op1->getType());
752       // Otherwise, just keep the constants we have.
753     } else {
754       if (Op1) {
755         if (const ConstantInt *Op1C = dyn_cast<ConstantInt>(Op1)) {
756           // If this is an array index, make sure the array element is in range.
757           if (const ArrayType *AT = dyn_cast<ArrayType>(BasePtr1Ty)) {
758             if (Op1C->getZExtValue() >= AT->getNumElements())
759               return MayAlias;  // Be conservative with out-of-range accesses
760           } else if (const VectorType *VT = dyn_cast<VectorType>(BasePtr1Ty)) {
761             if (Op1C->getZExtValue() >= VT->getNumElements())
762               return MayAlias;  // Be conservative with out-of-range accesses
763           }
764           
765         } else {
766           // GEP1 is known to produce a value less than GEP2.  To be
767           // conservatively correct, we must assume the largest possible
768           // constant is used in this position.  This cannot be the initial
769           // index to the GEP instructions (because we know we have at least one
770           // element before this one with the different constant arguments), so
771           // we know that the current index must be into either a struct or
772           // array.  Because we know it's not constant, this cannot be a
773           // structure index.  Because of this, we can calculate the maximum
774           // value possible.
775           //
776           if (const ArrayType *AT = dyn_cast<ArrayType>(BasePtr1Ty))
777             GEP1Ops[i] = ConstantInt::get(Type::Int64Ty,AT->getNumElements()-1);
778           else if (const VectorType *VT = dyn_cast<VectorType>(BasePtr1Ty))
779             GEP1Ops[i] = ConstantInt::get(Type::Int64Ty,VT->getNumElements()-1);
780         }
781       }
782
783       if (Op2) {
784         if (const ConstantInt *Op2C = dyn_cast<ConstantInt>(Op2)) {
785           // If this is an array index, make sure the array element is in range.
786           if (const ArrayType *AT = dyn_cast<ArrayType>(BasePtr2Ty)) {
787             if (Op2C->getZExtValue() >= AT->getNumElements())
788               return MayAlias;  // Be conservative with out-of-range accesses
789           } else if (const VectorType *VT = dyn_cast<VectorType>(BasePtr2Ty)) {
790             if (Op2C->getZExtValue() >= VT->getNumElements())
791               return MayAlias;  // Be conservative with out-of-range accesses
792           }
793         } else {  // Conservatively assume the minimum value for this index
794           GEP2Ops[i] = Constant::getNullValue(Op2->getType());
795         }
796       }
797     }
798
799     if (BasePtr1Ty && Op1) {
800       if (const CompositeType *CT = dyn_cast<CompositeType>(BasePtr1Ty))
801         BasePtr1Ty = CT->getTypeAtIndex(GEP1Ops[i]);
802       else
803         BasePtr1Ty = 0;
804     }
805
806     if (BasePtr2Ty && Op2) {
807       if (const CompositeType *CT = dyn_cast<CompositeType>(BasePtr2Ty))
808         BasePtr2Ty = CT->getTypeAtIndex(GEP2Ops[i]);
809       else
810         BasePtr2Ty = 0;
811     }
812   }
813
814   if (GEPPointerTy->getElementType()->isSized()) {
815     int64_t Offset1 =
816       getTargetData().getIndexedOffset(GEPPointerTy, GEP1Ops, NumGEP1Ops);
817     int64_t Offset2 = 
818       getTargetData().getIndexedOffset(GEPPointerTy, GEP2Ops, NumGEP2Ops);
819     assert(Offset1 != Offset2 &&
820            "There is at least one different constant here!");
821     
822     // Make sure we compare the absolute difference.
823     if (Offset1 > Offset2)
824       std::swap(Offset1, Offset2);
825     
826     if ((uint64_t)(Offset2-Offset1) >= SizeMax) {
827       //cerr << "Determined that these two GEP's don't alias ["
828       //     << SizeMax << " bytes]: \n" << *GEP1 << *GEP2;
829       return NoAlias;
830     }
831   }
832   return MayAlias;
833 }
834
835 // Make sure that anything that uses AliasAnalysis pulls in this file...
836 DEFINING_FILE_FOR(BasicAliasAnalysis)