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 {
146 virtual void initializePass() {
147 TD
= getAnalysisIfAvailable
<TargetData
>();
150 virtual AliasResult
alias(const Value
*V1
, unsigned V1Size
,
151 const Value
*V2
, unsigned V2Size
) {
155 virtual void getArgumentAccesses(Function
*F
, CallSite CS
,
156 std::vector
<PointerAccessInfo
> &Info
) {
157 llvm_unreachable("This method may not be called on this function!");
160 virtual void getMustAliases(Value
*P
, std::vector
<Value
*> &RetVals
) { }
161 virtual bool pointsToConstantMemory(const Value
*P
) { return false; }
162 virtual ModRefResult
getModRefInfo(CallSite CS
, Value
*P
, unsigned Size
) {
165 virtual ModRefResult
getModRefInfo(CallSite CS1
, CallSite CS2
) {
168 virtual bool hasNoModRefInfoForCalls() const { return true; }
170 virtual void deleteValue(Value
*V
) {}
171 virtual void copyValue(Value
*From
, Value
*To
) {}
173 } // End of anonymous namespace
175 // Register this pass...
177 static RegisterPass
<NoAA
>
178 U("no-aa", "No Alias Analysis (always returns 'may' alias)", true, true);
180 // Declare that we implement the AliasAnalysis interface
181 static RegisterAnalysisGroup
<AliasAnalysis
> V(U
);
183 ImmutablePass
*llvm::createNoAAPass() { return new NoAA(); }
185 //===----------------------------------------------------------------------===//
187 //===----------------------------------------------------------------------===//
190 /// BasicAliasAnalysis - This is the default alias analysis implementation.
191 /// Because it doesn't chain to a previous alias analysis (like -no-aa), it
192 /// derives from the NoAA class.
193 struct VISIBILITY_HIDDEN BasicAliasAnalysis
: public NoAA
{
194 static char ID
; // Class identification, replacement for typeinfo
195 BasicAliasAnalysis() : NoAA(&ID
) {}
196 AliasResult
alias(const Value
*V1
, unsigned V1Size
,
197 const Value
*V2
, unsigned V2Size
);
199 ModRefResult
getModRefInfo(CallSite CS
, Value
*P
, unsigned Size
);
200 ModRefResult
getModRefInfo(CallSite CS1
, CallSite CS2
);
202 /// hasNoModRefInfoForCalls - We can provide mod/ref information against
203 /// non-escaping allocations.
204 virtual bool hasNoModRefInfoForCalls() const { return false; }
206 /// pointsToConstantMemory - Chase pointers until we find a (constant
208 bool pointsToConstantMemory(const Value
*P
);
211 // CheckGEPInstructions - Check two GEP instructions with known
212 // must-aliasing base pointers. This checks to see if the index expressions
213 // preclude the pointers from aliasing...
215 CheckGEPInstructions(const Type
* BasePtr1Ty
,
216 Value
**GEP1Ops
, unsigned NumGEP1Ops
, unsigned G1Size
,
217 const Type
*BasePtr2Ty
,
218 Value
**GEP2Ops
, unsigned NumGEP2Ops
, unsigned G2Size
);
220 } // End of anonymous namespace
222 // Register this pass...
223 char BasicAliasAnalysis::ID
= 0;
224 static RegisterPass
<BasicAliasAnalysis
>
225 X("basicaa", "Basic Alias Analysis (default AA impl)", false, true);
227 // Declare that we implement the AliasAnalysis interface
228 static RegisterAnalysisGroup
<AliasAnalysis
, true> Y(X
);
230 ImmutablePass
*llvm::createBasicAliasAnalysisPass() {
231 return new BasicAliasAnalysis();
235 /// pointsToConstantMemory - Chase pointers until we find a (constant
237 bool BasicAliasAnalysis::pointsToConstantMemory(const Value
*P
) {
238 if (const GlobalVariable
*GV
=
239 dyn_cast
<GlobalVariable
>(P
->getUnderlyingObject()))
240 return GV
->isConstant();
245 // getModRefInfo - Check to see if the specified callsite can clobber the
246 // specified memory object. Since we only look at local properties of this
247 // function, we really can't say much about this query. We do, however, use
248 // simple "address taken" analysis on local objects.
250 AliasAnalysis::ModRefResult
251 BasicAliasAnalysis::getModRefInfo(CallSite CS
, Value
*P
, unsigned Size
) {
252 if (!isa
<Constant
>(P
)) {
253 const Value
*Object
= P
->getUnderlyingObject();
255 // If this is a tail call and P points to a stack location, we know that
256 // the tail call cannot access or modify the local stack.
257 // We cannot exclude byval arguments here; these belong to the caller of
258 // the current function not to the current function, and a tail callee
259 // may reference them.
260 if (isa
<AllocaInst
>(Object
))
261 if (CallInst
*CI
= dyn_cast
<CallInst
>(CS
.getInstruction()))
262 if (CI
->isTailCall())
265 // If the pointer is to a locally allocated object that does not escape,
266 // then the call can not mod/ref the pointer unless the call takes the
267 // argument without capturing it.
268 if (isNonEscapingLocalObject(Object
) && CS
.getInstruction() != Object
) {
269 bool passedAsArg
= false;
270 // TODO: Eventually only check 'nocapture' arguments.
271 for (CallSite::arg_iterator CI
= CS
.arg_begin(), CE
= CS
.arg_end();
273 if (isa
<PointerType
>((*CI
)->getType()) &&
274 alias(cast
<Value
>(CI
), ~0U, P
, ~0U) != NoAlias
)
282 // The AliasAnalysis base class has some smarts, lets use them.
283 return AliasAnalysis::getModRefInfo(CS
, P
, Size
);
287 AliasAnalysis::ModRefResult
288 BasicAliasAnalysis::getModRefInfo(CallSite CS1
, CallSite CS2
) {
289 // If CS1 or CS2 are readnone, they don't interact.
290 ModRefBehavior CS1B
= AliasAnalysis::getModRefBehavior(CS1
);
291 if (CS1B
== DoesNotAccessMemory
) return NoModRef
;
293 ModRefBehavior CS2B
= AliasAnalysis::getModRefBehavior(CS2
);
294 if (CS2B
== DoesNotAccessMemory
) return NoModRef
;
296 // If they both only read from memory, just return ref.
297 if (CS1B
== OnlyReadsMemory
&& CS2B
== OnlyReadsMemory
)
300 // Otherwise, fall back to NoAA (mod+ref).
301 return NoAA::getModRefInfo(CS1
, CS2
);
305 // alias - Provide a bunch of ad-hoc rules to disambiguate in common cases, such
306 // as array references.
308 AliasAnalysis::AliasResult
309 BasicAliasAnalysis::alias(const Value
*V1
, unsigned V1Size
,
310 const Value
*V2
, unsigned V2Size
) {
311 // Strip off any casts if they exist.
312 V1
= V1
->stripPointerCasts();
313 V2
= V2
->stripPointerCasts();
315 // Are we checking for alias of the same value?
316 if (V1
== V2
) return MustAlias
;
318 if (!isa
<PointerType
>(V1
->getType()) || !isa
<PointerType
>(V2
->getType()))
319 return NoAlias
; // Scalars cannot alias each other
321 // Figure out what objects these things are pointing to if we can.
322 const Value
*O1
= V1
->getUnderlyingObject();
323 const Value
*O2
= V2
->getUnderlyingObject();
326 // If V1/V2 point to two different objects we know that we have no alias.
327 if (isIdentifiedObject(O1
) && isIdentifiedObject(O2
))
330 // Arguments can't alias with local allocations or noalias calls.
331 if ((isa
<Argument
>(O1
) && (isa
<AllocationInst
>(O2
) || isNoAliasCall(O2
))) ||
332 (isa
<Argument
>(O2
) && (isa
<AllocationInst
>(O1
) || isNoAliasCall(O1
))))
335 // Most objects can't alias null.
336 if ((isa
<ConstantPointerNull
>(V2
) && isKnownNonNull(O1
)) ||
337 (isa
<ConstantPointerNull
>(V1
) && isKnownNonNull(O2
)))
341 // If the size of one access is larger than the entire object on the other
342 // side, then we know such behavior is undefined and can assume no alias.
344 if ((V1Size
!= ~0U && isObjectSmallerThan(O2
, V1Size
, *TD
)) ||
345 (V2Size
!= ~0U && isObjectSmallerThan(O1
, V2Size
, *TD
)))
348 // If one pointer is the result of a call/invoke and the other is a
349 // non-escaping local object, then we know the object couldn't escape to a
350 // point where the call could return it.
351 if ((isa
<CallInst
>(O1
) || isa
<InvokeInst
>(O1
)) &&
352 isNonEscapingLocalObject(O2
) && O1
!= O2
)
354 if ((isa
<CallInst
>(O2
) || isa
<InvokeInst
>(O2
)) &&
355 isNonEscapingLocalObject(O1
) && O1
!= O2
)
358 // If we have two gep instructions with must-alias'ing base pointers, figure
359 // out if the indexes to the GEP tell us anything about the derived pointer.
360 // Note that we also handle chains of getelementptr instructions as well as
361 // constant expression getelementptrs here.
363 if (isGEP(V1
) && isGEP(V2
)) {
364 const User
*GEP1
= cast
<User
>(V1
);
365 const User
*GEP2
= cast
<User
>(V2
);
367 // If V1 and V2 are identical GEPs, just recurse down on both of them.
368 // This allows us to analyze things like:
369 // P = gep A, 0, i, 1
370 // Q = gep B, 0, i, 1
371 // by just analyzing A and B. This is even safe for variable indices.
372 if (GEP1
->getType() == GEP2
->getType() &&
373 GEP1
->getNumOperands() == GEP2
->getNumOperands() &&
374 GEP1
->getOperand(0)->getType() == GEP2
->getOperand(0)->getType() &&
375 // All operands are the same, ignoring the base.
376 std::equal(GEP1
->op_begin()+1, GEP1
->op_end(), GEP2
->op_begin()+1))
377 return alias(GEP1
->getOperand(0), V1Size
, GEP2
->getOperand(0), V2Size
);
380 // Drill down into the first non-gep value, to test for must-aliasing of
381 // the base pointers.
382 while (isGEP(GEP1
->getOperand(0)) &&
383 GEP1
->getOperand(1) ==
384 Constant::getNullValue(GEP1
->getOperand(1)->getType()))
385 GEP1
= cast
<User
>(GEP1
->getOperand(0));
386 const Value
*BasePtr1
= GEP1
->getOperand(0);
388 while (isGEP(GEP2
->getOperand(0)) &&
389 GEP2
->getOperand(1) ==
390 Constant::getNullValue(GEP2
->getOperand(1)->getType()))
391 GEP2
= cast
<User
>(GEP2
->getOperand(0));
392 const Value
*BasePtr2
= GEP2
->getOperand(0);
394 // Do the base pointers alias?
395 AliasResult BaseAlias
= alias(BasePtr1
, ~0U, BasePtr2
, ~0U);
396 if (BaseAlias
== NoAlias
) return NoAlias
;
397 if (BaseAlias
== MustAlias
) {
398 // If the base pointers alias each other exactly, check to see if we can
399 // figure out anything about the resultant pointers, to try to prove
402 // Collect all of the chained GEP operands together into one simple place
403 SmallVector
<Value
*, 16> GEP1Ops
, GEP2Ops
;
404 BasePtr1
= GetGEPOperands(V1
, GEP1Ops
);
405 BasePtr2
= GetGEPOperands(V2
, GEP2Ops
);
407 // If GetGEPOperands were able to fold to the same must-aliased pointer,
408 // do the comparison.
409 if (BasePtr1
== BasePtr2
) {
411 CheckGEPInstructions(BasePtr1
->getType(),
412 &GEP1Ops
[0], GEP1Ops
.size(), V1Size
,
414 &GEP2Ops
[0], GEP2Ops
.size(), V2Size
);
415 if (GAlias
!= MayAlias
)
421 // Check to see if these two pointers are related by a getelementptr
422 // instruction. If one pointer is a GEP with a non-zero index of the other
423 // pointer, we know they cannot alias.
427 std::swap(V1Size
, V2Size
);
430 if (V1Size
!= ~0U && V2Size
!= ~0U)
432 SmallVector
<Value
*, 16> GEPOperands
;
433 const Value
*BasePtr
= GetGEPOperands(V1
, GEPOperands
);
435 AliasResult R
= alias(BasePtr
, V1Size
, V2
, V2Size
);
436 if (R
== MustAlias
) {
437 // If there is at least one non-zero constant index, we know they cannot
439 bool ConstantFound
= false;
440 bool AllZerosFound
= true;
441 for (unsigned i
= 0, e
= GEPOperands
.size(); i
!= e
; ++i
)
442 if (const Constant
*C
= dyn_cast
<Constant
>(GEPOperands
[i
])) {
443 if (!C
->isNullValue()) {
444 ConstantFound
= true;
445 AllZerosFound
= false;
449 AllZerosFound
= false;
452 // If we have getelementptr <ptr>, 0, 0, 0, 0, ... and V2 must aliases
453 // the ptr, the end result is a must alias also.
458 if (V2Size
<= 1 && V1Size
<= 1) // Just pointer check?
461 // Otherwise we have to check to see that the distance is more than
462 // the size of the argument... build an index vector that is equal to
463 // the arguments provided, except substitute 0's for any variable
464 // indexes we find...
465 if (TD
&& cast
<PointerType
>(
466 BasePtr
->getType())->getElementType()->isSized()) {
467 for (unsigned i
= 0; i
!= GEPOperands
.size(); ++i
)
468 if (!isa
<ConstantInt
>(GEPOperands
[i
]))
470 Constant::getNullValue(GEPOperands
[i
]->getType());
472 TD
->getIndexedOffset(BasePtr
->getType(),
476 if (Offset
>= (int64_t)V2Size
|| Offset
<= -(int64_t)V1Size
)
486 // This function is used to determine if the indices of two GEP instructions are
487 // equal. V1 and V2 are the indices.
488 static bool IndexOperandsEqual(Value
*V1
, Value
*V2
, LLVMContext
&Context
) {
489 if (V1
->getType() == V2
->getType())
491 if (Constant
*C1
= dyn_cast
<Constant
>(V1
))
492 if (Constant
*C2
= dyn_cast
<Constant
>(V2
)) {
493 // Sign extend the constants to long types, if necessary
494 if (C1
->getType() != Type::getInt64Ty(Context
))
495 C1
= ConstantExpr::getSExt(C1
, Type::getInt64Ty(Context
));
496 if (C2
->getType() != Type::getInt64Ty(Context
))
497 C2
= ConstantExpr::getSExt(C2
, Type::getInt64Ty(Context
));
503 /// CheckGEPInstructions - Check two GEP instructions with known must-aliasing
504 /// base pointers. This checks to see if the index expressions preclude the
505 /// pointers from aliasing...
506 AliasAnalysis::AliasResult
507 BasicAliasAnalysis::CheckGEPInstructions(
508 const Type
* BasePtr1Ty
, Value
**GEP1Ops
, unsigned NumGEP1Ops
, unsigned G1S
,
509 const Type
*BasePtr2Ty
, Value
**GEP2Ops
, unsigned NumGEP2Ops
, unsigned G2S
) {
510 // We currently can't handle the case when the base pointers have different
511 // primitive types. Since this is uncommon anyway, we are happy being
512 // extremely conservative.
513 if (BasePtr1Ty
!= BasePtr2Ty
)
516 const PointerType
*GEPPointerTy
= cast
<PointerType
>(BasePtr1Ty
);
518 LLVMContext
&Context
= GEPPointerTy
->getContext();
520 // Find the (possibly empty) initial sequence of equal values... which are not
521 // necessarily constants.
522 unsigned NumGEP1Operands
= NumGEP1Ops
, NumGEP2Operands
= NumGEP2Ops
;
523 unsigned MinOperands
= std::min(NumGEP1Operands
, NumGEP2Operands
);
524 unsigned MaxOperands
= std::max(NumGEP1Operands
, NumGEP2Operands
);
525 unsigned UnequalOper
= 0;
526 while (UnequalOper
!= MinOperands
&&
527 IndexOperandsEqual(GEP1Ops
[UnequalOper
], GEP2Ops
[UnequalOper
],
529 // Advance through the type as we go...
531 if (const CompositeType
*CT
= dyn_cast
<CompositeType
>(BasePtr1Ty
))
532 BasePtr1Ty
= CT
->getTypeAtIndex(GEP1Ops
[UnequalOper
-1]);
534 // If all operands equal each other, then the derived pointers must
535 // alias each other...
537 assert(UnequalOper
== NumGEP1Operands
&& UnequalOper
== NumGEP2Operands
&&
538 "Ran out of type nesting, but not out of operands?");
543 // If we have seen all constant operands, and run out of indexes on one of the
544 // getelementptrs, check to see if the tail of the leftover one is all zeros.
545 // If so, return mustalias.
546 if (UnequalOper
== MinOperands
) {
547 if (NumGEP1Ops
< NumGEP2Ops
) {
548 std::swap(GEP1Ops
, GEP2Ops
);
549 std::swap(NumGEP1Ops
, NumGEP2Ops
);
552 bool AllAreZeros
= true;
553 for (unsigned i
= UnequalOper
; i
!= MaxOperands
; ++i
)
554 if (!isa
<Constant
>(GEP1Ops
[i
]) ||
555 !cast
<Constant
>(GEP1Ops
[i
])->isNullValue()) {
559 if (AllAreZeros
) return MustAlias
;
563 // So now we know that the indexes derived from the base pointers,
564 // which are known to alias, are different. We can still determine a
565 // no-alias result if there are differing constant pairs in the index
566 // chain. For example:
567 // A[i][0] != A[j][1] iff (&A[0][1]-&A[0][0] >= std::max(G1S, G2S))
569 // We have to be careful here about array accesses. In particular, consider:
570 // A[1][0] vs A[0][i]
571 // In this case, we don't *know* that the array will be accessed in bounds:
572 // the index could even be negative. Because of this, we have to
573 // conservatively *give up* and return may alias. We disregard differing
574 // array subscripts that are followed by a variable index without going
577 unsigned SizeMax
= std::max(G1S
, G2S
);
578 if (SizeMax
== ~0U) return MayAlias
; // Avoid frivolous work.
580 // Scan for the first operand that is constant and unequal in the
581 // two getelementptrs...
582 unsigned FirstConstantOper
= UnequalOper
;
583 for (; FirstConstantOper
!= MinOperands
; ++FirstConstantOper
) {
584 const Value
*G1Oper
= GEP1Ops
[FirstConstantOper
];
585 const Value
*G2Oper
= GEP2Ops
[FirstConstantOper
];
587 if (G1Oper
!= G2Oper
) // Found non-equal constant indexes...
588 if (Constant
*G1OC
= dyn_cast
<ConstantInt
>(const_cast<Value
*>(G1Oper
)))
589 if (Constant
*G2OC
= dyn_cast
<ConstantInt
>(const_cast<Value
*>(G2Oper
))){
590 if (G1OC
->getType() != G2OC
->getType()) {
591 // Sign extend both operands to long.
592 if (G1OC
->getType() != Type::getInt64Ty(Context
))
593 G1OC
= ConstantExpr::getSExt(G1OC
, Type::getInt64Ty(Context
));
594 if (G2OC
->getType() != Type::getInt64Ty(Context
))
595 G2OC
= ConstantExpr::getSExt(G2OC
, Type::getInt64Ty(Context
));
596 GEP1Ops
[FirstConstantOper
] = G1OC
;
597 GEP2Ops
[FirstConstantOper
] = G2OC
;
601 // Handle the "be careful" case above: if this is an array/vector
602 // subscript, scan for a subsequent variable array index.
603 if (const SequentialType
*STy
=
604 dyn_cast
<SequentialType
>(BasePtr1Ty
)) {
605 const Type
*NextTy
= STy
;
606 bool isBadCase
= false;
608 for (unsigned Idx
= FirstConstantOper
;
609 Idx
!= MinOperands
&& isa
<SequentialType
>(NextTy
); ++Idx
) {
610 const Value
*V1
= GEP1Ops
[Idx
], *V2
= GEP2Ops
[Idx
];
611 if (!isa
<Constant
>(V1
) || !isa
<Constant
>(V2
)) {
615 // If the array is indexed beyond the bounds of the static type
616 // at this level, it will also fall into the "be careful" case.
617 // It would theoretically be possible to analyze these cases,
618 // but for now just be conservatively correct.
619 if (const ArrayType
*ATy
= dyn_cast
<ArrayType
>(STy
))
620 if (cast
<ConstantInt
>(G1OC
)->getZExtValue() >=
621 ATy
->getNumElements() ||
622 cast
<ConstantInt
>(G2OC
)->getZExtValue() >=
623 ATy
->getNumElements()) {
627 if (const VectorType
*VTy
= dyn_cast
<VectorType
>(STy
))
628 if (cast
<ConstantInt
>(G1OC
)->getZExtValue() >=
629 VTy
->getNumElements() ||
630 cast
<ConstantInt
>(G2OC
)->getZExtValue() >=
631 VTy
->getNumElements()) {
635 STy
= cast
<SequentialType
>(NextTy
);
636 NextTy
= cast
<SequentialType
>(NextTy
)->getElementType();
639 if (isBadCase
) G1OC
= 0;
642 // Make sure they are comparable (ie, not constant expressions), and
643 // make sure the GEP with the smaller leading constant is GEP1.
645 Constant
*Compare
= ConstantExpr::getICmp(ICmpInst::ICMP_SGT
,
647 if (ConstantInt
*CV
= dyn_cast
<ConstantInt
>(Compare
)) {
648 if (CV
->getZExtValue()) { // If they are comparable and G2 > G1
649 std::swap(GEP1Ops
, GEP2Ops
); // Make GEP1 < GEP2
650 std::swap(NumGEP1Ops
, NumGEP2Ops
);
657 BasePtr1Ty
= cast
<CompositeType
>(BasePtr1Ty
)->getTypeAtIndex(G1Oper
);
660 // No shared constant operands, and we ran out of common operands. At this
661 // point, the GEP instructions have run through all of their operands, and we
662 // haven't found evidence that there are any deltas between the GEP's.
663 // However, one GEP may have more operands than the other. If this is the
664 // case, there may still be hope. Check this now.
665 if (FirstConstantOper
== MinOperands
) {
666 // Without TargetData, we won't know what the offsets are.
670 // Make GEP1Ops be the longer one if there is a longer one.
671 if (NumGEP1Ops
< NumGEP2Ops
) {
672 std::swap(GEP1Ops
, GEP2Ops
);
673 std::swap(NumGEP1Ops
, NumGEP2Ops
);
676 // Is there anything to check?
677 if (NumGEP1Ops
> MinOperands
) {
678 for (unsigned i
= FirstConstantOper
; i
!= MaxOperands
; ++i
)
679 if (isa
<ConstantInt
>(GEP1Ops
[i
]) &&
680 !cast
<ConstantInt
>(GEP1Ops
[i
])->isZero()) {
681 // Yup, there's a constant in the tail. Set all variables to
682 // constants in the GEP instruction to make it suitable for
683 // TargetData::getIndexedOffset.
684 for (i
= 0; i
!= MaxOperands
; ++i
)
685 if (!isa
<ConstantInt
>(GEP1Ops
[i
]))
686 GEP1Ops
[i
] = Constant::getNullValue(GEP1Ops
[i
]->getType());
687 // Okay, now get the offset. This is the relative offset for the full
689 int64_t Offset1
= TD
->getIndexedOffset(GEPPointerTy
, GEP1Ops
,
692 // Now check without any constants at the end.
693 int64_t Offset2
= TD
->getIndexedOffset(GEPPointerTy
, GEP1Ops
,
696 // Make sure we compare the absolute difference.
697 if (Offset1
> Offset2
)
698 std::swap(Offset1
, Offset2
);
700 // If the tail provided a bit enough offset, return noalias!
701 if ((uint64_t)(Offset2
-Offset1
) >= SizeMax
)
703 // Otherwise break - we don't look for another constant in the tail.
708 // Couldn't find anything useful.
712 // If there are non-equal constants arguments, then we can figure
713 // out a minimum known delta between the two index expressions... at
714 // this point we know that the first constant index of GEP1 is less
715 // than the first constant index of GEP2.
717 // Advance BasePtr[12]Ty over this first differing constant operand.
718 BasePtr2Ty
= cast
<CompositeType
>(BasePtr1Ty
)->
719 getTypeAtIndex(GEP2Ops
[FirstConstantOper
]);
720 BasePtr1Ty
= cast
<CompositeType
>(BasePtr1Ty
)->
721 getTypeAtIndex(GEP1Ops
[FirstConstantOper
]);
723 // We are going to be using TargetData::getIndexedOffset to determine the
724 // offset that each of the GEP's is reaching. To do this, we have to convert
725 // all variable references to constant references. To do this, we convert the
726 // initial sequence of array subscripts into constant zeros to start with.
727 const Type
*ZeroIdxTy
= GEPPointerTy
;
728 for (unsigned i
= 0; i
!= FirstConstantOper
; ++i
) {
729 if (!isa
<StructType
>(ZeroIdxTy
))
730 GEP1Ops
[i
] = GEP2Ops
[i
] =
731 Constant::getNullValue(Type::getInt32Ty(Context
));
733 if (const CompositeType
*CT
= dyn_cast
<CompositeType
>(ZeroIdxTy
))
734 ZeroIdxTy
= CT
->getTypeAtIndex(GEP1Ops
[i
]);
737 // We know that GEP1Ops[FirstConstantOper] & GEP2Ops[FirstConstantOper] are ok
739 // Loop over the rest of the operands...
740 for (unsigned i
= FirstConstantOper
+1; i
!= MaxOperands
; ++i
) {
741 const Value
*Op1
= i
< NumGEP1Ops
? GEP1Ops
[i
] : 0;
742 const Value
*Op2
= i
< NumGEP2Ops
? GEP2Ops
[i
] : 0;
743 // If they are equal, use a zero index...
744 if (Op1
== Op2
&& BasePtr1Ty
== BasePtr2Ty
) {
745 if (!isa
<ConstantInt
>(Op1
))
746 GEP1Ops
[i
] = GEP2Ops
[i
] = Constant::getNullValue(Op1
->getType());
747 // Otherwise, just keep the constants we have.
750 if (const ConstantInt
*Op1C
= dyn_cast
<ConstantInt
>(Op1
)) {
751 // If this is an array index, make sure the array element is in range.
752 if (const ArrayType
*AT
= dyn_cast
<ArrayType
>(BasePtr1Ty
)) {
753 if (Op1C
->getZExtValue() >= AT
->getNumElements())
754 return MayAlias
; // Be conservative with out-of-range accesses
755 } else if (const VectorType
*VT
= dyn_cast
<VectorType
>(BasePtr1Ty
)) {
756 if (Op1C
->getZExtValue() >= VT
->getNumElements())
757 return MayAlias
; // Be conservative with out-of-range accesses
761 // GEP1 is known to produce a value less than GEP2. To be
762 // conservatively correct, we must assume the largest possible
763 // constant is used in this position. This cannot be the initial
764 // index to the GEP instructions (because we know we have at least one
765 // element before this one with the different constant arguments), so
766 // we know that the current index must be into either a struct or
767 // array. Because we know it's not constant, this cannot be a
768 // structure index. Because of this, we can calculate the maximum
771 if (const ArrayType
*AT
= dyn_cast
<ArrayType
>(BasePtr1Ty
))
773 ConstantInt::get(Type::getInt64Ty(Context
),
774 AT
->getNumElements()-1);
775 else if (const VectorType
*VT
= dyn_cast
<VectorType
>(BasePtr1Ty
))
777 ConstantInt::get(Type::getInt64Ty(Context
),
778 VT
->getNumElements()-1);
783 if (const ConstantInt
*Op2C
= dyn_cast
<ConstantInt
>(Op2
)) {
784 // If this is an array index, make sure the array element is in range.
785 if (const ArrayType
*AT
= dyn_cast
<ArrayType
>(BasePtr2Ty
)) {
786 if (Op2C
->getZExtValue() >= AT
->getNumElements())
787 return MayAlias
; // Be conservative with out-of-range accesses
788 } else if (const VectorType
*VT
= dyn_cast
<VectorType
>(BasePtr2Ty
)) {
789 if (Op2C
->getZExtValue() >= VT
->getNumElements())
790 return MayAlias
; // Be conservative with out-of-range accesses
792 } else { // Conservatively assume the minimum value for this index
793 GEP2Ops
[i
] = Constant::getNullValue(Op2
->getType());
798 if (BasePtr1Ty
&& Op1
) {
799 if (const CompositeType
*CT
= dyn_cast
<CompositeType
>(BasePtr1Ty
))
800 BasePtr1Ty
= CT
->getTypeAtIndex(GEP1Ops
[i
]);
805 if (BasePtr2Ty
&& Op2
) {
806 if (const CompositeType
*CT
= dyn_cast
<CompositeType
>(BasePtr2Ty
))
807 BasePtr2Ty
= CT
->getTypeAtIndex(GEP2Ops
[i
]);
813 if (TD
&& GEPPointerTy
->getElementType()->isSized()) {
815 TD
->getIndexedOffset(GEPPointerTy
, GEP1Ops
, NumGEP1Ops
);
817 TD
->getIndexedOffset(GEPPointerTy
, GEP2Ops
, NumGEP2Ops
);
818 assert(Offset1
!= Offset2
&&
819 "There is at least one different constant here!");
821 // Make sure we compare the absolute difference.
822 if (Offset1
> Offset2
)
823 std::swap(Offset1
, Offset2
);
825 if ((uint64_t)(Offset2
-Offset1
) >= SizeMax
) {
826 //cerr << "Determined that these two GEP's don't alias ["
827 // << SizeMax << " bytes]: \n" << *GEP1 << *GEP2;
834 // Make sure that anything that uses AliasAnalysis pulls in this file...
835 DEFINING_FILE_FOR(BasicAliasAnalysis
)