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