Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=SSE --check-prefix=SSSE3
      4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41
      5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
      6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-SLOW
      7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX,AVX2,AVX2-FAST
      8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX512 --check-prefix=AVX512F
      9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512VL
     10 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BW
     11 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl,+fast-variable-shuffle | FileCheck %s --check-prefixes=AVX512,AVX512BWVL
     12 
     13 ;
     14 ; PACKUS saturation truncation to vXi32
     15 ;
     16 
     17 define <4 x i32> @trunc_packus_v4i64_v4i32(<4 x i64> %a0) {
     18 ; SSE2-LABEL: trunc_packus_v4i64_v4i32:
     19 ; SSE2:       # %bb.0:
     20 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [4294967295,4294967295]
     21 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
     22 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
     23 ; SSE2-NEXT:    pxor %xmm2, %xmm3
     24 ; SSE2-NEXT:    movdqa {{.*#+}} xmm5 = [2147483647,2147483647]
     25 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
     26 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm6
     27 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
     28 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm3
     29 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]
     30 ; SSE2-NEXT:    pand %xmm7, %xmm4
     31 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
     32 ; SSE2-NEXT:    por %xmm4, %xmm3
     33 ; SSE2-NEXT:    pand %xmm3, %xmm0
     34 ; SSE2-NEXT:    pandn %xmm8, %xmm3
     35 ; SSE2-NEXT:    por %xmm0, %xmm3
     36 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
     37 ; SSE2-NEXT:    pxor %xmm2, %xmm0
     38 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
     39 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
     40 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
     41 ; SSE2-NEXT:    pcmpeqd %xmm5, %xmm0
     42 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
     43 ; SSE2-NEXT:    pand %xmm6, %xmm0
     44 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
     45 ; SSE2-NEXT:    por %xmm0, %xmm4
     46 ; SSE2-NEXT:    pand %xmm4, %xmm1
     47 ; SSE2-NEXT:    pandn %xmm8, %xmm4
     48 ; SSE2-NEXT:    por %xmm1, %xmm4
     49 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
     50 ; SSE2-NEXT:    pxor %xmm2, %xmm0
     51 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
     52 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1
     53 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
     54 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm0
     55 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
     56 ; SSE2-NEXT:    pand %xmm5, %xmm0
     57 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
     58 ; SSE2-NEXT:    por %xmm0, %xmm1
     59 ; SSE2-NEXT:    pand %xmm4, %xmm1
     60 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
     61 ; SSE2-NEXT:    pxor %xmm2, %xmm0
     62 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
     63 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
     64 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
     65 ; SSE2-NEXT:    pcmpeqd %xmm2, %xmm0
     66 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
     67 ; SSE2-NEXT:    pand %xmm5, %xmm2
     68 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
     69 ; SSE2-NEXT:    por %xmm2, %xmm0
     70 ; SSE2-NEXT:    pand %xmm3, %xmm0
     71 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
     72 ; SSE2-NEXT:    retq
     73 ;
     74 ; SSSE3-LABEL: trunc_packus_v4i64_v4i32:
     75 ; SSSE3:       # %bb.0:
     76 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [4294967295,4294967295]
     77 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [2147483648,0,2147483648,0]
     78 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
     79 ; SSSE3-NEXT:    pxor %xmm2, %xmm3
     80 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm5 = [2147483647,2147483647]
     81 ; SSSE3-NEXT:    movdqa %xmm5, %xmm6
     82 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm6
     83 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
     84 ; SSSE3-NEXT:    pcmpeqd %xmm5, %xmm3
     85 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[1,1,3,3]
     86 ; SSSE3-NEXT:    pand %xmm7, %xmm4
     87 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm6[1,1,3,3]
     88 ; SSSE3-NEXT:    por %xmm4, %xmm3
     89 ; SSSE3-NEXT:    pand %xmm3, %xmm0
     90 ; SSSE3-NEXT:    pandn %xmm8, %xmm3
     91 ; SSSE3-NEXT:    por %xmm0, %xmm3
     92 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
     93 ; SSSE3-NEXT:    pxor %xmm2, %xmm0
     94 ; SSSE3-NEXT:    movdqa %xmm5, %xmm4
     95 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm4
     96 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
     97 ; SSSE3-NEXT:    pcmpeqd %xmm5, %xmm0
     98 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
     99 ; SSSE3-NEXT:    pand %xmm6, %xmm0
    100 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
    101 ; SSSE3-NEXT:    por %xmm0, %xmm4
    102 ; SSSE3-NEXT:    pand %xmm4, %xmm1
    103 ; SSSE3-NEXT:    pandn %xmm8, %xmm4
    104 ; SSSE3-NEXT:    por %xmm1, %xmm4
    105 ; SSSE3-NEXT:    movdqa %xmm4, %xmm0
    106 ; SSSE3-NEXT:    pxor %xmm2, %xmm0
    107 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
    108 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm1
    109 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
    110 ; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm0
    111 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
    112 ; SSSE3-NEXT:    pand %xmm5, %xmm0
    113 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
    114 ; SSSE3-NEXT:    por %xmm0, %xmm1
    115 ; SSSE3-NEXT:    pand %xmm4, %xmm1
    116 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
    117 ; SSSE3-NEXT:    pxor %xmm2, %xmm0
    118 ; SSSE3-NEXT:    movdqa %xmm0, %xmm4
    119 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm4
    120 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
    121 ; SSSE3-NEXT:    pcmpeqd %xmm2, %xmm0
    122 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
    123 ; SSSE3-NEXT:    pand %xmm5, %xmm2
    124 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
    125 ; SSSE3-NEXT:    por %xmm2, %xmm0
    126 ; SSSE3-NEXT:    pand %xmm3, %xmm0
    127 ; SSSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
    128 ; SSSE3-NEXT:    retq
    129 ;
    130 ; SSE41-LABEL: trunc_packus_v4i64_v4i32:
    131 ; SSE41:       # %bb.0:
    132 ; SSE41-NEXT:    movdqa %xmm0, %xmm2
    133 ; SSE41-NEXT:    movapd {{.*#+}} xmm4 = [4294967295,4294967295]
    134 ; SSE41-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
    135 ; SSE41-NEXT:    pxor %xmm8, %xmm0
    136 ; SSE41-NEXT:    movdqa {{.*#+}} xmm6 = [2147483647,2147483647]
    137 ; SSE41-NEXT:    movdqa %xmm6, %xmm5
    138 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm5
    139 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
    140 ; SSE41-NEXT:    pcmpeqd %xmm6, %xmm0
    141 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,3,3]
    142 ; SSE41-NEXT:    pand %xmm7, %xmm3
    143 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3]
    144 ; SSE41-NEXT:    por %xmm3, %xmm0
    145 ; SSE41-NEXT:    movapd %xmm4, %xmm5
    146 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm5
    147 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
    148 ; SSE41-NEXT:    pxor %xmm8, %xmm0
    149 ; SSE41-NEXT:    movdqa %xmm6, %xmm2
    150 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
    151 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
    152 ; SSE41-NEXT:    pcmpeqd %xmm6, %xmm0
    153 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    154 ; SSE41-NEXT:    pand %xmm3, %xmm6
    155 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
    156 ; SSE41-NEXT:    por %xmm6, %xmm0
    157 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm4
    158 ; SSE41-NEXT:    xorpd %xmm1, %xmm1
    159 ; SSE41-NEXT:    movapd %xmm4, %xmm0
    160 ; SSE41-NEXT:    xorpd %xmm8, %xmm0
    161 ; SSE41-NEXT:    movapd %xmm0, %xmm2
    162 ; SSE41-NEXT:    pcmpgtd %xmm8, %xmm2
    163 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
    164 ; SSE41-NEXT:    pcmpeqd %xmm8, %xmm0
    165 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    166 ; SSE41-NEXT:    pand %xmm3, %xmm6
    167 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
    168 ; SSE41-NEXT:    por %xmm6, %xmm0
    169 ; SSE41-NEXT:    pxor %xmm2, %xmm2
    170 ; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm2
    171 ; SSE41-NEXT:    movapd %xmm5, %xmm0
    172 ; SSE41-NEXT:    xorpd %xmm8, %xmm0
    173 ; SSE41-NEXT:    movapd %xmm0, %xmm3
    174 ; SSE41-NEXT:    pcmpgtd %xmm8, %xmm3
    175 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
    176 ; SSE41-NEXT:    pcmpeqd %xmm8, %xmm0
    177 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    178 ; SSE41-NEXT:    pand %xmm4, %xmm6
    179 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
    180 ; SSE41-NEXT:    por %xmm6, %xmm0
    181 ; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm1
    182 ; SSE41-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2]
    183 ; SSE41-NEXT:    movaps %xmm1, %xmm0
    184 ; SSE41-NEXT:    retq
    185 ;
    186 ; AVX1-LABEL: trunc_packus_v4i64_v4i32:
    187 ; AVX1:       # %bb.0:
    188 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]
    189 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    190 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [4294967295,4294967295]
    191 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
    192 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm3, %xmm3
    193 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm3, %ymm2
    194 ; AVX1-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
    195 ; AVX1-NEXT:    vxorpd %xmm1, %xmm1, %xmm1
    196 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm0, %xmm2
    197 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    198 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm3, %xmm1
    199 ; AVX1-NEXT:    vpand %xmm3, %xmm1, %xmm1
    200 ; AVX1-NEXT:    vpand %xmm0, %xmm2, %xmm0
    201 ; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm1[0,2]
    202 ; AVX1-NEXT:    vzeroupper
    203 ; AVX1-NEXT:    retq
    204 ;
    205 ; AVX2-SLOW-LABEL: trunc_packus_v4i64_v4i32:
    206 ; AVX2-SLOW:       # %bb.0:
    207 ; AVX2-SLOW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]
    208 ; AVX2-SLOW-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
    209 ; AVX2-SLOW-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
    210 ; AVX2-SLOW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
    211 ; AVX2-SLOW-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm1
    212 ; AVX2-SLOW-NEXT:    vpand %ymm0, %ymm1, %ymm0
    213 ; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,2,3,4,6,6,7]
    214 ; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
    215 ; AVX2-SLOW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
    216 ; AVX2-SLOW-NEXT:    vzeroupper
    217 ; AVX2-SLOW-NEXT:    retq
    218 ;
    219 ; AVX2-FAST-LABEL: trunc_packus_v4i64_v4i32:
    220 ; AVX2-FAST:       # %bb.0:
    221 ; AVX2-FAST-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]
    222 ; AVX2-FAST-NEXT:    vpcmpgtq %ymm0, %ymm1, %ymm2
    223 ; AVX2-FAST-NEXT:    vblendvpd %ymm2, %ymm0, %ymm1, %ymm0
    224 ; AVX2-FAST-NEXT:    vpxor %xmm1, %xmm1, %xmm1
    225 ; AVX2-FAST-NEXT:    vpcmpgtq %ymm1, %ymm0, %ymm1
    226 ; AVX2-FAST-NEXT:    vpand %ymm0, %ymm1, %ymm0
    227 ; AVX2-FAST-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,2,4,6,4,6,6,7]
    228 ; AVX2-FAST-NEXT:    vpermd %ymm0, %ymm1, %ymm0
    229 ; AVX2-FAST-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
    230 ; AVX2-FAST-NEXT:    vzeroupper
    231 ; AVX2-FAST-NEXT:    retq
    232 ;
    233 ; AVX512F-LABEL: trunc_packus_v4i64_v4i32:
    234 ; AVX512F:       # %bb.0:
    235 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
    236 ; AVX512F-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]
    237 ; AVX512F-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
    238 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
    239 ; AVX512F-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
    240 ; AVX512F-NEXT:    vpmovqd %zmm0, %ymm0
    241 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
    242 ; AVX512F-NEXT:    vzeroupper
    243 ; AVX512F-NEXT:    retq
    244 ;
    245 ; AVX512VL-LABEL: trunc_packus_v4i64_v4i32:
    246 ; AVX512VL:       # %bb.0:
    247 ; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
    248 ; AVX512VL-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
    249 ; AVX512VL-NEXT:    vpmovusqd %ymm0, %xmm0
    250 ; AVX512VL-NEXT:    vzeroupper
    251 ; AVX512VL-NEXT:    retq
    252 ;
    253 ; AVX512BW-LABEL: trunc_packus_v4i64_v4i32:
    254 ; AVX512BW:       # %bb.0:
    255 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
    256 ; AVX512BW-NEXT:    vpbroadcastq {{.*#+}} ymm1 = [4294967295,4294967295,4294967295,4294967295]
    257 ; AVX512BW-NEXT:    vpminsq %zmm1, %zmm0, %zmm0
    258 ; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
    259 ; AVX512BW-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
    260 ; AVX512BW-NEXT:    vpmovqd %zmm0, %ymm0
    261 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
    262 ; AVX512BW-NEXT:    vzeroupper
    263 ; AVX512BW-NEXT:    retq
    264 ;
    265 ; AVX512BWVL-LABEL: trunc_packus_v4i64_v4i32:
    266 ; AVX512BWVL:       # %bb.0:
    267 ; AVX512BWVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
    268 ; AVX512BWVL-NEXT:    vpmaxsq %ymm1, %ymm0, %ymm0
    269 ; AVX512BWVL-NEXT:    vpmovusqd %ymm0, %xmm0
    270 ; AVX512BWVL-NEXT:    vzeroupper
    271 ; AVX512BWVL-NEXT:    retq
    272   %1 = icmp slt <4 x i64> %a0, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
    273   %2 = select <4 x i1> %1, <4 x i64> %a0, <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
    274   %3 = icmp sgt <4 x i64> %2, zeroinitializer
    275   %4 = select <4 x i1> %3, <4 x i64> %2, <4 x i64> zeroinitializer
    276   %5 = trunc <4 x i64> %4 to <4 x i32>
    277   ret <4 x i32> %5
    278 }
    279 
    280 
    281 define <8 x i32> @trunc_packus_v8i64_v8i32(<8 x i64> %a0) {
    282 ; SSE2-LABEL: trunc_packus_v8i64_v8i32:
    283 ; SSE2:       # %bb.0:
    284 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [4294967295,4294967295]
    285 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
    286 ; SSE2-NEXT:    movdqa %xmm0, %xmm5
    287 ; SSE2-NEXT:    pxor %xmm10, %xmm5
    288 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483647,2147483647]
    289 ; SSE2-NEXT:    movdqa %xmm9, %xmm6
    290 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
    291 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
    292 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm5
    293 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
    294 ; SSE2-NEXT:    pand %xmm7, %xmm4
    295 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
    296 ; SSE2-NEXT:    por %xmm4, %xmm5
    297 ; SSE2-NEXT:    pand %xmm5, %xmm0
    298 ; SSE2-NEXT:    pandn %xmm8, %xmm5
    299 ; SSE2-NEXT:    por %xmm0, %xmm5
    300 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
    301 ; SSE2-NEXT:    pxor %xmm10, %xmm0
    302 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
    303 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
    304 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
    305 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm0
    306 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
    307 ; SSE2-NEXT:    pand %xmm6, %xmm7
    308 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
    309 ; SSE2-NEXT:    por %xmm7, %xmm0
    310 ; SSE2-NEXT:    pand %xmm0, %xmm1
    311 ; SSE2-NEXT:    pandn %xmm8, %xmm0
    312 ; SSE2-NEXT:    por %xmm1, %xmm0
    313 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
    314 ; SSE2-NEXT:    pxor %xmm10, %xmm1
    315 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
    316 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
    317 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
    318 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm1
    319 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
    320 ; SSE2-NEXT:    pand %xmm6, %xmm1
    321 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
    322 ; SSE2-NEXT:    por %xmm1, %xmm6
    323 ; SSE2-NEXT:    pand %xmm6, %xmm2
    324 ; SSE2-NEXT:    pandn %xmm8, %xmm6
    325 ; SSE2-NEXT:    por %xmm2, %xmm6
    326 ; SSE2-NEXT:    movdqa %xmm3, %xmm1
    327 ; SSE2-NEXT:    pxor %xmm10, %xmm1
    328 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
    329 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
    330 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
    331 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm1
    332 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
    333 ; SSE2-NEXT:    pand %xmm4, %xmm1
    334 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
    335 ; SSE2-NEXT:    por %xmm1, %xmm2
    336 ; SSE2-NEXT:    pand %xmm2, %xmm3
    337 ; SSE2-NEXT:    pandn %xmm8, %xmm2
    338 ; SSE2-NEXT:    por %xmm3, %xmm2
    339 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
    340 ; SSE2-NEXT:    pxor %xmm10, %xmm1
    341 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    342 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm3
    343 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
    344 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
    345 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
    346 ; SSE2-NEXT:    pand %xmm4, %xmm1
    347 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
    348 ; SSE2-NEXT:    por %xmm1, %xmm3
    349 ; SSE2-NEXT:    pand %xmm2, %xmm3
    350 ; SSE2-NEXT:    movdqa %xmm6, %xmm1
    351 ; SSE2-NEXT:    pxor %xmm10, %xmm1
    352 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    353 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm2
    354 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
    355 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
    356 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
    357 ; SSE2-NEXT:    pand %xmm4, %xmm7
    358 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
    359 ; SSE2-NEXT:    por %xmm7, %xmm1
    360 ; SSE2-NEXT:    pand %xmm6, %xmm1
    361 ; SSE2-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
    362 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    363 ; SSE2-NEXT:    pxor %xmm10, %xmm2
    364 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
    365 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm3
    366 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
    367 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm2
    368 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
    369 ; SSE2-NEXT:    pand %xmm4, %xmm2
    370 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
    371 ; SSE2-NEXT:    por %xmm2, %xmm3
    372 ; SSE2-NEXT:    pand %xmm0, %xmm3
    373 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
    374 ; SSE2-NEXT:    pxor %xmm10, %xmm0
    375 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    376 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm2
    377 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
    378 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
    379 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    380 ; SSE2-NEXT:    pand %xmm4, %xmm6
    381 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
    382 ; SSE2-NEXT:    por %xmm6, %xmm0
    383 ; SSE2-NEXT:    pand %xmm5, %xmm0
    384 ; SSE2-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]
    385 ; SSE2-NEXT:    retq
    386 ;
    387 ; SSSE3-LABEL: trunc_packus_v8i64_v8i32:
    388 ; SSSE3:       # %bb.0:
    389 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [4294967295,4294967295]
    390 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
    391 ; SSSE3-NEXT:    movdqa %xmm0, %xmm5
    392 ; SSSE3-NEXT:    pxor %xmm10, %xmm5
    393 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm9 = [2147483647,2147483647]
    394 ; SSSE3-NEXT:    movdqa %xmm9, %xmm6
    395 ; SSSE3-NEXT:    pcmpgtd %xmm5, %xmm6
    396 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
    397 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm5
    398 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
    399 ; SSSE3-NEXT:    pand %xmm7, %xmm4
    400 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
    401 ; SSSE3-NEXT:    por %xmm4, %xmm5
    402 ; SSSE3-NEXT:    pand %xmm5, %xmm0
    403 ; SSSE3-NEXT:    pandn %xmm8, %xmm5
    404 ; SSSE3-NEXT:    por %xmm0, %xmm5
    405 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
    406 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
    407 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
    408 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm4
    409 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
    410 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm0
    411 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
    412 ; SSSE3-NEXT:    pand %xmm6, %xmm7
    413 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
    414 ; SSSE3-NEXT:    por %xmm7, %xmm0
    415 ; SSSE3-NEXT:    pand %xmm0, %xmm1
    416 ; SSSE3-NEXT:    pandn %xmm8, %xmm0
    417 ; SSSE3-NEXT:    por %xmm1, %xmm0
    418 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
    419 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
    420 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
    421 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm4
    422 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
    423 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm1
    424 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
    425 ; SSSE3-NEXT:    pand %xmm6, %xmm1
    426 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
    427 ; SSSE3-NEXT:    por %xmm1, %xmm6
    428 ; SSSE3-NEXT:    pand %xmm6, %xmm2
    429 ; SSSE3-NEXT:    pandn %xmm8, %xmm6
    430 ; SSSE3-NEXT:    por %xmm2, %xmm6
    431 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
    432 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
    433 ; SSSE3-NEXT:    movdqa %xmm9, %xmm2
    434 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm2
    435 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
    436 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm1
    437 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
    438 ; SSSE3-NEXT:    pand %xmm4, %xmm1
    439 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
    440 ; SSSE3-NEXT:    por %xmm1, %xmm2
    441 ; SSSE3-NEXT:    pand %xmm2, %xmm3
    442 ; SSSE3-NEXT:    pandn %xmm8, %xmm2
    443 ; SSSE3-NEXT:    por %xmm3, %xmm2
    444 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
    445 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
    446 ; SSSE3-NEXT:    movdqa %xmm1, %xmm3
    447 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm3
    448 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
    449 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm1
    450 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
    451 ; SSSE3-NEXT:    pand %xmm4, %xmm1
    452 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
    453 ; SSSE3-NEXT:    por %xmm1, %xmm3
    454 ; SSSE3-NEXT:    pand %xmm2, %xmm3
    455 ; SSSE3-NEXT:    movdqa %xmm6, %xmm1
    456 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
    457 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
    458 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm2
    459 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
    460 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm1
    461 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
    462 ; SSSE3-NEXT:    pand %xmm4, %xmm7
    463 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[1,1,3,3]
    464 ; SSSE3-NEXT:    por %xmm7, %xmm1
    465 ; SSSE3-NEXT:    pand %xmm6, %xmm1
    466 ; SSSE3-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
    467 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
    468 ; SSSE3-NEXT:    pxor %xmm10, %xmm2
    469 ; SSSE3-NEXT:    movdqa %xmm2, %xmm3
    470 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm3
    471 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
    472 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm2
    473 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
    474 ; SSSE3-NEXT:    pand %xmm4, %xmm2
    475 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
    476 ; SSSE3-NEXT:    por %xmm2, %xmm3
    477 ; SSSE3-NEXT:    pand %xmm0, %xmm3
    478 ; SSSE3-NEXT:    movdqa %xmm5, %xmm0
    479 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
    480 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
    481 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm2
    482 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
    483 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm0
    484 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    485 ; SSSE3-NEXT:    pand %xmm4, %xmm6
    486 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
    487 ; SSSE3-NEXT:    por %xmm6, %xmm0
    488 ; SSSE3-NEXT:    pand %xmm5, %xmm0
    489 ; SSSE3-NEXT:    shufps {{.*#+}} xmm0 = xmm0[0,2],xmm3[0,2]
    490 ; SSSE3-NEXT:    retq
    491 ;
    492 ; SSE41-LABEL: trunc_packus_v8i64_v8i32:
    493 ; SSE41:       # %bb.0:
    494 ; SSE41-NEXT:    movdqa %xmm0, %xmm4
    495 ; SSE41-NEXT:    movapd {{.*#+}} xmm7 = [4294967295,4294967295]
    496 ; SSE41-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
    497 ; SSE41-NEXT:    pxor %xmm10, %xmm0
    498 ; SSE41-NEXT:    movdqa {{.*#+}} xmm11 = [2147483647,2147483647]
    499 ; SSE41-NEXT:    movdqa %xmm11, %xmm6
    500 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm6
    501 ; SSE41-NEXT:    pshufd {{.*#+}} xmm8 = xmm6[0,0,2,2]
    502 ; SSE41-NEXT:    pcmpeqd %xmm11, %xmm0
    503 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
    504 ; SSE41-NEXT:    pand %xmm8, %xmm5
    505 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
    506 ; SSE41-NEXT:    por %xmm5, %xmm0
    507 ; SSE41-NEXT:    movapd %xmm7, %xmm8
    508 ; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm8
    509 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
    510 ; SSE41-NEXT:    pxor %xmm10, %xmm0
    511 ; SSE41-NEXT:    movdqa %xmm11, %xmm4
    512 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4
    513 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
    514 ; SSE41-NEXT:    pcmpeqd %xmm11, %xmm0
    515 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    516 ; SSE41-NEXT:    pand %xmm5, %xmm6
    517 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
    518 ; SSE41-NEXT:    por %xmm6, %xmm0
    519 ; SSE41-NEXT:    movapd %xmm7, %xmm9
    520 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm9
    521 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
    522 ; SSE41-NEXT:    pxor %xmm10, %xmm0
    523 ; SSE41-NEXT:    movdqa %xmm11, %xmm1
    524 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1
    525 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2]
    526 ; SSE41-NEXT:    pcmpeqd %xmm11, %xmm0
    527 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
    528 ; SSE41-NEXT:    pand %xmm4, %xmm5
    529 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
    530 ; SSE41-NEXT:    por %xmm5, %xmm0
    531 ; SSE41-NEXT:    movapd %xmm7, %xmm4
    532 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm4
    533 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
    534 ; SSE41-NEXT:    pxor %xmm10, %xmm0
    535 ; SSE41-NEXT:    movdqa %xmm11, %xmm1
    536 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1
    537 ; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2]
    538 ; SSE41-NEXT:    pcmpeqd %xmm11, %xmm0
    539 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
    540 ; SSE41-NEXT:    pand %xmm2, %xmm5
    541 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
    542 ; SSE41-NEXT:    por %xmm5, %xmm0
    543 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm7
    544 ; SSE41-NEXT:    pxor %xmm2, %xmm2
    545 ; SSE41-NEXT:    movapd %xmm7, %xmm0
    546 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
    547 ; SSE41-NEXT:    movapd %xmm0, %xmm1
    548 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm1
    549 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[0,0,2,2]
    550 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
    551 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
    552 ; SSE41-NEXT:    pand %xmm3, %xmm5
    553 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
    554 ; SSE41-NEXT:    por %xmm5, %xmm0
    555 ; SSE41-NEXT:    pxor %xmm3, %xmm3
    556 ; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm3
    557 ; SSE41-NEXT:    movapd %xmm4, %xmm0
    558 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
    559 ; SSE41-NEXT:    movapd %xmm0, %xmm1
    560 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm1
    561 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
    562 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
    563 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    564 ; SSE41-NEXT:    pand %xmm5, %xmm6
    565 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
    566 ; SSE41-NEXT:    por %xmm6, %xmm0
    567 ; SSE41-NEXT:    pxor %xmm1, %xmm1
    568 ; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm1
    569 ; SSE41-NEXT:    shufps {{.*#+}} xmm1 = xmm1[0,2],xmm3[0,2]
    570 ; SSE41-NEXT:    movapd %xmm9, %xmm0
    571 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
    572 ; SSE41-NEXT:    movapd %xmm0, %xmm3
    573 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm3
    574 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
    575 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
    576 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
    577 ; SSE41-NEXT:    pand %xmm4, %xmm5
    578 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
    579 ; SSE41-NEXT:    por %xmm5, %xmm0
    580 ; SSE41-NEXT:    pxor %xmm3, %xmm3
    581 ; SSE41-NEXT:    blendvpd %xmm0, %xmm9, %xmm3
    582 ; SSE41-NEXT:    movapd %xmm8, %xmm0
    583 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
    584 ; SSE41-NEXT:    movapd %xmm0, %xmm4
    585 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm4
    586 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
    587 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
    588 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    589 ; SSE41-NEXT:    pand %xmm5, %xmm6
    590 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
    591 ; SSE41-NEXT:    por %xmm6, %xmm0
    592 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm2
    593 ; SSE41-NEXT:    shufps {{.*#+}} xmm2 = xmm2[0,2],xmm3[0,2]
    594 ; SSE41-NEXT:    movaps %xmm2, %xmm0
    595 ; SSE41-NEXT:    retq
    596 ;
    597 ; AVX1-LABEL: trunc_packus_v8i64_v8i32:
    598 ; AVX1:       # %bb.0:
    599 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295]
    600 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
    601 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [4294967295,4294967295]
    602 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
    603 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm4, %xmm5
    604 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm5, %ymm3
    605 ; AVX1-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
    606 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    607 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
    608 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm4, %xmm4
    609 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm3
    610 ; AVX1-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
    611 ; AVX1-NEXT:    vxorpd %xmm2, %xmm2, %xmm2
    612 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm3
    613 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
    614 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm5
    615 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm6
    616 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm7
    617 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm7, %xmm2
    618 ; AVX1-NEXT:    vpand %xmm7, %xmm2, %xmm2
    619 ; AVX1-NEXT:    vpand %xmm1, %xmm6, %xmm1
    620 ; AVX1-NEXT:    vshufps {{.*#+}} xmm1 = xmm1[0,2],xmm2[0,2]
    621 ; AVX1-NEXT:    vpand %xmm4, %xmm5, %xmm2
    622 ; AVX1-NEXT:    vpand %xmm0, %xmm3, %xmm0
    623 ; AVX1-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,2],xmm2[0,2]
    624 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
    625 ; AVX1-NEXT:    retq
    626 ;
    627 ; AVX2-SLOW-LABEL: trunc_packus_v8i64_v8i32:
    628 ; AVX2-SLOW:       # %bb.0:
    629 ; AVX2-SLOW-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295]
    630 ; AVX2-SLOW-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm3
    631 ; AVX2-SLOW-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
    632 ; AVX2-SLOW-NEXT:    vpcmpgtq %ymm1, %ymm2, %ymm3
    633 ; AVX2-SLOW-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
    634 ; AVX2-SLOW-NEXT:    vpxor %xmm2, %xmm2, %xmm2
    635 ; AVX2-SLOW-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm3
    636 ; AVX2-SLOW-NEXT:    vpand %ymm1, %ymm3, %ymm1
    637 ; AVX2-SLOW-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm2
    638 ; AVX2-SLOW-NEXT:    vpand %ymm0, %ymm2, %ymm0
    639 ; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm0 = ymm0[0,2,2,3,4,6,6,7]
    640 ; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,2,3]
    641 ; AVX2-SLOW-NEXT:    vpshufd {{.*#+}} ymm1 = ymm1[0,2,2,3,4,6,6,7]
    642 ; AVX2-SLOW-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,2,3]
    643 ; AVX2-SLOW-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
    644 ; AVX2-SLOW-NEXT:    retq
    645 ;
    646 ; AVX2-FAST-LABEL: trunc_packus_v8i64_v8i32:
    647 ; AVX2-FAST:       # %bb.0:
    648 ; AVX2-FAST-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [4294967295,4294967295,4294967295,4294967295]
    649 ; AVX2-FAST-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm3
    650 ; AVX2-FAST-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
    651 ; AVX2-FAST-NEXT:    vpcmpgtq %ymm1, %ymm2, %ymm3
    652 ; AVX2-FAST-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
    653 ; AVX2-FAST-NEXT:    vpxor %xmm2, %xmm2, %xmm2
    654 ; AVX2-FAST-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm3
    655 ; AVX2-FAST-NEXT:    vpand %ymm1, %ymm3, %ymm1
    656 ; AVX2-FAST-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm2
    657 ; AVX2-FAST-NEXT:    vpand %ymm0, %ymm2, %ymm0
    658 ; AVX2-FAST-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,2,4,6,4,6,6,7]
    659 ; AVX2-FAST-NEXT:    vpermd %ymm0, %ymm2, %ymm0
    660 ; AVX2-FAST-NEXT:    vpermd %ymm1, %ymm2, %ymm1
    661 ; AVX2-FAST-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
    662 ; AVX2-FAST-NEXT:    retq
    663 ;
    664 ; AVX512-LABEL: trunc_packus_v8i64_v8i32:
    665 ; AVX512:       # %bb.0:
    666 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
    667 ; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
    668 ; AVX512-NEXT:    vpmovusqd %zmm0, %ymm0
    669 ; AVX512-NEXT:    retq
    670   %1 = icmp slt <8 x i64> %a0, <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
    671   %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>
    672   %3 = icmp sgt <8 x i64> %2, zeroinitializer
    673   %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer
    674   %5 = trunc <8 x i64> %4 to <8 x i32>
    675   ret <8 x i32> %5
    676 }
    677 
    678 ;
    679 ; PACKUS saturation truncation to vXi16
    680 ;
    681 
    682 define <8 x i16> @trunc_packus_v8i64_v8i16(<8 x i64> %a0) {
    683 ; SSE2-LABEL: trunc_packus_v8i64_v8i16:
    684 ; SSE2:       # %bb.0:
    685 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [65535,65535]
    686 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
    687 ; SSE2-NEXT:    movdqa %xmm1, %xmm5
    688 ; SSE2-NEXT:    pxor %xmm10, %xmm5
    689 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147549183,2147549183]
    690 ; SSE2-NEXT:    movdqa %xmm9, %xmm6
    691 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm6
    692 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
    693 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm5
    694 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
    695 ; SSE2-NEXT:    pand %xmm7, %xmm4
    696 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
    697 ; SSE2-NEXT:    por %xmm4, %xmm5
    698 ; SSE2-NEXT:    pand %xmm5, %xmm1
    699 ; SSE2-NEXT:    pandn %xmm8, %xmm5
    700 ; SSE2-NEXT:    por %xmm1, %xmm5
    701 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
    702 ; SSE2-NEXT:    pxor %xmm10, %xmm1
    703 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
    704 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
    705 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
    706 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm1
    707 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
    708 ; SSE2-NEXT:    pand %xmm6, %xmm7
    709 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
    710 ; SSE2-NEXT:    por %xmm7, %xmm1
    711 ; SSE2-NEXT:    pand %xmm1, %xmm0
    712 ; SSE2-NEXT:    pandn %xmm8, %xmm1
    713 ; SSE2-NEXT:    por %xmm0, %xmm1
    714 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
    715 ; SSE2-NEXT:    pxor %xmm10, %xmm0
    716 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
    717 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
    718 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
    719 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm0
    720 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
    721 ; SSE2-NEXT:    pand %xmm6, %xmm0
    722 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
    723 ; SSE2-NEXT:    por %xmm0, %xmm6
    724 ; SSE2-NEXT:    pand %xmm6, %xmm3
    725 ; SSE2-NEXT:    pandn %xmm8, %xmm6
    726 ; SSE2-NEXT:    por %xmm3, %xmm6
    727 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    728 ; SSE2-NEXT:    pxor %xmm10, %xmm0
    729 ; SSE2-NEXT:    movdqa %xmm9, %xmm3
    730 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
    731 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
    732 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm0
    733 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
    734 ; SSE2-NEXT:    pand %xmm4, %xmm0
    735 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
    736 ; SSE2-NEXT:    por %xmm0, %xmm3
    737 ; SSE2-NEXT:    pand %xmm3, %xmm2
    738 ; SSE2-NEXT:    pandn %xmm8, %xmm3
    739 ; SSE2-NEXT:    por %xmm2, %xmm3
    740 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
    741 ; SSE2-NEXT:    pxor %xmm10, %xmm0
    742 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    743 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm2
    744 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
    745 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
    746 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
    747 ; SSE2-NEXT:    pand %xmm4, %xmm7
    748 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
    749 ; SSE2-NEXT:    por %xmm7, %xmm0
    750 ; SSE2-NEXT:    pand %xmm3, %xmm0
    751 ; SSE2-NEXT:    movdqa %xmm6, %xmm2
    752 ; SSE2-NEXT:    pxor %xmm10, %xmm2
    753 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
    754 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm3
    755 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
    756 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm2
    757 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
    758 ; SSE2-NEXT:    pand %xmm4, %xmm7
    759 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
    760 ; SSE2-NEXT:    por %xmm7, %xmm2
    761 ; SSE2-NEXT:    pand %xmm6, %xmm2
    762 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    763 ; SSE2-NEXT:    pxor %xmm10, %xmm3
    764 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
    765 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm4
    766 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
    767 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm3
    768 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
    769 ; SSE2-NEXT:    pand %xmm6, %xmm3
    770 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
    771 ; SSE2-NEXT:    por %xmm3, %xmm4
    772 ; SSE2-NEXT:    pand %xmm1, %xmm4
    773 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
    774 ; SSE2-NEXT:    pxor %xmm10, %xmm1
    775 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    776 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm3
    777 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
    778 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
    779 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
    780 ; SSE2-NEXT:    pand %xmm6, %xmm1
    781 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
    782 ; SSE2-NEXT:    por %xmm1, %xmm3
    783 ; SSE2-NEXT:    pand %xmm5, %xmm3
    784 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]
    785 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
    786 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[0,2,2,3]
    787 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
    788 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
    789 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]
    790 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,1,0,2,4,5,6,7]
    791 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
    792 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,0,2,4,5,6,7]
    793 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
    794 ; SSE2-NEXT:    movsd {{.*#+}} xmm0 = xmm3[0],xmm0[1]
    795 ; SSE2-NEXT:    retq
    796 ;
    797 ; SSSE3-LABEL: trunc_packus_v8i64_v8i16:
    798 ; SSSE3:       # %bb.0:
    799 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [65535,65535]
    800 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
    801 ; SSSE3-NEXT:    movdqa %xmm1, %xmm5
    802 ; SSSE3-NEXT:    pxor %xmm10, %xmm5
    803 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm9 = [2147549183,2147549183]
    804 ; SSSE3-NEXT:    movdqa %xmm9, %xmm6
    805 ; SSSE3-NEXT:    pcmpgtd %xmm5, %xmm6
    806 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
    807 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm5
    808 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
    809 ; SSSE3-NEXT:    pand %xmm7, %xmm4
    810 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm6[1,1,3,3]
    811 ; SSSE3-NEXT:    por %xmm4, %xmm5
    812 ; SSSE3-NEXT:    pand %xmm5, %xmm1
    813 ; SSSE3-NEXT:    pandn %xmm8, %xmm5
    814 ; SSSE3-NEXT:    por %xmm1, %xmm5
    815 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
    816 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
    817 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
    818 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm4
    819 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
    820 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm1
    821 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
    822 ; SSSE3-NEXT:    pand %xmm6, %xmm7
    823 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
    824 ; SSSE3-NEXT:    por %xmm7, %xmm1
    825 ; SSSE3-NEXT:    pand %xmm1, %xmm0
    826 ; SSSE3-NEXT:    pandn %xmm8, %xmm1
    827 ; SSSE3-NEXT:    por %xmm0, %xmm1
    828 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
    829 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
    830 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
    831 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm4
    832 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
    833 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm0
    834 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
    835 ; SSSE3-NEXT:    pand %xmm6, %xmm0
    836 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
    837 ; SSSE3-NEXT:    por %xmm0, %xmm6
    838 ; SSSE3-NEXT:    pand %xmm6, %xmm3
    839 ; SSSE3-NEXT:    pandn %xmm8, %xmm6
    840 ; SSSE3-NEXT:    por %xmm3, %xmm6
    841 ; SSSE3-NEXT:    movdqa %xmm2, %xmm0
    842 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
    843 ; SSSE3-NEXT:    movdqa %xmm9, %xmm3
    844 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm3
    845 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
    846 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm0
    847 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
    848 ; SSSE3-NEXT:    pand %xmm4, %xmm0
    849 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
    850 ; SSSE3-NEXT:    por %xmm0, %xmm3
    851 ; SSSE3-NEXT:    pand %xmm3, %xmm2
    852 ; SSSE3-NEXT:    pandn %xmm8, %xmm3
    853 ; SSSE3-NEXT:    por %xmm2, %xmm3
    854 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
    855 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
    856 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
    857 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm2
    858 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
    859 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm0
    860 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
    861 ; SSSE3-NEXT:    pand %xmm4, %xmm7
    862 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
    863 ; SSSE3-NEXT:    por %xmm7, %xmm0
    864 ; SSSE3-NEXT:    pand %xmm3, %xmm0
    865 ; SSSE3-NEXT:    movdqa %xmm6, %xmm2
    866 ; SSSE3-NEXT:    pxor %xmm10, %xmm2
    867 ; SSSE3-NEXT:    movdqa %xmm2, %xmm3
    868 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm3
    869 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
    870 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm2
    871 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
    872 ; SSSE3-NEXT:    pand %xmm4, %xmm7
    873 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm3[1,1,3,3]
    874 ; SSSE3-NEXT:    por %xmm7, %xmm2
    875 ; SSSE3-NEXT:    pand %xmm6, %xmm2
    876 ; SSSE3-NEXT:    movdqa %xmm1, %xmm3
    877 ; SSSE3-NEXT:    pxor %xmm10, %xmm3
    878 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
    879 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm4
    880 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
    881 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm3
    882 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
    883 ; SSSE3-NEXT:    pand %xmm6, %xmm3
    884 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
    885 ; SSSE3-NEXT:    por %xmm3, %xmm4
    886 ; SSSE3-NEXT:    pand %xmm1, %xmm4
    887 ; SSSE3-NEXT:    movdqa %xmm5, %xmm1
    888 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
    889 ; SSSE3-NEXT:    movdqa %xmm1, %xmm3
    890 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm3
    891 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
    892 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm1
    893 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
    894 ; SSSE3-NEXT:    pand %xmm6, %xmm1
    895 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
    896 ; SSSE3-NEXT:    por %xmm1, %xmm3
    897 ; SSSE3-NEXT:    pand %xmm5, %xmm3
    898 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[0,2,2,3]
    899 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,2,2,3,4,5,6,7]
    900 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[0,2,2,3]
    901 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm3 = xmm3[0,2,2,3,4,5,6,7]
    902 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1]
    903 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[0,2,2,3]
    904 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm1[0,1,0,2,4,5,6,7]
    905 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,2,2,3]
    906 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,1,0,2,4,5,6,7]
    907 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
    908 ; SSSE3-NEXT:    movsd {{.*#+}} xmm0 = xmm3[0],xmm0[1]
    909 ; SSSE3-NEXT:    retq
    910 ;
    911 ; SSE41-LABEL: trunc_packus_v8i64_v8i16:
    912 ; SSE41:       # %bb.0:
    913 ; SSE41-NEXT:    movdqa %xmm0, %xmm9
    914 ; SSE41-NEXT:    movapd {{.*#+}} xmm7 = [65535,65535]
    915 ; SSE41-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
    916 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
    917 ; SSE41-NEXT:    pxor %xmm10, %xmm0
    918 ; SSE41-NEXT:    movdqa {{.*#+}} xmm11 = [2147549183,2147549183]
    919 ; SSE41-NEXT:    movdqa %xmm11, %xmm4
    920 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4
    921 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
    922 ; SSE41-NEXT:    pcmpeqd %xmm11, %xmm0
    923 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    924 ; SSE41-NEXT:    pand %xmm5, %xmm6
    925 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
    926 ; SSE41-NEXT:    por %xmm6, %xmm0
    927 ; SSE41-NEXT:    movapd %xmm7, %xmm8
    928 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm8
    929 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
    930 ; SSE41-NEXT:    pxor %xmm10, %xmm0
    931 ; SSE41-NEXT:    movdqa %xmm11, %xmm2
    932 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
    933 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
    934 ; SSE41-NEXT:    pcmpeqd %xmm11, %xmm0
    935 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
    936 ; SSE41-NEXT:    pand %xmm4, %xmm5
    937 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
    938 ; SSE41-NEXT:    por %xmm5, %xmm0
    939 ; SSE41-NEXT:    movapd %xmm7, %xmm2
    940 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm2
    941 ; SSE41-NEXT:    movdqa %xmm9, %xmm0
    942 ; SSE41-NEXT:    pxor %xmm10, %xmm0
    943 ; SSE41-NEXT:    movdqa %xmm11, %xmm3
    944 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3
    945 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
    946 ; SSE41-NEXT:    pcmpeqd %xmm11, %xmm0
    947 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
    948 ; SSE41-NEXT:    pand %xmm4, %xmm5
    949 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
    950 ; SSE41-NEXT:    por %xmm5, %xmm0
    951 ; SSE41-NEXT:    movapd %xmm7, %xmm4
    952 ; SSE41-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
    953 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
    954 ; SSE41-NEXT:    pxor %xmm10, %xmm0
    955 ; SSE41-NEXT:    movdqa %xmm11, %xmm3
    956 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3
    957 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
    958 ; SSE41-NEXT:    pcmpeqd %xmm11, %xmm0
    959 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    960 ; SSE41-NEXT:    pand %xmm5, %xmm6
    961 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
    962 ; SSE41-NEXT:    por %xmm6, %xmm0
    963 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm7
    964 ; SSE41-NEXT:    pxor %xmm3, %xmm3
    965 ; SSE41-NEXT:    movapd %xmm7, %xmm0
    966 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
    967 ; SSE41-NEXT:    movapd %xmm0, %xmm1
    968 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm1
    969 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
    970 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
    971 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    972 ; SSE41-NEXT:    pand %xmm5, %xmm6
    973 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
    974 ; SSE41-NEXT:    por %xmm6, %xmm0
    975 ; SSE41-NEXT:    pxor %xmm5, %xmm5
    976 ; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm5
    977 ; SSE41-NEXT:    movapd %xmm4, %xmm0
    978 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
    979 ; SSE41-NEXT:    movapd %xmm0, %xmm1
    980 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm1
    981 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
    982 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
    983 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
    984 ; SSE41-NEXT:    pand %xmm6, %xmm7
    985 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
    986 ; SSE41-NEXT:    por %xmm7, %xmm0
    987 ; SSE41-NEXT:    pxor %xmm1, %xmm1
    988 ; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm1
    989 ; SSE41-NEXT:    packusdw %xmm5, %xmm1
    990 ; SSE41-NEXT:    movapd %xmm2, %xmm0
    991 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
    992 ; SSE41-NEXT:    movapd %xmm0, %xmm4
    993 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm4
    994 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
    995 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
    996 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
    997 ; SSE41-NEXT:    pand %xmm5, %xmm6
    998 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
    999 ; SSE41-NEXT:    por %xmm6, %xmm0
   1000 ; SSE41-NEXT:    pxor %xmm4, %xmm4
   1001 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm4
   1002 ; SSE41-NEXT:    movapd %xmm8, %xmm0
   1003 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
   1004 ; SSE41-NEXT:    movapd %xmm0, %xmm2
   1005 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm2
   1006 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm2[0,0,2,2]
   1007 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
   1008 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   1009 ; SSE41-NEXT:    pand %xmm5, %xmm6
   1010 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
   1011 ; SSE41-NEXT:    por %xmm6, %xmm0
   1012 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm3
   1013 ; SSE41-NEXT:    packusdw %xmm4, %xmm3
   1014 ; SSE41-NEXT:    packusdw %xmm3, %xmm1
   1015 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
   1016 ; SSE41-NEXT:    retq
   1017 ;
   1018 ; AVX1-LABEL: trunc_packus_v8i64_v8i16:
   1019 ; AVX1:       # %bb.0:
   1020 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm2 = [65535,65535,65535,65535]
   1021 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   1022 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [65535,65535]
   1023 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
   1024 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm4, %xmm5
   1025 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm5, %ymm3
   1026 ; AVX1-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
   1027 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1028 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
   1029 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm4, %xmm4
   1030 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm3
   1031 ; AVX1-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
   1032 ; AVX1-NEXT:    vxorpd %xmm2, %xmm2, %xmm2
   1033 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm3
   1034 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   1035 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm5
   1036 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm6
   1037 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm7
   1038 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm7, %xmm2
   1039 ; AVX1-NEXT:    vpand %xmm7, %xmm2, %xmm2
   1040 ; AVX1-NEXT:    vpand %xmm1, %xmm6, %xmm1
   1041 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
   1042 ; AVX1-NEXT:    vpand %xmm4, %xmm5, %xmm2
   1043 ; AVX1-NEXT:    vpand %xmm0, %xmm3, %xmm0
   1044 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
   1045 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
   1046 ; AVX1-NEXT:    vzeroupper
   1047 ; AVX1-NEXT:    retq
   1048 ;
   1049 ; AVX2-LABEL: trunc_packus_v8i64_v8i16:
   1050 ; AVX2:       # %bb.0:
   1051 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [65535,65535,65535,65535]
   1052 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm3
   1053 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
   1054 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm2, %ymm3
   1055 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
   1056 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
   1057 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm3
   1058 ; AVX2-NEXT:    vpand %ymm1, %ymm3, %ymm1
   1059 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm2
   1060 ; AVX2-NEXT:    vpand %ymm0, %ymm2, %ymm0
   1061 ; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
   1062 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
   1063 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
   1064 ; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
   1065 ; AVX2-NEXT:    vzeroupper
   1066 ; AVX2-NEXT:    retq
   1067 ;
   1068 ; AVX512-LABEL: trunc_packus_v8i64_v8i16:
   1069 ; AVX512:       # %bb.0:
   1070 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   1071 ; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   1072 ; AVX512-NEXT:    vpmovusqw %zmm0, %xmm0
   1073 ; AVX512-NEXT:    vzeroupper
   1074 ; AVX512-NEXT:    retq
   1075   %1 = icmp slt <8 x i64> %a0, <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>
   1076   %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535, i64 65535>
   1077   %3 = icmp sgt <8 x i64> %2, zeroinitializer
   1078   %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer
   1079   %5 = trunc <8 x i64> %4 to <8 x i16>
   1080   ret <8 x i16> %5
   1081 }
   1082 
   1083 define <8 x i16> @trunc_packus_v8i32_v8i16(<8 x i32> %a0) {
   1084 ; SSE2-LABEL: trunc_packus_v8i32_v8i16:
   1085 ; SSE2:       # %bb.0:
   1086 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [65535,65535,65535,65535]
   1087 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   1088 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm3
   1089 ; SSE2-NEXT:    pand %xmm3, %xmm1
   1090 ; SSE2-NEXT:    pandn %xmm2, %xmm3
   1091 ; SSE2-NEXT:    por %xmm1, %xmm3
   1092 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
   1093 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm1
   1094 ; SSE2-NEXT:    pand %xmm1, %xmm0
   1095 ; SSE2-NEXT:    pandn %xmm2, %xmm1
   1096 ; SSE2-NEXT:    por %xmm0, %xmm1
   1097 ; SSE2-NEXT:    pxor %xmm2, %xmm2
   1098 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   1099 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm0
   1100 ; SSE2-NEXT:    pand %xmm1, %xmm0
   1101 ; SSE2-NEXT:    movdqa %xmm3, %xmm1
   1102 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1
   1103 ; SSE2-NEXT:    pand %xmm3, %xmm1
   1104 ; SSE2-NEXT:    pslld $16, %xmm1
   1105 ; SSE2-NEXT:    psrad $16, %xmm1
   1106 ; SSE2-NEXT:    pslld $16, %xmm0
   1107 ; SSE2-NEXT:    psrad $16, %xmm0
   1108 ; SSE2-NEXT:    packssdw %xmm1, %xmm0
   1109 ; SSE2-NEXT:    retq
   1110 ;
   1111 ; SSSE3-LABEL: trunc_packus_v8i32_v8i16:
   1112 ; SSSE3:       # %bb.0:
   1113 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [65535,65535,65535,65535]
   1114 ; SSSE3-NEXT:    movdqa %xmm2, %xmm3
   1115 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm3
   1116 ; SSSE3-NEXT:    pand %xmm3, %xmm1
   1117 ; SSSE3-NEXT:    pandn %xmm2, %xmm3
   1118 ; SSSE3-NEXT:    por %xmm1, %xmm3
   1119 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
   1120 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm1
   1121 ; SSSE3-NEXT:    pand %xmm1, %xmm0
   1122 ; SSSE3-NEXT:    pandn %xmm2, %xmm1
   1123 ; SSSE3-NEXT:    por %xmm0, %xmm1
   1124 ; SSSE3-NEXT:    pxor %xmm2, %xmm2
   1125 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
   1126 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm0
   1127 ; SSSE3-NEXT:    pand %xmm1, %xmm0
   1128 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
   1129 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm1
   1130 ; SSSE3-NEXT:    pand %xmm3, %xmm1
   1131 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
   1132 ; SSSE3-NEXT:    pshufb %xmm2, %xmm1
   1133 ; SSSE3-NEXT:    pshufb %xmm2, %xmm0
   1134 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   1135 ; SSSE3-NEXT:    retq
   1136 ;
   1137 ; SSE41-LABEL: trunc_packus_v8i32_v8i16:
   1138 ; SSE41:       # %bb.0:
   1139 ; SSE41-NEXT:    packusdw %xmm1, %xmm0
   1140 ; SSE41-NEXT:    retq
   1141 ;
   1142 ; AVX1-LABEL: trunc_packus_v8i32_v8i16:
   1143 ; AVX1:       # %bb.0:
   1144 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   1145 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
   1146 ; AVX1-NEXT:    vzeroupper
   1147 ; AVX1-NEXT:    retq
   1148 ;
   1149 ; AVX2-LABEL: trunc_packus_v8i32_v8i16:
   1150 ; AVX2:       # %bb.0:
   1151 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
   1152 ; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
   1153 ; AVX2-NEXT:    vzeroupper
   1154 ; AVX2-NEXT:    retq
   1155 ;
   1156 ; AVX512F-LABEL: trunc_packus_v8i32_v8i16:
   1157 ; AVX512F:       # %bb.0:
   1158 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [65535,65535,65535,65535,65535,65535,65535,65535]
   1159 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1160 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   1161 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1162 ; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0
   1163 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
   1164 ; AVX512F-NEXT:    vzeroupper
   1165 ; AVX512F-NEXT:    retq
   1166 ;
   1167 ; AVX512VL-LABEL: trunc_packus_v8i32_v8i16:
   1168 ; AVX512VL:       # %bb.0:
   1169 ; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   1170 ; AVX512VL-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1171 ; AVX512VL-NEXT:    vpmovusdw %ymm0, %xmm0
   1172 ; AVX512VL-NEXT:    vzeroupper
   1173 ; AVX512VL-NEXT:    retq
   1174 ;
   1175 ; AVX512BW-LABEL: trunc_packus_v8i32_v8i16:
   1176 ; AVX512BW:       # %bb.0:
   1177 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [65535,65535,65535,65535,65535,65535,65535,65535]
   1178 ; AVX512BW-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   1179 ; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   1180 ; AVX512BW-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1181 ; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
   1182 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
   1183 ; AVX512BW-NEXT:    vzeroupper
   1184 ; AVX512BW-NEXT:    retq
   1185 ;
   1186 ; AVX512BWVL-LABEL: trunc_packus_v8i32_v8i16:
   1187 ; AVX512BWVL:       # %bb.0:
   1188 ; AVX512BWVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   1189 ; AVX512BWVL-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   1190 ; AVX512BWVL-NEXT:    vpmovusdw %ymm0, %xmm0
   1191 ; AVX512BWVL-NEXT:    vzeroupper
   1192 ; AVX512BWVL-NEXT:    retq
   1193   %1 = icmp slt <8 x i32> %a0, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
   1194   %2 = select <8 x i1> %1, <8 x i32> %a0, <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
   1195   %3 = icmp sgt <8 x i32> %2, zeroinitializer
   1196   %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer
   1197   %5 = trunc <8 x i32> %4 to <8 x i16>
   1198   ret <8 x i16> %5
   1199 }
   1200 
   1201 define <16 x i16> @trunc_packus_v16i32_v16i16(<16 x i32> %a0) {
   1202 ; SSE2-LABEL: trunc_packus_v16i32_v16i16:
   1203 ; SSE2:       # %bb.0:
   1204 ; SSE2-NEXT:    movdqa {{.*#+}} xmm6 = [65535,65535,65535,65535]
   1205 ; SSE2-NEXT:    movdqa %xmm6, %xmm4
   1206 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
   1207 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1208 ; SSE2-NEXT:    pandn %xmm6, %xmm4
   1209 ; SSE2-NEXT:    por %xmm1, %xmm4
   1210 ; SSE2-NEXT:    movdqa %xmm6, %xmm5
   1211 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm5
   1212 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1213 ; SSE2-NEXT:    pandn %xmm6, %xmm5
   1214 ; SSE2-NEXT:    por %xmm0, %xmm5
   1215 ; SSE2-NEXT:    movdqa %xmm6, %xmm0
   1216 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm0
   1217 ; SSE2-NEXT:    pand %xmm0, %xmm3
   1218 ; SSE2-NEXT:    pandn %xmm6, %xmm0
   1219 ; SSE2-NEXT:    por %xmm3, %xmm0
   1220 ; SSE2-NEXT:    movdqa %xmm6, %xmm3
   1221 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
   1222 ; SSE2-NEXT:    pand %xmm3, %xmm2
   1223 ; SSE2-NEXT:    pandn %xmm6, %xmm3
   1224 ; SSE2-NEXT:    por %xmm2, %xmm3
   1225 ; SSE2-NEXT:    pxor %xmm2, %xmm2
   1226 ; SSE2-NEXT:    movdqa %xmm3, %xmm1
   1227 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm1
   1228 ; SSE2-NEXT:    pand %xmm3, %xmm1
   1229 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   1230 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm3
   1231 ; SSE2-NEXT:    pand %xmm0, %xmm3
   1232 ; SSE2-NEXT:    movdqa %xmm5, %xmm0
   1233 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm0
   1234 ; SSE2-NEXT:    pand %xmm5, %xmm0
   1235 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   1236 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm5
   1237 ; SSE2-NEXT:    pand %xmm4, %xmm5
   1238 ; SSE2-NEXT:    pslld $16, %xmm5
   1239 ; SSE2-NEXT:    psrad $16, %xmm5
   1240 ; SSE2-NEXT:    pslld $16, %xmm0
   1241 ; SSE2-NEXT:    psrad $16, %xmm0
   1242 ; SSE2-NEXT:    packssdw %xmm5, %xmm0
   1243 ; SSE2-NEXT:    pslld $16, %xmm3
   1244 ; SSE2-NEXT:    psrad $16, %xmm3
   1245 ; SSE2-NEXT:    pslld $16, %xmm1
   1246 ; SSE2-NEXT:    psrad $16, %xmm1
   1247 ; SSE2-NEXT:    packssdw %xmm3, %xmm1
   1248 ; SSE2-NEXT:    retq
   1249 ;
   1250 ; SSSE3-LABEL: trunc_packus_v16i32_v16i16:
   1251 ; SSSE3:       # %bb.0:
   1252 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm6 = [65535,65535,65535,65535]
   1253 ; SSSE3-NEXT:    movdqa %xmm6, %xmm4
   1254 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm4
   1255 ; SSSE3-NEXT:    pand %xmm4, %xmm1
   1256 ; SSSE3-NEXT:    pandn %xmm6, %xmm4
   1257 ; SSSE3-NEXT:    por %xmm1, %xmm4
   1258 ; SSSE3-NEXT:    movdqa %xmm6, %xmm5
   1259 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm5
   1260 ; SSSE3-NEXT:    pand %xmm5, %xmm0
   1261 ; SSSE3-NEXT:    pandn %xmm6, %xmm5
   1262 ; SSSE3-NEXT:    por %xmm0, %xmm5
   1263 ; SSSE3-NEXT:    movdqa %xmm6, %xmm0
   1264 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm0
   1265 ; SSSE3-NEXT:    pand %xmm0, %xmm3
   1266 ; SSSE3-NEXT:    pandn %xmm6, %xmm0
   1267 ; SSSE3-NEXT:    por %xmm3, %xmm0
   1268 ; SSSE3-NEXT:    movdqa %xmm6, %xmm3
   1269 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm3
   1270 ; SSSE3-NEXT:    pand %xmm3, %xmm2
   1271 ; SSSE3-NEXT:    pandn %xmm6, %xmm3
   1272 ; SSSE3-NEXT:    por %xmm2, %xmm3
   1273 ; SSSE3-NEXT:    pxor %xmm2, %xmm2
   1274 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
   1275 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm1
   1276 ; SSSE3-NEXT:    pand %xmm3, %xmm1
   1277 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
   1278 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm3
   1279 ; SSSE3-NEXT:    pand %xmm0, %xmm3
   1280 ; SSSE3-NEXT:    movdqa %xmm5, %xmm0
   1281 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm0
   1282 ; SSSE3-NEXT:    pand %xmm5, %xmm0
   1283 ; SSSE3-NEXT:    movdqa %xmm4, %xmm5
   1284 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm5
   1285 ; SSSE3-NEXT:    pand %xmm4, %xmm5
   1286 ; SSSE3-NEXT:    pslld $16, %xmm5
   1287 ; SSSE3-NEXT:    psrad $16, %xmm5
   1288 ; SSSE3-NEXT:    pslld $16, %xmm0
   1289 ; SSSE3-NEXT:    psrad $16, %xmm0
   1290 ; SSSE3-NEXT:    packssdw %xmm5, %xmm0
   1291 ; SSSE3-NEXT:    pslld $16, %xmm3
   1292 ; SSSE3-NEXT:    psrad $16, %xmm3
   1293 ; SSSE3-NEXT:    pslld $16, %xmm1
   1294 ; SSSE3-NEXT:    psrad $16, %xmm1
   1295 ; SSSE3-NEXT:    packssdw %xmm3, %xmm1
   1296 ; SSSE3-NEXT:    retq
   1297 ;
   1298 ; SSE41-LABEL: trunc_packus_v16i32_v16i16:
   1299 ; SSE41:       # %bb.0:
   1300 ; SSE41-NEXT:    packusdw %xmm1, %xmm0
   1301 ; SSE41-NEXT:    packusdw %xmm3, %xmm2
   1302 ; SSE41-NEXT:    movdqa %xmm2, %xmm1
   1303 ; SSE41-NEXT:    retq
   1304 ;
   1305 ; AVX1-LABEL: trunc_packus_v16i32_v16i16:
   1306 ; AVX1:       # %bb.0:
   1307 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   1308 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
   1309 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   1310 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
   1311 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1312 ; AVX1-NEXT:    retq
   1313 ;
   1314 ; AVX2-LABEL: trunc_packus_v16i32_v16i16:
   1315 ; AVX2:       # %bb.0:
   1316 ; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
   1317 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
   1318 ; AVX2-NEXT:    retq
   1319 ;
   1320 ; AVX512-LABEL: trunc_packus_v16i32_v16i16:
   1321 ; AVX512:       # %bb.0:
   1322 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   1323 ; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   1324 ; AVX512-NEXT:    vpmovusdw %zmm0, %ymm0
   1325 ; AVX512-NEXT:    retq
   1326   %1 = icmp slt <16 x i32> %a0, <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
   1327   %2 = select <16 x i1> %1, <16 x i32> %a0, <16 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>
   1328   %3 = icmp sgt <16 x i32> %2, zeroinitializer
   1329   %4 = select <16 x i1> %3, <16 x i32> %2, <16 x i32> zeroinitializer
   1330   %5 = trunc <16 x i32> %4 to <16 x i16>
   1331   ret <16 x i16> %5
   1332 }
   1333 
   1334 ;
   1335 ; PACKUS saturation truncation to v16i8
   1336 ;
   1337 
   1338 define <8 x i8> @trunc_packus_v8i64_v8i8(<8 x i64> %a0) {
   1339 ; SSE2-LABEL: trunc_packus_v8i64_v8i8:
   1340 ; SSE2:       # %bb.0:
   1341 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [255,255]
   1342 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   1343 ; SSE2-NEXT:    movdqa %xmm2, %xmm5
   1344 ; SSE2-NEXT:    pxor %xmm10, %xmm5
   1345 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483903,2147483903]
   1346 ; SSE2-NEXT:    movdqa %xmm9, %xmm7
   1347 ; SSE2-NEXT:    pcmpgtd %xmm5, %xmm7
   1348 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[0,0,2,2]
   1349 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm5
   1350 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   1351 ; SSE2-NEXT:    pand %xmm6, %xmm4
   1352 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   1353 ; SSE2-NEXT:    por %xmm4, %xmm5
   1354 ; SSE2-NEXT:    pand %xmm5, %xmm2
   1355 ; SSE2-NEXT:    pandn %xmm8, %xmm5
   1356 ; SSE2-NEXT:    por %xmm2, %xmm5
   1357 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   1358 ; SSE2-NEXT:    pxor %xmm10, %xmm2
   1359 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
   1360 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   1361 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   1362 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm2
   1363 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
   1364 ; SSE2-NEXT:    pand %xmm6, %xmm7
   1365 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   1366 ; SSE2-NEXT:    por %xmm7, %xmm2
   1367 ; SSE2-NEXT:    pand %xmm2, %xmm3
   1368 ; SSE2-NEXT:    pandn %xmm8, %xmm2
   1369 ; SSE2-NEXT:    por %xmm3, %xmm2
   1370 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   1371 ; SSE2-NEXT:    pxor %xmm10, %xmm3
   1372 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
   1373 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   1374 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   1375 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm3
   1376 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
   1377 ; SSE2-NEXT:    pand %xmm6, %xmm7
   1378 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   1379 ; SSE2-NEXT:    por %xmm7, %xmm3
   1380 ; SSE2-NEXT:    pand %xmm3, %xmm0
   1381 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   1382 ; SSE2-NEXT:    por %xmm0, %xmm3
   1383 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   1384 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   1385 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
   1386 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
   1387 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   1388 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm0
   1389 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   1390 ; SSE2-NEXT:    pand %xmm6, %xmm0
   1391 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   1392 ; SSE2-NEXT:    por %xmm0, %xmm4
   1393 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1394 ; SSE2-NEXT:    pandn %xmm8, %xmm4
   1395 ; SSE2-NEXT:    por %xmm1, %xmm4
   1396 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   1397 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   1398 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
   1399 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm1
   1400 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
   1401 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
   1402 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   1403 ; SSE2-NEXT:    pand %xmm6, %xmm0
   1404 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   1405 ; SSE2-NEXT:    por %xmm0, %xmm1
   1406 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1407 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
   1408 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   1409 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   1410 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm4
   1411 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   1412 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
   1413 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   1414 ; SSE2-NEXT:    pand %xmm6, %xmm7
   1415 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
   1416 ; SSE2-NEXT:    por %xmm7, %xmm0
   1417 ; SSE2-NEXT:    pand %xmm3, %xmm0
   1418 ; SSE2-NEXT:    packuswb %xmm1, %xmm0
   1419 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
   1420 ; SSE2-NEXT:    pxor %xmm10, %xmm1
   1421 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   1422 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm3
   1423 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
   1424 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
   1425 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   1426 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1427 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
   1428 ; SSE2-NEXT:    por %xmm1, %xmm3
   1429 ; SSE2-NEXT:    pand %xmm2, %xmm3
   1430 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   1431 ; SSE2-NEXT:    pxor %xmm10, %xmm1
   1432 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1433 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm2
   1434 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
   1435 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm1
   1436 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   1437 ; SSE2-NEXT:    pand %xmm4, %xmm1
   1438 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   1439 ; SSE2-NEXT:    por %xmm1, %xmm2
   1440 ; SSE2-NEXT:    pand %xmm5, %xmm2
   1441 ; SSE2-NEXT:    packuswb %xmm3, %xmm2
   1442 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
   1443 ; SSE2-NEXT:    retq
   1444 ;
   1445 ; SSSE3-LABEL: trunc_packus_v8i64_v8i8:
   1446 ; SSSE3:       # %bb.0:
   1447 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [255,255]
   1448 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   1449 ; SSSE3-NEXT:    movdqa %xmm2, %xmm5
   1450 ; SSSE3-NEXT:    pxor %xmm10, %xmm5
   1451 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm9 = [2147483903,2147483903]
   1452 ; SSSE3-NEXT:    movdqa %xmm9, %xmm7
   1453 ; SSSE3-NEXT:    pcmpgtd %xmm5, %xmm7
   1454 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm7[0,0,2,2]
   1455 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm5
   1456 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   1457 ; SSSE3-NEXT:    pand %xmm6, %xmm4
   1458 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm7[1,1,3,3]
   1459 ; SSSE3-NEXT:    por %xmm4, %xmm5
   1460 ; SSSE3-NEXT:    pand %xmm5, %xmm2
   1461 ; SSSE3-NEXT:    pandn %xmm8, %xmm5
   1462 ; SSSE3-NEXT:    por %xmm2, %xmm5
   1463 ; SSSE3-NEXT:    movdqa %xmm3, %xmm2
   1464 ; SSSE3-NEXT:    pxor %xmm10, %xmm2
   1465 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
   1466 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm4
   1467 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   1468 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm2
   1469 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
   1470 ; SSSE3-NEXT:    pand %xmm6, %xmm7
   1471 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   1472 ; SSSE3-NEXT:    por %xmm7, %xmm2
   1473 ; SSSE3-NEXT:    pand %xmm2, %xmm3
   1474 ; SSSE3-NEXT:    pandn %xmm8, %xmm2
   1475 ; SSSE3-NEXT:    por %xmm3, %xmm2
   1476 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
   1477 ; SSSE3-NEXT:    pxor %xmm10, %xmm3
   1478 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
   1479 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm4
   1480 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   1481 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm3
   1482 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
   1483 ; SSSE3-NEXT:    pand %xmm6, %xmm7
   1484 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   1485 ; SSSE3-NEXT:    por %xmm7, %xmm3
   1486 ; SSSE3-NEXT:    pand %xmm3, %xmm0
   1487 ; SSSE3-NEXT:    pandn %xmm8, %xmm3
   1488 ; SSSE3-NEXT:    por %xmm0, %xmm3
   1489 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
   1490 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
   1491 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
   1492 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm4
   1493 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   1494 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm0
   1495 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   1496 ; SSSE3-NEXT:    pand %xmm6, %xmm0
   1497 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   1498 ; SSSE3-NEXT:    por %xmm0, %xmm4
   1499 ; SSSE3-NEXT:    pand %xmm4, %xmm1
   1500 ; SSSE3-NEXT:    pandn %xmm8, %xmm4
   1501 ; SSSE3-NEXT:    por %xmm1, %xmm4
   1502 ; SSSE3-NEXT:    movdqa %xmm4, %xmm0
   1503 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
   1504 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
   1505 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm1
   1506 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
   1507 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm0
   1508 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   1509 ; SSSE3-NEXT:    pand %xmm6, %xmm0
   1510 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   1511 ; SSSE3-NEXT:    por %xmm0, %xmm1
   1512 ; SSSE3-NEXT:    pand %xmm4, %xmm1
   1513 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
   1514 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
   1515 ; SSSE3-NEXT:    movdqa %xmm0, %xmm4
   1516 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm4
   1517 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   1518 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm0
   1519 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   1520 ; SSSE3-NEXT:    pand %xmm6, %xmm7
   1521 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
   1522 ; SSSE3-NEXT:    por %xmm7, %xmm0
   1523 ; SSSE3-NEXT:    pand %xmm3, %xmm0
   1524 ; SSSE3-NEXT:    packuswb %xmm1, %xmm0
   1525 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
   1526 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
   1527 ; SSSE3-NEXT:    movdqa %xmm1, %xmm3
   1528 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm3
   1529 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
   1530 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm1
   1531 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   1532 ; SSSE3-NEXT:    pand %xmm4, %xmm1
   1533 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
   1534 ; SSSE3-NEXT:    por %xmm1, %xmm3
   1535 ; SSSE3-NEXT:    pand %xmm2, %xmm3
   1536 ; SSSE3-NEXT:    movdqa %xmm5, %xmm1
   1537 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
   1538 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
   1539 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm2
   1540 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
   1541 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm1
   1542 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   1543 ; SSSE3-NEXT:    pand %xmm4, %xmm1
   1544 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   1545 ; SSSE3-NEXT:    por %xmm1, %xmm2
   1546 ; SSSE3-NEXT:    pand %xmm5, %xmm2
   1547 ; SSSE3-NEXT:    packuswb %xmm3, %xmm2
   1548 ; SSSE3-NEXT:    packuswb %xmm2, %xmm0
   1549 ; SSSE3-NEXT:    retq
   1550 ;
   1551 ; SSE41-LABEL: trunc_packus_v8i64_v8i8:
   1552 ; SSE41:       # %bb.0:
   1553 ; SSE41-NEXT:    movdqa %xmm0, %xmm9
   1554 ; SSE41-NEXT:    movapd {{.*#+}} xmm7 = [255,255]
   1555 ; SSE41-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   1556 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
   1557 ; SSE41-NEXT:    pxor %xmm10, %xmm0
   1558 ; SSE41-NEXT:    movdqa {{.*#+}} xmm11 = [2147483903,2147483903]
   1559 ; SSE41-NEXT:    movdqa %xmm11, %xmm4
   1560 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4
   1561 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   1562 ; SSE41-NEXT:    pcmpeqd %xmm11, %xmm0
   1563 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   1564 ; SSE41-NEXT:    pand %xmm5, %xmm6
   1565 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
   1566 ; SSE41-NEXT:    por %xmm6, %xmm0
   1567 ; SSE41-NEXT:    movapd %xmm7, %xmm8
   1568 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm8
   1569 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
   1570 ; SSE41-NEXT:    pxor %xmm10, %xmm0
   1571 ; SSE41-NEXT:    movdqa %xmm11, %xmm2
   1572 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
   1573 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
   1574 ; SSE41-NEXT:    pcmpeqd %xmm11, %xmm0
   1575 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
   1576 ; SSE41-NEXT:    pand %xmm4, %xmm5
   1577 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
   1578 ; SSE41-NEXT:    por %xmm5, %xmm0
   1579 ; SSE41-NEXT:    movapd %xmm7, %xmm2
   1580 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm2
   1581 ; SSE41-NEXT:    movdqa %xmm9, %xmm0
   1582 ; SSE41-NEXT:    pxor %xmm10, %xmm0
   1583 ; SSE41-NEXT:    movdqa %xmm11, %xmm3
   1584 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3
   1585 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
   1586 ; SSE41-NEXT:    pcmpeqd %xmm11, %xmm0
   1587 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
   1588 ; SSE41-NEXT:    pand %xmm4, %xmm5
   1589 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
   1590 ; SSE41-NEXT:    por %xmm5, %xmm0
   1591 ; SSE41-NEXT:    movapd %xmm7, %xmm4
   1592 ; SSE41-NEXT:    blendvpd %xmm0, %xmm9, %xmm4
   1593 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
   1594 ; SSE41-NEXT:    pxor %xmm10, %xmm0
   1595 ; SSE41-NEXT:    movdqa %xmm11, %xmm3
   1596 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3
   1597 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[0,0,2,2]
   1598 ; SSE41-NEXT:    pcmpeqd %xmm11, %xmm0
   1599 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   1600 ; SSE41-NEXT:    pand %xmm5, %xmm6
   1601 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
   1602 ; SSE41-NEXT:    por %xmm6, %xmm0
   1603 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm7
   1604 ; SSE41-NEXT:    pxor %xmm3, %xmm3
   1605 ; SSE41-NEXT:    movapd %xmm7, %xmm0
   1606 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
   1607 ; SSE41-NEXT:    movapd %xmm0, %xmm1
   1608 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm1
   1609 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[0,0,2,2]
   1610 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
   1611 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   1612 ; SSE41-NEXT:    pand %xmm5, %xmm6
   1613 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
   1614 ; SSE41-NEXT:    por %xmm6, %xmm0
   1615 ; SSE41-NEXT:    pxor %xmm5, %xmm5
   1616 ; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm5
   1617 ; SSE41-NEXT:    movapd %xmm4, %xmm0
   1618 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
   1619 ; SSE41-NEXT:    movapd %xmm0, %xmm1
   1620 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm1
   1621 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
   1622 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
   1623 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   1624 ; SSE41-NEXT:    pand %xmm6, %xmm7
   1625 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
   1626 ; SSE41-NEXT:    por %xmm7, %xmm0
   1627 ; SSE41-NEXT:    pxor %xmm1, %xmm1
   1628 ; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm1
   1629 ; SSE41-NEXT:    packusdw %xmm5, %xmm1
   1630 ; SSE41-NEXT:    movapd %xmm2, %xmm0
   1631 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
   1632 ; SSE41-NEXT:    movapd %xmm0, %xmm4
   1633 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm4
   1634 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   1635 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
   1636 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   1637 ; SSE41-NEXT:    pand %xmm5, %xmm6
   1638 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
   1639 ; SSE41-NEXT:    por %xmm6, %xmm0
   1640 ; SSE41-NEXT:    pxor %xmm4, %xmm4
   1641 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm4
   1642 ; SSE41-NEXT:    movapd %xmm8, %xmm0
   1643 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
   1644 ; SSE41-NEXT:    movapd %xmm0, %xmm2
   1645 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm2
   1646 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm2[0,0,2,2]
   1647 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
   1648 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   1649 ; SSE41-NEXT:    pand %xmm5, %xmm6
   1650 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
   1651 ; SSE41-NEXT:    por %xmm6, %xmm0
   1652 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm3
   1653 ; SSE41-NEXT:    packusdw %xmm4, %xmm3
   1654 ; SSE41-NEXT:    packusdw %xmm3, %xmm1
   1655 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
   1656 ; SSE41-NEXT:    retq
   1657 ;
   1658 ; AVX1-LABEL: trunc_packus_v8i64_v8i8:
   1659 ; AVX1:       # %bb.0:
   1660 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm2 = [255,255,255,255]
   1661 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   1662 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [255,255]
   1663 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
   1664 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm4, %xmm5
   1665 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm5, %ymm3
   1666 ; AVX1-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
   1667 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1668 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
   1669 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm4, %xmm4
   1670 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm3
   1671 ; AVX1-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
   1672 ; AVX1-NEXT:    vxorpd %xmm2, %xmm2, %xmm2
   1673 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm3
   1674 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   1675 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm4, %xmm5
   1676 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm6
   1677 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm7
   1678 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm7, %xmm2
   1679 ; AVX1-NEXT:    vpand %xmm7, %xmm2, %xmm2
   1680 ; AVX1-NEXT:    vpand %xmm1, %xmm6, %xmm1
   1681 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
   1682 ; AVX1-NEXT:    vpand %xmm4, %xmm5, %xmm2
   1683 ; AVX1-NEXT:    vpand %xmm0, %xmm3, %xmm0
   1684 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
   1685 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
   1686 ; AVX1-NEXT:    vzeroupper
   1687 ; AVX1-NEXT:    retq
   1688 ;
   1689 ; AVX2-LABEL: trunc_packus_v8i64_v8i8:
   1690 ; AVX2:       # %bb.0:
   1691 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [255,255,255,255]
   1692 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm3
   1693 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
   1694 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm2, %ymm3
   1695 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
   1696 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
   1697 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm3
   1698 ; AVX2-NEXT:    vpand %ymm1, %ymm3, %ymm1
   1699 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm2
   1700 ; AVX2-NEXT:    vpand %ymm0, %ymm2, %ymm0
   1701 ; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
   1702 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
   1703 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
   1704 ; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
   1705 ; AVX2-NEXT:    vzeroupper
   1706 ; AVX2-NEXT:    retq
   1707 ;
   1708 ; AVX512-LABEL: trunc_packus_v8i64_v8i8:
   1709 ; AVX512:       # %bb.0:
   1710 ; AVX512-NEXT:    vpminsq {{.*}}(%rip){1to8}, %zmm0, %zmm0
   1711 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   1712 ; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   1713 ; AVX512-NEXT:    vpmovqw %zmm0, %xmm0
   1714 ; AVX512-NEXT:    vzeroupper
   1715 ; AVX512-NEXT:    retq
   1716   %1 = icmp slt <8 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
   1717   %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
   1718   %3 = icmp sgt <8 x i64> %2, zeroinitializer
   1719   %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer
   1720   %5 = trunc <8 x i64> %4 to <8 x i8>
   1721   ret <8 x i8> %5
   1722 }
   1723 
   1724 define void @trunc_packus_v8i64_v8i8_store(<8 x i64> %a0, <8 x i8> *%p1) {
   1725 ; SSE2-LABEL: trunc_packus_v8i64_v8i8_store:
   1726 ; SSE2:       # %bb.0:
   1727 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [255,255]
   1728 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   1729 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   1730 ; SSE2-NEXT:    pxor %xmm10, %xmm4
   1731 ; SSE2-NEXT:    movdqa {{.*#+}} xmm9 = [2147483903,2147483903]
   1732 ; SSE2-NEXT:    movdqa %xmm9, %xmm6
   1733 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   1734 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
   1735 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm4
   1736 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   1737 ; SSE2-NEXT:    pand %xmm7, %xmm4
   1738 ; SSE2-NEXT:    pshufd {{.*#+}} xmm11 = xmm6[1,1,3,3]
   1739 ; SSE2-NEXT:    por %xmm4, %xmm11
   1740 ; SSE2-NEXT:    pand %xmm11, %xmm3
   1741 ; SSE2-NEXT:    pandn %xmm8, %xmm11
   1742 ; SSE2-NEXT:    por %xmm3, %xmm11
   1743 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   1744 ; SSE2-NEXT:    pxor %xmm10, %xmm3
   1745 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
   1746 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   1747 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
   1748 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm3
   1749 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[1,1,3,3]
   1750 ; SSE2-NEXT:    pand %xmm7, %xmm5
   1751 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   1752 ; SSE2-NEXT:    por %xmm5, %xmm3
   1753 ; SSE2-NEXT:    pand %xmm3, %xmm2
   1754 ; SSE2-NEXT:    pandn %xmm8, %xmm3
   1755 ; SSE2-NEXT:    por %xmm2, %xmm3
   1756 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1757 ; SSE2-NEXT:    pxor %xmm10, %xmm2
   1758 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
   1759 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   1760 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   1761 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm2
   1762 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
   1763 ; SSE2-NEXT:    pand %xmm5, %xmm7
   1764 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   1765 ; SSE2-NEXT:    por %xmm7, %xmm2
   1766 ; SSE2-NEXT:    pand %xmm2, %xmm1
   1767 ; SSE2-NEXT:    pandn %xmm8, %xmm2
   1768 ; SSE2-NEXT:    por %xmm1, %xmm2
   1769 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
   1770 ; SSE2-NEXT:    pxor %xmm10, %xmm1
   1771 ; SSE2-NEXT:    movdqa %xmm9, %xmm4
   1772 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm4
   1773 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   1774 ; SSE2-NEXT:    pcmpeqd %xmm9, %xmm1
   1775 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
   1776 ; SSE2-NEXT:    pand %xmm5, %xmm7
   1777 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
   1778 ; SSE2-NEXT:    por %xmm7, %xmm1
   1779 ; SSE2-NEXT:    pand %xmm1, %xmm0
   1780 ; SSE2-NEXT:    pandn %xmm8, %xmm1
   1781 ; SSE2-NEXT:    por %xmm0, %xmm1
   1782 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   1783 ; SSE2-NEXT:    pxor %xmm10, %xmm0
   1784 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   1785 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm4
   1786 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   1787 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm0
   1788 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   1789 ; SSE2-NEXT:    pand %xmm5, %xmm7
   1790 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
   1791 ; SSE2-NEXT:    por %xmm7, %xmm0
   1792 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   1793 ; SSE2-NEXT:    pxor %xmm10, %xmm4
   1794 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   1795 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm5
   1796 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
   1797 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm4
   1798 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   1799 ; SSE2-NEXT:    pand %xmm7, %xmm4
   1800 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[1,1,3,3]
   1801 ; SSE2-NEXT:    por %xmm4, %xmm7
   1802 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   1803 ; SSE2-NEXT:    pxor %xmm10, %xmm4
   1804 ; SSE2-NEXT:    movdqa %xmm4, %xmm5
   1805 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm5
   1806 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm5[0,0,2,2]
   1807 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm4
   1808 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
   1809 ; SSE2-NEXT:    pand %xmm9, %xmm6
   1810 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   1811 ; SSE2-NEXT:    por %xmm6, %xmm4
   1812 ; SSE2-NEXT:    movdqa %xmm11, %xmm5
   1813 ; SSE2-NEXT:    pxor %xmm10, %xmm5
   1814 ; SSE2-NEXT:    movdqa %xmm5, %xmm6
   1815 ; SSE2-NEXT:    pcmpgtd %xmm10, %xmm6
   1816 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[0,0,2,2]
   1817 ; SSE2-NEXT:    pcmpeqd %xmm10, %xmm5
   1818 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   1819 ; SSE2-NEXT:    pand %xmm9, %xmm5
   1820 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   1821 ; SSE2-NEXT:    por %xmm5, %xmm6
   1822 ; SSE2-NEXT:    pand %xmm8, %xmm6
   1823 ; SSE2-NEXT:    pand %xmm11, %xmm6
   1824 ; SSE2-NEXT:    pand %xmm8, %xmm4
   1825 ; SSE2-NEXT:    pand %xmm3, %xmm4
   1826 ; SSE2-NEXT:    packuswb %xmm6, %xmm4
   1827 ; SSE2-NEXT:    pand %xmm8, %xmm7
   1828 ; SSE2-NEXT:    pand %xmm2, %xmm7
   1829 ; SSE2-NEXT:    pand %xmm8, %xmm0
   1830 ; SSE2-NEXT:    pand %xmm1, %xmm0
   1831 ; SSE2-NEXT:    packuswb %xmm7, %xmm0
   1832 ; SSE2-NEXT:    packuswb %xmm4, %xmm0
   1833 ; SSE2-NEXT:    packuswb %xmm0, %xmm0
   1834 ; SSE2-NEXT:    movq %xmm0, (%rdi)
   1835 ; SSE2-NEXT:    retq
   1836 ;
   1837 ; SSSE3-LABEL: trunc_packus_v8i64_v8i8_store:
   1838 ; SSSE3:       # %bb.0:
   1839 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [255,255]
   1840 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   1841 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
   1842 ; SSSE3-NEXT:    pxor %xmm10, %xmm4
   1843 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm9 = [2147483903,2147483903]
   1844 ; SSSE3-NEXT:    movdqa %xmm9, %xmm6
   1845 ; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm6
   1846 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
   1847 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm4
   1848 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   1849 ; SSSE3-NEXT:    pand %xmm7, %xmm4
   1850 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm11 = xmm6[1,1,3,3]
   1851 ; SSSE3-NEXT:    por %xmm4, %xmm11
   1852 ; SSSE3-NEXT:    pand %xmm11, %xmm3
   1853 ; SSSE3-NEXT:    pandn %xmm8, %xmm11
   1854 ; SSSE3-NEXT:    por %xmm3, %xmm11
   1855 ; SSSE3-NEXT:    movdqa %xmm2, %xmm3
   1856 ; SSSE3-NEXT:    pxor %xmm10, %xmm3
   1857 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
   1858 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm4
   1859 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
   1860 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm3
   1861 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm3[1,1,3,3]
   1862 ; SSSE3-NEXT:    pand %xmm7, %xmm5
   1863 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   1864 ; SSSE3-NEXT:    por %xmm5, %xmm3
   1865 ; SSSE3-NEXT:    pand %xmm3, %xmm2
   1866 ; SSSE3-NEXT:    pandn %xmm8, %xmm3
   1867 ; SSSE3-NEXT:    por %xmm2, %xmm3
   1868 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
   1869 ; SSSE3-NEXT:    pxor %xmm10, %xmm2
   1870 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
   1871 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm4
   1872 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   1873 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm2
   1874 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[1,1,3,3]
   1875 ; SSSE3-NEXT:    pand %xmm5, %xmm7
   1876 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   1877 ; SSSE3-NEXT:    por %xmm7, %xmm2
   1878 ; SSSE3-NEXT:    pand %xmm2, %xmm1
   1879 ; SSSE3-NEXT:    pandn %xmm8, %xmm2
   1880 ; SSSE3-NEXT:    por %xmm1, %xmm2
   1881 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
   1882 ; SSSE3-NEXT:    pxor %xmm10, %xmm1
   1883 ; SSSE3-NEXT:    movdqa %xmm9, %xmm4
   1884 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm4
   1885 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   1886 ; SSSE3-NEXT:    pcmpeqd %xmm9, %xmm1
   1887 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[1,1,3,3]
   1888 ; SSSE3-NEXT:    pand %xmm5, %xmm7
   1889 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm4[1,1,3,3]
   1890 ; SSSE3-NEXT:    por %xmm7, %xmm1
   1891 ; SSSE3-NEXT:    pand %xmm1, %xmm0
   1892 ; SSSE3-NEXT:    pandn %xmm8, %xmm1
   1893 ; SSSE3-NEXT:    por %xmm0, %xmm1
   1894 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
   1895 ; SSSE3-NEXT:    pxor %xmm10, %xmm0
   1896 ; SSSE3-NEXT:    movdqa %xmm0, %xmm4
   1897 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm4
   1898 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   1899 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm0
   1900 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   1901 ; SSSE3-NEXT:    pand %xmm5, %xmm7
   1902 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
   1903 ; SSSE3-NEXT:    por %xmm7, %xmm0
   1904 ; SSSE3-NEXT:    movdqa %xmm2, %xmm4
   1905 ; SSSE3-NEXT:    pxor %xmm10, %xmm4
   1906 ; SSSE3-NEXT:    movdqa %xmm4, %xmm5
   1907 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm5
   1908 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
   1909 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm4
   1910 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   1911 ; SSSE3-NEXT:    pand %xmm7, %xmm4
   1912 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[1,1,3,3]
   1913 ; SSSE3-NEXT:    por %xmm4, %xmm7
   1914 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
   1915 ; SSSE3-NEXT:    pxor %xmm10, %xmm4
   1916 ; SSSE3-NEXT:    movdqa %xmm4, %xmm5
   1917 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm5
   1918 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm9 = xmm5[0,0,2,2]
   1919 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm4
   1920 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[1,1,3,3]
   1921 ; SSSE3-NEXT:    pand %xmm9, %xmm6
   1922 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm5[1,1,3,3]
   1923 ; SSSE3-NEXT:    por %xmm6, %xmm4
   1924 ; SSSE3-NEXT:    movdqa %xmm11, %xmm5
   1925 ; SSSE3-NEXT:    pxor %xmm10, %xmm5
   1926 ; SSSE3-NEXT:    movdqa %xmm5, %xmm6
   1927 ; SSSE3-NEXT:    pcmpgtd %xmm10, %xmm6
   1928 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm9 = xmm6[0,0,2,2]
   1929 ; SSSE3-NEXT:    pcmpeqd %xmm10, %xmm5
   1930 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   1931 ; SSSE3-NEXT:    pand %xmm9, %xmm5
   1932 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   1933 ; SSSE3-NEXT:    por %xmm5, %xmm6
   1934 ; SSSE3-NEXT:    pand %xmm8, %xmm6
   1935 ; SSSE3-NEXT:    pand %xmm11, %xmm6
   1936 ; SSSE3-NEXT:    pand %xmm8, %xmm4
   1937 ; SSSE3-NEXT:    pand %xmm3, %xmm4
   1938 ; SSSE3-NEXT:    packuswb %xmm6, %xmm4
   1939 ; SSSE3-NEXT:    pand %xmm8, %xmm7
   1940 ; SSSE3-NEXT:    pand %xmm2, %xmm7
   1941 ; SSSE3-NEXT:    pand %xmm8, %xmm0
   1942 ; SSSE3-NEXT:    pand %xmm1, %xmm0
   1943 ; SSSE3-NEXT:    packuswb %xmm7, %xmm0
   1944 ; SSSE3-NEXT:    packuswb %xmm4, %xmm0
   1945 ; SSSE3-NEXT:    packuswb %xmm0, %xmm0
   1946 ; SSSE3-NEXT:    movq %xmm0, (%rdi)
   1947 ; SSSE3-NEXT:    retq
   1948 ;
   1949 ; SSE41-LABEL: trunc_packus_v8i64_v8i8_store:
   1950 ; SSE41:       # %bb.0:
   1951 ; SSE41-NEXT:    movdqa %xmm0, %xmm9
   1952 ; SSE41-NEXT:    movapd {{.*#+}} xmm8 = [255,255]
   1953 ; SSE41-NEXT:    movdqa {{.*#+}} xmm10 = [2147483648,0,2147483648,0]
   1954 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
   1955 ; SSE41-NEXT:    pxor %xmm10, %xmm0
   1956 ; SSE41-NEXT:    movdqa {{.*#+}} xmm5 = [2147483903,2147483903]
   1957 ; SSE41-NEXT:    movdqa %xmm5, %xmm4
   1958 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4
   1959 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
   1960 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm0
   1961 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   1962 ; SSE41-NEXT:    pand %xmm7, %xmm6
   1963 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
   1964 ; SSE41-NEXT:    por %xmm6, %xmm0
   1965 ; SSE41-NEXT:    movapd %xmm8, %xmm11
   1966 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm11
   1967 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
   1968 ; SSE41-NEXT:    pxor %xmm10, %xmm0
   1969 ; SSE41-NEXT:    movdqa %xmm5, %xmm3
   1970 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm3
   1971 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
   1972 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm0
   1973 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   1974 ; SSE41-NEXT:    pand %xmm4, %xmm6
   1975 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
   1976 ; SSE41-NEXT:    por %xmm6, %xmm0
   1977 ; SSE41-NEXT:    movapd %xmm8, %xmm3
   1978 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm3
   1979 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
   1980 ; SSE41-NEXT:    pxor %xmm10, %xmm0
   1981 ; SSE41-NEXT:    movdqa %xmm5, %xmm2
   1982 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
   1983 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
   1984 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm0
   1985 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   1986 ; SSE41-NEXT:    pand %xmm4, %xmm6
   1987 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
   1988 ; SSE41-NEXT:    por %xmm6, %xmm0
   1989 ; SSE41-NEXT:    movapd %xmm8, %xmm4
   1990 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm4
   1991 ; SSE41-NEXT:    movdqa %xmm9, %xmm0
   1992 ; SSE41-NEXT:    pxor %xmm10, %xmm0
   1993 ; SSE41-NEXT:    movdqa %xmm5, %xmm1
   1994 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm1
   1995 ; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2]
   1996 ; SSE41-NEXT:    pcmpeqd %xmm5, %xmm0
   1997 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
   1998 ; SSE41-NEXT:    pand %xmm2, %xmm5
   1999 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
   2000 ; SSE41-NEXT:    por %xmm5, %xmm0
   2001 ; SSE41-NEXT:    movapd %xmm8, %xmm5
   2002 ; SSE41-NEXT:    blendvpd %xmm0, %xmm9, %xmm5
   2003 ; SSE41-NEXT:    movapd %xmm5, %xmm0
   2004 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
   2005 ; SSE41-NEXT:    movapd %xmm0, %xmm1
   2006 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm1
   2007 ; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm1[0,0,2,2]
   2008 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
   2009 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   2010 ; SSE41-NEXT:    pand %xmm2, %xmm6
   2011 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
   2012 ; SSE41-NEXT:    por %xmm6, %xmm0
   2013 ; SSE41-NEXT:    pxor %xmm2, %xmm2
   2014 ; SSE41-NEXT:    pxor %xmm1, %xmm1
   2015 ; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm1
   2016 ; SSE41-NEXT:    movapd %xmm4, %xmm0
   2017 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
   2018 ; SSE41-NEXT:    movapd %xmm0, %xmm5
   2019 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm5
   2020 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   2021 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
   2022 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   2023 ; SSE41-NEXT:    pand %xmm6, %xmm7
   2024 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3]
   2025 ; SSE41-NEXT:    por %xmm7, %xmm0
   2026 ; SSE41-NEXT:    pxor %xmm5, %xmm5
   2027 ; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm5
   2028 ; SSE41-NEXT:    movapd %xmm3, %xmm0
   2029 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
   2030 ; SSE41-NEXT:    movapd %xmm0, %xmm4
   2031 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm4
   2032 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   2033 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
   2034 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   2035 ; SSE41-NEXT:    pand %xmm6, %xmm7
   2036 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
   2037 ; SSE41-NEXT:    por %xmm7, %xmm0
   2038 ; SSE41-NEXT:    pxor %xmm4, %xmm4
   2039 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm4
   2040 ; SSE41-NEXT:    movapd %xmm11, %xmm0
   2041 ; SSE41-NEXT:    xorpd %xmm10, %xmm0
   2042 ; SSE41-NEXT:    movapd %xmm0, %xmm3
   2043 ; SSE41-NEXT:    pcmpgtd %xmm10, %xmm3
   2044 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm3[0,0,2,2]
   2045 ; SSE41-NEXT:    pcmpeqd %xmm10, %xmm0
   2046 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   2047 ; SSE41-NEXT:    pand %xmm6, %xmm7
   2048 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
   2049 ; SSE41-NEXT:    por %xmm7, %xmm0
   2050 ; SSE41-NEXT:    blendvpd %xmm0, %xmm11, %xmm2
   2051 ; SSE41-NEXT:    andpd %xmm8, %xmm2
   2052 ; SSE41-NEXT:    andpd %xmm8, %xmm4
   2053 ; SSE41-NEXT:    packusdw %xmm2, %xmm4
   2054 ; SSE41-NEXT:    andpd %xmm8, %xmm5
   2055 ; SSE41-NEXT:    andpd %xmm8, %xmm1
   2056 ; SSE41-NEXT:    packusdw %xmm5, %xmm1
   2057 ; SSE41-NEXT:    packusdw %xmm4, %xmm1
   2058 ; SSE41-NEXT:    packuswb %xmm1, %xmm1
   2059 ; SSE41-NEXT:    movq %xmm1, (%rdi)
   2060 ; SSE41-NEXT:    retq
   2061 ;
   2062 ; AVX1-LABEL: trunc_packus_v8i64_v8i8_store:
   2063 ; AVX1:       # %bb.0:
   2064 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm2 = [255,255,255,255]
   2065 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   2066 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm4 = [255,255]
   2067 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
   2068 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm4, %xmm5
   2069 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm5, %ymm3
   2070 ; AVX1-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
   2071 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   2072 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm4, %xmm3
   2073 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm4, %xmm5
   2074 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm5, %ymm3
   2075 ; AVX1-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
   2076 ; AVX1-NEXT:    vxorpd %xmm2, %xmm2, %xmm2
   2077 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm0, %xmm8
   2078 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   2079 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm5, %xmm6
   2080 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm1, %xmm7
   2081 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
   2082 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm3, %xmm2
   2083 ; AVX1-NEXT:    vpand %xmm4, %xmm3, %xmm3
   2084 ; AVX1-NEXT:    vpand %xmm3, %xmm2, %xmm2
   2085 ; AVX1-NEXT:    vpand %xmm4, %xmm1, %xmm1
   2086 ; AVX1-NEXT:    vpand %xmm1, %xmm7, %xmm1
   2087 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
   2088 ; AVX1-NEXT:    vpand %xmm4, %xmm5, %xmm2
   2089 ; AVX1-NEXT:    vpand %xmm2, %xmm6, %xmm2
   2090 ; AVX1-NEXT:    vpand %xmm4, %xmm0, %xmm0
   2091 ; AVX1-NEXT:    vpand %xmm0, %xmm8, %xmm0
   2092 ; AVX1-NEXT:    vpackusdw %xmm2, %xmm0, %xmm0
   2093 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
   2094 ; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
   2095 ; AVX1-NEXT:    vmovq %xmm0, (%rdi)
   2096 ; AVX1-NEXT:    vzeroupper
   2097 ; AVX1-NEXT:    retq
   2098 ;
   2099 ; AVX2-LABEL: trunc_packus_v8i64_v8i8_store:
   2100 ; AVX2:       # %bb.0:
   2101 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [255,255,255,255]
   2102 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm2, %ymm3
   2103 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm1, %ymm2, %ymm1
   2104 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm2, %ymm3
   2105 ; AVX2-NEXT:    vblendvpd %ymm3, %ymm0, %ymm2, %ymm0
   2106 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
   2107 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm0, %ymm3
   2108 ; AVX2-NEXT:    vpand %ymm0, %ymm3, %ymm0
   2109 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm1, %ymm2
   2110 ; AVX2-NEXT:    vpand %ymm1, %ymm2, %ymm1
   2111 ; AVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
   2112 ; AVX2-NEXT:    vpackusdw %xmm2, %xmm1, %xmm1
   2113 ; AVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,1,4,5,8,9,12,13,8,9,12,13,12,13,14,15]
   2114 ; AVX2-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
   2115 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm3
   2116 ; AVX2-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0
   2117 ; AVX2-NEXT:    vpshufb %xmm2, %xmm0, %xmm0
   2118 ; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   2119 ; AVX2-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,2,4,6,8,10,12,14,u,u,u,u,u,u,u,u]
   2120 ; AVX2-NEXT:    vmovq %xmm0, (%rdi)
   2121 ; AVX2-NEXT:    vzeroupper
   2122 ; AVX2-NEXT:    retq
   2123 ;
   2124 ; AVX512-LABEL: trunc_packus_v8i64_v8i8_store:
   2125 ; AVX512:       # %bb.0:
   2126 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   2127 ; AVX512-NEXT:    vpmaxsq %zmm1, %zmm0, %zmm0
   2128 ; AVX512-NEXT:    vpmovusqb %zmm0, (%rdi)
   2129 ; AVX512-NEXT:    vzeroupper
   2130 ; AVX512-NEXT:    retq
   2131   %1 = icmp slt <8 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
   2132   %2 = select <8 x i1> %1, <8 x i64> %a0, <8 x i64> <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
   2133   %3 = icmp sgt <8 x i64> %2, zeroinitializer
   2134   %4 = select <8 x i1> %3, <8 x i64> %2, <8 x i64> zeroinitializer
   2135   %5 = trunc <8 x i64> %4 to <8 x i8>
   2136   store <8 x i8> %5, <8 x i8> *%p1
   2137   ret void
   2138 }
   2139 
   2140 define <16 x i8> @trunc_packus_v16i64_v16i8(<16 x i64> %a0) {
   2141 ; SSE2-LABEL: trunc_packus_v16i64_v16i8:
   2142 ; SSE2:       # %bb.0:
   2143 ; SSE2-NEXT:    movdqa {{.*#+}} xmm10 = [255,255]
   2144 ; SSE2-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
   2145 ; SSE2-NEXT:    movdqa %xmm6, %xmm9
   2146 ; SSE2-NEXT:    pxor %xmm8, %xmm9
   2147 ; SSE2-NEXT:    movdqa {{.*#+}} xmm11 = [2147483903,2147483903]
   2148 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   2149 ; SSE2-NEXT:    pcmpgtd %xmm9, %xmm12
   2150 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   2151 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm9
   2152 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm9[1,1,3,3]
   2153 ; SSE2-NEXT:    pand %xmm13, %xmm14
   2154 ; SSE2-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
   2155 ; SSE2-NEXT:    por %xmm14, %xmm9
   2156 ; SSE2-NEXT:    pand %xmm9, %xmm6
   2157 ; SSE2-NEXT:    pandn %xmm10, %xmm9
   2158 ; SSE2-NEXT:    por %xmm6, %xmm9
   2159 ; SSE2-NEXT:    movdqa %xmm7, %xmm6
   2160 ; SSE2-NEXT:    pxor %xmm8, %xmm6
   2161 ; SSE2-NEXT:    movdqa %xmm11, %xmm12
   2162 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm12
   2163 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   2164 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm6
   2165 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   2166 ; SSE2-NEXT:    pand %xmm13, %xmm6
   2167 ; SSE2-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
   2168 ; SSE2-NEXT:    por %xmm6, %xmm12
   2169 ; SSE2-NEXT:    pand %xmm12, %xmm7
   2170 ; SSE2-NEXT:    pandn %xmm10, %xmm12
   2171 ; SSE2-NEXT:    por %xmm7, %xmm12
   2172 ; SSE2-NEXT:    movdqa %xmm4, %xmm6
   2173 ; SSE2-NEXT:    pxor %xmm8, %xmm6
   2174 ; SSE2-NEXT:    movdqa %xmm11, %xmm7
   2175 ; SSE2-NEXT:    pcmpgtd %xmm6, %xmm7
   2176 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm7[0,0,2,2]
   2177 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm6
   2178 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   2179 ; SSE2-NEXT:    pand %xmm13, %xmm6
   2180 ; SSE2-NEXT:    pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3]
   2181 ; SSE2-NEXT:    por %xmm6, %xmm13
   2182 ; SSE2-NEXT:    pand %xmm13, %xmm4
   2183 ; SSE2-NEXT:    pandn %xmm10, %xmm13
   2184 ; SSE2-NEXT:    por %xmm4, %xmm13
   2185 ; SSE2-NEXT:    movdqa %xmm5, %xmm4
   2186 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   2187 ; SSE2-NEXT:    movdqa %xmm11, %xmm6
   2188 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm6
   2189 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
   2190 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm4
   2191 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   2192 ; SSE2-NEXT:    pand %xmm7, %xmm4
   2193 ; SSE2-NEXT:    pshufd {{.*#+}} xmm14 = xmm6[1,1,3,3]
   2194 ; SSE2-NEXT:    por %xmm4, %xmm14
   2195 ; SSE2-NEXT:    pand %xmm14, %xmm5
   2196 ; SSE2-NEXT:    pandn %xmm10, %xmm14
   2197 ; SSE2-NEXT:    por %xmm5, %xmm14
   2198 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   2199 ; SSE2-NEXT:    pxor %xmm8, %xmm4
   2200 ; SSE2-NEXT:    movdqa %xmm11, %xmm5
   2201 ; SSE2-NEXT:    pcmpgtd %xmm4, %xmm5
   2202 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
   2203 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm4
   2204 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   2205 ; SSE2-NEXT:    pand %xmm7, %xmm4
   2206 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   2207 ; SSE2-NEXT:    por %xmm4, %xmm5
   2208 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2209 ; SSE2-NEXT:    pandn %xmm10, %xmm5
   2210 ; SSE2-NEXT:    por %xmm2, %xmm5
   2211 ; SSE2-NEXT:    movdqa %xmm3, %xmm2
   2212 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   2213 ; SSE2-NEXT:    movdqa %xmm11, %xmm4
   2214 ; SSE2-NEXT:    pcmpgtd %xmm2, %xmm4
   2215 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
   2216 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm2
   2217 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3]
   2218 ; SSE2-NEXT:    pand %xmm7, %xmm6
   2219 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   2220 ; SSE2-NEXT:    por %xmm6, %xmm2
   2221 ; SSE2-NEXT:    pand %xmm2, %xmm3
   2222 ; SSE2-NEXT:    pandn %xmm10, %xmm2
   2223 ; SSE2-NEXT:    por %xmm3, %xmm2
   2224 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   2225 ; SSE2-NEXT:    pxor %xmm8, %xmm3
   2226 ; SSE2-NEXT:    movdqa %xmm11, %xmm4
   2227 ; SSE2-NEXT:    pcmpgtd %xmm3, %xmm4
   2228 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   2229 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm3
   2230 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
   2231 ; SSE2-NEXT:    pand %xmm6, %xmm7
   2232 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   2233 ; SSE2-NEXT:    por %xmm7, %xmm3
   2234 ; SSE2-NEXT:    pand %xmm3, %xmm0
   2235 ; SSE2-NEXT:    pandn %xmm10, %xmm3
   2236 ; SSE2-NEXT:    por %xmm0, %xmm3
   2237 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   2238 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   2239 ; SSE2-NEXT:    movdqa %xmm11, %xmm4
   2240 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm4
   2241 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   2242 ; SSE2-NEXT:    pcmpeqd %xmm11, %xmm0
   2243 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   2244 ; SSE2-NEXT:    pand %xmm6, %xmm0
   2245 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   2246 ; SSE2-NEXT:    por %xmm0, %xmm4
   2247 ; SSE2-NEXT:    pand %xmm4, %xmm1
   2248 ; SSE2-NEXT:    pandn %xmm10, %xmm4
   2249 ; SSE2-NEXT:    por %xmm1, %xmm4
   2250 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
   2251 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   2252 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
   2253 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm1
   2254 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
   2255 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   2256 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   2257 ; SSE2-NEXT:    pand %xmm6, %xmm0
   2258 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   2259 ; SSE2-NEXT:    por %xmm0, %xmm1
   2260 ; SSE2-NEXT:    pand %xmm4, %xmm1
   2261 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
   2262 ; SSE2-NEXT:    pxor %xmm8, %xmm0
   2263 ; SSE2-NEXT:    movdqa %xmm0, %xmm4
   2264 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm4
   2265 ; SSE2-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   2266 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm0
   2267 ; SSE2-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   2268 ; SSE2-NEXT:    pand %xmm6, %xmm7
   2269 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
   2270 ; SSE2-NEXT:    por %xmm7, %xmm0
   2271 ; SSE2-NEXT:    pand %xmm3, %xmm0
   2272 ; SSE2-NEXT:    packuswb %xmm1, %xmm0
   2273 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
   2274 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   2275 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   2276 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm3
   2277 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
   2278 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm1
   2279 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   2280 ; SSE2-NEXT:    pand %xmm4, %xmm1
   2281 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
   2282 ; SSE2-NEXT:    por %xmm1, %xmm3
   2283 ; SSE2-NEXT:    pand %xmm2, %xmm3
   2284 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
   2285 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   2286 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   2287 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm2
   2288 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
   2289 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm1
   2290 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   2291 ; SSE2-NEXT:    pand %xmm4, %xmm1
   2292 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   2293 ; SSE2-NEXT:    por %xmm1, %xmm2
   2294 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2295 ; SSE2-NEXT:    packuswb %xmm3, %xmm2
   2296 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
   2297 ; SSE2-NEXT:    movdqa %xmm14, %xmm1
   2298 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   2299 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   2300 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm2
   2301 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
   2302 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm1
   2303 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   2304 ; SSE2-NEXT:    pand %xmm3, %xmm1
   2305 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   2306 ; SSE2-NEXT:    por %xmm1, %xmm2
   2307 ; SSE2-NEXT:    pand %xmm14, %xmm2
   2308 ; SSE2-NEXT:    movdqa %xmm13, %xmm1
   2309 ; SSE2-NEXT:    pxor %xmm8, %xmm1
   2310 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   2311 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm3
   2312 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
   2313 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm1
   2314 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3]
   2315 ; SSE2-NEXT:    pand %xmm4, %xmm5
   2316 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
   2317 ; SSE2-NEXT:    por %xmm5, %xmm1
   2318 ; SSE2-NEXT:    pand %xmm13, %xmm1
   2319 ; SSE2-NEXT:    packuswb %xmm2, %xmm1
   2320 ; SSE2-NEXT:    movdqa %xmm12, %xmm2
   2321 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   2322 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   2323 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm3
   2324 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
   2325 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm2
   2326 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   2327 ; SSE2-NEXT:    pand %xmm4, %xmm2
   2328 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
   2329 ; SSE2-NEXT:    por %xmm2, %xmm3
   2330 ; SSE2-NEXT:    pand %xmm12, %xmm3
   2331 ; SSE2-NEXT:    movdqa %xmm9, %xmm2
   2332 ; SSE2-NEXT:    pxor %xmm8, %xmm2
   2333 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
   2334 ; SSE2-NEXT:    pcmpgtd %xmm8, %xmm4
   2335 ; SSE2-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   2336 ; SSE2-NEXT:    pcmpeqd %xmm8, %xmm2
   2337 ; SSE2-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   2338 ; SSE2-NEXT:    pand %xmm5, %xmm2
   2339 ; SSE2-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   2340 ; SSE2-NEXT:    por %xmm2, %xmm4
   2341 ; SSE2-NEXT:    pand %xmm9, %xmm4
   2342 ; SSE2-NEXT:    packuswb %xmm3, %xmm4
   2343 ; SSE2-NEXT:    packuswb %xmm4, %xmm1
   2344 ; SSE2-NEXT:    packuswb %xmm1, %xmm0
   2345 ; SSE2-NEXT:    retq
   2346 ;
   2347 ; SSSE3-LABEL: trunc_packus_v16i64_v16i8:
   2348 ; SSSE3:       # %bb.0:
   2349 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm10 = [255,255]
   2350 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm8 = [2147483648,0,2147483648,0]
   2351 ; SSSE3-NEXT:    movdqa %xmm6, %xmm9
   2352 ; SSSE3-NEXT:    pxor %xmm8, %xmm9
   2353 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm11 = [2147483903,2147483903]
   2354 ; SSSE3-NEXT:    movdqa %xmm11, %xmm12
   2355 ; SSSE3-NEXT:    pcmpgtd %xmm9, %xmm12
   2356 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   2357 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm9
   2358 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm14 = xmm9[1,1,3,3]
   2359 ; SSSE3-NEXT:    pand %xmm13, %xmm14
   2360 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm9 = xmm12[1,1,3,3]
   2361 ; SSSE3-NEXT:    por %xmm14, %xmm9
   2362 ; SSSE3-NEXT:    pand %xmm9, %xmm6
   2363 ; SSSE3-NEXT:    pandn %xmm10, %xmm9
   2364 ; SSSE3-NEXT:    por %xmm6, %xmm9
   2365 ; SSSE3-NEXT:    movdqa %xmm7, %xmm6
   2366 ; SSSE3-NEXT:    pxor %xmm8, %xmm6
   2367 ; SSSE3-NEXT:    movdqa %xmm11, %xmm12
   2368 ; SSSE3-NEXT:    pcmpgtd %xmm6, %xmm12
   2369 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm13 = xmm12[0,0,2,2]
   2370 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm6
   2371 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   2372 ; SSSE3-NEXT:    pand %xmm13, %xmm6
   2373 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm12 = xmm12[1,1,3,3]
   2374 ; SSSE3-NEXT:    por %xmm6, %xmm12
   2375 ; SSSE3-NEXT:    pand %xmm12, %xmm7
   2376 ; SSSE3-NEXT:    pandn %xmm10, %xmm12
   2377 ; SSSE3-NEXT:    por %xmm7, %xmm12
   2378 ; SSSE3-NEXT:    movdqa %xmm4, %xmm6
   2379 ; SSSE3-NEXT:    pxor %xmm8, %xmm6
   2380 ; SSSE3-NEXT:    movdqa %xmm11, %xmm7
   2381 ; SSSE3-NEXT:    pcmpgtd %xmm6, %xmm7
   2382 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm13 = xmm7[0,0,2,2]
   2383 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm6
   2384 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm6[1,1,3,3]
   2385 ; SSSE3-NEXT:    pand %xmm13, %xmm6
   2386 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm13 = xmm7[1,1,3,3]
   2387 ; SSSE3-NEXT:    por %xmm6, %xmm13
   2388 ; SSSE3-NEXT:    pand %xmm13, %xmm4
   2389 ; SSSE3-NEXT:    pandn %xmm10, %xmm13
   2390 ; SSSE3-NEXT:    por %xmm4, %xmm13
   2391 ; SSSE3-NEXT:    movdqa %xmm5, %xmm4
   2392 ; SSSE3-NEXT:    pxor %xmm8, %xmm4
   2393 ; SSSE3-NEXT:    movdqa %xmm11, %xmm6
   2394 ; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm6
   2395 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm6[0,0,2,2]
   2396 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm4
   2397 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   2398 ; SSSE3-NEXT:    pand %xmm7, %xmm4
   2399 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm14 = xmm6[1,1,3,3]
   2400 ; SSSE3-NEXT:    por %xmm4, %xmm14
   2401 ; SSSE3-NEXT:    pand %xmm14, %xmm5
   2402 ; SSSE3-NEXT:    pandn %xmm10, %xmm14
   2403 ; SSSE3-NEXT:    por %xmm5, %xmm14
   2404 ; SSSE3-NEXT:    movdqa %xmm2, %xmm4
   2405 ; SSSE3-NEXT:    pxor %xmm8, %xmm4
   2406 ; SSSE3-NEXT:    movdqa %xmm11, %xmm5
   2407 ; SSSE3-NEXT:    pcmpgtd %xmm4, %xmm5
   2408 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm5[0,0,2,2]
   2409 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm4
   2410 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   2411 ; SSSE3-NEXT:    pand %xmm7, %xmm4
   2412 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm5[1,1,3,3]
   2413 ; SSSE3-NEXT:    por %xmm4, %xmm5
   2414 ; SSSE3-NEXT:    pand %xmm5, %xmm2
   2415 ; SSSE3-NEXT:    pandn %xmm10, %xmm5
   2416 ; SSSE3-NEXT:    por %xmm2, %xmm5
   2417 ; SSSE3-NEXT:    movdqa %xmm3, %xmm2
   2418 ; SSSE3-NEXT:    pxor %xmm8, %xmm2
   2419 ; SSSE3-NEXT:    movdqa %xmm11, %xmm4
   2420 ; SSSE3-NEXT:    pcmpgtd %xmm2, %xmm4
   2421 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm4[0,0,2,2]
   2422 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm2
   2423 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm2[1,1,3,3]
   2424 ; SSSE3-NEXT:    pand %xmm7, %xmm6
   2425 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm4[1,1,3,3]
   2426 ; SSSE3-NEXT:    por %xmm6, %xmm2
   2427 ; SSSE3-NEXT:    pand %xmm2, %xmm3
   2428 ; SSSE3-NEXT:    pandn %xmm10, %xmm2
   2429 ; SSSE3-NEXT:    por %xmm3, %xmm2
   2430 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
   2431 ; SSSE3-NEXT:    pxor %xmm8, %xmm3
   2432 ; SSSE3-NEXT:    movdqa %xmm11, %xmm4
   2433 ; SSSE3-NEXT:    pcmpgtd %xmm3, %xmm4
   2434 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   2435 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm3
   2436 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm3[1,1,3,3]
   2437 ; SSSE3-NEXT:    pand %xmm6, %xmm7
   2438 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm4[1,1,3,3]
   2439 ; SSSE3-NEXT:    por %xmm7, %xmm3
   2440 ; SSSE3-NEXT:    pand %xmm3, %xmm0
   2441 ; SSSE3-NEXT:    pandn %xmm10, %xmm3
   2442 ; SSSE3-NEXT:    por %xmm0, %xmm3
   2443 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
   2444 ; SSSE3-NEXT:    pxor %xmm8, %xmm0
   2445 ; SSSE3-NEXT:    movdqa %xmm11, %xmm4
   2446 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm4
   2447 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   2448 ; SSSE3-NEXT:    pcmpeqd %xmm11, %xmm0
   2449 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   2450 ; SSSE3-NEXT:    pand %xmm6, %xmm0
   2451 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   2452 ; SSSE3-NEXT:    por %xmm0, %xmm4
   2453 ; SSSE3-NEXT:    pand %xmm4, %xmm1
   2454 ; SSSE3-NEXT:    pandn %xmm10, %xmm4
   2455 ; SSSE3-NEXT:    por %xmm1, %xmm4
   2456 ; SSSE3-NEXT:    movdqa %xmm4, %xmm0
   2457 ; SSSE3-NEXT:    pxor %xmm8, %xmm0
   2458 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
   2459 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm1
   2460 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm1[0,0,2,2]
   2461 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm0
   2462 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   2463 ; SSSE3-NEXT:    pand %xmm6, %xmm0
   2464 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   2465 ; SSSE3-NEXT:    por %xmm0, %xmm1
   2466 ; SSSE3-NEXT:    pand %xmm4, %xmm1
   2467 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
   2468 ; SSSE3-NEXT:    pxor %xmm8, %xmm0
   2469 ; SSSE3-NEXT:    movdqa %xmm0, %xmm4
   2470 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm4
   2471 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   2472 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm0
   2473 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   2474 ; SSSE3-NEXT:    pand %xmm6, %xmm7
   2475 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
   2476 ; SSSE3-NEXT:    por %xmm7, %xmm0
   2477 ; SSSE3-NEXT:    pand %xmm3, %xmm0
   2478 ; SSSE3-NEXT:    packuswb %xmm1, %xmm0
   2479 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
   2480 ; SSSE3-NEXT:    pxor %xmm8, %xmm1
   2481 ; SSSE3-NEXT:    movdqa %xmm1, %xmm3
   2482 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm3
   2483 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
   2484 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm1
   2485 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   2486 ; SSSE3-NEXT:    pand %xmm4, %xmm1
   2487 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
   2488 ; SSSE3-NEXT:    por %xmm1, %xmm3
   2489 ; SSSE3-NEXT:    pand %xmm2, %xmm3
   2490 ; SSSE3-NEXT:    movdqa %xmm5, %xmm1
   2491 ; SSSE3-NEXT:    pxor %xmm8, %xmm1
   2492 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
   2493 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm2
   2494 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
   2495 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm1
   2496 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   2497 ; SSSE3-NEXT:    pand %xmm4, %xmm1
   2498 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   2499 ; SSSE3-NEXT:    por %xmm1, %xmm2
   2500 ; SSSE3-NEXT:    pand %xmm5, %xmm2
   2501 ; SSSE3-NEXT:    packuswb %xmm3, %xmm2
   2502 ; SSSE3-NEXT:    packuswb %xmm2, %xmm0
   2503 ; SSSE3-NEXT:    movdqa %xmm14, %xmm1
   2504 ; SSSE3-NEXT:    pxor %xmm8, %xmm1
   2505 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
   2506 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm2
   2507 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
   2508 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm1
   2509 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   2510 ; SSSE3-NEXT:    pand %xmm3, %xmm1
   2511 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   2512 ; SSSE3-NEXT:    por %xmm1, %xmm2
   2513 ; SSSE3-NEXT:    pand %xmm14, %xmm2
   2514 ; SSSE3-NEXT:    movdqa %xmm13, %xmm1
   2515 ; SSSE3-NEXT:    pxor %xmm8, %xmm1
   2516 ; SSSE3-NEXT:    movdqa %xmm1, %xmm3
   2517 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm3
   2518 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
   2519 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm1
   2520 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm1[1,1,3,3]
   2521 ; SSSE3-NEXT:    pand %xmm4, %xmm5
   2522 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm3[1,1,3,3]
   2523 ; SSSE3-NEXT:    por %xmm5, %xmm1
   2524 ; SSSE3-NEXT:    pand %xmm13, %xmm1
   2525 ; SSSE3-NEXT:    packuswb %xmm2, %xmm1
   2526 ; SSSE3-NEXT:    movdqa %xmm12, %xmm2
   2527 ; SSSE3-NEXT:    pxor %xmm8, %xmm2
   2528 ; SSSE3-NEXT:    movdqa %xmm2, %xmm3
   2529 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm3
   2530 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
   2531 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm2
   2532 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   2533 ; SSSE3-NEXT:    pand %xmm4, %xmm2
   2534 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm3[1,1,3,3]
   2535 ; SSSE3-NEXT:    por %xmm2, %xmm3
   2536 ; SSSE3-NEXT:    pand %xmm12, %xmm3
   2537 ; SSSE3-NEXT:    movdqa %xmm9, %xmm2
   2538 ; SSSE3-NEXT:    pxor %xmm8, %xmm2
   2539 ; SSSE3-NEXT:    movdqa %xmm2, %xmm4
   2540 ; SSSE3-NEXT:    pcmpgtd %xmm8, %xmm4
   2541 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   2542 ; SSSE3-NEXT:    pcmpeqd %xmm8, %xmm2
   2543 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm2 = xmm2[1,1,3,3]
   2544 ; SSSE3-NEXT:    pand %xmm5, %xmm2
   2545 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm4 = xmm4[1,1,3,3]
   2546 ; SSSE3-NEXT:    por %xmm2, %xmm4
   2547 ; SSSE3-NEXT:    pand %xmm9, %xmm4
   2548 ; SSSE3-NEXT:    packuswb %xmm3, %xmm4
   2549 ; SSSE3-NEXT:    packuswb %xmm4, %xmm1
   2550 ; SSSE3-NEXT:    packuswb %xmm1, %xmm0
   2551 ; SSSE3-NEXT:    retq
   2552 ;
   2553 ; SSE41-LABEL: trunc_packus_v16i64_v16i8:
   2554 ; SSE41:       # %bb.0:
   2555 ; SSE41-NEXT:    movdqa %xmm0, %xmm8
   2556 ; SSE41-NEXT:    movapd {{.*#+}} xmm11 = [255,255]
   2557 ; SSE41-NEXT:    movdqa {{.*#+}} xmm9 = [2147483648,0,2147483648,0]
   2558 ; SSE41-NEXT:    movdqa %xmm6, %xmm0
   2559 ; SSE41-NEXT:    pxor %xmm9, %xmm0
   2560 ; SSE41-NEXT:    movdqa {{.*#+}} xmm12 = [2147483903,2147483903]
   2561 ; SSE41-NEXT:    movdqa %xmm12, %xmm10
   2562 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm10
   2563 ; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm10[0,0,2,2]
   2564 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
   2565 ; SSE41-NEXT:    pshufd {{.*#+}} xmm14 = xmm0[1,1,3,3]
   2566 ; SSE41-NEXT:    pand %xmm13, %xmm14
   2567 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm10[1,1,3,3]
   2568 ; SSE41-NEXT:    por %xmm14, %xmm0
   2569 ; SSE41-NEXT:    movapd %xmm11, %xmm10
   2570 ; SSE41-NEXT:    blendvpd %xmm0, %xmm6, %xmm10
   2571 ; SSE41-NEXT:    movdqa %xmm7, %xmm0
   2572 ; SSE41-NEXT:    pxor %xmm9, %xmm0
   2573 ; SSE41-NEXT:    movdqa %xmm12, %xmm6
   2574 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm6
   2575 ; SSE41-NEXT:    pshufd {{.*#+}} xmm13 = xmm6[0,0,2,2]
   2576 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
   2577 ; SSE41-NEXT:    pshufd {{.*#+}} xmm14 = xmm0[1,1,3,3]
   2578 ; SSE41-NEXT:    pand %xmm13, %xmm14
   2579 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
   2580 ; SSE41-NEXT:    por %xmm14, %xmm0
   2581 ; SSE41-NEXT:    movapd %xmm11, %xmm13
   2582 ; SSE41-NEXT:    blendvpd %xmm0, %xmm7, %xmm13
   2583 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
   2584 ; SSE41-NEXT:    pxor %xmm9, %xmm0
   2585 ; SSE41-NEXT:    movdqa %xmm12, %xmm6
   2586 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm6
   2587 ; SSE41-NEXT:    pshufd {{.*#+}} xmm14 = xmm6[0,0,2,2]
   2588 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
   2589 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   2590 ; SSE41-NEXT:    pand %xmm14, %xmm7
   2591 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm6[1,1,3,3]
   2592 ; SSE41-NEXT:    por %xmm7, %xmm0
   2593 ; SSE41-NEXT:    movapd %xmm11, %xmm14
   2594 ; SSE41-NEXT:    blendvpd %xmm0, %xmm4, %xmm14
   2595 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
   2596 ; SSE41-NEXT:    pxor %xmm9, %xmm0
   2597 ; SSE41-NEXT:    movdqa %xmm12, %xmm4
   2598 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm4
   2599 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm4[0,0,2,2]
   2600 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
   2601 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   2602 ; SSE41-NEXT:    pand %xmm6, %xmm7
   2603 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
   2604 ; SSE41-NEXT:    por %xmm7, %xmm0
   2605 ; SSE41-NEXT:    movapd %xmm11, %xmm15
   2606 ; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm15
   2607 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
   2608 ; SSE41-NEXT:    pxor %xmm9, %xmm0
   2609 ; SSE41-NEXT:    movdqa %xmm12, %xmm5
   2610 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm5
   2611 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm5[0,0,2,2]
   2612 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
   2613 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   2614 ; SSE41-NEXT:    pand %xmm6, %xmm7
   2615 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm5[1,1,3,3]
   2616 ; SSE41-NEXT:    por %xmm7, %xmm0
   2617 ; SSE41-NEXT:    movapd %xmm11, %xmm5
   2618 ; SSE41-NEXT:    blendvpd %xmm0, %xmm2, %xmm5
   2619 ; SSE41-NEXT:    movdqa %xmm3, %xmm0
   2620 ; SSE41-NEXT:    pxor %xmm9, %xmm0
   2621 ; SSE41-NEXT:    movdqa %xmm12, %xmm2
   2622 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
   2623 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm2[0,0,2,2]
   2624 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
   2625 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   2626 ; SSE41-NEXT:    pand %xmm6, %xmm7
   2627 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
   2628 ; SSE41-NEXT:    por %xmm7, %xmm0
   2629 ; SSE41-NEXT:    movapd %xmm11, %xmm6
   2630 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm6
   2631 ; SSE41-NEXT:    movdqa %xmm8, %xmm0
   2632 ; SSE41-NEXT:    pxor %xmm9, %xmm0
   2633 ; SSE41-NEXT:    movdqa %xmm12, %xmm2
   2634 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
   2635 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
   2636 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
   2637 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   2638 ; SSE41-NEXT:    pand %xmm3, %xmm7
   2639 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
   2640 ; SSE41-NEXT:    por %xmm7, %xmm0
   2641 ; SSE41-NEXT:    movapd %xmm11, %xmm3
   2642 ; SSE41-NEXT:    blendvpd %xmm0, %xmm8, %xmm3
   2643 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
   2644 ; SSE41-NEXT:    pxor %xmm9, %xmm0
   2645 ; SSE41-NEXT:    movdqa %xmm12, %xmm2
   2646 ; SSE41-NEXT:    pcmpgtd %xmm0, %xmm2
   2647 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm2[0,0,2,2]
   2648 ; SSE41-NEXT:    pcmpeqd %xmm12, %xmm0
   2649 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
   2650 ; SSE41-NEXT:    pand %xmm7, %xmm4
   2651 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
   2652 ; SSE41-NEXT:    por %xmm4, %xmm0
   2653 ; SSE41-NEXT:    blendvpd %xmm0, %xmm1, %xmm11
   2654 ; SSE41-NEXT:    xorpd %xmm8, %xmm8
   2655 ; SSE41-NEXT:    movapd %xmm11, %xmm0
   2656 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
   2657 ; SSE41-NEXT:    movapd %xmm0, %xmm1
   2658 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm1
   2659 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm1[0,0,2,2]
   2660 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
   2661 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm0[1,1,3,3]
   2662 ; SSE41-NEXT:    pand %xmm4, %xmm7
   2663 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
   2664 ; SSE41-NEXT:    por %xmm7, %xmm0
   2665 ; SSE41-NEXT:    pxor %xmm4, %xmm4
   2666 ; SSE41-NEXT:    blendvpd %xmm0, %xmm11, %xmm4
   2667 ; SSE41-NEXT:    movapd %xmm3, %xmm0
   2668 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
   2669 ; SSE41-NEXT:    movapd %xmm0, %xmm1
   2670 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm1
   2671 ; SSE41-NEXT:    pshufd {{.*#+}} xmm7 = xmm1[0,0,2,2]
   2672 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
   2673 ; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,3,3]
   2674 ; SSE41-NEXT:    pand %xmm7, %xmm2
   2675 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[1,1,3,3]
   2676 ; SSE41-NEXT:    por %xmm2, %xmm0
   2677 ; SSE41-NEXT:    pxor %xmm1, %xmm1
   2678 ; SSE41-NEXT:    blendvpd %xmm0, %xmm3, %xmm1
   2679 ; SSE41-NEXT:    packusdw %xmm4, %xmm1
   2680 ; SSE41-NEXT:    movapd %xmm6, %xmm0
   2681 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
   2682 ; SSE41-NEXT:    movapd %xmm0, %xmm2
   2683 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm2
   2684 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
   2685 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
   2686 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
   2687 ; SSE41-NEXT:    pand %xmm3, %xmm4
   2688 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
   2689 ; SSE41-NEXT:    por %xmm4, %xmm0
   2690 ; SSE41-NEXT:    pxor %xmm2, %xmm2
   2691 ; SSE41-NEXT:    blendvpd %xmm0, %xmm6, %xmm2
   2692 ; SSE41-NEXT:    movapd %xmm5, %xmm0
   2693 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
   2694 ; SSE41-NEXT:    movapd %xmm0, %xmm3
   2695 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm3
   2696 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
   2697 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
   2698 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   2699 ; SSE41-NEXT:    pand %xmm4, %xmm6
   2700 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
   2701 ; SSE41-NEXT:    por %xmm6, %xmm0
   2702 ; SSE41-NEXT:    pxor %xmm3, %xmm3
   2703 ; SSE41-NEXT:    blendvpd %xmm0, %xmm5, %xmm3
   2704 ; SSE41-NEXT:    packusdw %xmm2, %xmm3
   2705 ; SSE41-NEXT:    packusdw %xmm3, %xmm1
   2706 ; SSE41-NEXT:    movapd %xmm15, %xmm0
   2707 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
   2708 ; SSE41-NEXT:    movapd %xmm0, %xmm2
   2709 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm2
   2710 ; SSE41-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[0,0,2,2]
   2711 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
   2712 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm0[1,1,3,3]
   2713 ; SSE41-NEXT:    pand %xmm3, %xmm4
   2714 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
   2715 ; SSE41-NEXT:    por %xmm4, %xmm0
   2716 ; SSE41-NEXT:    pxor %xmm2, %xmm2
   2717 ; SSE41-NEXT:    blendvpd %xmm0, %xmm15, %xmm2
   2718 ; SSE41-NEXT:    movapd %xmm14, %xmm0
   2719 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
   2720 ; SSE41-NEXT:    movapd %xmm0, %xmm3
   2721 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm3
   2722 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm3[0,0,2,2]
   2723 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
   2724 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
   2725 ; SSE41-NEXT:    pand %xmm4, %xmm5
   2726 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm3[1,1,3,3]
   2727 ; SSE41-NEXT:    por %xmm5, %xmm0
   2728 ; SSE41-NEXT:    pxor %xmm3, %xmm3
   2729 ; SSE41-NEXT:    blendvpd %xmm0, %xmm14, %xmm3
   2730 ; SSE41-NEXT:    packusdw %xmm2, %xmm3
   2731 ; SSE41-NEXT:    movapd %xmm13, %xmm0
   2732 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
   2733 ; SSE41-NEXT:    movapd %xmm0, %xmm2
   2734 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm2
   2735 ; SSE41-NEXT:    pshufd {{.*#+}} xmm4 = xmm2[0,0,2,2]
   2736 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
   2737 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm0[1,1,3,3]
   2738 ; SSE41-NEXT:    pand %xmm4, %xmm5
   2739 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[1,1,3,3]
   2740 ; SSE41-NEXT:    por %xmm5, %xmm0
   2741 ; SSE41-NEXT:    pxor %xmm2, %xmm2
   2742 ; SSE41-NEXT:    blendvpd %xmm0, %xmm13, %xmm2
   2743 ; SSE41-NEXT:    movapd %xmm10, %xmm0
   2744 ; SSE41-NEXT:    xorpd %xmm9, %xmm0
   2745 ; SSE41-NEXT:    movapd %xmm0, %xmm4
   2746 ; SSE41-NEXT:    pcmpgtd %xmm9, %xmm4
   2747 ; SSE41-NEXT:    pshufd {{.*#+}} xmm5 = xmm4[0,0,2,2]
   2748 ; SSE41-NEXT:    pcmpeqd %xmm9, %xmm0
   2749 ; SSE41-NEXT:    pshufd {{.*#+}} xmm6 = xmm0[1,1,3,3]
   2750 ; SSE41-NEXT:    pand %xmm5, %xmm6
   2751 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm4[1,1,3,3]
   2752 ; SSE41-NEXT:    por %xmm6, %xmm0
   2753 ; SSE41-NEXT:    blendvpd %xmm0, %xmm10, %xmm8
   2754 ; SSE41-NEXT:    packusdw %xmm2, %xmm8
   2755 ; SSE41-NEXT:    packusdw %xmm8, %xmm3
   2756 ; SSE41-NEXT:    packuswb %xmm3, %xmm1
   2757 ; SSE41-NEXT:    movdqa %xmm1, %xmm0
   2758 ; SSE41-NEXT:    retq
   2759 ;
   2760 ; AVX1-LABEL: trunc_packus_v16i64_v16i8:
   2761 ; AVX1:       # %bb.0:
   2762 ; AVX1-NEXT:    vmovapd {{.*#+}} ymm4 = [255,255,255,255]
   2763 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm5
   2764 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm6 = [255,255]
   2765 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
   2766 ; AVX1-NEXT:    vpcmpgtq %xmm3, %xmm6, %xmm7
   2767 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm7, %ymm5
   2768 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm3, %ymm4, %ymm15
   2769 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
   2770 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
   2771 ; AVX1-NEXT:    vpcmpgtq %xmm2, %xmm6, %xmm7
   2772 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm7, %ymm5
   2773 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm2, %ymm4, %ymm2
   2774 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
   2775 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
   2776 ; AVX1-NEXT:    vpcmpgtq %xmm1, %xmm6, %xmm7
   2777 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm7, %ymm5
   2778 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm1, %ymm4, %ymm1
   2779 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   2780 ; AVX1-NEXT:    vpcmpgtq %xmm5, %xmm6, %xmm5
   2781 ; AVX1-NEXT:    vpcmpgtq %xmm0, %xmm6, %xmm6
   2782 ; AVX1-NEXT:    vinsertf128 $1, %xmm5, %ymm6, %ymm5
   2783 ; AVX1-NEXT:    vblendvpd %ymm5, %ymm0, %ymm4, %ymm0
   2784 ; AVX1-NEXT:    vxorpd %xmm4, %xmm4, %xmm4
   2785 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm0, %xmm8
   2786 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm14
   2787 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm14, %xmm9
   2788 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm1, %xmm10
   2789 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm7
   2790 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm7, %xmm11
   2791 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm2, %xmm12
   2792 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm5
   2793 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm5, %xmm13
   2794 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm15, %xmm6
   2795 ; AVX1-NEXT:    vextractf128 $1, %ymm15, %xmm3
   2796 ; AVX1-NEXT:    vpcmpgtq %xmm4, %xmm3, %xmm4
   2797 ; AVX1-NEXT:    vpand %xmm3, %xmm4, %xmm3
   2798 ; AVX1-NEXT:    vpand %xmm15, %xmm6, %xmm4
   2799 ; AVX1-NEXT:    vpackusdw %xmm3, %xmm4, %xmm3
   2800 ; AVX1-NEXT:    vpand %xmm5, %xmm13, %xmm4
   2801 ; AVX1-NEXT:    vpand %xmm2, %xmm12, %xmm2
   2802 ; AVX1-NEXT:    vpackusdw %xmm4, %xmm2, %xmm2
   2803 ; AVX1-NEXT:    vpackusdw %xmm3, %xmm2, %xmm2
   2804 ; AVX1-NEXT:    vpand %xmm7, %xmm11, %xmm3
   2805 ; AVX1-NEXT:    vpand %xmm1, %xmm10, %xmm1
   2806 ; AVX1-NEXT:    vpackusdw %xmm3, %xmm1, %xmm1
   2807 ; AVX1-NEXT:    vpand %xmm14, %xmm9, %xmm3
   2808 ; AVX1-NEXT:    vpand %xmm0, %xmm8, %xmm0
   2809 ; AVX1-NEXT:    vpackusdw %xmm3, %xmm0, %xmm0
   2810 ; AVX1-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
   2811 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
   2812 ; AVX1-NEXT:    vzeroupper
   2813 ; AVX1-NEXT:    retq
   2814 ;
   2815 ; AVX2-LABEL: trunc_packus_v16i64_v16i8:
   2816 ; AVX2:       # %bb.0:
   2817 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm4 = [255,255,255,255]
   2818 ; AVX2-NEXT:    vpcmpgtq %ymm2, %ymm4, %ymm5
   2819 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm2, %ymm4, %ymm2
   2820 ; AVX2-NEXT:    vpcmpgtq %ymm3, %ymm4, %ymm5
   2821 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm3, %ymm4, %ymm3
   2822 ; AVX2-NEXT:    vpcmpgtq %ymm0, %ymm4, %ymm5
   2823 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm0, %ymm4, %ymm0
   2824 ; AVX2-NEXT:    vpcmpgtq %ymm1, %ymm4, %ymm5
   2825 ; AVX2-NEXT:    vblendvpd %ymm5, %ymm1, %ymm4, %ymm1
   2826 ; AVX2-NEXT:    vpxor %xmm4, %xmm4, %xmm4
   2827 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm1, %ymm5
   2828 ; AVX2-NEXT:    vpand %ymm1, %ymm5, %ymm1
   2829 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm0, %ymm5
   2830 ; AVX2-NEXT:    vpand %ymm0, %ymm5, %ymm0
   2831 ; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
   2832 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm3, %ymm1
   2833 ; AVX2-NEXT:    vpand %ymm3, %ymm1, %ymm1
   2834 ; AVX2-NEXT:    vpcmpgtq %ymm4, %ymm2, %ymm3
   2835 ; AVX2-NEXT:    vpand %ymm2, %ymm3, %ymm2
   2836 ; AVX2-NEXT:    vpackusdw %ymm1, %ymm2, %ymm1
   2837 ; AVX2-NEXT:    vpermq {{.*#+}} ymm1 = ymm1[0,2,1,3]
   2838 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
   2839 ; AVX2-NEXT:    vpackusdw %ymm1, %ymm0, %ymm0
   2840 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
   2841 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
   2842 ; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
   2843 ; AVX2-NEXT:    vzeroupper
   2844 ; AVX2-NEXT:    retq
   2845 ;
   2846 ; AVX512-LABEL: trunc_packus_v16i64_v16i8:
   2847 ; AVX512:       # %bb.0:
   2848 ; AVX512-NEXT:    vpbroadcastq {{.*#+}} zmm2 = [255,255,255,255,255,255,255,255]
   2849 ; AVX512-NEXT:    vpminsq %zmm2, %zmm0, %zmm0
   2850 ; AVX512-NEXT:    vpminsq %zmm2, %zmm1, %zmm1
   2851 ; AVX512-NEXT:    vpxor %xmm2, %xmm2, %xmm2
   2852 ; AVX512-NEXT:    vpmaxsq %zmm2, %zmm1, %zmm1
   2853 ; AVX512-NEXT:    vpmaxsq %zmm2, %zmm0, %zmm0
   2854 ; AVX512-NEXT:    vpmovqd %zmm0, %ymm0
   2855 ; AVX512-NEXT:    vpmovqd %zmm1, %ymm1
   2856 ; AVX512-NEXT:    vinserti64x4 $1, %ymm1, %zmm0, %zmm0
   2857 ; AVX512-NEXT:    vpmovdb %zmm0, %xmm0
   2858 ; AVX512-NEXT:    vzeroupper
   2859 ; AVX512-NEXT:    retq
   2860   %1 = icmp slt <16 x i64> %a0, <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
   2861   %2 = select <16 x i1> %1, <16 x i64> %a0, <16 x i64> <i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255, i64 255>
   2862   %3 = icmp sgt <16 x i64> %2, zeroinitializer
   2863   %4 = select <16 x i1> %3, <16 x i64> %2, <16 x i64> zeroinitializer
   2864   %5 = trunc <16 x i64> %4 to <16 x i8>
   2865   ret <16 x i8> %5
   2866 }
   2867 
   2868 define <8 x i8> @trunc_packus_v8i32_v8i8(<8 x i32> %a0) {
   2869 ; SSE2-LABEL: trunc_packus_v8i32_v8i8:
   2870 ; SSE2:       # %bb.0:
   2871 ; SSE2-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255]
   2872 ; SSE2-NEXT:    movdqa %xmm2, %xmm3
   2873 ; SSE2-NEXT:    pcmpgtd %xmm0, %xmm3
   2874 ; SSE2-NEXT:    pand %xmm3, %xmm0
   2875 ; SSE2-NEXT:    pandn %xmm2, %xmm3
   2876 ; SSE2-NEXT:    por %xmm0, %xmm3
   2877 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
   2878 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
   2879 ; SSE2-NEXT:    pand %xmm0, %xmm1
   2880 ; SSE2-NEXT:    pandn %xmm2, %xmm0
   2881 ; SSE2-NEXT:    por %xmm1, %xmm0
   2882 ; SSE2-NEXT:    pxor %xmm1, %xmm1
   2883 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   2884 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm2
   2885 ; SSE2-NEXT:    pand %xmm0, %xmm2
   2886 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
   2887 ; SSE2-NEXT:    pcmpgtd %xmm1, %xmm0
   2888 ; SSE2-NEXT:    pand %xmm3, %xmm0
   2889 ; SSE2-NEXT:    packuswb %xmm2, %xmm0
   2890 ; SSE2-NEXT:    retq
   2891 ;
   2892 ; SSSE3-LABEL: trunc_packus_v8i32_v8i8:
   2893 ; SSSE3:       # %bb.0:
   2894 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255]
   2895 ; SSSE3-NEXT:    movdqa %xmm2, %xmm3
   2896 ; SSSE3-NEXT:    pcmpgtd %xmm0, %xmm3
   2897 ; SSSE3-NEXT:    pand %xmm3, %xmm0
   2898 ; SSSE3-NEXT:    pandn %xmm2, %xmm3
   2899 ; SSSE3-NEXT:    por %xmm0, %xmm3
   2900 ; SSSE3-NEXT:    movdqa %xmm2, %xmm0
   2901 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
   2902 ; SSSE3-NEXT:    pand %xmm0, %xmm1
   2903 ; SSSE3-NEXT:    pandn %xmm2, %xmm0
   2904 ; SSSE3-NEXT:    por %xmm1, %xmm0
   2905 ; SSSE3-NEXT:    pxor %xmm1, %xmm1
   2906 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
   2907 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm2
   2908 ; SSSE3-NEXT:    pand %xmm0, %xmm2
   2909 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
   2910 ; SSSE3-NEXT:    pcmpgtd %xmm1, %xmm0
   2911 ; SSSE3-NEXT:    pand %xmm3, %xmm0
   2912 ; SSSE3-NEXT:    packuswb %xmm2, %xmm0
   2913 ; SSSE3-NEXT:    retq
   2914 ;
   2915 ; SSE41-LABEL: trunc_packus_v8i32_v8i8:
   2916 ; SSE41:       # %bb.0:
   2917 ; SSE41-NEXT:    movdqa {{.*#+}} xmm2 = [255,255,255,255]
   2918 ; SSE41-NEXT:    pminsd %xmm2, %xmm0
   2919 ; SSE41-NEXT:    pminsd %xmm2, %xmm1
   2920 ; SSE41-NEXT:    pxor %xmm2, %xmm2
   2921 ; SSE41-NEXT:    pmaxsd %xmm2, %xmm1
   2922 ; SSE41-NEXT:    pmaxsd %xmm2, %xmm0
   2923 ; SSE41-NEXT:    packusdw %xmm1, %xmm0
   2924 ; SSE41-NEXT:    retq
   2925 ;
   2926 ; AVX1-LABEL: trunc_packus_v8i32_v8i8:
   2927 ; AVX1:       # %bb.0:
   2928 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [255,255,255,255]
   2929 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm2
   2930 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   2931 ; AVX1-NEXT:    vpminsd %xmm1, %xmm0, %xmm0
   2932 ; AVX1-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   2933 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm0, %xmm0
   2934 ; AVX1-NEXT:    vpmaxsd %xmm1, %xmm2, %xmm1
   2935 ; AVX1-NEXT:    vpackusdw %xmm0, %xmm1, %xmm0
   2936 ; AVX1-NEXT:    vzeroupper
   2937 ; AVX1-NEXT:    retq
   2938 ;
   2939 ; AVX2-LABEL: trunc_packus_v8i32_v8i8:
   2940 ; AVX2:       # %bb.0:
   2941 ; AVX2-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
   2942 ; AVX2-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   2943 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   2944 ; AVX2-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2945 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
   2946 ; AVX2-NEXT:    vpackusdw %xmm1, %xmm0, %xmm0
   2947 ; AVX2-NEXT:    vzeroupper
   2948 ; AVX2-NEXT:    retq
   2949 ;
   2950 ; AVX512F-LABEL: trunc_packus_v8i32_v8i8:
   2951 ; AVX512F:       # %bb.0:
   2952 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
   2953 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   2954 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   2955 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2956 ; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0
   2957 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
   2958 ; AVX512F-NEXT:    vzeroupper
   2959 ; AVX512F-NEXT:    retq
   2960 ;
   2961 ; AVX512VL-LABEL: trunc_packus_v8i32_v8i8:
   2962 ; AVX512VL:       # %bb.0:
   2963 ; AVX512VL-NEXT:    vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
   2964 ; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   2965 ; AVX512VL-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2966 ; AVX512VL-NEXT:    vpmovdw %ymm0, %xmm0
   2967 ; AVX512VL-NEXT:    vzeroupper
   2968 ; AVX512VL-NEXT:    retq
   2969 ;
   2970 ; AVX512BW-LABEL: trunc_packus_v8i32_v8i8:
   2971 ; AVX512BW:       # %bb.0:
   2972 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
   2973 ; AVX512BW-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   2974 ; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   2975 ; AVX512BW-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2976 ; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
   2977 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
   2978 ; AVX512BW-NEXT:    vzeroupper
   2979 ; AVX512BW-NEXT:    retq
   2980 ;
   2981 ; AVX512BWVL-LABEL: trunc_packus_v8i32_v8i8:
   2982 ; AVX512BWVL:       # %bb.0:
   2983 ; AVX512BWVL-NEXT:    vpminsd {{.*}}(%rip){1to8}, %ymm0, %ymm0
   2984 ; AVX512BWVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   2985 ; AVX512BWVL-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   2986 ; AVX512BWVL-NEXT:    vpmovdw %ymm0, %xmm0
   2987 ; AVX512BWVL-NEXT:    vzeroupper
   2988 ; AVX512BWVL-NEXT:    retq
   2989   %1 = icmp slt <8 x i32> %a0, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
   2990   %2 = select <8 x i1> %1, <8 x i32> %a0, <8 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
   2991   %3 = icmp sgt <8 x i32> %2, zeroinitializer
   2992   %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer
   2993   %5 = trunc <8 x i32> %4 to <8 x i8>
   2994   ret <8 x i8> %5
   2995 }
   2996 
   2997 define void @trunc_packus_v8i32_v8i8_store(<8 x i32> %a0, <8 x i8> *%p1) {
   2998 ; SSE-LABEL: trunc_packus_v8i32_v8i8_store:
   2999 ; SSE:       # %bb.0:
   3000 ; SSE-NEXT:    packssdw %xmm1, %xmm0
   3001 ; SSE-NEXT:    packuswb %xmm0, %xmm0
   3002 ; SSE-NEXT:    movq %xmm0, (%rdi)
   3003 ; SSE-NEXT:    retq
   3004 ;
   3005 ; AVX1-LABEL: trunc_packus_v8i32_v8i8_store:
   3006 ; AVX1:       # %bb.0:
   3007 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   3008 ; AVX1-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
   3009 ; AVX1-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
   3010 ; AVX1-NEXT:    vmovq %xmm0, (%rdi)
   3011 ; AVX1-NEXT:    vzeroupper
   3012 ; AVX1-NEXT:    retq
   3013 ;
   3014 ; AVX2-LABEL: trunc_packus_v8i32_v8i8_store:
   3015 ; AVX2:       # %bb.0:
   3016 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
   3017 ; AVX2-NEXT:    vpackssdw %xmm1, %xmm0, %xmm0
   3018 ; AVX2-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
   3019 ; AVX2-NEXT:    vmovq %xmm0, (%rdi)
   3020 ; AVX2-NEXT:    vzeroupper
   3021 ; AVX2-NEXT:    retq
   3022 ;
   3023 ; AVX512F-LABEL: trunc_packus_v8i32_v8i8_store:
   3024 ; AVX512F:       # %bb.0:
   3025 ; AVX512F-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
   3026 ; AVX512F-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   3027 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   3028 ; AVX512F-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   3029 ; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0
   3030 ; AVX512F-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
   3031 ; AVX512F-NEXT:    vmovq %xmm0, (%rdi)
   3032 ; AVX512F-NEXT:    vzeroupper
   3033 ; AVX512F-NEXT:    retq
   3034 ;
   3035 ; AVX512VL-LABEL: trunc_packus_v8i32_v8i8_store:
   3036 ; AVX512VL:       # %bb.0:
   3037 ; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   3038 ; AVX512VL-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   3039 ; AVX512VL-NEXT:    vpmovusdb %ymm0, (%rdi)
   3040 ; AVX512VL-NEXT:    vzeroupper
   3041 ; AVX512VL-NEXT:    retq
   3042 ;
   3043 ; AVX512BW-LABEL: trunc_packus_v8i32_v8i8_store:
   3044 ; AVX512BW:       # %bb.0:
   3045 ; AVX512BW-NEXT:    vpbroadcastd {{.*#+}} ymm1 = [255,255,255,255,255,255,255,255]
   3046 ; AVX512BW-NEXT:    vpminsd %ymm1, %ymm0, %ymm0
   3047 ; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   3048 ; AVX512BW-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   3049 ; AVX512BW-NEXT:    vpmovdw %zmm0, %ymm0
   3050 ; AVX512BW-NEXT:    vpackuswb %xmm0, %xmm0, %xmm0
   3051 ; AVX512BW-NEXT:    vmovq %xmm0, (%rdi)
   3052 ; AVX512BW-NEXT:    vzeroupper
   3053 ; AVX512BW-NEXT:    retq
   3054 ;
   3055 ; AVX512BWVL-LABEL: trunc_packus_v8i32_v8i8_store:
   3056 ; AVX512BWVL:       # %bb.0:
   3057 ; AVX512BWVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   3058 ; AVX512BWVL-NEXT:    vpmaxsd %ymm1, %ymm0, %ymm0
   3059 ; AVX512BWVL-NEXT:    vpmovusdb %ymm0, (%rdi)
   3060 ; AVX512BWVL-NEXT:    vzeroupper
   3061 ; AVX512BWVL-NEXT:    retq
   3062   %1 = icmp slt <8 x i32> %a0, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
   3063   %2 = select <8 x i1> %1, <8 x i32> %a0, <8 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
   3064   %3 = icmp sgt <8 x i32> %2, zeroinitializer
   3065   %4 = select <8 x i1> %3, <8 x i32> %2, <8 x i32> zeroinitializer
   3066   %5 = trunc <8 x i32> %4 to <8 x i8>
   3067   store <8 x i8> %5, <8 x i8> *%p1
   3068   ret void
   3069 }
   3070 
   3071 define <16 x i8> @trunc_packus_v16i32_v16i8(<16 x i32> %a0) {
   3072 ; SSE-LABEL: trunc_packus_v16i32_v16i8:
   3073 ; SSE:       # %bb.0:
   3074 ; SSE-NEXT:    packssdw %xmm3, %xmm2
   3075 ; SSE-NEXT:    packssdw %xmm1, %xmm0
   3076 ; SSE-NEXT:    packuswb %xmm2, %xmm0
   3077 ; SSE-NEXT:    retq
   3078 ;
   3079 ; AVX1-LABEL: trunc_packus_v16i32_v16i8:
   3080 ; AVX1:       # %bb.0:
   3081 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3082 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm1, %xmm1
   3083 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   3084 ; AVX1-NEXT:    vpackssdw %xmm2, %xmm0, %xmm0
   3085 ; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
   3086 ; AVX1-NEXT:    vzeroupper
   3087 ; AVX1-NEXT:    retq
   3088 ;
   3089 ; AVX2-LABEL: trunc_packus_v16i32_v16i8:
   3090 ; AVX2:       # %bb.0:
   3091 ; AVX2-NEXT:    vpackssdw %ymm1, %ymm0, %ymm0
   3092 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
   3093 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
   3094 ; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
   3095 ; AVX2-NEXT:    vzeroupper
   3096 ; AVX2-NEXT:    retq
   3097 ;
   3098 ; AVX512-LABEL: trunc_packus_v16i32_v16i8:
   3099 ; AVX512:       # %bb.0:
   3100 ; AVX512-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   3101 ; AVX512-NEXT:    vpmaxsd %zmm1, %zmm0, %zmm0
   3102 ; AVX512-NEXT:    vpmovusdb %zmm0, %xmm0
   3103 ; AVX512-NEXT:    vzeroupper
   3104 ; AVX512-NEXT:    retq
   3105   %1 = icmp slt <16 x i32> %a0, <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
   3106   %2 = select <16 x i1> %1, <16 x i32> %a0, <16 x i32> <i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255, i32 255>
   3107   %3 = icmp sgt <16 x i32> %2, zeroinitializer
   3108   %4 = select <16 x i1> %3, <16 x i32> %2, <16 x i32> zeroinitializer
   3109   %5 = trunc <16 x i32> %4 to <16 x i8>
   3110   ret <16 x i8> %5
   3111 }
   3112 
   3113 define <16 x i8> @trunc_packus_v16i16_v16i8(<16 x i16> %a0) {
   3114 ; SSE-LABEL: trunc_packus_v16i16_v16i8:
   3115 ; SSE:       # %bb.0:
   3116 ; SSE-NEXT:    packuswb %xmm1, %xmm0
   3117 ; SSE-NEXT:    retq
   3118 ;
   3119 ; AVX1-LABEL: trunc_packus_v16i16_v16i8:
   3120 ; AVX1:       # %bb.0:
   3121 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   3122 ; AVX1-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
   3123 ; AVX1-NEXT:    vzeroupper
   3124 ; AVX1-NEXT:    retq
   3125 ;
   3126 ; AVX2-LABEL: trunc_packus_v16i16_v16i8:
   3127 ; AVX2:       # %bb.0:
   3128 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
   3129 ; AVX2-NEXT:    vpackuswb %xmm1, %xmm0, %xmm0
   3130 ; AVX2-NEXT:    vzeroupper
   3131 ; AVX2-NEXT:    retq
   3132 ;
   3133 ; AVX512F-LABEL: trunc_packus_v16i16_v16i8:
   3134 ; AVX512F:       # %bb.0:
   3135 ; AVX512F-NEXT:    vpminsw {{.*}}(%rip), %ymm0, %ymm0
   3136 ; AVX512F-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   3137 ; AVX512F-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   3138 ; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
   3139 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
   3140 ; AVX512F-NEXT:    vzeroupper
   3141 ; AVX512F-NEXT:    retq
   3142 ;
   3143 ; AVX512VL-LABEL: trunc_packus_v16i16_v16i8:
   3144 ; AVX512VL:       # %bb.0:
   3145 ; AVX512VL-NEXT:    vpminsw {{.*}}(%rip), %ymm0, %ymm0
   3146 ; AVX512VL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   3147 ; AVX512VL-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   3148 ; AVX512VL-NEXT:    vpmovsxwd %ymm0, %zmm0
   3149 ; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm0
   3150 ; AVX512VL-NEXT:    vzeroupper
   3151 ; AVX512VL-NEXT:    retq
   3152 ;
   3153 ; AVX512BW-LABEL: trunc_packus_v16i16_v16i8:
   3154 ; AVX512BW:       # %bb.0:
   3155 ; AVX512BW-NEXT:    vpminsw {{.*}}(%rip), %ymm0, %ymm0
   3156 ; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   3157 ; AVX512BW-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   3158 ; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
   3159 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
   3160 ; AVX512BW-NEXT:    vzeroupper
   3161 ; AVX512BW-NEXT:    retq
   3162 ;
   3163 ; AVX512BWVL-LABEL: trunc_packus_v16i16_v16i8:
   3164 ; AVX512BWVL:       # %bb.0:
   3165 ; AVX512BWVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   3166 ; AVX512BWVL-NEXT:    vpmaxsw %ymm1, %ymm0, %ymm0
   3167 ; AVX512BWVL-NEXT:    vpmovuswb %ymm0, %xmm0
   3168 ; AVX512BWVL-NEXT:    vzeroupper
   3169 ; AVX512BWVL-NEXT:    retq
   3170   %1 = icmp slt <16 x i16> %a0, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
   3171   %2 = select <16 x i1> %1, <16 x i16> %a0, <16 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
   3172   %3 = icmp sgt <16 x i16> %2, zeroinitializer
   3173   %4 = select <16 x i1> %3, <16 x i16> %2, <16 x i16> zeroinitializer
   3174   %5 = trunc <16 x i16> %4 to <16 x i8>
   3175   ret <16 x i8> %5
   3176 }
   3177 
   3178 define <32 x i8> @trunc_packus_v32i16_v32i8(<32 x i16> %a0) {
   3179 ; SSE-LABEL: trunc_packus_v32i16_v32i8:
   3180 ; SSE:       # %bb.0:
   3181 ; SSE-NEXT:    packuswb %xmm1, %xmm0
   3182 ; SSE-NEXT:    packuswb %xmm3, %xmm2
   3183 ; SSE-NEXT:    movdqa %xmm2, %xmm1
   3184 ; SSE-NEXT:    retq
   3185 ;
   3186 ; AVX1-LABEL: trunc_packus_v32i16_v32i8:
   3187 ; AVX1:       # %bb.0:
   3188 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
   3189 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm1, %xmm1
   3190 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
   3191 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
   3192 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   3193 ; AVX1-NEXT:    retq
   3194 ;
   3195 ; AVX2-LABEL: trunc_packus_v32i16_v32i8:
   3196 ; AVX2:       # %bb.0:
   3197 ; AVX2-NEXT:    vpackuswb %ymm1, %ymm0, %ymm0
   3198 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
   3199 ; AVX2-NEXT:    retq
   3200 ;
   3201 ; AVX512F-LABEL: trunc_packus_v32i16_v32i8:
   3202 ; AVX512F:       # %bb.0:
   3203 ; AVX512F-NEXT:    vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
   3204 ; AVX512F-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   3205 ; AVX512F-NEXT:    vpminsw %ymm2, %ymm1, %ymm1
   3206 ; AVX512F-NEXT:    vpxor %xmm2, %xmm2, %xmm2
   3207 ; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm1, %ymm1
   3208 ; AVX512F-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   3209 ; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
   3210 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
   3211 ; AVX512F-NEXT:    vpmovsxwd %ymm1, %zmm1
   3212 ; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
   3213 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
   3214 ; AVX512F-NEXT:    retq
   3215 ;
   3216 ; AVX512VL-LABEL: trunc_packus_v32i16_v32i8:
   3217 ; AVX512VL:       # %bb.0:
   3218 ; AVX512VL-NEXT:    vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]
   3219 ; AVX512VL-NEXT:    vpminsw %ymm2, %ymm0, %ymm0
   3220 ; AVX512VL-NEXT:    vpminsw %ymm2, %ymm1, %ymm1
   3221 ; AVX512VL-NEXT:    vpxor %xmm2, %xmm2, %xmm2
   3222 ; AVX512VL-NEXT:    vpmaxsw %ymm2, %ymm1, %ymm1
   3223 ; AVX512VL-NEXT:    vpmaxsw %ymm2, %ymm0, %ymm0
   3224 ; AVX512VL-NEXT:    vpmovsxwd %ymm0, %zmm0
   3225 ; AVX512VL-NEXT:    vpmovdb %zmm0, %xmm0
   3226 ; AVX512VL-NEXT:    vpmovsxwd %ymm1, %zmm1
   3227 ; AVX512VL-NEXT:    vpmovdb %zmm1, %xmm1
   3228 ; AVX512VL-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
   3229 ; AVX512VL-NEXT:    retq
   3230 ;
   3231 ; AVX512BW-LABEL: trunc_packus_v32i16_v32i8:
   3232 ; AVX512BW:       # %bb.0:
   3233 ; AVX512BW-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   3234 ; AVX512BW-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   3235 ; AVX512BW-NEXT:    vpmovuswb %zmm0, %ymm0
   3236 ; AVX512BW-NEXT:    retq
   3237 ;
   3238 ; AVX512BWVL-LABEL: trunc_packus_v32i16_v32i8:
   3239 ; AVX512BWVL:       # %bb.0:
   3240 ; AVX512BWVL-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   3241 ; AVX512BWVL-NEXT:    vpmaxsw %zmm1, %zmm0, %zmm0
   3242 ; AVX512BWVL-NEXT:    vpmovuswb %zmm0, %ymm0
   3243 ; AVX512BWVL-NEXT:    retq
   3244   %1 = icmp slt <32 x i16> %a0, <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
   3245   %2 = select <32 x i1> %1, <32 x i16> %a0, <32 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
   3246   %3 = icmp sgt <32 x i16> %2, zeroinitializer
   3247   %4 = select <32 x i1> %3, <32 x i16> %2, <32 x i16> zeroinitializer
   3248   %5 = trunc <32 x i16> %4 to <32 x i8>
   3249   ret <32 x i8> %5
   3250 }
   3251