diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/CodeGen/RegAllocLocal.cpp | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/CodeGen/RegAllocLocal.cpp b/lib/CodeGen/RegAllocLocal.cpp index 5ebecc3..e1cc20c 100644 --- a/lib/CodeGen/RegAllocLocal.cpp +++ b/lib/CodeGen/RegAllocLocal.cpp @@ -981,10 +981,12 @@ void RALocal::AllocateBasicBlock(MachineBasicBlock &MBB) { } } - // Finally, if this is a noop copy instruction, zap it. + // Finally, if this is a noop copy instruction, zap it. (Except that if + // the copy is dead, it must be kept to avoid messing up liveness info for + // the register scavenger. See pr4100.) unsigned SrcReg, DstReg, SrcSubReg, DstSubReg; if (TII->isMoveInstr(*MI, SrcReg, DstReg, SrcSubReg, DstSubReg) && - SrcReg == DstReg) + SrcReg == DstReg && DeadDefs.empty()) MBB.erase(MI); } |