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