Mark tBX as an indirect branch rather than a return.
[oota-llvm.git] / test / CodeGen / X86 / 2011-05-18-byval-in-reg.ll
1 ; RUN: llc < %s | FileCheck %s
2 ; rdar://problem/6920088
3 ;target 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-f80:128:128"
4 target triple = "x86_64-apple-darwin9.0"
5 @"\01LC" = internal constant [2 x i8] c"a\00"           ; <[2 x i8]*> [#uses=1]
6 @"\01LC1" = internal constant [2 x i8] c"b\00"          ; <[2 x i8]*> [#uses=1]
7 @"\01LC2" = internal constant [2 x i8] c"c\00"          ; <[2 x i8]*> [#uses=1]
8 @"\01LC3" = internal constant [2 x i8] c"d\00"          ; <[2 x i8]*> [#uses=1]
9 @"\01LC4" = internal constant [2 x i8] c"e\00"          ; <[2 x i8]*> [#uses=1]
10 @"\01LC5" = internal constant [2 x i8] c"f\00"          ; <[2 x i8]*> [#uses=1]
11 @"\01LC6" = internal constant [2 x i8] c"g\00"          ; <[2 x i8]*> [#uses=1]
12 @"\01LC7" = internal constant [4 x i8] c"%s\0A\00"              ; <[4 x i8]*> [#uses=1]
13
14 define i32 @main(i32 %argc, i8** %argv) nounwind {
15 entry:
16         %tmp = alloca i8*               ; <i8**> [#uses=2]
17         %tmp1 = alloca i8*              ; <i8**> [#uses=2]
18         %tmp2 = alloca i8*              ; <i8**> [#uses=2]
19 ; CHECK:      leaq LC4(%rip), [[AREG:%[a-z]+]]
20 ; CHECK-NEXT: movq [[AREG]], [[STKOFF:[0-9]+]](%rsp)
21         store i8* getelementptr ([2 x i8]* @"\01LC4", i32 0, i32 0), i8** %tmp
22         store i8* getelementptr ([2 x i8]* @"\01LC5", i32 0, i32 0), i8** %tmp1
23         store i8* getelementptr ([2 x i8]* @"\01LC6", i32 0, i32 0), i8** %tmp2
24 ; The LC4 struct should be passed in %r9:
25 ; CHECK:      movq [[STKOFF]](%rsp), %r9
26         call void (i8**,  ...)* @generate_password(i8** null, 
27          i8* getelementptr ([2 x i8]* @"\01LC", i32 0, i32 0),
28          i8* getelementptr ([2 x i8]* @"\01LC1", i32 0, i32 0),
29          i8* getelementptr ([2 x i8]* @"\01LC2", i32 0, i32 0),
30          i8* getelementptr ([2 x i8]* @"\01LC3", i32 0, i32 0),
31          i8** byval %tmp, i8** byval %tmp1, i8** byval %tmp2)
32         ret i32 0
33 }
34
35 declare void @generate_password(i8** %pw, ...) nounwind