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/ADT/SmallPtrSet.h"
16#include "llvm/CodeGen/LiveIntervalAnalysis.h"
17#include "llvm/CodeGen/LiveVariables.h"
18#include "llvm/CodeGen/MachineDominators.h"
19#include "llvm/CodeGen/MachineFunction.h"
20#include "llvm/CodeGen/MachineInstrBuilder.h"
21#include "llvm/CodeGen/MachineLoopInfo.h"
22#include "llvm/CodeGen/MachineRegisterInfo.h"
23#include "llvm/CodeGen/SlotIndexes.h"
24#include "llvm/IR/BasicBlock.h"
25#include "llvm/IR/DataLayout.h"
26#include "llvm/IR/ModuleSlotTracker.h"
27#include "llvm/MC/MCAsmInfo.h"
28#include "llvm/MC/MCContext.h"
29#include "llvm/Support/DataTypes.h"
30#include "llvm/Support/Debug.h"
31#include "llvm/Support/raw_ostream.h"
32#include "llvm/Target/TargetInstrInfo.h"
33#include "llvm/Target/TargetMachine.h"
34#include "llvm/Target/TargetRegisterInfo.h"
35#include "llvm/Target/TargetSubtargetInfo.h"
36#include <algorithm>
37using namespace llvm;
38
39#define DEBUG_TYPE "codegen"
40
41MachineBasicBlock::MachineBasicBlock(MachineFunction &MF, const BasicBlock *B)
42    : BB(B), Number(-1), xParent(&MF) {
43  Insts.Parent = this;
44}
45
46MachineBasicBlock::~MachineBasicBlock() {
47}
48
49/// Return the MCSymbol for this basic block.
50MCSymbol *MachineBasicBlock::getSymbol() const {
51  if (!CachedMCSymbol) {
52    const MachineFunction *MF = getParent();
53    MCContext &Ctx = MF->getContext();
54    const char *Prefix = Ctx.getAsmInfo()->getPrivateLabelPrefix();
55    assert(getNumber() >= 0 && "cannot get label for unreachable MBB");
56    CachedMCSymbol = Ctx.getOrCreateSymbol(Twine(Prefix) + "BB" +
57                                           Twine(MF->getFunctionNumber()) +
58                                           "_" + Twine(getNumber()));
59  }
60
61  return CachedMCSymbol;
62}
63
64
65raw_ostream &llvm::operator<<(raw_ostream &OS, const MachineBasicBlock &MBB) {
66  MBB.print(OS);
67  return OS;
68}
69
70/// When an MBB is added to an MF, we need to update the parent pointer of the
71/// MBB, the MBB numbering, and any instructions in the MBB to be on the right
72/// operand list for registers.
73///
74/// MBBs start out as #-1. When a MBB is added to a MachineFunction, it
75/// gets the next available unique MBB number. If it is removed from a
76/// MachineFunction, it goes back to being #-1.
77void ilist_traits<MachineBasicBlock>::addNodeToList(MachineBasicBlock *N) {
78  MachineFunction &MF = *N->getParent();
79  N->Number = MF.addToMBBNumbering(N);
80
81  // Make sure the instructions have their operands in the reginfo lists.
82  MachineRegisterInfo &RegInfo = MF.getRegInfo();
83  for (MachineBasicBlock::instr_iterator
84         I = N->instr_begin(), E = N->instr_end(); I != E; ++I)
85    I->AddRegOperandsToUseLists(RegInfo);
86}
87
88void ilist_traits<MachineBasicBlock>::removeNodeFromList(MachineBasicBlock *N) {
89  N->getParent()->removeFromMBBNumbering(N->Number);
90  N->Number = -1;
91}
92
93/// When we add an instruction to a basic block list, we update its parent
94/// pointer and add its operands from reg use/def lists if appropriate.
95void ilist_traits<MachineInstr>::addNodeToList(MachineInstr *N) {
96  assert(!N->getParent() && "machine instruction already in a basic block");
97  N->setParent(Parent);
98
99  // Add the instruction's register operands to their corresponding
100  // use/def lists.
101  MachineFunction *MF = Parent->getParent();
102  N->AddRegOperandsToUseLists(MF->getRegInfo());
103}
104
105/// When we remove an instruction from a basic block list, we update its parent
106/// pointer and remove its operands from reg use/def lists if appropriate.
107void ilist_traits<MachineInstr>::removeNodeFromList(MachineInstr *N) {
108  assert(N->getParent() && "machine instruction not in a basic block");
109
110  // Remove from the use/def lists.
111  if (MachineFunction *MF = N->getParent()->getParent())
112    N->RemoveRegOperandsFromUseLists(MF->getRegInfo());
113
114  N->setParent(nullptr);
115}
116
117/// When moving a range of instructions from one MBB list to another, we need to
118/// update the parent pointers and the use/def lists.
119void ilist_traits<MachineInstr>::
120transferNodesFromList(ilist_traits<MachineInstr> &FromList,
121                      ilist_iterator<MachineInstr> First,
122                      ilist_iterator<MachineInstr> Last) {
123  assert(Parent->getParent() == FromList.Parent->getParent() &&
124        "MachineInstr parent mismatch!");
125
126  // Splice within the same MBB -> no change.
127  if (Parent == FromList.Parent) return;
128
129  // If splicing between two blocks within the same function, just update the
130  // parent pointers.
131  for (; First != Last; ++First)
132    First->setParent(Parent);
133}
134
135void ilist_traits<MachineInstr>::deleteNode(MachineInstr* MI) {
136  assert(!MI->getParent() && "MI is still in a block!");
137  Parent->getParent()->DeleteMachineInstr(MI);
138}
139
140MachineBasicBlock::iterator MachineBasicBlock::getFirstNonPHI() {
141  instr_iterator I = instr_begin(), E = instr_end();
142  while (I != E && I->isPHI())
143    ++I;
144  assert((I == E || !I->isInsideBundle()) &&
145         "First non-phi MI cannot be inside a bundle!");
146  return I;
147}
148
149MachineBasicBlock::iterator
150MachineBasicBlock::SkipPHIsAndLabels(MachineBasicBlock::iterator I) {
151  iterator E = end();
152  while (I != E && (I->isPHI() || I->isPosition() || I->isDebugValue()))
153    ++I;
154  // FIXME: This needs to change if we wish to bundle labels / dbg_values
155  // inside the bundle.
156  assert((I == E || !I->isInsideBundle()) &&
157         "First non-phi / non-label instruction is inside a bundle!");
158  return I;
159}
160
161MachineBasicBlock::iterator MachineBasicBlock::getFirstTerminator() {
162  iterator B = begin(), E = end(), I = E;
163  while (I != B && ((--I)->isTerminator() || I->isDebugValue()))
164    ; /*noop */
165  while (I != E && !I->isTerminator())
166    ++I;
167  return I;
168}
169
170MachineBasicBlock::instr_iterator MachineBasicBlock::getFirstInstrTerminator() {
171  instr_iterator B = instr_begin(), E = instr_end(), I = E;
172  while (I != B && ((--I)->isTerminator() || I->isDebugValue()))
173    ; /*noop */
174  while (I != E && !I->isTerminator())
175    ++I;
176  return I;
177}
178
179MachineBasicBlock::iterator MachineBasicBlock::getFirstNonDebugInstr() {
180  // Skip over begin-of-block dbg_value instructions.
181  iterator I = begin(), E = end();
182  while (I != E && I->isDebugValue())
183    ++I;
184  return I;
185}
186
187MachineBasicBlock::iterator MachineBasicBlock::getLastNonDebugInstr() {
188  // Skip over end-of-block dbg_value instructions.
189  instr_iterator B = instr_begin(), I = instr_end();
190  while (I != B) {
191    --I;
192    // Return instruction that starts a bundle.
193    if (I->isDebugValue() || I->isInsideBundle())
194      continue;
195    return I;
196  }
197  // The block is all debug values.
198  return end();
199}
200
201bool MachineBasicBlock::hasEHPadSuccessor() const {
202  for (const_succ_iterator I = succ_begin(), E = succ_end(); I != E; ++I)
203    if ((*I)->isEHPad())
204      return true;
205  return false;
206}
207
208#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
209LLVM_DUMP_METHOD void MachineBasicBlock::dump() const {
210  print(dbgs());
211}
212#endif
213
214StringRef MachineBasicBlock::getName() const {
215  if (const BasicBlock *LBB = getBasicBlock())
216    return LBB->getName();
217  else
218    return "(null)";
219}
220
221/// Return a hopefully unique identifier for this block.
222std::string MachineBasicBlock::getFullName() const {
223  std::string Name;
224  if (getParent())
225    Name = (getParent()->getName() + ":").str();
226  if (getBasicBlock())
227    Name += getBasicBlock()->getName();
228  else
229    Name += ("BB" + Twine(getNumber())).str();
230  return Name;
231}
232
233void MachineBasicBlock::print(raw_ostream &OS, const SlotIndexes *Indexes)
234    const {
235  const MachineFunction *MF = getParent();
236  if (!MF) {
237    OS << "Can't print out MachineBasicBlock because parent MachineFunction"
238       << " is null\n";
239    return;
240  }
241  const Function *F = MF->getFunction();
242  const Module *M = F ? F->getParent() : nullptr;
243  ModuleSlotTracker MST(M);
244  print(OS, MST, Indexes);
245}
246
247void MachineBasicBlock::print(raw_ostream &OS, ModuleSlotTracker &MST,
248                              const SlotIndexes *Indexes) const {
249  const MachineFunction *MF = getParent();
250  if (!MF) {
251    OS << "Can't print out MachineBasicBlock because parent MachineFunction"
252       << " is null\n";
253    return;
254  }
255
256  if (Indexes)
257    OS << Indexes->getMBBStartIdx(this) << '\t';
258
259  OS << "BB#" << getNumber() << ": ";
260
261  const char *Comma = "";
262  if (const BasicBlock *LBB = getBasicBlock()) {
263    OS << Comma << "derived from LLVM BB ";
264    LBB->printAsOperand(OS, /*PrintType=*/false, MST);
265    Comma = ", ";
266  }
267  if (isEHPad()) { OS << Comma << "EH LANDING PAD"; Comma = ", "; }
268  if (hasAddressTaken()) { OS << Comma << "ADDRESS TAKEN"; Comma = ", "; }
269  if (Alignment)
270    OS << Comma << "Align " << Alignment << " (" << (1u << Alignment)
271       << " bytes)";
272
273  OS << '\n';
274
275  const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();
276  if (!livein_empty()) {
277    if (Indexes) OS << '\t';
278    OS << "    Live Ins:";
279    for (const auto &LI : make_range(livein_begin(), livein_end())) {
280      OS << ' ' << PrintReg(LI.PhysReg, TRI);
281      if (LI.LaneMask != ~0u)
282        OS << ':' << PrintLaneMask(LI.LaneMask);
283    }
284    OS << '\n';
285  }
286  // Print the preds of this block according to the CFG.
287  if (!pred_empty()) {
288    if (Indexes) OS << '\t';
289    OS << "    Predecessors according to CFG:";
290    for (const_pred_iterator PI = pred_begin(), E = pred_end(); PI != E; ++PI)
291      OS << " BB#" << (*PI)->getNumber();
292    OS << '\n';
293  }
294
295  for (auto &I : instrs()) {
296    if (Indexes) {
297      if (Indexes->hasIndex(I))
298        OS << Indexes->getInstructionIndex(I);
299      OS << '\t';
300    }
301    OS << '\t';
302    if (I.isInsideBundle())
303      OS << "  * ";
304    I.print(OS, MST);
305  }
306
307  // Print the successors of this block according to the CFG.
308  if (!succ_empty()) {
309    if (Indexes) OS << '\t';
310    OS << "    Successors according to CFG:";
311    for (const_succ_iterator SI = succ_begin(), E = succ_end(); SI != E; ++SI) {
312      OS << " BB#" << (*SI)->getNumber();
313      if (!Probs.empty())
314        OS << '(' << *getProbabilityIterator(SI) << ')';
315    }
316    OS << '\n';
317  }
318}
319
320void MachineBasicBlock::printAsOperand(raw_ostream &OS,
321                                       bool /*PrintType*/) const {
322  OS << "BB#" << getNumber();
323}
324
325void MachineBasicBlock::removeLiveIn(MCPhysReg Reg, LaneBitmask LaneMask) {
326  LiveInVector::iterator I = std::find_if(
327      LiveIns.begin(), LiveIns.end(),
328      [Reg] (const RegisterMaskPair &LI) { return LI.PhysReg == Reg; });
329  if (I == LiveIns.end())
330    return;
331
332  I->LaneMask &= ~LaneMask;
333  if (I->LaneMask == 0)
334    LiveIns.erase(I);
335}
336
337bool MachineBasicBlock::isLiveIn(MCPhysReg Reg, LaneBitmask LaneMask) const {
338  livein_iterator I = std::find_if(
339      LiveIns.begin(), LiveIns.end(),
340      [Reg] (const RegisterMaskPair &LI) { return LI.PhysReg == Reg; });
341  return I != livein_end() && (I->LaneMask & LaneMask) != 0;
342}
343
344void MachineBasicBlock::sortUniqueLiveIns() {
345  std::sort(LiveIns.begin(), LiveIns.end(),
346            [](const RegisterMaskPair &LI0, const RegisterMaskPair &LI1) {
347              return LI0.PhysReg < LI1.PhysReg;
348            });
349  // Liveins are sorted by physreg now we can merge their lanemasks.
350  LiveInVector::const_iterator I = LiveIns.begin();
351  LiveInVector::const_iterator J;
352  LiveInVector::iterator Out = LiveIns.begin();
353  for (; I != LiveIns.end(); ++Out, I = J) {
354    unsigned PhysReg = I->PhysReg;
355    LaneBitmask LaneMask = I->LaneMask;
356    for (J = std::next(I); J != LiveIns.end() && J->PhysReg == PhysReg; ++J)
357      LaneMask |= J->LaneMask;
358    Out->PhysReg = PhysReg;
359    Out->LaneMask = LaneMask;
360  }
361  LiveIns.erase(Out, LiveIns.end());
362}
363
364unsigned
365MachineBasicBlock::addLiveIn(MCPhysReg PhysReg, const TargetRegisterClass *RC) {
366  assert(getParent() && "MBB must be inserted in function");
367  assert(TargetRegisterInfo::isPhysicalRegister(PhysReg) && "Expected physreg");
368  assert(RC && "Register class is required");
369  assert((isEHPad() || this == &getParent()->front()) &&
370         "Only the entry block and landing pads can have physreg live ins");
371
372  bool LiveIn = isLiveIn(PhysReg);
373  iterator I = SkipPHIsAndLabels(begin()), E = end();
374  MachineRegisterInfo &MRI = getParent()->getRegInfo();
375  const TargetInstrInfo &TII = *getParent()->getSubtarget().getInstrInfo();
376
377  // Look for an existing copy.
378  if (LiveIn)
379    for (;I != E && I->isCopy(); ++I)
380      if (I->getOperand(1).getReg() == PhysReg) {
381        unsigned VirtReg = I->getOperand(0).getReg();
382        if (!MRI.constrainRegClass(VirtReg, RC))
383          llvm_unreachable("Incompatible live-in register class.");
384        return VirtReg;
385      }
386
387  // No luck, create a virtual register.
388  unsigned VirtReg = MRI.createVirtualRegister(RC);
389  BuildMI(*this, I, DebugLoc(), TII.get(TargetOpcode::COPY), VirtReg)
390    .addReg(PhysReg, RegState::Kill);
391  if (!LiveIn)
392    addLiveIn(PhysReg);
393  return VirtReg;
394}
395
396void MachineBasicBlock::moveBefore(MachineBasicBlock *NewAfter) {
397  getParent()->splice(NewAfter->getIterator(), getIterator());
398}
399
400void MachineBasicBlock::moveAfter(MachineBasicBlock *NewBefore) {
401  getParent()->splice(++NewBefore->getIterator(), getIterator());
402}
403
404void MachineBasicBlock::updateTerminator() {
405  const TargetInstrInfo *TII = getParent()->getSubtarget().getInstrInfo();
406  // A block with no successors has no concerns with fall-through edges.
407  if (this->succ_empty())
408    return;
409
410  MachineBasicBlock *TBB = nullptr, *FBB = nullptr;
411  SmallVector<MachineOperand, 4> Cond;
412  DebugLoc DL;  // FIXME: this is nowhere
413  bool B = TII->analyzeBranch(*this, TBB, FBB, Cond);
414  (void) B;
415  assert(!B && "UpdateTerminators requires analyzable predecessors!");
416  if (Cond.empty()) {
417    if (TBB) {
418      // The block has an unconditional branch. If its successor is now its
419      // layout successor, delete the branch.
420      if (isLayoutSuccessor(TBB))
421        TII->RemoveBranch(*this);
422    } else {
423      // The block has an unconditional fallthrough. If its successor is not its
424      // layout successor, insert a branch. First we have to locate the only
425      // non-landing-pad successor, as that is the fallthrough block.
426      for (succ_iterator SI = succ_begin(), SE = succ_end(); SI != SE; ++SI) {
427        if ((*SI)->isEHPad())
428          continue;
429        assert(!TBB && "Found more than one non-landing-pad successor!");
430        TBB = *SI;
431      }
432
433      // If there is no non-landing-pad successor, the block has no fall-through
434      // edges to be concerned with.
435      if (!TBB)
436        return;
437
438      // Finally update the unconditional successor to be reached via a branch
439      // if it would not be reached by fallthrough.
440      if (!isLayoutSuccessor(TBB))
441        TII->InsertBranch(*this, TBB, nullptr, Cond, DL);
442    }
443    return;
444  }
445
446  if (FBB) {
447    // The block has a non-fallthrough conditional branch. If one of its
448    // successors is its layout successor, rewrite it to a fallthrough
449    // conditional branch.
450    if (isLayoutSuccessor(TBB)) {
451      if (TII->ReverseBranchCondition(Cond))
452        return;
453      TII->RemoveBranch(*this);
454      TII->InsertBranch(*this, FBB, nullptr, Cond, DL);
455    } else if (isLayoutSuccessor(FBB)) {
456      TII->RemoveBranch(*this);
457      TII->InsertBranch(*this, TBB, nullptr, Cond, DL);
458    }
459    return;
460  }
461
462  // Walk through the successors and find the successor which is not a landing
463  // pad and is not the conditional branch destination (in TBB) as the
464  // fallthrough successor.
465  MachineBasicBlock *FallthroughBB = nullptr;
466  for (succ_iterator SI = succ_begin(), SE = succ_end(); SI != SE; ++SI) {
467    if ((*SI)->isEHPad() || *SI == TBB)
468      continue;
469    assert(!FallthroughBB && "Found more than one fallthrough successor.");
470    FallthroughBB = *SI;
471  }
472
473  if (!FallthroughBB) {
474    if (canFallThrough()) {
475      // We fallthrough to the same basic block as the conditional jump targets.
476      // Remove the conditional jump, leaving unconditional fallthrough.
477      // FIXME: This does not seem like a reasonable pattern to support, but it
478      // has been seen in the wild coming out of degenerate ARM test cases.
479      TII->RemoveBranch(*this);
480
481      // Finally update the unconditional successor to be reached via a branch if
482      // it would not be reached by fallthrough.
483      if (!isLayoutSuccessor(TBB))
484        TII->InsertBranch(*this, TBB, nullptr, Cond, DL);
485      return;
486    }
487
488    // We enter here iff exactly one successor is TBB which cannot fallthrough
489    // and the rest successors if any are EHPads.  In this case, we need to
490    // change the conditional branch into unconditional branch.
491    TII->RemoveBranch(*this);
492    Cond.clear();
493    TII->InsertBranch(*this, TBB, nullptr, Cond, DL);
494    return;
495  }
496
497  // The block has a fallthrough conditional branch.
498  if (isLayoutSuccessor(TBB)) {
499    if (TII->ReverseBranchCondition(Cond)) {
500      // We can't reverse the condition, add an unconditional branch.
501      Cond.clear();
502      TII->InsertBranch(*this, FallthroughBB, nullptr, Cond, DL);
503      return;
504    }
505    TII->RemoveBranch(*this);
506    TII->InsertBranch(*this, FallthroughBB, nullptr, Cond, DL);
507  } else if (!isLayoutSuccessor(FallthroughBB)) {
508    TII->RemoveBranch(*this);
509    TII->InsertBranch(*this, TBB, FallthroughBB, Cond, DL);
510  }
511}
512
513void MachineBasicBlock::validateSuccProbs() const {
514#ifndef NDEBUG
515  int64_t Sum = 0;
516  for (auto Prob : Probs)
517    Sum += Prob.getNumerator();
518  // Due to precision issue, we assume that the sum of probabilities is one if
519  // the difference between the sum of their numerators and the denominator is
520  // no greater than the number of successors.
521  assert((uint64_t)std::abs(Sum - BranchProbability::getDenominator()) <=
522             Probs.size() &&
523         "The sum of successors's probabilities exceeds one.");
524#endif // NDEBUG
525}
526
527void MachineBasicBlock::addSuccessor(MachineBasicBlock *Succ,
528                                     BranchProbability Prob) {
529  // Probability list is either empty (if successor list isn't empty, this means
530  // disabled optimization) or has the same size as successor list.
531  if (!(Probs.empty() && !Successors.empty()))
532    Probs.push_back(Prob);
533  Successors.push_back(Succ);
534  Succ->addPredecessor(this);
535}
536
537void MachineBasicBlock::addSuccessorWithoutProb(MachineBasicBlock *Succ) {
538  // We need to make sure probability list is either empty or has the same size
539  // of successor list. When this function is called, we can safely delete all
540  // probability in the list.
541  Probs.clear();
542  Successors.push_back(Succ);
543  Succ->addPredecessor(this);
544}
545
546void MachineBasicBlock::removeSuccessor(MachineBasicBlock *Succ,
547                                        bool NormalizeSuccProbs) {
548  succ_iterator I = std::find(Successors.begin(), Successors.end(), Succ);
549  removeSuccessor(I, NormalizeSuccProbs);
550}
551
552MachineBasicBlock::succ_iterator
553MachineBasicBlock::removeSuccessor(succ_iterator I, bool NormalizeSuccProbs) {
554  assert(I != Successors.end() && "Not a current successor!");
555
556  // If probability list is empty it means we don't use it (disabled
557  // optimization).
558  if (!Probs.empty()) {
559    probability_iterator WI = getProbabilityIterator(I);
560    Probs.erase(WI);
561    if (NormalizeSuccProbs)
562      normalizeSuccProbs();
563  }
564
565  (*I)->removePredecessor(this);
566  return Successors.erase(I);
567}
568
569void MachineBasicBlock::replaceSuccessor(MachineBasicBlock *Old,
570                                         MachineBasicBlock *New) {
571  if (Old == New)
572    return;
573
574  succ_iterator E = succ_end();
575  succ_iterator NewI = E;
576  succ_iterator OldI = E;
577  for (succ_iterator I = succ_begin(); I != E; ++I) {
578    if (*I == Old) {
579      OldI = I;
580      if (NewI != E)
581        break;
582    }
583    if (*I == New) {
584      NewI = I;
585      if (OldI != E)
586        break;
587    }
588  }
589  assert(OldI != E && "Old is not a successor of this block");
590
591  // If New isn't already a successor, let it take Old's place.
592  if (NewI == E) {
593    Old->removePredecessor(this);
594    New->addPredecessor(this);
595    *OldI = New;
596    return;
597  }
598
599  // New is already a successor.
600  // Update its probability instead of adding a duplicate edge.
601  if (!Probs.empty()) {
602    auto ProbIter = getProbabilityIterator(NewI);
603    if (!ProbIter->isUnknown())
604      *ProbIter += *getProbabilityIterator(OldI);
605  }
606  removeSuccessor(OldI);
607}
608
609void MachineBasicBlock::addPredecessor(MachineBasicBlock *Pred) {
610  Predecessors.push_back(Pred);
611}
612
613void MachineBasicBlock::removePredecessor(MachineBasicBlock *Pred) {
614  pred_iterator I = std::find(Predecessors.begin(), Predecessors.end(), Pred);
615  assert(I != Predecessors.end() && "Pred is not a predecessor of this block!");
616  Predecessors.erase(I);
617}
618
619void MachineBasicBlock::transferSuccessors(MachineBasicBlock *FromMBB) {
620  if (this == FromMBB)
621    return;
622
623  while (!FromMBB->succ_empty()) {
624    MachineBasicBlock *Succ = *FromMBB->succ_begin();
625
626    // If probability list is empty it means we don't use it (disabled optimization).
627    if (!FromMBB->Probs.empty()) {
628      auto Prob = *FromMBB->Probs.begin();
629      addSuccessor(Succ, Prob);
630    } else
631      addSuccessorWithoutProb(Succ);
632
633    FromMBB->removeSuccessor(Succ);
634  }
635}
636
637void
638MachineBasicBlock::transferSuccessorsAndUpdatePHIs(MachineBasicBlock *FromMBB) {
639  if (this == FromMBB)
640    return;
641
642  while (!FromMBB->succ_empty()) {
643    MachineBasicBlock *Succ = *FromMBB->succ_begin();
644    if (!FromMBB->Probs.empty()) {
645      auto Prob = *FromMBB->Probs.begin();
646      addSuccessor(Succ, Prob);
647    } else
648      addSuccessorWithoutProb(Succ);
649    FromMBB->removeSuccessor(Succ);
650
651    // Fix up any PHI nodes in the successor.
652    for (MachineBasicBlock::instr_iterator MI = Succ->instr_begin(),
653           ME = Succ->instr_end(); MI != ME && MI->isPHI(); ++MI)
654      for (unsigned i = 2, e = MI->getNumOperands()+1; i != e; i += 2) {
655        MachineOperand &MO = MI->getOperand(i);
656        if (MO.getMBB() == FromMBB)
657          MO.setMBB(this);
658      }
659  }
660  normalizeSuccProbs();
661}
662
663bool MachineBasicBlock::isPredecessor(const MachineBasicBlock *MBB) const {
664  return std::find(pred_begin(), pred_end(), MBB) != pred_end();
665}
666
667bool MachineBasicBlock::isSuccessor(const MachineBasicBlock *MBB) const {
668  return std::find(succ_begin(), succ_end(), MBB) != succ_end();
669}
670
671bool MachineBasicBlock::isLayoutSuccessor(const MachineBasicBlock *MBB) const {
672  MachineFunction::const_iterator I(this);
673  return std::next(I) == MachineFunction::const_iterator(MBB);
674}
675
676bool MachineBasicBlock::canFallThrough() {
677  MachineFunction::iterator Fallthrough = getIterator();
678  ++Fallthrough;
679  // If FallthroughBlock is off the end of the function, it can't fall through.
680  if (Fallthrough == getParent()->end())
681    return false;
682
683  // If FallthroughBlock isn't a successor, no fallthrough is possible.
684  if (!isSuccessor(&*Fallthrough))
685    return false;
686
687  // Analyze the branches, if any, at the end of the block.
688  MachineBasicBlock *TBB = nullptr, *FBB = nullptr;
689  SmallVector<MachineOperand, 4> Cond;
690  const TargetInstrInfo *TII = getParent()->getSubtarget().getInstrInfo();
691  if (TII->analyzeBranch(*this, TBB, FBB, Cond)) {
692    // If we couldn't analyze the branch, examine the last instruction.
693    // If the block doesn't end in a known control barrier, assume fallthrough
694    // is possible. The isPredicated check is needed because this code can be
695    // called during IfConversion, where an instruction which is normally a
696    // Barrier is predicated and thus no longer an actual control barrier.
697    return empty() || !back().isBarrier() || TII->isPredicated(back());
698  }
699
700  // If there is no branch, control always falls through.
701  if (!TBB) return true;
702
703  // If there is some explicit branch to the fallthrough block, it can obviously
704  // reach, even though the branch should get folded to fall through implicitly.
705  if (MachineFunction::iterator(TBB) == Fallthrough ||
706      MachineFunction::iterator(FBB) == Fallthrough)
707    return true;
708
709  // If it's an unconditional branch to some block not the fall through, it
710  // doesn't fall through.
711  if (Cond.empty()) return false;
712
713  // Otherwise, if it is conditional and has no explicit false block, it falls
714  // through.
715  return FBB == nullptr;
716}
717
718MachineBasicBlock *MachineBasicBlock::SplitCriticalEdge(MachineBasicBlock *Succ,
719                                                        Pass &P) {
720  if (!canSplitCriticalEdge(Succ))
721    return nullptr;
722
723  MachineFunction *MF = getParent();
724  DebugLoc DL;  // FIXME: this is nowhere
725
726  MachineBasicBlock *NMBB = MF->CreateMachineBasicBlock();
727  MF->insert(std::next(MachineFunction::iterator(this)), NMBB);
728  DEBUG(dbgs() << "Splitting critical edge:"
729        " BB#" << getNumber()
730        << " -- BB#" << NMBB->getNumber()
731        << " -- BB#" << Succ->getNumber() << '\n');
732
733  LiveIntervals *LIS = P.getAnalysisIfAvailable<LiveIntervals>();
734  SlotIndexes *Indexes = P.getAnalysisIfAvailable<SlotIndexes>();
735  if (LIS)
736    LIS->insertMBBInMaps(NMBB);
737  else if (Indexes)
738    Indexes->insertMBBInMaps(NMBB);
739
740  // On some targets like Mips, branches may kill virtual registers. Make sure
741  // that LiveVariables is properly updated after updateTerminator replaces the
742  // terminators.
743  LiveVariables *LV = P.getAnalysisIfAvailable<LiveVariables>();
744
745  // Collect a list of virtual registers killed by the terminators.
746  SmallVector<unsigned, 4> KilledRegs;
747  if (LV)
748    for (instr_iterator I = getFirstInstrTerminator(), E = instr_end();
749         I != E; ++I) {
750      MachineInstr *MI = &*I;
751      for (MachineInstr::mop_iterator OI = MI->operands_begin(),
752           OE = MI->operands_end(); OI != OE; ++OI) {
753        if (!OI->isReg() || OI->getReg() == 0 ||
754            !OI->isUse() || !OI->isKill() || OI->isUndef())
755          continue;
756        unsigned Reg = OI->getReg();
757        if (TargetRegisterInfo::isPhysicalRegister(Reg) ||
758            LV->getVarInfo(Reg).removeKill(*MI)) {
759          KilledRegs.push_back(Reg);
760          DEBUG(dbgs() << "Removing terminator kill: " << *MI);
761          OI->setIsKill(false);
762        }
763      }
764    }
765
766  SmallVector<unsigned, 4> UsedRegs;
767  if (LIS) {
768    for (instr_iterator I = getFirstInstrTerminator(), E = instr_end();
769         I != E; ++I) {
770      MachineInstr *MI = &*I;
771
772      for (MachineInstr::mop_iterator OI = MI->operands_begin(),
773           OE = MI->operands_end(); OI != OE; ++OI) {
774        if (!OI->isReg() || OI->getReg() == 0)
775          continue;
776
777        unsigned Reg = OI->getReg();
778        if (std::find(UsedRegs.begin(), UsedRegs.end(), Reg) == UsedRegs.end())
779          UsedRegs.push_back(Reg);
780      }
781    }
782  }
783
784  ReplaceUsesOfBlockWith(Succ, NMBB);
785
786  // If updateTerminator() removes instructions, we need to remove them from
787  // SlotIndexes.
788  SmallVector<MachineInstr*, 4> Terminators;
789  if (Indexes) {
790    for (instr_iterator I = getFirstInstrTerminator(), E = instr_end();
791         I != E; ++I)
792      Terminators.push_back(&*I);
793  }
794
795  updateTerminator();
796
797  if (Indexes) {
798    SmallVector<MachineInstr*, 4> NewTerminators;
799    for (instr_iterator I = getFirstInstrTerminator(), E = instr_end();
800         I != E; ++I)
801      NewTerminators.push_back(&*I);
802
803    for (SmallVectorImpl<MachineInstr*>::iterator I = Terminators.begin(),
804        E = Terminators.end(); I != E; ++I) {
805      if (std::find(NewTerminators.begin(), NewTerminators.end(), *I) ==
806          NewTerminators.end())
807       Indexes->removeMachineInstrFromMaps(**I);
808    }
809  }
810
811  // Insert unconditional "jump Succ" instruction in NMBB if necessary.
812  NMBB->addSuccessor(Succ);
813  if (!NMBB->isLayoutSuccessor(Succ)) {
814    SmallVector<MachineOperand, 4> Cond;
815    const TargetInstrInfo *TII = getParent()->getSubtarget().getInstrInfo();
816    TII->InsertBranch(*NMBB, Succ, nullptr, Cond, DL);
817
818    if (Indexes) {
819      for (MachineInstr &MI : NMBB->instrs()) {
820        // Some instructions may have been moved to NMBB by updateTerminator(),
821        // so we first remove any instruction that already has an index.
822        if (Indexes->hasIndex(MI))
823          Indexes->removeMachineInstrFromMaps(MI);
824        Indexes->insertMachineInstrInMaps(MI);
825      }
826    }
827  }
828
829  // Fix PHI nodes in Succ so they refer to NMBB instead of this
830  for (MachineBasicBlock::instr_iterator
831         i = Succ->instr_begin(),e = Succ->instr_end();
832       i != e && i->isPHI(); ++i)
833    for (unsigned ni = 1, ne = i->getNumOperands(); ni != ne; ni += 2)
834      if (i->getOperand(ni+1).getMBB() == this)
835        i->getOperand(ni+1).setMBB(NMBB);
836
837  // Inherit live-ins from the successor
838  for (const auto &LI : Succ->liveins())
839    NMBB->addLiveIn(LI);
840
841  // Update LiveVariables.
842  const TargetRegisterInfo *TRI = MF->getSubtarget().getRegisterInfo();
843  if (LV) {
844    // Restore kills of virtual registers that were killed by the terminators.
845    while (!KilledRegs.empty()) {
846      unsigned Reg = KilledRegs.pop_back_val();
847      for (instr_iterator I = instr_end(), E = instr_begin(); I != E;) {
848        if (!(--I)->addRegisterKilled(Reg, TRI, /* addIfNotFound= */ false))
849          continue;
850        if (TargetRegisterInfo::isVirtualRegister(Reg))
851          LV->getVarInfo(Reg).Kills.push_back(&*I);
852        DEBUG(dbgs() << "Restored terminator kill: " << *I);
853        break;
854      }
855    }
856    // Update relevant live-through information.
857    LV->addNewBlock(NMBB, this, Succ);
858  }
859
860  if (LIS) {
861    // After splitting the edge and updating SlotIndexes, live intervals may be
862    // in one of two situations, depending on whether this block was the last in
863    // the function. If the original block was the last in the function, all
864    // live intervals will end prior to the beginning of the new split block. If
865    // the original block was not at the end of the function, all live intervals
866    // will extend to the end of the new split block.
867
868    bool isLastMBB =
869      std::next(MachineFunction::iterator(NMBB)) == getParent()->end();
870
871    SlotIndex StartIndex = Indexes->getMBBEndIdx(this);
872    SlotIndex PrevIndex = StartIndex.getPrevSlot();
873    SlotIndex EndIndex = Indexes->getMBBEndIdx(NMBB);
874
875    // Find the registers used from NMBB in PHIs in Succ.
876    SmallSet<unsigned, 8> PHISrcRegs;
877    for (MachineBasicBlock::instr_iterator
878         I = Succ->instr_begin(), E = Succ->instr_end();
879         I != E && I->isPHI(); ++I) {
880      for (unsigned ni = 1, ne = I->getNumOperands(); ni != ne; ni += 2) {
881        if (I->getOperand(ni+1).getMBB() == NMBB) {
882          MachineOperand &MO = I->getOperand(ni);
883          unsigned Reg = MO.getReg();
884          PHISrcRegs.insert(Reg);
885          if (MO.isUndef())
886            continue;
887
888          LiveInterval &LI = LIS->getInterval(Reg);
889          VNInfo *VNI = LI.getVNInfoAt(PrevIndex);
890          assert(VNI &&
891                 "PHI sources should be live out of their predecessors.");
892          LI.addSegment(LiveInterval::Segment(StartIndex, EndIndex, VNI));
893        }
894      }
895    }
896
897    MachineRegisterInfo *MRI = &getParent()->getRegInfo();
898    for (unsigned i = 0, e = MRI->getNumVirtRegs(); i != e; ++i) {
899      unsigned Reg = TargetRegisterInfo::index2VirtReg(i);
900      if (PHISrcRegs.count(Reg) || !LIS->hasInterval(Reg))
901        continue;
902
903      LiveInterval &LI = LIS->getInterval(Reg);
904      if (!LI.liveAt(PrevIndex))
905        continue;
906
907      bool isLiveOut = LI.liveAt(LIS->getMBBStartIdx(Succ));
908      if (isLiveOut && isLastMBB) {
909        VNInfo *VNI = LI.getVNInfoAt(PrevIndex);
910        assert(VNI && "LiveInterval should have VNInfo where it is live.");
911        LI.addSegment(LiveInterval::Segment(StartIndex, EndIndex, VNI));
912      } else if (!isLiveOut && !isLastMBB) {
913        LI.removeSegment(StartIndex, EndIndex);
914      }
915    }
916
917    // Update all intervals for registers whose uses may have been modified by
918    // updateTerminator().
919    LIS->repairIntervalsInRange(this, getFirstTerminator(), end(), UsedRegs);
920  }
921
922  if (MachineDominatorTree *MDT =
923          P.getAnalysisIfAvailable<MachineDominatorTree>())
924    MDT->recordSplitCriticalEdge(this, Succ, NMBB);
925
926  if (MachineLoopInfo *MLI = P.getAnalysisIfAvailable<MachineLoopInfo>())
927    if (MachineLoop *TIL = MLI->getLoopFor(this)) {
928      // If one or the other blocks were not in a loop, the new block is not
929      // either, and thus LI doesn't need to be updated.
930      if (MachineLoop *DestLoop = MLI->getLoopFor(Succ)) {
931        if (TIL == DestLoop) {
932          // Both in the same loop, the NMBB joins loop.
933          DestLoop->addBasicBlockToLoop(NMBB, MLI->getBase());
934        } else if (TIL->contains(DestLoop)) {
935          // Edge from an outer loop to an inner loop.  Add to the outer loop.
936          TIL->addBasicBlockToLoop(NMBB, MLI->getBase());
937        } else if (DestLoop->contains(TIL)) {
938          // Edge from an inner loop to an outer loop.  Add to the outer loop.
939          DestLoop->addBasicBlockToLoop(NMBB, MLI->getBase());
940        } else {
941          // Edge from two loops with no containment relation.  Because these
942          // are natural loops, we know that the destination block must be the
943          // header of its loop (adding a branch into a loop elsewhere would
944          // create an irreducible loop).
945          assert(DestLoop->getHeader() == Succ &&
946                 "Should not create irreducible loops!");
947          if (MachineLoop *P = DestLoop->getParentLoop())
948            P->addBasicBlockToLoop(NMBB, MLI->getBase());
949        }
950      }
951    }
952
953  return NMBB;
954}
955
956bool MachineBasicBlock::canSplitCriticalEdge(
957    const MachineBasicBlock *Succ) const {
958  // Splitting the critical edge to a landing pad block is non-trivial. Don't do
959  // it in this generic function.
960  if (Succ->isEHPad())
961    return false;
962
963  const MachineFunction *MF = getParent();
964
965  // Performance might be harmed on HW that implements branching using exec mask
966  // where both sides of the branches are always executed.
967  if (MF->getTarget().requiresStructuredCFG())
968    return false;
969
970  // We may need to update this's terminator, but we can't do that if
971  // AnalyzeBranch fails. If this uses a jump table, we won't touch it.
972  const TargetInstrInfo *TII = MF->getSubtarget().getInstrInfo();
973  MachineBasicBlock *TBB = nullptr, *FBB = nullptr;
974  SmallVector<MachineOperand, 4> Cond;
975  // AnalyzeBanch should modify this, since we did not allow modification.
976  if (TII->analyzeBranch(*const_cast<MachineBasicBlock *>(this), TBB, FBB, Cond,
977                         /*AllowModify*/ false))
978    return false;
979
980  // Avoid bugpoint weirdness: A block may end with a conditional branch but
981  // jumps to the same MBB is either case. We have duplicate CFG edges in that
982  // case that we can't handle. Since this never happens in properly optimized
983  // code, just skip those edges.
984  if (TBB && TBB == FBB) {
985    DEBUG(dbgs() << "Won't split critical edge after degenerate BB#"
986                 << getNumber() << '\n');
987    return false;
988  }
989  return true;
990}
991
992/// Prepare MI to be removed from its bundle. This fixes bundle flags on MI's
993/// neighboring instructions so the bundle won't be broken by removing MI.
994static void unbundleSingleMI(MachineInstr *MI) {
995  // Removing the first instruction in a bundle.
996  if (MI->isBundledWithSucc() && !MI->isBundledWithPred())
997    MI->unbundleFromSucc();
998  // Removing the last instruction in a bundle.
999  if (MI->isBundledWithPred() && !MI->isBundledWithSucc())
1000    MI->unbundleFromPred();
1001  // If MI is not bundled, or if it is internal to a bundle, the neighbor flags
1002  // are already fine.
1003}
1004
1005MachineBasicBlock::instr_iterator
1006MachineBasicBlock::erase(MachineBasicBlock::instr_iterator I) {
1007  unbundleSingleMI(&*I);
1008  return Insts.erase(I);
1009}
1010
1011MachineInstr *MachineBasicBlock::remove_instr(MachineInstr *MI) {
1012  unbundleSingleMI(MI);
1013  MI->clearFlag(MachineInstr::BundledPred);
1014  MI->clearFlag(MachineInstr::BundledSucc);
1015  return Insts.remove(MI);
1016}
1017
1018MachineBasicBlock::instr_iterator
1019MachineBasicBlock::insert(instr_iterator I, MachineInstr *MI) {
1020  assert(!MI->isBundledWithPred() && !MI->isBundledWithSucc() &&
1021         "Cannot insert instruction with bundle flags");
1022  // Set the bundle flags when inserting inside a bundle.
1023  if (I != instr_end() && I->isBundledWithPred()) {
1024    MI->setFlag(MachineInstr::BundledPred);
1025    MI->setFlag(MachineInstr::BundledSucc);
1026  }
1027  return Insts.insert(I, MI);
1028}
1029
1030/// This method unlinks 'this' from the containing function, and returns it, but
1031/// does not delete it.
1032MachineBasicBlock *MachineBasicBlock::removeFromParent() {
1033  assert(getParent() && "Not embedded in a function!");
1034  getParent()->remove(this);
1035  return this;
1036}
1037
1038/// This method unlinks 'this' from the containing function, and deletes it.
1039void MachineBasicBlock::eraseFromParent() {
1040  assert(getParent() && "Not embedded in a function!");
1041  getParent()->erase(this);
1042}
1043
1044/// Given a machine basic block that branched to 'Old', change the code and CFG
1045/// so that it branches to 'New' instead.
1046void MachineBasicBlock::ReplaceUsesOfBlockWith(MachineBasicBlock *Old,
1047                                               MachineBasicBlock *New) {
1048  assert(Old != New && "Cannot replace self with self!");
1049
1050  MachineBasicBlock::instr_iterator I = instr_end();
1051  while (I != instr_begin()) {
1052    --I;
1053    if (!I->isTerminator()) break;
1054
1055    // Scan the operands of this machine instruction, replacing any uses of Old
1056    // with New.
1057    for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
1058      if (I->getOperand(i).isMBB() &&
1059          I->getOperand(i).getMBB() == Old)
1060        I->getOperand(i).setMBB(New);
1061  }
1062
1063  // Update the successor information.
1064  replaceSuccessor(Old, New);
1065}
1066
1067/// Various pieces of code can cause excess edges in the CFG to be inserted.  If
1068/// we have proven that MBB can only branch to DestA and DestB, remove any other
1069/// MBB successors from the CFG.  DestA and DestB can be null.
1070///
1071/// Besides DestA and DestB, retain other edges leading to LandingPads
1072/// (currently there can be only one; we don't check or require that here).
1073/// Note it is possible that DestA and/or DestB are LandingPads.
1074bool MachineBasicBlock::CorrectExtraCFGEdges(MachineBasicBlock *DestA,
1075                                             MachineBasicBlock *DestB,
1076                                             bool IsCond) {
1077  // The values of DestA and DestB frequently come from a call to the
1078  // 'TargetInstrInfo::AnalyzeBranch' method. We take our meaning of the initial
1079  // values from there.
1080  //
1081  // 1. If both DestA and DestB are null, then the block ends with no branches
1082  //    (it falls through to its successor).
1083  // 2. If DestA is set, DestB is null, and IsCond is false, then the block ends
1084  //    with only an unconditional branch.
1085  // 3. If DestA is set, DestB is null, and IsCond is true, then the block ends
1086  //    with a conditional branch that falls through to a successor (DestB).
1087  // 4. If DestA and DestB is set and IsCond is true, then the block ends with a
1088  //    conditional branch followed by an unconditional branch. DestA is the
1089  //    'true' destination and DestB is the 'false' destination.
1090
1091  bool Changed = false;
1092
1093  MachineFunction::iterator FallThru = std::next(getIterator());
1094
1095  if (!DestA && !DestB) {
1096    // Block falls through to successor.
1097    DestA = &*FallThru;
1098    DestB = &*FallThru;
1099  } else if (DestA && !DestB) {
1100    if (IsCond)
1101      // Block ends in conditional jump that falls through to successor.
1102      DestB = &*FallThru;
1103  } else {
1104    assert(DestA && DestB && IsCond &&
1105           "CFG in a bad state. Cannot correct CFG edges");
1106  }
1107
1108  // Remove superfluous edges. I.e., those which aren't destinations of this
1109  // basic block, duplicate edges, or landing pads.
1110  SmallPtrSet<const MachineBasicBlock*, 8> SeenMBBs;
1111  MachineBasicBlock::succ_iterator SI = succ_begin();
1112  while (SI != succ_end()) {
1113    const MachineBasicBlock *MBB = *SI;
1114    if (!SeenMBBs.insert(MBB).second ||
1115        (MBB != DestA && MBB != DestB && !MBB->isEHPad())) {
1116      // This is a superfluous edge, remove it.
1117      SI = removeSuccessor(SI);
1118      Changed = true;
1119    } else {
1120      ++SI;
1121    }
1122  }
1123
1124  if (Changed)
1125    normalizeSuccProbs();
1126  return Changed;
1127}
1128
1129/// Find the next valid DebugLoc starting at MBBI, skipping any DBG_VALUE
1130/// instructions.  Return UnknownLoc if there is none.
1131DebugLoc
1132MachineBasicBlock::findDebugLoc(instr_iterator MBBI) {
1133  DebugLoc DL;
1134  instr_iterator E = instr_end();
1135  if (MBBI == E)
1136    return DL;
1137
1138  // Skip debug declarations, we don't want a DebugLoc from them.
1139  while (MBBI != E && MBBI->isDebugValue())
1140    MBBI++;
1141  if (MBBI != E)
1142    DL = MBBI->getDebugLoc();
1143  return DL;
1144}
1145
1146/// Return probability of the edge from this block to MBB.
1147BranchProbability
1148MachineBasicBlock::getSuccProbability(const_succ_iterator Succ) const {
1149  if (Probs.empty())
1150    return BranchProbability(1, succ_size());
1151
1152  const auto &Prob = *getProbabilityIterator(Succ);
1153  if (Prob.isUnknown()) {
1154    // For unknown probabilities, collect the sum of all known ones, and evenly
1155    // ditribute the complemental of the sum to each unknown probability.
1156    unsigned KnownProbNum = 0;
1157    auto Sum = BranchProbability::getZero();
1158    for (auto &P : Probs) {
1159      if (!P.isUnknown()) {
1160        Sum += P;
1161        KnownProbNum++;
1162      }
1163    }
1164    return Sum.getCompl() / (Probs.size() - KnownProbNum);
1165  } else
1166    return Prob;
1167}
1168
1169/// Set successor probability of a given iterator.
1170void MachineBasicBlock::setSuccProbability(succ_iterator I,
1171                                           BranchProbability Prob) {
1172  assert(!Prob.isUnknown());
1173  if (Probs.empty())
1174    return;
1175  *getProbabilityIterator(I) = Prob;
1176}
1177
1178/// Return probability iterator corresonding to the I successor iterator
1179MachineBasicBlock::const_probability_iterator
1180MachineBasicBlock::getProbabilityIterator(
1181    MachineBasicBlock::const_succ_iterator I) const {
1182  assert(Probs.size() == Successors.size() && "Async probability list!");
1183  const size_t index = std::distance(Successors.begin(), I);
1184  assert(index < Probs.size() && "Not a current successor!");
1185  return Probs.begin() + index;
1186}
1187
1188/// Return probability iterator corresonding to the I successor iterator.
1189MachineBasicBlock::probability_iterator
1190MachineBasicBlock::getProbabilityIterator(MachineBasicBlock::succ_iterator I) {
1191  assert(Probs.size() == Successors.size() && "Async probability list!");
1192  const size_t index = std::distance(Successors.begin(), I);
1193  assert(index < Probs.size() && "Not a current successor!");
1194  return Probs.begin() + index;
1195}
1196
1197/// Return whether (physical) register "Reg" has been <def>ined and not <kill>ed
1198/// as of just before "MI".
1199///
1200/// Search is localised to a neighborhood of
1201/// Neighborhood instructions before (searching for defs or kills) and N
1202/// instructions after (searching just for defs) MI.
1203MachineBasicBlock::LivenessQueryResult
1204MachineBasicBlock::computeRegisterLiveness(const TargetRegisterInfo *TRI,
1205                                           unsigned Reg, const_iterator Before,
1206                                           unsigned Neighborhood) const {
1207  unsigned N = Neighborhood;
1208
1209  // Start by searching backwards from Before, looking for kills, reads or defs.
1210  const_iterator I(Before);
1211  // If this is the first insn in the block, don't search backwards.
1212  if (I != begin()) {
1213    do {
1214      --I;
1215
1216      MachineOperandIteratorBase::PhysRegInfo Info =
1217          ConstMIOperands(*I).analyzePhysReg(Reg, TRI);
1218
1219      // Defs happen after uses so they take precedence if both are present.
1220
1221      // Register is dead after a dead def of the full register.
1222      if (Info.DeadDef)
1223        return LQR_Dead;
1224      // Register is (at least partially) live after a def.
1225      if (Info.Defined) {
1226        if (!Info.PartialDeadDef)
1227          return LQR_Live;
1228        // As soon as we saw a partial definition (dead or not),
1229        // we cannot tell if the value is partial live without
1230        // tracking the lanemasks. We are not going to do this,
1231        // so fall back on the remaining of the analysis.
1232        break;
1233      }
1234      // Register is dead after a full kill or clobber and no def.
1235      if (Info.Killed || Info.Clobbered)
1236        return LQR_Dead;
1237      // Register must be live if we read it.
1238      if (Info.Read)
1239        return LQR_Live;
1240    } while (I != begin() && --N > 0);
1241  }
1242
1243  // Did we get to the start of the block?
1244  if (I == begin()) {
1245    // If so, the register's state is definitely defined by the live-in state.
1246    for (MCRegAliasIterator RAI(Reg, TRI, /*IncludeSelf=*/true); RAI.isValid();
1247         ++RAI)
1248      if (isLiveIn(*RAI))
1249        return LQR_Live;
1250
1251    return LQR_Dead;
1252  }
1253
1254  N = Neighborhood;
1255
1256  // Try searching forwards from Before, looking for reads or defs.
1257  I = const_iterator(Before);
1258  // If this is the last insn in the block, don't search forwards.
1259  if (I != end()) {
1260    for (++I; I != end() && N > 0; ++I, --N) {
1261      MachineOperandIteratorBase::PhysRegInfo Info =
1262          ConstMIOperands(*I).analyzePhysReg(Reg, TRI);
1263
1264      // Register is live when we read it here.
1265      if (Info.Read)
1266        return LQR_Live;
1267      // Register is dead if we can fully overwrite or clobber it here.
1268      if (Info.FullyDefined || Info.Clobbered)
1269        return LQR_Dead;
1270    }
1271  }
1272
1273  // At this point we have no idea of the liveness of the register.
1274  return LQR_Unknown;
1275}
1276
1277const uint32_t *
1278MachineBasicBlock::getBeginClobberMask(const TargetRegisterInfo *TRI) const {
1279  // EH funclet entry does not preserve any registers.
1280  return isEHFuncletEntry() ? TRI->getNoPreservedMask() : nullptr;
1281}
1282
1283const uint32_t *
1284MachineBasicBlock::getEndClobberMask(const TargetRegisterInfo *TRI) const {
1285  // If we see a return block with successors, this must be a funclet return,
1286  // which does not preserve any registers. If there are no successors, we don't
1287  // care what kind of return it is, putting a mask after it is a no-op.
1288  return isReturnBlock() && !succ_empty() ? TRI->getNoPreservedMask() : nullptr;
1289}
1290