LiveRangeEdit: Adapt eliminateDeadDef() to subregister liveness.
authorMatthias Braun <matze@braunis.de>
Wed, 10 Dec 2014 01:12:23 +0000 (01:12 +0000)
committerMatthias Braun <matze@braunis.de>
Wed, 10 Dec 2014 01:12:23 +0000 (01:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@223882 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveRangeEdit.cpp

index a0fb712d118bb5a75d4dc47afb9ade51c2200bd6..634e93de69d903dc82c17dbeeac402597ca08118 100644 (file)
@@ -286,8 +286,16 @@ void LiveRangeEdit::eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink) {
         if (TheDelegate)
           TheDelegate->LRE_WillShrinkVirtReg(LI.reg);
         LI.removeValNo(VNI);
-        if (LI.empty())
+        if (LI.empty()) {
           RegsToErase.push_back(Reg);
+        } else {
+          // Also remove the value in subranges.
+          for (LiveInterval::subrange_iterator S = LI.subrange_begin(),
+               SE = LI.subrange_end(); S != SE; ++S) {
+            if (VNInfo *SVNI = S->getVNInfoAt(Idx))
+              S->removeValNo(SVNI);
+          }
+        }
       }
     }
   }