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=+avx | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX1
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=AVX --check-prefix=AVX2
      4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX1
      5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+xop,+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=XOP --check-prefix=XOPAVX2
      6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512DQ
      7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw | FileCheck %s --check-prefix=ALL --check-prefix=AVX512 --check-prefix=AVX512BW
      8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512dq,+avx512vl | FileCheck %s --check-prefix=ALL --check-prefix=AVX512VL --check-prefix=AVX512DQVL
      9 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512bw,+avx512vl | FileCheck %s --check-prefix=ALL --check-prefix=AVX512VL --check-prefix=AVX512BWVL
     10 ;
     11 ; 32-bit runs to make sure we do reasonable things for i64 shifts.
     12 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx  | FileCheck %s --check-prefix=ALL --check-prefix=X32-AVX --check-prefix=X32-AVX1
     13 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=ALL --check-prefix=X32-AVX --check-prefix=X32-AVX2
     14 
     15 ;
     16 ; Variable Shifts
     17 ;
     18 
     19 define <4 x i64> @var_shift_v4i64(<4 x i64> %a, <4 x i64> %b) nounwind {
     20 ; AVX1-LABEL: var_shift_v4i64:
     21 ; AVX1:       # %bb.0:
     22 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
     23 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [9223372036854775808,9223372036854775808]
     24 ; AVX1-NEXT:    vpsrlq %xmm2, %xmm3, %xmm4
     25 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm5 = xmm2[2,3,0,1]
     26 ; AVX1-NEXT:    vpsrlq %xmm5, %xmm3, %xmm6
     27 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm4 = xmm4[0,1,2,3],xmm6[4,5,6,7]
     28 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
     29 ; AVX1-NEXT:    vpsrlq %xmm2, %xmm6, %xmm2
     30 ; AVX1-NEXT:    vpsrlq %xmm5, %xmm6, %xmm5
     31 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm5[4,5,6,7]
     32 ; AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
     33 ; AVX1-NEXT:    vpsubq %xmm4, %xmm2, %xmm2
     34 ; AVX1-NEXT:    vpsrlq %xmm1, %xmm3, %xmm4
     35 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm5 = xmm1[2,3,0,1]
     36 ; AVX1-NEXT:    vpsrlq %xmm5, %xmm3, %xmm3
     37 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7]
     38 ; AVX1-NEXT:    vpsrlq %xmm1, %xmm0, %xmm1
     39 ; AVX1-NEXT:    vpsrlq %xmm5, %xmm0, %xmm0
     40 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
     41 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm0
     42 ; AVX1-NEXT:    vpsubq %xmm3, %xmm0, %xmm0
     43 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
     44 ; AVX1-NEXT:    retq
     45 ;
     46 ; AVX2-LABEL: var_shift_v4i64:
     47 ; AVX2:       # %bb.0:
     48 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
     49 ; AVX2-NEXT:    vpsrlvq %ymm1, %ymm2, %ymm3
     50 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
     51 ; AVX2-NEXT:    vpsrlvq %ymm1, %ymm0, %ymm0
     52 ; AVX2-NEXT:    vpsubq %ymm3, %ymm0, %ymm0
     53 ; AVX2-NEXT:    retq
     54 ;
     55 ; XOPAVX1-LABEL: var_shift_v4i64:
     56 ; XOPAVX1:       # %bb.0:
     57 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
     58 ; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
     59 ; XOPAVX1-NEXT:    vpsubq %xmm2, %xmm3, %xmm2
     60 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
     61 ; XOPAVX1-NEXT:    vpshaq %xmm2, %xmm4, %xmm2
     62 ; XOPAVX1-NEXT:    vpsubq %xmm1, %xmm3, %xmm1
     63 ; XOPAVX1-NEXT:    vpshaq %xmm1, %xmm0, %xmm0
     64 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
     65 ; XOPAVX1-NEXT:    retq
     66 ;
     67 ; XOPAVX2-LABEL: var_shift_v4i64:
     68 ; XOPAVX2:       # %bb.0:
     69 ; XOPAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
     70 ; XOPAVX2-NEXT:    vpsrlvq %ymm1, %ymm2, %ymm3
     71 ; XOPAVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
     72 ; XOPAVX2-NEXT:    vpsrlvq %ymm1, %ymm0, %ymm0
     73 ; XOPAVX2-NEXT:    vpsubq %ymm3, %ymm0, %ymm0
     74 ; XOPAVX2-NEXT:    retq
     75 ;
     76 ; AVX512-LABEL: var_shift_v4i64:
     77 ; AVX512:       # %bb.0:
     78 ; AVX512-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
     79 ; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
     80 ; AVX512-NEXT:    vpsravq %zmm1, %zmm0, %zmm0
     81 ; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
     82 ; AVX512-NEXT:    retq
     83 ;
     84 ; AVX512VL-LABEL: var_shift_v4i64:
     85 ; AVX512VL:       # %bb.0:
     86 ; AVX512VL-NEXT:    vpsravq %ymm1, %ymm0, %ymm0
     87 ; AVX512VL-NEXT:    retq
     88 ;
     89 ; X32-AVX1-LABEL: var_shift_v4i64:
     90 ; X32-AVX1:       # %bb.0:
     91 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
     92 ; X32-AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [0,2147483648,0,2147483648]
     93 ; X32-AVX1-NEXT:    vpsrlq %xmm2, %xmm3, %xmm4
     94 ; X32-AVX1-NEXT:    vpshufd {{.*#+}} xmm5 = xmm2[2,3,0,1]
     95 ; X32-AVX1-NEXT:    vpsrlq %xmm5, %xmm3, %xmm6
     96 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm4 = xmm4[0,1,2,3],xmm6[4,5,6,7]
     97 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm6
     98 ; X32-AVX1-NEXT:    vpsrlq %xmm2, %xmm6, %xmm2
     99 ; X32-AVX1-NEXT:    vpsrlq %xmm5, %xmm6, %xmm5
    100 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm5[4,5,6,7]
    101 ; X32-AVX1-NEXT:    vpxor %xmm4, %xmm2, %xmm2
    102 ; X32-AVX1-NEXT:    vpsubq %xmm4, %xmm2, %xmm2
    103 ; X32-AVX1-NEXT:    vpsrlq %xmm1, %xmm3, %xmm4
    104 ; X32-AVX1-NEXT:    vpshufd {{.*#+}} xmm5 = xmm1[2,3,0,1]
    105 ; X32-AVX1-NEXT:    vpsrlq %xmm5, %xmm3, %xmm3
    106 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7]
    107 ; X32-AVX1-NEXT:    vpsrlq %xmm1, %xmm0, %xmm1
    108 ; X32-AVX1-NEXT:    vpsrlq %xmm5, %xmm0, %xmm0
    109 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm1[0,1,2,3],xmm0[4,5,6,7]
    110 ; X32-AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm0
    111 ; X32-AVX1-NEXT:    vpsubq %xmm3, %xmm0, %xmm0
    112 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    113 ; X32-AVX1-NEXT:    retl
    114 ;
    115 ; X32-AVX2-LABEL: var_shift_v4i64:
    116 ; X32-AVX2:       # %bb.0:
    117 ; X32-AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,2147483648,0,2147483648,0,2147483648,0,2147483648]
    118 ; X32-AVX2-NEXT:    vpsrlvq %ymm1, %ymm2, %ymm3
    119 ; X32-AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
    120 ; X32-AVX2-NEXT:    vpsrlvq %ymm1, %ymm0, %ymm0
    121 ; X32-AVX2-NEXT:    vpsubq %ymm3, %ymm0, %ymm0
    122 ; X32-AVX2-NEXT:    retl
    123   %shift = ashr <4 x i64> %a, %b
    124   ret <4 x i64> %shift
    125 }
    126 
    127 define <8 x i32> @var_shift_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind {
    128 ; AVX1-LABEL: var_shift_v8i32:
    129 ; AVX1:       # %bb.0:
    130 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    131 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
    132 ; AVX1-NEXT:    vpsrldq {{.*#+}} xmm4 = xmm3[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
    133 ; AVX1-NEXT:    vpsrad %xmm4, %xmm2, %xmm4
    134 ; AVX1-NEXT:    vpsrlq $32, %xmm3, %xmm5
    135 ; AVX1-NEXT:    vpsrad %xmm5, %xmm2, %xmm5
    136 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm4 = xmm5[0,1,2,3],xmm4[4,5,6,7]
    137 ; AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
    138 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm6 = xmm3[2],xmm5[2],xmm3[3],xmm5[3]
    139 ; AVX1-NEXT:    vpsrad %xmm6, %xmm2, %xmm6
    140 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero
    141 ; AVX1-NEXT:    vpsrad %xmm3, %xmm2, %xmm2
    142 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm6[4,5,6,7]
    143 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3],xmm2[4,5],xmm4[6,7]
    144 ; AVX1-NEXT:    vpsrldq {{.*#+}} xmm3 = xmm1[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
    145 ; AVX1-NEXT:    vpsrad %xmm3, %xmm0, %xmm3
    146 ; AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm4
    147 ; AVX1-NEXT:    vpsrad %xmm4, %xmm0, %xmm4
    148 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7]
    149 ; AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm4 = xmm1[2],xmm5[2],xmm1[3],xmm5[3]
    150 ; AVX1-NEXT:    vpsrad %xmm4, %xmm0, %xmm4
    151 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
    152 ; AVX1-NEXT:    vpsrad %xmm1, %xmm0, %xmm0
    153 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm4[4,5,6,7]
    154 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,3],xmm0[4,5],xmm3[6,7]
    155 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    156 ; AVX1-NEXT:    retq
    157 ;
    158 ; AVX2-LABEL: var_shift_v8i32:
    159 ; AVX2:       # %bb.0:
    160 ; AVX2-NEXT:    vpsravd %ymm1, %ymm0, %ymm0
    161 ; AVX2-NEXT:    retq
    162 ;
    163 ; XOPAVX1-LABEL: var_shift_v8i32:
    164 ; XOPAVX1:       # %bb.0:
    165 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    166 ; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
    167 ; XOPAVX1-NEXT:    vpsubd %xmm2, %xmm3, %xmm2
    168 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
    169 ; XOPAVX1-NEXT:    vpshad %xmm2, %xmm4, %xmm2
    170 ; XOPAVX1-NEXT:    vpsubd %xmm1, %xmm3, %xmm1
    171 ; XOPAVX1-NEXT:    vpshad %xmm1, %xmm0, %xmm0
    172 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    173 ; XOPAVX1-NEXT:    retq
    174 ;
    175 ; XOPAVX2-LABEL: var_shift_v8i32:
    176 ; XOPAVX2:       # %bb.0:
    177 ; XOPAVX2-NEXT:    vpsravd %ymm1, %ymm0, %ymm0
    178 ; XOPAVX2-NEXT:    retq
    179 ;
    180 ; AVX512-LABEL: var_shift_v8i32:
    181 ; AVX512:       # %bb.0:
    182 ; AVX512-NEXT:    vpsravd %ymm1, %ymm0, %ymm0
    183 ; AVX512-NEXT:    retq
    184 ;
    185 ; AVX512VL-LABEL: var_shift_v8i32:
    186 ; AVX512VL:       # %bb.0:
    187 ; AVX512VL-NEXT:    vpsravd %ymm1, %ymm0, %ymm0
    188 ; AVX512VL-NEXT:    retq
    189 ;
    190 ; X32-AVX1-LABEL: var_shift_v8i32:
    191 ; X32-AVX1:       # %bb.0:
    192 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    193 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm3
    194 ; X32-AVX1-NEXT:    vpsrldq {{.*#+}} xmm4 = xmm3[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
    195 ; X32-AVX1-NEXT:    vpsrad %xmm4, %xmm2, %xmm4
    196 ; X32-AVX1-NEXT:    vpsrlq $32, %xmm3, %xmm5
    197 ; X32-AVX1-NEXT:    vpsrad %xmm5, %xmm2, %xmm5
    198 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm4 = xmm5[0,1,2,3],xmm4[4,5,6,7]
    199 ; X32-AVX1-NEXT:    vpxor %xmm5, %xmm5, %xmm5
    200 ; X32-AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm6 = xmm3[2],xmm5[2],xmm3[3],xmm5[3]
    201 ; X32-AVX1-NEXT:    vpsrad %xmm6, %xmm2, %xmm6
    202 ; X32-AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero
    203 ; X32-AVX1-NEXT:    vpsrad %xmm3, %xmm2, %xmm2
    204 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1,2,3],xmm6[4,5,6,7]
    205 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm2[0,1],xmm4[2,3],xmm2[4,5],xmm4[6,7]
    206 ; X32-AVX1-NEXT:    vpsrldq {{.*#+}} xmm3 = xmm1[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero
    207 ; X32-AVX1-NEXT:    vpsrad %xmm3, %xmm0, %xmm3
    208 ; X32-AVX1-NEXT:    vpsrlq $32, %xmm1, %xmm4
    209 ; X32-AVX1-NEXT:    vpsrad %xmm4, %xmm0, %xmm4
    210 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm4[0,1,2,3],xmm3[4,5,6,7]
    211 ; X32-AVX1-NEXT:    vpunpckhdq {{.*#+}} xmm4 = xmm1[2],xmm5[2],xmm1[3],xmm5[3]
    212 ; X32-AVX1-NEXT:    vpsrad %xmm4, %xmm0, %xmm4
    213 ; X32-AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
    214 ; X32-AVX1-NEXT:    vpsrad %xmm1, %xmm0, %xmm0
    215 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm4[4,5,6,7]
    216 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm3[2,3],xmm0[4,5],xmm3[6,7]
    217 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    218 ; X32-AVX1-NEXT:    retl
    219 ;
    220 ; X32-AVX2-LABEL: var_shift_v8i32:
    221 ; X32-AVX2:       # %bb.0:
    222 ; X32-AVX2-NEXT:    vpsravd %ymm1, %ymm0, %ymm0
    223 ; X32-AVX2-NEXT:    retl
    224   %shift = ashr <8 x i32> %a, %b
    225   ret <8 x i32> %shift
    226 }
    227 
    228 define <16 x i16> @var_shift_v16i16(<16 x i16> %a, <16 x i16> %b) nounwind {
    229 ; AVX1-LABEL: var_shift_v16i16:
    230 ; AVX1:       # %bb.0:
    231 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    232 ; AVX1-NEXT:    vpsllw $12, %xmm2, %xmm3
    233 ; AVX1-NEXT:    vpsllw $4, %xmm2, %xmm2
    234 ; AVX1-NEXT:    vpor %xmm3, %xmm2, %xmm2
    235 ; AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm3
    236 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
    237 ; AVX1-NEXT:    vpsraw $8, %xmm4, %xmm5
    238 ; AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm2
    239 ; AVX1-NEXT:    vpsraw $4, %xmm2, %xmm4
    240 ; AVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
    241 ; AVX1-NEXT:    vpsraw $2, %xmm2, %xmm4
    242 ; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    243 ; AVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
    244 ; AVX1-NEXT:    vpsraw $1, %xmm2, %xmm4
    245 ; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    246 ; AVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
    247 ; AVX1-NEXT:    vpsllw $12, %xmm1, %xmm3
    248 ; AVX1-NEXT:    vpsllw $4, %xmm1, %xmm1
    249 ; AVX1-NEXT:    vpor %xmm3, %xmm1, %xmm1
    250 ; AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm3
    251 ; AVX1-NEXT:    vpsraw $8, %xmm0, %xmm4
    252 ; AVX1-NEXT:    vpblendvb %xmm1, %xmm4, %xmm0, %xmm0
    253 ; AVX1-NEXT:    vpsraw $4, %xmm0, %xmm1
    254 ; AVX1-NEXT:    vpblendvb %xmm3, %xmm1, %xmm0, %xmm0
    255 ; AVX1-NEXT:    vpsraw $2, %xmm0, %xmm1
    256 ; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    257 ; AVX1-NEXT:    vpblendvb %xmm3, %xmm1, %xmm0, %xmm0
    258 ; AVX1-NEXT:    vpsraw $1, %xmm0, %xmm1
    259 ; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    260 ; AVX1-NEXT:    vpblendvb %xmm3, %xmm1, %xmm0, %xmm0
    261 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    262 ; AVX1-NEXT:    retq
    263 ;
    264 ; AVX2-LABEL: var_shift_v16i16:
    265 ; AVX2:       # %bb.0:
    266 ; AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
    267 ; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15]
    268 ; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15]
    269 ; AVX2-NEXT:    vpsravd %ymm3, %ymm4, %ymm3
    270 ; AVX2-NEXT:    vpsrld $16, %ymm3, %ymm3
    271 ; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11]
    272 ; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11]
    273 ; AVX2-NEXT:    vpsravd %ymm1, %ymm0, %ymm0
    274 ; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0
    275 ; AVX2-NEXT:    vpackusdw %ymm3, %ymm0, %ymm0
    276 ; AVX2-NEXT:    retq
    277 ;
    278 ; XOPAVX1-LABEL: var_shift_v16i16:
    279 ; XOPAVX1:       # %bb.0:
    280 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    281 ; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
    282 ; XOPAVX1-NEXT:    vpsubw %xmm2, %xmm3, %xmm2
    283 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
    284 ; XOPAVX1-NEXT:    vpshaw %xmm2, %xmm4, %xmm2
    285 ; XOPAVX1-NEXT:    vpsubw %xmm1, %xmm3, %xmm1
    286 ; XOPAVX1-NEXT:    vpshaw %xmm1, %xmm0, %xmm0
    287 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    288 ; XOPAVX1-NEXT:    retq
    289 ;
    290 ; XOPAVX2-LABEL: var_shift_v16i16:
    291 ; XOPAVX2:       # %bb.0:
    292 ; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
    293 ; XOPAVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
    294 ; XOPAVX2-NEXT:    vpsubw %xmm2, %xmm3, %xmm2
    295 ; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
    296 ; XOPAVX2-NEXT:    vpshaw %xmm2, %xmm4, %xmm2
    297 ; XOPAVX2-NEXT:    vpsubw %xmm1, %xmm3, %xmm1
    298 ; XOPAVX2-NEXT:    vpshaw %xmm1, %xmm0, %xmm0
    299 ; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
    300 ; XOPAVX2-NEXT:    retq
    301 ;
    302 ; AVX512DQ-LABEL: var_shift_v16i16:
    303 ; AVX512DQ:       # %bb.0:
    304 ; AVX512DQ-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero
    305 ; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm0
    306 ; AVX512DQ-NEXT:    vpsravd %zmm1, %zmm0, %zmm0
    307 ; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm0
    308 ; AVX512DQ-NEXT:    retq
    309 ;
    310 ; AVX512BW-LABEL: var_shift_v16i16:
    311 ; AVX512BW:       # %bb.0:
    312 ; AVX512BW-NEXT:    # kill: def $ymm1 killed $ymm1 def $zmm1
    313 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
    314 ; AVX512BW-NEXT:    vpsravw %zmm1, %zmm0, %zmm0
    315 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
    316 ; AVX512BW-NEXT:    retq
    317 ;
    318 ; AVX512DQVL-LABEL: var_shift_v16i16:
    319 ; AVX512DQVL:       # %bb.0:
    320 ; AVX512DQVL-NEXT:    vpmovzxwd {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero
    321 ; AVX512DQVL-NEXT:    vpmovsxwd %ymm0, %zmm0
    322 ; AVX512DQVL-NEXT:    vpsravd %zmm1, %zmm0, %zmm0
    323 ; AVX512DQVL-NEXT:    vpmovdw %zmm0, %ymm0
    324 ; AVX512DQVL-NEXT:    retq
    325 ;
    326 ; AVX512BWVL-LABEL: var_shift_v16i16:
    327 ; AVX512BWVL:       # %bb.0:
    328 ; AVX512BWVL-NEXT:    vpsravw %ymm1, %ymm0, %ymm0
    329 ; AVX512BWVL-NEXT:    retq
    330 ;
    331 ; X32-AVX1-LABEL: var_shift_v16i16:
    332 ; X32-AVX1:       # %bb.0:
    333 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    334 ; X32-AVX1-NEXT:    vpsllw $12, %xmm2, %xmm3
    335 ; X32-AVX1-NEXT:    vpsllw $4, %xmm2, %xmm2
    336 ; X32-AVX1-NEXT:    vpor %xmm3, %xmm2, %xmm2
    337 ; X32-AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm3
    338 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
    339 ; X32-AVX1-NEXT:    vpsraw $8, %xmm4, %xmm5
    340 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm2
    341 ; X32-AVX1-NEXT:    vpsraw $4, %xmm2, %xmm4
    342 ; X32-AVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
    343 ; X32-AVX1-NEXT:    vpsraw $2, %xmm2, %xmm4
    344 ; X32-AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    345 ; X32-AVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
    346 ; X32-AVX1-NEXT:    vpsraw $1, %xmm2, %xmm4
    347 ; X32-AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    348 ; X32-AVX1-NEXT:    vpblendvb %xmm3, %xmm4, %xmm2, %xmm2
    349 ; X32-AVX1-NEXT:    vpsllw $12, %xmm1, %xmm3
    350 ; X32-AVX1-NEXT:    vpsllw $4, %xmm1, %xmm1
    351 ; X32-AVX1-NEXT:    vpor %xmm3, %xmm1, %xmm1
    352 ; X32-AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm3
    353 ; X32-AVX1-NEXT:    vpsraw $8, %xmm0, %xmm4
    354 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm4, %xmm0, %xmm0
    355 ; X32-AVX1-NEXT:    vpsraw $4, %xmm0, %xmm1
    356 ; X32-AVX1-NEXT:    vpblendvb %xmm3, %xmm1, %xmm0, %xmm0
    357 ; X32-AVX1-NEXT:    vpsraw $2, %xmm0, %xmm1
    358 ; X32-AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    359 ; X32-AVX1-NEXT:    vpblendvb %xmm3, %xmm1, %xmm0, %xmm0
    360 ; X32-AVX1-NEXT:    vpsraw $1, %xmm0, %xmm1
    361 ; X32-AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    362 ; X32-AVX1-NEXT:    vpblendvb %xmm3, %xmm1, %xmm0, %xmm0
    363 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    364 ; X32-AVX1-NEXT:    retl
    365 ;
    366 ; X32-AVX2-LABEL: var_shift_v16i16:
    367 ; X32-AVX2:       # %bb.0:
    368 ; X32-AVX2-NEXT:    vpxor %xmm2, %xmm2, %xmm2
    369 ; X32-AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm3 = ymm1[4],ymm2[4],ymm1[5],ymm2[5],ymm1[6],ymm2[6],ymm1[7],ymm2[7],ymm1[12],ymm2[12],ymm1[13],ymm2[13],ymm1[14],ymm2[14],ymm1[15],ymm2[15]
    370 ; X32-AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm4 = ymm2[4],ymm0[4],ymm2[5],ymm0[5],ymm2[6],ymm0[6],ymm2[7],ymm0[7],ymm2[12],ymm0[12],ymm2[13],ymm0[13],ymm2[14],ymm0[14],ymm2[15],ymm0[15]
    371 ; X32-AVX2-NEXT:    vpsravd %ymm3, %ymm4, %ymm3
    372 ; X32-AVX2-NEXT:    vpsrld $16, %ymm3, %ymm3
    373 ; X32-AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm1 = ymm1[0],ymm2[0],ymm1[1],ymm2[1],ymm1[2],ymm2[2],ymm1[3],ymm2[3],ymm1[8],ymm2[8],ymm1[9],ymm2[9],ymm1[10],ymm2[10],ymm1[11],ymm2[11]
    374 ; X32-AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm2[0],ymm0[0],ymm2[1],ymm0[1],ymm2[2],ymm0[2],ymm2[3],ymm0[3],ymm2[8],ymm0[8],ymm2[9],ymm0[9],ymm2[10],ymm0[10],ymm2[11],ymm0[11]
    375 ; X32-AVX2-NEXT:    vpsravd %ymm1, %ymm0, %ymm0
    376 ; X32-AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0
    377 ; X32-AVX2-NEXT:    vpackusdw %ymm3, %ymm0, %ymm0
    378 ; X32-AVX2-NEXT:    retl
    379   %shift = ashr <16 x i16> %a, %b
    380   ret <16 x i16> %shift
    381 }
    382 
    383 define <32 x i8> @var_shift_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {
    384 ; AVX1-LABEL: var_shift_v32i8:
    385 ; AVX1:       # %bb.0:
    386 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    387 ; AVX1-NEXT:    vpsllw $5, %xmm2, %xmm2
    388 ; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
    389 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
    390 ; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8],xmm4[8],xmm0[9],xmm4[9],xmm0[10],xmm4[10],xmm0[11],xmm4[11],xmm0[12],xmm4[12],xmm0[13],xmm4[13],xmm0[14],xmm4[14],xmm0[15],xmm4[15]
    391 ; AVX1-NEXT:    vpsraw $4, %xmm5, %xmm6
    392 ; AVX1-NEXT:    vpblendvb %xmm3, %xmm6, %xmm5, %xmm5
    393 ; AVX1-NEXT:    vpsraw $2, %xmm5, %xmm6
    394 ; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    395 ; AVX1-NEXT:    vpblendvb %xmm3, %xmm6, %xmm5, %xmm5
    396 ; AVX1-NEXT:    vpsraw $1, %xmm5, %xmm6
    397 ; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    398 ; AVX1-NEXT:    vpblendvb %xmm3, %xmm6, %xmm5, %xmm3
    399 ; AVX1-NEXT:    vpsrlw $8, %xmm3, %xmm3
    400 ; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
    401 ; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm4 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
    402 ; AVX1-NEXT:    vpsraw $4, %xmm4, %xmm5
    403 ; AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm4
    404 ; AVX1-NEXT:    vpsraw $2, %xmm4, %xmm5
    405 ; AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
    406 ; AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm4
    407 ; AVX1-NEXT:    vpsraw $1, %xmm4, %xmm5
    408 ; AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
    409 ; AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm2
    410 ; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
    411 ; AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
    412 ; AVX1-NEXT:    vpsllw $5, %xmm1, %xmm1
    413 ; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
    414 ; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
    415 ; AVX1-NEXT:    vpsraw $4, %xmm4, %xmm5
    416 ; AVX1-NEXT:    vpblendvb %xmm3, %xmm5, %xmm4, %xmm4
    417 ; AVX1-NEXT:    vpsraw $2, %xmm4, %xmm5
    418 ; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    419 ; AVX1-NEXT:    vpblendvb %xmm3, %xmm5, %xmm4, %xmm4
    420 ; AVX1-NEXT:    vpsraw $1, %xmm4, %xmm5
    421 ; AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    422 ; AVX1-NEXT:    vpblendvb %xmm3, %xmm5, %xmm4, %xmm3
    423 ; AVX1-NEXT:    vpsrlw $8, %xmm3, %xmm3
    424 ; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
    425 ; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    426 ; AVX1-NEXT:    vpsraw $4, %xmm0, %xmm4
    427 ; AVX1-NEXT:    vpblendvb %xmm1, %xmm4, %xmm0, %xmm0
    428 ; AVX1-NEXT:    vpsraw $2, %xmm0, %xmm4
    429 ; AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
    430 ; AVX1-NEXT:    vpblendvb %xmm1, %xmm4, %xmm0, %xmm0
    431 ; AVX1-NEXT:    vpsraw $1, %xmm0, %xmm4
    432 ; AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
    433 ; AVX1-NEXT:    vpblendvb %xmm1, %xmm4, %xmm0, %xmm0
    434 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
    435 ; AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
    436 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    437 ; AVX1-NEXT:    retq
    438 ;
    439 ; AVX2-LABEL: var_shift_v32i8:
    440 ; AVX2:       # %bb.0:
    441 ; AVX2-NEXT:    vpsllw $5, %ymm1, %ymm1
    442 ; AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
    443 ; AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]
    444 ; AVX2-NEXT:    vpsraw $4, %ymm3, %ymm4
    445 ; AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
    446 ; AVX2-NEXT:    vpsraw $2, %ymm3, %ymm4
    447 ; AVX2-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
    448 ; AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
    449 ; AVX2-NEXT:    vpsraw $1, %ymm3, %ymm4
    450 ; AVX2-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
    451 ; AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm2
    452 ; AVX2-NEXT:    vpsrlw $8, %ymm2, %ymm2
    453 ; AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
    454 ; AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]
    455 ; AVX2-NEXT:    vpsraw $4, %ymm0, %ymm3
    456 ; AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    457 ; AVX2-NEXT:    vpsraw $2, %ymm0, %ymm3
    458 ; AVX2-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
    459 ; AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    460 ; AVX2-NEXT:    vpsraw $1, %ymm0, %ymm3
    461 ; AVX2-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
    462 ; AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    463 ; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
    464 ; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
    465 ; AVX2-NEXT:    retq
    466 ;
    467 ; XOPAVX1-LABEL: var_shift_v32i8:
    468 ; XOPAVX1:       # %bb.0:
    469 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    470 ; XOPAVX1-NEXT:    vpxor %xmm3, %xmm3, %xmm3
    471 ; XOPAVX1-NEXT:    vpsubb %xmm2, %xmm3, %xmm2
    472 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
    473 ; XOPAVX1-NEXT:    vpshab %xmm2, %xmm4, %xmm2
    474 ; XOPAVX1-NEXT:    vpsubb %xmm1, %xmm3, %xmm1
    475 ; XOPAVX1-NEXT:    vpshab %xmm1, %xmm0, %xmm0
    476 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    477 ; XOPAVX1-NEXT:    retq
    478 ;
    479 ; XOPAVX2-LABEL: var_shift_v32i8:
    480 ; XOPAVX2:       # %bb.0:
    481 ; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
    482 ; XOPAVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
    483 ; XOPAVX2-NEXT:    vpsubb %xmm2, %xmm3, %xmm2
    484 ; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
    485 ; XOPAVX2-NEXT:    vpshab %xmm2, %xmm4, %xmm2
    486 ; XOPAVX2-NEXT:    vpsubb %xmm1, %xmm3, %xmm1
    487 ; XOPAVX2-NEXT:    vpshab %xmm1, %xmm0, %xmm0
    488 ; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
    489 ; XOPAVX2-NEXT:    retq
    490 ;
    491 ; AVX512DQ-LABEL: var_shift_v32i8:
    492 ; AVX512DQ:       # %bb.0:
    493 ; AVX512DQ-NEXT:    vpsllw $5, %ymm1, %ymm1
    494 ; AVX512DQ-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
    495 ; AVX512DQ-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]
    496 ; AVX512DQ-NEXT:    vpsraw $4, %ymm3, %ymm4
    497 ; AVX512DQ-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
    498 ; AVX512DQ-NEXT:    vpsraw $2, %ymm3, %ymm4
    499 ; AVX512DQ-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
    500 ; AVX512DQ-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
    501 ; AVX512DQ-NEXT:    vpsraw $1, %ymm3, %ymm4
    502 ; AVX512DQ-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
    503 ; AVX512DQ-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm2
    504 ; AVX512DQ-NEXT:    vpsrlw $8, %ymm2, %ymm2
    505 ; AVX512DQ-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
    506 ; AVX512DQ-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]
    507 ; AVX512DQ-NEXT:    vpsraw $4, %ymm0, %ymm3
    508 ; AVX512DQ-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    509 ; AVX512DQ-NEXT:    vpsraw $2, %ymm0, %ymm3
    510 ; AVX512DQ-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
    511 ; AVX512DQ-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    512 ; AVX512DQ-NEXT:    vpsraw $1, %ymm0, %ymm3
    513 ; AVX512DQ-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
    514 ; AVX512DQ-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    515 ; AVX512DQ-NEXT:    vpsrlw $8, %ymm0, %ymm0
    516 ; AVX512DQ-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
    517 ; AVX512DQ-NEXT:    retq
    518 ;
    519 ; AVX512BW-LABEL: var_shift_v32i8:
    520 ; AVX512BW:       # %bb.0:
    521 ; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero
    522 ; AVX512BW-NEXT:    vpmovsxbw %ymm0, %zmm0
    523 ; AVX512BW-NEXT:    vpsravw %zmm1, %zmm0, %zmm0
    524 ; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
    525 ; AVX512BW-NEXT:    retq
    526 ;
    527 ; AVX512DQVL-LABEL: var_shift_v32i8:
    528 ; AVX512DQVL:       # %bb.0:
    529 ; AVX512DQVL-NEXT:    vpsllw $5, %ymm1, %ymm1
    530 ; AVX512DQVL-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
    531 ; AVX512DQVL-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]
    532 ; AVX512DQVL-NEXT:    vpsraw $4, %ymm3, %ymm4
    533 ; AVX512DQVL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
    534 ; AVX512DQVL-NEXT:    vpsraw $2, %ymm3, %ymm4
    535 ; AVX512DQVL-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
    536 ; AVX512DQVL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
    537 ; AVX512DQVL-NEXT:    vpsraw $1, %ymm3, %ymm4
    538 ; AVX512DQVL-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
    539 ; AVX512DQVL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm2
    540 ; AVX512DQVL-NEXT:    vpsrlw $8, %ymm2, %ymm2
    541 ; AVX512DQVL-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
    542 ; AVX512DQVL-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]
    543 ; AVX512DQVL-NEXT:    vpsraw $4, %ymm0, %ymm3
    544 ; AVX512DQVL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    545 ; AVX512DQVL-NEXT:    vpsraw $2, %ymm0, %ymm3
    546 ; AVX512DQVL-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
    547 ; AVX512DQVL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    548 ; AVX512DQVL-NEXT:    vpsraw $1, %ymm0, %ymm3
    549 ; AVX512DQVL-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
    550 ; AVX512DQVL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    551 ; AVX512DQVL-NEXT:    vpsrlw $8, %ymm0, %ymm0
    552 ; AVX512DQVL-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
    553 ; AVX512DQVL-NEXT:    retq
    554 ;
    555 ; AVX512BWVL-LABEL: var_shift_v32i8:
    556 ; AVX512BWVL:       # %bb.0:
    557 ; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero
    558 ; AVX512BWVL-NEXT:    vpmovsxbw %ymm0, %zmm0
    559 ; AVX512BWVL-NEXT:    vpsravw %zmm1, %zmm0, %zmm0
    560 ; AVX512BWVL-NEXT:    vpmovwb %zmm0, %ymm0
    561 ; AVX512BWVL-NEXT:    retq
    562 ;
    563 ; X32-AVX1-LABEL: var_shift_v32i8:
    564 ; X32-AVX1:       # %bb.0:
    565 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm2
    566 ; X32-AVX1-NEXT:    vpsllw $5, %xmm2, %xmm2
    567 ; X32-AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8],xmm2[8],xmm0[9],xmm2[9],xmm0[10],xmm2[10],xmm0[11],xmm2[11],xmm0[12],xmm2[12],xmm0[13],xmm2[13],xmm0[14],xmm2[14],xmm0[15],xmm2[15]
    568 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
    569 ; X32-AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8],xmm4[8],xmm0[9],xmm4[9],xmm0[10],xmm4[10],xmm0[11],xmm4[11],xmm0[12],xmm4[12],xmm0[13],xmm4[13],xmm0[14],xmm4[14],xmm0[15],xmm4[15]
    570 ; X32-AVX1-NEXT:    vpsraw $4, %xmm5, %xmm6
    571 ; X32-AVX1-NEXT:    vpblendvb %xmm3, %xmm6, %xmm5, %xmm5
    572 ; X32-AVX1-NEXT:    vpsraw $2, %xmm5, %xmm6
    573 ; X32-AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    574 ; X32-AVX1-NEXT:    vpblendvb %xmm3, %xmm6, %xmm5, %xmm5
    575 ; X32-AVX1-NEXT:    vpsraw $1, %xmm5, %xmm6
    576 ; X32-AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    577 ; X32-AVX1-NEXT:    vpblendvb %xmm3, %xmm6, %xmm5, %xmm3
    578 ; X32-AVX1-NEXT:    vpsrlw $8, %xmm3, %xmm3
    579 ; X32-AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm2 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7]
    580 ; X32-AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm4 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7]
    581 ; X32-AVX1-NEXT:    vpsraw $4, %xmm4, %xmm5
    582 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm4
    583 ; X32-AVX1-NEXT:    vpsraw $2, %xmm4, %xmm5
    584 ; X32-AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
    585 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm4
    586 ; X32-AVX1-NEXT:    vpsraw $1, %xmm4, %xmm5
    587 ; X32-AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
    588 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm2
    589 ; X32-AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
    590 ; X32-AVX1-NEXT:    vpackuswb %xmm3, %xmm2, %xmm2
    591 ; X32-AVX1-NEXT:    vpsllw $5, %xmm1, %xmm1
    592 ; X32-AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm3 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
    593 ; X32-AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
    594 ; X32-AVX1-NEXT:    vpsraw $4, %xmm4, %xmm5
    595 ; X32-AVX1-NEXT:    vpblendvb %xmm3, %xmm5, %xmm4, %xmm4
    596 ; X32-AVX1-NEXT:    vpsraw $2, %xmm4, %xmm5
    597 ; X32-AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    598 ; X32-AVX1-NEXT:    vpblendvb %xmm3, %xmm5, %xmm4, %xmm4
    599 ; X32-AVX1-NEXT:    vpsraw $1, %xmm4, %xmm5
    600 ; X32-AVX1-NEXT:    vpaddw %xmm3, %xmm3, %xmm3
    601 ; X32-AVX1-NEXT:    vpblendvb %xmm3, %xmm5, %xmm4, %xmm3
    602 ; X32-AVX1-NEXT:    vpsrlw $8, %xmm3, %xmm3
    603 ; X32-AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
    604 ; X32-AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    605 ; X32-AVX1-NEXT:    vpsraw $4, %xmm0, %xmm4
    606 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm4, %xmm0, %xmm0
    607 ; X32-AVX1-NEXT:    vpsraw $2, %xmm0, %xmm4
    608 ; X32-AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
    609 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm4, %xmm0, %xmm0
    610 ; X32-AVX1-NEXT:    vpsraw $1, %xmm0, %xmm4
    611 ; X32-AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
    612 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm4, %xmm0, %xmm0
    613 ; X32-AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
    614 ; X32-AVX1-NEXT:    vpackuswb %xmm3, %xmm0, %xmm0
    615 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    616 ; X32-AVX1-NEXT:    retl
    617 ;
    618 ; X32-AVX2-LABEL: var_shift_v32i8:
    619 ; X32-AVX2:       # %bb.0:
    620 ; X32-AVX2-NEXT:    vpsllw $5, %ymm1, %ymm1
    621 ; X32-AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
    622 ; X32-AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]
    623 ; X32-AVX2-NEXT:    vpsraw $4, %ymm3, %ymm4
    624 ; X32-AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
    625 ; X32-AVX2-NEXT:    vpsraw $2, %ymm3, %ymm4
    626 ; X32-AVX2-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
    627 ; X32-AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
    628 ; X32-AVX2-NEXT:    vpsraw $1, %ymm3, %ymm4
    629 ; X32-AVX2-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
    630 ; X32-AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm2
    631 ; X32-AVX2-NEXT:    vpsrlw $8, %ymm2, %ymm2
    632 ; X32-AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
    633 ; X32-AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]
    634 ; X32-AVX2-NEXT:    vpsraw $4, %ymm0, %ymm3
    635 ; X32-AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    636 ; X32-AVX2-NEXT:    vpsraw $2, %ymm0, %ymm3
    637 ; X32-AVX2-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
    638 ; X32-AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    639 ; X32-AVX2-NEXT:    vpsraw $1, %ymm0, %ymm3
    640 ; X32-AVX2-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
    641 ; X32-AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    642 ; X32-AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
    643 ; X32-AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
    644 ; X32-AVX2-NEXT:    retl
    645   %shift = ashr <32 x i8> %a, %b
    646   ret <32 x i8> %shift
    647 }
    648 
    649 ;
    650 ; Uniform Variable Shifts
    651 ;
    652 
    653 define <4 x i64> @splatvar_shift_v4i64(<4 x i64> %a, <4 x i64> %b) nounwind {
    654 ; AVX1-LABEL: splatvar_shift_v4i64:
    655 ; AVX1:       # %bb.0:
    656 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [9223372036854775808,9223372036854775808]
    657 ; AVX1-NEXT:    vpsrlq %xmm1, %xmm2, %xmm2
    658 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    659 ; AVX1-NEXT:    vpsrlq %xmm1, %xmm3, %xmm3
    660 ; AVX1-NEXT:    vpxor %xmm2, %xmm3, %xmm3
    661 ; AVX1-NEXT:    vpsubq %xmm2, %xmm3, %xmm3
    662 ; AVX1-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0
    663 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
    664 ; AVX1-NEXT:    vpsubq %xmm2, %xmm0, %xmm0
    665 ; AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0
    666 ; AVX1-NEXT:    retq
    667 ;
    668 ; AVX2-LABEL: splatvar_shift_v4i64:
    669 ; AVX2:       # %bb.0:
    670 ; AVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
    671 ; AVX2-NEXT:    vpsrlq %xmm1, %ymm2, %ymm2
    672 ; AVX2-NEXT:    vpsrlq %xmm1, %ymm0, %ymm0
    673 ; AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
    674 ; AVX2-NEXT:    vpsubq %ymm2, %ymm0, %ymm0
    675 ; AVX2-NEXT:    retq
    676 ;
    677 ; XOPAVX1-LABEL: splatvar_shift_v4i64:
    678 ; XOPAVX1:       # %bb.0:
    679 ; XOPAVX1-NEXT:    vmovddup {{.*#+}} xmm1 = xmm1[0,0]
    680 ; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
    681 ; XOPAVX1-NEXT:    vpsubq %xmm1, %xmm2, %xmm1
    682 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    683 ; XOPAVX1-NEXT:    vpshaq %xmm1, %xmm2, %xmm2
    684 ; XOPAVX1-NEXT:    vpshaq %xmm1, %xmm0, %xmm0
    685 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    686 ; XOPAVX1-NEXT:    retq
    687 ;
    688 ; XOPAVX2-LABEL: splatvar_shift_v4i64:
    689 ; XOPAVX2:       # %bb.0:
    690 ; XOPAVX2-NEXT:    vpbroadcastq {{.*#+}} ymm2 = [9223372036854775808,9223372036854775808,9223372036854775808,9223372036854775808]
    691 ; XOPAVX2-NEXT:    vpsrlq %xmm1, %ymm2, %ymm2
    692 ; XOPAVX2-NEXT:    vpsrlq %xmm1, %ymm0, %ymm0
    693 ; XOPAVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
    694 ; XOPAVX2-NEXT:    vpsubq %ymm2, %ymm0, %ymm0
    695 ; XOPAVX2-NEXT:    retq
    696 ;
    697 ; AVX512-LABEL: splatvar_shift_v4i64:
    698 ; AVX512:       # %bb.0:
    699 ; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
    700 ; AVX512-NEXT:    vpsraq %xmm1, %zmm0, %zmm0
    701 ; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
    702 ; AVX512-NEXT:    retq
    703 ;
    704 ; AVX512VL-LABEL: splatvar_shift_v4i64:
    705 ; AVX512VL:       # %bb.0:
    706 ; AVX512VL-NEXT:    vpsraq %xmm1, %ymm0, %ymm0
    707 ; AVX512VL-NEXT:    retq
    708 ;
    709 ; X32-AVX1-LABEL: splatvar_shift_v4i64:
    710 ; X32-AVX1:       # %bb.0:
    711 ; X32-AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,2147483648,0,2147483648]
    712 ; X32-AVX1-NEXT:    vpsrlq %xmm1, %xmm2, %xmm2
    713 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    714 ; X32-AVX1-NEXT:    vpsrlq %xmm1, %xmm3, %xmm3
    715 ; X32-AVX1-NEXT:    vpxor %xmm2, %xmm3, %xmm3
    716 ; X32-AVX1-NEXT:    vpsubq %xmm2, %xmm3, %xmm3
    717 ; X32-AVX1-NEXT:    vpsrlq %xmm1, %xmm0, %xmm0
    718 ; X32-AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
    719 ; X32-AVX1-NEXT:    vpsubq %xmm2, %xmm0, %xmm0
    720 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm3, %ymm0, %ymm0
    721 ; X32-AVX1-NEXT:    retl
    722 ;
    723 ; X32-AVX2-LABEL: splatvar_shift_v4i64:
    724 ; X32-AVX2:       # %bb.0:
    725 ; X32-AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,2147483648,0,2147483648,0,2147483648,0,2147483648]
    726 ; X32-AVX2-NEXT:    vpsrlq %xmm1, %ymm2, %ymm2
    727 ; X32-AVX2-NEXT:    vpsrlq %xmm1, %ymm0, %ymm0
    728 ; X32-AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
    729 ; X32-AVX2-NEXT:    vpsubq %ymm2, %ymm0, %ymm0
    730 ; X32-AVX2-NEXT:    retl
    731   %splat = shufflevector <4 x i64> %b, <4 x i64> undef, <4 x i32> zeroinitializer
    732   %shift = ashr <4 x i64> %a, %splat
    733   ret <4 x i64> %shift
    734 }
    735 
    736 define <8 x i32> @splatvar_shift_v8i32(<8 x i32> %a, <8 x i32> %b) nounwind {
    737 ; AVX1-LABEL: splatvar_shift_v8i32:
    738 ; AVX1:       # %bb.0:
    739 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    740 ; AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
    741 ; AVX1-NEXT:    vpsrad %xmm1, %xmm2, %xmm2
    742 ; AVX1-NEXT:    vpsrad %xmm1, %xmm0, %xmm0
    743 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    744 ; AVX1-NEXT:    retq
    745 ;
    746 ; AVX2-LABEL: splatvar_shift_v8i32:
    747 ; AVX2:       # %bb.0:
    748 ; AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
    749 ; AVX2-NEXT:    vpsrad %xmm1, %ymm0, %ymm0
    750 ; AVX2-NEXT:    retq
    751 ;
    752 ; XOPAVX1-LABEL: splatvar_shift_v8i32:
    753 ; XOPAVX1:       # %bb.0:
    754 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    755 ; XOPAVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
    756 ; XOPAVX1-NEXT:    vpsrad %xmm1, %xmm2, %xmm2
    757 ; XOPAVX1-NEXT:    vpsrad %xmm1, %xmm0, %xmm0
    758 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    759 ; XOPAVX1-NEXT:    retq
    760 ;
    761 ; XOPAVX2-LABEL: splatvar_shift_v8i32:
    762 ; XOPAVX2:       # %bb.0:
    763 ; XOPAVX2-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
    764 ; XOPAVX2-NEXT:    vpsrad %xmm1, %ymm0, %ymm0
    765 ; XOPAVX2-NEXT:    retq
    766 ;
    767 ; AVX512-LABEL: splatvar_shift_v8i32:
    768 ; AVX512:       # %bb.0:
    769 ; AVX512-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
    770 ; AVX512-NEXT:    vpsrad %xmm1, %ymm0, %ymm0
    771 ; AVX512-NEXT:    retq
    772 ;
    773 ; AVX512VL-LABEL: splatvar_shift_v8i32:
    774 ; AVX512VL:       # %bb.0:
    775 ; AVX512VL-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
    776 ; AVX512VL-NEXT:    vpsrad %xmm1, %ymm0, %ymm0
    777 ; AVX512VL-NEXT:    retq
    778 ;
    779 ; X32-AVX1-LABEL: splatvar_shift_v8i32:
    780 ; X32-AVX1:       # %bb.0:
    781 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    782 ; X32-AVX1-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
    783 ; X32-AVX1-NEXT:    vpsrad %xmm1, %xmm2, %xmm2
    784 ; X32-AVX1-NEXT:    vpsrad %xmm1, %xmm0, %xmm0
    785 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    786 ; X32-AVX1-NEXT:    retl
    787 ;
    788 ; X32-AVX2-LABEL: splatvar_shift_v8i32:
    789 ; X32-AVX2:       # %bb.0:
    790 ; X32-AVX2-NEXT:    vpmovzxdq {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero
    791 ; X32-AVX2-NEXT:    vpsrad %xmm1, %ymm0, %ymm0
    792 ; X32-AVX2-NEXT:    retl
    793   %splat = shufflevector <8 x i32> %b, <8 x i32> undef, <8 x i32> zeroinitializer
    794   %shift = ashr <8 x i32> %a, %splat
    795   ret <8 x i32> %shift
    796 }
    797 
    798 define <16 x i16> @splatvar_shift_v16i16(<16 x i16> %a, <16 x i16> %b) nounwind {
    799 ; AVX1-LABEL: splatvar_shift_v16i16:
    800 ; AVX1:       # %bb.0:
    801 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    802 ; AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero
    803 ; AVX1-NEXT:    vpsraw %xmm1, %xmm2, %xmm2
    804 ; AVX1-NEXT:    vpsraw %xmm1, %xmm0, %xmm0
    805 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    806 ; AVX1-NEXT:    retq
    807 ;
    808 ; AVX2-LABEL: splatvar_shift_v16i16:
    809 ; AVX2:       # %bb.0:
    810 ; AVX2-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero
    811 ; AVX2-NEXT:    vpsraw %xmm1, %ymm0, %ymm0
    812 ; AVX2-NEXT:    retq
    813 ;
    814 ; XOPAVX1-LABEL: splatvar_shift_v16i16:
    815 ; XOPAVX1:       # %bb.0:
    816 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    817 ; XOPAVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero
    818 ; XOPAVX1-NEXT:    vpsraw %xmm1, %xmm2, %xmm2
    819 ; XOPAVX1-NEXT:    vpsraw %xmm1, %xmm0, %xmm0
    820 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    821 ; XOPAVX1-NEXT:    retq
    822 ;
    823 ; XOPAVX2-LABEL: splatvar_shift_v16i16:
    824 ; XOPAVX2:       # %bb.0:
    825 ; XOPAVX2-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero
    826 ; XOPAVX2-NEXT:    vpsraw %xmm1, %ymm0, %ymm0
    827 ; XOPAVX2-NEXT:    retq
    828 ;
    829 ; AVX512-LABEL: splatvar_shift_v16i16:
    830 ; AVX512:       # %bb.0:
    831 ; AVX512-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero
    832 ; AVX512-NEXT:    vpsraw %xmm1, %ymm0, %ymm0
    833 ; AVX512-NEXT:    retq
    834 ;
    835 ; AVX512VL-LABEL: splatvar_shift_v16i16:
    836 ; AVX512VL:       # %bb.0:
    837 ; AVX512VL-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero
    838 ; AVX512VL-NEXT:    vpsraw %xmm1, %ymm0, %ymm0
    839 ; AVX512VL-NEXT:    retq
    840 ;
    841 ; X32-AVX1-LABEL: splatvar_shift_v16i16:
    842 ; X32-AVX1:       # %bb.0:
    843 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    844 ; X32-AVX1-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero
    845 ; X32-AVX1-NEXT:    vpsraw %xmm1, %xmm2, %xmm2
    846 ; X32-AVX1-NEXT:    vpsraw %xmm1, %xmm0, %xmm0
    847 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    848 ; X32-AVX1-NEXT:    retl
    849 ;
    850 ; X32-AVX2-LABEL: splatvar_shift_v16i16:
    851 ; X32-AVX2:       # %bb.0:
    852 ; X32-AVX2-NEXT:    vpmovzxwq {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero
    853 ; X32-AVX2-NEXT:    vpsraw %xmm1, %ymm0, %ymm0
    854 ; X32-AVX2-NEXT:    retl
    855   %splat = shufflevector <16 x i16> %b, <16 x i16> undef, <16 x i32> zeroinitializer
    856   %shift = ashr <16 x i16> %a, %splat
    857   ret <16 x i16> %shift
    858 }
    859 
    860 define <32 x i8> @splatvar_shift_v32i8(<32 x i8> %a, <32 x i8> %b) nounwind {
    861 ; AVX1-LABEL: splatvar_shift_v32i8:
    862 ; AVX1:       # %bb.0:
    863 ; AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
    864 ; AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
    865 ; AVX1-NEXT:    vpsllw $5, %xmm1, %xmm1
    866 ; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
    867 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
    868 ; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15]
    869 ; AVX1-NEXT:    vpsraw $4, %xmm4, %xmm5
    870 ; AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm4
    871 ; AVX1-NEXT:    vpsraw $2, %xmm4, %xmm5
    872 ; AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm6
    873 ; AVX1-NEXT:    vpblendvb %xmm6, %xmm5, %xmm4, %xmm4
    874 ; AVX1-NEXT:    vpsraw $1, %xmm4, %xmm5
    875 ; AVX1-NEXT:    vpaddw %xmm6, %xmm6, %xmm9
    876 ; AVX1-NEXT:    vpblendvb %xmm9, %xmm5, %xmm4, %xmm4
    877 ; AVX1-NEXT:    vpsrlw $8, %xmm4, %xmm8
    878 ; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
    879 ; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
    880 ; AVX1-NEXT:    vpsraw $4, %xmm3, %xmm5
    881 ; AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm3, %xmm3
    882 ; AVX1-NEXT:    vpsraw $2, %xmm3, %xmm5
    883 ; AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm4
    884 ; AVX1-NEXT:    vpblendvb %xmm4, %xmm5, %xmm3, %xmm3
    885 ; AVX1-NEXT:    vpsraw $1, %xmm3, %xmm5
    886 ; AVX1-NEXT:    vpaddw %xmm4, %xmm4, %xmm7
    887 ; AVX1-NEXT:    vpblendvb %xmm7, %xmm5, %xmm3, %xmm3
    888 ; AVX1-NEXT:    vpsrlw $8, %xmm3, %xmm3
    889 ; AVX1-NEXT:    vpackuswb %xmm8, %xmm3, %xmm8
    890 ; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
    891 ; AVX1-NEXT:    vpsraw $4, %xmm5, %xmm3
    892 ; AVX1-NEXT:    vpblendvb %xmm2, %xmm3, %xmm5, %xmm2
    893 ; AVX1-NEXT:    vpsraw $2, %xmm2, %xmm3
    894 ; AVX1-NEXT:    vpblendvb %xmm6, %xmm3, %xmm2, %xmm2
    895 ; AVX1-NEXT:    vpsraw $1, %xmm2, %xmm3
    896 ; AVX1-NEXT:    vpblendvb %xmm9, %xmm3, %xmm2, %xmm2
    897 ; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
    898 ; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    899 ; AVX1-NEXT:    vpsraw $4, %xmm0, %xmm3
    900 ; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
    901 ; AVX1-NEXT:    vpsraw $2, %xmm0, %xmm1
    902 ; AVX1-NEXT:    vpblendvb %xmm4, %xmm1, %xmm0, %xmm0
    903 ; AVX1-NEXT:    vpsraw $1, %xmm0, %xmm1
    904 ; AVX1-NEXT:    vpblendvb %xmm7, %xmm1, %xmm0, %xmm0
    905 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
    906 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
    907 ; AVX1-NEXT:    vinsertf128 $1, %xmm8, %ymm0, %ymm0
    908 ; AVX1-NEXT:    retq
    909 ;
    910 ; AVX2-LABEL: splatvar_shift_v32i8:
    911 ; AVX2:       # %bb.0:
    912 ; AVX2-NEXT:    vpbroadcastb %xmm1, %ymm1
    913 ; AVX2-NEXT:    vpsllw $5, %ymm1, %ymm1
    914 ; AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
    915 ; AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]
    916 ; AVX2-NEXT:    vpsraw $4, %ymm3, %ymm4
    917 ; AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
    918 ; AVX2-NEXT:    vpsraw $2, %ymm3, %ymm4
    919 ; AVX2-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
    920 ; AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
    921 ; AVX2-NEXT:    vpsraw $1, %ymm3, %ymm4
    922 ; AVX2-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
    923 ; AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm2
    924 ; AVX2-NEXT:    vpsrlw $8, %ymm2, %ymm2
    925 ; AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
    926 ; AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]
    927 ; AVX2-NEXT:    vpsraw $4, %ymm0, %ymm3
    928 ; AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    929 ; AVX2-NEXT:    vpsraw $2, %ymm0, %ymm3
    930 ; AVX2-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
    931 ; AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    932 ; AVX2-NEXT:    vpsraw $1, %ymm0, %ymm3
    933 ; AVX2-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
    934 ; AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    935 ; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
    936 ; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
    937 ; AVX2-NEXT:    retq
    938 ;
    939 ; XOPAVX1-LABEL: splatvar_shift_v32i8:
    940 ; XOPAVX1:       # %bb.0:
    941 ; XOPAVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
    942 ; XOPAVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
    943 ; XOPAVX1-NEXT:    vpsubb %xmm1, %xmm2, %xmm1
    944 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm2
    945 ; XOPAVX1-NEXT:    vpshab %xmm1, %xmm2, %xmm2
    946 ; XOPAVX1-NEXT:    vpshab %xmm1, %xmm0, %xmm0
    947 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm0, %ymm0
    948 ; XOPAVX1-NEXT:    retq
    949 ;
    950 ; XOPAVX2-LABEL: splatvar_shift_v32i8:
    951 ; XOPAVX2:       # %bb.0:
    952 ; XOPAVX2-NEXT:    vpbroadcastb %xmm1, %ymm1
    953 ; XOPAVX2-NEXT:    vextracti128 $1, %ymm1, %xmm2
    954 ; XOPAVX2-NEXT:    vpxor %xmm3, %xmm3, %xmm3
    955 ; XOPAVX2-NEXT:    vpsubb %xmm2, %xmm3, %xmm2
    956 ; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm4
    957 ; XOPAVX2-NEXT:    vpshab %xmm2, %xmm4, %xmm2
    958 ; XOPAVX2-NEXT:    vpsubb %xmm1, %xmm3, %xmm1
    959 ; XOPAVX2-NEXT:    vpshab %xmm1, %xmm0, %xmm0
    960 ; XOPAVX2-NEXT:    vinserti128 $1, %xmm2, %ymm0, %ymm0
    961 ; XOPAVX2-NEXT:    retq
    962 ;
    963 ; AVX512DQ-LABEL: splatvar_shift_v32i8:
    964 ; AVX512DQ:       # %bb.0:
    965 ; AVX512DQ-NEXT:    vpbroadcastb %xmm1, %ymm1
    966 ; AVX512DQ-NEXT:    vpsllw $5, %ymm1, %ymm1
    967 ; AVX512DQ-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
    968 ; AVX512DQ-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]
    969 ; AVX512DQ-NEXT:    vpsraw $4, %ymm3, %ymm4
    970 ; AVX512DQ-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
    971 ; AVX512DQ-NEXT:    vpsraw $2, %ymm3, %ymm4
    972 ; AVX512DQ-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
    973 ; AVX512DQ-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
    974 ; AVX512DQ-NEXT:    vpsraw $1, %ymm3, %ymm4
    975 ; AVX512DQ-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
    976 ; AVX512DQ-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm2
    977 ; AVX512DQ-NEXT:    vpsrlw $8, %ymm2, %ymm2
    978 ; AVX512DQ-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
    979 ; AVX512DQ-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]
    980 ; AVX512DQ-NEXT:    vpsraw $4, %ymm0, %ymm3
    981 ; AVX512DQ-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    982 ; AVX512DQ-NEXT:    vpsraw $2, %ymm0, %ymm3
    983 ; AVX512DQ-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
    984 ; AVX512DQ-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    985 ; AVX512DQ-NEXT:    vpsraw $1, %ymm0, %ymm3
    986 ; AVX512DQ-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
    987 ; AVX512DQ-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
    988 ; AVX512DQ-NEXT:    vpsrlw $8, %ymm0, %ymm0
    989 ; AVX512DQ-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
    990 ; AVX512DQ-NEXT:    retq
    991 ;
    992 ; AVX512BW-LABEL: splatvar_shift_v32i8:
    993 ; AVX512BW:       # %bb.0:
    994 ; AVX512BW-NEXT:    vpbroadcastb %xmm1, %ymm1
    995 ; AVX512BW-NEXT:    vpmovsxbw %ymm0, %zmm0
    996 ; AVX512BW-NEXT:    vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero
    997 ; AVX512BW-NEXT:    vpsravw %zmm1, %zmm0, %zmm0
    998 ; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
    999 ; AVX512BW-NEXT:    retq
   1000 ;
   1001 ; AVX512DQVL-LABEL: splatvar_shift_v32i8:
   1002 ; AVX512DQVL:       # %bb.0:
   1003 ; AVX512DQVL-NEXT:    vpbroadcastb %xmm1, %ymm1
   1004 ; AVX512DQVL-NEXT:    vpsllw $5, %ymm1, %ymm1
   1005 ; AVX512DQVL-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
   1006 ; AVX512DQVL-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]
   1007 ; AVX512DQVL-NEXT:    vpsraw $4, %ymm3, %ymm4
   1008 ; AVX512DQVL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
   1009 ; AVX512DQVL-NEXT:    vpsraw $2, %ymm3, %ymm4
   1010 ; AVX512DQVL-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
   1011 ; AVX512DQVL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
   1012 ; AVX512DQVL-NEXT:    vpsraw $1, %ymm3, %ymm4
   1013 ; AVX512DQVL-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
   1014 ; AVX512DQVL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm2
   1015 ; AVX512DQVL-NEXT:    vpsrlw $8, %ymm2, %ymm2
   1016 ; AVX512DQVL-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
   1017 ; AVX512DQVL-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]
   1018 ; AVX512DQVL-NEXT:    vpsraw $4, %ymm0, %ymm3
   1019 ; AVX512DQVL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1020 ; AVX512DQVL-NEXT:    vpsraw $2, %ymm0, %ymm3
   1021 ; AVX512DQVL-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
   1022 ; AVX512DQVL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1023 ; AVX512DQVL-NEXT:    vpsraw $1, %ymm0, %ymm3
   1024 ; AVX512DQVL-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
   1025 ; AVX512DQVL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1026 ; AVX512DQVL-NEXT:    vpsrlw $8, %ymm0, %ymm0
   1027 ; AVX512DQVL-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
   1028 ; AVX512DQVL-NEXT:    retq
   1029 ;
   1030 ; AVX512BWVL-LABEL: splatvar_shift_v32i8:
   1031 ; AVX512BWVL:       # %bb.0:
   1032 ; AVX512BWVL-NEXT:    vpbroadcastb %xmm1, %ymm1
   1033 ; AVX512BWVL-NEXT:    vpmovsxbw %ymm0, %zmm0
   1034 ; AVX512BWVL-NEXT:    vpmovzxbw {{.*#+}} zmm1 = ymm1[0],zero,ymm1[1],zero,ymm1[2],zero,ymm1[3],zero,ymm1[4],zero,ymm1[5],zero,ymm1[6],zero,ymm1[7],zero,ymm1[8],zero,ymm1[9],zero,ymm1[10],zero,ymm1[11],zero,ymm1[12],zero,ymm1[13],zero,ymm1[14],zero,ymm1[15],zero,ymm1[16],zero,ymm1[17],zero,ymm1[18],zero,ymm1[19],zero,ymm1[20],zero,ymm1[21],zero,ymm1[22],zero,ymm1[23],zero,ymm1[24],zero,ymm1[25],zero,ymm1[26],zero,ymm1[27],zero,ymm1[28],zero,ymm1[29],zero,ymm1[30],zero,ymm1[31],zero
   1035 ; AVX512BWVL-NEXT:    vpsravw %zmm1, %zmm0, %zmm0
   1036 ; AVX512BWVL-NEXT:    vpmovwb %zmm0, %ymm0
   1037 ; AVX512BWVL-NEXT:    retq
   1038 ;
   1039 ; X32-AVX1-LABEL: splatvar_shift_v32i8:
   1040 ; X32-AVX1:       # %bb.0:
   1041 ; X32-AVX1-NEXT:    vpxor %xmm2, %xmm2, %xmm2
   1042 ; X32-AVX1-NEXT:    vpshufb %xmm2, %xmm1, %xmm1
   1043 ; X32-AVX1-NEXT:    vpsllw $5, %xmm1, %xmm1
   1044 ; X32-AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
   1045 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1046 ; X32-AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15]
   1047 ; X32-AVX1-NEXT:    vpsraw $4, %xmm4, %xmm5
   1048 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm4
   1049 ; X32-AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
   1050 ; X32-AVX1-NEXT:    vpsraw $4, %xmm5, %xmm6
   1051 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm6, %xmm5, %xmm5
   1052 ; X32-AVX1-NEXT:    vpsraw $2, %xmm4, %xmm6
   1053 ; X32-AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
   1054 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm6, %xmm4, %xmm4
   1055 ; X32-AVX1-NEXT:    vpsraw $2, %xmm5, %xmm6
   1056 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm6, %xmm5, %xmm5
   1057 ; X32-AVX1-NEXT:    vpsraw $1, %xmm4, %xmm6
   1058 ; X32-AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
   1059 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm6, %xmm4, %xmm4
   1060 ; X32-AVX1-NEXT:    vpsraw $1, %xmm5, %xmm6
   1061 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm6, %xmm5, %xmm2
   1062 ; X32-AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
   1063 ; X32-AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
   1064 ; X32-AVX1-NEXT:    vpsraw $4, %xmm3, %xmm5
   1065 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm3, %xmm3
   1066 ; X32-AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   1067 ; X32-AVX1-NEXT:    vpsraw $4, %xmm0, %xmm5
   1068 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm0, %xmm0
   1069 ; X32-AVX1-NEXT:    vpsraw $2, %xmm3, %xmm5
   1070 ; X32-AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
   1071 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm3, %xmm3
   1072 ; X32-AVX1-NEXT:    vpsraw $2, %xmm0, %xmm5
   1073 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm0, %xmm0
   1074 ; X32-AVX1-NEXT:    vpsraw $1, %xmm3, %xmm5
   1075 ; X32-AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
   1076 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm3, %xmm3
   1077 ; X32-AVX1-NEXT:    vpsraw $1, %xmm0, %xmm5
   1078 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm0, %xmm0
   1079 ; X32-AVX1-NEXT:    vpsrlw $8, %xmm4, %xmm1
   1080 ; X32-AVX1-NEXT:    vpsrlw $8, %xmm3, %xmm3
   1081 ; X32-AVX1-NEXT:    vpackuswb %xmm1, %xmm3, %xmm1
   1082 ; X32-AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
   1083 ; X32-AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
   1084 ; X32-AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
   1085 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1086 ; X32-AVX1-NEXT:    retl
   1087 ;
   1088 ; X32-AVX2-LABEL: splatvar_shift_v32i8:
   1089 ; X32-AVX2:       # %bb.0:
   1090 ; X32-AVX2-NEXT:    vpbroadcastb %xmm1, %ymm1
   1091 ; X32-AVX2-NEXT:    vpsllw $5, %ymm1, %ymm1
   1092 ; X32-AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
   1093 ; X32-AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]
   1094 ; X32-AVX2-NEXT:    vpsraw $4, %ymm3, %ymm4
   1095 ; X32-AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
   1096 ; X32-AVX2-NEXT:    vpsraw $2, %ymm3, %ymm4
   1097 ; X32-AVX2-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
   1098 ; X32-AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
   1099 ; X32-AVX2-NEXT:    vpsraw $1, %ymm3, %ymm4
   1100 ; X32-AVX2-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
   1101 ; X32-AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm2
   1102 ; X32-AVX2-NEXT:    vpsrlw $8, %ymm2, %ymm2
   1103 ; X32-AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
   1104 ; X32-AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]
   1105 ; X32-AVX2-NEXT:    vpsraw $4, %ymm0, %ymm3
   1106 ; X32-AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1107 ; X32-AVX2-NEXT:    vpsraw $2, %ymm0, %ymm3
   1108 ; X32-AVX2-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
   1109 ; X32-AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1110 ; X32-AVX2-NEXT:    vpsraw $1, %ymm0, %ymm3
   1111 ; X32-AVX2-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
   1112 ; X32-AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1113 ; X32-AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
   1114 ; X32-AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
   1115 ; X32-AVX2-NEXT:    retl
   1116   %splat = shufflevector <32 x i8> %b, <32 x i8> undef, <32 x i32> zeroinitializer
   1117   %shift = ashr <32 x i8> %a, %splat
   1118   ret <32 x i8> %shift
   1119 }
   1120 
   1121 ;
   1122 ; Constant Shifts
   1123 ;
   1124 
   1125 define <4 x i64> @constant_shift_v4i64(<4 x i64> %a) nounwind {
   1126 ; AVX1-LABEL: constant_shift_v4i64:
   1127 ; AVX1:       # %bb.0:
   1128 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   1129 ; AVX1-NEXT:    vpsrlq $62, %xmm1, %xmm2
   1130 ; AVX1-NEXT:    vpsrlq $31, %xmm1, %xmm1
   1131 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]
   1132 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [4294967296,2]
   1133 ; AVX1-NEXT:    vpxor %xmm2, %xmm1, %xmm1
   1134 ; AVX1-NEXT:    vpsubq %xmm2, %xmm1, %xmm1
   1135 ; AVX1-NEXT:    vpsrlq $7, %xmm0, %xmm2
   1136 ; AVX1-NEXT:    vpsrlq $1, %xmm0, %xmm0
   1137 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
   1138 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [4611686018427387904,72057594037927936]
   1139 ; AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
   1140 ; AVX1-NEXT:    vpsubq %xmm2, %xmm0, %xmm0
   1141 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1142 ; AVX1-NEXT:    retq
   1143 ;
   1144 ; AVX2-LABEL: constant_shift_v4i64:
   1145 ; AVX2:       # %bb.0:
   1146 ; AVX2-NEXT:    vpsrlvq {{.*}}(%rip), %ymm0, %ymm0
   1147 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [4611686018427387904,72057594037927936,4294967296,2]
   1148 ; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
   1149 ; AVX2-NEXT:    vpsubq %ymm1, %ymm0, %ymm0
   1150 ; AVX2-NEXT:    retq
   1151 ;
   1152 ; XOPAVX1-LABEL: constant_shift_v4i64:
   1153 ; XOPAVX1:       # %bb.0:
   1154 ; XOPAVX1-NEXT:    vpshaq {{.*}}(%rip), %xmm0, %xmm1
   1155 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   1156 ; XOPAVX1-NEXT:    vpshaq {{.*}}(%rip), %xmm0, %xmm0
   1157 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1158 ; XOPAVX1-NEXT:    retq
   1159 ;
   1160 ; XOPAVX2-LABEL: constant_shift_v4i64:
   1161 ; XOPAVX2:       # %bb.0:
   1162 ; XOPAVX2-NEXT:    vpsrlvq {{.*}}(%rip), %ymm0, %ymm0
   1163 ; XOPAVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [4611686018427387904,72057594037927936,4294967296,2]
   1164 ; XOPAVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
   1165 ; XOPAVX2-NEXT:    vpsubq %ymm1, %ymm0, %ymm0
   1166 ; XOPAVX2-NEXT:    retq
   1167 ;
   1168 ; AVX512-LABEL: constant_shift_v4i64:
   1169 ; AVX512:       # %bb.0:
   1170 ; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
   1171 ; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [1,7,31,62]
   1172 ; AVX512-NEXT:    vpsravq %zmm1, %zmm0, %zmm0
   1173 ; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
   1174 ; AVX512-NEXT:    retq
   1175 ;
   1176 ; AVX512VL-LABEL: constant_shift_v4i64:
   1177 ; AVX512VL:       # %bb.0:
   1178 ; AVX512VL-NEXT:    vpsravq {{.*}}(%rip), %ymm0, %ymm0
   1179 ; AVX512VL-NEXT:    retq
   1180 ;
   1181 ; X32-AVX1-LABEL: constant_shift_v4i64:
   1182 ; X32-AVX1:       # %bb.0:
   1183 ; X32-AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [31,0,62,0]
   1184 ; X32-AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,2147483648,0,2147483648]
   1185 ; X32-AVX1-NEXT:    vpsrlq %xmm1, %xmm2, %xmm3
   1186 ; X32-AVX1-NEXT:    vpshufd {{.*#+}} xmm4 = xmm1[2,3,0,1]
   1187 ; X32-AVX1-NEXT:    vpsrlq %xmm4, %xmm2, %xmm5
   1188 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm3 = xmm3[0,1,2,3],xmm5[4,5,6,7]
   1189 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm5
   1190 ; X32-AVX1-NEXT:    vpsrlq %xmm4, %xmm5, %xmm4
   1191 ; X32-AVX1-NEXT:    vpsrlq %xmm1, %xmm5, %xmm1
   1192 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm4[4,5,6,7]
   1193 ; X32-AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm1
   1194 ; X32-AVX1-NEXT:    vpsubq %xmm3, %xmm1, %xmm1
   1195 ; X32-AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [1,0,7,0]
   1196 ; X32-AVX1-NEXT:    vpsrlq %xmm3, %xmm2, %xmm4
   1197 ; X32-AVX1-NEXT:    vpshufd {{.*#+}} xmm5 = xmm3[2,3,0,1]
   1198 ; X32-AVX1-NEXT:    vpsrlq %xmm5, %xmm2, %xmm2
   1199 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm4[0,1,2,3],xmm2[4,5,6,7]
   1200 ; X32-AVX1-NEXT:    vpsrlq %xmm5, %xmm0, %xmm4
   1201 ; X32-AVX1-NEXT:    vpsrlq %xmm3, %xmm0, %xmm0
   1202 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm4[4,5,6,7]
   1203 ; X32-AVX1-NEXT:    vpxor %xmm2, %xmm0, %xmm0
   1204 ; X32-AVX1-NEXT:    vpsubq %xmm2, %xmm0, %xmm0
   1205 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1206 ; X32-AVX1-NEXT:    retl
   1207 ;
   1208 ; X32-AVX2-LABEL: constant_shift_v4i64:
   1209 ; X32-AVX2:       # %bb.0:
   1210 ; X32-AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [1,0,7,0,31,0,62,0]
   1211 ; X32-AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,2147483648,0,2147483648,0,2147483648,0,2147483648]
   1212 ; X32-AVX2-NEXT:    vpsrlvq %ymm1, %ymm2, %ymm3
   1213 ; X32-AVX2-NEXT:    vpxor %ymm2, %ymm0, %ymm0
   1214 ; X32-AVX2-NEXT:    vpsrlvq %ymm1, %ymm0, %ymm0
   1215 ; X32-AVX2-NEXT:    vpsubq %ymm3, %ymm0, %ymm0
   1216 ; X32-AVX2-NEXT:    retl
   1217   %shift = ashr <4 x i64> %a, <i64 1, i64 7, i64 31, i64 62>
   1218   ret <4 x i64> %shift
   1219 }
   1220 
   1221 define <8 x i32> @constant_shift_v8i32(<8 x i32> %a) nounwind {
   1222 ; AVX1-LABEL: constant_shift_v8i32:
   1223 ; AVX1:       # %bb.0:
   1224 ; AVX1-NEXT:    vpsrad $7, %xmm0, %xmm1
   1225 ; AVX1-NEXT:    vpsrad $5, %xmm0, %xmm2
   1226 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1,2,3],xmm1[4,5,6,7]
   1227 ; AVX1-NEXT:    vpsrad $6, %xmm0, %xmm2
   1228 ; AVX1-NEXT:    vpsrad $4, %xmm0, %xmm3
   1229 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
   1230 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1],xmm1[2,3],xmm2[4,5],xmm1[6,7]
   1231 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   1232 ; AVX1-NEXT:    vpsrad $7, %xmm0, %xmm2
   1233 ; AVX1-NEXT:    vpsrad $9, %xmm0, %xmm3
   1234 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
   1235 ; AVX1-NEXT:    vpsrad $8, %xmm0, %xmm0
   1236 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
   1237 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1238 ; AVX1-NEXT:    retq
   1239 ;
   1240 ; AVX2-LABEL: constant_shift_v8i32:
   1241 ; AVX2:       # %bb.0:
   1242 ; AVX2-NEXT:    vpsravd {{.*}}(%rip), %ymm0, %ymm0
   1243 ; AVX2-NEXT:    retq
   1244 ;
   1245 ; XOPAVX1-LABEL: constant_shift_v8i32:
   1246 ; XOPAVX1:       # %bb.0:
   1247 ; XOPAVX1-NEXT:    vpshad {{.*}}(%rip), %xmm0, %xmm1
   1248 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   1249 ; XOPAVX1-NEXT:    vpshad {{.*}}(%rip), %xmm0, %xmm0
   1250 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1251 ; XOPAVX1-NEXT:    retq
   1252 ;
   1253 ; XOPAVX2-LABEL: constant_shift_v8i32:
   1254 ; XOPAVX2:       # %bb.0:
   1255 ; XOPAVX2-NEXT:    vpsravd {{.*}}(%rip), %ymm0, %ymm0
   1256 ; XOPAVX2-NEXT:    retq
   1257 ;
   1258 ; AVX512-LABEL: constant_shift_v8i32:
   1259 ; AVX512:       # %bb.0:
   1260 ; AVX512-NEXT:    vpsravd {{.*}}(%rip), %ymm0, %ymm0
   1261 ; AVX512-NEXT:    retq
   1262 ;
   1263 ; AVX512VL-LABEL: constant_shift_v8i32:
   1264 ; AVX512VL:       # %bb.0:
   1265 ; AVX512VL-NEXT:    vpsravd {{.*}}(%rip), %ymm0, %ymm0
   1266 ; AVX512VL-NEXT:    retq
   1267 ;
   1268 ; X32-AVX1-LABEL: constant_shift_v8i32:
   1269 ; X32-AVX1:       # %bb.0:
   1270 ; X32-AVX1-NEXT:    vpsrad $7, %xmm0, %xmm1
   1271 ; X32-AVX1-NEXT:    vpsrad $5, %xmm0, %xmm2
   1272 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1,2,3],xmm1[4,5,6,7]
   1273 ; X32-AVX1-NEXT:    vpsrad $6, %xmm0, %xmm2
   1274 ; X32-AVX1-NEXT:    vpsrad $4, %xmm0, %xmm3
   1275 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
   1276 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm2[0,1],xmm1[2,3],xmm2[4,5],xmm1[6,7]
   1277 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   1278 ; X32-AVX1-NEXT:    vpsrad $7, %xmm0, %xmm2
   1279 ; X32-AVX1-NEXT:    vpsrad $9, %xmm0, %xmm3
   1280 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm2 = xmm3[0,1,2,3],xmm2[4,5,6,7]
   1281 ; X32-AVX1-NEXT:    vpsrad $8, %xmm0, %xmm0
   1282 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
   1283 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1284 ; X32-AVX1-NEXT:    retl
   1285 ;
   1286 ; X32-AVX2-LABEL: constant_shift_v8i32:
   1287 ; X32-AVX2:       # %bb.0:
   1288 ; X32-AVX2-NEXT:    vpsravd {{\.LCPI.*}}, %ymm0, %ymm0
   1289 ; X32-AVX2-NEXT:    retl
   1290   %shift = ashr <8 x i32> %a, <i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 8, i32 7>
   1291   ret <8 x i32> %shift
   1292 }
   1293 
   1294 define <16 x i16> @constant_shift_v16i16(<16 x i16> %a) nounwind {
   1295 ; AVX1-LABEL: constant_shift_v16i16:
   1296 ; AVX1:       # %bb.0:
   1297 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   1298 ; AVX1-NEXT:    vpsraw $8, %xmm1, %xmm1
   1299 ; AVX1-NEXT:    vpsraw $4, %xmm1, %xmm2
   1300 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]
   1301 ; AVX1-NEXT:    vpsraw $2, %xmm1, %xmm2
   1302 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
   1303 ; AVX1-NEXT:    vpsraw $1, %xmm1, %xmm2
   1304 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
   1305 ; AVX1-NEXT:    vpsraw $4, %xmm0, %xmm2
   1306 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
   1307 ; AVX1-NEXT:    vpsraw $2, %xmm0, %xmm2
   1308 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
   1309 ; AVX1-NEXT:    vpsraw $1, %xmm0, %xmm2
   1310 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
   1311 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1312 ; AVX1-NEXT:    retq
   1313 ;
   1314 ; AVX2-LABEL: constant_shift_v16i16:
   1315 ; AVX2:       # %bb.0:
   1316 ; AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   1317 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
   1318 ; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm3 = ymm2[4],ymm1[4],ymm2[5],ymm1[5],ymm2[6],ymm1[6],ymm2[7],ymm1[7],ymm2[12],ymm1[12],ymm2[13],ymm1[13],ymm2[14],ymm1[14],ymm2[15],ymm1[15]
   1319 ; AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm4 = ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15]
   1320 ; AVX2-NEXT:    vpsravd %ymm3, %ymm4, %ymm3
   1321 ; AVX2-NEXT:    vpsrld $16, %ymm3, %ymm3
   1322 ; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm2 = ymm2[0],ymm1[0],ymm2[1],ymm1[1],ymm2[2],ymm1[2],ymm2[3],ymm1[3],ymm2[8],ymm1[8],ymm2[9],ymm1[9],ymm2[10],ymm1[10],ymm2[11],ymm1[11]
   1323 ; AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11]
   1324 ; AVX2-NEXT:    vpsravd %ymm2, %ymm0, %ymm0
   1325 ; AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0
   1326 ; AVX2-NEXT:    vpackusdw %ymm3, %ymm0, %ymm0
   1327 ; AVX2-NEXT:    retq
   1328 ;
   1329 ; XOPAVX1-LABEL: constant_shift_v16i16:
   1330 ; XOPAVX1:       # %bb.0:
   1331 ; XOPAVX1-NEXT:    vpshaw {{.*}}(%rip), %xmm0, %xmm1
   1332 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   1333 ; XOPAVX1-NEXT:    vpshaw {{.*}}(%rip), %xmm0, %xmm0
   1334 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1335 ; XOPAVX1-NEXT:    retq
   1336 ;
   1337 ; XOPAVX2-LABEL: constant_shift_v16i16:
   1338 ; XOPAVX2:       # %bb.0:
   1339 ; XOPAVX2-NEXT:    vpshaw {{.*}}(%rip), %xmm0, %xmm1
   1340 ; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
   1341 ; XOPAVX2-NEXT:    vpshaw {{.*}}(%rip), %xmm0, %xmm0
   1342 ; XOPAVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
   1343 ; XOPAVX2-NEXT:    retq
   1344 ;
   1345 ; AVX512DQ-LABEL: constant_shift_v16i16:
   1346 ; AVX512DQ:       # %bb.0:
   1347 ; AVX512DQ-NEXT:    vpmovsxwd %ymm0, %zmm0
   1348 ; AVX512DQ-NEXT:    vpsravd {{.*}}(%rip), %zmm0, %zmm0
   1349 ; AVX512DQ-NEXT:    vpmovdw %zmm0, %ymm0
   1350 ; AVX512DQ-NEXT:    retq
   1351 ;
   1352 ; AVX512BW-LABEL: constant_shift_v16i16:
   1353 ; AVX512BW:       # %bb.0:
   1354 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
   1355 ; AVX512BW-NEXT:    vmovdqa {{.*#+}} ymm1 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
   1356 ; AVX512BW-NEXT:    vpsravw %zmm1, %zmm0, %zmm0
   1357 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
   1358 ; AVX512BW-NEXT:    retq
   1359 ;
   1360 ; AVX512DQVL-LABEL: constant_shift_v16i16:
   1361 ; AVX512DQVL:       # %bb.0:
   1362 ; AVX512DQVL-NEXT:    vpmovsxwd %ymm0, %zmm0
   1363 ; AVX512DQVL-NEXT:    vpsravd {{.*}}(%rip), %zmm0, %zmm0
   1364 ; AVX512DQVL-NEXT:    vpmovdw %zmm0, %ymm0
   1365 ; AVX512DQVL-NEXT:    retq
   1366 ;
   1367 ; AVX512BWVL-LABEL: constant_shift_v16i16:
   1368 ; AVX512BWVL:       # %bb.0:
   1369 ; AVX512BWVL-NEXT:    vpsravw {{.*}}(%rip), %ymm0, %ymm0
   1370 ; AVX512BWVL-NEXT:    retq
   1371 ;
   1372 ; X32-AVX1-LABEL: constant_shift_v16i16:
   1373 ; X32-AVX1:       # %bb.0:
   1374 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   1375 ; X32-AVX1-NEXT:    vpsraw $8, %xmm1, %xmm1
   1376 ; X32-AVX1-NEXT:    vpsraw $4, %xmm1, %xmm2
   1377 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1,2,3],xmm2[4,5,6,7]
   1378 ; X32-AVX1-NEXT:    vpsraw $2, %xmm1, %xmm2
   1379 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
   1380 ; X32-AVX1-NEXT:    vpsraw $1, %xmm1, %xmm2
   1381 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0],xmm2[1],xmm1[2],xmm2[3],xmm1[4],xmm2[5],xmm1[6],xmm2[7]
   1382 ; X32-AVX1-NEXT:    vpsraw $4, %xmm0, %xmm2
   1383 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3],xmm2[4,5,6,7]
   1384 ; X32-AVX1-NEXT:    vpsraw $2, %xmm0, %xmm2
   1385 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
   1386 ; X32-AVX1-NEXT:    vpsraw $1, %xmm0, %xmm2
   1387 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0],xmm2[1],xmm0[2],xmm2[3],xmm0[4],xmm2[5],xmm0[6],xmm2[7]
   1388 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1389 ; X32-AVX1-NEXT:    retl
   1390 ;
   1391 ; X32-AVX2-LABEL: constant_shift_v16i16:
   1392 ; X32-AVX2:       # %bb.0:
   1393 ; X32-AVX2-NEXT:    vpxor %xmm1, %xmm1, %xmm1
   1394 ; X32-AVX2-NEXT:    vmovdqa {{.*#+}} ymm2 = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
   1395 ; X32-AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm3 = ymm2[4],ymm1[4],ymm2[5],ymm1[5],ymm2[6],ymm1[6],ymm2[7],ymm1[7],ymm2[12],ymm1[12],ymm2[13],ymm1[13],ymm2[14],ymm1[14],ymm2[15],ymm1[15]
   1396 ; X32-AVX2-NEXT:    vpunpckhwd {{.*#+}} ymm4 = ymm1[4],ymm0[4],ymm1[5],ymm0[5],ymm1[6],ymm0[6],ymm1[7],ymm0[7],ymm1[12],ymm0[12],ymm1[13],ymm0[13],ymm1[14],ymm0[14],ymm1[15],ymm0[15]
   1397 ; X32-AVX2-NEXT:    vpsravd %ymm3, %ymm4, %ymm3
   1398 ; X32-AVX2-NEXT:    vpsrld $16, %ymm3, %ymm3
   1399 ; X32-AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm2 = ymm2[0],ymm1[0],ymm2[1],ymm1[1],ymm2[2],ymm1[2],ymm2[3],ymm1[3],ymm2[8],ymm1[8],ymm2[9],ymm1[9],ymm2[10],ymm1[10],ymm2[11],ymm1[11]
   1400 ; X32-AVX2-NEXT:    vpunpcklwd {{.*#+}} ymm0 = ymm1[0],ymm0[0],ymm1[1],ymm0[1],ymm1[2],ymm0[2],ymm1[3],ymm0[3],ymm1[8],ymm0[8],ymm1[9],ymm0[9],ymm1[10],ymm0[10],ymm1[11],ymm0[11]
   1401 ; X32-AVX2-NEXT:    vpsravd %ymm2, %ymm0, %ymm0
   1402 ; X32-AVX2-NEXT:    vpsrld $16, %ymm0, %ymm0
   1403 ; X32-AVX2-NEXT:    vpackusdw %ymm3, %ymm0, %ymm0
   1404 ; X32-AVX2-NEXT:    retl
   1405   %shift = ashr <16 x i16> %a, <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>
   1406   ret <16 x i16> %shift
   1407 }
   1408 
   1409 define <32 x i8> @constant_shift_v32i8(<32 x i8> %a) nounwind {
   1410 ; AVX1-LABEL: constant_shift_v32i8:
   1411 ; AVX1:       # %bb.0:
   1412 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [8192,24640,41088,57536,49376,32928,16480,32]
   1413 ; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
   1414 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1415 ; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15]
   1416 ; AVX1-NEXT:    vpsraw $4, %xmm4, %xmm5
   1417 ; AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm4
   1418 ; AVX1-NEXT:    vpsraw $2, %xmm4, %xmm5
   1419 ; AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm6
   1420 ; AVX1-NEXT:    vpblendvb %xmm6, %xmm5, %xmm4, %xmm4
   1421 ; AVX1-NEXT:    vpsraw $1, %xmm4, %xmm5
   1422 ; AVX1-NEXT:    vpaddw %xmm6, %xmm6, %xmm9
   1423 ; AVX1-NEXT:    vpblendvb %xmm9, %xmm5, %xmm4, %xmm4
   1424 ; AVX1-NEXT:    vpsrlw $8, %xmm4, %xmm8
   1425 ; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
   1426 ; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
   1427 ; AVX1-NEXT:    vpsraw $4, %xmm3, %xmm5
   1428 ; AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm3, %xmm3
   1429 ; AVX1-NEXT:    vpsraw $2, %xmm3, %xmm5
   1430 ; AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm4
   1431 ; AVX1-NEXT:    vpblendvb %xmm4, %xmm5, %xmm3, %xmm3
   1432 ; AVX1-NEXT:    vpsraw $1, %xmm3, %xmm5
   1433 ; AVX1-NEXT:    vpaddw %xmm4, %xmm4, %xmm7
   1434 ; AVX1-NEXT:    vpblendvb %xmm7, %xmm5, %xmm3, %xmm3
   1435 ; AVX1-NEXT:    vpsrlw $8, %xmm3, %xmm3
   1436 ; AVX1-NEXT:    vpackuswb %xmm8, %xmm3, %xmm8
   1437 ; AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
   1438 ; AVX1-NEXT:    vpsraw $4, %xmm5, %xmm3
   1439 ; AVX1-NEXT:    vpblendvb %xmm2, %xmm3, %xmm5, %xmm2
   1440 ; AVX1-NEXT:    vpsraw $2, %xmm2, %xmm3
   1441 ; AVX1-NEXT:    vpblendvb %xmm6, %xmm3, %xmm2, %xmm2
   1442 ; AVX1-NEXT:    vpsraw $1, %xmm2, %xmm3
   1443 ; AVX1-NEXT:    vpblendvb %xmm9, %xmm3, %xmm2, %xmm2
   1444 ; AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
   1445 ; AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   1446 ; AVX1-NEXT:    vpsraw $4, %xmm0, %xmm3
   1447 ; AVX1-NEXT:    vpblendvb %xmm1, %xmm3, %xmm0, %xmm0
   1448 ; AVX1-NEXT:    vpsraw $2, %xmm0, %xmm1
   1449 ; AVX1-NEXT:    vpblendvb %xmm4, %xmm1, %xmm0, %xmm0
   1450 ; AVX1-NEXT:    vpsraw $1, %xmm0, %xmm1
   1451 ; AVX1-NEXT:    vpblendvb %xmm7, %xmm1, %xmm0, %xmm0
   1452 ; AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
   1453 ; AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
   1454 ; AVX1-NEXT:    vinsertf128 $1, %xmm8, %ymm0, %ymm0
   1455 ; AVX1-NEXT:    retq
   1456 ;
   1457 ; AVX2-LABEL: constant_shift_v32i8:
   1458 ; AVX2:       # %bb.0:
   1459 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [8192,24640,41088,57536,49376,32928,16480,32,8192,24640,41088,57536,49376,32928,16480,32]
   1460 ; AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
   1461 ; AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]
   1462 ; AVX2-NEXT:    vpsraw $4, %ymm3, %ymm4
   1463 ; AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
   1464 ; AVX2-NEXT:    vpsraw $2, %ymm3, %ymm4
   1465 ; AVX2-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
   1466 ; AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
   1467 ; AVX2-NEXT:    vpsraw $1, %ymm3, %ymm4
   1468 ; AVX2-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
   1469 ; AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm2
   1470 ; AVX2-NEXT:    vpsrlw $8, %ymm2, %ymm2
   1471 ; AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
   1472 ; AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]
   1473 ; AVX2-NEXT:    vpsraw $4, %ymm0, %ymm3
   1474 ; AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1475 ; AVX2-NEXT:    vpsraw $2, %ymm0, %ymm3
   1476 ; AVX2-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
   1477 ; AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1478 ; AVX2-NEXT:    vpsraw $1, %ymm0, %ymm3
   1479 ; AVX2-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
   1480 ; AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1481 ; AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
   1482 ; AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
   1483 ; AVX2-NEXT:    retq
   1484 ;
   1485 ; XOPAVX1-LABEL: constant_shift_v32i8:
   1486 ; XOPAVX1:       # %bb.0:
   1487 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   1488 ; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,255,254,253,252,251,250,249,249,250,251,252,253,254,255,0]
   1489 ; XOPAVX1-NEXT:    vpshab %xmm2, %xmm1, %xmm1
   1490 ; XOPAVX1-NEXT:    vpshab %xmm2, %xmm0, %xmm0
   1491 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1492 ; XOPAVX1-NEXT:    retq
   1493 ;
   1494 ; XOPAVX2-LABEL: constant_shift_v32i8:
   1495 ; XOPAVX2:       # %bb.0:
   1496 ; XOPAVX2-NEXT:    vextracti128 $1, %ymm0, %xmm1
   1497 ; XOPAVX2-NEXT:    vmovdqa {{.*#+}} xmm2 = [0,255,254,253,252,251,250,249,249,250,251,252,253,254,255,0]
   1498 ; XOPAVX2-NEXT:    vpshab %xmm2, %xmm1, %xmm1
   1499 ; XOPAVX2-NEXT:    vpshab %xmm2, %xmm0, %xmm0
   1500 ; XOPAVX2-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
   1501 ; XOPAVX2-NEXT:    retq
   1502 ;
   1503 ; AVX512DQ-LABEL: constant_shift_v32i8:
   1504 ; AVX512DQ:       # %bb.0:
   1505 ; AVX512DQ-NEXT:    vmovdqa {{.*#+}} ymm1 = [8192,24640,41088,57536,49376,32928,16480,32,8192,24640,41088,57536,49376,32928,16480,32]
   1506 ; AVX512DQ-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
   1507 ; AVX512DQ-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]
   1508 ; AVX512DQ-NEXT:    vpsraw $4, %ymm3, %ymm4
   1509 ; AVX512DQ-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
   1510 ; AVX512DQ-NEXT:    vpsraw $2, %ymm3, %ymm4
   1511 ; AVX512DQ-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
   1512 ; AVX512DQ-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
   1513 ; AVX512DQ-NEXT:    vpsraw $1, %ymm3, %ymm4
   1514 ; AVX512DQ-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
   1515 ; AVX512DQ-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm2
   1516 ; AVX512DQ-NEXT:    vpsrlw $8, %ymm2, %ymm2
   1517 ; AVX512DQ-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
   1518 ; AVX512DQ-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]
   1519 ; AVX512DQ-NEXT:    vpsraw $4, %ymm0, %ymm3
   1520 ; AVX512DQ-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1521 ; AVX512DQ-NEXT:    vpsraw $2, %ymm0, %ymm3
   1522 ; AVX512DQ-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
   1523 ; AVX512DQ-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1524 ; AVX512DQ-NEXT:    vpsraw $1, %ymm0, %ymm3
   1525 ; AVX512DQ-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
   1526 ; AVX512DQ-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1527 ; AVX512DQ-NEXT:    vpsrlw $8, %ymm0, %ymm0
   1528 ; AVX512DQ-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
   1529 ; AVX512DQ-NEXT:    retq
   1530 ;
   1531 ; AVX512BW-LABEL: constant_shift_v32i8:
   1532 ; AVX512BW:       # %bb.0:
   1533 ; AVX512BW-NEXT:    vpmovsxbw %ymm0, %zmm0
   1534 ; AVX512BW-NEXT:    vpsravw {{.*}}(%rip), %zmm0, %zmm0
   1535 ; AVX512BW-NEXT:    vpmovwb %zmm0, %ymm0
   1536 ; AVX512BW-NEXT:    retq
   1537 ;
   1538 ; AVX512DQVL-LABEL: constant_shift_v32i8:
   1539 ; AVX512DQVL:       # %bb.0:
   1540 ; AVX512DQVL-NEXT:    vmovdqa {{.*#+}} ymm1 = [8192,24640,41088,57536,49376,32928,16480,32,8192,24640,41088,57536,49376,32928,16480,32]
   1541 ; AVX512DQVL-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
   1542 ; AVX512DQVL-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]
   1543 ; AVX512DQVL-NEXT:    vpsraw $4, %ymm3, %ymm4
   1544 ; AVX512DQVL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
   1545 ; AVX512DQVL-NEXT:    vpsraw $2, %ymm3, %ymm4
   1546 ; AVX512DQVL-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
   1547 ; AVX512DQVL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
   1548 ; AVX512DQVL-NEXT:    vpsraw $1, %ymm3, %ymm4
   1549 ; AVX512DQVL-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
   1550 ; AVX512DQVL-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm2
   1551 ; AVX512DQVL-NEXT:    vpsrlw $8, %ymm2, %ymm2
   1552 ; AVX512DQVL-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
   1553 ; AVX512DQVL-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]
   1554 ; AVX512DQVL-NEXT:    vpsraw $4, %ymm0, %ymm3
   1555 ; AVX512DQVL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1556 ; AVX512DQVL-NEXT:    vpsraw $2, %ymm0, %ymm3
   1557 ; AVX512DQVL-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
   1558 ; AVX512DQVL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1559 ; AVX512DQVL-NEXT:    vpsraw $1, %ymm0, %ymm3
   1560 ; AVX512DQVL-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
   1561 ; AVX512DQVL-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1562 ; AVX512DQVL-NEXT:    vpsrlw $8, %ymm0, %ymm0
   1563 ; AVX512DQVL-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
   1564 ; AVX512DQVL-NEXT:    retq
   1565 ;
   1566 ; AVX512BWVL-LABEL: constant_shift_v32i8:
   1567 ; AVX512BWVL:       # %bb.0:
   1568 ; AVX512BWVL-NEXT:    vpmovsxbw %ymm0, %zmm0
   1569 ; AVX512BWVL-NEXT:    vpsravw {{.*}}(%rip), %zmm0, %zmm0
   1570 ; AVX512BWVL-NEXT:    vpmovwb %zmm0, %ymm0
   1571 ; AVX512BWVL-NEXT:    retq
   1572 ;
   1573 ; X32-AVX1-LABEL: constant_shift_v32i8:
   1574 ; X32-AVX1:       # %bb.0:
   1575 ; X32-AVX1-NEXT:    vmovdqa {{.*#+}} xmm1 = [8192,24640,41088,57536,49376,32928,16480,32]
   1576 ; X32-AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm2 = xmm0[8],xmm1[8],xmm0[9],xmm1[9],xmm0[10],xmm1[10],xmm0[11],xmm1[11],xmm0[12],xmm1[12],xmm0[13],xmm1[13],xmm0[14],xmm1[14],xmm0[15],xmm1[15]
   1577 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm3
   1578 ; X32-AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm4 = xmm0[8],xmm3[8],xmm0[9],xmm3[9],xmm0[10],xmm3[10],xmm0[11],xmm3[11],xmm0[12],xmm3[12],xmm0[13],xmm3[13],xmm0[14],xmm3[14],xmm0[15],xmm3[15]
   1579 ; X32-AVX1-NEXT:    vpsraw $4, %xmm4, %xmm5
   1580 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm5, %xmm4, %xmm4
   1581 ; X32-AVX1-NEXT:    vpunpckhbw {{.*#+}} xmm5 = xmm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
   1582 ; X32-AVX1-NEXT:    vpsraw $4, %xmm5, %xmm6
   1583 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm6, %xmm5, %xmm5
   1584 ; X32-AVX1-NEXT:    vpsraw $2, %xmm4, %xmm6
   1585 ; X32-AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
   1586 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm6, %xmm4, %xmm4
   1587 ; X32-AVX1-NEXT:    vpsraw $2, %xmm5, %xmm6
   1588 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm6, %xmm5, %xmm5
   1589 ; X32-AVX1-NEXT:    vpsraw $1, %xmm4, %xmm6
   1590 ; X32-AVX1-NEXT:    vpaddw %xmm2, %xmm2, %xmm2
   1591 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm6, %xmm4, %xmm4
   1592 ; X32-AVX1-NEXT:    vpsraw $1, %xmm5, %xmm6
   1593 ; X32-AVX1-NEXT:    vpblendvb %xmm2, %xmm6, %xmm5, %xmm2
   1594 ; X32-AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm1 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7]
   1595 ; X32-AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm3 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3],xmm0[4],xmm3[4],xmm0[5],xmm3[5],xmm0[6],xmm3[6],xmm0[7],xmm3[7]
   1596 ; X32-AVX1-NEXT:    vpsraw $4, %xmm3, %xmm5
   1597 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm3, %xmm3
   1598 ; X32-AVX1-NEXT:    vpunpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   1599 ; X32-AVX1-NEXT:    vpsraw $4, %xmm0, %xmm5
   1600 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm0, %xmm0
   1601 ; X32-AVX1-NEXT:    vpsraw $2, %xmm3, %xmm5
   1602 ; X32-AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
   1603 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm3, %xmm3
   1604 ; X32-AVX1-NEXT:    vpsraw $2, %xmm0, %xmm5
   1605 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm0, %xmm0
   1606 ; X32-AVX1-NEXT:    vpsraw $1, %xmm3, %xmm5
   1607 ; X32-AVX1-NEXT:    vpaddw %xmm1, %xmm1, %xmm1
   1608 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm3, %xmm3
   1609 ; X32-AVX1-NEXT:    vpsraw $1, %xmm0, %xmm5
   1610 ; X32-AVX1-NEXT:    vpblendvb %xmm1, %xmm5, %xmm0, %xmm0
   1611 ; X32-AVX1-NEXT:    vpsrlw $8, %xmm4, %xmm1
   1612 ; X32-AVX1-NEXT:    vpsrlw $8, %xmm3, %xmm3
   1613 ; X32-AVX1-NEXT:    vpackuswb %xmm1, %xmm3, %xmm1
   1614 ; X32-AVX1-NEXT:    vpsrlw $8, %xmm2, %xmm2
   1615 ; X32-AVX1-NEXT:    vpsrlw $8, %xmm0, %xmm0
   1616 ; X32-AVX1-NEXT:    vpackuswb %xmm2, %xmm0, %xmm0
   1617 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1618 ; X32-AVX1-NEXT:    retl
   1619 ;
   1620 ; X32-AVX2-LABEL: constant_shift_v32i8:
   1621 ; X32-AVX2:       # %bb.0:
   1622 ; X32-AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [8192,24640,41088,57536,49376,32928,16480,32,8192,24640,41088,57536,49376,32928,16480,32]
   1623 ; X32-AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm2 = ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15],ymm0[24],ymm1[24],ymm0[25],ymm1[25],ymm0[26],ymm1[26],ymm0[27],ymm1[27],ymm0[28],ymm1[28],ymm0[29],ymm1[29],ymm0[30],ymm1[30],ymm0[31],ymm1[31]
   1624 ; X32-AVX2-NEXT:    vpunpckhbw {{.*#+}} ymm3 = ymm0[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31]
   1625 ; X32-AVX2-NEXT:    vpsraw $4, %ymm3, %ymm4
   1626 ; X32-AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
   1627 ; X32-AVX2-NEXT:    vpsraw $2, %ymm3, %ymm4
   1628 ; X32-AVX2-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
   1629 ; X32-AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm3
   1630 ; X32-AVX2-NEXT:    vpsraw $1, %ymm3, %ymm4
   1631 ; X32-AVX2-NEXT:    vpaddw %ymm2, %ymm2, %ymm2
   1632 ; X32-AVX2-NEXT:    vpblendvb %ymm2, %ymm4, %ymm3, %ymm2
   1633 ; X32-AVX2-NEXT:    vpsrlw $8, %ymm2, %ymm2
   1634 ; X32-AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm1 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[16],ymm1[16],ymm0[17],ymm1[17],ymm0[18],ymm1[18],ymm0[19],ymm1[19],ymm0[20],ymm1[20],ymm0[21],ymm1[21],ymm0[22],ymm1[22],ymm0[23],ymm1[23]
   1635 ; X32-AVX2-NEXT:    vpunpcklbw {{.*#+}} ymm0 = ymm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23]
   1636 ; X32-AVX2-NEXT:    vpsraw $4, %ymm0, %ymm3
   1637 ; X32-AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1638 ; X32-AVX2-NEXT:    vpsraw $2, %ymm0, %ymm3
   1639 ; X32-AVX2-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
   1640 ; X32-AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1641 ; X32-AVX2-NEXT:    vpsraw $1, %ymm0, %ymm3
   1642 ; X32-AVX2-NEXT:    vpaddw %ymm1, %ymm1, %ymm1
   1643 ; X32-AVX2-NEXT:    vpblendvb %ymm1, %ymm3, %ymm0, %ymm0
   1644 ; X32-AVX2-NEXT:    vpsrlw $8, %ymm0, %ymm0
   1645 ; X32-AVX2-NEXT:    vpackuswb %ymm2, %ymm0, %ymm0
   1646 ; X32-AVX2-NEXT:    retl
   1647   %shift = ashr <32 x i8> %a, <i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0, i8 0, i8 1, i8 2, i8 3, i8 4, i8 5, i8 6, i8 7, i8 7, i8 6, i8 5, i8 4, i8 3, i8 2, i8 1, i8 0>
   1648   ret <32 x i8> %shift
   1649 }
   1650 
   1651 ;
   1652 ; Uniform Constant Shifts
   1653 ;
   1654 
   1655 define <4 x i64> @splatconstant_shift_v4i64(<4 x i64> %a) nounwind {
   1656 ; AVX1-LABEL: splatconstant_shift_v4i64:
   1657 ; AVX1:       # %bb.0:
   1658 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   1659 ; AVX1-NEXT:    vpsrad $7, %xmm1, %xmm2
   1660 ; AVX1-NEXT:    vpsrlq $7, %xmm1, %xmm1
   1661 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
   1662 ; AVX1-NEXT:    vpsrad $7, %xmm0, %xmm2
   1663 ; AVX1-NEXT:    vpsrlq $7, %xmm0, %xmm0
   1664 ; AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
   1665 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1666 ; AVX1-NEXT:    retq
   1667 ;
   1668 ; AVX2-LABEL: splatconstant_shift_v4i64:
   1669 ; AVX2:       # %bb.0:
   1670 ; AVX2-NEXT:    vpsrad $7, %ymm0, %ymm1
   1671 ; AVX2-NEXT:    vpsrlq $7, %ymm0, %ymm0
   1672 ; AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
   1673 ; AVX2-NEXT:    retq
   1674 ;
   1675 ; XOPAVX1-LABEL: splatconstant_shift_v4i64:
   1676 ; XOPAVX1:       # %bb.0:
   1677 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   1678 ; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [18446744073709551609,18446744073709551609]
   1679 ; XOPAVX1-NEXT:    vpshaq %xmm2, %xmm1, %xmm1
   1680 ; XOPAVX1-NEXT:    vpshaq %xmm2, %xmm0, %xmm0
   1681 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1682 ; XOPAVX1-NEXT:    retq
   1683 ;
   1684 ; XOPAVX2-LABEL: splatconstant_shift_v4i64:
   1685 ; XOPAVX2:       # %bb.0:
   1686 ; XOPAVX2-NEXT:    vpsrad $7, %ymm0, %ymm1
   1687 ; XOPAVX2-NEXT:    vpsrlq $7, %ymm0, %ymm0
   1688 ; XOPAVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
   1689 ; XOPAVX2-NEXT:    retq
   1690 ;
   1691 ; AVX512-LABEL: splatconstant_shift_v4i64:
   1692 ; AVX512:       # %bb.0:
   1693 ; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0
   1694 ; AVX512-NEXT:    vpsraq $7, %zmm0, %zmm0
   1695 ; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
   1696 ; AVX512-NEXT:    retq
   1697 ;
   1698 ; AVX512VL-LABEL: splatconstant_shift_v4i64:
   1699 ; AVX512VL:       # %bb.0:
   1700 ; AVX512VL-NEXT:    vpsraq $7, %ymm0, %ymm0
   1701 ; AVX512VL-NEXT:    retq
   1702 ;
   1703 ; X32-AVX1-LABEL: splatconstant_shift_v4i64:
   1704 ; X32-AVX1:       # %bb.0:
   1705 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   1706 ; X32-AVX1-NEXT:    vpsrad $7, %xmm1, %xmm2
   1707 ; X32-AVX1-NEXT:    vpsrlq $7, %xmm1, %xmm1
   1708 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm1 = xmm1[0,1],xmm2[2,3],xmm1[4,5],xmm2[6,7]
   1709 ; X32-AVX1-NEXT:    vpsrad $7, %xmm0, %xmm2
   1710 ; X32-AVX1-NEXT:    vpsrlq $7, %xmm0, %xmm0
   1711 ; X32-AVX1-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm2[2,3],xmm0[4,5],xmm2[6,7]
   1712 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1713 ; X32-AVX1-NEXT:    retl
   1714 ;
   1715 ; X32-AVX2-LABEL: splatconstant_shift_v4i64:
   1716 ; X32-AVX2:       # %bb.0:
   1717 ; X32-AVX2-NEXT:    vpsrad $7, %ymm0, %ymm1
   1718 ; X32-AVX2-NEXT:    vpsrlq $7, %ymm0, %ymm0
   1719 ; X32-AVX2-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7]
   1720 ; X32-AVX2-NEXT:    retl
   1721   %shift = ashr <4 x i64> %a, <i64 7, i64 7, i64 7, i64 7>
   1722   ret <4 x i64> %shift
   1723 }
   1724 
   1725 define <8 x i32> @splatconstant_shift_v8i32(<8 x i32> %a) nounwind {
   1726 ; AVX1-LABEL: splatconstant_shift_v8i32:
   1727 ; AVX1:       # %bb.0:
   1728 ; AVX1-NEXT:    vpsrad $5, %xmm0, %xmm1
   1729 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   1730 ; AVX1-NEXT:    vpsrad $5, %xmm0, %xmm0
   1731 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1732 ; AVX1-NEXT:    retq
   1733 ;
   1734 ; AVX2-LABEL: splatconstant_shift_v8i32:
   1735 ; AVX2:       # %bb.0:
   1736 ; AVX2-NEXT:    vpsrad $5, %ymm0, %ymm0
   1737 ; AVX2-NEXT:    retq
   1738 ;
   1739 ; XOPAVX1-LABEL: splatconstant_shift_v8i32:
   1740 ; XOPAVX1:       # %bb.0:
   1741 ; XOPAVX1-NEXT:    vpsrad $5, %xmm0, %xmm1
   1742 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   1743 ; XOPAVX1-NEXT:    vpsrad $5, %xmm0, %xmm0
   1744 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1745 ; XOPAVX1-NEXT:    retq
   1746 ;
   1747 ; XOPAVX2-LABEL: splatconstant_shift_v8i32:
   1748 ; XOPAVX2:       # %bb.0:
   1749 ; XOPAVX2-NEXT:    vpsrad $5, %ymm0, %ymm0
   1750 ; XOPAVX2-NEXT:    retq
   1751 ;
   1752 ; AVX512-LABEL: splatconstant_shift_v8i32:
   1753 ; AVX512:       # %bb.0:
   1754 ; AVX512-NEXT:    vpsrad $5, %ymm0, %ymm0
   1755 ; AVX512-NEXT:    retq
   1756 ;
   1757 ; AVX512VL-LABEL: splatconstant_shift_v8i32:
   1758 ; AVX512VL:       # %bb.0:
   1759 ; AVX512VL-NEXT:    vpsrad $5, %ymm0, %ymm0
   1760 ; AVX512VL-NEXT:    retq
   1761 ;
   1762 ; X32-AVX1-LABEL: splatconstant_shift_v8i32:
   1763 ; X32-AVX1:       # %bb.0:
   1764 ; X32-AVX1-NEXT:    vpsrad $5, %xmm0, %xmm1
   1765 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   1766 ; X32-AVX1-NEXT:    vpsrad $5, %xmm0, %xmm0
   1767 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1768 ; X32-AVX1-NEXT:    retl
   1769 ;
   1770 ; X32-AVX2-LABEL: splatconstant_shift_v8i32:
   1771 ; X32-AVX2:       # %bb.0:
   1772 ; X32-AVX2-NEXT:    vpsrad $5, %ymm0, %ymm0
   1773 ; X32-AVX2-NEXT:    retl
   1774   %shift = ashr <8 x i32> %a, <i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5, i32 5>
   1775   ret <8 x i32> %shift
   1776 }
   1777 
   1778 define <16 x i16> @splatconstant_shift_v16i16(<16 x i16> %a) nounwind {
   1779 ; AVX1-LABEL: splatconstant_shift_v16i16:
   1780 ; AVX1:       # %bb.0:
   1781 ; AVX1-NEXT:    vpsraw $3, %xmm0, %xmm1
   1782 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   1783 ; AVX1-NEXT:    vpsraw $3, %xmm0, %xmm0
   1784 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1785 ; AVX1-NEXT:    retq
   1786 ;
   1787 ; AVX2-LABEL: splatconstant_shift_v16i16:
   1788 ; AVX2:       # %bb.0:
   1789 ; AVX2-NEXT:    vpsraw $3, %ymm0, %ymm0
   1790 ; AVX2-NEXT:    retq
   1791 ;
   1792 ; XOPAVX1-LABEL: splatconstant_shift_v16i16:
   1793 ; XOPAVX1:       # %bb.0:
   1794 ; XOPAVX1-NEXT:    vpsraw $3, %xmm0, %xmm1
   1795 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   1796 ; XOPAVX1-NEXT:    vpsraw $3, %xmm0, %xmm0
   1797 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1798 ; XOPAVX1-NEXT:    retq
   1799 ;
   1800 ; XOPAVX2-LABEL: splatconstant_shift_v16i16:
   1801 ; XOPAVX2:       # %bb.0:
   1802 ; XOPAVX2-NEXT:    vpsraw $3, %ymm0, %ymm0
   1803 ; XOPAVX2-NEXT:    retq
   1804 ;
   1805 ; AVX512-LABEL: splatconstant_shift_v16i16:
   1806 ; AVX512:       # %bb.0:
   1807 ; AVX512-NEXT:    vpsraw $3, %ymm0, %ymm0
   1808 ; AVX512-NEXT:    retq
   1809 ;
   1810 ; AVX512VL-LABEL: splatconstant_shift_v16i16:
   1811 ; AVX512VL:       # %bb.0:
   1812 ; AVX512VL-NEXT:    vpsraw $3, %ymm0, %ymm0
   1813 ; AVX512VL-NEXT:    retq
   1814 ;
   1815 ; X32-AVX1-LABEL: splatconstant_shift_v16i16:
   1816 ; X32-AVX1:       # %bb.0:
   1817 ; X32-AVX1-NEXT:    vpsraw $3, %xmm0, %xmm1
   1818 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   1819 ; X32-AVX1-NEXT:    vpsraw $3, %xmm0, %xmm0
   1820 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1821 ; X32-AVX1-NEXT:    retl
   1822 ;
   1823 ; X32-AVX2-LABEL: splatconstant_shift_v16i16:
   1824 ; X32-AVX2:       # %bb.0:
   1825 ; X32-AVX2-NEXT:    vpsraw $3, %ymm0, %ymm0
   1826 ; X32-AVX2-NEXT:    retl
   1827   %shift = ashr <16 x i16> %a, <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>
   1828   ret <16 x i16> %shift
   1829 }
   1830 
   1831 define <32 x i8> @splatconstant_shift_v32i8(<32 x i8> %a) nounwind {
   1832 ; AVX1-LABEL: splatconstant_shift_v32i8:
   1833 ; AVX1:       # %bb.0:
   1834 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   1835 ; AVX1-NEXT:    vpsrlw $3, %xmm1, %xmm1
   1836 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31]
   1837 ; AVX1-NEXT:    vpand %xmm2, %xmm1, %xmm1
   1838 ; AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
   1839 ; AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm1
   1840 ; AVX1-NEXT:    vpsubb %xmm3, %xmm1, %xmm1
   1841 ; AVX1-NEXT:    vpsrlw $3, %xmm0, %xmm0
   1842 ; AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
   1843 ; AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm0
   1844 ; AVX1-NEXT:    vpsubb %xmm3, %xmm0, %xmm0
   1845 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1846 ; AVX1-NEXT:    retq
   1847 ;
   1848 ; AVX2-LABEL: splatconstant_shift_v32i8:
   1849 ; AVX2:       # %bb.0:
   1850 ; AVX2-NEXT:    vpsrlw $3, %ymm0, %ymm0
   1851 ; AVX2-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
   1852 ; AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
   1853 ; AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
   1854 ; AVX2-NEXT:    vpsubb %ymm1, %ymm0, %ymm0
   1855 ; AVX2-NEXT:    retq
   1856 ;
   1857 ; XOPAVX1-LABEL: splatconstant_shift_v32i8:
   1858 ; XOPAVX1:       # %bb.0:
   1859 ; XOPAVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   1860 ; XOPAVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253]
   1861 ; XOPAVX1-NEXT:    vpshab %xmm2, %xmm1, %xmm1
   1862 ; XOPAVX1-NEXT:    vpshab %xmm2, %xmm0, %xmm0
   1863 ; XOPAVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1864 ; XOPAVX1-NEXT:    retq
   1865 ;
   1866 ; XOPAVX2-LABEL: splatconstant_shift_v32i8:
   1867 ; XOPAVX2:       # %bb.0:
   1868 ; XOPAVX2-NEXT:    vpsrlw $3, %ymm0, %ymm0
   1869 ; XOPAVX2-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
   1870 ; XOPAVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
   1871 ; XOPAVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
   1872 ; XOPAVX2-NEXT:    vpsubb %ymm1, %ymm0, %ymm0
   1873 ; XOPAVX2-NEXT:    retq
   1874 ;
   1875 ; AVX512-LABEL: splatconstant_shift_v32i8:
   1876 ; AVX512:       # %bb.0:
   1877 ; AVX512-NEXT:    vpsrlw $3, %ymm0, %ymm0
   1878 ; AVX512-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
   1879 ; AVX512-NEXT:    vmovdqa {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
   1880 ; AVX512-NEXT:    vpxor %ymm1, %ymm0, %ymm0
   1881 ; AVX512-NEXT:    vpsubb %ymm1, %ymm0, %ymm0
   1882 ; AVX512-NEXT:    retq
   1883 ;
   1884 ; AVX512VL-LABEL: splatconstant_shift_v32i8:
   1885 ; AVX512VL:       # %bb.0:
   1886 ; AVX512VL-NEXT:    vpsrlw $3, %ymm0, %ymm0
   1887 ; AVX512VL-NEXT:    vpand {{.*}}(%rip), %ymm0, %ymm0
   1888 ; AVX512VL-NEXT:    vmovdqa {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
   1889 ; AVX512VL-NEXT:    vpxor %ymm1, %ymm0, %ymm0
   1890 ; AVX512VL-NEXT:    vpsubb %ymm1, %ymm0, %ymm0
   1891 ; AVX512VL-NEXT:    retq
   1892 ;
   1893 ; X32-AVX1-LABEL: splatconstant_shift_v32i8:
   1894 ; X32-AVX1:       # %bb.0:
   1895 ; X32-AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm1
   1896 ; X32-AVX1-NEXT:    vpsrlw $3, %xmm1, %xmm1
   1897 ; X32-AVX1-NEXT:    vmovdqa {{.*#+}} xmm2 = [31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31]
   1898 ; X32-AVX1-NEXT:    vpand %xmm2, %xmm1, %xmm1
   1899 ; X32-AVX1-NEXT:    vmovdqa {{.*#+}} xmm3 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
   1900 ; X32-AVX1-NEXT:    vpxor %xmm3, %xmm1, %xmm1
   1901 ; X32-AVX1-NEXT:    vpsubb %xmm3, %xmm1, %xmm1
   1902 ; X32-AVX1-NEXT:    vpsrlw $3, %xmm0, %xmm0
   1903 ; X32-AVX1-NEXT:    vpand %xmm2, %xmm0, %xmm0
   1904 ; X32-AVX1-NEXT:    vpxor %xmm3, %xmm0, %xmm0
   1905 ; X32-AVX1-NEXT:    vpsubb %xmm3, %xmm0, %xmm0
   1906 ; X32-AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   1907 ; X32-AVX1-NEXT:    retl
   1908 ;
   1909 ; X32-AVX2-LABEL: splatconstant_shift_v32i8:
   1910 ; X32-AVX2:       # %bb.0:
   1911 ; X32-AVX2-NEXT:    vpsrlw $3, %ymm0, %ymm0
   1912 ; X32-AVX2-NEXT:    vpand {{\.LCPI.*}}, %ymm0, %ymm0
   1913 ; X32-AVX2-NEXT:    vmovdqa {{.*#+}} ymm1 = [16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]
   1914 ; X32-AVX2-NEXT:    vpxor %ymm1, %ymm0, %ymm0
   1915 ; X32-AVX2-NEXT:    vpsubb %ymm1, %ymm0, %ymm0
   1916 ; X32-AVX2-NEXT:    retl
   1917   %shift = ashr <32 x i8> %a, <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>
   1918   ret <32 x i8> %shift
   1919 }
   1920