Lines Matching refs:AVX
2 …< %s -mtriple=i686-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefixes=CHECK,AVX,AVX-32
3 …%s -mtriple=x86_64-unknown-unknown -mattr=+avx -O3 | FileCheck %s --check-prefixes=CHECK,AVX,AVX-64
38 ; AVX-32-LABEL: strict_vector_fptosi_v4f64_to_v4i64:
39 ; AVX-32: # %bb.0:
40 ; AVX-32-NEXT: pushl %ebp
41 ; AVX-32-NEXT: .cfi_def_cfa_offset 8
42 ; AVX-32-NEXT: .cfi_offset %ebp, -8
43 ; AVX-32-NEXT: movl %esp, %ebp
44 ; AVX-32-NEXT: .cfi_def_cfa_register %ebp
45 ; AVX-32-NEXT: andl $-8, %esp
46 ; AVX-32-NEXT: subl $32, %esp
47 ; AVX-32-NEXT: vmovlps %xmm0, {{[0-9]+}}(%esp)
48 ; AVX-32-NEXT: vmovhps %xmm0, {{[0-9]+}}(%esp)
49 ; AVX-32-NEXT: vextractf128 $1, %ymm0, %xmm0
50 ; AVX-32-NEXT: vmovlps %xmm0, {{[0-9]+}}(%esp)
51 ; AVX-32-NEXT: vmovhps %xmm0, (%esp)
52 ; AVX-32-NEXT: fldl {{[0-9]+}}(%esp)
53 ; AVX-32-NEXT: fisttpll {{[0-9]+}}(%esp)
54 ; AVX-32-NEXT: fldl {{[0-9]+}}(%esp)
55 ; AVX-32-NEXT: fisttpll {{[0-9]+}}(%esp)
56 ; AVX-32-NEXT: fldl {{[0-9]+}}(%esp)
57 ; AVX-32-NEXT: fisttpll {{[0-9]+}}(%esp)
58 ; AVX-32-NEXT: fldl (%esp)
59 ; AVX-32-NEXT: fisttpll (%esp)
60 ; AVX-32-NEXT: wait
61 ; AVX-32-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
62 ; AVX-32-NEXT: vpinsrd $1, {{[0-9]+}}(%esp), %xmm0, %xmm0
63 ; AVX-32-NEXT: vpinsrd $2, {{[0-9]+}}(%esp), %xmm0, %xmm0
64 ; AVX-32-NEXT: vpinsrd $3, {{[0-9]+}}(%esp), %xmm0, %xmm0
65 ; AVX-32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
66 ; AVX-32-NEXT: vpinsrd $1, {{[0-9]+}}(%esp), %xmm1, %xmm1
67 ; AVX-32-NEXT: vpinsrd $2, (%esp), %xmm1, %xmm1
68 ; AVX-32-NEXT: vpinsrd $3, {{[0-9]+}}(%esp), %xmm1, %xmm1
69 ; AVX-32-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
70 ; AVX-32-NEXT: movl %ebp, %esp
71 ; AVX-32-NEXT: popl %ebp
72 ; AVX-32-NEXT: .cfi_def_cfa %esp, 4
73 ; AVX-32-NEXT: retl
75 ; AVX-64-LABEL: strict_vector_fptosi_v4f64_to_v4i64:
76 ; AVX-64: # %bb.0:
77 ; AVX-64-NEXT: vextractf128 $1, %ymm0, %xmm1
78 ; AVX-64-NEXT: vcvttsd2si %xmm1, %rax
79 ; AVX-64-NEXT: vmovq %rax, %xmm2
80 ; AVX-64-NEXT: vpermilpd {{.*#+}} xmm1 = xmm1[1,0]
81 ; AVX-64-NEXT: vcvttsd2si %xmm1, %rax
82 ; AVX-64-NEXT: vmovq %rax, %xmm1
83 ; AVX-64-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]
84 ; AVX-64-NEXT: vcvttsd2si %xmm0, %rax
85 ; AVX-64-NEXT: vmovq %rax, %xmm2
86 ; AVX-64-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
87 ; AVX-64-NEXT: vcvttsd2si %xmm0, %rax
88 ; AVX-64-NEXT: vmovq %rax, %xmm0
89 ; AVX-64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]
90 ; AVX-64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
91 ; AVX-64-NEXT: retq
220 ; AVX-32-LABEL: strict_vector_fptoui_v4f64_to_v4i64:
221 ; AVX-32: # %bb.0:
222 ; AVX-32-NEXT: pushl %ebp
223 ; AVX-32-NEXT: .cfi_def_cfa_offset 8
224 ; AVX-32-NEXT: .cfi_offset %ebp, -8
225 ; AVX-32-NEXT: movl %esp, %ebp
226 ; AVX-32-NEXT: .cfi_def_cfa_register %ebp
227 ; AVX-32-NEXT: andl $-8, %esp
228 ; AVX-32-NEXT: subl $32, %esp
229 ; AVX-32-NEXT: vpermilpd {{.*#+}} xmm2 = xmm0[1,0]
230 ; AVX-32-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero
231 ; AVX-32-NEXT: vcomisd %xmm1, %xmm2
232 ; AVX-32-NEXT: vmovapd %xmm1, %xmm3
233 ; AVX-32-NEXT: jae .LBB1_2
234 ; AVX-32-NEXT: # %bb.1:
235 ; AVX-32-NEXT: vxorpd %xmm3, %xmm3, %xmm3
236 ; AVX-32-NEXT: .LBB1_2:
237 ; AVX-32-NEXT: vsubsd %xmm3, %xmm2, %xmm2
238 ; AVX-32-NEXT: vmovsd %xmm2, {{[0-9]+}}(%esp)
239 ; AVX-32-NEXT: fldl {{[0-9]+}}(%esp)
240 ; AVX-32-NEXT: fisttpll {{[0-9]+}}(%esp)
241 ; AVX-32-NEXT: wait
242 ; AVX-32-NEXT: setae %al
243 ; AVX-32-NEXT: movzbl %al, %eax
244 ; AVX-32-NEXT: shll $31, %eax
245 ; AVX-32-NEXT: xorl {{[0-9]+}}(%esp), %eax
246 ; AVX-32-NEXT: vextractf128 $1, %ymm0, %xmm2
247 ; AVX-32-NEXT: vpermilpd {{.*#+}} xmm3 = xmm2[1,0]
248 ; AVX-32-NEXT: vcomisd %xmm1, %xmm3
249 ; AVX-32-NEXT: vmovapd %xmm1, %xmm4
250 ; AVX-32-NEXT: jae .LBB1_4
251 ; AVX-32-NEXT: # %bb.3:
252 ; AVX-32-NEXT: vxorpd %xmm4, %xmm4, %xmm4
253 ; AVX-32-NEXT: .LBB1_4:
254 ; AVX-32-NEXT: vsubsd %xmm4, %xmm3, %xmm3
255 ; AVX-32-NEXT: vmovsd %xmm3, (%esp)
256 ; AVX-32-NEXT: fldl (%esp)
257 ; AVX-32-NEXT: fisttpll (%esp)
258 ; AVX-32-NEXT: wait
259 ; AVX-32-NEXT: setae %cl
260 ; AVX-32-NEXT: movzbl %cl, %ecx
261 ; AVX-32-NEXT: shll $31, %ecx
262 ; AVX-32-NEXT: xorl {{[0-9]+}}(%esp), %ecx
263 ; AVX-32-NEXT: vcomisd %xmm1, %xmm2
264 ; AVX-32-NEXT: vmovapd %xmm1, %xmm3
265 ; AVX-32-NEXT: jae .LBB1_6
266 ; AVX-32-NEXT: # %bb.5:
267 ; AVX-32-NEXT: vxorpd %xmm3, %xmm3, %xmm3
268 ; AVX-32-NEXT: .LBB1_6:
269 ; AVX-32-NEXT: vsubsd %xmm3, %xmm2, %xmm2
270 ; AVX-32-NEXT: vmovsd %xmm2, {{[0-9]+}}(%esp)
271 ; AVX-32-NEXT: fldl {{[0-9]+}}(%esp)
272 ; AVX-32-NEXT: fisttpll {{[0-9]+}}(%esp)
273 ; AVX-32-NEXT: wait
274 ; AVX-32-NEXT: setae %dl
275 ; AVX-32-NEXT: movzbl %dl, %edx
276 ; AVX-32-NEXT: shll $31, %edx
277 ; AVX-32-NEXT: xorl {{[0-9]+}}(%esp), %edx
278 ; AVX-32-NEXT: vcomisd %xmm1, %xmm0
279 ; AVX-32-NEXT: jae .LBB1_8
280 ; AVX-32-NEXT: # %bb.7:
281 ; AVX-32-NEXT: vxorpd %xmm1, %xmm1, %xmm1
282 ; AVX-32-NEXT: .LBB1_8:
283 ; AVX-32-NEXT: vsubsd %xmm1, %xmm0, %xmm0
284 ; AVX-32-NEXT: vmovsd %xmm0, {{[0-9]+}}(%esp)
285 ; AVX-32-NEXT: fldl {{[0-9]+}}(%esp)
286 ; AVX-32-NEXT: fisttpll {{[0-9]+}}(%esp)
287 ; AVX-32-NEXT: wait
288 ; AVX-32-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
289 ; AVX-32-NEXT: vpinsrd $1, %edx, %xmm0, %xmm0
290 ; AVX-32-NEXT: vpinsrd $2, (%esp), %xmm0, %xmm0
291 ; AVX-32-NEXT: vpinsrd $3, %ecx, %xmm0, %xmm0
292 ; AVX-32-NEXT: setae %cl
293 ; AVX-32-NEXT: movzbl %cl, %ecx
294 ; AVX-32-NEXT: shll $31, %ecx
295 ; AVX-32-NEXT: xorl {{[0-9]+}}(%esp), %ecx
296 ; AVX-32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
297 ; AVX-32-NEXT: vpinsrd $1, %ecx, %xmm1, %xmm1
298 ; AVX-32-NEXT: vpinsrd $2, {{[0-9]+}}(%esp), %xmm1, %xmm1
299 ; AVX-32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1
300 ; AVX-32-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
301 ; AVX-32-NEXT: movl %ebp, %esp
302 ; AVX-32-NEXT: popl %ebp
303 ; AVX-32-NEXT: .cfi_def_cfa %esp, 4
304 ; AVX-32-NEXT: retl
306 ; AVX-64-LABEL: strict_vector_fptoui_v4f64_to_v4i64:
307 ; AVX-64: # %bb.0:
308 ; AVX-64-NEXT: vextractf128 $1, %ymm0, %xmm3
309 ; AVX-64-NEXT: vmovsd {{.*#+}} xmm1 = mem[0],zero
310 ; AVX-64-NEXT: vcomisd %xmm1, %xmm3
311 ; AVX-64-NEXT: vxorpd %xmm2, %xmm2, %xmm2
312 ; AVX-64-NEXT: vxorpd %xmm4, %xmm4, %xmm4
313 ; AVX-64-NEXT: jb .LBB1_2
314 ; AVX-64-NEXT: # %bb.1:
315 ; AVX-64-NEXT: vmovapd %xmm1, %xmm4
316 ; AVX-64-NEXT: .LBB1_2:
317 ; AVX-64-NEXT: vsubsd %xmm4, %xmm3, %xmm4
318 ; AVX-64-NEXT: vcvttsd2si %xmm4, %rcx
319 ; AVX-64-NEXT: setae %al
320 ; AVX-64-NEXT: movzbl %al, %eax
321 ; AVX-64-NEXT: shlq $63, %rax
322 ; AVX-64-NEXT: xorq %rcx, %rax
323 ; AVX-64-NEXT: vpermilpd {{.*#+}} xmm4 = xmm3[1,0]
324 ; AVX-64-NEXT: vcomisd %xmm1, %xmm4
325 ; AVX-64-NEXT: vxorpd %xmm5, %xmm5, %xmm5
326 ; AVX-64-NEXT: jb .LBB1_4
327 ; AVX-64-NEXT: # %bb.3:
328 ; AVX-64-NEXT: vmovapd %xmm1, %xmm5
329 ; AVX-64-NEXT: .LBB1_4:
330 ; AVX-64-NEXT: vmovq %rax, %xmm3
331 ; AVX-64-NEXT: vsubsd %xmm5, %xmm4, %xmm4
332 ; AVX-64-NEXT: vcvttsd2si %xmm4, %rax
333 ; AVX-64-NEXT: setae %cl
334 ; AVX-64-NEXT: movzbl %cl, %ecx
335 ; AVX-64-NEXT: shlq $63, %rcx
336 ; AVX-64-NEXT: xorq %rax, %rcx
337 ; AVX-64-NEXT: vmovq %rcx, %xmm4
338 ; AVX-64-NEXT: vcomisd %xmm1, %xmm0
339 ; AVX-64-NEXT: vxorpd %xmm5, %xmm5, %xmm5
340 ; AVX-64-NEXT: jb .LBB1_6
341 ; AVX-64-NEXT: # %bb.5:
342 ; AVX-64-NEXT: vmovapd %xmm1, %xmm5
343 ; AVX-64-NEXT: .LBB1_6:
344 ; AVX-64-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
345 ; AVX-64-NEXT: vsubsd %xmm5, %xmm0, %xmm4
346 ; AVX-64-NEXT: vcvttsd2si %xmm4, %rax
347 ; AVX-64-NEXT: setae %cl
348 ; AVX-64-NEXT: movzbl %cl, %ecx
349 ; AVX-64-NEXT: shlq $63, %rcx
350 ; AVX-64-NEXT: xorq %rax, %rcx
351 ; AVX-64-NEXT: vmovq %rcx, %xmm4
352 ; AVX-64-NEXT: vpermilpd {{.*#+}} xmm0 = xmm0[1,0]
353 ; AVX-64-NEXT: vcomisd %xmm1, %xmm0
354 ; AVX-64-NEXT: jb .LBB1_8
355 ; AVX-64-NEXT: # %bb.7:
356 ; AVX-64-NEXT: vmovapd %xmm1, %xmm2
357 ; AVX-64-NEXT: .LBB1_8:
358 ; AVX-64-NEXT: vsubsd %xmm2, %xmm0, %xmm0
359 ; AVX-64-NEXT: vcvttsd2si %xmm0, %rax
360 ; AVX-64-NEXT: setae %cl
361 ; AVX-64-NEXT: movzbl %cl, %ecx
362 ; AVX-64-NEXT: shlq $63, %rcx
363 ; AVX-64-NEXT: xorq %rax, %rcx
364 ; AVX-64-NEXT: vmovq %rcx, %xmm0
365 ; AVX-64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm4[0],xmm0[0]
366 ; AVX-64-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm0
367 ; AVX-64-NEXT: retq
572 ; AVX-32-LABEL: strict_vector_fptosi_v4f32_to_v4i64:
573 ; AVX-32: # %bb.0:
574 ; AVX-32-NEXT: pushl %ebp
575 ; AVX-32-NEXT: .cfi_def_cfa_offset 8
576 ; AVX-32-NEXT: .cfi_offset %ebp, -8
577 ; AVX-32-NEXT: movl %esp, %ebp
578 ; AVX-32-NEXT: .cfi_def_cfa_register %ebp
579 ; AVX-32-NEXT: andl $-8, %esp
580 ; AVX-32-NEXT: subl $32, %esp
581 ; AVX-32-NEXT: vmovss %xmm0, {{[0-9]+}}(%esp)
582 ; AVX-32-NEXT: vextractps $1, %xmm0, {{[0-9]+}}(%esp)
583 ; AVX-32-NEXT: vextractps $2, %xmm0, {{[0-9]+}}(%esp)
584 ; AVX-32-NEXT: vextractps $3, %xmm0, (%esp)
585 ; AVX-32-NEXT: flds {{[0-9]+}}(%esp)
586 ; AVX-32-NEXT: fisttpll {{[0-9]+}}(%esp)
587 ; AVX-32-NEXT: flds {{[0-9]+}}(%esp)
588 ; AVX-32-NEXT: fisttpll {{[0-9]+}}(%esp)
589 ; AVX-32-NEXT: flds {{[0-9]+}}(%esp)
590 ; AVX-32-NEXT: fisttpll {{[0-9]+}}(%esp)
591 ; AVX-32-NEXT: flds (%esp)
592 ; AVX-32-NEXT: fisttpll (%esp)
593 ; AVX-32-NEXT: wait
594 ; AVX-32-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
595 ; AVX-32-NEXT: vpinsrd $1, {{[0-9]+}}(%esp), %xmm0, %xmm0
596 ; AVX-32-NEXT: vpinsrd $2, {{[0-9]+}}(%esp), %xmm0, %xmm0
597 ; AVX-32-NEXT: vpinsrd $3, {{[0-9]+}}(%esp), %xmm0, %xmm0
598 ; AVX-32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
599 ; AVX-32-NEXT: vpinsrd $1, {{[0-9]+}}(%esp), %xmm1, %xmm1
600 ; AVX-32-NEXT: vpinsrd $2, (%esp), %xmm1, %xmm1
601 ; AVX-32-NEXT: vpinsrd $3, {{[0-9]+}}(%esp), %xmm1, %xmm1
602 ; AVX-32-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
603 ; AVX-32-NEXT: movl %ebp, %esp
604 ; AVX-32-NEXT: popl %ebp
605 ; AVX-32-NEXT: .cfi_def_cfa %esp, 4
606 ; AVX-32-NEXT: retl
608 ; AVX-64-LABEL: strict_vector_fptosi_v4f32_to_v4i64:
609 ; AVX-64: # %bb.0:
610 ; AVX-64-NEXT: vpermilps {{.*#+}} xmm1 = xmm0[3,3,3,3]
611 ; AVX-64-NEXT: vcvttss2si %xmm1, %rax
612 ; AVX-64-NEXT: vmovq %rax, %xmm1
613 ; AVX-64-NEXT: vpermilpd {{.*#+}} xmm2 = xmm0[1,0]
614 ; AVX-64-NEXT: vcvttss2si %xmm2, %rax
615 ; AVX-64-NEXT: vmovq %rax, %xmm2
616 ; AVX-64-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]
617 ; AVX-64-NEXT: vcvttss2si %xmm0, %rax
618 ; AVX-64-NEXT: vmovq %rax, %xmm2
619 ; AVX-64-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
620 ; AVX-64-NEXT: vcvttss2si %xmm0, %rax
621 ; AVX-64-NEXT: vmovq %rax, %xmm0
622 ; AVX-64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]
623 ; AVX-64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0
624 ; AVX-64-NEXT: retq
751 ; AVX-32-LABEL: strict_vector_fptoui_v4f32_to_v4i64:
752 ; AVX-32: # %bb.0:
753 ; AVX-32-NEXT: pushl %ebp
754 ; AVX-32-NEXT: .cfi_def_cfa_offset 8
755 ; AVX-32-NEXT: .cfi_offset %ebp, -8
756 ; AVX-32-NEXT: movl %esp, %ebp
757 ; AVX-32-NEXT: .cfi_def_cfa_register %ebp
758 ; AVX-32-NEXT: andl $-8, %esp
759 ; AVX-32-NEXT: subl $32, %esp
760 ; AVX-32-NEXT: vmovshdup {{.*#+}} xmm2 = xmm0[1,1,3,3]
761 ; AVX-32-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
762 ; AVX-32-NEXT: vcomiss %xmm1, %xmm2
763 ; AVX-32-NEXT: vmovaps %xmm1, %xmm3
764 ; AVX-32-NEXT: jae .LBB3_2
765 ; AVX-32-NEXT: # %bb.1:
766 ; AVX-32-NEXT: vxorps %xmm3, %xmm3, %xmm3
767 ; AVX-32-NEXT: .LBB3_2:
768 ; AVX-32-NEXT: vsubss %xmm3, %xmm2, %xmm2
769 ; AVX-32-NEXT: vmovss %xmm2, {{[0-9]+}}(%esp)
770 ; AVX-32-NEXT: flds {{[0-9]+}}(%esp)
771 ; AVX-32-NEXT: fisttpll {{[0-9]+}}(%esp)
772 ; AVX-32-NEXT: wait
773 ; AVX-32-NEXT: setae %al
774 ; AVX-32-NEXT: movzbl %al, %eax
775 ; AVX-32-NEXT: shll $31, %eax
776 ; AVX-32-NEXT: xorl {{[0-9]+}}(%esp), %eax
777 ; AVX-32-NEXT: vpermilps {{.*#+}} xmm2 = xmm0[3,3,3,3]
778 ; AVX-32-NEXT: vcomiss %xmm1, %xmm2
779 ; AVX-32-NEXT: vmovaps %xmm1, %xmm3
780 ; AVX-32-NEXT: jae .LBB3_4
781 ; AVX-32-NEXT: # %bb.3:
782 ; AVX-32-NEXT: vxorps %xmm3, %xmm3, %xmm3
783 ; AVX-32-NEXT: .LBB3_4:
784 ; AVX-32-NEXT: vsubss %xmm3, %xmm2, %xmm2
785 ; AVX-32-NEXT: vmovss %xmm2, (%esp)
786 ; AVX-32-NEXT: flds (%esp)
787 ; AVX-32-NEXT: fisttpll (%esp)
788 ; AVX-32-NEXT: wait
789 ; AVX-32-NEXT: setae %cl
790 ; AVX-32-NEXT: movzbl %cl, %ecx
791 ; AVX-32-NEXT: shll $31, %ecx
792 ; AVX-32-NEXT: xorl {{[0-9]+}}(%esp), %ecx
793 ; AVX-32-NEXT: vpermilpd {{.*#+}} xmm2 = xmm0[1,0]
794 ; AVX-32-NEXT: vcomiss %xmm1, %xmm2
795 ; AVX-32-NEXT: vmovaps %xmm1, %xmm3
796 ; AVX-32-NEXT: jae .LBB3_6
797 ; AVX-32-NEXT: # %bb.5:
798 ; AVX-32-NEXT: vxorps %xmm3, %xmm3, %xmm3
799 ; AVX-32-NEXT: .LBB3_6:
800 ; AVX-32-NEXT: vsubss %xmm3, %xmm2, %xmm2
801 ; AVX-32-NEXT: vmovss %xmm2, {{[0-9]+}}(%esp)
802 ; AVX-32-NEXT: flds {{[0-9]+}}(%esp)
803 ; AVX-32-NEXT: fisttpll {{[0-9]+}}(%esp)
804 ; AVX-32-NEXT: wait
805 ; AVX-32-NEXT: setae %dl
806 ; AVX-32-NEXT: movzbl %dl, %edx
807 ; AVX-32-NEXT: shll $31, %edx
808 ; AVX-32-NEXT: xorl {{[0-9]+}}(%esp), %edx
809 ; AVX-32-NEXT: vcomiss %xmm1, %xmm0
810 ; AVX-32-NEXT: jae .LBB3_8
811 ; AVX-32-NEXT: # %bb.7:
812 ; AVX-32-NEXT: vxorps %xmm1, %xmm1, %xmm1
813 ; AVX-32-NEXT: .LBB3_8:
814 ; AVX-32-NEXT: vsubss %xmm1, %xmm0, %xmm0
815 ; AVX-32-NEXT: vmovss %xmm0, {{[0-9]+}}(%esp)
816 ; AVX-32-NEXT: flds {{[0-9]+}}(%esp)
817 ; AVX-32-NEXT: fisttpll {{[0-9]+}}(%esp)
818 ; AVX-32-NEXT: wait
819 ; AVX-32-NEXT: vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero
820 ; AVX-32-NEXT: vpinsrd $1, %edx, %xmm0, %xmm0
821 ; AVX-32-NEXT: vpinsrd $2, (%esp), %xmm0, %xmm0
822 ; AVX-32-NEXT: vpinsrd $3, %ecx, %xmm0, %xmm0
823 ; AVX-32-NEXT: setae %cl
824 ; AVX-32-NEXT: movzbl %cl, %ecx
825 ; AVX-32-NEXT: shll $31, %ecx
826 ; AVX-32-NEXT: xorl {{[0-9]+}}(%esp), %ecx
827 ; AVX-32-NEXT: vmovd {{.*#+}} xmm1 = mem[0],zero,zero,zero
828 ; AVX-32-NEXT: vpinsrd $1, %ecx, %xmm1, %xmm1
829 ; AVX-32-NEXT: vpinsrd $2, {{[0-9]+}}(%esp), %xmm1, %xmm1
830 ; AVX-32-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1
831 ; AVX-32-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0
832 ; AVX-32-NEXT: movl %ebp, %esp
833 ; AVX-32-NEXT: popl %ebp
834 ; AVX-32-NEXT: .cfi_def_cfa %esp, 4
835 ; AVX-32-NEXT: retl
837 ; AVX-64-LABEL: strict_vector_fptoui_v4f32_to_v4i64:
838 ; AVX-64: # %bb.0:
839 ; AVX-64-NEXT: vpermilps {{.*#+}} xmm3 = xmm0[3,3,3,3]
840 ; AVX-64-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero
841 ; AVX-64-NEXT: vcomiss %xmm1, %xmm3
842 ; AVX-64-NEXT: vxorps %xmm2, %xmm2, %xmm2
843 ; AVX-64-NEXT: vxorps %xmm4, %xmm4, %xmm4
844 ; AVX-64-NEXT: jb .LBB3_2
845 ; AVX-64-NEXT: # %bb.1:
846 ; AVX-64-NEXT: vmovaps %xmm1, %xmm4
847 ; AVX-64-NEXT: .LBB3_2:
848 ; AVX-64-NEXT: vsubss %xmm4, %xmm3, %xmm3
849 ; AVX-64-NEXT: vcvttss2si %xmm3, %rcx
850 ; AVX-64-NEXT: setae %al
851 ; AVX-64-NEXT: movzbl %al, %eax
852 ; AVX-64-NEXT: shlq $63, %rax
853 ; AVX-64-NEXT: xorq %rcx, %rax
854 ; AVX-64-NEXT: vpermilpd {{.*#+}} xmm4 = xmm0[1,0]
855 ; AVX-64-NEXT: vcomiss %xmm1, %xmm4
856 ; AVX-64-NEXT: vxorps %xmm5, %xmm5, %xmm5
857 ; AVX-64-NEXT: jb .LBB3_4
858 ; AVX-64-NEXT: # %bb.3:
859 ; AVX-64-NEXT: vmovaps %xmm1, %xmm5
860 ; AVX-64-NEXT: .LBB3_4:
861 ; AVX-64-NEXT: vmovq %rax, %xmm3
862 ; AVX-64-NEXT: vsubss %xmm5, %xmm4, %xmm4
863 ; AVX-64-NEXT: vcvttss2si %xmm4, %rax
864 ; AVX-64-NEXT: setae %cl
865 ; AVX-64-NEXT: movzbl %cl, %ecx
866 ; AVX-64-NEXT: shlq $63, %rcx
867 ; AVX-64-NEXT: xorq %rax, %rcx
868 ; AVX-64-NEXT: vmovq %rcx, %xmm4
869 ; AVX-64-NEXT: vcomiss %xmm1, %xmm0
870 ; AVX-64-NEXT: vxorps %xmm5, %xmm5, %xmm5
871 ; AVX-64-NEXT: jb .LBB3_6
872 ; AVX-64-NEXT: # %bb.5:
873 ; AVX-64-NEXT: vmovaps %xmm1, %xmm5
874 ; AVX-64-NEXT: .LBB3_6:
875 ; AVX-64-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]
876 ; AVX-64-NEXT: vsubss %xmm5, %xmm0, %xmm4
877 ; AVX-64-NEXT: vcvttss2si %xmm4, %rax
878 ; AVX-64-NEXT: setae %cl
879 ; AVX-64-NEXT: movzbl %cl, %ecx
880 ; AVX-64-NEXT: shlq $63, %rcx
881 ; AVX-64-NEXT: xorq %rax, %rcx
882 ; AVX-64-NEXT: vmovq %rcx, %xmm4
883 ; AVX-64-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]
884 ; AVX-64-NEXT: vcomiss %xmm1, %xmm0
885 ; AVX-64-NEXT: jb .LBB3_8
886 ; AVX-64-NEXT: # %bb.7:
887 ; AVX-64-NEXT: vmovaps %xmm1, %xmm2
888 ; AVX-64-NEXT: .LBB3_8:
889 ; AVX-64-NEXT: vsubss %xmm2, %xmm0, %xmm0
890 ; AVX-64-NEXT: vcvttss2si %xmm0, %rax
891 ; AVX-64-NEXT: setae %cl
892 ; AVX-64-NEXT: movzbl %cl, %ecx
893 ; AVX-64-NEXT: shlq $63, %rcx
894 ; AVX-64-NEXT: xorq %rax, %rcx
895 ; AVX-64-NEXT: vmovq %rcx, %xmm0
896 ; AVX-64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm4[0],xmm0[0]
897 ; AVX-64-NEXT: vinsertf128 $1, %xmm3, %ymm0, %ymm0
898 ; AVX-64-NEXT: retq
1114 ; AVX-LABEL: strict_vector_fptoui_v4f64_to_v4i32:
1115 ; AVX: # %bb.0:
1116 ; AVX-NEXT: vmovapd {{.*#+}} ymm1 = [2.147483648E+9,2.147483648E+9,2.147483648E+9,2.147483648E+9]
1117 ; AVX-NEXT: vcmpltpd %ymm1, %ymm0, %ymm2
1118 ; AVX-NEXT: vextractf128 $1, %ymm2, %xmm3
1119 ; AVX-NEXT: vshufps {{.*#+}} xmm3 = xmm2[0,2],xmm3[0,2]
1120 ; AVX-NEXT: vxorps %xmm4, %xmm4, %xmm4
1121 ; AVX-NEXT: vmovaps {{.*#+}} xmm5 = [2147483648,2147483648,2147483648,2147483648]
1122 ; AVX-NEXT: vblendvps %xmm3, %xmm4, %xmm5, %xmm3
1123 ; AVX-NEXT: vxorps %xmm4, %xmm4, %xmm4
1124 ; AVX-NEXT: vblendvpd %ymm2, %ymm4, %ymm1, %ymm1
1125 ; AVX-NEXT: vsubpd %ymm1, %ymm0, %ymm0
1126 ; AVX-NEXT: vcvttpd2dq %ymm0, %xmm0
1127 ; AVX-NEXT: vxorpd %xmm3, %xmm0, %xmm0
1128 ; AVX-NEXT: vzeroupper
1129 ; AVX-NEXT: ret{{[l|q]}}
1188 ; AVX-LABEL: strict_vector_fptosi_v4f64_to_v4i8:
1189 ; AVX: # %bb.0:
1190 ; AVX-NEXT: vcvttpd2dq %ymm0, %xmm0
1191 ; AVX-NEXT: vpackssdw %xmm0, %xmm0, %xmm0
1192 ; AVX-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
1193 ; AVX-NEXT: vzeroupper
1194 ; AVX-NEXT: ret{{[l|q]}}
1231 ; AVX-LABEL: strict_vector_fptoui_v4f64_to_v4i8:
1232 ; AVX: # %bb.0:
1233 ; AVX-NEXT: vcvttpd2dq %ymm0, %xmm0
1234 ; AVX-NEXT: vpackusdw %xmm0, %xmm0, %xmm0
1235 ; AVX-NEXT: vpackuswb %xmm0, %xmm0, %xmm0
1236 ; AVX-NEXT: vzeroupper
1237 ; AVX-NEXT: ret{{[l|q]}}
1274 ; AVX-LABEL: strict_vector_fptosi_v4f64_to_v4i1:
1275 ; AVX: # %bb.0:
1276 ; AVX-NEXT: vcvttpd2dq %ymm0, %xmm0
1277 ; AVX-NEXT: vzeroupper
1278 ; AVX-NEXT: ret{{[l|q]}}
1320 ; AVX-LABEL: strict_vector_fptoui_v4f64_to_v4i1:
1321 ; AVX: # %bb.0:
1322 ; AVX-NEXT: vcvttpd2dq %ymm0, %xmm0
1323 ; AVX-NEXT: vzeroupper
1324 ; AVX-NEXT: ret{{[l|q]}}
1380 ; AVX-LABEL: strict_vector_fptoui_v8f32_to_v8i32:
1381 ; AVX: # %bb.0:
1382 ; AVX-NEXT: vmovaps {{.*#+}} ymm1 = [2.14748365E+9,2.14748365E+9,2.14748365E+9,2.14748365E+9,2.1…
1383 ; AVX-NEXT: vcmpltps %ymm1, %ymm0, %ymm2
1384 ; AVX-NEXT: vxorps %xmm3, %xmm3, %xmm3
1385 ; AVX-NEXT: vmovaps {{.*#+}} ymm4 = [2147483648,2147483648,2147483648,2147483648,2147483648,2147…
1386 ; AVX-NEXT: vblendvps %ymm2, %ymm3, %ymm4, %ymm4
1387 ; AVX-NEXT: vblendvps %ymm2, %ymm3, %ymm1, %ymm1
1388 ; AVX-NEXT: vsubps %ymm1, %ymm0, %ymm0
1389 ; AVX-NEXT: vcvttps2dq %ymm0, %ymm0
1390 ; AVX-NEXT: vxorps %ymm4, %ymm0, %ymm0
1391 ; AVX-NEXT: ret{{[l|q]}}
1422 ; AVX-LABEL: strict_vector_fptosi_v8f32_to_v8i16:
1423 ; AVX: # %bb.0:
1424 ; AVX-NEXT: vcvttps2dq %ymm0, %ymm0
1425 ; AVX-NEXT: vextractf128 $1, %ymm0, %xmm1
1426 ; AVX-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
1427 ; AVX-NEXT: vzeroupper
1428 ; AVX-NEXT: ret{{[l|q]}}
1465 ; AVX-LABEL: strict_vector_fptoui_v8f32_to_v8i16:
1466 ; AVX: # %bb.0:
1467 ; AVX-NEXT: vcvttps2dq %ymm0, %ymm0
1468 ; AVX-NEXT: vextractf128 $1, %ymm0, %xmm1
1469 ; AVX-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
1470 ; AVX-NEXT: vzeroupper
1471 ; AVX-NEXT: ret{{[l|q]}}
1508 ; AVX-LABEL: strict_vector_fptosi_v8f32_to_v8i8:
1509 ; AVX: # %bb.0:
1510 ; AVX-NEXT: vcvttps2dq %ymm0, %ymm0
1511 ; AVX-NEXT: vextractf128 $1, %ymm0, %xmm1
1512 ; AVX-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
1513 ; AVX-NEXT: vpacksswb %xmm0, %xmm0, %xmm0
1514 ; AVX-NEXT: vzeroupper
1515 ; AVX-NEXT: ret{{[l|q]}}
1550 ; AVX-LABEL: strict_vector_fptoui_v8f32_to_v8i8:
1551 ; AVX: # %bb.0:
1552 ; AVX-NEXT: vcvttps2dq %ymm0, %ymm0
1553 ; AVX-NEXT: vextractf128 $1, %ymm0, %xmm1
1554 ; AVX-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
1555 ; AVX-NEXT: vpackuswb %xmm0, %xmm0, %xmm0
1556 ; AVX-NEXT: vzeroupper
1557 ; AVX-NEXT: ret{{[l|q]}}
1592 ; AVX-LABEL: strict_vector_fptosi_v8f32_to_v8i1:
1593 ; AVX: # %bb.0:
1594 ; AVX-NEXT: vcvttps2dq %ymm0, %ymm0
1595 ; AVX-NEXT: vextractf128 $1, %ymm0, %xmm1
1596 ; AVX-NEXT: vpackssdw %xmm1, %xmm0, %xmm0
1597 ; AVX-NEXT: vzeroupper
1598 ; AVX-NEXT: ret{{[l|q]}}
1644 ; AVX-LABEL: strict_vector_fptoui_v8f32_to_v8i1:
1645 ; AVX: # %bb.0:
1646 ; AVX-NEXT: vcvttps2dq %ymm0, %ymm0
1647 ; AVX-NEXT: vextractf128 $1, %ymm0, %xmm1
1648 ; AVX-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
1649 ; AVX-NEXT: vzeroupper
1650 ; AVX-NEXT: ret{{[l|q]}}