[llvm] 63d6e3e - [DebugInfo] Assign best possible debugloc to bundle (#164573)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 5 06:56:05 PST 2025
Author: Santanu Das
Date: 2025-11-05T20:26:00+05:30
New Revision: 63d6e3eb4664c150dcb0c8cb611b30fb6307dbc4
URL: https://github.com/llvm/llvm-project/commit/63d6e3eb4664c150dcb0c8cb611b30fb6307dbc4
DIFF: https://github.com/llvm/llvm-project/commit/63d6e3eb4664c150dcb0c8cb611b30fb6307dbc4.diff
LOG: [DebugInfo] Assign best possible debugloc to bundle (#164573)
The debug info attached to the BUNDLE is the first instruction in the
BUNDLE, even if a better debug info (line:column) is present in the
later instructions of the bundle. The patch tries to get a better debug
info first. If not, then a worse debug info without line number is
chosen.
---------
Co-authored-by: Vladislav Dzhidzhoev <dzhidzhoev at gmail.com>
Co-authored-by: Orlando Cazalet-Hyams <orlandoch.och at gmail.com>
Added:
llvm/test/DebugInfo/Hexagon/lit.local.cfg
llvm/test/DebugInfo/Hexagon/packet-debug.mir
Modified:
llvm/lib/CodeGen/MachineInstrBundle.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/MachineInstrBundle.cpp b/llvm/lib/CodeGen/MachineInstrBundle.cpp
index 88d81993fbe55..f4c1a8bf339c8 100644
--- a/llvm/lib/CodeGen/MachineInstrBundle.cpp
+++ b/llvm/lib/CodeGen/MachineInstrBundle.cpp
@@ -83,15 +83,21 @@ llvm::createUnpackMachineBundles(
return new UnpackMachineBundles(std::move(Ftor));
}
-/// Return the first found DebugLoc that has a DILocation, given a range of
-/// instructions. The search range is from FirstMI to LastMI (exclusive). If no
-/// DILocation is found, then an empty location is returned.
+/// Return the first DebugLoc that has line number information, given a
+/// range of instructions. The search range is from FirstMI to LastMI
+/// (exclusive). Otherwise return the first DILocation or an empty location if
+/// there are none.
static DebugLoc getDebugLoc(MachineBasicBlock::instr_iterator FirstMI,
MachineBasicBlock::instr_iterator LastMI) {
- for (auto MII = FirstMI; MII != LastMI; ++MII)
- if (MII->getDebugLoc())
- return MII->getDebugLoc();
- return DebugLoc();
+ DebugLoc DL;
+ for (auto MII = FirstMI; MII != LastMI; ++MII) {
+ if (DebugLoc MIIDL = MII->getDebugLoc()) {
+ if (MIIDL.getLine() != 0)
+ return MIIDL;
+ DL = MIIDL.get();
+ }
+ }
+ return DL;
}
/// Check if target reg is contained in given lists, which are:
diff --git a/llvm/test/DebugInfo/Hexagon/lit.local.cfg b/llvm/test/DebugInfo/Hexagon/lit.local.cfg
new file mode 100644
index 0000000000000..3bed54b1a88d2
--- /dev/null
+++ b/llvm/test/DebugInfo/Hexagon/lit.local.cfg
@@ -0,0 +1,2 @@
+if not "Hexagon" in config.root.targets:
+ config.unsupported = True
diff --git a/llvm/test/DebugInfo/Hexagon/packet-debug.mir b/llvm/test/DebugInfo/Hexagon/packet-debug.mir
new file mode 100644
index 0000000000000..485b543b6e176
--- /dev/null
+++ b/llvm/test/DebugInfo/Hexagon/packet-debug.mir
@@ -0,0 +1,48 @@
+# RUN: llc -mtriple=hexagon -run-pass hexagon-packetizer %s -o - | FileCheck %s
+
+# CHECK-LABEL: name: factorial
+
+# The first bundle in bb.0 should have debug-location !19 (line 9),
+# not !18 (line 0) from the DBG_VALUE instructions.
+# CHECK: bb.0:
+# CHECK: BUNDLE {{.*}}line: 9
+
+--- |
+ define void @factorial() { ret void }
+
+ !llvm.dbg.cu = !{!2}
+ !llvm.module.flags = !{!6, !7}
+
+ !2 = distinct !DICompileUnit(language: DW_LANG_C11, file: !3, producer: "test", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug)
+ !3 = !DIFile(filename: "fact.c", directory: "/test")
+ !5 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
+ !6 = !{i32 2, !"Debug Info Version", i32 3}
+ !7 = !{i32 1, !"wchar_size", i32 4}
+ !12 = distinct !DISubprogram(name: "factorial", scope: !3, file: !3, line: 6, type: !13, scopeLine: 7, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !2)
+ !13 = !DISubroutineType(types: !14)
+ !14 = !{!5, !5}
+ !16 = !DILocalVariable(name: "i", arg: 1, scope: !12, file: !3, line: 6, type: !5)
+ !18 = !DILocation(line: 0, scope: !12)
+ !19 = !DILocation(line: 9, column: 9, scope: !12)
+ !21 = !DILocation(line: 9, column: 7, scope: !12)
+
+...
+---
+name: factorial
+alignment: 16
+tracksRegLiveness: true
+body: |
+ bb.0:
+ liveins: $r0
+
+ DBG_VALUE $r0, $noreg, !16, !DIExpression(), debug-location !18
+ $r2 = A2_tfr $r0
+ DBG_VALUE $r2, $noreg, !16, !DIExpression(), debug-location !18
+ renamable $p0 = C2_cmpeqi killed $r0, 1, debug-location !19
+ renamable $r0 = A2_tfrsi 1
+ J2_jumpt killed $p0, %bb.1, implicit-def $pc, debug-location !21
+
+ bb.1:
+ PS_jmpret $r31, implicit-def dead $pc
+
+...
More information about the llvm-commits
mailing list