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