diff --git a/llvm/lib/CodeGen/MachineBasicBlock.cpp b/llvm/lib/CodeGen/MachineBasicBlock.cpp --- a/llvm/lib/CodeGen/MachineBasicBlock.cpp +++ b/llvm/lib/CodeGen/MachineBasicBlock.cpp @@ -1406,6 +1406,10 @@ return LQR_Dead; } + // Skip over debug instructions. + if (I != end() && I->isDebugInstr()) + ++I; + // If we reached the end, it is safe to clobber Reg at the end of a block of // no successor has it live in. if (I == end()) { @@ -1462,6 +1466,11 @@ } while (I != begin() && N > 0); } + // If all the instructions before this in the block are debug instructions, + // skip over them. + while (I != begin() && std::prev(I)->isDebugInstr()) + --I; + // Did we get to the start of the block? if (I == begin()) { // If so, the register's state is definitely defined by the live-in state. diff --git a/llvm/test/CodeGen/X86/leaFixup64.mir b/llvm/test/CodeGen/X86/leaFixup64.mir --- a/llvm/test/CodeGen/X86/leaFixup64.mir +++ b/llvm/test/CodeGen/X86/leaFixup64.mir @@ -1169,7 +1169,7 @@ ; CHECK: NOOP ; CHECK: NOOP ; CHECK: NOOP - ; CHECK: $ebp = LEA64_32r killed $rbp, 1, killed $rax, 0, $noreg + ; CHECK: $ebp = ADD32rr $ebp, $eax, implicit-def $eflags, implicit $rbp, implicit $rax ; CHECK: NOOP ; CHECK: NOOP ; CHECK: NOOP