Sink DwarfUnit::constructImportedEntityDIE into DwarfCompileUnit.
[oota-llvm.git] / lib / CodeGen / LiveIntervalAnalysis.cpp
1 //===-- LiveIntervalAnalysis.cpp - Live Interval Analysis -----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file implements the LiveInterval analysis pass which is used
11 // by the Linear Scan Register allocator. This pass linearizes the
12 // basic blocks of the function in DFS order and uses the
13 // LiveVariables pass to conservatively compute live intervals for
14 // each virtual and physical register.
15 //
16 //===----------------------------------------------------------------------===//
17
18 #include "llvm/CodeGen/LiveIntervalAnalysis.h"
19 #include "LiveRangeCalc.h"
20 #include "llvm/ADT/DenseSet.h"
21 #include "llvm/ADT/STLExtras.h"
22 #include "llvm/Analysis/AliasAnalysis.h"
23 #include "llvm/CodeGen/LiveVariables.h"
24 #include "llvm/CodeGen/MachineBlockFrequencyInfo.h"
25 #include "llvm/CodeGen/MachineDominators.h"
26 #include "llvm/CodeGen/MachineInstr.h"
27 #include "llvm/CodeGen/MachineRegisterInfo.h"
28 #include "llvm/CodeGen/Passes.h"
29 #include "llvm/CodeGen/VirtRegMap.h"
30 #include "llvm/IR/Value.h"
31 #include "llvm/Support/BlockFrequency.h"
32 #include "llvm/Support/CommandLine.h"
33 #include "llvm/Support/Debug.h"
34 #include "llvm/Support/ErrorHandling.h"
35 #include "llvm/Support/raw_ostream.h"
36 #include "llvm/Target/TargetInstrInfo.h"
37 #include "llvm/Target/TargetRegisterInfo.h"
38 #include "llvm/Target/TargetSubtargetInfo.h"
39 #include <algorithm>
40 #include <cmath>
41 #include <limits>
42 using namespace llvm;
43
44 #define DEBUG_TYPE "regalloc"
45
46 char LiveIntervals::ID = 0;
47 char &llvm::LiveIntervalsID = LiveIntervals::ID;
48 INITIALIZE_PASS_BEGIN(LiveIntervals, "liveintervals",
49                 "Live Interval Analysis", false, false)
50 INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
51 INITIALIZE_PASS_DEPENDENCY(LiveVariables)
52 INITIALIZE_PASS_DEPENDENCY(MachineDominatorTree)
53 INITIALIZE_PASS_DEPENDENCY(SlotIndexes)
54 INITIALIZE_PASS_END(LiveIntervals, "liveintervals",
55                 "Live Interval Analysis", false, false)
56
57 #ifndef NDEBUG
58 static cl::opt<bool> EnablePrecomputePhysRegs(
59   "precompute-phys-liveness", cl::Hidden,
60   cl::desc("Eagerly compute live intervals for all physreg units."));
61 #else
62 static bool EnablePrecomputePhysRegs = false;
63 #endif // NDEBUG
64
65 void LiveIntervals::getAnalysisUsage(AnalysisUsage &AU) const {
66   AU.setPreservesCFG();
67   AU.addRequired<AliasAnalysis>();
68   AU.addPreserved<AliasAnalysis>();
69   // LiveVariables isn't really required by this analysis, it is only required
70   // here to make sure it is live during TwoAddressInstructionPass and
71   // PHIElimination. This is temporary.
72   AU.addRequired<LiveVariables>();
73   AU.addPreserved<LiveVariables>();
74   AU.addPreservedID(MachineLoopInfoID);
75   AU.addRequiredTransitiveID(MachineDominatorsID);
76   AU.addPreservedID(MachineDominatorsID);
77   AU.addPreserved<SlotIndexes>();
78   AU.addRequiredTransitive<SlotIndexes>();
79   MachineFunctionPass::getAnalysisUsage(AU);
80 }
81
82 LiveIntervals::LiveIntervals() : MachineFunctionPass(ID),
83   DomTree(nullptr), LRCalc(nullptr) {
84   initializeLiveIntervalsPass(*PassRegistry::getPassRegistry());
85 }
86
87 LiveIntervals::~LiveIntervals() {
88   delete LRCalc;
89 }
90
91 void LiveIntervals::releaseMemory() {
92   // Free the live intervals themselves.
93   for (unsigned i = 0, e = VirtRegIntervals.size(); i != e; ++i)
94     delete VirtRegIntervals[TargetRegisterInfo::index2VirtReg(i)];
95   VirtRegIntervals.clear();
96   RegMaskSlots.clear();
97   RegMaskBits.clear();
98   RegMaskBlocks.clear();
99
100   for (unsigned i = 0, e = RegUnitRanges.size(); i != e; ++i)
101     delete RegUnitRanges[i];
102   RegUnitRanges.clear();
103
104   // Release VNInfo memory regions, VNInfo objects don't need to be dtor'd.
105   VNInfoAllocator.Reset();
106 }
107
108 /// runOnMachineFunction - calculates LiveIntervals
109 ///
110 bool LiveIntervals::runOnMachineFunction(MachineFunction &fn) {
111   MF = &fn;
112   MRI = &MF->getRegInfo();
113   TRI = MF->getSubtarget().getRegisterInfo();
114   TII = MF->getSubtarget().getInstrInfo();
115   AA = &getAnalysis<AliasAnalysis>();
116   Indexes = &getAnalysis<SlotIndexes>();
117   DomTree = &getAnalysis<MachineDominatorTree>();
118   if (!LRCalc)
119     LRCalc = new LiveRangeCalc();
120
121   // Allocate space for all virtual registers.
122   VirtRegIntervals.resize(MRI->getNumVirtRegs());
123
124   computeVirtRegs();
125   computeRegMasks();
126   computeLiveInRegUnits();
127
128   if (EnablePrecomputePhysRegs) {
129     // For stress testing, precompute live ranges of all physical register
130     // units, including reserved registers.
131     for (unsigned i = 0, e = TRI->getNumRegUnits(); i != e; ++i)
132       getRegUnit(i);
133   }
134   DEBUG(dump());
135   return true;
136 }
137
138 /// print - Implement the dump method.
139 void LiveIntervals::print(raw_ostream &OS, const Module* ) const {
140   OS << "********** INTERVALS **********\n";
141
142   // Dump the regunits.
143   for (unsigned i = 0, e = RegUnitRanges.size(); i != e; ++i)
144     if (LiveRange *LR = RegUnitRanges[i])
145       OS << PrintRegUnit(i, TRI) << ' ' << *LR << '\n';
146
147   // Dump the virtregs.
148   for (unsigned i = 0, e = MRI->getNumVirtRegs(); i != e; ++i) {
149     unsigned Reg = TargetRegisterInfo::index2VirtReg(i);
150     if (hasInterval(Reg))
151       OS << getInterval(Reg) << '\n';
152   }
153
154   OS << "RegMasks:";
155   for (unsigned i = 0, e = RegMaskSlots.size(); i != e; ++i)
156     OS << ' ' << RegMaskSlots[i];
157   OS << '\n';
158
159   printInstrs(OS);
160 }
161
162 void LiveIntervals::printInstrs(raw_ostream &OS) const {
163   OS << "********** MACHINEINSTRS **********\n";
164   MF->print(OS, Indexes);
165 }
166
167 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
168 void LiveIntervals::dumpInstrs() const {
169   printInstrs(dbgs());
170 }
171 #endif
172
173 LiveInterval* LiveIntervals::createInterval(unsigned reg) {
174   float Weight = TargetRegisterInfo::isPhysicalRegister(reg) ?
175                   llvm::huge_valf : 0.0F;
176   return new LiveInterval(reg, Weight);
177 }
178
179
180 /// computeVirtRegInterval - Compute the live interval of a virtual register,
181 /// based on defs and uses.
182 void LiveIntervals::computeVirtRegInterval(LiveInterval &LI) {
183   assert(LRCalc && "LRCalc not initialized.");
184   assert(LI.empty() && "Should only compute empty intervals.");
185   LRCalc->reset(MF, getSlotIndexes(), DomTree, &getVNInfoAllocator());
186   LRCalc->createDeadDefs(LI);
187   LRCalc->extendToUses(LI);
188   computeDeadValues(&LI, LI, nullptr, nullptr);
189 }
190
191 void LiveIntervals::computeVirtRegs() {
192   for (unsigned i = 0, e = MRI->getNumVirtRegs(); i != e; ++i) {
193     unsigned Reg = TargetRegisterInfo::index2VirtReg(i);
194     if (MRI->reg_nodbg_empty(Reg))
195       continue;
196     createAndComputeVirtRegInterval(Reg);
197   }
198 }
199
200 void LiveIntervals::computeRegMasks() {
201   RegMaskBlocks.resize(MF->getNumBlockIDs());
202
203   // Find all instructions with regmask operands.
204   for (MachineFunction::iterator MBBI = MF->begin(), E = MF->end();
205        MBBI != E; ++MBBI) {
206     MachineBasicBlock *MBB = MBBI;
207     std::pair<unsigned, unsigned> &RMB = RegMaskBlocks[MBB->getNumber()];
208     RMB.first = RegMaskSlots.size();
209     for (MachineBasicBlock::iterator MI = MBB->begin(), ME = MBB->end();
210          MI != ME; ++MI)
211       for (MIOperands MO(MI); MO.isValid(); ++MO) {
212         if (!MO->isRegMask())
213           continue;
214           RegMaskSlots.push_back(Indexes->getInstructionIndex(MI).getRegSlot());
215           RegMaskBits.push_back(MO->getRegMask());
216       }
217     // Compute the number of register mask instructions in this block.
218     RMB.second = RegMaskSlots.size() - RMB.first;
219   }
220 }
221
222 //===----------------------------------------------------------------------===//
223 //                           Register Unit Liveness
224 //===----------------------------------------------------------------------===//
225 //
226 // Fixed interference typically comes from ABI boundaries: Function arguments
227 // and return values are passed in fixed registers, and so are exception
228 // pointers entering landing pads. Certain instructions require values to be
229 // present in specific registers. That is also represented through fixed
230 // interference.
231 //
232
233 /// computeRegUnitInterval - Compute the live range of a register unit, based
234 /// on the uses and defs of aliasing registers.  The range should be empty,
235 /// or contain only dead phi-defs from ABI blocks.
236 void LiveIntervals::computeRegUnitRange(LiveRange &LR, unsigned Unit) {
237   assert(LRCalc && "LRCalc not initialized.");
238   LRCalc->reset(MF, getSlotIndexes(), DomTree, &getVNInfoAllocator());
239
240   // The physregs aliasing Unit are the roots and their super-registers.
241   // Create all values as dead defs before extending to uses. Note that roots
242   // may share super-registers. That's OK because createDeadDefs() is
243   // idempotent. It is very rare for a register unit to have multiple roots, so
244   // uniquing super-registers is probably not worthwhile.
245   for (MCRegUnitRootIterator Roots(Unit, TRI); Roots.isValid(); ++Roots) {
246     for (MCSuperRegIterator Supers(*Roots, TRI, /*IncludeSelf=*/true);
247          Supers.isValid(); ++Supers) {
248       if (!MRI->reg_empty(*Supers))
249         LRCalc->createDeadDefs(LR, *Supers);
250     }
251   }
252
253   // Now extend LR to reach all uses.
254   // Ignore uses of reserved registers. We only track defs of those.
255   for (MCRegUnitRootIterator Roots(Unit, TRI); Roots.isValid(); ++Roots) {
256     for (MCSuperRegIterator Supers(*Roots, TRI, /*IncludeSelf=*/true);
257          Supers.isValid(); ++Supers) {
258       unsigned Reg = *Supers;
259       if (!MRI->isReserved(Reg) && !MRI->reg_empty(Reg))
260         LRCalc->extendToUses(LR, Reg);
261     }
262   }
263 }
264
265
266 /// computeLiveInRegUnits - Precompute the live ranges of any register units
267 /// that are live-in to an ABI block somewhere. Register values can appear
268 /// without a corresponding def when entering the entry block or a landing pad.
269 ///
270 void LiveIntervals::computeLiveInRegUnits() {
271   RegUnitRanges.resize(TRI->getNumRegUnits());
272   DEBUG(dbgs() << "Computing live-in reg-units in ABI blocks.\n");
273
274   // Keep track of the live range sets allocated.
275   SmallVector<unsigned, 8> NewRanges;
276
277   // Check all basic blocks for live-ins.
278   for (MachineFunction::const_iterator MFI = MF->begin(), MFE = MF->end();
279        MFI != MFE; ++MFI) {
280     const MachineBasicBlock *MBB = MFI;
281
282     // We only care about ABI blocks: Entry + landing pads.
283     if ((MFI != MF->begin() && !MBB->isLandingPad()) || MBB->livein_empty())
284       continue;
285
286     // Create phi-defs at Begin for all live-in registers.
287     SlotIndex Begin = Indexes->getMBBStartIdx(MBB);
288     DEBUG(dbgs() << Begin << "\tBB#" << MBB->getNumber());
289     for (MachineBasicBlock::livein_iterator LII = MBB->livein_begin(),
290          LIE = MBB->livein_end(); LII != LIE; ++LII) {
291       for (MCRegUnitIterator Units(*LII, TRI); Units.isValid(); ++Units) {
292         unsigned Unit = *Units;
293         LiveRange *LR = RegUnitRanges[Unit];
294         if (!LR) {
295           LR = RegUnitRanges[Unit] = new LiveRange();
296           NewRanges.push_back(Unit);
297         }
298         VNInfo *VNI = LR->createDeadDef(Begin, getVNInfoAllocator());
299         (void)VNI;
300         DEBUG(dbgs() << ' ' << PrintRegUnit(Unit, TRI) << '#' << VNI->id);
301       }
302     }
303     DEBUG(dbgs() << '\n');
304   }
305   DEBUG(dbgs() << "Created " << NewRanges.size() << " new intervals.\n");
306
307   // Compute the 'normal' part of the ranges.
308   for (unsigned i = 0, e = NewRanges.size(); i != e; ++i) {
309     unsigned Unit = NewRanges[i];
310     computeRegUnitRange(*RegUnitRanges[Unit], Unit);
311   }
312 }
313
314
315 /// shrinkToUses - After removing some uses of a register, shrink its live
316 /// range to just the remaining uses. This method does not compute reaching
317 /// defs for new uses, and it doesn't remove dead defs.
318 bool LiveIntervals::shrinkToUses(LiveInterval *li,
319                                  SmallVectorImpl<MachineInstr*> *dead) {
320   DEBUG(dbgs() << "Shrink: " << *li << '\n');
321   assert(TargetRegisterInfo::isVirtualRegister(li->reg)
322          && "Can only shrink virtual registers");
323   // Find all the values used, including PHI kills.
324   SmallVector<std::pair<SlotIndex, VNInfo*>, 16> WorkList;
325
326   // Blocks that have already been added to WorkList as live-out.
327   SmallPtrSet<MachineBasicBlock*, 16> LiveOut;
328
329   // Visit all instructions reading li->reg.
330   for (MachineRegisterInfo::reg_instr_iterator
331        I = MRI->reg_instr_begin(li->reg), E = MRI->reg_instr_end();
332        I != E; ) {
333     MachineInstr *UseMI = &*(I++);
334     if (UseMI->isDebugValue() || !UseMI->readsVirtualRegister(li->reg))
335       continue;
336     SlotIndex Idx = getInstructionIndex(UseMI).getRegSlot();
337     LiveQueryResult LRQ = li->Query(Idx);
338     VNInfo *VNI = LRQ.valueIn();
339     if (!VNI) {
340       // This shouldn't happen: readsVirtualRegister returns true, but there is
341       // no live value. It is likely caused by a target getting <undef> flags
342       // wrong.
343       DEBUG(dbgs() << Idx << '\t' << *UseMI
344                    << "Warning: Instr claims to read non-existent value in "
345                     << *li << '\n');
346       continue;
347     }
348     // Special case: An early-clobber tied operand reads and writes the
349     // register one slot early.
350     if (VNInfo *DefVNI = LRQ.valueDefined())
351       Idx = DefVNI->def;
352
353     WorkList.push_back(std::make_pair(Idx, VNI));
354   }
355
356   // Create new live ranges with only minimal live segments per def.
357   LiveRange NewLR;
358   for (LiveInterval::vni_iterator I = li->vni_begin(), E = li->vni_end();
359        I != E; ++I) {
360     VNInfo *VNI = *I;
361     if (VNI->isUnused())
362       continue;
363     NewLR.addSegment(LiveRange::Segment(VNI->def, VNI->def.getDeadSlot(), VNI));
364   }
365
366   // Keep track of the PHIs that are in use.
367   SmallPtrSet<VNInfo*, 8> UsedPHIs;
368
369   // Extend intervals to reach all uses in WorkList.
370   while (!WorkList.empty()) {
371     SlotIndex Idx = WorkList.back().first;
372     VNInfo *VNI = WorkList.back().second;
373     WorkList.pop_back();
374     const MachineBasicBlock *MBB = getMBBFromIndex(Idx.getPrevSlot());
375     SlotIndex BlockStart = getMBBStartIdx(MBB);
376
377     // Extend the live range for VNI to be live at Idx.
378     if (VNInfo *ExtVNI = NewLR.extendInBlock(BlockStart, Idx)) {
379       (void)ExtVNI;
380       assert(ExtVNI == VNI && "Unexpected existing value number");
381       // Is this a PHIDef we haven't seen before?
382       if (!VNI->isPHIDef() || VNI->def != BlockStart || !UsedPHIs.insert(VNI))
383         continue;
384       // The PHI is live, make sure the predecessors are live-out.
385       for (MachineBasicBlock::const_pred_iterator PI = MBB->pred_begin(),
386            PE = MBB->pred_end(); PI != PE; ++PI) {
387         if (!LiveOut.insert(*PI))
388           continue;
389         SlotIndex Stop = getMBBEndIdx(*PI);
390         // A predecessor is not required to have a live-out value for a PHI.
391         if (VNInfo *PVNI = li->getVNInfoBefore(Stop))
392           WorkList.push_back(std::make_pair(Stop, PVNI));
393       }
394       continue;
395     }
396
397     // VNI is live-in to MBB.
398     DEBUG(dbgs() << " live-in at " << BlockStart << '\n');
399     NewLR.addSegment(LiveRange::Segment(BlockStart, Idx, VNI));
400
401     // Make sure VNI is live-out from the predecessors.
402     for (MachineBasicBlock::const_pred_iterator PI = MBB->pred_begin(),
403          PE = MBB->pred_end(); PI != PE; ++PI) {
404       if (!LiveOut.insert(*PI))
405         continue;
406       SlotIndex Stop = getMBBEndIdx(*PI);
407       assert(li->getVNInfoBefore(Stop) == VNI &&
408              "Wrong value out of predecessor");
409       WorkList.push_back(std::make_pair(Stop, VNI));
410     }
411   }
412
413   // Handle dead values.
414   bool CanSeparate = false;
415   computeDeadValues(li, NewLR, &CanSeparate, dead);
416
417   // Move the trimmed segments back.
418   li->segments.swap(NewLR.segments);
419   DEBUG(dbgs() << "Shrunk: " << *li << '\n');
420   return CanSeparate;
421 }
422
423 void LiveIntervals::computeDeadValues(LiveInterval *li,
424                                       LiveRange &LR,
425                                       bool *CanSeparate,
426                                       SmallVectorImpl<MachineInstr*> *dead) {
427   for (LiveInterval::vni_iterator I = li->vni_begin(), E = li->vni_end();
428        I != E; ++I) {
429     VNInfo *VNI = *I;
430     if (VNI->isUnused())
431       continue;
432     LiveRange::iterator LRI = LR.FindSegmentContaining(VNI->def);
433     assert(LRI != LR.end() && "Missing segment for PHI");
434     if (LRI->end != VNI->def.getDeadSlot())
435       continue;
436     if (VNI->isPHIDef()) {
437       // This is a dead PHI. Remove it.
438       VNI->markUnused();
439       LR.removeSegment(LRI->start, LRI->end);
440       DEBUG(dbgs() << "Dead PHI at " << VNI->def << " may separate interval\n");
441       if (CanSeparate)
442         *CanSeparate = true;
443     } else {
444       // This is a dead def. Make sure the instruction knows.
445       MachineInstr *MI = getInstructionFromIndex(VNI->def);
446       assert(MI && "No instruction defining live value");
447       MI->addRegisterDead(li->reg, TRI);
448       if (dead && MI->allDefsAreDead()) {
449         DEBUG(dbgs() << "All defs dead: " << VNI->def << '\t' << *MI);
450         dead->push_back(MI);
451       }
452     }
453   }
454 }
455
456 void LiveIntervals::extendToIndices(LiveRange &LR,
457                                     ArrayRef<SlotIndex> Indices) {
458   assert(LRCalc && "LRCalc not initialized.");
459   LRCalc->reset(MF, getSlotIndexes(), DomTree, &getVNInfoAllocator());
460   for (unsigned i = 0, e = Indices.size(); i != e; ++i)
461     LRCalc->extend(LR, Indices[i]);
462 }
463
464 void LiveIntervals::pruneValue(LiveInterval *LI, SlotIndex Kill,
465                                SmallVectorImpl<SlotIndex> *EndPoints) {
466   LiveQueryResult LRQ = LI->Query(Kill);
467   VNInfo *VNI = LRQ.valueOut();
468   if (!VNI)
469     return;
470
471   MachineBasicBlock *KillMBB = Indexes->getMBBFromIndex(Kill);
472   SlotIndex MBBStart, MBBEnd;
473   std::tie(MBBStart, MBBEnd) = Indexes->getMBBRange(KillMBB);
474
475   // If VNI isn't live out from KillMBB, the value is trivially pruned.
476   if (LRQ.endPoint() < MBBEnd) {
477     LI->removeSegment(Kill, LRQ.endPoint());
478     if (EndPoints) EndPoints->push_back(LRQ.endPoint());
479     return;
480   }
481
482   // VNI is live out of KillMBB.
483   LI->removeSegment(Kill, MBBEnd);
484   if (EndPoints) EndPoints->push_back(MBBEnd);
485
486   // Find all blocks that are reachable from KillMBB without leaving VNI's live
487   // range. It is possible that KillMBB itself is reachable, so start a DFS
488   // from each successor.
489   typedef SmallPtrSet<MachineBasicBlock*, 9> VisitedTy;
490   VisitedTy Visited;
491   for (MachineBasicBlock::succ_iterator
492        SuccI = KillMBB->succ_begin(), SuccE = KillMBB->succ_end();
493        SuccI != SuccE; ++SuccI) {
494     for (df_ext_iterator<MachineBasicBlock*, VisitedTy>
495          I = df_ext_begin(*SuccI, Visited), E = df_ext_end(*SuccI, Visited);
496          I != E;) {
497       MachineBasicBlock *MBB = *I;
498
499       // Check if VNI is live in to MBB.
500       std::tie(MBBStart, MBBEnd) = Indexes->getMBBRange(MBB);
501       LiveQueryResult LRQ = LI->Query(MBBStart);
502       if (LRQ.valueIn() != VNI) {
503         // This block isn't part of the VNI segment. Prune the search.
504         I.skipChildren();
505         continue;
506       }
507
508       // Prune the search if VNI is killed in MBB.
509       if (LRQ.endPoint() < MBBEnd) {
510         LI->removeSegment(MBBStart, LRQ.endPoint());
511         if (EndPoints) EndPoints->push_back(LRQ.endPoint());
512         I.skipChildren();
513         continue;
514       }
515
516       // VNI is live through MBB.
517       LI->removeSegment(MBBStart, MBBEnd);
518       if (EndPoints) EndPoints->push_back(MBBEnd);
519       ++I;
520     }
521   }
522 }
523
524 //===----------------------------------------------------------------------===//
525 // Register allocator hooks.
526 //
527
528 void LiveIntervals::addKillFlags(const VirtRegMap *VRM) {
529   // Keep track of regunit ranges.
530   SmallVector<std::pair<LiveRange*, LiveRange::iterator>, 8> RU;
531
532   for (unsigned i = 0, e = MRI->getNumVirtRegs(); i != e; ++i) {
533     unsigned Reg = TargetRegisterInfo::index2VirtReg(i);
534     if (MRI->reg_nodbg_empty(Reg))
535       continue;
536     LiveInterval *LI = &getInterval(Reg);
537     if (LI->empty())
538       continue;
539
540     // Find the regunit intervals for the assigned register. They may overlap
541     // the virtual register live range, cancelling any kills.
542     RU.clear();
543     for (MCRegUnitIterator Units(VRM->getPhys(Reg), TRI); Units.isValid();
544          ++Units) {
545       LiveRange &RURanges = getRegUnit(*Units);
546       if (RURanges.empty())
547         continue;
548       RU.push_back(std::make_pair(&RURanges, RURanges.find(LI->begin()->end)));
549     }
550
551     // Every instruction that kills Reg corresponds to a segment range end
552     // point.
553     for (LiveInterval::iterator RI = LI->begin(), RE = LI->end(); RI != RE;
554          ++RI) {
555       // A block index indicates an MBB edge.
556       if (RI->end.isBlock())
557         continue;
558       MachineInstr *MI = getInstructionFromIndex(RI->end);
559       if (!MI)
560         continue;
561
562       // Check if any of the regunits are live beyond the end of RI. That could
563       // happen when a physreg is defined as a copy of a virtreg:
564       //
565       //   %EAX = COPY %vreg5
566       //   FOO %vreg5         <--- MI, cancel kill because %EAX is live.
567       //   BAR %EAX<kill>
568       //
569       // There should be no kill flag on FOO when %vreg5 is rewritten as %EAX.
570       bool CancelKill = false;
571       for (unsigned u = 0, e = RU.size(); u != e; ++u) {
572         LiveRange &RRanges = *RU[u].first;
573         LiveRange::iterator &I = RU[u].second;
574         if (I == RRanges.end())
575           continue;
576         I = RRanges.advanceTo(I, RI->end);
577         if (I == RRanges.end() || I->start >= RI->end)
578           continue;
579         // I is overlapping RI.
580         CancelKill = true;
581         break;
582       }
583       if (CancelKill)
584         MI->clearRegisterKills(Reg, nullptr);
585       else
586         MI->addRegisterKilled(Reg, nullptr);
587     }
588   }
589 }
590
591 MachineBasicBlock*
592 LiveIntervals::intervalIsInOneMBB(const LiveInterval &LI) const {
593   // A local live range must be fully contained inside the block, meaning it is
594   // defined and killed at instructions, not at block boundaries. It is not
595   // live in or or out of any block.
596   //
597   // It is technically possible to have a PHI-defined live range identical to a
598   // single block, but we are going to return false in that case.
599
600   SlotIndex Start = LI.beginIndex();
601   if (Start.isBlock())
602     return nullptr;
603
604   SlotIndex Stop = LI.endIndex();
605   if (Stop.isBlock())
606     return nullptr;
607
608   // getMBBFromIndex doesn't need to search the MBB table when both indexes
609   // belong to proper instructions.
610   MachineBasicBlock *MBB1 = Indexes->getMBBFromIndex(Start);
611   MachineBasicBlock *MBB2 = Indexes->getMBBFromIndex(Stop);
612   return MBB1 == MBB2 ? MBB1 : nullptr;
613 }
614
615 bool
616 LiveIntervals::hasPHIKill(const LiveInterval &LI, const VNInfo *VNI) const {
617   for (LiveInterval::const_vni_iterator I = LI.vni_begin(), E = LI.vni_end();
618        I != E; ++I) {
619     const VNInfo *PHI = *I;
620     if (PHI->isUnused() || !PHI->isPHIDef())
621       continue;
622     const MachineBasicBlock *PHIMBB = getMBBFromIndex(PHI->def);
623     // Conservatively return true instead of scanning huge predecessor lists.
624     if (PHIMBB->pred_size() > 100)
625       return true;
626     for (MachineBasicBlock::const_pred_iterator
627          PI = PHIMBB->pred_begin(), PE = PHIMBB->pred_end(); PI != PE; ++PI)
628       if (VNI == LI.getVNInfoBefore(Indexes->getMBBEndIdx(*PI)))
629         return true;
630   }
631   return false;
632 }
633
634 float
635 LiveIntervals::getSpillWeight(bool isDef, bool isUse,
636                               const MachineBlockFrequencyInfo *MBFI,
637                               const MachineInstr *MI) {
638   BlockFrequency Freq = MBFI->getBlockFreq(MI->getParent());
639   const float Scale = 1.0f / MBFI->getEntryFreq();
640   return (isDef + isUse) * (Freq.getFrequency() * Scale);
641 }
642
643 LiveRange::Segment
644 LiveIntervals::addSegmentToEndOfBlock(unsigned reg, MachineInstr* startInst) {
645   LiveInterval& Interval = createEmptyInterval(reg);
646   VNInfo* VN = Interval.getNextValue(
647     SlotIndex(getInstructionIndex(startInst).getRegSlot()),
648     getVNInfoAllocator());
649   LiveRange::Segment S(
650      SlotIndex(getInstructionIndex(startInst).getRegSlot()),
651      getMBBEndIdx(startInst->getParent()), VN);
652   Interval.addSegment(S);
653
654   return S;
655 }
656
657
658 //===----------------------------------------------------------------------===//
659 //                          Register mask functions
660 //===----------------------------------------------------------------------===//
661
662 bool LiveIntervals::checkRegMaskInterference(LiveInterval &LI,
663                                              BitVector &UsableRegs) {
664   if (LI.empty())
665     return false;
666   LiveInterval::iterator LiveI = LI.begin(), LiveE = LI.end();
667
668   // Use a smaller arrays for local live ranges.
669   ArrayRef<SlotIndex> Slots;
670   ArrayRef<const uint32_t*> Bits;
671   if (MachineBasicBlock *MBB = intervalIsInOneMBB(LI)) {
672     Slots = getRegMaskSlotsInBlock(MBB->getNumber());
673     Bits = getRegMaskBitsInBlock(MBB->getNumber());
674   } else {
675     Slots = getRegMaskSlots();
676     Bits = getRegMaskBits();
677   }
678
679   // We are going to enumerate all the register mask slots contained in LI.
680   // Start with a binary search of RegMaskSlots to find a starting point.
681   ArrayRef<SlotIndex>::iterator SlotI =
682     std::lower_bound(Slots.begin(), Slots.end(), LiveI->start);
683   ArrayRef<SlotIndex>::iterator SlotE = Slots.end();
684
685   // No slots in range, LI begins after the last call.
686   if (SlotI == SlotE)
687     return false;
688
689   bool Found = false;
690   for (;;) {
691     assert(*SlotI >= LiveI->start);
692     // Loop over all slots overlapping this segment.
693     while (*SlotI < LiveI->end) {
694       // *SlotI overlaps LI. Collect mask bits.
695       if (!Found) {
696         // This is the first overlap. Initialize UsableRegs to all ones.
697         UsableRegs.clear();
698         UsableRegs.resize(TRI->getNumRegs(), true);
699         Found = true;
700       }
701       // Remove usable registers clobbered by this mask.
702       UsableRegs.clearBitsNotInMask(Bits[SlotI-Slots.begin()]);
703       if (++SlotI == SlotE)
704         return Found;
705     }
706     // *SlotI is beyond the current LI segment.
707     LiveI = LI.advanceTo(LiveI, *SlotI);
708     if (LiveI == LiveE)
709       return Found;
710     // Advance SlotI until it overlaps.
711     while (*SlotI < LiveI->start)
712       if (++SlotI == SlotE)
713         return Found;
714   }
715 }
716
717 //===----------------------------------------------------------------------===//
718 //                         IntervalUpdate class.
719 //===----------------------------------------------------------------------===//
720
721 // HMEditor is a toolkit used by handleMove to trim or extend live intervals.
722 class LiveIntervals::HMEditor {
723 private:
724   LiveIntervals& LIS;
725   const MachineRegisterInfo& MRI;
726   const TargetRegisterInfo& TRI;
727   SlotIndex OldIdx;
728   SlotIndex NewIdx;
729   SmallPtrSet<LiveRange*, 8> Updated;
730   bool UpdateFlags;
731
732 public:
733   HMEditor(LiveIntervals& LIS, const MachineRegisterInfo& MRI,
734            const TargetRegisterInfo& TRI,
735            SlotIndex OldIdx, SlotIndex NewIdx, bool UpdateFlags)
736     : LIS(LIS), MRI(MRI), TRI(TRI), OldIdx(OldIdx), NewIdx(NewIdx),
737       UpdateFlags(UpdateFlags) {}
738
739   // FIXME: UpdateFlags is a workaround that creates live intervals for all
740   // physregs, even those that aren't needed for regalloc, in order to update
741   // kill flags. This is wasteful. Eventually, LiveVariables will strip all kill
742   // flags, and postRA passes will use a live register utility instead.
743   LiveRange *getRegUnitLI(unsigned Unit) {
744     if (UpdateFlags)
745       return &LIS.getRegUnit(Unit);
746     return LIS.getCachedRegUnit(Unit);
747   }
748
749   /// Update all live ranges touched by MI, assuming a move from OldIdx to
750   /// NewIdx.
751   void updateAllRanges(MachineInstr *MI) {
752     DEBUG(dbgs() << "handleMove " << OldIdx << " -> " << NewIdx << ": " << *MI);
753     bool hasRegMask = false;
754     for (MIOperands MO(MI); MO.isValid(); ++MO) {
755       if (MO->isRegMask())
756         hasRegMask = true;
757       if (!MO->isReg())
758         continue;
759       // Aggressively clear all kill flags.
760       // They are reinserted by VirtRegRewriter.
761       if (MO->isUse())
762         MO->setIsKill(false);
763
764       unsigned Reg = MO->getReg();
765       if (!Reg)
766         continue;
767       if (TargetRegisterInfo::isVirtualRegister(Reg)) {
768         LiveInterval &LI = LIS.getInterval(Reg);
769         updateRange(LI, Reg);
770         continue;
771       }
772
773       // For physregs, only update the regunits that actually have a
774       // precomputed live range.
775       for (MCRegUnitIterator Units(Reg, &TRI); Units.isValid(); ++Units)
776         if (LiveRange *LR = getRegUnitLI(*Units))
777           updateRange(*LR, *Units);
778     }
779     if (hasRegMask)
780       updateRegMaskSlots();
781   }
782
783 private:
784   /// Update a single live range, assuming an instruction has been moved from
785   /// OldIdx to NewIdx.
786   void updateRange(LiveRange &LR, unsigned Reg) {
787     if (!Updated.insert(&LR))
788       return;
789     DEBUG({
790       dbgs() << "     ";
791       if (TargetRegisterInfo::isVirtualRegister(Reg))
792         dbgs() << PrintReg(Reg);
793       else
794         dbgs() << PrintRegUnit(Reg, &TRI);
795       dbgs() << ":\t" << LR << '\n';
796     });
797     if (SlotIndex::isEarlierInstr(OldIdx, NewIdx))
798       handleMoveDown(LR);
799     else
800       handleMoveUp(LR, Reg);
801     DEBUG(dbgs() << "        -->\t" << LR << '\n');
802     LR.verify();
803   }
804
805   /// Update LR to reflect an instruction has been moved downwards from OldIdx
806   /// to NewIdx.
807   ///
808   /// 1. Live def at OldIdx:
809   ///    Move def to NewIdx, assert endpoint after NewIdx.
810   ///
811   /// 2. Live def at OldIdx, killed at NewIdx:
812   ///    Change to dead def at NewIdx.
813   ///    (Happens when bundling def+kill together).
814   ///
815   /// 3. Dead def at OldIdx:
816   ///    Move def to NewIdx, possibly across another live value.
817   ///
818   /// 4. Def at OldIdx AND at NewIdx:
819   ///    Remove segment [OldIdx;NewIdx) and value defined at OldIdx.
820   ///    (Happens when bundling multiple defs together).
821   ///
822   /// 5. Value read at OldIdx, killed before NewIdx:
823   ///    Extend kill to NewIdx.
824   ///
825   void handleMoveDown(LiveRange &LR) {
826     // First look for a kill at OldIdx.
827     LiveRange::iterator I = LR.find(OldIdx.getBaseIndex());
828     LiveRange::iterator E = LR.end();
829     // Is LR even live at OldIdx?
830     if (I == E || SlotIndex::isEarlierInstr(OldIdx, I->start))
831       return;
832
833     // Handle a live-in value.
834     if (!SlotIndex::isSameInstr(I->start, OldIdx)) {
835       bool isKill = SlotIndex::isSameInstr(OldIdx, I->end);
836       // If the live-in value already extends to NewIdx, there is nothing to do.
837       if (!SlotIndex::isEarlierInstr(I->end, NewIdx))
838         return;
839       // Aggressively remove all kill flags from the old kill point.
840       // Kill flags shouldn't be used while live intervals exist, they will be
841       // reinserted by VirtRegRewriter.
842       if (MachineInstr *KillMI = LIS.getInstructionFromIndex(I->end))
843         for (MIBundleOperands MO(KillMI); MO.isValid(); ++MO)
844           if (MO->isReg() && MO->isUse())
845             MO->setIsKill(false);
846       // Adjust I->end to reach NewIdx. This may temporarily make LR invalid by
847       // overlapping ranges. Case 5 above.
848       I->end = NewIdx.getRegSlot(I->end.isEarlyClobber());
849       // If this was a kill, there may also be a def. Otherwise we're done.
850       if (!isKill)
851         return;
852       ++I;
853     }
854
855     // Check for a def at OldIdx.
856     if (I == E || !SlotIndex::isSameInstr(OldIdx, I->start))
857       return;
858     // We have a def at OldIdx.
859     VNInfo *DefVNI = I->valno;
860     assert(DefVNI->def == I->start && "Inconsistent def");
861     DefVNI->def = NewIdx.getRegSlot(I->start.isEarlyClobber());
862     // If the defined value extends beyond NewIdx, just move the def down.
863     // This is case 1 above.
864     if (SlotIndex::isEarlierInstr(NewIdx, I->end)) {
865       I->start = DefVNI->def;
866       return;
867     }
868     // The remaining possibilities are now:
869     // 2. Live def at OldIdx, killed at NewIdx: isSameInstr(I->end, NewIdx).
870     // 3. Dead def at OldIdx: I->end = OldIdx.getDeadSlot().
871     // In either case, it is possible that there is an existing def at NewIdx.
872     assert((I->end == OldIdx.getDeadSlot() ||
873             SlotIndex::isSameInstr(I->end, NewIdx)) &&
874             "Cannot move def below kill");
875     LiveRange::iterator NewI = LR.advanceTo(I, NewIdx.getRegSlot());
876     if (NewI != E && SlotIndex::isSameInstr(NewI->start, NewIdx)) {
877       // There is an existing def at NewIdx, case 4 above. The def at OldIdx is
878       // coalesced into that value.
879       assert(NewI->valno != DefVNI && "Multiple defs of value?");
880       LR.removeValNo(DefVNI);
881       return;
882     }
883     // There was no existing def at NewIdx. Turn *I into a dead def at NewIdx.
884     // If the def at OldIdx was dead, we allow it to be moved across other LR
885     // values. The new range should be placed immediately before NewI, move any
886     // intermediate ranges up.
887     assert(NewI != I && "Inconsistent iterators");
888     std::copy(std::next(I), NewI, I);
889     *std::prev(NewI)
890       = LiveRange::Segment(DefVNI->def, NewIdx.getDeadSlot(), DefVNI);
891   }
892
893   /// Update LR to reflect an instruction has been moved upwards from OldIdx
894   /// to NewIdx.
895   ///
896   /// 1. Live def at OldIdx:
897   ///    Hoist def to NewIdx.
898   ///
899   /// 2. Dead def at OldIdx:
900   ///    Hoist def+end to NewIdx, possibly move across other values.
901   ///
902   /// 3. Dead def at OldIdx AND existing def at NewIdx:
903   ///    Remove value defined at OldIdx, coalescing it with existing value.
904   ///
905   /// 4. Live def at OldIdx AND existing def at NewIdx:
906   ///    Remove value defined at NewIdx, hoist OldIdx def to NewIdx.
907   ///    (Happens when bundling multiple defs together).
908   ///
909   /// 5. Value killed at OldIdx:
910   ///    Hoist kill to NewIdx, then scan for last kill between NewIdx and
911   ///    OldIdx.
912   ///
913   void handleMoveUp(LiveRange &LR, unsigned Reg) {
914     // First look for a kill at OldIdx.
915     LiveRange::iterator I = LR.find(OldIdx.getBaseIndex());
916     LiveRange::iterator E = LR.end();
917     // Is LR even live at OldIdx?
918     if (I == E || SlotIndex::isEarlierInstr(OldIdx, I->start))
919       return;
920
921     // Handle a live-in value.
922     if (!SlotIndex::isSameInstr(I->start, OldIdx)) {
923       // If the live-in value isn't killed here, there is nothing to do.
924       if (!SlotIndex::isSameInstr(OldIdx, I->end))
925         return;
926       // Adjust I->end to end at NewIdx. If we are hoisting a kill above
927       // another use, we need to search for that use. Case 5 above.
928       I->end = NewIdx.getRegSlot(I->end.isEarlyClobber());
929       ++I;
930       // If OldIdx also defines a value, there couldn't have been another use.
931       if (I == E || !SlotIndex::isSameInstr(I->start, OldIdx)) {
932         // No def, search for the new kill.
933         // This can never be an early clobber kill since there is no def.
934         std::prev(I)->end = findLastUseBefore(Reg).getRegSlot();
935         return;
936       }
937     }
938
939     // Now deal with the def at OldIdx.
940     assert(I != E && SlotIndex::isSameInstr(I->start, OldIdx) && "No def?");
941     VNInfo *DefVNI = I->valno;
942     assert(DefVNI->def == I->start && "Inconsistent def");
943     DefVNI->def = NewIdx.getRegSlot(I->start.isEarlyClobber());
944
945     // Check for an existing def at NewIdx.
946     LiveRange::iterator NewI = LR.find(NewIdx.getRegSlot());
947     if (SlotIndex::isSameInstr(NewI->start, NewIdx)) {
948       assert(NewI->valno != DefVNI && "Same value defined more than once?");
949       // There is an existing def at NewIdx.
950       if (I->end.isDead()) {
951         // Case 3: Remove the dead def at OldIdx.
952         LR.removeValNo(DefVNI);
953         return;
954       }
955       // Case 4: Replace def at NewIdx with live def at OldIdx.
956       I->start = DefVNI->def;
957       LR.removeValNo(NewI->valno);
958       return;
959     }
960
961     // There is no existing def at NewIdx. Hoist DefVNI.
962     if (!I->end.isDead()) {
963       // Leave the end point of a live def.
964       I->start = DefVNI->def;
965       return;
966     }
967
968     // DefVNI is a dead def. It may have been moved across other values in LR,
969     // so move I up to NewI. Slide [NewI;I) down one position.
970     std::copy_backward(NewI, I, std::next(I));
971     *NewI = LiveRange::Segment(DefVNI->def, NewIdx.getDeadSlot(), DefVNI);
972   }
973
974   void updateRegMaskSlots() {
975     SmallVectorImpl<SlotIndex>::iterator RI =
976       std::lower_bound(LIS.RegMaskSlots.begin(), LIS.RegMaskSlots.end(),
977                        OldIdx);
978     assert(RI != LIS.RegMaskSlots.end() && *RI == OldIdx.getRegSlot() &&
979            "No RegMask at OldIdx.");
980     *RI = NewIdx.getRegSlot();
981     assert((RI == LIS.RegMaskSlots.begin() ||
982             SlotIndex::isEarlierInstr(*std::prev(RI), *RI)) &&
983            "Cannot move regmask instruction above another call");
984     assert((std::next(RI) == LIS.RegMaskSlots.end() ||
985             SlotIndex::isEarlierInstr(*RI, *std::next(RI))) &&
986            "Cannot move regmask instruction below another call");
987   }
988
989   // Return the last use of reg between NewIdx and OldIdx.
990   SlotIndex findLastUseBefore(unsigned Reg) {
991
992     if (TargetRegisterInfo::isVirtualRegister(Reg)) {
993       SlotIndex LastUse = NewIdx;
994       for (MachineRegisterInfo::use_instr_nodbg_iterator
995              UI = MRI.use_instr_nodbg_begin(Reg),
996              UE = MRI.use_instr_nodbg_end();
997            UI != UE; ++UI) {
998         const MachineInstr* MI = &*UI;
999         SlotIndex InstSlot = LIS.getSlotIndexes()->getInstructionIndex(MI);
1000         if (InstSlot > LastUse && InstSlot < OldIdx)
1001           LastUse = InstSlot;
1002       }
1003       return LastUse;
1004     }
1005
1006     // This is a regunit interval, so scanning the use list could be very
1007     // expensive. Scan upwards from OldIdx instead.
1008     assert(NewIdx < OldIdx && "Expected upwards move");
1009     SlotIndexes *Indexes = LIS.getSlotIndexes();
1010     MachineBasicBlock *MBB = Indexes->getMBBFromIndex(NewIdx);
1011
1012     // OldIdx may not correspond to an instruction any longer, so set MII to
1013     // point to the next instruction after OldIdx, or MBB->end().
1014     MachineBasicBlock::iterator MII = MBB->end();
1015     if (MachineInstr *MI = Indexes->getInstructionFromIndex(
1016                            Indexes->getNextNonNullIndex(OldIdx)))
1017       if (MI->getParent() == MBB)
1018         MII = MI;
1019
1020     MachineBasicBlock::iterator Begin = MBB->begin();
1021     while (MII != Begin) {
1022       if ((--MII)->isDebugValue())
1023         continue;
1024       SlotIndex Idx = Indexes->getInstructionIndex(MII);
1025
1026       // Stop searching when NewIdx is reached.
1027       if (!SlotIndex::isEarlierInstr(NewIdx, Idx))
1028         return NewIdx;
1029
1030       // Check if MII uses Reg.
1031       for (MIBundleOperands MO(MII); MO.isValid(); ++MO)
1032         if (MO->isReg() &&
1033             TargetRegisterInfo::isPhysicalRegister(MO->getReg()) &&
1034             TRI.hasRegUnit(MO->getReg(), Reg))
1035           return Idx;
1036     }
1037     // Didn't reach NewIdx. It must be the first instruction in the block.
1038     return NewIdx;
1039   }
1040 };
1041
1042 void LiveIntervals::handleMove(MachineInstr* MI, bool UpdateFlags) {
1043   assert(!MI->isBundled() && "Can't handle bundled instructions yet.");
1044   SlotIndex OldIndex = Indexes->getInstructionIndex(MI);
1045   Indexes->removeMachineInstrFromMaps(MI);
1046   SlotIndex NewIndex = Indexes->insertMachineInstrInMaps(MI);
1047   assert(getMBBStartIdx(MI->getParent()) <= OldIndex &&
1048          OldIndex < getMBBEndIdx(MI->getParent()) &&
1049          "Cannot handle moves across basic block boundaries.");
1050
1051   HMEditor HME(*this, *MRI, *TRI, OldIndex, NewIndex, UpdateFlags);
1052   HME.updateAllRanges(MI);
1053 }
1054
1055 void LiveIntervals::handleMoveIntoBundle(MachineInstr* MI,
1056                                          MachineInstr* BundleStart,
1057                                          bool UpdateFlags) {
1058   SlotIndex OldIndex = Indexes->getInstructionIndex(MI);
1059   SlotIndex NewIndex = Indexes->getInstructionIndex(BundleStart);
1060   HMEditor HME(*this, *MRI, *TRI, OldIndex, NewIndex, UpdateFlags);
1061   HME.updateAllRanges(MI);
1062 }
1063
1064 void
1065 LiveIntervals::repairIntervalsInRange(MachineBasicBlock *MBB,
1066                                       MachineBasicBlock::iterator Begin,
1067                                       MachineBasicBlock::iterator End,
1068                                       ArrayRef<unsigned> OrigRegs) {
1069   // Find anchor points, which are at the beginning/end of blocks or at
1070   // instructions that already have indexes.
1071   while (Begin != MBB->begin() && !Indexes->hasIndex(Begin))
1072     --Begin;
1073   while (End != MBB->end() && !Indexes->hasIndex(End))
1074     ++End;
1075
1076   SlotIndex endIdx;
1077   if (End == MBB->end())
1078     endIdx = getMBBEndIdx(MBB).getPrevSlot();
1079   else
1080     endIdx = getInstructionIndex(End);
1081
1082   Indexes->repairIndexesInRange(MBB, Begin, End);
1083
1084   for (MachineBasicBlock::iterator I = End; I != Begin;) {
1085     --I;
1086     MachineInstr *MI = I;
1087     if (MI->isDebugValue())
1088       continue;
1089     for (MachineInstr::const_mop_iterator MOI = MI->operands_begin(),
1090          MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1091       if (MOI->isReg() &&
1092           TargetRegisterInfo::isVirtualRegister(MOI->getReg()) &&
1093           !hasInterval(MOI->getReg())) {
1094         createAndComputeVirtRegInterval(MOI->getReg());
1095       }
1096     }
1097   }
1098
1099   for (unsigned i = 0, e = OrigRegs.size(); i != e; ++i) {
1100     unsigned Reg = OrigRegs[i];
1101     if (!TargetRegisterInfo::isVirtualRegister(Reg))
1102       continue;
1103
1104     LiveInterval &LI = getInterval(Reg);
1105     // FIXME: Should we support undefs that gain defs?
1106     if (!LI.hasAtLeastOneValue())
1107       continue;
1108
1109     LiveInterval::iterator LII = LI.find(endIdx);
1110     SlotIndex lastUseIdx;
1111     if (LII != LI.end() && LII->start < endIdx)
1112       lastUseIdx = LII->end;
1113     else
1114       --LII;
1115
1116     for (MachineBasicBlock::iterator I = End; I != Begin;) {
1117       --I;
1118       MachineInstr *MI = I;
1119       if (MI->isDebugValue())
1120         continue;
1121
1122       SlotIndex instrIdx = getInstructionIndex(MI);
1123       bool isStartValid = getInstructionFromIndex(LII->start);
1124       bool isEndValid = getInstructionFromIndex(LII->end);
1125
1126       // FIXME: This doesn't currently handle early-clobber or multiple removed
1127       // defs inside of the region to repair.
1128       for (MachineInstr::mop_iterator OI = MI->operands_begin(),
1129            OE = MI->operands_end(); OI != OE; ++OI) {
1130         const MachineOperand &MO = *OI;
1131         if (!MO.isReg() || MO.getReg() != Reg)
1132           continue;
1133
1134         if (MO.isDef()) {
1135           if (!isStartValid) {
1136             if (LII->end.isDead()) {
1137               SlotIndex prevStart;
1138               if (LII != LI.begin())
1139                 prevStart = std::prev(LII)->start;
1140
1141               // FIXME: This could be more efficient if there was a
1142               // removeSegment method that returned an iterator.
1143               LI.removeSegment(*LII, true);
1144               if (prevStart.isValid())
1145                 LII = LI.find(prevStart);
1146               else
1147                 LII = LI.begin();
1148             } else {
1149               LII->start = instrIdx.getRegSlot();
1150               LII->valno->def = instrIdx.getRegSlot();
1151               if (MO.getSubReg() && !MO.isUndef())
1152                 lastUseIdx = instrIdx.getRegSlot();
1153               else
1154                 lastUseIdx = SlotIndex();
1155               continue;
1156             }
1157           }
1158
1159           if (!lastUseIdx.isValid()) {
1160             VNInfo *VNI = LI.getNextValue(instrIdx.getRegSlot(),
1161                                           VNInfoAllocator);
1162             LiveRange::Segment S(instrIdx.getRegSlot(),
1163                                  instrIdx.getDeadSlot(), VNI);
1164             LII = LI.addSegment(S);
1165           } else if (LII->start != instrIdx.getRegSlot()) {
1166             VNInfo *VNI = LI.getNextValue(instrIdx.getRegSlot(),
1167                                           VNInfoAllocator);
1168             LiveRange::Segment S(instrIdx.getRegSlot(), lastUseIdx, VNI);
1169             LII = LI.addSegment(S);
1170           }
1171
1172           if (MO.getSubReg() && !MO.isUndef())
1173             lastUseIdx = instrIdx.getRegSlot();
1174           else
1175             lastUseIdx = SlotIndex();
1176         } else if (MO.isUse()) {
1177           // FIXME: This should probably be handled outside of this branch,
1178           // either as part of the def case (for defs inside of the region) or
1179           // after the loop over the region.
1180           if (!isEndValid && !LII->end.isBlock())
1181             LII->end = instrIdx.getRegSlot();
1182           if (!lastUseIdx.isValid())
1183             lastUseIdx = instrIdx.getRegSlot();
1184         }
1185       }
1186     }
1187   }
1188 }