1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=x86_64-pc-linux -stackrealign -verify-machineinstrs < %s | FileCheck %s
3 ; RUN: llc -mtriple=x86_64-pc-linux-gnux32 -stackrealign -verify-machineinstrs < %s | FileCheck -check-prefix=X32ABI %s
5 ; This should run with NaCl as well ( -mtriple=x86_64-pc-nacl ) but currently doesn't due to PR22655
7 ; Make sure the correct register gets set up as the base pointer
8 ; This should be rbx for x64 and 64-bit NaCl and ebx for x32
10 ; NACL: subq $32, %rsp
11 ; NACL: movq %rsp, %rbx
13 declare i32 @helper() nounwind
14 define void @base() #0 {
16 ; CHECK: # %bb.0: # %entry
17 ; CHECK-NEXT: pushq %rbp
18 ; CHECK-NEXT: .cfi_def_cfa_offset 16
19 ; CHECK-NEXT: .cfi_offset %rbp, -16
20 ; CHECK-NEXT: movq %rsp, %rbp
21 ; CHECK-NEXT: .cfi_def_cfa_register %rbp
22 ; CHECK-NEXT: pushq %rbx
23 ; CHECK-NEXT: andq $-32, %rsp
24 ; CHECK-NEXT: subq $32, %rsp
25 ; CHECK-NEXT: movq %rsp, %rbx
26 ; CHECK-NEXT: .cfi_offset %rbx, -24
27 ; CHECK-NEXT: callq helper@PLT
28 ; CHECK-NEXT: movq %rsp, %rcx
29 ; CHECK-NEXT: movl %eax, %eax
30 ; CHECK-NEXT: leaq 31(,%rax,4), %rax
31 ; CHECK-NEXT: andq $-32, %rax
32 ; CHECK-NEXT: movq %rcx, %rdx
33 ; CHECK-NEXT: subq %rax, %rdx
34 ; CHECK-NEXT: movq %rdx, %rsp
35 ; CHECK-NEXT: negq %rax
36 ; CHECK-NEXT: movl $0, (%rcx,%rax)
37 ; CHECK-NEXT: leaq -8(%rbp), %rsp
38 ; CHECK-NEXT: popq %rbx
39 ; CHECK-NEXT: popq %rbp
40 ; CHECK-NEXT: .cfi_def_cfa %rsp, 8
44 ; X32ABI: # %bb.0: # %entry
45 ; X32ABI-NEXT: pushq %rbp
46 ; X32ABI-NEXT: .cfi_def_cfa_offset 16
47 ; X32ABI-NEXT: .cfi_offset %rbp, -16
48 ; X32ABI-NEXT: movl %esp, %ebp
49 ; X32ABI-NEXT: .cfi_def_cfa_register %rbp
50 ; X32ABI-NEXT: pushq %rbx
51 ; X32ABI-NEXT: andl $-32, %esp
52 ; X32ABI-NEXT: subl $32, %esp
53 ; X32ABI-NEXT: movl %esp, %ebx
54 ; X32ABI-NEXT: .cfi_offset %rbx, -24
55 ; X32ABI-NEXT: callq helper@PLT
56 ; X32ABI-NEXT: # kill: def $eax killed $eax def $rax
57 ; X32ABI-NEXT: leal 31(,%rax,4), %eax
58 ; X32ABI-NEXT: andl $-32, %eax
59 ; X32ABI-NEXT: movl %esp, %ecx
60 ; X32ABI-NEXT: movl %ecx, %edx
61 ; X32ABI-NEXT: subl %eax, %edx
62 ; X32ABI-NEXT: negl %eax
63 ; X32ABI-NEXT: movl %edx, %esp
64 ; X32ABI-NEXT: movl $0, (%ecx,%eax)
65 ; X32ABI-NEXT: leal -8(%ebp), %esp
66 ; X32ABI-NEXT: popq %rbx
67 ; X32ABI-NEXT: popq %rbp
68 ; X32ABI-NEXT: .cfi_def_cfa %rsp, 8
71 %k = call i32 @helper()
72 %a = alloca i32, i32 %k, align 4
73 store i32 0, ptr %a, align 4
77 define void @clobber_base() #0 {
78 ; CHECK-LABEL: clobber_base:
79 ; CHECK: # %bb.0: # %entry
80 ; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %r10
81 ; CHECK-NEXT: .cfi_def_cfa %r10, 0
82 ; CHECK-NEXT: andq $-128, %rsp
83 ; CHECK-NEXT: pushq -8(%r10)
84 ; CHECK-NEXT: pushq %rbp
85 ; CHECK-NEXT: movq %rsp, %rbp
86 ; CHECK-NEXT: .cfi_escape 0x10, 0x06, 0x02, 0x76, 0x00 #
87 ; CHECK-NEXT: pushq %rbx
88 ; CHECK-NEXT: subq $232, %rsp
89 ; CHECK-NEXT: movq %r10, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
90 ; CHECK-NEXT: .cfi_escape 0x10, 0x03, 0x02, 0x76, 0x78 #
91 ; CHECK-NEXT: .cfi_escape 0x0f, 0x04, 0x76, 0x88, 0x7f, 0x06 #
92 ; CHECK-NEXT: callq helper@PLT
93 ; CHECK-NEXT: movq %rsp, %rcx
94 ; CHECK-NEXT: movl %eax, %eax
95 ; CHECK-NEXT: leaq 31(,%rax,4), %rax
96 ; CHECK-NEXT: andq $-32, %rax
97 ; CHECK-NEXT: movq %rcx, %rdx
98 ; CHECK-NEXT: subq %rax, %rdx
99 ; CHECK-NEXT: movq %rdx, %rsp
100 ; CHECK-NEXT: negq %rax
101 ; CHECK-NEXT: movl $405, %ebx # imm = 0x195
104 ; CHECK-NEXT: #NO_APP
105 ; CHECK-NEXT: movl $8, %edx
107 ; CHECK-NEXT: movl %edx, -112(%rbp)
108 ; CHECK-NEXT: #NO_APP
109 ; CHECK-NEXT: movl $0, (%rcx,%rax)
110 ; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload
111 ; CHECK-NEXT: leaq -8(%rbp), %rsp
112 ; CHECK-NEXT: popq %rbx
113 ; CHECK-NEXT: popq %rbp
114 ; CHECK-NEXT: leaq -8(%r10), %rsp
115 ; CHECK-NEXT: .cfi_def_cfa %rsp, 8
118 ; X32ABI-LABEL: clobber_base:
119 ; X32ABI: # %bb.0: # %entry
120 ; X32ABI-NEXT: pushq %rbp
121 ; X32ABI-NEXT: .cfi_def_cfa_offset 16
122 ; X32ABI-NEXT: .cfi_offset %rbp, -16
123 ; X32ABI-NEXT: movl %esp, %ebp
124 ; X32ABI-NEXT: .cfi_def_cfa_register %rbp
125 ; X32ABI-NEXT: pushq %rbx
126 ; X32ABI-NEXT: andl $-128, %esp
127 ; X32ABI-NEXT: subl $128, %esp
128 ; X32ABI-NEXT: movl %esp, %ebx
129 ; X32ABI-NEXT: .cfi_offset %rbx, -24
130 ; X32ABI-NEXT: callq helper@PLT
131 ; X32ABI-NEXT: # kill: def $eax killed $eax def $rax
132 ; X32ABI-NEXT: leal 31(,%rax,4), %eax
133 ; X32ABI-NEXT: andl $-32, %eax
134 ; X32ABI-NEXT: movl %esp, %ecx
135 ; X32ABI-NEXT: movl %ecx, %edx
136 ; X32ABI-NEXT: subl %eax, %edx
137 ; X32ABI-NEXT: negl %eax
138 ; X32ABI-NEXT: movl %edx, %esp
139 ; X32ABI-NEXT: movl $405, %ebx # imm = 0x195
142 ; X32ABI-NEXT: #NO_APP
143 ; X32ABI-NEXT: movl $8, %edx
145 ; X32ABI-NEXT: movl %edx, (%ebx)
146 ; X32ABI-NEXT: #NO_APP
147 ; X32ABI-NEXT: movl $0, (%ecx,%eax)
148 ; X32ABI-NEXT: leal -8(%ebp), %esp
149 ; X32ABI-NEXT: popq %rbx
150 ; X32ABI-NEXT: popq %rbp
151 ; X32ABI-NEXT: .cfi_def_cfa %rsp, 8
154 %k = call i32 @helper()
155 %a = alloca i32, align 128
156 %b = alloca i32, i32 %k, align 4
157 ; clobber base pointer register
158 tail call void asm sideeffect "nop", "{bx}"(i32 405)
159 call void asm sideeffect "movl $0, $1", "r,*m"(i32 8, ptr elementtype(i32) %a)
160 store i32 0, ptr %b, align 4
164 define x86_regcallcc void @clobber_baseptr_argptr(i32 %param1, i32 %param2, i32 %param3, i32 %param4, i32 %param5, i32 %param6, i32 %param7, i32 %param8, i32 %param9, i32 %param10, i32 %param11, i32 %param12) #0 {
165 ; CHECK-LABEL: clobber_baseptr_argptr:
166 ; CHECK: # %bb.0: # %entry
167 ; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %r10
168 ; CHECK-NEXT: .cfi_def_cfa %r10, 0
169 ; CHECK-NEXT: andq $-128, %rsp
170 ; CHECK-NEXT: pushq -8(%r10)
171 ; CHECK-NEXT: pushq %rbp
172 ; CHECK-NEXT: movq %rsp, %rbp
173 ; CHECK-NEXT: .cfi_escape 0x10, 0x06, 0x02, 0x76, 0x00 #
174 ; CHECK-NEXT: pushq %rbx
175 ; CHECK-NEXT: subq $360, %rsp # imm = 0x168
176 ; CHECK-NEXT: movaps %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
177 ; CHECK-NEXT: movaps %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
178 ; CHECK-NEXT: movaps %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
179 ; CHECK-NEXT: movaps %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
180 ; CHECK-NEXT: movaps %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
181 ; CHECK-NEXT: movaps %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
182 ; CHECK-NEXT: movaps %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
183 ; CHECK-NEXT: movaps %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
184 ; CHECK-NEXT: movq %r10, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
185 ; CHECK-NEXT: .cfi_escape 0x10, 0x03, 0x02, 0x76, 0x78 #
186 ; CHECK-NEXT: .cfi_escape 0x10, 0x19, 0x02, 0x76, 0xf0, 0x7e #
187 ; CHECK-NEXT: .cfi_escape 0x10, 0x1a, 0x02, 0x76, 0x80, 0x7f #
188 ; CHECK-NEXT: .cfi_escape 0x10, 0x1b, 0x02, 0x76, 0x90, 0x7f #
189 ; CHECK-NEXT: .cfi_escape 0x10, 0x1c, 0x02, 0x76, 0xa0, 0x7f #
190 ; CHECK-NEXT: .cfi_escape 0x10, 0x1d, 0x02, 0x76, 0xb0, 0x7f #
191 ; CHECK-NEXT: .cfi_escape 0x10, 0x1e, 0x02, 0x76, 0x40 #
192 ; CHECK-NEXT: .cfi_escape 0x10, 0x1f, 0x02, 0x76, 0x50 #
193 ; CHECK-NEXT: .cfi_escape 0x10, 0x20, 0x02, 0x76, 0x60 #
194 ; CHECK-NEXT: .cfi_escape 0x0f, 0x04, 0x76, 0x88, 0x7e, 0x06 #
195 ; CHECK-NEXT: movl (%r10), %r14d
196 ; CHECK-NEXT: callq helper@PLT
197 ; CHECK-NEXT: movq %rsp, %rcx
198 ; CHECK-NEXT: movl %eax, %eax
199 ; CHECK-NEXT: leaq 31(,%rax,4), %rax
200 ; CHECK-NEXT: andq $-32, %rax
201 ; CHECK-NEXT: movq %rcx, %rdx
202 ; CHECK-NEXT: subq %rax, %rdx
203 ; CHECK-NEXT: movq %rdx, %rsp
204 ; CHECK-NEXT: negq %rax
205 ; CHECK-NEXT: movl $405, %ebx # imm = 0x195
208 ; CHECK-NEXT: #NO_APP
211 ; CHECK-NEXT: #NO_APP
212 ; CHECK-NEXT: movl $8, %edx
214 ; CHECK-NEXT: movl %edx, -240(%rbp)
215 ; CHECK-NEXT: #NO_APP
216 ; CHECK-NEXT: movl %r14d, (%rcx,%rax)
217 ; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm8 # 16-byte Reload
218 ; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm9 # 16-byte Reload
219 ; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm10 # 16-byte Reload
220 ; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm11 # 16-byte Reload
221 ; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm12 # 16-byte Reload
222 ; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm13 # 16-byte Reload
223 ; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm14 # 16-byte Reload
224 ; CHECK-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm15 # 16-byte Reload
225 ; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload
226 ; CHECK-NEXT: leaq -8(%rbp), %rsp
227 ; CHECK-NEXT: popq %rbx
228 ; CHECK-NEXT: popq %rbp
229 ; CHECK-NEXT: leaq -8(%r10), %rsp
230 ; CHECK-NEXT: .cfi_def_cfa %rsp, 8
233 ; X32ABI-LABEL: clobber_baseptr_argptr:
234 ; X32ABI: # %bb.0: # %entry
235 ; X32ABI-NEXT: pushq %rbp
236 ; X32ABI-NEXT: .cfi_def_cfa_offset 16
237 ; X32ABI-NEXT: .cfi_offset %rbp, -16
238 ; X32ABI-NEXT: movl %esp, %ebp
239 ; X32ABI-NEXT: .cfi_def_cfa_register %rbp
240 ; X32ABI-NEXT: pushq %rbx
241 ; X32ABI-NEXT: andl $-128, %esp
242 ; X32ABI-NEXT: subl $256, %esp # imm = 0x100
243 ; X32ABI-NEXT: movaps %xmm15, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill
244 ; X32ABI-NEXT: movaps %xmm14, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill
245 ; X32ABI-NEXT: movaps %xmm13, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill
246 ; X32ABI-NEXT: movaps %xmm12, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill
247 ; X32ABI-NEXT: movaps %xmm11, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill
248 ; X32ABI-NEXT: movaps %xmm10, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill
249 ; X32ABI-NEXT: movaps %xmm9, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill
250 ; X32ABI-NEXT: movaps %xmm8, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill
251 ; X32ABI-NEXT: movl %esp, %ebx
252 ; X32ABI-NEXT: .cfi_offset %rbx, -24
253 ; X32ABI-NEXT: .cfi_offset %xmm8, -160
254 ; X32ABI-NEXT: .cfi_offset %xmm9, -144
255 ; X32ABI-NEXT: .cfi_offset %xmm10, -128
256 ; X32ABI-NEXT: .cfi_offset %xmm11, -112
257 ; X32ABI-NEXT: .cfi_offset %xmm12, -96
258 ; X32ABI-NEXT: .cfi_offset %xmm13, -80
259 ; X32ABI-NEXT: .cfi_offset %xmm14, -64
260 ; X32ABI-NEXT: .cfi_offset %xmm15, -48
261 ; X32ABI-NEXT: movl 16(%ebp), %r14d
262 ; X32ABI-NEXT: callq helper@PLT
263 ; X32ABI-NEXT: # kill: def $eax killed $eax def $rax
264 ; X32ABI-NEXT: leal 31(,%rax,4), %eax
265 ; X32ABI-NEXT: andl $-32, %eax
266 ; X32ABI-NEXT: movl %esp, %ecx
267 ; X32ABI-NEXT: movl %ecx, %edx
268 ; X32ABI-NEXT: subl %eax, %edx
269 ; X32ABI-NEXT: negl %eax
270 ; X32ABI-NEXT: movl %edx, %esp
271 ; X32ABI-NEXT: movl $405, %ebx # imm = 0x195
274 ; X32ABI-NEXT: #NO_APP
277 ; X32ABI-NEXT: #NO_APP
278 ; X32ABI-NEXT: movl $8, %edx
280 ; X32ABI-NEXT: movl %edx, (%ebx)
281 ; X32ABI-NEXT: #NO_APP
282 ; X32ABI-NEXT: movl %r14d, (%ecx,%eax)
283 ; X32ABI-NEXT: movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm8 # 16-byte Reload
284 ; X32ABI-NEXT: movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm9 # 16-byte Reload
285 ; X32ABI-NEXT: movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm10 # 16-byte Reload
286 ; X32ABI-NEXT: movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm11 # 16-byte Reload
287 ; X32ABI-NEXT: movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm12 # 16-byte Reload
288 ; X32ABI-NEXT: movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm13 # 16-byte Reload
289 ; X32ABI-NEXT: movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm14 # 16-byte Reload
290 ; X32ABI-NEXT: movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm15 # 16-byte Reload
291 ; X32ABI-NEXT: leal -8(%ebp), %esp
292 ; X32ABI-NEXT: popq %rbx
293 ; X32ABI-NEXT: popq %rbp
294 ; X32ABI-NEXT: .cfi_def_cfa %rsp, 8
297 %k = call i32 @helper()
298 %a = alloca i32, align 128
299 %b = alloca i32, i32 %k, align 4
300 ; clobber base pointer register
301 tail call void asm sideeffect "nop", "{bx}"(i32 405)
302 ; clobber argument pointer register
303 tail call void asm sideeffect "nop", "~{bx},~{r10},~{r11}"()
304 call void asm sideeffect "movl $0, $1", "r,*m"(i32 8, ptr elementtype(i32) %a)
305 store i32 %param12, ptr %b, align 4
310 define void @vmw_host_printf(ptr %fmt, ...) nounwind {
311 ; CHECK-LABEL: vmw_host_printf:
312 ; CHECK: # %bb.0: # %entry
313 ; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %r10
314 ; CHECK-NEXT: andq $-16, %rsp
315 ; CHECK-NEXT: pushq -8(%r10)
316 ; CHECK-NEXT: pushq %rbp
317 ; CHECK-NEXT: movq %rsp, %rbp
318 ; CHECK-NEXT: pushq %rbx
319 ; CHECK-NEXT: subq $200, %rsp
320 ; CHECK-NEXT: movq %r10, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
321 ; CHECK-NEXT: movq %rsi, -184(%rbp)
322 ; CHECK-NEXT: movq %rdx, -176(%rbp)
323 ; CHECK-NEXT: movq %rcx, -168(%rbp)
324 ; CHECK-NEXT: movq %r8, -160(%rbp)
325 ; CHECK-NEXT: movq %r9, -152(%rbp)
326 ; CHECK-NEXT: testb %al, %al
327 ; CHECK-NEXT: je .LBB3_2
328 ; CHECK-NEXT: # %bb.1: # %entry
329 ; CHECK-NEXT: movaps %xmm0, -144(%rbp)
330 ; CHECK-NEXT: movaps %xmm1, -128(%rbp)
331 ; CHECK-NEXT: movaps %xmm2, -112(%rbp)
332 ; CHECK-NEXT: movaps %xmm3, -96(%rbp)
333 ; CHECK-NEXT: movaps %xmm4, -80(%rbp)
334 ; CHECK-NEXT: movaps %xmm5, -64(%rbp)
335 ; CHECK-NEXT: movaps %xmm6, -48(%rbp)
336 ; CHECK-NEXT: movaps %xmm7, -32(%rbp)
337 ; CHECK-NEXT: .LBB3_2: # %entry
338 ; CHECK-NEXT: leaq -192(%rbp), %rax
339 ; CHECK-NEXT: movq %rax, (%rax)
340 ; CHECK-NEXT: leaq (%r10), %rax
341 ; CHECK-NEXT: movq %rax, (%rax)
342 ; CHECK-NEXT: movl $48, (%rax)
343 ; CHECK-NEXT: movl $8, (%rax)
344 ; CHECK-NEXT: xorl %eax, %eax
345 ; CHECK-NEXT: xorl %ebx, %ebx
346 ; CHECK-NEXT: xorl %ecx, %ecx
348 ; CHECK-NEXT: #NO_APP
349 ; CHECK-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r10 # 8-byte Reload
350 ; CHECK-NEXT: leaq -8(%rbp), %rsp
351 ; CHECK-NEXT: popq %rbx
352 ; CHECK-NEXT: popq %rbp
353 ; CHECK-NEXT: leaq -8(%r10), %rsp
356 ; X32ABI-LABEL: vmw_host_printf:
357 ; X32ABI: # %bb.0: # %entry
358 ; X32ABI-NEXT: pushq %rbp
359 ; X32ABI-NEXT: movl %esp, %ebp
360 ; X32ABI-NEXT: pushq %rbx
361 ; X32ABI-NEXT: andl $-16, %esp
362 ; X32ABI-NEXT: subl $208, %esp
363 ; X32ABI-NEXT: movl %esp, %ebx
364 ; X32ABI-NEXT: movq %rsi, 24(%ebx)
365 ; X32ABI-NEXT: movq %rdx, 32(%ebx)
366 ; X32ABI-NEXT: movq %rcx, 40(%ebx)
367 ; X32ABI-NEXT: movq %r8, 48(%ebx)
368 ; X32ABI-NEXT: movq %r9, 56(%ebx)
369 ; X32ABI-NEXT: testb %al, %al
370 ; X32ABI-NEXT: je .LBB3_2
371 ; X32ABI-NEXT: # %bb.1: # %entry
372 ; X32ABI-NEXT: movaps %xmm0, 64(%ebx)
373 ; X32ABI-NEXT: movaps %xmm1, 80(%ebx)
374 ; X32ABI-NEXT: movaps %xmm2, 96(%ebx)
375 ; X32ABI-NEXT: movaps %xmm3, 112(%ebx)
376 ; X32ABI-NEXT: movaps %xmm4, 128(%ebx)
377 ; X32ABI-NEXT: movaps %xmm5, 144(%ebx)
378 ; X32ABI-NEXT: movaps %xmm6, 160(%ebx)
379 ; X32ABI-NEXT: movaps %xmm7, 176(%ebx)
380 ; X32ABI-NEXT: .LBB3_2: # %entry
381 ; X32ABI-NEXT: leal 16(%rbx), %eax
382 ; X32ABI-NEXT: movl %eax, (%eax)
383 ; X32ABI-NEXT: leal 16(%rbp), %eax
384 ; X32ABI-NEXT: movl %eax, (%eax)
385 ; X32ABI-NEXT: movl $48, (%eax)
386 ; X32ABI-NEXT: movl $8, (%eax)
387 ; X32ABI-NEXT: xorl %eax, %eax
388 ; X32ABI-NEXT: xorl %ebx, %ebx
389 ; X32ABI-NEXT: xorl %ecx, %ecx
391 ; X32ABI-NEXT: #NO_APP
392 ; X32ABI-NEXT: leal -8(%ebp), %esp
393 ; X32ABI-NEXT: popq %rbx
394 ; X32ABI-NEXT: popq %rbp
397 %0 = alloca i8, i64 poison, align 8
398 call void @llvm.va_start(ptr nonnull poison)
399 %1 = call { i64, i64, i64, i64, i64, i64 } asm sideeffect "", "={ax},={bx},={cx},={dx},={si},={di},{ax},{bx},{cx},{dx},{si},{di},~{memory},~{dirflag},~{fpsr},~{flags}"(i32 0, i32 0, i32 0, i16 undef, i64 undef, i64 undef)
403 declare void @llvm.va_start(ptr)
405 attributes #0 = {"frame-pointer"="all"}
406 !llvm.module.flags = !{!0}
407 !0 = !{i32 2, !"override-stack-alignment", i32 32}