1 ; RUN: llc -mcpu=core2 -mtriple=i686-pc-win32 -O0 < %s | FileCheck --check-prefix=X86 %s
2 ; RUN: llc -mcpu=core2 -mtriple=i686-pc-win32 -o - -O0 < %s | llvm-mc -triple=i686-pc-win32 -filetype=obj | llvm-readobj -s -sr -codeview-linetables | FileCheck --check-prefix=OBJ32 %s
3 ; RUN: llc -mcpu=core2 -mtriple=x86_64-pc-win32 -O0 < %s | FileCheck --check-prefix=X64 %s
4 ; RUN: llc -mcpu=core2 -mtriple=x86_64-pc-win32 -o - -O0 < %s | llvm-mc -triple=x86_64-pc-win32 -filetype=obj | llvm-readobj -s -sr -codeview-linetables | FileCheck --check-prefix=OBJ64 %s
6 ; This LL file was generated by running clang on the following code:
27 ; X86-NEXT: [[X_CALL:.*]]:{{$}}
29 ; X86-NEXT: [[X_RETURN:.*]]:
31 ; X86-NEXT: [[END_OF_X:.*]]:
35 ; X86-NEXT: [[Y_CALL:.*]]:{{$}}
37 ; X86-NEXT: [[Y_RETURN:.*]]:
39 ; X86-NEXT: [[END_OF_Y:.*]]:
43 ; X86-NEXT: [[F_CALLS_X:.*]]:{{$}}
45 ; X86-NEXT: [[F_CALLS_Y:.*]]:
47 ; X86-NEXT: [[F_CALLS_Z:.*]]:
49 ; X86-NEXT: [[F_RETURN:.*]]:
51 ; X86-NEXT: [[END_OF_F:.*]]:
53 ; X86: .section .debug$S,"rn"
55 ; Line table subsection for x
57 ; X86-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
58 ; X86-NEXT: [[F2_START]]:
59 ; X86-NEXT: .secrel32 _x
60 ; X86-NEXT: .secidx _x
61 ; X86-NEXT: .long [[END_OF_X]]-_x
62 ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
65 ; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
66 ; X86-NEXT: .long [[X_CALL]]-_x
68 ; X86-NEXT: .long [[X_RETURN]]-_x
70 ; X86-NEXT: [[FILE_SEGMENT_END]]:
71 ; X86-NEXT: [[F2_END]]:
72 ; Line table subsection for y
74 ; X86-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
75 ; X86-NEXT: [[F2_START]]:
76 ; X86-NEXT: .secrel32 _y
77 ; X86-NEXT: .secidx _y
78 ; X86-NEXT: .long [[END_OF_Y]]-_y
79 ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
82 ; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
83 ; X86-NEXT: .long [[Y_CALL]]-_y
85 ; X86-NEXT: .long [[Y_RETURN]]-_y
87 ; X86-NEXT: [[FILE_SEGMENT_END]]:
88 ; X86-NEXT: [[F2_END]]:
89 ; Line table subsection for f
91 ; X86-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
92 ; X86-NEXT: [[F2_START]]:
93 ; X86-NEXT: .secrel32 _f
94 ; X86-NEXT: .secidx _f
95 ; X86-NEXT: .long [[END_OF_F]]-_f
96 ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
99 ; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
100 ; X86-NEXT: .long [[F_CALLS_X]]-_f
102 ; X86-NEXT: .long [[F_CALLS_Y]]-_f
104 ; X86-NEXT: .long [[F_CALLS_Z]]-_f
106 ; X86-NEXT: .long [[F_RETURN]]-_f
108 ; X86-NEXT: [[FILE_SEGMENT_END]]:
109 ; X86-NEXT: [[F2_END]]:
110 ; File index to string table offset subsection
111 ; X86-NEXT: .long 244
116 ; X86-NEXT: .long 243
119 ; X86-NEXT: .ascii "D:\\source.c"
124 ; OBJ32: Name: .debug$S (2E 64 65 62 75 67 24 53)
125 ; OBJ32: Characteristics [ (0x42100040)
127 ; OBJ32: Relocations [
128 ; OBJ32-NEXT: 0xC IMAGE_REL_I386_SECREL _x
129 ; OBJ32-NEXT: 0x10 IMAGE_REL_I386_SECTION _x
130 ; OBJ32-NEXT: 0x3C IMAGE_REL_I386_SECREL _y
131 ; OBJ32-NEXT: 0x40 IMAGE_REL_I386_SECTION _y
132 ; OBJ32-NEXT: 0x6C IMAGE_REL_I386_SECREL _f
133 ; OBJ32-NEXT: 0x70 IMAGE_REL_I386_SECTION _f
135 ; OBJ32: FunctionLineTable [
136 ; OBJ32-NEXT: Name: _x
137 ; OBJ32-NEXT: CodeSize: 0x6
138 ; OBJ32-NEXT: FilenameSegment [
139 ; OBJ32-NEXT: Filename: D:\source.c
140 ; OBJ32-NEXT: +0x0: 4
141 ; OBJ32-NEXT: +0x5: 5
144 ; OBJ32-NEXT: FunctionLineTable [
145 ; OBJ32-NEXT: Name: _y
146 ; OBJ32-NEXT: CodeSize: 0x6
147 ; OBJ32-NEXT: FilenameSegment [
148 ; OBJ32-NEXT: Filename: D:\source.c
149 ; OBJ32-NEXT: +0x0: 8
150 ; OBJ32-NEXT: +0x5: 9
153 ; OBJ32-NEXT: FunctionLineTable [
154 ; OBJ32-NEXT: Name: _f
155 ; OBJ32-NEXT: CodeSize: 0x10
156 ; OBJ32-NEXT: FilenameSegment [
157 ; OBJ32-NEXT: Filename: D:\source.c
158 ; OBJ32-NEXT: +0x0: 12
159 ; OBJ32-NEXT: +0x5: 13
160 ; OBJ32-NEXT: +0xA: 14
161 ; OBJ32-NEXT: +0xF: 15
167 ; X64-NEXT: [[X_START:.*]]:{{$}}
169 ; X64-NEXT: subq $40, %rsp
170 ; X64-NEXT: [[X_CALL_LINE:.*]]:{{$}}
172 ; X64-NEXT: [[X_EPILOG_AND_RET:.*]]:
173 ; X64-NEXT: addq $40, %rsp
175 ; X64-NEXT: [[END_OF_X:.*]]:
178 ; X64-NEXT: [[Y_START:.*]]:{{$}}
180 ; X64-NEXT: subq $40, %rsp
181 ; X64-NEXT: [[Y_CALL_LINE:.*]]:{{$}}
183 ; X64-NEXT: [[Y_EPILOG_AND_RET:.*]]:
184 ; X64-NEXT: addq $40, %rsp
186 ; X64-NEXT: [[END_OF_Y:.*]]:
189 ; X64-NEXT: [[F_START:.*]]:{{$}}
191 ; X64-NEXT: subq $40, %rsp
192 ; X64-NEXT: [[F_CALLS_X:.*]]:{{$}}
194 ; X64-NEXT: [[F_CALLS_Y:.*]]:
196 ; X64-NEXT: [[F_CALLS_Z:.*]]:
198 ; X64-NEXT: [[F_EPILOG_AND_RET:.*]]:
199 ; X64-NEXT: addq $40, %rsp
201 ; X64-NEXT: [[END_OF_F:.*]]:
203 ; X64: .section .debug$S,"rn"
205 ; Line table subsection for x
206 ; X64-NEXT: .long 242
207 ; X64-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
208 ; X64-NEXT: [[F2_START]]:
209 ; X64-NEXT: .secrel32 x
210 ; X64-NEXT: .secidx x
211 ; X64-NEXT: .long [[END_OF_X]]-x
212 ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
215 ; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
216 ; X64-NEXT: .long [[X_START]]-x
218 ; X64-NEXT: .long [[X_CALL_LINE]]-x
220 ; X64-NEXT: .long [[X_EPILOG_AND_RET]]-x
222 ; X64-NEXT: [[FILE_SEGMENT_END]]:
223 ; X64-NEXT: [[F2_END]]:
224 ; Line table subsection for y
225 ; X64-NEXT: .long 242
226 ; X64-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
227 ; X64-NEXT: [[F2_START]]:
228 ; X64-NEXT: .secrel32 y
229 ; X64-NEXT: .secidx y
230 ; X64-NEXT: .long [[END_OF_Y]]-y
231 ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
234 ; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
235 ; X64-NEXT: .long [[Y_START]]-y
237 ; X64-NEXT: .long [[Y_CALL_LINE]]-y
239 ; X64-NEXT: .long [[Y_EPILOG_AND_RET]]-y
241 ; X64-NEXT: [[FILE_SEGMENT_END]]:
242 ; X64-NEXT: [[F2_END]]:
243 ; Line table subsection for f
244 ; X64-NEXT: .long 242
245 ; X64-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
246 ; X64-NEXT: [[F2_START]]:
247 ; X64-NEXT: .secrel32 f
248 ; X64-NEXT: .secidx f
249 ; X64-NEXT: .long [[END_OF_F]]-f
250 ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
253 ; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
254 ; X64-NEXT: .long [[F_START]]-f
256 ; X64-NEXT: .long [[F_CALLS_X]]-f
258 ; X64-NEXT: .long [[F_CALLS_Y]]-f
260 ; X64-NEXT: .long [[F_CALLS_Z]]-f
262 ; X64-NEXT: .long [[F_EPILOG_AND_RET]]-f
264 ; X64-NEXT: [[FILE_SEGMENT_END]]:
265 ; X64-NEXT: [[F2_END]]:
266 ; File index to string table offset subsection
267 ; X64-NEXT: .long 244
272 ; X64-NEXT: .long 243
275 ; X64-NEXT: .ascii "D:\\source.c"
280 ; OBJ64: Name: .debug$S (2E 64 65 62 75 67 24 53)
281 ; OBJ64: Characteristics [ (0x42100040)
283 ; OBJ64: Relocations [
284 ; OBJ64-NEXT: 0xC IMAGE_REL_AMD64_SECREL x
285 ; OBJ64-NEXT: 0x10 IMAGE_REL_AMD64_SECTION x
286 ; OBJ64-NEXT: 0x44 IMAGE_REL_AMD64_SECREL y
287 ; OBJ64-NEXT: 0x48 IMAGE_REL_AMD64_SECTION y
288 ; OBJ64-NEXT: 0x7C IMAGE_REL_AMD64_SECREL f
289 ; OBJ64-NEXT: 0x80 IMAGE_REL_AMD64_SECTION f
291 ; OBJ64: FunctionLineTable [
292 ; OBJ64-NEXT: Name: x
293 ; OBJ64-NEXT: CodeSize: 0xE
294 ; OBJ64-NEXT: FilenameSegment [
295 ; OBJ64-NEXT: Filename: D:\source.c
296 ; OBJ64-NEXT: +0x0: 3
297 ; OBJ64-NEXT: +0x4: 4
298 ; OBJ64-NEXT: +0x9: 5
301 ; OBJ64-NEXT: FunctionLineTable [
302 ; OBJ64-NEXT: Name: y
303 ; OBJ64-NEXT: CodeSize: 0xE
304 ; OBJ64-NEXT: FilenameSegment [
305 ; OBJ64-NEXT: Filename: D:\source.c
306 ; OBJ64-NEXT: +0x0: 7
307 ; OBJ64-NEXT: +0x4: 8
308 ; OBJ64-NEXT: +0x9: 9
311 ; OBJ64-NEXT: FunctionLineTable [
312 ; OBJ64-NEXT: Name: f
313 ; OBJ64-NEXT: CodeSize: 0x18
314 ; OBJ64-NEXT: FilenameSegment [
315 ; OBJ64-NEXT: Filename: D:\source.c
316 ; OBJ64-NEXT: +0x0: 11
317 ; OBJ64-NEXT: +0x4: 12
318 ; OBJ64-NEXT: +0x9: 13
319 ; OBJ64-NEXT: +0xE: 14
320 ; OBJ64-NEXT: +0x13: 15
325 ; Function Attrs: nounwind
326 define void @x() #0 {
328 call void @z(), !dbg !14
334 ; Function Attrs: nounwind
335 define void @y() #0 {
337 call void @z(), !dbg !16
341 ; Function Attrs: nounwind
342 define void @f() #0 {
344 call void @x(), !dbg !18
345 call void @y(), !dbg !19
346 call void @z(), !dbg !20
350 attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
351 attributes #1 = { "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "no-realign-stack" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="false" }
354 !llvm.module.flags = !{!11, !12}
357 !0 = metadata !{i32 786449, metadata !1, i32 12, metadata !"clang version 3.5 ", i1 false, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !""} ; [ DW_TAG_compile_unit ] [D:\/<unknown>] [DW_LANG_C99]
358 !1 = metadata !{metadata !"<unknown>", metadata !"D:\5C"}
359 !2 = metadata !{i32 0}
360 !3 = metadata !{metadata !4, metadata !9, metadata !10}
361 !4 = metadata !{i32 786478, metadata !5, metadata !6, metadata !"x", metadata !"x", metadata !"", i32 3, metadata !7, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @x, null, null, metadata !2, i32 3} ; [ DW_TAG_subprogram ] [line 3] [def] [x]
362 !5 = metadata !{metadata !"source.c", metadata !"D:\5C"}
363 !6 = metadata !{i32 786473, metadata !5} ; [ DW_TAG_file_type ] [D:\/source.c]
364 !7 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !8, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
365 !8 = metadata !{null}
366 !9 = metadata !{i32 786478, metadata !5, metadata !6, metadata !"y", metadata !"y", metadata !"", i32 7, metadata !7, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @y, null, null, metadata !2, i32 7} ; [ DW_TAG_subprogram ] [line 7] [def] [y]
367 !10 = metadata !{i32 786478, metadata !5, metadata !6, metadata !"f", metadata !"f", metadata !"", i32 11, metadata !7, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @f, null, null, metadata !2, i32 11} ; [ DW_TAG_subprogram ] [line 11] [def] [f]
368 !11 = metadata !{i32 2, metadata !"Dwarf Version", i32 4}
369 !12 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}
370 !13 = metadata !{metadata !"clang version 3.5 "}
371 !14 = metadata !{i32 4, i32 0, metadata !4, null}
372 !15 = metadata !{i32 5, i32 0, metadata !4, null}
373 !16 = metadata !{i32 8, i32 0, metadata !9, null} ; [ DW_TAG_imported_declaration ]
374 !17 = metadata !{i32 9, i32 0, metadata !9, null}
375 !18 = metadata !{i32 12, i32 0, metadata !10, null}
376 !19 = metadata !{i32 13, i32 0, metadata !10, null}
377 !20 = metadata !{i32 14, i32 0, metadata !10, null}
378 !21 = metadata !{i32 15, i32 0, metadata !10, null}