[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@gmail.com> Co-authored-by: Orlando Cazalet-Hyams <orlandoch.och@gmail.com>
This commit is contained in:
parent
3426f9c481
commit
63d6e3eb46
@ -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:
|
||||
|
||||
2
llvm/test/DebugInfo/Hexagon/lit.local.cfg
Normal file
2
llvm/test/DebugInfo/Hexagon/lit.local.cfg
Normal file
@ -0,0 +1,2 @@
|
||||
if not "Hexagon" in config.root.targets:
|
||||
config.unsupported = True
|
||||
48
llvm/test/DebugInfo/Hexagon/packet-debug.mir
Normal file
48
llvm/test/DebugInfo/Hexagon/packet-debug.mir
Normal file
@ -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
|
||||
|
||||
...
|
||||
Loading…
x
Reference in New Issue
Block a user