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-itanium -O0 < %s | FileCheck --check-prefix=X86 %s
3; 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
4; RUN: llc -mcpu=core2 -mtriple=i686-pc-win32-itanium -o - -O0 < %s | llvm-mc -triple=i686-pc-win32 -filetype=obj | llvm-readobj -s -sr -codeview -section-symbols | FileCheck --check-prefix=OBJ32 %s
5; RUN: llc -mcpu=core2 -mtriple=x86_64-pc-win32 -O0 < %s | FileCheck --check-prefix=X64 %s
6; RUN: llc -mcpu=core2 -mtriple=x86_64-pc-win32-itanium -O0 < %s | FileCheck --check-prefix=X64 %s
7; 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
8; RUN: llc -mcpu=core2 -mtriple=x86_64-pc-win32-itanium -o - -O0 < %s | llvm-mc -triple=x86_64-pc-win32 -filetype=obj | llvm-readobj -s -sr -codeview -section-symbols | FileCheck --check-prefix=OBJ64 %s
9
10; This LL file was generated by running clang on the following code:
11; D:\test.c:
12; 1 void g(void);
13; 2
14; 3 void f(void) {
15; 4   g();
16; 5 }
17
18; X86-LABEL: _f:
19; X86:      # BB
20; X86:      .cv_file 1 "D:\\test.c"
21; X86:      .cv_loc 0 1 4 2 is_stmt 0 # test.c:4:2
22; X86:      calll   _g
23; X86:      .cv_loc 0 1 5 0 # test.c:5:0
24; X86:      ret
25; X86:      [[END_OF_F:Lfunc_end.*]]:
26;
27; X86-LABEL: .section        .debug$S,"dr"
28; X86-NEXT: .p2align 2
29; X86-NEXT: .long   4
30; Symbol subsection
31; X86-NEXT: .long   241
32; X86-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
33; Compiler information record
34; X86-NEXT: [[COMPILE_START]]:
35; X86-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
36; X86:      [[C1_END]]:
37; X86-NEXT: [[COMPILE_END]]:
38; X86-NEXT: .p2align	2
39; X86-NEXT:	.long	241  # Symbol subsection for f
40; X86-NEXT:	.long	[[F1_END:.*]]-[[F1_START:.*]] # Subsection size
41; X86-NEXT: [[F1_START]]:
42; X86-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
43; X86-NEXT: [[PROC_SEGMENT_START]]:
44; X86-NEXT: .short  4423
45; X86-NEXT: .long   0
46; X86-NEXT: .long   0
47; X86-NEXT: .long   0
48; X86-NEXT: .long [[END_OF_F]]-_f
49; X86-NEXT: .long   0
50; X86-NEXT: .long   0
51; X86-NEXT: .long   4098
52; X86-NEXT: .secrel32 _f
53; X86-NEXT: .secidx _f
54; X86-NEXT: .byte   0
55; X86-NEXT: .asciz "f"
56; X86-NEXT: [[PROC_SEGMENT_END]]:
57; X86-NEXT: .short  2
58; X86-NEXT: .short  4431
59; X86-NEXT: [[F1_END]]:
60; X86-NEXT: .p2align 2
61; Line table
62; X86-NEXT: .cv_linetable 0, _f, [[END_OF_F]]
63; File index to string table offset subsection
64; X86-NEXT: .cv_filechecksums
65; String table
66; X86-NEXT: .cv_stringtable
67
68; OBJ32:    Section {
69; OBJ32:      Name: .debug$S (2E 64 65 62 75 67 24 53)
70; OBJ32:      Characteristics [ (0x42300040)
71; OBJ32:      ]
72; OBJ32:      Relocations [
73; OBJ32-NEXT:   0x64 IMAGE_REL_I386_SECREL _f
74; OBJ32-NEXT:   0x68 IMAGE_REL_I386_SECTION _f
75; OBJ32-NEXT:   0x7C IMAGE_REL_I386_SECREL _f
76; OBJ32-NEXT:   0x80 IMAGE_REL_I386_SECTION _f
77; OBJ32-NEXT: ]
78; OBJ32:      Subsection [
79; OBJ32-NEXT:   SubSectionType: Symbols (0xF1)
80; OBJ32:        ProcStart {
81; OBJ32:          CodeSize: 0x6
82; OBJ32:          DisplayName: f
83; OBJ32:          LinkageName: _f
84; OBJ32:        }
85; OBJ32-NEXT:   ProcEnd {
86; OBJ32-NEXT:   }
87; OBJ32-NEXT: ]
88; OBJ32:      FunctionLineTable [
89; OBJ32-NEXT:   Name: _f
90; OBJ32-NEXT:   Flags: 0x1
91; OBJ32-NEXT:   CodeSize: 0x6
92; OBJ32-NEXT:   FilenameSegment [
93; OBJ32-NEXT:     Filename: D:\test.c
94; OBJ32-NEXT:     +0x0 [
95; OBJ32-NEXT:       LineNumberStart: 4
96; OBJ32-NEXT:       LineNumberEndDelta: 0
97; OBJ32-NEXT:       IsStatement: No
98; OBJ32-NEXT:       ColStart: 2
99; OBJ32-NEXT:       ColEnd: 0
100; OBJ32-NEXT:     ]
101; OBJ32-NEXT:     +0x5 [
102; OBJ32-NEXT:       LineNumberStart: 5
103; OBJ32-NEXT:       LineNumberEndDelta: 0
104; OBJ32-NEXT:       IsStatement: No
105; OBJ32-NEXT:       ColStart: 0
106; OBJ32-NEXT:       ColEnd: 0
107; OBJ32-NEXT:     ]
108; OBJ32-NEXT:   ]
109; OBJ32-NEXT: ]
110
111; X64-LABEL: f:
112; X64-NEXT: .L{{.*}}:{{$}}
113; X64:      .cv_file 1 "D:\\test.c"
114; X64:      .cv_loc 0 1 3 0 is_stmt 0 # test.c:3:0
115; X64:      # BB
116; X64:      subq    $40, %rsp
117; X64:      .cv_loc 0 1 4 2 # test.c:4:2
118; X64-NEXT: callq   g
119; X64:      .cv_loc 0 1 5 0 # test.c:5:0
120; X64:      addq    $40, %rsp
121; X64-NEXT: ret
122; X64:      [[END_OF_F:.?Lfunc_end.*]]:
123;
124; X64-LABEL: .section        .debug$S,"dr"
125; X64-NEXT: .p2align 2
126; X64-NEXT: .long   4
127; Symbol subsection
128; X64-NEXT: .long   241
129; X64-NEXT: .long [[COMPILE_END:.*]]-[[COMPILE_START:.*]] #
130; Compiler information record
131; X64-NEXT: [[COMPILE_START]]:
132; X64-NEXT: .short [[C1_END:.*]]-[[C1_START:.*]] #
133; X64:      [[C1_END]]:
134; X64-NEXT: [[COMPILE_END]]:
135; X64-NEXT: .p2align	2
136; X64-NEXT:	.long	241  # Symbol subsection for f
137; X64-NEXT:	.long	[[F1_END:.*]]-[[F1_START:.*]] # Subsection size
138; X64-NEXT: [[F1_START]]:
139; X64-NEXT: .short [[PROC_SEGMENT_END:.*]]-[[PROC_SEGMENT_START:.*]] #
140; X64-NEXT: [[PROC_SEGMENT_START]]:
141; X64-NEXT: .short  4423
142; X64-NEXT: .long   0
143; X64-NEXT: .long   0
144; X64-NEXT: .long   0
145; X64-NEXT: .long [[END_OF_F]]-f
146; X64-NEXT: .long   0
147; X64-NEXT: .long   0
148; X64-NEXT: .long   4098
149; X64-NEXT: .secrel32 f
150; X64-NEXT: .secidx f
151; X64-NEXT: .byte   0
152; X64-NEXT: .asciz "f"
153; X64-NEXT: [[PROC_SEGMENT_END]]:
154; X64-NEXT: .short  2
155; X64-NEXT: .short  4431
156; X64-NEXT: [[F1_END]]:
157; X64-NEXT: .p2align   2
158; Line table
159; X64-NEXT: .cv_linetable 0, f, [[END_OF_F]]
160; File index to string table offset subsection
161; X64-NEXT: .cv_filechecksums
162; String table
163; X64-NEXT: .cv_stringtable
164
165; OBJ64:    Section {
166; OBJ64:      Name: .debug$S (2E 64 65 62 75 67 24 53)
167; OBJ64:      Characteristics [ (0x42300040)
168; OBJ64:      ]
169; OBJ64:      Relocations [
170; OBJ64-NEXT:   0x64 IMAGE_REL_AMD64_SECREL f
171; OBJ64-NEXT:   0x68 IMAGE_REL_AMD64_SECTION f
172; OBJ64-NEXT:   0x7C IMAGE_REL_AMD64_SECREL f
173; OBJ64-NEXT:   0x80 IMAGE_REL_AMD64_SECTION f
174; OBJ64-NEXT: ]
175; OBJ64:      Subsection [
176; OBJ64-NEXT:   SubSectionType: Symbols (0xF1)
177; OBJ64:        ProcStart {
178; OBJ64:          CodeSize: 0xE
179; OBJ64:          DisplayName: f
180; OBJ64:          LinkageName: f
181; OBJ64:        }
182; OBJ64-NEXT:   ProcEnd {
183; OBJ64-NEXT:   }
184; OBJ64-NEXT: ]
185; OBJ64:      FunctionLineTable [
186; OBJ64-NEXT:   Name: f
187; OBJ64-NEXT:   Flags: 0x1
188; OBJ64-NEXT:   CodeSize: 0xE
189; OBJ64-NEXT:   FilenameSegment [
190; OBJ64-NEXT:     Filename: D:\test.c
191; OBJ64-NEXT:     +0x0 [
192; OBJ64-NEXT:       LineNumberStart: 3
193; OBJ64-NEXT:       LineNumberEndDelta: 0
194; OBJ64-NEXT:       IsStatement: No
195; OBJ64-NEXT:       ColStart: 0
196; OBJ64-NEXT:       ColEnd: 0
197; OBJ64-NEXT:     ]
198; OBJ64-NEXT:     +0x4 [
199; OBJ64-NEXT:       LineNumberStart: 4
200; OBJ64-NEXT:       LineNumberEndDelta: 0
201; OBJ64-NEXT:       IsStatement: No
202; OBJ64-NEXT:       ColStart: 2
203; OBJ64-NEXT:       ColEnd: 0
204; OBJ64-NEXT:     ]
205; OBJ64-NEXT:     +0x9 [
206; OBJ64-NEXT:       LineNumberStart: 5
207; OBJ64-NEXT:       LineNumberEndDelta: 0
208; OBJ64-NEXT:       IsStatement: No
209; OBJ64-NEXT:       ColStart: 0
210; OBJ64-NEXT:       ColEnd: 0
211; OBJ64-NEXT:     ]
212; OBJ64-NEXT:   ]
213; OBJ64-NEXT: ]
214
215; Function Attrs: nounwind
216define void @f() #0 !dbg !4 {
217entry:
218  call void @g(), !dbg !12
219  ret void, !dbg !13
220}
221
222declare void @g() #1
223
224attributes #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" }
225attributes #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" }
226
227!llvm.dbg.cu = !{!0}
228!llvm.module.flags = !{!9, !10}
229!llvm.ident = !{!11}
230
231!0 = distinct !DICompileUnit(language: DW_LANG_C99, producer: "clang version 3.5 ", isOptimized: false, emissionKind: FullDebug, file: !1, enums: !2, retainedTypes: !2, globals: !2, imports: !2)
232!1 = !DIFile(filename: "<unknown>", directory: "D:\5C")
233!2 = !{}
234!4 = distinct !DISubprogram(name: "f", line: 3, isLocal: false, isDefinition: true, virtualIndex: 6, flags: DIFlagPrototyped, isOptimized: false, unit: !0, scopeLine: 3, file: !5, scope: !6, type: !7, variables: !2)
235!5 = !DIFile(filename: "test.c", directory: "D:\5C")
236!6 = !DIFile(filename: "test.c", directory: "D:C")
237!7 = !DISubroutineType(types: !8)
238!8 = !{null}
239!9 = !{i32 2, !"CodeView", i32 1}
240!10 = !{i32 1, !"Debug Info Version", i32 3}
241!11 = !{!"clang version 3.5 "}
242!12 = !DILocation(line: 4, column: 2, scope: !4)
243!13 = !DILocation(line: 5, scope: !4)
244