1 //===- AliasAnalysis.cpp - Generic Alias Analysis Interface Implementation -==// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file implements the generic AliasAnalysis interface which is used as the 11 // common interface used by all clients and implementations of alias analysis. 12 // 13 // This file also implements the default version of the AliasAnalysis interface 14 // that is to be used when no other implementation is specified. This does some 15 // simple tests that detect obvious cases: two different global pointers cannot 16 // alias, a global cannot alias a malloc, two different mallocs cannot alias, 17 // etc. 18 // 19 // This alias analysis implementation really isn't very good for anything, but 20 // it is very fast, and makes a nice clean default implementation. Because it 21 // handles lots of little corner cases, other, more complex, alias analysis 22 // implementations may choose to rely on this pass to resolve these simple and 23 // easy cases. 24 // 25 //===----------------------------------------------------------------------===// 26 27 #include "llvm/Analysis/AliasAnalysis.h" 28 #include "llvm/Analysis/CaptureTracking.h" 29 #include "llvm/Analysis/Dominators.h" 30 #include "llvm/Analysis/ValueTracking.h" 31 #include "llvm/Pass.h" 32 #include "llvm/BasicBlock.h" 33 #include "llvm/Function.h" 34 #include "llvm/IntrinsicInst.h" 35 #include "llvm/Instructions.h" 36 #include "llvm/LLVMContext.h" 37 #include "llvm/Type.h" 38 #include "llvm/Target/TargetData.h" 39 using namespace llvm; 40 41 // Register the AliasAnalysis interface, providing a nice name to refer to. 42 INITIALIZE_ANALYSIS_GROUP(AliasAnalysis, "Alias Analysis", NoAA) 43 char AliasAnalysis::ID = 0; 44 45 //===----------------------------------------------------------------------===// 46 // Default chaining methods 47 //===----------------------------------------------------------------------===// 48 49 AliasAnalysis::AliasResult 50 AliasAnalysis::alias(const Location &LocA, const Location &LocB) { 51 assert(AA && "AA didn't call InitializeAliasAnalysis in its run method!"); 52 return AA->alias(LocA, LocB); 53 } 54 55 bool AliasAnalysis::pointsToConstantMemory(const Location &Loc, 56 bool OrLocal) { 57 assert(AA && "AA didn't call InitializeAliasAnalysis in its run method!"); 58 return AA->pointsToConstantMemory(Loc, OrLocal); 59 } 60 61 void AliasAnalysis::deleteValue(Value *V) { 62 assert(AA && "AA didn't call InitializeAliasAnalysis in its run method!"); 63 AA->deleteValue(V); 64 } 65 66 void AliasAnalysis::copyValue(Value *From, Value *To) { 67 assert(AA && "AA didn't call InitializeAliasAnalysis in its run method!"); 68 AA->copyValue(From, To); 69 } 70 71 void AliasAnalysis::addEscapingUse(Use &U) { 72 assert(AA && "AA didn't call InitializeAliasAnalysis in its run method!"); 73 AA->addEscapingUse(U); 74 } 75 76 77 AliasAnalysis::ModRefResult 78 AliasAnalysis::getModRefInfo(ImmutableCallSite CS, 79 const Location &Loc) { 80 assert(AA && "AA didn't call InitializeAliasAnalysis in its run method!"); 81 82 ModRefBehavior MRB = getModRefBehavior(CS); 83 if (MRB == DoesNotAccessMemory) 84 return NoModRef; 85 86 ModRefResult Mask = ModRef; 87 if (onlyReadsMemory(MRB)) 88 Mask = Ref; 89 90 if (onlyAccessesArgPointees(MRB)) { 91 bool doesAlias = false; 92 if (doesAccessArgPointees(MRB)) { 93 MDNode *CSTag = CS.getInstruction()->getMetadata(LLVMContext::MD_tbaa); 94 for (ImmutableCallSite::arg_iterator AI = CS.arg_begin(), AE = CS.arg_end(); 95 AI != AE; ++AI) { 96 const Value *Arg = *AI; 97 if (!Arg->getType()->isPointerTy()) 98 continue; 99 Location CSLoc(Arg, UnknownSize, CSTag); 100 if (!isNoAlias(CSLoc, Loc)) { 101 doesAlias = true; 102 break; 103 } 104 } 105 } 106 if (!doesAlias) 107 return NoModRef; 108 } 109 110 // If Loc is a constant memory location, the call definitely could not 111 // modify the memory location. 112 if ((Mask & Mod) && pointsToConstantMemory(Loc)) 113 Mask = ModRefResult(Mask & ~Mod); 114 115 // If this is the end of the chain, don't forward. 116 if (!AA) return Mask; 117 118 // Otherwise, fall back to the next AA in the chain. But we can merge 119 // in any mask we've managed to compute. 120 return ModRefResult(AA->getModRefInfo(CS, Loc) & Mask); 121 } 122 123 AliasAnalysis::ModRefResult 124 AliasAnalysis::getModRefInfo(ImmutableCallSite CS1, ImmutableCallSite CS2) { 125 assert(AA && "AA didn't call InitializeAliasAnalysis in its run method!"); 126 127 // If CS1 or CS2 are readnone, they don't interact. 128 ModRefBehavior CS1B = getModRefBehavior(CS1); 129 if (CS1B == DoesNotAccessMemory) return NoModRef; 130 131 ModRefBehavior CS2B = getModRefBehavior(CS2); 132 if (CS2B == DoesNotAccessMemory) return NoModRef; 133 134 // If they both only read from memory, there is no dependence. 135 if (onlyReadsMemory(CS1B) && onlyReadsMemory(CS2B)) 136 return NoModRef; 137 138 AliasAnalysis::ModRefResult Mask = ModRef; 139 140 // If CS1 only reads memory, the only dependence on CS2 can be 141 // from CS1 reading memory written by CS2. 142 if (onlyReadsMemory(CS1B)) 143 Mask = ModRefResult(Mask & Ref); 144 145 // If CS2 only access memory through arguments, accumulate the mod/ref 146 // information from CS1's references to the memory referenced by 147 // CS2's arguments. 148 if (onlyAccessesArgPointees(CS2B)) { 149 AliasAnalysis::ModRefResult R = NoModRef; 150 if (doesAccessArgPointees(CS2B)) { 151 MDNode *CS2Tag = CS2.getInstruction()->getMetadata(LLVMContext::MD_tbaa); 152 for (ImmutableCallSite::arg_iterator 153 I = CS2.arg_begin(), E = CS2.arg_end(); I != E; ++I) { 154 const Value *Arg = *I; 155 if (!Arg->getType()->isPointerTy()) 156 continue; 157 Location CS2Loc(Arg, UnknownSize, CS2Tag); 158 R = ModRefResult((R | getModRefInfo(CS1, CS2Loc)) & Mask); 159 if (R == Mask) 160 break; 161 } 162 } 163 return R; 164 } 165 166 // If CS1 only accesses memory through arguments, check if CS2 references 167 // any of the memory referenced by CS1's arguments. If not, return NoModRef. 168 if (onlyAccessesArgPointees(CS1B)) { 169 AliasAnalysis::ModRefResult R = NoModRef; 170 if (doesAccessArgPointees(CS1B)) { 171 MDNode *CS1Tag = CS1.getInstruction()->getMetadata(LLVMContext::MD_tbaa); 172 for (ImmutableCallSite::arg_iterator 173 I = CS1.arg_begin(), E = CS1.arg_end(); I != E; ++I) { 174 const Value *Arg = *I; 175 if (!Arg->getType()->isPointerTy()) 176 continue; 177 Location CS1Loc(Arg, UnknownSize, CS1Tag); 178 if (getModRefInfo(CS2, CS1Loc) != NoModRef) { 179 R = Mask; 180 break; 181 } 182 } 183 } 184 if (R == NoModRef) 185 return R; 186 } 187 188 // If this is the end of the chain, don't forward. 189 if (!AA) return Mask; 190 191 // Otherwise, fall back to the next AA in the chain. But we can merge 192 // in any mask we've managed to compute. 193 return ModRefResult(AA->getModRefInfo(CS1, CS2) & Mask); 194 } 195 196 AliasAnalysis::ModRefBehavior 197 AliasAnalysis::getModRefBehavior(ImmutableCallSite CS) { 198 assert(AA && "AA didn't call InitializeAliasAnalysis in its run method!"); 199 200 ModRefBehavior Min = UnknownModRefBehavior; 201 202 // Call back into the alias analysis with the other form of getModRefBehavior 203 // to see if it can give a better response. 204 if (const Function *F = CS.getCalledFunction()) 205 Min = getModRefBehavior(F); 206 207 // If this is the end of the chain, don't forward. 208 if (!AA) return Min; 209 210 // Otherwise, fall back to the next AA in the chain. But we can merge 211 // in any result we've managed to compute. 212 return ModRefBehavior(AA->getModRefBehavior(CS) & Min); 213 } 214 215 AliasAnalysis::ModRefBehavior 216 AliasAnalysis::getModRefBehavior(const Function *F) { 217 assert(AA && "AA didn't call InitializeAliasAnalysis in its run method!"); 218 return AA->getModRefBehavior(F); 219 } 220 221 //===----------------------------------------------------------------------===// 222 // AliasAnalysis non-virtual helper method implementation 223 //===----------------------------------------------------------------------===// 224 225 AliasAnalysis::Location AliasAnalysis::getLocation(const LoadInst *LI) { 226 return Location(LI->getPointerOperand(), 227 getTypeStoreSize(LI->getType()), 228 LI->getMetadata(LLVMContext::MD_tbaa)); 229 } 230 231 AliasAnalysis::Location AliasAnalysis::getLocation(const StoreInst *SI) { 232 return Location(SI->getPointerOperand(), 233 getTypeStoreSize(SI->getValueOperand()->getType()), 234 SI->getMetadata(LLVMContext::MD_tbaa)); 235 } 236 237 AliasAnalysis::Location AliasAnalysis::getLocation(const VAArgInst *VI) { 238 return Location(VI->getPointerOperand(), 239 UnknownSize, 240 VI->getMetadata(LLVMContext::MD_tbaa)); 241 } 242 243 AliasAnalysis::Location 244 AliasAnalysis::getLocation(const AtomicCmpXchgInst *CXI) { 245 return Location(CXI->getPointerOperand(), 246 getTypeStoreSize(CXI->getCompareOperand()->getType()), 247 CXI->getMetadata(LLVMContext::MD_tbaa)); 248 } 249 250 AliasAnalysis::Location 251 AliasAnalysis::getLocation(const AtomicRMWInst *RMWI) { 252 return Location(RMWI->getPointerOperand(), 253 getTypeStoreSize(RMWI->getValOperand()->getType()), 254 RMWI->getMetadata(LLVMContext::MD_tbaa)); 255 } 256 257 AliasAnalysis::Location 258 AliasAnalysis::getLocationForSource(const MemTransferInst *MTI) { 259 uint64_t Size = UnknownSize; 260 if (ConstantInt *C = dyn_cast<ConstantInt>(MTI->getLength())) 261 Size = C->getValue().getZExtValue(); 262 263 // memcpy/memmove can have TBAA tags. For memcpy, they apply 264 // to both the source and the destination. 265 MDNode *TBAATag = MTI->getMetadata(LLVMContext::MD_tbaa); 266 267 return Location(MTI->getRawSource(), Size, TBAATag); 268 } 269 270 AliasAnalysis::Location 271 AliasAnalysis::getLocationForDest(const MemIntrinsic *MTI) { 272 uint64_t Size = UnknownSize; 273 if (ConstantInt *C = dyn_cast<ConstantInt>(MTI->getLength())) 274 Size = C->getValue().getZExtValue(); 275 276 // memcpy/memmove can have TBAA tags. For memcpy, they apply 277 // to both the source and the destination. 278 MDNode *TBAATag = MTI->getMetadata(LLVMContext::MD_tbaa); 279 280 return Location(MTI->getRawDest(), Size, TBAATag); 281 } 282 283 284 285 AliasAnalysis::ModRefResult 286 AliasAnalysis::getModRefInfo(const LoadInst *L, const Location &Loc) { 287 // Be conservative in the face of volatile/atomic. 288 if (!L->isUnordered()) 289 return ModRef; 290 291 // If the load address doesn't alias the given address, it doesn't read 292 // or write the specified memory. 293 if (!alias(getLocation(L), Loc)) 294 return NoModRef; 295 296 // Otherwise, a load just reads. 297 return Ref; 298 } 299 300 AliasAnalysis::ModRefResult 301 AliasAnalysis::getModRefInfo(const StoreInst *S, const Location &Loc) { 302 // Be conservative in the face of volatile/atomic. 303 if (!S->isUnordered()) 304 return ModRef; 305 306 // If the store address cannot alias the pointer in question, then the 307 // specified memory cannot be modified by the store. 308 if (!alias(getLocation(S), Loc)) 309 return NoModRef; 310 311 // If the pointer is a pointer to constant memory, then it could not have been 312 // modified by this store. 313 if (pointsToConstantMemory(Loc)) 314 return NoModRef; 315 316 // Otherwise, a store just writes. 317 return Mod; 318 } 319 320 AliasAnalysis::ModRefResult 321 AliasAnalysis::getModRefInfo(const VAArgInst *V, const Location &Loc) { 322 // If the va_arg address cannot alias the pointer in question, then the 323 // specified memory cannot be accessed by the va_arg. 324 if (!alias(getLocation(V), Loc)) 325 return NoModRef; 326 327 // If the pointer is a pointer to constant memory, then it could not have been 328 // modified by this va_arg. 329 if (pointsToConstantMemory(Loc)) 330 return NoModRef; 331 332 // Otherwise, a va_arg reads and writes. 333 return ModRef; 334 } 335 336 AliasAnalysis::ModRefResult 337 AliasAnalysis::getModRefInfo(const AtomicCmpXchgInst *CX, const Location &Loc) { 338 // Acquire/Release cmpxchg has properties that matter for arbitrary addresses. 339 if (CX->getOrdering() > Monotonic) 340 return ModRef; 341 342 // If the cmpxchg address does not alias the location, it does not access it. 343 if (!alias(getLocation(CX), Loc)) 344 return NoModRef; 345 346 return ModRef; 347 } 348 349 AliasAnalysis::ModRefResult 350 AliasAnalysis::getModRefInfo(const AtomicRMWInst *RMW, const Location &Loc) { 351 // Acquire/Release atomicrmw has properties that matter for arbitrary addresses. 352 if (RMW->getOrdering() > Monotonic) 353 return ModRef; 354 355 // If the atomicrmw address does not alias the location, it does not access it. 356 if (!alias(getLocation(RMW), Loc)) 357 return NoModRef; 358 359 return ModRef; 360 } 361 362 namespace { 363 /// Only find pointer captures which happen before the given instruction. Uses 364 /// the dominator tree to determine whether one instruction is before another. 365 struct CapturesBefore : public CaptureTracker { 366 CapturesBefore(const Instruction *I, DominatorTree *DT) 367 : BeforeHere(I), DT(DT), Captured(false) {} 368 369 void tooManyUses() { Captured = true; } 370 371 bool shouldExplore(Use *U) { 372 Instruction *I = cast<Instruction>(U->getUser()); 373 BasicBlock *BB = I->getParent(); 374 if (BeforeHere != I && 375 (!DT->isReachableFromEntry(BB) || DT->dominates(BeforeHere, I))) 376 return false; 377 return true; 378 } 379 380 bool captured(Use *U) { 381 Instruction *I = cast<Instruction>(U->getUser()); 382 BasicBlock *BB = I->getParent(); 383 if (BeforeHere != I && 384 (!DT->isReachableFromEntry(BB) || DT->dominates(BeforeHere, I))) 385 return false; 386 Captured = true; 387 return true; 388 } 389 390 const Instruction *BeforeHere; 391 DominatorTree *DT; 392 393 bool Captured; 394 }; 395 } 396 397 // FIXME: this is really just shoring-up a deficiency in alias analysis. 398 // BasicAA isn't willing to spend linear time determining whether an alloca 399 // was captured before or after this particular call, while we are. However, 400 // with a smarter AA in place, this test is just wasting compile time. 401 AliasAnalysis::ModRefResult 402 AliasAnalysis::callCapturesBefore(const Instruction *I, 403 const AliasAnalysis::Location &MemLoc, 404 DominatorTree *DT) { 405 if (!DT || !TD) return AliasAnalysis::ModRef; 406 407 const Value *Object = GetUnderlyingObject(MemLoc.Ptr, TD); 408 if (!isIdentifiedObject(Object) || isa<GlobalValue>(Object) || 409 isa<Constant>(Object)) 410 return AliasAnalysis::ModRef; 411 412 ImmutableCallSite CS(I); 413 if (!CS.getInstruction() || CS.getInstruction() == Object) 414 return AliasAnalysis::ModRef; 415 416 CapturesBefore CB(I, DT); 417 llvm::PointerMayBeCaptured(Object, &CB); 418 if (CB.Captured) 419 return AliasAnalysis::ModRef; 420 421 unsigned ArgNo = 0; 422 for (ImmutableCallSite::arg_iterator CI = CS.arg_begin(), CE = CS.arg_end(); 423 CI != CE; ++CI, ++ArgNo) { 424 // Only look at the no-capture or byval pointer arguments. If this 425 // pointer were passed to arguments that were neither of these, then it 426 // couldn't be no-capture. 427 if (!(*CI)->getType()->isPointerTy() || 428 (!CS.doesNotCapture(ArgNo) && !CS.isByValArgument(ArgNo))) 429 continue; 430 431 // If this is a no-capture pointer argument, see if we can tell that it 432 // is impossible to alias the pointer we're checking. If not, we have to 433 // assume that the call could touch the pointer, even though it doesn't 434 // escape. 435 if (!isNoAlias(AliasAnalysis::Location(*CI), 436 AliasAnalysis::Location(Object))) { 437 return AliasAnalysis::ModRef; 438 } 439 } 440 return AliasAnalysis::NoModRef; 441 } 442 443 // AliasAnalysis destructor: DO NOT move this to the header file for 444 // AliasAnalysis or else clients of the AliasAnalysis class may not depend on 445 // the AliasAnalysis.o file in the current .a file, causing alias analysis 446 // support to not be included in the tool correctly! 447 // 448 AliasAnalysis::~AliasAnalysis() {} 449 450 /// InitializeAliasAnalysis - Subclasses must call this method to initialize the 451 /// AliasAnalysis interface before any other methods are called. 452 /// 453 void AliasAnalysis::InitializeAliasAnalysis(Pass *P) { 454 TD = P->getAnalysisIfAvailable<TargetData>(); 455 AA = &P->getAnalysis<AliasAnalysis>(); 456 } 457 458 // getAnalysisUsage - All alias analysis implementations should invoke this 459 // directly (using AliasAnalysis::getAnalysisUsage(AU)). 460 void AliasAnalysis::getAnalysisUsage(AnalysisUsage &AU) const { 461 AU.addRequired<AliasAnalysis>(); // All AA's chain 462 } 463 464 /// getTypeStoreSize - Return the TargetData store size for the given type, 465 /// if known, or a conservative value otherwise. 466 /// 467 uint64_t AliasAnalysis::getTypeStoreSize(Type *Ty) { 468 return TD ? TD->getTypeStoreSize(Ty) : UnknownSize; 469 } 470 471 /// canBasicBlockModify - Return true if it is possible for execution of the 472 /// specified basic block to modify the value pointed to by Ptr. 473 /// 474 bool AliasAnalysis::canBasicBlockModify(const BasicBlock &BB, 475 const Location &Loc) { 476 return canInstructionRangeModify(BB.front(), BB.back(), Loc); 477 } 478 479 /// canInstructionRangeModify - Return true if it is possible for the execution 480 /// of the specified instructions to modify the value pointed to by Ptr. The 481 /// instructions to consider are all of the instructions in the range of [I1,I2] 482 /// INCLUSIVE. I1 and I2 must be in the same basic block. 483 /// 484 bool AliasAnalysis::canInstructionRangeModify(const Instruction &I1, 485 const Instruction &I2, 486 const Location &Loc) { 487 assert(I1.getParent() == I2.getParent() && 488 "Instructions not in same basic block!"); 489 BasicBlock::const_iterator I = &I1; 490 BasicBlock::const_iterator E = &I2; 491 ++E; // Convert from inclusive to exclusive range. 492 493 for (; I != E; ++I) // Check every instruction in range 494 if (getModRefInfo(I, Loc) & Mod) 495 return true; 496 return false; 497 } 498 499 /// isNoAliasCall - Return true if this pointer is returned by a noalias 500 /// function. 501 bool llvm::isNoAliasCall(const Value *V) { 502 if (isa<CallInst>(V) || isa<InvokeInst>(V)) 503 return ImmutableCallSite(cast<Instruction>(V)) 504 .paramHasAttr(0, Attribute::NoAlias); 505 return false; 506 } 507 508 /// isIdentifiedObject - Return true if this pointer refers to a distinct and 509 /// identifiable object. This returns true for: 510 /// Global Variables and Functions (but not Global Aliases) 511 /// Allocas and Mallocs 512 /// ByVal and NoAlias Arguments 513 /// NoAlias returns 514 /// 515 bool llvm::isIdentifiedObject(const Value *V) { 516 if (isa<AllocaInst>(V)) 517 return true; 518 if (isa<GlobalValue>(V) && !isa<GlobalAlias>(V)) 519 return true; 520 if (isNoAliasCall(V)) 521 return true; 522 if (const Argument *A = dyn_cast<Argument>(V)) 523 return A->hasNoAliasAttr() || A->hasByValAttr(); 524 return false; 525 } 526 527 /// isKnownNonNull - Return true if we know that the specified value is never 528 /// null. 529 bool llvm::isKnownNonNull(const Value *V) { 530 // Alloca never returns null, malloc might. 531 if (isa<AllocaInst>(V)) return true; 532 533 // A byval argument is never null. 534 if (const Argument *A = dyn_cast<Argument>(V)) 535 return A->hasByValAttr(); 536 537 // Global values are not null unless extern weak. 538 if (const GlobalValue *GV = dyn_cast<GlobalValue>(V)) 539 return !GV->hasExternalWeakLinkage(); 540 return false; 541 } 542