[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / DebugInfo / X86 / ranges_always.ll
blob38581b83ea32382b13e5e70eafbb67b53c16089b
1 ; RUN: llc -O0 %s -mtriple=x86_64-unknown-linux-gnu -filetype=obj -o - -minimize-addr-in-v5=Ranges \
2 ; RUN:   | llvm-dwarfdump -debug-info -debug-addr -debug-rnglists -v - \
3 ; RUN:   | FileCheck --check-prefix=CHECK --check-prefix=RNG \
4 ; RUN:     --implicit-check-not=DW_TAG --implicit-check-not=NULL --implicit-check-not=_pc %s
6 ; RUN: llc -O0 %s -mtriple=x86_64-unknown-linux-gnu -filetype=obj -o - -minimize-addr-in-v5=Expressions \
7 ; RUN:   | llvm-dwarfdump -debug-info -debug-addr -debug-rnglists -v - \
8 ; RUN:   | FileCheck --check-prefix=CHECK --check-prefix=EXPRORFORM --check-prefix=EXPR\
9 ; RUN:     --implicit-check-not=DW_TAG --implicit-check-not=NULL --implicit-check-not=_pc %s
11 ; RUN: llc -O0 %s -mtriple=x86_64-unknown-linux-gnu -filetype=obj -o - -minimize-addr-in-v5=Form \
12 ; RUN:   | llvm-dwarfdump -debug-info -debug-addr -debug-rnglists -v - \
13 ; RUN:   | FileCheck --check-prefix=CHECK --check-prefix=EXPRORFORM --check-prefix=FORM \
14 ; RUN:     --implicit-check-not=DW_TAG --implicit-check-not=NULL --implicit-check-not=_pc %s
17 ; Generated from the following source. f4 is used to put a hole in the CU
18 ; ranges while keeping f2 and f4 in the same section (as opposed to
19 ; -ffunction-sections, which would produce CU ranges, but each function would
20 ; be in a different section, so unable to share addresses). The call to f1 at
21 ; the start of f3 ensures the range for the inlined subroutine doesn't share
22 ; the starting address with f3 (so it can be improved by using a rnglist to
23 ; allow it to share an address it wouldn't already be sharing).
25 ; Without f6 being in another section, technically we could use a non-zero CU
26 ; low_pc that could act as a base address for all the addresses in the CU & avoid
27 ; the need for these forced rnglists - we don't do that currently, but f6 ensures
28 ; that this test will remain meaningful even if that improvement is made in the
29 ; future. (implementing that would require detecting that all the addresses in
30 ; the CU ranges are in the same section, then picking the lowest such address as
31 ; the base address to make all other addresses relative to)
33 ; void f1();
34 ; __attribute__((always_inline)) inline void f2() {
35 ;   f1();
36 ; }
37 ; void f3() {
38 ;   f1();
39 ;   f2();
40 ; }
41 ; __attribute__((nodebug)) void f4() {
42 ; }
43 ; void f5() {
44 ; }
45 ; __attribute__((section(".other"))) void f6() {
46 ; }
48 ; CHECK-LABEL: .debug_info contents:
49 ; CHECK: DW_TAG_compile_unit
50 ; CHECK:   DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
51 ; RNG:     DW_AT_ranges [DW_FORM_rnglistx]   (indexed (0x2) rangelist = [[CU_RANGE:.*]]
52 ; EXPRORFORM: DW_AT_ranges [DW_FORM_rnglistx]   (indexed (0x0) rangelist = [[CU_RANGE:.*]]
53 ; CHECK:   DW_TAG_subprogram
54 ; CHECK:     DW_AT_name {{.*}} "f2"
55 ; CHECK:   DW_TAG_subprogram
56 ; CHECK:     DW_AT_low_pc [DW_FORM_addrx]    (indexed (00000000) address = 0x0000000000000000 ".text")
57 ; CHECK:     DW_AT_high_pc [DW_FORM_data4]   (0x00000010)
58 ; CHECK:     DW_TAG_inlined_subroutine
59 ; EXPR:        DW_AT_low_pc [DW_FORM_exprloc] (DW_OP_addrx 0x0, DW_OP_const4u 0x9, DW_OP_plus)
60 ; FORM:        DW_AT_low_pc [DW_FORM_LLVM_addrx_offset] (indexed (00000000) + 0x9 address = 0x0000000000000009 ".text")
61 ; EXPRORFORM:  DW_AT_high_pc [DW_FORM_data4]   (0x00000005)
62 ; RNG:         DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x0) rangelist = [[INL_RANGE:.*]]
63 ; CHECK:     DW_TAG_call_site
64 ; RNG:         DW_AT_call_return_pc [DW_FORM_addrx]  (indexed (00000001) address = 0x0000000000000009 ".text")
65 ; EXPR:        DW_AT_call_return_pc [DW_FORM_exprloc] (DW_OP_addrx 0x0, DW_OP_const4u 0x9, DW_OP_plus)
66 ; FORM:        DW_AT_call_return_pc [DW_FORM_LLVM_addrx_offset] (indexed (00000000) + 0x9 address = 0x0000000000000009 ".text")
67 ; CHECK:     DW_TAG_call_site
68 ; RNG:         DW_AT_call_return_pc [DW_FORM_addrx]  (indexed (00000002) address = 0x000000000000000e ".text")
69 ; EXPR:        DW_AT_call_return_pc [DW_FORM_exprloc] (DW_OP_addrx 0x0, DW_OP_const4u 0xe, DW_OP_plus)
70 ; FORM:        DW_AT_call_return_pc [DW_FORM_LLVM_addrx_offset] (indexed (00000000) + 0xe address = 0x000000000000000e ".text")
71 ; CHECK:     NULL
72 ; CHECK:   DW_TAG_subprogram
73 ; CHECK:     DW_AT_name {{.*}} "f1"
74 ; CHECK:   DW_TAG_subprogram
75 ; EXPR:      DW_AT_low_pc [DW_FORM_exprloc] (DW_OP_addrx 0x0, DW_OP_const4u 0x20, DW_OP_plus)
76 ; FORM:      DW_AT_low_pc [DW_FORM_LLVM_addrx_offset] (indexed (00000000) + 0x20 address = 0x0000000000000020 ".text")
77 ; EXPRORFORM: DW_AT_high_pc [DW_FORM_data4]   (0x00000006)
78 ; RNG:       DW_AT_ranges [DW_FORM_rnglistx] (indexed (0x1) rangelist = [[F5_RANGE:.*]]
79 ; CHECK:   DW_TAG_subprogram
80 ; CHECK:     DW_AT_low_pc [DW_FORM_addrx]    (indexed (
81 ; RNG-SAME: 00000003
82 ; EXPRORFORM-SAME: 00000001
83 ; CHECK: ) address = 0x0000000000000000 ".other")
84 ; CHECK:     DW_AT_high_pc [DW_FORM_data4]   (0x00000006)
85 ; CHECK:   NULL
87 ; CHECK-LABEL: .debug_addr contents:
88 ; CHECK: 0x00000000: Address table
89 ; CHECK-NEXT: Addrs: [
90 ; CHECK-NEXT: 0x0000000000000000
91 ; RNG-NEXT:   0x0000000000000009
92 ; RNG-NEXT:   0x000000000000000e
93 ; CHECK-NEXT: 0x0000000000000000
94 ; CHECK-NEXT: ]
96 ; CHECK-LABEL: .debug_rnglists contents:
97 ; RNG: 0x00000000: range list header: {{.*}}, offset_entry_count = 0x00000003
98 ; EXPRORFORM: 0x00000000: range list header: {{.*}}, offset_entry_count = 0x00000001
99 ; CHECK: ranges:
100 ; RNG-NEXT:   [[INL_RANGE]]: [DW_RLE_base_addressx]:  0x0000000000000000
101 ; RNG-NEXT:                  [DW_RLE_offset_pair  ]
102 ; RNG-NEXT:                  [DW_RLE_end_of_list  ]
104 ; RNG-NEXT:   [[F5_RANGE]]: [DW_RLE_base_addressx]:  0x0000000000000000
105 ; RNG-NEXT:                 [DW_RLE_offset_pair  ]
106 ; RNG-NEXT:                 [DW_RLE_end_of_list  ]
108 ; CHECK-NEXT: [[CU_RANGE]]: [DW_RLE_base_addressx]:  0x0000000000000000
109 ; CHECK-NEXT:               [DW_RLE_offset_pair  ]
110 ; CHECK-NEXT:               [DW_RLE_offset_pair  ]
111 ; RNG-NEXT:                 [DW_RLE_startx_length]:  0x0000000000000003
112 ; EXPRORFORM-NEXT:          [DW_RLE_startx_length]:  0x0000000000000001
113 ; CHECK-NEXT:               [DW_RLE_end_of_list  ]
115 ; Function Attrs: noinline optnone uwtable mustprogress
116 define dso_local void @_Z2f3v() #0 !dbg !7 {
117 entry:
118   call void @_Z2f1v(), !dbg !10
119   call void @_Z2f1v(), !dbg !11
120   ret void, !dbg !14
123 declare !dbg !19 dso_local void @_Z2f1v() #1
125 ; Function Attrs: noinline nounwind optnone uwtable mustprogress
126 define dso_local void @_Z2f4v() #2 {
127 entry:
128   ret void
131 ; Function Attrs: noinline nounwind optnone uwtable mustprogress
132 define dso_local void @_Z2f5v() #2 !dbg !15 {
133 entry:
134   ret void, !dbg !16
137 ; Function Attrs: noinline nounwind optnone uwtable mustprogress
138 define dso_local void @_Z2f6v() #2 section ".other" !dbg !17 {
139 entry:
140   ret void, !dbg !18
143 attributes #0 = { noinline optnone uwtable mustprogress "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }
144 attributes #1 = { "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }
145 attributes #2 = { noinline nounwind optnone uwtable mustprogress "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }
147 !llvm.dbg.cu = !{!0}
148 !llvm.module.flags = !{!3, !4, !5}
149 !llvm.ident = !{!6}
151 !0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 12.0.0 (git@github.com:llvm/llvm-project.git 79afdd7d36b814942ec7f2f577d0443f6aecc939)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None)
152 !1 = !DIFile(filename: "ranges_always.cpp", directory: "/usr/local/google/home/blaikie/dev/scratch", checksumkind: CSK_MD5, checksum: "25fb47763043609a0aac0ab69baa803d")
153 !2 = !{}
154 !3 = !{i32 7, !"Dwarf Version", i32 5}
155 !4 = !{i32 2, !"Debug Info Version", i32 3}
156 !5 = !{i32 1, !"wchar_size", i32 4}
157 !6 = !{!"clang version 12.0.0 (git@github.com:llvm/llvm-project.git 79afdd7d36b814942ec7f2f577d0443f6aecc939)"}
158 !7 = distinct !DISubprogram(name: "f3", linkageName: "_Z2f3v", scope: !1, file: !1, line: 5, type: !8, scopeLine: 5, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
159 !8 = !DISubroutineType(types: !9)
160 !9 = !{null}
161 !10 = !DILocation(line: 6, column: 3, scope: !7)
162 !11 = !DILocation(line: 3, column: 3, scope: !12, inlinedAt: !13)
163 !12 = distinct !DISubprogram(name: "f2", linkageName: "_Z2f2v", scope: !1, file: !1, line: 2, type: !8, scopeLine: 2, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
164 !13 = distinct !DILocation(line: 7, column: 3, scope: !7)
165 !14 = !DILocation(line: 8, column: 1, scope: !7)
166 !15 = distinct !DISubprogram(name: "f5", linkageName: "_Z2f5v", scope: !1, file: !1, line: 11, type: !8, scopeLine: 11, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
167 !16 = !DILocation(line: 12, column: 1, scope: !15)
168 !17 = distinct !DISubprogram(name: "f6", linkageName: "_Z2f6v", scope: !1, file: !1, line: 13, type: !8, scopeLine: 13, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)
169 !18 = !DILocation(line: 14, column: 1, scope: !17)
170 !19 = !DISubprogram(name: "f1", linkageName: "_Z2f1v", scope: !1, file: !1, line: 1, type: !8, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized, retainedNodes: !2)