[llvm] 5dab1fa - [BranchFolding] Follow up #149999 crash fix
Orlando Cazalet-Hyams via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 29 01:10:40 PDT 2025
Author: Orlando Cazalet-Hyams
Date: 2025-07-29T09:09:58+01:00
New Revision: 5dab1fa1fa174085a9f265ff25763a31af97c9e3
URL: https://github.com/llvm/llvm-project/commit/5dab1fa1fa174085a9f265ff25763a31af97c9e3
DIFF: https://github.com/llvm/llvm-project/commit/5dab1fa1fa174085a9f265ff25763a31af97c9e3.diff
LOG: [BranchFolding] Follow up #149999 crash fix
fbf6271c7da20356d7b34583b3711b4126ca1dbb introduced an assertion failure as
setDebugValueUndef was called on DBG_LABELs, which isn't allowed and doesn't
make sense. Fix by skipping the call for DBG_LABELs and hoisting, in line with
the original behaviour.
Added:
Modified:
llvm/lib/CodeGen/BranchFolding.cpp
llvm/test/DebugInfo/X86/branch-folder-dbg.mir
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/BranchFolding.cpp b/llvm/lib/CodeGen/BranchFolding.cpp
index a7c99b103c5e8..dcfd9aad70fc5 100644
--- a/llvm/lib/CodeGen/BranchFolding.cpp
+++ b/llvm/lib/CodeGen/BranchFolding.cpp
@@ -2103,8 +2103,9 @@ bool BranchFolder::HoistCommonCodeInSuccs(MachineBasicBlock *MBB) {
DI->eraseFromParent();
return;
}
-
- DI->setDebugValueUndef();
+ // Move DBG_LABELs without modifying them. Set DBG_VALUEs undef.
+ if (!DI->isDebugLabel())
+ DI->setDebugValueUndef();
DI->moveBefore(&*Loc);
};
diff --git a/llvm/test/DebugInfo/X86/branch-folder-dbg.mir b/llvm/test/DebugInfo/X86/branch-folder-dbg.mir
index 783259866a226..11b3721809129 100644
--- a/llvm/test/DebugInfo/X86/branch-folder-dbg.mir
+++ b/llvm/test/DebugInfo/X86/branch-folder-dbg.mir
@@ -9,11 +9,15 @@
## can be killed.
##
## Check DBG_PHIs are deleted rather than hoisted (implicit-check-not).
+##
+## Check DBG_LABELs are hoisted and not modified (and don't cause a crash).
# CHECK: bb.0
# CHECK: CALL64pcrel32 @f, csr_64, implicit $rsp, implicit $ssp, implicit-def $rsp, implicit-def $ssp, implicit-def $rax
## --- Start splice from bb.2.if.else (and debug instructions from bb.1.if.then) ---
+# CHECK-NEXT: DBG_LABEL 0
# CHECK-NEXT: DBG_VALUE $noreg, $noreg, ![[#]], !DIExpression(), debug-location ![[#]]
+# CHECK-NEXT: DBG_LABEL 1
# CHECK-NEXT: DBG_VALUE $noreg, $noreg, ![[#]], !DIExpression(), debug-location ![[#]]
# CHECK-NEXT: $edi = MOV32r0 implicit-def dead $eflags, debug-instr-number 2, debug-location !DILocation(line: 0, scope: ![[#]])
# CHECK-NEXT: DBG_VALUE $noreg, $noreg, ![[#]], !DIExpression(DW_OP_LLVM_arg, 0), debug-location ![[#]]
@@ -98,6 +102,7 @@ body: |
successors: %bb.3(0x80000000)
DBG_PHI $esp, 3
+ DBG_LABEL 0
DBG_VALUE $esi, $noreg, !11, !DIExpression(), debug-location !13
$edi = MOV32r0 implicit-def dead $eflags, debug-instr-number 1, debug-location !14
DBG_INSTR_REF !11, !DIExpression(DW_OP_LLVM_arg, 0), dbg-instr-ref(1, 0), debug-location !13
@@ -109,6 +114,7 @@ body: |
successors: %bb.3(0x80000000)
DBG_PHI $esp, 4
+ DBG_LABEL 1
DBG_VALUE $esp, $noreg, !11, !DIExpression(), debug-location !13
$edi = MOV32r0 implicit-def dead $eflags, debug-instr-number 2, debug-location !16
DBG_INSTR_REF !11, !DIExpression(DW_OP_LLVM_arg, 0), dbg-instr-ref(2, 0), debug-location !13
More information about the llvm-commits
mailing list