1 //===- DeadStoreElimination.cpp - Fast Dead Store Elimination -------------===// 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 a trivial dead store elimination that only considers 11 // basic-block local redundant stores. 12 // 13 // FIXME: This should eventually be extended to be a post-dominator tree 14 // traversal. Doing so would be pretty trivial. 15 // 16 //===----------------------------------------------------------------------===// 17 18 #define DEBUG_TYPE "dse" 19 #include "llvm/Transforms/Scalar.h" 20 #include "llvm/ADT/STLExtras.h" 21 #include "llvm/ADT/SetVector.h" 22 #include "llvm/ADT/Statistic.h" 23 #include "llvm/Analysis/AliasAnalysis.h" 24 #include "llvm/Analysis/CaptureTracking.h" 25 #include "llvm/Analysis/MemoryBuiltins.h" 26 #include "llvm/Analysis/MemoryDependenceAnalysis.h" 27 #include "llvm/Analysis/ValueTracking.h" 28 #include "llvm/IR/Constants.h" 29 #include "llvm/IR/DataLayout.h" 30 #include "llvm/IR/Dominators.h" 31 #include "llvm/IR/Function.h" 32 #include "llvm/IR/GlobalVariable.h" 33 #include "llvm/IR/Instructions.h" 34 #include "llvm/IR/IntrinsicInst.h" 35 #include "llvm/Pass.h" 36 #include "llvm/Support/Debug.h" 37 #include "llvm/Target/TargetLibraryInfo.h" 38 #include "llvm/Transforms/Utils/Local.h" 39 using namespace llvm; 40 41 STATISTIC(NumFastStores, "Number of stores deleted"); 42 STATISTIC(NumFastOther , "Number of other instrs removed"); 43 44 namespace { 45 struct DSE : public FunctionPass { 46 AliasAnalysis *AA; 47 MemoryDependenceAnalysis *MD; 48 DominatorTree *DT; 49 const TargetLibraryInfo *TLI; 50 51 static char ID; // Pass identification, replacement for typeid 52 DSE() : FunctionPass(ID), AA(0), MD(0), DT(0) { 53 initializeDSEPass(*PassRegistry::getPassRegistry()); 54 } 55 56 virtual bool runOnFunction(Function &F) { 57 if (skipOptnoneFunction(F)) 58 return false; 59 60 AA = &getAnalysis<AliasAnalysis>(); 61 MD = &getAnalysis<MemoryDependenceAnalysis>(); 62 DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree(); 63 TLI = AA->getTargetLibraryInfo(); 64 65 bool Changed = false; 66 for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I) 67 // Only check non-dead blocks. Dead blocks may have strange pointer 68 // cycles that will confuse alias analysis. 69 if (DT->isReachableFromEntry(I)) 70 Changed |= runOnBasicBlock(*I); 71 72 AA = 0; MD = 0; DT = 0; 73 return Changed; 74 } 75 76 bool runOnBasicBlock(BasicBlock &BB); 77 bool HandleFree(CallInst *F); 78 bool handleEndBlock(BasicBlock &BB); 79 void RemoveAccessedObjects(const AliasAnalysis::Location &LoadedLoc, 80 SmallSetVector<Value*, 16> &DeadStackObjects); 81 82 virtual void getAnalysisUsage(AnalysisUsage &AU) const { 83 AU.setPreservesCFG(); 84 AU.addRequired<DominatorTreeWrapperPass>(); 85 AU.addRequired<AliasAnalysis>(); 86 AU.addRequired<MemoryDependenceAnalysis>(); 87 AU.addPreserved<AliasAnalysis>(); 88 AU.addPreserved<DominatorTreeWrapperPass>(); 89 AU.addPreserved<MemoryDependenceAnalysis>(); 90 } 91 }; 92 } 93 94 char DSE::ID = 0; 95 INITIALIZE_PASS_BEGIN(DSE, "dse", "Dead Store Elimination", false, false) 96 INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass) 97 INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis) 98 INITIALIZE_AG_DEPENDENCY(AliasAnalysis) 99 INITIALIZE_PASS_END(DSE, "dse", "Dead Store Elimination", false, false) 100 101 FunctionPass *llvm::createDeadStoreEliminationPass() { return new DSE(); } 102 103 //===----------------------------------------------------------------------===// 104 // Helper functions 105 //===----------------------------------------------------------------------===// 106 107 /// DeleteDeadInstruction - Delete this instruction. Before we do, go through 108 /// and zero out all the operands of this instruction. If any of them become 109 /// dead, delete them and the computation tree that feeds them. 110 /// 111 /// If ValueSet is non-null, remove any deleted instructions from it as well. 112 /// 113 static void DeleteDeadInstruction(Instruction *I, 114 MemoryDependenceAnalysis &MD, 115 const TargetLibraryInfo *TLI, 116 SmallSetVector<Value*, 16> *ValueSet = 0) { 117 SmallVector<Instruction*, 32> NowDeadInsts; 118 119 NowDeadInsts.push_back(I); 120 --NumFastOther; 121 122 // Before we touch this instruction, remove it from memdep! 123 do { 124 Instruction *DeadInst = NowDeadInsts.pop_back_val(); 125 ++NumFastOther; 126 127 // This instruction is dead, zap it, in stages. Start by removing it from 128 // MemDep, which needs to know the operands and needs it to be in the 129 // function. 130 MD.removeInstruction(DeadInst); 131 132 for (unsigned op = 0, e = DeadInst->getNumOperands(); op != e; ++op) { 133 Value *Op = DeadInst->getOperand(op); 134 DeadInst->setOperand(op, 0); 135 136 // If this operand just became dead, add it to the NowDeadInsts list. 137 if (!Op->use_empty()) continue; 138 139 if (Instruction *OpI = dyn_cast<Instruction>(Op)) 140 if (isInstructionTriviallyDead(OpI, TLI)) 141 NowDeadInsts.push_back(OpI); 142 } 143 144 DeadInst->eraseFromParent(); 145 146 if (ValueSet) ValueSet->remove(DeadInst); 147 } while (!NowDeadInsts.empty()); 148 } 149 150 151 /// hasMemoryWrite - Does this instruction write some memory? This only returns 152 /// true for things that we can analyze with other helpers below. 153 static bool hasMemoryWrite(Instruction *I, const TargetLibraryInfo *TLI) { 154 if (isa<StoreInst>(I)) 155 return true; 156 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) { 157 switch (II->getIntrinsicID()) { 158 default: 159 return false; 160 case Intrinsic::memset: 161 case Intrinsic::memmove: 162 case Intrinsic::memcpy: 163 case Intrinsic::init_trampoline: 164 case Intrinsic::lifetime_end: 165 return true; 166 } 167 } 168 if (CallSite CS = I) { 169 if (Function *F = CS.getCalledFunction()) { 170 if (TLI && TLI->has(LibFunc::strcpy) && 171 F->getName() == TLI->getName(LibFunc::strcpy)) { 172 return true; 173 } 174 if (TLI && TLI->has(LibFunc::strncpy) && 175 F->getName() == TLI->getName(LibFunc::strncpy)) { 176 return true; 177 } 178 if (TLI && TLI->has(LibFunc::strcat) && 179 F->getName() == TLI->getName(LibFunc::strcat)) { 180 return true; 181 } 182 if (TLI && TLI->has(LibFunc::strncat) && 183 F->getName() == TLI->getName(LibFunc::strncat)) { 184 return true; 185 } 186 } 187 } 188 return false; 189 } 190 191 /// getLocForWrite - Return a Location stored to by the specified instruction. 192 /// If isRemovable returns true, this function and getLocForRead completely 193 /// describe the memory operations for this instruction. 194 static AliasAnalysis::Location 195 getLocForWrite(Instruction *Inst, AliasAnalysis &AA) { 196 if (StoreInst *SI = dyn_cast<StoreInst>(Inst)) 197 return AA.getLocation(SI); 198 199 if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(Inst)) { 200 // memcpy/memmove/memset. 201 AliasAnalysis::Location Loc = AA.getLocationForDest(MI); 202 // If we don't have target data around, an unknown size in Location means 203 // that we should use the size of the pointee type. This isn't valid for 204 // memset/memcpy, which writes more than an i8. 205 if (Loc.Size == AliasAnalysis::UnknownSize && AA.getDataLayout() == 0) 206 return AliasAnalysis::Location(); 207 return Loc; 208 } 209 210 IntrinsicInst *II = dyn_cast<IntrinsicInst>(Inst); 211 if (II == 0) return AliasAnalysis::Location(); 212 213 switch (II->getIntrinsicID()) { 214 default: return AliasAnalysis::Location(); // Unhandled intrinsic. 215 case Intrinsic::init_trampoline: 216 // If we don't have target data around, an unknown size in Location means 217 // that we should use the size of the pointee type. This isn't valid for 218 // init.trampoline, which writes more than an i8. 219 if (AA.getDataLayout() == 0) return AliasAnalysis::Location(); 220 221 // FIXME: We don't know the size of the trampoline, so we can't really 222 // handle it here. 223 return AliasAnalysis::Location(II->getArgOperand(0)); 224 case Intrinsic::lifetime_end: { 225 uint64_t Len = cast<ConstantInt>(II->getArgOperand(0))->getZExtValue(); 226 return AliasAnalysis::Location(II->getArgOperand(1), Len); 227 } 228 } 229 } 230 231 /// getLocForRead - Return the location read by the specified "hasMemoryWrite" 232 /// instruction if any. 233 static AliasAnalysis::Location 234 getLocForRead(Instruction *Inst, AliasAnalysis &AA) { 235 assert(hasMemoryWrite(Inst, AA.getTargetLibraryInfo()) && 236 "Unknown instruction case"); 237 238 // The only instructions that both read and write are the mem transfer 239 // instructions (memcpy/memmove). 240 if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(Inst)) 241 return AA.getLocationForSource(MTI); 242 return AliasAnalysis::Location(); 243 } 244 245 246 /// isRemovable - If the value of this instruction and the memory it writes to 247 /// is unused, may we delete this instruction? 248 static bool isRemovable(Instruction *I) { 249 // Don't remove volatile/atomic stores. 250 if (StoreInst *SI = dyn_cast<StoreInst>(I)) 251 return SI->isUnordered(); 252 253 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) { 254 switch (II->getIntrinsicID()) { 255 default: llvm_unreachable("doesn't pass 'hasMemoryWrite' predicate"); 256 case Intrinsic::lifetime_end: 257 // Never remove dead lifetime_end's, e.g. because it is followed by a 258 // free. 259 return false; 260 case Intrinsic::init_trampoline: 261 // Always safe to remove init_trampoline. 262 return true; 263 264 case Intrinsic::memset: 265 case Intrinsic::memmove: 266 case Intrinsic::memcpy: 267 // Don't remove volatile memory intrinsics. 268 return !cast<MemIntrinsic>(II)->isVolatile(); 269 } 270 } 271 272 if (CallSite CS = I) 273 return CS.getInstruction()->use_empty(); 274 275 return false; 276 } 277 278 279 /// isShortenable - Returns true if this instruction can be safely shortened in 280 /// length. 281 static bool isShortenable(Instruction *I) { 282 // Don't shorten stores for now 283 if (isa<StoreInst>(I)) 284 return false; 285 286 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) { 287 switch (II->getIntrinsicID()) { 288 default: return false; 289 case Intrinsic::memset: 290 case Intrinsic::memcpy: 291 // Do shorten memory intrinsics. 292 return true; 293 } 294 } 295 296 // Don't shorten libcalls calls for now. 297 298 return false; 299 } 300 301 /// getStoredPointerOperand - Return the pointer that is being written to. 302 static Value *getStoredPointerOperand(Instruction *I) { 303 if (StoreInst *SI = dyn_cast<StoreInst>(I)) 304 return SI->getPointerOperand(); 305 if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(I)) 306 return MI->getDest(); 307 308 if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(I)) { 309 switch (II->getIntrinsicID()) { 310 default: llvm_unreachable("Unexpected intrinsic!"); 311 case Intrinsic::init_trampoline: 312 return II->getArgOperand(0); 313 } 314 } 315 316 CallSite CS = I; 317 // All the supported functions so far happen to have dest as their first 318 // argument. 319 return CS.getArgument(0); 320 } 321 322 static uint64_t getPointerSize(const Value *V, AliasAnalysis &AA) { 323 uint64_t Size; 324 if (getObjectSize(V, Size, AA.getDataLayout(), AA.getTargetLibraryInfo())) 325 return Size; 326 return AliasAnalysis::UnknownSize; 327 } 328 329 namespace { 330 enum OverwriteResult 331 { 332 OverwriteComplete, 333 OverwriteEnd, 334 OverwriteUnknown 335 }; 336 } 337 338 /// isOverwrite - Return 'OverwriteComplete' if a store to the 'Later' location 339 /// completely overwrites a store to the 'Earlier' location. 340 /// 'OverwriteEnd' if the end of the 'Earlier' location is completely 341 /// overwritten by 'Later', or 'OverwriteUnknown' if nothing can be determined 342 static OverwriteResult isOverwrite(const AliasAnalysis::Location &Later, 343 const AliasAnalysis::Location &Earlier, 344 AliasAnalysis &AA, 345 int64_t &EarlierOff, 346 int64_t &LaterOff) { 347 const Value *P1 = Earlier.Ptr->stripPointerCasts(); 348 const Value *P2 = Later.Ptr->stripPointerCasts(); 349 350 // If the start pointers are the same, we just have to compare sizes to see if 351 // the later store was larger than the earlier store. 352 if (P1 == P2) { 353 // If we don't know the sizes of either access, then we can't do a 354 // comparison. 355 if (Later.Size == AliasAnalysis::UnknownSize || 356 Earlier.Size == AliasAnalysis::UnknownSize) { 357 // If we have no DataLayout information around, then the size of the store 358 // is inferrable from the pointee type. If they are the same type, then 359 // we know that the store is safe. 360 if (AA.getDataLayout() == 0 && 361 Later.Ptr->getType() == Earlier.Ptr->getType()) 362 return OverwriteComplete; 363 364 return OverwriteUnknown; 365 } 366 367 // Make sure that the Later size is >= the Earlier size. 368 if (Later.Size >= Earlier.Size) 369 return OverwriteComplete; 370 } 371 372 // Otherwise, we have to have size information, and the later store has to be 373 // larger than the earlier one. 374 if (Later.Size == AliasAnalysis::UnknownSize || 375 Earlier.Size == AliasAnalysis::UnknownSize || 376 AA.getDataLayout() == 0) 377 return OverwriteUnknown; 378 379 // Check to see if the later store is to the entire object (either a global, 380 // an alloca, or a byval/inalloca argument). If so, then it clearly 381 // overwrites any other store to the same object. 382 const DataLayout *TD = AA.getDataLayout(); 383 384 const Value *UO1 = GetUnderlyingObject(P1, TD), 385 *UO2 = GetUnderlyingObject(P2, TD); 386 387 // If we can't resolve the same pointers to the same object, then we can't 388 // analyze them at all. 389 if (UO1 != UO2) 390 return OverwriteUnknown; 391 392 // If the "Later" store is to a recognizable object, get its size. 393 uint64_t ObjectSize = getPointerSize(UO2, AA); 394 if (ObjectSize != AliasAnalysis::UnknownSize) 395 if (ObjectSize == Later.Size && ObjectSize >= Earlier.Size) 396 return OverwriteComplete; 397 398 // Okay, we have stores to two completely different pointers. Try to 399 // decompose the pointer into a "base + constant_offset" form. If the base 400 // pointers are equal, then we can reason about the two stores. 401 EarlierOff = 0; 402 LaterOff = 0; 403 const Value *BP1 = GetPointerBaseWithConstantOffset(P1, EarlierOff, TD); 404 const Value *BP2 = GetPointerBaseWithConstantOffset(P2, LaterOff, TD); 405 406 // If the base pointers still differ, we have two completely different stores. 407 if (BP1 != BP2) 408 return OverwriteUnknown; 409 410 // The later store completely overlaps the earlier store if: 411 // 412 // 1. Both start at the same offset and the later one's size is greater than 413 // or equal to the earlier one's, or 414 // 415 // |--earlier--| 416 // |-- later --| 417 // 418 // 2. The earlier store has an offset greater than the later offset, but which 419 // still lies completely within the later store. 420 // 421 // |--earlier--| 422 // |----- later ------| 423 // 424 // We have to be careful here as *Off is signed while *.Size is unsigned. 425 if (EarlierOff >= LaterOff && 426 Later.Size >= Earlier.Size && 427 uint64_t(EarlierOff - LaterOff) + Earlier.Size <= Later.Size) 428 return OverwriteComplete; 429 430 // The other interesting case is if the later store overwrites the end of 431 // the earlier store 432 // 433 // |--earlier--| 434 // |-- later --| 435 // 436 // In this case we may want to trim the size of earlier to avoid generating 437 // writes to addresses which will definitely be overwritten later 438 if (LaterOff > EarlierOff && 439 LaterOff < int64_t(EarlierOff + Earlier.Size) && 440 int64_t(LaterOff + Later.Size) >= int64_t(EarlierOff + Earlier.Size)) 441 return OverwriteEnd; 442 443 // Otherwise, they don't completely overlap. 444 return OverwriteUnknown; 445 } 446 447 /// isPossibleSelfRead - If 'Inst' might be a self read (i.e. a noop copy of a 448 /// memory region into an identical pointer) then it doesn't actually make its 449 /// input dead in the traditional sense. Consider this case: 450 /// 451 /// memcpy(A <- B) 452 /// memcpy(A <- A) 453 /// 454 /// In this case, the second store to A does not make the first store to A dead. 455 /// The usual situation isn't an explicit A<-A store like this (which can be 456 /// trivially removed) but a case where two pointers may alias. 457 /// 458 /// This function detects when it is unsafe to remove a dependent instruction 459 /// because the DSE inducing instruction may be a self-read. 460 static bool isPossibleSelfRead(Instruction *Inst, 461 const AliasAnalysis::Location &InstStoreLoc, 462 Instruction *DepWrite, AliasAnalysis &AA) { 463 // Self reads can only happen for instructions that read memory. Get the 464 // location read. 465 AliasAnalysis::Location InstReadLoc = getLocForRead(Inst, AA); 466 if (InstReadLoc.Ptr == 0) return false; // Not a reading instruction. 467 468 // If the read and written loc obviously don't alias, it isn't a read. 469 if (AA.isNoAlias(InstReadLoc, InstStoreLoc)) return false; 470 471 // Okay, 'Inst' may copy over itself. However, we can still remove a the 472 // DepWrite instruction if we can prove that it reads from the same location 473 // as Inst. This handles useful cases like: 474 // memcpy(A <- B) 475 // memcpy(A <- B) 476 // Here we don't know if A/B may alias, but we do know that B/B are must 477 // aliases, so removing the first memcpy is safe (assuming it writes <= # 478 // bytes as the second one. 479 AliasAnalysis::Location DepReadLoc = getLocForRead(DepWrite, AA); 480 481 if (DepReadLoc.Ptr && AA.isMustAlias(InstReadLoc.Ptr, DepReadLoc.Ptr)) 482 return false; 483 484 // If DepWrite doesn't read memory or if we can't prove it is a must alias, 485 // then it can't be considered dead. 486 return true; 487 } 488 489 490 //===----------------------------------------------------------------------===// 491 // DSE Pass 492 //===----------------------------------------------------------------------===// 493 494 bool DSE::runOnBasicBlock(BasicBlock &BB) { 495 bool MadeChange = false; 496 497 // Do a top-down walk on the BB. 498 for (BasicBlock::iterator BBI = BB.begin(), BBE = BB.end(); BBI != BBE; ) { 499 Instruction *Inst = BBI++; 500 501 // Handle 'free' calls specially. 502 if (CallInst *F = isFreeCall(Inst, TLI)) { 503 MadeChange |= HandleFree(F); 504 continue; 505 } 506 507 // If we find something that writes memory, get its memory dependence. 508 if (!hasMemoryWrite(Inst, TLI)) 509 continue; 510 511 MemDepResult InstDep = MD->getDependency(Inst); 512 513 // Ignore any store where we can't find a local dependence. 514 // FIXME: cross-block DSE would be fun. :) 515 if (!InstDep.isDef() && !InstDep.isClobber()) 516 continue; 517 518 // If we're storing the same value back to a pointer that we just 519 // loaded from, then the store can be removed. 520 if (StoreInst *SI = dyn_cast<StoreInst>(Inst)) { 521 if (LoadInst *DepLoad = dyn_cast<LoadInst>(InstDep.getInst())) { 522 if (SI->getPointerOperand() == DepLoad->getPointerOperand() && 523 SI->getOperand(0) == DepLoad && isRemovable(SI)) { 524 DEBUG(dbgs() << "DSE: Remove Store Of Load from same pointer:\n " 525 << "LOAD: " << *DepLoad << "\n STORE: " << *SI << '\n'); 526 527 // DeleteDeadInstruction can delete the current instruction. Save BBI 528 // in case we need it. 529 WeakVH NextInst(BBI); 530 531 DeleteDeadInstruction(SI, *MD, TLI); 532 533 if (NextInst == 0) // Next instruction deleted. 534 BBI = BB.begin(); 535 else if (BBI != BB.begin()) // Revisit this instruction if possible. 536 --BBI; 537 ++NumFastStores; 538 MadeChange = true; 539 continue; 540 } 541 } 542 } 543 544 // Figure out what location is being stored to. 545 AliasAnalysis::Location Loc = getLocForWrite(Inst, *AA); 546 547 // If we didn't get a useful location, fail. 548 if (Loc.Ptr == 0) 549 continue; 550 551 while (InstDep.isDef() || InstDep.isClobber()) { 552 // Get the memory clobbered by the instruction we depend on. MemDep will 553 // skip any instructions that 'Loc' clearly doesn't interact with. If we 554 // end up depending on a may- or must-aliased load, then we can't optimize 555 // away the store and we bail out. However, if we depend on on something 556 // that overwrites the memory location we *can* potentially optimize it. 557 // 558 // Find out what memory location the dependent instruction stores. 559 Instruction *DepWrite = InstDep.getInst(); 560 AliasAnalysis::Location DepLoc = getLocForWrite(DepWrite, *AA); 561 // If we didn't get a useful location, or if it isn't a size, bail out. 562 if (DepLoc.Ptr == 0) 563 break; 564 565 // If we find a write that is a) removable (i.e., non-volatile), b) is 566 // completely obliterated by the store to 'Loc', and c) which we know that 567 // 'Inst' doesn't load from, then we can remove it. 568 if (isRemovable(DepWrite) && 569 !isPossibleSelfRead(Inst, Loc, DepWrite, *AA)) { 570 int64_t InstWriteOffset, DepWriteOffset; 571 OverwriteResult OR = isOverwrite(Loc, DepLoc, *AA, 572 DepWriteOffset, InstWriteOffset); 573 if (OR == OverwriteComplete) { 574 DEBUG(dbgs() << "DSE: Remove Dead Store:\n DEAD: " 575 << *DepWrite << "\n KILLER: " << *Inst << '\n'); 576 577 // Delete the store and now-dead instructions that feed it. 578 DeleteDeadInstruction(DepWrite, *MD, TLI); 579 ++NumFastStores; 580 MadeChange = true; 581 582 // DeleteDeadInstruction can delete the current instruction in loop 583 // cases, reset BBI. 584 BBI = Inst; 585 if (BBI != BB.begin()) 586 --BBI; 587 break; 588 } else if (OR == OverwriteEnd && isShortenable(DepWrite)) { 589 // TODO: base this on the target vector size so that if the earlier 590 // store was too small to get vector writes anyway then its likely 591 // a good idea to shorten it 592 // Power of 2 vector writes are probably always a bad idea to optimize 593 // as any store/memset/memcpy is likely using vector instructions so 594 // shortening it to not vector size is likely to be slower 595 MemIntrinsic* DepIntrinsic = cast<MemIntrinsic>(DepWrite); 596 unsigned DepWriteAlign = DepIntrinsic->getAlignment(); 597 if (llvm::isPowerOf2_64(InstWriteOffset) || 598 ((DepWriteAlign != 0) && InstWriteOffset % DepWriteAlign == 0)) { 599 600 DEBUG(dbgs() << "DSE: Remove Dead Store:\n OW END: " 601 << *DepWrite << "\n KILLER (offset " 602 << InstWriteOffset << ", " 603 << DepLoc.Size << ")" 604 << *Inst << '\n'); 605 606 Value* DepWriteLength = DepIntrinsic->getLength(); 607 Value* TrimmedLength = ConstantInt::get(DepWriteLength->getType(), 608 InstWriteOffset - 609 DepWriteOffset); 610 DepIntrinsic->setLength(TrimmedLength); 611 MadeChange = true; 612 } 613 } 614 } 615 616 // If this is a may-aliased store that is clobbering the store value, we 617 // can keep searching past it for another must-aliased pointer that stores 618 // to the same location. For example, in: 619 // store -> P 620 // store -> Q 621 // store -> P 622 // we can remove the first store to P even though we don't know if P and Q 623 // alias. 624 if (DepWrite == &BB.front()) break; 625 626 // Can't look past this instruction if it might read 'Loc'. 627 if (AA->getModRefInfo(DepWrite, Loc) & AliasAnalysis::Ref) 628 break; 629 630 InstDep = MD->getPointerDependencyFrom(Loc, false, DepWrite, &BB); 631 } 632 } 633 634 // If this block ends in a return, unwind, or unreachable, all allocas are 635 // dead at its end, which means stores to them are also dead. 636 if (BB.getTerminator()->getNumSuccessors() == 0) 637 MadeChange |= handleEndBlock(BB); 638 639 return MadeChange; 640 } 641 642 /// Find all blocks that will unconditionally lead to the block BB and append 643 /// them to F. 644 static void FindUnconditionalPreds(SmallVectorImpl<BasicBlock *> &Blocks, 645 BasicBlock *BB, DominatorTree *DT) { 646 for (pred_iterator I = pred_begin(BB), E = pred_end(BB); I != E; ++I) { 647 BasicBlock *Pred = *I; 648 if (Pred == BB) continue; 649 TerminatorInst *PredTI = Pred->getTerminator(); 650 if (PredTI->getNumSuccessors() != 1) 651 continue; 652 653 if (DT->isReachableFromEntry(Pred)) 654 Blocks.push_back(Pred); 655 } 656 } 657 658 /// HandleFree - Handle frees of entire structures whose dependency is a store 659 /// to a field of that structure. 660 bool DSE::HandleFree(CallInst *F) { 661 bool MadeChange = false; 662 663 AliasAnalysis::Location Loc = AliasAnalysis::Location(F->getOperand(0)); 664 SmallVector<BasicBlock *, 16> Blocks; 665 Blocks.push_back(F->getParent()); 666 667 while (!Blocks.empty()) { 668 BasicBlock *BB = Blocks.pop_back_val(); 669 Instruction *InstPt = BB->getTerminator(); 670 if (BB == F->getParent()) InstPt = F; 671 672 MemDepResult Dep = MD->getPointerDependencyFrom(Loc, false, InstPt, BB); 673 while (Dep.isDef() || Dep.isClobber()) { 674 Instruction *Dependency = Dep.getInst(); 675 if (!hasMemoryWrite(Dependency, TLI) || !isRemovable(Dependency)) 676 break; 677 678 Value *DepPointer = 679 GetUnderlyingObject(getStoredPointerOperand(Dependency)); 680 681 // Check for aliasing. 682 if (!AA->isMustAlias(F->getArgOperand(0), DepPointer)) 683 break; 684 685 Instruction *Next = llvm::next(BasicBlock::iterator(Dependency)); 686 687 // DCE instructions only used to calculate that store 688 DeleteDeadInstruction(Dependency, *MD, TLI); 689 ++NumFastStores; 690 MadeChange = true; 691 692 // Inst's old Dependency is now deleted. Compute the next dependency, 693 // which may also be dead, as in 694 // s[0] = 0; 695 // s[1] = 0; // This has just been deleted. 696 // free(s); 697 Dep = MD->getPointerDependencyFrom(Loc, false, Next, BB); 698 } 699 700 if (Dep.isNonLocal()) 701 FindUnconditionalPreds(Blocks, BB, DT); 702 } 703 704 return MadeChange; 705 } 706 707 namespace { 708 struct CouldRef { 709 typedef Value *argument_type; 710 const CallSite CS; 711 AliasAnalysis *AA; 712 713 bool operator()(Value *I) { 714 // See if the call site touches the value. 715 AliasAnalysis::ModRefResult A = 716 AA->getModRefInfo(CS, I, getPointerSize(I, *AA)); 717 718 return A == AliasAnalysis::ModRef || A == AliasAnalysis::Ref; 719 } 720 }; 721 } 722 723 /// handleEndBlock - Remove dead stores to stack-allocated locations in the 724 /// function end block. Ex: 725 /// %A = alloca i32 726 /// ... 727 /// store i32 1, i32* %A 728 /// ret void 729 bool DSE::handleEndBlock(BasicBlock &BB) { 730 bool MadeChange = false; 731 732 // Keep track of all of the stack objects that are dead at the end of the 733 // function. 734 SmallSetVector<Value*, 16> DeadStackObjects; 735 736 // Find all of the alloca'd pointers in the entry block. 737 BasicBlock *Entry = BB.getParent()->begin(); 738 for (BasicBlock::iterator I = Entry->begin(), E = Entry->end(); I != E; ++I) { 739 if (isa<AllocaInst>(I)) 740 DeadStackObjects.insert(I); 741 742 // Okay, so these are dead heap objects, but if the pointer never escapes 743 // then it's leaked by this function anyways. 744 else if (isAllocLikeFn(I, TLI) && !PointerMayBeCaptured(I, true, true)) 745 DeadStackObjects.insert(I); 746 } 747 748 // Treat byval or inalloca arguments the same, stores to them are dead at the 749 // end of the function. 750 for (Function::arg_iterator AI = BB.getParent()->arg_begin(), 751 AE = BB.getParent()->arg_end(); AI != AE; ++AI) 752 if (AI->hasByValOrInAllocaAttr()) 753 DeadStackObjects.insert(AI); 754 755 // Scan the basic block backwards 756 for (BasicBlock::iterator BBI = BB.end(); BBI != BB.begin(); ){ 757 --BBI; 758 759 // If we find a store, check to see if it points into a dead stack value. 760 if (hasMemoryWrite(BBI, TLI) && isRemovable(BBI)) { 761 // See through pointer-to-pointer bitcasts 762 SmallVector<Value *, 4> Pointers; 763 GetUnderlyingObjects(getStoredPointerOperand(BBI), Pointers); 764 765 // Stores to stack values are valid candidates for removal. 766 bool AllDead = true; 767 for (SmallVectorImpl<Value *>::iterator I = Pointers.begin(), 768 E = Pointers.end(); I != E; ++I) 769 if (!DeadStackObjects.count(*I)) { 770 AllDead = false; 771 break; 772 } 773 774 if (AllDead) { 775 Instruction *Dead = BBI++; 776 777 DEBUG(dbgs() << "DSE: Dead Store at End of Block:\n DEAD: " 778 << *Dead << "\n Objects: "; 779 for (SmallVectorImpl<Value *>::iterator I = Pointers.begin(), 780 E = Pointers.end(); I != E; ++I) { 781 dbgs() << **I; 782 if (llvm::next(I) != E) 783 dbgs() << ", "; 784 } 785 dbgs() << '\n'); 786 787 // DCE instructions only used to calculate that store. 788 DeleteDeadInstruction(Dead, *MD, TLI, &DeadStackObjects); 789 ++NumFastStores; 790 MadeChange = true; 791 continue; 792 } 793 } 794 795 // Remove any dead non-memory-mutating instructions. 796 if (isInstructionTriviallyDead(BBI, TLI)) { 797 Instruction *Inst = BBI++; 798 DeleteDeadInstruction(Inst, *MD, TLI, &DeadStackObjects); 799 ++NumFastOther; 800 MadeChange = true; 801 continue; 802 } 803 804 if (isa<AllocaInst>(BBI)) { 805 // Remove allocas from the list of dead stack objects; there can't be 806 // any references before the definition. 807 DeadStackObjects.remove(BBI); 808 continue; 809 } 810 811 if (CallSite CS = cast<Value>(BBI)) { 812 // Remove allocation function calls from the list of dead stack objects; 813 // there can't be any references before the definition. 814 if (isAllocLikeFn(BBI, TLI)) 815 DeadStackObjects.remove(BBI); 816 817 // If this call does not access memory, it can't be loading any of our 818 // pointers. 819 if (AA->doesNotAccessMemory(CS)) 820 continue; 821 822 // If the call might load from any of our allocas, then any store above 823 // the call is live. 824 CouldRef Pred = { CS, AA }; 825 DeadStackObjects.remove_if(Pred); 826 827 // If all of the allocas were clobbered by the call then we're not going 828 // to find anything else to process. 829 if (DeadStackObjects.empty()) 830 break; 831 832 continue; 833 } 834 835 AliasAnalysis::Location LoadedLoc; 836 837 // If we encounter a use of the pointer, it is no longer considered dead 838 if (LoadInst *L = dyn_cast<LoadInst>(BBI)) { 839 if (!L->isUnordered()) // Be conservative with atomic/volatile load 840 break; 841 LoadedLoc = AA->getLocation(L); 842 } else if (VAArgInst *V = dyn_cast<VAArgInst>(BBI)) { 843 LoadedLoc = AA->getLocation(V); 844 } else if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(BBI)) { 845 LoadedLoc = AA->getLocationForSource(MTI); 846 } else if (!BBI->mayReadFromMemory()) { 847 // Instruction doesn't read memory. Note that stores that weren't removed 848 // above will hit this case. 849 continue; 850 } else { 851 // Unknown inst; assume it clobbers everything. 852 break; 853 } 854 855 // Remove any allocas from the DeadPointer set that are loaded, as this 856 // makes any stores above the access live. 857 RemoveAccessedObjects(LoadedLoc, DeadStackObjects); 858 859 // If all of the allocas were clobbered by the access then we're not going 860 // to find anything else to process. 861 if (DeadStackObjects.empty()) 862 break; 863 } 864 865 return MadeChange; 866 } 867 868 namespace { 869 struct CouldAlias { 870 typedef Value *argument_type; 871 const AliasAnalysis::Location &LoadedLoc; 872 AliasAnalysis *AA; 873 874 bool operator()(Value *I) { 875 // See if the loaded location could alias the stack location. 876 AliasAnalysis::Location StackLoc(I, getPointerSize(I, *AA)); 877 return !AA->isNoAlias(StackLoc, LoadedLoc); 878 } 879 }; 880 } 881 882 /// RemoveAccessedObjects - Check to see if the specified location may alias any 883 /// of the stack objects in the DeadStackObjects set. If so, they become live 884 /// because the location is being loaded. 885 void DSE::RemoveAccessedObjects(const AliasAnalysis::Location &LoadedLoc, 886 SmallSetVector<Value*, 16> &DeadStackObjects) { 887 const Value *UnderlyingPointer = GetUnderlyingObject(LoadedLoc.Ptr); 888 889 // A constant can't be in the dead pointer set. 890 if (isa<Constant>(UnderlyingPointer)) 891 return; 892 893 // If the kill pointer can be easily reduced to an alloca, don't bother doing 894 // extraneous AA queries. 895 if (isa<AllocaInst>(UnderlyingPointer) || isa<Argument>(UnderlyingPointer)) { 896 DeadStackObjects.remove(const_cast<Value*>(UnderlyingPointer)); 897 return; 898 } 899 900 // Remove objects that could alias LoadedLoc. 901 CouldAlias Pred = { LoadedLoc, AA }; 902 DeadStackObjects.remove_if(Pred); 903 } 904