1 //===- BasicAliasAnalysis.cpp - Local Alias Analysis Impl -----------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 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. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file defines the default implementation of the Alias Analysis interface 11 // that simply implements a few identities (two different globals cannot alias, 12 // etc), but otherwise does no analysis. 13 // 14 //===----------------------------------------------------------------------===// 15 16 #include "llvm/Analysis/AliasAnalysis.h" 17 #include "llvm/Constants.h" 18 #include "llvm/DerivedTypes.h" 19 #include "llvm/Function.h" 20 #include "llvm/GlobalVariable.h" 21 #include "llvm/Instructions.h" 22 #include "llvm/Pass.h" 23 #include "llvm/Target/TargetData.h" 24 #include "llvm/Support/GetElementPtrTypeIterator.h" 25 #include <algorithm> 26 using namespace llvm; 27 28 // Make sure that anything that uses AliasAnalysis pulls in this file... 29 void llvm::BasicAAStub() {} 30 31 namespace { 32 /// NoAA - This class implements the -no-aa pass, which always returns "I 33 /// don't know" for alias queries. NoAA is unlike other alias analysis 34 /// implementations, in that it does not chain to a previous analysis. As 35 /// such it doesn't follow many of the rules that other alias analyses must. 36 /// 37 struct NoAA : public ImmutablePass, public AliasAnalysis { 38 virtual void getAnalysisUsage(AnalysisUsage &AU) const { 39 AU.addRequired<TargetData>(); 40 } 41 42 virtual void initializePass() { 43 TD = &getAnalysis<TargetData>(); 44 } 45 46 virtual AliasResult alias(const Value *V1, unsigned V1Size, 47 const Value *V2, unsigned V2Size) { 48 return MayAlias; 49 } 50 51 virtual ModRefBehavior getModRefBehavior(Function *F, CallSite CS, 52 std::vector<PointerAccessInfo> *Info) { 53 return UnknownModRefBehavior; 54 } 55 56 virtual void getArgumentAccesses(Function *F, CallSite CS, 57 std::vector<PointerAccessInfo> &Info) { 58 assert(0 && "This method may not be called on this function!"); 59 } 60 61 virtual void getMustAliases(Value *P, std::vector<Value*> &RetVals) { } 62 virtual bool pointsToConstantMemory(const Value *P) { return false; } 63 virtual ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size) { 64 return ModRef; 65 } 66 virtual ModRefResult getModRefInfo(CallSite CS1, CallSite CS2) { 67 return ModRef; 68 } 69 virtual bool hasNoModRefInfoForCalls() const { return true; } 70 71 virtual void deleteValue(Value *V) {} 72 virtual void copyValue(Value *From, Value *To) {} 73 }; 74 75 // Register this pass... 76 RegisterOpt<NoAA> 77 U("no-aa", "No Alias Analysis (always returns 'may' alias)"); 78 79 // Declare that we implement the AliasAnalysis interface 80 RegisterAnalysisGroup<AliasAnalysis, NoAA> V; 81 } // End of anonymous namespace 82 83 84 namespace { 85 /// BasicAliasAnalysis - This is the default alias analysis implementation. 86 /// Because it doesn't chain to a previous alias analysis (like -no-aa), it 87 /// derives from the NoAA class. 88 struct BasicAliasAnalysis : public NoAA { 89 AliasResult alias(const Value *V1, unsigned V1Size, 90 const Value *V2, unsigned V2Size); 91 92 ModRefResult getModRefInfo(CallSite CS, Value *P, unsigned Size); 93 ModRefResult getModRefInfo(CallSite CS1, CallSite CS2) { 94 return NoAA::getModRefInfo(CS1,CS2); 95 } 96 97 /// hasNoModRefInfoForCalls - We can provide mod/ref information against 98 /// non-escaping allocations. 99 virtual bool hasNoModRefInfoForCalls() const { return false; } 100 101 /// pointsToConstantMemory - Chase pointers until we find a (constant 102 /// global) or not. 103 bool pointsToConstantMemory(const Value *P); 104 105 virtual ModRefBehavior getModRefBehavior(Function *F, CallSite CS, 106 std::vector<PointerAccessInfo> *Info); 107 108 private: 109 // CheckGEPInstructions - Check two GEP instructions with known 110 // must-aliasing base pointers. This checks to see if the index expressions 111 // preclude the pointers from aliasing... 112 AliasResult 113 CheckGEPInstructions(const Type* BasePtr1Ty, std::vector<Value*> &GEP1Ops, 114 unsigned G1Size, 115 const Type *BasePtr2Ty, std::vector<Value*> &GEP2Ops, 116 unsigned G2Size); 117 }; 118 119 // Register this pass... 120 RegisterOpt<BasicAliasAnalysis> 121 X("basicaa", "Basic Alias Analysis (default AA impl)"); 122 123 // Declare that we implement the AliasAnalysis interface 124 RegisterAnalysisGroup<AliasAnalysis, BasicAliasAnalysis, true> Y; 125 } // End of anonymous namespace 126 127 // hasUniqueAddress - Return true if the specified value points to something 128 // with a unique, discernable, address. 129 static inline bool hasUniqueAddress(const Value *V) { 130 return isa<GlobalValue>(V) || isa<AllocationInst>(V); 131 } 132 133 // getUnderlyingObject - This traverses the use chain to figure out what object 134 // the specified value points to. If the value points to, or is derived from, a 135 // unique object or an argument, return it. 136 static const Value *getUnderlyingObject(const Value *V) { 137 if (!isa<PointerType>(V->getType())) return 0; 138 139 // If we are at some type of object... return it. 140 if (hasUniqueAddress(V) || isa<Argument>(V)) return V; 141 142 // Traverse through different addressing mechanisms... 143 if (const Instruction *I = dyn_cast<Instruction>(V)) { 144 if (isa<CastInst>(I) || isa<GetElementPtrInst>(I)) 145 return getUnderlyingObject(I->getOperand(0)); 146 } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V)) { 147 if (CE->getOpcode() == Instruction::Cast || 148 CE->getOpcode() == Instruction::GetElementPtr) 149 return getUnderlyingObject(CE->getOperand(0)); 150 } else if (const GlobalValue *GV = dyn_cast<GlobalValue>(V)) { 151 return GV; 152 } 153 return 0; 154 } 155 156 static const User *isGEP(const Value *V) { 157 if (isa<GetElementPtrInst>(V) || 158 (isa<ConstantExpr>(V) && 159 cast<ConstantExpr>(V)->getOpcode() == Instruction::GetElementPtr)) 160 return cast<User>(V); 161 return 0; 162 } 163 164 static const Value *GetGEPOperands(const Value *V, std::vector<Value*> &GEPOps){ 165 assert(GEPOps.empty() && "Expect empty list to populate!"); 166 GEPOps.insert(GEPOps.end(), cast<User>(V)->op_begin()+1, 167 cast<User>(V)->op_end()); 168 169 // Accumulate all of the chained indexes into the operand array 170 V = cast<User>(V)->getOperand(0); 171 172 while (const User *G = isGEP(V)) { 173 if (!isa<Constant>(GEPOps[0]) || isa<GlobalValue>(GEPOps[0]) || 174 !cast<Constant>(GEPOps[0])->isNullValue()) 175 break; // Don't handle folding arbitrary pointer offsets yet... 176 GEPOps.erase(GEPOps.begin()); // Drop the zero index 177 GEPOps.insert(GEPOps.begin(), G->op_begin()+1, G->op_end()); 178 V = G->getOperand(0); 179 } 180 return V; 181 } 182 183 /// pointsToConstantMemory - Chase pointers until we find a (constant 184 /// global) or not. 185 bool BasicAliasAnalysis::pointsToConstantMemory(const Value *P) { 186 if (const Value *V = getUnderlyingObject(P)) 187 if (const GlobalVariable *GV = dyn_cast<GlobalVariable>(V)) 188 return GV->isConstant(); 189 return false; 190 } 191 192 static bool AddressMightEscape(const Value *V) { 193 for (Value::use_const_iterator UI = V->use_begin(), E = V->use_end(); 194 UI != E; ++UI) { 195 const Instruction *I = cast<Instruction>(*UI); 196 switch (I->getOpcode()) { 197 case Instruction::Load: break; 198 case Instruction::Store: 199 if (I->getOperand(0) == V) 200 return true; // Escapes if the pointer is stored. 201 break; 202 case Instruction::GetElementPtr: 203 if (AddressMightEscape(I)) return true; 204 break; 205 case Instruction::Cast: 206 if (!isa<PointerType>(I->getType())) 207 return true; 208 if (AddressMightEscape(I)) return true; 209 break; 210 case Instruction::Ret: 211 // If returned, the address will escape to calling functions, but no 212 // callees could modify it. 213 break; 214 default: 215 return true; 216 } 217 } 218 return false; 219 } 220 221 // getModRefInfo - Check to see if the specified callsite can clobber the 222 // specified memory object. Since we only look at local properties of this 223 // function, we really can't say much about this query. We do, however, use 224 // simple "address taken" analysis on local objects. 225 // 226 AliasAnalysis::ModRefResult 227 BasicAliasAnalysis::getModRefInfo(CallSite CS, Value *P, unsigned Size) { 228 if (!isa<Constant>(P)) 229 if (const AllocationInst *AI = 230 dyn_cast_or_null<AllocationInst>(getUnderlyingObject(P))) { 231 // Okay, the pointer is to a stack allocated object. If we can prove that 232 // the pointer never "escapes", then we know the call cannot clobber it, 233 // because it simply can't get its address. 234 if (!AddressMightEscape(AI)) 235 return NoModRef; 236 } 237 238 // The AliasAnalysis base class has some smarts, lets use them. 239 return AliasAnalysis::getModRefInfo(CS, P, Size); 240 } 241 242 // alias - Provide a bunch of ad-hoc rules to disambiguate in common cases, such 243 // as array references. Note that this function is heavily tail recursive. 244 // Hopefully we have a smart C++ compiler. :) 245 // 246 AliasAnalysis::AliasResult 247 BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size, 248 const Value *V2, unsigned V2Size) { 249 // Strip off any constant expression casts if they exist 250 if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V1)) 251 if (CE->getOpcode() == Instruction::Cast && 252 isa<PointerType>(CE->getOperand(0)->getType())) 253 V1 = CE->getOperand(0); 254 if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(V2)) 255 if (CE->getOpcode() == Instruction::Cast && 256 isa<PointerType>(CE->getOperand(0)->getType())) 257 V2 = CE->getOperand(0); 258 259 // Are we checking for alias of the same value? 260 if (V1 == V2) return MustAlias; 261 262 if ((!isa<PointerType>(V1->getType()) || !isa<PointerType>(V2->getType())) && 263 V1->getType() != Type::LongTy && V2->getType() != Type::LongTy) 264 return NoAlias; // Scalars cannot alias each other 265 266 // Strip off cast instructions... 267 if (const Instruction *I = dyn_cast<CastInst>(V1)) 268 if (isa<PointerType>(I->getOperand(0)->getType())) 269 return alias(I->getOperand(0), V1Size, V2, V2Size); 270 if (const Instruction *I = dyn_cast<CastInst>(V2)) 271 if (isa<PointerType>(I->getOperand(0)->getType())) 272 return alias(V1, V1Size, I->getOperand(0), V2Size); 273 274 // Figure out what objects these things are pointing to if we can... 275 const Value *O1 = getUnderlyingObject(V1); 276 const Value *O2 = getUnderlyingObject(V2); 277 278 // Pointing at a discernible object? 279 if (O1) { 280 if (O2) { 281 if (isa<Argument>(O1)) { 282 // Incoming argument cannot alias locally allocated object! 283 if (isa<AllocationInst>(O2)) return NoAlias; 284 // Otherwise, nothing is known... 285 } else if (isa<Argument>(O2)) { 286 // Incoming argument cannot alias locally allocated object! 287 if (isa<AllocationInst>(O1)) return NoAlias; 288 // Otherwise, nothing is known... 289 } else if (O1 != O2) { 290 // If they are two different objects, we know that we have no alias... 291 return NoAlias; 292 } 293 294 // If they are the same object, they we can look at the indexes. If they 295 // index off of the object is the same for both pointers, they must alias. 296 // If they are provably different, they must not alias. Otherwise, we 297 // can't tell anything. 298 } 299 300 301 if (!isa<Argument>(O1) && isa<ConstantPointerNull>(V2)) 302 return NoAlias; // Unique values don't alias null 303 304 if (isa<GlobalVariable>(O1) || isa<AllocationInst>(O1)) 305 if (cast<PointerType>(O1->getType())->getElementType()->isSized()) { 306 // If the size of the other access is larger than the total size of the 307 // global/alloca/malloc, it cannot be accessing the global (it's 308 // undefined to load or store bytes before or after an object). 309 const Type *ElTy = cast<PointerType>(O1->getType())->getElementType(); 310 unsigned GlobalSize = getTargetData().getTypeSize(ElTy); 311 if (GlobalSize < V2Size && V2Size != ~0U) 312 return NoAlias; 313 } 314 } 315 316 if (O2) { 317 if (!isa<Argument>(O2) && isa<ConstantPointerNull>(V1)) 318 return NoAlias; // Unique values don't alias null 319 320 if (isa<GlobalVariable>(O2) || isa<AllocationInst>(O2)) 321 if (cast<PointerType>(O2->getType())->getElementType()->isSized()) { 322 // If the size of the other access is larger than the total size of the 323 // global/alloca/malloc, it cannot be accessing the object (it's 324 // undefined to load or store bytes before or after an object). 325 const Type *ElTy = cast<PointerType>(O2->getType())->getElementType(); 326 unsigned GlobalSize = getTargetData().getTypeSize(ElTy); 327 if (GlobalSize < V1Size && V1Size != ~0U) 328 return NoAlias; 329 } 330 } 331 332 // If we have two gep instructions with must-alias'ing base pointers, figure 333 // out if the indexes to the GEP tell us anything about the derived pointer. 334 // Note that we also handle chains of getelementptr instructions as well as 335 // constant expression getelementptrs here. 336 // 337 if (isGEP(V1) && isGEP(V2)) { 338 // Drill down into the first non-gep value, to test for must-aliasing of 339 // the base pointers. 340 const Value *BasePtr1 = V1, *BasePtr2 = V2; 341 do { 342 BasePtr1 = cast<User>(BasePtr1)->getOperand(0); 343 } while (isGEP(BasePtr1) && 344 cast<User>(BasePtr1)->getOperand(1) == 345 Constant::getNullValue(cast<User>(BasePtr1)->getOperand(1)->getType())); 346 do { 347 BasePtr2 = cast<User>(BasePtr2)->getOperand(0); 348 } while (isGEP(BasePtr2) && 349 cast<User>(BasePtr2)->getOperand(1) == 350 Constant::getNullValue(cast<User>(BasePtr2)->getOperand(1)->getType())); 351 352 // Do the base pointers alias? 353 AliasResult BaseAlias = alias(BasePtr1, V1Size, BasePtr2, V2Size); 354 if (BaseAlias == NoAlias) return NoAlias; 355 if (BaseAlias == MustAlias) { 356 // If the base pointers alias each other exactly, check to see if we can 357 // figure out anything about the resultant pointers, to try to prove 358 // non-aliasing. 359 360 // Collect all of the chained GEP operands together into one simple place 361 std::vector<Value*> GEP1Ops, GEP2Ops; 362 BasePtr1 = GetGEPOperands(V1, GEP1Ops); 363 BasePtr2 = GetGEPOperands(V2, GEP2Ops); 364 365 // If GetGEPOperands were able to fold to the same must-aliased pointer, 366 // do the comparison. 367 if (BasePtr1 == BasePtr2) { 368 AliasResult GAlias = 369 CheckGEPInstructions(BasePtr1->getType(), GEP1Ops, V1Size, 370 BasePtr2->getType(), GEP2Ops, V2Size); 371 if (GAlias != MayAlias) 372 return GAlias; 373 } 374 } 375 } 376 377 // Check to see if these two pointers are related by a getelementptr 378 // instruction. If one pointer is a GEP with a non-zero index of the other 379 // pointer, we know they cannot alias. 380 // 381 if (isGEP(V2)) { 382 std::swap(V1, V2); 383 std::swap(V1Size, V2Size); 384 } 385 386 if (V1Size != ~0U && V2Size != ~0U) 387 if (const User *GEP = isGEP(V1)) { 388 std::vector<Value*> GEPOperands; 389 const Value *BasePtr = GetGEPOperands(V1, GEPOperands); 390 391 AliasResult R = alias(BasePtr, V1Size, V2, V2Size); 392 if (R == MustAlias) { 393 // If there is at least one non-zero constant index, we know they cannot 394 // alias. 395 bool ConstantFound = false; 396 bool AllZerosFound = true; 397 for (unsigned i = 0, e = GEPOperands.size(); i != e; ++i) 398 if (const Constant *C = dyn_cast<Constant>(GEPOperands[i])) { 399 if (!C->isNullValue()) { 400 ConstantFound = true; 401 AllZerosFound = false; 402 break; 403 } 404 } else { 405 AllZerosFound = false; 406 } 407 408 // If we have getelementptr <ptr>, 0, 0, 0, 0, ... and V2 must aliases 409 // the ptr, the end result is a must alias also. 410 if (AllZerosFound) 411 return MustAlias; 412 413 if (ConstantFound) { 414 if (V2Size <= 1 && V1Size <= 1) // Just pointer check? 415 return NoAlias; 416 417 // Otherwise we have to check to see that the distance is more than 418 // the size of the argument... build an index vector that is equal to 419 // the arguments provided, except substitute 0's for any variable 420 // indexes we find... 421 if (cast<PointerType>( 422 BasePtr->getType())->getElementType()->isSized()) { 423 for (unsigned i = 0; i != GEPOperands.size(); ++i) 424 if (!isa<ConstantInt>(GEPOperands[i])) 425 GEPOperands[i] = 426 Constant::getNullValue(GEPOperands[i]->getType()); 427 int64_t Offset = 428 getTargetData().getIndexedOffset(BasePtr->getType(), GEPOperands); 429 430 if (Offset >= (int64_t)V2Size || Offset <= -(int64_t)V1Size) 431 return NoAlias; 432 } 433 } 434 } 435 } 436 437 return MayAlias; 438 } 439 440 static bool ValuesEqual(Value *V1, Value *V2) { 441 if (V1->getType() == V2->getType()) 442 return V1 == V2; 443 if (Constant *C1 = dyn_cast<Constant>(V1)) 444 if (Constant *C2 = dyn_cast<Constant>(V2)) { 445 // Sign extend the constants to long types. 446 C1 = ConstantExpr::getSignExtend(C1, Type::LongTy); 447 C2 = ConstantExpr::getSignExtend(C2, Type::LongTy); 448 return C1 == C2; 449 } 450 return false; 451 } 452 453 /// CheckGEPInstructions - Check two GEP instructions with known must-aliasing 454 /// base pointers. This checks to see if the index expressions preclude the 455 /// pointers from aliasing... 456 AliasAnalysis::AliasResult BasicAliasAnalysis:: 457 CheckGEPInstructions(const Type* BasePtr1Ty, std::vector<Value*> &GEP1Ops, 458 unsigned G1S, 459 const Type *BasePtr2Ty, std::vector<Value*> &GEP2Ops, 460 unsigned G2S) { 461 // We currently can't handle the case when the base pointers have different 462 // primitive types. Since this is uncommon anyway, we are happy being 463 // extremely conservative. 464 if (BasePtr1Ty != BasePtr2Ty) 465 return MayAlias; 466 467 const PointerType *GEPPointerTy = cast<PointerType>(BasePtr1Ty); 468 469 // Find the (possibly empty) initial sequence of equal values... which are not 470 // necessarily constants. 471 unsigned NumGEP1Operands = GEP1Ops.size(), NumGEP2Operands = GEP2Ops.size(); 472 unsigned MinOperands = std::min(NumGEP1Operands, NumGEP2Operands); 473 unsigned MaxOperands = std::max(NumGEP1Operands, NumGEP2Operands); 474 unsigned UnequalOper = 0; 475 while (UnequalOper != MinOperands && 476 ValuesEqual(GEP1Ops[UnequalOper], GEP2Ops[UnequalOper])) { 477 // Advance through the type as we go... 478 ++UnequalOper; 479 if (const CompositeType *CT = dyn_cast<CompositeType>(BasePtr1Ty)) 480 BasePtr1Ty = CT->getTypeAtIndex(GEP1Ops[UnequalOper-1]); 481 else { 482 // If all operands equal each other, then the derived pointers must 483 // alias each other... 484 BasePtr1Ty = 0; 485 assert(UnequalOper == NumGEP1Operands && UnequalOper == NumGEP2Operands && 486 "Ran out of type nesting, but not out of operands?"); 487 return MustAlias; 488 } 489 } 490 491 // If we have seen all constant operands, and run out of indexes on one of the 492 // getelementptrs, check to see if the tail of the leftover one is all zeros. 493 // If so, return mustalias. 494 if (UnequalOper == MinOperands) { 495 if (GEP1Ops.size() < GEP2Ops.size()) std::swap(GEP1Ops, GEP2Ops); 496 497 bool AllAreZeros = true; 498 for (unsigned i = UnequalOper; i != MaxOperands; ++i) 499 if (!isa<Constant>(GEP1Ops[i]) || 500 !cast<Constant>(GEP1Ops[i])->isNullValue()) { 501 AllAreZeros = false; 502 break; 503 } 504 if (AllAreZeros) return MustAlias; 505 } 506 507 508 // So now we know that the indexes derived from the base pointers, 509 // which are known to alias, are different. We can still determine a 510 // no-alias result if there are differing constant pairs in the index 511 // chain. For example: 512 // A[i][0] != A[j][1] iff (&A[0][1]-&A[0][0] >= std::max(G1S, G2S)) 513 // 514 unsigned SizeMax = std::max(G1S, G2S); 515 if (SizeMax == ~0U) return MayAlias; // Avoid frivolous work. 516 517 // Scan for the first operand that is constant and unequal in the 518 // two getelementptrs... 519 unsigned FirstConstantOper = UnequalOper; 520 for (; FirstConstantOper != MinOperands; ++FirstConstantOper) { 521 const Value *G1Oper = GEP1Ops[FirstConstantOper]; 522 const Value *G2Oper = GEP2Ops[FirstConstantOper]; 523 524 if (G1Oper != G2Oper) // Found non-equal constant indexes... 525 if (Constant *G1OC = dyn_cast<ConstantInt>(const_cast<Value*>(G1Oper))) 526 if (Constant *G2OC = dyn_cast<ConstantInt>(const_cast<Value*>(G2Oper))){ 527 if (G1OC->getType() != G2OC->getType()) { 528 // Sign extend both operands to long. 529 G1OC = ConstantExpr::getSignExtend(G1OC, Type::LongTy); 530 G2OC = ConstantExpr::getSignExtend(G2OC, Type::LongTy); 531 GEP1Ops[FirstConstantOper] = G1OC; 532 GEP2Ops[FirstConstantOper] = G2OC; 533 } 534 535 if (G1OC != G2OC) { 536 // Make sure they are comparable (ie, not constant expressions), and 537 // make sure the GEP with the smaller leading constant is GEP1. 538 Constant *Compare = ConstantExpr::getSetGT(G1OC, G2OC); 539 if (ConstantBool *CV = dyn_cast<ConstantBool>(Compare)) { 540 if (CV->getValue()) // If they are comparable and G2 > G1 541 std::swap(GEP1Ops, GEP2Ops); // Make GEP1 < GEP2 542 break; 543 } 544 } 545 } 546 BasePtr1Ty = cast<CompositeType>(BasePtr1Ty)->getTypeAtIndex(G1Oper); 547 } 548 549 // No shared constant operands, and we ran out of common operands. At this 550 // point, the GEP instructions have run through all of their operands, and we 551 // haven't found evidence that there are any deltas between the GEP's. 552 // However, one GEP may have more operands than the other. If this is the 553 // case, there may still be hope. Check this now. 554 if (FirstConstantOper == MinOperands) { 555 // Make GEP1Ops be the longer one if there is a longer one. 556 if (GEP1Ops.size() < GEP2Ops.size()) 557 std::swap(GEP1Ops, GEP2Ops); 558 559 // Is there anything to check? 560 if (GEP1Ops.size() > MinOperands) { 561 for (unsigned i = FirstConstantOper; i != MaxOperands; ++i) 562 if (isa<ConstantInt>(GEP1Ops[i]) && 563 !cast<Constant>(GEP1Ops[i])->isNullValue()) { 564 // Yup, there's a constant in the tail. Set all variables to 565 // constants in the GEP instruction to make it suiteable for 566 // TargetData::getIndexedOffset. 567 for (i = 0; i != MaxOperands; ++i) 568 if (!isa<ConstantInt>(GEP1Ops[i])) 569 GEP1Ops[i] = Constant::getNullValue(GEP1Ops[i]->getType()); 570 // Okay, now get the offset. This is the relative offset for the full 571 // instruction. 572 const TargetData &TD = getTargetData(); 573 int64_t Offset1 = TD.getIndexedOffset(GEPPointerTy, GEP1Ops); 574 575 // Now crop off any constants from the end... 576 GEP1Ops.resize(MinOperands); 577 int64_t Offset2 = TD.getIndexedOffset(GEPPointerTy, GEP1Ops); 578 579 // If the tail provided a bit enough offset, return noalias! 580 if ((uint64_t)(Offset2-Offset1) >= SizeMax) 581 return NoAlias; 582 } 583 } 584 585 // Couldn't find anything useful. 586 return MayAlias; 587 } 588 589 // If there are non-equal constants arguments, then we can figure 590 // out a minimum known delta between the two index expressions... at 591 // this point we know that the first constant index of GEP1 is less 592 // than the first constant index of GEP2. 593 594 // Advance BasePtr[12]Ty over this first differing constant operand. 595 BasePtr2Ty = cast<CompositeType>(BasePtr1Ty)->getTypeAtIndex(GEP2Ops[FirstConstantOper]); 596 BasePtr1Ty = cast<CompositeType>(BasePtr1Ty)->getTypeAtIndex(GEP1Ops[FirstConstantOper]); 597 598 // We are going to be using TargetData::getIndexedOffset to determine the 599 // offset that each of the GEP's is reaching. To do this, we have to convert 600 // all variable references to constant references. To do this, we convert the 601 // initial equal sequence of variables into constant zeros to start with. 602 for (unsigned i = 0; i != FirstConstantOper; ++i) 603 if (!isa<ConstantInt>(GEP1Ops[i]) || !isa<ConstantInt>(GEP2Ops[i])) 604 GEP1Ops[i] = GEP2Ops[i] = Constant::getNullValue(Type::UIntTy); 605 606 // We know that GEP1Ops[FirstConstantOper] & GEP2Ops[FirstConstantOper] are ok 607 608 // Loop over the rest of the operands... 609 for (unsigned i = FirstConstantOper+1; i != MaxOperands; ++i) { 610 const Value *Op1 = i < GEP1Ops.size() ? GEP1Ops[i] : 0; 611 const Value *Op2 = i < GEP2Ops.size() ? GEP2Ops[i] : 0; 612 // If they are equal, use a zero index... 613 if (Op1 == Op2 && BasePtr1Ty == BasePtr2Ty) { 614 if (!isa<ConstantInt>(Op1)) 615 GEP1Ops[i] = GEP2Ops[i] = Constant::getNullValue(Op1->getType()); 616 // Otherwise, just keep the constants we have. 617 } else { 618 if (Op1) { 619 if (const ConstantInt *Op1C = dyn_cast<ConstantInt>(Op1)) { 620 // If this is an array index, make sure the array element is in range. 621 if (const ArrayType *AT = dyn_cast<ArrayType>(BasePtr1Ty)) 622 if (Op1C->getRawValue() >= AT->getNumElements()) 623 return MayAlias; // Be conservative with out-of-range accesses 624 625 } else { 626 // GEP1 is known to produce a value less than GEP2. To be 627 // conservatively correct, we must assume the largest possible 628 // constant is used in this position. This cannot be the initial 629 // index to the GEP instructions (because we know we have at least one 630 // element before this one with the different constant arguments), so 631 // we know that the current index must be into either a struct or 632 // array. Because we know it's not constant, this cannot be a 633 // structure index. Because of this, we can calculate the maximum 634 // value possible. 635 // 636 if (const ArrayType *AT = dyn_cast<ArrayType>(BasePtr1Ty)) 637 GEP1Ops[i] = ConstantSInt::get(Type::LongTy,AT->getNumElements()-1); 638 } 639 } 640 641 if (Op2) { 642 if (const ConstantInt *Op2C = dyn_cast<ConstantInt>(Op2)) { 643 // If this is an array index, make sure the array element is in range. 644 if (const ArrayType *AT = dyn_cast<ArrayType>(BasePtr1Ty)) 645 if (Op2C->getRawValue() >= AT->getNumElements()) 646 return MayAlias; // Be conservative with out-of-range accesses 647 } else { // Conservatively assume the minimum value for this index 648 GEP2Ops[i] = Constant::getNullValue(Op2->getType()); 649 } 650 } 651 } 652 653 if (BasePtr1Ty && Op1) { 654 if (const CompositeType *CT = dyn_cast<CompositeType>(BasePtr1Ty)) 655 BasePtr1Ty = CT->getTypeAtIndex(GEP1Ops[i]); 656 else 657 BasePtr1Ty = 0; 658 } 659 660 if (BasePtr2Ty && Op2) { 661 if (const CompositeType *CT = dyn_cast<CompositeType>(BasePtr2Ty)) 662 BasePtr2Ty = CT->getTypeAtIndex(GEP2Ops[i]); 663 else 664 BasePtr2Ty = 0; 665 } 666 } 667 668 if (GEPPointerTy->getElementType()->isSized()) { 669 int64_t Offset1 = getTargetData().getIndexedOffset(GEPPointerTy, GEP1Ops); 670 int64_t Offset2 = getTargetData().getIndexedOffset(GEPPointerTy, GEP2Ops); 671 assert(Offset1<Offset2 && "There is at least one different constant here!"); 672 673 if ((uint64_t)(Offset2-Offset1) >= SizeMax) { 674 //std::cerr << "Determined that these two GEP's don't alias [" 675 // << SizeMax << " bytes]: \n" << *GEP1 << *GEP2; 676 return NoAlias; 677 } 678 } 679 return MayAlias; 680 } 681 682 namespace { 683 struct StringCompare { 684 bool operator()(const char *LHS, const char *RHS) { 685 return strcmp(LHS, RHS) < 0; 686 } 687 }; 688 } 689 690 // Note that this list cannot contain libm functions (such as acos and sqrt) 691 // that set errno on a domain or other error. 692 static const char *DoesntAccessMemoryTable[] = { 693 // LLVM intrinsics: 694 "llvm.frameaddress", "llvm.returnaddress", "llvm.readport", 695 "llvm.isunordered", 696 697 "abs", "labs", "llabs", "imaxabs", "fabs", "fabsf", "fabsl", 698 "trunc", "truncf", "truncl", "ldexp", 699 700 "atan", "atanf", "atanl", "atan2", "atan2f", "atan2l", 701 "cbrt", 702 "cos", "cosf", "cosl", "cosh", "coshf", "coshl", 703 "exp", "expf", "expl", 704 "hypot", 705 "sin", "sinf", "sinl", "sinh", "sinhf", "sinhl", 706 "tan", "tanf", "tanl", "tanh", "tanhf", "tanhl", 707 708 // ctype.h 709 "isalnum", "isalpha", "iscntrl", "isdigit", "isgraph", "islower", "isprint" 710 "ispunct", "isspace", "isupper", "isxdigit", "tolower", "toupper", 711 712 // wctype.h" 713 "iswalnum", "iswalpha", "iswcntrl", "iswdigit", "iswgraph", "iswlower", 714 "iswprint", "iswpunct", "iswspace", "iswupper", "iswxdigit", 715 716 "iswctype", "towctrans", "towlower", "towupper", 717 718 "btowc", "wctob", 719 720 "isinf", "isnan", "finite", 721 722 // C99 math functions 723 "copysign", "copysignf", "copysignd", 724 "nexttoward", "nexttowardf", "nexttowardd", 725 "nextafter", "nextafterf", "nextafterd", 726 727 // glibc functions: 728 "__fpclassify", "__fpclassifyf", "__fpclassifyl", 729 "__signbit", "__signbitf", "__signbitl", 730 }; 731 732 static const unsigned DAMTableSize = 733 sizeof(DoesntAccessMemoryTable)/sizeof(DoesntAccessMemoryTable[0]); 734 735 static const char *OnlyReadsMemoryTable[] = { 736 "atoi", "atol", "atof", "atoll", "atoq", "a64l", 737 "bcmp", "memcmp", "memchr", "memrchr", "wmemcmp", "wmemchr", 738 739 // Strings 740 "strcmp", "strcasecmp", "strcoll", "strncmp", "strncasecmp", 741 "strchr", "strcspn", "strlen", "strpbrk", "strrchr", "strspn", "strstr", 742 "index", "rindex", 743 744 // Wide char strings 745 "wcschr", "wcscmp", "wcscoll", "wcscspn", "wcslen", "wcsncmp", "wcspbrk", 746 "wcsrchr", "wcsspn", "wcsstr", 747 748 // glibc 749 "alphasort", "alphasort64", "versionsort", "versionsort64", 750 751 // C99 752 "nan", "nanf", "nand", 753 754 // File I/O 755 "feof", "ferror", "fileno", 756 "feof_unlocked", "ferror_unlocked", "fileno_unlocked" 757 }; 758 759 static const unsigned ORMTableSize = 760 sizeof(OnlyReadsMemoryTable)/sizeof(OnlyReadsMemoryTable[0]); 761 762 AliasAnalysis::ModRefBehavior 763 BasicAliasAnalysis::getModRefBehavior(Function *F, CallSite CS, 764 std::vector<PointerAccessInfo> *Info) { 765 if (!F->isExternal()) return UnknownModRefBehavior; 766 767 static bool Initialized = false; 768 if (!Initialized) { 769 // Sort the table the first time through. 770 std::sort(DoesntAccessMemoryTable, DoesntAccessMemoryTable+DAMTableSize, 771 StringCompare()); 772 std::sort(OnlyReadsMemoryTable, OnlyReadsMemoryTable+ORMTableSize, 773 StringCompare()); 774 Initialized = true; 775 } 776 777 const char **Ptr = std::lower_bound(DoesntAccessMemoryTable, 778 DoesntAccessMemoryTable+DAMTableSize, 779 F->getName().c_str(), StringCompare()); 780 if (Ptr != DoesntAccessMemoryTable+DAMTableSize && *Ptr == F->getName()) 781 return DoesNotAccessMemory; 782 783 Ptr = std::lower_bound(OnlyReadsMemoryTable, 784 OnlyReadsMemoryTable+ORMTableSize, 785 F->getName().c_str(), StringCompare()); 786 if (Ptr != OnlyReadsMemoryTable+ORMTableSize && *Ptr == F->getName()) 787 return OnlyReadsMemory; 788 789 return UnknownModRefBehavior; 790 } 791