blob: 7909d2736b9c31971f4e8333cc0210132c23227d [file] [log] [blame]
Devang Patel394427b2010-05-26 20:18:50 +00001; RUN: llc -O2 < %s | FileCheck %s
Jakob Stoklund Olesencfafc542011-04-05 21:40:37 +00002; RUN: llc -O2 -regalloc=basic < %s | FileCheck %s
Devang Patel394427b2010-05-26 20:18:50 +00003target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
Daniel Dunbard2851392011-04-19 20:46:13 +00004target triple = "x86_64-apple-darwin10"
Devang Patel394427b2010-05-26 20:18:50 +00005
6%struct.a = type { i32, %struct.a* }
7
8@llvm.used = appending global [1 x i8*] [i8* bitcast (i8* (%struct.a*)* @bar to i8*)], section "llvm.metadata" ; <[1 x i8*]*> [#uses=0]
9
10define i8* @bar(%struct.a* %myvar) nounwind optsize noinline ssp {
11entry:
12 tail call void @llvm.dbg.value(metadata !{%struct.a* %myvar}, i64 0, metadata !8)
13 %0 = getelementptr inbounds %struct.a* %myvar, i64 0, i32 0, !dbg !28 ; <i32*> [#uses=1]
14 %1 = load i32* %0, align 8, !dbg !28 ; <i32> [#uses=1]
15 tail call void @foo(i32 %1) nounwind optsize noinline ssp, !dbg !28
16 %2 = bitcast %struct.a* %myvar to i8*, !dbg !30 ; <i8*> [#uses=1]
17 ret i8* %2, !dbg !30
18}
19
20declare void @foo(i32) nounwind optsize noinline ssp
21
22declare void @llvm.dbg.value(metadata, i64, metadata) nounwind readnone
23
24!llvm.dbg.gv = !{!0}
25!llvm.dbg.lv = !{!4, !8, !18, !25, !26}
26
27!0 = metadata !{i32 524340, i32 0, metadata !1, metadata !"ret", metadata !"ret", metadata !"", metadata !1, i32 7, metadata !3, i1 false, i1 true, null} ; [ DW_TAG_variable ]
28!1 = metadata !{i32 524329, metadata !"foo.c", metadata !"/tmp/", metadata !2} ; [ DW_TAG_file_type ]
29!2 = metadata !{i32 524305, i32 0, i32 1, metadata !"foo.c", metadata !"/tmp/", metadata !"4.2.1 (Based on Apple Inc. build 5658) (LLVM build)", i1 true, i1 true, metadata !"", i32 0} ; [ DW_TAG_compile_unit ]
30!3 = 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 ]
31!4 = metadata !{i32 524545, metadata !5, metadata !"x", metadata !1, i32 12, metadata !3} ; [ DW_TAG_arg_variable ]
32!5 = metadata !{i32 524334, i32 0, metadata !1, metadata !"foo", metadata !"foo", metadata !"foo", metadata !1, i32 13, metadata !6, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 true} ; [ DW_TAG_subprogram ]
33!6 = metadata !{i32 524309, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !7, i32 0, null} ; [ DW_TAG_subroutine_type ]
34!7 = metadata !{null, metadata !3}
35!8 = metadata !{i32 524545, metadata !9, metadata !"myvar", metadata !1, i32 17, metadata !13} ; [ DW_TAG_arg_variable ]
36!9 = metadata !{i32 524334, i32 0, metadata !1, metadata !"bar", metadata !"bar", metadata !"bar", metadata !1, i32 17, metadata !10, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 true} ; [ DW_TAG_subprogram ]
37!10 = metadata !{i32 524309, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !11, i32 0, null} ; [ DW_TAG_subroutine_type ]
38!11 = metadata !{metadata !12, metadata !13}
39!12 = metadata !{i32 524303, metadata !1, metadata !"", metadata !1, i32 0, i64 64, i64 64, i64 0, i32 0, null} ; [ DW_TAG_pointer_type ]
40!13 = metadata !{i32 524303, metadata !1, metadata !"", metadata !1, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !14} ; [ DW_TAG_pointer_type ]
41!14 = metadata !{i32 524307, metadata !1, metadata !"a", metadata !1, i32 2, i64 128, i64 64, i64 0, i32 0, null, metadata !15, i32 0, null} ; [ DW_TAG_structure_type ]
42!15 = metadata !{metadata !16, metadata !17}
43!16 = metadata !{i32 524301, metadata !14, metadata !"c", metadata !1, i32 3, i64 32, i64 32, i64 0, i32 0, metadata !3} ; [ DW_TAG_member ]
44!17 = metadata !{i32 524301, metadata !14, metadata !"d", metadata !1, i32 4, i64 64, i64 64, i64 64, i32 0, metadata !13} ; [ DW_TAG_member ]
45!18 = metadata !{i32 524545, metadata !19, metadata !"argc", metadata !1, i32 22, metadata !3} ; [ DW_TAG_arg_variable ]
46!19 = metadata !{i32 524334, i32 0, metadata !1, metadata !"main", metadata !"main", metadata !"main", metadata !1, i32 22, metadata !20, i1 false, i1 true, i32 0, i32 0, null, i1 false, i1 true} ; [ DW_TAG_subprogram ]
47!20 = metadata !{i32 524309, metadata !1, metadata !"", metadata !1, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !21, i32 0, null} ; [ DW_TAG_subroutine_type ]
48!21 = metadata !{metadata !3, metadata !3, metadata !22}
49!22 = metadata !{i32 524303, metadata !1, metadata !"", metadata !1, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !23} ; [ DW_TAG_pointer_type ]
50!23 = metadata !{i32 524303, metadata !1, metadata !"", metadata !1, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !24} ; [ DW_TAG_pointer_type ]
51!24 = 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 ]
52!25 = metadata !{i32 524545, metadata !19, metadata !"argv", metadata !1, i32 22, metadata !22} ; [ DW_TAG_arg_variable ]
53!26 = metadata !{i32 524544, metadata !27, metadata !"e", metadata !1, i32 23, metadata !14} ; [ DW_TAG_auto_variable ]
54!27 = metadata !{i32 524299, metadata !19, i32 22, i32 0} ; [ DW_TAG_lexical_block ]
55!28 = metadata !{i32 18, i32 0, metadata !29, null}
56!29 = metadata !{i32 524299, metadata !9, i32 17, i32 0} ; [ DW_TAG_lexical_block ]
57!30 = metadata !{i32 19, i32 0, metadata !29, null}
58
Jakob Stoklund Olesen15a3ea02011-03-25 17:20:59 +000059; The variable bar:myvar changes registers after the first movq.
60; It is cobbered by popq %rbx
61; CHECK: movq
62; CHECK-NEXT: [[LABEL:Ltmp[0-9]*]]
63; CHECK: .loc 1 19 0
64; CHECK: popq
65; CHECK-NEXT: [[CLOBBER:Ltmp[0-9]*]]
66
67
Devang Patel80250682010-05-26 23:55:23 +000068; CHECK: Ldebug_loc0:
Devang Patel394427b2010-05-26 20:18:50 +000069; CHECK-NEXT: .quad Lfunc_begin0
Jakob Stoklund Olesen15a3ea02011-03-25 17:20:59 +000070; CHECK-NEXT: .quad [[LABEL]]
Rafael Espindola5b23b7f2011-05-27 22:05:41 +000071; CHECK-NEXT: Lset{{.*}} = Ltmp{{.*}}-Ltmp{{.*}} ## Loc expr size
72; CHECK-NEXT: .short Lset{{.*}}
73; CHECK-NEXT: Ltmp{{.*}}:
Devang Patel394427b2010-05-26 20:18:50 +000074; CHECK-NEXT: .byte 85
Rafael Espindola5b23b7f2011-05-27 22:05:41 +000075; CHECK-NEXT: Ltmp{{.*}}:
Jakob Stoklund Olesen15a3ea02011-03-25 17:20:59 +000076; CHECK-NEXT: .quad [[LABEL]]
77; CHECK-NEXT: .quad [[CLOBBER]]
Rafael Espindola5b23b7f2011-05-27 22:05:41 +000078; CHECK-NEXT: Lset{{.*}} = Ltmp{{.*}}-Ltmp{{.*}} ## Loc expr size
79; CHECK-NEXT: .short Lset{{.*}}
80; CHECK-NEXT: Ltmp{{.*}}:
Devang Patel394427b2010-05-26 20:18:50 +000081; CHECK-NEXT: .byte 83
Rafael Espindola5b23b7f2011-05-27 22:05:41 +000082; CHECK-NEXT: Ltmp{{.*}}: