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 |
Adrian Prantl | 87b7eb9 | 2014-10-01 18:55:02 +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 |
Adrian Prantl | 87b7eb9 | 2014-10-01 18:55:02 +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 |
Adrian Prantl | 87b7eb9 | 2014-10-01 18:55:02 +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 |
Adrian Prantl | 87b7eb9 | 2014-10-01 18:55:02 +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 | |
| 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] |
| 82 | !1 = metadata !{metadata !"dbg-value-const-byref.c", metadata !""} |
| 83 | !2 = metadata !{} |
| 84 | !3 = metadata !{metadata !4} |
| 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 ] |
| 88 | !7 = metadata !{metadata !8} |
| 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] |
| 90 | !9 = metadata !{metadata !10} |
| 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] |
| 92 | !11 = metadata !{i32 2, metadata !"Dwarf Version", i32 2} |
| 93 | !12 = metadata !{i32 1, metadata !"Debug Info Version", i32 1} |
| 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} |
| 99 | !18 = metadata !{i32 8, i32 0, metadata !4, null} ; [ DW_TAG_imported_declaration ] |
| 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} |