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/Pass.h"
26 #include "llvm/Target/TargetData.h"
27 #include "llvm/ADT/SmallVector.h"
28 #include "llvm/ADT/STLExtras.h"
29 #include "llvm/Support/Compiler.h"
30 #include "llvm/Support/GetElementPtrTypeIterator.h"
31 #include "llvm/Support/ManagedStatic.h"
35 //===----------------------------------------------------------------------===//
37 //===----------------------------------------------------------------------===//
39 static const User
*isGEP(const Value
*V
) {
40 if (isa
<GetElementPtrInst
>(V
) ||
41 (isa
<ConstantExpr
>(V
) &&
42 cast
<ConstantExpr
>(V
)->getOpcode() == Instruction::GetElementPtr
))
47 static const Value
*GetGEPOperands(const Value
*V
,
48 SmallVector
<Value
*, 16> &GEPOps
) {
49 assert(GEPOps
.empty() && "Expect empty list to populate!");
50 GEPOps
.insert(GEPOps
.end(), cast
<User
>(V
)->op_begin()+1,
51 cast
<User
>(V
)->op_end());
53 // Accumulate all of the chained indexes into the operand array
54 V
= cast
<User
>(V
)->getOperand(0);
56 while (const User
*G
= isGEP(V
)) {
57 if (!isa
<Constant
>(GEPOps
[0]) || isa
<GlobalValue
>(GEPOps
[0]) ||
58 !cast
<Constant
>(GEPOps
[0])->isNullValue())
59 break; // Don't handle folding arbitrary pointer offsets yet...
60 GEPOps
.erase(GEPOps
.begin()); // Drop the zero index
61 GEPOps
.insert(GEPOps
.begin(), G
->op_begin()+1, G
->op_end());
67 /// isKnownNonNull - Return true if we know that the specified value is never
69 static bool isKnownNonNull(const Value
*V
) {
70 // Alloca never returns null, malloc might.
71 if (isa
<AllocaInst
>(V
)) return true;
73 // A byval argument is never null.
74 if (const Argument
*A
= dyn_cast
<Argument
>(V
))
75 return A
->hasByValAttr();
77 // Global values are not null unless extern weak.
78 if (const GlobalValue
*GV
= dyn_cast
<GlobalValue
>(V
))
79 return !GV
->hasExternalWeakLinkage();
83 /// isNonEscapingLocalObject - Return true if the pointer is to a function-local
84 /// object that never escapes from the function.
85 static bool isNonEscapingLocalObject(const Value
*V
) {
86 // If this is a local allocation, check to see if it escapes.
87 if (isa
<AllocationInst
>(V
) || isNoAliasCall(V
))
88 return !PointerMayBeCaptured(V
, false);
90 // If this is an argument that corresponds to a byval or noalias argument,
91 // then it has not escaped before entering the function. Check if it escapes
92 // inside the function.
93 if (const Argument
*A
= dyn_cast
<Argument
>(V
))
94 if (A
->hasByValAttr() || A
->hasNoAliasAttr()) {
95 // Don't bother analyzing arguments already known not to escape.
96 if (A
->hasNoCaptureAttr())
98 return !PointerMayBeCaptured(V
, false);
104 /// isObjectSmallerThan - Return true if we can prove that the object specified
105 /// by V is smaller than Size.
106 static bool isObjectSmallerThan(const Value
*V
, unsigned Size
,
107 const TargetData
&TD
) {
108 const Type
*AccessTy
;
109 if (const GlobalVariable
*GV
= dyn_cast
<GlobalVariable
>(V
)) {
110 AccessTy
= GV
->getType()->getElementType();
111 } else if (const AllocationInst
*AI
= dyn_cast
<AllocationInst
>(V
)) {
112 if (!AI
->isArrayAllocation())
113 AccessTy
= AI
->getType()->getElementType();
116 } else if (const Argument
*A
= dyn_cast
<Argument
>(V
)) {
117 if (A
->hasByValAttr())
118 AccessTy
= cast
<PointerType
>(A
->getType())->getElementType();
125 if (AccessTy
->isSized())
126 return TD
.getTypePaddedSize(AccessTy
) < Size
;
130 //===----------------------------------------------------------------------===//
132 //===----------------------------------------------------------------------===//
135 /// NoAA - This class implements the -no-aa pass, which always returns "I
136 /// don't know" for alias queries. NoAA is unlike other alias analysis
137 /// implementations, in that it does not chain to a previous analysis. As
138 /// such it doesn't follow many of the rules that other alias analyses must.
140 struct VISIBILITY_HIDDEN NoAA
: public ImmutablePass
, public AliasAnalysis
{
141 static char ID
; // Class identification, replacement for typeinfo
142 NoAA() : ImmutablePass(&ID
) {}
143 explicit NoAA(void *PID
) : ImmutablePass(PID
) { }
145 virtual void getAnalysisUsage(AnalysisUsage
&AU
) const {
146 AU
.addRequired
<TargetData
>();
149 virtual void initializePass() {
150 TD
= &getAnalysis
<TargetData
>();
153 virtual AliasResult
alias(const Value
*V1
, unsigned V1Size
,
154 const Value
*V2
, unsigned V2Size
) {
158 virtual void getArgumentAccesses(Function
*F
, CallSite CS
,
159 std::vector
<PointerAccessInfo
> &Info
) {
160 assert(0 && "This method may not be called on this function!");
163 virtual void getMustAliases(Value
*P
, std::vector
<Value
*> &RetVals
) { }
164 virtual bool pointsToConstantMemory(const Value
*P
) { return false; }
165 virtual ModRefResult
getModRefInfo(CallSite CS
, Value
*P
, unsigned Size
) {
168 virtual ModRefResult
getModRefInfo(CallSite CS1
, CallSite CS2
) {
171 virtual bool hasNoModRefInfoForCalls() const { return true; }
173 virtual void deleteValue(Value
*V
) {}
174 virtual void copyValue(Value
*From
, Value
*To
) {}
176 } // End of anonymous namespace
178 // Register this pass...
180 static RegisterPass
<NoAA
>
181 U("no-aa", "No Alias Analysis (always returns 'may' alias)", true, true);
183 // Declare that we implement the AliasAnalysis interface
184 static RegisterAnalysisGroup
<AliasAnalysis
> V(U
);
186 ImmutablePass
*llvm::createNoAAPass() { return new NoAA(); }
188 //===----------------------------------------------------------------------===//
190 //===----------------------------------------------------------------------===//
193 /// BasicAliasAnalysis - This is the default alias analysis implementation.
194 /// Because it doesn't chain to a previous alias analysis (like -no-aa), it
195 /// derives from the NoAA class.
196 struct VISIBILITY_HIDDEN BasicAliasAnalysis
: public NoAA
{
197 static char ID
; // Class identification, replacement for typeinfo
198 BasicAliasAnalysis() : NoAA(&ID
) {}
199 AliasResult
alias(const Value
*V1
, unsigned V1Size
,
200 const Value
*V2
, unsigned V2Size
);
202 ModRefResult
getModRefInfo(CallSite CS
, Value
*P
, unsigned Size
);
203 ModRefResult
getModRefInfo(CallSite CS1
, CallSite CS2
);
205 /// hasNoModRefInfoForCalls - We can provide mod/ref information against
206 /// non-escaping allocations.
207 virtual bool hasNoModRefInfoForCalls() const { return false; }
209 /// pointsToConstantMemory - Chase pointers until we find a (constant
211 bool pointsToConstantMemory(const Value
*P
);
214 // CheckGEPInstructions - Check two GEP instructions with known
215 // must-aliasing base pointers. This checks to see if the index expressions
216 // preclude the pointers from aliasing...
218 CheckGEPInstructions(const Type
* BasePtr1Ty
,
219 Value
**GEP1Ops
, unsigned NumGEP1Ops
, unsigned G1Size
,
220 const Type
*BasePtr2Ty
,
221 Value
**GEP2Ops
, unsigned NumGEP2Ops
, unsigned G2Size
);
223 } // End of anonymous namespace
225 // Register this pass...
226 char BasicAliasAnalysis::ID
= 0;
227 static RegisterPass
<BasicAliasAnalysis
>
228 X("basicaa", "Basic Alias Analysis (default AA impl)", false, true);
230 // Declare that we implement the AliasAnalysis interface
231 static RegisterAnalysisGroup
<AliasAnalysis
, true> Y(X
);
233 ImmutablePass
*llvm::createBasicAliasAnalysisPass() {
234 return new BasicAliasAnalysis();
238 /// pointsToConstantMemory - Chase pointers until we find a (constant
240 bool BasicAliasAnalysis::pointsToConstantMemory(const Value
*P
) {
241 if (const GlobalVariable
*GV
=
242 dyn_cast
<GlobalVariable
>(P
->getUnderlyingObject()))
243 return GV
->isConstant();
248 // getModRefInfo - Check to see if the specified callsite can clobber the
249 // specified memory object. Since we only look at local properties of this
250 // function, we really can't say much about this query. We do, however, use
251 // simple "address taken" analysis on local objects.
253 AliasAnalysis::ModRefResult
254 BasicAliasAnalysis::getModRefInfo(CallSite CS
, Value
*P
, unsigned Size
) {
255 if (!isa
<Constant
>(P
)) {
256 const Value
*Object
= P
->getUnderlyingObject();
258 // If this is a tail call and P points to a stack location, we know that
259 // the tail call cannot access or modify the local stack.
260 // We cannot exclude byval arguments here; these belong to the caller of
261 // the current function not to the current function, and a tail callee
262 // may reference them.
263 if (isa
<AllocaInst
>(Object
))
264 if (CallInst
*CI
= dyn_cast
<CallInst
>(CS
.getInstruction()))
265 if (CI
->isTailCall())
268 // If the pointer is to a locally allocated object that does not escape,
269 // then the call can not mod/ref the pointer unless the call takes the
270 // argument without capturing it.
271 if (isNonEscapingLocalObject(Object
) && CS
.getInstruction() != Object
) {
272 bool passedAsArg
= false;
273 // TODO: Eventually only check 'nocapture' arguments.
274 for (CallSite::arg_iterator CI
= CS
.arg_begin(), CE
= CS
.arg_end();
276 if (isa
<PointerType
>((*CI
)->getType()) &&
277 alias(cast
<Value
>(CI
), ~0U, P
, ~0U) != NoAlias
)
285 // The AliasAnalysis base class has some smarts, lets use them.
286 return AliasAnalysis::getModRefInfo(CS
, P
, Size
);
290 AliasAnalysis::ModRefResult
291 BasicAliasAnalysis::getModRefInfo(CallSite CS1
, CallSite CS2
) {
292 // If CS1 or CS2 are readnone, they don't interact.
293 ModRefBehavior CS1B
= AliasAnalysis::getModRefBehavior(CS1
);
294 if (CS1B
== DoesNotAccessMemory
) return NoModRef
;
296 ModRefBehavior CS2B
= AliasAnalysis::getModRefBehavior(CS2
);
297 if (CS2B
== DoesNotAccessMemory
) return NoModRef
;
299 // If they both only read from memory, just return ref.
300 if (CS1B
== OnlyReadsMemory
&& CS2B
== OnlyReadsMemory
)
303 // Otherwise, fall back to NoAA (mod+ref).
304 return NoAA::getModRefInfo(CS1
, CS2
);
308 // alias - Provide a bunch of ad-hoc rules to disambiguate in common cases, such
309 // as array references.
311 AliasAnalysis::AliasResult
312 BasicAliasAnalysis::alias(const Value
*V1
, unsigned V1Size
,
313 const Value
*V2
, unsigned V2Size
) {
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 Constant::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 Constant::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 Constant::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
) {
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
= ConstantExpr::getSExt(C1
, Type::Int64Ty
);
510 if (C2
->getType() != Type::Int64Ty
)
511 C2
= ConstantExpr::getSExt(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 // Find the (possibly empty) initial sequence of equal values... which are not
533 // necessarily constants.
534 unsigned NumGEP1Operands
= NumGEP1Ops
, NumGEP2Operands
= NumGEP2Ops
;
535 unsigned MinOperands
= std::min(NumGEP1Operands
, NumGEP2Operands
);
536 unsigned MaxOperands
= std::max(NumGEP1Operands
, NumGEP2Operands
);
537 unsigned UnequalOper
= 0;
538 while (UnequalOper
!= MinOperands
&&
539 IndexOperandsEqual(GEP1Ops
[UnequalOper
], GEP2Ops
[UnequalOper
])) {
540 // Advance through the type as we go...
542 if (const CompositeType
*CT
= dyn_cast
<CompositeType
>(BasePtr1Ty
))
543 BasePtr1Ty
= CT
->getTypeAtIndex(GEP1Ops
[UnequalOper
-1]);
545 // If all operands equal each other, then the derived pointers must
546 // alias each other...
548 assert(UnequalOper
== NumGEP1Operands
&& UnequalOper
== NumGEP2Operands
&&
549 "Ran out of type nesting, but not out of operands?");
554 // If we have seen all constant operands, and run out of indexes on one of the
555 // getelementptrs, check to see if the tail of the leftover one is all zeros.
556 // If so, return mustalias.
557 if (UnequalOper
== MinOperands
) {
558 if (NumGEP1Ops
< NumGEP2Ops
) {
559 std::swap(GEP1Ops
, GEP2Ops
);
560 std::swap(NumGEP1Ops
, NumGEP2Ops
);
563 bool AllAreZeros
= true;
564 for (unsigned i
= UnequalOper
; i
!= MaxOperands
; ++i
)
565 if (!isa
<Constant
>(GEP1Ops
[i
]) ||
566 !cast
<Constant
>(GEP1Ops
[i
])->isNullValue()) {
570 if (AllAreZeros
) return MustAlias
;
574 // So now we know that the indexes derived from the base pointers,
575 // which are known to alias, are different. We can still determine a
576 // no-alias result if there are differing constant pairs in the index
577 // chain. For example:
578 // A[i][0] != A[j][1] iff (&A[0][1]-&A[0][0] >= std::max(G1S, G2S))
580 // We have to be careful here about array accesses. In particular, consider:
581 // A[1][0] vs A[0][i]
582 // In this case, we don't *know* that the array will be accessed in bounds:
583 // the index could even be negative. Because of this, we have to
584 // conservatively *give up* and return may alias. We disregard differing
585 // array subscripts that are followed by a variable index without going
588 unsigned SizeMax
= std::max(G1S
, G2S
);
589 if (SizeMax
== ~0U) return MayAlias
; // Avoid frivolous work.
591 // Scan for the first operand that is constant and unequal in the
592 // two getelementptrs...
593 unsigned FirstConstantOper
= UnequalOper
;
594 for (; FirstConstantOper
!= MinOperands
; ++FirstConstantOper
) {
595 const Value
*G1Oper
= GEP1Ops
[FirstConstantOper
];
596 const Value
*G2Oper
= GEP2Ops
[FirstConstantOper
];
598 if (G1Oper
!= G2Oper
) // Found non-equal constant indexes...
599 if (Constant
*G1OC
= dyn_cast
<ConstantInt
>(const_cast<Value
*>(G1Oper
)))
600 if (Constant
*G2OC
= dyn_cast
<ConstantInt
>(const_cast<Value
*>(G2Oper
))){
601 if (G1OC
->getType() != G2OC
->getType()) {
602 // Sign extend both operands to long.
603 if (G1OC
->getType() != Type::Int64Ty
)
604 G1OC
= ConstantExpr::getSExt(G1OC
, Type::Int64Ty
);
605 if (G2OC
->getType() != Type::Int64Ty
)
606 G2OC
= ConstantExpr::getSExt(G2OC
, Type::Int64Ty
);
607 GEP1Ops
[FirstConstantOper
] = G1OC
;
608 GEP2Ops
[FirstConstantOper
] = G2OC
;
612 // Handle the "be careful" case above: if this is an array/vector
613 // subscript, scan for a subsequent variable array index.
614 if (isa
<SequentialType
>(BasePtr1Ty
)) {
616 cast
<SequentialType
>(BasePtr1Ty
)->getElementType();
617 bool isBadCase
= false;
619 for (unsigned Idx
= FirstConstantOper
+1;
620 Idx
!= MinOperands
&& isa
<SequentialType
>(NextTy
); ++Idx
) {
621 const Value
*V1
= GEP1Ops
[Idx
], *V2
= GEP2Ops
[Idx
];
622 if (!isa
<Constant
>(V1
) || !isa
<Constant
>(V2
)) {
626 NextTy
= cast
<SequentialType
>(NextTy
)->getElementType();
629 if (isBadCase
) G1OC
= 0;
632 // Make sure they are comparable (ie, not constant expressions), and
633 // make sure the GEP with the smaller leading constant is GEP1.
635 Constant
*Compare
= ConstantExpr::getICmp(ICmpInst::ICMP_SGT
,
637 if (ConstantInt
*CV
= dyn_cast
<ConstantInt
>(Compare
)) {
638 if (CV
->getZExtValue()) { // If they are comparable and G2 > G1
639 std::swap(GEP1Ops
, GEP2Ops
); // Make GEP1 < GEP2
640 std::swap(NumGEP1Ops
, NumGEP2Ops
);
647 BasePtr1Ty
= cast
<CompositeType
>(BasePtr1Ty
)->getTypeAtIndex(G1Oper
);
650 // No shared constant operands, and we ran out of common operands. At this
651 // point, the GEP instructions have run through all of their operands, and we
652 // haven't found evidence that there are any deltas between the GEP's.
653 // However, one GEP may have more operands than the other. If this is the
654 // case, there may still be hope. Check this now.
655 if (FirstConstantOper
== MinOperands
) {
656 // Make GEP1Ops be the longer one if there is a longer one.
657 if (NumGEP1Ops
< NumGEP2Ops
) {
658 std::swap(GEP1Ops
, GEP2Ops
);
659 std::swap(NumGEP1Ops
, NumGEP2Ops
);
662 // Is there anything to check?
663 if (NumGEP1Ops
> MinOperands
) {
664 for (unsigned i
= FirstConstantOper
; i
!= MaxOperands
; ++i
)
665 if (isa
<ConstantInt
>(GEP1Ops
[i
]) &&
666 !cast
<ConstantInt
>(GEP1Ops
[i
])->isZero()) {
667 // Yup, there's a constant in the tail. Set all variables to
668 // constants in the GEP instruction to make it suitable for
669 // TargetData::getIndexedOffset.
670 for (i
= 0; i
!= MaxOperands
; ++i
)
671 if (!isa
<ConstantInt
>(GEP1Ops
[i
]))
672 GEP1Ops
[i
] = Constant::getNullValue(GEP1Ops
[i
]->getType());
673 // Okay, now get the offset. This is the relative offset for the full
675 const TargetData
&TD
= getTargetData();
676 int64_t Offset1
= TD
.getIndexedOffset(GEPPointerTy
, GEP1Ops
,
679 // Now check without any constants at the end.
680 int64_t Offset2
= TD
.getIndexedOffset(GEPPointerTy
, GEP1Ops
,
683 // Make sure we compare the absolute difference.
684 if (Offset1
> Offset2
)
685 std::swap(Offset1
, Offset2
);
687 // If the tail provided a bit enough offset, return noalias!
688 if ((uint64_t)(Offset2
-Offset1
) >= SizeMax
)
690 // Otherwise break - we don't look for another constant in the tail.
695 // Couldn't find anything useful.
699 // If there are non-equal constants arguments, then we can figure
700 // out a minimum known delta between the two index expressions... at
701 // this point we know that the first constant index of GEP1 is less
702 // than the first constant index of GEP2.
704 // Advance BasePtr[12]Ty over this first differing constant operand.
705 BasePtr2Ty
= cast
<CompositeType
>(BasePtr1Ty
)->
706 getTypeAtIndex(GEP2Ops
[FirstConstantOper
]);
707 BasePtr1Ty
= cast
<CompositeType
>(BasePtr1Ty
)->
708 getTypeAtIndex(GEP1Ops
[FirstConstantOper
]);
710 // We are going to be using TargetData::getIndexedOffset to determine the
711 // offset that each of the GEP's is reaching. To do this, we have to convert
712 // all variable references to constant references. To do this, we convert the
713 // initial sequence of array subscripts into constant zeros to start with.
714 const Type
*ZeroIdxTy
= GEPPointerTy
;
715 for (unsigned i
= 0; i
!= FirstConstantOper
; ++i
) {
716 if (!isa
<StructType
>(ZeroIdxTy
))
717 GEP1Ops
[i
] = GEP2Ops
[i
] = Constant::getNullValue(Type::Int32Ty
);
719 if (const CompositeType
*CT
= dyn_cast
<CompositeType
>(ZeroIdxTy
))
720 ZeroIdxTy
= CT
->getTypeAtIndex(GEP1Ops
[i
]);
723 // We know that GEP1Ops[FirstConstantOper] & GEP2Ops[FirstConstantOper] are ok
725 // Loop over the rest of the operands...
726 for (unsigned i
= FirstConstantOper
+1; i
!= MaxOperands
; ++i
) {
727 const Value
*Op1
= i
< NumGEP1Ops
? GEP1Ops
[i
] : 0;
728 const Value
*Op2
= i
< NumGEP2Ops
? GEP2Ops
[i
] : 0;
729 // If they are equal, use a zero index...
730 if (Op1
== Op2
&& BasePtr1Ty
== BasePtr2Ty
) {
731 if (!isa
<ConstantInt
>(Op1
))
732 GEP1Ops
[i
] = GEP2Ops
[i
] = Constant::getNullValue(Op1
->getType());
733 // Otherwise, just keep the constants we have.
736 if (const ConstantInt
*Op1C
= dyn_cast
<ConstantInt
>(Op1
)) {
737 // If this is an array index, make sure the array element is in range.
738 if (const ArrayType
*AT
= dyn_cast
<ArrayType
>(BasePtr1Ty
)) {
739 if (Op1C
->getZExtValue() >= AT
->getNumElements())
740 return MayAlias
; // Be conservative with out-of-range accesses
741 } else if (const VectorType
*VT
= dyn_cast
<VectorType
>(BasePtr1Ty
)) {
742 if (Op1C
->getZExtValue() >= VT
->getNumElements())
743 return MayAlias
; // Be conservative with out-of-range accesses
747 // GEP1 is known to produce a value less than GEP2. To be
748 // conservatively correct, we must assume the largest possible
749 // constant is used in this position. This cannot be the initial
750 // index to the GEP instructions (because we know we have at least one
751 // element before this one with the different constant arguments), so
752 // we know that the current index must be into either a struct or
753 // array. Because we know it's not constant, this cannot be a
754 // structure index. Because of this, we can calculate the maximum
757 if (const ArrayType
*AT
= dyn_cast
<ArrayType
>(BasePtr1Ty
))
758 GEP1Ops
[i
] = ConstantInt::get(Type::Int64Ty
,AT
->getNumElements()-1);
759 else if (const VectorType
*VT
= dyn_cast
<VectorType
>(BasePtr1Ty
))
760 GEP1Ops
[i
] = ConstantInt::get(Type::Int64Ty
,VT
->getNumElements()-1);
765 if (const ConstantInt
*Op2C
= dyn_cast
<ConstantInt
>(Op2
)) {
766 // If this is an array index, make sure the array element is in range.
767 if (const ArrayType
*AT
= dyn_cast
<ArrayType
>(BasePtr2Ty
)) {
768 if (Op2C
->getZExtValue() >= AT
->getNumElements())
769 return MayAlias
; // Be conservative with out-of-range accesses
770 } else if (const VectorType
*VT
= dyn_cast
<VectorType
>(BasePtr2Ty
)) {
771 if (Op2C
->getZExtValue() >= VT
->getNumElements())
772 return MayAlias
; // Be conservative with out-of-range accesses
774 } else { // Conservatively assume the minimum value for this index
775 GEP2Ops
[i
] = Constant::getNullValue(Op2
->getType());
780 if (BasePtr1Ty
&& Op1
) {
781 if (const CompositeType
*CT
= dyn_cast
<CompositeType
>(BasePtr1Ty
))
782 BasePtr1Ty
= CT
->getTypeAtIndex(GEP1Ops
[i
]);
787 if (BasePtr2Ty
&& Op2
) {
788 if (const CompositeType
*CT
= dyn_cast
<CompositeType
>(BasePtr2Ty
))
789 BasePtr2Ty
= CT
->getTypeAtIndex(GEP2Ops
[i
]);
795 if (GEPPointerTy
->getElementType()->isSized()) {
797 getTargetData().getIndexedOffset(GEPPointerTy
, GEP1Ops
, NumGEP1Ops
);
799 getTargetData().getIndexedOffset(GEPPointerTy
, GEP2Ops
, NumGEP2Ops
);
800 assert(Offset1
!= Offset2
&&
801 "There is at least one different constant here!");
803 // Make sure we compare the absolute difference.
804 if (Offset1
> Offset2
)
805 std::swap(Offset1
, Offset2
);
807 if ((uint64_t)(Offset2
-Offset1
) >= SizeMax
) {
808 //cerr << "Determined that these two GEP's don't alias ["
809 // << SizeMax << " bytes]: \n" << *GEP1 << *GEP2;
816 // Make sure that anything that uses AliasAnalysis pulls in this file...
817 DEFINING_FILE_FOR(BasicAliasAnalysis
)