xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/dynamic-stack-realignment.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips2 -relocation-model=pic | FileCheck %s \
2*9880d681SAndroid Build Coastguard Worker; RUN:    --check-prefixes=ALL,GP32
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32 -relocation-model=pic | FileCheck %s \
4*9880d681SAndroid Build Coastguard Worker; RUN:    --check-prefixes=ALL,GP32
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips -mcpu=mips32r6 -relocation-model=pic | FileCheck %s \
6*9880d681SAndroid Build Coastguard Worker; RUN:    --check-prefixes=ALL,GP32
7*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips3 -relocation-model=pic | FileCheck %s \
8*9880d681SAndroid Build Coastguard Worker; RUN:    --check-prefixes=ALL,GP64,N64
9*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64 -relocation-model=pic | FileCheck %s \
10*9880d681SAndroid Build Coastguard Worker; RUN:    --check-prefixes=ALL,GP64,N64
11*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r6 -relocation-model=pic | FileCheck %s \
12*9880d681SAndroid Build Coastguard Worker; RUN:    --check-prefixes=ALL,GP64,N64
13*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips3 -target-abi n32 -relocation-model=pic | FileCheck %s \
14*9880d681SAndroid Build Coastguard Worker; RUN:    --check-prefixes=ALL,GP64,N32
15*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64 -target-abi n32 -relocation-model=pic | FileCheck %s \
16*9880d681SAndroid Build Coastguard Worker; RUN:    --check-prefixes=ALL,GP64,N32
17*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64 -mcpu=mips64r6 -target-abi n32 -relocation-model=pic | FileCheck %s \
18*9880d681SAndroid Build Coastguard Worker; RUN:    --check-prefixes=ALL,GP64,N32
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Worker; Check dynamic stack realignment in functions without variable-sized objects.
21*9880d681SAndroid Build Coastguard Worker
22*9880d681SAndroid Build Coastguard Workerdeclare void @helper_01(i32, i32, i32, i32, i32*)
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker; O32 ABI
25*9880d681SAndroid Build Coastguard Workerdefine void @func_01() {
26*9880d681SAndroid Build Coastguard Workerentry:
27*9880d681SAndroid Build Coastguard Worker; GP32-LABEL: func_01:
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker  ; prologue
30*9880d681SAndroid Build Coastguard Worker  ; FIXME: We are currently over-allocating stack space. This particular case
31*9880d681SAndroid Build Coastguard Worker  ;        needs a frame of up to between 16 and 512-bytes but currently
32*9880d681SAndroid Build Coastguard Worker  ;        allocates between 1024 and 1536 bytes
33*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $sp, $sp, -1024
34*9880d681SAndroid Build Coastguard Worker  ; GP32:       sw      $ra, 1020($sp)
35*9880d681SAndroid Build Coastguard Worker  ; GP32:       sw      $fp, 1016($sp)
36*9880d681SAndroid Build Coastguard Worker  ;
37*9880d681SAndroid Build Coastguard Worker  ; GP32:       move    $fp, $sp
38*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $[[T0:[0-9]+|ra|gp]], $zero, -512
39*9880d681SAndroid Build Coastguard Worker  ; GP32-NEXT:  and     $sp, $sp, $[[T0]]
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker  ; body
42*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $[[T1:[0-9]+]], $sp, 512
43*9880d681SAndroid Build Coastguard Worker  ; GP32:       sw      $[[T1]], 16($sp)
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker  ; epilogue
46*9880d681SAndroid Build Coastguard Worker  ; GP32:       move    $sp, $fp
47*9880d681SAndroid Build Coastguard Worker  ; GP32:       lw      $fp, 1016($sp)
48*9880d681SAndroid Build Coastguard Worker  ; GP32:       lw      $ra, 1020($sp)
49*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $sp, $sp, 1024
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker  %a = alloca i32, align 512
52*9880d681SAndroid Build Coastguard Worker  call void @helper_01(i32 0, i32 0, i32 0, i32 0, i32* %a)
53*9880d681SAndroid Build Coastguard Worker  ret void
54*9880d681SAndroid Build Coastguard Worker}
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Workerdeclare void @helper_02(i32, i32, i32, i32,
57*9880d681SAndroid Build Coastguard Worker                        i32, i32, i32, i32, i32*)
58*9880d681SAndroid Build Coastguard Worker
59*9880d681SAndroid Build Coastguard Worker; N32/N64 ABIs
60*9880d681SAndroid Build Coastguard Workerdefine void @func_02() {
61*9880d681SAndroid Build Coastguard Workerentry:
62*9880d681SAndroid Build Coastguard Worker; GP64-LABEL: func_02:
63*9880d681SAndroid Build Coastguard Worker
64*9880d681SAndroid Build Coastguard Worker  ; prologue
65*9880d681SAndroid Build Coastguard Worker  ; FIXME: We are currently over-allocating stack space. This particular case
66*9880d681SAndroid Build Coastguard Worker  ;        needs a frame of up to between 16 and 512-bytes but currently
67*9880d681SAndroid Build Coastguard Worker  ;        allocates between 1024 and 1536 bytes
68*9880d681SAndroid Build Coastguard Worker  ; N32:        addiu   $sp, $sp, -1024
69*9880d681SAndroid Build Coastguard Worker  ; N64:        daddiu  $sp, $sp, -1024
70*9880d681SAndroid Build Coastguard Worker  ; GP64:       sd      $ra, 1016($sp)
71*9880d681SAndroid Build Coastguard Worker  ; GP64:       sd      $fp, 1008($sp)
72*9880d681SAndroid Build Coastguard Worker  ; N32:        sd      $gp, 1000($sp)
73*9880d681SAndroid Build Coastguard Worker  ;
74*9880d681SAndroid Build Coastguard Worker  ; GP64:       move    $fp, $sp
75*9880d681SAndroid Build Coastguard Worker  ; N32:        addiu   $[[T0:[0-9]+|ra]], $zero, -512
76*9880d681SAndroid Build Coastguard Worker  ; N64:        daddiu  $[[T0:[0-9]+|ra]], $zero, -512
77*9880d681SAndroid Build Coastguard Worker  ; GP64-NEXT:  and     $sp, $sp, $[[T0]]
78*9880d681SAndroid Build Coastguard Worker
79*9880d681SAndroid Build Coastguard Worker  ; body
80*9880d681SAndroid Build Coastguard Worker  ; N32:        addiu   $[[T1:[0-9]+]], $sp, 512
81*9880d681SAndroid Build Coastguard Worker  ; N64:        daddiu  $[[T1:[0-9]+]], $sp, 512
82*9880d681SAndroid Build Coastguard Worker  ; GP64:       sd      $[[T1]], 0($sp)
83*9880d681SAndroid Build Coastguard Worker
84*9880d681SAndroid Build Coastguard Worker  ; epilogue
85*9880d681SAndroid Build Coastguard Worker  ; GP64:       move    $sp, $fp
86*9880d681SAndroid Build Coastguard Worker  ; N32:        ld      $gp, 1000($sp)
87*9880d681SAndroid Build Coastguard Worker  ; GP64:       ld      $fp, 1008($sp)
88*9880d681SAndroid Build Coastguard Worker  ; GP64:       ld      $ra, 1016($sp)
89*9880d681SAndroid Build Coastguard Worker  ; N32:        addiu   $sp, $sp, 1024
90*9880d681SAndroid Build Coastguard Worker  ; N64:        daddiu  $sp, $sp, 1024
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker  %a = alloca i32, align 512
93*9880d681SAndroid Build Coastguard Worker  call void @helper_02(i32 0, i32 0, i32 0, i32 0,
94*9880d681SAndroid Build Coastguard Worker                       i32 0, i32 0, i32 0, i32 0, i32* %a)
95*9880d681SAndroid Build Coastguard Worker  ret void
96*9880d681SAndroid Build Coastguard Worker}
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Worker; Verify that we use $fp for referencing incoming arguments.
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Workerdeclare void @helper_03(i32, i32, i32, i32, i32*, i32*)
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker; O32 ABI
103*9880d681SAndroid Build Coastguard Workerdefine void @func_03(i32 %p0, i32 %p1, i32 %p2, i32 %p3, i32* %b) {
104*9880d681SAndroid Build Coastguard Workerentry:
105*9880d681SAndroid Build Coastguard Worker; GP32-LABEL: func_03:
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker  ; body
108*9880d681SAndroid Build Coastguard Worker  ; FIXME: We are currently over-allocating stack space.
109*9880d681SAndroid Build Coastguard Worker  ; GP32-DAG:   addiu   $[[T0:[0-9]+]], $sp, 512
110*9880d681SAndroid Build Coastguard Worker  ; GP32-DAG:   sw      $[[T0]], 16($sp)
111*9880d681SAndroid Build Coastguard Worker  ; GP32-DAG:   lw      $[[T1:[0-9]+]], 1040($fp)
112*9880d681SAndroid Build Coastguard Worker  ; GP32-DAG:   sw      $[[T1]], 20($sp)
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Worker  %a = alloca i32, align 512
115*9880d681SAndroid Build Coastguard Worker  call void @helper_03(i32 0, i32 0, i32 0, i32 0, i32* %a, i32* %b)
116*9880d681SAndroid Build Coastguard Worker  ret void
117*9880d681SAndroid Build Coastguard Worker}
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Workerdeclare void @helper_04(i32, i32, i32, i32,
120*9880d681SAndroid Build Coastguard Worker                        i32, i32, i32, i32, i32*, i32*)
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Worker; N32/N64 ABIs
123*9880d681SAndroid Build Coastguard Workerdefine void @func_04(i32 %p0, i32 %p1, i32 %p2, i32 %p3,
124*9880d681SAndroid Build Coastguard Worker                     i32 %p4, i32 %p5, i32 %p6, i32 %p7,
125*9880d681SAndroid Build Coastguard Worker                     i32* %b) {
126*9880d681SAndroid Build Coastguard Workerentry:
127*9880d681SAndroid Build Coastguard Worker; GP64-LABEL: func_04:
128*9880d681SAndroid Build Coastguard Worker
129*9880d681SAndroid Build Coastguard Worker  ; body
130*9880d681SAndroid Build Coastguard Worker  ; FIXME: We are currently over-allocating stack space.
131*9880d681SAndroid Build Coastguard Worker  ; N32-DAG:    addiu   $[[T0:[0-9]+]], $sp, 512
132*9880d681SAndroid Build Coastguard Worker  ; N64-DAG:    daddiu  $[[T0:[0-9]+]], $sp, 512
133*9880d681SAndroid Build Coastguard Worker  ; GP64-DAG:   sd      $[[T0]], 0($sp)
134*9880d681SAndroid Build Coastguard Worker  ; GP64-DAG:   ld      $[[T1:[0-9]+]], 1024($fp)
135*9880d681SAndroid Build Coastguard Worker  ; GP64-DAG:   sd      $[[T1]], 8($sp)
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker  %a = alloca i32, align 512
138*9880d681SAndroid Build Coastguard Worker  call void @helper_04(i32 0, i32 0, i32 0, i32 0,
139*9880d681SAndroid Build Coastguard Worker                       i32 0, i32 0, i32 0, i32 0, i32* %a, i32* %b)
140*9880d681SAndroid Build Coastguard Worker  ret void
141*9880d681SAndroid Build Coastguard Worker}
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Worker; Check dynamic stack realignment in functions with variable-sized objects.
144*9880d681SAndroid Build Coastguard Worker
145*9880d681SAndroid Build Coastguard Worker; O32 ABI
146*9880d681SAndroid Build Coastguard Workerdefine void @func_05(i32 %sz) {
147*9880d681SAndroid Build Coastguard Workerentry:
148*9880d681SAndroid Build Coastguard Worker; GP32-LABEL: func_05:
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker  ; prologue
151*9880d681SAndroid Build Coastguard Worker  ; FIXME: We are currently over-allocating stack space.
152*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $sp, $sp, -1024
153*9880d681SAndroid Build Coastguard Worker  ; GP32:       sw      $fp, 1020($sp)
154*9880d681SAndroid Build Coastguard Worker  ; GP32:       sw      $23, 1016($sp)
155*9880d681SAndroid Build Coastguard Worker  ;
156*9880d681SAndroid Build Coastguard Worker  ; GP32:       move    $fp, $sp
157*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $[[T0:[0-9]+|gp]], $zero, -512
158*9880d681SAndroid Build Coastguard Worker  ; GP32-NEXT:  and     $sp, $sp, $[[T0]]
159*9880d681SAndroid Build Coastguard Worker  ; GP32-NEXT:  move    $23, $sp
160*9880d681SAndroid Build Coastguard Worker
161*9880d681SAndroid Build Coastguard Worker  ; body
162*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $[[T1:[0-9]+]], $zero, 222
163*9880d681SAndroid Build Coastguard Worker  ; GP32:       sw      $[[T1]], 508($23)
164*9880d681SAndroid Build Coastguard Worker
165*9880d681SAndroid Build Coastguard Worker  ; epilogue
166*9880d681SAndroid Build Coastguard Worker  ; GP32:       move    $sp, $fp
167*9880d681SAndroid Build Coastguard Worker  ; GP32:       lw      $23, 1016($sp)
168*9880d681SAndroid Build Coastguard Worker  ; GP32:       lw      $fp, 1020($sp)
169*9880d681SAndroid Build Coastguard Worker  ; GP32:       addiu   $sp, $sp, 1024
170*9880d681SAndroid Build Coastguard Worker
171*9880d681SAndroid Build Coastguard Worker  %a0 = alloca i32, i32 %sz, align 512
172*9880d681SAndroid Build Coastguard Worker  %a1 = alloca i32, align 4
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Worker  store volatile i32 111, i32* %a0, align 512
175*9880d681SAndroid Build Coastguard Worker  store volatile i32 222, i32* %a1, align 4
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Worker  ret void
178*9880d681SAndroid Build Coastguard Worker}
179*9880d681SAndroid Build Coastguard Worker
180*9880d681SAndroid Build Coastguard Worker; N32/N64 ABIs
181*9880d681SAndroid Build Coastguard Workerdefine void @func_06(i32 %sz) {
182*9880d681SAndroid Build Coastguard Workerentry:
183*9880d681SAndroid Build Coastguard Worker; GP64-LABEL: func_06:
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Worker  ; prologue
186*9880d681SAndroid Build Coastguard Worker  ; FIXME: We are currently over-allocating stack space.
187*9880d681SAndroid Build Coastguard Worker  ; N32:        addiu   $sp, $sp, -1024
188*9880d681SAndroid Build Coastguard Worker  ; N64:        daddiu  $sp, $sp, -1024
189*9880d681SAndroid Build Coastguard Worker  ; GP64:       sd      $fp, 1016($sp)
190*9880d681SAndroid Build Coastguard Worker  ; GP64:       sd      $23, 1008($sp)
191*9880d681SAndroid Build Coastguard Worker  ;
192*9880d681SAndroid Build Coastguard Worker  ; GP64:       move    $fp, $sp
193*9880d681SAndroid Build Coastguard Worker  ; GP64:       addiu   $[[T0:[0-9]+|gp]], $zero, -512
194*9880d681SAndroid Build Coastguard Worker  ; GP64-NEXT:  and     $sp, $sp, $[[T0]]
195*9880d681SAndroid Build Coastguard Worker  ; GP64-NEXT:  move    $23, $sp
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Worker  ; body
198*9880d681SAndroid Build Coastguard Worker  ; GP64:       addiu   $[[T1:[0-9]+]], $zero, 222
199*9880d681SAndroid Build Coastguard Worker  ; GP64:       sw      $[[T1]], 508($23)
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Worker  ; epilogue
202*9880d681SAndroid Build Coastguard Worker  ; GP64:       move    $sp, $fp
203*9880d681SAndroid Build Coastguard Worker  ; GP64:       ld      $23, 1008($sp)
204*9880d681SAndroid Build Coastguard Worker  ; GP64:       ld      $fp, 1016($sp)
205*9880d681SAndroid Build Coastguard Worker  ; N32:        addiu   $sp, $sp, 1024
206*9880d681SAndroid Build Coastguard Worker  ; N64:        daddiu  $sp, $sp, 1024
207*9880d681SAndroid Build Coastguard Worker
208*9880d681SAndroid Build Coastguard Worker  %a0 = alloca i32, i32 %sz, align 512
209*9880d681SAndroid Build Coastguard Worker  %a1 = alloca i32, align 4
210*9880d681SAndroid Build Coastguard Worker
211*9880d681SAndroid Build Coastguard Worker  store volatile i32 111, i32* %a0, align 512
212*9880d681SAndroid Build Coastguard Worker  store volatile i32 222, i32* %a1, align 4
213*9880d681SAndroid Build Coastguard Worker
214*9880d681SAndroid Build Coastguard Worker  ret void
215*9880d681SAndroid Build Coastguard Worker}
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Worker; Verify that we use $fp for referencing incoming arguments and $sp for
218*9880d681SAndroid Build Coastguard Worker; building outbound arguments for nested function calls.
219*9880d681SAndroid Build Coastguard Worker
220*9880d681SAndroid Build Coastguard Worker; O32 ABI
221*9880d681SAndroid Build Coastguard Workerdefine void @func_07(i32 %p0, i32 %p1, i32 %p2, i32 %p3, i32 %sz) {
222*9880d681SAndroid Build Coastguard Workerentry:
223*9880d681SAndroid Build Coastguard Worker; GP32-LABEL: func_07:
224*9880d681SAndroid Build Coastguard Worker
225*9880d681SAndroid Build Coastguard Worker  ; body
226*9880d681SAndroid Build Coastguard Worker  ; FIXME: We are currently over-allocating stack space.
227*9880d681SAndroid Build Coastguard Worker  ; GP32-DAG:       lw      $[[T0:[0-9]+]], 1040($fp)
228*9880d681SAndroid Build Coastguard Worker  ;
229*9880d681SAndroid Build Coastguard Worker  ; GP32-DAG:       addiu   $[[T1:[0-9]+]], $zero, 222
230*9880d681SAndroid Build Coastguard Worker  ; GP32-DAG:       sw      $[[T1]], 508($23)
231*9880d681SAndroid Build Coastguard Worker  ;
232*9880d681SAndroid Build Coastguard Worker  ; GP32-DAG:       sw      $[[T2:[0-9]+]], 16($sp)
233*9880d681SAndroid Build Coastguard Worker
234*9880d681SAndroid Build Coastguard Worker  %a0 = alloca i32, i32 %sz, align 512
235*9880d681SAndroid Build Coastguard Worker  %a1 = alloca i32, align 4
236*9880d681SAndroid Build Coastguard Worker
237*9880d681SAndroid Build Coastguard Worker  store volatile i32 111, i32* %a0, align 512
238*9880d681SAndroid Build Coastguard Worker  store volatile i32 222, i32* %a1, align 4
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker  call void @helper_01(i32 0, i32 0, i32 0, i32 0, i32* %a1)
241*9880d681SAndroid Build Coastguard Worker
242*9880d681SAndroid Build Coastguard Worker  ret void
243*9880d681SAndroid Build Coastguard Worker}
244*9880d681SAndroid Build Coastguard Worker
245*9880d681SAndroid Build Coastguard Worker; N32/N64 ABIs
246*9880d681SAndroid Build Coastguard Workerdefine void @func_08(i32 %p0, i32 %p1, i32 %p2, i32 %p3,
247*9880d681SAndroid Build Coastguard Worker                     i32 %p4, i32 %p5, i32 %p6, i32 %p7,
248*9880d681SAndroid Build Coastguard Worker                     i32 %sz) {
249*9880d681SAndroid Build Coastguard Workerentry:
250*9880d681SAndroid Build Coastguard Worker; GP64-LABEL: func_08:
251*9880d681SAndroid Build Coastguard Worker
252*9880d681SAndroid Build Coastguard Worker  ; body
253*9880d681SAndroid Build Coastguard Worker  ; FIXME: We are currently over-allocating stack space.
254*9880d681SAndroid Build Coastguard Worker  ; N32-DAG:        lw      $[[T0:[0-9]+]], 1028($fp)
255*9880d681SAndroid Build Coastguard Worker  ; N64-DAG:        lwu     $[[T0:[0-9]+]], 1028($fp)
256*9880d681SAndroid Build Coastguard Worker  ;
257*9880d681SAndroid Build Coastguard Worker  ; GP64-DAG:       addiu   $[[T1:[0-9]+]], $zero, 222
258*9880d681SAndroid Build Coastguard Worker  ; GP64-DAG:       sw      $[[T1]], 508($23)
259*9880d681SAndroid Build Coastguard Worker  ;
260*9880d681SAndroid Build Coastguard Worker  ; GP64-DAG:       sd      $[[T2:[0-9]+]], 0($sp)
261*9880d681SAndroid Build Coastguard Worker
262*9880d681SAndroid Build Coastguard Worker  %a0 = alloca i32, i32 %sz, align 512
263*9880d681SAndroid Build Coastguard Worker  %a1 = alloca i32, align 4
264*9880d681SAndroid Build Coastguard Worker
265*9880d681SAndroid Build Coastguard Worker  store volatile i32 111, i32* %a0, align 512
266*9880d681SAndroid Build Coastguard Worker  store volatile i32 222, i32* %a1, align 4
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Worker  call void @helper_02(i32 0, i32 0, i32 0, i32 0,
269*9880d681SAndroid Build Coastguard Worker                       i32 0, i32 0, i32 0, i32 0, i32* %a1)
270*9880d681SAndroid Build Coastguard Worker  ret void
271*9880d681SAndroid Build Coastguard Worker}
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Worker; Check that we do not perform dynamic stack realignment in the presence of
274*9880d681SAndroid Build Coastguard Worker; the "no-realign-stack" function attribute.
275*9880d681SAndroid Build Coastguard Workerdefine void @func_09() "no-realign-stack" {
276*9880d681SAndroid Build Coastguard Workerentry:
277*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: func_09:
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Worker  ; ALL-NOT:  and     $sp, $sp, $[[T0:[0-9]+|ra|gp]]
280*9880d681SAndroid Build Coastguard Worker
281*9880d681SAndroid Build Coastguard Worker  %a = alloca i32, align 512
282*9880d681SAndroid Build Coastguard Worker  call void @helper_01(i32 0, i32 0, i32 0, i32 0, i32* %a)
283*9880d681SAndroid Build Coastguard Worker  ret void
284*9880d681SAndroid Build Coastguard Worker}
285*9880d681SAndroid Build Coastguard Worker
286*9880d681SAndroid Build Coastguard Workerdefine void @func_10(i32 %sz) "no-realign-stack" {
287*9880d681SAndroid Build Coastguard Workerentry:
288*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: func_10:
289*9880d681SAndroid Build Coastguard Worker
290*9880d681SAndroid Build Coastguard Worker  ; ALL-NOT:  and     $sp, $sp, $[[T0:[0-9]+|ra|gp]]
291*9880d681SAndroid Build Coastguard Worker
292*9880d681SAndroid Build Coastguard Worker  %a0 = alloca i32, i32 %sz, align 512
293*9880d681SAndroid Build Coastguard Worker  %a1 = alloca i32, align 4
294*9880d681SAndroid Build Coastguard Worker
295*9880d681SAndroid Build Coastguard Worker  store volatile i32 111, i32* %a0, align 512
296*9880d681SAndroid Build Coastguard Worker  store volatile i32 222, i32* %a1, align 4
297*9880d681SAndroid Build Coastguard Worker
298*9880d681SAndroid Build Coastguard Worker  ret void
299*9880d681SAndroid Build Coastguard Worker}
300