Files
clang-p2996/llvm/test/DebugInfo/WebAssembly/dbg-loc-reg-stackify.mir
Heejin Ahn d20a1b87f6 [WebAssembly] Handle DebugLoc in DebugValueManager
According to
https://llvm.org/docs/HowToUpdateDebugInfo.html#when-to-preserve-an-instruction-location,
when moving (and in our case cloning) within the same BB, the debug
location is preserved. But when moving / cloning to a different BB, we
preserve the debug location only if the destination BB contains the same
location. Currently we preserve the debug loc unconditionally in all
cases. This CL correctly handles the debug locs in DebugValueManager.

Reviewed By: dschuff

Differential Revision: https://reviews.llvm.org/D148115
2023-04-12 23:47:24 -07:00

126 lines
3.7 KiB
YAML

# RUN: llc -run-pass wasm-reg-stackify %s -o - | FileCheck %s
--- |
target triple = "wasm32-unknown-unknown"
declare void @use(i32)
define void @sink_same_bb() {
unreachable
}
define void @clone_same_bb() {
unreachable
}
define void @clone_different_bb_0() {
unreachable
}
define void @clone_different_bb_1() {
unreachable
}
!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!2, !3, !4}
!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, emissionKind: FullDebug)
!1 = !DIFile(filename: "test.c", directory: "")
!2 = !{i32 7, !"Dwarf Version", i32 5}
!3 = !{i32 2, !"Debug Info Version", i32 3}
!4 = !{i32 1, !"wchar_size", i32 4}
!6 = distinct !DISubprogram(name: "sink_same_bb", scope: !1, file: !1, line: 1, type: !7, scopeLine: 1, unit: !0)
!7 = !DISubroutineType(types: !8)
!8 = !{null}
...
---
# Sinking within the same BB preserves the debug location.
# CHECK-LABEL: name: sink_same_bb
name: sink_same_bb
liveins:
- { reg: '$arguments' }
tracksRegLiveness: true
body: |
bb.0:
liveins: $arguments
%0:i32 = CONST_I32 1, implicit-def $arguments, debug-location !DILocation(line:10, scope:!6)
NOP implicit-def $arguments
CALL @use, %0:i32, implicit-def $arguments
RETURN implicit-def $arguments
; CHECK: %0:i32 = CONST_I32 1, {{.*}}, debug-location !DILocation(line: 10
; CHECK-NEXT: CALL @use
...
---
# Cloning within the same BB preserves the debug location.
# CHECK-LABEL: name: clone_same_bb
name: clone_same_bb
liveins:
- { reg: '$arguments' }
tracksRegLiveness: true
body: |
bb.0:
liveins: $arguments
%0:i32 = CONST_I32 1, implicit-def $arguments, debug-location !DILocation(line:10, scope:!6)
NOP implicit-def $arguments
CALL @use, %0:i32, implicit-def $arguments
CALL @use, %0:i32, implicit-def $arguments
RETURN implicit-def $arguments
; CHECK: CALL @use
; CHECK-NEXT: %1:i32 = CONST_I32 1, {{.*}}, debug-location !DILocation(line: 10
; CHECK-NEXT: CALL @use
...
---
# Cloning to a different BB preserves the debug location in this case because
# the destination BB has an instruction that has the same debug location
# (test.c:10).
# CHECK-LABEL: name: clone_different_bb_0
name: clone_different_bb_0
liveins:
- { reg: '$arguments' }
tracksRegLiveness: true
body: |
bb.0:
successors: %bb.1
liveins: $arguments
%0:i32 = CONST_I32 1, implicit-def $arguments, debug-location !DILocation(line:10, scope:!6)
BR %bb.1, implicit-def $arguments
bb.1:
; predecessors: %bb.0
CALL @use, %0:i32, implicit-def $arguments, debug-location !DILocation(line:10, scope:!6)
RETURN implicit-def $arguments
; CHECK: bb.1:
; CHECK: %1:i32 = CONST_I32 1, {{.*}}, debug-location !DILocation(line: 10
; CHECK-NEXT: CALL @use, %1, {{.*}}, debug-location !DILocation(line: 10
...
---
# Cloning to a different BB does NOT preserve the debug location in this case
# because the destination BB doesn't have an instruction that has the same debug
# location (It has test.c:20 but not test.c:10).
# CHECK-LABEL: name: clone_different_bb_1
name: clone_different_bb_1
liveins:
- { reg: '$arguments' }
tracksRegLiveness: true
body: |
bb.0:
successors: %bb.1
liveins: $arguments
%0:i32 = CONST_I32 1, implicit-def $arguments, debug-location !DILocation(line:10, scope:!6)
BR %bb.1, implicit-def $arguments
bb.1:
; predecessors: %bb.0
CALL @use, %0:i32, implicit-def $arguments, debug-location !DILocation(line:20, scope:!6)
RETURN implicit-def $arguments
; CHECK: bb.1:
; CHECK: %1:i32 = CONST_I32 1
; CHECK-NOT: %1:i32 = CONST_I32 1, {{.*}}, debug-location !DILocation(line: 10
; CHECK-NEXT: CALL @use, %1, {{.*}}, debug-location !DILocation(line: 20
...