[MachineBasicBlock] Skip over debug instructions in computeRegisterLiveness before...
authorCraig Topper <craig.topper@intel.com>
Fri, 1 Nov 2019 21:06:52 +0000 (14:06 -0700)
committerCraig Topper <craig.topper@intel.com>
Fri, 1 Nov 2019 21:43:17 +0000 (14:43 -0700)
If there are debug instructions before the stopping point,
we need to skip over them before checking for begin in order
to avoid having the debug instructions effect behavior.

Fixes PR43758.

Differential Revision: https://reviews.llvm.org/D69606

llvm/lib/CodeGen/MachineBasicBlock.cpp
llvm/test/CodeGen/X86/leaFixup64.mir

index 854bef3..71354ea 100644 (file)
@@ -1462,6 +1462,11 @@ MachineBasicBlock::computeRegisterLiveness(const TargetRegisterInfo *TRI,
     } 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.
index 931a572..673d43e 100644 (file)
@@ -1169,7 +1169,7 @@ body:             |
     ; 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