Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 13 additions & 7 deletions llvm/lib/CodeGen/MachineInstrBundle.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the function's comment needs updating?

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:
Expand Down
2 changes: 2 additions & 0 deletions llvm/test/DebugInfo/Hexagon/lit.local.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
if not "Hexagon" in config.root.targets:
config.unsupported = True
48 changes: 48 additions & 0 deletions llvm/test/DebugInfo/Hexagon/packet-debug.mir
Original file line number Diff line number Diff line change
@@ -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

...