LiveRangeEdit.cpp revision 7792e980c43536814ea42448db9799b4da32fef6
1a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen//===--- LiveRangeEdit.cpp - Basic tools for editing a register live range --===//
2a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen//
3a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen//                     The LLVM Compiler Infrastructure
4a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen//
5a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen// This file is distributed under the University of Illinois Open Source
6a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen// License. See LICENSE.TXT for details.
7a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen//
8a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen//===----------------------------------------------------------------------===//
9a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen//
10a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen// The LiveRangeEdit class represents changes done to a virtual register when it
11a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen// is spilled or split.
12a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen//===----------------------------------------------------------------------===//
13a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen
14a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen#include "LiveRangeEdit.h"
15a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen#include "VirtRegMap.h"
165881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen#include "llvm/ADT/SetVector.h"
17a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen#include "llvm/CodeGen/LiveIntervalAnalysis.h"
18a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen#include "llvm/CodeGen/MachineRegisterInfo.h"
19080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen#include "llvm/Target/TargetInstrInfo.h"
205881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen#include "llvm/Support/Debug.h"
215881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen#include "llvm/Support/raw_ostream.h"
22a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen
23a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesenusing namespace llvm;
24a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen
25a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund OlesenLiveInterval &LiveRangeEdit::create(MachineRegisterInfo &mri,
26a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen                                    LiveIntervals &lis,
27a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen                                    VirtRegMap &vrm) {
28e324f6e05ff7a157347edb48203db0250805f748Jakob Stoklund Olesen  const TargetRegisterClass *RC = mri.getRegClass(getReg());
29a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen  unsigned VReg = mri.createVirtualRegister(RC);
30a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen  vrm.grow();
31fd38917d4d040759d75e9d1f4e2c885fb40ba2d7Jakob Stoklund Olesen  vrm.setIsSplitFromReg(VReg, vrm.getOriginal(getReg()));
32a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen  LiveInterval &li = lis.getOrCreateInterval(VReg);
33a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen  newRegs_.push_back(&li);
34a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen  return li;
35a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen}
36a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen
37080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesenvoid LiveRangeEdit::scanRemattable(LiveIntervals &lis,
38080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen                                   const TargetInstrInfo &tii,
39080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen                                   AliasAnalysis *aa) {
40080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  for (LiveInterval::vni_iterator I = parent_.vni_begin(),
41080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen       E = parent_.vni_end(); I != E; ++I) {
42080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen    VNInfo *VNI = *I;
43080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen    if (VNI->isUnused())
44080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen      continue;
45080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen    MachineInstr *DefMI = lis.getInstructionFromIndex(VNI->def);
46080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen    if (!DefMI)
47080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen      continue;
48080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen    if (tii.isTriviallyReMaterializable(DefMI, aa))
49080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen      remattable_.insert(VNI);
50080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  }
51080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  scannedRemattable_ = true;
52080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen}
53080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen
54080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesenbool LiveRangeEdit::anyRematerializable(LiveIntervals &lis,
55080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen                                        const TargetInstrInfo &tii,
56080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen                                        AliasAnalysis *aa) {
57080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  if (!scannedRemattable_)
58080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen    scanRemattable(lis, tii, aa);
59080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  return !remattable_.empty();
60080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen}
61080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen
62a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen/// allUsesAvailableAt - Return true if all registers used by OrigMI at
63a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen/// OrigIdx are also available with the same value at UseIdx.
64a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesenbool LiveRangeEdit::allUsesAvailableAt(const MachineInstr *OrigMI,
65a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen                                       SlotIndex OrigIdx,
66a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen                                       SlotIndex UseIdx,
67a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen                                       LiveIntervals &lis) {
68a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen  OrigIdx = OrigIdx.getUseIndex();
69a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen  UseIdx = UseIdx.getUseIndex();
70a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen  for (unsigned i = 0, e = OrigMI->getNumOperands(); i != e; ++i) {
71a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen    const MachineOperand &MO = OrigMI->getOperand(i);
72a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen    if (!MO.isReg() || !MO.getReg() || MO.getReg() == getReg())
73a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen      continue;
74a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen    // Reserved registers are OK.
75a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen    if (MO.isUndef() || !lis.hasInterval(MO.getReg()))
76a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen      continue;
77a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen    // We don't want to move any defs.
78a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen    if (MO.isDef())
79a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen      return false;
80a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen    // We cannot depend on virtual registers in uselessRegs_.
811973b3e2541f95c87e4acb7e134362ff306ec9edJakob Stoklund Olesen    if (uselessRegs_)
821973b3e2541f95c87e4acb7e134362ff306ec9edJakob Stoklund Olesen      for (unsigned ui = 0, ue = uselessRegs_->size(); ui != ue; ++ui)
831973b3e2541f95c87e4acb7e134362ff306ec9edJakob Stoklund Olesen        if ((*uselessRegs_)[ui]->reg == MO.getReg())
841973b3e2541f95c87e4acb7e134362ff306ec9edJakob Stoklund Olesen          return false;
85a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen
86a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen    LiveInterval &li = lis.getInterval(MO.getReg());
87a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen    const VNInfo *OVNI = li.getVNInfoAt(OrigIdx);
88a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen    if (!OVNI)
89a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen      continue;
90a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen    if (OVNI != li.getVNInfoAt(UseIdx))
91a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen      return false;
92a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen  }
93a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen  return true;
94a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen}
95a17768f5822ab62bc18608e5ba473187bf726b84Jakob Stoklund Olesen
96b80e973c95034e5754d888140497a9658a7c1dedJakob Stoklund Olesenbool LiveRangeEdit::canRematerializeAt(Remat &RM,
97b80e973c95034e5754d888140497a9658a7c1dedJakob Stoklund Olesen                                       SlotIndex UseIdx,
98b80e973c95034e5754d888140497a9658a7c1dedJakob Stoklund Olesen                                       bool cheapAsAMove,
99b80e973c95034e5754d888140497a9658a7c1dedJakob Stoklund Olesen                                       LiveIntervals &lis) {
100080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  assert(scannedRemattable_ && "Call anyRematerializable first");
101080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen
102080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  // Use scanRemattable info.
103080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  if (!remattable_.count(RM.ParentVNI))
104b80e973c95034e5754d888140497a9658a7c1dedJakob Stoklund Olesen    return false;
105080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen
106080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  // No defining instruction.
107b80e973c95034e5754d888140497a9658a7c1dedJakob Stoklund Olesen  RM.OrigMI = lis.getInstructionFromIndex(RM.ParentVNI->def);
108b80e973c95034e5754d888140497a9658a7c1dedJakob Stoklund Olesen  assert(RM.OrigMI && "Defining instruction for remattable value disappeared");
109080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen
110080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  // If only cheap remats were requested, bail out early.
111b80e973c95034e5754d888140497a9658a7c1dedJakob Stoklund Olesen  if (cheapAsAMove && !RM.OrigMI->getDesc().isAsCheapAsAMove())
112b80e973c95034e5754d888140497a9658a7c1dedJakob Stoklund Olesen    return false;
113080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen
114080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  // Verify that all used registers are available with the same values.
115b80e973c95034e5754d888140497a9658a7c1dedJakob Stoklund Olesen  if (!allUsesAvailableAt(RM.OrigMI, RM.ParentVNI->def, UseIdx, lis))
116b80e973c95034e5754d888140497a9658a7c1dedJakob Stoklund Olesen    return false;
117080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen
118b80e973c95034e5754d888140497a9658a7c1dedJakob Stoklund Olesen  return true;
119080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen}
120080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen
121080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund OlesenSlotIndex LiveRangeEdit::rematerializeAt(MachineBasicBlock &MBB,
122080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen                                         MachineBasicBlock::iterator MI,
123080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen                                         unsigned DestReg,
124080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen                                         const Remat &RM,
125080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen                                         LiveIntervals &lis,
126080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen                                         const TargetInstrInfo &tii,
127080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen                                         const TargetRegisterInfo &tri) {
128080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  assert(RM.OrigMI && "Invalid remat");
129080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  tii.reMaterialize(MBB, MI, DestReg, 0, RM.OrigMI, tri);
130f1583ae84a8eeb0f6c0f81bd5bf189bdc9eaecb2Jakob Stoklund Olesen  rematted_.insert(RM.ParentVNI);
131080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen  return lis.InsertMachineInstrInMaps(--MI).getDefIndex();
132080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen}
133080c316ff8a066cd164d9a8f92df509d8cb63110Jakob Stoklund Olesen
1347792e980c43536814ea42448db9799b4da32fef6Jakob Stoklund Olesenvoid LiveRangeEdit::eraseVirtReg(unsigned Reg, LiveIntervals &LIS) {
1357792e980c43536814ea42448db9799b4da32fef6Jakob Stoklund Olesen  if (delegate_ && delegate_->LRE_CanEraseVirtReg(Reg))
1367792e980c43536814ea42448db9799b4da32fef6Jakob Stoklund Olesen    LIS.removeInterval(Reg);
1377792e980c43536814ea42448db9799b4da32fef6Jakob Stoklund Olesen}
1387792e980c43536814ea42448db9799b4da32fef6Jakob Stoklund Olesen
1395881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesenvoid LiveRangeEdit::eliminateDeadDefs(SmallVectorImpl<MachineInstr*> &Dead,
1405881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen                                      LiveIntervals &LIS,
1415881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen                                      const TargetInstrInfo &TII) {
1425881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen  SetVector<LiveInterval*,
1435881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen            SmallVector<LiveInterval*, 8>,
1445881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen            SmallPtrSet<LiveInterval*, 8> > ToShrink;
1455881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen
1465881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen  for (;;) {
1475881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen    // Erase all dead defs.
1485881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen    while (!Dead.empty()) {
1495881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      MachineInstr *MI = Dead.pop_back_val();
1505881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      assert(MI->allDefsAreDead() && "Def isn't really dead");
1515881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen
1525881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      // Never delete inline asm.
1535881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      if (MI->isInlineAsm())
1545881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen        continue;
1555881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen
1565881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      // Use the same criteria as DeadMachineInstructionElim.
1575881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      bool SawStore = false;
1585881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      if (!MI->isSafeToMove(&TII, 0, SawStore))
1595881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen        continue;
1605881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen
1615881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      SlotIndex Idx = LIS.getInstructionIndex(MI).getDefIndex();
1625881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      DEBUG(dbgs() << "Deleting dead def " << Idx << '\t' << *MI);
1635881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen
1645881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      // Check for live intervals that may shrink
1655881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      for (MachineInstr::mop_iterator MOI = MI->operands_begin(),
1665881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen             MOE = MI->operands_end(); MOI != MOE; ++MOI) {
1675881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen        if (!MOI->isReg())
1685881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen          continue;
1695881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen        unsigned Reg = MOI->getReg();
1705881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen        if (!TargetRegisterInfo::isVirtualRegister(Reg))
1715881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen          continue;
1725881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen        LiveInterval &LI = LIS.getInterval(Reg);
1735881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen        // Remove defined value.
1745881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen        if (MOI->isDef())
1755881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen          if (VNInfo *VNI = LI.getVNInfoAt(Idx))
1765881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen            LI.removeValNo(VNI);
1775881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen        // Shrink read registers.
1785881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen        if (MI->readsVirtualRegister(Reg))
1795881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen          ToShrink.insert(&LI);
1805881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      }
1815881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen
18292a55f4bdd120cdd3bb5a004c792d4d24a940311Jakob Stoklund Olesen      if (delegate_)
18392a55f4bdd120cdd3bb5a004c792d4d24a940311Jakob Stoklund Olesen        delegate_->LRE_WillEraseInstruction(MI);
1845881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      LIS.RemoveMachineInstrFromMaps(MI);
1855881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      MI->eraseFromParent();
1865881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen    }
1875881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen
1885881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen    if (ToShrink.empty())
1895881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen      break;
1905881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen
1915881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen    // Shrink just one live interval. Then delete new dead defs.
1925881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen    LIS.shrinkToUses(ToShrink.back(), &Dead);
1935881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen    ToShrink.pop_back();
1945881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen  }
1955881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen}
1965881799d0cccbd814ec1b0f0509df9be1f63c6cbJakob Stoklund Olesen
197