Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 1 | ; RUN: llc -O1 -filetype=obj -o - %s | llvm-dwarfdump -debug-dump=all - | FileCheck %s |
| 2 | ; Generated with -O1 from: |
| 3 | ; int f1(); |
| 4 | ; void f2(int*); |
| 5 | ; int f3(int); |
| 6 | ; |
| 7 | ; int foo() { |
| 8 | ; int i = 3; |
| 9 | ; f3(i); |
| 10 | ; i = 7; |
| 11 | ; i = f1(); |
| 12 | ; f2(&i); |
| 13 | ; return 0; |
| 14 | ; } |
| 15 | ; |
| 16 | ; Test that we generate valid debug info for optimized code, |
Alp Toker | 16f98b2 | 2014-04-09 14:47:27 +0000 | [diff] [blame] | 17 | ; particularly variables that are described as constants and passed |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 18 | ; by reference. |
| 19 | ; rdar://problem/14874886 |
| 20 | ; |
| 21 | ; CHECK: .debug_info contents: |
| 22 | ; CHECK: DW_TAG_variable |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 23 | ; CHECK-NOT: DW_TAG |
| 24 | ; CHECK: DW_AT_location [DW_FORM_data4] ([[LOC:.*]]) |
David Blaikie | eb1a272 | 2014-06-13 22:18:23 +0000 | [diff] [blame] | 25 | ; CHECK-NOT: DW_TAG |
| 26 | ; CHECK: DW_AT_name{{.*}}"i" |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 27 | ; CHECK: .debug_loc contents: |
| 28 | ; CHECK: [[LOC]]: |
Adrian Prantl | 3bdcb52 | 2014-04-11 17:49:47 +0000 | [diff] [blame] | 29 | ; consts 0x00000003 |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 30 | ; CHECK: Beginning address offset: 0x0000000000000{{.*}} |
| 31 | ; CHECK: Ending address offset: [[C1:.*]] |
Adrian Prantl | 3bdcb52 | 2014-04-11 17:49:47 +0000 | [diff] [blame] | 32 | ; CHECK: Location description: 11 03 |
| 33 | ; consts 0x00000007 |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 34 | ; CHECK: Beginning address offset: [[C1]] |
| 35 | ; CHECK: Ending address offset: [[C2:.*]] |
Adrian Prantl | 3bdcb52 | 2014-04-11 17:49:47 +0000 | [diff] [blame] | 36 | ; CHECK: Location description: 11 07 |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 37 | ; rax, piece 0x00000004 |
| 38 | ; CHECK: Beginning address offset: [[C2]] |
| 39 | ; CHECK: Ending address offset: [[R1:.*]] |
| 40 | ; CHECK: Location description: 50 93 04 |
Adrian Prantl | 32da889 | 2014-04-25 20:49:25 +0000 | [diff] [blame] | 41 | ; rdi+0 |
| 42 | ; CHECK: Beginning address offset: [[R1]] |
| 43 | ; CHECK: Ending address offset: [[R2:.*]] |
| 44 | ; CHECK: Location description: 75 00 |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 45 | ; |
| 46 | target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" |
| 47 | target triple = "x86_64-apple-macosx10.9.0" |
| 48 | |
| 49 | ; Function Attrs: nounwind ssp uwtable |
| 50 | define i32 @foo() #0 { |
| 51 | entry: |
| 52 | %i = alloca i32, align 4 |
Duncan P. N. Exon Smith | 786cd04 | 2014-10-02 22:15:31 +0000 | [diff] [blame] | 53 | call void @llvm.dbg.value(metadata !14, i64 0, metadata !10, metadata !{i32 786690}), !dbg !15 |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 54 | %call = call i32 @f3(i32 3) #3, !dbg !16 |
Duncan P. N. Exon Smith | 786cd04 | 2014-10-02 22:15:31 +0000 | [diff] [blame] | 55 | call void @llvm.dbg.value(metadata !17, i64 0, metadata !10, metadata !{i32 786690}), !dbg !18 |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 56 | %call1 = call i32 (...)* @f1() #3, !dbg !19 |
Duncan P. N. Exon Smith | 786cd04 | 2014-10-02 22:15:31 +0000 | [diff] [blame] | 57 | call void @llvm.dbg.value(metadata !{i32 %call1}, i64 0, metadata !10, metadata !{i32 786690}), !dbg !19 |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 58 | store i32 %call1, i32* %i, align 4, !dbg !19, !tbaa !20 |
Duncan P. N. Exon Smith | 786cd04 | 2014-10-02 22:15:31 +0000 | [diff] [blame] | 59 | call void @llvm.dbg.value(metadata !{i32* %i}, i64 0, metadata !10, metadata !{i32 786690}), !dbg !24 |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 60 | call void @f2(i32* %i) #3, !dbg !24 |
| 61 | ret i32 0, !dbg !25 |
| 62 | } |
| 63 | |
| 64 | declare i32 @f3(i32) |
| 65 | |
| 66 | declare i32 @f1(...) |
| 67 | |
| 68 | declare void @f2(i32*) |
| 69 | |
| 70 | ; Function Attrs: nounwind readnone |
Adrian Prantl | 87b7eb9 | 2014-10-01 18:55:02 +0000 | [diff] [blame] | 71 | declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #2 |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 72 | |
| 73 | attributes #0 = { nounwind ssp uwtable } |
| 74 | attributes #2 = { nounwind readnone } |
| 75 | attributes #3 = { nounwind } |
| 76 | |
| 77 | !llvm.dbg.cu = !{!0} |
| 78 | !llvm.module.flags = !{!11, !12} |
| 79 | !llvm.ident = !{!13} |
| 80 | |
Duncan P. N. Exon Smith | 786cd04 | 2014-10-02 22:15:31 +0000 | [diff] [blame] | 81 | !0 = metadata !{i32 786449, metadata !1, i32 12, metadata !"clang version 3.5.0 ", i1 true, metadata !"", i32 0, metadata !2, metadata !2, metadata !3, metadata !2, metadata !2, metadata !"", i32 1} ; [ DW_TAG_compile_unit ] [dbg-value-const-byref.c] [DW_LANG_C99] |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 82 | !1 = metadata !{metadata !"dbg-value-const-byref.c", metadata !""} |
| 83 | !2 = metadata !{} |
| 84 | !3 = metadata !{metadata !4} |
Duncan P. N. Exon Smith | 786cd04 | 2014-10-02 22:15:31 +0000 | [diff] [blame] | 85 | !4 = metadata !{i32 786478, metadata !1, metadata !5, metadata !"foo", metadata !"foo", metadata !"", i32 5, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i32 0, i1 true, i32 ()* @foo, null, null, metadata !9, i32 5} ; [ DW_TAG_subprogram ] [line 5] [def] [foo] |
| 86 | !5 = metadata !{i32 786473, metadata !1} ; [ DW_TAG_file_type ] [dbg-value-const-byref.c] |
| 87 | !6 = metadata !{i32 786453, i32 0, null, metadata !"", i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, null, null, null} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ] |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 88 | !7 = metadata !{metadata !8} |
Duncan P. N. Exon Smith | 786cd04 | 2014-10-02 22:15:31 +0000 | [diff] [blame] | 89 | !8 = metadata !{i32 786468, null, null, metadata !"int", i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed] |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 90 | !9 = metadata !{metadata !10} |
Duncan P. N. Exon Smith | 786cd04 | 2014-10-02 22:15:31 +0000 | [diff] [blame] | 91 | !10 = metadata !{i32 786688, metadata !4, metadata !"i", metadata !5, i32 6, metadata !8, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [i] [line 6] |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 92 | !11 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} |
Duncan P. N. Exon Smith | 786cd04 | 2014-10-02 22:15:31 +0000 | [diff] [blame] | 93 | !12 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 94 | !13 = metadata !{metadata !"clang version 3.5.0 "} |
| 95 | !14 = metadata !{i32 3} |
| 96 | !15 = metadata !{i32 6, i32 0, metadata !4, null} |
| 97 | !16 = metadata !{i32 7, i32 0, metadata !4, null} |
| 98 | !17 = metadata !{i32 7} |
Duncan P. N. Exon Smith | 786cd04 | 2014-10-02 22:15:31 +0000 | [diff] [blame] | 99 | !18 = metadata !{i32 8, i32 0, metadata !4, null} ; [ DW_TAG_imported_declaration ] |
Adrian Prantl | 75ce62a | 2014-04-01 21:04:18 +0000 | [diff] [blame] | 100 | !19 = metadata !{i32 9, i32 0, metadata !4, null} |
| 101 | !20 = metadata !{metadata !21, metadata !21, i64 0} |
| 102 | !21 = metadata !{metadata !"int", metadata !22, i64 0} |
| 103 | !22 = metadata !{metadata !"omnipotent char", metadata !23, i64 0} |
| 104 | !23 = metadata !{metadata !"Simple C/C++ TBAA"} |
| 105 | !24 = metadata !{i32 10, i32 0, metadata !4, null} |
| 106 | !25 = metadata !{i32 11, i32 0, metadata !4, null} |