Revert " [LoongArch][ISel] Check the number of sign bits in `PatGprGpr_32` (#107432)"
[llvm-project.git] / llvm / test / CodeGen / X86 / x86-64-baseptr.ll
blob8cda4ba2814bbab0be631e50e3a8caf7cbd7f298
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
9 ; NACL-LABEL: base
10 ; NACL: subq $32, %rsp
11 ; NACL: movq %rsp, %rbx
13 declare i32 @helper() nounwind
14 define void @base() #0 {
15 ; CHECK-LABEL: base:
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
41 ; CHECK-NEXT:    retq
43 ; X32ABI-LABEL: base:
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
69 ; X32ABI-NEXT:    retq
70 entry:
71   %k = call i32 @helper()
72   %a = alloca i32, i32 %k, align 4
73   store i32 0, ptr %a, align 4
74   ret void
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
102 ; CHECK-NEXT:    #APP
103 ; CHECK-NEXT:    nop
104 ; CHECK-NEXT:    #NO_APP
105 ; CHECK-NEXT:    movl $8, %edx
106 ; CHECK-NEXT:    #APP
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
116 ; CHECK-NEXT:    retq
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
140 ; X32ABI-NEXT:    #APP
141 ; X32ABI-NEXT:    nop
142 ; X32ABI-NEXT:    #NO_APP
143 ; X32ABI-NEXT:    movl $8, %edx
144 ; X32ABI-NEXT:    #APP
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
152 ; X32ABI-NEXT:    retq
153 entry:
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
161   ret void
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
206 ; CHECK-NEXT:    #APP
207 ; CHECK-NEXT:    nop
208 ; CHECK-NEXT:    #NO_APP
209 ; CHECK-NEXT:    #APP
210 ; CHECK-NEXT:    nop
211 ; CHECK-NEXT:    #NO_APP
212 ; CHECK-NEXT:    movl $8, %edx
213 ; CHECK-NEXT:    #APP
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
231 ; CHECK-NEXT:    retq
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
272 ; X32ABI-NEXT:    #APP
273 ; X32ABI-NEXT:    nop
274 ; X32ABI-NEXT:    #NO_APP
275 ; X32ABI-NEXT:    #APP
276 ; X32ABI-NEXT:    nop
277 ; X32ABI-NEXT:    #NO_APP
278 ; X32ABI-NEXT:    movl $8, %edx
279 ; X32ABI-NEXT:    #APP
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
295 ; X32ABI-NEXT:    retq
296 entry:
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
306   ret void
309 ; pr62625
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
347 ; CHECK-NEXT:    #APP
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
354 ; CHECK-NEXT:    retq
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
390 ; X32ABI-NEXT:    #APP
391 ; X32ABI-NEXT:    #NO_APP
392 ; X32ABI-NEXT:    leal -8(%ebp), %esp
393 ; X32ABI-NEXT:    popq %rbx
394 ; X32ABI-NEXT:    popq %rbp
395 ; X32ABI-NEXT:    retq
396 entry:
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)
400   ret void
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}