Erase virtual registers that are unused after DCE.
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 16 Mar 2011 22:56:13 +0000 (22:56 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Wed, 16 Mar 2011 22:56:13 +0000 (22:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@127773 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveRangeEdit.cpp

index 0769f95262dc71e6b9db6e1e540305a099034155..e994d8c32d49832238f3644d8230dbf744ec2e14 100644 (file)
@@ -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_)