Lines Matching refs:AVX2

4 … %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-SLOW
5 …slane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-FAST-ALL
6 …ttr=+avx2,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-FAST-PERLANE
35 ; AVX2-SLOW-LABEL: trunc_add_v4i64_v4i32:
36 ; AVX2-SLOW: # %bb.0:
37 ; AVX2-SLOW-NEXT: vpaddq %ymm1, %ymm0, %ymm0
38 ; AVX2-SLOW-NEXT: vextracti128 $1, %ymm0, %xmm1
39 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
40 ; AVX2-SLOW-NEXT: vzeroupper
41 ; AVX2-SLOW-NEXT: retq
43 ; AVX2-FAST-ALL-LABEL: trunc_add_v4i64_v4i32:
44 ; AVX2-FAST-ALL: # %bb.0:
45 ; AVX2-FAST-ALL-NEXT: vpaddq %ymm1, %ymm0, %ymm0
46 ; AVX2-FAST-ALL-NEXT: vmovdqa {{.*#+}} ymm1 = <0,2,4,6,u,u,u,u>
47 ; AVX2-FAST-ALL-NEXT: vpermd %ymm0, %ymm1, %ymm0
48 ; AVX2-FAST-ALL-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
49 ; AVX2-FAST-ALL-NEXT: vzeroupper
50 ; AVX2-FAST-ALL-NEXT: retq
52 ; AVX2-FAST-PERLANE-LABEL: trunc_add_v4i64_v4i32:
53 ; AVX2-FAST-PERLANE: # %bb.0:
54 ; AVX2-FAST-PERLANE-NEXT: vpaddq %ymm1, %ymm0, %ymm0
55 ; AVX2-FAST-PERLANE-NEXT: vextracti128 $1, %ymm0, %xmm1
56 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
57 ; AVX2-FAST-PERLANE-NEXT: vzeroupper
58 ; AVX2-FAST-PERLANE-NEXT: retq
113 ; AVX2-LABEL: trunc_add_v8i64_v8i16:
114 ; AVX2: # %bb.0:
115 ; AVX2-NEXT: vpaddq %ymm2, %ymm0, %ymm0
116 ; AVX2-NEXT: vpaddq %ymm3, %ymm1, %ymm1
117 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
118 ; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1,2,3],ymm1[4],ymm2[5,6,7],ymm1[8],ymm2[9,10,…
119 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2,3],ymm0[4],ymm2[5,6,7],ymm0[8],ymm2[9,10,…
120 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
121 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
122 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
123 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
124 ; AVX2-NEXT: vzeroupper
125 ; AVX2-NEXT: retq
163 ; AVX2-LABEL: trunc_add_v8i32_v8i16:
164 ; AVX2: # %bb.0:
165 ; AVX2-NEXT: vpaddd %ymm1, %ymm0, %ymm0
166 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
167 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
168 ; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
169 ; AVX2-NEXT: vzeroupper
170 ; AVX2-NEXT: retq
250 ; AVX2-LABEL: trunc_add_v16i64_v16i8:
251 ; AVX2: # %bb.0:
252 ; AVX2-NEXT: vpaddq %ymm4, %ymm0, %ymm0
253 ; AVX2-NEXT: vpaddq %ymm5, %ymm1, %ymm1
254 ; AVX2-NEXT: vpaddq %ymm6, %ymm2, %ymm2
255 ; AVX2-NEXT: vpaddq %ymm7, %ymm3, %ymm3
256 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
257 ; AVX2-NEXT: vpand %ymm4, %ymm3, %ymm3
258 ; AVX2-NEXT: vpand %ymm4, %ymm2, %ymm2
259 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
260 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
261 ; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm1
262 ; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0
263 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
264 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
265 ; AVX2-NEXT: vpackusdw %ymm2, %ymm0, %ymm0
266 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
267 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
268 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
269 ; AVX2-NEXT: vzeroupper
270 ; AVX2-NEXT: retq
324 ; AVX2-LABEL: trunc_add_v16i32_v16i8:
325 ; AVX2: # %bb.0:
326 ; AVX2-NEXT: vpaddd %ymm2, %ymm0, %ymm0
327 ; AVX2-NEXT: vpaddd %ymm3, %ymm1, %ymm1
328 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255]
329 ; AVX2-NEXT: vpand %ymm2, %ymm1, %ymm1
330 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
331 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
332 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
333 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
334 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
335 ; AVX2-NEXT: vzeroupper
336 ; AVX2-NEXT: retq
373 ; AVX2-LABEL: trunc_add_v16i16_v16i8:
374 ; AVX2: # %bb.0:
375 ; AVX2-NEXT: vpaddw %ymm1, %ymm0, %ymm0
376 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
377 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
378 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
379 ; AVX2-NEXT: vzeroupper
380 ; AVX2-NEXT: retq
433 ; AVX2-LABEL: trunc_add_v8i32_v8i16_sext_8i8:
434 ; AVX2: # %bb.0:
435 ; AVX2-NEXT: vpmovsxbw %xmm0, %xmm0
436 ; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
437 ; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
438 ; AVX2-NEXT: vpaddw %xmm1, %xmm0, %xmm0
439 ; AVX2-NEXT: vzeroupper
440 ; AVX2-NEXT: retq
476 ; AVX2-SLOW-LABEL: trunc_add_const_v4i64_v4i32:
477 ; AVX2-SLOW: # %bb.0:
478 ; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm1
479 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
480 ; AVX2-SLOW-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
481 ; AVX2-SLOW-NEXT: vzeroupper
482 ; AVX2-SLOW-NEXT: retq
484 ; AVX2-FAST-ALL-LABEL: trunc_add_const_v4i64_v4i32:
485 ; AVX2-FAST-ALL: # %bb.0:
486 ; AVX2-FAST-ALL-NEXT: vmovdqa {{.*#+}} ymm1 = <0,2,4,6,u,u,u,u>
487 ; AVX2-FAST-ALL-NEXT: vpermd %ymm0, %ymm1, %ymm0
488 ; AVX2-FAST-ALL-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
489 ; AVX2-FAST-ALL-NEXT: vzeroupper
490 ; AVX2-FAST-ALL-NEXT: retq
492 ; AVX2-FAST-PERLANE-LABEL: trunc_add_const_v4i64_v4i32:
493 ; AVX2-FAST-PERLANE: # %bb.0:
494 ; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm1
495 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
496 ; AVX2-FAST-PERLANE-NEXT: vpaddd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
497 ; AVX2-FAST-PERLANE-NEXT: vzeroupper
498 ; AVX2-FAST-PERLANE-NEXT: retq
543 ; AVX2-LABEL: trunc_add_const_v8i64_v8i16:
544 ; AVX2: # %bb.0:
545 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
546 ; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1,2,3],ymm1[4],ymm2[5,6,7],ymm1[8],ymm2[9,10,…
547 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2,3],ymm0[4],ymm2[5,6,7],ymm0[8],ymm2[9,10,…
548 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
549 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
550 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
551 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
552 ; AVX2-NEXT: vpaddw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
553 ; AVX2-NEXT: vzeroupper
554 ; AVX2-NEXT: retq
587 ; AVX2-LABEL: trunc_add_const_v8i32_v8i16:
588 ; AVX2: # %bb.0:
589 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
590 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
591 ; AVX2-NEXT: vpaddw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
592 ; AVX2-NEXT: vzeroupper
593 ; AVX2-NEXT: retq
651 ; AVX2-LABEL: trunc_add_const_v16i64_v16i8:
652 ; AVX2: # %bb.0:
653 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
654 ; AVX2-NEXT: vpand %ymm4, %ymm3, %ymm3
655 ; AVX2-NEXT: vpand %ymm4, %ymm2, %ymm2
656 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
657 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
658 ; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm1
659 ; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0
660 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
661 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
662 ; AVX2-NEXT: vpackusdw %ymm2, %ymm0, %ymm0
663 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
664 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
665 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
666 ; AVX2-NEXT: vpaddb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
667 ; AVX2-NEXT: vzeroupper
668 ; AVX2-NEXT: retq
711 ; AVX2-LABEL: trunc_add_const_v16i32_v16i8:
712 ; AVX2: # %bb.0:
713 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255]
714 ; AVX2-NEXT: vpand %ymm2, %ymm1, %ymm1
715 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
716 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
717 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
718 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
719 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
720 ; AVX2-NEXT: vpaddb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
721 ; AVX2-NEXT: vzeroupper
722 ; AVX2-NEXT: retq
754 ; AVX2-LABEL: trunc_add_const_v16i16_v16i8:
755 ; AVX2: # %bb.0:
756 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
757 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
758 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
759 ; AVX2-NEXT: vpaddb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
760 ; AVX2-NEXT: vzeroupper
761 ; AVX2-NEXT: retq
813 ; AVX2-SLOW-LABEL: trunc_sub_v4i64_v4i32:
814 ; AVX2-SLOW: # %bb.0:
815 ; AVX2-SLOW-NEXT: vpsubq %ymm1, %ymm0, %ymm0
816 ; AVX2-SLOW-NEXT: vextracti128 $1, %ymm0, %xmm1
817 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
818 ; AVX2-SLOW-NEXT: vzeroupper
819 ; AVX2-SLOW-NEXT: retq
821 ; AVX2-FAST-ALL-LABEL: trunc_sub_v4i64_v4i32:
822 ; AVX2-FAST-ALL: # %bb.0:
823 ; AVX2-FAST-ALL-NEXT: vpsubq %ymm1, %ymm0, %ymm0
824 ; AVX2-FAST-ALL-NEXT: vmovdqa {{.*#+}} ymm1 = <0,2,4,6,u,u,u,u>
825 ; AVX2-FAST-ALL-NEXT: vpermd %ymm0, %ymm1, %ymm0
826 ; AVX2-FAST-ALL-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
827 ; AVX2-FAST-ALL-NEXT: vzeroupper
828 ; AVX2-FAST-ALL-NEXT: retq
830 ; AVX2-FAST-PERLANE-LABEL: trunc_sub_v4i64_v4i32:
831 ; AVX2-FAST-PERLANE: # %bb.0:
832 ; AVX2-FAST-PERLANE-NEXT: vpsubq %ymm1, %ymm0, %ymm0
833 ; AVX2-FAST-PERLANE-NEXT: vextracti128 $1, %ymm0, %xmm1
834 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
835 ; AVX2-FAST-PERLANE-NEXT: vzeroupper
836 ; AVX2-FAST-PERLANE-NEXT: retq
891 ; AVX2-LABEL: trunc_sub_v8i64_v8i16:
892 ; AVX2: # %bb.0:
893 ; AVX2-NEXT: vpsubq %ymm2, %ymm0, %ymm0
894 ; AVX2-NEXT: vpsubq %ymm3, %ymm1, %ymm1
895 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
896 ; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1,2,3],ymm1[4],ymm2[5,6,7],ymm1[8],ymm2[9,10,…
897 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2,3],ymm0[4],ymm2[5,6,7],ymm0[8],ymm2[9,10,…
898 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
899 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
900 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
901 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
902 ; AVX2-NEXT: vzeroupper
903 ; AVX2-NEXT: retq
941 ; AVX2-LABEL: trunc_sub_v8i32_v8i16:
942 ; AVX2: # %bb.0:
943 ; AVX2-NEXT: vpsubd %ymm1, %ymm0, %ymm0
944 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
945 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
946 ; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
947 ; AVX2-NEXT: vzeroupper
948 ; AVX2-NEXT: retq
1028 ; AVX2-LABEL: trunc_sub_v16i64_v16i8:
1029 ; AVX2: # %bb.0:
1030 ; AVX2-NEXT: vpsubq %ymm4, %ymm0, %ymm0
1031 ; AVX2-NEXT: vpsubq %ymm5, %ymm1, %ymm1
1032 ; AVX2-NEXT: vpsubq %ymm6, %ymm2, %ymm2
1033 ; AVX2-NEXT: vpsubq %ymm7, %ymm3, %ymm3
1034 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
1035 ; AVX2-NEXT: vpand %ymm4, %ymm3, %ymm3
1036 ; AVX2-NEXT: vpand %ymm4, %ymm2, %ymm2
1037 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
1038 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
1039 ; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm1
1040 ; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0
1041 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
1042 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1043 ; AVX2-NEXT: vpackusdw %ymm2, %ymm0, %ymm0
1044 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1045 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
1046 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
1047 ; AVX2-NEXT: vzeroupper
1048 ; AVX2-NEXT: retq
1102 ; AVX2-LABEL: trunc_sub_v16i32_v16i8:
1103 ; AVX2: # %bb.0:
1104 ; AVX2-NEXT: vpsubd %ymm2, %ymm0, %ymm0
1105 ; AVX2-NEXT: vpsubd %ymm3, %ymm1, %ymm1
1106 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255]
1107 ; AVX2-NEXT: vpand %ymm2, %ymm1, %ymm1
1108 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
1109 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
1110 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1111 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
1112 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
1113 ; AVX2-NEXT: vzeroupper
1114 ; AVX2-NEXT: retq
1151 ; AVX2-LABEL: trunc_sub_v16i16_v16i8:
1152 ; AVX2: # %bb.0:
1153 ; AVX2-NEXT: vpsubw %ymm1, %ymm0, %ymm0
1154 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1155 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1156 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
1157 ; AVX2-NEXT: vzeroupper
1158 ; AVX2-NEXT: retq
1224 ; AVX2-SLOW-LABEL: trunc_sub_const_v4i64_v4i32:
1225 ; AVX2-SLOW: # %bb.0:
1226 ; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm1
1227 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
1228 ; AVX2-SLOW-NEXT: vpsubd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1229 ; AVX2-SLOW-NEXT: vzeroupper
1230 ; AVX2-SLOW-NEXT: retq
1232 ; AVX2-FAST-ALL-LABEL: trunc_sub_const_v4i64_v4i32:
1233 ; AVX2-FAST-ALL: # %bb.0:
1234 ; AVX2-FAST-ALL-NEXT: vmovdqa {{.*#+}} ymm1 = <0,2,4,6,u,u,u,u>
1235 ; AVX2-FAST-ALL-NEXT: vpermd %ymm0, %ymm1, %ymm0
1236 ; AVX2-FAST-ALL-NEXT: vpsubd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1237 ; AVX2-FAST-ALL-NEXT: vzeroupper
1238 ; AVX2-FAST-ALL-NEXT: retq
1240 ; AVX2-FAST-PERLANE-LABEL: trunc_sub_const_v4i64_v4i32:
1241 ; AVX2-FAST-PERLANE: # %bb.0:
1242 ; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm1
1243 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
1244 ; AVX2-FAST-PERLANE-NEXT: vpsubd {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1245 ; AVX2-FAST-PERLANE-NEXT: vzeroupper
1246 ; AVX2-FAST-PERLANE-NEXT: retq
1291 ; AVX2-LABEL: trunc_sub_const_v8i64_v8i16:
1292 ; AVX2: # %bb.0:
1293 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
1294 ; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1,2,3],ymm1[4],ymm2[5,6,7],ymm1[8],ymm2[9,10,…
1295 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2,3],ymm0[4],ymm2[5,6,7],ymm0[8],ymm2[9,10,…
1296 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
1297 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1298 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
1299 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
1300 ; AVX2-NEXT: vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1301 ; AVX2-NEXT: vzeroupper
1302 ; AVX2-NEXT: retq
1335 ; AVX2-LABEL: trunc_sub_const_v8i32_v8i16:
1336 ; AVX2: # %bb.0:
1337 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
1338 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
1339 ; AVX2-NEXT: vpsubw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1340 ; AVX2-NEXT: vzeroupper
1341 ; AVX2-NEXT: retq
1399 ; AVX2-LABEL: trunc_sub_const_v16i64_v16i8:
1400 ; AVX2: # %bb.0:
1401 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
1402 ; AVX2-NEXT: vpand %ymm4, %ymm3, %ymm3
1403 ; AVX2-NEXT: vpand %ymm4, %ymm2, %ymm2
1404 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
1405 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
1406 ; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm1
1407 ; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0
1408 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
1409 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1410 ; AVX2-NEXT: vpackusdw %ymm2, %ymm0, %ymm0
1411 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1412 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
1413 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
1414 ; AVX2-NEXT: vpsubb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1415 ; AVX2-NEXT: vzeroupper
1416 ; AVX2-NEXT: retq
1459 ; AVX2-LABEL: trunc_sub_const_v16i32_v16i8:
1460 ; AVX2: # %bb.0:
1461 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255]
1462 ; AVX2-NEXT: vpand %ymm2, %ymm1, %ymm1
1463 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
1464 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
1465 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1466 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
1467 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
1468 ; AVX2-NEXT: vpsubb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1469 ; AVX2-NEXT: vzeroupper
1470 ; AVX2-NEXT: retq
1502 ; AVX2-LABEL: trunc_sub_const_v16i16_v16i8:
1503 ; AVX2: # %bb.0:
1504 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
1505 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1506 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
1507 ; AVX2-NEXT: vpsubb {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
1508 ; AVX2-NEXT: vzeroupper
1509 ; AVX2-NEXT: retq
1596 ; AVX2-SLOW-LABEL: trunc_mul_v4i64_v4i32:
1597 ; AVX2-SLOW: # %bb.0:
1598 ; AVX2-SLOW-NEXT: vextractf128 $1, %ymm1, %xmm2
1599 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2]
1600 ; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm2
1601 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
1602 ; AVX2-SLOW-NEXT: vpmulld %xmm1, %xmm0, %xmm0
1603 ; AVX2-SLOW-NEXT: vzeroupper
1604 ; AVX2-SLOW-NEXT: retq
1606 ; AVX2-FAST-ALL-LABEL: trunc_mul_v4i64_v4i32:
1607 ; AVX2-FAST-ALL: # %bb.0:
1608 ; AVX2-FAST-ALL-NEXT: vmovdqa {{.*#+}} ymm2 = [0,2,4,6,4,6,6,7]
1609 ; AVX2-FAST-ALL-NEXT: vpermd %ymm1, %ymm2, %ymm1
1610 ; AVX2-FAST-ALL-NEXT: vpermd %ymm0, %ymm2, %ymm0
1611 ; AVX2-FAST-ALL-NEXT: vpmulld %xmm1, %xmm0, %xmm0
1612 ; AVX2-FAST-ALL-NEXT: vzeroupper
1613 ; AVX2-FAST-ALL-NEXT: retq
1615 ; AVX2-FAST-PERLANE-LABEL: trunc_mul_v4i64_v4i32:
1616 ; AVX2-FAST-PERLANE: # %bb.0:
1617 ; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm1, %xmm2
1618 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2]
1619 ; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm2
1620 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
1621 ; AVX2-FAST-PERLANE-NEXT: vpmulld %xmm1, %xmm0, %xmm0
1622 ; AVX2-FAST-PERLANE-NEXT: vzeroupper
1623 ; AVX2-FAST-PERLANE-NEXT: retq
1708 ; AVX2-LABEL: trunc_mul_v8i64_v8i16:
1709 ; AVX2: # %bb.0:
1710 ; AVX2-NEXT: vpxor %xmm4, %xmm4, %xmm4
1711 ; AVX2-NEXT: vpblendw {{.*#+}} ymm3 = ymm3[0],ymm4[1,2,3],ymm3[4],ymm4[5,6,7],ymm3[8],ymm4[9,10,…
1712 ; AVX2-NEXT: vpblendw {{.*#+}} ymm2 = ymm2[0],ymm4[1,2,3],ymm2[4],ymm4[5,6,7],ymm2[8],ymm4[9,10,…
1713 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
1714 ; AVX2-NEXT: vextracti128 $1, %ymm2, %xmm3
1715 ; AVX2-NEXT: vpackusdw %xmm3, %xmm2, %xmm2
1716 ; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm4[1,2,3],ymm1[4],ymm4[5,6,7],ymm1[8],ymm4[9,10,…
1717 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm4[1,2,3],ymm0[4],ymm4[5,6,7],ymm0[8],ymm4[9,10,…
1718 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
1719 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1720 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
1721 ; AVX2-NEXT: vpmullw %xmm2, %xmm0, %xmm0
1722 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
1723 ; AVX2-NEXT: vzeroupper
1724 ; AVX2-NEXT: retq
1790 ; AVX2-LABEL: trunc_mul_v8i32_v8i16:
1791 ; AVX2: # %bb.0:
1792 ; AVX2-NEXT: vpmulld %ymm1, %ymm0, %ymm0
1793 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
1794 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
1795 ; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
1796 ; AVX2-NEXT: vzeroupper
1797 ; AVX2-NEXT: retq
1877 ; AVX2-LABEL: trunc_mul_v16i64_v16i8:
1878 ; AVX2: # %bb.0:
1879 ; AVX2-NEXT: vpmuludq %ymm4, %ymm0, %ymm0
1880 ; AVX2-NEXT: vpmuludq %ymm5, %ymm1, %ymm1
1881 ; AVX2-NEXT: vpmuludq %ymm6, %ymm2, %ymm2
1882 ; AVX2-NEXT: vpmuludq %ymm7, %ymm3, %ymm3
1883 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
1884 ; AVX2-NEXT: vpand %ymm4, %ymm3, %ymm3
1885 ; AVX2-NEXT: vpand %ymm4, %ymm2, %ymm2
1886 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
1887 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
1888 ; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm1
1889 ; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0
1890 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
1891 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
1892 ; AVX2-NEXT: vpackusdw %ymm2, %ymm0, %ymm0
1893 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
1894 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
1895 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
1896 ; AVX2-NEXT: vzeroupper
1897 ; AVX2-NEXT: retq
1995 ; AVX2-LABEL: trunc_mul_v16i32_v16i8:
1996 ; AVX2: # %bb.0:
1997 ; AVX2-NEXT: vpmulld %ymm2, %ymm0, %ymm0
1998 ; AVX2-NEXT: vpmulld %ymm3, %ymm1, %ymm1
1999 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255]
2000 ; AVX2-NEXT: vpand %ymm2, %ymm1, %ymm1
2001 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
2002 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
2003 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2004 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2005 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
2006 ; AVX2-NEXT: vzeroupper
2007 ; AVX2-NEXT: retq
2044 ; AVX2-LABEL: trunc_mul_v16i16_v16i8:
2045 ; AVX2: # %bb.0:
2046 ; AVX2-NEXT: vpmullw %ymm1, %ymm0, %ymm0
2047 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2048 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2049 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2050 ; AVX2-NEXT: vzeroupper
2051 ; AVX2-NEXT: retq
2104 ; AVX2-LABEL: trunc_mul_v8i32_v8i16_zext_8i8:
2105 ; AVX2: # %bb.0:
2106 ; AVX2-NEXT: vpmovzxbw {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero,xmm0[…
2107 ; AVX2-NEXT: vpshufb {{.*#+}} ymm1 = ymm1[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
2108 ; AVX2-NEXT: vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
2109 ; AVX2-NEXT: vpmullw %xmm1, %xmm0, %xmm0
2110 ; AVX2-NEXT: vzeroupper
2111 ; AVX2-NEXT: retq
2150 ; AVX2-SLOW-LABEL: trunc_mul_const_v4i64_v4i32:
2151 ; AVX2-SLOW: # %bb.0:
2152 ; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm1
2153 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
2154 ; AVX2-SLOW-NEXT: vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2155 ; AVX2-SLOW-NEXT: vzeroupper
2156 ; AVX2-SLOW-NEXT: retq
2158 ; AVX2-FAST-ALL-LABEL: trunc_mul_const_v4i64_v4i32:
2159 ; AVX2-FAST-ALL: # %bb.0:
2160 ; AVX2-FAST-ALL-NEXT: vmovdqa {{.*#+}} ymm1 = <0,2,4,6,u,u,u,u>
2161 ; AVX2-FAST-ALL-NEXT: vpermd %ymm0, %ymm1, %ymm0
2162 ; AVX2-FAST-ALL-NEXT: vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2163 ; AVX2-FAST-ALL-NEXT: vzeroupper
2164 ; AVX2-FAST-ALL-NEXT: retq
2166 ; AVX2-FAST-PERLANE-LABEL: trunc_mul_const_v4i64_v4i32:
2167 ; AVX2-FAST-PERLANE: # %bb.0:
2168 ; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm1
2169 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
2170 ; AVX2-FAST-PERLANE-NEXT: vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2171 ; AVX2-FAST-PERLANE-NEXT: vzeroupper
2172 ; AVX2-FAST-PERLANE-NEXT: retq
2217 ; AVX2-LABEL: trunc_mul_const_v8i64_v8i16:
2218 ; AVX2: # %bb.0:
2219 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
2220 ; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1,2,3],ymm1[4],ymm2[5,6,7],ymm1[8],ymm2[9,10,…
2221 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2,3],ymm0[4],ymm2[5,6,7],ymm0[8],ymm2[9,10,…
2222 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
2223 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2224 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
2225 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
2226 ; AVX2-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2227 ; AVX2-NEXT: vzeroupper
2228 ; AVX2-NEXT: retq
2261 ; AVX2-LABEL: trunc_mul_const_v8i32_v8i16:
2262 ; AVX2: # %bb.0:
2263 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
2264 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
2265 ; AVX2-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2266 ; AVX2-NEXT: vzeroupper
2267 ; AVX2-NEXT: retq
2342 ; AVX2-LABEL: trunc_mul_const_v16i64_v16i8:
2343 ; AVX2: # %bb.0:
2344 ; AVX2-NEXT: vpmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2345 ; AVX2-NEXT: vpmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
2346 ; AVX2-NEXT: vpmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm2, %ymm2
2347 ; AVX2-NEXT: vpmuludq {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm3, %ymm3
2348 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
2349 ; AVX2-NEXT: vpand %ymm4, %ymm3, %ymm3
2350 ; AVX2-NEXT: vpand %ymm4, %ymm2, %ymm2
2351 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
2352 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
2353 ; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm1
2354 ; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0
2355 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
2356 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2357 ; AVX2-NEXT: vpackusdw %ymm2, %ymm0, %ymm0
2358 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2359 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2360 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
2361 ; AVX2-NEXT: vzeroupper
2362 ; AVX2-NEXT: retq
2454 ; AVX2-LABEL: trunc_mul_const_v16i32_v16i8:
2455 ; AVX2: # %bb.0:
2456 ; AVX2-NEXT: vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2457 ; AVX2-NEXT: vpmulld {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm1, %ymm1
2458 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255]
2459 ; AVX2-NEXT: vpand %ymm2, %ymm1, %ymm1
2460 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
2461 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
2462 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2463 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2464 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
2465 ; AVX2-NEXT: vzeroupper
2466 ; AVX2-NEXT: retq
2502 ; AVX2-LABEL: trunc_mul_const_v16i16_v16i8:
2503 ; AVX2: # %bb.0:
2504 ; AVX2-NEXT: vpmullw {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2505 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2506 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2507 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2508 ; AVX2-NEXT: vzeroupper
2509 ; AVX2-NEXT: retq
2559 ; AVX2-SLOW-LABEL: trunc_and_v4i64_v4i32:
2560 ; AVX2-SLOW: # %bb.0:
2561 ; AVX2-SLOW-NEXT: vandps %ymm1, %ymm0, %ymm0
2562 ; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm1
2563 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
2564 ; AVX2-SLOW-NEXT: vzeroupper
2565 ; AVX2-SLOW-NEXT: retq
2567 ; AVX2-FAST-ALL-LABEL: trunc_and_v4i64_v4i32:
2568 ; AVX2-FAST-ALL: # %bb.0:
2569 ; AVX2-FAST-ALL-NEXT: vandps %ymm1, %ymm0, %ymm0
2570 ; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = <0,2,4,6,u,u,u,u>
2571 ; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm0
2572 ; AVX2-FAST-ALL-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
2573 ; AVX2-FAST-ALL-NEXT: vzeroupper
2574 ; AVX2-FAST-ALL-NEXT: retq
2576 ; AVX2-FAST-PERLANE-LABEL: trunc_and_v4i64_v4i32:
2577 ; AVX2-FAST-PERLANE: # %bb.0:
2578 ; AVX2-FAST-PERLANE-NEXT: vandps %ymm1, %ymm0, %ymm0
2579 ; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm1
2580 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
2581 ; AVX2-FAST-PERLANE-NEXT: vzeroupper
2582 ; AVX2-FAST-PERLANE-NEXT: retq
2631 ; AVX2-LABEL: trunc_and_v8i64_v8i16:
2632 ; AVX2: # %bb.0:
2633 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
2634 ; AVX2-NEXT: vpand %ymm3, %ymm1, %ymm1
2635 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
2636 ; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1,2,3],ymm1[4],ymm2[5,6,7],ymm1[8],ymm2[9,10,…
2637 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2,3],ymm0[4],ymm2[5,6,7],ymm0[8],ymm2[9,10,…
2638 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
2639 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2640 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
2641 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
2642 ; AVX2-NEXT: vzeroupper
2643 ; AVX2-NEXT: retq
2677 ; AVX2-LABEL: trunc_and_v8i32_v8i16:
2678 ; AVX2: # %bb.0:
2679 ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
2680 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
2681 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
2682 ; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
2683 ; AVX2-NEXT: vzeroupper
2684 ; AVX2-NEXT: retq
2752 ; AVX2-LABEL: trunc_and_v16i64_v16i8:
2753 ; AVX2: # %bb.0:
2754 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm8 = [255,255,255,255]
2755 ; AVX2-NEXT: vpand %ymm7, %ymm8, %ymm7
2756 ; AVX2-NEXT: vpand %ymm7, %ymm3, %ymm3
2757 ; AVX2-NEXT: vpand %ymm6, %ymm8, %ymm6
2758 ; AVX2-NEXT: vpand %ymm6, %ymm2, %ymm2
2759 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
2760 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
2761 ; AVX2-NEXT: vpand %ymm5, %ymm8, %ymm3
2762 ; AVX2-NEXT: vpand %ymm3, %ymm1, %ymm1
2763 ; AVX2-NEXT: vpand %ymm4, %ymm8, %ymm3
2764 ; AVX2-NEXT: vpand %ymm3, %ymm0, %ymm0
2765 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
2766 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
2767 ; AVX2-NEXT: vpackusdw %ymm2, %ymm0, %ymm0
2768 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2769 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2770 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
2771 ; AVX2-NEXT: vzeroupper
2772 ; AVX2-NEXT: retq
2820 ; AVX2-LABEL: trunc_and_v16i32_v16i8:
2821 ; AVX2: # %bb.0:
2822 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm4 = [255,255,255,255,255,255,255,255]
2823 ; AVX2-NEXT: vpand %ymm4, %ymm3, %ymm3
2824 ; AVX2-NEXT: vpand %ymm3, %ymm1, %ymm1
2825 ; AVX2-NEXT: vpand %ymm4, %ymm2, %ymm2
2826 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
2827 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
2828 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2829 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2830 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
2831 ; AVX2-NEXT: vzeroupper
2832 ; AVX2-NEXT: retq
2865 ; AVX2-LABEL: trunc_and_v16i16_v16i8:
2866 ; AVX2: # %bb.0:
2867 ; AVX2-NEXT: vpand %ymm1, %ymm0, %ymm0
2868 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
2869 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2870 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
2871 ; AVX2-NEXT: vzeroupper
2872 ; AVX2-NEXT: retq
2921 ; AVX2-SLOW-LABEL: trunc_and_const_v4i64_v4i32:
2922 ; AVX2-SLOW: # %bb.0:
2923 ; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm1
2924 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
2925 ; AVX2-SLOW-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2926 ; AVX2-SLOW-NEXT: vzeroupper
2927 ; AVX2-SLOW-NEXT: retq
2929 ; AVX2-FAST-ALL-LABEL: trunc_and_const_v4i64_v4i32:
2930 ; AVX2-FAST-ALL: # %bb.0:
2931 ; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = <u,2,4,6,u,u,u,u>
2932 ; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm0
2933 ; AVX2-FAST-ALL-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2934 ; AVX2-FAST-ALL-NEXT: vzeroupper
2935 ; AVX2-FAST-ALL-NEXT: retq
2937 ; AVX2-FAST-PERLANE-LABEL: trunc_and_const_v4i64_v4i32:
2938 ; AVX2-FAST-PERLANE: # %bb.0:
2939 ; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm1
2940 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
2941 ; AVX2-FAST-PERLANE-NEXT: vandps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2942 ; AVX2-FAST-PERLANE-NEXT: vzeroupper
2943 ; AVX2-FAST-PERLANE-NEXT: retq
2988 ; AVX2-LABEL: trunc_and_const_v8i64_v8i16:
2989 ; AVX2: # %bb.0:
2990 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
2991 ; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1,2,3],ymm1[4],ymm2[5,6,7],ymm1[8],ymm2[9,10,…
2992 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2,3],ymm0[4],ymm2[5,6,7],ymm0[8],ymm2[9,10,…
2993 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
2994 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
2995 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
2996 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
2997 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
2998 ; AVX2-NEXT: vzeroupper
2999 ; AVX2-NEXT: retq
3032 ; AVX2-LABEL: trunc_and_const_v8i32_v8i16:
3033 ; AVX2: # %bb.0:
3034 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
3035 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3036 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3037 ; AVX2-NEXT: vzeroupper
3038 ; AVX2-NEXT: retq
3096 ; AVX2-LABEL: trunc_and_const_v16i64_v16i8:
3097 ; AVX2: # %bb.0:
3098 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
3099 ; AVX2-NEXT: vpand %ymm4, %ymm3, %ymm3
3100 ; AVX2-NEXT: vpand %ymm4, %ymm2, %ymm2
3101 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
3102 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
3103 ; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm1
3104 ; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0
3105 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
3106 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3107 ; AVX2-NEXT: vpackusdw %ymm2, %ymm0, %ymm0
3108 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
3109 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
3110 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
3111 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3112 ; AVX2-NEXT: vzeroupper
3113 ; AVX2-NEXT: retq
3156 ; AVX2-LABEL: trunc_and_const_v16i32_v16i8:
3157 ; AVX2: # %bb.0:
3158 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255]
3159 ; AVX2-NEXT: vpand %ymm2, %ymm1, %ymm1
3160 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
3161 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
3162 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
3163 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
3164 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
3165 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3166 ; AVX2-NEXT: vzeroupper
3167 ; AVX2-NEXT: retq
3199 ; AVX2-LABEL: trunc_and_const_v16i16_v16i8:
3200 ; AVX2: # %bb.0:
3201 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
3202 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
3203 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
3204 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3205 ; AVX2-NEXT: vzeroupper
3206 ; AVX2-NEXT: retq
3256 ; AVX2-SLOW-LABEL: trunc_xor_v4i64_v4i32:
3257 ; AVX2-SLOW: # %bb.0:
3258 ; AVX2-SLOW-NEXT: vxorps %ymm1, %ymm0, %ymm0
3259 ; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm1
3260 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
3261 ; AVX2-SLOW-NEXT: vzeroupper
3262 ; AVX2-SLOW-NEXT: retq
3264 ; AVX2-FAST-ALL-LABEL: trunc_xor_v4i64_v4i32:
3265 ; AVX2-FAST-ALL: # %bb.0:
3266 ; AVX2-FAST-ALL-NEXT: vxorps %ymm1, %ymm0, %ymm0
3267 ; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = <0,2,4,6,u,u,u,u>
3268 ; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm0
3269 ; AVX2-FAST-ALL-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
3270 ; AVX2-FAST-ALL-NEXT: vzeroupper
3271 ; AVX2-FAST-ALL-NEXT: retq
3273 ; AVX2-FAST-PERLANE-LABEL: trunc_xor_v4i64_v4i32:
3274 ; AVX2-FAST-PERLANE: # %bb.0:
3275 ; AVX2-FAST-PERLANE-NEXT: vxorps %ymm1, %ymm0, %ymm0
3276 ; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm1
3277 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
3278 ; AVX2-FAST-PERLANE-NEXT: vzeroupper
3279 ; AVX2-FAST-PERLANE-NEXT: retq
3328 ; AVX2-LABEL: trunc_xor_v8i64_v8i16:
3329 ; AVX2: # %bb.0:
3330 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0
3331 ; AVX2-NEXT: vpxor %ymm3, %ymm1, %ymm1
3332 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
3333 ; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1,2,3],ymm1[4],ymm2[5,6,7],ymm1[8],ymm2[9,10,…
3334 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2,3],ymm0[4],ymm2[5,6,7],ymm0[8],ymm2[9,10,…
3335 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
3336 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
3337 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
3338 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
3339 ; AVX2-NEXT: vzeroupper
3340 ; AVX2-NEXT: retq
3374 ; AVX2-LABEL: trunc_xor_v8i32_v8i16:
3375 ; AVX2: # %bb.0:
3376 ; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0
3377 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
3378 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3379 ; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
3380 ; AVX2-NEXT: vzeroupper
3381 ; AVX2-NEXT: retq
3449 ; AVX2-LABEL: trunc_xor_v16i64_v16i8:
3450 ; AVX2: # %bb.0:
3451 ; AVX2-NEXT: vpxor %ymm4, %ymm0, %ymm0
3452 ; AVX2-NEXT: vpxor %ymm5, %ymm1, %ymm1
3453 ; AVX2-NEXT: vpxor %ymm6, %ymm2, %ymm2
3454 ; AVX2-NEXT: vpxor %ymm7, %ymm3, %ymm3
3455 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
3456 ; AVX2-NEXT: vpand %ymm4, %ymm3, %ymm3
3457 ; AVX2-NEXT: vpand %ymm4, %ymm2, %ymm2
3458 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
3459 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
3460 ; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm1
3461 ; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0
3462 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
3463 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3464 ; AVX2-NEXT: vpackusdw %ymm2, %ymm0, %ymm0
3465 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
3466 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
3467 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
3468 ; AVX2-NEXT: vzeroupper
3469 ; AVX2-NEXT: retq
3517 ; AVX2-LABEL: trunc_xor_v16i32_v16i8:
3518 ; AVX2: # %bb.0:
3519 ; AVX2-NEXT: vpxor %ymm2, %ymm0, %ymm0
3520 ; AVX2-NEXT: vpxor %ymm3, %ymm1, %ymm1
3521 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255]
3522 ; AVX2-NEXT: vpand %ymm2, %ymm1, %ymm1
3523 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
3524 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
3525 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
3526 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
3527 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
3528 ; AVX2-NEXT: vzeroupper
3529 ; AVX2-NEXT: retq
3562 ; AVX2-LABEL: trunc_xor_v16i16_v16i8:
3563 ; AVX2: # %bb.0:
3564 ; AVX2-NEXT: vpxor %ymm1, %ymm0, %ymm0
3565 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
3566 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
3567 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
3568 ; AVX2-NEXT: vzeroupper
3569 ; AVX2-NEXT: retq
3618 ; AVX2-SLOW-LABEL: trunc_xor_const_v4i64_v4i32:
3619 ; AVX2-SLOW: # %bb.0:
3620 ; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm1
3621 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
3622 ; AVX2-SLOW-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3623 ; AVX2-SLOW-NEXT: vzeroupper
3624 ; AVX2-SLOW-NEXT: retq
3626 ; AVX2-FAST-ALL-LABEL: trunc_xor_const_v4i64_v4i32:
3627 ; AVX2-FAST-ALL: # %bb.0:
3628 ; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = <0,2,4,6,u,u,u,u>
3629 ; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm0
3630 ; AVX2-FAST-ALL-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3631 ; AVX2-FAST-ALL-NEXT: vzeroupper
3632 ; AVX2-FAST-ALL-NEXT: retq
3634 ; AVX2-FAST-PERLANE-LABEL: trunc_xor_const_v4i64_v4i32:
3635 ; AVX2-FAST-PERLANE: # %bb.0:
3636 ; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm1
3637 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
3638 ; AVX2-FAST-PERLANE-NEXT: vxorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3639 ; AVX2-FAST-PERLANE-NEXT: vzeroupper
3640 ; AVX2-FAST-PERLANE-NEXT: retq
3685 ; AVX2-LABEL: trunc_xor_const_v8i64_v8i16:
3686 ; AVX2: # %bb.0:
3687 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
3688 ; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1,2,3],ymm1[4],ymm2[5,6,7],ymm1[8],ymm2[9,10,…
3689 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2,3],ymm0[4],ymm2[5,6,7],ymm0[8],ymm2[9,10,…
3690 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
3691 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
3692 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
3693 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
3694 ; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3695 ; AVX2-NEXT: vzeroupper
3696 ; AVX2-NEXT: retq
3729 ; AVX2-LABEL: trunc_xor_const_v8i32_v8i16:
3730 ; AVX2: # %bb.0:
3731 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
3732 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
3733 ; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3734 ; AVX2-NEXT: vzeroupper
3735 ; AVX2-NEXT: retq
3793 ; AVX2-LABEL: trunc_xor_const_v16i64_v16i8:
3794 ; AVX2: # %bb.0:
3795 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
3796 ; AVX2-NEXT: vpand %ymm4, %ymm3, %ymm3
3797 ; AVX2-NEXT: vpand %ymm4, %ymm2, %ymm2
3798 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
3799 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
3800 ; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm1
3801 ; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0
3802 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
3803 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
3804 ; AVX2-NEXT: vpackusdw %ymm2, %ymm0, %ymm0
3805 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
3806 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
3807 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
3808 ; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3809 ; AVX2-NEXT: vzeroupper
3810 ; AVX2-NEXT: retq
3853 ; AVX2-LABEL: trunc_xor_const_v16i32_v16i8:
3854 ; AVX2: # %bb.0:
3855 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255]
3856 ; AVX2-NEXT: vpand %ymm2, %ymm1, %ymm1
3857 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
3858 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
3859 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
3860 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
3861 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
3862 ; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3863 ; AVX2-NEXT: vzeroupper
3864 ; AVX2-NEXT: retq
3896 ; AVX2-LABEL: trunc_xor_const_v16i16_v16i8:
3897 ; AVX2: # %bb.0:
3898 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
3899 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
3900 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
3901 ; AVX2-NEXT: vpxor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
3902 ; AVX2-NEXT: vzeroupper
3903 ; AVX2-NEXT: retq
3953 ; AVX2-SLOW-LABEL: trunc_or_v4i64_v4i32:
3954 ; AVX2-SLOW: # %bb.0:
3955 ; AVX2-SLOW-NEXT: vorps %ymm1, %ymm0, %ymm0
3956 ; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm1
3957 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
3958 ; AVX2-SLOW-NEXT: vzeroupper
3959 ; AVX2-SLOW-NEXT: retq
3961 ; AVX2-FAST-ALL-LABEL: trunc_or_v4i64_v4i32:
3962 ; AVX2-FAST-ALL: # %bb.0:
3963 ; AVX2-FAST-ALL-NEXT: vorps %ymm1, %ymm0, %ymm0
3964 ; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = <0,2,4,6,u,u,u,u>
3965 ; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm0
3966 ; AVX2-FAST-ALL-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
3967 ; AVX2-FAST-ALL-NEXT: vzeroupper
3968 ; AVX2-FAST-ALL-NEXT: retq
3970 ; AVX2-FAST-PERLANE-LABEL: trunc_or_v4i64_v4i32:
3971 ; AVX2-FAST-PERLANE: # %bb.0:
3972 ; AVX2-FAST-PERLANE-NEXT: vorps %ymm1, %ymm0, %ymm0
3973 ; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm1
3974 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
3975 ; AVX2-FAST-PERLANE-NEXT: vzeroupper
3976 ; AVX2-FAST-PERLANE-NEXT: retq
4025 ; AVX2-LABEL: trunc_or_v8i64_v8i16:
4026 ; AVX2: # %bb.0:
4027 ; AVX2-NEXT: vpor %ymm2, %ymm0, %ymm0
4028 ; AVX2-NEXT: vpor %ymm3, %ymm1, %ymm1
4029 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
4030 ; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1,2,3],ymm1[4],ymm2[5,6,7],ymm1[8],ymm2[9,10,…
4031 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2,3],ymm0[4],ymm2[5,6,7],ymm0[8],ymm2[9,10,…
4032 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
4033 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
4034 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
4035 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
4036 ; AVX2-NEXT: vzeroupper
4037 ; AVX2-NEXT: retq
4071 ; AVX2-LABEL: trunc_or_v8i32_v8i16:
4072 ; AVX2: # %bb.0:
4073 ; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
4074 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
4075 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4076 ; AVX2-NEXT: # kill: def $xmm0 killed $xmm0 killed $ymm0
4077 ; AVX2-NEXT: vzeroupper
4078 ; AVX2-NEXT: retq
4146 ; AVX2-LABEL: trunc_or_v16i64_v16i8:
4147 ; AVX2: # %bb.0:
4148 ; AVX2-NEXT: vpor %ymm4, %ymm0, %ymm0
4149 ; AVX2-NEXT: vpor %ymm5, %ymm1, %ymm1
4150 ; AVX2-NEXT: vpor %ymm6, %ymm2, %ymm2
4151 ; AVX2-NEXT: vpor %ymm7, %ymm3, %ymm3
4152 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
4153 ; AVX2-NEXT: vpand %ymm4, %ymm3, %ymm3
4154 ; AVX2-NEXT: vpand %ymm4, %ymm2, %ymm2
4155 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
4156 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
4157 ; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm1
4158 ; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0
4159 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
4160 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
4161 ; AVX2-NEXT: vpackusdw %ymm2, %ymm0, %ymm0
4162 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
4163 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
4164 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
4165 ; AVX2-NEXT: vzeroupper
4166 ; AVX2-NEXT: retq
4214 ; AVX2-LABEL: trunc_or_v16i32_v16i8:
4215 ; AVX2: # %bb.0:
4216 ; AVX2-NEXT: vpor %ymm2, %ymm0, %ymm0
4217 ; AVX2-NEXT: vpor %ymm3, %ymm1, %ymm1
4218 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255]
4219 ; AVX2-NEXT: vpand %ymm2, %ymm1, %ymm1
4220 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
4221 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
4222 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
4223 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
4224 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
4225 ; AVX2-NEXT: vzeroupper
4226 ; AVX2-NEXT: retq
4259 ; AVX2-LABEL: trunc_or_v16i16_v16i8:
4260 ; AVX2: # %bb.0:
4261 ; AVX2-NEXT: vpor %ymm1, %ymm0, %ymm0
4262 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
4263 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
4264 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
4265 ; AVX2-NEXT: vzeroupper
4266 ; AVX2-NEXT: retq
4315 ; AVX2-SLOW-LABEL: trunc_or_const_v4i64_v4i32:
4316 ; AVX2-SLOW: # %bb.0:
4317 ; AVX2-SLOW-NEXT: vextractf128 $1, %ymm0, %xmm1
4318 ; AVX2-SLOW-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
4319 ; AVX2-SLOW-NEXT: vorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4320 ; AVX2-SLOW-NEXT: vzeroupper
4321 ; AVX2-SLOW-NEXT: retq
4323 ; AVX2-FAST-ALL-LABEL: trunc_or_const_v4i64_v4i32:
4324 ; AVX2-FAST-ALL: # %bb.0:
4325 ; AVX2-FAST-ALL-NEXT: vmovaps {{.*#+}} ymm1 = <0,2,4,6,u,u,u,u>
4326 ; AVX2-FAST-ALL-NEXT: vpermps %ymm0, %ymm1, %ymm0
4327 ; AVX2-FAST-ALL-NEXT: vorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4328 ; AVX2-FAST-ALL-NEXT: vzeroupper
4329 ; AVX2-FAST-ALL-NEXT: retq
4331 ; AVX2-FAST-PERLANE-LABEL: trunc_or_const_v4i64_v4i32:
4332 ; AVX2-FAST-PERLANE: # %bb.0:
4333 ; AVX2-FAST-PERLANE-NEXT: vextractf128 $1, %ymm0, %xmm1
4334 ; AVX2-FAST-PERLANE-NEXT: vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
4335 ; AVX2-FAST-PERLANE-NEXT: vorps {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4336 ; AVX2-FAST-PERLANE-NEXT: vzeroupper
4337 ; AVX2-FAST-PERLANE-NEXT: retq
4382 ; AVX2-LABEL: trunc_or_const_v8i64_v8i16:
4383 ; AVX2: # %bb.0:
4384 ; AVX2-NEXT: vpxor %xmm2, %xmm2, %xmm2
4385 ; AVX2-NEXT: vpblendw {{.*#+}} ymm1 = ymm1[0],ymm2[1,2,3],ymm1[4],ymm2[5,6,7],ymm1[8],ymm2[9,10,…
4386 ; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm2[1,2,3],ymm0[4],ymm2[5,6,7],ymm0[8],ymm2[9,10,…
4387 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
4388 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
4389 ; AVX2-NEXT: vpackusdw %xmm1, %xmm0, %xmm0
4390 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
4391 ; AVX2-NEXT: vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4392 ; AVX2-NEXT: vzeroupper
4393 ; AVX2-NEXT: retq
4426 ; AVX2-LABEL: trunc_or_const_v8i32_v8i16:
4427 ; AVX2: # %bb.0:
4428 ; AVX2-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[0,1,4,5,8,9,12,13,u,u,u,u,u,u,u,u,16,17,20,21,24,25,28…
4429 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
4430 ; AVX2-NEXT: vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4431 ; AVX2-NEXT: vzeroupper
4432 ; AVX2-NEXT: retq
4490 ; AVX2-LABEL: trunc_or_const_v16i64_v16i8:
4491 ; AVX2: # %bb.0:
4492 ; AVX2-NEXT: vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
4493 ; AVX2-NEXT: vpand %ymm4, %ymm3, %ymm3
4494 ; AVX2-NEXT: vpand %ymm4, %ymm2, %ymm2
4495 ; AVX2-NEXT: vpackusdw %ymm3, %ymm2, %ymm2
4496 ; AVX2-NEXT: vpermq {{.*#+}} ymm2 = ymm2[0,2,1,3]
4497 ; AVX2-NEXT: vpand %ymm4, %ymm1, %ymm1
4498 ; AVX2-NEXT: vpand %ymm4, %ymm0, %ymm0
4499 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
4500 ; AVX2-NEXT: vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
4501 ; AVX2-NEXT: vpackusdw %ymm2, %ymm0, %ymm0
4502 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
4503 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
4504 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
4505 ; AVX2-NEXT: vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4506 ; AVX2-NEXT: vzeroupper
4507 ; AVX2-NEXT: retq
4550 ; AVX2-LABEL: trunc_or_const_v16i32_v16i8:
4551 ; AVX2: # %bb.0:
4552 ; AVX2-NEXT: vpbroadcastd {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255]
4553 ; AVX2-NEXT: vpand %ymm2, %ymm1, %ymm1
4554 ; AVX2-NEXT: vpand %ymm2, %ymm0, %ymm0
4555 ; AVX2-NEXT: vpackusdw %ymm1, %ymm0, %ymm0
4556 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
4557 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
4558 ; AVX2-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[0,2,1,3]
4559 ; AVX2-NEXT: vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4560 ; AVX2-NEXT: vzeroupper
4561 ; AVX2-NEXT: retq
4593 ; AVX2-LABEL: trunc_or_const_v16i16_v16i8:
4594 ; AVX2: # %bb.0:
4595 ; AVX2-NEXT: vpand {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %ymm0, %ymm0
4596 ; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1
4597 ; AVX2-NEXT: vpackuswb %xmm1, %xmm0, %xmm0
4598 ; AVX2-NEXT: vpor {{\.?LCPI[0-9]+_[0-9]+}}(%rip), %xmm0, %xmm0
4599 ; AVX2-NEXT: vzeroupper
4600 ; AVX2-NEXT: retq