Commit 71c380f6 authored by Jakob Stoklund Olesen's avatar Jakob Stoklund Olesen
Browse files

Let shrinkToUses optionally return a list of now dead machine instructions.

llvm-svn: 127192
parent 6258c53e
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -159,7 +159,9 @@ namespace llvm {
    /// range to just the remaining uses. This method does not compute reaching
    /// defs for new uses, and it doesn't remove dead defs.
    /// Dead PHIDef values are marked as unused.
    void shrinkToUses(LiveInterval *li);
    /// New dead machine instructions are added to the dead vector.
    void shrinkToUses(LiveInterval *li,
                      SmallVectorImpl<MachineInstr*> *dead = 0);

    // Interval removal

+6 −1
Original line number Diff line number Diff line
@@ -746,7 +746,8 @@ LiveInterval* LiveIntervals::dupInterval(LiveInterval *li) {
/// shrinkToUses - After removing some uses of a register, shrink its live
/// range to just the remaining uses. This method does not compute reaching
/// defs for new uses, and it doesn't remove dead defs.
void LiveIntervals::shrinkToUses(LiveInterval *li) {
void LiveIntervals::shrinkToUses(LiveInterval *li,
                                 SmallVectorImpl<MachineInstr*> *dead) {
  DEBUG(dbgs() << "Shrink: " << *li << '\n');
  assert(TargetRegisterInfo::isVirtualRegister(li->reg)
         && "Can't only shrink physical registers");
@@ -852,6 +853,10 @@ void LiveIntervals::shrinkToUses(LiveInterval *li) {
      MachineInstr *MI = getInstructionFromIndex(VNI->def);
      assert(MI && "No instruction defining live value");
      MI->addRegisterDead(li->reg, tri_);
      if (dead && MI->allDefsAreDead()) {
        DEBUG(dbgs() << "All defs dead: " << *MI);
        dead->push_back(MI);
      }
    }
  }