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 5 6 ; This LL file was generated by running clang on the following code: 7 ; D:\test.c: 8 ; 1 void g(void); 9 ; 2 10 ; 3 void f(void) { 11 ; 4 g(); 12 ; 5 } 13 14 ; X86-LABEL: _f: 15 ; X86-NEXT: # BB 16 ; X86-NEXT: [[CALL_LINE:^L.*]]:{{$}} 17 ; X86-NEXT: calll _g 18 ; X86-NEXT: [[RETURN_STMT:.*]]: 19 ; X86-NEXT: ret 20 ; X86-NEXT: [[END_OF_F:.*]]: 21 ; 22 ; X86-LABEL: .section .debug$S,"rnd" 23 ; X86-NEXT: .long 4 24 ; X86-NEXT: .long 242 25 ; X86-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]] 26 ; X86-NEXT: [[F2_START]]: 27 ; X86-NEXT: .secrel32 _f 28 ; X86-NEXT: .secidx _f 29 ; X86-NEXT: .long [[END_OF_F]]-_f 30 ; X86-NEXT: [[FILE_SEGMENT_START:[^:]*]]: 31 ; X86-NEXT: .long 0 32 ; X86-NEXT: .long 2 33 ; X86-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]] 34 ; X86-NEXT: .long [[CALL_LINE]]-_f 35 ; X86-NEXT: .long 4 36 ; X86-NEXT: .long [[RETURN_STMT]]-_f 37 ; X86-NEXT: .long 5 38 ; X86-NEXT: [[FILE_SEGMENT_END]]: 39 ; X86-NEXT: [[F2_END]]: 40 ; File index to string table offset subsection 41 ; X86-NEXT: .long 244 42 ; X86-NEXT: .long 8 43 ; X86-NEXT: .long 1 44 ; X86-NEXT: .long 0 45 ; String table 46 ; X86-NEXT: .long 243 47 ; X86-NEXT: .long 11 48 ; X86-NEXT: .byte 0 49 ; X86-NEXT: .ascii "D:\\test.c" 50 ; X86-NEXT: .byte 0 51 ; Padding 52 ; X86-NEXT: .zero 1 53 54 ; OBJ32: Section { 55 ; OBJ32: Name: .debug$S (2E 64 65 62 75 67 24 53) 56 ; OBJ32: Characteristics [ (0x42100040) 57 ; OBJ32: ] 58 ; OBJ32: Relocations [ 59 ; OBJ32-NEXT: 0xC IMAGE_REL_I386_SECREL _f 60 ; OBJ32-NEXT: 0x10 IMAGE_REL_I386_SECTION _f 61 ; OBJ32-NEXT: ] 62 ; OBJ32: FunctionLineTable [ 63 ; OBJ32-NEXT: Name: _f 64 ; OBJ32-NEXT: CodeSize: 0x6 65 ; OBJ32-NEXT: FilenameSegment [ 66 ; OBJ32-NEXT: Filename: D:\test.c 67 ; OBJ32-NEXT: +0x0: 4 68 ; OBJ32-NEXT: +0x5: 5 69 ; OBJ32-NEXT: ] 70 ; OBJ32-NEXT: ] 71 ; OBJ32: } 72 73 ; X64-LABEL: f: 74 ; X64-NEXT: [[START:.*]]:{{$}} 75 ; X64-NEXT: # BB 76 ; X64-NEXT: subq $40, %rsp 77 ; X64-NEXT: [[CALL_LINE:.*]]:{{$}} 78 ; X64-NEXT: callq g 79 ; X64-NEXT: [[EPILOG_AND_RET:.*]]: 80 ; X64-NEXT: addq $40, %rsp 81 ; X64-NEXT: ret 82 ; X64-NEXT: [[END_OF_F:.*]]: 83 ; 84 ; X64-LABEL: .section .debug$S,"rnd" 85 ; X64-NEXT: .long 4 86 ; X64-NEXT: .long 242 87 ; X64-NEXT: .long [[F2_END:.*]]-[[F2_START:.*]] 88 ; X64-NEXT: [[F2_START]]: 89 ; X64-NEXT: .secrel32 f 90 ; X64-NEXT: .secidx f 91 ; X64-NEXT: .long [[END_OF_F]]-f 92 ; X64-NEXT: [[FILE_SEGMENT_START:[^:]*]]: 93 ; X64-NEXT: .long 0 94 ; X64-NEXT: .long 3 95 ; X64-NEXT: .long [[FILE_SEGMENT_END:.*]]-[[FILE_SEGMENT_START]] 96 ; X64-NEXT: .long [[START]]-f 97 ; X64-NEXT: .long 3 98 ; X64-NEXT: .long [[CALL_LINE]]-f 99 ; X64-NEXT: .long 4 100 ; X64-NEXT: .long [[EPILOG_AND_RET]]-f 101 ; X64-NEXT: .long 5 102 ; X64-NEXT: [[FILE_SEGMENT_END]]: 103 ; X64-NEXT: [[F2_END]]: 104 ; File index to string table offset subsection 105 ; X64-NEXT: .long 244 106 ; X64-NEXT: .long 8 107 ; X64-NEXT: .long 1 108 ; X64-NEXT: .long 0 109 ; String table 110 ; X64-NEXT: .long 243 111 ; X64-NEXT: .long 11 112 ; X64-NEXT: .byte 0 113 ; X64-NEXT: .ascii "D:\\test.c" 114 ; X64-NEXT: .byte 0 115 ; Padding 116 ; X64-NEXT: .zero 1 117 118 ; OBJ64: Section { 119 ; OBJ64: Name: .debug$S (2E 64 65 62 75 67 24 53) 120 ; OBJ64: Characteristics [ (0x42100040) 121 ; OBJ64: ] 122 ; OBJ64: Relocations [ 123 ; OBJ64-NEXT: 0xC IMAGE_REL_AMD64_SECREL f 124 ; OBJ64-NEXT: 0x10 IMAGE_REL_AMD64_SECTION f 125 ; OBJ64-NEXT: ] 126 ; OBJ64: FunctionLineTable [ 127 ; OBJ64-NEXT: Name: f 128 ; OBJ64-NEXT: CodeSize: 0xE 129 ; OBJ64-NEXT: FilenameSegment [ 130 ; OBJ64-NEXT: Filename: D:\test.c 131 ; OBJ64-NEXT: +0x0: 3 132 ; OBJ64-NEXT: +0x4: 4 133 ; OBJ64-NEXT: +0x9: 5 134 ; OBJ64-NEXT: ] 135 ; OBJ64-NEXT: ] 136 ; OBJ64: } 137 138 ; Function Attrs: nounwind 139 define void @f() #0 { 140 entry: 141 call void @g(), !dbg !12 142 ret void, !dbg !13 143 } 144 145 declare void @g() #1 146 147 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" } 148 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" } 149 150 !llvm.dbg.cu = !{!0} 151 !llvm.module.flags = !{!9, !10} 152 !llvm.ident = !{!11} 153 154 !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] 155 !1 = metadata !{metadata !"<unknown>", metadata !"D:\5C"} 156 !2 = metadata !{i32 0} 157 !3 = metadata !{metadata !4} 158 !4 = metadata !{i32 786478, metadata !5, metadata !6, metadata !"f", metadata !"f", metadata !"", i32 3, metadata !7, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, void ()* @f, null, null, metadata !2, i32 3} ; [ DW_TAG_subprogram ] [line 3] [def] [f] 159 !5 = metadata !{metadata !"test.c", metadata !"D:\5C"} 160 !6 = metadata !{i32 786473, metadata !5} ; [ DW_TAG_file_type ] [D:\/test.c] 161 !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 ] 162 !8 = metadata !{null} 163 !9 = metadata !{i32 2, metadata !"Dwarf Version", i32 4} 164 !10 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} 165 !11 = metadata !{metadata !"clang version 3.5 "} 166 !12 = metadata !{i32 4, i32 0, metadata !4, null} 167 !13 = metadata !{i32 5, i32 0, metadata !4, null} 168