Add AArch64 as an experimental target.
[oota-llvm.git] / test / CodeGen / AArch64 / fastcc.ll
1 ; RUN: llc -verify-machineinstrs < %s -march=aarch64 -tailcallopt | FileCheck %s -check-prefix CHECK-TAIL
2 ; RUN: llc -verify-machineinstrs < %s -march=aarch64 | FileCheck %s
3
4 ; Without tailcallopt fastcc still means the caller cleans up the
5 ; stack, so try to make sure this is respected.
6
7 define fastcc void @func_stack0() {
8 ; CHECK: func_stack0:
9 ; CHECK: sub sp, sp, #48
10
11 ; CHECK-TAIL: func_stack0:
12 ; CHECK-TAIL: sub sp, sp, #48
13
14
15   call fastcc void @func_stack8([8 x i32] undef, i32 42)
16 ; CHECK:  bl func_stack8
17 ; CHECK-NOT: sub sp, sp,
18
19 ; CHECK-TAIL: bl func_stack8
20 ; CHECK-TAIL: sub sp, sp, #16
21
22
23   call fastcc void @func_stack32([8 x i32] undef, i128 0, i128 9)
24 ; CHECK: bl func_stack32
25 ; CHECK-NOT: sub sp, sp,
26
27 ; CHECK-TAIL: bl func_stack32
28 ; CHECK-TAIL: sub sp, sp, #32
29
30
31   call fastcc void @func_stack0()
32 ; CHECK: bl func_stack0
33 ; CHECK-NOT: sub sp, sp
34
35 ; CHECK-TAIL: bl func_stack0
36 ; CHECK-TAIL-NOT: sub sp, sp
37
38   ret void
39 ; CHECK: add sp, sp, #48
40 ; CHECK-NEXT: ret
41
42 ; CHECK-TAIL: add sp, sp, #48
43 ; CHECK-TAIL-NEXT: ret
44
45 }
46
47 define fastcc void @func_stack8([8 x i32], i32 %stacked) {
48 ; CHECK: func_stack8:
49 ; CHECK: sub sp, sp, #48
50
51 ; CHECK-TAIL: func_stack8:
52 ; CHECK-TAIL: sub sp, sp, #48
53
54
55   call fastcc void @func_stack8([8 x i32] undef, i32 42)
56 ; CHECK:  bl func_stack8
57 ; CHECK-NOT: sub sp, sp,
58
59 ; CHECK-TAIL: bl func_stack8
60 ; CHECK-TAIL: sub sp, sp, #16
61
62
63   call fastcc void @func_stack32([8 x i32] undef, i128 0, i128 9)
64 ; CHECK: bl func_stack32
65 ; CHECK-NOT: sub sp, sp,
66
67 ; CHECK-TAIL: bl func_stack32
68 ; CHECK-TAIL: sub sp, sp, #32
69
70
71   call fastcc void @func_stack0()
72 ; CHECK: bl func_stack0
73 ; CHECK-NOT: sub sp, sp
74
75 ; CHECK-TAIL: bl func_stack0
76 ; CHECK-TAIL-NOT: sub sp, sp
77
78   ret void
79 ; CHECK: add sp, sp, #48
80 ; CHECK-NEXT: ret
81
82 ; CHECK-TAIL: add sp, sp, #64
83 ; CHECK-TAIL-NEXT: ret
84 }
85
86 define fastcc void @func_stack32([8 x i32], i128 %stacked0, i128 %stacked1) {
87 ; CHECK: func_stack32:
88 ; CHECK: sub sp, sp, #48
89
90 ; CHECK-TAIL: func_stack32:
91 ; CHECK-TAIL: sub sp, sp, #48
92
93
94   call fastcc void @func_stack8([8 x i32] undef, i32 42)
95 ; CHECK:  bl func_stack8
96 ; CHECK-NOT: sub sp, sp,
97
98 ; CHECK-TAIL: bl func_stack8
99 ; CHECK-TAIL: sub sp, sp, #16
100
101
102   call fastcc void @func_stack32([8 x i32] undef, i128 0, i128 9)
103 ; CHECK: bl func_stack32
104 ; CHECK-NOT: sub sp, sp,
105
106 ; CHECK-TAIL: bl func_stack32
107 ; CHECK-TAIL: sub sp, sp, #32
108
109
110   call fastcc void @func_stack0()
111 ; CHECK: bl func_stack0
112 ; CHECK-NOT: sub sp, sp
113
114 ; CHECK-TAIL: bl func_stack0
115 ; CHECK-TAIL-NOT: sub sp, sp
116
117   ret void
118 ; CHECK: add sp, sp, #48
119 ; CHECK-NEXT: ret
120
121 ; CHECK-TAIL: add sp, sp, #80
122 ; CHECK-TAIL-NEXT: ret
123 }