Reid Kleckner | 2280f93 | 2016-05-23 20:23:46 +0000 | [diff] [blame] | 1 | ; RUN: llc < %s -filetype=obj -o - | llvm-readobj -codeview -codeview-subsection-bytes | FileCheck %s |
| 2 | |
| 3 | ; Check how we pad out the LF_FUNC_ID records. The 00F3F2F1 bytes in LeafData are |
| 4 | ; what's interesting here. |
| 5 | |
| 6 | ; CHECK: FuncId (0x1002) { |
| 7 | ; CHECK: TypeLeafKind: LF_FUNC_ID (0x1601) |
| 8 | ; CHECK: Name: a |
| 9 | ; CHECK: LeafData ( |
| 10 | ; CHECK: 0000: {{.*}} 6100F2F1 |........a...| |
| 11 | ; CHECK: ) |
| 12 | ; CHECK: } |
| 13 | ; CHECK: FuncId (0x1003) { |
| 14 | ; CHECK: TypeLeafKind: LF_FUNC_ID (0x1601) |
| 15 | ; CHECK: Name: ab |
| 16 | ; CHECK: LeafData ( |
| 17 | ; CHECK: 0000: {{.*}} 616200F1 |........ab..| |
| 18 | ; CHECK: ) |
| 19 | ; CHECK: } |
| 20 | ; CHECK: FuncId (0x1004) { |
| 21 | ; CHECK: TypeLeafKind: LF_FUNC_ID (0x1601) |
| 22 | ; CHECK: Name: abc |
| 23 | ; CHECK: LeafData ( |
| 24 | ; CHECK: 0000: {{.*}} 61626300 |........abc.| |
| 25 | ; CHECK: ) |
| 26 | ; CHECK: } |
| 27 | ; CHECK: FuncId (0x1005) { |
| 28 | ; CHECK: TypeLeafKind: LF_FUNC_ID (0x1601) |
| 29 | ; CHECK: Name: abcd |
| 30 | ; CHECK: LeafData ( |
| 31 | ; CHECK: 0000: {{.*}} 61626364 00F3F2F1 |........abcd....| |
| 32 | ; CHECK: ) |
| 33 | ; CHECK: } |
| 34 | |
| 35 | ; C++ source used to generate the IR: |
| 36 | ; |
| 37 | ; extern volatile int x; |
| 38 | ; static void a() { x++; } |
| 39 | ; static void ab() { x++; } |
| 40 | ; static void abc() { x++; } |
| 41 | ; static void abcd() { x++; } |
| 42 | ; int main() { |
| 43 | ; a(); |
| 44 | ; ab(); |
| 45 | ; abc(); |
| 46 | ; abcd(); |
| 47 | ; } |
| 48 | |
| 49 | ; ModuleID = 't.cpp' |
| 50 | source_filename = "t.cpp" |
| 51 | target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128" |
| 52 | target triple = "x86_64-pc-windows-msvc" |
| 53 | |
| 54 | @x = external global i32, align 4 |
| 55 | |
| 56 | ; Function Attrs: norecurse nounwind |
| 57 | define i32 @main() #0 !dbg !6 { |
| 58 | entry: |
| 59 | store volatile i32 0, i32* @x, align 4, !dbg !11, !tbaa !16 |
| 60 | store volatile i32 0, i32* @x, align 4, !dbg !20, !tbaa !16 |
| 61 | store volatile i32 0, i32* @x, align 4, !dbg !23, !tbaa !16 |
| 62 | store volatile i32 0, i32* @x, align 4, !dbg !26, !tbaa !16 |
| 63 | ret i32 0, !dbg !29 |
| 64 | } |
| 65 | |
| 66 | attributes #0 = { norecurse nounwind "disable-tail-calls"="false" "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-features"="+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" } |
| 67 | |
| 68 | !llvm.dbg.cu = !{!0} |
| 69 | !llvm.module.flags = !{!3, !4} |
| 70 | !llvm.ident = !{!5} |
| 71 | |
| 72 | !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 3.9.0 (trunk 270461) (llvm/trunk 270469)", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2) |
| 73 | !1 = !DIFile(filename: "<stdin>", directory: "D:\5Csrc\5Cllvm\5Cbuild") |
| 74 | !2 = !{} |
| 75 | !3 = !{i32 2, !"CodeView", i32 1} |
| 76 | !4 = !{i32 2, !"Debug Info Version", i32 3} |
| 77 | !5 = !{!"clang version 3.9.0 (trunk 270461) (llvm/trunk 270469)"} |
| 78 | !6 = distinct !DISubprogram(name: "main", scope: !7, file: !7, line: 6, type: !8, isLocal: false, isDefinition: true, scopeLine: 6, isOptimized: true, unit: !0, variables: !2) |
| 79 | !7 = !DIFile(filename: "t.cpp", directory: "D:\5Csrc\5Cllvm\5Cbuild") |
| 80 | !8 = !DISubroutineType(types: !9) |
| 81 | !9 = !{!10} |
| 82 | !10 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed) |
| 83 | !11 = !DILocation(line: 2, scope: !12, inlinedAt: !15) |
| 84 | !12 = distinct !DISubprogram(name: "a", scope: !7, file: !7, line: 2, type: !13, isLocal: true, isDefinition: true, scopeLine: 2, isOptimized: true, unit: !0, variables: !2) |
| 85 | !13 = !DISubroutineType(types: !14) |
| 86 | !14 = !{null} |
| 87 | !15 = distinct !DILocation(line: 7, scope: !6) |
| 88 | !16 = !{!17, !17, i64 0} |
| 89 | !17 = !{!"int", !18, i64 0} |
| 90 | !18 = !{!"omnipotent char", !19, i64 0} |
| 91 | !19 = !{!"Simple C/C++ TBAA"} |
| 92 | !20 = !DILocation(line: 3, scope: !21, inlinedAt: !22) |
| 93 | !21 = distinct !DISubprogram(name: "ab", scope: !7, file: !7, line: 3, type: !13, isLocal: true, isDefinition: true, scopeLine: 3, isOptimized: true, unit: !0, variables: !2) |
| 94 | !22 = distinct !DILocation(line: 8, scope: !6) |
| 95 | !23 = !DILocation(line: 4, scope: !24, inlinedAt: !25) |
| 96 | !24 = distinct !DISubprogram(name: "abc", scope: !7, file: !7, line: 4, type: !13, isLocal: true, isDefinition: true, scopeLine: 4, isOptimized: true, unit: !0, variables: !2) |
| 97 | !25 = distinct !DILocation(line: 9, scope: !6) |
| 98 | !26 = !DILocation(line: 5, scope: !27, inlinedAt: !28) |
| 99 | !27 = distinct !DISubprogram(name: "abcd", scope: !7, file: !7, line: 5, type: !13, isLocal: true, isDefinition: true, scopeLine: 5, isOptimized: true, unit: !0, variables: !2) |
| 100 | !28 = distinct !DILocation(line: 10, scope: !6) |
| 101 | !29 = !DILocation(line: 11, scope: !6) |