xref: /llvm-project/llvm/test/DebugInfo/MSP430/ranges_always.ll (revision c395a846001aa953e54916c6f88da22173efb25e)
1d7733f84SJack Anderson; RUN: llc -O0 %s -mtriple=msp430 -filetype=obj -o - -minimize-addr-in-v5=Ranges \
2d7733f84SJack Anderson; RUN:   | llvm-dwarfdump -debug-info -debug-addr -debug-rnglists -v - \
3d7733f84SJack Anderson; RUN:   | FileCheck --check-prefix=CHECK --check-prefix=RNG \
4d7733f84SJack Anderson; RUN:     --implicit-check-not=DW_TAG --implicit-check-not=NULL --implicit-check-not=_pc %s
5d7733f84SJack Anderson
6d7733f84SJack Anderson; RUN: llc -O0 %s -mtriple=msp430 -filetype=obj -o - -minimize-addr-in-v5=Expressions \
7d7733f84SJack Anderson; RUN:   | llvm-dwarfdump -debug-info -debug-addr -debug-rnglists -v - \
8d7733f84SJack Anderson; RUN:   | FileCheck --check-prefix=CHECK --check-prefix=EXPRORFORM --check-prefix=EXPR\
9d7733f84SJack Anderson; RUN:     --implicit-check-not=DW_TAG --implicit-check-not=NULL --implicit-check-not=_pc %s
10d7733f84SJack Anderson
11d7733f84SJack Anderson; RUN: llc -O0 %s -mtriple=msp430 -filetype=obj -o - -minimize-addr-in-v5=Form \
12d7733f84SJack Anderson; RUN:   | llvm-dwarfdump -debug-info -debug-addr -debug-rnglists -v - \
13d7733f84SJack Anderson; RUN:   | FileCheck --check-prefix=CHECK --check-prefix=EXPRORFORM --check-prefix=FORM \
14d7733f84SJack Anderson; RUN:     --implicit-check-not=DW_TAG --implicit-check-not=NULL --implicit-check-not=_pc %s
15d7733f84SJack Anderson
16d7733f84SJack Anderson; Ported from X86 test to cover 2-byte address size case
17*c395a846SIlya Kuklin; Check that 16-bit addresses of MSP430 are properly stored
18*c395a846SIlya Kuklin; in 32-bit DWARF fields
19d7733f84SJack Anderson
20d7733f84SJack Anderson; Generated from the following source. f4 is used to put a hole in the CU
21d7733f84SJack Anderson; ranges while keeping f2 and f4 in the same section (as opposed to
22d7733f84SJack Anderson; -ffunction-sections, which would produce CU ranges, but each function would
23d7733f84SJack Anderson; be in a different section, so unable to share addresses). The call to f1 at
24d7733f84SJack Anderson; the start of f3 ensures the range for the inlined subroutine doesn't share
25d7733f84SJack Anderson; the starting address with f3 (so it can be improved by using a rnglist to
26d7733f84SJack Anderson; allow it to share an address it wouldn't already be sharing).
27d7733f84SJack Anderson
28d7733f84SJack Anderson; Without f6 being in another section, technically we could use a non-zero CU
29d7733f84SJack Anderson; low_pc that could act as a base address for all the addresses in the CU & avoid
30d7733f84SJack Anderson; the need for these forced rnglists - we don't do that currently, but f6 ensures
31d7733f84SJack Anderson; that this test will remain meaningful even if that improvement is made in the
32d7733f84SJack Anderson; future. (implementing that would require detecting that all the addresses in
33d7733f84SJack Anderson; the CU ranges are in the same section, then picking the lowest such address as
34d7733f84SJack Anderson; the base address to make all other addresses relative to)
35d7733f84SJack Anderson
36d7733f84SJack Anderson; IR from the following, compiled with:
37d7733f84SJack Anderson; $ clang -g -c -gdwarf-5 -O1
38d7733f84SJack Anderson; __attribute__((optnone)) void f1() { }
39d7733f84SJack Anderson; __attribute__((always_inline)) inline void f2() {
40d7733f84SJack Anderson;   f1();
41d7733f84SJack Anderson; }
42d7733f84SJack Anderson; void f3() {
43d7733f84SJack Anderson;   f1();
44d7733f84SJack Anderson;   f2();
45d7733f84SJack Anderson; }
46d7733f84SJack Anderson; __attribute__((nodebug)) void f4() {
47d7733f84SJack Anderson; }
48d7733f84SJack Anderson; void f5() {
49d7733f84SJack Anderson; }
50d7733f84SJack Anderson; __attribute__((section(".other"))) void f6() {
51d7733f84SJack Anderson; }
52d7733f84SJack Anderson
53d7733f84SJack Anderson; CHECK-LABEL: .debug_info contents:
54d7733f84SJack Anderson; CHECK: DW_TAG_compile_unit
55d7733f84SJack Anderson; CHECK:   DW_AT_low_pc
56*c395a846SIlya Kuklin; CHECK-SAME: (0x00000000)
57d7733f84SJack Anderson; RNG:     DW_AT_ranges
58d7733f84SJack Anderson; RNG-SAME:  (indexed (0x3) rangelist = [[CU_RANGE:.*]]
59d7733f84SJack Anderson; EXPRORFORM: DW_AT_ranges
60d7733f84SJack Anderson; EXPRORFORM-SAME: (indexed (0x0) rangelist = [[CU_RANGE:.*]]
61d7733f84SJack Anderson; CHECK:   DW_TAG_subprogram
62d7733f84SJack Anderson; CHECK:     DW_AT_low_pc
63*c395a846SIlya Kuklin; CHECK-SAME:  (indexed (00000000) address = 0x00000000 ".text")
64d7733f84SJack Anderson; CHECK:     DW_AT_high_pc
65d7733f84SJack Anderson; CHECK-SAME:  (0x00000002)
66d7733f84SJack Anderson; CHECK:     DW_AT_name
67d7733f84SJack Anderson; CHECK-SAME:  "f1"
68d7733f84SJack Anderson; CHECK:   DW_TAG_subprogram
69d7733f84SJack Anderson; CHECK:     DW_AT_name
70d7733f84SJack Anderson; CHECK-SAME:  "f2"
71d7733f84SJack Anderson; CHECK:   DW_TAG_subprogram
72d7733f84SJack Anderson; EXPR:      DW_AT_low_pc
73d7733f84SJack Anderson; EXPR-SAME:   (DW_OP_addrx 0x0, DW_OP_const4u 0x2, DW_OP_plus)
74d7733f84SJack Anderson; FORM:      DW_AT_low_pc
75*c395a846SIlya Kuklin; FORM-SAME:   [DW_FORM_LLVM_addrx_offset] (indexed (00000000) + 0x2 address = 0x00000002 ".text")
76d7733f84SJack Anderson; EXPRORFORM: DW_AT_high_pc
77d7733f84SJack Anderson; EXPRORFORM-SAME: (0x0000000a)
78d7733f84SJack Anderson; RNG:       DW_AT_ranges
79d7733f84SJack Anderson; RNG-SAME:    (indexed (0x0) rangelist = [[F3_RANGE:.*]]
80d7733f84SJack Anderson; CHECK:     DW_AT_name
81d7733f84SJack Anderson; CHECK-SAME: "f3"
82d7733f84SJack Anderson; CHECK:     DW_TAG_inlined_subroutine
83d7733f84SJack Anderson; EXPR:        DW_AT_low_pc
84d7733f84SJack Anderson; EXPR-SAME:     [DW_FORM_exprloc] (DW_OP_addrx 0x0, DW_OP_const4u 0x6, DW_OP_plus)
85d7733f84SJack Anderson; FORM:        DW_AT_low_pc
86*c395a846SIlya Kuklin; FORM-SAME:     [DW_FORM_LLVM_addrx_offset] (indexed (00000000) + 0x6 address = 0x00000006 ".text")
87d7733f84SJack Anderson; EXPRORFORM:  DW_AT_high_pc
88d7733f84SJack Anderson; EXPRORFORM-SAME: (0x00000004)
89d7733f84SJack Anderson; RNG:         DW_AT_ranges
90d7733f84SJack Anderson; RNG-SAME:      (indexed (0x1) rangelist = [[INL_RANGE:.*]]
91d7733f84SJack Anderson; CHECK:     DW_TAG_call_site
92d7733f84SJack Anderson; RNG:         DW_AT_call_return_pc
93*c395a846SIlya Kuklin; RNG-SAME:      (indexed (00000001) address = 0x00000006 ".text")
94d7733f84SJack Anderson; EXPR:        DW_AT_call_return_pc
95d7733f84SJack Anderson; EXPR-SAME:     [DW_FORM_exprloc] (DW_OP_addrx 0x0, DW_OP_const4u 0x6, DW_OP_plus)
96d7733f84SJack Anderson; FORM:        DW_AT_call_return_pc
97*c395a846SIlya Kuklin; FORM-SAME:     [DW_FORM_LLVM_addrx_offset] (indexed (00000000) + 0x6 address = 0x00000006 ".text")
98d7733f84SJack Anderson; CHECK:     DW_TAG_call_site
99d7733f84SJack Anderson; RNG:         DW_AT_call_return_pc
100*c395a846SIlya Kuklin; RNG-SAME:      (indexed (00000002) address = 0x0000000a ".text")
101d7733f84SJack Anderson; EXPR:        DW_AT_call_return_pc
102d7733f84SJack Anderson; EXPR-SAME:     [DW_FORM_exprloc] (DW_OP_addrx 0x0, DW_OP_const4u 0xa, DW_OP_plus)
103d7733f84SJack Anderson; FORM:        DW_AT_call_return_pc
104*c395a846SIlya Kuklin; FORM-SAME:     [DW_FORM_LLVM_addrx_offset] (indexed (00000000) + 0xa address = 0x0000000a ".text")
105d7733f84SJack Anderson; CHECK:     NULL
106d7733f84SJack Anderson; CHECK:   DW_TAG_subprogram
107d7733f84SJack Anderson; EXPR:      DW_AT_low_pc
108d7733f84SJack Anderson; EXPR-SAME:   [DW_FORM_exprloc] (DW_OP_addrx 0x0, DW_OP_const4u 0xe, DW_OP_plus)
109d7733f84SJack Anderson; FORM:      DW_AT_low_pc
110*c395a846SIlya Kuklin; FORM-SAME:   [DW_FORM_LLVM_addrx_offset] (indexed (00000000) + 0xe address = 0x0000000e ".text")
111d7733f84SJack Anderson; EXPRORFORM: DW_AT_high_pc
112d7733f84SJack Anderson; EXPRORFORM-SAME: (0x00000002)
113d7733f84SJack Anderson; RNG:       DW_AT_ranges
114d7733f84SJack Anderson; RNG-SAME:    (indexed (0x2) rangelist = [[F5_RANGE:.*]]
115d7733f84SJack Anderson; CHECK:     DW_AT_name
116d7733f84SJack Anderson; CHECK-SAME:  "f5"
117d7733f84SJack Anderson; CHECK:   DW_TAG_subprogram
118d7733f84SJack Anderson; CHECK:     DW_AT_low_pc [DW_FORM_addrx]    (indexed (
119d7733f84SJack Anderson; RNG-SAME: 00000003
120d7733f84SJack Anderson; EXPRORFORM-SAME: 00000001
121*c395a846SIlya Kuklin; CHECK: ) address = 0x00000000 ".other")
122d7733f84SJack Anderson; CHECK:     DW_AT_high_pc
123d7733f84SJack Anderson; CHECK-SAME:  (0x00000006)
124d7733f84SJack Anderson; CHECK:     DW_AT_name
125d7733f84SJack Anderson; CHECK-SAME: "f6"
126d7733f84SJack Anderson; CHECK:       DW_TAG_inlined_subroutine
127d7733f84SJack Anderson; RNG:           DW_AT_low_pc
128*c395a846SIlya Kuklin; RNG-SAME:        (indexed (00000003) address = 0x00000000 ".other")
129d7733f84SJack Anderson; EXPRORFORM:    DW_AT_low_pc
130*c395a846SIlya Kuklin; EXPRORFORM-SAME: (indexed (00000001) address = 0x00000000 ".other")
131d7733f84SJack Anderson; CHECK:         DW_AT_high_pc
132d7733f84SJack Anderson; CHECK-SAME:      (0x00000004)
133d7733f84SJack Anderson; CHECK:       DW_TAG_call_site
134d7733f84SJack Anderson; CHECK:         DW_AT_call_return_pc
135d7733f84SJack Anderson; CHECK:       NULL
136d7733f84SJack Anderson; CHECK:   NULL
137d7733f84SJack Anderson
138d7733f84SJack Anderson; CHECK-LABEL: .debug_addr contents:
139d7733f84SJack Anderson; CHECK: 0x00000000: Address table
140d7733f84SJack Anderson; CHECK-NEXT: Addrs: [
141*c395a846SIlya Kuklin; CHECK-NEXT: 0x00000000
142*c395a846SIlya Kuklin; RNG-NEXT:   0x00000006
143*c395a846SIlya Kuklin; RNG-NEXT:   0x0000000a
144*c395a846SIlya Kuklin; CHECK-NEXT: 0x00000000
145*c395a846SIlya Kuklin; RNG-NEXT:   0x00000004
146d7733f84SJack Anderson; CHECK-NEXT: ]
147d7733f84SJack Anderson
148d7733f84SJack Anderson; CHECK-LABEL: .debug_rnglists contents:
149d7733f84SJack Anderson; RNG: 0x00000000: range list header: {{.*}}, offset_entry_count = 0x00000004
150d7733f84SJack Anderson; EXPRORFORM: 0x00000000: range list header: {{.*}}, offset_entry_count = 0x00000001
151d7733f84SJack Anderson; CHECK: ranges:
152d7733f84SJack Anderson; RNG-NEXT:   [[F3_RANGE]]: [DW_RLE_base_addressx]:
153*c395a846SIlya Kuklin; RNG-SAME:                   0x00000000
154d7733f84SJack Anderson; RNG-NEXT:                 [DW_RLE_offset_pair  ]
155d7733f84SJack Anderson; RNG-NEXT:                 [DW_RLE_end_of_list  ]
156d7733f84SJack Anderson
157d7733f84SJack Anderson; RNG-NEXT:   [[INL_RANGE]]: [DW_RLE_base_addressx]:
158*c395a846SIlya Kuklin; RNG-SAME:                    0x00000000
159d7733f84SJack Anderson; RNG-NEXT:                  [DW_RLE_offset_pair  ]
160d7733f84SJack Anderson; RNG-NEXT:                  [DW_RLE_end_of_list  ]
161d7733f84SJack Anderson
162d7733f84SJack Anderson; RNG-NEXT:   [[F5_RANGE]]: [DW_RLE_base_addressx]:
163*c395a846SIlya Kuklin; RNG-SAME:                   0x00000000
164d7733f84SJack Anderson; RNG-NEXT:                 [DW_RLE_offset_pair  ]
165d7733f84SJack Anderson; RNG-NEXT:                 [DW_RLE_end_of_list  ]
166d7733f84SJack Anderson
167d7733f84SJack Anderson; CHECK-NEXT: [[CU_RANGE]]: [DW_RLE_base_addressx]:
168*c395a846SIlya Kuklin; CHECK-SAME:                 0x00000000
169d7733f84SJack Anderson; CHECK-NEXT:               [DW_RLE_offset_pair  ]
170d7733f84SJack Anderson; CHECK-NEXT:               [DW_RLE_offset_pair  ]
171d7733f84SJack Anderson; RNG-NEXT:                 [DW_RLE_startx_length]:
172*c395a846SIlya Kuklin; RNG-SAME:                   0x00000003
173d7733f84SJack Anderson; EXPRORFORM-NEXT:          [DW_RLE_startx_length]:
174*c395a846SIlya Kuklin; EXPRORFORM-SAME:            0x00000001
175d7733f84SJack Anderson; CHECK-NEXT:               [DW_RLE_end_of_list  ]
176d7733f84SJack Anderson
177d7733f84SJack Anderson; Function Attrs: mustprogress noinline nounwind optnone uwtable
178d7733f84SJack Andersondefine dso_local void @_Z2f1v() local_unnamed_addr #0 !dbg !7 {
179d7733f84SJack Andersonentry:
180d7733f84SJack Anderson  ret void, !dbg !12
181d7733f84SJack Anderson}
182d7733f84SJack Anderson
183d7733f84SJack Anderson; Function Attrs: mustprogress nounwind uwtable
184d7733f84SJack Andersondefine dso_local void @_Z2f3v() local_unnamed_addr #1 !dbg !13 {
185d7733f84SJack Andersonentry:
186d7733f84SJack Anderson  call void @_Z2f1v(), !dbg !14
187d7733f84SJack Anderson  call void @_Z2f1v() #3, !dbg !15
188d7733f84SJack Anderson  ret void, !dbg !18
189d7733f84SJack Anderson}
190d7733f84SJack Anderson
191d7733f84SJack Anderson; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn
192d7733f84SJack Andersondefine dso_local void @_Z2f4v() local_unnamed_addr #2 {
193d7733f84SJack Andersonentry:
194d7733f84SJack Anderson  ret void
195d7733f84SJack Anderson}
196d7733f84SJack Anderson
197d7733f84SJack Anderson; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn
198d7733f84SJack Andersondefine dso_local void @_Z2f5v() local_unnamed_addr #2 !dbg !19 {
199d7733f84SJack Andersonentry:
200d7733f84SJack Anderson  ret void, !dbg !20
201d7733f84SJack Anderson}
202d7733f84SJack Anderson
203d7733f84SJack Anderson; Function Attrs: mustprogress nounwind uwtable
204d7733f84SJack Andersondefine dso_local void @_Z2f6v() local_unnamed_addr #1 section ".other" !dbg !21 {
205d7733f84SJack Andersonentry:
206d7733f84SJack Anderson  call void @_Z2f1v() #3, !dbg !22
207d7733f84SJack Anderson  ret void, !dbg !24
208d7733f84SJack Anderson}
209d7733f84SJack Anderson
210d7733f84SJack Andersonattributes #0 = { mustprogress noinline nounwind optnone uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
211d7733f84SJack Andersonattributes #1 = { mustprogress nounwind uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
212d7733f84SJack Andersonattributes #2 = { mustprogress nofree norecurse nosync nounwind readnone uwtable willreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
213d7733f84SJack Andersonattributes #3 = { nounwind }
214d7733f84SJack Anderson
215d7733f84SJack Anderson!llvm.dbg.cu = !{!0}
216d7733f84SJack Anderson!llvm.module.flags = !{!2, !3, !4, !5}
217d7733f84SJack Anderson!llvm.ident = !{!6}
218d7733f84SJack Anderson
219d7733f84SJack Anderson!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 14.0.0 (git@github.com:llvm/llvm-project.git e2c3dc6fc76e767f08249f6d2c36e41660a4e331)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
220d7733f84SJack Anderson!1 = !DIFile(filename: "/usr/local/google/home/blaikie/dev/scratch/test.cpp", directory: "/usr/local/google/home/blaikie/dev/llvm/src", checksumkind: CSK_MD5, checksum: "e70db21a276125757057e729999c09c7")
221d7733f84SJack Anderson!2 = !{i32 7, !"Dwarf Version", i32 5}
222d7733f84SJack Anderson!3 = !{i32 2, !"Debug Info Version", i32 3}
223d7733f84SJack Anderson!4 = !{i32 1, !"wchar_size", i32 4}
224d7733f84SJack Anderson!5 = !{i32 7, !"uwtable", i32 1}
225d7733f84SJack Anderson!6 = !{!"clang version 14.0.0 (git@github.com:llvm/llvm-project.git e2c3dc6fc76e767f08249f6d2c36e41660a4e331)"}
226d7733f84SJack Anderson!7 = distinct !DISubprogram(name: "f1", linkageName: "_Z2f1v", scope: !8, file: !8, line: 1, type: !9, scopeLine: 1, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !11)
227d7733f84SJack Anderson!8 = !DIFile(filename: "scratch/test.cpp", directory: "/usr/local/google/home/blaikie/dev", checksumkind: CSK_MD5, checksum: "e70db21a276125757057e729999c09c7")
228d7733f84SJack Anderson!9 = !DISubroutineType(types: !10)
229d7733f84SJack Anderson!10 = !{null}
230d7733f84SJack Anderson!11 = !{}
231d7733f84SJack Anderson!12 = !DILocation(line: 1, column: 38, scope: !7)
232d7733f84SJack Anderson!13 = distinct !DISubprogram(name: "f3", linkageName: "_Z2f3v", scope: !8, file: !8, line: 5, type: !9, scopeLine: 5, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !11)
233d7733f84SJack Anderson!14 = !DILocation(line: 6, column: 3, scope: !13)
234d7733f84SJack Anderson!15 = !DILocation(line: 3, column: 3, scope: !16, inlinedAt: !17)
235d7733f84SJack Anderson!16 = distinct !DISubprogram(name: "f2", linkageName: "_Z2f2v", scope: !8, file: !8, line: 2, type: !9, scopeLine: 2, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !11)
236d7733f84SJack Anderson!17 = distinct !DILocation(line: 7, column: 3, scope: !13)
237d7733f84SJack Anderson!18 = !DILocation(line: 8, column: 1, scope: !13)
238d7733f84SJack Anderson!19 = distinct !DISubprogram(name: "f5", linkageName: "_Z2f5v", scope: !8, file: !8, line: 11, type: !9, scopeLine: 11, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !11)
239d7733f84SJack Anderson!20 = !DILocation(line: 12, column: 1, scope: !19)
240d7733f84SJack Anderson!21 = distinct !DISubprogram(name: "f6", linkageName: "_Z2f6v", scope: !8, file: !8, line: 13, type: !9, scopeLine: 13, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !11)
241d7733f84SJack Anderson!22 = !DILocation(line: 3, column: 3, scope: !16, inlinedAt: !23)
242d7733f84SJack Anderson!23 = distinct !DILocation(line: 14, column: 3, scope: !21)
243d7733f84SJack Anderson!24 = !DILocation(line: 15, column: 1, scope: !21)
244