2010-07-14 23:12:52 +00:00
; RUN: llc -O2 -mtriple=i386-apple-darwin <%s | FileCheck %s
; Use DW_FORM_addr for DW_AT_entry_pc.
; Radar 8094785
; CHECK: .byte 17 ## DW_TAG_compile_unit
; CHECK-NEXT: .byte 1 ## DW_CHILDREN_yes
; CHECK-NEXT: .byte 37 ## DW_AT_producer
; CHECK-NEXT: .byte 8 ## DW_FORM_string
; CHECK-NEXT: .byte 19 ## DW_AT_language
2011-02-23 22:37:04 +00:00
; CHECK-NEXT: .byte 5 ## DW_FORM_data2
2010-07-14 23:12:52 +00:00
; CHECK-NEXT: .byte 3 ## DW_AT_name
; CHECK-NEXT: .byte 8 ## DW_FORM_string
; CHECK-NEXT: .byte 82 ## DW_AT_entry_pc
; CHECK-NEXT: .byte 1 ## DW_FORM_addr
; CHECK-NEXT: .byte 16 ## DW_AT_stmt_list
; CHECK-NEXT: .byte 6 ## DW_FORM_data4
; CHECK-NEXT: .byte 27 ## DW_AT_comp_dir
; CHECK-NEXT: .byte 8 ## DW_FORM_string
; CHECK-NEXT: .byte 225 ## DW_AT_APPLE_optimized
%struct.a = type { i32 , %struct.a * }
@ret = common global i32 0 ; <i32*> [#uses=2]
define void @foo ( i32 %x ) nounwind noinline ssp {
entry:
tail call void @llvm.dbg.value ( metadata ! { i32 %x } , i64 0 , metadata !21 ) , !dbg !28
store i32 %x , i32 * @ret , align 4 , !dbg !29
ret void , !dbg !31
}
declare void @llvm.dbg.declare ( metadata , metadata ) nounwind readnone
declare void @llvm.dbg.value ( metadata , i64 , metadata ) nounwind readnone
define i8 * @bar ( %struct.a * %b ) nounwind noinline ssp {
entry:
tail call void @llvm.dbg.value ( metadata ! { %struct.a * %b } , i64 0 , metadata !22 ) , !dbg !32
%0 = getelementptr inbounds %struct.a * %b , i64 0 , i32 0 , !dbg !33 ; <i32*> [#uses=1]
%1 = load i32 * %0 , align 8 , !dbg !33 ; <i32> [#uses=1]
tail call void @foo ( i32 %1 ) nounwind noinline ssp , !dbg !33
%2 = bitcast %struct.a * %b to i8 * , !dbg !35 ; <i8*> [#uses=1]
ret i8 * %2 , !dbg !35
}
define i32 @main ( i32 %argc , i8 * * nocapture %argv ) nounwind ssp {
entry:
%e = alloca %struct.a , align 8 ; <%struct.a*> [#uses=4]
call void @llvm.dbg.value ( metadata ! { i32 %argc } , i64 0 , metadata !23 ) , !dbg !36
call void @llvm.dbg.value ( metadata ! { i8 * * %argv } , i64 0 , metadata !24 ) , !dbg !36
call void @llvm.dbg.declare ( metadata ! { %struct.a * %e } , metadata !25 ) , !dbg !37
%0 = getelementptr inbounds %struct.a * %e , i64 0 , i32 0 , !dbg !38 ; <i32*> [#uses=1]
store i32 4 , i32 * %0 , align 8 , !dbg !38
%1 = getelementptr inbounds %struct.a * %e , i64 0 , i32 1 , !dbg !39 ; <%struct.a**> [#uses=1]
store %struct.a * %e , %struct.a * * %1 , align 8 , !dbg !39
%2 = call i8 * @bar ( %struct.a * %e ) nounwind noinline ssp , !dbg !40 ; <i8*> [#uses=0]
%3 = load i32 * @ret , align 4 , !dbg !41 ; <i32> [#uses=1]
ret i32 %3 , !dbg !41
}
!llvm.dbg.sp = ! { !0 , !6 , !15 }
!llvm.dbg.lv.foo = ! { !21 }
!llvm.dbg.lv.bar = ! { !22 }
!llvm.dbg.lv.main = ! { !23 , !24 , !25 }
!llvm.dbg.gv = ! { !27 }
!0 = metadata ! { i32 524334 , i32 0 , metadata !1 , metadata !"foo" , metadata !"foo" , metadata !"foo" , metadata !1 , i32 34 , metadata !3 , i1 false , i1 true , i32 0 , i32 0 , null , i1 false , i1 true , void ( i32 ) * @foo } ; [ DW_TAG_subprogram ]
!1 = metadata ! { i32 524329 , metadata !"2010-06-28-DbgEntryPC.c" , metadata !"/Users/yash/clean/llvm/test/FrontendC" , metadata !2 } ; [ DW_TAG_file_type ]
!2 = metadata ! { i32 524305 , i32 0 , i32 1 , metadata !"2010-06-28-DbgEntryPC.c" , metadata !"/Users/yash/clean/llvm/test/FrontendC" , metadata !"4.2.1 (Based on Apple Inc. build 5658) (LLVM build)" , i1 true , i1 true , metadata !"" , i32 0 } ; [ DW_TAG_compile_unit ]
!3 = metadata ! { i32 524309 , metadata !1 , metadata !"" , metadata !1 , i32 0 , i64 0 , i64 0 , i64 0 , i32 0 , null , metadata !4 , i32 0 , null } ; [ DW_TAG_subroutine_type ]
!4 = metadata ! { null , metadata !5 }
!5 = metadata ! { i32 524324 , metadata !1 , metadata !"int" , metadata !1 , i32 0 , i64 32 , i64 32 , i64 0 , i32 0 , i32 5 } ; [ DW_TAG_base_type ]
!6 = metadata ! { i32 524334 , i32 0 , metadata !1 , metadata !"bar" , metadata !"bar" , metadata !"bar" , metadata !1 , i32 38 , metadata !7 , i1 false , i1 true , i32 0 , i32 0 , null , i1 false , i1 true , i8 * ( %struct.a * ) * @bar } ; [ DW_TAG_subprogram ]
!7 = metadata ! { i32 524309 , metadata !1 , metadata !"" , metadata !1 , i32 0 , i64 0 , i64 0 , i64 0 , i32 0 , null , metadata !8 , i32 0 , null } ; [ DW_TAG_subroutine_type ]
!8 = metadata ! { metadata !9 , metadata !10 }
!9 = metadata ! { i32 524303 , metadata !1 , metadata !"" , metadata !1 , i32 0 , i64 64 , i64 64 , i64 0 , i32 0 , null } ; [ DW_TAG_pointer_type ]
!10 = metadata ! { i32 524303 , metadata !1 , metadata !"" , metadata !1 , i32 0 , i64 64 , i64 64 , i64 0 , i32 0 , metadata !11 } ; [ DW_TAG_pointer_type ]
!11 = metadata ! { i32 524307 , metadata !1 , metadata !"a" , metadata !1 , i32 23 , i64 128 , i64 64 , i64 0 , i32 0 , null , metadata !12 , i32 0 , null } ; [ DW_TAG_structure_type ]
!12 = metadata ! { metadata !13 , metadata !14 }
!13 = metadata ! { i32 524301 , metadata !11 , metadata !"c" , metadata !1 , i32 24 , i64 32 , i64 32 , i64 0 , i32 0 , metadata !5 } ; [ DW_TAG_member ]
!14 = metadata ! { i32 524301 , metadata !11 , metadata !"d" , metadata !1 , i32 25 , i64 64 , i64 64 , i64 64 , i32 0 , metadata !10 } ; [ DW_TAG_member ]
!15 = metadata ! { i32 524334 , i32 0 , metadata !1 , metadata !"main" , metadata !"main" , metadata !"main" , metadata !1 , i32 43 , metadata !16 , i1 false , i1 true , i32 0 , i32 0 , null , i1 false , i1 true , i32 ( i32 , i8 * * ) * @main } ; [ DW_TAG_subprogram ]
!16 = metadata ! { i32 524309 , metadata !1 , metadata !"" , metadata !1 , i32 0 , i64 0 , i64 0 , i64 0 , i32 0 , null , metadata !17 , i32 0 , null } ; [ DW_TAG_subroutine_type ]
!17 = metadata ! { metadata !5 , metadata !5 , metadata !18 }
!18 = metadata ! { i32 524303 , metadata !1 , metadata !"" , metadata !1 , i32 0 , i64 64 , i64 64 , i64 0 , i32 0 , metadata !19 } ; [ DW_TAG_pointer_type ]
!19 = metadata ! { i32 524303 , metadata !1 , metadata !"" , metadata !1 , i32 0 , i64 64 , i64 64 , i64 0 , i32 0 , metadata !20 } ; [ DW_TAG_pointer_type ]
!20 = metadata ! { i32 524324 , metadata !1 , metadata !"char" , metadata !1 , i32 0 , i64 8 , i64 8 , i64 0 , i32 0 , i32 6 } ; [ DW_TAG_base_type ]
!21 = metadata ! { i32 524545 , metadata !0 , metadata !"x" , metadata !1 , i32 33 , metadata !5 } ; [ DW_TAG_arg_variable ]
!22 = metadata ! { i32 524545 , metadata !6 , metadata !"b" , metadata !1 , i32 38 , metadata !10 } ; [ DW_TAG_arg_variable ]
!23 = metadata ! { i32 524545 , metadata !15 , metadata !"argc" , metadata !1 , i32 43 , metadata !5 } ; [ DW_TAG_arg_variable ]
!24 = metadata ! { i32 524545 , metadata !15 , metadata !"argv" , metadata !1 , i32 43 , metadata !18 } ; [ DW_TAG_arg_variable ]
!25 = metadata ! { i32 524544 , metadata !26 , metadata !"e" , metadata !1 , i32 44 , metadata !11 } ; [ DW_TAG_auto_variable ]
!26 = metadata ! { i32 524299 , metadata !15 , i32 43 , i32 0 } ; [ DW_TAG_lexical_block ]
!27 = metadata ! { i32 524340 , i32 0 , metadata !1 , metadata !"ret" , metadata !"ret" , metadata !"" , metadata !1 , i32 28 , metadata !5 , i1 false , i1 true , i32 * @ret } ; [ DW_TAG_variable ]
!28 = metadata ! { i32 33 , i32 0 , metadata !0 , null }
!29 = metadata ! { i32 35 , i32 0 , metadata !30 , null }
!30 = metadata ! { i32 524299 , metadata !0 , i32 34 , i32 0 } ; [ DW_TAG_lexical_block ]
!31 = metadata ! { i32 36 , i32 0 , metadata !30 , null }
!32 = metadata ! { i32 38 , i32 0 , metadata !6 , null }
!33 = metadata ! { i32 39 , i32 0 , metadata !34 , null }
!34 = metadata ! { i32 524299 , metadata !6 , i32 38 , i32 0 } ; [ DW_TAG_lexical_block ]
!35 = metadata ! { i32 40 , i32 0 , metadata !34 , null }
!36 = metadata ! { i32 43 , i32 0 , metadata !15 , null }
!37 = metadata ! { i32 44 , i32 0 , metadata !26 , null }
!38 = metadata ! { i32 45 , i32 0 , metadata !26 , null }
!39 = metadata ! { i32 46 , i32 0 , metadata !26 , null }
!40 = metadata ! { i32 48 , i32 0 , metadata !26 , null }
!41 = metadata ! { i32 49 , i32 0 , metadata !26 , null }