1 //===- BasicAliasAnalysis.cpp - Local Alias Analysis Impl -----------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // 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/CaptureTracking.h"
18 #include "llvm/Analysis/Passes.h"
19 #include "llvm/Constants.h"
20 #include "llvm/DerivedTypes.h"
21 #include "llvm/Function.h"
22 #include "llvm/GlobalVariable.h"
23 #include "llvm/Instructions.h"
24 #include "llvm/IntrinsicInst.h"
25 #include "llvm/LLVMContext.h"
26 #include "llvm/Operator.h"
27 #include "llvm/Pass.h"
28 #include "llvm/Target/TargetData.h"
29 #include "llvm/ADT/SmallVector.h"
30 #include "llvm/ADT/STLExtras.h"
31 #include "llvm/Support/Compiler.h"
32 #include "llvm/Support/ErrorHandling.h"
33 #include "llvm/Support/GetElementPtrTypeIterator.h"
37 //===----------------------------------------------------------------------===//
39 //===----------------------------------------------------------------------===//
41 static const GEPOperator
*isGEP(const Value
*V
) {
42 return dyn_cast
<GEPOperator
>(V
);
45 static const Value
*GetGEPOperands(const Value
*V
,
46 SmallVector
<Value
*, 16> &GEPOps
) {
47 assert(GEPOps
.empty() && "Expect empty list to populate!");
48 GEPOps
.insert(GEPOps
.end(), cast
<User
>(V
)->op_begin()+1,
49 cast
<User
>(V
)->op_end());
51 // Accumulate all of the chained indexes into the operand array
52 V
= cast
<User
>(V
)->getOperand(0);
54 while (const User
*G
= isGEP(V
)) {
55 if (!isa
<Constant
>(GEPOps
[0]) || isa
<GlobalValue
>(GEPOps
[0]) ||
56 !cast
<Constant
>(GEPOps
[0])->isNullValue())
57 break; // Don't handle folding arbitrary pointer offsets yet...
58 GEPOps
.erase(GEPOps
.begin()); // Drop the zero index
59 GEPOps
.insert(GEPOps
.begin(), G
->op_begin()+1, G
->op_end());
65 /// isKnownNonNull - Return true if we know that the specified value is never
67 static bool isKnownNonNull(const Value
*V
) {
68 // Alloca never returns null, malloc might.
69 if (isa
<AllocaInst
>(V
)) return true;
71 // A byval argument is never null.
72 if (const Argument
*A
= dyn_cast
<Argument
>(V
))
73 return A
->hasByValAttr();
75 // Global values are not null unless extern weak.
76 if (const GlobalValue
*GV
= dyn_cast
<GlobalValue
>(V
))
77 return !GV
->hasExternalWeakLinkage();
81 /// isNonEscapingLocalObject - Return true if the pointer is to a function-local
82 /// object that never escapes from the function.
83 static bool isNonEscapingLocalObject(const Value
*V
) {
84 // If this is a local allocation, check to see if it escapes.
85 if (isa
<AllocationInst
>(V
) || isNoAliasCall(V
))
86 return !PointerMayBeCaptured(V
, false);
88 // If this is an argument that corresponds to a byval or noalias argument,
89 // then it has not escaped before entering the function. Check if it escapes
90 // inside the function.
91 if (const Argument
*A
= dyn_cast
<Argument
>(V
))
92 if (A
->hasByValAttr() || A
->hasNoAliasAttr()) {
93 // Don't bother analyzing arguments already known not to escape.
94 if (A
->hasNoCaptureAttr())
96 return !PointerMayBeCaptured(V
, false);
102 /// isObjectSmallerThan - Return true if we can prove that the object specified
103 /// by V is smaller than Size.
104 static bool isObjectSmallerThan(const Value
*V
, unsigned Size
,
105 const TargetData
&TD
) {
106 const Type
*AccessTy
;
107 if (const GlobalVariable
*GV
= dyn_cast
<GlobalVariable
>(V
)) {
108 AccessTy
= GV
->getType()->getElementType();
109 } else if (const AllocationInst
*AI
= dyn_cast
<AllocationInst
>(V
)) {
110 if (!AI
->isArrayAllocation())
111 AccessTy
= AI
->getType()->getElementType();
114 } else if (const Argument
*A
= dyn_cast
<Argument
>(V
)) {
115 if (A
->hasByValAttr())
116 AccessTy
= cast
<PointerType
>(A
->getType())->getElementType();
123 if (AccessTy
->isSized())
124 return TD
.getTypeAllocSize(AccessTy
) < Size
;
128 //===----------------------------------------------------------------------===//
130 //===----------------------------------------------------------------------===//
133 /// NoAA - This class implements the -no-aa pass, which always returns "I
134 /// don't know" for alias queries. NoAA is unlike other alias analysis
135 /// implementations, in that it does not chain to a previous analysis. As
136 /// such it doesn't follow many of the rules that other alias analyses must.
138 struct VISIBILITY_HIDDEN NoAA
: public ImmutablePass
, public AliasAnalysis
{
139 static char ID
; // Class identification, replacement for typeinfo
140 NoAA() : ImmutablePass(&ID
) {}
141 explicit NoAA(void *PID
) : ImmutablePass(PID
) { }
143 virtual void getAnalysisUsage(AnalysisUsage
&AU
) const {
144 AU
.addRequired
<TargetData
>();
147 virtual void initializePass() {
148 TD
= &getAnalysis
<TargetData
>();
151 virtual AliasResult
alias(const Value
*V1
, unsigned V1Size
,
152 const Value
*V2
, unsigned V2Size
) {
156 virtual void getArgumentAccesses(Function
*F
, CallSite CS
,
157 std::vector
<PointerAccessInfo
> &Info
) {
158 llvm_unreachable("This method may not be called on this function!");
161 virtual void getMustAliases(Value
*P
, std::vector
<Value
*> &RetVals
) { }
162 virtual bool pointsToConstantMemory(const Value
*P
) { return false; }
163 virtual ModRefResult
getModRefInfo(CallSite CS
, Value
*P
, unsigned Size
) {
166 virtual ModRefResult
getModRefInfo(CallSite CS1
, CallSite CS2
) {
169 virtual bool hasNoModRefInfoForCalls() const { return true; }
171 virtual void deleteValue(Value
*V
) {}
172 virtual void copyValue(Value
*From
, Value
*To
) {}
174 } // End of anonymous namespace
176 // Register this pass...
178 static RegisterPass
<NoAA
>
179 U("no-aa", "No Alias Analysis (always returns 'may' alias)", true, true);
181 // Declare that we implement the AliasAnalysis interface
182 static RegisterAnalysisGroup
<AliasAnalysis
> V(U
);
184 ImmutablePass
*llvm::createNoAAPass() { return new NoAA(); }
186 //===----------------------------------------------------------------------===//
188 //===----------------------------------------------------------------------===//
191 /// BasicAliasAnalysis - This is the default alias analysis implementation.
192 /// Because it doesn't chain to a previous alias analysis (like -no-aa), it
193 /// derives from the NoAA class.
194 struct VISIBILITY_HIDDEN BasicAliasAnalysis
: public NoAA
{
195 static char ID
; // Class identification, replacement for typeinfo
196 BasicAliasAnalysis() : NoAA(&ID
) {}
197 AliasResult
alias(const Value
*V1
, unsigned V1Size
,
198 const Value
*V2
, unsigned V2Size
);
200 ModRefResult
getModRefInfo(CallSite CS
, Value
*P
, unsigned Size
);
201 ModRefResult
getModRefInfo(CallSite CS1
, CallSite CS2
);
203 /// hasNoModRefInfoForCalls - We can provide mod/ref information against
204 /// non-escaping allocations.
205 virtual bool hasNoModRefInfoForCalls() const { return false; }
207 /// pointsToConstantMemory - Chase pointers until we find a (constant
209 bool pointsToConstantMemory(const Value
*P
);
212 // CheckGEPInstructions - Check two GEP instructions with known
213 // must-aliasing base pointers. This checks to see if the index expressions
214 // preclude the pointers from aliasing...
216 CheckGEPInstructions(const Type
* BasePtr1Ty
,
217 Value
**GEP1Ops
, unsigned NumGEP1Ops
, unsigned G1Size
,
218 const Type
*BasePtr2Ty
,
219 Value
**GEP2Ops
, unsigned NumGEP2Ops
, unsigned G2Size
);
221 } // End of anonymous namespace
223 // Register this pass...
224 char BasicAliasAnalysis::ID
= 0;
225 static RegisterPass
<BasicAliasAnalysis
>
226 X("basicaa", "Basic Alias Analysis (default AA impl)", false, true);
228 // Declare that we implement the AliasAnalysis interface
229 static RegisterAnalysisGroup
<AliasAnalysis
, true> Y(X
);
231 ImmutablePass
*llvm::createBasicAliasAnalysisPass() {
232 return new BasicAliasAnalysis();
236 /// pointsToConstantMemory - Chase pointers until we find a (constant
238 bool BasicAliasAnalysis::pointsToConstantMemory(const Value
*P
) {
239 if (const GlobalVariable
*GV
=
240 dyn_cast
<GlobalVariable
>(P
->getUnderlyingObject()))
241 return GV
->isConstant();
246 // getModRefInfo - Check to see if the specified callsite can clobber the
247 // specified memory object. Since we only look at local properties of this
248 // function, we really can't say much about this query. We do, however, use
249 // simple "address taken" analysis on local objects.
251 AliasAnalysis::ModRefResult
252 BasicAliasAnalysis::getModRefInfo(CallSite CS
, Value
*P
, unsigned Size
) {
253 if (!isa
<Constant
>(P
)) {
254 const Value
*Object
= P
->getUnderlyingObject();
256 // If this is a tail call and P points to a stack location, we know that
257 // the tail call cannot access or modify the local stack.
258 // We cannot exclude byval arguments here; these belong to the caller of
259 // the current function not to the current function, and a tail callee
260 // may reference them.
261 if (isa
<AllocaInst
>(Object
))
262 if (CallInst
*CI
= dyn_cast
<CallInst
>(CS
.getInstruction()))
263 if (CI
->isTailCall())
266 // If the pointer is to a locally allocated object that does not escape,
267 // then the call can not mod/ref the pointer unless the call takes the
268 // argument without capturing it.
269 if (isNonEscapingLocalObject(Object
) && CS
.getInstruction() != Object
) {
270 bool passedAsArg
= false;
271 // TODO: Eventually only check 'nocapture' arguments.
272 for (CallSite::arg_iterator CI
= CS
.arg_begin(), CE
= CS
.arg_end();
274 if (isa
<PointerType
>((*CI
)->getType()) &&
275 alias(cast
<Value
>(CI
), ~0U, P
, ~0U) != NoAlias
)
283 // The AliasAnalysis base class has some smarts, lets use them.
284 return AliasAnalysis::getModRefInfo(CS
, P
, Size
);
288 AliasAnalysis::ModRefResult
289 BasicAliasAnalysis::getModRefInfo(CallSite CS1
, CallSite CS2
) {
290 // If CS1 or CS2 are readnone, they don't interact.
291 ModRefBehavior CS1B
= AliasAnalysis::getModRefBehavior(CS1
);
292 if (CS1B
== DoesNotAccessMemory
) return NoModRef
;
294 ModRefBehavior CS2B
= AliasAnalysis::getModRefBehavior(CS2
);
295 if (CS2B
== DoesNotAccessMemory
) return NoModRef
;
297 // If they both only read from memory, just return ref.
298 if (CS1B
== OnlyReadsMemory
&& CS2B
== OnlyReadsMemory
)
301 // Otherwise, fall back to NoAA (mod+ref).
302 return NoAA::getModRefInfo(CS1
, CS2
);
306 // alias - Provide a bunch of ad-hoc rules to disambiguate in common cases, such
307 // as array references.
309 AliasAnalysis::AliasResult
310 BasicAliasAnalysis::alias(const Value
*V1
, unsigned V1Size
,
311 const Value
*V2
, unsigned V2Size
) {
312 LLVMContext
&Context
= V1
->getType()->getContext();
314 // Strip off any constant expression casts if they exist
315 if (const ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(V1
))
316 if (CE
->isCast() && isa
<PointerType
>(CE
->getOperand(0)->getType()))
317 V1
= CE
->getOperand(0);
318 if (const ConstantExpr
*CE
= dyn_cast
<ConstantExpr
>(V2
))
319 if (CE
->isCast() && isa
<PointerType
>(CE
->getOperand(0)->getType()))
320 V2
= CE
->getOperand(0);
322 // Are we checking for alias of the same value?
323 if (V1
== V2
) return MustAlias
;
325 if (!isa
<PointerType
>(V1
->getType()) || !isa
<PointerType
>(V2
->getType()))
326 return NoAlias
; // Scalars cannot alias each other
328 // Strip off cast instructions. Since V1 and V2 are pointers, they must be
329 // pointer<->pointer bitcasts.
330 if (const BitCastInst
*I
= dyn_cast
<BitCastInst
>(V1
))
331 return alias(I
->getOperand(0), V1Size
, V2
, V2Size
);
332 if (const BitCastInst
*I
= dyn_cast
<BitCastInst
>(V2
))
333 return alias(V1
, V1Size
, I
->getOperand(0), V2Size
);
335 // Figure out what objects these things are pointing to if we can.
336 const Value
*O1
= V1
->getUnderlyingObject();
337 const Value
*O2
= V2
->getUnderlyingObject();
340 // If V1/V2 point to two different objects we know that we have no alias.
341 if (isIdentifiedObject(O1
) && isIdentifiedObject(O2
))
344 // Arguments can't alias with local allocations or noalias calls.
345 if ((isa
<Argument
>(O1
) && (isa
<AllocationInst
>(O2
) || isNoAliasCall(O2
))) ||
346 (isa
<Argument
>(O2
) && (isa
<AllocationInst
>(O1
) || isNoAliasCall(O1
))))
349 // Most objects can't alias null.
350 if ((isa
<ConstantPointerNull
>(V2
) && isKnownNonNull(O1
)) ||
351 (isa
<ConstantPointerNull
>(V1
) && isKnownNonNull(O2
)))
355 // If the size of one access is larger than the entire object on the other
356 // side, then we know such behavior is undefined and can assume no alias.
357 const TargetData
&TD
= getTargetData();
358 if ((V1Size
!= ~0U && isObjectSmallerThan(O2
, V1Size
, TD
)) ||
359 (V2Size
!= ~0U && isObjectSmallerThan(O1
, V2Size
, TD
)))
362 // If one pointer is the result of a call/invoke and the other is a
363 // non-escaping local object, then we know the object couldn't escape to a
364 // point where the call could return it.
365 if ((isa
<CallInst
>(O1
) || isa
<InvokeInst
>(O1
)) &&
366 isNonEscapingLocalObject(O2
) && O1
!= O2
)
368 if ((isa
<CallInst
>(O2
) || isa
<InvokeInst
>(O2
)) &&
369 isNonEscapingLocalObject(O1
) && O1
!= O2
)
372 // If we have two gep instructions with must-alias'ing base pointers, figure
373 // out if the indexes to the GEP tell us anything about the derived pointer.
374 // Note that we also handle chains of getelementptr instructions as well as
375 // constant expression getelementptrs here.
377 if (isGEP(V1
) && isGEP(V2
)) {
378 const User
*GEP1
= cast
<User
>(V1
);
379 const User
*GEP2
= cast
<User
>(V2
);
381 // If V1 and V2 are identical GEPs, just recurse down on both of them.
382 // This allows us to analyze things like:
383 // P = gep A, 0, i, 1
384 // Q = gep B, 0, i, 1
385 // by just analyzing A and B. This is even safe for variable indices.
386 if (GEP1
->getType() == GEP2
->getType() &&
387 GEP1
->getNumOperands() == GEP2
->getNumOperands() &&
388 GEP1
->getOperand(0)->getType() == GEP2
->getOperand(0)->getType() &&
389 // All operands are the same, ignoring the base.
390 std::equal(GEP1
->op_begin()+1, GEP1
->op_end(), GEP2
->op_begin()+1))
391 return alias(GEP1
->getOperand(0), V1Size
, GEP2
->getOperand(0), V2Size
);
394 // Drill down into the first non-gep value, to test for must-aliasing of
395 // the base pointers.
396 while (isGEP(GEP1
->getOperand(0)) &&
397 GEP1
->getOperand(1) ==
398 Context
.getNullValue(GEP1
->getOperand(1)->getType()))
399 GEP1
= cast
<User
>(GEP1
->getOperand(0));
400 const Value
*BasePtr1
= GEP1
->getOperand(0);
402 while (isGEP(GEP2
->getOperand(0)) &&
403 GEP2
->getOperand(1) ==
404 Context
.getNullValue(GEP2
->getOperand(1)->getType()))
405 GEP2
= cast
<User
>(GEP2
->getOperand(0));
406 const Value
*BasePtr2
= GEP2
->getOperand(0);
408 // Do the base pointers alias?
409 AliasResult BaseAlias
= alias(BasePtr1
, ~0U, BasePtr2
, ~0U);
410 if (BaseAlias
== NoAlias
) return NoAlias
;
411 if (BaseAlias
== MustAlias
) {
412 // If the base pointers alias each other exactly, check to see if we can
413 // figure out anything about the resultant pointers, to try to prove
416 // Collect all of the chained GEP operands together into one simple place
417 SmallVector
<Value
*, 16> GEP1Ops
, GEP2Ops
;
418 BasePtr1
= GetGEPOperands(V1
, GEP1Ops
);
419 BasePtr2
= GetGEPOperands(V2
, GEP2Ops
);
421 // If GetGEPOperands were able to fold to the same must-aliased pointer,
422 // do the comparison.
423 if (BasePtr1
== BasePtr2
) {
425 CheckGEPInstructions(BasePtr1
->getType(),
426 &GEP1Ops
[0], GEP1Ops
.size(), V1Size
,
428 &GEP2Ops
[0], GEP2Ops
.size(), V2Size
);
429 if (GAlias
!= MayAlias
)
435 // Check to see if these two pointers are related by a getelementptr
436 // instruction. If one pointer is a GEP with a non-zero index of the other
437 // pointer, we know they cannot alias.
441 std::swap(V1Size
, V2Size
);
444 if (V1Size
!= ~0U && V2Size
!= ~0U)
446 SmallVector
<Value
*, 16> GEPOperands
;
447 const Value
*BasePtr
= GetGEPOperands(V1
, GEPOperands
);
449 AliasResult R
= alias(BasePtr
, V1Size
, V2
, V2Size
);
450 if (R
== MustAlias
) {
451 // If there is at least one non-zero constant index, we know they cannot
453 bool ConstantFound
= false;
454 bool AllZerosFound
= true;
455 for (unsigned i
= 0, e
= GEPOperands
.size(); i
!= e
; ++i
)
456 if (const Constant
*C
= dyn_cast
<Constant
>(GEPOperands
[i
])) {
457 if (!C
->isNullValue()) {
458 ConstantFound
= true;
459 AllZerosFound
= false;
463 AllZerosFound
= false;
466 // If we have getelementptr <ptr>, 0, 0, 0, 0, ... and V2 must aliases
467 // the ptr, the end result is a must alias also.
472 if (V2Size
<= 1 && V1Size
<= 1) // Just pointer check?
475 // Otherwise we have to check to see that the distance is more than
476 // the size of the argument... build an index vector that is equal to
477 // the arguments provided, except substitute 0's for any variable
478 // indexes we find...
479 if (cast
<PointerType
>(
480 BasePtr
->getType())->getElementType()->isSized()) {
481 for (unsigned i
= 0; i
!= GEPOperands
.size(); ++i
)
482 if (!isa
<ConstantInt
>(GEPOperands
[i
]))
484 Context
.getNullValue(GEPOperands
[i
]->getType());
486 getTargetData().getIndexedOffset(BasePtr
->getType(),
490 if (Offset
>= (int64_t)V2Size
|| Offset
<= -(int64_t)V1Size
)
500 // This function is used to determine if the indices of two GEP instructions are
501 // equal. V1 and V2 are the indices.
502 static bool IndexOperandsEqual(Value
*V1
, Value
*V2
, LLVMContext
&Context
) {
503 if (V1
->getType() == V2
->getType())
505 if (Constant
*C1
= dyn_cast
<Constant
>(V1
))
506 if (Constant
*C2
= dyn_cast
<Constant
>(V2
)) {
507 // Sign extend the constants to long types, if necessary
508 if (C1
->getType() != Type::Int64Ty
)
509 C1
= Context
.getConstantExprSExt(C1
, Type::Int64Ty
);
510 if (C2
->getType() != Type::Int64Ty
)
511 C2
= Context
.getConstantExprSExt(C2
, Type::Int64Ty
);
517 /// CheckGEPInstructions - Check two GEP instructions with known must-aliasing
518 /// base pointers. This checks to see if the index expressions preclude the
519 /// pointers from aliasing...
520 AliasAnalysis::AliasResult
521 BasicAliasAnalysis::CheckGEPInstructions(
522 const Type
* BasePtr1Ty
, Value
**GEP1Ops
, unsigned NumGEP1Ops
, unsigned G1S
,
523 const Type
*BasePtr2Ty
, Value
**GEP2Ops
, unsigned NumGEP2Ops
, unsigned G2S
) {
524 // We currently can't handle the case when the base pointers have different
525 // primitive types. Since this is uncommon anyway, we are happy being
526 // extremely conservative.
527 if (BasePtr1Ty
!= BasePtr2Ty
)
530 const PointerType
*GEPPointerTy
= cast
<PointerType
>(BasePtr1Ty
);
532 LLVMContext
&Context
= GEPPointerTy
->getContext();
534 // Find the (possibly empty) initial sequence of equal values... which are not
535 // necessarily constants.
536 unsigned NumGEP1Operands
= NumGEP1Ops
, NumGEP2Operands
= NumGEP2Ops
;
537 unsigned MinOperands
= std::min(NumGEP1Operands
, NumGEP2Operands
);
538 unsigned MaxOperands
= std::max(NumGEP1Operands
, NumGEP2Operands
);
539 unsigned UnequalOper
= 0;
540 while (UnequalOper
!= MinOperands
&&
541 IndexOperandsEqual(GEP1Ops
[UnequalOper
], GEP2Ops
[UnequalOper
],
543 // Advance through the type as we go...
545 if (const CompositeType
*CT
= dyn_cast
<CompositeType
>(BasePtr1Ty
))
546 BasePtr1Ty
= CT
->getTypeAtIndex(GEP1Ops
[UnequalOper
-1]);
548 // If all operands equal each other, then the derived pointers must
549 // alias each other...
551 assert(UnequalOper
== NumGEP1Operands
&& UnequalOper
== NumGEP2Operands
&&
552 "Ran out of type nesting, but not out of operands?");
557 // If we have seen all constant operands, and run out of indexes on one of the
558 // getelementptrs, check to see if the tail of the leftover one is all zeros.
559 // If so, return mustalias.
560 if (UnequalOper
== MinOperands
) {
561 if (NumGEP1Ops
< NumGEP2Ops
) {
562 std::swap(GEP1Ops
, GEP2Ops
);
563 std::swap(NumGEP1Ops
, NumGEP2Ops
);
566 bool AllAreZeros
= true;
567 for (unsigned i
= UnequalOper
; i
!= MaxOperands
; ++i
)
568 if (!isa
<Constant
>(GEP1Ops
[i
]) ||
569 !cast
<Constant
>(GEP1Ops
[i
])->isNullValue()) {
573 if (AllAreZeros
) return MustAlias
;
577 // So now we know that the indexes derived from the base pointers,
578 // which are known to alias, are different. We can still determine a
579 // no-alias result if there are differing constant pairs in the index
580 // chain. For example:
581 // A[i][0] != A[j][1] iff (&A[0][1]-&A[0][0] >= std::max(G1S, G2S))
583 // We have to be careful here about array accesses. In particular, consider:
584 // A[1][0] vs A[0][i]
585 // In this case, we don't *know* that the array will be accessed in bounds:
586 // the index could even be negative. Because of this, we have to
587 // conservatively *give up* and return may alias. We disregard differing
588 // array subscripts that are followed by a variable index without going
591 unsigned SizeMax
= std::max(G1S
, G2S
);
592 if (SizeMax
== ~0U) return MayAlias
; // Avoid frivolous work.
594 // Scan for the first operand that is constant and unequal in the
595 // two getelementptrs...
596 unsigned FirstConstantOper
= UnequalOper
;
597 for (; FirstConstantOper
!= MinOperands
; ++FirstConstantOper
) {
598 const Value
*G1Oper
= GEP1Ops
[FirstConstantOper
];
599 const Value
*G2Oper
= GEP2Ops
[FirstConstantOper
];
601 if (G1Oper
!= G2Oper
) // Found non-equal constant indexes...
602 if (Constant
*G1OC
= dyn_cast
<ConstantInt
>(const_cast<Value
*>(G1Oper
)))
603 if (Constant
*G2OC
= dyn_cast
<ConstantInt
>(const_cast<Value
*>(G2Oper
))){
604 if (G1OC
->getType() != G2OC
->getType()) {
605 // Sign extend both operands to long.
606 if (G1OC
->getType() != Type::Int64Ty
)
607 G1OC
= Context
.getConstantExprSExt(G1OC
, Type::Int64Ty
);
608 if (G2OC
->getType() != Type::Int64Ty
)
609 G2OC
= Context
.getConstantExprSExt(G2OC
, Type::Int64Ty
);
610 GEP1Ops
[FirstConstantOper
] = G1OC
;
611 GEP2Ops
[FirstConstantOper
] = G2OC
;
615 // Handle the "be careful" case above: if this is an array/vector
616 // subscript, scan for a subsequent variable array index.
617 if (const SequentialType
*STy
=
618 dyn_cast
<SequentialType
>(BasePtr1Ty
)) {
619 const Type
*NextTy
= STy
;
620 bool isBadCase
= false;
622 for (unsigned Idx
= FirstConstantOper
;
623 Idx
!= MinOperands
&& isa
<SequentialType
>(NextTy
); ++Idx
) {
624 const Value
*V1
= GEP1Ops
[Idx
], *V2
= GEP2Ops
[Idx
];
625 if (!isa
<Constant
>(V1
) || !isa
<Constant
>(V2
)) {
629 // If the array is indexed beyond the bounds of the static type
630 // at this level, it will also fall into the "be careful" case.
631 // It would theoretically be possible to analyze these cases,
632 // but for now just be conservatively correct.
633 if (const ArrayType
*ATy
= dyn_cast
<ArrayType
>(STy
))
634 if (cast
<ConstantInt
>(G1OC
)->getZExtValue() >=
635 ATy
->getNumElements() ||
636 cast
<ConstantInt
>(G2OC
)->getZExtValue() >=
637 ATy
->getNumElements()) {
641 if (const VectorType
*VTy
= dyn_cast
<VectorType
>(STy
))
642 if (cast
<ConstantInt
>(G1OC
)->getZExtValue() >=
643 VTy
->getNumElements() ||
644 cast
<ConstantInt
>(G2OC
)->getZExtValue() >=
645 VTy
->getNumElements()) {
649 STy
= cast
<SequentialType
>(NextTy
);
650 NextTy
= cast
<SequentialType
>(NextTy
)->getElementType();
653 if (isBadCase
) G1OC
= 0;
656 // Make sure they are comparable (ie, not constant expressions), and
657 // make sure the GEP with the smaller leading constant is GEP1.
659 Constant
*Compare
= ConstantExpr::getICmp(ICmpInst::ICMP_SGT
,
661 if (ConstantInt
*CV
= dyn_cast
<ConstantInt
>(Compare
)) {
662 if (CV
->getZExtValue()) { // If they are comparable and G2 > G1
663 std::swap(GEP1Ops
, GEP2Ops
); // Make GEP1 < GEP2
664 std::swap(NumGEP1Ops
, NumGEP2Ops
);
671 BasePtr1Ty
= cast
<CompositeType
>(BasePtr1Ty
)->getTypeAtIndex(G1Oper
);
674 // No shared constant operands, and we ran out of common operands. At this
675 // point, the GEP instructions have run through all of their operands, and we
676 // haven't found evidence that there are any deltas between the GEP's.
677 // However, one GEP may have more operands than the other. If this is the
678 // case, there may still be hope. Check this now.
679 if (FirstConstantOper
== MinOperands
) {
680 // Make GEP1Ops be the longer one if there is a longer one.
681 if (NumGEP1Ops
< NumGEP2Ops
) {
682 std::swap(GEP1Ops
, GEP2Ops
);
683 std::swap(NumGEP1Ops
, NumGEP2Ops
);
686 // Is there anything to check?
687 if (NumGEP1Ops
> MinOperands
) {
688 for (unsigned i
= FirstConstantOper
; i
!= MaxOperands
; ++i
)
689 if (isa
<ConstantInt
>(GEP1Ops
[i
]) &&
690 !cast
<ConstantInt
>(GEP1Ops
[i
])->isZero()) {
691 // Yup, there's a constant in the tail. Set all variables to
692 // constants in the GEP instruction to make it suitable for
693 // TargetData::getIndexedOffset.
694 for (i
= 0; i
!= MaxOperands
; ++i
)
695 if (!isa
<ConstantInt
>(GEP1Ops
[i
]))
696 GEP1Ops
[i
] = Context
.getNullValue(GEP1Ops
[i
]->getType());
697 // Okay, now get the offset. This is the relative offset for the full
699 const TargetData
&TD
= getTargetData();
700 int64_t Offset1
= TD
.getIndexedOffset(GEPPointerTy
, GEP1Ops
,
703 // Now check without any constants at the end.
704 int64_t Offset2
= TD
.getIndexedOffset(GEPPointerTy
, GEP1Ops
,
707 // Make sure we compare the absolute difference.
708 if (Offset1
> Offset2
)
709 std::swap(Offset1
, Offset2
);
711 // If the tail provided a bit enough offset, return noalias!
712 if ((uint64_t)(Offset2
-Offset1
) >= SizeMax
)
714 // Otherwise break - we don't look for another constant in the tail.
719 // Couldn't find anything useful.
723 // If there are non-equal constants arguments, then we can figure
724 // out a minimum known delta between the two index expressions... at
725 // this point we know that the first constant index of GEP1 is less
726 // than the first constant index of GEP2.
728 // Advance BasePtr[12]Ty over this first differing constant operand.
729 BasePtr2Ty
= cast
<CompositeType
>(BasePtr1Ty
)->
730 getTypeAtIndex(GEP2Ops
[FirstConstantOper
]);
731 BasePtr1Ty
= cast
<CompositeType
>(BasePtr1Ty
)->
732 getTypeAtIndex(GEP1Ops
[FirstConstantOper
]);
734 // We are going to be using TargetData::getIndexedOffset to determine the
735 // offset that each of the GEP's is reaching. To do this, we have to convert
736 // all variable references to constant references. To do this, we convert the
737 // initial sequence of array subscripts into constant zeros to start with.
738 const Type
*ZeroIdxTy
= GEPPointerTy
;
739 for (unsigned i
= 0; i
!= FirstConstantOper
; ++i
) {
740 if (!isa
<StructType
>(ZeroIdxTy
))
741 GEP1Ops
[i
] = GEP2Ops
[i
] = Context
.getNullValue(Type::Int32Ty
);
743 if (const CompositeType
*CT
= dyn_cast
<CompositeType
>(ZeroIdxTy
))
744 ZeroIdxTy
= CT
->getTypeAtIndex(GEP1Ops
[i
]);
747 // We know that GEP1Ops[FirstConstantOper] & GEP2Ops[FirstConstantOper] are ok
749 // Loop over the rest of the operands...
750 for (unsigned i
= FirstConstantOper
+1; i
!= MaxOperands
; ++i
) {
751 const Value
*Op1
= i
< NumGEP1Ops
? GEP1Ops
[i
] : 0;
752 const Value
*Op2
= i
< NumGEP2Ops
? GEP2Ops
[i
] : 0;
753 // If they are equal, use a zero index...
754 if (Op1
== Op2
&& BasePtr1Ty
== BasePtr2Ty
) {
755 if (!isa
<ConstantInt
>(Op1
))
756 GEP1Ops
[i
] = GEP2Ops
[i
] = Context
.getNullValue(Op1
->getType());
757 // Otherwise, just keep the constants we have.
760 if (const ConstantInt
*Op1C
= dyn_cast
<ConstantInt
>(Op1
)) {
761 // If this is an array index, make sure the array element is in range.
762 if (const ArrayType
*AT
= dyn_cast
<ArrayType
>(BasePtr1Ty
)) {
763 if (Op1C
->getZExtValue() >= AT
->getNumElements())
764 return MayAlias
; // Be conservative with out-of-range accesses
765 } else if (const VectorType
*VT
= dyn_cast
<VectorType
>(BasePtr1Ty
)) {
766 if (Op1C
->getZExtValue() >= VT
->getNumElements())
767 return MayAlias
; // Be conservative with out-of-range accesses
771 // GEP1 is known to produce a value less than GEP2. To be
772 // conservatively correct, we must assume the largest possible
773 // constant is used in this position. This cannot be the initial
774 // index to the GEP instructions (because we know we have at least one
775 // element before this one with the different constant arguments), so
776 // we know that the current index must be into either a struct or
777 // array. Because we know it's not constant, this cannot be a
778 // structure index. Because of this, we can calculate the maximum
781 if (const ArrayType
*AT
= dyn_cast
<ArrayType
>(BasePtr1Ty
))
783 ConstantInt::get(Type::Int64Ty
,AT
->getNumElements()-1);
784 else if (const VectorType
*VT
= dyn_cast
<VectorType
>(BasePtr1Ty
))
786 ConstantInt::get(Type::Int64Ty
,VT
->getNumElements()-1);
791 if (const ConstantInt
*Op2C
= dyn_cast
<ConstantInt
>(Op2
)) {
792 // If this is an array index, make sure the array element is in range.
793 if (const ArrayType
*AT
= dyn_cast
<ArrayType
>(BasePtr2Ty
)) {
794 if (Op2C
->getZExtValue() >= AT
->getNumElements())
795 return MayAlias
; // Be conservative with out-of-range accesses
796 } else if (const VectorType
*VT
= dyn_cast
<VectorType
>(BasePtr2Ty
)) {
797 if (Op2C
->getZExtValue() >= VT
->getNumElements())
798 return MayAlias
; // Be conservative with out-of-range accesses
800 } else { // Conservatively assume the minimum value for this index
801 GEP2Ops
[i
] = Context
.getNullValue(Op2
->getType());
806 if (BasePtr1Ty
&& Op1
) {
807 if (const CompositeType
*CT
= dyn_cast
<CompositeType
>(BasePtr1Ty
))
808 BasePtr1Ty
= CT
->getTypeAtIndex(GEP1Ops
[i
]);
813 if (BasePtr2Ty
&& Op2
) {
814 if (const CompositeType
*CT
= dyn_cast
<CompositeType
>(BasePtr2Ty
))
815 BasePtr2Ty
= CT
->getTypeAtIndex(GEP2Ops
[i
]);
821 if (GEPPointerTy
->getElementType()->isSized()) {
823 getTargetData().getIndexedOffset(GEPPointerTy
, GEP1Ops
, NumGEP1Ops
);
825 getTargetData().getIndexedOffset(GEPPointerTy
, GEP2Ops
, NumGEP2Ops
);
826 assert(Offset1
!= Offset2
&&
827 "There is at least one different constant here!");
829 // Make sure we compare the absolute difference.
830 if (Offset1
> Offset2
)
831 std::swap(Offset1
, Offset2
);
833 if ((uint64_t)(Offset2
-Offset1
) >= SizeMax
) {
834 //cerr << "Determined that these two GEP's don't alias ["
835 // << SizeMax << " bytes]: \n" << *GEP1 << *GEP2;
842 // Make sure that anything that uses AliasAnalysis pulls in this file...
843 DEFINING_FILE_FOR(BasicAliasAnalysis
)