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