0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
1 ; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu -tailcallopt | FileCheck %s -check-prefix CHECK-TAIL
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 ; RUN: llc -verify-machineinstrs < %s -mtriple=aarch64-none-linux-gnu | FileCheck %s
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 ; Without tailcallopt fastcc still means the caller cleans up the
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 ; stack, so try to make sure this is respected.
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 define fastcc void @func_stack0() {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 ; CHECK-LABEL: func_stack0:
|
77
|
9 ; CHECK: mov x29, sp
|
95
|
10 ; CHECK: str w{{[0-9]+}}, [sp, #-32]!
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 ; CHECK-TAIL-LABEL: func_stack0:
|
77
|
13 ; CHECK-TAIL: stp x29, x30, [sp, #-16]!
|
|
14 ; CHECK-TAIL-NEXT: mov x29, sp
|
95
|
15 ; CHECK-TAIL: str w{{[0-9]+}}, [sp, #-32]!
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
17
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 call fastcc void @func_stack8([8 x i32] undef, i32 42)
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
19 ; CHECK: bl func_stack8
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
20 ; CHECK-NOT: sub sp, sp,
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
21
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
22 ; CHECK-TAIL: bl func_stack8
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 ; CHECK-TAIL: sub sp, sp, #16
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
24
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 call fastcc void @func_stack32([8 x i32] undef, i128 0, i128 9)
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27 ; CHECK: bl func_stack32
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 ; CHECK-NOT: sub sp, sp,
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
29
|
77
|
30
|
|
31 ; CHECK-TAIL: bl func_stack32
|
|
32 ; CHECK-TAIL: sub sp, sp, #32
|
|
33
|
|
34
|
|
35 call fastcc void @func_stack0()
|
|
36 ; CHECK: bl func_stack0
|
|
37 ; CHECK-NOT: sub sp, sp
|
|
38
|
|
39
|
|
40 ; CHECK-TAIL: bl func_stack0
|
|
41 ; CHECK-TAIL-NOT: sub sp, sp
|
|
42
|
|
43 ret void
|
|
44 ; CHECK: mov sp, x29
|
|
45 ; CHECK-NEXT: ldp x29, x30, [sp], #16
|
|
46 ; CHECK-NEXT: ret
|
|
47
|
|
48
|
|
49 ; CHECK-TAIL: mov sp, x29
|
|
50 ; CHECK-TAIL-NEXT: ldp x29, x30, [sp], #16
|
|
51 ; CHECK-TAIL-NEXT: ret
|
|
52 }
|
|
53
|
|
54 define fastcc void @func_stack8([8 x i32], i32 %stacked) {
|
|
55 ; CHECK-LABEL: func_stack8:
|
|
56 ; CHECK: stp x29, x30, [sp, #-16]!
|
|
57 ; CHECK: mov x29, sp
|
95
|
58 ; CHECK: str w{{[0-9]+}}, [sp, #-32]!
|
77
|
59
|
|
60
|
|
61 ; CHECK-TAIL-LABEL: func_stack8:
|
|
62 ; CHECK-TAIL: stp x29, x30, [sp, #-16]!
|
|
63 ; CHECK-TAIL: mov x29, sp
|
95
|
64 ; CHECK-TAIL: str w{{[0-9]+}}, [sp, #-32]!
|
77
|
65
|
|
66
|
|
67 call fastcc void @func_stack8([8 x i32] undef, i32 42)
|
|
68 ; CHECK: bl func_stack8
|
|
69 ; CHECK-NOT: sub sp, sp,
|
|
70
|
|
71
|
|
72 ; CHECK-TAIL: bl func_stack8
|
|
73 ; CHECK-TAIL: sub sp, sp, #16
|
|
74
|
|
75
|
|
76 call fastcc void @func_stack32([8 x i32] undef, i128 0, i128 9)
|
|
77 ; CHECK: bl func_stack32
|
|
78 ; CHECK-NOT: sub sp, sp,
|
|
79
|
|
80
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
81 ; CHECK-TAIL: bl func_stack32
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
82 ; CHECK-TAIL: sub sp, sp, #32
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
83
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
84
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 call fastcc void @func_stack0()
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86 ; CHECK: bl func_stack0
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
87 ; CHECK-NOT: sub sp, sp
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 ; CHECK-TAIL: bl func_stack0
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 ; CHECK-TAIL-NOT: sub sp, sp
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
91
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 ret void
|
77
|
93 ; CHECK: mov sp, x29
|
|
94 ; CHECK-NEXT: ldp x29, x30, [sp], #16
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
95 ; CHECK-NEXT: ret
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
96
|
77
|
97
|
|
98 ; CHECK-TAIL: mov sp, x29
|
|
99 ; CHECK-TAIL-NEXT: ldp x29, x30, [sp], #16
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100 ; CHECK-TAIL-NEXT: ret
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
101 }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
102
|
77
|
103 define fastcc void @func_stack32([8 x i32], i128 %stacked0, i128 %stacked1) {
|
|
104 ; CHECK-LABEL: func_stack32:
|
|
105 ; CHECK: mov x29, sp
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
106
|
77
|
107 ; CHECK-TAIL-LABEL: func_stack32:
|
|
108 ; CHECK-TAIL: mov x29, sp
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
109
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
110
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
111 call fastcc void @func_stack8([8 x i32] undef, i32 42)
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
112 ; CHECK: bl func_stack8
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
113 ; CHECK-NOT: sub sp, sp,
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
114
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
115 ; CHECK-TAIL: bl func_stack8
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
116 ; CHECK-TAIL: sub sp, sp, #16
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
117
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
118
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
119 call fastcc void @func_stack32([8 x i32] undef, i128 0, i128 9)
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
120 ; CHECK: bl func_stack32
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
121 ; CHECK-NOT: sub sp, sp,
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
122
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
123
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
124 ; CHECK-TAIL: bl func_stack32
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
125 ; CHECK-TAIL: sub sp, sp, #32
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
126
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
127
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
128 call fastcc void @func_stack0()
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
129 ; CHECK: bl func_stack0
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
130 ; CHECK-NOT: sub sp, sp
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
131
|
77
|
132
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
133 ; CHECK-TAIL: bl func_stack0
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
134 ; CHECK-TAIL-NOT: sub sp, sp
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
135
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
136 ret void
|
77
|
137 ; CHECK: mov sp, x29
|
|
138 ; CHECK-NEXT: ldp x29, x30, [sp], #16
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
139 ; CHECK-NEXT: ret
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
140
|
77
|
141 ; CHECK-TAIL: mov sp, x29
|
|
142 ; CHECK-TAIL-NEXT: ldp x29, x30, [sp], #16
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
143 ; CHECK-TAIL-NEXT: ret
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
144 }
|