1 //===- BasicBlockUtils.cpp - BasicBlock Utilities --------------------------==// 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 family of functions perform manipulations on basic blocks, and 11 // instructions contained within basic blocks. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #include "llvm/Transforms/Utils/BasicBlockUtils.h" 16 #include "llvm/ADT/ArrayRef.h" 17 #include "llvm/ADT/SmallPtrSet.h" 18 #include "llvm/ADT/SmallVector.h" 19 #include "llvm/ADT/Twine.h" 20 #include "llvm/Analysis/CFG.h" 21 #include "llvm/Analysis/LoopInfo.h" 22 #include "llvm/Analysis/MemoryDependenceAnalysis.h" 23 #include "llvm/Analysis/MemorySSAUpdater.h" 24 #include "llvm/Analysis/PostDominators.h" 25 #include "llvm/IR/BasicBlock.h" 26 #include "llvm/IR/CFG.h" 27 #include "llvm/IR/Constants.h" 28 #include "llvm/IR/DebugInfoMetadata.h" 29 #include "llvm/IR/DomTreeUpdater.h" 30 #include "llvm/IR/Dominators.h" 31 #include "llvm/IR/Function.h" 32 #include "llvm/IR/InstrTypes.h" 33 #include "llvm/IR/Instruction.h" 34 #include "llvm/IR/Instructions.h" 35 #include "llvm/IR/IntrinsicInst.h" 36 #include "llvm/IR/LLVMContext.h" 37 #include "llvm/IR/Type.h" 38 #include "llvm/IR/User.h" 39 #include "llvm/IR/Value.h" 40 #include "llvm/IR/ValueHandle.h" 41 #include "llvm/Support/Casting.h" 42 #include "llvm/Transforms/Utils/Local.h" 43 #include <cassert> 44 #include <cstdint> 45 #include <string> 46 #include <utility> 47 #include <vector> 48 49 using namespace llvm; 50 51 void llvm::DeleteDeadBlock(BasicBlock *BB, DomTreeUpdater *DTU) { 52 SmallVector<BasicBlock *, 1> BBs = {BB}; 53 DeleteDeadBlocks(BBs, DTU); 54 } 55 56 void llvm::DeleteDeadBlocks(SmallVectorImpl <BasicBlock *> &BBs, 57 DomTreeUpdater *DTU) { 58 #ifndef NDEBUG 59 // Make sure that all predecessors of each dead block is also dead. 60 SmallPtrSet<BasicBlock *, 4> Dead(BBs.begin(), BBs.end()); 61 assert(Dead.size() == BBs.size() && "Duplicating blocks?"); 62 for (auto *BB : Dead) 63 for (BasicBlock *Pred : predecessors(BB)) 64 assert(Dead.count(Pred) && "All predecessors must be dead!"); 65 #endif 66 67 SmallVector<DominatorTree::UpdateType, 4> Updates; 68 for (auto *BB : BBs) { 69 // Loop through all of our successors and make sure they know that one 70 // of their predecessors is going away. 71 for (BasicBlock *Succ : successors(BB)) { 72 Succ->removePredecessor(BB); 73 if (DTU) 74 Updates.push_back({DominatorTree::Delete, BB, Succ}); 75 } 76 77 // Zap all the instructions in the block. 78 while (!BB->empty()) { 79 Instruction &I = BB->back(); 80 // If this instruction is used, replace uses with an arbitrary value. 81 // Because control flow can't get here, we don't care what we replace the 82 // value with. Note that since this block is unreachable, and all values 83 // contained within it must dominate their uses, that all uses will 84 // eventually be removed (they are themselves dead). 85 if (!I.use_empty()) 86 I.replaceAllUsesWith(UndefValue::get(I.getType())); 87 BB->getInstList().pop_back(); 88 } 89 new UnreachableInst(BB->getContext(), BB); 90 assert(BB->getInstList().size() == 1 && 91 isa<UnreachableInst>(BB->getTerminator()) && 92 "The successor list of BB isn't empty before " 93 "applying corresponding DTU updates."); 94 } 95 if (DTU) 96 DTU->applyUpdates(Updates, /*ForceRemoveDuplicates*/ true); 97 98 for (BasicBlock *BB : BBs) 99 if (DTU) 100 DTU->deleteBB(BB); 101 else 102 BB->eraseFromParent(); 103 } 104 105 void llvm::FoldSingleEntryPHINodes(BasicBlock *BB, 106 MemoryDependenceResults *MemDep) { 107 if (!isa<PHINode>(BB->begin())) return; 108 109 while (PHINode *PN = dyn_cast<PHINode>(BB->begin())) { 110 if (PN->getIncomingValue(0) != PN) 111 PN->replaceAllUsesWith(PN->getIncomingValue(0)); 112 else 113 PN->replaceAllUsesWith(UndefValue::get(PN->getType())); 114 115 if (MemDep) 116 MemDep->removeInstruction(PN); // Memdep updates AA itself. 117 118 PN->eraseFromParent(); 119 } 120 } 121 122 bool llvm::DeleteDeadPHIs(BasicBlock *BB, const TargetLibraryInfo *TLI) { 123 // Recursively deleting a PHI may cause multiple PHIs to be deleted 124 // or RAUW'd undef, so use an array of WeakTrackingVH for the PHIs to delete. 125 SmallVector<WeakTrackingVH, 8> PHIs; 126 for (PHINode &PN : BB->phis()) 127 PHIs.push_back(&PN); 128 129 bool Changed = false; 130 for (unsigned i = 0, e = PHIs.size(); i != e; ++i) 131 if (PHINode *PN = dyn_cast_or_null<PHINode>(PHIs[i].operator Value*())) 132 Changed |= RecursivelyDeleteDeadPHINode(PN, TLI); 133 134 return Changed; 135 } 136 137 bool llvm::MergeBlockIntoPredecessor(BasicBlock *BB, DomTreeUpdater *DTU, 138 LoopInfo *LI, MemorySSAUpdater *MSSAU, 139 MemoryDependenceResults *MemDep) { 140 if (BB->hasAddressTaken()) 141 return false; 142 143 // Can't merge if there are multiple predecessors, or no predecessors. 144 BasicBlock *PredBB = BB->getUniquePredecessor(); 145 if (!PredBB) return false; 146 147 // Don't break self-loops. 148 if (PredBB == BB) return false; 149 // Don't break unwinding instructions. 150 if (PredBB->getTerminator()->isExceptionalTerminator()) 151 return false; 152 153 // Can't merge if there are multiple distinct successors. 154 if (PredBB->getUniqueSuccessor() != BB) 155 return false; 156 157 // Can't merge if there is PHI loop. 158 for (PHINode &PN : BB->phis()) 159 for (Value *IncValue : PN.incoming_values()) 160 if (IncValue == &PN) 161 return false; 162 163 // Begin by getting rid of unneeded PHIs. 164 SmallVector<AssertingVH<Value>, 4> IncomingValues; 165 if (isa<PHINode>(BB->front())) { 166 for (PHINode &PN : BB->phis()) 167 if (!isa<PHINode>(PN.getIncomingValue(0)) || 168 cast<PHINode>(PN.getIncomingValue(0))->getParent() != BB) 169 IncomingValues.push_back(PN.getIncomingValue(0)); 170 FoldSingleEntryPHINodes(BB, MemDep); 171 } 172 173 // DTU update: Collect all the edges that exit BB. 174 // These dominator edges will be redirected from Pred. 175 std::vector<DominatorTree::UpdateType> Updates; 176 if (DTU) { 177 Updates.reserve(1 + (2 * succ_size(BB))); 178 Updates.push_back({DominatorTree::Delete, PredBB, BB}); 179 for (auto I = succ_begin(BB), E = succ_end(BB); I != E; ++I) { 180 Updates.push_back({DominatorTree::Delete, BB, *I}); 181 Updates.push_back({DominatorTree::Insert, PredBB, *I}); 182 } 183 } 184 185 if (MSSAU) 186 MSSAU->moveAllAfterMergeBlocks(BB, PredBB, &*(BB->begin())); 187 188 // Delete the unconditional branch from the predecessor... 189 PredBB->getInstList().pop_back(); 190 191 // Make all PHI nodes that referred to BB now refer to Pred as their 192 // source... 193 BB->replaceAllUsesWith(PredBB); 194 195 // Move all definitions in the successor to the predecessor... 196 PredBB->getInstList().splice(PredBB->end(), BB->getInstList()); 197 new UnreachableInst(BB->getContext(), BB); 198 199 // Eliminate duplicate dbg.values describing the entry PHI node post-splice. 200 for (auto Incoming : IncomingValues) { 201 if (isa<Instruction>(*Incoming)) { 202 SmallVector<DbgValueInst *, 2> DbgValues; 203 SmallDenseSet<std::pair<DILocalVariable *, DIExpression *>, 2> 204 DbgValueSet; 205 llvm::findDbgValues(DbgValues, Incoming); 206 for (auto &DVI : DbgValues) { 207 auto R = DbgValueSet.insert({DVI->getVariable(), DVI->getExpression()}); 208 if (!R.second) 209 DVI->eraseFromParent(); 210 } 211 } 212 } 213 214 // Inherit predecessors name if it exists. 215 if (!PredBB->hasName()) 216 PredBB->takeName(BB); 217 218 if (LI) 219 LI->removeBlock(BB); 220 221 if (MemDep) 222 MemDep->invalidateCachedPredecessors(); 223 224 // Finally, erase the old block and update dominator info. 225 if (DTU) { 226 assert(BB->getInstList().size() == 1 && 227 isa<UnreachableInst>(BB->getTerminator()) && 228 "The successor list of BB isn't empty before " 229 "applying corresponding DTU updates."); 230 DTU->applyUpdates(Updates, /*ForceRemoveDuplicates*/ true); 231 DTU->deleteBB(BB); 232 } 233 234 else { 235 BB->eraseFromParent(); // Nuke BB if DTU is nullptr. 236 } 237 return true; 238 } 239 240 void llvm::ReplaceInstWithValue(BasicBlock::InstListType &BIL, 241 BasicBlock::iterator &BI, Value *V) { 242 Instruction &I = *BI; 243 // Replaces all of the uses of the instruction with uses of the value 244 I.replaceAllUsesWith(V); 245 246 // Make sure to propagate a name if there is one already. 247 if (I.hasName() && !V->hasName()) 248 V->takeName(&I); 249 250 // Delete the unnecessary instruction now... 251 BI = BIL.erase(BI); 252 } 253 254 void llvm::ReplaceInstWithInst(BasicBlock::InstListType &BIL, 255 BasicBlock::iterator &BI, Instruction *I) { 256 assert(I->getParent() == nullptr && 257 "ReplaceInstWithInst: Instruction already inserted into basic block!"); 258 259 // Copy debug location to newly added instruction, if it wasn't already set 260 // by the caller. 261 if (!I->getDebugLoc()) 262 I->setDebugLoc(BI->getDebugLoc()); 263 264 // Insert the new instruction into the basic block... 265 BasicBlock::iterator New = BIL.insert(BI, I); 266 267 // Replace all uses of the old instruction, and delete it. 268 ReplaceInstWithValue(BIL, BI, I); 269 270 // Move BI back to point to the newly inserted instruction 271 BI = New; 272 } 273 274 void llvm::ReplaceInstWithInst(Instruction *From, Instruction *To) { 275 BasicBlock::iterator BI(From); 276 ReplaceInstWithInst(From->getParent()->getInstList(), BI, To); 277 } 278 279 BasicBlock *llvm::SplitEdge(BasicBlock *BB, BasicBlock *Succ, DominatorTree *DT, 280 LoopInfo *LI, MemorySSAUpdater *MSSAU) { 281 unsigned SuccNum = GetSuccessorNumber(BB, Succ); 282 283 // If this is a critical edge, let SplitCriticalEdge do it. 284 Instruction *LatchTerm = BB->getTerminator(); 285 if (SplitCriticalEdge( 286 LatchTerm, SuccNum, 287 CriticalEdgeSplittingOptions(DT, LI, MSSAU).setPreserveLCSSA())) 288 return LatchTerm->getSuccessor(SuccNum); 289 290 // If the edge isn't critical, then BB has a single successor or Succ has a 291 // single pred. Split the block. 292 if (BasicBlock *SP = Succ->getSinglePredecessor()) { 293 // If the successor only has a single pred, split the top of the successor 294 // block. 295 assert(SP == BB && "CFG broken"); 296 SP = nullptr; 297 return SplitBlock(Succ, &Succ->front(), DT, LI, MSSAU); 298 } 299 300 // Otherwise, if BB has a single successor, split it at the bottom of the 301 // block. 302 assert(BB->getTerminator()->getNumSuccessors() == 1 && 303 "Should have a single succ!"); 304 return SplitBlock(BB, BB->getTerminator(), DT, LI, MSSAU); 305 } 306 307 unsigned 308 llvm::SplitAllCriticalEdges(Function &F, 309 const CriticalEdgeSplittingOptions &Options) { 310 unsigned NumBroken = 0; 311 for (BasicBlock &BB : F) { 312 Instruction *TI = BB.getTerminator(); 313 if (TI->getNumSuccessors() > 1 && !isa<IndirectBrInst>(TI)) 314 for (unsigned i = 0, e = TI->getNumSuccessors(); i != e; ++i) 315 if (SplitCriticalEdge(TI, i, Options)) 316 ++NumBroken; 317 } 318 return NumBroken; 319 } 320 321 BasicBlock *llvm::SplitBlock(BasicBlock *Old, Instruction *SplitPt, 322 DominatorTree *DT, LoopInfo *LI, 323 MemorySSAUpdater *MSSAU) { 324 BasicBlock::iterator SplitIt = SplitPt->getIterator(); 325 while (isa<PHINode>(SplitIt) || SplitIt->isEHPad()) 326 ++SplitIt; 327 BasicBlock *New = Old->splitBasicBlock(SplitIt, Old->getName()+".split"); 328 329 // The new block lives in whichever loop the old one did. This preserves 330 // LCSSA as well, because we force the split point to be after any PHI nodes. 331 if (LI) 332 if (Loop *L = LI->getLoopFor(Old)) 333 L->addBasicBlockToLoop(New, *LI); 334 335 if (DT) 336 // Old dominates New. New node dominates all other nodes dominated by Old. 337 if (DomTreeNode *OldNode = DT->getNode(Old)) { 338 std::vector<DomTreeNode *> Children(OldNode->begin(), OldNode->end()); 339 340 DomTreeNode *NewNode = DT->addNewBlock(New, Old); 341 for (DomTreeNode *I : Children) 342 DT->changeImmediateDominator(I, NewNode); 343 } 344 345 // Move MemoryAccesses still tracked in Old, but part of New now. 346 // Update accesses in successor blocks accordingly. 347 if (MSSAU) 348 MSSAU->moveAllAfterSpliceBlocks(Old, New, &*(New->begin())); 349 350 return New; 351 } 352 353 /// Update DominatorTree, LoopInfo, and LCCSA analysis information. 354 static void UpdateAnalysisInformation(BasicBlock *OldBB, BasicBlock *NewBB, 355 ArrayRef<BasicBlock *> Preds, 356 DominatorTree *DT, LoopInfo *LI, 357 MemorySSAUpdater *MSSAU, 358 bool PreserveLCSSA, bool &HasLoopExit) { 359 // Update dominator tree if available. 360 if (DT) { 361 if (OldBB == DT->getRootNode()->getBlock()) { 362 assert(NewBB == &NewBB->getParent()->getEntryBlock()); 363 DT->setNewRoot(NewBB); 364 } else { 365 // Split block expects NewBB to have a non-empty set of predecessors. 366 DT->splitBlock(NewBB); 367 } 368 } 369 370 // Update MemoryPhis after split if MemorySSA is available 371 if (MSSAU) 372 MSSAU->wireOldPredecessorsToNewImmediatePredecessor(OldBB, NewBB, Preds); 373 374 // The rest of the logic is only relevant for updating the loop structures. 375 if (!LI) 376 return; 377 378 assert(DT && "DT should be available to update LoopInfo!"); 379 Loop *L = LI->getLoopFor(OldBB); 380 381 // If we need to preserve loop analyses, collect some information about how 382 // this split will affect loops. 383 bool IsLoopEntry = !!L; 384 bool SplitMakesNewLoopHeader = false; 385 for (BasicBlock *Pred : Preds) { 386 // Preds that are not reachable from entry should not be used to identify if 387 // OldBB is a loop entry or if SplitMakesNewLoopHeader. Unreachable blocks 388 // are not within any loops, so we incorrectly mark SplitMakesNewLoopHeader 389 // as true and make the NewBB the header of some loop. This breaks LI. 390 if (!DT->isReachableFromEntry(Pred)) 391 continue; 392 // If we need to preserve LCSSA, determine if any of the preds is a loop 393 // exit. 394 if (PreserveLCSSA) 395 if (Loop *PL = LI->getLoopFor(Pred)) 396 if (!PL->contains(OldBB)) 397 HasLoopExit = true; 398 399 // If we need to preserve LoopInfo, note whether any of the preds crosses 400 // an interesting loop boundary. 401 if (!L) 402 continue; 403 if (L->contains(Pred)) 404 IsLoopEntry = false; 405 else 406 SplitMakesNewLoopHeader = true; 407 } 408 409 // Unless we have a loop for OldBB, nothing else to do here. 410 if (!L) 411 return; 412 413 if (IsLoopEntry) { 414 // Add the new block to the nearest enclosing loop (and not an adjacent 415 // loop). To find this, examine each of the predecessors and determine which 416 // loops enclose them, and select the most-nested loop which contains the 417 // loop containing the block being split. 418 Loop *InnermostPredLoop = nullptr; 419 for (BasicBlock *Pred : Preds) { 420 if (Loop *PredLoop = LI->getLoopFor(Pred)) { 421 // Seek a loop which actually contains the block being split (to avoid 422 // adjacent loops). 423 while (PredLoop && !PredLoop->contains(OldBB)) 424 PredLoop = PredLoop->getParentLoop(); 425 426 // Select the most-nested of these loops which contains the block. 427 if (PredLoop && PredLoop->contains(OldBB) && 428 (!InnermostPredLoop || 429 InnermostPredLoop->getLoopDepth() < PredLoop->getLoopDepth())) 430 InnermostPredLoop = PredLoop; 431 } 432 } 433 434 if (InnermostPredLoop) 435 InnermostPredLoop->addBasicBlockToLoop(NewBB, *LI); 436 } else { 437 L->addBasicBlockToLoop(NewBB, *LI); 438 if (SplitMakesNewLoopHeader) 439 L->moveToHeader(NewBB); 440 } 441 } 442 443 /// Update the PHI nodes in OrigBB to include the values coming from NewBB. 444 /// This also updates AliasAnalysis, if available. 445 static void UpdatePHINodes(BasicBlock *OrigBB, BasicBlock *NewBB, 446 ArrayRef<BasicBlock *> Preds, BranchInst *BI, 447 bool HasLoopExit) { 448 // Otherwise, create a new PHI node in NewBB for each PHI node in OrigBB. 449 SmallPtrSet<BasicBlock *, 16> PredSet(Preds.begin(), Preds.end()); 450 for (BasicBlock::iterator I = OrigBB->begin(); isa<PHINode>(I); ) { 451 PHINode *PN = cast<PHINode>(I++); 452 453 // Check to see if all of the values coming in are the same. If so, we 454 // don't need to create a new PHI node, unless it's needed for LCSSA. 455 Value *InVal = nullptr; 456 if (!HasLoopExit) { 457 InVal = PN->getIncomingValueForBlock(Preds[0]); 458 for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) { 459 if (!PredSet.count(PN->getIncomingBlock(i))) 460 continue; 461 if (!InVal) 462 InVal = PN->getIncomingValue(i); 463 else if (InVal != PN->getIncomingValue(i)) { 464 InVal = nullptr; 465 break; 466 } 467 } 468 } 469 470 if (InVal) { 471 // If all incoming values for the new PHI would be the same, just don't 472 // make a new PHI. Instead, just remove the incoming values from the old 473 // PHI. 474 475 // NOTE! This loop walks backwards for a reason! First off, this minimizes 476 // the cost of removal if we end up removing a large number of values, and 477 // second off, this ensures that the indices for the incoming values 478 // aren't invalidated when we remove one. 479 for (int64_t i = PN->getNumIncomingValues() - 1; i >= 0; --i) 480 if (PredSet.count(PN->getIncomingBlock(i))) 481 PN->removeIncomingValue(i, false); 482 483 // Add an incoming value to the PHI node in the loop for the preheader 484 // edge. 485 PN->addIncoming(InVal, NewBB); 486 continue; 487 } 488 489 // If the values coming into the block are not the same, we need a new 490 // PHI. 491 // Create the new PHI node, insert it into NewBB at the end of the block 492 PHINode *NewPHI = 493 PHINode::Create(PN->getType(), Preds.size(), PN->getName() + ".ph", BI); 494 495 // NOTE! This loop walks backwards for a reason! First off, this minimizes 496 // the cost of removal if we end up removing a large number of values, and 497 // second off, this ensures that the indices for the incoming values aren't 498 // invalidated when we remove one. 499 for (int64_t i = PN->getNumIncomingValues() - 1; i >= 0; --i) { 500 BasicBlock *IncomingBB = PN->getIncomingBlock(i); 501 if (PredSet.count(IncomingBB)) { 502 Value *V = PN->removeIncomingValue(i, false); 503 NewPHI->addIncoming(V, IncomingBB); 504 } 505 } 506 507 PN->addIncoming(NewPHI, NewBB); 508 } 509 } 510 511 BasicBlock *llvm::SplitBlockPredecessors(BasicBlock *BB, 512 ArrayRef<BasicBlock *> Preds, 513 const char *Suffix, DominatorTree *DT, 514 LoopInfo *LI, MemorySSAUpdater *MSSAU, 515 bool PreserveLCSSA) { 516 // Do not attempt to split that which cannot be split. 517 if (!BB->canSplitPredecessors()) 518 return nullptr; 519 520 // For the landingpads we need to act a bit differently. 521 // Delegate this work to the SplitLandingPadPredecessors. 522 if (BB->isLandingPad()) { 523 SmallVector<BasicBlock*, 2> NewBBs; 524 std::string NewName = std::string(Suffix) + ".split-lp"; 525 526 SplitLandingPadPredecessors(BB, Preds, Suffix, NewName.c_str(), NewBBs, DT, 527 LI, MSSAU, PreserveLCSSA); 528 return NewBBs[0]; 529 } 530 531 // Create new basic block, insert right before the original block. 532 BasicBlock *NewBB = BasicBlock::Create( 533 BB->getContext(), BB->getName() + Suffix, BB->getParent(), BB); 534 535 // The new block unconditionally branches to the old block. 536 BranchInst *BI = BranchInst::Create(BB, NewBB); 537 BI->setDebugLoc(BB->getFirstNonPHIOrDbg()->getDebugLoc()); 538 539 // Move the edges from Preds to point to NewBB instead of BB. 540 for (unsigned i = 0, e = Preds.size(); i != e; ++i) { 541 // This is slightly more strict than necessary; the minimum requirement 542 // is that there be no more than one indirectbr branching to BB. And 543 // all BlockAddress uses would need to be updated. 544 assert(!isa<IndirectBrInst>(Preds[i]->getTerminator()) && 545 "Cannot split an edge from an IndirectBrInst"); 546 Preds[i]->getTerminator()->replaceUsesOfWith(BB, NewBB); 547 } 548 549 // Insert a new PHI node into NewBB for every PHI node in BB and that new PHI 550 // node becomes an incoming value for BB's phi node. However, if the Preds 551 // list is empty, we need to insert dummy entries into the PHI nodes in BB to 552 // account for the newly created predecessor. 553 if (Preds.empty()) { 554 // Insert dummy values as the incoming value. 555 for (BasicBlock::iterator I = BB->begin(); isa<PHINode>(I); ++I) 556 cast<PHINode>(I)->addIncoming(UndefValue::get(I->getType()), NewBB); 557 } 558 559 // Update DominatorTree, LoopInfo, and LCCSA analysis information. 560 bool HasLoopExit = false; 561 UpdateAnalysisInformation(BB, NewBB, Preds, DT, LI, MSSAU, PreserveLCSSA, 562 HasLoopExit); 563 564 if (!Preds.empty()) { 565 // Update the PHI nodes in BB with the values coming from NewBB. 566 UpdatePHINodes(BB, NewBB, Preds, BI, HasLoopExit); 567 } 568 569 return NewBB; 570 } 571 572 void llvm::SplitLandingPadPredecessors(BasicBlock *OrigBB, 573 ArrayRef<BasicBlock *> Preds, 574 const char *Suffix1, const char *Suffix2, 575 SmallVectorImpl<BasicBlock *> &NewBBs, 576 DominatorTree *DT, LoopInfo *LI, 577 MemorySSAUpdater *MSSAU, 578 bool PreserveLCSSA) { 579 assert(OrigBB->isLandingPad() && "Trying to split a non-landing pad!"); 580 581 // Create a new basic block for OrigBB's predecessors listed in Preds. Insert 582 // it right before the original block. 583 BasicBlock *NewBB1 = BasicBlock::Create(OrigBB->getContext(), 584 OrigBB->getName() + Suffix1, 585 OrigBB->getParent(), OrigBB); 586 NewBBs.push_back(NewBB1); 587 588 // The new block unconditionally branches to the old block. 589 BranchInst *BI1 = BranchInst::Create(OrigBB, NewBB1); 590 BI1->setDebugLoc(OrigBB->getFirstNonPHI()->getDebugLoc()); 591 592 // Move the edges from Preds to point to NewBB1 instead of OrigBB. 593 for (unsigned i = 0, e = Preds.size(); i != e; ++i) { 594 // This is slightly more strict than necessary; the minimum requirement 595 // is that there be no more than one indirectbr branching to BB. And 596 // all BlockAddress uses would need to be updated. 597 assert(!isa<IndirectBrInst>(Preds[i]->getTerminator()) && 598 "Cannot split an edge from an IndirectBrInst"); 599 Preds[i]->getTerminator()->replaceUsesOfWith(OrigBB, NewBB1); 600 } 601 602 bool HasLoopExit = false; 603 UpdateAnalysisInformation(OrigBB, NewBB1, Preds, DT, LI, MSSAU, PreserveLCSSA, 604 HasLoopExit); 605 606 // Update the PHI nodes in OrigBB with the values coming from NewBB1. 607 UpdatePHINodes(OrigBB, NewBB1, Preds, BI1, HasLoopExit); 608 609 // Move the remaining edges from OrigBB to point to NewBB2. 610 SmallVector<BasicBlock*, 8> NewBB2Preds; 611 for (pred_iterator i = pred_begin(OrigBB), e = pred_end(OrigBB); 612 i != e; ) { 613 BasicBlock *Pred = *i++; 614 if (Pred == NewBB1) continue; 615 assert(!isa<IndirectBrInst>(Pred->getTerminator()) && 616 "Cannot split an edge from an IndirectBrInst"); 617 NewBB2Preds.push_back(Pred); 618 e = pred_end(OrigBB); 619 } 620 621 BasicBlock *NewBB2 = nullptr; 622 if (!NewBB2Preds.empty()) { 623 // Create another basic block for the rest of OrigBB's predecessors. 624 NewBB2 = BasicBlock::Create(OrigBB->getContext(), 625 OrigBB->getName() + Suffix2, 626 OrigBB->getParent(), OrigBB); 627 NewBBs.push_back(NewBB2); 628 629 // The new block unconditionally branches to the old block. 630 BranchInst *BI2 = BranchInst::Create(OrigBB, NewBB2); 631 BI2->setDebugLoc(OrigBB->getFirstNonPHI()->getDebugLoc()); 632 633 // Move the remaining edges from OrigBB to point to NewBB2. 634 for (BasicBlock *NewBB2Pred : NewBB2Preds) 635 NewBB2Pred->getTerminator()->replaceUsesOfWith(OrigBB, NewBB2); 636 637 // Update DominatorTree, LoopInfo, and LCCSA analysis information. 638 HasLoopExit = false; 639 UpdateAnalysisInformation(OrigBB, NewBB2, NewBB2Preds, DT, LI, MSSAU, 640 PreserveLCSSA, HasLoopExit); 641 642 // Update the PHI nodes in OrigBB with the values coming from NewBB2. 643 UpdatePHINodes(OrigBB, NewBB2, NewBB2Preds, BI2, HasLoopExit); 644 } 645 646 LandingPadInst *LPad = OrigBB->getLandingPadInst(); 647 Instruction *Clone1 = LPad->clone(); 648 Clone1->setName(Twine("lpad") + Suffix1); 649 NewBB1->getInstList().insert(NewBB1->getFirstInsertionPt(), Clone1); 650 651 if (NewBB2) { 652 Instruction *Clone2 = LPad->clone(); 653 Clone2->setName(Twine("lpad") + Suffix2); 654 NewBB2->getInstList().insert(NewBB2->getFirstInsertionPt(), Clone2); 655 656 // Create a PHI node for the two cloned landingpad instructions only 657 // if the original landingpad instruction has some uses. 658 if (!LPad->use_empty()) { 659 assert(!LPad->getType()->isTokenTy() && 660 "Split cannot be applied if LPad is token type. Otherwise an " 661 "invalid PHINode of token type would be created."); 662 PHINode *PN = PHINode::Create(LPad->getType(), 2, "lpad.phi", LPad); 663 PN->addIncoming(Clone1, NewBB1); 664 PN->addIncoming(Clone2, NewBB2); 665 LPad->replaceAllUsesWith(PN); 666 } 667 LPad->eraseFromParent(); 668 } else { 669 // There is no second clone. Just replace the landing pad with the first 670 // clone. 671 LPad->replaceAllUsesWith(Clone1); 672 LPad->eraseFromParent(); 673 } 674 } 675 676 ReturnInst *llvm::FoldReturnIntoUncondBranch(ReturnInst *RI, BasicBlock *BB, 677 BasicBlock *Pred, 678 DomTreeUpdater *DTU) { 679 Instruction *UncondBranch = Pred->getTerminator(); 680 // Clone the return and add it to the end of the predecessor. 681 Instruction *NewRet = RI->clone(); 682 Pred->getInstList().push_back(NewRet); 683 684 // If the return instruction returns a value, and if the value was a 685 // PHI node in "BB", propagate the right value into the return. 686 for (User::op_iterator i = NewRet->op_begin(), e = NewRet->op_end(); 687 i != e; ++i) { 688 Value *V = *i; 689 Instruction *NewBC = nullptr; 690 if (BitCastInst *BCI = dyn_cast<BitCastInst>(V)) { 691 // Return value might be bitcasted. Clone and insert it before the 692 // return instruction. 693 V = BCI->getOperand(0); 694 NewBC = BCI->clone(); 695 Pred->getInstList().insert(NewRet->getIterator(), NewBC); 696 *i = NewBC; 697 } 698 if (PHINode *PN = dyn_cast<PHINode>(V)) { 699 if (PN->getParent() == BB) { 700 if (NewBC) 701 NewBC->setOperand(0, PN->getIncomingValueForBlock(Pred)); 702 else 703 *i = PN->getIncomingValueForBlock(Pred); 704 } 705 } 706 } 707 708 // Update any PHI nodes in the returning block to realize that we no 709 // longer branch to them. 710 BB->removePredecessor(Pred); 711 UncondBranch->eraseFromParent(); 712 713 if (DTU) 714 DTU->deleteEdge(Pred, BB); 715 716 return cast<ReturnInst>(NewRet); 717 } 718 719 Instruction *llvm::SplitBlockAndInsertIfThen(Value *Cond, 720 Instruction *SplitBefore, 721 bool Unreachable, 722 MDNode *BranchWeights, 723 DominatorTree *DT, LoopInfo *LI) { 724 BasicBlock *Head = SplitBefore->getParent(); 725 BasicBlock *Tail = Head->splitBasicBlock(SplitBefore->getIterator()); 726 Instruction *HeadOldTerm = Head->getTerminator(); 727 LLVMContext &C = Head->getContext(); 728 BasicBlock *ThenBlock = BasicBlock::Create(C, "", Head->getParent(), Tail); 729 Instruction *CheckTerm; 730 if (Unreachable) 731 CheckTerm = new UnreachableInst(C, ThenBlock); 732 else 733 CheckTerm = BranchInst::Create(Tail, ThenBlock); 734 CheckTerm->setDebugLoc(SplitBefore->getDebugLoc()); 735 BranchInst *HeadNewTerm = 736 BranchInst::Create(/*ifTrue*/ThenBlock, /*ifFalse*/Tail, Cond); 737 HeadNewTerm->setMetadata(LLVMContext::MD_prof, BranchWeights); 738 ReplaceInstWithInst(HeadOldTerm, HeadNewTerm); 739 740 if (DT) { 741 if (DomTreeNode *OldNode = DT->getNode(Head)) { 742 std::vector<DomTreeNode *> Children(OldNode->begin(), OldNode->end()); 743 744 DomTreeNode *NewNode = DT->addNewBlock(Tail, Head); 745 for (DomTreeNode *Child : Children) 746 DT->changeImmediateDominator(Child, NewNode); 747 748 // Head dominates ThenBlock. 749 DT->addNewBlock(ThenBlock, Head); 750 } 751 } 752 753 if (LI) { 754 if (Loop *L = LI->getLoopFor(Head)) { 755 L->addBasicBlockToLoop(ThenBlock, *LI); 756 L->addBasicBlockToLoop(Tail, *LI); 757 } 758 } 759 760 return CheckTerm; 761 } 762 763 void llvm::SplitBlockAndInsertIfThenElse(Value *Cond, Instruction *SplitBefore, 764 Instruction **ThenTerm, 765 Instruction **ElseTerm, 766 MDNode *BranchWeights) { 767 BasicBlock *Head = SplitBefore->getParent(); 768 BasicBlock *Tail = Head->splitBasicBlock(SplitBefore->getIterator()); 769 Instruction *HeadOldTerm = Head->getTerminator(); 770 LLVMContext &C = Head->getContext(); 771 BasicBlock *ThenBlock = BasicBlock::Create(C, "", Head->getParent(), Tail); 772 BasicBlock *ElseBlock = BasicBlock::Create(C, "", Head->getParent(), Tail); 773 *ThenTerm = BranchInst::Create(Tail, ThenBlock); 774 (*ThenTerm)->setDebugLoc(SplitBefore->getDebugLoc()); 775 *ElseTerm = BranchInst::Create(Tail, ElseBlock); 776 (*ElseTerm)->setDebugLoc(SplitBefore->getDebugLoc()); 777 BranchInst *HeadNewTerm = 778 BranchInst::Create(/*ifTrue*/ThenBlock, /*ifFalse*/ElseBlock, Cond); 779 HeadNewTerm->setMetadata(LLVMContext::MD_prof, BranchWeights); 780 ReplaceInstWithInst(HeadOldTerm, HeadNewTerm); 781 } 782 783 Value *llvm::GetIfCondition(BasicBlock *BB, BasicBlock *&IfTrue, 784 BasicBlock *&IfFalse) { 785 PHINode *SomePHI = dyn_cast<PHINode>(BB->begin()); 786 BasicBlock *Pred1 = nullptr; 787 BasicBlock *Pred2 = nullptr; 788 789 if (SomePHI) { 790 if (SomePHI->getNumIncomingValues() != 2) 791 return nullptr; 792 Pred1 = SomePHI->getIncomingBlock(0); 793 Pred2 = SomePHI->getIncomingBlock(1); 794 } else { 795 pred_iterator PI = pred_begin(BB), PE = pred_end(BB); 796 if (PI == PE) // No predecessor 797 return nullptr; 798 Pred1 = *PI++; 799 if (PI == PE) // Only one predecessor 800 return nullptr; 801 Pred2 = *PI++; 802 if (PI != PE) // More than two predecessors 803 return nullptr; 804 } 805 806 // We can only handle branches. Other control flow will be lowered to 807 // branches if possible anyway. 808 BranchInst *Pred1Br = dyn_cast<BranchInst>(Pred1->getTerminator()); 809 BranchInst *Pred2Br = dyn_cast<BranchInst>(Pred2->getTerminator()); 810 if (!Pred1Br || !Pred2Br) 811 return nullptr; 812 813 // Eliminate code duplication by ensuring that Pred1Br is conditional if 814 // either are. 815 if (Pred2Br->isConditional()) { 816 // If both branches are conditional, we don't have an "if statement". In 817 // reality, we could transform this case, but since the condition will be 818 // required anyway, we stand no chance of eliminating it, so the xform is 819 // probably not profitable. 820 if (Pred1Br->isConditional()) 821 return nullptr; 822 823 std::swap(Pred1, Pred2); 824 std::swap(Pred1Br, Pred2Br); 825 } 826 827 if (Pred1Br->isConditional()) { 828 // The only thing we have to watch out for here is to make sure that Pred2 829 // doesn't have incoming edges from other blocks. If it does, the condition 830 // doesn't dominate BB. 831 if (!Pred2->getSinglePredecessor()) 832 return nullptr; 833 834 // If we found a conditional branch predecessor, make sure that it branches 835 // to BB and Pred2Br. If it doesn't, this isn't an "if statement". 836 if (Pred1Br->getSuccessor(0) == BB && 837 Pred1Br->getSuccessor(1) == Pred2) { 838 IfTrue = Pred1; 839 IfFalse = Pred2; 840 } else if (Pred1Br->getSuccessor(0) == Pred2 && 841 Pred1Br->getSuccessor(1) == BB) { 842 IfTrue = Pred2; 843 IfFalse = Pred1; 844 } else { 845 // We know that one arm of the conditional goes to BB, so the other must 846 // go somewhere unrelated, and this must not be an "if statement". 847 return nullptr; 848 } 849 850 return Pred1Br->getCondition(); 851 } 852 853 // Ok, if we got here, both predecessors end with an unconditional branch to 854 // BB. Don't panic! If both blocks only have a single (identical) 855 // predecessor, and THAT is a conditional branch, then we're all ok! 856 BasicBlock *CommonPred = Pred1->getSinglePredecessor(); 857 if (CommonPred == nullptr || CommonPred != Pred2->getSinglePredecessor()) 858 return nullptr; 859 860 // Otherwise, if this is a conditional branch, then we can use it! 861 BranchInst *BI = dyn_cast<BranchInst>(CommonPred->getTerminator()); 862 if (!BI) return nullptr; 863 864 assert(BI->isConditional() && "Two successors but not conditional?"); 865 if (BI->getSuccessor(0) == Pred1) { 866 IfTrue = Pred1; 867 IfFalse = Pred2; 868 } else { 869 IfTrue = Pred2; 870 IfFalse = Pred1; 871 } 872 return BI->getCondition(); 873 } 874