summaryrefslogtreecommitdiff
path: root/lib/CodeGen/LiveRangeEdit.cpp
diff options
context:
space:
mode:
authorJakob Stoklund Olesen <stoklund@2pi.dk>2011-03-16 22:56:13 +0000
committerJakob Stoklund Olesen <stoklund@2pi.dk>2011-03-16 22:56:13 +0000
commitcc5c4296fda7270e8394626d7254596f5f9c8d82 (patch)
tree8730d7e136f733d8cbe5a87f688ea075dd7d1c59 /lib/CodeGen/LiveRangeEdit.cpp
parent2926733240d0766fbd45df6eb609ad2328f0307d (diff)
downloadllvm-cc5c4296fda7270e8394626d7254596f5f9c8d82.tar.gz
llvm-cc5c4296fda7270e8394626d7254596f5f9c8d82.tar.bz2
llvm-cc5c4296fda7270e8394626d7254596f5f9c8d82.tar.xz
Erase virtual registers that are unused after DCE.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127773 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/LiveRangeEdit.cpp')
-rw-r--r--lib/CodeGen/LiveRangeEdit.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/CodeGen/LiveRangeEdit.cpp b/lib/CodeGen/LiveRangeEdit.cpp
index 0769f95262..e994d8c32d 100644
--- a/lib/CodeGen/LiveRangeEdit.cpp
+++ b/lib/CodeGen/LiveRangeEdit.cpp
@@ -174,13 +174,21 @@ void LiveRangeEdit::eliminateDeadDefs(SmallVectorImpl<MachineInstr*> &Dead,
if (!TargetRegisterInfo::isVirtualRegister(Reg))
continue;
LiveInterval &LI = LIS.getInterval(Reg);
- // Remove defined value.
- if (MOI->isDef())
- if (VNInfo *VNI = LI.getVNInfoAt(Idx))
- LI.removeValNo(VNI);
+
// Shrink read registers.
if (MI->readsVirtualRegister(Reg))
ToShrink.insert(&LI);
+
+ // Remove defined value.
+ if (MOI->isDef()) {
+ if (VNInfo *VNI = LI.getVNInfoAt(Idx)) {
+ LI.removeValNo(VNI);
+ if (LI.empty()) {
+ ToShrink.remove(&LI);
+ eraseVirtReg(Reg, LIS);
+ }
+ }
+ }
}
if (delegate_)