1 //===- PromoteMemoryToRegister.cpp - Convert allocas to registers ---------===// 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 promotes memory references to be register references. It promotes 11 // alloca instructions which only have loads and stores as uses. An alloca is 12 // transformed by using dominator frontiers to place PHI nodes, then traversing 13 // the function in depth-first order to rewrite loads and stores as appropriate. 14 // This is just the standard SSA construction algorithm to construct "pruned" 15 // SSA form. 16 // 17 //===----------------------------------------------------------------------===// 18 19 #define DEBUG_TYPE "mem2reg" 20 #include "llvm/Transforms/Utils/PromoteMemToReg.h" 21 #include "llvm/Constants.h" 22 #include "llvm/DerivedTypes.h" 23 #include "llvm/Function.h" 24 #include "llvm/Instructions.h" 25 #include "llvm/IntrinsicInst.h" 26 #include "llvm/Analysis/Dominators.h" 27 #include "llvm/Analysis/AliasSetTracker.h" 28 #include "llvm/ADT/DenseMap.h" 29 #include "llvm/ADT/SmallPtrSet.h" 30 #include "llvm/ADT/SmallVector.h" 31 #include "llvm/ADT/Statistic.h" 32 #include "llvm/ADT/StringExtras.h" 33 #include "llvm/ADT/STLExtras.h" 34 #include "llvm/Support/CFG.h" 35 #include "llvm/Support/Compiler.h" 36 #include <algorithm> 37 using namespace llvm; 38 39 STATISTIC(NumLocalPromoted, "Number of alloca's promoted within one block"); 40 STATISTIC(NumSingleStore, "Number of alloca's promoted with a single store"); 41 STATISTIC(NumDeadAlloca, "Number of dead alloca's removed"); 42 STATISTIC(NumPHIInsert, "Number of PHI nodes inserted"); 43 44 // Provide DenseMapInfo for all pointers. 45 namespace llvm { 46 template<> 47 struct DenseMapInfo<std::pair<BasicBlock*, unsigned> > { 48 typedef std::pair<BasicBlock*, unsigned> EltTy; 49 static inline EltTy getEmptyKey() { 50 return EltTy(reinterpret_cast<BasicBlock*>(-1), ~0U); 51 } 52 static inline EltTy getTombstoneKey() { 53 return EltTy(reinterpret_cast<BasicBlock*>(-2), 0U); 54 } 55 static unsigned getHashValue(const std::pair<BasicBlock*, unsigned> &Val) { 56 return DenseMapInfo<void*>::getHashValue(Val.first) + Val.second*2; 57 } 58 static bool isEqual(const EltTy &LHS, const EltTy &RHS) { 59 return LHS == RHS; 60 } 61 static bool isPod() { return true; } 62 }; 63 } 64 65 /// isAllocaPromotable - Return true if this alloca is legal for promotion. 66 /// This is true if there are only loads and stores to the alloca. 67 /// 68 bool llvm::isAllocaPromotable(const AllocaInst *AI) { 69 // FIXME: If the memory unit is of pointer or integer type, we can permit 70 // assignments to subsections of the memory unit. 71 72 // Only allow direct and non-volatile loads and stores... 73 for (Value::use_const_iterator UI = AI->use_begin(), UE = AI->use_end(); 74 UI != UE; ++UI) // Loop over all of the uses of the alloca 75 if (const LoadInst *LI = dyn_cast<LoadInst>(*UI)) { 76 if (LI->isVolatile()) 77 return false; 78 } else if (const StoreInst *SI = dyn_cast<StoreInst>(*UI)) { 79 if (SI->getOperand(0) == AI) 80 return false; // Don't allow a store OF the AI, only INTO the AI. 81 if (SI->isVolatile()) 82 return false; 83 } else if (const BitCastInst *BC = dyn_cast<BitCastInst>(*UI)) { 84 // A bitcast that does not feed into debug info inhibits promotion. 85 if (!BC->hasOneUse() || !isa<DbgInfoIntrinsic>(*BC->use_begin())) 86 return false; 87 // If the only use is by debug info, this alloca will not exist in 88 // non-debug code, so don't try to promote; this ensures the same 89 // codegen with debug info. Otherwise, debug info should not 90 // inhibit promotion (but we must examine other uses). 91 if (AI->hasOneUse()) 92 return false; 93 } else { 94 return false; 95 } 96 97 return true; 98 } 99 100 namespace { 101 struct AllocaInfo; 102 103 // Data package used by RenamePass() 104 class VISIBILITY_HIDDEN RenamePassData { 105 public: 106 typedef std::vector<Value *> ValVector; 107 108 RenamePassData() {} 109 RenamePassData(BasicBlock *B, BasicBlock *P, 110 const ValVector &V) : BB(B), Pred(P), Values(V) {} 111 BasicBlock *BB; 112 BasicBlock *Pred; 113 ValVector Values; 114 115 void swap(RenamePassData &RHS) { 116 std::swap(BB, RHS.BB); 117 std::swap(Pred, RHS.Pred); 118 Values.swap(RHS.Values); 119 } 120 }; 121 122 /// LargeBlockInfo - This assigns and keeps a per-bb relative ordering of 123 /// load/store instructions in the block that directly load or store an alloca. 124 /// 125 /// This functionality is important because it avoids scanning large basic 126 /// blocks multiple times when promoting many allocas in the same block. 127 class VISIBILITY_HIDDEN LargeBlockInfo { 128 /// InstNumbers - For each instruction that we track, keep the index of the 129 /// instruction. The index starts out as the number of the instruction from 130 /// the start of the block. 131 DenseMap<const Instruction *, unsigned> InstNumbers; 132 public: 133 134 /// isInterestingInstruction - This code only looks at accesses to allocas. 135 static bool isInterestingInstruction(const Instruction *I) { 136 return (isa<LoadInst>(I) && isa<AllocaInst>(I->getOperand(0))) || 137 (isa<StoreInst>(I) && isa<AllocaInst>(I->getOperand(1))); 138 } 139 140 /// getInstructionIndex - Get or calculate the index of the specified 141 /// instruction. 142 unsigned getInstructionIndex(const Instruction *I) { 143 assert(isInterestingInstruction(I) && 144 "Not a load/store to/from an alloca?"); 145 146 // If we already have this instruction number, return it. 147 DenseMap<const Instruction *, unsigned>::iterator It = InstNumbers.find(I); 148 if (It != InstNumbers.end()) return It->second; 149 150 // Scan the whole block to get the instruction. This accumulates 151 // information for every interesting instruction in the block, in order to 152 // avoid gratuitus rescans. 153 const BasicBlock *BB = I->getParent(); 154 unsigned InstNo = 0; 155 for (BasicBlock::const_iterator BBI = BB->begin(), E = BB->end(); 156 BBI != E; ++BBI) 157 if (isInterestingInstruction(BBI)) 158 InstNumbers[BBI] = InstNo++; 159 It = InstNumbers.find(I); 160 161 assert(It != InstNumbers.end() && "Didn't insert instruction?"); 162 return It->second; 163 } 164 165 void deleteValue(const Instruction *I) { 166 InstNumbers.erase(I); 167 } 168 169 void clear() { 170 InstNumbers.clear(); 171 } 172 }; 173 174 struct VISIBILITY_HIDDEN PromoteMem2Reg { 175 /// Allocas - The alloca instructions being promoted. 176 /// 177 std::vector<AllocaInst*> Allocas; 178 DominatorTree &DT; 179 DominanceFrontier &DF; 180 181 /// AST - An AliasSetTracker object to update. If null, don't update it. 182 /// 183 AliasSetTracker *AST; 184 185 /// AllocaLookup - Reverse mapping of Allocas. 186 /// 187 std::map<AllocaInst*, unsigned> AllocaLookup; 188 189 /// NewPhiNodes - The PhiNodes we're adding. 190 /// 191 DenseMap<std::pair<BasicBlock*, unsigned>, PHINode*> NewPhiNodes; 192 193 /// PhiToAllocaMap - For each PHI node, keep track of which entry in Allocas 194 /// it corresponds to. 195 DenseMap<PHINode*, unsigned> PhiToAllocaMap; 196 197 /// PointerAllocaValues - If we are updating an AliasSetTracker, then for 198 /// each alloca that is of pointer type, we keep track of what to copyValue 199 /// to the inserted PHI nodes here. 200 /// 201 std::vector<Value*> PointerAllocaValues; 202 203 /// Visited - The set of basic blocks the renamer has already visited. 204 /// 205 SmallPtrSet<BasicBlock*, 16> Visited; 206 207 /// BBNumbers - Contains a stable numbering of basic blocks to avoid 208 /// non-determinstic behavior. 209 DenseMap<BasicBlock*, unsigned> BBNumbers; 210 211 /// BBNumPreds - Lazily compute the number of predecessors a block has. 212 DenseMap<const BasicBlock*, unsigned> BBNumPreds; 213 public: 214 PromoteMem2Reg(const std::vector<AllocaInst*> &A, DominatorTree &dt, 215 DominanceFrontier &df, AliasSetTracker *ast) 216 : Allocas(A), DT(dt), DF(df), AST(ast) {} 217 218 void run(); 219 220 /// properlyDominates - Return true if I1 properly dominates I2. 221 /// 222 bool properlyDominates(Instruction *I1, Instruction *I2) const { 223 if (InvokeInst *II = dyn_cast<InvokeInst>(I1)) 224 I1 = II->getNormalDest()->begin(); 225 return DT.properlyDominates(I1->getParent(), I2->getParent()); 226 } 227 228 /// dominates - Return true if BB1 dominates BB2 using the DominatorTree. 229 /// 230 bool dominates(BasicBlock *BB1, BasicBlock *BB2) const { 231 return DT.dominates(BB1, BB2); 232 } 233 234 private: 235 void RemoveFromAllocasList(unsigned &AllocaIdx) { 236 Allocas[AllocaIdx] = Allocas.back(); 237 Allocas.pop_back(); 238 --AllocaIdx; 239 } 240 241 unsigned getNumPreds(const BasicBlock *BB) { 242 unsigned &NP = BBNumPreds[BB]; 243 if (NP == 0) 244 NP = std::distance(pred_begin(BB), pred_end(BB))+1; 245 return NP-1; 246 } 247 248 void DetermineInsertionPoint(AllocaInst *AI, unsigned AllocaNum, 249 AllocaInfo &Info); 250 void ComputeLiveInBlocks(AllocaInst *AI, AllocaInfo &Info, 251 const SmallPtrSet<BasicBlock*, 32> &DefBlocks, 252 SmallPtrSet<BasicBlock*, 32> &LiveInBlocks); 253 254 void RewriteSingleStoreAlloca(AllocaInst *AI, AllocaInfo &Info, 255 LargeBlockInfo &LBI); 256 void PromoteSingleBlockAlloca(AllocaInst *AI, AllocaInfo &Info, 257 LargeBlockInfo &LBI); 258 259 260 void RenamePass(BasicBlock *BB, BasicBlock *Pred, 261 RenamePassData::ValVector &IncVals, 262 std::vector<RenamePassData> &Worklist); 263 bool QueuePhiNode(BasicBlock *BB, unsigned AllocaIdx, unsigned &Version, 264 SmallPtrSet<PHINode*, 16> &InsertedPHINodes); 265 }; 266 267 struct AllocaInfo { 268 std::vector<BasicBlock*> DefiningBlocks; 269 std::vector<BasicBlock*> UsingBlocks; 270 271 StoreInst *OnlyStore; 272 BasicBlock *OnlyBlock; 273 bool OnlyUsedInOneBlock; 274 275 Value *AllocaPointerVal; 276 277 void clear() { 278 DefiningBlocks.clear(); 279 UsingBlocks.clear(); 280 OnlyStore = 0; 281 OnlyBlock = 0; 282 OnlyUsedInOneBlock = true; 283 AllocaPointerVal = 0; 284 } 285 286 /// AnalyzeAlloca - Scan the uses of the specified alloca, filling in our 287 /// ivars. 288 void AnalyzeAlloca(AllocaInst *AI) { 289 clear(); 290 291 // As we scan the uses of the alloca instruction, keep track of stores, 292 // and decide whether all of the loads and stores to the alloca are within 293 // the same basic block. 294 for (Value::use_iterator U = AI->use_begin(), E = AI->use_end(); 295 U != E;) { 296 Instruction *User = cast<Instruction>(*U); 297 ++U; 298 if (BitCastInst *BC = dyn_cast<BitCastInst>(User)) { 299 // Remove any uses of this alloca in DbgInfoInstrinsics. 300 assert(BC->hasOneUse() && "Unexpected alloca uses!"); 301 DbgInfoIntrinsic *DI = cast<DbgInfoIntrinsic>(*BC->use_begin()); 302 DI->eraseFromParent(); 303 BC->eraseFromParent(); 304 continue; 305 } 306 else if (StoreInst *SI = dyn_cast<StoreInst>(User)) { 307 // Remember the basic blocks which define new values for the alloca 308 DefiningBlocks.push_back(SI->getParent()); 309 AllocaPointerVal = SI->getOperand(0); 310 OnlyStore = SI; 311 } else { 312 LoadInst *LI = cast<LoadInst>(User); 313 // Otherwise it must be a load instruction, keep track of variable 314 // reads. 315 UsingBlocks.push_back(LI->getParent()); 316 AllocaPointerVal = LI; 317 } 318 319 if (OnlyUsedInOneBlock) { 320 if (OnlyBlock == 0) 321 OnlyBlock = User->getParent(); 322 else if (OnlyBlock != User->getParent()) 323 OnlyUsedInOneBlock = false; 324 } 325 } 326 } 327 }; 328 } // end of anonymous namespace 329 330 331 void PromoteMem2Reg::run() { 332 Function &F = *DF.getRoot()->getParent(); 333 334 if (AST) PointerAllocaValues.resize(Allocas.size()); 335 336 AllocaInfo Info; 337 LargeBlockInfo LBI; 338 339 for (unsigned AllocaNum = 0; AllocaNum != Allocas.size(); ++AllocaNum) { 340 AllocaInst *AI = Allocas[AllocaNum]; 341 342 assert(isAllocaPromotable(AI) && 343 "Cannot promote non-promotable alloca!"); 344 assert(AI->getParent()->getParent() == &F && 345 "All allocas should be in the same function, which is same as DF!"); 346 347 if (AI->use_empty()) { 348 // If there are no uses of the alloca, just delete it now. 349 if (AST) AST->deleteValue(AI); 350 AI->eraseFromParent(); 351 352 // Remove the alloca from the Allocas list, since it has been processed 353 RemoveFromAllocasList(AllocaNum); 354 ++NumDeadAlloca; 355 continue; 356 } 357 358 // Calculate the set of read and write-locations for each alloca. This is 359 // analogous to finding the 'uses' and 'definitions' of each variable. 360 Info.AnalyzeAlloca(AI); 361 362 // If there is only a single store to this value, replace any loads of 363 // it that are directly dominated by the definition with the value stored. 364 if (Info.DefiningBlocks.size() == 1) { 365 RewriteSingleStoreAlloca(AI, Info, LBI); 366 367 // Finally, after the scan, check to see if the store is all that is left. 368 if (Info.UsingBlocks.empty()) { 369 // Remove the (now dead) store and alloca. 370 Info.OnlyStore->eraseFromParent(); 371 LBI.deleteValue(Info.OnlyStore); 372 373 if (AST) AST->deleteValue(AI); 374 AI->eraseFromParent(); 375 LBI.deleteValue(AI); 376 377 // The alloca has been processed, move on. 378 RemoveFromAllocasList(AllocaNum); 379 380 ++NumSingleStore; 381 continue; 382 } 383 } 384 385 // If the alloca is only read and written in one basic block, just perform a 386 // linear sweep over the block to eliminate it. 387 if (Info.OnlyUsedInOneBlock) { 388 PromoteSingleBlockAlloca(AI, Info, LBI); 389 390 // Finally, after the scan, check to see if the stores are all that is 391 // left. 392 if (Info.UsingBlocks.empty()) { 393 394 // Remove the (now dead) stores and alloca. 395 while (!AI->use_empty()) { 396 StoreInst *SI = cast<StoreInst>(AI->use_back()); 397 SI->eraseFromParent(); 398 LBI.deleteValue(SI); 399 } 400 401 if (AST) AST->deleteValue(AI); 402 AI->eraseFromParent(); 403 LBI.deleteValue(AI); 404 405 // The alloca has been processed, move on. 406 RemoveFromAllocasList(AllocaNum); 407 408 ++NumLocalPromoted; 409 continue; 410 } 411 } 412 413 // If we haven't computed a numbering for the BB's in the function, do so 414 // now. 415 if (BBNumbers.empty()) { 416 unsigned ID = 0; 417 for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I) 418 BBNumbers[I] = ID++; 419 } 420 421 // If we have an AST to keep updated, remember some pointer value that is 422 // stored into the alloca. 423 if (AST) 424 PointerAllocaValues[AllocaNum] = Info.AllocaPointerVal; 425 426 // Keep the reverse mapping of the 'Allocas' array for the rename pass. 427 AllocaLookup[Allocas[AllocaNum]] = AllocaNum; 428 429 // At this point, we're committed to promoting the alloca using IDF's, and 430 // the standard SSA construction algorithm. Determine which blocks need PHI 431 // nodes and see if we can optimize out some work by avoiding insertion of 432 // dead phi nodes. 433 DetermineInsertionPoint(AI, AllocaNum, Info); 434 } 435 436 if (Allocas.empty()) 437 return; // All of the allocas must have been trivial! 438 439 LBI.clear(); 440 441 442 // Set the incoming values for the basic block to be null values for all of 443 // the alloca's. We do this in case there is a load of a value that has not 444 // been stored yet. In this case, it will get this null value. 445 // 446 RenamePassData::ValVector Values(Allocas.size()); 447 for (unsigned i = 0, e = Allocas.size(); i != e; ++i) 448 Values[i] = UndefValue::get(Allocas[i]->getAllocatedType()); 449 450 // Walks all basic blocks in the function performing the SSA rename algorithm 451 // and inserting the phi nodes we marked as necessary 452 // 453 std::vector<RenamePassData> RenamePassWorkList; 454 RenamePassWorkList.push_back(RenamePassData(F.begin(), 0, Values)); 455 while (!RenamePassWorkList.empty()) { 456 RenamePassData RPD; 457 RPD.swap(RenamePassWorkList.back()); 458 RenamePassWorkList.pop_back(); 459 // RenamePass may add new worklist entries. 460 RenamePass(RPD.BB, RPD.Pred, RPD.Values, RenamePassWorkList); 461 } 462 463 // The renamer uses the Visited set to avoid infinite loops. Clear it now. 464 Visited.clear(); 465 466 // Remove the allocas themselves from the function. 467 for (unsigned i = 0, e = Allocas.size(); i != e; ++i) { 468 Instruction *A = Allocas[i]; 469 470 // If there are any uses of the alloca instructions left, they must be in 471 // sections of dead code that were not processed on the dominance frontier. 472 // Just delete the users now. 473 // 474 if (!A->use_empty()) 475 A->replaceAllUsesWith(UndefValue::get(A->getType())); 476 if (AST) AST->deleteValue(A); 477 A->eraseFromParent(); 478 } 479 480 481 // Loop over all of the PHI nodes and see if there are any that we can get 482 // rid of because they merge all of the same incoming values. This can 483 // happen due to undef values coming into the PHI nodes. This process is 484 // iterative, because eliminating one PHI node can cause others to be removed. 485 bool EliminatedAPHI = true; 486 while (EliminatedAPHI) { 487 EliminatedAPHI = false; 488 489 for (DenseMap<std::pair<BasicBlock*, unsigned>, PHINode*>::iterator I = 490 NewPhiNodes.begin(), E = NewPhiNodes.end(); I != E;) { 491 PHINode *PN = I->second; 492 493 // If this PHI node merges one value and/or undefs, get the value. 494 if (Value *V = PN->hasConstantValue(true)) { 495 if (!isa<Instruction>(V) || 496 properlyDominates(cast<Instruction>(V), PN)) { 497 if (AST && isa<PointerType>(PN->getType())) 498 AST->deleteValue(PN); 499 PN->replaceAllUsesWith(V); 500 PN->eraseFromParent(); 501 NewPhiNodes.erase(I++); 502 EliminatedAPHI = true; 503 continue; 504 } 505 } 506 ++I; 507 } 508 } 509 510 // At this point, the renamer has added entries to PHI nodes for all reachable 511 // code. Unfortunately, there may be unreachable blocks which the renamer 512 // hasn't traversed. If this is the case, the PHI nodes may not 513 // have incoming values for all predecessors. Loop over all PHI nodes we have 514 // created, inserting undef values if they are missing any incoming values. 515 // 516 for (DenseMap<std::pair<BasicBlock*, unsigned>, PHINode*>::iterator I = 517 NewPhiNodes.begin(), E = NewPhiNodes.end(); I != E; ++I) { 518 // We want to do this once per basic block. As such, only process a block 519 // when we find the PHI that is the first entry in the block. 520 PHINode *SomePHI = I->second; 521 BasicBlock *BB = SomePHI->getParent(); 522 if (&BB->front() != SomePHI) 523 continue; 524 525 // Only do work here if there the PHI nodes are missing incoming values. We 526 // know that all PHI nodes that were inserted in a block will have the same 527 // number of incoming values, so we can just check any of them. 528 if (SomePHI->getNumIncomingValues() == getNumPreds(BB)) 529 continue; 530 531 // Get the preds for BB. 532 SmallVector<BasicBlock*, 16> Preds(pred_begin(BB), pred_end(BB)); 533 534 // Ok, now we know that all of the PHI nodes are missing entries for some 535 // basic blocks. Start by sorting the incoming predecessors for efficient 536 // access. 537 std::sort(Preds.begin(), Preds.end()); 538 539 // Now we loop through all BB's which have entries in SomePHI and remove 540 // them from the Preds list. 541 for (unsigned i = 0, e = SomePHI->getNumIncomingValues(); i != e; ++i) { 542 // Do a log(n) search of the Preds list for the entry we want. 543 SmallVector<BasicBlock*, 16>::iterator EntIt = 544 std::lower_bound(Preds.begin(), Preds.end(), 545 SomePHI->getIncomingBlock(i)); 546 assert(EntIt != Preds.end() && *EntIt == SomePHI->getIncomingBlock(i)&& 547 "PHI node has entry for a block which is not a predecessor!"); 548 549 // Remove the entry 550 Preds.erase(EntIt); 551 } 552 553 // At this point, the blocks left in the preds list must have dummy 554 // entries inserted into every PHI nodes for the block. Update all the phi 555 // nodes in this block that we are inserting (there could be phis before 556 // mem2reg runs). 557 unsigned NumBadPreds = SomePHI->getNumIncomingValues(); 558 BasicBlock::iterator BBI = BB->begin(); 559 while ((SomePHI = dyn_cast<PHINode>(BBI++)) && 560 SomePHI->getNumIncomingValues() == NumBadPreds) { 561 Value *UndefVal = UndefValue::get(SomePHI->getType()); 562 for (unsigned pred = 0, e = Preds.size(); pred != e; ++pred) 563 SomePHI->addIncoming(UndefVal, Preds[pred]); 564 } 565 } 566 567 NewPhiNodes.clear(); 568 } 569 570 571 /// ComputeLiveInBlocks - Determine which blocks the value is live in. These 572 /// are blocks which lead to uses. Knowing this allows us to avoid inserting 573 /// PHI nodes into blocks which don't lead to uses (thus, the inserted phi nodes 574 /// would be dead). 575 void PromoteMem2Reg:: 576 ComputeLiveInBlocks(AllocaInst *AI, AllocaInfo &Info, 577 const SmallPtrSet<BasicBlock*, 32> &DefBlocks, 578 SmallPtrSet<BasicBlock*, 32> &LiveInBlocks) { 579 580 // To determine liveness, we must iterate through the predecessors of blocks 581 // where the def is live. Blocks are added to the worklist if we need to 582 // check their predecessors. Start with all the using blocks. 583 SmallVector<BasicBlock*, 64> LiveInBlockWorklist; 584 LiveInBlockWorklist.insert(LiveInBlockWorklist.end(), 585 Info.UsingBlocks.begin(), Info.UsingBlocks.end()); 586 587 // If any of the using blocks is also a definition block, check to see if the 588 // definition occurs before or after the use. If it happens before the use, 589 // the value isn't really live-in. 590 for (unsigned i = 0, e = LiveInBlockWorklist.size(); i != e; ++i) { 591 BasicBlock *BB = LiveInBlockWorklist[i]; 592 if (!DefBlocks.count(BB)) continue; 593 594 // Okay, this is a block that both uses and defines the value. If the first 595 // reference to the alloca is a def (store), then we know it isn't live-in. 596 for (BasicBlock::iterator I = BB->begin(); ; ++I) { 597 if (StoreInst *SI = dyn_cast<StoreInst>(I)) { 598 if (SI->getOperand(1) != AI) continue; 599 600 // We found a store to the alloca before a load. The alloca is not 601 // actually live-in here. 602 LiveInBlockWorklist[i] = LiveInBlockWorklist.back(); 603 LiveInBlockWorklist.pop_back(); 604 --i, --e; 605 break; 606 } else if (LoadInst *LI = dyn_cast<LoadInst>(I)) { 607 if (LI->getOperand(0) != AI) continue; 608 609 // Okay, we found a load before a store to the alloca. It is actually 610 // live into this block. 611 break; 612 } 613 } 614 } 615 616 // Now that we have a set of blocks where the phi is live-in, recursively add 617 // their predecessors until we find the full region the value is live. 618 while (!LiveInBlockWorklist.empty()) { 619 BasicBlock *BB = LiveInBlockWorklist.pop_back_val(); 620 621 // The block really is live in here, insert it into the set. If already in 622 // the set, then it has already been processed. 623 if (!LiveInBlocks.insert(BB)) 624 continue; 625 626 // Since the value is live into BB, it is either defined in a predecessor or 627 // live into it to. Add the preds to the worklist unless they are a 628 // defining block. 629 for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) { 630 BasicBlock *P = *PI; 631 632 // The value is not live into a predecessor if it defines the value. 633 if (DefBlocks.count(P)) 634 continue; 635 636 // Otherwise it is, add to the worklist. 637 LiveInBlockWorklist.push_back(P); 638 } 639 } 640 } 641 642 /// DetermineInsertionPoint - At this point, we're committed to promoting the 643 /// alloca using IDF's, and the standard SSA construction algorithm. Determine 644 /// which blocks need phi nodes and see if we can optimize out some work by 645 /// avoiding insertion of dead phi nodes. 646 void PromoteMem2Reg::DetermineInsertionPoint(AllocaInst *AI, unsigned AllocaNum, 647 AllocaInfo &Info) { 648 649 // Unique the set of defining blocks for efficient lookup. 650 SmallPtrSet<BasicBlock*, 32> DefBlocks; 651 DefBlocks.insert(Info.DefiningBlocks.begin(), Info.DefiningBlocks.end()); 652 653 // Determine which blocks the value is live in. These are blocks which lead 654 // to uses. 655 SmallPtrSet<BasicBlock*, 32> LiveInBlocks; 656 ComputeLiveInBlocks(AI, Info, DefBlocks, LiveInBlocks); 657 658 // Compute the locations where PhiNodes need to be inserted. Look at the 659 // dominance frontier of EACH basic-block we have a write in. 660 unsigned CurrentVersion = 0; 661 SmallPtrSet<PHINode*, 16> InsertedPHINodes; 662 std::vector<std::pair<unsigned, BasicBlock*> > DFBlocks; 663 while (!Info.DefiningBlocks.empty()) { 664 BasicBlock *BB = Info.DefiningBlocks.back(); 665 Info.DefiningBlocks.pop_back(); 666 667 // Look up the DF for this write, add it to defining blocks. 668 DominanceFrontier::const_iterator it = DF.find(BB); 669 if (it == DF.end()) continue; 670 671 const DominanceFrontier::DomSetType &S = it->second; 672 673 // In theory we don't need the indirection through the DFBlocks vector. 674 // In practice, the order of calling QueuePhiNode would depend on the 675 // (unspecified) ordering of basic blocks in the dominance frontier, 676 // which would give PHI nodes non-determinstic subscripts. Fix this by 677 // processing blocks in order of the occurance in the function. 678 for (DominanceFrontier::DomSetType::const_iterator P = S.begin(), 679 PE = S.end(); P != PE; ++P) { 680 // If the frontier block is not in the live-in set for the alloca, don't 681 // bother processing it. 682 if (!LiveInBlocks.count(*P)) 683 continue; 684 685 DFBlocks.push_back(std::make_pair(BBNumbers[*P], *P)); 686 } 687 688 // Sort by which the block ordering in the function. 689 if (DFBlocks.size() > 1) 690 std::sort(DFBlocks.begin(), DFBlocks.end()); 691 692 for (unsigned i = 0, e = DFBlocks.size(); i != e; ++i) { 693 BasicBlock *BB = DFBlocks[i].second; 694 if (QueuePhiNode(BB, AllocaNum, CurrentVersion, InsertedPHINodes)) 695 Info.DefiningBlocks.push_back(BB); 696 } 697 DFBlocks.clear(); 698 } 699 } 700 701 /// RewriteSingleStoreAlloca - If there is only a single store to this value, 702 /// replace any loads of it that are directly dominated by the definition with 703 /// the value stored. 704 void PromoteMem2Reg::RewriteSingleStoreAlloca(AllocaInst *AI, 705 AllocaInfo &Info, 706 LargeBlockInfo &LBI) { 707 StoreInst *OnlyStore = Info.OnlyStore; 708 bool StoringGlobalVal = !isa<Instruction>(OnlyStore->getOperand(0)); 709 BasicBlock *StoreBB = OnlyStore->getParent(); 710 int StoreIndex = -1; 711 712 // Clear out UsingBlocks. We will reconstruct it here if needed. 713 Info.UsingBlocks.clear(); 714 715 for (Value::use_iterator UI = AI->use_begin(), E = AI->use_end(); UI != E; ) { 716 Instruction *UserInst = cast<Instruction>(*UI++); 717 if (!isa<LoadInst>(UserInst)) { 718 assert(UserInst == OnlyStore && "Should only have load/stores"); 719 continue; 720 } 721 LoadInst *LI = cast<LoadInst>(UserInst); 722 723 // Okay, if we have a load from the alloca, we want to replace it with the 724 // only value stored to the alloca. We can do this if the value is 725 // dominated by the store. If not, we use the rest of the mem2reg machinery 726 // to insert the phi nodes as needed. 727 if (!StoringGlobalVal) { // Non-instructions are always dominated. 728 if (LI->getParent() == StoreBB) { 729 // If we have a use that is in the same block as the store, compare the 730 // indices of the two instructions to see which one came first. If the 731 // load came before the store, we can't handle it. 732 if (StoreIndex == -1) 733 StoreIndex = LBI.getInstructionIndex(OnlyStore); 734 735 if (unsigned(StoreIndex) > LBI.getInstructionIndex(LI)) { 736 // Can't handle this load, bail out. 737 Info.UsingBlocks.push_back(StoreBB); 738 continue; 739 } 740 741 } else if (LI->getParent() != StoreBB && 742 !dominates(StoreBB, LI->getParent())) { 743 // If the load and store are in different blocks, use BB dominance to 744 // check their relationships. If the store doesn't dom the use, bail 745 // out. 746 Info.UsingBlocks.push_back(LI->getParent()); 747 continue; 748 } 749 } 750 751 // Otherwise, we *can* safely rewrite this load. 752 LI->replaceAllUsesWith(OnlyStore->getOperand(0)); 753 if (AST && isa<PointerType>(LI->getType())) 754 AST->deleteValue(LI); 755 LI->eraseFromParent(); 756 LBI.deleteValue(LI); 757 } 758 } 759 760 761 /// StoreIndexSearchPredicate - This is a helper predicate used to search by the 762 /// first element of a pair. 763 struct StoreIndexSearchPredicate { 764 bool operator()(const std::pair<unsigned, StoreInst*> &LHS, 765 const std::pair<unsigned, StoreInst*> &RHS) { 766 return LHS.first < RHS.first; 767 } 768 }; 769 770 /// PromoteSingleBlockAlloca - Many allocas are only used within a single basic 771 /// block. If this is the case, avoid traversing the CFG and inserting a lot of 772 /// potentially useless PHI nodes by just performing a single linear pass over 773 /// the basic block using the Alloca. 774 /// 775 /// If we cannot promote this alloca (because it is read before it is written), 776 /// return true. This is necessary in cases where, due to control flow, the 777 /// alloca is potentially undefined on some control flow paths. e.g. code like 778 /// this is potentially correct: 779 /// 780 /// for (...) { if (c) { A = undef; undef = B; } } 781 /// 782 /// ... so long as A is not used before undef is set. 783 /// 784 void PromoteMem2Reg::PromoteSingleBlockAlloca(AllocaInst *AI, AllocaInfo &Info, 785 LargeBlockInfo &LBI) { 786 // The trickiest case to handle is when we have large blocks. Because of this, 787 // this code is optimized assuming that large blocks happen. This does not 788 // significantly pessimize the small block case. This uses LargeBlockInfo to 789 // make it efficient to get the index of various operations in the block. 790 791 // Clear out UsingBlocks. We will reconstruct it here if needed. 792 Info.UsingBlocks.clear(); 793 794 // Walk the use-def list of the alloca, getting the locations of all stores. 795 typedef SmallVector<std::pair<unsigned, StoreInst*>, 64> StoresByIndexTy; 796 StoresByIndexTy StoresByIndex; 797 798 for (Value::use_iterator UI = AI->use_begin(), E = AI->use_end(); 799 UI != E; ++UI) 800 if (StoreInst *SI = dyn_cast<StoreInst>(*UI)) 801 StoresByIndex.push_back(std::make_pair(LBI.getInstructionIndex(SI), SI)); 802 803 // If there are no stores to the alloca, just replace any loads with undef. 804 if (StoresByIndex.empty()) { 805 for (Value::use_iterator UI = AI->use_begin(), E = AI->use_end(); UI != E;) 806 if (LoadInst *LI = dyn_cast<LoadInst>(*UI++)) { 807 LI->replaceAllUsesWith(UndefValue::get(LI->getType())); 808 if (AST && isa<PointerType>(LI->getType())) 809 AST->deleteValue(LI); 810 LBI.deleteValue(LI); 811 LI->eraseFromParent(); 812 } 813 return; 814 } 815 816 // Sort the stores by their index, making it efficient to do a lookup with a 817 // binary search. 818 std::sort(StoresByIndex.begin(), StoresByIndex.end()); 819 820 // Walk all of the loads from this alloca, replacing them with the nearest 821 // store above them, if any. 822 for (Value::use_iterator UI = AI->use_begin(), E = AI->use_end(); UI != E;) { 823 LoadInst *LI = dyn_cast<LoadInst>(*UI++); 824 if (!LI) continue; 825 826 unsigned LoadIdx = LBI.getInstructionIndex(LI); 827 828 // Find the nearest store that has a lower than this load. 829 StoresByIndexTy::iterator I = 830 std::lower_bound(StoresByIndex.begin(), StoresByIndex.end(), 831 std::pair<unsigned, StoreInst*>(LoadIdx, 0), 832 StoreIndexSearchPredicate()); 833 834 // If there is no store before this load, then we can't promote this load. 835 if (I == StoresByIndex.begin()) { 836 // Can't handle this load, bail out. 837 Info.UsingBlocks.push_back(LI->getParent()); 838 continue; 839 } 840 841 // Otherwise, there was a store before this load, the load takes its value. 842 --I; 843 LI->replaceAllUsesWith(I->second->getOperand(0)); 844 if (AST && isa<PointerType>(LI->getType())) 845 AST->deleteValue(LI); 846 LI->eraseFromParent(); 847 LBI.deleteValue(LI); 848 } 849 } 850 851 852 // QueuePhiNode - queues a phi-node to be added to a basic-block for a specific 853 // Alloca returns true if there wasn't already a phi-node for that variable 854 // 855 bool PromoteMem2Reg::QueuePhiNode(BasicBlock *BB, unsigned AllocaNo, 856 unsigned &Version, 857 SmallPtrSet<PHINode*, 16> &InsertedPHINodes) { 858 // Look up the basic-block in question. 859 PHINode *&PN = NewPhiNodes[std::make_pair(BB, AllocaNo)]; 860 861 // If the BB already has a phi node added for the i'th alloca then we're done! 862 if (PN) return false; 863 864 // Create a PhiNode using the dereferenced type... and add the phi-node to the 865 // BasicBlock. 866 PN = PHINode::Create(Allocas[AllocaNo]->getAllocatedType(), 867 Allocas[AllocaNo]->getName() + "." + 868 utostr(Version++), BB->begin()); 869 ++NumPHIInsert; 870 PhiToAllocaMap[PN] = AllocaNo; 871 PN->reserveOperandSpace(getNumPreds(BB)); 872 873 InsertedPHINodes.insert(PN); 874 875 if (AST && isa<PointerType>(PN->getType())) 876 AST->copyValue(PointerAllocaValues[AllocaNo], PN); 877 878 return true; 879 } 880 881 // RenamePass - Recursively traverse the CFG of the function, renaming loads and 882 // stores to the allocas which we are promoting. IncomingVals indicates what 883 // value each Alloca contains on exit from the predecessor block Pred. 884 // 885 void PromoteMem2Reg::RenamePass(BasicBlock *BB, BasicBlock *Pred, 886 RenamePassData::ValVector &IncomingVals, 887 std::vector<RenamePassData> &Worklist) { 888 NextIteration: 889 // If we are inserting any phi nodes into this BB, they will already be in the 890 // block. 891 if (PHINode *APN = dyn_cast<PHINode>(BB->begin())) { 892 // If we have PHI nodes to update, compute the number of edges from Pred to 893 // BB. 894 if (PhiToAllocaMap.count(APN)) { 895 // We want to be able to distinguish between PHI nodes being inserted by 896 // this invocation of mem2reg from those phi nodes that already existed in 897 // the IR before mem2reg was run. We determine that APN is being inserted 898 // because it is missing incoming edges. All other PHI nodes being 899 // inserted by this pass of mem2reg will have the same number of incoming 900 // operands so far. Remember this count. 901 unsigned NewPHINumOperands = APN->getNumOperands(); 902 903 unsigned NumEdges = 0; 904 for (succ_iterator I = succ_begin(Pred), E = succ_end(Pred); I != E; ++I) 905 if (*I == BB) 906 ++NumEdges; 907 assert(NumEdges && "Must be at least one edge from Pred to BB!"); 908 909 // Add entries for all the phis. 910 BasicBlock::iterator PNI = BB->begin(); 911 do { 912 unsigned AllocaNo = PhiToAllocaMap[APN]; 913 914 // Add N incoming values to the PHI node. 915 for (unsigned i = 0; i != NumEdges; ++i) 916 APN->addIncoming(IncomingVals[AllocaNo], Pred); 917 918 // The currently active variable for this block is now the PHI. 919 IncomingVals[AllocaNo] = APN; 920 921 // Get the next phi node. 922 ++PNI; 923 APN = dyn_cast<PHINode>(PNI); 924 if (APN == 0) break; 925 926 // Verify that it is missing entries. If not, it is not being inserted 927 // by this mem2reg invocation so we want to ignore it. 928 } while (APN->getNumOperands() == NewPHINumOperands); 929 } 930 } 931 932 // Don't revisit blocks. 933 if (!Visited.insert(BB)) return; 934 935 for (BasicBlock::iterator II = BB->begin(); !isa<TerminatorInst>(II); ) { 936 Instruction *I = II++; // get the instruction, increment iterator 937 938 if (LoadInst *LI = dyn_cast<LoadInst>(I)) { 939 AllocaInst *Src = dyn_cast<AllocaInst>(LI->getPointerOperand()); 940 if (!Src) continue; 941 942 std::map<AllocaInst*, unsigned>::iterator AI = AllocaLookup.find(Src); 943 if (AI == AllocaLookup.end()) continue; 944 945 Value *V = IncomingVals[AI->second]; 946 947 // Anything using the load now uses the current value. 948 LI->replaceAllUsesWith(V); 949 if (AST && isa<PointerType>(LI->getType())) 950 AST->deleteValue(LI); 951 BB->getInstList().erase(LI); 952 } else if (StoreInst *SI = dyn_cast<StoreInst>(I)) { 953 // Delete this instruction and mark the name as the current holder of the 954 // value 955 AllocaInst *Dest = dyn_cast<AllocaInst>(SI->getPointerOperand()); 956 if (!Dest) continue; 957 958 std::map<AllocaInst *, unsigned>::iterator ai = AllocaLookup.find(Dest); 959 if (ai == AllocaLookup.end()) 960 continue; 961 962 // what value were we writing? 963 IncomingVals[ai->second] = SI->getOperand(0); 964 BB->getInstList().erase(SI); 965 } 966 } 967 968 // 'Recurse' to our successors. 969 succ_iterator I = succ_begin(BB), E = succ_end(BB); 970 if (I == E) return; 971 972 // Keep track of the successors so we don't visit the same successor twice 973 SmallPtrSet<BasicBlock*, 8> VisitedSuccs; 974 975 // Handle the first successor without using the worklist. 976 VisitedSuccs.insert(*I); 977 Pred = BB; 978 BB = *I; 979 ++I; 980 981 for (; I != E; ++I) 982 if (VisitedSuccs.insert(*I)) 983 Worklist.push_back(RenamePassData(*I, Pred, IncomingVals)); 984 985 goto NextIteration; 986 } 987 988 /// PromoteMemToReg - Promote the specified list of alloca instructions into 989 /// scalar registers, inserting PHI nodes as appropriate. This function makes 990 /// use of DominanceFrontier information. This function does not modify the CFG 991 /// of the function at all. All allocas must be from the same function. 992 /// 993 /// If AST is specified, the specified tracker is updated to reflect changes 994 /// made to the IR. 995 /// 996 void llvm::PromoteMemToReg(const std::vector<AllocaInst*> &Allocas, 997 DominatorTree &DT, DominanceFrontier &DF, 998 AliasSetTracker *AST) { 999 // If there is nothing to do, bail out... 1000 if (Allocas.empty()) return; 1001 1002 PromoteMem2Reg(Allocas, DT, DF, AST).run(); 1003 } 1004