1 //===- BasicAliasAnalysis.cpp - Local Alias Analysis Impl -----------------===//
3 // The LLVM Compiler Infrastructure
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.
8 //===----------------------------------------------------------------------===//
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.
14 //===----------------------------------------------------------------------===//
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/ParameterAttributes.h"
22 #include "llvm/GlobalVariable.h"
23 #include "llvm/Instructions.h"
24 #include "llvm/Pass.h"
25 #include "llvm/Target/TargetData.h"
26 #include "llvm/ADT/SmallVector.h"
27 #include "llvm/Support/Compiler.h"
28 #include "llvm/Support/GetElementPtrTypeIterator.h"
29 #include "llvm/Support/ManagedStatic.h"
34 /// NoAA - This class implements the -no-aa pass, which always returns "I
35 /// don't know" for alias queries. NoAA is unlike other alias analysis
36 /// implementations, in that it does not chain to a previous analysis. As
37 /// such it doesn't follow many of the rules that other alias analyses must.
39 struct VISIBILITY_HIDDEN NoAA : public ImmutablePass, public AliasAnalysis {
40 static char ID; // Class identification, replacement for typeinfo
41 NoAA() : ImmutablePass((intptr_t)&ID) {}
42 explicit NoAA(intptr_t PID) : ImmutablePass(PID) { }
44 virtual void getAnalysisUsage(AnalysisUsage &AU) const {
45 AU.addRequired<TargetData>();
48 virtual void initializePass() {
49 TD = &getAnalysis<TargetData>();
52 virtual AliasResult alias(const Value *V1, unsigned V1Size,
53 const Value *V2, unsigned V2Size) {
57 virtual ModRefBehavior getModRefBehavior(Function *F, CallSite CS,
58 std::vector<PointerAccessInfo> *Info) {
59 return UnknownModRefBehavior;
62 virtual void getArgumentAccesses(Function *F, CallSite CS,
63 std::vector<PointerAccessInfo> &Info) {
64 assert(0 && "This method may not be called on this function!");
67 virtual void getMustAliases(Value *P, std::vector<Value*> &RetVals) { }
68 virtual bool pointsToConstantMemory(const Value *P) { return false; }
69 virtual ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size) {
72 virtual ModRefResult getModRefInfo(CallSite CS1, CallSite CS2) {
75 virtual bool hasNoModRefInfoForCalls() const { return true; }
77 virtual void deleteValue(Value *V) {}
78 virtual void copyValue(Value *From, Value *To) {}
81 // Register this pass...
84 U("no-aa", "No Alias Analysis (always returns 'may' alias)");
86 // Declare that we implement the AliasAnalysis interface
87 RegisterAnalysisGroup<AliasAnalysis> V(U);
88 } // End of anonymous namespace
90 ImmutablePass *llvm::createNoAAPass() { return new NoAA(); }
93 /// BasicAliasAnalysis - This is the default alias analysis implementation.
94 /// Because it doesn't chain to a previous alias analysis (like -no-aa), it
95 /// derives from the NoAA class.
96 struct VISIBILITY_HIDDEN BasicAliasAnalysis : public NoAA {
97 static char ID; // Class identification, replacement for typeinfo
98 BasicAliasAnalysis() : NoAA((intptr_t)&ID) { }
99 AliasResult alias(const Value *V1, unsigned V1Size,
100 const Value *V2, unsigned V2Size);
102 ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size);
103 ModRefResult getModRefInfo(CallSite CS1, CallSite CS2) {
104 return NoAA::getModRefInfo(CS1,CS2);
107 /// hasNoModRefInfoForCalls - We can provide mod/ref information against
108 /// non-escaping allocations.
109 virtual bool hasNoModRefInfoForCalls() const { return false; }
111 /// pointsToConstantMemory - Chase pointers until we find a (constant
113 bool pointsToConstantMemory(const Value *P);
115 virtual ModRefBehavior getModRefBehavior(Function *F, CallSite CS,
116 std::vector<PointerAccessInfo> *Info);
119 // CheckGEPInstructions - Check two GEP instructions with known
120 // must-aliasing base pointers. This checks to see if the index expressions
121 // preclude the pointers from aliasing...
123 CheckGEPInstructions(const Type* BasePtr1Ty,
124 Value **GEP1Ops, unsigned NumGEP1Ops, unsigned G1Size,
125 const Type *BasePtr2Ty,
126 Value **GEP2Ops, unsigned NumGEP2Ops, unsigned G2Size);
129 // Register this pass...
130 char BasicAliasAnalysis::ID = 0;
131 RegisterPass<BasicAliasAnalysis>
132 X("basicaa", "Basic Alias Analysis (default AA impl)");
134 // Declare that we implement the AliasAnalysis interface
135 RegisterAnalysisGroup<AliasAnalysis, true> Y(X);
136 } // End of anonymous namespace
138 ImmutablePass *llvm::createBasicAliasAnalysisPass() {
139 return new BasicAliasAnalysis();
142 // getUnderlyingObject - This traverses the use chain to figure out what object
143 // the specified value points to. If the value points to, or is derived from, a
144 // unique object or an argument, return it.
145 static const Value *getUnderlyingObject(const Value *V) {
146 if (!isa<PointerType>(V->getType())) return 0;
148 // If we are at some type of object, return it. GlobalValues and Allocations
149 // have unique addresses.
150 if (isa<GlobalValue>(V) || isa<AllocationInst>(V) || isa<Argument>(V))
153 // Traverse through different addressing mechanisms...
154 if (const Instruction *I = dyn_cast<Instruction>(V)) {
155 if (isa<BitCastInst>(I) || isa<GetElementPtrInst>(I))
156 return getUnderlyingObject(I->getOperand(0));
157 } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V)) {
158 if (CE->getOpcode() == Instruction::BitCast ||
159 CE->getOpcode() == Instruction::GetElementPtr)
160 return getUnderlyingObject(CE->getOperand(0));
165 static const User *isGEP(const Value *V) {
166 if (isa<GetElementPtrInst>(V) ||
167 (isa<ConstantExpr>(V) &&
168 cast<ConstantExpr>(V)->getOpcode() == Instruction::GetElementPtr))
169 return cast<User>(V);
173 static const Value *GetGEPOperands(const Value *V,
174 SmallVector<Value*, 16> &GEPOps){
175 assert(GEPOps.empty() && "Expect empty list to populate!");
176 GEPOps.insert(GEPOps.end(), cast<User>(V)->op_begin()+1,
177 cast<User>(V)->op_end());
179 // Accumulate all of the chained indexes into the operand array
180 V = cast<User>(V)->getOperand(0);
182 while (const User *G = isGEP(V)) {
183 if (!isa<Constant>(GEPOps[0]) || isa<GlobalValue>(GEPOps[0]) ||
184 !cast<Constant>(GEPOps[0])->isNullValue())
185 break; // Don't handle folding arbitrary pointer offsets yet...
186 GEPOps.erase(GEPOps.begin()); // Drop the zero index
187 GEPOps.insert(GEPOps.begin(), G->op_begin()+1, G->op_end());
188 V = G->getOperand(0);
193 /// pointsToConstantMemory - Chase pointers until we find a (constant
195 bool BasicAliasAnalysis::pointsToConstantMemory(const Value *P) {
196 if (const Value *V = getUnderlyingObject(P))
197 if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(V))
198 return GV->isConstant();
202 // Determine if an AllocationInst instruction escapes from the function it is
203 // contained in. If it does not escape, there is no way for another function to
204 // mod/ref it. We do this by looking at its uses and determining if the uses
205 // can escape (recursively).
206 static bool AddressMightEscape(const Value *V) {
207 for (Value::use_const_iterator UI = V->use_begin(), E = V->use_end();
209 const Instruction *I = cast<Instruction>(*UI);
210 switch (I->getOpcode()) {
211 case Instruction::Load:
213 case Instruction::Store:
214 if (I->getOperand(0) == V)
215 return true; // Escapes if the pointer is stored.
217 case Instruction::GetElementPtr:
218 if (AddressMightEscape(I))
220 case Instruction::BitCast:
221 if (!isa<PointerType>(I->getType()))
223 if (AddressMightEscape(I))
226 case Instruction::Ret:
227 // If returned, the address will escape to calling functions, but no
228 // callees could modify it.
237 // getModRefInfo - Check to see if the specified callsite can clobber the
238 // specified memory object. Since we only look at local properties of this
239 // function, we really can't say much about this query. We do, however, use
240 // simple "address taken" analysis on local objects.
242 AliasAnalysis::ModRefResult
243 BasicAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) {
244 if (!isa<Constant>(P))
245 if (const AllocationInst *AI =
246 dyn_cast_or_null<AllocationInst>(getUnderlyingObject(P))) {
247 // Okay, the pointer is to a stack allocated object. If we can prove that
248 // the pointer never "escapes", then we know the call cannot clobber it,
249 // because it simply can't get its address.
250 if (!AddressMightEscape(AI))
253 // If this is a tail call and P points to a stack location, we know that
254 // the tail call cannot access or modify the local stack.
255 if (CallInst *CI = dyn_cast<CallInst>(CS.getInstruction()))
256 if (CI->isTailCall() && isa<AllocaInst>(AI))
260 // The AliasAnalysis base class has some smarts, lets use them.
261 return AliasAnalysis::getModRefInfo(CS, P, Size);
264 // alias - Provide a bunch of ad-hoc rules to disambiguate in common cases, such
265 // as array references. Note that this function is heavily tail recursive.
266 // Hopefully we have a smart C++ compiler. :)
268 AliasAnalysis::AliasResult
269 BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size,
270 const Value *V2, unsigned V2Size) {
271 // Strip off any constant expression casts if they exist
272 if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V1))
273 if (CE->isCast() && isa<PointerType>(CE->getOperand(0)->getType()))
274 V1 = CE->getOperand(0);
275 if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V2))
276 if (CE->isCast() && isa<PointerType>(CE->getOperand(0)->getType()))
277 V2 = CE->getOperand(0);
279 // Are we checking for alias of the same value?
280 if (V1 == V2) return MustAlias;
282 if ((!isa<PointerType>(V1->getType()) || !isa<PointerType>(V2->getType())) &&
283 V1->getType() != Type::Int64Ty && V2->getType() != Type::Int64Ty)
284 return NoAlias; // Scalars cannot alias each other
286 // Strip off cast instructions...
287 if (const BitCastInst *I = dyn_cast<BitCastInst>(V1))
288 return alias(I->getOperand(0), V1Size, V2, V2Size);
289 if (const BitCastInst *I = dyn_cast<BitCastInst>(V2))
290 return alias(V1, V1Size, I->getOperand(0), V2Size);
292 // Figure out what objects these things are pointing to if we can...
293 const Value *O1 = getUnderlyingObject(V1);
294 const Value *O2 = getUnderlyingObject(V2);
296 // Pointing at a discernible object?
298 // Check for noalias attribute
299 if (isa<Argument>(O1)) {
300 const Argument *Arg = cast<Argument>(O1);
301 const Function *Func = Arg->getParent();
302 const ParamAttrsList *Attr = Func->getFunctionType()->getParamAttrs();
305 for (Function::const_arg_iterator I = Func->arg_begin(),
306 E = Func->arg_end(); I != E; ++I, ++Idx) {
308 Attr->paramHasAttr(Idx, ParamAttr::NoAlias))
314 if (isa<Argument>(O1)) {
315 // Incoming argument cannot alias locally allocated object!
316 if (isa<AllocationInst>(O2)) return NoAlias;
317 // Otherwise, nothing is known...
318 } else if (isa<Argument>(O2)) {
319 // Incoming argument cannot alias locally allocated object!
320 if (isa<AllocationInst>(O1)) return NoAlias;
321 // Otherwise, nothing is known...
322 } else if (O1 != O2) {
323 // If they are two different objects, we know that we have no alias...
327 // Check for noalias atrribute independently from above logic
328 if (isa<Argument>(O2)) {
329 const Argument *Arg = cast<Argument>(O2);
330 const Function *Func = Arg->getParent();
331 const ParamAttrsList *Attr = Func->getFunctionType()->getParamAttrs();
334 for (Function::const_arg_iterator I = Func->arg_begin(),
335 E = Func->arg_end(); I != E; ++I, ++Idx) {
337 Attr->paramHasAttr(Idx, ParamAttr::NoAlias))
342 // If they are the same object, they we can look at the indexes. If they
343 // index off of the object is the same for both pointers, they must alias.
344 // If they are provably different, they must not alias. Otherwise, we
345 // can't tell anything.
349 if (!isa<Argument>(O1) && isa<ConstantPointerNull>(V2))
350 return NoAlias; // Unique values don't alias null
352 if (isa<GlobalVariable>(O1) ||
353 (isa<AllocationInst>(O1) &&
354 !cast<AllocationInst>(O1)->isArrayAllocation()))
355 if (cast<PointerType>(O1->getType())->getElementType()->isSized()) {
356 // If the size of the other access is larger than the total size of the
357 // global/alloca/malloc, it cannot be accessing the global (it's
358 // undefined to load or store bytes before or after an object).
359 const Type *ElTy = cast<PointerType>(O1->getType())->getElementType();
360 unsigned GlobalSize = getTargetData().getTypeSize(ElTy);
361 if (GlobalSize < V2Size && V2Size != ~0U)
367 if (!isa<Argument>(O2) && isa<ConstantPointerNull>(V1))
368 return NoAlias; // Unique values don't alias null
370 if (isa<GlobalVariable>(O2) ||
371 (isa<AllocationInst>(O2) &&
372 !cast<AllocationInst>(O2)->isArrayAllocation()))
373 if (cast<PointerType>(O2->getType())->getElementType()->isSized()) {
374 // If the size of the other access is larger than the total size of the
375 // global/alloca/malloc, it cannot be accessing the object (it's
376 // undefined to load or store bytes before or after an object).
377 const Type *ElTy = cast<PointerType>(O2->getType())->getElementType();
378 unsigned GlobalSize = getTargetData().getTypeSize(ElTy);
379 if (GlobalSize < V1Size && V1Size != ~0U)
384 // If we have two gep instructions with must-alias'ing base pointers, figure
385 // out if the indexes to the GEP tell us anything about the derived pointer.
386 // Note that we also handle chains of getelementptr instructions as well as
387 // constant expression getelementptrs here.
389 if (isGEP(V1) && isGEP(V2)) {
390 // Drill down into the first non-gep value, to test for must-aliasing of
391 // the base pointers.
392 const Value *BasePtr1 = V1, *BasePtr2 = V2;
394 BasePtr1 = cast<User>(BasePtr1)->getOperand(0);
395 } while (isGEP(BasePtr1) &&
396 cast<User>(BasePtr1)->getOperand(1) ==
397 Constant::getNullValue(cast<User>(BasePtr1)->getOperand(1)->getType()));
399 BasePtr2 = cast<User>(BasePtr2)->getOperand(0);
400 } while (isGEP(BasePtr2) &&
401 cast<User>(BasePtr2)->getOperand(1) ==
402 Constant::getNullValue(cast<User>(BasePtr2)->getOperand(1)->getType()));
404 // Do the base pointers alias?
405 AliasResult BaseAlias = alias(BasePtr1, ~0U, BasePtr2, ~0U);
406 if (BaseAlias == NoAlias) return NoAlias;
407 if (BaseAlias == MustAlias) {
408 // If the base pointers alias each other exactly, check to see if we can
409 // figure out anything about the resultant pointers, to try to prove
412 // Collect all of the chained GEP operands together into one simple place
413 SmallVector<Value*, 16> GEP1Ops, GEP2Ops;
414 BasePtr1 = GetGEPOperands(V1, GEP1Ops);
415 BasePtr2 = GetGEPOperands(V2, GEP2Ops);
417 // If GetGEPOperands were able to fold to the same must-aliased pointer,
418 // do the comparison.
419 if (BasePtr1 == BasePtr2) {
421 CheckGEPInstructions(BasePtr1->getType(),
422 &GEP1Ops[0], GEP1Ops.size(), V1Size,
424 &GEP2Ops[0], GEP2Ops.size(), V2Size);
425 if (GAlias != MayAlias)
431 // Check to see if these two pointers are related by a getelementptr
432 // instruction. If one pointer is a GEP with a non-zero index of the other
433 // pointer, we know they cannot alias.
437 std::swap(V1Size, V2Size);
440 if (V1Size != ~0U && V2Size != ~0U)
442 SmallVector<Value*, 16> GEPOperands;
443 const Value *BasePtr = GetGEPOperands(V1, GEPOperands);
445 AliasResult R = alias(BasePtr, V1Size, V2, V2Size);
446 if (R == MustAlias) {
447 // If there is at least one non-zero constant index, we know they cannot
449 bool ConstantFound = false;
450 bool AllZerosFound = true;
451 for (unsigned i = 0, e = GEPOperands.size(); i != e; ++i)
452 if (const Constant *C = dyn_cast<Constant>(GEPOperands[i])) {
453 if (!C->isNullValue()) {
454 ConstantFound = true;
455 AllZerosFound = false;
459 AllZerosFound = false;
462 // If we have getelementptr <ptr>, 0, 0, 0, 0, ... and V2 must aliases
463 // the ptr, the end result is a must alias also.
468 if (V2Size <= 1 && V1Size <= 1) // Just pointer check?
471 // Otherwise we have to check to see that the distance is more than
472 // the size of the argument... build an index vector that is equal to
473 // the arguments provided, except substitute 0's for any variable
474 // indexes we find...
475 if (cast<PointerType>(
476 BasePtr->getType())->getElementType()->isSized()) {
477 for (unsigned i = 0; i != GEPOperands.size(); ++i)
478 if (!isa<ConstantInt>(GEPOperands[i]))
480 Constant::getNullValue(GEPOperands[i]->getType());
482 getTargetData().getIndexedOffset(BasePtr->getType(),
486 if (Offset >= (int64_t)V2Size || Offset <= -(int64_t)V1Size)
496 // This function is used to determin if the indices of two GEP instructions are
497 // equal. V1 and V2 are the indices.
498 static bool IndexOperandsEqual(Value *V1, Value *V2) {
499 if (V1->getType() == V2->getType())
501 if (Constant *C1 = dyn_cast<Constant>(V1))
502 if (Constant *C2 = dyn_cast<Constant>(V2)) {
503 // Sign extend the constants to long types, if necessary
504 if (C1->getType() != Type::Int64Ty)
505 C1 = ConstantExpr::getSExt(C1, Type::Int64Ty);
506 if (C2->getType() != Type::Int64Ty)
507 C2 = ConstantExpr::getSExt(C2, Type::Int64Ty);
513 /// CheckGEPInstructions - Check two GEP instructions with known must-aliasing
514 /// base pointers. This checks to see if the index expressions preclude the
515 /// pointers from aliasing...
516 AliasAnalysis::AliasResult
517 BasicAliasAnalysis::CheckGEPInstructions(
518 const Type* BasePtr1Ty, Value **GEP1Ops, unsigned NumGEP1Ops, unsigned G1S,
519 const Type *BasePtr2Ty, Value **GEP2Ops, unsigned NumGEP2Ops, unsigned G2S) {
520 // We currently can't handle the case when the base pointers have different
521 // primitive types. Since this is uncommon anyway, we are happy being
522 // extremely conservative.
523 if (BasePtr1Ty != BasePtr2Ty)
526 const PointerType *GEPPointerTy = cast<PointerType>(BasePtr1Ty);
528 // Find the (possibly empty) initial sequence of equal values... which are not
529 // necessarily constants.
530 unsigned NumGEP1Operands = NumGEP1Ops, NumGEP2Operands = NumGEP2Ops;
531 unsigned MinOperands = std::min(NumGEP1Operands, NumGEP2Operands);
532 unsigned MaxOperands = std::max(NumGEP1Operands, NumGEP2Operands);
533 unsigned UnequalOper = 0;
534 while (UnequalOper != MinOperands &&
535 IndexOperandsEqual(GEP1Ops[UnequalOper], GEP2Ops[UnequalOper])) {
536 // Advance through the type as we go...
538 if (const CompositeType *CT = dyn_cast<CompositeType>(BasePtr1Ty))
539 BasePtr1Ty = CT->getTypeAtIndex(GEP1Ops[UnequalOper-1]);
541 // If all operands equal each other, then the derived pointers must
542 // alias each other...
544 assert(UnequalOper == NumGEP1Operands && UnequalOper == NumGEP2Operands &&
545 "Ran out of type nesting, but not out of operands?");
550 // If we have seen all constant operands, and run out of indexes on one of the
551 // getelementptrs, check to see if the tail of the leftover one is all zeros.
552 // If so, return mustalias.
553 if (UnequalOper == MinOperands) {
554 if (NumGEP1Ops < NumGEP2Ops) {
555 std::swap(GEP1Ops, GEP2Ops);
556 std::swap(NumGEP1Ops, NumGEP2Ops);
559 bool AllAreZeros = true;
560 for (unsigned i = UnequalOper; i != MaxOperands; ++i)
561 if (!isa<Constant>(GEP1Ops[i]) ||
562 !cast<Constant>(GEP1Ops[i])->isNullValue()) {
566 if (AllAreZeros) return MustAlias;
570 // So now we know that the indexes derived from the base pointers,
571 // which are known to alias, are different. We can still determine a
572 // no-alias result if there are differing constant pairs in the index
573 // chain. For example:
574 // A[i][0] != A[j][1] iff (&A[0][1]-&A[0][0] >= std::max(G1S, G2S))
576 // We have to be careful here about array accesses. In particular, consider:
577 // A[1][0] vs A[0][i]
578 // In this case, we don't *know* that the array will be accessed in bounds:
579 // the index could even be negative. Because of this, we have to
580 // conservatively *give up* and return may alias. We disregard differing
581 // array subscripts that are followed by a variable index without going
584 unsigned SizeMax = std::max(G1S, G2S);
585 if (SizeMax == ~0U) return MayAlias; // Avoid frivolous work.
587 // Scan for the first operand that is constant and unequal in the
588 // two getelementptrs...
589 unsigned FirstConstantOper = UnequalOper;
590 for (; FirstConstantOper != MinOperands; ++FirstConstantOper) {
591 const Value *G1Oper = GEP1Ops[FirstConstantOper];
592 const Value *G2Oper = GEP2Ops[FirstConstantOper];
594 if (G1Oper != G2Oper) // Found non-equal constant indexes...
595 if (Constant *G1OC = dyn_cast<ConstantInt>(const_cast<Value*>(G1Oper)))
596 if (Constant *G2OC = dyn_cast<ConstantInt>(const_cast<Value*>(G2Oper))){
597 if (G1OC->getType() != G2OC->getType()) {
598 // Sign extend both operands to long.
599 if (G1OC->getType() != Type::Int64Ty)
600 G1OC = ConstantExpr::getSExt(G1OC, Type::Int64Ty);
601 if (G2OC->getType() != Type::Int64Ty)
602 G2OC = ConstantExpr::getSExt(G2OC, Type::Int64Ty);
603 GEP1Ops[FirstConstantOper] = G1OC;
604 GEP2Ops[FirstConstantOper] = G2OC;
608 // Handle the "be careful" case above: if this is an array/vector
609 // subscript, scan for a subsequent variable array index.
610 if (isa<SequentialType>(BasePtr1Ty)) {
612 cast<SequentialType>(BasePtr1Ty)->getElementType();
613 bool isBadCase = false;
615 for (unsigned Idx = FirstConstantOper+1;
616 Idx != MinOperands && isa<SequentialType>(NextTy); ++Idx) {
617 const Value *V1 = GEP1Ops[Idx], *V2 = GEP2Ops[Idx];
618 if (!isa<Constant>(V1) || !isa<Constant>(V2)) {
622 NextTy = cast<SequentialType>(NextTy)->getElementType();
625 if (isBadCase) G1OC = 0;
628 // Make sure they are comparable (ie, not constant expressions), and
629 // make sure the GEP with the smaller leading constant is GEP1.
631 Constant *Compare = ConstantExpr::getICmp(ICmpInst::ICMP_SGT,
633 if (ConstantInt *CV = dyn_cast<ConstantInt>(Compare)) {
634 if (CV->getZExtValue()) { // If they are comparable and G2 > G1
635 std::swap(GEP1Ops, GEP2Ops); // Make GEP1 < GEP2
636 std::swap(NumGEP1Ops, NumGEP2Ops);
643 BasePtr1Ty = cast<CompositeType>(BasePtr1Ty)->getTypeAtIndex(G1Oper);
646 // No shared constant operands, and we ran out of common operands. At this
647 // point, the GEP instructions have run through all of their operands, and we
648 // haven't found evidence that there are any deltas between the GEP's.
649 // However, one GEP may have more operands than the other. If this is the
650 // case, there may still be hope. Check this now.
651 if (FirstConstantOper == MinOperands) {
652 // Make GEP1Ops be the longer one if there is a longer one.
653 if (NumGEP1Ops < NumGEP2Ops) {
654 std::swap(GEP1Ops, GEP2Ops);
655 std::swap(NumGEP1Ops, NumGEP2Ops);
658 // Is there anything to check?
659 if (NumGEP1Ops > MinOperands) {
660 for (unsigned i = FirstConstantOper; i != MaxOperands; ++i)
661 if (isa<ConstantInt>(GEP1Ops[i]) &&
662 !cast<ConstantInt>(GEP1Ops[i])->isZero()) {
663 // Yup, there's a constant in the tail. Set all variables to
664 // constants in the GEP instruction to make it suiteable for
665 // TargetData::getIndexedOffset.
666 for (i = 0; i != MaxOperands; ++i)
667 if (!isa<ConstantInt>(GEP1Ops[i]))
668 GEP1Ops[i] = Constant::getNullValue(GEP1Ops[i]->getType());
669 // Okay, now get the offset. This is the relative offset for the full
671 const TargetData &TD = getTargetData();
672 int64_t Offset1 = TD.getIndexedOffset(GEPPointerTy, GEP1Ops,
675 // Now check without any constants at the end.
676 int64_t Offset2 = TD.getIndexedOffset(GEPPointerTy, GEP1Ops,
679 // If the tail provided a bit enough offset, return noalias!
680 if ((uint64_t)(Offset2-Offset1) >= SizeMax)
685 // Couldn't find anything useful.
689 // If there are non-equal constants arguments, then we can figure
690 // out a minimum known delta between the two index expressions... at
691 // this point we know that the first constant index of GEP1 is less
692 // than the first constant index of GEP2.
694 // Advance BasePtr[12]Ty over this first differing constant operand.
695 BasePtr2Ty = cast<CompositeType>(BasePtr1Ty)->
696 getTypeAtIndex(GEP2Ops[FirstConstantOper]);
697 BasePtr1Ty = cast<CompositeType>(BasePtr1Ty)->
698 getTypeAtIndex(GEP1Ops[FirstConstantOper]);
700 // We are going to be using TargetData::getIndexedOffset to determine the
701 // offset that each of the GEP's is reaching. To do this, we have to convert
702 // all variable references to constant references. To do this, we convert the
703 // initial sequence of array subscripts into constant zeros to start with.
704 const Type *ZeroIdxTy = GEPPointerTy;
705 for (unsigned i = 0; i != FirstConstantOper; ++i) {
706 if (!isa<StructType>(ZeroIdxTy))
707 GEP1Ops[i] = GEP2Ops[i] = Constant::getNullValue(Type::Int32Ty);
709 if (const CompositeType *CT = dyn_cast<CompositeType>(ZeroIdxTy))
710 ZeroIdxTy = CT->getTypeAtIndex(GEP1Ops[i]);
713 // We know that GEP1Ops[FirstConstantOper] & GEP2Ops[FirstConstantOper] are ok
715 // Loop over the rest of the operands...
716 for (unsigned i = FirstConstantOper+1; i != MaxOperands; ++i) {
717 const Value *Op1 = i < NumGEP1Ops ? GEP1Ops[i] : 0;
718 const Value *Op2 = i < NumGEP2Ops ? GEP2Ops[i] : 0;
719 // If they are equal, use a zero index...
720 if (Op1 == Op2 && BasePtr1Ty == BasePtr2Ty) {
721 if (!isa<ConstantInt>(Op1))
722 GEP1Ops[i] = GEP2Ops[i] = Constant::getNullValue(Op1->getType());
723 // Otherwise, just keep the constants we have.
726 if (const ConstantInt *Op1C = dyn_cast<ConstantInt>(Op1)) {
727 // If this is an array index, make sure the array element is in range.
728 if (const ArrayType *AT = dyn_cast<ArrayType>(BasePtr1Ty)) {
729 if (Op1C->getZExtValue() >= AT->getNumElements())
730 return MayAlias; // Be conservative with out-of-range accesses
731 } else if (const VectorType *PT = dyn_cast<VectorType>(BasePtr1Ty)) {
732 if (Op1C->getZExtValue() >= PT->getNumElements())
733 return MayAlias; // Be conservative with out-of-range accesses
737 // GEP1 is known to produce a value less than GEP2. To be
738 // conservatively correct, we must assume the largest possible
739 // constant is used in this position. This cannot be the initial
740 // index to the GEP instructions (because we know we have at least one
741 // element before this one with the different constant arguments), so
742 // we know that the current index must be into either a struct or
743 // array. Because we know it's not constant, this cannot be a
744 // structure index. Because of this, we can calculate the maximum
747 if (const ArrayType *AT = dyn_cast<ArrayType>(BasePtr1Ty))
748 GEP1Ops[i] = ConstantInt::get(Type::Int64Ty,AT->getNumElements()-1);
749 else if (const VectorType *PT = dyn_cast<VectorType>(BasePtr1Ty))
750 GEP1Ops[i] = ConstantInt::get(Type::Int64Ty,PT->getNumElements()-1);
756 if (const ConstantInt *Op2C = dyn_cast<ConstantInt>(Op2)) {
757 // If this is an array index, make sure the array element is in range.
758 if (const ArrayType *AT = dyn_cast<ArrayType>(BasePtr1Ty)) {
759 if (Op2C->getZExtValue() >= AT->getNumElements())
760 return MayAlias; // Be conservative with out-of-range accesses
761 } else if (const VectorType *PT = dyn_cast<VectorType>(BasePtr1Ty)) {
762 if (Op2C->getZExtValue() >= PT->getNumElements())
763 return MayAlias; // Be conservative with out-of-range accesses
765 } else { // Conservatively assume the minimum value for this index
766 GEP2Ops[i] = Constant::getNullValue(Op2->getType());
771 if (BasePtr1Ty && Op1) {
772 if (const CompositeType *CT = dyn_cast<CompositeType>(BasePtr1Ty))
773 BasePtr1Ty = CT->getTypeAtIndex(GEP1Ops[i]);
778 if (BasePtr2Ty && Op2) {
779 if (const CompositeType *CT = dyn_cast<CompositeType>(BasePtr2Ty))
780 BasePtr2Ty = CT->getTypeAtIndex(GEP2Ops[i]);
786 if (GEPPointerTy->getElementType()->isSized()) {
788 getTargetData().getIndexedOffset(GEPPointerTy, GEP1Ops, NumGEP1Ops);
790 getTargetData().getIndexedOffset(GEPPointerTy, GEP2Ops, NumGEP2Ops);
791 assert(Offset1<Offset2 && "There is at least one different constant here!");
793 if ((uint64_t)(Offset2-Offset1) >= SizeMax) {
794 //cerr << "Determined that these two GEP's don't alias ["
795 // << SizeMax << " bytes]: \n" << *GEP1 << *GEP2;
803 struct VISIBILITY_HIDDEN StringCompare {
804 bool operator()(const char *LHS, const char *RHS) {
805 return strcmp(LHS, RHS) < 0;
810 // Note that this list cannot contain libm functions (such as acos and sqrt)
811 // that set errno on a domain or other error.
812 static const char *DoesntAccessMemoryFns[] = {
813 "abs", "labs", "llabs", "imaxabs", "fabs", "fabsf", "fabsl",
814 "trunc", "truncf", "truncl", "ldexp",
816 "atan", "atanf", "atanl", "atan2", "atan2f", "atan2l",
818 "cos", "cosf", "cosl",
819 "exp", "expf", "expl",
821 "sin", "sinf", "sinl",
822 "tan", "tanf", "tanl", "tanh", "tanhf", "tanhl",
824 "floor", "floorf", "floorl", "ceil", "ceilf", "ceill",
827 "isalnum", "isalpha", "iscntrl", "isdigit", "isgraph", "islower", "isprint"
828 "ispunct", "isspace", "isupper", "isxdigit", "tolower", "toupper",
831 "iswalnum", "iswalpha", "iswcntrl", "iswdigit", "iswgraph", "iswlower",
832 "iswprint", "iswpunct", "iswspace", "iswupper", "iswxdigit",
834 "iswctype", "towctrans", "towlower", "towupper",
838 "isinf", "isnan", "finite",
840 // C99 math functions
841 "copysign", "copysignf", "copysignd",
842 "nexttoward", "nexttowardf", "nexttowardd",
843 "nextafter", "nextafterf", "nextafterd",
846 "__signbit", "__signbitf", "__signbitl",
850 static const char *OnlyReadsMemoryFns[] = {
851 "atoi", "atol", "atof", "atoll", "atoq", "a64l",
852 "bcmp", "memcmp", "memchr", "memrchr", "wmemcmp", "wmemchr",
855 "strcmp", "strcasecmp", "strcoll", "strncmp", "strncasecmp",
856 "strchr", "strcspn", "strlen", "strpbrk", "strrchr", "strspn", "strstr",
860 "wcschr", "wcscmp", "wcscoll", "wcscspn", "wcslen", "wcsncmp", "wcspbrk",
861 "wcsrchr", "wcsspn", "wcsstr",
864 "alphasort", "alphasort64", "versionsort", "versionsort64",
867 "nan", "nanf", "nand",
870 "feof", "ferror", "fileno",
871 "feof_unlocked", "ferror_unlocked", "fileno_unlocked"
874 static ManagedStatic<std::vector<const char*> > NoMemoryTable;
875 static ManagedStatic<std::vector<const char*> > OnlyReadsMemoryTable;
878 AliasAnalysis::ModRefBehavior
879 BasicAliasAnalysis::getModRefBehavior(Function *F, CallSite CS,
880 std::vector<PointerAccessInfo> *Info) {
881 if (!F->isDeclaration()) return UnknownModRefBehavior;
883 static bool Initialized = false;
885 NoMemoryTable->insert(NoMemoryTable->end(),
886 DoesntAccessMemoryFns,
887 DoesntAccessMemoryFns+
888 sizeof(DoesntAccessMemoryFns)/sizeof(DoesntAccessMemoryFns[0]));
890 OnlyReadsMemoryTable->insert(OnlyReadsMemoryTable->end(),
893 sizeof(OnlyReadsMemoryFns)/sizeof(OnlyReadsMemoryFns[0]));
894 #define GET_MODREF_BEHAVIOR
895 #include "llvm/Intrinsics.gen"
896 #undef GET_MODREF_BEHAVIOR
898 // Sort the table the first time through.
899 std::sort(NoMemoryTable->begin(), NoMemoryTable->end(), StringCompare());
900 std::sort(OnlyReadsMemoryTable->begin(), OnlyReadsMemoryTable->end(),
905 std::vector<const char*>::iterator Ptr =
906 std::lower_bound(NoMemoryTable->begin(), NoMemoryTable->end(),
907 F->getName().c_str(), StringCompare());
908 if (Ptr != NoMemoryTable->end() && *Ptr == F->getName())
909 return DoesNotAccessMemory;
911 Ptr = std::lower_bound(OnlyReadsMemoryTable->begin(),
912 OnlyReadsMemoryTable->end(),
913 F->getName().c_str(), StringCompare());
914 if (Ptr != OnlyReadsMemoryTable->end() && *Ptr == F->getName())
915 return OnlyReadsMemory;
917 return UnknownModRefBehavior;
920 // Make sure that anything that uses AliasAnalysis pulls in this file...
921 DEFINING_FILE_FOR(BasicAliasAnalysis)