blob: 8f9b9feb58f61e45b4aaf6045431f761b5beabcc [file] [log] [blame]
Tim Northovere0e3aef2013-01-31 12:12:40 +00001; 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
7define 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
47define 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
86define 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}