diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/CodeGen/MachineCopyPropagation.cpp | 2 | ||||
-rw-r--r-- | llvm/test/CodeGen/X86/machine-cp-debug.mir | 23 |
2 files changed, 24 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/MachineCopyPropagation.cpp b/llvm/lib/CodeGen/MachineCopyPropagation.cpp index d3bdc772ae4..3bf8147a06c 100644 --- a/llvm/lib/CodeGen/MachineCopyPropagation.cpp +++ b/llvm/lib/CodeGen/MachineCopyPropagation.cpp @@ -517,7 +517,7 @@ void MachineCopyPropagation::CopyPropagateBlock(MachineBasicBlock &MBB) { if (MO.isDef() && !MO.isEarlyClobber()) { Defs.push_back(Reg); continue; - } else if (MO.readsReg()) + } else if (!MO.isDebug() && MO.readsReg()) ReadRegister(Reg); } diff --git a/llvm/test/CodeGen/X86/machine-cp-debug.mir b/llvm/test/CodeGen/X86/machine-cp-debug.mir new file mode 100644 index 00000000000..a7fcd9801e7 --- /dev/null +++ b/llvm/test/CodeGen/X86/machine-cp-debug.mir @@ -0,0 +1,23 @@ +# RUN: llc -mtriple=x86_64-unknown-linux-gnu -run-pass=machine-cp %s -o - | FileCheck %s + +# Machine copy propagation can remove dead copies. Make sure that the +# DBG_VALUE does not keep the copy alive. +# +# CHECK-NOT: $ebx = COPY $eax + +--- | + define void @fred() { + ret void + } + !1 = !DIExpression() +... + +--- +name: fred +tracksRegLiveness: true +body: | + bb.0: + liveins: $eax + $ebx = COPY $eax + DBG_VALUE debug-use $ebx, debug-use _, !1, !1 +... |