• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 -section-symbols | 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 -section-symbols | FileCheck --check-prefix=OBJ64 %s
5
6; This LL file was generated by running clang on the following code:
7; D:\input.c:
8;  1 void g(void);
9;  2
10;  3 void f(void) {
11;  4 #line 1 "one.c"
12;  5   g();
13;  6 #line 2 "two.c"
14;  7   g();
15;  8 #line 7 "one.c"
16;  9   g();
17; 10 }
18
19; X86-LABEL: _f:
20; X86:      # BB
21; X86-NEXT: [[CALL_LINE_1:.*]]:{{$}}
22; X86:      calll   _g
23; X86-NEXT: [[CALL_LINE_2:.*]]:{{$}}
24; X86:      calll   _g
25; X86-NEXT: [[CALL_LINE_3:.*]]:{{$}}
26; X86:      calll   _g
27; X86-NEXT: [[RETURN_STMT:.*]]:
28; X86:      ret
29; X86-NEXT: [[END_OF_F:.*]]:
30;
31; X86-LABEL: .section        .debug$S,"dr"
32; X86-NEXT: .long   4
33; Symbol subsection
34; X86-NEXT: .long   241
35; X86-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
36; X86-NEXT: [[F1_START]]:
37; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
38; X86-NEXT: [[PROC_SEGMENT_START]]:
39; X86-NEXT: .short  4423
40; X86-NEXT: .zero   12
41; X86-NEXT: .long [[END_OF_F]]-_f
42; X86-NEXT: .zero   12
43; X86-NEXT: .secrel32 _f
44; X86-NEXT: .secidx _f
45; X86-NEXT: .byte   0
46; X86-NEXT: .byte   102
47; X86-NEXT: .byte   0
48; X86-NEXT: [[PROC_SEGMENT_END]]:
49; X86-NEXT: .short  2
50; X86-NEXT: .short  4431
51; X86-NEXT: [[F1_END]]:
52; Padding
53; X86-NEXT: .zero   3
54; Line table
55; X86-NEXT: .long   242
56; X86-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
57; X86-NEXT: [[F2_START]]:
58; X86-NEXT: .secrel32 _f
59; X86-NEXT: .secidx _f
60; X86-NEXT: .short 1
61; X86-NEXT: .long [[END_OF_F]]-_f
62; Segment for file 'D:\\one.c' begins
63; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
64; X86-NEXT: .long   0
65; X86-NEXT: .long   1
66; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
67; X86-NEXT: .long [[CALL_LINE_1]]-_f
68; X86-NEXT: .long   1
69; X86-NEXT: .short  0
70; X86-NEXT: .short  0
71; X86-NEXT: [[FILE_SEGMENT_END]]:
72; Segment for file 'D:\\two.c' begins
73; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
74; X86-NEXT: .long   8
75; X86-NEXT: .long   1
76; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
77; X86-NEXT: .long [[CALL_LINE_2]]-_f
78; X86-NEXT: .long   2
79; X86-NEXT: .short  0
80; X86-NEXT: .short  0
81; X86-NEXT: [[FILE_SEGMENT_END]]:
82; A new segment for file 'D:\\one.c' begins
83; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
84; X86-NEXT: .long   0
85; X86-NEXT: .long   2
86; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
87; X86-NEXT: .long [[CALL_LINE_3]]-_f
88; X86-NEXT: .long   7
89; X86-NEXT: .long [[RETURN_STMT]]-_f
90; X86-NEXT: .long   8
91; X86-NEXT: .short  0
92; X86-NEXT: .short  0
93; X86-NEXT: .short  0
94; X86-NEXT: .short  0
95; X86-NEXT: [[FILE_SEGMENT_END]]:
96; X86-NEXT: [[F2_END]]:
97; File index to string table offset subsection
98; X86-NEXT: .long   244
99; X86-NEXT: .long   16
100; X86-NEXT: .long   1
101; X86-NEXT: .long   0
102; X86-NEXT: .long   10
103; X86-NEXT: .long   0
104; String table
105; X86-NEXT: .long   243
106; X86-NEXT: .long   19
107; X86-NEXT: .byte   0
108; X86-NEXT: .ascii  "D:\\one.c"
109; X86-NEXT: .byte   0
110; X86-NEXT: .ascii  "D:\\two.c"
111; X86-NEXT: .byte   0
112; X86-NEXT: .zero   1
113
114; OBJ32:    Section {
115; OBJ32:      Name: .debug$S (2E 64 65 62 75 67 24 53)
116; OBJ32:      Characteristics [ (0x42100040)
117; OBJ32:      ]
118; OBJ32:      Relocations [
119; OBJ32-NEXT:   0x2C IMAGE_REL_I386_SECREL _f
120; OBJ32-NEXT:   0x30 IMAGE_REL_I386_SECTION _f
121; OBJ32-NEXT:   0x44 IMAGE_REL_I386_SECREL _f
122; OBJ32-NEXT:   0x48 IMAGE_REL_I386_SECTION _f
123; OBJ32-NEXT: ]
124; OBJ32:      Subsection [
125; OBJ32-NEXT:   Type: 0xF1
126; OBJ32-NOT:    ]
127; OBJ32:        ProcStart {
128; OBJ32-NEXT:     DisplayName: f
129; OBJ32-NEXT:     Section: _f
130; OBJ32-NEXT:     CodeSize: 0x10
131; OBJ32-NEXT:   }
132; OBJ32-NEXT:   ProcEnd
133; OBJ32-NEXT: ]
134; OBJ32:      FunctionLineTable [
135; OBJ32-NEXT:   Name: _f
136; OBJ32-NEXT:   Flags: 0x1
137; OBJ32-NEXT:   CodeSize: 0x10
138; OBJ32-NEXT:   FilenameSegment [
139; OBJ32-NEXT:     Filename: D:\one.c
140; OBJ32-NEXT:     +0x0: 1
141; OBJ32-NEXT:     ColStart: 0
142; OBJ32-NEXT:     ColEnd: 0
143; OBJ32-NEXT:   ]
144; OBJ32-NEXT:   FilenameSegment [
145; OBJ32-NEXT:     Filename: D:\two.c
146; OBJ32-NEXT:     +0x5: 2
147; OBJ32-NEXT:     ColStart: 0
148; OBJ32-NEXT:     ColEnd: 0
149; OBJ32-NEXT:   ]
150; OBJ32-NEXT:   FilenameSegment [
151; OBJ32-NEXT:     Filename: D:\one.c
152; OBJ32-NEXT:     +0xA: 7
153; OBJ32-NEXT:     +0xF: 8
154; OBJ32-NEXT:     ColStart: 0
155; OBJ32-NEXT:     ColEnd: 0
156; OBJ32-NEXT:     ColStart: 0
157; OBJ32-NEXT:     ColEnd: 0
158; OBJ32-NEXT:   ]
159; OBJ32-NEXT: ]
160
161; X64-LABEL: f:
162; X64-NEXT: .L{{.*}}:{{$}}
163; X64-NEXT: [[START:.*]]:{{$}}
164; X64:      # BB
165; X64:      subq    $40, %rsp
166; X64-NEXT: [[CALL_LINE_1:.*]]:{{$}}
167; X64:      callq   g
168; X64-NEXT: [[CALL_LINE_2:.*]]:{{$}}
169; X64:      callq   g
170; X64-NEXT: [[CALL_LINE_3:.*]]:{{$}}
171; X64:      callq   g
172; X64-NEXT: [[EPILOG_AND_RET:.*]]:
173; X64:      addq    $40, %rsp
174; X64-NEXT: ret
175; X64-NEXT: [[END_OF_F:.*]]:
176;
177; X64-LABEL: .section        .debug$S,"dr"
178; X64-NEXT: .long   4
179; Symbol subsection
180; X64-NEXT: .long   241
181; X64-NEXT: .long [[F1_END:.*]]-[[F1_START:.*]]
182; X64-NEXT: [[F1_START]]:
183; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]]
184; X64-NEXT: [[PROC_SEGMENT_START]]:
185; X64-NEXT: .short  4423
186; X64-NEXT: .zero   12
187; X64-NEXT: .long [[END_OF_F]]-f
188; X64-NEXT: .zero   12
189; X64-NEXT: .secrel32 f
190; X64-NEXT: .secidx f
191; X64-NEXT: .byte   0
192; X64-NEXT: .byte   102
193; X64-NEXT: .byte   0
194; X64-NEXT: [[PROC_SEGMENT_END]]:
195; X64-NEXT: .short  2
196; X64-NEXT: .short  4431
197; X64-NEXT: [[F1_END]]:
198; Padding
199; X64-NEXT: .zero   3
200; Line table
201; X64-NEXT: .long   242
202; X64-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]]
203; X64-NEXT: [[F2_START]]:
204; X64-NEXT: .secrel32 f
205; X64-NEXT: .secidx f
206; X64-NEXT: .short 1
207; X64-NEXT: .long [[END_OF_F]]-f
208; Segment for file 'D:\\input.c' begins
209; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
210; X64-NEXT: .long   0
211; X64-NEXT: .long   1
212; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
213; X64-NEXT: .long [[START]]-f
214; X64-NEXT: .long   3
215; X64-NEXT: .short  0
216; X64-NEXT: .short  0
217; X64-NEXT: [[FILE_SEGMENT_END]]:
218; Segment for file 'D:\\one.c' begins
219; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
220; X64-NEXT: .long   8
221; X64-NEXT: .long   1
222; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
223; X64-NEXT: .long [[CALL_LINE_1]]-f
224; X64-NEXT: .long   1
225; X64-NEXT: .short  0
226; X64-NEXT: .short  0
227; X64-NEXT: [[FILE_SEGMENT_END]]:
228; Segment for file 'D:\\two.c' begins
229; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
230; X64-NEXT: .long   16
231; X64-NEXT: .long   1
232; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
233; X64-NEXT: .long [[CALL_LINE_2]]-f
234; X64-NEXT: .long   2
235; X64-NEXT: .short  0
236; X64-NEXT: .short  0
237; X64-NEXT: [[FILE_SEGMENT_END]]:
238; A new segment for file 'D:\\one.c' begins
239; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]:
240; X64-NEXT: .long   8
241; X64-NEXT: .long   2
242; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]]
243; X64-NEXT: .long [[CALL_LINE_3]]-f
244; X64-NEXT: .long   7
245; X64-NEXT: .long [[EPILOG_AND_RET]]-f
246; X64-NEXT: .long   8
247; X64-NEXT: .short  0
248; X64-NEXT: .short  0
249; X64-NEXT: .short  0
250; X64-NEXT: .short  0
251; X64-NEXT: [[FILE_SEGMENT_END]]:
252; X64-NEXT: [[F2_END]]:
253; File index to string table offset subsection
254; X64-NEXT: .long   244
255; X64-NEXT: .long   24
256; X64-NEXT: .long   1
257; X64-NEXT: .long   0
258; X64-NEXT: .long   12
259; X64-NEXT: .long   0
260; X64-NEXT: .long   21
261; X64-NEXT: .long   0
262; String table
263; X64-NEXT: .long   243
264; X64-NEXT: .long   30
265; X64-NEXT: .byte   0
266; X64-NEXT: .ascii  "D:\\input.c"
267; X64-NEXT: .byte   0
268; X64-NEXT: .ascii  "D:\\one.c"
269; X64-NEXT: .byte   0
270; X64-NEXT: .ascii  "D:\\two.c"
271; X64-NEXT: .byte   0
272; X64-NEXT: .zero   2
273
274; OBJ64:    Section {
275; OBJ64:      Name: .debug$S (2E 64 65 62 75 67 24 53)
276; OBJ64:      Characteristics [ (0x42100040)
277; OBJ64:      ]
278; OBJ64:      Relocations [
279; OBJ64-NEXT:   0x2C IMAGE_REL_AMD64_SECREL f
280; OBJ64-NEXT:   0x30 IMAGE_REL_AMD64_SECTION f
281; OBJ64-NEXT:   0x44 IMAGE_REL_AMD64_SECREL f
282; OBJ64-NEXT:   0x48 IMAGE_REL_AMD64_SECTION f
283; OBJ64-NEXT: ]
284; OBJ64:      Subsection [
285; OBJ64-NEXT:   Type: 0xF1
286; OBJ64-NOT:    ]
287; OBJ64:        ProcStart {
288; OBJ64-NEXT:     DisplayName: f
289; OBJ64-NEXT:     Section: f
290; OBJ64-NEXT:     CodeSize: 0x18
291; OBJ64-NEXT:   }
292; OBJ64-NEXT:   ProcEnd
293; OBJ64-NEXT: ]
294; OBJ64:      FunctionLineTable [
295; OBJ64-NEXT:   Name: f
296; OBJ64-NEXT:   Flags: 0x1
297; OBJ64-NEXT:   CodeSize: 0x18
298; OBJ64-NEXT:   FilenameSegment [
299; OBJ64-NEXT:     Filename: D:\input.c
300; OBJ64-NEXT:     +0x0: 3
301; OBJ64-NEXT:     ColStart: 0
302; OBJ64-NEXT:     ColEnd: 0
303; OBJ64-NEXT:   ]
304; OBJ64-NEXT:   FilenameSegment [
305; OBJ64-NEXT:     Filename: D:\one.c
306; OBJ64-NEXT:     +0x4: 1
307; OBJ64-NEXT:     ColStart: 0
308; OBJ64-NEXT:     ColEnd: 0
309; OBJ64-NEXT:   ]
310; OBJ64-NEXT:   FilenameSegment [
311; OBJ64-NEXT:     Filename: D:\two.c
312; OBJ64-NEXT:     +0x9: 2
313; OBJ64-NEXT:     ColStart: 0
314; OBJ64-NEXT:     ColEnd: 0
315; OBJ64-NEXT:   ]
316; OBJ64-NEXT:   FilenameSegment [
317; OBJ64-NEXT:     Filename: D:\one.c
318; OBJ64-NEXT:     +0xE: 7
319; OBJ64-NEXT:     +0x13: 8
320; OBJ64-NEXT:     ColStart: 0
321; OBJ64-NEXT:     ColEnd: 0
322; OBJ64-NEXT:     ColStart: 0
323; OBJ64-NEXT:     ColEnd: 0
324; OBJ64-NEXT:   ]
325; OBJ64-NEXT: ]
326
327; Function Attrs: nounwind
328define void @f() #0 !dbg !4 {
329entry:
330  call void @g(), !dbg !12
331  call void @g(), !dbg !15
332  call void @g(), !dbg !18
333  ret void, !dbg !19
334}
335
336declare void @g() #1
337
338attributes #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" }
339attributes #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" }
340
341!llvm.dbg.cu = !{!0}
342!llvm.module.flags = !{!9, !10}
343!llvm.ident = !{!11}
344
345!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.5 ", isOptimized: false, emissionKind: 0, file: !1, enums: !2, retainedTypes: !2, subprograms: !3, globals: !2, imports: !2)
346!1 = !DIFile(filename: "<unknown>", directory: "D:\5C")
347!2 = !{}
348!3 = !{!4}
349!4 = distinct !DISubprogram(name: "f", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, scopeLine: 3, file: !5, scope: !6, type: !7, variables: !2)
350!5 = !DIFile(filename: "input.c", directory: "D:\5C")
351!6 = !DIFile(filename: "input.c", directory: "D:C")
352!7 = !DISubroutineType(types: !8)
353!8 = !{null}
354!9 = !{i32 2, !"CodeView", i32 1}
355!10 = !{i32 1, !"Debug Info Version", i32 3}
356!11 = !{!"clang version 3.5 "}
357!12 = !DILocation(line: 1, scope: !13)
358!13 = !DILexicalBlockFile(discriminator: 0, file: !14, scope: !4)
359!14 = !DIFile(filename: "one.c", directory: "D:\5C")
360!15 = !DILocation(line: 2, scope: !16)
361!16 = !DILexicalBlockFile(discriminator: 0, file: !17, scope: !4)
362!17 = !DIFile(filename: "two.c", directory: "D:\5C")
363!18 = !DILocation(line: 7, scope: !13)
364!19 = !DILocation(line: 8, scope: !13)
365