1 //===-- llvm/CodeGen/MachineBasicBlock.cpp ----------------------*- C++ -*-===// 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 // Collect the sequence of machine instructions for a basic block. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #include "llvm/CodeGen/MachineBasicBlock.h" 15 #include "llvm/BasicBlock.h" 16 #include "llvm/CodeGen/LiveVariables.h" 17 #include "llvm/CodeGen/MachineDominators.h" 18 #include "llvm/CodeGen/MachineFunction.h" 19 #include "llvm/CodeGen/MachineLoopInfo.h" 20 #include "llvm/CodeGen/SlotIndexes.h" 21 #include "llvm/MC/MCAsmInfo.h" 22 #include "llvm/MC/MCContext.h" 23 #include "llvm/Target/TargetRegisterInfo.h" 24 #include "llvm/Target/TargetData.h" 25 #include "llvm/Target/TargetInstrInfo.h" 26 #include "llvm/Target/TargetMachine.h" 27 #include "llvm/Assembly/Writer.h" 28 #include "llvm/ADT/SmallString.h" 29 #include "llvm/ADT/SmallPtrSet.h" 30 #include "llvm/Support/Debug.h" 31 #include "llvm/Support/LeakDetector.h" 32 #include "llvm/Support/raw_ostream.h" 33 #include <algorithm> 34 using namespace llvm; 35 36 MachineBasicBlock::MachineBasicBlock(MachineFunction &mf, const BasicBlock *bb) 37 : BB(bb), Number(-1), xParent(&mf), Alignment(0), IsLandingPad(false), 38 AddressTaken(false) { 39 Insts.Parent = this; 40 } 41 42 MachineBasicBlock::~MachineBasicBlock() { 43 LeakDetector::removeGarbageObject(this); 44 } 45 46 /// getSymbol - Return the MCSymbol for this basic block. 47 /// 48 MCSymbol *MachineBasicBlock::getSymbol() const { 49 const MachineFunction *MF = getParent(); 50 MCContext &Ctx = MF->getContext(); 51 const char *Prefix = Ctx.getAsmInfo().getPrivateGlobalPrefix(); 52 return Ctx.GetOrCreateSymbol(Twine(Prefix) + "BB" + 53 Twine(MF->getFunctionNumber()) + "_" + 54 Twine(getNumber())); 55 } 56 57 58 raw_ostream &llvm::operator<<(raw_ostream &OS, const MachineBasicBlock &MBB) { 59 MBB.print(OS); 60 return OS; 61 } 62 63 /// addNodeToList (MBB) - When an MBB is added to an MF, we need to update the 64 /// parent pointer of the MBB, the MBB numbering, and any instructions in the 65 /// MBB to be on the right operand list for registers. 66 /// 67 /// MBBs start out as #-1. When a MBB is added to a MachineFunction, it 68 /// gets the next available unique MBB number. If it is removed from a 69 /// MachineFunction, it goes back to being #-1. 70 void ilist_traits<MachineBasicBlock>::addNodeToList(MachineBasicBlock *N) { 71 MachineFunction &MF = *N->getParent(); 72 N->Number = MF.addToMBBNumbering(N); 73 74 // Make sure the instructions have their operands in the reginfo lists. 75 MachineRegisterInfo &RegInfo = MF.getRegInfo(); 76 for (MachineBasicBlock::instr_iterator 77 I = N->instr_begin(), E = N->instr_end(); I != E; ++I) 78 I->AddRegOperandsToUseLists(RegInfo); 79 80 LeakDetector::removeGarbageObject(N); 81 } 82 83 void ilist_traits<MachineBasicBlock>::removeNodeFromList(MachineBasicBlock *N) { 84 N->getParent()->removeFromMBBNumbering(N->Number); 85 N->Number = -1; 86 LeakDetector::addGarbageObject(N); 87 } 88 89 90 /// addNodeToList (MI) - When we add an instruction to a basic block 91 /// list, we update its parent pointer and add its operands from reg use/def 92 /// lists if appropriate. 93 void ilist_traits<MachineInstr>::addNodeToList(MachineInstr *N) { 94 assert(N->getParent() == 0 && "machine instruction already in a basic block"); 95 N->setParent(Parent); 96 97 // Add the instruction's register operands to their corresponding 98 // use/def lists. 99 MachineFunction *MF = Parent->getParent(); 100 N->AddRegOperandsToUseLists(MF->getRegInfo()); 101 102 LeakDetector::removeGarbageObject(N); 103 } 104 105 /// removeNodeFromList (MI) - When we remove an instruction from a basic block 106 /// list, we update its parent pointer and remove its operands from reg use/def 107 /// lists if appropriate. 108 void ilist_traits<MachineInstr>::removeNodeFromList(MachineInstr *N) { 109 assert(N->getParent() != 0 && "machine instruction not in a basic block"); 110 111 // Remove from the use/def lists. 112 N->RemoveRegOperandsFromUseLists(); 113 114 N->setParent(0); 115 116 LeakDetector::addGarbageObject(N); 117 } 118 119 /// transferNodesFromList (MI) - When moving a range of instructions from one 120 /// MBB list to another, we need to update the parent pointers and the use/def 121 /// lists. 122 void ilist_traits<MachineInstr>:: 123 transferNodesFromList(ilist_traits<MachineInstr> &fromList, 124 ilist_iterator<MachineInstr> first, 125 ilist_iterator<MachineInstr> last) { 126 assert(Parent->getParent() == fromList.Parent->getParent() && 127 "MachineInstr parent mismatch!"); 128 129 // Splice within the same MBB -> no change. 130 if (Parent == fromList.Parent) return; 131 132 // If splicing between two blocks within the same function, just update the 133 // parent pointers. 134 for (; first != last; ++first) 135 first->setParent(Parent); 136 } 137 138 void ilist_traits<MachineInstr>::deleteNode(MachineInstr* MI) { 139 assert(!MI->getParent() && "MI is still in a block!"); 140 Parent->getParent()->DeleteMachineInstr(MI); 141 } 142 143 MachineBasicBlock::iterator MachineBasicBlock::getFirstNonPHI() { 144 instr_iterator I = instr_begin(), E = instr_end(); 145 while (I != E && I->isPHI()) 146 ++I; 147 assert(!I->isInsideBundle() && "First non-phi MI cannot be inside a bundle!"); 148 return I; 149 } 150 151 MachineBasicBlock::iterator 152 MachineBasicBlock::SkipPHIsAndLabels(MachineBasicBlock::iterator I) { 153 iterator E = end(); 154 while (I != E && (I->isPHI() || I->isLabel() || I->isDebugValue())) 155 ++I; 156 // FIXME: This needs to change if we wish to bundle labels / dbg_values 157 // inside the bundle. 158 assert(!I->isInsideBundle() && 159 "First non-phi / non-label instruction is inside a bundle!"); 160 return I; 161 } 162 163 MachineBasicBlock::iterator MachineBasicBlock::getFirstTerminator() { 164 iterator B = begin(), E = end(), I = E; 165 while (I != B && ((--I)->isTerminator() || I->isDebugValue())) 166 ; /*noop */ 167 while (I != E && !I->isTerminator()) 168 ++I; 169 return I; 170 } 171 172 MachineBasicBlock::const_iterator 173 MachineBasicBlock::getFirstTerminator() const { 174 const_iterator B = begin(), E = end(), I = E; 175 while (I != B && ((--I)->isTerminator() || I->isDebugValue())) 176 ; /*noop */ 177 while (I != E && !I->isTerminator()) 178 ++I; 179 return I; 180 } 181 182 MachineBasicBlock::instr_iterator MachineBasicBlock::getFirstInstrTerminator() { 183 instr_iterator B = instr_begin(), E = instr_end(), I = E; 184 while (I != B && ((--I)->isTerminator() || I->isDebugValue())) 185 ; /*noop */ 186 while (I != E && !I->isTerminator()) 187 ++I; 188 return I; 189 } 190 191 MachineBasicBlock::iterator MachineBasicBlock::getLastNonDebugInstr() { 192 // Skip over end-of-block dbg_value instructions. 193 instr_iterator B = instr_begin(), I = instr_end(); 194 while (I != B) { 195 --I; 196 // Return instruction that starts a bundle. 197 if (I->isDebugValue() || I->isInsideBundle()) 198 continue; 199 return I; 200 } 201 // The block is all debug values. 202 return end(); 203 } 204 205 MachineBasicBlock::const_iterator 206 MachineBasicBlock::getLastNonDebugInstr() const { 207 // Skip over end-of-block dbg_value instructions. 208 const_instr_iterator B = instr_begin(), I = instr_end(); 209 while (I != B) { 210 --I; 211 // Return instruction that starts a bundle. 212 if (I->isDebugValue() || I->isInsideBundle()) 213 continue; 214 return I; 215 } 216 // The block is all debug values. 217 return end(); 218 } 219 220 const MachineBasicBlock *MachineBasicBlock::getLandingPadSuccessor() const { 221 // A block with a landing pad successor only has one other successor. 222 if (succ_size() > 2) 223 return 0; 224 for (const_succ_iterator I = succ_begin(), E = succ_end(); I != E; ++I) 225 if ((*I)->isLandingPad()) 226 return *I; 227 return 0; 228 } 229 230 void MachineBasicBlock::dump() const { 231 print(dbgs()); 232 } 233 234 StringRef MachineBasicBlock::getName() const { 235 if (const BasicBlock *LBB = getBasicBlock()) 236 return LBB->getName(); 237 else 238 return "(null)"; 239 } 240 241 void MachineBasicBlock::print(raw_ostream &OS, SlotIndexes *Indexes) const { 242 const MachineFunction *MF = getParent(); 243 if (!MF) { 244 OS << "Can't print out MachineBasicBlock because parent MachineFunction" 245 << " is null\n"; 246 return; 247 } 248 249 if (Indexes) 250 OS << Indexes->getMBBStartIdx(this) << '\t'; 251 252 OS << "BB#" << getNumber() << ": "; 253 254 const char *Comma = ""; 255 if (const BasicBlock *LBB = getBasicBlock()) { 256 OS << Comma << "derived from LLVM BB "; 257 WriteAsOperand(OS, LBB, /*PrintType=*/false); 258 Comma = ", "; 259 } 260 if (isLandingPad()) { OS << Comma << "EH LANDING PAD"; Comma = ", "; } 261 if (hasAddressTaken()) { OS << Comma << "ADDRESS TAKEN"; Comma = ", "; } 262 if (Alignment) { 263 OS << Comma << "Align " << Alignment << " (" << (1u << Alignment) 264 << " bytes)"; 265 Comma = ", "; 266 } 267 268 OS << '\n'; 269 270 const TargetRegisterInfo *TRI = MF->getTarget().getRegisterInfo(); 271 if (!livein_empty()) { 272 if (Indexes) OS << '\t'; 273 OS << " Live Ins:"; 274 for (livein_iterator I = livein_begin(),E = livein_end(); I != E; ++I) 275 OS << ' ' << PrintReg(*I, TRI); 276 OS << '\n'; 277 } 278 // Print the preds of this block according to the CFG. 279 if (!pred_empty()) { 280 if (Indexes) OS << '\t'; 281 OS << " Predecessors according to CFG:"; 282 for (const_pred_iterator PI = pred_begin(), E = pred_end(); PI != E; ++PI) 283 OS << " BB#" << (*PI)->getNumber(); 284 OS << '\n'; 285 } 286 287 for (const_instr_iterator I = instr_begin(); I != instr_end(); ++I) { 288 if (Indexes) { 289 if (Indexes->hasIndex(I)) 290 OS << Indexes->getInstructionIndex(I); 291 OS << '\t'; 292 } 293 OS << '\t'; 294 if (I->isInsideBundle()) 295 OS << " * "; 296 I->print(OS, &getParent()->getTarget()); 297 } 298 299 // Print the successors of this block according to the CFG. 300 if (!succ_empty()) { 301 if (Indexes) OS << '\t'; 302 OS << " Successors according to CFG:"; 303 for (const_succ_iterator SI = succ_begin(), E = succ_end(); SI != E; ++SI) 304 OS << " BB#" << (*SI)->getNumber(); 305 OS << '\n'; 306 } 307 } 308 309 void MachineBasicBlock::removeLiveIn(unsigned Reg) { 310 std::vector<unsigned>::iterator I = 311 std::find(LiveIns.begin(), LiveIns.end(), Reg); 312 assert(I != LiveIns.end() && "Not a live in!"); 313 LiveIns.erase(I); 314 } 315 316 bool MachineBasicBlock::isLiveIn(unsigned Reg) const { 317 livein_iterator I = std::find(livein_begin(), livein_end(), Reg); 318 return I != livein_end(); 319 } 320 321 void MachineBasicBlock::moveBefore(MachineBasicBlock *NewAfter) { 322 getParent()->splice(NewAfter, this); 323 } 324 325 void MachineBasicBlock::moveAfter(MachineBasicBlock *NewBefore) { 326 MachineFunction::iterator BBI = NewBefore; 327 getParent()->splice(++BBI, this); 328 } 329 330 void MachineBasicBlock::updateTerminator() { 331 const TargetInstrInfo *TII = getParent()->getTarget().getInstrInfo(); 332 // A block with no successors has no concerns with fall-through edges. 333 if (this->succ_empty()) return; 334 335 MachineBasicBlock *TBB = 0, *FBB = 0; 336 SmallVector<MachineOperand, 4> Cond; 337 DebugLoc dl; // FIXME: this is nowhere 338 bool B = TII->AnalyzeBranch(*this, TBB, FBB, Cond); 339 (void) B; 340 assert(!B && "UpdateTerminators requires analyzable predecessors!"); 341 if (Cond.empty()) { 342 if (TBB) { 343 // The block has an unconditional branch. If its successor is now 344 // its layout successor, delete the branch. 345 if (isLayoutSuccessor(TBB)) 346 TII->RemoveBranch(*this); 347 } else { 348 // The block has an unconditional fallthrough. If its successor is not 349 // its layout successor, insert a branch. First we have to locate the 350 // only non-landing-pad successor, as that is the fallthrough block. 351 for (succ_iterator SI = succ_begin(), SE = succ_end(); SI != SE; ++SI) { 352 if ((*SI)->isLandingPad()) 353 continue; 354 assert(!TBB && "Found more than one non-landing-pad successor!"); 355 TBB = *SI; 356 } 357 358 // If there is no non-landing-pad successor, the block has no 359 // fall-through edges to be concerned with. 360 if (!TBB) 361 return; 362 363 // Finally update the unconditional successor to be reached via a branch 364 // if it would not be reached by fallthrough. 365 if (!isLayoutSuccessor(TBB)) 366 TII->InsertBranch(*this, TBB, 0, Cond, dl); 367 } 368 } else { 369 if (FBB) { 370 // The block has a non-fallthrough conditional branch. If one of its 371 // successors is its layout successor, rewrite it to a fallthrough 372 // conditional branch. 373 if (isLayoutSuccessor(TBB)) { 374 if (TII->ReverseBranchCondition(Cond)) 375 return; 376 TII->RemoveBranch(*this); 377 TII->InsertBranch(*this, FBB, 0, Cond, dl); 378 } else if (isLayoutSuccessor(FBB)) { 379 TII->RemoveBranch(*this); 380 TII->InsertBranch(*this, TBB, 0, Cond, dl); 381 } 382 } else { 383 // The block has a fallthrough conditional branch. 384 MachineBasicBlock *MBBA = *succ_begin(); 385 MachineBasicBlock *MBBB = *llvm::next(succ_begin()); 386 if (MBBA == TBB) std::swap(MBBB, MBBA); 387 if (isLayoutSuccessor(TBB)) { 388 if (TII->ReverseBranchCondition(Cond)) { 389 // We can't reverse the condition, add an unconditional branch. 390 Cond.clear(); 391 TII->InsertBranch(*this, MBBA, 0, Cond, dl); 392 return; 393 } 394 TII->RemoveBranch(*this); 395 TII->InsertBranch(*this, MBBA, 0, Cond, dl); 396 } else if (!isLayoutSuccessor(MBBA)) { 397 TII->RemoveBranch(*this); 398 TII->InsertBranch(*this, TBB, MBBA, Cond, dl); 399 } 400 } 401 } 402 } 403 404 void MachineBasicBlock::addSuccessor(MachineBasicBlock *succ, uint32_t weight) { 405 406 // If we see non-zero value for the first time it means we actually use Weight 407 // list, so we fill all Weights with 0's. 408 if (weight != 0 && Weights.empty()) 409 Weights.resize(Successors.size()); 410 411 if (weight != 0 || !Weights.empty()) 412 Weights.push_back(weight); 413 414 Successors.push_back(succ); 415 succ->addPredecessor(this); 416 } 417 418 void MachineBasicBlock::removeSuccessor(MachineBasicBlock *succ) { 419 succ->removePredecessor(this); 420 succ_iterator I = std::find(Successors.begin(), Successors.end(), succ); 421 assert(I != Successors.end() && "Not a current successor!"); 422 423 // If Weight list is empty it means we don't use it (disabled optimization). 424 if (!Weights.empty()) { 425 weight_iterator WI = getWeightIterator(I); 426 Weights.erase(WI); 427 } 428 429 Successors.erase(I); 430 } 431 432 MachineBasicBlock::succ_iterator 433 MachineBasicBlock::removeSuccessor(succ_iterator I) { 434 assert(I != Successors.end() && "Not a current successor!"); 435 436 // If Weight list is empty it means we don't use it (disabled optimization). 437 if (!Weights.empty()) { 438 weight_iterator WI = getWeightIterator(I); 439 Weights.erase(WI); 440 } 441 442 (*I)->removePredecessor(this); 443 return Successors.erase(I); 444 } 445 446 void MachineBasicBlock::replaceSuccessor(MachineBasicBlock *Old, 447 MachineBasicBlock *New) { 448 uint32_t weight = 0; 449 succ_iterator SI = std::find(Successors.begin(), Successors.end(), Old); 450 451 // If Weight list is empty it means we don't use it (disabled optimization). 452 if (!Weights.empty()) { 453 weight_iterator WI = getWeightIterator(SI); 454 weight = *WI; 455 } 456 457 // Update the successor information. 458 removeSuccessor(SI); 459 addSuccessor(New, weight); 460 } 461 462 void MachineBasicBlock::addPredecessor(MachineBasicBlock *pred) { 463 Predecessors.push_back(pred); 464 } 465 466 void MachineBasicBlock::removePredecessor(MachineBasicBlock *pred) { 467 pred_iterator I = std::find(Predecessors.begin(), Predecessors.end(), pred); 468 assert(I != Predecessors.end() && "Pred is not a predecessor of this block!"); 469 Predecessors.erase(I); 470 } 471 472 void MachineBasicBlock::transferSuccessors(MachineBasicBlock *fromMBB) { 473 if (this == fromMBB) 474 return; 475 476 while (!fromMBB->succ_empty()) { 477 MachineBasicBlock *Succ = *fromMBB->succ_begin(); 478 uint32_t weight = 0; 479 480 481 // If Weight list is empty it means we don't use it (disabled optimization). 482 if (!fromMBB->Weights.empty()) 483 weight = *fromMBB->Weights.begin(); 484 485 addSuccessor(Succ, weight); 486 fromMBB->removeSuccessor(Succ); 487 } 488 } 489 490 void 491 MachineBasicBlock::transferSuccessorsAndUpdatePHIs(MachineBasicBlock *fromMBB) { 492 if (this == fromMBB) 493 return; 494 495 while (!fromMBB->succ_empty()) { 496 MachineBasicBlock *Succ = *fromMBB->succ_begin(); 497 addSuccessor(Succ); 498 fromMBB->removeSuccessor(Succ); 499 500 // Fix up any PHI nodes in the successor. 501 for (MachineBasicBlock::instr_iterator MI = Succ->instr_begin(), 502 ME = Succ->instr_end(); MI != ME && MI->isPHI(); ++MI) 503 for (unsigned i = 2, e = MI->getNumOperands()+1; i != e; i += 2) { 504 MachineOperand &MO = MI->getOperand(i); 505 if (MO.getMBB() == fromMBB) 506 MO.setMBB(this); 507 } 508 } 509 } 510 511 bool MachineBasicBlock::isSuccessor(const MachineBasicBlock *MBB) const { 512 const_succ_iterator I = std::find(Successors.begin(), Successors.end(), MBB); 513 return I != Successors.end(); 514 } 515 516 bool MachineBasicBlock::isLayoutSuccessor(const MachineBasicBlock *MBB) const { 517 MachineFunction::const_iterator I(this); 518 return llvm::next(I) == MachineFunction::const_iterator(MBB); 519 } 520 521 bool MachineBasicBlock::canFallThrough() { 522 MachineFunction::iterator Fallthrough = this; 523 ++Fallthrough; 524 // If FallthroughBlock is off the end of the function, it can't fall through. 525 if (Fallthrough == getParent()->end()) 526 return false; 527 528 // If FallthroughBlock isn't a successor, no fallthrough is possible. 529 if (!isSuccessor(Fallthrough)) 530 return false; 531 532 // Analyze the branches, if any, at the end of the block. 533 MachineBasicBlock *TBB = 0, *FBB = 0; 534 SmallVector<MachineOperand, 4> Cond; 535 const TargetInstrInfo *TII = getParent()->getTarget().getInstrInfo(); 536 if (TII->AnalyzeBranch(*this, TBB, FBB, Cond)) { 537 // If we couldn't analyze the branch, examine the last instruction. 538 // If the block doesn't end in a known control barrier, assume fallthrough 539 // is possible. The isPredicated check is needed because this code can be 540 // called during IfConversion, where an instruction which is normally a 541 // Barrier is predicated and thus no longer an actual control barrier. 542 return empty() || !back().isBarrier() || TII->isPredicated(&back()); 543 } 544 545 // If there is no branch, control always falls through. 546 if (TBB == 0) return true; 547 548 // If there is some explicit branch to the fallthrough block, it can obviously 549 // reach, even though the branch should get folded to fall through implicitly. 550 if (MachineFunction::iterator(TBB) == Fallthrough || 551 MachineFunction::iterator(FBB) == Fallthrough) 552 return true; 553 554 // If it's an unconditional branch to some block not the fall through, it 555 // doesn't fall through. 556 if (Cond.empty()) return false; 557 558 // Otherwise, if it is conditional and has no explicit false block, it falls 559 // through. 560 return FBB == 0; 561 } 562 563 MachineBasicBlock * 564 MachineBasicBlock::SplitCriticalEdge(MachineBasicBlock *Succ, Pass *P) { 565 MachineFunction *MF = getParent(); 566 DebugLoc dl; // FIXME: this is nowhere 567 568 // We may need to update this's terminator, but we can't do that if 569 // AnalyzeBranch fails. If this uses a jump table, we won't touch it. 570 const TargetInstrInfo *TII = MF->getTarget().getInstrInfo(); 571 MachineBasicBlock *TBB = 0, *FBB = 0; 572 SmallVector<MachineOperand, 4> Cond; 573 if (TII->AnalyzeBranch(*this, TBB, FBB, Cond)) 574 return NULL; 575 576 // Avoid bugpoint weirdness: A block may end with a conditional branch but 577 // jumps to the same MBB is either case. We have duplicate CFG edges in that 578 // case that we can't handle. Since this never happens in properly optimized 579 // code, just skip those edges. 580 if (TBB && TBB == FBB) { 581 DEBUG(dbgs() << "Won't split critical edge after degenerate BB#" 582 << getNumber() << '\n'); 583 return NULL; 584 } 585 586 MachineBasicBlock *NMBB = MF->CreateMachineBasicBlock(); 587 MF->insert(llvm::next(MachineFunction::iterator(this)), NMBB); 588 DEBUG(dbgs() << "Splitting critical edge:" 589 " BB#" << getNumber() 590 << " -- BB#" << NMBB->getNumber() 591 << " -- BB#" << Succ->getNumber() << '\n'); 592 593 // On some targets like Mips, branches may kill virtual registers. Make sure 594 // that LiveVariables is properly updated after updateTerminator replaces the 595 // terminators. 596 LiveVariables *LV = P->getAnalysisIfAvailable<LiveVariables>(); 597 598 // Collect a list of virtual registers killed by the terminators. 599 SmallVector<unsigned, 4> KilledRegs; 600 if (LV) 601 for (instr_iterator I = getFirstInstrTerminator(), E = instr_end(); 602 I != E; ++I) { 603 MachineInstr *MI = I; 604 for (MachineInstr::mop_iterator OI = MI->operands_begin(), 605 OE = MI->operands_end(); OI != OE; ++OI) { 606 if (!OI->isReg() || OI->getReg() == 0 || 607 !OI->isUse() || !OI->isKill() || OI->isUndef()) 608 continue; 609 unsigned Reg = OI->getReg(); 610 if (TargetRegisterInfo::isPhysicalRegister(Reg) || 611 LV->getVarInfo(Reg).removeKill(MI)) { 612 KilledRegs.push_back(Reg); 613 DEBUG(dbgs() << "Removing terminator kill: " << *MI); 614 OI->setIsKill(false); 615 } 616 } 617 } 618 619 ReplaceUsesOfBlockWith(Succ, NMBB); 620 updateTerminator(); 621 622 // Insert unconditional "jump Succ" instruction in NMBB if necessary. 623 NMBB->addSuccessor(Succ); 624 if (!NMBB->isLayoutSuccessor(Succ)) { 625 Cond.clear(); 626 MF->getTarget().getInstrInfo()->InsertBranch(*NMBB, Succ, NULL, Cond, dl); 627 } 628 629 // Fix PHI nodes in Succ so they refer to NMBB instead of this 630 for (MachineBasicBlock::instr_iterator 631 i = Succ->instr_begin(),e = Succ->instr_end(); 632 i != e && i->isPHI(); ++i) 633 for (unsigned ni = 1, ne = i->getNumOperands(); ni != ne; ni += 2) 634 if (i->getOperand(ni+1).getMBB() == this) 635 i->getOperand(ni+1).setMBB(NMBB); 636 637 // Inherit live-ins from the successor 638 for (MachineBasicBlock::livein_iterator I = Succ->livein_begin(), 639 E = Succ->livein_end(); I != E; ++I) 640 NMBB->addLiveIn(*I); 641 642 // Update LiveVariables. 643 const TargetRegisterInfo *TRI = MF->getTarget().getRegisterInfo(); 644 if (LV) { 645 // Restore kills of virtual registers that were killed by the terminators. 646 while (!KilledRegs.empty()) { 647 unsigned Reg = KilledRegs.pop_back_val(); 648 for (instr_iterator I = instr_end(), E = instr_begin(); I != E;) { 649 if (!(--I)->addRegisterKilled(Reg, TRI, /* addIfNotFound= */ false)) 650 continue; 651 if (TargetRegisterInfo::isVirtualRegister(Reg)) 652 LV->getVarInfo(Reg).Kills.push_back(I); 653 DEBUG(dbgs() << "Restored terminator kill: " << *I); 654 break; 655 } 656 } 657 // Update relevant live-through information. 658 LV->addNewBlock(NMBB, this, Succ); 659 } 660 661 if (MachineDominatorTree *MDT = 662 P->getAnalysisIfAvailable<MachineDominatorTree>()) { 663 // Update dominator information. 664 MachineDomTreeNode *SucccDTNode = MDT->getNode(Succ); 665 666 bool IsNewIDom = true; 667 for (const_pred_iterator PI = Succ->pred_begin(), E = Succ->pred_end(); 668 PI != E; ++PI) { 669 MachineBasicBlock *PredBB = *PI; 670 if (PredBB == NMBB) 671 continue; 672 if (!MDT->dominates(SucccDTNode, MDT->getNode(PredBB))) { 673 IsNewIDom = false; 674 break; 675 } 676 } 677 678 // We know "this" dominates the newly created basic block. 679 MachineDomTreeNode *NewDTNode = MDT->addNewBlock(NMBB, this); 680 681 // If all the other predecessors of "Succ" are dominated by "Succ" itself 682 // then the new block is the new immediate dominator of "Succ". Otherwise, 683 // the new block doesn't dominate anything. 684 if (IsNewIDom) 685 MDT->changeImmediateDominator(SucccDTNode, NewDTNode); 686 } 687 688 if (MachineLoopInfo *MLI = P->getAnalysisIfAvailable<MachineLoopInfo>()) 689 if (MachineLoop *TIL = MLI->getLoopFor(this)) { 690 // If one or the other blocks were not in a loop, the new block is not 691 // either, and thus LI doesn't need to be updated. 692 if (MachineLoop *DestLoop = MLI->getLoopFor(Succ)) { 693 if (TIL == DestLoop) { 694 // Both in the same loop, the NMBB joins loop. 695 DestLoop->addBasicBlockToLoop(NMBB, MLI->getBase()); 696 } else if (TIL->contains(DestLoop)) { 697 // Edge from an outer loop to an inner loop. Add to the outer loop. 698 TIL->addBasicBlockToLoop(NMBB, MLI->getBase()); 699 } else if (DestLoop->contains(TIL)) { 700 // Edge from an inner loop to an outer loop. Add to the outer loop. 701 DestLoop->addBasicBlockToLoop(NMBB, MLI->getBase()); 702 } else { 703 // Edge from two loops with no containment relation. Because these 704 // are natural loops, we know that the destination block must be the 705 // header of its loop (adding a branch into a loop elsewhere would 706 // create an irreducible loop). 707 assert(DestLoop->getHeader() == Succ && 708 "Should not create irreducible loops!"); 709 if (MachineLoop *P = DestLoop->getParentLoop()) 710 P->addBasicBlockToLoop(NMBB, MLI->getBase()); 711 } 712 } 713 } 714 715 return NMBB; 716 } 717 718 MachineBasicBlock::iterator 719 MachineBasicBlock::erase(MachineBasicBlock::iterator I) { 720 if (I->isBundle()) { 721 MachineBasicBlock::iterator E = llvm::next(I); 722 return Insts.erase(I.getInstrIterator(), E.getInstrIterator()); 723 } 724 725 return Insts.erase(I.getInstrIterator()); 726 } 727 728 MachineInstr *MachineBasicBlock::remove(MachineInstr *I) { 729 if (I->isBundle()) { 730 instr_iterator MII = llvm::next(I); 731 iterator E = end(); 732 while (MII != E && MII->isInsideBundle()) { 733 MachineInstr *MI = &*MII++; 734 Insts.remove(MI); 735 } 736 } 737 738 return Insts.remove(I); 739 } 740 741 void MachineBasicBlock::splice(MachineBasicBlock::iterator where, 742 MachineBasicBlock *Other, 743 MachineBasicBlock::iterator From) { 744 if (From->isBundle()) { 745 MachineBasicBlock::iterator To = llvm::next(From); 746 Insts.splice(where.getInstrIterator(), Other->Insts, 747 From.getInstrIterator(), To.getInstrIterator()); 748 return; 749 } 750 751 Insts.splice(where.getInstrIterator(), Other->Insts, From.getInstrIterator()); 752 } 753 754 /// removeFromParent - This method unlinks 'this' from the containing function, 755 /// and returns it, but does not delete it. 756 MachineBasicBlock *MachineBasicBlock::removeFromParent() { 757 assert(getParent() && "Not embedded in a function!"); 758 getParent()->remove(this); 759 return this; 760 } 761 762 763 /// eraseFromParent - This method unlinks 'this' from the containing function, 764 /// and deletes it. 765 void MachineBasicBlock::eraseFromParent() { 766 assert(getParent() && "Not embedded in a function!"); 767 getParent()->erase(this); 768 } 769 770 771 /// ReplaceUsesOfBlockWith - Given a machine basic block that branched to 772 /// 'Old', change the code and CFG so that it branches to 'New' instead. 773 void MachineBasicBlock::ReplaceUsesOfBlockWith(MachineBasicBlock *Old, 774 MachineBasicBlock *New) { 775 assert(Old != New && "Cannot replace self with self!"); 776 777 MachineBasicBlock::instr_iterator I = instr_end(); 778 while (I != instr_begin()) { 779 --I; 780 if (!I->isTerminator()) break; 781 782 // Scan the operands of this machine instruction, replacing any uses of Old 783 // with New. 784 for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i) 785 if (I->getOperand(i).isMBB() && 786 I->getOperand(i).getMBB() == Old) 787 I->getOperand(i).setMBB(New); 788 } 789 790 // Update the successor information. 791 replaceSuccessor(Old, New); 792 } 793 794 /// CorrectExtraCFGEdges - Various pieces of code can cause excess edges in the 795 /// CFG to be inserted. If we have proven that MBB can only branch to DestA and 796 /// DestB, remove any other MBB successors from the CFG. DestA and DestB can be 797 /// null. 798 /// 799 /// Besides DestA and DestB, retain other edges leading to LandingPads 800 /// (currently there can be only one; we don't check or require that here). 801 /// Note it is possible that DestA and/or DestB are LandingPads. 802 bool MachineBasicBlock::CorrectExtraCFGEdges(MachineBasicBlock *DestA, 803 MachineBasicBlock *DestB, 804 bool isCond) { 805 // The values of DestA and DestB frequently come from a call to the 806 // 'TargetInstrInfo::AnalyzeBranch' method. We take our meaning of the initial 807 // values from there. 808 // 809 // 1. If both DestA and DestB are null, then the block ends with no branches 810 // (it falls through to its successor). 811 // 2. If DestA is set, DestB is null, and isCond is false, then the block ends 812 // with only an unconditional branch. 813 // 3. If DestA is set, DestB is null, and isCond is true, then the block ends 814 // with a conditional branch that falls through to a successor (DestB). 815 // 4. If DestA and DestB is set and isCond is true, then the block ends with a 816 // conditional branch followed by an unconditional branch. DestA is the 817 // 'true' destination and DestB is the 'false' destination. 818 819 bool Changed = false; 820 821 MachineFunction::iterator FallThru = 822 llvm::next(MachineFunction::iterator(this)); 823 824 if (DestA == 0 && DestB == 0) { 825 // Block falls through to successor. 826 DestA = FallThru; 827 DestB = FallThru; 828 } else if (DestA != 0 && DestB == 0) { 829 if (isCond) 830 // Block ends in conditional jump that falls through to successor. 831 DestB = FallThru; 832 } else { 833 assert(DestA && DestB && isCond && 834 "CFG in a bad state. Cannot correct CFG edges"); 835 } 836 837 // Remove superfluous edges. I.e., those which aren't destinations of this 838 // basic block, duplicate edges, or landing pads. 839 SmallPtrSet<const MachineBasicBlock*, 8> SeenMBBs; 840 MachineBasicBlock::succ_iterator SI = succ_begin(); 841 while (SI != succ_end()) { 842 const MachineBasicBlock *MBB = *SI; 843 if (!SeenMBBs.insert(MBB) || 844 (MBB != DestA && MBB != DestB && !MBB->isLandingPad())) { 845 // This is a superfluous edge, remove it. 846 SI = removeSuccessor(SI); 847 Changed = true; 848 } else { 849 ++SI; 850 } 851 } 852 853 return Changed; 854 } 855 856 /// findDebugLoc - find the next valid DebugLoc starting at MBBI, skipping 857 /// any DBG_VALUE instructions. Return UnknownLoc if there is none. 858 DebugLoc 859 MachineBasicBlock::findDebugLoc(instr_iterator MBBI) { 860 DebugLoc DL; 861 instr_iterator E = instr_end(); 862 if (MBBI == E) 863 return DL; 864 865 // Skip debug declarations, we don't want a DebugLoc from them. 866 while (MBBI != E && MBBI->isDebugValue()) 867 MBBI++; 868 if (MBBI != E) 869 DL = MBBI->getDebugLoc(); 870 return DL; 871 } 872 873 /// getSuccWeight - Return weight of the edge from this block to MBB. 874 /// 875 uint32_t MachineBasicBlock::getSuccWeight(const MachineBasicBlock *succ) const { 876 if (Weights.empty()) 877 return 0; 878 879 const_succ_iterator I = std::find(Successors.begin(), Successors.end(), succ); 880 return *getWeightIterator(I); 881 } 882 883 /// getWeightIterator - Return wight iterator corresonding to the I successor 884 /// iterator 885 MachineBasicBlock::weight_iterator MachineBasicBlock:: 886 getWeightIterator(MachineBasicBlock::succ_iterator I) { 887 assert(Weights.size() == Successors.size() && "Async weight list!"); 888 size_t index = std::distance(Successors.begin(), I); 889 assert(index < Weights.size() && "Not a current successor!"); 890 return Weights.begin() + index; 891 } 892 893 /// getWeightIterator - Return wight iterator corresonding to the I successor 894 /// iterator 895 MachineBasicBlock::const_weight_iterator MachineBasicBlock:: 896 getWeightIterator(MachineBasicBlock::const_succ_iterator I) const { 897 assert(Weights.size() == Successors.size() && "Async weight list!"); 898 const size_t index = std::distance(Successors.begin(), I); 899 assert(index < Weights.size() && "Not a current successor!"); 900 return Weights.begin() + index; 901 } 902 903 void llvm::WriteAsOperand(raw_ostream &OS, const MachineBasicBlock *MBB, 904 bool t) { 905 OS << "BB#" << MBB->getNumber(); 906 } 907 908