xref: /llvm-project/llvm/test/CodeGen/LoongArch/stack-realignment.ll (revision 9d4f7f44b64d87d1068859906f43b7ce03a7388b)
1daf067daSwanglei; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch32 -mattr=+d --verify-machineinstrs < %s \
3daf067daSwanglei; RUN:   | FileCheck %s --check-prefix=LA32
4*9d4f7f44Swanglei; RUN: llc --mtriple=loongarch64 -mattr=+d --verify-machineinstrs < %s \
5daf067daSwanglei; RUN:   | FileCheck %s --check-prefix=LA64
6daf067daSwanglei
7779df382SNikita Popovdeclare void @callee(ptr)
8daf067daSwanglei
9daf067daSwangleidefine void @caller32() {
10daf067daSwanglei; LA32-LABEL: caller32:
11daf067daSwanglei; LA32:       # %bb.0:
12daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -32
13daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 32
14daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 28 # 4-byte Folded Spill
15daf067daSwanglei; LA32-NEXT:    st.w $fp, $sp, 24 # 4-byte Folded Spill
16daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
17daf067daSwanglei; LA32-NEXT:    .cfi_offset 22, -8
18daf067daSwanglei; LA32-NEXT:    addi.w $fp, $sp, 32
19daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa 22, 0
201bb77664Swanglei; LA32-NEXT:    bstrins.w $sp, $zero, 4, 0
21daf067daSwanglei; LA32-NEXT:    addi.w $a0, $sp, 0
22daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
23daf067daSwanglei; LA32-NEXT:    addi.w $sp, $fp, -32
24daf067daSwanglei; LA32-NEXT:    ld.w $fp, $sp, 24 # 4-byte Folded Reload
25daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 28 # 4-byte Folded Reload
26daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 32
27daf067daSwanglei; LA32-NEXT:    ret
28daf067daSwanglei;
29daf067daSwanglei; LA64-LABEL: caller32:
30daf067daSwanglei; LA64:       # %bb.0:
31daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -32
32daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 32
33daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 24 # 8-byte Folded Spill
34daf067daSwanglei; LA64-NEXT:    st.d $fp, $sp, 16 # 8-byte Folded Spill
35daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
36daf067daSwanglei; LA64-NEXT:    .cfi_offset 22, -16
37daf067daSwanglei; LA64-NEXT:    addi.d $fp, $sp, 32
38daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa 22, 0
391bb77664Swanglei; LA64-NEXT:    bstrins.d $sp, $zero, 4, 0
40daf067daSwanglei; LA64-NEXT:    addi.d $a0, $sp, 0
41daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
42daf067daSwanglei; LA64-NEXT:    addi.d $sp, $fp, -32
43daf067daSwanglei; LA64-NEXT:    ld.d $fp, $sp, 16 # 8-byte Folded Reload
44daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 24 # 8-byte Folded Reload
45daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 32
46daf067daSwanglei; LA64-NEXT:    ret
47daf067daSwanglei  %1 = alloca i8, align 32
48779df382SNikita Popov  call void @callee(ptr %1)
49daf067daSwanglei  ret void
50daf067daSwanglei}
51daf067daSwanglei
52daf067daSwangleidefine void @caller_no_realign32() "no-realign-stack" {
53daf067daSwanglei; LA32-LABEL: caller_no_realign32:
54daf067daSwanglei; LA32:       # %bb.0:
55daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -16
56daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 16
57daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
58daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
59daf067daSwanglei; LA32-NEXT:    addi.w $a0, $sp, 0
60daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
61daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
62daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 16
63daf067daSwanglei; LA32-NEXT:    ret
64daf067daSwanglei;
65daf067daSwanglei; LA64-LABEL: caller_no_realign32:
66daf067daSwanglei; LA64:       # %bb.0:
67daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -16
68daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 16
69daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
70daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
71daf067daSwanglei; LA64-NEXT:    addi.d $a0, $sp, 0
72daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
73daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
74daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 16
75daf067daSwanglei; LA64-NEXT:    ret
76daf067daSwanglei  %1 = alloca i8, align 32
77779df382SNikita Popov  call void @callee(ptr %1)
78daf067daSwanglei  ret void
79daf067daSwanglei}
80daf067daSwanglei
81daf067daSwangleidefine void @caller64() {
82daf067daSwanglei; LA32-LABEL: caller64:
83daf067daSwanglei; LA32:       # %bb.0:
84daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -64
85daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 64
86daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 60 # 4-byte Folded Spill
87daf067daSwanglei; LA32-NEXT:    st.w $fp, $sp, 56 # 4-byte Folded Spill
88daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
89daf067daSwanglei; LA32-NEXT:    .cfi_offset 22, -8
90daf067daSwanglei; LA32-NEXT:    addi.w $fp, $sp, 64
91daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa 22, 0
921bb77664Swanglei; LA32-NEXT:    bstrins.w $sp, $zero, 5, 0
93daf067daSwanglei; LA32-NEXT:    addi.w $a0, $sp, 0
94daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
95daf067daSwanglei; LA32-NEXT:    addi.w $sp, $fp, -64
96daf067daSwanglei; LA32-NEXT:    ld.w $fp, $sp, 56 # 4-byte Folded Reload
97daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 60 # 4-byte Folded Reload
98daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 64
99daf067daSwanglei; LA32-NEXT:    ret
100daf067daSwanglei;
101daf067daSwanglei; LA64-LABEL: caller64:
102daf067daSwanglei; LA64:       # %bb.0:
103daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -64
104daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 64
105daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 56 # 8-byte Folded Spill
106daf067daSwanglei; LA64-NEXT:    st.d $fp, $sp, 48 # 8-byte Folded Spill
107daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
108daf067daSwanglei; LA64-NEXT:    .cfi_offset 22, -16
109daf067daSwanglei; LA64-NEXT:    addi.d $fp, $sp, 64
110daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa 22, 0
1111bb77664Swanglei; LA64-NEXT:    bstrins.d $sp, $zero, 5, 0
112daf067daSwanglei; LA64-NEXT:    addi.d $a0, $sp, 0
113daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
114daf067daSwanglei; LA64-NEXT:    addi.d $sp, $fp, -64
115daf067daSwanglei; LA64-NEXT:    ld.d $fp, $sp, 48 # 8-byte Folded Reload
116daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 56 # 8-byte Folded Reload
117daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 64
118daf067daSwanglei; LA64-NEXT:    ret
119daf067daSwanglei  %1 = alloca i8, align 64
120779df382SNikita Popov  call void @callee(ptr %1)
121daf067daSwanglei  ret void
122daf067daSwanglei}
123daf067daSwanglei
124daf067daSwangleidefine void @caller_no_realign64() "no-realign-stack" {
125daf067daSwanglei; LA32-LABEL: caller_no_realign64:
126daf067daSwanglei; LA32:       # %bb.0:
127daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -16
128daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 16
129daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
130daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
131daf067daSwanglei; LA32-NEXT:    addi.w $a0, $sp, 0
132daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
133daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
134daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 16
135daf067daSwanglei; LA32-NEXT:    ret
136daf067daSwanglei;
137daf067daSwanglei; LA64-LABEL: caller_no_realign64:
138daf067daSwanglei; LA64:       # %bb.0:
139daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -16
140daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 16
141daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
142daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
143daf067daSwanglei; LA64-NEXT:    addi.d $a0, $sp, 0
144daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
145daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
146daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 16
147daf067daSwanglei; LA64-NEXT:    ret
148daf067daSwanglei  %1 = alloca i8, align 64
149779df382SNikita Popov  call void @callee(ptr %1)
150daf067daSwanglei  ret void
151daf067daSwanglei}
152daf067daSwanglei
153daf067daSwangleidefine void @caller128() {
154daf067daSwanglei; LA32-LABEL: caller128:
155daf067daSwanglei; LA32:       # %bb.0:
156daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -128
157daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 128
158daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 124 # 4-byte Folded Spill
159daf067daSwanglei; LA32-NEXT:    st.w $fp, $sp, 120 # 4-byte Folded Spill
160daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
161daf067daSwanglei; LA32-NEXT:    .cfi_offset 22, -8
162daf067daSwanglei; LA32-NEXT:    addi.w $fp, $sp, 128
163daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa 22, 0
1641bb77664Swanglei; LA32-NEXT:    bstrins.w $sp, $zero, 6, 0
165daf067daSwanglei; LA32-NEXT:    addi.w $a0, $sp, 0
166daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
167daf067daSwanglei; LA32-NEXT:    addi.w $sp, $fp, -128
168daf067daSwanglei; LA32-NEXT:    ld.w $fp, $sp, 120 # 4-byte Folded Reload
169daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 124 # 4-byte Folded Reload
170daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 128
171daf067daSwanglei; LA32-NEXT:    ret
172daf067daSwanglei;
173daf067daSwanglei; LA64-LABEL: caller128:
174daf067daSwanglei; LA64:       # %bb.0:
175daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -128
176daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 128
177daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 120 # 8-byte Folded Spill
178daf067daSwanglei; LA64-NEXT:    st.d $fp, $sp, 112 # 8-byte Folded Spill
179daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
180daf067daSwanglei; LA64-NEXT:    .cfi_offset 22, -16
181daf067daSwanglei; LA64-NEXT:    addi.d $fp, $sp, 128
182daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa 22, 0
1831bb77664Swanglei; LA64-NEXT:    bstrins.d $sp, $zero, 6, 0
184daf067daSwanglei; LA64-NEXT:    addi.d $a0, $sp, 0
185daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
186daf067daSwanglei; LA64-NEXT:    addi.d $sp, $fp, -128
187daf067daSwanglei; LA64-NEXT:    ld.d $fp, $sp, 112 # 8-byte Folded Reload
188daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 120 # 8-byte Folded Reload
189daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 128
190daf067daSwanglei; LA64-NEXT:    ret
191daf067daSwanglei  %1 = alloca i8, align 128
192779df382SNikita Popov  call void @callee(ptr %1)
193daf067daSwanglei  ret void
194daf067daSwanglei}
195daf067daSwanglei
196daf067daSwangleidefine void @caller_no_realign128() "no-realign-stack" {
197daf067daSwanglei; LA32-LABEL: caller_no_realign128:
198daf067daSwanglei; LA32:       # %bb.0:
199daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -16
200daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 16
201daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
202daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
203daf067daSwanglei; LA32-NEXT:    addi.w $a0, $sp, 0
204daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
205daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
206daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 16
207daf067daSwanglei; LA32-NEXT:    ret
208daf067daSwanglei;
209daf067daSwanglei; LA64-LABEL: caller_no_realign128:
210daf067daSwanglei; LA64:       # %bb.0:
211daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -16
212daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 16
213daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
214daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
215daf067daSwanglei; LA64-NEXT:    addi.d $a0, $sp, 0
216daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
217daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
218daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 16
219daf067daSwanglei; LA64-NEXT:    ret
220daf067daSwanglei  %1 = alloca i8, align 128
221779df382SNikita Popov  call void @callee(ptr %1)
222daf067daSwanglei  ret void
223daf067daSwanglei}
224daf067daSwanglei
225daf067daSwangleidefine void @caller256() {
226daf067daSwanglei; LA32-LABEL: caller256:
227daf067daSwanglei; LA32:       # %bb.0:
228daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -256
229daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 256
230daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 252 # 4-byte Folded Spill
231daf067daSwanglei; LA32-NEXT:    st.w $fp, $sp, 248 # 4-byte Folded Spill
232daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
233daf067daSwanglei; LA32-NEXT:    .cfi_offset 22, -8
234daf067daSwanglei; LA32-NEXT:    addi.w $fp, $sp, 256
235daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa 22, 0
2361bb77664Swanglei; LA32-NEXT:    bstrins.w $sp, $zero, 7, 0
237daf067daSwanglei; LA32-NEXT:    addi.w $a0, $sp, 0
238daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
239daf067daSwanglei; LA32-NEXT:    addi.w $sp, $fp, -256
240daf067daSwanglei; LA32-NEXT:    ld.w $fp, $sp, 248 # 4-byte Folded Reload
241daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 252 # 4-byte Folded Reload
242daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 256
243daf067daSwanglei; LA32-NEXT:    ret
244daf067daSwanglei;
245daf067daSwanglei; LA64-LABEL: caller256:
246daf067daSwanglei; LA64:       # %bb.0:
247daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -256
248daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 256
249daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 248 # 8-byte Folded Spill
250daf067daSwanglei; LA64-NEXT:    st.d $fp, $sp, 240 # 8-byte Folded Spill
251daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
252daf067daSwanglei; LA64-NEXT:    .cfi_offset 22, -16
253daf067daSwanglei; LA64-NEXT:    addi.d $fp, $sp, 256
254daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa 22, 0
2551bb77664Swanglei; LA64-NEXT:    bstrins.d $sp, $zero, 7, 0
256daf067daSwanglei; LA64-NEXT:    addi.d $a0, $sp, 0
257daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
258daf067daSwanglei; LA64-NEXT:    addi.d $sp, $fp, -256
259daf067daSwanglei; LA64-NEXT:    ld.d $fp, $sp, 240 # 8-byte Folded Reload
260daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 248 # 8-byte Folded Reload
261daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 256
262daf067daSwanglei; LA64-NEXT:    ret
263daf067daSwanglei  %1 = alloca i8, align 256
264779df382SNikita Popov  call void @callee(ptr %1)
265daf067daSwanglei  ret void
266daf067daSwanglei}
267daf067daSwanglei
268daf067daSwangleidefine void @caller_no_realign256() "no-realign-stack" {
269daf067daSwanglei; LA32-LABEL: caller_no_realign256:
270daf067daSwanglei; LA32:       # %bb.0:
271daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -16
272daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 16
273daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
274daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
275daf067daSwanglei; LA32-NEXT:    addi.w $a0, $sp, 0
276daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
277daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
278daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 16
279daf067daSwanglei; LA32-NEXT:    ret
280daf067daSwanglei;
281daf067daSwanglei; LA64-LABEL: caller_no_realign256:
282daf067daSwanglei; LA64:       # %bb.0:
283daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -16
284daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 16
285daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
286daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
287daf067daSwanglei; LA64-NEXT:    addi.d $a0, $sp, 0
288daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
289daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
290daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 16
291daf067daSwanglei; LA64-NEXT:    ret
292daf067daSwanglei  %1 = alloca i8, align 256
293779df382SNikita Popov  call void @callee(ptr %1)
294daf067daSwanglei  ret void
295daf067daSwanglei}
296daf067daSwanglei
297daf067daSwangleidefine void @caller512() {
298daf067daSwanglei; LA32-LABEL: caller512:
299daf067daSwanglei; LA32:       # %bb.0:
3004e2364a2Swanglei; LA32-NEXT:    addi.w $sp, $sp, -1024
3014e2364a2Swanglei; LA32-NEXT:    .cfi_def_cfa_offset 1024
3024e2364a2Swanglei; LA32-NEXT:    st.w $ra, $sp, 1020 # 4-byte Folded Spill
3034e2364a2Swanglei; LA32-NEXT:    st.w $fp, $sp, 1016 # 4-byte Folded Spill
304daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
305daf067daSwanglei; LA32-NEXT:    .cfi_offset 22, -8
3064e2364a2Swanglei; LA32-NEXT:    addi.w $fp, $sp, 1024
307daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa 22, 0
3081bb77664Swanglei; LA32-NEXT:    bstrins.w $sp, $zero, 8, 0
3094e2364a2Swanglei; LA32-NEXT:    addi.w $a0, $sp, 512
310daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
3114e2364a2Swanglei; LA32-NEXT:    addi.w $sp, $fp, -1024
3124e2364a2Swanglei; LA32-NEXT:    ld.w $fp, $sp, 1016 # 4-byte Folded Reload
3134e2364a2Swanglei; LA32-NEXT:    ld.w $ra, $sp, 1020 # 4-byte Folded Reload
3144e2364a2Swanglei; LA32-NEXT:    addi.w $sp, $sp, 1024
315daf067daSwanglei; LA32-NEXT:    ret
316daf067daSwanglei;
317daf067daSwanglei; LA64-LABEL: caller512:
318daf067daSwanglei; LA64:       # %bb.0:
3194e2364a2Swanglei; LA64-NEXT:    addi.d $sp, $sp, -1024
3204e2364a2Swanglei; LA64-NEXT:    .cfi_def_cfa_offset 1024
3214e2364a2Swanglei; LA64-NEXT:    st.d $ra, $sp, 1016 # 8-byte Folded Spill
3224e2364a2Swanglei; LA64-NEXT:    st.d $fp, $sp, 1008 # 8-byte Folded Spill
323daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
324daf067daSwanglei; LA64-NEXT:    .cfi_offset 22, -16
3254e2364a2Swanglei; LA64-NEXT:    addi.d $fp, $sp, 1024
326daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa 22, 0
3271bb77664Swanglei; LA64-NEXT:    bstrins.d $sp, $zero, 8, 0
3284e2364a2Swanglei; LA64-NEXT:    addi.d $a0, $sp, 512
329daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
3304e2364a2Swanglei; LA64-NEXT:    addi.d $sp, $fp, -1024
3314e2364a2Swanglei; LA64-NEXT:    ld.d $fp, $sp, 1008 # 8-byte Folded Reload
3324e2364a2Swanglei; LA64-NEXT:    ld.d $ra, $sp, 1016 # 8-byte Folded Reload
3334e2364a2Swanglei; LA64-NEXT:    addi.d $sp, $sp, 1024
334daf067daSwanglei; LA64-NEXT:    ret
335daf067daSwanglei  %1 = alloca i8, align 512
336779df382SNikita Popov  call void @callee(ptr %1)
337daf067daSwanglei  ret void
338daf067daSwanglei}
339daf067daSwanglei
340daf067daSwangleidefine void @caller_no_realign512() "no-realign-stack" {
341daf067daSwanglei; LA32-LABEL: caller_no_realign512:
342daf067daSwanglei; LA32:       # %bb.0:
343daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -16
344daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 16
345daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
346daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
347daf067daSwanglei; LA32-NEXT:    addi.w $a0, $sp, 0
348daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
349daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
350daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 16
351daf067daSwanglei; LA32-NEXT:    ret
352daf067daSwanglei;
353daf067daSwanglei; LA64-LABEL: caller_no_realign512:
354daf067daSwanglei; LA64:       # %bb.0:
355daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -16
356daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 16
357daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
358daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
359daf067daSwanglei; LA64-NEXT:    addi.d $a0, $sp, 0
360daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
361daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
362daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 16
363daf067daSwanglei; LA64-NEXT:    ret
364daf067daSwanglei  %1 = alloca i8, align 512
365779df382SNikita Popov  call void @callee(ptr %1)
366daf067daSwanglei  ret void
367daf067daSwanglei}
368daf067daSwanglei
369daf067daSwangleidefine void @caller1024() {
370daf067daSwanglei; LA32-LABEL: caller1024:
371daf067daSwanglei; LA32:       # %bb.0:
3724e2364a2Swanglei; LA32-NEXT:    addi.w $sp, $sp, -2032
3734e2364a2Swanglei; LA32-NEXT:    .cfi_def_cfa_offset 2032
3744e2364a2Swanglei; LA32-NEXT:    st.w $ra, $sp, 2028 # 4-byte Folded Spill
3754e2364a2Swanglei; LA32-NEXT:    st.w $fp, $sp, 2024 # 4-byte Folded Spill
376daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
377daf067daSwanglei; LA32-NEXT:    .cfi_offset 22, -8
3784e2364a2Swanglei; LA32-NEXT:    addi.w $fp, $sp, 2032
379daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa 22, 0
3804e2364a2Swanglei; LA32-NEXT:    addi.w $sp, $sp, -16
3811bb77664Swanglei; LA32-NEXT:    bstrins.w $sp, $zero, 9, 0
3824e2364a2Swanglei; LA32-NEXT:    addi.w $a0, $sp, 1024
383daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
3844e2364a2Swanglei; LA32-NEXT:    addi.w $sp, $fp, -2048
3854e2364a2Swanglei; LA32-NEXT:    addi.w $sp, $sp, 16
3864e2364a2Swanglei; LA32-NEXT:    ld.w $fp, $sp, 2024 # 4-byte Folded Reload
3874e2364a2Swanglei; LA32-NEXT:    ld.w $ra, $sp, 2028 # 4-byte Folded Reload
3884e2364a2Swanglei; LA32-NEXT:    addi.w $sp, $sp, 2032
389daf067daSwanglei; LA32-NEXT:    ret
390daf067daSwanglei;
391daf067daSwanglei; LA64-LABEL: caller1024:
392daf067daSwanglei; LA64:       # %bb.0:
3934e2364a2Swanglei; LA64-NEXT:    addi.d $sp, $sp, -2032
3944e2364a2Swanglei; LA64-NEXT:    .cfi_def_cfa_offset 2032
3954e2364a2Swanglei; LA64-NEXT:    st.d $ra, $sp, 2024 # 8-byte Folded Spill
3964e2364a2Swanglei; LA64-NEXT:    st.d $fp, $sp, 2016 # 8-byte Folded Spill
397daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
398daf067daSwanglei; LA64-NEXT:    .cfi_offset 22, -16
3994e2364a2Swanglei; LA64-NEXT:    addi.d $fp, $sp, 2032
400daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa 22, 0
4014e2364a2Swanglei; LA64-NEXT:    addi.d $sp, $sp, -16
4021bb77664Swanglei; LA64-NEXT:    bstrins.d $sp, $zero, 9, 0
4034e2364a2Swanglei; LA64-NEXT:    addi.d $a0, $sp, 1024
404daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
4054e2364a2Swanglei; LA64-NEXT:    addi.d $sp, $fp, -2048
4064e2364a2Swanglei; LA64-NEXT:    addi.d $sp, $sp, 16
4074e2364a2Swanglei; LA64-NEXT:    ld.d $fp, $sp, 2016 # 8-byte Folded Reload
4084e2364a2Swanglei; LA64-NEXT:    ld.d $ra, $sp, 2024 # 8-byte Folded Reload
4094e2364a2Swanglei; LA64-NEXT:    addi.d $sp, $sp, 2032
410daf067daSwanglei; LA64-NEXT:    ret
411daf067daSwanglei  %1 = alloca i8, align 1024
412779df382SNikita Popov  call void @callee(ptr %1)
413daf067daSwanglei  ret void
414daf067daSwanglei}
415daf067daSwanglei
416daf067daSwangleidefine void @caller_no_realign1024() "no-realign-stack" {
417daf067daSwanglei; LA32-LABEL: caller_no_realign1024:
418daf067daSwanglei; LA32:       # %bb.0:
419daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -16
420daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 16
421daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
422daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
423daf067daSwanglei; LA32-NEXT:    addi.w $a0, $sp, 0
424daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
425daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
426daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 16
427daf067daSwanglei; LA32-NEXT:    ret
428daf067daSwanglei;
429daf067daSwanglei; LA64-LABEL: caller_no_realign1024:
430daf067daSwanglei; LA64:       # %bb.0:
431daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -16
432daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 16
433daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
434daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
435daf067daSwanglei; LA64-NEXT:    addi.d $a0, $sp, 0
436daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
437daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
438daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 16
439daf067daSwanglei; LA64-NEXT:    ret
440daf067daSwanglei  %1 = alloca i8, align 1024
441779df382SNikita Popov  call void @callee(ptr %1)
442daf067daSwanglei  ret void
443daf067daSwanglei}
444daf067daSwanglei
445daf067daSwangleidefine void @caller2048() {
446daf067daSwanglei; LA32-LABEL: caller2048:
447daf067daSwanglei; LA32:       # %bb.0:
448f589e506Swanglei; LA32-NEXT:    addi.w $sp, $sp, -2032
449f589e506Swanglei; LA32-NEXT:    .cfi_def_cfa_offset 2032
450f589e506Swanglei; LA32-NEXT:    st.w $ra, $sp, 2028 # 4-byte Folded Spill
451f589e506Swanglei; LA32-NEXT:    st.w $fp, $sp, 2024 # 4-byte Folded Spill
452daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
453daf067daSwanglei; LA32-NEXT:    .cfi_offset 22, -8
454daf067daSwanglei; LA32-NEXT:    addi.w $fp, $sp, 2032
455daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa 22, 0
4564e2364a2Swanglei; LA32-NEXT:    addi.w $sp, $sp, -2048
457f589e506Swanglei; LA32-NEXT:    addi.w $sp, $sp, -16
4581bb77664Swanglei; LA32-NEXT:    bstrins.w $sp, $zero, 10, 0
4594e2364a2Swanglei; LA32-NEXT:    ori $a0, $zero, 2048
4604e2364a2Swanglei; LA32-NEXT:    add.w $a0, $sp, $a0
461daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
4624e2364a2Swanglei; LA32-NEXT:    lu12i.w $a0, 1
4634e2364a2Swanglei; LA32-NEXT:    sub.w $sp, $fp, $a0
4644e2364a2Swanglei; LA32-NEXT:    addi.w $sp, $sp, 2032
4654e2364a2Swanglei; LA32-NEXT:    addi.w $sp, $sp, 32
466f589e506Swanglei; LA32-NEXT:    ld.w $fp, $sp, 2024 # 4-byte Folded Reload
467f589e506Swanglei; LA32-NEXT:    ld.w $ra, $sp, 2028 # 4-byte Folded Reload
468f589e506Swanglei; LA32-NEXT:    addi.w $sp, $sp, 2032
469daf067daSwanglei; LA32-NEXT:    ret
470daf067daSwanglei;
471daf067daSwanglei; LA64-LABEL: caller2048:
472daf067daSwanglei; LA64:       # %bb.0:
473f589e506Swanglei; LA64-NEXT:    addi.d $sp, $sp, -2032
474f589e506Swanglei; LA64-NEXT:    .cfi_def_cfa_offset 2032
475f589e506Swanglei; LA64-NEXT:    st.d $ra, $sp, 2024 # 8-byte Folded Spill
476f589e506Swanglei; LA64-NEXT:    st.d $fp, $sp, 2016 # 8-byte Folded Spill
477daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
478daf067daSwanglei; LA64-NEXT:    .cfi_offset 22, -16
479daf067daSwanglei; LA64-NEXT:    addi.d $fp, $sp, 2032
480daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa 22, 0
4814e2364a2Swanglei; LA64-NEXT:    addi.d $sp, $sp, -2048
482f589e506Swanglei; LA64-NEXT:    addi.d $sp, $sp, -16
4831bb77664Swanglei; LA64-NEXT:    bstrins.d $sp, $zero, 10, 0
4844e2364a2Swanglei; LA64-NEXT:    ori $a0, $zero, 2048
4854e2364a2Swanglei; LA64-NEXT:    add.d $a0, $sp, $a0
486daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
4874e2364a2Swanglei; LA64-NEXT:    lu12i.w $a0, 1
4884e2364a2Swanglei; LA64-NEXT:    sub.d $sp, $fp, $a0
4894e2364a2Swanglei; LA64-NEXT:    addi.d $sp, $sp, 2032
4904e2364a2Swanglei; LA64-NEXT:    addi.d $sp, $sp, 32
491f589e506Swanglei; LA64-NEXT:    ld.d $fp, $sp, 2016 # 8-byte Folded Reload
492f589e506Swanglei; LA64-NEXT:    ld.d $ra, $sp, 2024 # 8-byte Folded Reload
493f589e506Swanglei; LA64-NEXT:    addi.d $sp, $sp, 2032
494daf067daSwanglei; LA64-NEXT:    ret
495daf067daSwanglei  %1 = alloca i8, align 2048
496779df382SNikita Popov  call void @callee(ptr %1)
497daf067daSwanglei  ret void
498daf067daSwanglei}
499daf067daSwanglei
500daf067daSwangleidefine void @caller_no_realign2048() "no-realign-stack" {
501daf067daSwanglei; LA32-LABEL: caller_no_realign2048:
502daf067daSwanglei; LA32:       # %bb.0:
503daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -16
504daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 16
505daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
506daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
507daf067daSwanglei; LA32-NEXT:    addi.w $a0, $sp, 0
508daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
509daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
510daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 16
511daf067daSwanglei; LA32-NEXT:    ret
512daf067daSwanglei;
513daf067daSwanglei; LA64-LABEL: caller_no_realign2048:
514daf067daSwanglei; LA64:       # %bb.0:
515daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -16
516daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 16
517daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
518daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
519daf067daSwanglei; LA64-NEXT:    addi.d $a0, $sp, 0
520daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
521daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
522daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 16
523daf067daSwanglei; LA64-NEXT:    ret
524daf067daSwanglei  %1 = alloca i8, align 2048
525779df382SNikita Popov  call void @callee(ptr %1)
526daf067daSwanglei  ret void
527daf067daSwanglei}
528daf067daSwanglei
529daf067daSwangleidefine void @caller4096() {
530daf067daSwanglei; LA32-LABEL: caller4096:
531daf067daSwanglei; LA32:       # %bb.0:
532f589e506Swanglei; LA32-NEXT:    addi.w $sp, $sp, -2032
533f589e506Swanglei; LA32-NEXT:    .cfi_def_cfa_offset 2032
534f589e506Swanglei; LA32-NEXT:    st.w $ra, $sp, 2028 # 4-byte Folded Spill
535f589e506Swanglei; LA32-NEXT:    st.w $fp, $sp, 2024 # 4-byte Folded Spill
536daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
537daf067daSwanglei; LA32-NEXT:    .cfi_offset 22, -8
538f589e506Swanglei; LA32-NEXT:    addi.w $fp, $sp, 2032
539daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa 22, 0
5404e2364a2Swanglei; LA32-NEXT:    lu12i.w $a0, 1
5414e2364a2Swanglei; LA32-NEXT:    ori $a0, $a0, 2064
5424e2364a2Swanglei; LA32-NEXT:    sub.w $sp, $sp, $a0
5431bb77664Swanglei; LA32-NEXT:    bstrins.w $sp, $zero, 11, 0
544daf067daSwanglei; LA32-NEXT:    lu12i.w $a0, 1
5454e2364a2Swanglei; LA32-NEXT:    add.w $a0, $sp, $a0
5464e2364a2Swanglei; LA32-NEXT:    bl %plt(callee)
5474e2364a2Swanglei; LA32-NEXT:    lu12i.w $a0, 2
548daf067daSwanglei; LA32-NEXT:    sub.w $sp, $fp, $a0
5494e2364a2Swanglei; LA32-NEXT:    lu12i.w $a0, 1
5504e2364a2Swanglei; LA32-NEXT:    ori $a0, $a0, 2064
5514e2364a2Swanglei; LA32-NEXT:    add.w $sp, $sp, $a0
552f589e506Swanglei; LA32-NEXT:    ld.w $fp, $sp, 2024 # 4-byte Folded Reload
553f589e506Swanglei; LA32-NEXT:    ld.w $ra, $sp, 2028 # 4-byte Folded Reload
554f589e506Swanglei; LA32-NEXT:    addi.w $sp, $sp, 2032
555daf067daSwanglei; LA32-NEXT:    ret
556daf067daSwanglei;
557daf067daSwanglei; LA64-LABEL: caller4096:
558daf067daSwanglei; LA64:       # %bb.0:
559f589e506Swanglei; LA64-NEXT:    addi.d $sp, $sp, -2032
560f589e506Swanglei; LA64-NEXT:    .cfi_def_cfa_offset 2032
561f589e506Swanglei; LA64-NEXT:    st.d $ra, $sp, 2024 # 8-byte Folded Spill
562f589e506Swanglei; LA64-NEXT:    st.d $fp, $sp, 2016 # 8-byte Folded Spill
563daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
564daf067daSwanglei; LA64-NEXT:    .cfi_offset 22, -16
565f589e506Swanglei; LA64-NEXT:    addi.d $fp, $sp, 2032
566daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa 22, 0
5674e2364a2Swanglei; LA64-NEXT:    lu12i.w $a0, 1
5684e2364a2Swanglei; LA64-NEXT:    ori $a0, $a0, 2064
5694e2364a2Swanglei; LA64-NEXT:    sub.d $sp, $sp, $a0
5701bb77664Swanglei; LA64-NEXT:    bstrins.d $sp, $zero, 11, 0
571daf067daSwanglei; LA64-NEXT:    lu12i.w $a0, 1
5724e2364a2Swanglei; LA64-NEXT:    add.d $a0, $sp, $a0
5734e2364a2Swanglei; LA64-NEXT:    bl %plt(callee)
5744e2364a2Swanglei; LA64-NEXT:    lu12i.w $a0, 2
575daf067daSwanglei; LA64-NEXT:    sub.d $sp, $fp, $a0
5764e2364a2Swanglei; LA64-NEXT:    lu12i.w $a0, 1
5774e2364a2Swanglei; LA64-NEXT:    ori $a0, $a0, 2064
5784e2364a2Swanglei; LA64-NEXT:    add.d $sp, $sp, $a0
579f589e506Swanglei; LA64-NEXT:    ld.d $fp, $sp, 2016 # 8-byte Folded Reload
580f589e506Swanglei; LA64-NEXT:    ld.d $ra, $sp, 2024 # 8-byte Folded Reload
581f589e506Swanglei; LA64-NEXT:    addi.d $sp, $sp, 2032
582daf067daSwanglei; LA64-NEXT:    ret
583daf067daSwanglei  %1 = alloca i8, align 4096
584779df382SNikita Popov  call void @callee(ptr %1)
585daf067daSwanglei  ret void
586daf067daSwanglei}
587daf067daSwanglei
588daf067daSwangleidefine void @caller_no_realign4096() "no-realign-stack" {
589daf067daSwanglei; LA32-LABEL: caller_no_realign4096:
590daf067daSwanglei; LA32:       # %bb.0:
591daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, -16
592daf067daSwanglei; LA32-NEXT:    .cfi_def_cfa_offset 16
593daf067daSwanglei; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill
594daf067daSwanglei; LA32-NEXT:    .cfi_offset 1, -4
595daf067daSwanglei; LA32-NEXT:    addi.w $a0, $sp, 0
596daf067daSwanglei; LA32-NEXT:    bl %plt(callee)
597daf067daSwanglei; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload
598daf067daSwanglei; LA32-NEXT:    addi.w $sp, $sp, 16
599daf067daSwanglei; LA32-NEXT:    ret
600daf067daSwanglei;
601daf067daSwanglei; LA64-LABEL: caller_no_realign4096:
602daf067daSwanglei; LA64:       # %bb.0:
603daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, -16
604daf067daSwanglei; LA64-NEXT:    .cfi_def_cfa_offset 16
605daf067daSwanglei; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill
606daf067daSwanglei; LA64-NEXT:    .cfi_offset 1, -8
607daf067daSwanglei; LA64-NEXT:    addi.d $a0, $sp, 0
608daf067daSwanglei; LA64-NEXT:    bl %plt(callee)
609daf067daSwanglei; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload
610daf067daSwanglei; LA64-NEXT:    addi.d $sp, $sp, 16
611daf067daSwanglei; LA64-NEXT:    ret
612daf067daSwanglei  %1 = alloca i8, align 4096
613779df382SNikita Popov  call void @callee(ptr %1)
614daf067daSwanglei  ret void
615daf067daSwanglei}
616