1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s --check-prefixes=CHECK,SSE2
3 ; RUN: llc < %s -mtriple=x86_64-linux-gnu -mattr=avx512bf16,avx512vl | FileCheck %s --check-prefixes=CHECK,AVX,F16,BF16
4 ; RUN: llc < %s -mtriple=x86_64-linux-gnu -mattr=avx512bf16,avx512fp16,avx512vl | FileCheck %s --check-prefixes=CHECK,AVX,F16,FP16
5 ; RUN: llc < %s -mtriple=x86_64-linux-gnu -mattr=avxneconvert,f16c | FileCheck %s --check-prefixes=CHECK,AVX,AVXNC
7 define void @add(ptr %pa, ptr %pb, ptr %pc) nounwind {
10 ; SSE2-NEXT: pushq %rbx
11 ; SSE2-NEXT: movq %rdx, %rbx
12 ; SSE2-NEXT: movzwl (%rsi), %eax
13 ; SSE2-NEXT: shll $16, %eax
14 ; SSE2-NEXT: movd %eax, %xmm1
15 ; SSE2-NEXT: movzwl (%rdi), %eax
16 ; SSE2-NEXT: shll $16, %eax
17 ; SSE2-NEXT: movd %eax, %xmm0
18 ; SSE2-NEXT: addss %xmm1, %xmm0
19 ; SSE2-NEXT: callq __truncsfbf2@PLT
20 ; SSE2-NEXT: movd %xmm0, %eax
21 ; SSE2-NEXT: movw %ax, (%rbx)
22 ; SSE2-NEXT: popq %rbx
27 ; AVX-NEXT: pushq %rbx
28 ; AVX-NEXT: movq %rdx, %rbx
29 ; AVX-NEXT: movzwl (%rsi), %eax
30 ; AVX-NEXT: shll $16, %eax
31 ; AVX-NEXT: vmovd %eax, %xmm0
32 ; AVX-NEXT: movzwl (%rdi), %eax
33 ; AVX-NEXT: shll $16, %eax
34 ; AVX-NEXT: vmovd %eax, %xmm1
35 ; AVX-NEXT: vaddss %xmm0, %xmm1, %xmm0
36 ; AVX-NEXT: callq __truncsfbf2@PLT
37 ; AVX-NEXT: vmovd %xmm0, %eax
38 ; AVX-NEXT: movw %ax, (%rbx)
41 %a = load bfloat, ptr %pa
42 %b = load bfloat, ptr %pb
43 %add = fadd bfloat %a, %b
44 store bfloat %add, ptr %pc
48 define bfloat @add2(bfloat %a, bfloat %b) nounwind {
51 ; SSE2-NEXT: pushq %rax
52 ; SSE2-NEXT: movd %xmm0, %eax
53 ; SSE2-NEXT: movd %xmm1, %ecx
54 ; SSE2-NEXT: shll $16, %ecx
55 ; SSE2-NEXT: movd %ecx, %xmm1
56 ; SSE2-NEXT: shll $16, %eax
57 ; SSE2-NEXT: movd %eax, %xmm0
58 ; SSE2-NEXT: addss %xmm1, %xmm0
59 ; SSE2-NEXT: callq __truncsfbf2@PLT
60 ; SSE2-NEXT: popq %rax
65 ; AVX-NEXT: pushq %rax
66 ; AVX-NEXT: vmovd %xmm0, %eax
67 ; AVX-NEXT: vmovd %xmm1, %ecx
68 ; AVX-NEXT: shll $16, %ecx
69 ; AVX-NEXT: vmovd %ecx, %xmm0
70 ; AVX-NEXT: shll $16, %eax
71 ; AVX-NEXT: vmovd %eax, %xmm1
72 ; AVX-NEXT: vaddss %xmm0, %xmm1, %xmm0
73 ; AVX-NEXT: callq __truncsfbf2@PLT
76 %add = fadd bfloat %a, %b
80 define void @add_double(ptr %pa, ptr %pb, ptr %pc) nounwind {
81 ; SSE2-LABEL: add_double:
83 ; SSE2-NEXT: pushq %rbp
84 ; SSE2-NEXT: pushq %r14
85 ; SSE2-NEXT: pushq %rbx
86 ; SSE2-NEXT: movq %rdx, %rbx
87 ; SSE2-NEXT: movq %rsi, %r14
88 ; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
89 ; SSE2-NEXT: callq __truncdfbf2@PLT
90 ; SSE2-NEXT: movd %xmm0, %ebp
91 ; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero
92 ; SSE2-NEXT: callq __truncdfbf2@PLT
93 ; SSE2-NEXT: movd %xmm0, %eax
94 ; SSE2-NEXT: shll $16, %eax
95 ; SSE2-NEXT: movd %eax, %xmm1
96 ; SSE2-NEXT: shll $16, %ebp
97 ; SSE2-NEXT: movd %ebp, %xmm0
98 ; SSE2-NEXT: addss %xmm1, %xmm0
99 ; SSE2-NEXT: callq __truncsfbf2@PLT
100 ; SSE2-NEXT: movd %xmm0, %eax
101 ; SSE2-NEXT: shll $16, %eax
102 ; SSE2-NEXT: movd %eax, %xmm0
103 ; SSE2-NEXT: cvtss2sd %xmm0, %xmm0
104 ; SSE2-NEXT: movsd %xmm0, (%rbx)
105 ; SSE2-NEXT: popq %rbx
106 ; SSE2-NEXT: popq %r14
107 ; SSE2-NEXT: popq %rbp
110 ; AVX-LABEL: add_double:
112 ; AVX-NEXT: pushq %rbp
113 ; AVX-NEXT: pushq %r14
114 ; AVX-NEXT: pushq %rbx
115 ; AVX-NEXT: movq %rdx, %rbx
116 ; AVX-NEXT: movq %rsi, %r14
117 ; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
118 ; AVX-NEXT: callq __truncdfbf2@PLT
119 ; AVX-NEXT: vmovd %xmm0, %ebp
120 ; AVX-NEXT: vmovq {{.*#+}} xmm0 = mem[0],zero
121 ; AVX-NEXT: callq __truncdfbf2@PLT
122 ; AVX-NEXT: vmovd %xmm0, %eax
123 ; AVX-NEXT: shll $16, %eax
124 ; AVX-NEXT: vmovd %eax, %xmm0
125 ; AVX-NEXT: shll $16, %ebp
126 ; AVX-NEXT: vmovd %ebp, %xmm1
127 ; AVX-NEXT: vaddss %xmm0, %xmm1, %xmm0
128 ; AVX-NEXT: callq __truncsfbf2@PLT
129 ; AVX-NEXT: vmovd %xmm0, %eax
130 ; AVX-NEXT: shll $16, %eax
131 ; AVX-NEXT: vmovd %eax, %xmm0
132 ; AVX-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0
133 ; AVX-NEXT: vmovsd %xmm0, (%rbx)
134 ; AVX-NEXT: popq %rbx
135 ; AVX-NEXT: popq %r14
136 ; AVX-NEXT: popq %rbp
138 %la = load double, ptr %pa
139 %a = fptrunc double %la to bfloat
140 %lb = load double, ptr %pb
141 %b = fptrunc double %lb to bfloat
142 %add = fadd bfloat %a, %b
143 %dadd = fpext bfloat %add to double
144 store double %dadd, ptr %pc
148 define double @add_double2(double %da, double %db) nounwind {
149 ; SSE2-LABEL: add_double2:
151 ; SSE2-NEXT: pushq %rbx
152 ; SSE2-NEXT: subq $16, %rsp
153 ; SSE2-NEXT: movsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
154 ; SSE2-NEXT: callq __truncdfbf2@PLT
155 ; SSE2-NEXT: movd %xmm0, %ebx
156 ; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload
157 ; SSE2-NEXT: # xmm0 = mem[0],zero
158 ; SSE2-NEXT: callq __truncdfbf2@PLT
159 ; SSE2-NEXT: movd %xmm0, %eax
160 ; SSE2-NEXT: shll $16, %eax
161 ; SSE2-NEXT: movd %eax, %xmm1
162 ; SSE2-NEXT: shll $16, %ebx
163 ; SSE2-NEXT: movd %ebx, %xmm0
164 ; SSE2-NEXT: addss %xmm1, %xmm0
165 ; SSE2-NEXT: callq __truncsfbf2@PLT
166 ; SSE2-NEXT: movd %xmm0, %eax
167 ; SSE2-NEXT: shll $16, %eax
168 ; SSE2-NEXT: movd %eax, %xmm0
169 ; SSE2-NEXT: cvtss2sd %xmm0, %xmm0
170 ; SSE2-NEXT: addq $16, %rsp
171 ; SSE2-NEXT: popq %rbx
174 ; AVX-LABEL: add_double2:
176 ; AVX-NEXT: pushq %rbx
177 ; AVX-NEXT: subq $16, %rsp
178 ; AVX-NEXT: vmovsd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
179 ; AVX-NEXT: callq __truncdfbf2@PLT
180 ; AVX-NEXT: vmovd %xmm0, %ebx
181 ; AVX-NEXT: vmovq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 8-byte Folded Reload
182 ; AVX-NEXT: # xmm0 = mem[0],zero
183 ; AVX-NEXT: callq __truncdfbf2@PLT
184 ; AVX-NEXT: vmovd %xmm0, %eax
185 ; AVX-NEXT: shll $16, %eax
186 ; AVX-NEXT: vmovd %eax, %xmm0
187 ; AVX-NEXT: shll $16, %ebx
188 ; AVX-NEXT: vmovd %ebx, %xmm1
189 ; AVX-NEXT: vaddss %xmm0, %xmm1, %xmm0
190 ; AVX-NEXT: callq __truncsfbf2@PLT
191 ; AVX-NEXT: vmovd %xmm0, %eax
192 ; AVX-NEXT: shll $16, %eax
193 ; AVX-NEXT: vmovd %eax, %xmm0
194 ; AVX-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0
195 ; AVX-NEXT: addq $16, %rsp
196 ; AVX-NEXT: popq %rbx
198 %a = fptrunc double %da to bfloat
199 %b = fptrunc double %db to bfloat
200 %add = fadd bfloat %a, %b
201 %dadd = fpext bfloat %add to double
205 define void @add_constant(ptr %pa, ptr %pc) nounwind {
206 ; SSE2-LABEL: add_constant:
208 ; SSE2-NEXT: pushq %rbx
209 ; SSE2-NEXT: movq %rsi, %rbx
210 ; SSE2-NEXT: movzwl (%rdi), %eax
211 ; SSE2-NEXT: shll $16, %eax
212 ; SSE2-NEXT: movd %eax, %xmm0
213 ; SSE2-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
214 ; SSE2-NEXT: callq __truncsfbf2@PLT
215 ; SSE2-NEXT: movd %xmm0, %eax
216 ; SSE2-NEXT: movw %ax, (%rbx)
217 ; SSE2-NEXT: popq %rbx
220 ; AVX-LABEL: add_constant:
222 ; AVX-NEXT: pushq %rbx
223 ; AVX-NEXT: movq %rsi, %rbx
224 ; AVX-NEXT: movzwl (%rdi), %eax
225 ; AVX-NEXT: shll $16, %eax
226 ; AVX-NEXT: vmovd %eax, %xmm0
227 ; AVX-NEXT: vaddss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
228 ; AVX-NEXT: callq __truncsfbf2@PLT
229 ; AVX-NEXT: vmovd %xmm0, %eax
230 ; AVX-NEXT: movw %ax, (%rbx)
231 ; AVX-NEXT: popq %rbx
233 %a = load bfloat, ptr %pa
234 %add = fadd bfloat %a, 1.0
235 store bfloat %add, ptr %pc
239 define bfloat @add_constant2(bfloat %a) nounwind {
240 ; SSE2-LABEL: add_constant2:
242 ; SSE2-NEXT: pushq %rax
243 ; SSE2-NEXT: movd %xmm0, %eax
244 ; SSE2-NEXT: shll $16, %eax
245 ; SSE2-NEXT: movd %eax, %xmm0
246 ; SSE2-NEXT: addss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0
247 ; SSE2-NEXT: callq __truncsfbf2@PLT
248 ; SSE2-NEXT: popq %rax
251 ; AVX-LABEL: add_constant2:
253 ; AVX-NEXT: pushq %rax
254 ; AVX-NEXT: vmovd %xmm0, %eax
255 ; AVX-NEXT: shll $16, %eax
256 ; AVX-NEXT: vmovd %eax, %xmm0
257 ; AVX-NEXT: vaddss {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
258 ; AVX-NEXT: callq __truncsfbf2@PLT
259 ; AVX-NEXT: popq %rax
261 %add = fadd bfloat %a, 1.0
265 define void @store_constant(ptr %pc) nounwind {
266 ; CHECK-LABEL: store_constant:
268 ; CHECK-NEXT: movw $16256, (%rdi) # imm = 0x3F80
270 store bfloat 1.0, ptr %pc
274 define void @fold_ext_trunc(ptr %pa, ptr %pc) nounwind {
275 ; CHECK-LABEL: fold_ext_trunc:
277 ; CHECK-NEXT: movzwl (%rdi), %eax
278 ; CHECK-NEXT: movw %ax, (%rsi)
280 %a = load bfloat, ptr %pa
281 %ext = fpext bfloat %a to float
282 %trunc = fptrunc float %ext to bfloat
283 store bfloat %trunc, ptr %pc
287 define bfloat @fold_ext_trunc2(bfloat %a) nounwind {
288 ; CHECK-LABEL: fold_ext_trunc2:
291 %ext = fpext bfloat %a to float
292 %trunc = fptrunc float %ext to bfloat
296 define <8 x bfloat> @addv(<8 x bfloat> %a, <8 x bfloat> %b) nounwind {
299 ; SSE2-NEXT: pushq %rbp
300 ; SSE2-NEXT: pushq %r15
301 ; SSE2-NEXT: pushq %r14
302 ; SSE2-NEXT: pushq %r13
303 ; SSE2-NEXT: pushq %r12
304 ; SSE2-NEXT: pushq %rbx
305 ; SSE2-NEXT: subq $56, %rsp
306 ; SSE2-NEXT: movq %xmm0, %rcx
307 ; SSE2-NEXT: movq %rcx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
308 ; SSE2-NEXT: movq %rcx, %rax
309 ; SSE2-NEXT: shrq $32, %rax
310 ; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
311 ; SSE2-NEXT: movq %xmm1, %rdx
312 ; SSE2-NEXT: movq %rdx, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
313 ; SSE2-NEXT: movq %rdx, %rax
314 ; SSE2-NEXT: shrq $32, %rax
315 ; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
316 ; SSE2-NEXT: movq %rcx, %rax
317 ; SSE2-NEXT: shrq $48, %rax
318 ; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
319 ; SSE2-NEXT: movq %rdx, %rax
320 ; SSE2-NEXT: shrq $48, %rax
321 ; SSE2-NEXT: movq %rax, {{[-0-9]+}}(%r{{[sb]}}p) # 8-byte Spill
322 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
323 ; SSE2-NEXT: movq %xmm0, %r12
324 ; SSE2-NEXT: movq %r12, %rax
325 ; SSE2-NEXT: shrq $32, %rax
326 ; SSE2-NEXT: movq %rax, (%rsp) # 8-byte Spill
327 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm1 = xmm1[1,1]
328 ; SSE2-NEXT: movq %xmm1, %r14
329 ; SSE2-NEXT: movq %r14, %rbp
330 ; SSE2-NEXT: shrq $32, %rbp
331 ; SSE2-NEXT: movq %r12, %r15
332 ; SSE2-NEXT: shrq $48, %r15
333 ; SSE2-NEXT: movq %r14, %r13
334 ; SSE2-NEXT: shrq $48, %r13
335 ; SSE2-NEXT: movl %r14d, %eax
336 ; SSE2-NEXT: andl $-65536, %eax # imm = 0xFFFF0000
337 ; SSE2-NEXT: movd %eax, %xmm1
338 ; SSE2-NEXT: movl %r12d, %eax
339 ; SSE2-NEXT: andl $-65536, %eax # imm = 0xFFFF0000
340 ; SSE2-NEXT: movd %eax, %xmm0
341 ; SSE2-NEXT: addss %xmm1, %xmm0
342 ; SSE2-NEXT: callq __truncsfbf2@PLT
343 ; SSE2-NEXT: movd %xmm0, %ebx
344 ; SSE2-NEXT: shll $16, %ebx
345 ; SSE2-NEXT: shll $16, %r14d
346 ; SSE2-NEXT: movd %r14d, %xmm1
347 ; SSE2-NEXT: shll $16, %r12d
348 ; SSE2-NEXT: movd %r12d, %xmm0
349 ; SSE2-NEXT: addss %xmm1, %xmm0
350 ; SSE2-NEXT: callq __truncsfbf2@PLT
351 ; SSE2-NEXT: movd %xmm0, %eax
352 ; SSE2-NEXT: movzwl %ax, %r12d
353 ; SSE2-NEXT: orl %ebx, %r12d
354 ; SSE2-NEXT: shll $16, %r13d
355 ; SSE2-NEXT: movd %r13d, %xmm1
356 ; SSE2-NEXT: shll $16, %r15d
357 ; SSE2-NEXT: movd %r15d, %xmm0
358 ; SSE2-NEXT: addss %xmm1, %xmm0
359 ; SSE2-NEXT: callq __truncsfbf2@PLT
360 ; SSE2-NEXT: movd %xmm0, %r14d
361 ; SSE2-NEXT: shll $16, %r14d
362 ; SSE2-NEXT: shll $16, %ebp
363 ; SSE2-NEXT: movd %ebp, %xmm1
364 ; SSE2-NEXT: movq (%rsp), %rax # 8-byte Reload
365 ; SSE2-NEXT: shll $16, %eax
366 ; SSE2-NEXT: movd %eax, %xmm0
367 ; SSE2-NEXT: addss %xmm1, %xmm0
368 ; SSE2-NEXT: callq __truncsfbf2@PLT
369 ; SSE2-NEXT: movd %xmm0, %eax
370 ; SSE2-NEXT: movzwl %ax, %ebx
371 ; SSE2-NEXT: orl %r14d, %ebx
372 ; SSE2-NEXT: shlq $32, %rbx
373 ; SSE2-NEXT: orq %r12, %rbx
374 ; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r15 # 8-byte Reload
375 ; SSE2-NEXT: movl %r15d, %eax
376 ; SSE2-NEXT: andl $-65536, %eax # imm = 0xFFFF0000
377 ; SSE2-NEXT: movd %eax, %xmm1
378 ; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %r14 # 8-byte Reload
379 ; SSE2-NEXT: movl %r14d, %eax
380 ; SSE2-NEXT: andl $-65536, %eax # imm = 0xFFFF0000
381 ; SSE2-NEXT: movd %eax, %xmm0
382 ; SSE2-NEXT: addss %xmm1, %xmm0
383 ; SSE2-NEXT: callq __truncsfbf2@PLT
384 ; SSE2-NEXT: movd %xmm0, %ebp
385 ; SSE2-NEXT: shll $16, %ebp
386 ; SSE2-NEXT: movq %r15, %rax
387 ; SSE2-NEXT: shll $16, %eax
388 ; SSE2-NEXT: movd %eax, %xmm1
389 ; SSE2-NEXT: movq %r14, %rax
390 ; SSE2-NEXT: shll $16, %eax
391 ; SSE2-NEXT: movd %eax, %xmm0
392 ; SSE2-NEXT: addss %xmm1, %xmm0
393 ; SSE2-NEXT: callq __truncsfbf2@PLT
394 ; SSE2-NEXT: movd %xmm0, %eax
395 ; SSE2-NEXT: movzwl %ax, %r14d
396 ; SSE2-NEXT: orl %ebp, %r14d
397 ; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
398 ; SSE2-NEXT: shll $16, %eax
399 ; SSE2-NEXT: movd %eax, %xmm1
400 ; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
401 ; SSE2-NEXT: shll $16, %eax
402 ; SSE2-NEXT: movd %eax, %xmm0
403 ; SSE2-NEXT: addss %xmm1, %xmm0
404 ; SSE2-NEXT: callq __truncsfbf2@PLT
405 ; SSE2-NEXT: movd %xmm0, %ebp
406 ; SSE2-NEXT: shll $16, %ebp
407 ; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
408 ; SSE2-NEXT: shll $16, %eax
409 ; SSE2-NEXT: movd %eax, %xmm1
410 ; SSE2-NEXT: movq {{[-0-9]+}}(%r{{[sb]}}p), %rax # 8-byte Reload
411 ; SSE2-NEXT: shll $16, %eax
412 ; SSE2-NEXT: movd %eax, %xmm0
413 ; SSE2-NEXT: addss %xmm1, %xmm0
414 ; SSE2-NEXT: callq __truncsfbf2@PLT
415 ; SSE2-NEXT: movd %xmm0, %eax
416 ; SSE2-NEXT: movzwl %ax, %eax
417 ; SSE2-NEXT: orl %ebp, %eax
418 ; SSE2-NEXT: shlq $32, %rax
419 ; SSE2-NEXT: orq %r14, %rax
420 ; SSE2-NEXT: movq %rax, %xmm0
421 ; SSE2-NEXT: movq %rbx, %xmm1
422 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
423 ; SSE2-NEXT: addq $56, %rsp
424 ; SSE2-NEXT: popq %rbx
425 ; SSE2-NEXT: popq %r12
426 ; SSE2-NEXT: popq %r13
427 ; SSE2-NEXT: popq %r14
428 ; SSE2-NEXT: popq %r15
429 ; SSE2-NEXT: popq %rbp
434 ; BF16-NEXT: pushq %rbp
435 ; BF16-NEXT: pushq %r15
436 ; BF16-NEXT: pushq %r14
437 ; BF16-NEXT: pushq %r13
438 ; BF16-NEXT: pushq %r12
439 ; BF16-NEXT: pushq %rbx
440 ; BF16-NEXT: subq $40, %rsp
441 ; BF16-NEXT: vmovdqa %xmm1, (%rsp) # 16-byte Spill
442 ; BF16-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
443 ; BF16-NEXT: vpextrw $7, %xmm1, %eax
444 ; BF16-NEXT: shll $16, %eax
445 ; BF16-NEXT: vmovd %eax, %xmm2
446 ; BF16-NEXT: vpextrw $7, %xmm0, %eax
447 ; BF16-NEXT: shll $16, %eax
448 ; BF16-NEXT: vmovd %eax, %xmm1
449 ; BF16-NEXT: vaddss %xmm2, %xmm1, %xmm0
450 ; BF16-NEXT: callq __truncsfbf2@PLT
451 ; BF16-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
452 ; BF16-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
453 ; BF16-NEXT: vpextrw $6, %xmm0, %eax
454 ; BF16-NEXT: shll $16, %eax
455 ; BF16-NEXT: vmovd %eax, %xmm0
456 ; BF16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
457 ; BF16-NEXT: vpextrw $6, %xmm1, %eax
458 ; BF16-NEXT: shll $16, %eax
459 ; BF16-NEXT: vmovd %eax, %xmm1
460 ; BF16-NEXT: vaddss %xmm0, %xmm1, %xmm0
461 ; BF16-NEXT: callq __truncsfbf2@PLT
462 ; BF16-NEXT: vmovd %xmm0, %ebp
463 ; BF16-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
464 ; BF16-NEXT: vpextrw $5, %xmm0, %eax
465 ; BF16-NEXT: shll $16, %eax
466 ; BF16-NEXT: vmovd %eax, %xmm0
467 ; BF16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
468 ; BF16-NEXT: vpextrw $5, %xmm1, %eax
469 ; BF16-NEXT: shll $16, %eax
470 ; BF16-NEXT: vmovd %eax, %xmm1
471 ; BF16-NEXT: vaddss %xmm0, %xmm1, %xmm0
472 ; BF16-NEXT: callq __truncsfbf2@PLT
473 ; BF16-NEXT: vmovd %xmm0, %r14d
474 ; BF16-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
475 ; BF16-NEXT: vpextrw $4, %xmm0, %eax
476 ; BF16-NEXT: shll $16, %eax
477 ; BF16-NEXT: vmovd %eax, %xmm0
478 ; BF16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
479 ; BF16-NEXT: vpextrw $4, %xmm1, %eax
480 ; BF16-NEXT: shll $16, %eax
481 ; BF16-NEXT: vmovd %eax, %xmm1
482 ; BF16-NEXT: vaddss %xmm0, %xmm1, %xmm0
483 ; BF16-NEXT: callq __truncsfbf2@PLT
484 ; BF16-NEXT: vmovd %xmm0, %r15d
485 ; BF16-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
486 ; BF16-NEXT: vpextrw $3, %xmm0, %eax
487 ; BF16-NEXT: shll $16, %eax
488 ; BF16-NEXT: vmovd %eax, %xmm0
489 ; BF16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
490 ; BF16-NEXT: vpextrw $3, %xmm1, %eax
491 ; BF16-NEXT: shll $16, %eax
492 ; BF16-NEXT: vmovd %eax, %xmm1
493 ; BF16-NEXT: vaddss %xmm0, %xmm1, %xmm0
494 ; BF16-NEXT: callq __truncsfbf2@PLT
495 ; BF16-NEXT: vmovd %xmm0, %r12d
496 ; BF16-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
497 ; BF16-NEXT: vpextrw $2, %xmm0, %eax
498 ; BF16-NEXT: shll $16, %eax
499 ; BF16-NEXT: vmovd %eax, %xmm0
500 ; BF16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
501 ; BF16-NEXT: vpextrw $2, %xmm1, %eax
502 ; BF16-NEXT: shll $16, %eax
503 ; BF16-NEXT: vmovd %eax, %xmm1
504 ; BF16-NEXT: vaddss %xmm0, %xmm1, %xmm0
505 ; BF16-NEXT: callq __truncsfbf2@PLT
506 ; BF16-NEXT: vmovd %xmm0, %r13d
507 ; BF16-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
508 ; BF16-NEXT: vpextrw $1, %xmm0, %eax
509 ; BF16-NEXT: shll $16, %eax
510 ; BF16-NEXT: vmovd %eax, %xmm0
511 ; BF16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
512 ; BF16-NEXT: vpextrw $1, %xmm1, %eax
513 ; BF16-NEXT: shll $16, %eax
514 ; BF16-NEXT: vmovd %eax, %xmm1
515 ; BF16-NEXT: vaddss %xmm0, %xmm1, %xmm0
516 ; BF16-NEXT: callq __truncsfbf2@PLT
517 ; BF16-NEXT: vmovd %xmm0, %ebx
518 ; BF16-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
519 ; BF16-NEXT: vmovd %xmm0, %eax
520 ; BF16-NEXT: shll $16, %eax
521 ; BF16-NEXT: vmovd %eax, %xmm0
522 ; BF16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
523 ; BF16-NEXT: vmovd %xmm1, %eax
524 ; BF16-NEXT: shll $16, %eax
525 ; BF16-NEXT: vmovd %eax, %xmm1
526 ; BF16-NEXT: vaddss %xmm0, %xmm1, %xmm0
527 ; BF16-NEXT: callq __truncsfbf2@PLT
528 ; BF16-NEXT: vmovd %xmm0, %eax
529 ; BF16-NEXT: vmovd %eax, %xmm0
530 ; BF16-NEXT: vpinsrw $1, %ebx, %xmm0, %xmm0
531 ; BF16-NEXT: vpinsrw $2, %r13d, %xmm0, %xmm0
532 ; BF16-NEXT: vpinsrw $3, %r12d, %xmm0, %xmm0
533 ; BF16-NEXT: vpinsrw $4, %r15d, %xmm0, %xmm0
534 ; BF16-NEXT: vpinsrw $5, %r14d, %xmm0, %xmm0
535 ; BF16-NEXT: vpinsrw $6, %ebp, %xmm0, %xmm0
536 ; BF16-NEXT: vpinsrw $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
537 ; BF16-NEXT: addq $40, %rsp
538 ; BF16-NEXT: popq %rbx
539 ; BF16-NEXT: popq %r12
540 ; BF16-NEXT: popq %r13
541 ; BF16-NEXT: popq %r14
542 ; BF16-NEXT: popq %r15
543 ; BF16-NEXT: popq %rbp
548 ; FP16-NEXT: pushq %rbp
549 ; FP16-NEXT: pushq %r15
550 ; FP16-NEXT: pushq %r14
551 ; FP16-NEXT: pushq %r13
552 ; FP16-NEXT: pushq %r12
553 ; FP16-NEXT: pushq %rbx
554 ; FP16-NEXT: subq $40, %rsp
555 ; FP16-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
556 ; FP16-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill
557 ; FP16-NEXT: vmovw %xmm1, %eax
558 ; FP16-NEXT: shll $16, %eax
559 ; FP16-NEXT: vmovd %eax, %xmm2
560 ; FP16-NEXT: vmovw %xmm0, %eax
561 ; FP16-NEXT: shll $16, %eax
562 ; FP16-NEXT: vmovd %eax, %xmm1
563 ; FP16-NEXT: vaddss %xmm2, %xmm1, %xmm0
564 ; FP16-NEXT: callq __truncsfbf2@PLT
565 ; FP16-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
566 ; FP16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
567 ; FP16-NEXT: vpextrw $7, %xmm0, %eax
568 ; FP16-NEXT: shll $16, %eax
569 ; FP16-NEXT: vmovd %eax, %xmm0
570 ; FP16-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload
571 ; FP16-NEXT: vpextrw $7, %xmm1, %eax
572 ; FP16-NEXT: shll $16, %eax
573 ; FP16-NEXT: vmovd %eax, %xmm1
574 ; FP16-NEXT: vaddss %xmm0, %xmm1, %xmm0
575 ; FP16-NEXT: callq __truncsfbf2@PLT
576 ; FP16-NEXT: vmovd %xmm0, %ebp
577 ; FP16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
578 ; FP16-NEXT: vpextrw $6, %xmm0, %eax
579 ; FP16-NEXT: shll $16, %eax
580 ; FP16-NEXT: vmovd %eax, %xmm0
581 ; FP16-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload
582 ; FP16-NEXT: vpextrw $6, %xmm1, %eax
583 ; FP16-NEXT: shll $16, %eax
584 ; FP16-NEXT: vmovd %eax, %xmm1
585 ; FP16-NEXT: vaddss %xmm0, %xmm1, %xmm0
586 ; FP16-NEXT: callq __truncsfbf2@PLT
587 ; FP16-NEXT: vmovd %xmm0, %r14d
588 ; FP16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
589 ; FP16-NEXT: vpextrw $5, %xmm0, %eax
590 ; FP16-NEXT: shll $16, %eax
591 ; FP16-NEXT: vmovd %eax, %xmm0
592 ; FP16-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload
593 ; FP16-NEXT: vpextrw $5, %xmm1, %eax
594 ; FP16-NEXT: shll $16, %eax
595 ; FP16-NEXT: vmovd %eax, %xmm1
596 ; FP16-NEXT: vaddss %xmm0, %xmm1, %xmm0
597 ; FP16-NEXT: callq __truncsfbf2@PLT
598 ; FP16-NEXT: vmovd %xmm0, %r15d
599 ; FP16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
600 ; FP16-NEXT: vpextrw $4, %xmm0, %eax
601 ; FP16-NEXT: shll $16, %eax
602 ; FP16-NEXT: vmovd %eax, %xmm0
603 ; FP16-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload
604 ; FP16-NEXT: vpextrw $4, %xmm1, %eax
605 ; FP16-NEXT: shll $16, %eax
606 ; FP16-NEXT: vmovd %eax, %xmm1
607 ; FP16-NEXT: vaddss %xmm0, %xmm1, %xmm0
608 ; FP16-NEXT: callq __truncsfbf2@PLT
609 ; FP16-NEXT: vmovd %xmm0, %r12d
610 ; FP16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
611 ; FP16-NEXT: vpextrw $3, %xmm0, %eax
612 ; FP16-NEXT: shll $16, %eax
613 ; FP16-NEXT: vmovd %eax, %xmm0
614 ; FP16-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload
615 ; FP16-NEXT: vpextrw $3, %xmm1, %eax
616 ; FP16-NEXT: shll $16, %eax
617 ; FP16-NEXT: vmovd %eax, %xmm1
618 ; FP16-NEXT: vaddss %xmm0, %xmm1, %xmm0
619 ; FP16-NEXT: callq __truncsfbf2@PLT
620 ; FP16-NEXT: vmovd %xmm0, %r13d
621 ; FP16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
622 ; FP16-NEXT: vpextrw $2, %xmm0, %eax
623 ; FP16-NEXT: shll $16, %eax
624 ; FP16-NEXT: vmovd %eax, %xmm0
625 ; FP16-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload
626 ; FP16-NEXT: vpextrw $2, %xmm1, %eax
627 ; FP16-NEXT: shll $16, %eax
628 ; FP16-NEXT: vmovd %eax, %xmm1
629 ; FP16-NEXT: vaddss %xmm0, %xmm1, %xmm0
630 ; FP16-NEXT: callq __truncsfbf2@PLT
631 ; FP16-NEXT: vmovd %xmm0, %ebx
632 ; FP16-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
633 ; FP16-NEXT: vpextrw $1, %xmm0, %eax
634 ; FP16-NEXT: shll $16, %eax
635 ; FP16-NEXT: vmovd %eax, %xmm0
636 ; FP16-NEXT: vmovdqa (%rsp), %xmm1 # 16-byte Reload
637 ; FP16-NEXT: vpextrw $1, %xmm1, %eax
638 ; FP16-NEXT: shll $16, %eax
639 ; FP16-NEXT: vmovd %eax, %xmm1
640 ; FP16-NEXT: vaddss %xmm0, %xmm1, %xmm0
641 ; FP16-NEXT: callq __truncsfbf2@PLT
642 ; FP16-NEXT: vmovd %xmm0, %eax
643 ; FP16-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
644 ; FP16-NEXT: # xmm0 = mem[0],zero,zero,zero
645 ; FP16-NEXT: vpinsrw $1, %eax, %xmm0, %xmm0
646 ; FP16-NEXT: vpinsrw $2, %ebx, %xmm0, %xmm0
647 ; FP16-NEXT: vpinsrw $3, %r13d, %xmm0, %xmm0
648 ; FP16-NEXT: vpinsrw $4, %r12d, %xmm0, %xmm0
649 ; FP16-NEXT: vpinsrw $5, %r15d, %xmm0, %xmm0
650 ; FP16-NEXT: vpinsrw $6, %r14d, %xmm0, %xmm0
651 ; FP16-NEXT: vpinsrw $7, %ebp, %xmm0, %xmm0
652 ; FP16-NEXT: addq $40, %rsp
653 ; FP16-NEXT: popq %rbx
654 ; FP16-NEXT: popq %r12
655 ; FP16-NEXT: popq %r13
656 ; FP16-NEXT: popq %r14
657 ; FP16-NEXT: popq %r15
658 ; FP16-NEXT: popq %rbp
663 ; AVXNC-NEXT: pushq %rbp
664 ; AVXNC-NEXT: pushq %r15
665 ; AVXNC-NEXT: pushq %r14
666 ; AVXNC-NEXT: pushq %r13
667 ; AVXNC-NEXT: pushq %r12
668 ; AVXNC-NEXT: pushq %rbx
669 ; AVXNC-NEXT: subq $40, %rsp
670 ; AVXNC-NEXT: vmovdqa %xmm1, (%rsp) # 16-byte Spill
671 ; AVXNC-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
672 ; AVXNC-NEXT: vpextrw $7, %xmm1, %eax
673 ; AVXNC-NEXT: shll $16, %eax
674 ; AVXNC-NEXT: vmovd %eax, %xmm2
675 ; AVXNC-NEXT: vpextrw $7, %xmm0, %eax
676 ; AVXNC-NEXT: shll $16, %eax
677 ; AVXNC-NEXT: vmovd %eax, %xmm1
678 ; AVXNC-NEXT: vaddss %xmm2, %xmm1, %xmm0
679 ; AVXNC-NEXT: callq __truncsfbf2@PLT
680 ; AVXNC-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
681 ; AVXNC-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
682 ; AVXNC-NEXT: vpextrw $6, %xmm0, %eax
683 ; AVXNC-NEXT: shll $16, %eax
684 ; AVXNC-NEXT: vmovd %eax, %xmm0
685 ; AVXNC-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
686 ; AVXNC-NEXT: vpextrw $6, %xmm1, %eax
687 ; AVXNC-NEXT: shll $16, %eax
688 ; AVXNC-NEXT: vmovd %eax, %xmm1
689 ; AVXNC-NEXT: vaddss %xmm0, %xmm1, %xmm0
690 ; AVXNC-NEXT: callq __truncsfbf2@PLT
691 ; AVXNC-NEXT: vmovd %xmm0, %ebp
692 ; AVXNC-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
693 ; AVXNC-NEXT: vpextrw $5, %xmm0, %eax
694 ; AVXNC-NEXT: shll $16, %eax
695 ; AVXNC-NEXT: vmovd %eax, %xmm0
696 ; AVXNC-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
697 ; AVXNC-NEXT: vpextrw $5, %xmm1, %eax
698 ; AVXNC-NEXT: shll $16, %eax
699 ; AVXNC-NEXT: vmovd %eax, %xmm1
700 ; AVXNC-NEXT: vaddss %xmm0, %xmm1, %xmm0
701 ; AVXNC-NEXT: callq __truncsfbf2@PLT
702 ; AVXNC-NEXT: vmovd %xmm0, %r14d
703 ; AVXNC-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
704 ; AVXNC-NEXT: vpextrw $4, %xmm0, %eax
705 ; AVXNC-NEXT: shll $16, %eax
706 ; AVXNC-NEXT: vmovd %eax, %xmm0
707 ; AVXNC-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
708 ; AVXNC-NEXT: vpextrw $4, %xmm1, %eax
709 ; AVXNC-NEXT: shll $16, %eax
710 ; AVXNC-NEXT: vmovd %eax, %xmm1
711 ; AVXNC-NEXT: vaddss %xmm0, %xmm1, %xmm0
712 ; AVXNC-NEXT: callq __truncsfbf2@PLT
713 ; AVXNC-NEXT: vmovd %xmm0, %r15d
714 ; AVXNC-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
715 ; AVXNC-NEXT: vpextrw $3, %xmm0, %eax
716 ; AVXNC-NEXT: shll $16, %eax
717 ; AVXNC-NEXT: vmovd %eax, %xmm0
718 ; AVXNC-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
719 ; AVXNC-NEXT: vpextrw $3, %xmm1, %eax
720 ; AVXNC-NEXT: shll $16, %eax
721 ; AVXNC-NEXT: vmovd %eax, %xmm1
722 ; AVXNC-NEXT: vaddss %xmm0, %xmm1, %xmm0
723 ; AVXNC-NEXT: callq __truncsfbf2@PLT
724 ; AVXNC-NEXT: vmovd %xmm0, %r12d
725 ; AVXNC-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
726 ; AVXNC-NEXT: vpextrw $2, %xmm0, %eax
727 ; AVXNC-NEXT: shll $16, %eax
728 ; AVXNC-NEXT: vmovd %eax, %xmm0
729 ; AVXNC-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
730 ; AVXNC-NEXT: vpextrw $2, %xmm1, %eax
731 ; AVXNC-NEXT: shll $16, %eax
732 ; AVXNC-NEXT: vmovd %eax, %xmm1
733 ; AVXNC-NEXT: vaddss %xmm0, %xmm1, %xmm0
734 ; AVXNC-NEXT: callq __truncsfbf2@PLT
735 ; AVXNC-NEXT: vmovd %xmm0, %r13d
736 ; AVXNC-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
737 ; AVXNC-NEXT: vpextrw $1, %xmm0, %eax
738 ; AVXNC-NEXT: shll $16, %eax
739 ; AVXNC-NEXT: vmovd %eax, %xmm0
740 ; AVXNC-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
741 ; AVXNC-NEXT: vpextrw $1, %xmm1, %eax
742 ; AVXNC-NEXT: shll $16, %eax
743 ; AVXNC-NEXT: vmovd %eax, %xmm1
744 ; AVXNC-NEXT: vaddss %xmm0, %xmm1, %xmm0
745 ; AVXNC-NEXT: callq __truncsfbf2@PLT
746 ; AVXNC-NEXT: vmovd %xmm0, %ebx
747 ; AVXNC-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload
748 ; AVXNC-NEXT: vmovd %xmm0, %eax
749 ; AVXNC-NEXT: shll $16, %eax
750 ; AVXNC-NEXT: vmovd %eax, %xmm0
751 ; AVXNC-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
752 ; AVXNC-NEXT: vmovd %xmm1, %eax
753 ; AVXNC-NEXT: shll $16, %eax
754 ; AVXNC-NEXT: vmovd %eax, %xmm1
755 ; AVXNC-NEXT: vaddss %xmm0, %xmm1, %xmm0
756 ; AVXNC-NEXT: callq __truncsfbf2@PLT
757 ; AVXNC-NEXT: vmovd %xmm0, %eax
758 ; AVXNC-NEXT: vmovd %eax, %xmm0
759 ; AVXNC-NEXT: vpinsrw $1, %ebx, %xmm0, %xmm0
760 ; AVXNC-NEXT: vpinsrw $2, %r13d, %xmm0, %xmm0
761 ; AVXNC-NEXT: vpinsrw $3, %r12d, %xmm0, %xmm0
762 ; AVXNC-NEXT: vpinsrw $4, %r15d, %xmm0, %xmm0
763 ; AVXNC-NEXT: vpinsrw $5, %r14d, %xmm0, %xmm0
764 ; AVXNC-NEXT: vpinsrw $6, %ebp, %xmm0, %xmm0
765 ; AVXNC-NEXT: vpinsrw $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
766 ; AVXNC-NEXT: addq $40, %rsp
767 ; AVXNC-NEXT: popq %rbx
768 ; AVXNC-NEXT: popq %r12
769 ; AVXNC-NEXT: popq %r13
770 ; AVXNC-NEXT: popq %r14
771 ; AVXNC-NEXT: popq %r15
772 ; AVXNC-NEXT: popq %rbp
774 %add = fadd <8 x bfloat> %a, %b
775 ret <8 x bfloat> %add
778 define <2 x bfloat> @pr62997(bfloat %a, bfloat %b) {
779 ; SSE2-LABEL: pr62997:
781 ; SSE2-NEXT: movd %xmm0, %eax
782 ; SSE2-NEXT: movd %xmm1, %ecx
783 ; SSE2-NEXT: pinsrw $0, %ecx, %xmm1
784 ; SSE2-NEXT: pinsrw $0, %eax, %xmm0
785 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
788 ; AVX-LABEL: pr62997:
790 ; AVX-NEXT: vmovd %xmm1, %eax
791 ; AVX-NEXT: vmovd %xmm0, %ecx
792 ; AVX-NEXT: vmovd %ecx, %xmm0
793 ; AVX-NEXT: vpinsrw $1, %eax, %xmm0, %xmm0
795 %1 = insertelement <2 x bfloat> undef, bfloat %a, i64 0
796 %2 = insertelement <2 x bfloat> %1, bfloat %b, i64 1
800 define <32 x bfloat> @pr63017() {
801 ; SSE2-LABEL: pr63017:
803 ; SSE2-NEXT: xorps %xmm0, %xmm0
804 ; SSE2-NEXT: xorps %xmm1, %xmm1
805 ; SSE2-NEXT: xorps %xmm2, %xmm2
806 ; SSE2-NEXT: xorps %xmm3, %xmm3
809 ; F16-LABEL: pr63017:
811 ; F16-NEXT: vxorps %xmm0, %xmm0, %xmm0
814 ; AVXNC-LABEL: pr63017:
816 ; AVXNC-NEXT: vxorps %xmm0, %xmm0, %xmm0
817 ; AVXNC-NEXT: vxorps %xmm1, %xmm1, %xmm1
819 ret <32 x bfloat> zeroinitializer
822 define <32 x bfloat> @pr63017_2() nounwind {
823 ; SSE2-LABEL: pr63017_2:
825 ; SSE2-NEXT: pushq %r14
826 ; SSE2-NEXT: pushq %rbx
827 ; SSE2-NEXT: subq $200, %rsp
828 ; SSE2-NEXT: xorl %eax, %eax
829 ; SSE2-NEXT: testb %al, %al
830 ; SSE2-NEXT: jne .LBB12_1
831 ; SSE2-NEXT: # %bb.2: # %cond.load
832 ; SSE2-NEXT: movzwl (%rax), %eax
833 ; SSE2-NEXT: shll $16, %eax
834 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
835 ; SSE2-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
836 ; SSE2-NEXT: movdqa %xmm0, %xmm1
837 ; SSE2-NEXT: jmp .LBB12_3
838 ; SSE2-NEXT: .LBB12_1:
839 ; SSE2-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
840 ; SSE2-NEXT: movdqa %xmm1, %xmm0
841 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
842 ; SSE2-NEXT: .LBB12_3: # %else
843 ; SSE2-NEXT: xorl %eax, %eax
844 ; SSE2-NEXT: testb %al, %al
845 ; SSE2-NEXT: jne .LBB12_5
846 ; SSE2-NEXT: # %bb.4: # %cond.load1
847 ; SSE2-NEXT: movzwl (%rax), %eax
848 ; SSE2-NEXT: shll $16, %eax
849 ; SSE2-NEXT: movd %eax, %xmm0
850 ; SSE2-NEXT: .LBB12_5: # %else2
851 ; SSE2-NEXT: xorl %eax, %eax
852 ; SSE2-NEXT: testb %al, %al
853 ; SSE2-NEXT: jne .LBB12_6
854 ; SSE2-NEXT: # %bb.7: # %cond.load4
855 ; SSE2-NEXT: movzwl (%rax), %eax
856 ; SSE2-NEXT: shll $16, %eax
857 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
858 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
859 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
860 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
861 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
862 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
863 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
864 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
865 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
866 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
867 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
868 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
869 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
870 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
871 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
872 ; SSE2-NEXT: movdqa %xmm1, %xmm14
873 ; SSE2-NEXT: movdqa %xmm1, %xmm15
874 ; SSE2-NEXT: movdqa %xmm1, %xmm12
875 ; SSE2-NEXT: movdqa %xmm1, %xmm13
876 ; SSE2-NEXT: movdqa %xmm1, %xmm10
877 ; SSE2-NEXT: movdqa %xmm1, %xmm11
878 ; SSE2-NEXT: movdqa %xmm1, %xmm8
879 ; SSE2-NEXT: movdqa %xmm1, %xmm9
880 ; SSE2-NEXT: movdqa %xmm1, %xmm6
881 ; SSE2-NEXT: movdqa %xmm1, %xmm7
882 ; SSE2-NEXT: movdqa %xmm1, %xmm4
883 ; SSE2-NEXT: movdqa %xmm1, %xmm5
884 ; SSE2-NEXT: movdqa %xmm1, %xmm2
885 ; SSE2-NEXT: movdqa %xmm1, %xmm3
886 ; SSE2-NEXT: movd %eax, %xmm1
887 ; SSE2-NEXT: jmp .LBB12_8
888 ; SSE2-NEXT: .LBB12_6:
889 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
890 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
891 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
892 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
893 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
894 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
895 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
896 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
897 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
898 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
899 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
900 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
901 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
902 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
903 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
904 ; SSE2-NEXT: movdqa %xmm1, %xmm14
905 ; SSE2-NEXT: movdqa %xmm1, %xmm15
906 ; SSE2-NEXT: movdqa %xmm1, %xmm12
907 ; SSE2-NEXT: movdqa %xmm1, %xmm13
908 ; SSE2-NEXT: movdqa %xmm1, %xmm10
909 ; SSE2-NEXT: movdqa %xmm1, %xmm11
910 ; SSE2-NEXT: movdqa %xmm1, %xmm8
911 ; SSE2-NEXT: movdqa %xmm1, %xmm9
912 ; SSE2-NEXT: movdqa %xmm1, %xmm6
913 ; SSE2-NEXT: movdqa %xmm1, %xmm7
914 ; SSE2-NEXT: movdqa %xmm1, %xmm4
915 ; SSE2-NEXT: movdqa %xmm1, %xmm5
916 ; SSE2-NEXT: movdqa %xmm1, %xmm2
917 ; SSE2-NEXT: movdqa %xmm1, %xmm3
918 ; SSE2-NEXT: .LBB12_8: # %else5
919 ; SSE2-NEXT: xorl %eax, %eax
920 ; SSE2-NEXT: testb %al, %al
921 ; SSE2-NEXT: jne .LBB12_10
922 ; SSE2-NEXT: # %bb.9: # %cond.load7
923 ; SSE2-NEXT: movzwl (%rax), %eax
924 ; SSE2-NEXT: shll $16, %eax
925 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
926 ; SSE2-NEXT: .LBB12_10: # %else8
927 ; SSE2-NEXT: xorl %eax, %eax
928 ; SSE2-NEXT: testb %al, %al
929 ; SSE2-NEXT: jne .LBB12_12
930 ; SSE2-NEXT: # %bb.11: # %cond.load10
931 ; SSE2-NEXT: movzwl (%rax), %eax
932 ; SSE2-NEXT: shll $16, %eax
933 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
934 ; SSE2-NEXT: .LBB12_12: # %else11
935 ; SSE2-NEXT: xorl %eax, %eax
936 ; SSE2-NEXT: testb %al, %al
937 ; SSE2-NEXT: jne .LBB12_14
938 ; SSE2-NEXT: # %bb.13: # %cond.load13
939 ; SSE2-NEXT: movzwl (%rax), %eax
940 ; SSE2-NEXT: shll $16, %eax
941 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
942 ; SSE2-NEXT: .LBB12_14: # %else14
943 ; SSE2-NEXT: xorl %eax, %eax
944 ; SSE2-NEXT: testb %al, %al
945 ; SSE2-NEXT: jne .LBB12_16
946 ; SSE2-NEXT: # %bb.15: # %cond.load16
947 ; SSE2-NEXT: movzwl (%rax), %eax
948 ; SSE2-NEXT: shll $16, %eax
949 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
950 ; SSE2-NEXT: .LBB12_16: # %else17
951 ; SSE2-NEXT: xorl %eax, %eax
952 ; SSE2-NEXT: testb %al, %al
953 ; SSE2-NEXT: jne .LBB12_18
954 ; SSE2-NEXT: # %bb.17: # %cond.load19
955 ; SSE2-NEXT: movzwl (%rax), %eax
956 ; SSE2-NEXT: shll $16, %eax
957 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
958 ; SSE2-NEXT: .LBB12_18: # %else20
959 ; SSE2-NEXT: xorl %eax, %eax
960 ; SSE2-NEXT: testb %al, %al
961 ; SSE2-NEXT: jne .LBB12_20
962 ; SSE2-NEXT: # %bb.19: # %cond.load22
963 ; SSE2-NEXT: movzwl (%rax), %eax
964 ; SSE2-NEXT: shll $16, %eax
965 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
966 ; SSE2-NEXT: .LBB12_20: # %else23
967 ; SSE2-NEXT: xorl %eax, %eax
968 ; SSE2-NEXT: testb %al, %al
969 ; SSE2-NEXT: jne .LBB12_22
970 ; SSE2-NEXT: # %bb.21: # %cond.load25
971 ; SSE2-NEXT: movzwl (%rax), %eax
972 ; SSE2-NEXT: shll $16, %eax
973 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
974 ; SSE2-NEXT: .LBB12_22: # %else26
975 ; SSE2-NEXT: xorl %eax, %eax
976 ; SSE2-NEXT: testb %al, %al
977 ; SSE2-NEXT: jne .LBB12_24
978 ; SSE2-NEXT: # %bb.23: # %cond.load28
979 ; SSE2-NEXT: movzwl (%rax), %eax
980 ; SSE2-NEXT: shll $16, %eax
981 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
982 ; SSE2-NEXT: .LBB12_24: # %else29
983 ; SSE2-NEXT: xorl %eax, %eax
984 ; SSE2-NEXT: testb %al, %al
985 ; SSE2-NEXT: jne .LBB12_26
986 ; SSE2-NEXT: # %bb.25: # %cond.load31
987 ; SSE2-NEXT: movzwl (%rax), %eax
988 ; SSE2-NEXT: shll $16, %eax
989 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
990 ; SSE2-NEXT: .LBB12_26: # %else32
991 ; SSE2-NEXT: xorl %eax, %eax
992 ; SSE2-NEXT: testb %al, %al
993 ; SSE2-NEXT: jne .LBB12_28
994 ; SSE2-NEXT: # %bb.27: # %cond.load34
995 ; SSE2-NEXT: movzwl (%rax), %eax
996 ; SSE2-NEXT: shll $16, %eax
997 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
998 ; SSE2-NEXT: .LBB12_28: # %else35
999 ; SSE2-NEXT: xorl %eax, %eax
1000 ; SSE2-NEXT: testb %al, %al
1001 ; SSE2-NEXT: jne .LBB12_30
1002 ; SSE2-NEXT: # %bb.29: # %cond.load37
1003 ; SSE2-NEXT: movzwl (%rax), %eax
1004 ; SSE2-NEXT: shll $16, %eax
1005 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1006 ; SSE2-NEXT: .LBB12_30: # %else38
1007 ; SSE2-NEXT: xorl %eax, %eax
1008 ; SSE2-NEXT: testb %al, %al
1009 ; SSE2-NEXT: jne .LBB12_32
1010 ; SSE2-NEXT: # %bb.31: # %cond.load40
1011 ; SSE2-NEXT: movzwl (%rax), %eax
1012 ; SSE2-NEXT: shll $16, %eax
1013 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1014 ; SSE2-NEXT: .LBB12_32: # %else41
1015 ; SSE2-NEXT: xorl %eax, %eax
1016 ; SSE2-NEXT: testb %al, %al
1017 ; SSE2-NEXT: jne .LBB12_34
1018 ; SSE2-NEXT: # %bb.33: # %cond.load43
1019 ; SSE2-NEXT: movzwl (%rax), %eax
1020 ; SSE2-NEXT: shll $16, %eax
1021 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1022 ; SSE2-NEXT: .LBB12_34: # %else44
1023 ; SSE2-NEXT: xorl %eax, %eax
1024 ; SSE2-NEXT: testb %al, %al
1025 ; SSE2-NEXT: jne .LBB12_36
1026 ; SSE2-NEXT: # %bb.35: # %cond.load46
1027 ; SSE2-NEXT: movzwl (%rax), %eax
1028 ; SSE2-NEXT: shll $16, %eax
1029 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1030 ; SSE2-NEXT: .LBB12_36: # %else47
1031 ; SSE2-NEXT: xorl %eax, %eax
1032 ; SSE2-NEXT: testb %al, %al
1033 ; SSE2-NEXT: jne .LBB12_38
1034 ; SSE2-NEXT: # %bb.37: # %cond.load49
1035 ; SSE2-NEXT: movzwl (%rax), %eax
1036 ; SSE2-NEXT: shll $16, %eax
1037 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1038 ; SSE2-NEXT: .LBB12_38: # %else50
1039 ; SSE2-NEXT: xorl %eax, %eax
1040 ; SSE2-NEXT: testb %al, %al
1041 ; SSE2-NEXT: jne .LBB12_40
1042 ; SSE2-NEXT: # %bb.39: # %cond.load52
1043 ; SSE2-NEXT: movzwl (%rax), %eax
1044 ; SSE2-NEXT: shll $16, %eax
1045 ; SSE2-NEXT: movd %eax, %xmm14
1046 ; SSE2-NEXT: .LBB12_40: # %else53
1047 ; SSE2-NEXT: xorl %eax, %eax
1048 ; SSE2-NEXT: testb %al, %al
1049 ; SSE2-NEXT: jne .LBB12_42
1050 ; SSE2-NEXT: # %bb.41: # %cond.load55
1051 ; SSE2-NEXT: movzwl (%rax), %eax
1052 ; SSE2-NEXT: shll $16, %eax
1053 ; SSE2-NEXT: movd %eax, %xmm15
1054 ; SSE2-NEXT: .LBB12_42: # %else56
1055 ; SSE2-NEXT: xorl %eax, %eax
1056 ; SSE2-NEXT: testb %al, %al
1057 ; SSE2-NEXT: jne .LBB12_44
1058 ; SSE2-NEXT: # %bb.43: # %cond.load58
1059 ; SSE2-NEXT: movzwl (%rax), %eax
1060 ; SSE2-NEXT: shll $16, %eax
1061 ; SSE2-NEXT: movd %eax, %xmm12
1062 ; SSE2-NEXT: .LBB12_44: # %else59
1063 ; SSE2-NEXT: xorl %eax, %eax
1064 ; SSE2-NEXT: testb %al, %al
1065 ; SSE2-NEXT: jne .LBB12_46
1066 ; SSE2-NEXT: # %bb.45: # %cond.load61
1067 ; SSE2-NEXT: movzwl (%rax), %eax
1068 ; SSE2-NEXT: shll $16, %eax
1069 ; SSE2-NEXT: movd %eax, %xmm13
1070 ; SSE2-NEXT: .LBB12_46: # %else62
1071 ; SSE2-NEXT: xorl %eax, %eax
1072 ; SSE2-NEXT: testb %al, %al
1073 ; SSE2-NEXT: jne .LBB12_48
1074 ; SSE2-NEXT: # %bb.47: # %cond.load64
1075 ; SSE2-NEXT: movzwl (%rax), %eax
1076 ; SSE2-NEXT: shll $16, %eax
1077 ; SSE2-NEXT: movd %eax, %xmm10
1078 ; SSE2-NEXT: .LBB12_48: # %else65
1079 ; SSE2-NEXT: xorl %eax, %eax
1080 ; SSE2-NEXT: testb %al, %al
1081 ; SSE2-NEXT: jne .LBB12_50
1082 ; SSE2-NEXT: # %bb.49: # %cond.load67
1083 ; SSE2-NEXT: movzwl (%rax), %eax
1084 ; SSE2-NEXT: shll $16, %eax
1085 ; SSE2-NEXT: movd %eax, %xmm11
1086 ; SSE2-NEXT: .LBB12_50: # %else68
1087 ; SSE2-NEXT: xorl %eax, %eax
1088 ; SSE2-NEXT: testb %al, %al
1089 ; SSE2-NEXT: jne .LBB12_52
1090 ; SSE2-NEXT: # %bb.51: # %cond.load70
1091 ; SSE2-NEXT: movzwl (%rax), %eax
1092 ; SSE2-NEXT: shll $16, %eax
1093 ; SSE2-NEXT: movd %eax, %xmm8
1094 ; SSE2-NEXT: .LBB12_52: # %else71
1095 ; SSE2-NEXT: xorl %eax, %eax
1096 ; SSE2-NEXT: testb %al, %al
1097 ; SSE2-NEXT: jne .LBB12_54
1098 ; SSE2-NEXT: # %bb.53: # %cond.load73
1099 ; SSE2-NEXT: movzwl (%rax), %eax
1100 ; SSE2-NEXT: shll $16, %eax
1101 ; SSE2-NEXT: movd %eax, %xmm9
1102 ; SSE2-NEXT: .LBB12_54: # %else74
1103 ; SSE2-NEXT: xorl %eax, %eax
1104 ; SSE2-NEXT: testb %al, %al
1105 ; SSE2-NEXT: jne .LBB12_56
1106 ; SSE2-NEXT: # %bb.55: # %cond.load76
1107 ; SSE2-NEXT: movzwl (%rax), %eax
1108 ; SSE2-NEXT: shll $16, %eax
1109 ; SSE2-NEXT: movd %eax, %xmm6
1110 ; SSE2-NEXT: .LBB12_56: # %else77
1111 ; SSE2-NEXT: xorl %eax, %eax
1112 ; SSE2-NEXT: testb %al, %al
1113 ; SSE2-NEXT: jne .LBB12_58
1114 ; SSE2-NEXT: # %bb.57: # %cond.load79
1115 ; SSE2-NEXT: movzwl (%rax), %eax
1116 ; SSE2-NEXT: shll $16, %eax
1117 ; SSE2-NEXT: movd %eax, %xmm7
1118 ; SSE2-NEXT: .LBB12_58: # %else80
1119 ; SSE2-NEXT: xorl %eax, %eax
1120 ; SSE2-NEXT: testb %al, %al
1121 ; SSE2-NEXT: jne .LBB12_60
1122 ; SSE2-NEXT: # %bb.59: # %cond.load82
1123 ; SSE2-NEXT: movzwl (%rax), %eax
1124 ; SSE2-NEXT: shll $16, %eax
1125 ; SSE2-NEXT: movd %eax, %xmm4
1126 ; SSE2-NEXT: .LBB12_60: # %else83
1127 ; SSE2-NEXT: xorl %eax, %eax
1128 ; SSE2-NEXT: testb %al, %al
1129 ; SSE2-NEXT: jne .LBB12_62
1130 ; SSE2-NEXT: # %bb.61: # %cond.load85
1131 ; SSE2-NEXT: movzwl (%rax), %eax
1132 ; SSE2-NEXT: shll $16, %eax
1133 ; SSE2-NEXT: movd %eax, %xmm5
1134 ; SSE2-NEXT: .LBB12_62: # %else86
1135 ; SSE2-NEXT: xorl %eax, %eax
1136 ; SSE2-NEXT: testb %al, %al
1137 ; SSE2-NEXT: jne .LBB12_64
1138 ; SSE2-NEXT: # %bb.63: # %cond.load88
1139 ; SSE2-NEXT: movzwl (%rax), %eax
1140 ; SSE2-NEXT: shll $16, %eax
1141 ; SSE2-NEXT: movd %eax, %xmm2
1142 ; SSE2-NEXT: .LBB12_64: # %else89
1143 ; SSE2-NEXT: xorl %eax, %eax
1144 ; SSE2-NEXT: testb %al, %al
1145 ; SSE2-NEXT: movd %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1146 ; SSE2-NEXT: movd %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1147 ; SSE2-NEXT: movd %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1148 ; SSE2-NEXT: movd %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1149 ; SSE2-NEXT: movd %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1150 ; SSE2-NEXT: movd %xmm8, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1151 ; SSE2-NEXT: movd %xmm9, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1152 ; SSE2-NEXT: movd %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1153 ; SSE2-NEXT: movd %xmm10, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1154 ; SSE2-NEXT: movd %xmm11, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1155 ; SSE2-NEXT: movd %xmm12, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1156 ; SSE2-NEXT: movd %xmm13, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1157 ; SSE2-NEXT: movd %xmm14, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1158 ; SSE2-NEXT: movd %xmm15, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1159 ; SSE2-NEXT: jne .LBB12_65
1160 ; SSE2-NEXT: # %bb.66: # %cond.load91
1161 ; SSE2-NEXT: movzwl (%rax), %eax
1162 ; SSE2-NEXT: shll $16, %eax
1163 ; SSE2-NEXT: movl %eax, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1164 ; SSE2-NEXT: jmp .LBB12_67
1165 ; SSE2-NEXT: .LBB12_65:
1166 ; SSE2-NEXT: movd %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Folded Spill
1167 ; SSE2-NEXT: .LBB12_67: # %else92
1168 ; SSE2-NEXT: callq __truncsfbf2@PLT
1169 ; SSE2-NEXT: movd %xmm0, %ebx
1170 ; SSE2-NEXT: shll $16, %ebx
1171 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1172 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1173 ; SSE2-NEXT: callq __truncsfbf2@PLT
1174 ; SSE2-NEXT: movd %xmm0, %eax
1175 ; SSE2-NEXT: movzwl %ax, %r14d
1176 ; SSE2-NEXT: orl %ebx, %r14d
1177 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1178 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1179 ; SSE2-NEXT: callq __truncsfbf2@PLT
1180 ; SSE2-NEXT: movd %xmm0, %ebx
1181 ; SSE2-NEXT: shll $16, %ebx
1182 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1183 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1184 ; SSE2-NEXT: callq __truncsfbf2@PLT
1185 ; SSE2-NEXT: movd %xmm0, %eax
1186 ; SSE2-NEXT: movzwl %ax, %eax
1187 ; SSE2-NEXT: orl %ebx, %eax
1188 ; SSE2-NEXT: shlq $32, %rax
1189 ; SSE2-NEXT: orq %r14, %rax
1190 ; SSE2-NEXT: movq %rax, %xmm0
1191 ; SSE2-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1192 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1193 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1194 ; SSE2-NEXT: callq __truncsfbf2@PLT
1195 ; SSE2-NEXT: movd %xmm0, %ebx
1196 ; SSE2-NEXT: shll $16, %ebx
1197 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1198 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1199 ; SSE2-NEXT: callq __truncsfbf2@PLT
1200 ; SSE2-NEXT: movd %xmm0, %eax
1201 ; SSE2-NEXT: movzwl %ax, %r14d
1202 ; SSE2-NEXT: orl %ebx, %r14d
1203 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1204 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1205 ; SSE2-NEXT: callq __truncsfbf2@PLT
1206 ; SSE2-NEXT: movd %xmm0, %ebx
1207 ; SSE2-NEXT: shll $16, %ebx
1208 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1209 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1210 ; SSE2-NEXT: callq __truncsfbf2@PLT
1211 ; SSE2-NEXT: movd %xmm0, %eax
1212 ; SSE2-NEXT: movzwl %ax, %eax
1213 ; SSE2-NEXT: orl %ebx, %eax
1214 ; SSE2-NEXT: shlq $32, %rax
1215 ; SSE2-NEXT: orq %r14, %rax
1216 ; SSE2-NEXT: movq %rax, %xmm0
1217 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1218 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
1219 ; SSE2-NEXT: movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1220 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1221 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1222 ; SSE2-NEXT: callq __truncsfbf2@PLT
1223 ; SSE2-NEXT: movd %xmm0, %ebx
1224 ; SSE2-NEXT: shll $16, %ebx
1225 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1226 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1227 ; SSE2-NEXT: callq __truncsfbf2@PLT
1228 ; SSE2-NEXT: movd %xmm0, %eax
1229 ; SSE2-NEXT: movzwl %ax, %r14d
1230 ; SSE2-NEXT: orl %ebx, %r14d
1231 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1232 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1233 ; SSE2-NEXT: callq __truncsfbf2@PLT
1234 ; SSE2-NEXT: movd %xmm0, %ebx
1235 ; SSE2-NEXT: shll $16, %ebx
1236 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1237 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1238 ; SSE2-NEXT: callq __truncsfbf2@PLT
1239 ; SSE2-NEXT: movd %xmm0, %eax
1240 ; SSE2-NEXT: movzwl %ax, %eax
1241 ; SSE2-NEXT: orl %ebx, %eax
1242 ; SSE2-NEXT: shlq $32, %rax
1243 ; SSE2-NEXT: orq %r14, %rax
1244 ; SSE2-NEXT: movq %rax, %xmm0
1245 ; SSE2-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1246 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1247 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1248 ; SSE2-NEXT: callq __truncsfbf2@PLT
1249 ; SSE2-NEXT: movd %xmm0, %ebx
1250 ; SSE2-NEXT: shll $16, %ebx
1251 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1252 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1253 ; SSE2-NEXT: callq __truncsfbf2@PLT
1254 ; SSE2-NEXT: movd %xmm0, %eax
1255 ; SSE2-NEXT: movzwl %ax, %r14d
1256 ; SSE2-NEXT: orl %ebx, %r14d
1257 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1258 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1259 ; SSE2-NEXT: callq __truncsfbf2@PLT
1260 ; SSE2-NEXT: movd %xmm0, %ebx
1261 ; SSE2-NEXT: shll $16, %ebx
1262 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1263 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1264 ; SSE2-NEXT: callq __truncsfbf2@PLT
1265 ; SSE2-NEXT: movd %xmm0, %eax
1266 ; SSE2-NEXT: movzwl %ax, %eax
1267 ; SSE2-NEXT: orl %ebx, %eax
1268 ; SSE2-NEXT: shlq $32, %rax
1269 ; SSE2-NEXT: orq %r14, %rax
1270 ; SSE2-NEXT: movq %rax, %xmm0
1271 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1272 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
1273 ; SSE2-NEXT: movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1274 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1275 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1276 ; SSE2-NEXT: callq __truncsfbf2@PLT
1277 ; SSE2-NEXT: movd %xmm0, %ebx
1278 ; SSE2-NEXT: shll $16, %ebx
1279 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1280 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1281 ; SSE2-NEXT: callq __truncsfbf2@PLT
1282 ; SSE2-NEXT: movd %xmm0, %eax
1283 ; SSE2-NEXT: movzwl %ax, %r14d
1284 ; SSE2-NEXT: orl %ebx, %r14d
1285 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1286 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1287 ; SSE2-NEXT: callq __truncsfbf2@PLT
1288 ; SSE2-NEXT: movd %xmm0, %ebx
1289 ; SSE2-NEXT: shll $16, %ebx
1290 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1291 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1292 ; SSE2-NEXT: callq __truncsfbf2@PLT
1293 ; SSE2-NEXT: movd %xmm0, %eax
1294 ; SSE2-NEXT: movzwl %ax, %eax
1295 ; SSE2-NEXT: orl %ebx, %eax
1296 ; SSE2-NEXT: shlq $32, %rax
1297 ; SSE2-NEXT: orq %r14, %rax
1298 ; SSE2-NEXT: movq %rax, %xmm0
1299 ; SSE2-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1300 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1301 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1302 ; SSE2-NEXT: callq __truncsfbf2@PLT
1303 ; SSE2-NEXT: movd %xmm0, %ebx
1304 ; SSE2-NEXT: shll $16, %ebx
1305 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1306 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1307 ; SSE2-NEXT: callq __truncsfbf2@PLT
1308 ; SSE2-NEXT: movd %xmm0, %eax
1309 ; SSE2-NEXT: movzwl %ax, %r14d
1310 ; SSE2-NEXT: orl %ebx, %r14d
1311 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1312 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1313 ; SSE2-NEXT: callq __truncsfbf2@PLT
1314 ; SSE2-NEXT: movd %xmm0, %ebx
1315 ; SSE2-NEXT: shll $16, %ebx
1316 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1317 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1318 ; SSE2-NEXT: callq __truncsfbf2@PLT
1319 ; SSE2-NEXT: movd %xmm0, %eax
1320 ; SSE2-NEXT: movzwl %ax, %eax
1321 ; SSE2-NEXT: orl %ebx, %eax
1322 ; SSE2-NEXT: shlq $32, %rax
1323 ; SSE2-NEXT: orq %r14, %rax
1324 ; SSE2-NEXT: movq %rax, %xmm0
1325 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1326 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
1327 ; SSE2-NEXT: movdqa %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1328 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1329 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1330 ; SSE2-NEXT: callq __truncsfbf2@PLT
1331 ; SSE2-NEXT: movd %xmm0, %ebx
1332 ; SSE2-NEXT: shll $16, %ebx
1333 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1334 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1335 ; SSE2-NEXT: callq __truncsfbf2@PLT
1336 ; SSE2-NEXT: movd %xmm0, %eax
1337 ; SSE2-NEXT: movzwl %ax, %r14d
1338 ; SSE2-NEXT: orl %ebx, %r14d
1339 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1340 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1341 ; SSE2-NEXT: callq __truncsfbf2@PLT
1342 ; SSE2-NEXT: movd %xmm0, %ebx
1343 ; SSE2-NEXT: shll $16, %ebx
1344 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1345 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1346 ; SSE2-NEXT: callq __truncsfbf2@PLT
1347 ; SSE2-NEXT: movd %xmm0, %eax
1348 ; SSE2-NEXT: movzwl %ax, %eax
1349 ; SSE2-NEXT: orl %ebx, %eax
1350 ; SSE2-NEXT: shlq $32, %rax
1351 ; SSE2-NEXT: orq %r14, %rax
1352 ; SSE2-NEXT: movq %rax, %xmm0
1353 ; SSE2-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1354 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1355 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1356 ; SSE2-NEXT: callq __truncsfbf2@PLT
1357 ; SSE2-NEXT: movd %xmm0, %ebx
1358 ; SSE2-NEXT: shll $16, %ebx
1359 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1360 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1361 ; SSE2-NEXT: callq __truncsfbf2@PLT
1362 ; SSE2-NEXT: movd %xmm0, %eax
1363 ; SSE2-NEXT: movzwl %ax, %r14d
1364 ; SSE2-NEXT: orl %ebx, %r14d
1365 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1366 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1367 ; SSE2-NEXT: callq __truncsfbf2@PLT
1368 ; SSE2-NEXT: movd %xmm0, %ebx
1369 ; SSE2-NEXT: shll $16, %ebx
1370 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1371 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1372 ; SSE2-NEXT: callq __truncsfbf2@PLT
1373 ; SSE2-NEXT: movd %xmm0, %eax
1374 ; SSE2-NEXT: movzwl %ax, %eax
1375 ; SSE2-NEXT: orl %ebx, %eax
1376 ; SSE2-NEXT: shlq $32, %rax
1377 ; SSE2-NEXT: orq %r14, %rax
1378 ; SSE2-NEXT: movq %rax, %xmm0
1379 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Reload
1380 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm0[0]
1381 ; SSE2-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
1382 ; SSE2-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload
1383 ; SSE2-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload
1384 ; SSE2-NEXT: addq $200, %rsp
1385 ; SSE2-NEXT: popq %rbx
1386 ; SSE2-NEXT: popq %r14
1389 ; F16-LABEL: pr63017_2:
1391 ; F16-NEXT: vpbroadcastw {{.*#+}} zmm0 = [49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024]
1392 ; F16-NEXT: vmovdqu16 (%rax), %zmm0 {%k1}
1395 ; AVXNC-LABEL: pr63017_2:
1397 ; AVXNC-NEXT: vpbroadcastw {{.*#+}} ymm0 = [49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024]
1398 ; AVXNC-NEXT: xorl %eax, %eax
1399 ; AVXNC-NEXT: testb %al, %al
1400 ; AVXNC-NEXT: vmovdqa %ymm0, %ymm1
1401 ; AVXNC-NEXT: jne .LBB12_2
1402 ; AVXNC-NEXT: # %bb.1: # %cond.load
1403 ; AVXNC-NEXT: vpbroadcastw {{.*#+}} ymm1 = [49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024,49024]
1404 ; AVXNC-NEXT: vpbroadcastw {{.*#+}} xmm0 = [49024,49024,49024,49024,49024,49024,49024,49024]
1405 ; AVXNC-NEXT: vpinsrw $0, (%rax), %xmm0, %xmm0
1406 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],mem[4,5,6,7]
1407 ; AVXNC-NEXT: .LBB12_2: # %else
1408 ; AVXNC-NEXT: xorl %eax, %eax
1409 ; AVXNC-NEXT: testb %al, %al
1410 ; AVXNC-NEXT: jne .LBB12_4
1411 ; AVXNC-NEXT: # %bb.3: # %cond.load1
1412 ; AVXNC-NEXT: vpinsrw $1, (%rax), %xmm0, %xmm2
1413 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
1414 ; AVXNC-NEXT: .LBB12_4: # %else2
1415 ; AVXNC-NEXT: xorl %eax, %eax
1416 ; AVXNC-NEXT: testb %al, %al
1417 ; AVXNC-NEXT: jne .LBB12_6
1418 ; AVXNC-NEXT: # %bb.5: # %cond.load4
1419 ; AVXNC-NEXT: vpinsrw $2, (%rax), %xmm0, %xmm2
1420 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
1421 ; AVXNC-NEXT: .LBB12_6: # %else5
1422 ; AVXNC-NEXT: xorl %eax, %eax
1423 ; AVXNC-NEXT: testb %al, %al
1424 ; AVXNC-NEXT: jne .LBB12_8
1425 ; AVXNC-NEXT: # %bb.7: # %cond.load7
1426 ; AVXNC-NEXT: vpinsrw $3, (%rax), %xmm0, %xmm2
1427 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
1428 ; AVXNC-NEXT: .LBB12_8: # %else8
1429 ; AVXNC-NEXT: xorl %eax, %eax
1430 ; AVXNC-NEXT: testb %al, %al
1431 ; AVXNC-NEXT: jne .LBB12_10
1432 ; AVXNC-NEXT: # %bb.9: # %cond.load10
1433 ; AVXNC-NEXT: vpinsrw $4, (%rax), %xmm0, %xmm2
1434 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
1435 ; AVXNC-NEXT: .LBB12_10: # %else11
1436 ; AVXNC-NEXT: xorl %eax, %eax
1437 ; AVXNC-NEXT: testb %al, %al
1438 ; AVXNC-NEXT: jne .LBB12_12
1439 ; AVXNC-NEXT: # %bb.11: # %cond.load13
1440 ; AVXNC-NEXT: vpinsrw $5, (%rax), %xmm0, %xmm2
1441 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
1442 ; AVXNC-NEXT: .LBB12_12: # %else14
1443 ; AVXNC-NEXT: xorl %eax, %eax
1444 ; AVXNC-NEXT: testb %al, %al
1445 ; AVXNC-NEXT: jne .LBB12_14
1446 ; AVXNC-NEXT: # %bb.13: # %cond.load16
1447 ; AVXNC-NEXT: vpinsrw $6, (%rax), %xmm0, %xmm2
1448 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
1449 ; AVXNC-NEXT: .LBB12_14: # %else17
1450 ; AVXNC-NEXT: xorl %eax, %eax
1451 ; AVXNC-NEXT: testb %al, %al
1452 ; AVXNC-NEXT: jne .LBB12_16
1453 ; AVXNC-NEXT: # %bb.15: # %cond.load19
1454 ; AVXNC-NEXT: vpinsrw $7, (%rax), %xmm0, %xmm2
1455 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
1456 ; AVXNC-NEXT: .LBB12_16: # %else20
1457 ; AVXNC-NEXT: xorl %eax, %eax
1458 ; AVXNC-NEXT: testb %al, %al
1459 ; AVXNC-NEXT: jne .LBB12_18
1460 ; AVXNC-NEXT: # %bb.17: # %cond.load22
1461 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1462 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm2[0],ymm0[1,2,3,4,5,6,7],ymm2[8],ymm0[9,10,11,12,13,14,15]
1463 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]
1464 ; AVXNC-NEXT: .LBB12_18: # %else23
1465 ; AVXNC-NEXT: xorl %eax, %eax
1466 ; AVXNC-NEXT: testb %al, %al
1467 ; AVXNC-NEXT: jne .LBB12_20
1468 ; AVXNC-NEXT: # %bb.19: # %cond.load25
1469 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1470 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm0[0],ymm2[1],ymm0[2,3,4,5,6,7,8],ymm2[9],ymm0[10,11,12,13,14,15]
1471 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]
1472 ; AVXNC-NEXT: .LBB12_20: # %else26
1473 ; AVXNC-NEXT: xorl %eax, %eax
1474 ; AVXNC-NEXT: testb %al, %al
1475 ; AVXNC-NEXT: jne .LBB12_22
1476 ; AVXNC-NEXT: # %bb.21: # %cond.load28
1477 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1478 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm0[0,1],ymm2[2],ymm0[3,4,5,6,7,8,9],ymm2[10],ymm0[11,12,13,14,15]
1479 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]
1480 ; AVXNC-NEXT: .LBB12_22: # %else29
1481 ; AVXNC-NEXT: xorl %eax, %eax
1482 ; AVXNC-NEXT: testb %al, %al
1483 ; AVXNC-NEXT: jne .LBB12_24
1484 ; AVXNC-NEXT: # %bb.23: # %cond.load31
1485 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1486 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm0[0,1,2],ymm2[3],ymm0[4,5,6,7,8,9,10],ymm2[11],ymm0[12,13,14,15]
1487 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]
1488 ; AVXNC-NEXT: .LBB12_24: # %else32
1489 ; AVXNC-NEXT: xorl %eax, %eax
1490 ; AVXNC-NEXT: testb %al, %al
1491 ; AVXNC-NEXT: jne .LBB12_26
1492 ; AVXNC-NEXT: # %bb.25: # %cond.load34
1493 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1494 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm0[0,1,2,3],ymm2[4],ymm0[5,6,7,8,9,10,11],ymm2[12],ymm0[13,14,15]
1495 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]
1496 ; AVXNC-NEXT: .LBB12_26: # %else35
1497 ; AVXNC-NEXT: xorl %eax, %eax
1498 ; AVXNC-NEXT: testb %al, %al
1499 ; AVXNC-NEXT: jne .LBB12_28
1500 ; AVXNC-NEXT: # %bb.27: # %cond.load37
1501 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1502 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm0[0,1,2,3,4],ymm2[5],ymm0[6,7,8,9,10,11,12],ymm2[13],ymm0[14,15]
1503 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]
1504 ; AVXNC-NEXT: .LBB12_28: # %else38
1505 ; AVXNC-NEXT: xorl %eax, %eax
1506 ; AVXNC-NEXT: testb %al, %al
1507 ; AVXNC-NEXT: jne .LBB12_30
1508 ; AVXNC-NEXT: # %bb.29: # %cond.load40
1509 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1510 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm0[0,1,2,3,4,5],ymm2[6],ymm0[7,8,9,10,11,12,13],ymm2[14],ymm0[15]
1511 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]
1512 ; AVXNC-NEXT: .LBB12_30: # %else41
1513 ; AVXNC-NEXT: xorl %eax, %eax
1514 ; AVXNC-NEXT: testb %al, %al
1515 ; AVXNC-NEXT: jne .LBB12_32
1516 ; AVXNC-NEXT: # %bb.31: # %cond.load43
1517 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1518 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm0[0,1,2,3,4,5,6],ymm2[7],ymm0[8,9,10,11,12,13,14],ymm2[15]
1519 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm2[4,5,6,7]
1520 ; AVXNC-NEXT: .LBB12_32: # %else44
1521 ; AVXNC-NEXT: xorl %eax, %eax
1522 ; AVXNC-NEXT: testb %al, %al
1523 ; AVXNC-NEXT: jne .LBB12_34
1524 ; AVXNC-NEXT: # %bb.33: # %cond.load46
1525 ; AVXNC-NEXT: vpinsrw $0, (%rax), %xmm1, %xmm2
1526 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
1527 ; AVXNC-NEXT: .LBB12_34: # %else47
1528 ; AVXNC-NEXT: xorl %eax, %eax
1529 ; AVXNC-NEXT: testb %al, %al
1530 ; AVXNC-NEXT: jne .LBB12_36
1531 ; AVXNC-NEXT: # %bb.35: # %cond.load49
1532 ; AVXNC-NEXT: vpinsrw $1, (%rax), %xmm1, %xmm2
1533 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
1534 ; AVXNC-NEXT: .LBB12_36: # %else50
1535 ; AVXNC-NEXT: xorl %eax, %eax
1536 ; AVXNC-NEXT: testb %al, %al
1537 ; AVXNC-NEXT: jne .LBB12_38
1538 ; AVXNC-NEXT: # %bb.37: # %cond.load52
1539 ; AVXNC-NEXT: vpinsrw $2, (%rax), %xmm1, %xmm2
1540 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
1541 ; AVXNC-NEXT: .LBB12_38: # %else53
1542 ; AVXNC-NEXT: xorl %eax, %eax
1543 ; AVXNC-NEXT: testb %al, %al
1544 ; AVXNC-NEXT: jne .LBB12_40
1545 ; AVXNC-NEXT: # %bb.39: # %cond.load55
1546 ; AVXNC-NEXT: vpinsrw $3, (%rax), %xmm1, %xmm2
1547 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
1548 ; AVXNC-NEXT: .LBB12_40: # %else56
1549 ; AVXNC-NEXT: xorl %eax, %eax
1550 ; AVXNC-NEXT: testb %al, %al
1551 ; AVXNC-NEXT: jne .LBB12_42
1552 ; AVXNC-NEXT: # %bb.41: # %cond.load58
1553 ; AVXNC-NEXT: vpinsrw $4, (%rax), %xmm1, %xmm2
1554 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
1555 ; AVXNC-NEXT: .LBB12_42: # %else59
1556 ; AVXNC-NEXT: xorl %eax, %eax
1557 ; AVXNC-NEXT: testb %al, %al
1558 ; AVXNC-NEXT: jne .LBB12_44
1559 ; AVXNC-NEXT: # %bb.43: # %cond.load61
1560 ; AVXNC-NEXT: vpinsrw $5, (%rax), %xmm1, %xmm2
1561 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
1562 ; AVXNC-NEXT: .LBB12_44: # %else62
1563 ; AVXNC-NEXT: xorl %eax, %eax
1564 ; AVXNC-NEXT: testb %al, %al
1565 ; AVXNC-NEXT: jne .LBB12_46
1566 ; AVXNC-NEXT: # %bb.45: # %cond.load64
1567 ; AVXNC-NEXT: vpinsrw $6, (%rax), %xmm1, %xmm2
1568 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
1569 ; AVXNC-NEXT: .LBB12_46: # %else65
1570 ; AVXNC-NEXT: xorl %eax, %eax
1571 ; AVXNC-NEXT: testb %al, %al
1572 ; AVXNC-NEXT: jne .LBB12_48
1573 ; AVXNC-NEXT: # %bb.47: # %cond.load67
1574 ; AVXNC-NEXT: vpinsrw $7, (%rax), %xmm1, %xmm2
1575 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm2[0,1,2,3],ymm1[4,5,6,7]
1576 ; AVXNC-NEXT: .LBB12_48: # %else68
1577 ; AVXNC-NEXT: xorl %eax, %eax
1578 ; AVXNC-NEXT: testb %al, %al
1579 ; AVXNC-NEXT: jne .LBB12_50
1580 ; AVXNC-NEXT: # %bb.49: # %cond.load70
1581 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1582 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm2[0],ymm1[1,2,3,4,5,6,7],ymm2[8],ymm1[9,10,11,12,13,14,15]
1583 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]
1584 ; AVXNC-NEXT: .LBB12_50: # %else71
1585 ; AVXNC-NEXT: xorl %eax, %eax
1586 ; AVXNC-NEXT: testb %al, %al
1587 ; AVXNC-NEXT: jne .LBB12_52
1588 ; AVXNC-NEXT: # %bb.51: # %cond.load73
1589 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1590 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm1[0],ymm2[1],ymm1[2,3,4,5,6,7,8],ymm2[9],ymm1[10,11,12,13,14,15]
1591 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]
1592 ; AVXNC-NEXT: .LBB12_52: # %else74
1593 ; AVXNC-NEXT: xorl %eax, %eax
1594 ; AVXNC-NEXT: testb %al, %al
1595 ; AVXNC-NEXT: jne .LBB12_54
1596 ; AVXNC-NEXT: # %bb.53: # %cond.load76
1597 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1598 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm1[0,1],ymm2[2],ymm1[3,4,5,6,7,8,9],ymm2[10],ymm1[11,12,13,14,15]
1599 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]
1600 ; AVXNC-NEXT: .LBB12_54: # %else77
1601 ; AVXNC-NEXT: xorl %eax, %eax
1602 ; AVXNC-NEXT: testb %al, %al
1603 ; AVXNC-NEXT: jne .LBB12_56
1604 ; AVXNC-NEXT: # %bb.55: # %cond.load79
1605 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1606 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm1[0,1,2],ymm2[3],ymm1[4,5,6,7,8,9,10],ymm2[11],ymm1[12,13,14,15]
1607 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]
1608 ; AVXNC-NEXT: .LBB12_56: # %else80
1609 ; AVXNC-NEXT: xorl %eax, %eax
1610 ; AVXNC-NEXT: testb %al, %al
1611 ; AVXNC-NEXT: jne .LBB12_58
1612 ; AVXNC-NEXT: # %bb.57: # %cond.load82
1613 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1614 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm1[0,1,2,3],ymm2[4],ymm1[5,6,7,8,9,10,11],ymm2[12],ymm1[13,14,15]
1615 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]
1616 ; AVXNC-NEXT: .LBB12_58: # %else83
1617 ; AVXNC-NEXT: xorl %eax, %eax
1618 ; AVXNC-NEXT: testb %al, %al
1619 ; AVXNC-NEXT: jne .LBB12_60
1620 ; AVXNC-NEXT: # %bb.59: # %cond.load85
1621 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1622 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm1[0,1,2,3,4],ymm2[5],ymm1[6,7,8,9,10,11,12],ymm2[13],ymm1[14,15]
1623 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]
1624 ; AVXNC-NEXT: .LBB12_60: # %else86
1625 ; AVXNC-NEXT: xorl %eax, %eax
1626 ; AVXNC-NEXT: testb %al, %al
1627 ; AVXNC-NEXT: jne .LBB12_62
1628 ; AVXNC-NEXT: # %bb.61: # %cond.load88
1629 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1630 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm1[0,1,2,3,4,5],ymm2[6],ymm1[7,8,9,10,11,12,13],ymm2[14],ymm1[15]
1631 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]
1632 ; AVXNC-NEXT: .LBB12_62: # %else89
1633 ; AVXNC-NEXT: xorl %eax, %eax
1634 ; AVXNC-NEXT: testb %al, %al
1635 ; AVXNC-NEXT: jne .LBB12_64
1636 ; AVXNC-NEXT: # %bb.63: # %cond.load91
1637 ; AVXNC-NEXT: vpbroadcastw (%rax), %ymm2
1638 ; AVXNC-NEXT: vpblendw {{.*#+}} ymm2 = ymm1[0,1,2,3,4,5,6],ymm2[7],ymm1[8,9,10,11,12,13,14],ymm2[15]
1639 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm1 = ymm1[0,1,2,3],ymm2[4,5,6,7]
1640 ; AVXNC-NEXT: .LBB12_64: # %else92
1642 %1 = call <32 x bfloat> @llvm.masked.load.v32bf16.p0(ptr poison, i32 2, <32 x i1> poison, <32 x bfloat> <bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80, bfloat 0xRBF80>)
1643 ret <32 x bfloat> %1
1646 define <32 x bfloat> @pr62997_3(<32 x bfloat> %0, bfloat %1) {
1647 ; SSE2-LABEL: pr62997_3:
1649 ; SSE2-NEXT: movq %xmm0, %rax
1650 ; SSE2-NEXT: movabsq $-4294967296, %rcx # imm = 0xFFFFFFFF00000000
1651 ; SSE2-NEXT: andq %rax, %rcx
1652 ; SSE2-NEXT: movzwl %ax, %eax
1653 ; SSE2-NEXT: movd %xmm4, %edx
1654 ; SSE2-NEXT: shll $16, %edx
1655 ; SSE2-NEXT: orl %eax, %edx
1656 ; SSE2-NEXT: orq %rcx, %rdx
1657 ; SSE2-NEXT: movq %rdx, %xmm4
1658 ; SSE2-NEXT: movsd {{.*#+}} xmm0 = xmm4[0],xmm0[1]
1661 ; F16-LABEL: pr62997_3:
1663 ; F16-NEXT: vmovd %xmm1, %eax
1664 ; F16-NEXT: vpinsrw $1, %eax, %xmm0, %xmm1
1665 ; F16-NEXT: vinserti32x4 $0, %xmm1, %zmm0, %zmm0
1668 ; AVXNC-LABEL: pr62997_3:
1670 ; AVXNC-NEXT: vmovd %xmm2, %eax
1671 ; AVXNC-NEXT: vpinsrw $1, %eax, %xmm0, %xmm2
1672 ; AVXNC-NEXT: vpblendd {{.*#+}} ymm0 = ymm2[0,1,2,3],ymm0[4,5,6,7]
1674 %3 = insertelement <32 x bfloat> %0, bfloat %1, i64 1
1675 ret <32 x bfloat> %3
1678 declare <32 x bfloat> @llvm.masked.load.v32bf16.p0(ptr, i32, <32 x i1>, <32 x bfloat>)
1680 define <4 x float> @pr64460_1(<4 x bfloat> %a) {
1681 ; SSE2-LABEL: pr64460_1:
1683 ; SSE2-NEXT: pextrw $1, %xmm0, %eax
1684 ; SSE2-NEXT: shll $16, %eax
1685 ; SSE2-NEXT: movd %eax, %xmm2
1686 ; SSE2-NEXT: movd %xmm0, %eax
1687 ; SSE2-NEXT: shll $16, %eax
1688 ; SSE2-NEXT: movd %eax, %xmm1
1689 ; SSE2-NEXT: pextrw $3, %xmm0, %eax
1690 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]
1691 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
1692 ; SSE2-NEXT: shll $16, %eax
1693 ; SSE2-NEXT: movd %eax, %xmm2
1694 ; SSE2-NEXT: movd %xmm0, %eax
1695 ; SSE2-NEXT: shll $16, %eax
1696 ; SSE2-NEXT: movd %eax, %xmm0
1697 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
1698 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
1699 ; SSE2-NEXT: movdqa %xmm1, %xmm0
1702 ; AVX-LABEL: pr64460_1:
1704 ; AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1
1705 ; AVX-NEXT: vpunpcklwd {{.*#+}} xmm0 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
1707 %b = fpext <4 x bfloat> %a to <4 x float>
1711 define <8 x float> @pr64460_2(<8 x bfloat> %a) {
1712 ; SSE2-LABEL: pr64460_2:
1714 ; SSE2-NEXT: movq %xmm0, %rdx
1715 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
1716 ; SSE2-NEXT: movq %xmm0, %rcx
1717 ; SSE2-NEXT: movq %rcx, %rax
1718 ; SSE2-NEXT: shrq $32, %rax
1719 ; SSE2-NEXT: movq %rdx, %rsi
1720 ; SSE2-NEXT: shrq $32, %rsi
1721 ; SSE2-NEXT: movl %edx, %edi
1722 ; SSE2-NEXT: andl $-65536, %edi # imm = 0xFFFF0000
1723 ; SSE2-NEXT: movd %edi, %xmm1
1724 ; SSE2-NEXT: movl %edx, %edi
1725 ; SSE2-NEXT: shll $16, %edi
1726 ; SSE2-NEXT: movd %edi, %xmm0
1727 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1728 ; SSE2-NEXT: shrq $48, %rdx
1729 ; SSE2-NEXT: shll $16, %edx
1730 ; SSE2-NEXT: movd %edx, %xmm1
1731 ; SSE2-NEXT: shll $16, %esi
1732 ; SSE2-NEXT: movd %esi, %xmm2
1733 ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
1734 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
1735 ; SSE2-NEXT: movl %ecx, %edx
1736 ; SSE2-NEXT: andl $-65536, %edx # imm = 0xFFFF0000
1737 ; SSE2-NEXT: movd %edx, %xmm2
1738 ; SSE2-NEXT: movl %ecx, %edx
1739 ; SSE2-NEXT: shll $16, %edx
1740 ; SSE2-NEXT: movd %edx, %xmm1
1741 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
1742 ; SSE2-NEXT: shrq $48, %rcx
1743 ; SSE2-NEXT: shll $16, %ecx
1744 ; SSE2-NEXT: movd %ecx, %xmm2
1745 ; SSE2-NEXT: shll $16, %eax
1746 ; SSE2-NEXT: movd %eax, %xmm3
1747 ; SSE2-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
1748 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
1751 ; AVX-LABEL: pr64460_2:
1753 ; AVX-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
1754 ; AVX-NEXT: vpslld $16, %ymm0, %ymm0
1756 %b = fpext <8 x bfloat> %a to <8 x float>
1760 define <16 x float> @pr64460_3(<16 x bfloat> %a) {
1761 ; SSE2-LABEL: pr64460_3:
1763 ; SSE2-NEXT: movq %xmm1, %rdi
1764 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm1 = xmm1[1,1]
1765 ; SSE2-NEXT: movq %xmm1, %rcx
1766 ; SSE2-NEXT: movq %rcx, %rax
1767 ; SSE2-NEXT: shrq $32, %rax
1768 ; SSE2-NEXT: movq %xmm0, %r9
1769 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
1770 ; SSE2-NEXT: movq %xmm0, %rsi
1771 ; SSE2-NEXT: movq %rsi, %rdx
1772 ; SSE2-NEXT: shrq $32, %rdx
1773 ; SSE2-NEXT: movq %rdi, %r8
1774 ; SSE2-NEXT: shrq $32, %r8
1775 ; SSE2-NEXT: movq %r9, %r10
1776 ; SSE2-NEXT: shrq $32, %r10
1777 ; SSE2-NEXT: movl %r9d, %r11d
1778 ; SSE2-NEXT: andl $-65536, %r11d # imm = 0xFFFF0000
1779 ; SSE2-NEXT: movd %r11d, %xmm1
1780 ; SSE2-NEXT: movl %r9d, %r11d
1781 ; SSE2-NEXT: shll $16, %r11d
1782 ; SSE2-NEXT: movd %r11d, %xmm0
1783 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1784 ; SSE2-NEXT: shrq $48, %r9
1785 ; SSE2-NEXT: shll $16, %r9d
1786 ; SSE2-NEXT: movd %r9d, %xmm1
1787 ; SSE2-NEXT: shll $16, %r10d
1788 ; SSE2-NEXT: movd %r10d, %xmm2
1789 ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
1790 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
1791 ; SSE2-NEXT: movl %edi, %r9d
1792 ; SSE2-NEXT: andl $-65536, %r9d # imm = 0xFFFF0000
1793 ; SSE2-NEXT: movd %r9d, %xmm1
1794 ; SSE2-NEXT: movl %edi, %r9d
1795 ; SSE2-NEXT: shll $16, %r9d
1796 ; SSE2-NEXT: movd %r9d, %xmm2
1797 ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
1798 ; SSE2-NEXT: shrq $48, %rdi
1799 ; SSE2-NEXT: shll $16, %edi
1800 ; SSE2-NEXT: movd %edi, %xmm1
1801 ; SSE2-NEXT: shll $16, %r8d
1802 ; SSE2-NEXT: movd %r8d, %xmm3
1803 ; SSE2-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
1804 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
1805 ; SSE2-NEXT: movl %esi, %edi
1806 ; SSE2-NEXT: andl $-65536, %edi # imm = 0xFFFF0000
1807 ; SSE2-NEXT: movd %edi, %xmm3
1808 ; SSE2-NEXT: movl %esi, %edi
1809 ; SSE2-NEXT: shll $16, %edi
1810 ; SSE2-NEXT: movd %edi, %xmm1
1811 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
1812 ; SSE2-NEXT: shrq $48, %rsi
1813 ; SSE2-NEXT: shll $16, %esi
1814 ; SSE2-NEXT: movd %esi, %xmm3
1815 ; SSE2-NEXT: shll $16, %edx
1816 ; SSE2-NEXT: movd %edx, %xmm4
1817 ; SSE2-NEXT: punpckldq {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1]
1818 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm4[0]
1819 ; SSE2-NEXT: movl %ecx, %edx
1820 ; SSE2-NEXT: andl $-65536, %edx # imm = 0xFFFF0000
1821 ; SSE2-NEXT: movd %edx, %xmm4
1822 ; SSE2-NEXT: movl %ecx, %edx
1823 ; SSE2-NEXT: shll $16, %edx
1824 ; SSE2-NEXT: movd %edx, %xmm3
1825 ; SSE2-NEXT: punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
1826 ; SSE2-NEXT: shrq $48, %rcx
1827 ; SSE2-NEXT: shll $16, %ecx
1828 ; SSE2-NEXT: movd %ecx, %xmm4
1829 ; SSE2-NEXT: shll $16, %eax
1830 ; SSE2-NEXT: movd %eax, %xmm5
1831 ; SSE2-NEXT: punpckldq {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1]
1832 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]
1835 ; F16-LABEL: pr64460_3:
1837 ; F16-NEXT: vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero
1838 ; F16-NEXT: vpslld $16, %zmm0, %zmm0
1841 ; AVXNC-LABEL: pr64460_3:
1843 ; AVXNC-NEXT: vpmovzxwd {{.*#+}} ymm1 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
1844 ; AVXNC-NEXT: vpslld $16, %ymm1, %ymm2
1845 ; AVXNC-NEXT: vextracti128 $1, %ymm0, %xmm0
1846 ; AVXNC-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
1847 ; AVXNC-NEXT: vpslld $16, %ymm0, %ymm1
1848 ; AVXNC-NEXT: vmovdqa %ymm2, %ymm0
1850 %b = fpext <16 x bfloat> %a to <16 x float>
1854 define <8 x double> @pr64460_4(<8 x bfloat> %a) {
1855 ; SSE2-LABEL: pr64460_4:
1857 ; SSE2-NEXT: movq %xmm0, %rsi
1858 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
1859 ; SSE2-NEXT: movq %xmm0, %rdx
1860 ; SSE2-NEXT: movq %rdx, %rax
1861 ; SSE2-NEXT: shrq $32, %rax
1862 ; SSE2-NEXT: movq %rdx, %rcx
1863 ; SSE2-NEXT: shrq $48, %rcx
1864 ; SSE2-NEXT: movq %rsi, %rdi
1865 ; SSE2-NEXT: shrq $32, %rdi
1866 ; SSE2-NEXT: movq %rsi, %r8
1867 ; SSE2-NEXT: shrq $48, %r8
1868 ; SSE2-NEXT: movl %esi, %r9d
1869 ; SSE2-NEXT: andl $-65536, %r9d # imm = 0xFFFF0000
1870 ; SSE2-NEXT: movd %r9d, %xmm0
1871 ; SSE2-NEXT: cvtss2sd %xmm0, %xmm1
1872 ; SSE2-NEXT: shll $16, %esi
1873 ; SSE2-NEXT: movd %esi, %xmm0
1874 ; SSE2-NEXT: cvtss2sd %xmm0, %xmm0
1875 ; SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]
1876 ; SSE2-NEXT: shll $16, %r8d
1877 ; SSE2-NEXT: movd %r8d, %xmm1
1878 ; SSE2-NEXT: cvtss2sd %xmm1, %xmm2
1879 ; SSE2-NEXT: shll $16, %edi
1880 ; SSE2-NEXT: movd %edi, %xmm1
1881 ; SSE2-NEXT: cvtss2sd %xmm1, %xmm1
1882 ; SSE2-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]
1883 ; SSE2-NEXT: movl %edx, %esi
1884 ; SSE2-NEXT: andl $-65536, %esi # imm = 0xFFFF0000
1885 ; SSE2-NEXT: movd %esi, %xmm2
1886 ; SSE2-NEXT: cvtss2sd %xmm2, %xmm3
1887 ; SSE2-NEXT: shll $16, %edx
1888 ; SSE2-NEXT: movd %edx, %xmm2
1889 ; SSE2-NEXT: cvtss2sd %xmm2, %xmm2
1890 ; SSE2-NEXT: movlhps {{.*#+}} xmm2 = xmm2[0],xmm3[0]
1891 ; SSE2-NEXT: shll $16, %ecx
1892 ; SSE2-NEXT: movd %ecx, %xmm3
1893 ; SSE2-NEXT: cvtss2sd %xmm3, %xmm4
1894 ; SSE2-NEXT: shll $16, %eax
1895 ; SSE2-NEXT: movd %eax, %xmm3
1896 ; SSE2-NEXT: cvtss2sd %xmm3, %xmm3
1897 ; SSE2-NEXT: movlhps {{.*#+}} xmm3 = xmm3[0],xmm4[0]
1900 ; F16-LABEL: pr64460_4:
1902 ; F16-NEXT: vpmovzxwd {{.*#+}} ymm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[4],zero,xmm0[5],zero,xmm0[6],zero,xmm0[7],zero
1903 ; F16-NEXT: vpslld $16, %ymm0, %ymm0
1904 ; F16-NEXT: vcvtps2pd %ymm0, %zmm0
1907 ; AVXNC-LABEL: pr64460_4:
1909 ; AVXNC-NEXT: vpextrw $3, %xmm0, %eax
1910 ; AVXNC-NEXT: shll $16, %eax
1911 ; AVXNC-NEXT: vmovd %eax, %xmm1
1912 ; AVXNC-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1
1913 ; AVXNC-NEXT: vpextrw $2, %xmm0, %eax
1914 ; AVXNC-NEXT: shll $16, %eax
1915 ; AVXNC-NEXT: vmovd %eax, %xmm2
1916 ; AVXNC-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2
1917 ; AVXNC-NEXT: vmovlhps {{.*#+}} xmm1 = xmm2[0],xmm1[0]
1918 ; AVXNC-NEXT: vpextrw $1, %xmm0, %eax
1919 ; AVXNC-NEXT: shll $16, %eax
1920 ; AVXNC-NEXT: vmovd %eax, %xmm2
1921 ; AVXNC-NEXT: vcvtss2sd %xmm2, %xmm2, %xmm2
1922 ; AVXNC-NEXT: vmovd %xmm0, %eax
1923 ; AVXNC-NEXT: shll $16, %eax
1924 ; AVXNC-NEXT: vmovd %eax, %xmm3
1925 ; AVXNC-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3
1926 ; AVXNC-NEXT: vmovlhps {{.*#+}} xmm2 = xmm3[0],xmm2[0]
1927 ; AVXNC-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm2
1928 ; AVXNC-NEXT: vpextrw $7, %xmm0, %eax
1929 ; AVXNC-NEXT: shll $16, %eax
1930 ; AVXNC-NEXT: vmovd %eax, %xmm1
1931 ; AVXNC-NEXT: vcvtss2sd %xmm1, %xmm1, %xmm1
1932 ; AVXNC-NEXT: vpextrw $6, %xmm0, %eax
1933 ; AVXNC-NEXT: shll $16, %eax
1934 ; AVXNC-NEXT: vmovd %eax, %xmm3
1935 ; AVXNC-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3
1936 ; AVXNC-NEXT: vmovlhps {{.*#+}} xmm1 = xmm3[0],xmm1[0]
1937 ; AVXNC-NEXT: vpextrw $5, %xmm0, %eax
1938 ; AVXNC-NEXT: shll $16, %eax
1939 ; AVXNC-NEXT: vmovd %eax, %xmm3
1940 ; AVXNC-NEXT: vcvtss2sd %xmm3, %xmm3, %xmm3
1941 ; AVXNC-NEXT: vpextrw $4, %xmm0, %eax
1942 ; AVXNC-NEXT: shll $16, %eax
1943 ; AVXNC-NEXT: vmovd %eax, %xmm0
1944 ; AVXNC-NEXT: vcvtss2sd %xmm0, %xmm0, %xmm0
1945 ; AVXNC-NEXT: vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm3[0]
1946 ; AVXNC-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1
1947 ; AVXNC-NEXT: vmovaps %ymm2, %ymm0
1949 %b = fpext <8 x bfloat> %a to <8 x double>
1953 define <4 x bfloat> @fptrunc_v4f32(<4 x float> %a) nounwind {
1954 ; SSE2-LABEL: fptrunc_v4f32:
1956 ; SSE2-NEXT: pushq %rbp
1957 ; SSE2-NEXT: pushq %r14
1958 ; SSE2-NEXT: pushq %rbx
1959 ; SSE2-NEXT: subq $32, %rsp
1960 ; SSE2-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
1961 ; SSE2-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1]
1962 ; SSE2-NEXT: callq __truncsfbf2@PLT
1963 ; SSE2-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1964 ; SSE2-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
1965 ; SSE2-NEXT: callq __truncsfbf2@PLT
1966 ; SSE2-NEXT: movss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
1967 ; SSE2-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
1968 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]
1969 ; SSE2-NEXT: callq __truncsfbf2@PLT
1970 ; SSE2-NEXT: movd %xmm0, %ebx
1971 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1972 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1973 ; SSE2-NEXT: movd %xmm0, %ebp
1974 ; SSE2-NEXT: movd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
1975 ; SSE2-NEXT: # xmm0 = mem[0],zero,zero,zero
1976 ; SSE2-NEXT: movd %xmm0, %r14d
1977 ; SSE2-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
1978 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
1979 ; SSE2-NEXT: callq __truncsfbf2@PLT
1980 ; SSE2-NEXT: movd %xmm0, %eax
1981 ; SSE2-NEXT: pinsrw $0, %eax, %xmm0
1982 ; SSE2-NEXT: pinsrw $0, %r14d, %xmm1
1983 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
1984 ; SSE2-NEXT: pinsrw $0, %ebp, %xmm0
1985 ; SSE2-NEXT: pinsrw $0, %ebx, %xmm2
1986 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
1987 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
1988 ; SSE2-NEXT: addq $32, %rsp
1989 ; SSE2-NEXT: popq %rbx
1990 ; SSE2-NEXT: popq %r14
1991 ; SSE2-NEXT: popq %rbp
1994 ; F16-LABEL: fptrunc_v4f32:
1996 ; F16-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
1997 ; F16-NEXT: vcvtneps2bf16 %ymm0, %xmm0
1998 ; F16-NEXT: vzeroupper
2001 ; AVXNC-LABEL: fptrunc_v4f32:
2003 ; AVXNC-NEXT: # kill: def $xmm0 killed $xmm0 def $ymm0
2004 ; AVXNC-NEXT: {vex} vcvtneps2bf16 %ymm0, %xmm0
2005 ; AVXNC-NEXT: vzeroupper
2007 %b = fptrunc <4 x float> %a to <4 x bfloat>
2011 define <8 x bfloat> @fptrunc_v8f32(<8 x float> %a) nounwind {
2012 ; SSE2-LABEL: fptrunc_v8f32:
2014 ; SSE2-NEXT: pushq %rbp
2015 ; SSE2-NEXT: pushq %r14
2016 ; SSE2-NEXT: pushq %rbx
2017 ; SSE2-NEXT: subq $32, %rsp
2018 ; SSE2-NEXT: movaps %xmm1, (%rsp) # 16-byte Spill
2019 ; SSE2-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2020 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]
2021 ; SSE2-NEXT: callq __truncsfbf2@PLT
2022 ; SSE2-NEXT: movd %xmm0, %ebx
2023 ; SSE2-NEXT: shll $16, %ebx
2024 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2025 ; SSE2-NEXT: callq __truncsfbf2@PLT
2026 ; SSE2-NEXT: movd %xmm0, %eax
2027 ; SSE2-NEXT: movzwl %ax, %r14d
2028 ; SSE2-NEXT: orl %ebx, %r14d
2029 ; SSE2-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2030 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
2031 ; SSE2-NEXT: callq __truncsfbf2@PLT
2032 ; SSE2-NEXT: movd %xmm0, %ebp
2033 ; SSE2-NEXT: shll $16, %ebp
2034 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2035 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
2036 ; SSE2-NEXT: callq __truncsfbf2@PLT
2037 ; SSE2-NEXT: movd %xmm0, %eax
2038 ; SSE2-NEXT: movzwl %ax, %ebx
2039 ; SSE2-NEXT: orl %ebp, %ebx
2040 ; SSE2-NEXT: shlq $32, %rbx
2041 ; SSE2-NEXT: orq %r14, %rbx
2042 ; SSE2-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload
2043 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]
2044 ; SSE2-NEXT: callq __truncsfbf2@PLT
2045 ; SSE2-NEXT: movd %xmm0, %ebp
2046 ; SSE2-NEXT: shll $16, %ebp
2047 ; SSE2-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
2048 ; SSE2-NEXT: callq __truncsfbf2@PLT
2049 ; SSE2-NEXT: movd %xmm0, %eax
2050 ; SSE2-NEXT: movzwl %ax, %r14d
2051 ; SSE2-NEXT: orl %ebp, %r14d
2052 ; SSE2-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload
2053 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
2054 ; SSE2-NEXT: callq __truncsfbf2@PLT
2055 ; SSE2-NEXT: movd %xmm0, %ebp
2056 ; SSE2-NEXT: shll $16, %ebp
2057 ; SSE2-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
2058 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
2059 ; SSE2-NEXT: callq __truncsfbf2@PLT
2060 ; SSE2-NEXT: movd %xmm0, %eax
2061 ; SSE2-NEXT: movzwl %ax, %eax
2062 ; SSE2-NEXT: orl %ebp, %eax
2063 ; SSE2-NEXT: shlq $32, %rax
2064 ; SSE2-NEXT: orq %r14, %rax
2065 ; SSE2-NEXT: movq %rax, %xmm1
2066 ; SSE2-NEXT: movq %rbx, %xmm0
2067 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2068 ; SSE2-NEXT: addq $32, %rsp
2069 ; SSE2-NEXT: popq %rbx
2070 ; SSE2-NEXT: popq %r14
2071 ; SSE2-NEXT: popq %rbp
2074 ; F16-LABEL: fptrunc_v8f32:
2076 ; F16-NEXT: vcvtneps2bf16 %ymm0, %xmm0
2077 ; F16-NEXT: vzeroupper
2080 ; AVXNC-LABEL: fptrunc_v8f32:
2082 ; AVXNC-NEXT: {vex} vcvtneps2bf16 %ymm0, %xmm0
2083 ; AVXNC-NEXT: vzeroupper
2085 %b = fptrunc <8 x float> %a to <8 x bfloat>
2089 define <16 x bfloat> @fptrunc_v16f32(<16 x float> %a) nounwind {
2090 ; SSE2-LABEL: fptrunc_v16f32:
2092 ; SSE2-NEXT: pushq %rbp
2093 ; SSE2-NEXT: pushq %r15
2094 ; SSE2-NEXT: pushq %r14
2095 ; SSE2-NEXT: pushq %r12
2096 ; SSE2-NEXT: pushq %rbx
2097 ; SSE2-NEXT: subq $64, %rsp
2098 ; SSE2-NEXT: movaps %xmm3, (%rsp) # 16-byte Spill
2099 ; SSE2-NEXT: movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2100 ; SSE2-NEXT: movaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2101 ; SSE2-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2102 ; SSE2-NEXT: movaps %xmm2, %xmm0
2103 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1],xmm2[1,1]
2104 ; SSE2-NEXT: callq __truncsfbf2@PLT
2105 ; SSE2-NEXT: movd %xmm0, %ebx
2106 ; SSE2-NEXT: shll $16, %ebx
2107 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2108 ; SSE2-NEXT: callq __truncsfbf2@PLT
2109 ; SSE2-NEXT: movd %xmm0, %eax
2110 ; SSE2-NEXT: movzwl %ax, %r14d
2111 ; SSE2-NEXT: orl %ebx, %r14d
2112 ; SSE2-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2113 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
2114 ; SSE2-NEXT: callq __truncsfbf2@PLT
2115 ; SSE2-NEXT: movd %xmm0, %ebp
2116 ; SSE2-NEXT: shll $16, %ebp
2117 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2118 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
2119 ; SSE2-NEXT: callq __truncsfbf2@PLT
2120 ; SSE2-NEXT: movd %xmm0, %eax
2121 ; SSE2-NEXT: movzwl %ax, %ebx
2122 ; SSE2-NEXT: orl %ebp, %ebx
2123 ; SSE2-NEXT: shlq $32, %rbx
2124 ; SSE2-NEXT: orq %r14, %rbx
2125 ; SSE2-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload
2126 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]
2127 ; SSE2-NEXT: callq __truncsfbf2@PLT
2128 ; SSE2-NEXT: movd %xmm0, %ebp
2129 ; SSE2-NEXT: shll $16, %ebp
2130 ; SSE2-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
2131 ; SSE2-NEXT: callq __truncsfbf2@PLT
2132 ; SSE2-NEXT: movd %xmm0, %eax
2133 ; SSE2-NEXT: movzwl %ax, %r15d
2134 ; SSE2-NEXT: orl %ebp, %r15d
2135 ; SSE2-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload
2136 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
2137 ; SSE2-NEXT: callq __truncsfbf2@PLT
2138 ; SSE2-NEXT: movd %xmm0, %ebp
2139 ; SSE2-NEXT: shll $16, %ebp
2140 ; SSE2-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
2141 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
2142 ; SSE2-NEXT: callq __truncsfbf2@PLT
2143 ; SSE2-NEXT: movd %xmm0, %eax
2144 ; SSE2-NEXT: movzwl %ax, %r14d
2145 ; SSE2-NEXT: orl %ebp, %r14d
2146 ; SSE2-NEXT: shlq $32, %r14
2147 ; SSE2-NEXT: orq %r15, %r14
2148 ; SSE2-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2149 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]
2150 ; SSE2-NEXT: callq __truncsfbf2@PLT
2151 ; SSE2-NEXT: movd %xmm0, %ebp
2152 ; SSE2-NEXT: shll $16, %ebp
2153 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2154 ; SSE2-NEXT: callq __truncsfbf2@PLT
2155 ; SSE2-NEXT: movd %xmm0, %eax
2156 ; SSE2-NEXT: movzwl %ax, %r12d
2157 ; SSE2-NEXT: orl %ebp, %r12d
2158 ; SSE2-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2159 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
2160 ; SSE2-NEXT: callq __truncsfbf2@PLT
2161 ; SSE2-NEXT: movd %xmm0, %ebp
2162 ; SSE2-NEXT: shll $16, %ebp
2163 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2164 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
2165 ; SSE2-NEXT: callq __truncsfbf2@PLT
2166 ; SSE2-NEXT: movd %xmm0, %eax
2167 ; SSE2-NEXT: movzwl %ax, %r15d
2168 ; SSE2-NEXT: orl %ebp, %r15d
2169 ; SSE2-NEXT: shlq $32, %r15
2170 ; SSE2-NEXT: orq %r12, %r15
2171 ; SSE2-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2172 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]
2173 ; SSE2-NEXT: callq __truncsfbf2@PLT
2174 ; SSE2-NEXT: movd %xmm0, %ebp
2175 ; SSE2-NEXT: shll $16, %ebp
2176 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2177 ; SSE2-NEXT: callq __truncsfbf2@PLT
2178 ; SSE2-NEXT: movd %xmm0, %eax
2179 ; SSE2-NEXT: movzwl %ax, %r12d
2180 ; SSE2-NEXT: orl %ebp, %r12d
2181 ; SSE2-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2182 ; SSE2-NEXT: shufps {{.*#+}} xmm0 = xmm0[3,3,3,3]
2183 ; SSE2-NEXT: callq __truncsfbf2@PLT
2184 ; SSE2-NEXT: movd %xmm0, %ebp
2185 ; SSE2-NEXT: shll $16, %ebp
2186 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2187 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
2188 ; SSE2-NEXT: callq __truncsfbf2@PLT
2189 ; SSE2-NEXT: movd %xmm0, %eax
2190 ; SSE2-NEXT: movzwl %ax, %eax
2191 ; SSE2-NEXT: orl %ebp, %eax
2192 ; SSE2-NEXT: shlq $32, %rax
2193 ; SSE2-NEXT: orq %r12, %rax
2194 ; SSE2-NEXT: movq %rax, %xmm1
2195 ; SSE2-NEXT: movq %r15, %xmm0
2196 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2197 ; SSE2-NEXT: movq %r14, %xmm2
2198 ; SSE2-NEXT: movq %rbx, %xmm1
2199 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
2200 ; SSE2-NEXT: addq $64, %rsp
2201 ; SSE2-NEXT: popq %rbx
2202 ; SSE2-NEXT: popq %r12
2203 ; SSE2-NEXT: popq %r14
2204 ; SSE2-NEXT: popq %r15
2205 ; SSE2-NEXT: popq %rbp
2208 ; F16-LABEL: fptrunc_v16f32:
2210 ; F16-NEXT: vcvtneps2bf16 %zmm0, %ymm0
2213 ; AVXNC-LABEL: fptrunc_v16f32:
2215 ; AVXNC-NEXT: pushq %rbp
2216 ; AVXNC-NEXT: movq %rsp, %rbp
2217 ; AVXNC-NEXT: andq $-32, %rsp
2218 ; AVXNC-NEXT: subq $64, %rsp
2219 ; AVXNC-NEXT: {vex} vcvtneps2bf16 %ymm1, %xmm1
2220 ; AVXNC-NEXT: vmovaps %xmm1, {{[0-9]+}}(%rsp)
2221 ; AVXNC-NEXT: {vex} vcvtneps2bf16 %ymm0, %xmm0
2222 ; AVXNC-NEXT: vmovaps %xmm0, (%rsp)
2223 ; AVXNC-NEXT: vmovaps (%rsp), %ymm0
2224 ; AVXNC-NEXT: movq %rbp, %rsp
2225 ; AVXNC-NEXT: popq %rbp
2227 %b = fptrunc <16 x float> %a to <16 x bfloat>
2228 ret <16 x bfloat> %b
2231 define <8 x bfloat> @fptrunc_v8f64(<8 x double> %a) nounwind {
2232 ; SSE2-LABEL: fptrunc_v8f64:
2234 ; SSE2-NEXT: pushq %rbp
2235 ; SSE2-NEXT: pushq %r14
2236 ; SSE2-NEXT: pushq %rbx
2237 ; SSE2-NEXT: subq $64, %rsp
2238 ; SSE2-NEXT: movaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2239 ; SSE2-NEXT: movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2240 ; SSE2-NEXT: movaps %xmm1, (%rsp) # 16-byte Spill
2241 ; SSE2-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2242 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
2243 ; SSE2-NEXT: callq __truncdfbf2@PLT
2244 ; SSE2-NEXT: movd %xmm0, %ebx
2245 ; SSE2-NEXT: shll $16, %ebx
2246 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2247 ; SSE2-NEXT: callq __truncdfbf2@PLT
2248 ; SSE2-NEXT: movd %xmm0, %eax
2249 ; SSE2-NEXT: movzwl %ax, %r14d
2250 ; SSE2-NEXT: orl %ebx, %r14d
2251 ; SSE2-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
2252 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
2253 ; SSE2-NEXT: callq __truncdfbf2@PLT
2254 ; SSE2-NEXT: movd %xmm0, %ebp
2255 ; SSE2-NEXT: shll $16, %ebp
2256 ; SSE2-NEXT: movdqa (%rsp), %xmm0 # 16-byte Reload
2257 ; SSE2-NEXT: callq __truncdfbf2@PLT
2258 ; SSE2-NEXT: movd %xmm0, %eax
2259 ; SSE2-NEXT: movzwl %ax, %ebx
2260 ; SSE2-NEXT: orl %ebp, %ebx
2261 ; SSE2-NEXT: shlq $32, %rbx
2262 ; SSE2-NEXT: orq %r14, %rbx
2263 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2264 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
2265 ; SSE2-NEXT: callq __truncdfbf2@PLT
2266 ; SSE2-NEXT: movd %xmm0, %ebp
2267 ; SSE2-NEXT: shll $16, %ebp
2268 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2269 ; SSE2-NEXT: callq __truncdfbf2@PLT
2270 ; SSE2-NEXT: movd %xmm0, %eax
2271 ; SSE2-NEXT: movzwl %ax, %r14d
2272 ; SSE2-NEXT: orl %ebp, %r14d
2273 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2274 ; SSE2-NEXT: punpckhqdq {{.*#+}} xmm0 = xmm0[1,1]
2275 ; SSE2-NEXT: callq __truncdfbf2@PLT
2276 ; SSE2-NEXT: movd %xmm0, %ebp
2277 ; SSE2-NEXT: shll $16, %ebp
2278 ; SSE2-NEXT: movdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload
2279 ; SSE2-NEXT: callq __truncdfbf2@PLT
2280 ; SSE2-NEXT: movd %xmm0, %eax
2281 ; SSE2-NEXT: movzwl %ax, %eax
2282 ; SSE2-NEXT: orl %ebp, %eax
2283 ; SSE2-NEXT: shlq $32, %rax
2284 ; SSE2-NEXT: orq %r14, %rax
2285 ; SSE2-NEXT: movq %rax, %xmm1
2286 ; SSE2-NEXT: movq %rbx, %xmm0
2287 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
2288 ; SSE2-NEXT: addq $64, %rsp
2289 ; SSE2-NEXT: popq %rbx
2290 ; SSE2-NEXT: popq %r14
2291 ; SSE2-NEXT: popq %rbp
2294 ; F16-LABEL: fptrunc_v8f64:
2296 ; F16-NEXT: pushq %rbp
2297 ; F16-NEXT: pushq %r15
2298 ; F16-NEXT: pushq %r14
2299 ; F16-NEXT: pushq %r13
2300 ; F16-NEXT: pushq %r12
2301 ; F16-NEXT: pushq %rbx
2302 ; F16-NEXT: subq $136, %rsp
2303 ; F16-NEXT: vmovupd %zmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 64-byte Spill
2304 ; F16-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
2305 ; F16-NEXT: vzeroupper
2306 ; F16-NEXT: callq __truncdfbf2@PLT
2307 ; F16-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2308 ; F16-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
2309 ; F16-NEXT: vextractf128 $1, %ymm0, %xmm0
2310 ; F16-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2311 ; F16-NEXT: vzeroupper
2312 ; F16-NEXT: callq __truncdfbf2@PLT
2313 ; F16-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2314 ; F16-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
2315 ; F16-NEXT: # xmm0 = mem[1,0]
2316 ; F16-NEXT: callq __truncdfbf2@PLT
2317 ; F16-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2318 ; F16-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
2319 ; F16-NEXT: vextractf32x4 $2, %zmm0, %xmm0
2320 ; F16-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2321 ; F16-NEXT: vzeroupper
2322 ; F16-NEXT: callq __truncdfbf2@PLT
2323 ; F16-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2324 ; F16-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
2325 ; F16-NEXT: # xmm0 = mem[1,0]
2326 ; F16-NEXT: callq __truncdfbf2@PLT
2327 ; F16-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2328 ; F16-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
2329 ; F16-NEXT: vextractf32x4 $3, %zmm0, %xmm0
2330 ; F16-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2331 ; F16-NEXT: vzeroupper
2332 ; F16-NEXT: callq __truncdfbf2@PLT
2333 ; F16-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2334 ; F16-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
2335 ; F16-NEXT: # xmm0 = mem[1,0]
2336 ; F16-NEXT: callq __truncdfbf2@PLT
2337 ; F16-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2338 ; F16-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
2339 ; F16-NEXT: # xmm0 = mem[0],zero,zero,zero
2340 ; F16-NEXT: vmovd %xmm0, %ebp
2341 ; F16-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
2342 ; F16-NEXT: # xmm0 = mem[0],zero,zero,zero
2343 ; F16-NEXT: vmovd %xmm0, %r14d
2344 ; F16-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
2345 ; F16-NEXT: # xmm0 = mem[0],zero,zero,zero
2346 ; F16-NEXT: vmovd %xmm0, %r15d
2347 ; F16-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
2348 ; F16-NEXT: # xmm0 = mem[0],zero,zero,zero
2349 ; F16-NEXT: vmovd %xmm0, %r12d
2350 ; F16-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
2351 ; F16-NEXT: # xmm0 = mem[0],zero,zero,zero
2352 ; F16-NEXT: vmovd %xmm0, %r13d
2353 ; F16-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
2354 ; F16-NEXT: # xmm0 = mem[0],zero,zero,zero
2355 ; F16-NEXT: vmovd %xmm0, %ebx
2356 ; F16-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %zmm0 # 64-byte Reload
2357 ; F16-NEXT: # kill: def $xmm0 killed $xmm0 killed $zmm0
2358 ; F16-NEXT: vzeroupper
2359 ; F16-NEXT: callq __truncdfbf2@PLT
2360 ; F16-NEXT: vmovd %xmm0, %eax
2361 ; F16-NEXT: vmovd %eax, %xmm0
2362 ; F16-NEXT: vpinsrw $1, %ebx, %xmm0, %xmm0
2363 ; F16-NEXT: vpinsrw $2, %r13d, %xmm0, %xmm0
2364 ; F16-NEXT: vpinsrw $3, %r12d, %xmm0, %xmm0
2365 ; F16-NEXT: vpinsrw $4, %r15d, %xmm0, %xmm0
2366 ; F16-NEXT: vpinsrw $5, %r14d, %xmm0, %xmm0
2367 ; F16-NEXT: vpinsrw $6, %ebp, %xmm0, %xmm0
2368 ; F16-NEXT: vpinsrw $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
2369 ; F16-NEXT: addq $136, %rsp
2370 ; F16-NEXT: popq %rbx
2371 ; F16-NEXT: popq %r12
2372 ; F16-NEXT: popq %r13
2373 ; F16-NEXT: popq %r14
2374 ; F16-NEXT: popq %r15
2375 ; F16-NEXT: popq %rbp
2378 ; AVXNC-LABEL: fptrunc_v8f64:
2380 ; AVXNC-NEXT: pushq %rbp
2381 ; AVXNC-NEXT: pushq %r15
2382 ; AVXNC-NEXT: pushq %r14
2383 ; AVXNC-NEXT: pushq %r13
2384 ; AVXNC-NEXT: pushq %r12
2385 ; AVXNC-NEXT: pushq %rbx
2386 ; AVXNC-NEXT: subq $120, %rsp
2387 ; AVXNC-NEXT: vmovups %ymm1, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
2388 ; AVXNC-NEXT: vmovupd %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill
2389 ; AVXNC-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]
2390 ; AVXNC-NEXT: vzeroupper
2391 ; AVXNC-NEXT: callq __truncdfbf2@PLT
2392 ; AVXNC-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2393 ; AVXNC-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
2394 ; AVXNC-NEXT: vextractf128 $1, %ymm0, %xmm0
2395 ; AVXNC-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2396 ; AVXNC-NEXT: vzeroupper
2397 ; AVXNC-NEXT: callq __truncdfbf2@PLT
2398 ; AVXNC-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2399 ; AVXNC-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
2400 ; AVXNC-NEXT: # xmm0 = mem[1,0]
2401 ; AVXNC-NEXT: callq __truncdfbf2@PLT
2402 ; AVXNC-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2403 ; AVXNC-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
2404 ; AVXNC-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
2405 ; AVXNC-NEXT: vzeroupper
2406 ; AVXNC-NEXT: callq __truncdfbf2@PLT
2407 ; AVXNC-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2408 ; AVXNC-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
2409 ; AVXNC-NEXT: # xmm0 = mem[1,0]
2410 ; AVXNC-NEXT: callq __truncdfbf2@PLT
2411 ; AVXNC-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2412 ; AVXNC-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
2413 ; AVXNC-NEXT: vextractf128 $1, %ymm0, %xmm0
2414 ; AVXNC-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill
2415 ; AVXNC-NEXT: vzeroupper
2416 ; AVXNC-NEXT: callq __truncdfbf2@PLT
2417 ; AVXNC-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2418 ; AVXNC-NEXT: vpermilpd $1, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload
2419 ; AVXNC-NEXT: # xmm0 = mem[1,0]
2420 ; AVXNC-NEXT: callq __truncdfbf2@PLT
2421 ; AVXNC-NEXT: vmovss %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 4-byte Spill
2422 ; AVXNC-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
2423 ; AVXNC-NEXT: # xmm0 = mem[0],zero,zero,zero
2424 ; AVXNC-NEXT: vmovd %xmm0, %ebp
2425 ; AVXNC-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
2426 ; AVXNC-NEXT: # xmm0 = mem[0],zero,zero,zero
2427 ; AVXNC-NEXT: vmovd %xmm0, %r14d
2428 ; AVXNC-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
2429 ; AVXNC-NEXT: # xmm0 = mem[0],zero,zero,zero
2430 ; AVXNC-NEXT: vmovd %xmm0, %r15d
2431 ; AVXNC-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
2432 ; AVXNC-NEXT: # xmm0 = mem[0],zero,zero,zero
2433 ; AVXNC-NEXT: vmovd %xmm0, %r12d
2434 ; AVXNC-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
2435 ; AVXNC-NEXT: # xmm0 = mem[0],zero,zero,zero
2436 ; AVXNC-NEXT: vmovd %xmm0, %r13d
2437 ; AVXNC-NEXT: vmovd {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 4-byte Folded Reload
2438 ; AVXNC-NEXT: # xmm0 = mem[0],zero,zero,zero
2439 ; AVXNC-NEXT: vmovd %xmm0, %ebx
2440 ; AVXNC-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload
2441 ; AVXNC-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
2442 ; AVXNC-NEXT: vzeroupper
2443 ; AVXNC-NEXT: callq __truncdfbf2@PLT
2444 ; AVXNC-NEXT: vmovd %xmm0, %eax
2445 ; AVXNC-NEXT: vmovd %eax, %xmm0
2446 ; AVXNC-NEXT: vpinsrw $1, %ebx, %xmm0, %xmm0
2447 ; AVXNC-NEXT: vpinsrw $2, %r13d, %xmm0, %xmm0
2448 ; AVXNC-NEXT: vpinsrw $3, %r12d, %xmm0, %xmm0
2449 ; AVXNC-NEXT: vpinsrw $4, %r15d, %xmm0, %xmm0
2450 ; AVXNC-NEXT: vpinsrw $5, %r14d, %xmm0, %xmm0
2451 ; AVXNC-NEXT: vpinsrw $6, %ebp, %xmm0, %xmm0
2452 ; AVXNC-NEXT: vpinsrw $7, {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload
2453 ; AVXNC-NEXT: addq $120, %rsp
2454 ; AVXNC-NEXT: popq %rbx
2455 ; AVXNC-NEXT: popq %r12
2456 ; AVXNC-NEXT: popq %r13
2457 ; AVXNC-NEXT: popq %r14
2458 ; AVXNC-NEXT: popq %r15
2459 ; AVXNC-NEXT: popq %rbp
2461 %b = fptrunc <8 x double> %a to <8 x bfloat>