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