[StackColoring] Fix a debug invariance problem
authorBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Tue, 14 Sep 2021 13:06:28 +0000 (15:06 +0200)
committerBjorn Pettersson <bjorn.a.pettersson@ericsson.com>
Tue, 14 Sep 2021 17:21:56 +0000 (19:21 +0200)
Ignore dbg instructions when collecting stack slot markers. This is
to make sure the coloring is invariant regarding presence of dbg
instructions (even in cases when the dbg instructions might be
badly placed in the input).

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

llvm/lib/CodeGen/StackColoring.cpp
llvm/test/CodeGen/X86/StackColoring-dbg-invariance.mir

index 162f3aa..623d5da 100644 (file)
@@ -687,6 +687,8 @@ unsigned StackColoring::collectMarkers(unsigned NumSlot) {
 
     // Walk the instructions in the block to look for start/end ops.
     for (MachineInstr &MI : *MBB) {
+      if (MI.isDebugInstr())
+        continue;
       if (MI.getOpcode() == TargetOpcode::LIFETIME_START ||
           MI.getOpcode() == TargetOpcode::LIFETIME_END) {
         int Slot = getStartOrEndSlot(MI);
index 8f250a6..0fdddeb 100644 (file)
@@ -74,9 +74,9 @@ body:             |
 
     ; CHECK-LABEL: name: test_1
     ; CHECK: liveins: $edi
-    ; CHECK: DBG_VALUE %stack.1.a4, $noreg, !9, !DIExpression(), debug-location !11
+    ; CHECK: DBG_VALUE %stack.0.a1, $noreg, !9, !DIExpression(), debug-location !11
     ; CHECK: [[LEA64r:%[0-9]+]]:gr64 = LEA64r %stack.0.a1, 1, $noreg, 0, $noreg
-    ; CHECK: [[LEA64r1:%[0-9]+]]:gr64 = LEA64r %stack.1.a4, 1, $noreg, 0, $noreg
+    ; CHECK: [[LEA64r1:%[0-9]+]]:gr64 = LEA64r %stack.0.a1, 1, $noreg, 0, $noreg
     ; CHECK: RET 0
     DBG_VALUE %stack.3.a4, $noreg, !9, !DIExpression(), debug-location !11
     LIFETIME_START %stack.3.a4