]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - opencl/llvm.git/blob - test/DebugInfo/COFF/multifunction.ll
DI: Fold constant arguments into a single MDString
[opencl/llvm.git] / test / DebugInfo / COFF / multifunction.ll
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:
7 ; D:\source.c:
8 ;  1 void z(void);
9 ;  2
10 ;  3 void x(void) {
11 ;  4   z();
12 ;  5 }
13 ;  6
14 ;  7 void y(void) {
15 ;  8   z();
16 ;  9 }
17 ; 10
18 ; 11 void f(void) {
19 ; 12   x();
20 ; 13   y();
21 ; 14   z();
22 ; 15 }
25 ; X86-LABEL: _x:
26 ; X86-NEXT: # BB
27 ; X86-NEXT: [[X_CALL:.*]]:{{$}}
28 ; X86-NEXT: calll   _z
29 ; X86-NEXT: [[X_RETURN:.*]]:
30 ; X86-NEXT: ret
31 ; X86-NEXT: [[END_OF_X:.*]]:
32 ;
33 ; X86-LABEL: _y:
34 ; X86-NEXT: # BB
35 ; X86-NEXT: [[Y_CALL:.*]]:{{$}}
36 ; X86-NEXT: calll   _z
37 ; X86-NEXT: [[Y_RETURN:.*]]:
38 ; X86-NEXT: ret
39 ; X86-NEXT: [[END_OF_Y:.*]]:
40 ;
41 ; X86-LABEL: _f:
42 ; X86-NEXT: # BB
43 ; X86-NEXT: [[F_CALLS_X:.*]]:{{$}}
44 ; X86-NEXT: calll   _x
45 ; X86-NEXT: [[F_CALLS_Y:.*]]:
46 ; X86-NEXT: calll   _y
47 ; X86-NEXT: [[F_CALLS_Z:.*]]:
48 ; X86-NEXT: calll   _z
49 ; X86-NEXT: [[F_RETURN:.*]]:
50 ; X86-NEXT: ret
51 ; X86-NEXT: [[END_OF_F:.*]]:
52 ;
53 ; X86-LABEL: .section        .debug$S,"rd"
54 ; X86-NEXT: .long   4
55 ; Line table subsection for x
56 ; X86-NEXT: .long   242
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:[^:]*]]:
63 ; X86-NEXT: .long   0
64 ; X86-NEXT: .long   2
65 ; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
66 ; X86-NEXT: .long [[X_CALL]]-_x
67 ; X86-NEXT: .long   4
68 ; X86-NEXT: .long [[X_RETURN]]-_x
69 ; X86-NEXT: .long   5
70 ; X86-NEXT: [[FILE_SEGMENT_END]]:
71 ; X86-NEXT: [[F2_END]]:
72 ; Line table subsection for y
73 ; X86-NEXT: .long   242
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:[^:]*]]:
80 ; X86-NEXT: .long   0
81 ; X86-NEXT: .long   2
82 ; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
83 ; X86-NEXT: .long [[Y_CALL]]-_y
84 ; X86-NEXT: .long   8
85 ; X86-NEXT: .long [[Y_RETURN]]-_y
86 ; X86-NEXT: .long   9
87 ; X86-NEXT: [[FILE_SEGMENT_END]]:
88 ; X86-NEXT: [[F2_END]]:
89 ; Line table subsection for f
90 ; X86-NEXT: .long   242
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:[^:]*]]:
97 ; X86-NEXT: .long   0
98 ; X86-NEXT: .long   4
99 ; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
100 ; X86-NEXT: .long [[F_CALLS_X]]-_f
101 ; X86-NEXT: .long   12
102 ; X86-NEXT: .long [[F_CALLS_Y]]-_f
103 ; X86-NEXT: .long   13
104 ; X86-NEXT: .long [[F_CALLS_Z]]-_f
105 ; X86-NEXT: .long   14
106 ; X86-NEXT: .long [[F_RETURN]]-_f
107 ; X86-NEXT: .long   15
108 ; X86-NEXT: [[FILE_SEGMENT_END]]:
109 ; X86-NEXT: [[F2_END]]:
110 ; File index to string table offset subsection
111 ; X86-NEXT: .long   244
112 ; X86-NEXT: .long   8
113 ; X86-NEXT: .long   1
114 ; X86-NEXT: .long   0
115 ; String table
116 ; X86-NEXT: .long   243
117 ; X86-NEXT: .long   13
118 ; X86-NEXT: .byte   0
119 ; X86-NEXT: .ascii  "D:\\source.c"
120 ; X86-NEXT: .byte   0
121 ; X86-NEXT: .zero   3
123 ; OBJ32:    Section {
124 ; OBJ32:      Name: .debug$S (2E 64 65 62 75 67 24 53)
125 ; OBJ32:      Characteristics [ (0x42100040)
126 ; OBJ32:      ]
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
134 ; OBJ32-NEXT: ]
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
142 ; OBJ32-NEXT:   ]
143 ; OBJ32-NEXT: ]
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
151 ; OBJ32-NEXT:   ]
152 ; OBJ32-NEXT: ]
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
162 ; OBJ32-NEXT:   ]
163 ; OBJ32-NEXT: ]
164 ; OBJ32:    }
166 ; X64-LABEL: x:
167 ; X64-NEXT: [[X_START:.*]]:{{$}}
168 ; X64-NEXT: # BB
169 ; X64-NEXT: subq    $40, %rsp
170 ; X64-NEXT: [[X_CALL_LINE:.*]]:{{$}}
171 ; X64-NEXT: callq   z
172 ; X64-NEXT: [[X_EPILOG_AND_RET:.*]]:
173 ; X64-NEXT: addq    $40, %rsp
174 ; X64-NEXT: ret
175 ; X64-NEXT: [[END_OF_X:.*]]:
177 ; X64-LABEL: y:
178 ; X64-NEXT: [[Y_START:.*]]:{{$}}
179 ; X64-NEXT: # BB
180 ; X64-NEXT: subq    $40, %rsp
181 ; X64-NEXT: [[Y_CALL_LINE:.*]]:{{$}}
182 ; X64-NEXT: callq   z
183 ; X64-NEXT: [[Y_EPILOG_AND_RET:.*]]:
184 ; X64-NEXT: addq    $40, %rsp
185 ; X64-NEXT: ret
186 ; X64-NEXT: [[END_OF_Y:.*]]:
188 ; X64-LABEL: f:
189 ; X64-NEXT: [[F_START:.*]]:{{$}}
190 ; X64-NEXT: # BB
191 ; X64-NEXT: subq    $40, %rsp
192 ; X64-NEXT: [[F_CALLS_X:.*]]:{{$}}
193 ; X64-NEXT: callq   x
194 ; X64-NEXT: [[F_CALLS_Y:.*]]:
195 ; X64-NEXT: callq   y
196 ; X64-NEXT: [[F_CALLS_Z:.*]]:
197 ; X64-NEXT: callq   z
198 ; X64-NEXT: [[F_EPILOG_AND_RET:.*]]:
199 ; X64-NEXT: addq    $40, %rsp
200 ; X64-NEXT: ret
201 ; X64-NEXT: [[END_OF_F:.*]]:
203 ; X64-LABEL: .section        .debug$S,"rd"
204 ; X64-NEXT: .long   4
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:[^:]*]]:
213 ; X64-NEXT: .long   0
214 ; X64-NEXT: .long   3
215 ; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
216 ; X64-NEXT: .long [[X_START]]-x
217 ; X64-NEXT: .long   3
218 ; X64-NEXT: .long [[X_CALL_LINE]]-x
219 ; X64-NEXT: .long   4
220 ; X64-NEXT: .long [[X_EPILOG_AND_RET]]-x
221 ; X64-NEXT: .long   5
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:[^:]*]]:
232 ; X64-NEXT: .long   0
233 ; X64-NEXT: .long   3
234 ; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
235 ; X64-NEXT: .long [[Y_START]]-y
236 ; X64-NEXT: .long   7
237 ; X64-NEXT: .long [[Y_CALL_LINE]]-y
238 ; X64-NEXT: .long   8
239 ; X64-NEXT: .long [[Y_EPILOG_AND_RET]]-y
240 ; X64-NEXT: .long   9
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:[^:]*]]:
251 ; X64-NEXT: .long   0
252 ; X64-NEXT: .long   5
253 ; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
254 ; X64-NEXT: .long [[F_START]]-f
255 ; X64-NEXT: .long   11
256 ; X64-NEXT: .long [[F_CALLS_X]]-f
257 ; X64-NEXT: .long   12
258 ; X64-NEXT: .long [[F_CALLS_Y]]-f
259 ; X64-NEXT: .long   13
260 ; X64-NEXT: .long [[F_CALLS_Z]]-f
261 ; X64-NEXT: .long   14
262 ; X64-NEXT: .long [[F_EPILOG_AND_RET]]-f
263 ; X64-NEXT: .long   15
264 ; X64-NEXT: [[FILE_SEGMENT_END]]:
265 ; X64-NEXT: [[F2_END]]:
266 ; File index to string table offset subsection
267 ; X64-NEXT: .long   244
268 ; X64-NEXT: .long   8
269 ; X64-NEXT: .long   1
270 ; X64-NEXT: .long   0
271 ; String table
272 ; X64-NEXT: .long   243
273 ; X64-NEXT: .long   13
274 ; X64-NEXT: .byte   0
275 ; X64-NEXT: .ascii  "D:\\source.c"
276 ; X64-NEXT: .byte   0
277 ; X64-NEXT: .zero   3
279 ; OBJ64:    Section {
280 ; OBJ64:      Name: .debug$S (2E 64 65 62 75 67 24 53)
281 ; OBJ64:      Characteristics [ (0x42100040)
282 ; OBJ64:      ]
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
290 ; OBJ64-NEXT: ]
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
299 ; OBJ64-NEXT:   ]
300 ; OBJ64-NEXT: ]
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
309 ; OBJ64-NEXT:   ]
310 ; OBJ64-NEXT: ]
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
321 ; OBJ64-NEXT:   ]
322 ; OBJ64-NEXT: ]
323 ; OBJ64:    }
325 ; Function Attrs: nounwind
326 define void @x() #0 {
327 entry:
328   call void @z(), !dbg !14
329   ret void, !dbg !15
332 declare void @z() #1
334 ; Function Attrs: nounwind
335 define void @y() #0 {
336 entry:
337   call void @z(), !dbg !16
338   ret void, !dbg !17
341 ; Function Attrs: nounwind
342 define void @f() #0 {
343 entry:
344   call void @x(), !dbg !18
345   call void @y(), !dbg !19
346   call void @z(), !dbg !20
347   ret void, !dbg !21
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" }
353 !llvm.dbg.cu = !{!0}
354 !llvm.module.flags = !{!11, !12}
355 !llvm.ident = !{!13}
357 !0 = metadata !{metadata !"0x11\0012\00clang version 3.5 \000\00\000\00\000", metadata !1, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2} ; [ 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 !{metadata !"0x2e\00x\00x\00\003\000\001\000\006\00256\000\003", metadata !5, metadata !6, metadata !7, null, void ()* @x, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 3] [def] [x]
362 !5 = metadata !{metadata !"source.c", metadata !"D:\5C"}
363 !6 = metadata !{metadata !"0x29", metadata !5}          ; [ DW_TAG_file_type ] [D:\/source.c]
364 !7 = metadata !{metadata !"0x15\00\000\000\000\000\000\000", i32 0, null, null, metadata !8, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
365 !8 = metadata !{null}
366 !9 = metadata !{metadata !"0x2e\00y\00y\00\007\000\001\000\006\00256\000\007", metadata !5, metadata !6, metadata !7, null, void ()* @y, null, null, metadata !2} ; [ DW_TAG_subprogram ] [line 7] [def] [y]
367 !10 = metadata !{metadata !"0x2e\00f\00f\00\0011\000\001\000\006\00256\000\0011", metadata !5, metadata !6, metadata !7, null, void ()* @f, null, null, metadata !2} ; [ 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 2}
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}
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}