xref: /llvm-project/llvm/lib/Analysis/BasicAliasAnalysis.cpp (revision 869d6a40a994ce94e53d0c6e3827fecc09cc2fdc)
1 //===- BasicAliasAnalysis.cpp - Local Alias Analysis Impl -----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file was developed by the LLVM research group and is distributed under
6 // the University of Illinois Open Source 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/Constants.h"
18 #include "llvm/DerivedTypes.h"
19 #include "llvm/Function.h"
20 #include "llvm/GlobalVariable.h"
21 #include "llvm/Instructions.h"
22 #include "llvm/Pass.h"
23 #include "llvm/Target/TargetData.h"
24 #include "llvm/Support/GetElementPtrTypeIterator.h"
25 #include <algorithm>
26 using namespace llvm;
27 
28 // Make sure that anything that uses AliasAnalysis pulls in this file...
29 void llvm::BasicAAStub() {}
30 
31 namespace {
32   /// NoAA - This class implements the -no-aa pass, which always returns "I
33   /// don't know" for alias queries.  NoAA is unlike other alias analysis
34   /// implementations, in that it does not chain to a previous analysis.  As
35   /// such it doesn't follow many of the rules that other alias analyses must.
36   ///
37   struct NoAA : public ImmutablePass, public AliasAnalysis {
38     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
39       AU.addRequired<TargetData>();
40     }
41 
42     virtual void initializePass() {
43       TD = &getAnalysis<TargetData>();
44     }
45 
46     virtual AliasResult alias(const Value *V1, unsigned V1Size,
47                               const Value *V2, unsigned V2Size) {
48       return MayAlias;
49     }
50 
51     virtual ModRefBehavior getModRefBehavior(Function *F, CallSite CS,
52                                          std::vector<PointerAccessInfo> *Info) {
53       return UnknownModRefBehavior;
54     }
55 
56     virtual void getArgumentAccesses(Function *F, CallSite CS,
57                                      std::vector<PointerAccessInfo> &Info) {
58       assert(0 && "This method may not be called on this function!");
59     }
60 
61     virtual void getMustAliases(Value *P, std::vector<Value*> &RetVals) { }
62     virtual bool pointsToConstantMemory(const Value *P) { return false; }
63     virtual ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size) {
64       return ModRef;
65     }
66     virtual ModRefResult getModRefInfo(CallSite CS1, CallSite CS2) {
67       return ModRef;
68     }
69     virtual bool hasNoModRefInfoForCalls() const { return true; }
70 
71     virtual void deleteValue(Value *V) {}
72     virtual void copyValue(Value *From, Value *To) {}
73   };
74 
75   // Register this pass...
76   RegisterOpt<NoAA>
77   U("no-aa", "No Alias Analysis (always returns 'may' alias)");
78 
79   // Declare that we implement the AliasAnalysis interface
80   RegisterAnalysisGroup<AliasAnalysis, NoAA> V;
81 }  // End of anonymous namespace
82 
83 
84 namespace {
85   /// BasicAliasAnalysis - This is the default alias analysis implementation.
86   /// Because it doesn't chain to a previous alias analysis (like -no-aa), it
87   /// derives from the NoAA class.
88   struct BasicAliasAnalysis : public NoAA {
89     AliasResult alias(const Value *V1, unsigned V1Size,
90                       const Value *V2, unsigned V2Size);
91 
92     ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size);
93     ModRefResult getModRefInfo(CallSite CS1, CallSite CS2) {
94       return NoAA::getModRefInfo(CS1,CS2);
95     }
96 
97     /// hasNoModRefInfoForCalls - We can provide mod/ref information against
98     /// non-escaping allocations.
99     virtual bool hasNoModRefInfoForCalls() const { return false; }
100 
101     /// pointsToConstantMemory - Chase pointers until we find a (constant
102     /// global) or not.
103     bool pointsToConstantMemory(const Value *P);
104 
105     virtual ModRefBehavior getModRefBehavior(Function *F, CallSite CS,
106                                              std::vector<PointerAccessInfo> *Info);
107 
108   private:
109     // CheckGEPInstructions - Check two GEP instructions with known
110     // must-aliasing base pointers.  This checks to see if the index expressions
111     // preclude the pointers from aliasing...
112     AliasResult
113     CheckGEPInstructions(const Type* BasePtr1Ty, std::vector<Value*> &GEP1Ops,
114                          unsigned G1Size,
115                          const Type *BasePtr2Ty, std::vector<Value*> &GEP2Ops,
116                          unsigned G2Size);
117   };
118 
119   // Register this pass...
120   RegisterOpt<BasicAliasAnalysis>
121   X("basicaa", "Basic Alias Analysis (default AA impl)");
122 
123   // Declare that we implement the AliasAnalysis interface
124   RegisterAnalysisGroup<AliasAnalysis, BasicAliasAnalysis, true> Y;
125 }  // End of anonymous namespace
126 
127 // hasUniqueAddress - Return true if the specified value points to something
128 // with a unique, discernable, address.
129 static inline bool hasUniqueAddress(const Value *V) {
130   return isa<GlobalValue>(V) || isa<AllocationInst>(V);
131 }
132 
133 // getUnderlyingObject - This traverses the use chain to figure out what object
134 // the specified value points to.  If the value points to, or is derived from, a
135 // unique object or an argument, return it.
136 static const Value *getUnderlyingObject(const Value *V) {
137   if (!isa<PointerType>(V->getType())) return 0;
138 
139   // If we are at some type of object... return it.
140   if (hasUniqueAddress(V) || isa<Argument>(V)) return V;
141 
142   // Traverse through different addressing mechanisms...
143   if (const Instruction *I = dyn_cast<Instruction>(V)) {
144     if (isa<CastInst>(I) || isa<GetElementPtrInst>(I))
145       return getUnderlyingObject(I->getOperand(0));
146   } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V)) {
147     if (CE->getOpcode() == Instruction::Cast ||
148         CE->getOpcode() == Instruction::GetElementPtr)
149       return getUnderlyingObject(CE->getOperand(0));
150   } else if (const GlobalValue *GV = dyn_cast<GlobalValue>(V)) {
151     return GV;
152   }
153   return 0;
154 }
155 
156 static const User *isGEP(const Value *V) {
157   if (isa<GetElementPtrInst>(V) ||
158       (isa<ConstantExpr>(V) &&
159        cast<ConstantExpr>(V)->getOpcode() == Instruction::GetElementPtr))
160     return cast<User>(V);
161   return 0;
162 }
163 
164 static const Value *GetGEPOperands(const Value *V, std::vector<Value*> &GEPOps){
165   assert(GEPOps.empty() && "Expect empty list to populate!");
166   GEPOps.insert(GEPOps.end(), cast<User>(V)->op_begin()+1,
167                 cast<User>(V)->op_end());
168 
169   // Accumulate all of the chained indexes into the operand array
170   V = cast<User>(V)->getOperand(0);
171 
172   while (const User *G = isGEP(V)) {
173     if (!isa<Constant>(GEPOps[0]) || isa<GlobalValue>(GEPOps[0]) ||
174         !cast<Constant>(GEPOps[0])->isNullValue())
175       break;  // Don't handle folding arbitrary pointer offsets yet...
176     GEPOps.erase(GEPOps.begin());   // Drop the zero index
177     GEPOps.insert(GEPOps.begin(), G->op_begin()+1, G->op_end());
178     V = G->getOperand(0);
179   }
180   return V;
181 }
182 
183 /// pointsToConstantMemory - Chase pointers until we find a (constant
184 /// global) or not.
185 bool BasicAliasAnalysis::pointsToConstantMemory(const Value *P) {
186   if (const Value *V = getUnderlyingObject(P))
187     if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(V))
188       return GV->isConstant();
189   return false;
190 }
191 
192 static bool AddressMightEscape(const Value *V) {
193   for (Value::use_const_iterator UI = V->use_begin(), E = V->use_end();
194        UI != E; ++UI) {
195     const Instruction *I = cast<Instruction>(*UI);
196     switch (I->getOpcode()) {
197     case Instruction::Load: break;
198     case Instruction::Store:
199       if (I->getOperand(0) == V)
200         return true; // Escapes if the pointer is stored.
201       break;
202     case Instruction::GetElementPtr:
203       if (AddressMightEscape(I)) return true;
204       break;
205     case Instruction::Cast:
206       if (!isa<PointerType>(I->getType()))
207         return true;
208       if (AddressMightEscape(I)) return true;
209       break;
210     case Instruction::Ret:
211       // If returned, the address will escape to calling functions, but no
212       // callees could modify it.
213       break;
214     default:
215       return true;
216     }
217   }
218   return false;
219 }
220 
221 // getModRefInfo - Check to see if the specified callsite can clobber the
222 // specified memory object.  Since we only look at local properties of this
223 // function, we really can't say much about this query.  We do, however, use
224 // simple "address taken" analysis on local objects.
225 //
226 AliasAnalysis::ModRefResult
227 BasicAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) {
228   if (!isa<Constant>(P))
229     if (const AllocationInst *AI =
230                   dyn_cast_or_null<AllocationInst>(getUnderlyingObject(P))) {
231       // Okay, the pointer is to a stack allocated object.  If we can prove that
232       // the pointer never "escapes", then we know the call cannot clobber it,
233       // because it simply can't get its address.
234       if (!AddressMightEscape(AI))
235         return NoModRef;
236     }
237 
238   // The AliasAnalysis base class has some smarts, lets use them.
239   return AliasAnalysis::getModRefInfo(CS, P, Size);
240 }
241 
242 // alias - Provide a bunch of ad-hoc rules to disambiguate in common cases, such
243 // as array references.  Note that this function is heavily tail recursive.
244 // Hopefully we have a smart C++ compiler.  :)
245 //
246 AliasAnalysis::AliasResult
247 BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size,
248                           const Value *V2, unsigned V2Size) {
249   // Strip off any constant expression casts if they exist
250   if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V1))
251     if (CE->getOpcode() == Instruction::Cast &&
252         isa<PointerType>(CE->getOperand(0)->getType()))
253       V1 = CE->getOperand(0);
254   if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V2))
255     if (CE->getOpcode() == Instruction::Cast &&
256         isa<PointerType>(CE->getOperand(0)->getType()))
257       V2 = CE->getOperand(0);
258 
259   // Are we checking for alias of the same value?
260   if (V1 == V2) return MustAlias;
261 
262   if ((!isa<PointerType>(V1->getType()) || !isa<PointerType>(V2->getType())) &&
263       V1->getType() != Type::LongTy && V2->getType() != Type::LongTy)
264     return NoAlias;  // Scalars cannot alias each other
265 
266   // Strip off cast instructions...
267   if (const Instruction *I = dyn_cast<CastInst>(V1))
268     if (isa<PointerType>(I->getOperand(0)->getType()))
269       return alias(I->getOperand(0), V1Size, V2, V2Size);
270   if (const Instruction *I = dyn_cast<CastInst>(V2))
271     if (isa<PointerType>(I->getOperand(0)->getType()))
272       return alias(V1, V1Size, I->getOperand(0), V2Size);
273 
274   // Figure out what objects these things are pointing to if we can...
275   const Value *O1 = getUnderlyingObject(V1);
276   const Value *O2 = getUnderlyingObject(V2);
277 
278   // Pointing at a discernible object?
279   if (O1) {
280     if (O2) {
281       if (isa<Argument>(O1)) {
282         // Incoming argument cannot alias locally allocated object!
283         if (isa<AllocationInst>(O2)) return NoAlias;
284         // Otherwise, nothing is known...
285       } else if (isa<Argument>(O2)) {
286         // Incoming argument cannot alias locally allocated object!
287         if (isa<AllocationInst>(O1)) return NoAlias;
288         // Otherwise, nothing is known...
289       } else if (O1 != O2) {
290         // If they are two different objects, we know that we have no alias...
291         return NoAlias;
292       }
293 
294       // If they are the same object, they we can look at the indexes.  If they
295       // index off of the object is the same for both pointers, they must alias.
296       // If they are provably different, they must not alias.  Otherwise, we
297       // can't tell anything.
298     }
299 
300 
301     if (!isa<Argument>(O1) && isa<ConstantPointerNull>(V2))
302       return NoAlias;                    // Unique values don't alias null
303 
304     if (isa<GlobalVariable>(O1) || isa<AllocationInst>(O1))
305       if (cast<PointerType>(O1->getType())->getElementType()->isSized()) {
306         // If the size of the other access is larger than the total size of the
307         // global/alloca/malloc, it cannot be accessing the global (it's
308         // undefined to load or store bytes before or after an object).
309         const Type *ElTy = cast<PointerType>(O1->getType())->getElementType();
310         unsigned GlobalSize = getTargetData().getTypeSize(ElTy);
311         if (GlobalSize < V2Size && V2Size != ~0U)
312           return NoAlias;
313       }
314   }
315 
316   if (O2) {
317     if (!isa<Argument>(O2) && isa<ConstantPointerNull>(V1))
318       return NoAlias;                    // Unique values don't alias null
319 
320     if (isa<GlobalVariable>(O2) || isa<AllocationInst>(O2))
321       if (cast<PointerType>(O2->getType())->getElementType()->isSized()) {
322         // If the size of the other access is larger than the total size of the
323         // global/alloca/malloc, it cannot be accessing the object (it's
324         // undefined to load or store bytes before or after an object).
325         const Type *ElTy = cast<PointerType>(O2->getType())->getElementType();
326         unsigned GlobalSize = getTargetData().getTypeSize(ElTy);
327         if (GlobalSize < V1Size && V1Size != ~0U)
328           return NoAlias;
329       }
330   }
331 
332   // If we have two gep instructions with must-alias'ing base pointers, figure
333   // out if the indexes to the GEP tell us anything about the derived pointer.
334   // Note that we also handle chains of getelementptr instructions as well as
335   // constant expression getelementptrs here.
336   //
337   if (isGEP(V1) && isGEP(V2)) {
338     // Drill down into the first non-gep value, to test for must-aliasing of
339     // the base pointers.
340     const Value *BasePtr1 = V1, *BasePtr2 = V2;
341     do {
342       BasePtr1 = cast<User>(BasePtr1)->getOperand(0);
343     } while (isGEP(BasePtr1) &&
344              cast<User>(BasePtr1)->getOperand(1) ==
345        Constant::getNullValue(cast<User>(BasePtr1)->getOperand(1)->getType()));
346     do {
347       BasePtr2 = cast<User>(BasePtr2)->getOperand(0);
348     } while (isGEP(BasePtr2) &&
349              cast<User>(BasePtr2)->getOperand(1) ==
350        Constant::getNullValue(cast<User>(BasePtr2)->getOperand(1)->getType()));
351 
352     // Do the base pointers alias?
353     AliasResult BaseAlias = alias(BasePtr1, V1Size, BasePtr2, V2Size);
354     if (BaseAlias == NoAlias) return NoAlias;
355     if (BaseAlias == MustAlias) {
356       // If the base pointers alias each other exactly, check to see if we can
357       // figure out anything about the resultant pointers, to try to prove
358       // non-aliasing.
359 
360       // Collect all of the chained GEP operands together into one simple place
361       std::vector<Value*> GEP1Ops, GEP2Ops;
362       BasePtr1 = GetGEPOperands(V1, GEP1Ops);
363       BasePtr2 = GetGEPOperands(V2, GEP2Ops);
364 
365       // If GetGEPOperands were able to fold to the same must-aliased pointer,
366       // do the comparison.
367       if (BasePtr1 == BasePtr2) {
368         AliasResult GAlias =
369           CheckGEPInstructions(BasePtr1->getType(), GEP1Ops, V1Size,
370                                BasePtr2->getType(), GEP2Ops, V2Size);
371         if (GAlias != MayAlias)
372           return GAlias;
373       }
374     }
375   }
376 
377   // Check to see if these two pointers are related by a getelementptr
378   // instruction.  If one pointer is a GEP with a non-zero index of the other
379   // pointer, we know they cannot alias.
380   //
381   if (isGEP(V2)) {
382     std::swap(V1, V2);
383     std::swap(V1Size, V2Size);
384   }
385 
386   if (V1Size != ~0U && V2Size != ~0U)
387     if (const User *GEP = isGEP(V1)) {
388       std::vector<Value*> GEPOperands;
389       const Value *BasePtr = GetGEPOperands(V1, GEPOperands);
390 
391       AliasResult R = alias(BasePtr, V1Size, V2, V2Size);
392       if (R == MustAlias) {
393         // If there is at least one non-zero constant index, we know they cannot
394         // alias.
395         bool ConstantFound = false;
396         bool AllZerosFound = true;
397         for (unsigned i = 0, e = GEPOperands.size(); i != e; ++i)
398           if (const Constant *C = dyn_cast<Constant>(GEPOperands[i])) {
399             if (!C->isNullValue()) {
400               ConstantFound = true;
401               AllZerosFound = false;
402               break;
403             }
404           } else {
405             AllZerosFound = false;
406           }
407 
408         // If we have getelementptr <ptr>, 0, 0, 0, 0, ... and V2 must aliases
409         // the ptr, the end result is a must alias also.
410         if (AllZerosFound)
411           return MustAlias;
412 
413         if (ConstantFound) {
414           if (V2Size <= 1 && V1Size <= 1)  // Just pointer check?
415             return NoAlias;
416 
417           // Otherwise we have to check to see that the distance is more than
418           // the size of the argument... build an index vector that is equal to
419           // the arguments provided, except substitute 0's for any variable
420           // indexes we find...
421           if (cast<PointerType>(
422                 BasePtr->getType())->getElementType()->isSized()) {
423             for (unsigned i = 0; i != GEPOperands.size(); ++i)
424               if (!isa<ConstantInt>(GEPOperands[i]))
425                 GEPOperands[i] =
426                   Constant::getNullValue(GEPOperands[i]->getType());
427             int64_t Offset =
428               getTargetData().getIndexedOffset(BasePtr->getType(), GEPOperands);
429 
430             if (Offset >= (int64_t)V2Size || Offset <= -(int64_t)V1Size)
431               return NoAlias;
432           }
433         }
434       }
435     }
436 
437   return MayAlias;
438 }
439 
440 static bool ValuesEqual(Value *V1, Value *V2) {
441   if (V1->getType() == V2->getType())
442     return V1 == V2;
443   if (Constant *C1 = dyn_cast<Constant>(V1))
444     if (Constant *C2 = dyn_cast<Constant>(V2)) {
445       // Sign extend the constants to long types.
446       C1 = ConstantExpr::getSignExtend(C1, Type::LongTy);
447       C2 = ConstantExpr::getSignExtend(C2, Type::LongTy);
448       return C1 == C2;
449     }
450   return false;
451 }
452 
453 /// CheckGEPInstructions - Check two GEP instructions with known must-aliasing
454 /// base pointers.  This checks to see if the index expressions preclude the
455 /// pointers from aliasing...
456 AliasAnalysis::AliasResult BasicAliasAnalysis::
457 CheckGEPInstructions(const Type* BasePtr1Ty, std::vector<Value*> &GEP1Ops,
458                      unsigned G1S,
459                      const Type *BasePtr2Ty, std::vector<Value*> &GEP2Ops,
460                      unsigned G2S) {
461   // We currently can't handle the case when the base pointers have different
462   // primitive types.  Since this is uncommon anyway, we are happy being
463   // extremely conservative.
464   if (BasePtr1Ty != BasePtr2Ty)
465     return MayAlias;
466 
467   const PointerType *GEPPointerTy = cast<PointerType>(BasePtr1Ty);
468 
469   // Find the (possibly empty) initial sequence of equal values... which are not
470   // necessarily constants.
471   unsigned NumGEP1Operands = GEP1Ops.size(), NumGEP2Operands = GEP2Ops.size();
472   unsigned MinOperands = std::min(NumGEP1Operands, NumGEP2Operands);
473   unsigned MaxOperands = std::max(NumGEP1Operands, NumGEP2Operands);
474   unsigned UnequalOper = 0;
475   while (UnequalOper != MinOperands &&
476          ValuesEqual(GEP1Ops[UnequalOper], GEP2Ops[UnequalOper])) {
477     // Advance through the type as we go...
478     ++UnequalOper;
479     if (const CompositeType *CT = dyn_cast<CompositeType>(BasePtr1Ty))
480       BasePtr1Ty = CT->getTypeAtIndex(GEP1Ops[UnequalOper-1]);
481     else {
482       // If all operands equal each other, then the derived pointers must
483       // alias each other...
484       BasePtr1Ty = 0;
485       assert(UnequalOper == NumGEP1Operands && UnequalOper == NumGEP2Operands &&
486              "Ran out of type nesting, but not out of operands?");
487       return MustAlias;
488     }
489   }
490 
491   // If we have seen all constant operands, and run out of indexes on one of the
492   // getelementptrs, check to see if the tail of the leftover one is all zeros.
493   // If so, return mustalias.
494   if (UnequalOper == MinOperands) {
495     if (GEP1Ops.size() < GEP2Ops.size()) std::swap(GEP1Ops, GEP2Ops);
496 
497     bool AllAreZeros = true;
498     for (unsigned i = UnequalOper; i != MaxOperands; ++i)
499       if (!isa<Constant>(GEP1Ops[i]) ||
500           !cast<Constant>(GEP1Ops[i])->isNullValue()) {
501         AllAreZeros = false;
502         break;
503       }
504     if (AllAreZeros) return MustAlias;
505   }
506 
507 
508   // So now we know that the indexes derived from the base pointers,
509   // which are known to alias, are different.  We can still determine a
510   // no-alias result if there are differing constant pairs in the index
511   // chain.  For example:
512   //        A[i][0] != A[j][1] iff (&A[0][1]-&A[0][0] >= std::max(G1S, G2S))
513   //
514   unsigned SizeMax = std::max(G1S, G2S);
515   if (SizeMax == ~0U) return MayAlias; // Avoid frivolous work.
516 
517   // Scan for the first operand that is constant and unequal in the
518   // two getelementptrs...
519   unsigned FirstConstantOper = UnequalOper;
520   for (; FirstConstantOper != MinOperands; ++FirstConstantOper) {
521     const Value *G1Oper = GEP1Ops[FirstConstantOper];
522     const Value *G2Oper = GEP2Ops[FirstConstantOper];
523 
524     if (G1Oper != G2Oper)   // Found non-equal constant indexes...
525       if (Constant *G1OC = dyn_cast<ConstantInt>(const_cast<Value*>(G1Oper)))
526         if (Constant *G2OC = dyn_cast<ConstantInt>(const_cast<Value*>(G2Oper))){
527           if (G1OC->getType() != G2OC->getType()) {
528             // Sign extend both operands to long.
529             G1OC = ConstantExpr::getSignExtend(G1OC, Type::LongTy);
530             G2OC = ConstantExpr::getSignExtend(G2OC, Type::LongTy);
531             GEP1Ops[FirstConstantOper] = G1OC;
532             GEP2Ops[FirstConstantOper] = G2OC;
533           }
534 
535           if (G1OC != G2OC) {
536             // Make sure they are comparable (ie, not constant expressions), and
537             // make sure the GEP with the smaller leading constant is GEP1.
538             Constant *Compare = ConstantExpr::getSetGT(G1OC, G2OC);
539             if (ConstantBool *CV = dyn_cast<ConstantBool>(Compare)) {
540               if (CV->getValue())   // If they are comparable and G2 > G1
541                 std::swap(GEP1Ops, GEP2Ops);  // Make GEP1 < GEP2
542               break;
543             }
544           }
545         }
546     BasePtr1Ty = cast<CompositeType>(BasePtr1Ty)->getTypeAtIndex(G1Oper);
547   }
548 
549   // No shared constant operands, and we ran out of common operands.  At this
550   // point, the GEP instructions have run through all of their operands, and we
551   // haven't found evidence that there are any deltas between the GEP's.
552   // However, one GEP may have more operands than the other.  If this is the
553   // case, there may still be hope.  Check this now.
554   if (FirstConstantOper == MinOperands) {
555     // Make GEP1Ops be the longer one if there is a longer one.
556     if (GEP1Ops.size() < GEP2Ops.size())
557       std::swap(GEP1Ops, GEP2Ops);
558 
559     // Is there anything to check?
560     if (GEP1Ops.size() > MinOperands) {
561       for (unsigned i = FirstConstantOper; i != MaxOperands; ++i)
562         if (isa<ConstantInt>(GEP1Ops[i]) &&
563             !cast<Constant>(GEP1Ops[i])->isNullValue()) {
564           // Yup, there's a constant in the tail.  Set all variables to
565           // constants in the GEP instruction to make it suiteable for
566           // TargetData::getIndexedOffset.
567           for (i = 0; i != MaxOperands; ++i)
568             if (!isa<ConstantInt>(GEP1Ops[i]))
569               GEP1Ops[i] = Constant::getNullValue(GEP1Ops[i]->getType());
570           // Okay, now get the offset.  This is the relative offset for the full
571           // instruction.
572           const TargetData &TD = getTargetData();
573           int64_t Offset1 = TD.getIndexedOffset(GEPPointerTy, GEP1Ops);
574 
575           // Now crop off any constants from the end...
576           GEP1Ops.resize(MinOperands);
577           int64_t Offset2 = TD.getIndexedOffset(GEPPointerTy, GEP1Ops);
578 
579           // If the tail provided a bit enough offset, return noalias!
580           if ((uint64_t)(Offset2-Offset1) >= SizeMax)
581             return NoAlias;
582         }
583     }
584 
585     // Couldn't find anything useful.
586     return MayAlias;
587   }
588 
589   // If there are non-equal constants arguments, then we can figure
590   // out a minimum known delta between the two index expressions... at
591   // this point we know that the first constant index of GEP1 is less
592   // than the first constant index of GEP2.
593 
594   // Advance BasePtr[12]Ty over this first differing constant operand.
595   BasePtr2Ty = cast<CompositeType>(BasePtr1Ty)->getTypeAtIndex(GEP2Ops[FirstConstantOper]);
596   BasePtr1Ty = cast<CompositeType>(BasePtr1Ty)->getTypeAtIndex(GEP1Ops[FirstConstantOper]);
597 
598   // We are going to be using TargetData::getIndexedOffset to determine the
599   // offset that each of the GEP's is reaching.  To do this, we have to convert
600   // all variable references to constant references.  To do this, we convert the
601   // initial equal sequence of variables into constant zeros to start with.
602   for (unsigned i = 0; i != FirstConstantOper; ++i)
603     if (!isa<ConstantInt>(GEP1Ops[i]) || !isa<ConstantInt>(GEP2Ops[i]))
604       GEP1Ops[i] = GEP2Ops[i] = Constant::getNullValue(Type::UIntTy);
605 
606   // We know that GEP1Ops[FirstConstantOper] & GEP2Ops[FirstConstantOper] are ok
607 
608   // Loop over the rest of the operands...
609   for (unsigned i = FirstConstantOper+1; i != MaxOperands; ++i) {
610     const Value *Op1 = i < GEP1Ops.size() ? GEP1Ops[i] : 0;
611     const Value *Op2 = i < GEP2Ops.size() ? GEP2Ops[i] : 0;
612     // If they are equal, use a zero index...
613     if (Op1 == Op2 && BasePtr1Ty == BasePtr2Ty) {
614       if (!isa<ConstantInt>(Op1))
615         GEP1Ops[i] = GEP2Ops[i] = Constant::getNullValue(Op1->getType());
616       // Otherwise, just keep the constants we have.
617     } else {
618       if (Op1) {
619         if (const ConstantInt *Op1C = dyn_cast<ConstantInt>(Op1)) {
620           // If this is an array index, make sure the array element is in range.
621           if (const ArrayType *AT = dyn_cast<ArrayType>(BasePtr1Ty))
622             if (Op1C->getRawValue() >= AT->getNumElements())
623               return MayAlias;  // Be conservative with out-of-range accesses
624 
625         } else {
626           // GEP1 is known to produce a value less than GEP2.  To be
627           // conservatively correct, we must assume the largest possible
628           // constant is used in this position.  This cannot be the initial
629           // index to the GEP instructions (because we know we have at least one
630           // element before this one with the different constant arguments), so
631           // we know that the current index must be into either a struct or
632           // array.  Because we know it's not constant, this cannot be a
633           // structure index.  Because of this, we can calculate the maximum
634           // value possible.
635           //
636           if (const ArrayType *AT = dyn_cast<ArrayType>(BasePtr1Ty))
637             GEP1Ops[i] = ConstantSInt::get(Type::LongTy,AT->getNumElements()-1);
638         }
639       }
640 
641       if (Op2) {
642         if (const ConstantInt *Op2C = dyn_cast<ConstantInt>(Op2)) {
643           // If this is an array index, make sure the array element is in range.
644           if (const ArrayType *AT = dyn_cast<ArrayType>(BasePtr1Ty))
645             if (Op2C->getRawValue() >= AT->getNumElements())
646               return MayAlias;  // Be conservative with out-of-range accesses
647         } else {  // Conservatively assume the minimum value for this index
648           GEP2Ops[i] = Constant::getNullValue(Op2->getType());
649         }
650       }
651     }
652 
653     if (BasePtr1Ty && Op1) {
654       if (const CompositeType *CT = dyn_cast<CompositeType>(BasePtr1Ty))
655         BasePtr1Ty = CT->getTypeAtIndex(GEP1Ops[i]);
656       else
657         BasePtr1Ty = 0;
658     }
659 
660     if (BasePtr2Ty && Op2) {
661       if (const CompositeType *CT = dyn_cast<CompositeType>(BasePtr2Ty))
662         BasePtr2Ty = CT->getTypeAtIndex(GEP2Ops[i]);
663       else
664         BasePtr2Ty = 0;
665     }
666   }
667 
668   if (GEPPointerTy->getElementType()->isSized()) {
669     int64_t Offset1 = getTargetData().getIndexedOffset(GEPPointerTy, GEP1Ops);
670     int64_t Offset2 = getTargetData().getIndexedOffset(GEPPointerTy, GEP2Ops);
671     assert(Offset1<Offset2 && "There is at least one different constant here!");
672 
673     if ((uint64_t)(Offset2-Offset1) >= SizeMax) {
674       //std::cerr << "Determined that these two GEP's don't alias ["
675       //          << SizeMax << " bytes]: \n" << *GEP1 << *GEP2;
676       return NoAlias;
677     }
678   }
679   return MayAlias;
680 }
681 
682 namespace {
683   struct StringCompare {
684     bool operator()(const char *LHS, const char *RHS) {
685       return strcmp(LHS, RHS) < 0;
686     }
687   };
688 }
689 
690 // Note that this list cannot contain libm functions (such as acos and sqrt)
691 // that set errno on a domain or other error.
692 static const char *DoesntAccessMemoryTable[] = {
693   // LLVM intrinsics:
694   "llvm.frameaddress", "llvm.returnaddress", "llvm.readport",
695   "llvm.isunordered",
696 
697   "abs", "labs", "llabs", "imaxabs", "fabs", "fabsf", "fabsl",
698   "trunc", "truncf", "truncl", "ldexp",
699 
700   "atan", "atanf", "atanl",   "atan2", "atan2f", "atan2l",
701   "cbrt",
702   "cos", "cosf", "cosl",      "cosh", "coshf", "coshl",
703   "exp", "expf", "expl",
704   "hypot",
705   "sin", "sinf", "sinl",      "sinh", "sinhf", "sinhl",
706   "tan", "tanf", "tanl",      "tanh", "tanhf", "tanhl",
707 
708   // ctype.h
709   "isalnum", "isalpha", "iscntrl", "isdigit", "isgraph", "islower", "isprint"
710   "ispunct", "isspace", "isupper", "isxdigit", "tolower", "toupper",
711 
712   // wctype.h"
713   "iswalnum", "iswalpha", "iswcntrl", "iswdigit", "iswgraph", "iswlower",
714   "iswprint", "iswpunct", "iswspace", "iswupper", "iswxdigit",
715 
716   "iswctype", "towctrans", "towlower", "towupper",
717 
718   "btowc", "wctob",
719 
720   "isinf", "isnan", "finite",
721 
722   // C99 math functions
723   "copysign", "copysignf", "copysignd",
724   "nexttoward", "nexttowardf", "nexttowardd",
725   "nextafter", "nextafterf", "nextafterd",
726 
727   // glibc functions:
728   "__fpclassify", "__fpclassifyf", "__fpclassifyl",
729   "__signbit", "__signbitf", "__signbitl",
730 };
731 
732 static const unsigned DAMTableSize =
733     sizeof(DoesntAccessMemoryTable)/sizeof(DoesntAccessMemoryTable[0]);
734 
735 static const char *OnlyReadsMemoryTable[] = {
736   "atoi", "atol", "atof", "atoll", "atoq", "a64l",
737   "bcmp", "memcmp", "memchr", "memrchr", "wmemcmp", "wmemchr",
738 
739   // Strings
740   "strcmp", "strcasecmp", "strcoll", "strncmp", "strncasecmp",
741   "strchr", "strcspn", "strlen", "strpbrk", "strrchr", "strspn", "strstr",
742   "index", "rindex",
743 
744   // Wide char strings
745   "wcschr", "wcscmp", "wcscoll", "wcscspn", "wcslen", "wcsncmp", "wcspbrk",
746   "wcsrchr", "wcsspn", "wcsstr",
747 
748   // glibc
749   "alphasort", "alphasort64", "versionsort", "versionsort64",
750 
751   // C99
752   "nan", "nanf", "nand",
753 
754   // File I/O
755   "feof", "ferror", "fileno",
756   "feof_unlocked", "ferror_unlocked", "fileno_unlocked"
757 };
758 
759 static const unsigned ORMTableSize =
760     sizeof(OnlyReadsMemoryTable)/sizeof(OnlyReadsMemoryTable[0]);
761 
762 AliasAnalysis::ModRefBehavior
763 BasicAliasAnalysis::getModRefBehavior(Function *F, CallSite CS,
764                                       std::vector<PointerAccessInfo> *Info) {
765   if (!F->isExternal()) return UnknownModRefBehavior;
766 
767   static bool Initialized = false;
768   if (!Initialized) {
769     // Sort the table the first time through.
770     std::sort(DoesntAccessMemoryTable, DoesntAccessMemoryTable+DAMTableSize,
771               StringCompare());
772     std::sort(OnlyReadsMemoryTable, OnlyReadsMemoryTable+ORMTableSize,
773               StringCompare());
774     Initialized = true;
775   }
776 
777   const char **Ptr = std::lower_bound(DoesntAccessMemoryTable,
778                                       DoesntAccessMemoryTable+DAMTableSize,
779                                       F->getName().c_str(), StringCompare());
780   if (Ptr != DoesntAccessMemoryTable+DAMTableSize && *Ptr == F->getName())
781     return DoesNotAccessMemory;
782 
783   Ptr = std::lower_bound(OnlyReadsMemoryTable,
784                          OnlyReadsMemoryTable+ORMTableSize,
785                          F->getName().c_str(), StringCompare());
786   if (Ptr != OnlyReadsMemoryTable+ORMTableSize && *Ptr == F->getName())
787     return OnlyReadsMemory;
788 
789   return UnknownModRefBehavior;
790 }
791