From 03dca5e4b6c41e1e7fa4edad3d7ff8d5f6de7008 Mon Sep 17 00:00:00 2001 From: Andrew Trick Date: Fri, 21 Jun 2013 18:33:20 +0000 Subject: Handle more cases in LiveRangeEdit::eliminateDeadDefs. Live intervals for dead physregs may be created during coalescing. We need to update these in the event that their instruction goes away. crash.ll is the unit test that catches it when MI sched is enabled on X86. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@184572 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/LiveRangeEdit.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'lib') diff --git a/lib/CodeGen/LiveRangeEdit.cpp b/lib/CodeGen/LiveRangeEdit.cpp index 0c1d45902f..d215d0c28a 100644 --- a/lib/CodeGen/LiveRangeEdit.cpp +++ b/lib/CodeGen/LiveRangeEdit.cpp @@ -249,6 +249,15 @@ void LiveRangeEdit::eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink) { // Check if MI reads any unreserved physregs. if (Reg && MOI->readsReg() && !MRI.isReserved(Reg)) ReadsPhysRegs = true; + else if (MOI->isDef()) { + for (MCRegUnitIterator Units(Reg, MRI.getTargetRegisterInfo()); + Units.isValid(); ++Units) { + if (LiveInterval *LI = LIS.getCachedRegUnit(*Units)) { + if (VNInfo *VNI = LI->getVNInfoAt(Idx)) + LI->removeValNo(VNI); + } + } + } continue; } LiveInterval &LI = LIS.getInterval(Reg); -- cgit v1.2.3