Files
clang-p2996/llvm/test/DebugInfo/MIR/X86/callsite-stack-value.mir
Jeremy Morse d4ce9e463d [DWARF] Revert sharing subprograms across CUs
This patch is a revert of e08f205f5c. In that patch, DW_TAG_subprograms
were permitted to be referenced across CU boundaries, to improve stack
trace construction using call site information. Unfortunately, as
documented in PR48790, the way that subprograms are "owned" by dwarf units
is sufficiently complicated that subprograms end up in unexpected units,
invalidating cross-unit references.

There's no obvious way to easily fix this, and several attempts have
failed. Revert this to ensure correct DWARF is always emitted.

Three tests change in addition to the reversion, but they're all very
light alterations.

Differential Revision: https://reviews.llvm.org/D107076
2021-08-09 12:43:43 +01:00

72 lines
3.4 KiB
YAML

# RUN: llc -start-after=livedebugvalues -mtriple=x86_64-apple-darwin -o - %s -filetype=obj \
# RUN: -emit-call-site-info | llvm-dwarfdump - | FileCheck %s -implicit-check-not=call_site_parameter
# CHECK-LABEL: DW_TAG_subprogram
# CHECK: DW_AT_name ("f")
# CHECK-LABEL: DW_TAG_subprogram
# CHECK: DW_AT_name ("g")
# CHECK: DW_TAG_formal_parameter
# CHECK-NEXT: DW_AT_location (DW_OP_reg17 XMM0)
# struct S {
# float w;
# };
# void f(long w, long b);
# void g(struct S s) {
# int w = s.w;
# f(w, w*4);
# }
--- |
define void @g(float %s.coerce) local_unnamed_addr !dbg !20 {
entry:
ret void, !dbg !31
}
declare !dbg !14 void @f(i64, i64) local_unnamed_addr
!llvm.module.flags = !{!6, !7, !8, !9}
!llvm.dbg.cu = !{!10}
!6 = !{i32 7, !"Dwarf Version", i32 4}
!7 = !{i32 2, !"Debug Info Version", i32 3}
!8 = !{i32 1, !"wchar_size", i32 4}
!9 = !{i32 7, !"PIC Level", i32 2}
!10 = distinct !DICompileUnit(language: DW_LANG_ObjC, file: !15, producer: "", isOptimized: true, runtimeVersion: 2, emissionKind: FullDebug, enums: !12, retainedTypes: !13, nameTableKind: None, sysroot: "/")
!12 = !{}
!13 = !{!14}
!14 = !DISubprogram(name: "f", scope: !15, file: !15, line: 4, type: !16, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !12)
!15 = !DIFile(filename: "test.m", directory: "/")
!16 = !DISubroutineType(types: !17)
!17 = !{null, !18, !18}
!18 = !DIBasicType(name: "long int", size: 64, encoding: DW_ATE_signed)
!20 = distinct !DISubprogram(name: "g", scope: !15, file: !15, line: 5, type: !21, scopeLine: 5, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !10, retainedNodes: !27)
!21 = !DISubroutineType(types: !22)
!22 = !{null, !23}
!23 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "S", file: !15, line: 1, size: 32, elements: !24)
!24 = !{!25}
!25 = !DIDerivedType(tag: DW_TAG_member, name: "w", scope: !23, file: !15, line: 2, baseType: !26, size: 32)
!26 = !DIBasicType(name: "float", size: 32, encoding: DW_ATE_float)
!27 = !{!28, !29}
!28 = !DILocalVariable(name: "s", arg: 1, scope: !20, file: !15, line: 5, type: !23)
!29 = !DILocalVariable(name: "w", scope: !20, file: !15, line: 6, type: !30)
!30 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
!31 = !DILocation(line: 0, scope: !20)
name: g
callSites:
- { bb: 0, offset: 13, fwdArgRegs:
- { arg: 1, reg: '$rsi' } }
body: |
bb.0.entry:
DBG_VALUE $xmm0, $noreg, !28, !DIExpression(), debug-location !31
DBG_VALUE $xmm0, $noreg, !28, !DIExpression(), debug-location !31
frame-setup PUSH64r killed $rbp, implicit-def $rsp, implicit $rsp
CFI_INSTRUCTION def_cfa_offset 16
CFI_INSTRUCTION offset $rbp, -16
$rbp = frame-setup MOV64rr $rsp
CFI_INSTRUCTION def_cfa_register $rbp
renamable $eax = nofpexcept CVTTSS2SIrr killed renamable $xmm0, implicit $mxcsr, debug-location !31
DBG_VALUE $eax, $noreg, !29, !DIExpression(), debug-location !31
renamable $rdi = MOVSX64rr32 killed renamable $eax, debug-location !31
renamable $eax = LEA64_32r $noreg, 4, renamable $rdi, 0, $noreg, debug-location !31
renamable $rsi = MOVSX64rr32 killed renamable $eax, debug-location !31
$rbp = frame-destroy POP64r implicit-def $rsp, implicit $rsp, debug-location !31
TAILJMPd64 @f, csr_64, implicit $rsp, implicit $ssp, implicit $rsp, implicit $ssp, implicit $rdi, implicit $rsi, debug-location !31