With this patch we're now accounting for two more cases which should be considered 'valid throughout': First, where RangeEnd is ScopeEnd. Second, where RangeEnd comes before ScopeEnd when including meta instructions, but are both preceded by the same non-meta instruction. CTMark shows a geomean binary size reduction of 1.5% for RelWithDebInfo builds. `llvm-locstats` (using D85636) shows a very small variable location coverage change in 2 of 10 binaries, but it is in the order of 10s of bytes which lines up with my expectations. I've added a test which checks both of these new cases. The first check in the test isn't strictly necessary for this patch. But I'm not sure that it is explicitly tested anywhere else, and is useful for the final patch in the series. Reviewed By: aprantl Differential Revision: https://reviews.llvm.org/D86151
68 lines
3.3 KiB
YAML
68 lines
3.3 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: 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
|