Home | History | Annotate | Download | only in X86
      1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
      2 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse2 | FileCheck %s --check-prefix=SSE --check-prefix=SSE2
      3 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+ssse3 | FileCheck %s --check-prefix=SSE --check-prefix=SSSE3
      4 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=SSE --check-prefix=SSE41
      5 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1
      6 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2
      7 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f | FileCheck %s --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512F
      8 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx512f,+avx512bw | FileCheck %s --check-prefix=AVX --check-prefix=AVX512 --check-prefix=AVX512BW
      9 ;
     10 ; Just one 32-bit run to make sure we do reasonable things there.
     11 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X32-SSE41
     12 
     13 define <8 x i16> @sext_16i8_to_8i16(<16 x i8> %A) nounwind uwtable readnone ssp {
     14 ; SSE2-LABEL: sext_16i8_to_8i16:
     15 ; SSE2:       # %bb.0: # %entry
     16 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
     17 ; SSE2-NEXT:    psraw $8, %xmm0
     18 ; SSE2-NEXT:    retq
     19 ;
     20 ; SSSE3-LABEL: sext_16i8_to_8i16:
     21 ; SSSE3:       # %bb.0: # %entry
     22 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
     23 ; SSSE3-NEXT:    psraw $8, %xmm0
     24 ; SSSE3-NEXT:    retq
     25 ;
     26 ; SSE41-LABEL: sext_16i8_to_8i16:
     27 ; SSE41:       # %bb.0: # %entry
     28 ; SSE41-NEXT:    pmovsxbw %xmm0, %xmm0
     29 ; SSE41-NEXT:    retq
     30 ;
     31 ; AVX-LABEL: sext_16i8_to_8i16:
     32 ; AVX:       # %bb.0: # %entry
     33 ; AVX-NEXT:    vpmovsxbw %xmm0, %xmm0
     34 ; AVX-NEXT:    retq
     35 ;
     36 ; X32-SSE41-LABEL: sext_16i8_to_8i16:
     37 ; X32-SSE41:       # %bb.0: # %entry
     38 ; X32-SSE41-NEXT:    pmovsxbw %xmm0, %xmm0
     39 ; X32-SSE41-NEXT:    retl
     40 entry:
     41   %B = shufflevector <16 x i8> %A, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
     42   %C = sext <8 x i8> %B to <8 x i16>
     43   ret <8 x i16> %C
     44 }
     45 
     46 define <16 x i16> @sext_16i8_to_16i16(<16 x i8> %A) nounwind uwtable readnone ssp {
     47 ; SSE2-LABEL: sext_16i8_to_16i16:
     48 ; SSE2:       # %bb.0: # %entry
     49 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
     50 ; SSE2-NEXT:    psraw $8, %xmm2
     51 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]
     52 ; SSE2-NEXT:    psraw $8, %xmm1
     53 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
     54 ; SSE2-NEXT:    retq
     55 ;
     56 ; SSSE3-LABEL: sext_16i8_to_16i16:
     57 ; SSSE3:       # %bb.0: # %entry
     58 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
     59 ; SSSE3-NEXT:    psraw $8, %xmm2
     60 ; SSSE3-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]
     61 ; SSSE3-NEXT:    psraw $8, %xmm1
     62 ; SSSE3-NEXT:    movdqa %xmm2, %xmm0
     63 ; SSSE3-NEXT:    retq
     64 ;
     65 ; SSE41-LABEL: sext_16i8_to_16i16:
     66 ; SSE41:       # %bb.0: # %entry
     67 ; SSE41-NEXT:    pmovsxbw %xmm0, %xmm2
     68 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
     69 ; SSE41-NEXT:    pmovsxbw %xmm0, %xmm1
     70 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
     71 ; SSE41-NEXT:    retq
     72 ;
     73 ; AVX1-LABEL: sext_16i8_to_16i16:
     74 ; AVX1:       # %bb.0: # %entry
     75 ; AVX1-NEXT:    vpmovsxbw %xmm0, %xmm1
     76 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
     77 ; AVX1-NEXT:    vpmovsxbw %xmm0, %xmm0
     78 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
     79 ; AVX1-NEXT:    retq
     80 ;
     81 ; AVX2-LABEL: sext_16i8_to_16i16:
     82 ; AVX2:       # %bb.0: # %entry
     83 ; AVX2-NEXT:    vpmovsxbw %xmm0, %ymm0
     84 ; AVX2-NEXT:    retq
     85 ;
     86 ; AVX512-LABEL: sext_16i8_to_16i16:
     87 ; AVX512:       # %bb.0: # %entry
     88 ; AVX512-NEXT:    vpmovsxbw %xmm0, %ymm0
     89 ; AVX512-NEXT:    retq
     90 ;
     91 ; X32-SSE41-LABEL: sext_16i8_to_16i16:
     92 ; X32-SSE41:       # %bb.0: # %entry
     93 ; X32-SSE41-NEXT:    pmovsxbw %xmm0, %xmm2
     94 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
     95 ; X32-SSE41-NEXT:    pmovsxbw %xmm0, %xmm1
     96 ; X32-SSE41-NEXT:    movdqa %xmm2, %xmm0
     97 ; X32-SSE41-NEXT:    retl
     98 entry:
     99   %B = sext <16 x i8> %A to <16 x i16>
    100   ret <16 x i16> %B
    101 }
    102 
    103 define <32 x i16> @sext_32i8_to_32i16(<32 x i8> %A) nounwind uwtable readnone ssp {
    104 ; SSE2-LABEL: sext_32i8_to_32i16:
    105 ; SSE2:       # %bb.0: # %entry
    106 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3],xmm4[4],xmm0[4],xmm4[5],xmm0[5],xmm4[6],xmm0[6],xmm4[7],xmm0[7]
    107 ; SSE2-NEXT:    psraw $8, %xmm4
    108 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm5 = xmm5[8],xmm0[8],xmm5[9],xmm0[9],xmm5[10],xmm0[10],xmm5[11],xmm0[11],xmm5[12],xmm0[12],xmm5[13],xmm0[13],xmm5[14],xmm0[14],xmm5[15],xmm0[15]
    109 ; SSE2-NEXT:    psraw $8, %xmm5
    110 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
    111 ; SSE2-NEXT:    psraw $8, %xmm2
    112 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm1[8],xmm3[9],xmm1[9],xmm3[10],xmm1[10],xmm3[11],xmm1[11],xmm3[12],xmm1[12],xmm3[13],xmm1[13],xmm3[14],xmm1[14],xmm3[15],xmm1[15]
    113 ; SSE2-NEXT:    psraw $8, %xmm3
    114 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
    115 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
    116 ; SSE2-NEXT:    retq
    117 ;
    118 ; SSSE3-LABEL: sext_32i8_to_32i16:
    119 ; SSSE3:       # %bb.0: # %entry
    120 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3],xmm4[4],xmm0[4],xmm4[5],xmm0[5],xmm4[6],xmm0[6],xmm4[7],xmm0[7]
    121 ; SSSE3-NEXT:    psraw $8, %xmm4
    122 ; SSSE3-NEXT:    punpckhbw {{.*#+}} xmm5 = xmm5[8],xmm0[8],xmm5[9],xmm0[9],xmm5[10],xmm0[10],xmm5[11],xmm0[11],xmm5[12],xmm0[12],xmm5[13],xmm0[13],xmm5[14],xmm0[14],xmm5[15],xmm0[15]
    123 ; SSSE3-NEXT:    psraw $8, %xmm5
    124 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
    125 ; SSSE3-NEXT:    psraw $8, %xmm2
    126 ; SSSE3-NEXT:    punpckhbw {{.*#+}} xmm3 = xmm3[8],xmm1[8],xmm3[9],xmm1[9],xmm3[10],xmm1[10],xmm3[11],xmm1[11],xmm3[12],xmm1[12],xmm3[13],xmm1[13],xmm3[14],xmm1[14],xmm3[15],xmm1[15]
    127 ; SSSE3-NEXT:    psraw $8, %xmm3
    128 ; SSSE3-NEXT:    movdqa %xmm4, %xmm0
    129 ; SSSE3-NEXT:    movdqa %xmm5, %xmm1
    130 ; SSSE3-NEXT:    retq
    131 ;
    132 ; SSE41-LABEL: sext_32i8_to_32i16:
    133 ; SSE41:       # %bb.0: # %entry
    134 ; SSE41-NEXT:    pmovsxbw %xmm0, %xmm5
    135 ; SSE41-NEXT:    pmovsxbw %xmm1, %xmm2
    136 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    137 ; SSE41-NEXT:    pmovsxbw %xmm0, %xmm4
    138 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
    139 ; SSE41-NEXT:    pmovsxbw %xmm0, %xmm3
    140 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
    141 ; SSE41-NEXT:    movdqa %xmm4, %xmm1
    142 ; SSE41-NEXT:    retq
    143 ;
    144 ; AVX1-LABEL: sext_32i8_to_32i16:
    145 ; AVX1:       # %bb.0: # %entry
    146 ; AVX1-NEXT:    vpmovsxbw %xmm0, %xmm1
    147 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm0[2,3,0,1]
    148 ; AVX1-NEXT:    vpmovsxbw %xmm2, %xmm2
    149 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm2
    150 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
    151 ; AVX1-NEXT:    vpmovsxbw %xmm0, %xmm1
    152 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    153 ; AVX1-NEXT:    vpmovsxbw %xmm0, %xmm0
    154 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm1
    155 ; AVX1-NEXT:    vmovaps %ymm2, %ymm0
    156 ; AVX1-NEXT:    retq
    157 ;
    158 ; AVX2-LABEL: sext_32i8_to_32i16:
    159 ; AVX2:       # %bb.0: # %entry
    160 ; AVX2-NEXT:    vpmovsxbw %xmm0, %ymm2
    161 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
    162 ; AVX2-NEXT:    vpmovsxbw %xmm0, %ymm1
    163 ; AVX2-NEXT:    vmovdqa %ymm2, %ymm0
    164 ; AVX2-NEXT:    retq
    165 ;
    166 ; AVX512F-LABEL: sext_32i8_to_32i16:
    167 ; AVX512F:       # %bb.0: # %entry
    168 ; AVX512F-NEXT:    vpmovsxbw %xmm0, %ymm2
    169 ; AVX512F-NEXT:    vextracti128 $1, %ymm0, %xmm0
    170 ; AVX512F-NEXT:    vpmovsxbw %xmm0, %ymm1
    171 ; AVX512F-NEXT:    vmovdqa %ymm2, %ymm0
    172 ; AVX512F-NEXT:    retq
    173 ;
    174 ; AVX512BW-LABEL: sext_32i8_to_32i16:
    175 ; AVX512BW:       # %bb.0: # %entry
    176 ; AVX512BW-NEXT:    vpmovsxbw %ymm0, %zmm0
    177 ; AVX512BW-NEXT:    retq
    178 ;
    179 ; X32-SSE41-LABEL: sext_32i8_to_32i16:
    180 ; X32-SSE41:       # %bb.0: # %entry
    181 ; X32-SSE41-NEXT:    pmovsxbw %xmm0, %xmm5
    182 ; X32-SSE41-NEXT:    pmovsxbw %xmm1, %xmm2
    183 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    184 ; X32-SSE41-NEXT:    pmovsxbw %xmm0, %xmm4
    185 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
    186 ; X32-SSE41-NEXT:    pmovsxbw %xmm0, %xmm3
    187 ; X32-SSE41-NEXT:    movdqa %xmm5, %xmm0
    188 ; X32-SSE41-NEXT:    movdqa %xmm4, %xmm1
    189 ; X32-SSE41-NEXT:    retl
    190 entry:
    191   %B = sext <32 x i8> %A to <32 x i16>
    192   ret <32 x i16> %B
    193 }
    194 
    195 define <4 x i32> @sext_16i8_to_4i32(<16 x i8> %A) nounwind uwtable readnone ssp {
    196 ; SSE2-LABEL: sext_16i8_to_4i32:
    197 ; SSE2:       # %bb.0: # %entry
    198 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    199 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
    200 ; SSE2-NEXT:    psrad $24, %xmm0
    201 ; SSE2-NEXT:    retq
    202 ;
    203 ; SSSE3-LABEL: sext_16i8_to_4i32:
    204 ; SSSE3:       # %bb.0: # %entry
    205 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    206 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
    207 ; SSSE3-NEXT:    psrad $24, %xmm0
    208 ; SSSE3-NEXT:    retq
    209 ;
    210 ; SSE41-LABEL: sext_16i8_to_4i32:
    211 ; SSE41:       # %bb.0: # %entry
    212 ; SSE41-NEXT:    pmovsxbd %xmm0, %xmm0
    213 ; SSE41-NEXT:    retq
    214 ;
    215 ; AVX-LABEL: sext_16i8_to_4i32:
    216 ; AVX:       # %bb.0: # %entry
    217 ; AVX-NEXT:    vpmovsxbd %xmm0, %xmm0
    218 ; AVX-NEXT:    retq
    219 ;
    220 ; X32-SSE41-LABEL: sext_16i8_to_4i32:
    221 ; X32-SSE41:       # %bb.0: # %entry
    222 ; X32-SSE41-NEXT:    pmovsxbd %xmm0, %xmm0
    223 ; X32-SSE41-NEXT:    retl
    224 entry:
    225   %B = shufflevector <16 x i8> %A, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
    226   %C = sext <4 x i8> %B to <4 x i32>
    227   ret <4 x i32> %C
    228 }
    229 
    230 define <8 x i32> @sext_16i8_to_8i32(<16 x i8> %A) nounwind uwtable readnone ssp {
    231 ; SSE2-LABEL: sext_16i8_to_8i32:
    232 ; SSE2:       # %bb.0: # %entry
    233 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
    234 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
    235 ; SSE2-NEXT:    psrad $24, %xmm2
    236 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]
    237 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    238 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
    239 ; SSE2-NEXT:    psrad $24, %xmm1
    240 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    241 ; SSE2-NEXT:    retq
    242 ;
    243 ; SSSE3-LABEL: sext_16i8_to_8i32:
    244 ; SSSE3:       # %bb.0: # %entry
    245 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
    246 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    247 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
    248 ; SSSE3-NEXT:    psrad $24, %xmm0
    249 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[u,u,u,4,u,u,u,5,u,u,u,6,u,u,u,7]
    250 ; SSSE3-NEXT:    psrad $24, %xmm1
    251 ; SSSE3-NEXT:    retq
    252 ;
    253 ; SSE41-LABEL: sext_16i8_to_8i32:
    254 ; SSE41:       # %bb.0: # %entry
    255 ; SSE41-NEXT:    pmovsxbd %xmm0, %xmm2
    256 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]
    257 ; SSE41-NEXT:    pmovsxbd %xmm0, %xmm1
    258 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
    259 ; SSE41-NEXT:    retq
    260 ;
    261 ; AVX1-LABEL: sext_16i8_to_8i32:
    262 ; AVX1:       # %bb.0: # %entry
    263 ; AVX1-NEXT:    vpmovsxbd %xmm0, %xmm1
    264 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]
    265 ; AVX1-NEXT:    vpmovsxbd %xmm0, %xmm0
    266 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
    267 ; AVX1-NEXT:    retq
    268 ;
    269 ; AVX2-LABEL: sext_16i8_to_8i32:
    270 ; AVX2:       # %bb.0: # %entry
    271 ; AVX2-NEXT:    vpmovsxbd %xmm0, %ymm0
    272 ; AVX2-NEXT:    retq
    273 ;
    274 ; AVX512-LABEL: sext_16i8_to_8i32:
    275 ; AVX512:       # %bb.0: # %entry
    276 ; AVX512-NEXT:    vpmovsxbd %xmm0, %ymm0
    277 ; AVX512-NEXT:    retq
    278 ;
    279 ; X32-SSE41-LABEL: sext_16i8_to_8i32:
    280 ; X32-SSE41:       # %bb.0: # %entry
    281 ; X32-SSE41-NEXT:    pmovsxbd %xmm0, %xmm2
    282 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]
    283 ; X32-SSE41-NEXT:    pmovsxbd %xmm0, %xmm1
    284 ; X32-SSE41-NEXT:    movdqa %xmm2, %xmm0
    285 ; X32-SSE41-NEXT:    retl
    286 entry:
    287   %B = shufflevector <16 x i8> %A, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
    288   %C = sext <8 x i8> %B to <8 x i32>
    289   ret <8 x i32> %C
    290 }
    291 
    292 define <16 x i32> @sext_16i8_to_16i32(<16 x i8> %A) nounwind uwtable readnone ssp {
    293 ; SSE2-LABEL: sext_16i8_to_16i32:
    294 ; SSE2:       # %bb.0: # %entry
    295 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
    296 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1],xmm4[2],xmm1[2],xmm4[3],xmm1[3]
    297 ; SSE2-NEXT:    psrad $24, %xmm4
    298 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]
    299 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
    300 ; SSE2-NEXT:    psrad $24, %xmm2
    301 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
    302 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    303 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3]
    304 ; SSE2-NEXT:    psrad $24, %xmm1
    305 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,3]
    306 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    307 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3]
    308 ; SSE2-NEXT:    psrad $24, %xmm3
    309 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
    310 ; SSE2-NEXT:    retq
    311 ;
    312 ; SSSE3-LABEL: sext_16i8_to_16i32:
    313 ; SSSE3:       # %bb.0: # %entry
    314 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
    315 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    316 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
    317 ; SSSE3-NEXT:    psrad $24, %xmm0
    318 ; SSSE3-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm3[8],xmm1[9],xmm3[9],xmm1[10],xmm3[10],xmm1[11],xmm3[11],xmm1[12],xmm3[12],xmm1[13],xmm3[13],xmm1[14],xmm3[14],xmm1[15],xmm3[15]
    319 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
    320 ; SSSE3-NEXT:    psrad $24, %xmm2
    321 ; SSSE3-NEXT:    movdqa %xmm3, %xmm1
    322 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[u,u,u,4,u,u,u,5,u,u,u,6,u,u,u,7]
    323 ; SSSE3-NEXT:    psrad $24, %xmm1
    324 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm3 = xmm3[u,u,u,12,u,u,u,13,u,u,u,14,u,u,u,15]
    325 ; SSSE3-NEXT:    psrad $24, %xmm3
    326 ; SSSE3-NEXT:    retq
    327 ;
    328 ; SSE41-LABEL: sext_16i8_to_16i32:
    329 ; SSE41:       # %bb.0: # %entry
    330 ; SSE41-NEXT:    pmovsxbd %xmm0, %xmm4
    331 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
    332 ; SSE41-NEXT:    pmovsxbd %xmm1, %xmm1
    333 ; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,0,1]
    334 ; SSE41-NEXT:    pmovsxbd %xmm2, %xmm2
    335 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,3]
    336 ; SSE41-NEXT:    pmovsxbd %xmm0, %xmm3
    337 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
    338 ; SSE41-NEXT:    retq
    339 ;
    340 ; AVX1-LABEL: sext_16i8_to_16i32:
    341 ; AVX1:       # %bb.0: # %entry
    342 ; AVX1-NEXT:    vpmovsxbd %xmm0, %xmm1
    343 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
    344 ; AVX1-NEXT:    vpmovsxbd %xmm2, %xmm2
    345 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm2
    346 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
    347 ; AVX1-NEXT:    vpmovsxbd %xmm1, %xmm1
    348 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,1,2,3]
    349 ; AVX1-NEXT:    vpmovsxbd %xmm0, %xmm0
    350 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm1
    351 ; AVX1-NEXT:    vmovaps %ymm2, %ymm0
    352 ; AVX1-NEXT:    retq
    353 ;
    354 ; AVX2-LABEL: sext_16i8_to_16i32:
    355 ; AVX2:       # %bb.0: # %entry
    356 ; AVX2-NEXT:    vpmovsxbd %xmm0, %ymm2
    357 ; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    358 ; AVX2-NEXT:    vpmovsxbd %xmm0, %ymm1
    359 ; AVX2-NEXT:    vmovdqa %ymm2, %ymm0
    360 ; AVX2-NEXT:    retq
    361 ;
    362 ; AVX512-LABEL: sext_16i8_to_16i32:
    363 ; AVX512:       # %bb.0: # %entry
    364 ; AVX512-NEXT:    vpmovsxbd %xmm0, %zmm0
    365 ; AVX512-NEXT:    retq
    366 ;
    367 ; X32-SSE41-LABEL: sext_16i8_to_16i32:
    368 ; X32-SSE41:       # %bb.0: # %entry
    369 ; X32-SSE41-NEXT:    pmovsxbd %xmm0, %xmm4
    370 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
    371 ; X32-SSE41-NEXT:    pmovsxbd %xmm1, %xmm1
    372 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,0,1]
    373 ; X32-SSE41-NEXT:    pmovsxbd %xmm2, %xmm2
    374 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,3]
    375 ; X32-SSE41-NEXT:    pmovsxbd %xmm0, %xmm3
    376 ; X32-SSE41-NEXT:    movdqa %xmm4, %xmm0
    377 ; X32-SSE41-NEXT:    retl
    378 entry:
    379   %B = sext <16 x i8> %A to <16 x i32>
    380   ret <16 x i32> %B
    381 }
    382 
    383 define <2 x i64> @sext_16i8_to_2i64(<16 x i8> %A) nounwind uwtable readnone ssp {
    384 ; SSE2-LABEL: sext_16i8_to_2i64:
    385 ; SSE2:       # %bb.0: # %entry
    386 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    387 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
    388 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
    389 ; SSE2-NEXT:    psrad $31, %xmm1
    390 ; SSE2-NEXT:    psrad $24, %xmm0
    391 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
    392 ; SSE2-NEXT:    retq
    393 ;
    394 ; SSSE3-LABEL: sext_16i8_to_2i64:
    395 ; SSSE3:       # %bb.0: # %entry
    396 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    397 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
    398 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
    399 ; SSSE3-NEXT:    psrad $31, %xmm1
    400 ; SSSE3-NEXT:    psrad $24, %xmm0
    401 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
    402 ; SSSE3-NEXT:    retq
    403 ;
    404 ; SSE41-LABEL: sext_16i8_to_2i64:
    405 ; SSE41:       # %bb.0: # %entry
    406 ; SSE41-NEXT:    pmovsxbq %xmm0, %xmm0
    407 ; SSE41-NEXT:    retq
    408 ;
    409 ; AVX-LABEL: sext_16i8_to_2i64:
    410 ; AVX:       # %bb.0: # %entry
    411 ; AVX-NEXT:    vpmovsxbq %xmm0, %xmm0
    412 ; AVX-NEXT:    retq
    413 ;
    414 ; X32-SSE41-LABEL: sext_16i8_to_2i64:
    415 ; X32-SSE41:       # %bb.0: # %entry
    416 ; X32-SSE41-NEXT:    pmovsxbq %xmm0, %xmm0
    417 ; X32-SSE41-NEXT:    retl
    418 entry:
    419   %B = shufflevector <16 x i8> %A, <16 x i8> undef, <2 x i32> <i32 0, i32 1>
    420   %C = sext <2 x i8> %B to <2 x i64>
    421   ret <2 x i64> %C
    422 }
    423 
    424 define <4 x i64> @sext_16i8_to_4i64(<16 x i8> %A) nounwind uwtable readnone ssp {
    425 ; SSE2-LABEL: sext_16i8_to_4i64:
    426 ; SSE2:       # %bb.0: # %entry
    427 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
    428 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
    429 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
    430 ; SSE2-NEXT:    psrad $31, %xmm1
    431 ; SSE2-NEXT:    psrad $24, %xmm2
    432 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
    433 ; SSE2-NEXT:    psrld $16, %xmm0
    434 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    435 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
    436 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
    437 ; SSE2-NEXT:    psrad $31, %xmm0
    438 ; SSE2-NEXT:    psrad $24, %xmm1
    439 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
    440 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    441 ; SSE2-NEXT:    retq
    442 ;
    443 ; SSSE3-LABEL: sext_16i8_to_4i64:
    444 ; SSSE3:       # %bb.0: # %entry
    445 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
    446 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    447 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
    448 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
    449 ; SSSE3-NEXT:    psrad $31, %xmm2
    450 ; SSSE3-NEXT:    psrad $24, %xmm0
    451 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
    452 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm1 = xmm1[u,u,u,2,u,u,u,3,u,u,u,u,u,u,u,u]
    453 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
    454 ; SSSE3-NEXT:    psrad $31, %xmm2
    455 ; SSSE3-NEXT:    psrad $24, %xmm1
    456 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
    457 ; SSSE3-NEXT:    retq
    458 ;
    459 ; SSE41-LABEL: sext_16i8_to_4i64:
    460 ; SSE41:       # %bb.0: # %entry
    461 ; SSE41-NEXT:    pmovsxbq %xmm0, %xmm2
    462 ; SSE41-NEXT:    psrld $16, %xmm0
    463 ; SSE41-NEXT:    pmovsxbq %xmm0, %xmm1
    464 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
    465 ; SSE41-NEXT:    retq
    466 ;
    467 ; AVX1-LABEL: sext_16i8_to_4i64:
    468 ; AVX1:       # %bb.0: # %entry
    469 ; AVX1-NEXT:    vpmovsxbq %xmm0, %xmm1
    470 ; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm0
    471 ; AVX1-NEXT:    vpmovsxbq %xmm0, %xmm0
    472 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
    473 ; AVX1-NEXT:    retq
    474 ;
    475 ; AVX2-LABEL: sext_16i8_to_4i64:
    476 ; AVX2:       # %bb.0: # %entry
    477 ; AVX2-NEXT:    vpmovsxbq %xmm0, %ymm0
    478 ; AVX2-NEXT:    retq
    479 ;
    480 ; AVX512-LABEL: sext_16i8_to_4i64:
    481 ; AVX512:       # %bb.0: # %entry
    482 ; AVX512-NEXT:    vpmovsxbq %xmm0, %ymm0
    483 ; AVX512-NEXT:    retq
    484 ;
    485 ; X32-SSE41-LABEL: sext_16i8_to_4i64:
    486 ; X32-SSE41:       # %bb.0: # %entry
    487 ; X32-SSE41-NEXT:    pmovsxbq %xmm0, %xmm2
    488 ; X32-SSE41-NEXT:    psrld $16, %xmm0
    489 ; X32-SSE41-NEXT:    pmovsxbq %xmm0, %xmm1
    490 ; X32-SSE41-NEXT:    movdqa %xmm2, %xmm0
    491 ; X32-SSE41-NEXT:    retl
    492 entry:
    493   %B = shufflevector <16 x i8> %A, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
    494   %C = sext <4 x i8> %B to <4 x i64>
    495   ret <4 x i64> %C
    496 }
    497 
    498 define <8 x i64> @sext_16i8_to_8i64(<16 x i8> %A) nounwind uwtable readnone ssp {
    499 ; SSE2-LABEL: sext_16i8_to_8i64:
    500 ; SSE2:       # %bb.0: # %entry
    501 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
    502 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    503 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
    504 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
    505 ; SSE2-NEXT:    psrad $31, %xmm2
    506 ; SSE2-NEXT:    psrad $24, %xmm0
    507 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
    508 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm1[1,1,2,3]
    509 ; SSE2-NEXT:    psrld $16, %xmm1
    510 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    511 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3]
    512 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
    513 ; SSE2-NEXT:    psrad $31, %xmm2
    514 ; SSE2-NEXT:    psrad $24, %xmm1
    515 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
    516 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
    517 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0,0,1,1,2,2,3,3]
    518 ; SSE2-NEXT:    movdqa %xmm2, %xmm4
    519 ; SSE2-NEXT:    psrad $31, %xmm4
    520 ; SSE2-NEXT:    psrad $24, %xmm2
    521 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
    522 ; SSE2-NEXT:    psrld $16, %xmm3
    523 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
    524 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0,0,1,1,2,2,3,3]
    525 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
    526 ; SSE2-NEXT:    psrad $31, %xmm4
    527 ; SSE2-NEXT:    psrad $24, %xmm3
    528 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
    529 ; SSE2-NEXT:    retq
    530 ;
    531 ; SSSE3-LABEL: sext_16i8_to_8i64:
    532 ; SSSE3:       # %bb.0: # %entry
    533 ; SSSE3-NEXT:    movdqa {{.*#+}} xmm2 = <u,u,u,2,u,u,u,3,u,u,u,u,u,u,u,u>
    534 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3],xmm4[4],xmm0[4],xmm4[5],xmm0[5],xmm4[6],xmm0[6],xmm4[7],xmm0[7]
    535 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm0[1,1,2,3]
    536 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
    537 ; SSSE3-NEXT:    pshufb %xmm2, %xmm1
    538 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
    539 ; SSSE3-NEXT:    psrad $31, %xmm0
    540 ; SSSE3-NEXT:    psrad $24, %xmm1
    541 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
    542 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3]
    543 ; SSSE3-NEXT:    movdqa %xmm0, %xmm4
    544 ; SSSE3-NEXT:    psrad $31, %xmm4
    545 ; SSSE3-NEXT:    psrad $24, %xmm0
    546 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]
    547 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3],xmm4[4],xmm3[4],xmm4[5],xmm3[5],xmm4[6],xmm3[6],xmm4[7],xmm3[7]
    548 ; SSSE3-NEXT:    pshufb %xmm2, %xmm3
    549 ; SSSE3-NEXT:    movdqa %xmm3, %xmm2
    550 ; SSSE3-NEXT:    psrad $31, %xmm2
    551 ; SSSE3-NEXT:    psrad $24, %xmm3
    552 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1]
    553 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3]
    554 ; SSSE3-NEXT:    movdqa %xmm2, %xmm4
    555 ; SSSE3-NEXT:    psrad $31, %xmm4
    556 ; SSSE3-NEXT:    psrad $24, %xmm2
    557 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
    558 ; SSSE3-NEXT:    retq
    559 ;
    560 ; SSE41-LABEL: sext_16i8_to_8i64:
    561 ; SSE41:       # %bb.0: # %entry
    562 ; SSE41-NEXT:    pmovsxbq %xmm0, %xmm4
    563 ; SSE41-NEXT:    movdqa %xmm0, %xmm1
    564 ; SSE41-NEXT:    psrld $16, %xmm1
    565 ; SSE41-NEXT:    pmovsxbq %xmm1, %xmm1
    566 ; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
    567 ; SSE41-NEXT:    pmovsxbq %xmm2, %xmm2
    568 ; SSE41-NEXT:    psrlq $48, %xmm0
    569 ; SSE41-NEXT:    pmovsxbq %xmm0, %xmm3
    570 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
    571 ; SSE41-NEXT:    retq
    572 ;
    573 ; AVX1-LABEL: sext_16i8_to_8i64:
    574 ; AVX1:       # %bb.0: # %entry
    575 ; AVX1-NEXT:    vpmovsxbq %xmm0, %xmm1
    576 ; AVX1-NEXT:    vpsrld $16, %xmm0, %xmm2
    577 ; AVX1-NEXT:    vpmovsxbq %xmm2, %xmm2
    578 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm2
    579 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
    580 ; AVX1-NEXT:    vpmovsxbq %xmm1, %xmm1
    581 ; AVX1-NEXT:    vpsrlq $48, %xmm0, %xmm0
    582 ; AVX1-NEXT:    vpmovsxbq %xmm0, %xmm0
    583 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm1
    584 ; AVX1-NEXT:    vmovaps %ymm2, %ymm0
    585 ; AVX1-NEXT:    retq
    586 ;
    587 ; AVX2-LABEL: sext_16i8_to_8i64:
    588 ; AVX2:       # %bb.0: # %entry
    589 ; AVX2-NEXT:    vpmovsxbq %xmm0, %ymm2
    590 ; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]
    591 ; AVX2-NEXT:    vpmovsxbq %xmm0, %ymm1
    592 ; AVX2-NEXT:    vmovdqa %ymm2, %ymm0
    593 ; AVX2-NEXT:    retq
    594 ;
    595 ; AVX512-LABEL: sext_16i8_to_8i64:
    596 ; AVX512:       # %bb.0: # %entry
    597 ; AVX512-NEXT:    vpmovsxbq %xmm0, %zmm0
    598 ; AVX512-NEXT:    retq
    599 ;
    600 ; X32-SSE41-LABEL: sext_16i8_to_8i64:
    601 ; X32-SSE41:       # %bb.0: # %entry
    602 ; X32-SSE41-NEXT:    pmovsxbq %xmm0, %xmm4
    603 ; X32-SSE41-NEXT:    movdqa %xmm0, %xmm1
    604 ; X32-SSE41-NEXT:    psrld $16, %xmm1
    605 ; X32-SSE41-NEXT:    pmovsxbq %xmm1, %xmm1
    606 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
    607 ; X32-SSE41-NEXT:    pmovsxbq %xmm2, %xmm2
    608 ; X32-SSE41-NEXT:    psrlq $48, %xmm0
    609 ; X32-SSE41-NEXT:    pmovsxbq %xmm0, %xmm3
    610 ; X32-SSE41-NEXT:    movdqa %xmm4, %xmm0
    611 ; X32-SSE41-NEXT:    retl
    612 entry:
    613   %B = shufflevector <16 x i8> %A, <16 x i8> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
    614   %C = sext <8 x i8> %B to <8 x i64>
    615   ret <8 x i64> %C
    616 }
    617 
    618 define <4 x i32> @sext_8i16_to_4i32(<8 x i16> %A) nounwind uwtable readnone ssp {
    619 ; SSE2-LABEL: sext_8i16_to_4i32:
    620 ; SSE2:       # %bb.0: # %entry
    621 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
    622 ; SSE2-NEXT:    psrad $16, %xmm0
    623 ; SSE2-NEXT:    retq
    624 ;
    625 ; SSSE3-LABEL: sext_8i16_to_4i32:
    626 ; SSSE3:       # %bb.0: # %entry
    627 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
    628 ; SSSE3-NEXT:    psrad $16, %xmm0
    629 ; SSSE3-NEXT:    retq
    630 ;
    631 ; SSE41-LABEL: sext_8i16_to_4i32:
    632 ; SSE41:       # %bb.0: # %entry
    633 ; SSE41-NEXT:    pmovsxwd %xmm0, %xmm0
    634 ; SSE41-NEXT:    retq
    635 ;
    636 ; AVX-LABEL: sext_8i16_to_4i32:
    637 ; AVX:       # %bb.0: # %entry
    638 ; AVX-NEXT:    vpmovsxwd %xmm0, %xmm0
    639 ; AVX-NEXT:    retq
    640 ;
    641 ; X32-SSE41-LABEL: sext_8i16_to_4i32:
    642 ; X32-SSE41:       # %bb.0: # %entry
    643 ; X32-SSE41-NEXT:    pmovsxwd %xmm0, %xmm0
    644 ; X32-SSE41-NEXT:    retl
    645 entry:
    646   %B = shufflevector <8 x i16> %A, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
    647   %C = sext <4 x i16> %B to <4 x i32>
    648   ret <4 x i32> %C
    649 }
    650 
    651 define <8 x i32> @sext_8i16_to_8i32(<8 x i16> %A) nounwind uwtable readnone ssp {
    652 ; SSE2-LABEL: sext_8i16_to_8i32:
    653 ; SSE2:       # %bb.0: # %entry
    654 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
    655 ; SSE2-NEXT:    psrad $16, %xmm2
    656 ; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
    657 ; SSE2-NEXT:    psrad $16, %xmm1
    658 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    659 ; SSE2-NEXT:    retq
    660 ;
    661 ; SSSE3-LABEL: sext_8i16_to_8i32:
    662 ; SSSE3:       # %bb.0: # %entry
    663 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
    664 ; SSSE3-NEXT:    psrad $16, %xmm2
    665 ; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
    666 ; SSSE3-NEXT:    psrad $16, %xmm1
    667 ; SSSE3-NEXT:    movdqa %xmm2, %xmm0
    668 ; SSSE3-NEXT:    retq
    669 ;
    670 ; SSE41-LABEL: sext_8i16_to_8i32:
    671 ; SSE41:       # %bb.0: # %entry
    672 ; SSE41-NEXT:    pmovsxwd %xmm0, %xmm2
    673 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    674 ; SSE41-NEXT:    pmovsxwd %xmm0, %xmm1
    675 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
    676 ; SSE41-NEXT:    retq
    677 ;
    678 ; AVX1-LABEL: sext_8i16_to_8i32:
    679 ; AVX1:       # %bb.0: # %entry
    680 ; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm1
    681 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    682 ; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm0
    683 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
    684 ; AVX1-NEXT:    retq
    685 ;
    686 ; AVX2-LABEL: sext_8i16_to_8i32:
    687 ; AVX2:       # %bb.0: # %entry
    688 ; AVX2-NEXT:    vpmovsxwd %xmm0, %ymm0
    689 ; AVX2-NEXT:    retq
    690 ;
    691 ; AVX512-LABEL: sext_8i16_to_8i32:
    692 ; AVX512:       # %bb.0: # %entry
    693 ; AVX512-NEXT:    vpmovsxwd %xmm0, %ymm0
    694 ; AVX512-NEXT:    retq
    695 ;
    696 ; X32-SSE41-LABEL: sext_8i16_to_8i32:
    697 ; X32-SSE41:       # %bb.0: # %entry
    698 ; X32-SSE41-NEXT:    pmovsxwd %xmm0, %xmm2
    699 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    700 ; X32-SSE41-NEXT:    pmovsxwd %xmm0, %xmm1
    701 ; X32-SSE41-NEXT:    movdqa %xmm2, %xmm0
    702 ; X32-SSE41-NEXT:    retl
    703 entry:
    704   %B = sext <8 x i16> %A to <8 x i32>
    705   ret <8 x i32> %B
    706 }
    707 
    708 define <16 x i32> @sext_16i16_to_16i32(<16 x i16> %A) nounwind uwtable readnone ssp {
    709 ; SSE2-LABEL: sext_16i16_to_16i32:
    710 ; SSE2:       # %bb.0: # %entry
    711 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3]
    712 ; SSE2-NEXT:    psrad $16, %xmm4
    713 ; SSE2-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4],xmm0[4],xmm5[5],xmm0[5],xmm5[6],xmm0[6],xmm5[7],xmm0[7]
    714 ; SSE2-NEXT:    psrad $16, %xmm5
    715 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
    716 ; SSE2-NEXT:    psrad $16, %xmm2
    717 ; SSE2-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
    718 ; SSE2-NEXT:    psrad $16, %xmm3
    719 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
    720 ; SSE2-NEXT:    movdqa %xmm5, %xmm1
    721 ; SSE2-NEXT:    retq
    722 ;
    723 ; SSSE3-LABEL: sext_16i16_to_16i32:
    724 ; SSSE3:       # %bb.0: # %entry
    725 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3]
    726 ; SSSE3-NEXT:    psrad $16, %xmm4
    727 ; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm5 = xmm5[4],xmm0[4],xmm5[5],xmm0[5],xmm5[6],xmm0[6],xmm5[7],xmm0[7]
    728 ; SSSE3-NEXT:    psrad $16, %xmm5
    729 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
    730 ; SSSE3-NEXT:    psrad $16, %xmm2
    731 ; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm3 = xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
    732 ; SSSE3-NEXT:    psrad $16, %xmm3
    733 ; SSSE3-NEXT:    movdqa %xmm4, %xmm0
    734 ; SSSE3-NEXT:    movdqa %xmm5, %xmm1
    735 ; SSSE3-NEXT:    retq
    736 ;
    737 ; SSE41-LABEL: sext_16i16_to_16i32:
    738 ; SSE41:       # %bb.0: # %entry
    739 ; SSE41-NEXT:    pmovsxwd %xmm0, %xmm5
    740 ; SSE41-NEXT:    pmovsxwd %xmm1, %xmm2
    741 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    742 ; SSE41-NEXT:    pmovsxwd %xmm0, %xmm4
    743 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
    744 ; SSE41-NEXT:    pmovsxwd %xmm0, %xmm3
    745 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
    746 ; SSE41-NEXT:    movdqa %xmm4, %xmm1
    747 ; SSE41-NEXT:    retq
    748 ;
    749 ; AVX1-LABEL: sext_16i16_to_16i32:
    750 ; AVX1:       # %bb.0: # %entry
    751 ; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm1
    752 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm0[2,3,0,1]
    753 ; AVX1-NEXT:    vpmovsxwd %xmm2, %xmm2
    754 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm2
    755 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
    756 ; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm1
    757 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    758 ; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm0
    759 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm1
    760 ; AVX1-NEXT:    vmovaps %ymm2, %ymm0
    761 ; AVX1-NEXT:    retq
    762 ;
    763 ; AVX2-LABEL: sext_16i16_to_16i32:
    764 ; AVX2:       # %bb.0: # %entry
    765 ; AVX2-NEXT:    vpmovsxwd %xmm0, %ymm2
    766 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
    767 ; AVX2-NEXT:    vpmovsxwd %xmm0, %ymm1
    768 ; AVX2-NEXT:    vmovdqa %ymm2, %ymm0
    769 ; AVX2-NEXT:    retq
    770 ;
    771 ; AVX512-LABEL: sext_16i16_to_16i32:
    772 ; AVX512:       # %bb.0: # %entry
    773 ; AVX512-NEXT:    vpmovsxwd %ymm0, %zmm0
    774 ; AVX512-NEXT:    retq
    775 ;
    776 ; X32-SSE41-LABEL: sext_16i16_to_16i32:
    777 ; X32-SSE41:       # %bb.0: # %entry
    778 ; X32-SSE41-NEXT:    pmovsxwd %xmm0, %xmm5
    779 ; X32-SSE41-NEXT:    pmovsxwd %xmm1, %xmm2
    780 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    781 ; X32-SSE41-NEXT:    pmovsxwd %xmm0, %xmm4
    782 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
    783 ; X32-SSE41-NEXT:    pmovsxwd %xmm0, %xmm3
    784 ; X32-SSE41-NEXT:    movdqa %xmm5, %xmm0
    785 ; X32-SSE41-NEXT:    movdqa %xmm4, %xmm1
    786 ; X32-SSE41-NEXT:    retl
    787 entry:
    788   %B = sext <16 x i16> %A to <16 x i32>
    789   ret <16 x i32> %B
    790 }
    791 
    792 define <2 x i64> @sext_8i16_to_2i64(<8 x i16> %A) nounwind uwtable readnone ssp {
    793 ; SSE2-LABEL: sext_8i16_to_2i64:
    794 ; SSE2:       # %bb.0: # %entry
    795 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
    796 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
    797 ; SSE2-NEXT:    psrad $31, %xmm1
    798 ; SSE2-NEXT:    psrad $16, %xmm0
    799 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
    800 ; SSE2-NEXT:    retq
    801 ;
    802 ; SSSE3-LABEL: sext_8i16_to_2i64:
    803 ; SSSE3:       # %bb.0: # %entry
    804 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
    805 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
    806 ; SSSE3-NEXT:    psrad $31, %xmm1
    807 ; SSSE3-NEXT:    psrad $16, %xmm0
    808 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
    809 ; SSSE3-NEXT:    retq
    810 ;
    811 ; SSE41-LABEL: sext_8i16_to_2i64:
    812 ; SSE41:       # %bb.0: # %entry
    813 ; SSE41-NEXT:    pmovsxwq %xmm0, %xmm0
    814 ; SSE41-NEXT:    retq
    815 ;
    816 ; AVX-LABEL: sext_8i16_to_2i64:
    817 ; AVX:       # %bb.0: # %entry
    818 ; AVX-NEXT:    vpmovsxwq %xmm0, %xmm0
    819 ; AVX-NEXT:    retq
    820 ;
    821 ; X32-SSE41-LABEL: sext_8i16_to_2i64:
    822 ; X32-SSE41:       # %bb.0: # %entry
    823 ; X32-SSE41-NEXT:    pmovsxwq %xmm0, %xmm0
    824 ; X32-SSE41-NEXT:    retl
    825 entry:
    826   %B = shufflevector <8 x i16> %A, <8 x i16> undef, <2 x i32> <i32 0, i32 1>
    827   %C = sext <2 x i16> %B to <2 x i64>
    828   ret <2 x i64> %C
    829 }
    830 
    831 define <4 x i64> @sext_8i16_to_4i64(<8 x i16> %A) nounwind uwtable readnone ssp {
    832 ; SSE2-LABEL: sext_8i16_to_4i64:
    833 ; SSE2:       # %bb.0: # %entry
    834 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
    835 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
    836 ; SSE2-NEXT:    psrad $31, %xmm1
    837 ; SSE2-NEXT:    psrad $16, %xmm2
    838 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
    839 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,2,2,3,4,5,6,7]
    840 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
    841 ; SSE2-NEXT:    psrad $31, %xmm0
    842 ; SSE2-NEXT:    psrad $16, %xmm1
    843 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
    844 ; SSE2-NEXT:    movdqa %xmm2, %xmm0
    845 ; SSE2-NEXT:    retq
    846 ;
    847 ; SSSE3-LABEL: sext_8i16_to_4i64:
    848 ; SSSE3:       # %bb.0: # %entry
    849 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
    850 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
    851 ; SSSE3-NEXT:    psrad $31, %xmm1
    852 ; SSSE3-NEXT:    psrad $16, %xmm2
    853 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
    854 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,2,2,3,4,5,6,7]
    855 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
    856 ; SSSE3-NEXT:    psrad $31, %xmm0
    857 ; SSSE3-NEXT:    psrad $16, %xmm1
    858 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
    859 ; SSSE3-NEXT:    movdqa %xmm2, %xmm0
    860 ; SSSE3-NEXT:    retq
    861 ;
    862 ; SSE41-LABEL: sext_8i16_to_4i64:
    863 ; SSE41:       # %bb.0: # %entry
    864 ; SSE41-NEXT:    pmovsxwq %xmm0, %xmm2
    865 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]
    866 ; SSE41-NEXT:    pmovsxwq %xmm0, %xmm1
    867 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
    868 ; SSE41-NEXT:    retq
    869 ;
    870 ; AVX1-LABEL: sext_8i16_to_4i64:
    871 ; AVX1:       # %bb.0: # %entry
    872 ; AVX1-NEXT:    vpmovsxwq %xmm0, %xmm1
    873 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]
    874 ; AVX1-NEXT:    vpmovsxwq %xmm0, %xmm0
    875 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
    876 ; AVX1-NEXT:    retq
    877 ;
    878 ; AVX2-LABEL: sext_8i16_to_4i64:
    879 ; AVX2:       # %bb.0: # %entry
    880 ; AVX2-NEXT:    vpmovsxwq %xmm0, %ymm0
    881 ; AVX2-NEXT:    retq
    882 ;
    883 ; AVX512-LABEL: sext_8i16_to_4i64:
    884 ; AVX512:       # %bb.0: # %entry
    885 ; AVX512-NEXT:    vpmovsxwq %xmm0, %ymm0
    886 ; AVX512-NEXT:    retq
    887 ;
    888 ; X32-SSE41-LABEL: sext_8i16_to_4i64:
    889 ; X32-SSE41:       # %bb.0: # %entry
    890 ; X32-SSE41-NEXT:    pmovsxwq %xmm0, %xmm2
    891 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3]
    892 ; X32-SSE41-NEXT:    pmovsxwq %xmm0, %xmm1
    893 ; X32-SSE41-NEXT:    movdqa %xmm2, %xmm0
    894 ; X32-SSE41-NEXT:    retl
    895 entry:
    896   %B = shufflevector <8 x i16> %A, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
    897   %C = sext <4 x i16> %B to <4 x i64>
    898   ret <4 x i64> %C
    899 }
    900 
    901 define <8 x i64> @sext_8i16_to_8i64(<8 x i16> %A) nounwind uwtable readnone ssp {
    902 ; SSE2-LABEL: sext_8i16_to_8i64:
    903 ; SSE2:       # %bb.0: # %entry
    904 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3]
    905 ; SSE2-NEXT:    movdqa %xmm4, %xmm1
    906 ; SSE2-NEXT:    psrad $31, %xmm1
    907 ; SSE2-NEXT:    psrad $16, %xmm4
    908 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1]
    909 ; SSE2-NEXT:    punpckhwd {{.*#+}} xmm2 = xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
    910 ; SSE2-NEXT:    movdqa %xmm2, %xmm1
    911 ; SSE2-NEXT:    psrad $31, %xmm1
    912 ; SSE2-NEXT:    psrad $16, %xmm2
    913 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
    914 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,2,2,3,4,5,6,7]
    915 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
    916 ; SSE2-NEXT:    psrad $31, %xmm3
    917 ; SSE2-NEXT:    psrad $16, %xmm1
    918 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
    919 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    920 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm3 = xmm0[0,2,2,3,4,5,6,7]
    921 ; SSE2-NEXT:    movdqa %xmm3, %xmm0
    922 ; SSE2-NEXT:    psrad $31, %xmm0
    923 ; SSE2-NEXT:    psrad $16, %xmm3
    924 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
    925 ; SSE2-NEXT:    movdqa %xmm4, %xmm0
    926 ; SSE2-NEXT:    retq
    927 ;
    928 ; SSSE3-LABEL: sext_8i16_to_8i64:
    929 ; SSSE3:       # %bb.0: # %entry
    930 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm0[0],xmm4[1],xmm0[1],xmm4[2],xmm0[2],xmm4[3],xmm0[3]
    931 ; SSSE3-NEXT:    movdqa %xmm4, %xmm1
    932 ; SSSE3-NEXT:    psrad $31, %xmm1
    933 ; SSSE3-NEXT:    psrad $16, %xmm4
    934 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1]
    935 ; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm2 = xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
    936 ; SSSE3-NEXT:    movdqa %xmm2, %xmm1
    937 ; SSSE3-NEXT:    psrad $31, %xmm1
    938 ; SSSE3-NEXT:    psrad $16, %xmm2
    939 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
    940 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm1 = xmm0[0,2,2,3,4,5,6,7]
    941 ; SSSE3-NEXT:    movdqa %xmm1, %xmm3
    942 ; SSSE3-NEXT:    psrad $31, %xmm3
    943 ; SSSE3-NEXT:    psrad $16, %xmm1
    944 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
    945 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    946 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm3 = xmm0[0,2,2,3,4,5,6,7]
    947 ; SSSE3-NEXT:    movdqa %xmm3, %xmm0
    948 ; SSSE3-NEXT:    psrad $31, %xmm0
    949 ; SSSE3-NEXT:    psrad $16, %xmm3
    950 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1]
    951 ; SSSE3-NEXT:    movdqa %xmm4, %xmm0
    952 ; SSSE3-NEXT:    retq
    953 ;
    954 ; SSE41-LABEL: sext_8i16_to_8i64:
    955 ; SSE41:       # %bb.0: # %entry
    956 ; SSE41-NEXT:    pmovsxwq %xmm0, %xmm4
    957 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
    958 ; SSE41-NEXT:    pmovsxwq %xmm1, %xmm1
    959 ; SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,0,1]
    960 ; SSE41-NEXT:    pmovsxwq %xmm2, %xmm2
    961 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,3]
    962 ; SSE41-NEXT:    pmovsxwq %xmm0, %xmm3
    963 ; SSE41-NEXT:    movdqa %xmm4, %xmm0
    964 ; SSE41-NEXT:    retq
    965 ;
    966 ; AVX1-LABEL: sext_8i16_to_8i64:
    967 ; AVX1:       # %bb.0: # %entry
    968 ; AVX1-NEXT:    vpmovsxwq %xmm0, %xmm1
    969 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm0[1,1,2,3]
    970 ; AVX1-NEXT:    vpmovsxwq %xmm2, %xmm2
    971 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm2
    972 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
    973 ; AVX1-NEXT:    vpmovsxwq %xmm1, %xmm1
    974 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[3,1,2,3]
    975 ; AVX1-NEXT:    vpmovsxwq %xmm0, %xmm0
    976 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm1
    977 ; AVX1-NEXT:    vmovaps %ymm2, %ymm0
    978 ; AVX1-NEXT:    retq
    979 ;
    980 ; AVX2-LABEL: sext_8i16_to_8i64:
    981 ; AVX2:       # %bb.0: # %entry
    982 ; AVX2-NEXT:    vpmovsxwq %xmm0, %ymm2
    983 ; AVX2-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
    984 ; AVX2-NEXT:    vpmovsxwq %xmm0, %ymm1
    985 ; AVX2-NEXT:    vmovdqa %ymm2, %ymm0
    986 ; AVX2-NEXT:    retq
    987 ;
    988 ; AVX512-LABEL: sext_8i16_to_8i64:
    989 ; AVX512:       # %bb.0: # %entry
    990 ; AVX512-NEXT:    vpmovsxwq %xmm0, %zmm0
    991 ; AVX512-NEXT:    retq
    992 ;
    993 ; X32-SSE41-LABEL: sext_8i16_to_8i64:
    994 ; X32-SSE41:       # %bb.0: # %entry
    995 ; X32-SSE41-NEXT:    pmovsxwq %xmm0, %xmm4
    996 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[1,1,2,3]
    997 ; X32-SSE41-NEXT:    pmovsxwq %xmm1, %xmm1
    998 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm2 = xmm0[2,3,0,1]
    999 ; X32-SSE41-NEXT:    pmovsxwq %xmm2, %xmm2
   1000 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[3,1,2,3]
   1001 ; X32-SSE41-NEXT:    pmovsxwq %xmm0, %xmm3
   1002 ; X32-SSE41-NEXT:    movdqa %xmm4, %xmm0
   1003 ; X32-SSE41-NEXT:    retl
   1004 entry:
   1005   %B = sext <8 x i16> %A to <8 x i64>
   1006   ret <8 x i64> %B
   1007 }
   1008 
   1009 define <2 x i64> @sext_4i32_to_2i64(<4 x i32> %A) nounwind uwtable readnone ssp {
   1010 ; SSE2-LABEL: sext_4i32_to_2i64:
   1011 ; SSE2:       # %bb.0: # %entry
   1012 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
   1013 ; SSE2-NEXT:    psrad $31, %xmm1
   1014 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
   1015 ; SSE2-NEXT:    retq
   1016 ;
   1017 ; SSSE3-LABEL: sext_4i32_to_2i64:
   1018 ; SSSE3:       # %bb.0: # %entry
   1019 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
   1020 ; SSSE3-NEXT:    psrad $31, %xmm1
   1021 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
   1022 ; SSSE3-NEXT:    retq
   1023 ;
   1024 ; SSE41-LABEL: sext_4i32_to_2i64:
   1025 ; SSE41:       # %bb.0: # %entry
   1026 ; SSE41-NEXT:    pmovsxdq %xmm0, %xmm0
   1027 ; SSE41-NEXT:    retq
   1028 ;
   1029 ; AVX-LABEL: sext_4i32_to_2i64:
   1030 ; AVX:       # %bb.0: # %entry
   1031 ; AVX-NEXT:    vpmovsxdq %xmm0, %xmm0
   1032 ; AVX-NEXT:    retq
   1033 ;
   1034 ; X32-SSE41-LABEL: sext_4i32_to_2i64:
   1035 ; X32-SSE41:       # %bb.0: # %entry
   1036 ; X32-SSE41-NEXT:    pmovsxdq %xmm0, %xmm0
   1037 ; X32-SSE41-NEXT:    retl
   1038 entry:
   1039   %B = shufflevector <4 x i32> %A, <4 x i32> undef, <2 x i32> <i32 0, i32 1>
   1040   %C = sext <2 x i32> %B to <2 x i64>
   1041   ret <2 x i64> %C
   1042 }
   1043 
   1044 define <4 x i64> @sext_4i32_to_4i64(<4 x i32> %A) nounwind uwtable readnone ssp {
   1045 ; SSE2-LABEL: sext_4i32_to_4i64:
   1046 ; SSE2:       # %bb.0: # %entry
   1047 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   1048 ; SSE2-NEXT:    psrad $31, %xmm2
   1049 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
   1050 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   1051 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1052 ; SSE2-NEXT:    psrad $31, %xmm2
   1053 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
   1054 ; SSE2-NEXT:    retq
   1055 ;
   1056 ; SSSE3-LABEL: sext_4i32_to_4i64:
   1057 ; SSSE3:       # %bb.0: # %entry
   1058 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
   1059 ; SSSE3-NEXT:    psrad $31, %xmm2
   1060 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
   1061 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   1062 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
   1063 ; SSSE3-NEXT:    psrad $31, %xmm2
   1064 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
   1065 ; SSSE3-NEXT:    retq
   1066 ;
   1067 ; SSE41-LABEL: sext_4i32_to_4i64:
   1068 ; SSE41:       # %bb.0: # %entry
   1069 ; SSE41-NEXT:    pmovsxdq %xmm0, %xmm2
   1070 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   1071 ; SSE41-NEXT:    pmovsxdq %xmm0, %xmm1
   1072 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
   1073 ; SSE41-NEXT:    retq
   1074 ;
   1075 ; AVX1-LABEL: sext_4i32_to_4i64:
   1076 ; AVX1:       # %bb.0: # %entry
   1077 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm1
   1078 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   1079 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
   1080 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1081 ; AVX1-NEXT:    retq
   1082 ;
   1083 ; AVX2-LABEL: sext_4i32_to_4i64:
   1084 ; AVX2:       # %bb.0: # %entry
   1085 ; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm0
   1086 ; AVX2-NEXT:    retq
   1087 ;
   1088 ; AVX512-LABEL: sext_4i32_to_4i64:
   1089 ; AVX512:       # %bb.0: # %entry
   1090 ; AVX512-NEXT:    vpmovsxdq %xmm0, %ymm0
   1091 ; AVX512-NEXT:    retq
   1092 ;
   1093 ; X32-SSE41-LABEL: sext_4i32_to_4i64:
   1094 ; X32-SSE41:       # %bb.0: # %entry
   1095 ; X32-SSE41-NEXT:    pmovsxdq %xmm0, %xmm2
   1096 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   1097 ; X32-SSE41-NEXT:    pmovsxdq %xmm0, %xmm1
   1098 ; X32-SSE41-NEXT:    movdqa %xmm2, %xmm0
   1099 ; X32-SSE41-NEXT:    retl
   1100 entry:
   1101   %B = sext <4 x i32> %A to <4 x i64>
   1102   ret <4 x i64> %B
   1103 }
   1104 
   1105 define <8 x i64> @sext_8i32_to_8i64(<8 x i32> %A) nounwind uwtable readnone ssp {
   1106 ; SSE2-LABEL: sext_8i32_to_8i64:
   1107 ; SSE2:       # %bb.0: # %entry
   1108 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   1109 ; SSE2-NEXT:    movdqa %xmm0, %xmm3
   1110 ; SSE2-NEXT:    psrad $31, %xmm3
   1111 ; SSE2-NEXT:    movdqa %xmm1, %xmm4
   1112 ; SSE2-NEXT:    psrad $31, %xmm4
   1113 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
   1114 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
   1115 ; SSE2-NEXT:    movdqa %xmm1, %xmm3
   1116 ; SSE2-NEXT:    psrad $31, %xmm3
   1117 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
   1118 ; SSE2-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[2,3,0,1]
   1119 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
   1120 ; SSE2-NEXT:    movdqa %xmm3, %xmm4
   1121 ; SSE2-NEXT:    psrad $31, %xmm4
   1122 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
   1123 ; SSE2-NEXT:    retq
   1124 ;
   1125 ; SSSE3-LABEL: sext_8i32_to_8i64:
   1126 ; SSSE3:       # %bb.0: # %entry
   1127 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
   1128 ; SSSE3-NEXT:    movdqa %xmm0, %xmm3
   1129 ; SSSE3-NEXT:    psrad $31, %xmm3
   1130 ; SSSE3-NEXT:    movdqa %xmm1, %xmm4
   1131 ; SSSE3-NEXT:    psrad $31, %xmm4
   1132 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
   1133 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
   1134 ; SSSE3-NEXT:    movdqa %xmm1, %xmm3
   1135 ; SSSE3-NEXT:    psrad $31, %xmm3
   1136 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
   1137 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm3 = xmm2[2,3,0,1]
   1138 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1]
   1139 ; SSSE3-NEXT:    movdqa %xmm3, %xmm4
   1140 ; SSSE3-NEXT:    psrad $31, %xmm4
   1141 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1]
   1142 ; SSSE3-NEXT:    retq
   1143 ;
   1144 ; SSE41-LABEL: sext_8i32_to_8i64:
   1145 ; SSE41:       # %bb.0: # %entry
   1146 ; SSE41-NEXT:    pmovsxdq %xmm0, %xmm5
   1147 ; SSE41-NEXT:    pmovsxdq %xmm1, %xmm2
   1148 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   1149 ; SSE41-NEXT:    pmovsxdq %xmm0, %xmm4
   1150 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
   1151 ; SSE41-NEXT:    pmovsxdq %xmm0, %xmm3
   1152 ; SSE41-NEXT:    movdqa %xmm5, %xmm0
   1153 ; SSE41-NEXT:    movdqa %xmm4, %xmm1
   1154 ; SSE41-NEXT:    retq
   1155 ;
   1156 ; AVX1-LABEL: sext_8i32_to_8i64:
   1157 ; AVX1:       # %bb.0: # %entry
   1158 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm1
   1159 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm2 = xmm0[2,3,0,1]
   1160 ; AVX1-NEXT:    vpmovsxdq %xmm2, %xmm2
   1161 ; AVX1-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm2
   1162 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm0
   1163 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm1
   1164 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   1165 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
   1166 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm1
   1167 ; AVX1-NEXT:    vmovaps %ymm2, %ymm0
   1168 ; AVX1-NEXT:    retq
   1169 ;
   1170 ; AVX2-LABEL: sext_8i32_to_8i64:
   1171 ; AVX2:       # %bb.0: # %entry
   1172 ; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm2
   1173 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
   1174 ; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm1
   1175 ; AVX2-NEXT:    vmovdqa %ymm2, %ymm0
   1176 ; AVX2-NEXT:    retq
   1177 ;
   1178 ; AVX512-LABEL: sext_8i32_to_8i64:
   1179 ; AVX512:       # %bb.0: # %entry
   1180 ; AVX512-NEXT:    vpmovsxdq %ymm0, %zmm0
   1181 ; AVX512-NEXT:    retq
   1182 ;
   1183 ; X32-SSE41-LABEL: sext_8i32_to_8i64:
   1184 ; X32-SSE41:       # %bb.0: # %entry
   1185 ; X32-SSE41-NEXT:    pmovsxdq %xmm0, %xmm5
   1186 ; X32-SSE41-NEXT:    pmovsxdq %xmm1, %xmm2
   1187 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   1188 ; X32-SSE41-NEXT:    pmovsxdq %xmm0, %xmm4
   1189 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm1[2,3,0,1]
   1190 ; X32-SSE41-NEXT:    pmovsxdq %xmm0, %xmm3
   1191 ; X32-SSE41-NEXT:    movdqa %xmm5, %xmm0
   1192 ; X32-SSE41-NEXT:    movdqa %xmm4, %xmm1
   1193 ; X32-SSE41-NEXT:    retl
   1194 entry:
   1195   %B = sext <8 x i32> %A to <8 x i64>
   1196   ret <8 x i64> %B
   1197 }
   1198 
   1199 define <2 x i64> @load_sext_2i1_to_2i64(<2 x i1> *%ptr) {
   1200 ; SSE-LABEL: load_sext_2i1_to_2i64:
   1201 ; SSE:       # %bb.0: # %entry
   1202 ; SSE-NEXT:    movzbl (%rdi), %eax
   1203 ; SSE-NEXT:    movq %rax, %rcx
   1204 ; SSE-NEXT:    shlq $62, %rcx
   1205 ; SSE-NEXT:    sarq $63, %rcx
   1206 ; SSE-NEXT:    movq %rcx, %xmm1
   1207 ; SSE-NEXT:    shlq $63, %rax
   1208 ; SSE-NEXT:    sarq $63, %rax
   1209 ; SSE-NEXT:    movq %rax, %xmm0
   1210 ; SSE-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   1211 ; SSE-NEXT:    retq
   1212 ;
   1213 ; AVX1-LABEL: load_sext_2i1_to_2i64:
   1214 ; AVX1:       # %bb.0: # %entry
   1215 ; AVX1-NEXT:    movzbl (%rdi), %eax
   1216 ; AVX1-NEXT:    movq %rax, %rcx
   1217 ; AVX1-NEXT:    shlq $62, %rcx
   1218 ; AVX1-NEXT:    sarq $63, %rcx
   1219 ; AVX1-NEXT:    vmovq %rcx, %xmm0
   1220 ; AVX1-NEXT:    shlq $63, %rax
   1221 ; AVX1-NEXT:    sarq $63, %rax
   1222 ; AVX1-NEXT:    vmovq %rax, %xmm1
   1223 ; AVX1-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
   1224 ; AVX1-NEXT:    retq
   1225 ;
   1226 ; AVX2-LABEL: load_sext_2i1_to_2i64:
   1227 ; AVX2:       # %bb.0: # %entry
   1228 ; AVX2-NEXT:    movzbl (%rdi), %eax
   1229 ; AVX2-NEXT:    movq %rax, %rcx
   1230 ; AVX2-NEXT:    shlq $62, %rcx
   1231 ; AVX2-NEXT:    sarq $63, %rcx
   1232 ; AVX2-NEXT:    vmovq %rcx, %xmm0
   1233 ; AVX2-NEXT:    shlq $63, %rax
   1234 ; AVX2-NEXT:    sarq $63, %rax
   1235 ; AVX2-NEXT:    vmovq %rax, %xmm1
   1236 ; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
   1237 ; AVX2-NEXT:    retq
   1238 ;
   1239 ; AVX512F-LABEL: load_sext_2i1_to_2i64:
   1240 ; AVX512F:       # %bb.0: # %entry
   1241 ; AVX512F-NEXT:    movzbl (%rdi), %eax
   1242 ; AVX512F-NEXT:    kmovw %eax, %k1
   1243 ; AVX512F-NEXT:    vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
   1244 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
   1245 ; AVX512F-NEXT:    vzeroupper
   1246 ; AVX512F-NEXT:    retq
   1247 ;
   1248 ; AVX512BW-LABEL: load_sext_2i1_to_2i64:
   1249 ; AVX512BW:       # %bb.0: # %entry
   1250 ; AVX512BW-NEXT:    movzbl (%rdi), %eax
   1251 ; AVX512BW-NEXT:    kmovd %eax, %k1
   1252 ; AVX512BW-NEXT:    vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
   1253 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
   1254 ; AVX512BW-NEXT:    vzeroupper
   1255 ; AVX512BW-NEXT:    retq
   1256 ;
   1257 ; X32-SSE41-LABEL: load_sext_2i1_to_2i64:
   1258 ; X32-SSE41:       # %bb.0: # %entry
   1259 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   1260 ; X32-SSE41-NEXT:    movzbl (%eax), %eax
   1261 ; X32-SSE41-NEXT:    movl %eax, %ecx
   1262 ; X32-SSE41-NEXT:    shll $31, %ecx
   1263 ; X32-SSE41-NEXT:    sarl $31, %ecx
   1264 ; X32-SSE41-NEXT:    movd %ecx, %xmm0
   1265 ; X32-SSE41-NEXT:    pinsrd $1, %ecx, %xmm0
   1266 ; X32-SSE41-NEXT:    shll $30, %eax
   1267 ; X32-SSE41-NEXT:    sarl $31, %eax
   1268 ; X32-SSE41-NEXT:    pinsrd $2, %eax, %xmm0
   1269 ; X32-SSE41-NEXT:    pinsrd $3, %eax, %xmm0
   1270 ; X32-SSE41-NEXT:    retl
   1271 entry:
   1272  %X = load <2 x i1>, <2 x i1>* %ptr
   1273  %Y = sext <2 x i1> %X to <2 x i64>
   1274  ret <2 x i64> %Y
   1275 }
   1276 
   1277 define <2 x i64> @load_sext_2i8_to_2i64(<2 x i8> *%ptr) {
   1278 ; SSE2-LABEL: load_sext_2i8_to_2i64:
   1279 ; SSE2:       # %bb.0: # %entry
   1280 ; SSE2-NEXT:    movzwl (%rdi), %eax
   1281 ; SSE2-NEXT:    movd %eax, %xmm0
   1282 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   1283 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
   1284 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
   1285 ; SSE2-NEXT:    psrad $31, %xmm1
   1286 ; SSE2-NEXT:    psrad $24, %xmm0
   1287 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
   1288 ; SSE2-NEXT:    retq
   1289 ;
   1290 ; SSSE3-LABEL: load_sext_2i8_to_2i64:
   1291 ; SSSE3:       # %bb.0: # %entry
   1292 ; SSSE3-NEXT:    movzwl (%rdi), %eax
   1293 ; SSSE3-NEXT:    movd %eax, %xmm0
   1294 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[u,u,u,0,u,u,u,1,u,u,u,u,u,u,u,u]
   1295 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
   1296 ; SSSE3-NEXT:    psrad $31, %xmm1
   1297 ; SSSE3-NEXT:    psrad $24, %xmm0
   1298 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
   1299 ; SSSE3-NEXT:    retq
   1300 ;
   1301 ; SSE41-LABEL: load_sext_2i8_to_2i64:
   1302 ; SSE41:       # %bb.0: # %entry
   1303 ; SSE41-NEXT:    pmovsxbq (%rdi), %xmm0
   1304 ; SSE41-NEXT:    retq
   1305 ;
   1306 ; AVX-LABEL: load_sext_2i8_to_2i64:
   1307 ; AVX:       # %bb.0: # %entry
   1308 ; AVX-NEXT:    vpmovsxbq (%rdi), %xmm0
   1309 ; AVX-NEXT:    retq
   1310 ;
   1311 ; X32-SSE41-LABEL: load_sext_2i8_to_2i64:
   1312 ; X32-SSE41:       # %bb.0: # %entry
   1313 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   1314 ; X32-SSE41-NEXT:    pmovsxbq (%eax), %xmm0
   1315 ; X32-SSE41-NEXT:    retl
   1316 entry:
   1317  %X = load <2 x i8>, <2 x i8>* %ptr
   1318  %Y = sext <2 x i8> %X to <2 x i64>
   1319  ret <2 x i64> %Y
   1320 }
   1321 
   1322 define <4 x i32> @load_sext_4i1_to_4i32(<4 x i1> *%ptr) {
   1323 ; SSE2-LABEL: load_sext_4i1_to_4i32:
   1324 ; SSE2:       # %bb.0: # %entry
   1325 ; SSE2-NEXT:    movzbl (%rdi), %eax
   1326 ; SSE2-NEXT:    movq %rax, %rcx
   1327 ; SSE2-NEXT:    shlq $60, %rcx
   1328 ; SSE2-NEXT:    sarq $63, %rcx
   1329 ; SSE2-NEXT:    movd %ecx, %xmm0
   1330 ; SSE2-NEXT:    movq %rax, %rcx
   1331 ; SSE2-NEXT:    shlq $61, %rcx
   1332 ; SSE2-NEXT:    sarq $63, %rcx
   1333 ; SSE2-NEXT:    movd %ecx, %xmm1
   1334 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
   1335 ; SSE2-NEXT:    movq %rax, %rcx
   1336 ; SSE2-NEXT:    shlq $62, %rcx
   1337 ; SSE2-NEXT:    sarq $63, %rcx
   1338 ; SSE2-NEXT:    movd %ecx, %xmm2
   1339 ; SSE2-NEXT:    shlq $63, %rax
   1340 ; SSE2-NEXT:    sarq $63, %rax
   1341 ; SSE2-NEXT:    movd %eax, %xmm0
   1342 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   1343 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   1344 ; SSE2-NEXT:    retq
   1345 ;
   1346 ; SSSE3-LABEL: load_sext_4i1_to_4i32:
   1347 ; SSSE3:       # %bb.0: # %entry
   1348 ; SSSE3-NEXT:    movzbl (%rdi), %eax
   1349 ; SSSE3-NEXT:    movq %rax, %rcx
   1350 ; SSSE3-NEXT:    shlq $60, %rcx
   1351 ; SSSE3-NEXT:    sarq $63, %rcx
   1352 ; SSSE3-NEXT:    movd %ecx, %xmm0
   1353 ; SSSE3-NEXT:    movq %rax, %rcx
   1354 ; SSSE3-NEXT:    shlq $61, %rcx
   1355 ; SSSE3-NEXT:    sarq $63, %rcx
   1356 ; SSSE3-NEXT:    movd %ecx, %xmm1
   1357 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
   1358 ; SSSE3-NEXT:    movq %rax, %rcx
   1359 ; SSSE3-NEXT:    shlq $62, %rcx
   1360 ; SSSE3-NEXT:    sarq $63, %rcx
   1361 ; SSSE3-NEXT:    movd %ecx, %xmm2
   1362 ; SSSE3-NEXT:    shlq $63, %rax
   1363 ; SSSE3-NEXT:    sarq $63, %rax
   1364 ; SSSE3-NEXT:    movd %eax, %xmm0
   1365 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   1366 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   1367 ; SSSE3-NEXT:    retq
   1368 ;
   1369 ; SSE41-LABEL: load_sext_4i1_to_4i32:
   1370 ; SSE41:       # %bb.0: # %entry
   1371 ; SSE41-NEXT:    movzbl (%rdi), %eax
   1372 ; SSE41-NEXT:    movq %rax, %rcx
   1373 ; SSE41-NEXT:    shlq $62, %rcx
   1374 ; SSE41-NEXT:    sarq $63, %rcx
   1375 ; SSE41-NEXT:    movq %rax, %rdx
   1376 ; SSE41-NEXT:    shlq $63, %rdx
   1377 ; SSE41-NEXT:    sarq $63, %rdx
   1378 ; SSE41-NEXT:    movd %edx, %xmm0
   1379 ; SSE41-NEXT:    pinsrd $1, %ecx, %xmm0
   1380 ; SSE41-NEXT:    movq %rax, %rcx
   1381 ; SSE41-NEXT:    shlq $61, %rcx
   1382 ; SSE41-NEXT:    sarq $63, %rcx
   1383 ; SSE41-NEXT:    pinsrd $2, %ecx, %xmm0
   1384 ; SSE41-NEXT:    shlq $60, %rax
   1385 ; SSE41-NEXT:    sarq $63, %rax
   1386 ; SSE41-NEXT:    pinsrd $3, %eax, %xmm0
   1387 ; SSE41-NEXT:    retq
   1388 ;
   1389 ; AVX1-LABEL: load_sext_4i1_to_4i32:
   1390 ; AVX1:       # %bb.0: # %entry
   1391 ; AVX1-NEXT:    movzbl (%rdi), %eax
   1392 ; AVX1-NEXT:    movq %rax, %rcx
   1393 ; AVX1-NEXT:    shlq $62, %rcx
   1394 ; AVX1-NEXT:    sarq $63, %rcx
   1395 ; AVX1-NEXT:    movq %rax, %rdx
   1396 ; AVX1-NEXT:    shlq $63, %rdx
   1397 ; AVX1-NEXT:    sarq $63, %rdx
   1398 ; AVX1-NEXT:    vmovd %edx, %xmm0
   1399 ; AVX1-NEXT:    vpinsrd $1, %ecx, %xmm0, %xmm0
   1400 ; AVX1-NEXT:    movq %rax, %rcx
   1401 ; AVX1-NEXT:    shlq $61, %rcx
   1402 ; AVX1-NEXT:    sarq $63, %rcx
   1403 ; AVX1-NEXT:    vpinsrd $2, %ecx, %xmm0, %xmm0
   1404 ; AVX1-NEXT:    shlq $60, %rax
   1405 ; AVX1-NEXT:    sarq $63, %rax
   1406 ; AVX1-NEXT:    vpinsrd $3, %eax, %xmm0, %xmm0
   1407 ; AVX1-NEXT:    retq
   1408 ;
   1409 ; AVX2-LABEL: load_sext_4i1_to_4i32:
   1410 ; AVX2:       # %bb.0: # %entry
   1411 ; AVX2-NEXT:    movzbl (%rdi), %eax
   1412 ; AVX2-NEXT:    movq %rax, %rcx
   1413 ; AVX2-NEXT:    shlq $62, %rcx
   1414 ; AVX2-NEXT:    sarq $63, %rcx
   1415 ; AVX2-NEXT:    movq %rax, %rdx
   1416 ; AVX2-NEXT:    shlq $63, %rdx
   1417 ; AVX2-NEXT:    sarq $63, %rdx
   1418 ; AVX2-NEXT:    vmovd %edx, %xmm0
   1419 ; AVX2-NEXT:    vpinsrd $1, %ecx, %xmm0, %xmm0
   1420 ; AVX2-NEXT:    movq %rax, %rcx
   1421 ; AVX2-NEXT:    shlq $61, %rcx
   1422 ; AVX2-NEXT:    sarq $63, %rcx
   1423 ; AVX2-NEXT:    vpinsrd $2, %ecx, %xmm0, %xmm0
   1424 ; AVX2-NEXT:    shlq $60, %rax
   1425 ; AVX2-NEXT:    sarq $63, %rax
   1426 ; AVX2-NEXT:    vpinsrd $3, %eax, %xmm0, %xmm0
   1427 ; AVX2-NEXT:    retq
   1428 ;
   1429 ; AVX512F-LABEL: load_sext_4i1_to_4i32:
   1430 ; AVX512F:       # %bb.0: # %entry
   1431 ; AVX512F-NEXT:    movzbl (%rdi), %eax
   1432 ; AVX512F-NEXT:    kmovw %eax, %k1
   1433 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
   1434 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
   1435 ; AVX512F-NEXT:    vzeroupper
   1436 ; AVX512F-NEXT:    retq
   1437 ;
   1438 ; AVX512BW-LABEL: load_sext_4i1_to_4i32:
   1439 ; AVX512BW:       # %bb.0: # %entry
   1440 ; AVX512BW-NEXT:    movzbl (%rdi), %eax
   1441 ; AVX512BW-NEXT:    kmovd %eax, %k1
   1442 ; AVX512BW-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
   1443 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
   1444 ; AVX512BW-NEXT:    vzeroupper
   1445 ; AVX512BW-NEXT:    retq
   1446 ;
   1447 ; X32-SSE41-LABEL: load_sext_4i1_to_4i32:
   1448 ; X32-SSE41:       # %bb.0: # %entry
   1449 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   1450 ; X32-SSE41-NEXT:    movl (%eax), %eax
   1451 ; X32-SSE41-NEXT:    movl %eax, %ecx
   1452 ; X32-SSE41-NEXT:    shll $30, %ecx
   1453 ; X32-SSE41-NEXT:    sarl $31, %ecx
   1454 ; X32-SSE41-NEXT:    movl %eax, %edx
   1455 ; X32-SSE41-NEXT:    shll $31, %edx
   1456 ; X32-SSE41-NEXT:    sarl $31, %edx
   1457 ; X32-SSE41-NEXT:    movd %edx, %xmm0
   1458 ; X32-SSE41-NEXT:    pinsrd $1, %ecx, %xmm0
   1459 ; X32-SSE41-NEXT:    movl %eax, %ecx
   1460 ; X32-SSE41-NEXT:    shll $29, %ecx
   1461 ; X32-SSE41-NEXT:    sarl $31, %ecx
   1462 ; X32-SSE41-NEXT:    pinsrd $2, %ecx, %xmm0
   1463 ; X32-SSE41-NEXT:    shll $28, %eax
   1464 ; X32-SSE41-NEXT:    sarl $31, %eax
   1465 ; X32-SSE41-NEXT:    pinsrd $3, %eax, %xmm0
   1466 ; X32-SSE41-NEXT:    retl
   1467 entry:
   1468  %X = load <4 x i1>, <4 x i1>* %ptr
   1469  %Y = sext <4 x i1> %X to <4 x i32>
   1470  ret <4 x i32> %Y
   1471 }
   1472 
   1473 define <4 x i32> @load_sext_4i8_to_4i32(<4 x i8> *%ptr) {
   1474 ; SSE2-LABEL: load_sext_4i8_to_4i32:
   1475 ; SSE2:       # %bb.0: # %entry
   1476 ; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
   1477 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   1478 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
   1479 ; SSE2-NEXT:    psrad $24, %xmm0
   1480 ; SSE2-NEXT:    retq
   1481 ;
   1482 ; SSSE3-LABEL: load_sext_4i8_to_4i32:
   1483 ; SSSE3:       # %bb.0: # %entry
   1484 ; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
   1485 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   1486 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
   1487 ; SSSE3-NEXT:    psrad $24, %xmm0
   1488 ; SSSE3-NEXT:    retq
   1489 ;
   1490 ; SSE41-LABEL: load_sext_4i8_to_4i32:
   1491 ; SSE41:       # %bb.0: # %entry
   1492 ; SSE41-NEXT:    pmovsxbd (%rdi), %xmm0
   1493 ; SSE41-NEXT:    retq
   1494 ;
   1495 ; AVX-LABEL: load_sext_4i8_to_4i32:
   1496 ; AVX:       # %bb.0: # %entry
   1497 ; AVX-NEXT:    vpmovsxbd (%rdi), %xmm0
   1498 ; AVX-NEXT:    retq
   1499 ;
   1500 ; X32-SSE41-LABEL: load_sext_4i8_to_4i32:
   1501 ; X32-SSE41:       # %bb.0: # %entry
   1502 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   1503 ; X32-SSE41-NEXT:    pmovsxbd (%eax), %xmm0
   1504 ; X32-SSE41-NEXT:    retl
   1505 entry:
   1506  %X = load <4 x i8>, <4 x i8>* %ptr
   1507  %Y = sext <4 x i8> %X to <4 x i32>
   1508  ret <4 x i32> %Y
   1509 }
   1510 
   1511 define <4 x i64> @load_sext_4i1_to_4i64(<4 x i1> *%ptr) {
   1512 ; SSE2-LABEL: load_sext_4i1_to_4i64:
   1513 ; SSE2:       # %bb.0: # %entry
   1514 ; SSE2-NEXT:    movl (%rdi), %eax
   1515 ; SSE2-NEXT:    movl %eax, %ecx
   1516 ; SSE2-NEXT:    shrl $3, %ecx
   1517 ; SSE2-NEXT:    movd %ecx, %xmm0
   1518 ; SSE2-NEXT:    movl %eax, %ecx
   1519 ; SSE2-NEXT:    shrl $2, %ecx
   1520 ; SSE2-NEXT:    movd %ecx, %xmm1
   1521 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
   1522 ; SSE2-NEXT:    movd %eax, %xmm2
   1523 ; SSE2-NEXT:    shrl %eax
   1524 ; SSE2-NEXT:    movd %eax, %xmm0
   1525 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
   1526 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
   1527 ; SSE2-NEXT:    pand {{.*}}(%rip), %xmm2
   1528 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,1,1,3]
   1529 ; SSE2-NEXT:    psllq $63, %xmm0
   1530 ; SSE2-NEXT:    psrad $31, %xmm0
   1531 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   1532 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[2,1,3,3]
   1533 ; SSE2-NEXT:    psllq $63, %xmm1
   1534 ; SSE2-NEXT:    psrad $31, %xmm1
   1535 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   1536 ; SSE2-NEXT:    retq
   1537 ;
   1538 ; SSSE3-LABEL: load_sext_4i1_to_4i64:
   1539 ; SSSE3:       # %bb.0: # %entry
   1540 ; SSSE3-NEXT:    movl (%rdi), %eax
   1541 ; SSSE3-NEXT:    movl %eax, %ecx
   1542 ; SSSE3-NEXT:    shrl $3, %ecx
   1543 ; SSSE3-NEXT:    movd %ecx, %xmm0
   1544 ; SSSE3-NEXT:    movl %eax, %ecx
   1545 ; SSSE3-NEXT:    shrl $2, %ecx
   1546 ; SSSE3-NEXT:    movd %ecx, %xmm1
   1547 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]
   1548 ; SSSE3-NEXT:    movd %eax, %xmm2
   1549 ; SSSE3-NEXT:    shrl %eax
   1550 ; SSSE3-NEXT:    movd %eax, %xmm0
   1551 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1]
   1552 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]
   1553 ; SSSE3-NEXT:    pand {{.*}}(%rip), %xmm2
   1554 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm2[0,1,1,3]
   1555 ; SSSE3-NEXT:    psllq $63, %xmm0
   1556 ; SSSE3-NEXT:    psrad $31, %xmm0
   1557 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   1558 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm2[2,1,3,3]
   1559 ; SSSE3-NEXT:    psllq $63, %xmm1
   1560 ; SSSE3-NEXT:    psrad $31, %xmm1
   1561 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   1562 ; SSSE3-NEXT:    retq
   1563 ;
   1564 ; SSE41-LABEL: load_sext_4i1_to_4i64:
   1565 ; SSE41:       # %bb.0: # %entry
   1566 ; SSE41-NEXT:    movl (%rdi), %eax
   1567 ; SSE41-NEXT:    movl %eax, %ecx
   1568 ; SSE41-NEXT:    shrl %ecx
   1569 ; SSE41-NEXT:    movd %eax, %xmm1
   1570 ; SSE41-NEXT:    pinsrd $1, %ecx, %xmm1
   1571 ; SSE41-NEXT:    movl %eax, %ecx
   1572 ; SSE41-NEXT:    shrl $2, %ecx
   1573 ; SSE41-NEXT:    pinsrd $2, %ecx, %xmm1
   1574 ; SSE41-NEXT:    shrl $3, %eax
   1575 ; SSE41-NEXT:    pinsrd $3, %eax, %xmm1
   1576 ; SSE41-NEXT:    pand {{.*}}(%rip), %xmm1
   1577 ; SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero
   1578 ; SSE41-NEXT:    psllq $63, %xmm0
   1579 ; SSE41-NEXT:    psrad $31, %xmm0
   1580 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   1581 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]
   1582 ; SSE41-NEXT:    psllq $63, %xmm1
   1583 ; SSE41-NEXT:    psrad $31, %xmm1
   1584 ; SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   1585 ; SSE41-NEXT:    retq
   1586 ;
   1587 ; AVX1-LABEL: load_sext_4i1_to_4i64:
   1588 ; AVX1:       # %bb.0: # %entry
   1589 ; AVX1-NEXT:    movzbl (%rdi), %eax
   1590 ; AVX1-NEXT:    movq %rax, %rcx
   1591 ; AVX1-NEXT:    shlq $62, %rcx
   1592 ; AVX1-NEXT:    sarq $63, %rcx
   1593 ; AVX1-NEXT:    movq %rax, %rdx
   1594 ; AVX1-NEXT:    shlq $63, %rdx
   1595 ; AVX1-NEXT:    sarq $63, %rdx
   1596 ; AVX1-NEXT:    vmovd %edx, %xmm0
   1597 ; AVX1-NEXT:    vpinsrd $1, %ecx, %xmm0, %xmm0
   1598 ; AVX1-NEXT:    movq %rax, %rcx
   1599 ; AVX1-NEXT:    shlq $61, %rcx
   1600 ; AVX1-NEXT:    sarq $63, %rcx
   1601 ; AVX1-NEXT:    vpinsrd $2, %ecx, %xmm0, %xmm0
   1602 ; AVX1-NEXT:    shlq $60, %rax
   1603 ; AVX1-NEXT:    sarq $63, %rax
   1604 ; AVX1-NEXT:    vpinsrd $3, %eax, %xmm0, %xmm0
   1605 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm1
   1606 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   1607 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
   1608 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1609 ; AVX1-NEXT:    retq
   1610 ;
   1611 ; AVX2-LABEL: load_sext_4i1_to_4i64:
   1612 ; AVX2:       # %bb.0: # %entry
   1613 ; AVX2-NEXT:    movzbl (%rdi), %eax
   1614 ; AVX2-NEXT:    movq %rax, %rcx
   1615 ; AVX2-NEXT:    shlq $60, %rcx
   1616 ; AVX2-NEXT:    sarq $63, %rcx
   1617 ; AVX2-NEXT:    vmovq %rcx, %xmm0
   1618 ; AVX2-NEXT:    movq %rax, %rcx
   1619 ; AVX2-NEXT:    shlq $61, %rcx
   1620 ; AVX2-NEXT:    sarq $63, %rcx
   1621 ; AVX2-NEXT:    vmovq %rcx, %xmm1
   1622 ; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]
   1623 ; AVX2-NEXT:    movq %rax, %rcx
   1624 ; AVX2-NEXT:    shlq $62, %rcx
   1625 ; AVX2-NEXT:    sarq $63, %rcx
   1626 ; AVX2-NEXT:    vmovq %rcx, %xmm1
   1627 ; AVX2-NEXT:    shlq $63, %rax
   1628 ; AVX2-NEXT:    sarq $63, %rax
   1629 ; AVX2-NEXT:    vmovq %rax, %xmm2
   1630 ; AVX2-NEXT:    vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]
   1631 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
   1632 ; AVX2-NEXT:    retq
   1633 ;
   1634 ; AVX512F-LABEL: load_sext_4i1_to_4i64:
   1635 ; AVX512F:       # %bb.0: # %entry
   1636 ; AVX512F-NEXT:    movzbl (%rdi), %eax
   1637 ; AVX512F-NEXT:    kmovw %eax, %k1
   1638 ; AVX512F-NEXT:    vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
   1639 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
   1640 ; AVX512F-NEXT:    retq
   1641 ;
   1642 ; AVX512BW-LABEL: load_sext_4i1_to_4i64:
   1643 ; AVX512BW:       # %bb.0: # %entry
   1644 ; AVX512BW-NEXT:    movzbl (%rdi), %eax
   1645 ; AVX512BW-NEXT:    kmovd %eax, %k1
   1646 ; AVX512BW-NEXT:    vpternlogq $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
   1647 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
   1648 ; AVX512BW-NEXT:    retq
   1649 ;
   1650 ; X32-SSE41-LABEL: load_sext_4i1_to_4i64:
   1651 ; X32-SSE41:       # %bb.0: # %entry
   1652 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   1653 ; X32-SSE41-NEXT:    movzbl (%eax), %eax
   1654 ; X32-SSE41-NEXT:    movl %eax, %ecx
   1655 ; X32-SSE41-NEXT:    shrl %ecx
   1656 ; X32-SSE41-NEXT:    movd %eax, %xmm1
   1657 ; X32-SSE41-NEXT:    pinsrd $1, %ecx, %xmm1
   1658 ; X32-SSE41-NEXT:    movl %eax, %ecx
   1659 ; X32-SSE41-NEXT:    shrl $2, %ecx
   1660 ; X32-SSE41-NEXT:    pinsrd $2, %ecx, %xmm1
   1661 ; X32-SSE41-NEXT:    shrl $3, %eax
   1662 ; X32-SSE41-NEXT:    pinsrd $3, %eax, %xmm1
   1663 ; X32-SSE41-NEXT:    pand {{\.LCPI.*}}, %xmm1
   1664 ; X32-SSE41-NEXT:    pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero
   1665 ; X32-SSE41-NEXT:    psllq $63, %xmm0
   1666 ; X32-SSE41-NEXT:    psrad $31, %xmm0
   1667 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3]
   1668 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[2,2,3,3]
   1669 ; X32-SSE41-NEXT:    psllq $63, %xmm1
   1670 ; X32-SSE41-NEXT:    psrad $31, %xmm1
   1671 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3]
   1672 ; X32-SSE41-NEXT:    retl
   1673 entry:
   1674  %X = load <4 x i1>, <4 x i1>* %ptr
   1675  %Y = sext <4 x i1> %X to <4 x i64>
   1676  ret <4 x i64> %Y
   1677 }
   1678 
   1679 define <4 x i64> @load_sext_4i8_to_4i64(<4 x i8> *%ptr) {
   1680 ; SSE2-LABEL: load_sext_4i8_to_4i64:
   1681 ; SSE2:       # %bb.0: # %entry
   1682 ; SSE2-NEXT:    movsbq 1(%rdi), %rax
   1683 ; SSE2-NEXT:    movq %rax, %xmm1
   1684 ; SSE2-NEXT:    movsbq (%rdi), %rax
   1685 ; SSE2-NEXT:    movq %rax, %xmm0
   1686 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   1687 ; SSE2-NEXT:    movsbq 3(%rdi), %rax
   1688 ; SSE2-NEXT:    movq %rax, %xmm2
   1689 ; SSE2-NEXT:    movsbq 2(%rdi), %rax
   1690 ; SSE2-NEXT:    movq %rax, %xmm1
   1691 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
   1692 ; SSE2-NEXT:    retq
   1693 ;
   1694 ; SSSE3-LABEL: load_sext_4i8_to_4i64:
   1695 ; SSSE3:       # %bb.0: # %entry
   1696 ; SSSE3-NEXT:    movsbq 1(%rdi), %rax
   1697 ; SSSE3-NEXT:    movq %rax, %xmm1
   1698 ; SSSE3-NEXT:    movsbq (%rdi), %rax
   1699 ; SSSE3-NEXT:    movq %rax, %xmm0
   1700 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   1701 ; SSSE3-NEXT:    movsbq 3(%rdi), %rax
   1702 ; SSSE3-NEXT:    movq %rax, %xmm2
   1703 ; SSSE3-NEXT:    movsbq 2(%rdi), %rax
   1704 ; SSSE3-NEXT:    movq %rax, %xmm1
   1705 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
   1706 ; SSSE3-NEXT:    retq
   1707 ;
   1708 ; SSE41-LABEL: load_sext_4i8_to_4i64:
   1709 ; SSE41:       # %bb.0: # %entry
   1710 ; SSE41-NEXT:    pmovsxbq (%rdi), %xmm0
   1711 ; SSE41-NEXT:    pmovsxbq 2(%rdi), %xmm1
   1712 ; SSE41-NEXT:    retq
   1713 ;
   1714 ; AVX1-LABEL: load_sext_4i8_to_4i64:
   1715 ; AVX1:       # %bb.0: # %entry
   1716 ; AVX1-NEXT:    vpmovsxbd (%rdi), %xmm0
   1717 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm1
   1718 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   1719 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
   1720 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   1721 ; AVX1-NEXT:    retq
   1722 ;
   1723 ; AVX2-LABEL: load_sext_4i8_to_4i64:
   1724 ; AVX2:       # %bb.0: # %entry
   1725 ; AVX2-NEXT:    vpmovsxbq (%rdi), %ymm0
   1726 ; AVX2-NEXT:    retq
   1727 ;
   1728 ; AVX512-LABEL: load_sext_4i8_to_4i64:
   1729 ; AVX512:       # %bb.0: # %entry
   1730 ; AVX512-NEXT:    vpmovsxbq (%rdi), %ymm0
   1731 ; AVX512-NEXT:    retq
   1732 ;
   1733 ; X32-SSE41-LABEL: load_sext_4i8_to_4i64:
   1734 ; X32-SSE41:       # %bb.0: # %entry
   1735 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   1736 ; X32-SSE41-NEXT:    pmovsxbq (%eax), %xmm0
   1737 ; X32-SSE41-NEXT:    pmovsxbq 2(%eax), %xmm1
   1738 ; X32-SSE41-NEXT:    retl
   1739 entry:
   1740  %X = load <4 x i8>, <4 x i8>* %ptr
   1741  %Y = sext <4 x i8> %X to <4 x i64>
   1742  ret <4 x i64> %Y
   1743 }
   1744 
   1745 define <2 x i64> @load_sext_4i8_to_4i64_extract(<4 x i8> *%ptr) {
   1746 ; SSE2-LABEL: load_sext_4i8_to_4i64_extract:
   1747 ; SSE2:       # %bb.0:
   1748 ; SSE2-NEXT:    movsbq 3(%rdi), %rax
   1749 ; SSE2-NEXT:    movq %rax, %xmm1
   1750 ; SSE2-NEXT:    movsbq 2(%rdi), %rax
   1751 ; SSE2-NEXT:    movq %rax, %xmm0
   1752 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   1753 ; SSE2-NEXT:    retq
   1754 ;
   1755 ; SSSE3-LABEL: load_sext_4i8_to_4i64_extract:
   1756 ; SSSE3:       # %bb.0:
   1757 ; SSSE3-NEXT:    movsbq 3(%rdi), %rax
   1758 ; SSSE3-NEXT:    movq %rax, %xmm1
   1759 ; SSSE3-NEXT:    movsbq 2(%rdi), %rax
   1760 ; SSSE3-NEXT:    movq %rax, %xmm0
   1761 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   1762 ; SSSE3-NEXT:    retq
   1763 ;
   1764 ; SSE41-LABEL: load_sext_4i8_to_4i64_extract:
   1765 ; SSE41:       # %bb.0:
   1766 ; SSE41-NEXT:    pmovsxbq 2(%rdi), %xmm0
   1767 ; SSE41-NEXT:    retq
   1768 ;
   1769 ; AVX1-LABEL: load_sext_4i8_to_4i64_extract:
   1770 ; AVX1:       # %bb.0:
   1771 ; AVX1-NEXT:    vpmovsxbd (%rdi), %xmm0
   1772 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   1773 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
   1774 ; AVX1-NEXT:    retq
   1775 ;
   1776 ; AVX2-LABEL: load_sext_4i8_to_4i64_extract:
   1777 ; AVX2:       # %bb.0:
   1778 ; AVX2-NEXT:    vpmovsxbq (%rdi), %ymm0
   1779 ; AVX2-NEXT:    vextracti128 $1, %ymm0, %xmm0
   1780 ; AVX2-NEXT:    vzeroupper
   1781 ; AVX2-NEXT:    retq
   1782 ;
   1783 ; AVX512-LABEL: load_sext_4i8_to_4i64_extract:
   1784 ; AVX512:       # %bb.0:
   1785 ; AVX512-NEXT:    vpmovsxbq (%rdi), %ymm0
   1786 ; AVX512-NEXT:    vextracti128 $1, %ymm0, %xmm0
   1787 ; AVX512-NEXT:    vzeroupper
   1788 ; AVX512-NEXT:    retq
   1789 ;
   1790 ; X32-SSE41-LABEL: load_sext_4i8_to_4i64_extract:
   1791 ; X32-SSE41:       # %bb.0:
   1792 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   1793 ; X32-SSE41-NEXT:    pmovsxbq 2(%eax), %xmm0
   1794 ; X32-SSE41-NEXT:    retl
   1795  %ld = load <4 x i8>, <4 x i8>* %ptr
   1796  %sext = sext <4 x i8> %ld to <4 x i64>
   1797  %extract = shufflevector <4 x i64> %sext, <4 x i64> undef, <2 x i32> <i32 2, i32 3>
   1798  ret <2 x i64> %extract
   1799 }
   1800 
   1801 define <8 x i16> @load_sext_8i1_to_8i16(<8 x i1> *%ptr) {
   1802 ; SSE2-LABEL: load_sext_8i1_to_8i16:
   1803 ; SSE2:       # %bb.0: # %entry
   1804 ; SSE2-NEXT:    movsbq (%rdi), %rax
   1805 ; SSE2-NEXT:    movq %rax, %rcx
   1806 ; SSE2-NEXT:    shrq $7, %rcx
   1807 ; SSE2-NEXT:    movd %ecx, %xmm0
   1808 ; SSE2-NEXT:    movq %rax, %rcx
   1809 ; SSE2-NEXT:    shlq $57, %rcx
   1810 ; SSE2-NEXT:    sarq $63, %rcx
   1811 ; SSE2-NEXT:    movd %ecx, %xmm2
   1812 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
   1813 ; SSE2-NEXT:    movq %rax, %rcx
   1814 ; SSE2-NEXT:    shlq $58, %rcx
   1815 ; SSE2-NEXT:    sarq $63, %rcx
   1816 ; SSE2-NEXT:    movd %ecx, %xmm0
   1817 ; SSE2-NEXT:    movq %rax, %rcx
   1818 ; SSE2-NEXT:    shlq $59, %rcx
   1819 ; SSE2-NEXT:    sarq $63, %rcx
   1820 ; SSE2-NEXT:    movd %ecx, %xmm1
   1821 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
   1822 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
   1823 ; SSE2-NEXT:    movq %rax, %rcx
   1824 ; SSE2-NEXT:    shlq $60, %rcx
   1825 ; SSE2-NEXT:    sarq $63, %rcx
   1826 ; SSE2-NEXT:    movd %ecx, %xmm0
   1827 ; SSE2-NEXT:    movq %rax, %rcx
   1828 ; SSE2-NEXT:    shlq $61, %rcx
   1829 ; SSE2-NEXT:    sarq $63, %rcx
   1830 ; SSE2-NEXT:    movd %ecx, %xmm2
   1831 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
   1832 ; SSE2-NEXT:    movq %rax, %rcx
   1833 ; SSE2-NEXT:    shlq $62, %rcx
   1834 ; SSE2-NEXT:    sarq $63, %rcx
   1835 ; SSE2-NEXT:    movd %ecx, %xmm3
   1836 ; SSE2-NEXT:    shlq $63, %rax
   1837 ; SSE2-NEXT:    sarq $63, %rax
   1838 ; SSE2-NEXT:    movd %eax, %xmm0
   1839 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
   1840 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   1841 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   1842 ; SSE2-NEXT:    retq
   1843 ;
   1844 ; SSSE3-LABEL: load_sext_8i1_to_8i16:
   1845 ; SSSE3:       # %bb.0: # %entry
   1846 ; SSSE3-NEXT:    movsbq (%rdi), %rax
   1847 ; SSSE3-NEXT:    movq %rax, %rcx
   1848 ; SSSE3-NEXT:    shrq $7, %rcx
   1849 ; SSSE3-NEXT:    movd %ecx, %xmm0
   1850 ; SSSE3-NEXT:    movq %rax, %rcx
   1851 ; SSSE3-NEXT:    shlq $57, %rcx
   1852 ; SSSE3-NEXT:    sarq $63, %rcx
   1853 ; SSSE3-NEXT:    movd %ecx, %xmm2
   1854 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
   1855 ; SSSE3-NEXT:    movq %rax, %rcx
   1856 ; SSSE3-NEXT:    shlq $58, %rcx
   1857 ; SSSE3-NEXT:    sarq $63, %rcx
   1858 ; SSSE3-NEXT:    movd %ecx, %xmm0
   1859 ; SSSE3-NEXT:    movq %rax, %rcx
   1860 ; SSSE3-NEXT:    shlq $59, %rcx
   1861 ; SSSE3-NEXT:    sarq $63, %rcx
   1862 ; SSSE3-NEXT:    movd %ecx, %xmm1
   1863 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
   1864 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
   1865 ; SSSE3-NEXT:    movq %rax, %rcx
   1866 ; SSSE3-NEXT:    shlq $60, %rcx
   1867 ; SSSE3-NEXT:    sarq $63, %rcx
   1868 ; SSSE3-NEXT:    movd %ecx, %xmm0
   1869 ; SSSE3-NEXT:    movq %rax, %rcx
   1870 ; SSSE3-NEXT:    shlq $61, %rcx
   1871 ; SSSE3-NEXT:    sarq $63, %rcx
   1872 ; SSSE3-NEXT:    movd %ecx, %xmm2
   1873 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
   1874 ; SSSE3-NEXT:    movq %rax, %rcx
   1875 ; SSSE3-NEXT:    shlq $62, %rcx
   1876 ; SSSE3-NEXT:    sarq $63, %rcx
   1877 ; SSSE3-NEXT:    movd %ecx, %xmm3
   1878 ; SSSE3-NEXT:    shlq $63, %rax
   1879 ; SSSE3-NEXT:    sarq $63, %rax
   1880 ; SSSE3-NEXT:    movd %eax, %xmm0
   1881 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3]
   1882 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   1883 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   1884 ; SSSE3-NEXT:    retq
   1885 ;
   1886 ; SSE41-LABEL: load_sext_8i1_to_8i16:
   1887 ; SSE41:       # %bb.0: # %entry
   1888 ; SSE41-NEXT:    movsbq (%rdi), %rax
   1889 ; SSE41-NEXT:    movq %rax, %rcx
   1890 ; SSE41-NEXT:    shlq $62, %rcx
   1891 ; SSE41-NEXT:    sarq $63, %rcx
   1892 ; SSE41-NEXT:    movq %rax, %rdx
   1893 ; SSE41-NEXT:    shlq $63, %rdx
   1894 ; SSE41-NEXT:    sarq $63, %rdx
   1895 ; SSE41-NEXT:    movd %edx, %xmm0
   1896 ; SSE41-NEXT:    pinsrw $1, %ecx, %xmm0
   1897 ; SSE41-NEXT:    movq %rax, %rcx
   1898 ; SSE41-NEXT:    shlq $61, %rcx
   1899 ; SSE41-NEXT:    sarq $63, %rcx
   1900 ; SSE41-NEXT:    pinsrw $2, %ecx, %xmm0
   1901 ; SSE41-NEXT:    movq %rax, %rcx
   1902 ; SSE41-NEXT:    shlq $60, %rcx
   1903 ; SSE41-NEXT:    sarq $63, %rcx
   1904 ; SSE41-NEXT:    pinsrw $3, %ecx, %xmm0
   1905 ; SSE41-NEXT:    movq %rax, %rcx
   1906 ; SSE41-NEXT:    shlq $59, %rcx
   1907 ; SSE41-NEXT:    sarq $63, %rcx
   1908 ; SSE41-NEXT:    pinsrw $4, %ecx, %xmm0
   1909 ; SSE41-NEXT:    movq %rax, %rcx
   1910 ; SSE41-NEXT:    shlq $58, %rcx
   1911 ; SSE41-NEXT:    sarq $63, %rcx
   1912 ; SSE41-NEXT:    pinsrw $5, %ecx, %xmm0
   1913 ; SSE41-NEXT:    movq %rax, %rcx
   1914 ; SSE41-NEXT:    shlq $57, %rcx
   1915 ; SSE41-NEXT:    sarq $63, %rcx
   1916 ; SSE41-NEXT:    pinsrw $6, %ecx, %xmm0
   1917 ; SSE41-NEXT:    shrq $7, %rax
   1918 ; SSE41-NEXT:    pinsrw $7, %eax, %xmm0
   1919 ; SSE41-NEXT:    retq
   1920 ;
   1921 ; AVX1-LABEL: load_sext_8i1_to_8i16:
   1922 ; AVX1:       # %bb.0: # %entry
   1923 ; AVX1-NEXT:    movsbq (%rdi), %rax
   1924 ; AVX1-NEXT:    movq %rax, %rcx
   1925 ; AVX1-NEXT:    shlq $62, %rcx
   1926 ; AVX1-NEXT:    sarq $63, %rcx
   1927 ; AVX1-NEXT:    movq %rax, %rdx
   1928 ; AVX1-NEXT:    shlq $63, %rdx
   1929 ; AVX1-NEXT:    sarq $63, %rdx
   1930 ; AVX1-NEXT:    vmovd %edx, %xmm0
   1931 ; AVX1-NEXT:    vpinsrw $1, %ecx, %xmm0, %xmm0
   1932 ; AVX1-NEXT:    movq %rax, %rcx
   1933 ; AVX1-NEXT:    shlq $61, %rcx
   1934 ; AVX1-NEXT:    sarq $63, %rcx
   1935 ; AVX1-NEXT:    vpinsrw $2, %ecx, %xmm0, %xmm0
   1936 ; AVX1-NEXT:    movq %rax, %rcx
   1937 ; AVX1-NEXT:    shlq $60, %rcx
   1938 ; AVX1-NEXT:    sarq $63, %rcx
   1939 ; AVX1-NEXT:    vpinsrw $3, %ecx, %xmm0, %xmm0
   1940 ; AVX1-NEXT:    movq %rax, %rcx
   1941 ; AVX1-NEXT:    shlq $59, %rcx
   1942 ; AVX1-NEXT:    sarq $63, %rcx
   1943 ; AVX1-NEXT:    vpinsrw $4, %ecx, %xmm0, %xmm0
   1944 ; AVX1-NEXT:    movq %rax, %rcx
   1945 ; AVX1-NEXT:    shlq $58, %rcx
   1946 ; AVX1-NEXT:    sarq $63, %rcx
   1947 ; AVX1-NEXT:    vpinsrw $5, %ecx, %xmm0, %xmm0
   1948 ; AVX1-NEXT:    movq %rax, %rcx
   1949 ; AVX1-NEXT:    shlq $57, %rcx
   1950 ; AVX1-NEXT:    sarq $63, %rcx
   1951 ; AVX1-NEXT:    vpinsrw $6, %ecx, %xmm0, %xmm0
   1952 ; AVX1-NEXT:    shrq $7, %rax
   1953 ; AVX1-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0
   1954 ; AVX1-NEXT:    retq
   1955 ;
   1956 ; AVX2-LABEL: load_sext_8i1_to_8i16:
   1957 ; AVX2:       # %bb.0: # %entry
   1958 ; AVX2-NEXT:    movsbq (%rdi), %rax
   1959 ; AVX2-NEXT:    movq %rax, %rcx
   1960 ; AVX2-NEXT:    shlq $62, %rcx
   1961 ; AVX2-NEXT:    sarq $63, %rcx
   1962 ; AVX2-NEXT:    movq %rax, %rdx
   1963 ; AVX2-NEXT:    shlq $63, %rdx
   1964 ; AVX2-NEXT:    sarq $63, %rdx
   1965 ; AVX2-NEXT:    vmovd %edx, %xmm0
   1966 ; AVX2-NEXT:    vpinsrw $1, %ecx, %xmm0, %xmm0
   1967 ; AVX2-NEXT:    movq %rax, %rcx
   1968 ; AVX2-NEXT:    shlq $61, %rcx
   1969 ; AVX2-NEXT:    sarq $63, %rcx
   1970 ; AVX2-NEXT:    vpinsrw $2, %ecx, %xmm0, %xmm0
   1971 ; AVX2-NEXT:    movq %rax, %rcx
   1972 ; AVX2-NEXT:    shlq $60, %rcx
   1973 ; AVX2-NEXT:    sarq $63, %rcx
   1974 ; AVX2-NEXT:    vpinsrw $3, %ecx, %xmm0, %xmm0
   1975 ; AVX2-NEXT:    movq %rax, %rcx
   1976 ; AVX2-NEXT:    shlq $59, %rcx
   1977 ; AVX2-NEXT:    sarq $63, %rcx
   1978 ; AVX2-NEXT:    vpinsrw $4, %ecx, %xmm0, %xmm0
   1979 ; AVX2-NEXT:    movq %rax, %rcx
   1980 ; AVX2-NEXT:    shlq $58, %rcx
   1981 ; AVX2-NEXT:    sarq $63, %rcx
   1982 ; AVX2-NEXT:    vpinsrw $5, %ecx, %xmm0, %xmm0
   1983 ; AVX2-NEXT:    movq %rax, %rcx
   1984 ; AVX2-NEXT:    shlq $57, %rcx
   1985 ; AVX2-NEXT:    sarq $63, %rcx
   1986 ; AVX2-NEXT:    vpinsrw $6, %ecx, %xmm0, %xmm0
   1987 ; AVX2-NEXT:    shrq $7, %rax
   1988 ; AVX2-NEXT:    vpinsrw $7, %eax, %xmm0, %xmm0
   1989 ; AVX2-NEXT:    retq
   1990 ;
   1991 ; AVX512F-LABEL: load_sext_8i1_to_8i16:
   1992 ; AVX512F:       # %bb.0: # %entry
   1993 ; AVX512F-NEXT:    movzbl (%rdi), %eax
   1994 ; AVX512F-NEXT:    kmovw %eax, %k1
   1995 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
   1996 ; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0
   1997 ; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 killed $ymm0
   1998 ; AVX512F-NEXT:    vzeroupper
   1999 ; AVX512F-NEXT:    retq
   2000 ;
   2001 ; AVX512BW-LABEL: load_sext_8i1_to_8i16:
   2002 ; AVX512BW:       # %bb.0: # %entry
   2003 ; AVX512BW-NEXT:    movzbl (%rdi), %eax
   2004 ; AVX512BW-NEXT:    kmovd %eax, %k0
   2005 ; AVX512BW-NEXT:    vpmovm2w %k0, %zmm0
   2006 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
   2007 ; AVX512BW-NEXT:    vzeroupper
   2008 ; AVX512BW-NEXT:    retq
   2009 ;
   2010 ; X32-SSE41-LABEL: load_sext_8i1_to_8i16:
   2011 ; X32-SSE41:       # %bb.0: # %entry
   2012 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   2013 ; X32-SSE41-NEXT:    movsbl (%eax), %eax
   2014 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2015 ; X32-SSE41-NEXT:    shll $30, %ecx
   2016 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2017 ; X32-SSE41-NEXT:    movl %eax, %edx
   2018 ; X32-SSE41-NEXT:    shll $31, %edx
   2019 ; X32-SSE41-NEXT:    sarl $31, %edx
   2020 ; X32-SSE41-NEXT:    movd %edx, %xmm0
   2021 ; X32-SSE41-NEXT:    pinsrw $1, %ecx, %xmm0
   2022 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2023 ; X32-SSE41-NEXT:    shll $29, %ecx
   2024 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2025 ; X32-SSE41-NEXT:    pinsrw $2, %ecx, %xmm0
   2026 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2027 ; X32-SSE41-NEXT:    shll $28, %ecx
   2028 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2029 ; X32-SSE41-NEXT:    pinsrw $3, %ecx, %xmm0
   2030 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2031 ; X32-SSE41-NEXT:    shll $27, %ecx
   2032 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2033 ; X32-SSE41-NEXT:    pinsrw $4, %ecx, %xmm0
   2034 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2035 ; X32-SSE41-NEXT:    shll $26, %ecx
   2036 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2037 ; X32-SSE41-NEXT:    pinsrw $5, %ecx, %xmm0
   2038 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2039 ; X32-SSE41-NEXT:    shll $25, %ecx
   2040 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2041 ; X32-SSE41-NEXT:    pinsrw $6, %ecx, %xmm0
   2042 ; X32-SSE41-NEXT:    shrl $7, %eax
   2043 ; X32-SSE41-NEXT:    pinsrw $7, %eax, %xmm0
   2044 ; X32-SSE41-NEXT:    retl
   2045 entry:
   2046  %X = load <8 x i1>, <8 x i1>* %ptr
   2047  %Y = sext <8 x i1> %X to <8 x i16>
   2048  ret <8 x i16> %Y
   2049 }
   2050 
   2051 define <8 x i16> @load_sext_8i8_to_8i16(<8 x i8> *%ptr) {
   2052 ; SSE2-LABEL: load_sext_8i8_to_8i16:
   2053 ; SSE2:       # %bb.0: # %entry
   2054 ; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
   2055 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   2056 ; SSE2-NEXT:    psraw $8, %xmm0
   2057 ; SSE2-NEXT:    retq
   2058 ;
   2059 ; SSSE3-LABEL: load_sext_8i8_to_8i16:
   2060 ; SSSE3:       # %bb.0: # %entry
   2061 ; SSSE3-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
   2062 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   2063 ; SSSE3-NEXT:    psraw $8, %xmm0
   2064 ; SSSE3-NEXT:    retq
   2065 ;
   2066 ; SSE41-LABEL: load_sext_8i8_to_8i16:
   2067 ; SSE41:       # %bb.0: # %entry
   2068 ; SSE41-NEXT:    pmovsxbw (%rdi), %xmm0
   2069 ; SSE41-NEXT:    retq
   2070 ;
   2071 ; AVX-LABEL: load_sext_8i8_to_8i16:
   2072 ; AVX:       # %bb.0: # %entry
   2073 ; AVX-NEXT:    vpmovsxbw (%rdi), %xmm0
   2074 ; AVX-NEXT:    retq
   2075 ;
   2076 ; X32-SSE41-LABEL: load_sext_8i8_to_8i16:
   2077 ; X32-SSE41:       # %bb.0: # %entry
   2078 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   2079 ; X32-SSE41-NEXT:    pmovsxbw (%eax), %xmm0
   2080 ; X32-SSE41-NEXT:    retl
   2081 entry:
   2082  %X = load <8 x i8>, <8 x i8>* %ptr
   2083  %Y = sext <8 x i8> %X to <8 x i16>
   2084  ret <8 x i16> %Y
   2085 }
   2086 
   2087 define <8 x i64> @load_sext_8i8_to_8i64(<8 x i8> *%ptr) {
   2088 ; SSE2-LABEL: load_sext_8i8_to_8i64:
   2089 ; SSE2:       # %bb.0: # %entry
   2090 ; SSE2-NEXT:    movsbq 1(%rdi), %rax
   2091 ; SSE2-NEXT:    movq %rax, %xmm1
   2092 ; SSE2-NEXT:    movsbq (%rdi), %rax
   2093 ; SSE2-NEXT:    movq %rax, %xmm0
   2094 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   2095 ; SSE2-NEXT:    movsbq 3(%rdi), %rax
   2096 ; SSE2-NEXT:    movq %rax, %xmm2
   2097 ; SSE2-NEXT:    movsbq 2(%rdi), %rax
   2098 ; SSE2-NEXT:    movq %rax, %xmm1
   2099 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
   2100 ; SSE2-NEXT:    movsbq 5(%rdi), %rax
   2101 ; SSE2-NEXT:    movq %rax, %xmm3
   2102 ; SSE2-NEXT:    movsbq 4(%rdi), %rax
   2103 ; SSE2-NEXT:    movq %rax, %xmm2
   2104 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
   2105 ; SSE2-NEXT:    movsbq 7(%rdi), %rax
   2106 ; SSE2-NEXT:    movq %rax, %xmm4
   2107 ; SSE2-NEXT:    movsbq 6(%rdi), %rax
   2108 ; SSE2-NEXT:    movq %rax, %xmm3
   2109 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
   2110 ; SSE2-NEXT:    retq
   2111 ;
   2112 ; SSSE3-LABEL: load_sext_8i8_to_8i64:
   2113 ; SSSE3:       # %bb.0: # %entry
   2114 ; SSSE3-NEXT:    movsbq 1(%rdi), %rax
   2115 ; SSSE3-NEXT:    movq %rax, %xmm1
   2116 ; SSSE3-NEXT:    movsbq (%rdi), %rax
   2117 ; SSSE3-NEXT:    movq %rax, %xmm0
   2118 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   2119 ; SSSE3-NEXT:    movsbq 3(%rdi), %rax
   2120 ; SSSE3-NEXT:    movq %rax, %xmm2
   2121 ; SSSE3-NEXT:    movsbq 2(%rdi), %rax
   2122 ; SSSE3-NEXT:    movq %rax, %xmm1
   2123 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
   2124 ; SSSE3-NEXT:    movsbq 5(%rdi), %rax
   2125 ; SSSE3-NEXT:    movq %rax, %xmm3
   2126 ; SSSE3-NEXT:    movsbq 4(%rdi), %rax
   2127 ; SSSE3-NEXT:    movq %rax, %xmm2
   2128 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]
   2129 ; SSSE3-NEXT:    movsbq 7(%rdi), %rax
   2130 ; SSSE3-NEXT:    movq %rax, %xmm4
   2131 ; SSSE3-NEXT:    movsbq 6(%rdi), %rax
   2132 ; SSSE3-NEXT:    movq %rax, %xmm3
   2133 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]
   2134 ; SSSE3-NEXT:    retq
   2135 ;
   2136 ; SSE41-LABEL: load_sext_8i8_to_8i64:
   2137 ; SSE41:       # %bb.0: # %entry
   2138 ; SSE41-NEXT:    pmovsxbq (%rdi), %xmm0
   2139 ; SSE41-NEXT:    pmovsxbq 2(%rdi), %xmm1
   2140 ; SSE41-NEXT:    pmovsxbq 4(%rdi), %xmm2
   2141 ; SSE41-NEXT:    pmovsxbq 6(%rdi), %xmm3
   2142 ; SSE41-NEXT:    retq
   2143 ;
   2144 ; AVX1-LABEL: load_sext_8i8_to_8i64:
   2145 ; AVX1:       # %bb.0: # %entry
   2146 ; AVX1-NEXT:    vpmovsxbd (%rdi), %xmm0
   2147 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm1
   2148 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   2149 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
   2150 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   2151 ; AVX1-NEXT:    vpmovsxbd 4(%rdi), %xmm1
   2152 ; AVX1-NEXT:    vpmovsxdq %xmm1, %xmm2
   2153 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm1 = xmm1[2,3,0,1]
   2154 ; AVX1-NEXT:    vpmovsxdq %xmm1, %xmm1
   2155 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm1
   2156 ; AVX1-NEXT:    retq
   2157 ;
   2158 ; AVX2-LABEL: load_sext_8i8_to_8i64:
   2159 ; AVX2:       # %bb.0: # %entry
   2160 ; AVX2-NEXT:    vpmovsxbq (%rdi), %ymm0
   2161 ; AVX2-NEXT:    vpmovsxbq 4(%rdi), %ymm1
   2162 ; AVX2-NEXT:    retq
   2163 ;
   2164 ; AVX512-LABEL: load_sext_8i8_to_8i64:
   2165 ; AVX512:       # %bb.0: # %entry
   2166 ; AVX512-NEXT:    vpmovsxbq (%rdi), %zmm0
   2167 ; AVX512-NEXT:    retq
   2168 ;
   2169 ; X32-SSE41-LABEL: load_sext_8i8_to_8i64:
   2170 ; X32-SSE41:       # %bb.0: # %entry
   2171 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   2172 ; X32-SSE41-NEXT:    pmovsxbq (%eax), %xmm0
   2173 ; X32-SSE41-NEXT:    pmovsxbq 2(%eax), %xmm1
   2174 ; X32-SSE41-NEXT:    pmovsxbq 4(%eax), %xmm2
   2175 ; X32-SSE41-NEXT:    pmovsxbq 6(%eax), %xmm3
   2176 ; X32-SSE41-NEXT:    retl
   2177 entry:
   2178  %X = load <8 x i8>, <8 x i8>* %ptr
   2179  %Y = sext <8 x i8> %X to <8 x i64>
   2180  ret <8 x i64> %Y
   2181 }
   2182 
   2183 define <8 x i32> @load_sext_8i1_to_8i32(<8 x i1> *%ptr) {
   2184 ; SSE2-LABEL: load_sext_8i1_to_8i32:
   2185 ; SSE2:       # %bb.0: # %entry
   2186 ; SSE2-NEXT:    movzbl (%rdi), %eax
   2187 ; SSE2-NEXT:    movl %eax, %ecx
   2188 ; SSE2-NEXT:    shrl $7, %ecx
   2189 ; SSE2-NEXT:    movd %ecx, %xmm0
   2190 ; SSE2-NEXT:    movl %eax, %ecx
   2191 ; SSE2-NEXT:    shrl $6, %ecx
   2192 ; SSE2-NEXT:    andl $1, %ecx
   2193 ; SSE2-NEXT:    movd %ecx, %xmm1
   2194 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
   2195 ; SSE2-NEXT:    movl %eax, %ecx
   2196 ; SSE2-NEXT:    shrl $5, %ecx
   2197 ; SSE2-NEXT:    andl $1, %ecx
   2198 ; SSE2-NEXT:    movd %ecx, %xmm0
   2199 ; SSE2-NEXT:    movl %eax, %ecx
   2200 ; SSE2-NEXT:    shrl $4, %ecx
   2201 ; SSE2-NEXT:    andl $1, %ecx
   2202 ; SSE2-NEXT:    movd %ecx, %xmm2
   2203 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
   2204 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
   2205 ; SSE2-NEXT:    movl %eax, %ecx
   2206 ; SSE2-NEXT:    shrl $3, %ecx
   2207 ; SSE2-NEXT:    andl $1, %ecx
   2208 ; SSE2-NEXT:    movd %ecx, %xmm0
   2209 ; SSE2-NEXT:    movl %eax, %ecx
   2210 ; SSE2-NEXT:    shrl $2, %ecx
   2211 ; SSE2-NEXT:    andl $1, %ecx
   2212 ; SSE2-NEXT:    movd %ecx, %xmm3
   2213 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3]
   2214 ; SSE2-NEXT:    movl %eax, %ecx
   2215 ; SSE2-NEXT:    andl $1, %ecx
   2216 ; SSE2-NEXT:    movd %ecx, %xmm1
   2217 ; SSE2-NEXT:    shrl %eax
   2218 ; SSE2-NEXT:    andl $1, %eax
   2219 ; SSE2-NEXT:    movd %eax, %xmm0
   2220 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
   2221 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
   2222 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
   2223 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   2224 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
   2225 ; SSE2-NEXT:    pslld $31, %xmm0
   2226 ; SSE2-NEXT:    psrad $31, %xmm0
   2227 ; SSE2-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
   2228 ; SSE2-NEXT:    pslld $31, %xmm1
   2229 ; SSE2-NEXT:    psrad $31, %xmm1
   2230 ; SSE2-NEXT:    retq
   2231 ;
   2232 ; SSSE3-LABEL: load_sext_8i1_to_8i32:
   2233 ; SSSE3:       # %bb.0: # %entry
   2234 ; SSSE3-NEXT:    movzbl (%rdi), %eax
   2235 ; SSSE3-NEXT:    movl %eax, %ecx
   2236 ; SSSE3-NEXT:    shrl $7, %ecx
   2237 ; SSSE3-NEXT:    movd %ecx, %xmm0
   2238 ; SSSE3-NEXT:    movl %eax, %ecx
   2239 ; SSSE3-NEXT:    shrl $6, %ecx
   2240 ; SSSE3-NEXT:    andl $1, %ecx
   2241 ; SSSE3-NEXT:    movd %ecx, %xmm1
   2242 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
   2243 ; SSSE3-NEXT:    movl %eax, %ecx
   2244 ; SSSE3-NEXT:    shrl $5, %ecx
   2245 ; SSSE3-NEXT:    andl $1, %ecx
   2246 ; SSSE3-NEXT:    movd %ecx, %xmm0
   2247 ; SSSE3-NEXT:    movl %eax, %ecx
   2248 ; SSSE3-NEXT:    shrl $4, %ecx
   2249 ; SSSE3-NEXT:    andl $1, %ecx
   2250 ; SSSE3-NEXT:    movd %ecx, %xmm2
   2251 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3]
   2252 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
   2253 ; SSSE3-NEXT:    movl %eax, %ecx
   2254 ; SSSE3-NEXT:    shrl $3, %ecx
   2255 ; SSSE3-NEXT:    andl $1, %ecx
   2256 ; SSSE3-NEXT:    movd %ecx, %xmm0
   2257 ; SSSE3-NEXT:    movl %eax, %ecx
   2258 ; SSSE3-NEXT:    shrl $2, %ecx
   2259 ; SSSE3-NEXT:    andl $1, %ecx
   2260 ; SSSE3-NEXT:    movd %ecx, %xmm3
   2261 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3]
   2262 ; SSSE3-NEXT:    movl %eax, %ecx
   2263 ; SSSE3-NEXT:    andl $1, %ecx
   2264 ; SSSE3-NEXT:    movd %ecx, %xmm1
   2265 ; SSSE3-NEXT:    shrl %eax
   2266 ; SSSE3-NEXT:    andl $1, %eax
   2267 ; SSSE3-NEXT:    movd %eax, %xmm0
   2268 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
   2269 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
   2270 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
   2271 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
   2272 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
   2273 ; SSSE3-NEXT:    pslld $31, %xmm0
   2274 ; SSSE3-NEXT:    psrad $31, %xmm0
   2275 ; SSSE3-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
   2276 ; SSSE3-NEXT:    pslld $31, %xmm1
   2277 ; SSSE3-NEXT:    psrad $31, %xmm1
   2278 ; SSSE3-NEXT:    retq
   2279 ;
   2280 ; SSE41-LABEL: load_sext_8i1_to_8i32:
   2281 ; SSE41:       # %bb.0: # %entry
   2282 ; SSE41-NEXT:    movzbl (%rdi), %eax
   2283 ; SSE41-NEXT:    movl %eax, %ecx
   2284 ; SSE41-NEXT:    shrl %ecx
   2285 ; SSE41-NEXT:    andl $1, %ecx
   2286 ; SSE41-NEXT:    movl %eax, %edx
   2287 ; SSE41-NEXT:    andl $1, %edx
   2288 ; SSE41-NEXT:    movd %edx, %xmm1
   2289 ; SSE41-NEXT:    pinsrw $1, %ecx, %xmm1
   2290 ; SSE41-NEXT:    movl %eax, %ecx
   2291 ; SSE41-NEXT:    shrl $2, %ecx
   2292 ; SSE41-NEXT:    andl $1, %ecx
   2293 ; SSE41-NEXT:    pinsrw $2, %ecx, %xmm1
   2294 ; SSE41-NEXT:    movl %eax, %ecx
   2295 ; SSE41-NEXT:    shrl $3, %ecx
   2296 ; SSE41-NEXT:    andl $1, %ecx
   2297 ; SSE41-NEXT:    pinsrw $3, %ecx, %xmm1
   2298 ; SSE41-NEXT:    movl %eax, %ecx
   2299 ; SSE41-NEXT:    shrl $4, %ecx
   2300 ; SSE41-NEXT:    andl $1, %ecx
   2301 ; SSE41-NEXT:    pinsrw $4, %ecx, %xmm1
   2302 ; SSE41-NEXT:    movl %eax, %ecx
   2303 ; SSE41-NEXT:    shrl $5, %ecx
   2304 ; SSE41-NEXT:    andl $1, %ecx
   2305 ; SSE41-NEXT:    pinsrw $5, %ecx, %xmm1
   2306 ; SSE41-NEXT:    movl %eax, %ecx
   2307 ; SSE41-NEXT:    shrl $6, %ecx
   2308 ; SSE41-NEXT:    andl $1, %ecx
   2309 ; SSE41-NEXT:    pinsrw $6, %ecx, %xmm1
   2310 ; SSE41-NEXT:    shrl $7, %eax
   2311 ; SSE41-NEXT:    pinsrw $7, %eax, %xmm1
   2312 ; SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero
   2313 ; SSE41-NEXT:    pslld $31, %xmm0
   2314 ; SSE41-NEXT:    psrad $31, %xmm0
   2315 ; SSE41-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
   2316 ; SSE41-NEXT:    pslld $31, %xmm1
   2317 ; SSE41-NEXT:    psrad $31, %xmm1
   2318 ; SSE41-NEXT:    retq
   2319 ;
   2320 ; AVX1-LABEL: load_sext_8i1_to_8i32:
   2321 ; AVX1:       # %bb.0: # %entry
   2322 ; AVX1-NEXT:    movsbq (%rdi), %rax
   2323 ; AVX1-NEXT:    movq %rax, %rcx
   2324 ; AVX1-NEXT:    shlq $58, %rcx
   2325 ; AVX1-NEXT:    sarq $63, %rcx
   2326 ; AVX1-NEXT:    movq %rax, %rdx
   2327 ; AVX1-NEXT:    shlq $59, %rdx
   2328 ; AVX1-NEXT:    sarq $63, %rdx
   2329 ; AVX1-NEXT:    vmovd %edx, %xmm0
   2330 ; AVX1-NEXT:    vpinsrd $1, %ecx, %xmm0, %xmm0
   2331 ; AVX1-NEXT:    movq %rax, %rcx
   2332 ; AVX1-NEXT:    shlq $57, %rcx
   2333 ; AVX1-NEXT:    sarq $63, %rcx
   2334 ; AVX1-NEXT:    vpinsrd $2, %ecx, %xmm0, %xmm0
   2335 ; AVX1-NEXT:    movq %rax, %rcx
   2336 ; AVX1-NEXT:    shrq $7, %rcx
   2337 ; AVX1-NEXT:    vpinsrd $3, %ecx, %xmm0, %xmm0
   2338 ; AVX1-NEXT:    movq %rax, %rcx
   2339 ; AVX1-NEXT:    shlq $62, %rcx
   2340 ; AVX1-NEXT:    sarq $63, %rcx
   2341 ; AVX1-NEXT:    movq %rax, %rdx
   2342 ; AVX1-NEXT:    shlq $63, %rdx
   2343 ; AVX1-NEXT:    sarq $63, %rdx
   2344 ; AVX1-NEXT:    vmovd %edx, %xmm1
   2345 ; AVX1-NEXT:    vpinsrd $1, %ecx, %xmm1, %xmm1
   2346 ; AVX1-NEXT:    movq %rax, %rcx
   2347 ; AVX1-NEXT:    shlq $61, %rcx
   2348 ; AVX1-NEXT:    sarq $63, %rcx
   2349 ; AVX1-NEXT:    vpinsrd $2, %ecx, %xmm1, %xmm1
   2350 ; AVX1-NEXT:    shlq $60, %rax
   2351 ; AVX1-NEXT:    sarq $63, %rax
   2352 ; AVX1-NEXT:    vpinsrd $3, %eax, %xmm1, %xmm1
   2353 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   2354 ; AVX1-NEXT:    retq
   2355 ;
   2356 ; AVX2-LABEL: load_sext_8i1_to_8i32:
   2357 ; AVX2:       # %bb.0: # %entry
   2358 ; AVX2-NEXT:    movsbq (%rdi), %rax
   2359 ; AVX2-NEXT:    movq %rax, %rcx
   2360 ; AVX2-NEXT:    shlq $58, %rcx
   2361 ; AVX2-NEXT:    sarq $63, %rcx
   2362 ; AVX2-NEXT:    movq %rax, %rdx
   2363 ; AVX2-NEXT:    shlq $59, %rdx
   2364 ; AVX2-NEXT:    sarq $63, %rdx
   2365 ; AVX2-NEXT:    vmovd %edx, %xmm0
   2366 ; AVX2-NEXT:    vpinsrd $1, %ecx, %xmm0, %xmm0
   2367 ; AVX2-NEXT:    movq %rax, %rcx
   2368 ; AVX2-NEXT:    shlq $57, %rcx
   2369 ; AVX2-NEXT:    sarq $63, %rcx
   2370 ; AVX2-NEXT:    vpinsrd $2, %ecx, %xmm0, %xmm0
   2371 ; AVX2-NEXT:    movq %rax, %rcx
   2372 ; AVX2-NEXT:    shrq $7, %rcx
   2373 ; AVX2-NEXT:    vpinsrd $3, %ecx, %xmm0, %xmm0
   2374 ; AVX2-NEXT:    movq %rax, %rcx
   2375 ; AVX2-NEXT:    shlq $62, %rcx
   2376 ; AVX2-NEXT:    sarq $63, %rcx
   2377 ; AVX2-NEXT:    movq %rax, %rdx
   2378 ; AVX2-NEXT:    shlq $63, %rdx
   2379 ; AVX2-NEXT:    sarq $63, %rdx
   2380 ; AVX2-NEXT:    vmovd %edx, %xmm1
   2381 ; AVX2-NEXT:    vpinsrd $1, %ecx, %xmm1, %xmm1
   2382 ; AVX2-NEXT:    movq %rax, %rcx
   2383 ; AVX2-NEXT:    shlq $61, %rcx
   2384 ; AVX2-NEXT:    sarq $63, %rcx
   2385 ; AVX2-NEXT:    vpinsrd $2, %ecx, %xmm1, %xmm1
   2386 ; AVX2-NEXT:    shlq $60, %rax
   2387 ; AVX2-NEXT:    sarq $63, %rax
   2388 ; AVX2-NEXT:    vpinsrd $3, %eax, %xmm1, %xmm1
   2389 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
   2390 ; AVX2-NEXT:    retq
   2391 ;
   2392 ; AVX512F-LABEL: load_sext_8i1_to_8i32:
   2393 ; AVX512F:       # %bb.0: # %entry
   2394 ; AVX512F-NEXT:    movzbl (%rdi), %eax
   2395 ; AVX512F-NEXT:    kmovw %eax, %k1
   2396 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
   2397 ; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
   2398 ; AVX512F-NEXT:    retq
   2399 ;
   2400 ; AVX512BW-LABEL: load_sext_8i1_to_8i32:
   2401 ; AVX512BW:       # %bb.0: # %entry
   2402 ; AVX512BW-NEXT:    movzbl (%rdi), %eax
   2403 ; AVX512BW-NEXT:    kmovd %eax, %k1
   2404 ; AVX512BW-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
   2405 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
   2406 ; AVX512BW-NEXT:    retq
   2407 ;
   2408 ; X32-SSE41-LABEL: load_sext_8i1_to_8i32:
   2409 ; X32-SSE41:       # %bb.0: # %entry
   2410 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   2411 ; X32-SSE41-NEXT:    movzbl (%eax), %eax
   2412 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2413 ; X32-SSE41-NEXT:    shrl %ecx
   2414 ; X32-SSE41-NEXT:    andl $1, %ecx
   2415 ; X32-SSE41-NEXT:    movl %eax, %edx
   2416 ; X32-SSE41-NEXT:    andl $1, %edx
   2417 ; X32-SSE41-NEXT:    movd %edx, %xmm1
   2418 ; X32-SSE41-NEXT:    pinsrw $1, %ecx, %xmm1
   2419 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2420 ; X32-SSE41-NEXT:    shrl $2, %ecx
   2421 ; X32-SSE41-NEXT:    andl $1, %ecx
   2422 ; X32-SSE41-NEXT:    pinsrw $2, %ecx, %xmm1
   2423 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2424 ; X32-SSE41-NEXT:    shrl $3, %ecx
   2425 ; X32-SSE41-NEXT:    andl $1, %ecx
   2426 ; X32-SSE41-NEXT:    pinsrw $3, %ecx, %xmm1
   2427 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2428 ; X32-SSE41-NEXT:    shrl $4, %ecx
   2429 ; X32-SSE41-NEXT:    andl $1, %ecx
   2430 ; X32-SSE41-NEXT:    pinsrw $4, %ecx, %xmm1
   2431 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2432 ; X32-SSE41-NEXT:    shrl $5, %ecx
   2433 ; X32-SSE41-NEXT:    andl $1, %ecx
   2434 ; X32-SSE41-NEXT:    pinsrw $5, %ecx, %xmm1
   2435 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2436 ; X32-SSE41-NEXT:    shrl $6, %ecx
   2437 ; X32-SSE41-NEXT:    andl $1, %ecx
   2438 ; X32-SSE41-NEXT:    pinsrw $6, %ecx, %xmm1
   2439 ; X32-SSE41-NEXT:    shrl $7, %eax
   2440 ; X32-SSE41-NEXT:    pinsrw $7, %eax, %xmm1
   2441 ; X32-SSE41-NEXT:    pmovzxwd {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero
   2442 ; X32-SSE41-NEXT:    pslld $31, %xmm0
   2443 ; X32-SSE41-NEXT:    psrad $31, %xmm0
   2444 ; X32-SSE41-NEXT:    punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
   2445 ; X32-SSE41-NEXT:    pslld $31, %xmm1
   2446 ; X32-SSE41-NEXT:    psrad $31, %xmm1
   2447 ; X32-SSE41-NEXT:    retl
   2448 entry:
   2449  %X = load <8 x i1>, <8 x i1>* %ptr
   2450  %Y = sext <8 x i1> %X to <8 x i32>
   2451  ret <8 x i32> %Y
   2452 }
   2453 
   2454 define <8 x i32> @load_sext_8i8_to_8i32(<8 x i8> *%ptr) {
   2455 ; SSE2-LABEL: load_sext_8i8_to_8i32:
   2456 ; SSE2:       # %bb.0: # %entry
   2457 ; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
   2458 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   2459 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
   2460 ; SSE2-NEXT:    psrad $24, %xmm0
   2461 ; SSE2-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
   2462 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   2463 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3]
   2464 ; SSE2-NEXT:    psrad $24, %xmm1
   2465 ; SSE2-NEXT:    retq
   2466 ;
   2467 ; SSSE3-LABEL: load_sext_8i8_to_8i32:
   2468 ; SSSE3:       # %bb.0: # %entry
   2469 ; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
   2470 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   2471 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
   2472 ; SSSE3-NEXT:    psrad $24, %xmm0
   2473 ; SSSE3-NEXT:    movd {{.*#+}} xmm1 = mem[0],zero,zero,zero
   2474 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   2475 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3]
   2476 ; SSSE3-NEXT:    psrad $24, %xmm1
   2477 ; SSSE3-NEXT:    retq
   2478 ;
   2479 ; SSE41-LABEL: load_sext_8i8_to_8i32:
   2480 ; SSE41:       # %bb.0: # %entry
   2481 ; SSE41-NEXT:    pmovsxbd (%rdi), %xmm0
   2482 ; SSE41-NEXT:    pmovsxbd 4(%rdi), %xmm1
   2483 ; SSE41-NEXT:    retq
   2484 ;
   2485 ; AVX1-LABEL: load_sext_8i8_to_8i32:
   2486 ; AVX1:       # %bb.0: # %entry
   2487 ; AVX1-NEXT:    vpmovsxbw (%rdi), %xmm0
   2488 ; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm1
   2489 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   2490 ; AVX1-NEXT:    vpmovsxwd %xmm0, %xmm0
   2491 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   2492 ; AVX1-NEXT:    retq
   2493 ;
   2494 ; AVX2-LABEL: load_sext_8i8_to_8i32:
   2495 ; AVX2:       # %bb.0: # %entry
   2496 ; AVX2-NEXT:    vpmovsxbd (%rdi), %ymm0
   2497 ; AVX2-NEXT:    retq
   2498 ;
   2499 ; AVX512-LABEL: load_sext_8i8_to_8i32:
   2500 ; AVX512:       # %bb.0: # %entry
   2501 ; AVX512-NEXT:    vpmovsxbd (%rdi), %ymm0
   2502 ; AVX512-NEXT:    retq
   2503 ;
   2504 ; X32-SSE41-LABEL: load_sext_8i8_to_8i32:
   2505 ; X32-SSE41:       # %bb.0: # %entry
   2506 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   2507 ; X32-SSE41-NEXT:    pmovsxbd (%eax), %xmm0
   2508 ; X32-SSE41-NEXT:    pmovsxbd 4(%eax), %xmm1
   2509 ; X32-SSE41-NEXT:    retl
   2510 entry:
   2511  %X = load <8 x i8>, <8 x i8>* %ptr
   2512  %Y = sext <8 x i8> %X to <8 x i32>
   2513  ret <8 x i32> %Y
   2514 }
   2515 
   2516 define <16 x i8> @load_sext_16i1_to_16i8(<16 x i1> *%ptr) nounwind readnone {
   2517 ; SSE2-LABEL: load_sext_16i1_to_16i8:
   2518 ; SSE2:       # %bb.0: # %entry
   2519 ; SSE2-NEXT:    pushq %rbp
   2520 ; SSE2-NEXT:    pushq %r15
   2521 ; SSE2-NEXT:    pushq %r14
   2522 ; SSE2-NEXT:    pushq %r13
   2523 ; SSE2-NEXT:    pushq %r12
   2524 ; SSE2-NEXT:    pushq %rbx
   2525 ; SSE2-NEXT:    movswq (%rdi), %rax
   2526 ; SSE2-NEXT:    movq %rax, %r8
   2527 ; SSE2-NEXT:    movq %rax, %r9
   2528 ; SSE2-NEXT:    movq %rax, %r10
   2529 ; SSE2-NEXT:    movq %rax, %r11
   2530 ; SSE2-NEXT:    movq %rax, %r14
   2531 ; SSE2-NEXT:    movq %rax, %r15
   2532 ; SSE2-NEXT:    movq %rax, %r12
   2533 ; SSE2-NEXT:    movq %rax, %r13
   2534 ; SSE2-NEXT:    movq %rax, %rbx
   2535 ; SSE2-NEXT:    movq %rax, %rcx
   2536 ; SSE2-NEXT:    movq %rax, %rdx
   2537 ; SSE2-NEXT:    movq %rax, %rsi
   2538 ; SSE2-NEXT:    movq %rax, %rdi
   2539 ; SSE2-NEXT:    movq %rax, %rbp
   2540 ; SSE2-NEXT:    shrq $15, %rbp
   2541 ; SSE2-NEXT:    movd %ebp, %xmm0
   2542 ; SSE2-NEXT:    movq %rax, %rbp
   2543 ; SSE2-NEXT:    movsbq %al, %rax
   2544 ; SSE2-NEXT:    shlq $49, %r8
   2545 ; SSE2-NEXT:    sarq $63, %r8
   2546 ; SSE2-NEXT:    movd %r8d, %xmm1
   2547 ; SSE2-NEXT:    shlq $50, %r9
   2548 ; SSE2-NEXT:    sarq $63, %r9
   2549 ; SSE2-NEXT:    movd %r9d, %xmm2
   2550 ; SSE2-NEXT:    shlq $51, %r10
   2551 ; SSE2-NEXT:    sarq $63, %r10
   2552 ; SSE2-NEXT:    movd %r10d, %xmm3
   2553 ; SSE2-NEXT:    shlq $52, %r11
   2554 ; SSE2-NEXT:    sarq $63, %r11
   2555 ; SSE2-NEXT:    movd %r11d, %xmm4
   2556 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
   2557 ; SSE2-NEXT:    shlq $53, %r14
   2558 ; SSE2-NEXT:    sarq $63, %r14
   2559 ; SSE2-NEXT:    movd %r14d, %xmm0
   2560 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
   2561 ; SSE2-NEXT:    shlq $54, %r15
   2562 ; SSE2-NEXT:    sarq $63, %r15
   2563 ; SSE2-NEXT:    movd %r15d, %xmm2
   2564 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
   2565 ; SSE2-NEXT:    shlq $55, %r12
   2566 ; SSE2-NEXT:    sarq $63, %r12
   2567 ; SSE2-NEXT:    movd %r12d, %xmm1
   2568 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = 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]
   2569 ; SSE2-NEXT:    shlq $60, %r13
   2570 ; SSE2-NEXT:    sarq $63, %r13
   2571 ; SSE2-NEXT:    movd %r13d, %xmm4
   2572 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
   2573 ; SSE2-NEXT:    shlq $61, %rbx
   2574 ; SSE2-NEXT:    sarq $63, %rbx
   2575 ; SSE2-NEXT:    movd %ebx, %xmm2
   2576 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
   2577 ; SSE2-NEXT:    shlq $62, %rcx
   2578 ; SSE2-NEXT:    sarq $63, %rcx
   2579 ; SSE2-NEXT:    movd %ecx, %xmm5
   2580 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
   2581 ; SSE2-NEXT:    shlq $63, %rdx
   2582 ; SSE2-NEXT:    sarq $63, %rdx
   2583 ; SSE2-NEXT:    movd %edx, %xmm0
   2584 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3],xmm2[4],xmm4[4],xmm2[5],xmm4[5],xmm2[6],xmm4[6],xmm2[7],xmm4[7]
   2585 ; SSE2-NEXT:    shlq $58, %rsi
   2586 ; SSE2-NEXT:    sarq $63, %rsi
   2587 ; SSE2-NEXT:    movd %esi, %xmm3
   2588 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3],xmm0[4],xmm5[4],xmm0[5],xmm5[5],xmm0[6],xmm5[6],xmm0[7],xmm5[7]
   2589 ; SSE2-NEXT:    shlq $59, %rdi
   2590 ; SSE2-NEXT:    sarq $63, %rdi
   2591 ; SSE2-NEXT:    movd %edi, %xmm4
   2592 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
   2593 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3],xmm4[4],xmm3[4],xmm4[5],xmm3[5],xmm4[6],xmm3[6],xmm4[7],xmm3[7]
   2594 ; SSE2-NEXT:    shlq $57, %rbp
   2595 ; SSE2-NEXT:    sarq $63, %rbp
   2596 ; SSE2-NEXT:    movd %ebp, %xmm2
   2597 ; SSE2-NEXT:    shrq $7, %rax
   2598 ; SSE2-NEXT:    movd %eax, %xmm3
   2599 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
   2600 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3]
   2601 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]
   2602 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   2603 ; SSE2-NEXT:    popq %rbx
   2604 ; SSE2-NEXT:    popq %r12
   2605 ; SSE2-NEXT:    popq %r13
   2606 ; SSE2-NEXT:    popq %r14
   2607 ; SSE2-NEXT:    popq %r15
   2608 ; SSE2-NEXT:    popq %rbp
   2609 ; SSE2-NEXT:    retq
   2610 ;
   2611 ; SSSE3-LABEL: load_sext_16i1_to_16i8:
   2612 ; SSSE3:       # %bb.0: # %entry
   2613 ; SSSE3-NEXT:    pushq %rbp
   2614 ; SSSE3-NEXT:    pushq %r15
   2615 ; SSSE3-NEXT:    pushq %r14
   2616 ; SSSE3-NEXT:    pushq %r13
   2617 ; SSSE3-NEXT:    pushq %r12
   2618 ; SSSE3-NEXT:    pushq %rbx
   2619 ; SSSE3-NEXT:    movswq (%rdi), %rax
   2620 ; SSSE3-NEXT:    movq %rax, %r8
   2621 ; SSSE3-NEXT:    movq %rax, %r9
   2622 ; SSSE3-NEXT:    movq %rax, %r10
   2623 ; SSSE3-NEXT:    movq %rax, %r11
   2624 ; SSSE3-NEXT:    movq %rax, %r14
   2625 ; SSSE3-NEXT:    movq %rax, %r15
   2626 ; SSSE3-NEXT:    movq %rax, %r12
   2627 ; SSSE3-NEXT:    movq %rax, %r13
   2628 ; SSSE3-NEXT:    movq %rax, %rbx
   2629 ; SSSE3-NEXT:    movq %rax, %rcx
   2630 ; SSSE3-NEXT:    movq %rax, %rdx
   2631 ; SSSE3-NEXT:    movq %rax, %rsi
   2632 ; SSSE3-NEXT:    movq %rax, %rdi
   2633 ; SSSE3-NEXT:    movq %rax, %rbp
   2634 ; SSSE3-NEXT:    shrq $15, %rbp
   2635 ; SSSE3-NEXT:    movd %ebp, %xmm0
   2636 ; SSSE3-NEXT:    movq %rax, %rbp
   2637 ; SSSE3-NEXT:    movsbq %al, %rax
   2638 ; SSSE3-NEXT:    shlq $49, %r8
   2639 ; SSSE3-NEXT:    sarq $63, %r8
   2640 ; SSSE3-NEXT:    movd %r8d, %xmm1
   2641 ; SSSE3-NEXT:    shlq $50, %r9
   2642 ; SSSE3-NEXT:    sarq $63, %r9
   2643 ; SSSE3-NEXT:    movd %r9d, %xmm2
   2644 ; SSSE3-NEXT:    shlq $51, %r10
   2645 ; SSSE3-NEXT:    sarq $63, %r10
   2646 ; SSSE3-NEXT:    movd %r10d, %xmm3
   2647 ; SSSE3-NEXT:    shlq $52, %r11
   2648 ; SSSE3-NEXT:    sarq $63, %r11
   2649 ; SSSE3-NEXT:    movd %r11d, %xmm4
   2650 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
   2651 ; SSSE3-NEXT:    shlq $53, %r14
   2652 ; SSSE3-NEXT:    sarq $63, %r14
   2653 ; SSSE3-NEXT:    movd %r14d, %xmm0
   2654 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3],xmm3[4],xmm2[4],xmm3[5],xmm2[5],xmm3[6],xmm2[6],xmm3[7],xmm2[7]
   2655 ; SSSE3-NEXT:    shlq $54, %r15
   2656 ; SSSE3-NEXT:    sarq $63, %r15
   2657 ; SSSE3-NEXT:    movd %r15d, %xmm2
   2658 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
   2659 ; SSSE3-NEXT:    shlq $55, %r12
   2660 ; SSSE3-NEXT:    sarq $63, %r12
   2661 ; SSSE3-NEXT:    movd %r12d, %xmm1
   2662 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = 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]
   2663 ; SSSE3-NEXT:    shlq $60, %r13
   2664 ; SSSE3-NEXT:    sarq $63, %r13
   2665 ; SSSE3-NEXT:    movd %r13d, %xmm4
   2666 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
   2667 ; SSSE3-NEXT:    shlq $61, %rbx
   2668 ; SSSE3-NEXT:    sarq $63, %rbx
   2669 ; SSSE3-NEXT:    movd %ebx, %xmm2
   2670 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3]
   2671 ; SSSE3-NEXT:    shlq $62, %rcx
   2672 ; SSSE3-NEXT:    sarq $63, %rcx
   2673 ; SSSE3-NEXT:    movd %ecx, %xmm5
   2674 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
   2675 ; SSSE3-NEXT:    shlq $63, %rdx
   2676 ; SSSE3-NEXT:    sarq $63, %rdx
   2677 ; SSSE3-NEXT:    movd %edx, %xmm0
   2678 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm4[0],xmm2[1],xmm4[1],xmm2[2],xmm4[2],xmm2[3],xmm4[3],xmm2[4],xmm4[4],xmm2[5],xmm4[5],xmm2[6],xmm4[6],xmm2[7],xmm4[7]
   2679 ; SSSE3-NEXT:    shlq $58, %rsi
   2680 ; SSSE3-NEXT:    sarq $63, %rsi
   2681 ; SSSE3-NEXT:    movd %esi, %xmm3
   2682 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3],xmm0[4],xmm5[4],xmm0[5],xmm5[5],xmm0[6],xmm5[6],xmm0[7],xmm5[7]
   2683 ; SSSE3-NEXT:    shlq $59, %rdi
   2684 ; SSSE3-NEXT:    sarq $63, %rdi
   2685 ; SSSE3-NEXT:    movd %edi, %xmm4
   2686 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3]
   2687 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3],xmm4[4],xmm3[4],xmm4[5],xmm3[5],xmm4[6],xmm3[6],xmm4[7],xmm3[7]
   2688 ; SSSE3-NEXT:    shlq $57, %rbp
   2689 ; SSSE3-NEXT:    sarq $63, %rbp
   2690 ; SSSE3-NEXT:    movd %ebp, %xmm2
   2691 ; SSSE3-NEXT:    shrq $7, %rax
   2692 ; SSSE3-NEXT:    movd %eax, %xmm3
   2693 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7]
   2694 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3]
   2695 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1]
   2696 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   2697 ; SSSE3-NEXT:    popq %rbx
   2698 ; SSSE3-NEXT:    popq %r12
   2699 ; SSSE3-NEXT:    popq %r13
   2700 ; SSSE3-NEXT:    popq %r14
   2701 ; SSSE3-NEXT:    popq %r15
   2702 ; SSSE3-NEXT:    popq %rbp
   2703 ; SSSE3-NEXT:    retq
   2704 ;
   2705 ; SSE41-LABEL: load_sext_16i1_to_16i8:
   2706 ; SSE41:       # %bb.0: # %entry
   2707 ; SSE41-NEXT:    movswq (%rdi), %rax
   2708 ; SSE41-NEXT:    movq %rax, %rcx
   2709 ; SSE41-NEXT:    shlq $62, %rcx
   2710 ; SSE41-NEXT:    sarq $63, %rcx
   2711 ; SSE41-NEXT:    movq %rax, %rdx
   2712 ; SSE41-NEXT:    shlq $63, %rdx
   2713 ; SSE41-NEXT:    sarq $63, %rdx
   2714 ; SSE41-NEXT:    movd %edx, %xmm0
   2715 ; SSE41-NEXT:    pinsrb $1, %ecx, %xmm0
   2716 ; SSE41-NEXT:    movq %rax, %rcx
   2717 ; SSE41-NEXT:    shlq $61, %rcx
   2718 ; SSE41-NEXT:    sarq $63, %rcx
   2719 ; SSE41-NEXT:    pinsrb $2, %ecx, %xmm0
   2720 ; SSE41-NEXT:    movq %rax, %rcx
   2721 ; SSE41-NEXT:    shlq $60, %rcx
   2722 ; SSE41-NEXT:    sarq $63, %rcx
   2723 ; SSE41-NEXT:    pinsrb $3, %ecx, %xmm0
   2724 ; SSE41-NEXT:    movq %rax, %rcx
   2725 ; SSE41-NEXT:    shlq $59, %rcx
   2726 ; SSE41-NEXT:    sarq $63, %rcx
   2727 ; SSE41-NEXT:    pinsrb $4, %ecx, %xmm0
   2728 ; SSE41-NEXT:    movq %rax, %rcx
   2729 ; SSE41-NEXT:    shlq $58, %rcx
   2730 ; SSE41-NEXT:    sarq $63, %rcx
   2731 ; SSE41-NEXT:    pinsrb $5, %ecx, %xmm0
   2732 ; SSE41-NEXT:    movq %rax, %rcx
   2733 ; SSE41-NEXT:    shlq $57, %rcx
   2734 ; SSE41-NEXT:    sarq $63, %rcx
   2735 ; SSE41-NEXT:    pinsrb $6, %ecx, %xmm0
   2736 ; SSE41-NEXT:    movsbq %al, %rcx
   2737 ; SSE41-NEXT:    shrq $7, %rcx
   2738 ; SSE41-NEXT:    pinsrb $7, %ecx, %xmm0
   2739 ; SSE41-NEXT:    movq %rax, %rcx
   2740 ; SSE41-NEXT:    shlq $55, %rcx
   2741 ; SSE41-NEXT:    sarq $63, %rcx
   2742 ; SSE41-NEXT:    pinsrb $8, %ecx, %xmm0
   2743 ; SSE41-NEXT:    movq %rax, %rcx
   2744 ; SSE41-NEXT:    shlq $54, %rcx
   2745 ; SSE41-NEXT:    sarq $63, %rcx
   2746 ; SSE41-NEXT:    pinsrb $9, %ecx, %xmm0
   2747 ; SSE41-NEXT:    movq %rax, %rcx
   2748 ; SSE41-NEXT:    shlq $53, %rcx
   2749 ; SSE41-NEXT:    sarq $63, %rcx
   2750 ; SSE41-NEXT:    pinsrb $10, %ecx, %xmm0
   2751 ; SSE41-NEXT:    movq %rax, %rcx
   2752 ; SSE41-NEXT:    shlq $52, %rcx
   2753 ; SSE41-NEXT:    sarq $63, %rcx
   2754 ; SSE41-NEXT:    pinsrb $11, %ecx, %xmm0
   2755 ; SSE41-NEXT:    movq %rax, %rcx
   2756 ; SSE41-NEXT:    shlq $51, %rcx
   2757 ; SSE41-NEXT:    sarq $63, %rcx
   2758 ; SSE41-NEXT:    pinsrb $12, %ecx, %xmm0
   2759 ; SSE41-NEXT:    movq %rax, %rcx
   2760 ; SSE41-NEXT:    shlq $50, %rcx
   2761 ; SSE41-NEXT:    sarq $63, %rcx
   2762 ; SSE41-NEXT:    pinsrb $13, %ecx, %xmm0
   2763 ; SSE41-NEXT:    movq %rax, %rcx
   2764 ; SSE41-NEXT:    shlq $49, %rcx
   2765 ; SSE41-NEXT:    sarq $63, %rcx
   2766 ; SSE41-NEXT:    pinsrb $14, %ecx, %xmm0
   2767 ; SSE41-NEXT:    shrq $15, %rax
   2768 ; SSE41-NEXT:    pinsrb $15, %eax, %xmm0
   2769 ; SSE41-NEXT:    retq
   2770 ;
   2771 ; AVX1-LABEL: load_sext_16i1_to_16i8:
   2772 ; AVX1:       # %bb.0: # %entry
   2773 ; AVX1-NEXT:    movswq (%rdi), %rax
   2774 ; AVX1-NEXT:    movq %rax, %rcx
   2775 ; AVX1-NEXT:    shlq $62, %rcx
   2776 ; AVX1-NEXT:    sarq $63, %rcx
   2777 ; AVX1-NEXT:    movq %rax, %rdx
   2778 ; AVX1-NEXT:    shlq $63, %rdx
   2779 ; AVX1-NEXT:    sarq $63, %rdx
   2780 ; AVX1-NEXT:    vmovd %edx, %xmm0
   2781 ; AVX1-NEXT:    vpinsrb $1, %ecx, %xmm0, %xmm0
   2782 ; AVX1-NEXT:    movq %rax, %rcx
   2783 ; AVX1-NEXT:    shlq $61, %rcx
   2784 ; AVX1-NEXT:    sarq $63, %rcx
   2785 ; AVX1-NEXT:    vpinsrb $2, %ecx, %xmm0, %xmm0
   2786 ; AVX1-NEXT:    movq %rax, %rcx
   2787 ; AVX1-NEXT:    shlq $60, %rcx
   2788 ; AVX1-NEXT:    sarq $63, %rcx
   2789 ; AVX1-NEXT:    vpinsrb $3, %ecx, %xmm0, %xmm0
   2790 ; AVX1-NEXT:    movq %rax, %rcx
   2791 ; AVX1-NEXT:    shlq $59, %rcx
   2792 ; AVX1-NEXT:    sarq $63, %rcx
   2793 ; AVX1-NEXT:    vpinsrb $4, %ecx, %xmm0, %xmm0
   2794 ; AVX1-NEXT:    movq %rax, %rcx
   2795 ; AVX1-NEXT:    shlq $58, %rcx
   2796 ; AVX1-NEXT:    sarq $63, %rcx
   2797 ; AVX1-NEXT:    vpinsrb $5, %ecx, %xmm0, %xmm0
   2798 ; AVX1-NEXT:    movq %rax, %rcx
   2799 ; AVX1-NEXT:    shlq $57, %rcx
   2800 ; AVX1-NEXT:    sarq $63, %rcx
   2801 ; AVX1-NEXT:    vpinsrb $6, %ecx, %xmm0, %xmm0
   2802 ; AVX1-NEXT:    movsbq %al, %rcx
   2803 ; AVX1-NEXT:    shrq $7, %rcx
   2804 ; AVX1-NEXT:    vpinsrb $7, %ecx, %xmm0, %xmm0
   2805 ; AVX1-NEXT:    movq %rax, %rcx
   2806 ; AVX1-NEXT:    shlq $55, %rcx
   2807 ; AVX1-NEXT:    sarq $63, %rcx
   2808 ; AVX1-NEXT:    vpinsrb $8, %ecx, %xmm0, %xmm0
   2809 ; AVX1-NEXT:    movq %rax, %rcx
   2810 ; AVX1-NEXT:    shlq $54, %rcx
   2811 ; AVX1-NEXT:    sarq $63, %rcx
   2812 ; AVX1-NEXT:    vpinsrb $9, %ecx, %xmm0, %xmm0
   2813 ; AVX1-NEXT:    movq %rax, %rcx
   2814 ; AVX1-NEXT:    shlq $53, %rcx
   2815 ; AVX1-NEXT:    sarq $63, %rcx
   2816 ; AVX1-NEXT:    vpinsrb $10, %ecx, %xmm0, %xmm0
   2817 ; AVX1-NEXT:    movq %rax, %rcx
   2818 ; AVX1-NEXT:    shlq $52, %rcx
   2819 ; AVX1-NEXT:    sarq $63, %rcx
   2820 ; AVX1-NEXT:    vpinsrb $11, %ecx, %xmm0, %xmm0
   2821 ; AVX1-NEXT:    movq %rax, %rcx
   2822 ; AVX1-NEXT:    shlq $51, %rcx
   2823 ; AVX1-NEXT:    sarq $63, %rcx
   2824 ; AVX1-NEXT:    vpinsrb $12, %ecx, %xmm0, %xmm0
   2825 ; AVX1-NEXT:    movq %rax, %rcx
   2826 ; AVX1-NEXT:    shlq $50, %rcx
   2827 ; AVX1-NEXT:    sarq $63, %rcx
   2828 ; AVX1-NEXT:    vpinsrb $13, %ecx, %xmm0, %xmm0
   2829 ; AVX1-NEXT:    movq %rax, %rcx
   2830 ; AVX1-NEXT:    shlq $49, %rcx
   2831 ; AVX1-NEXT:    sarq $63, %rcx
   2832 ; AVX1-NEXT:    vpinsrb $14, %ecx, %xmm0, %xmm0
   2833 ; AVX1-NEXT:    shrq $15, %rax
   2834 ; AVX1-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0
   2835 ; AVX1-NEXT:    retq
   2836 ;
   2837 ; AVX2-LABEL: load_sext_16i1_to_16i8:
   2838 ; AVX2:       # %bb.0: # %entry
   2839 ; AVX2-NEXT:    movswq (%rdi), %rax
   2840 ; AVX2-NEXT:    movq %rax, %rcx
   2841 ; AVX2-NEXT:    shlq $62, %rcx
   2842 ; AVX2-NEXT:    sarq $63, %rcx
   2843 ; AVX2-NEXT:    movq %rax, %rdx
   2844 ; AVX2-NEXT:    shlq $63, %rdx
   2845 ; AVX2-NEXT:    sarq $63, %rdx
   2846 ; AVX2-NEXT:    vmovd %edx, %xmm0
   2847 ; AVX2-NEXT:    vpinsrb $1, %ecx, %xmm0, %xmm0
   2848 ; AVX2-NEXT:    movq %rax, %rcx
   2849 ; AVX2-NEXT:    shlq $61, %rcx
   2850 ; AVX2-NEXT:    sarq $63, %rcx
   2851 ; AVX2-NEXT:    vpinsrb $2, %ecx, %xmm0, %xmm0
   2852 ; AVX2-NEXT:    movq %rax, %rcx
   2853 ; AVX2-NEXT:    shlq $60, %rcx
   2854 ; AVX2-NEXT:    sarq $63, %rcx
   2855 ; AVX2-NEXT:    vpinsrb $3, %ecx, %xmm0, %xmm0
   2856 ; AVX2-NEXT:    movq %rax, %rcx
   2857 ; AVX2-NEXT:    shlq $59, %rcx
   2858 ; AVX2-NEXT:    sarq $63, %rcx
   2859 ; AVX2-NEXT:    vpinsrb $4, %ecx, %xmm0, %xmm0
   2860 ; AVX2-NEXT:    movq %rax, %rcx
   2861 ; AVX2-NEXT:    shlq $58, %rcx
   2862 ; AVX2-NEXT:    sarq $63, %rcx
   2863 ; AVX2-NEXT:    vpinsrb $5, %ecx, %xmm0, %xmm0
   2864 ; AVX2-NEXT:    movq %rax, %rcx
   2865 ; AVX2-NEXT:    shlq $57, %rcx
   2866 ; AVX2-NEXT:    sarq $63, %rcx
   2867 ; AVX2-NEXT:    vpinsrb $6, %ecx, %xmm0, %xmm0
   2868 ; AVX2-NEXT:    movsbq %al, %rcx
   2869 ; AVX2-NEXT:    shrq $7, %rcx
   2870 ; AVX2-NEXT:    vpinsrb $7, %ecx, %xmm0, %xmm0
   2871 ; AVX2-NEXT:    movq %rax, %rcx
   2872 ; AVX2-NEXT:    shlq $55, %rcx
   2873 ; AVX2-NEXT:    sarq $63, %rcx
   2874 ; AVX2-NEXT:    vpinsrb $8, %ecx, %xmm0, %xmm0
   2875 ; AVX2-NEXT:    movq %rax, %rcx
   2876 ; AVX2-NEXT:    shlq $54, %rcx
   2877 ; AVX2-NEXT:    sarq $63, %rcx
   2878 ; AVX2-NEXT:    vpinsrb $9, %ecx, %xmm0, %xmm0
   2879 ; AVX2-NEXT:    movq %rax, %rcx
   2880 ; AVX2-NEXT:    shlq $53, %rcx
   2881 ; AVX2-NEXT:    sarq $63, %rcx
   2882 ; AVX2-NEXT:    vpinsrb $10, %ecx, %xmm0, %xmm0
   2883 ; AVX2-NEXT:    movq %rax, %rcx
   2884 ; AVX2-NEXT:    shlq $52, %rcx
   2885 ; AVX2-NEXT:    sarq $63, %rcx
   2886 ; AVX2-NEXT:    vpinsrb $11, %ecx, %xmm0, %xmm0
   2887 ; AVX2-NEXT:    movq %rax, %rcx
   2888 ; AVX2-NEXT:    shlq $51, %rcx
   2889 ; AVX2-NEXT:    sarq $63, %rcx
   2890 ; AVX2-NEXT:    vpinsrb $12, %ecx, %xmm0, %xmm0
   2891 ; AVX2-NEXT:    movq %rax, %rcx
   2892 ; AVX2-NEXT:    shlq $50, %rcx
   2893 ; AVX2-NEXT:    sarq $63, %rcx
   2894 ; AVX2-NEXT:    vpinsrb $13, %ecx, %xmm0, %xmm0
   2895 ; AVX2-NEXT:    movq %rax, %rcx
   2896 ; AVX2-NEXT:    shlq $49, %rcx
   2897 ; AVX2-NEXT:    sarq $63, %rcx
   2898 ; AVX2-NEXT:    vpinsrb $14, %ecx, %xmm0, %xmm0
   2899 ; AVX2-NEXT:    shrq $15, %rax
   2900 ; AVX2-NEXT:    vpinsrb $15, %eax, %xmm0, %xmm0
   2901 ; AVX2-NEXT:    retq
   2902 ;
   2903 ; AVX512F-LABEL: load_sext_16i1_to_16i8:
   2904 ; AVX512F:       # %bb.0: # %entry
   2905 ; AVX512F-NEXT:    kmovw (%rdi), %k1
   2906 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
   2907 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
   2908 ; AVX512F-NEXT:    vzeroupper
   2909 ; AVX512F-NEXT:    retq
   2910 ;
   2911 ; AVX512BW-LABEL: load_sext_16i1_to_16i8:
   2912 ; AVX512BW:       # %bb.0: # %entry
   2913 ; AVX512BW-NEXT:    kmovw (%rdi), %k0
   2914 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
   2915 ; AVX512BW-NEXT:    # kill: def $xmm0 killed $xmm0 killed $zmm0
   2916 ; AVX512BW-NEXT:    vzeroupper
   2917 ; AVX512BW-NEXT:    retq
   2918 ;
   2919 ; X32-SSE41-LABEL: load_sext_16i1_to_16i8:
   2920 ; X32-SSE41:       # %bb.0: # %entry
   2921 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   2922 ; X32-SSE41-NEXT:    movswl (%eax), %eax
   2923 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2924 ; X32-SSE41-NEXT:    shll $30, %ecx
   2925 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2926 ; X32-SSE41-NEXT:    movl %eax, %edx
   2927 ; X32-SSE41-NEXT:    shll $31, %edx
   2928 ; X32-SSE41-NEXT:    sarl $31, %edx
   2929 ; X32-SSE41-NEXT:    movd %edx, %xmm0
   2930 ; X32-SSE41-NEXT:    pinsrb $1, %ecx, %xmm0
   2931 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2932 ; X32-SSE41-NEXT:    shll $29, %ecx
   2933 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2934 ; X32-SSE41-NEXT:    pinsrb $2, %ecx, %xmm0
   2935 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2936 ; X32-SSE41-NEXT:    shll $28, %ecx
   2937 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2938 ; X32-SSE41-NEXT:    pinsrb $3, %ecx, %xmm0
   2939 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2940 ; X32-SSE41-NEXT:    shll $27, %ecx
   2941 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2942 ; X32-SSE41-NEXT:    pinsrb $4, %ecx, %xmm0
   2943 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2944 ; X32-SSE41-NEXT:    shll $26, %ecx
   2945 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2946 ; X32-SSE41-NEXT:    pinsrb $5, %ecx, %xmm0
   2947 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2948 ; X32-SSE41-NEXT:    shll $25, %ecx
   2949 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2950 ; X32-SSE41-NEXT:    pinsrb $6, %ecx, %xmm0
   2951 ; X32-SSE41-NEXT:    movsbl %al, %ecx
   2952 ; X32-SSE41-NEXT:    shrl $7, %ecx
   2953 ; X32-SSE41-NEXT:    pinsrb $7, %ecx, %xmm0
   2954 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2955 ; X32-SSE41-NEXT:    shll $23, %ecx
   2956 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2957 ; X32-SSE41-NEXT:    pinsrb $8, %ecx, %xmm0
   2958 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2959 ; X32-SSE41-NEXT:    shll $22, %ecx
   2960 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2961 ; X32-SSE41-NEXT:    pinsrb $9, %ecx, %xmm0
   2962 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2963 ; X32-SSE41-NEXT:    shll $21, %ecx
   2964 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2965 ; X32-SSE41-NEXT:    pinsrb $10, %ecx, %xmm0
   2966 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2967 ; X32-SSE41-NEXT:    shll $20, %ecx
   2968 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2969 ; X32-SSE41-NEXT:    pinsrb $11, %ecx, %xmm0
   2970 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2971 ; X32-SSE41-NEXT:    shll $19, %ecx
   2972 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2973 ; X32-SSE41-NEXT:    pinsrb $12, %ecx, %xmm0
   2974 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2975 ; X32-SSE41-NEXT:    shll $18, %ecx
   2976 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2977 ; X32-SSE41-NEXT:    pinsrb $13, %ecx, %xmm0
   2978 ; X32-SSE41-NEXT:    movl %eax, %ecx
   2979 ; X32-SSE41-NEXT:    shll $17, %ecx
   2980 ; X32-SSE41-NEXT:    sarl $31, %ecx
   2981 ; X32-SSE41-NEXT:    pinsrb $14, %ecx, %xmm0
   2982 ; X32-SSE41-NEXT:    shrl $15, %eax
   2983 ; X32-SSE41-NEXT:    pinsrb $15, %eax, %xmm0
   2984 ; X32-SSE41-NEXT:    retl
   2985 entry:
   2986  %X = load <16 x i1>, <16 x i1>* %ptr
   2987  %Y = sext <16 x i1> %X to <16 x i8>
   2988  ret <16 x i8> %Y
   2989 }
   2990 
   2991 define <16 x i16> @load_sext_16i1_to_16i16(<16 x i1> *%ptr) {
   2992 ; SSE2-LABEL: load_sext_16i1_to_16i16:
   2993 ; SSE2:       # %bb.0: # %entry
   2994 ; SSE2-NEXT:    movzwl (%rdi), %eax
   2995 ; SSE2-NEXT:    movl %eax, %ecx
   2996 ; SSE2-NEXT:    shrl $15, %ecx
   2997 ; SSE2-NEXT:    movd %ecx, %xmm0
   2998 ; SSE2-NEXT:    movl %eax, %ecx
   2999 ; SSE2-NEXT:    shrl $14, %ecx
   3000 ; SSE2-NEXT:    andl $1, %ecx
   3001 ; SSE2-NEXT:    movd %ecx, %xmm1
   3002 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
   3003 ; SSE2-NEXT:    movl %eax, %ecx
   3004 ; SSE2-NEXT:    shrl $13, %ecx
   3005 ; SSE2-NEXT:    andl $1, %ecx
   3006 ; SSE2-NEXT:    movd %ecx, %xmm0
   3007 ; SSE2-NEXT:    movl %eax, %ecx
   3008 ; SSE2-NEXT:    shrl $12, %ecx
   3009 ; SSE2-NEXT:    andl $1, %ecx
   3010 ; SSE2-NEXT:    movd %ecx, %xmm2
   3011 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
   3012 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
   3013 ; SSE2-NEXT:    movl %eax, %ecx
   3014 ; SSE2-NEXT:    shrl $11, %ecx
   3015 ; SSE2-NEXT:    andl $1, %ecx
   3016 ; SSE2-NEXT:    movd %ecx, %xmm0
   3017 ; SSE2-NEXT:    movl %eax, %ecx
   3018 ; SSE2-NEXT:    shrl $10, %ecx
   3019 ; SSE2-NEXT:    andl $1, %ecx
   3020 ; SSE2-NEXT:    movd %ecx, %xmm1
   3021 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
   3022 ; SSE2-NEXT:    movl %eax, %ecx
   3023 ; SSE2-NEXT:    shrl $9, %ecx
   3024 ; SSE2-NEXT:    andl $1, %ecx
   3025 ; SSE2-NEXT:    movd %ecx, %xmm3
   3026 ; SSE2-NEXT:    movl %eax, %ecx
   3027 ; SSE2-NEXT:    shrl $8, %ecx
   3028 ; SSE2-NEXT:    andl $1, %ecx
   3029 ; SSE2-NEXT:    movd %ecx, %xmm0
   3030 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = 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]
   3031 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
   3032 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   3033 ; SSE2-NEXT:    movl %eax, %ecx
   3034 ; SSE2-NEXT:    shrl $7, %ecx
   3035 ; SSE2-NEXT:    andl $1, %ecx
   3036 ; SSE2-NEXT:    movd %ecx, %xmm1
   3037 ; SSE2-NEXT:    movl %eax, %ecx
   3038 ; SSE2-NEXT:    shrl $6, %ecx
   3039 ; SSE2-NEXT:    andl $1, %ecx
   3040 ; SSE2-NEXT:    movd %ecx, %xmm2
   3041 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
   3042 ; SSE2-NEXT:    movl %eax, %ecx
   3043 ; SSE2-NEXT:    shrl $5, %ecx
   3044 ; SSE2-NEXT:    andl $1, %ecx
   3045 ; SSE2-NEXT:    movd %ecx, %xmm1
   3046 ; SSE2-NEXT:    movl %eax, %ecx
   3047 ; SSE2-NEXT:    shrl $4, %ecx
   3048 ; SSE2-NEXT:    andl $1, %ecx
   3049 ; SSE2-NEXT:    movd %ecx, %xmm3
   3050 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
   3051 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
   3052 ; SSE2-NEXT:    movl %eax, %ecx
   3053 ; SSE2-NEXT:    shrl $3, %ecx
   3054 ; SSE2-NEXT:    andl $1, %ecx
   3055 ; SSE2-NEXT:    movd %ecx, %xmm1
   3056 ; SSE2-NEXT:    movl %eax, %ecx
   3057 ; SSE2-NEXT:    shrl $2, %ecx
   3058 ; SSE2-NEXT:    andl $1, %ecx
   3059 ; SSE2-NEXT:    movd %ecx, %xmm2
   3060 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
   3061 ; SSE2-NEXT:    movl %eax, %ecx
   3062 ; SSE2-NEXT:    andl $1, %ecx
   3063 ; SSE2-NEXT:    movd %ecx, %xmm1
   3064 ; SSE2-NEXT:    shrl %eax
   3065 ; SSE2-NEXT:    andl $1, %eax
   3066 ; SSE2-NEXT:    movd %eax, %xmm4
   3067 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]
   3068 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
   3069 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
   3070 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
   3071 ; SSE2-NEXT:    movdqa %xmm1, %xmm0
   3072 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   3073 ; SSE2-NEXT:    psllw $15, %xmm0
   3074 ; SSE2-NEXT:    psraw $15, %xmm0
   3075 ; SSE2-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]
   3076 ; SSE2-NEXT:    psllw $15, %xmm1
   3077 ; SSE2-NEXT:    psraw $15, %xmm1
   3078 ; SSE2-NEXT:    retq
   3079 ;
   3080 ; SSSE3-LABEL: load_sext_16i1_to_16i16:
   3081 ; SSSE3:       # %bb.0: # %entry
   3082 ; SSSE3-NEXT:    movzwl (%rdi), %eax
   3083 ; SSSE3-NEXT:    movl %eax, %ecx
   3084 ; SSSE3-NEXT:    shrl $15, %ecx
   3085 ; SSSE3-NEXT:    movd %ecx, %xmm0
   3086 ; SSSE3-NEXT:    movl %eax, %ecx
   3087 ; SSSE3-NEXT:    shrl $14, %ecx
   3088 ; SSSE3-NEXT:    andl $1, %ecx
   3089 ; SSSE3-NEXT:    movd %ecx, %xmm1
   3090 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
   3091 ; SSSE3-NEXT:    movl %eax, %ecx
   3092 ; SSSE3-NEXT:    shrl $13, %ecx
   3093 ; SSSE3-NEXT:    andl $1, %ecx
   3094 ; SSSE3-NEXT:    movd %ecx, %xmm0
   3095 ; SSSE3-NEXT:    movl %eax, %ecx
   3096 ; SSSE3-NEXT:    shrl $12, %ecx
   3097 ; SSSE3-NEXT:    andl $1, %ecx
   3098 ; SSSE3-NEXT:    movd %ecx, %xmm2
   3099 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3],xmm2[4],xmm0[4],xmm2[5],xmm0[5],xmm2[6],xmm0[6],xmm2[7],xmm0[7]
   3100 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3]
   3101 ; SSSE3-NEXT:    movl %eax, %ecx
   3102 ; SSSE3-NEXT:    shrl $11, %ecx
   3103 ; SSSE3-NEXT:    andl $1, %ecx
   3104 ; SSSE3-NEXT:    movd %ecx, %xmm0
   3105 ; SSSE3-NEXT:    movl %eax, %ecx
   3106 ; SSSE3-NEXT:    shrl $10, %ecx
   3107 ; SSSE3-NEXT:    andl $1, %ecx
   3108 ; SSSE3-NEXT:    movd %ecx, %xmm1
   3109 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3],xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7]
   3110 ; SSSE3-NEXT:    movl %eax, %ecx
   3111 ; SSSE3-NEXT:    shrl $9, %ecx
   3112 ; SSSE3-NEXT:    andl $1, %ecx
   3113 ; SSSE3-NEXT:    movd %ecx, %xmm3
   3114 ; SSSE3-NEXT:    movl %eax, %ecx
   3115 ; SSSE3-NEXT:    shrl $8, %ecx
   3116 ; SSSE3-NEXT:    andl $1, %ecx
   3117 ; SSSE3-NEXT:    movd %ecx, %xmm0
   3118 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = 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]
   3119 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3]
   3120 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   3121 ; SSSE3-NEXT:    movl %eax, %ecx
   3122 ; SSSE3-NEXT:    shrl $7, %ecx
   3123 ; SSSE3-NEXT:    andl $1, %ecx
   3124 ; SSSE3-NEXT:    movd %ecx, %xmm1
   3125 ; SSSE3-NEXT:    movl %eax, %ecx
   3126 ; SSSE3-NEXT:    shrl $6, %ecx
   3127 ; SSSE3-NEXT:    andl $1, %ecx
   3128 ; SSSE3-NEXT:    movd %ecx, %xmm2
   3129 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
   3130 ; SSSE3-NEXT:    movl %eax, %ecx
   3131 ; SSSE3-NEXT:    shrl $5, %ecx
   3132 ; SSSE3-NEXT:    andl $1, %ecx
   3133 ; SSSE3-NEXT:    movd %ecx, %xmm1
   3134 ; SSSE3-NEXT:    movl %eax, %ecx
   3135 ; SSSE3-NEXT:    shrl $4, %ecx
   3136 ; SSSE3-NEXT:    andl $1, %ecx
   3137 ; SSSE3-NEXT:    movd %ecx, %xmm3
   3138 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
   3139 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3]
   3140 ; SSSE3-NEXT:    movl %eax, %ecx
   3141 ; SSSE3-NEXT:    shrl $3, %ecx
   3142 ; SSSE3-NEXT:    andl $1, %ecx
   3143 ; SSSE3-NEXT:    movd %ecx, %xmm1
   3144 ; SSSE3-NEXT:    movl %eax, %ecx
   3145 ; SSSE3-NEXT:    shrl $2, %ecx
   3146 ; SSSE3-NEXT:    andl $1, %ecx
   3147 ; SSSE3-NEXT:    movd %ecx, %xmm2
   3148 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3],xmm2[4],xmm1[4],xmm2[5],xmm1[5],xmm2[6],xmm1[6],xmm2[7],xmm1[7]
   3149 ; SSSE3-NEXT:    movl %eax, %ecx
   3150 ; SSSE3-NEXT:    andl $1, %ecx
   3151 ; SSSE3-NEXT:    movd %ecx, %xmm1
   3152 ; SSSE3-NEXT:    shrl %eax
   3153 ; SSSE3-NEXT:    andl $1, %eax
   3154 ; SSSE3-NEXT:    movd %eax, %xmm4
   3155 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3],xmm1[4],xmm4[4],xmm1[5],xmm4[5],xmm1[6],xmm4[6],xmm1[7],xmm4[7]
   3156 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3]
   3157 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1]
   3158 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]
   3159 ; SSSE3-NEXT:    movdqa %xmm1, %xmm0
   3160 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   3161 ; SSSE3-NEXT:    psllw $15, %xmm0
   3162 ; SSSE3-NEXT:    psraw $15, %xmm0
   3163 ; SSSE3-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8],xmm0[8],xmm1[9],xmm0[9],xmm1[10],xmm0[10],xmm1[11],xmm0[11],xmm1[12],xmm0[12],xmm1[13],xmm0[13],xmm1[14],xmm0[14],xmm1[15],xmm0[15]
   3164 ; SSSE3-NEXT:    psllw $15, %xmm1
   3165 ; SSSE3-NEXT:    psraw $15, %xmm1
   3166 ; SSSE3-NEXT:    retq
   3167 ;
   3168 ; SSE41-LABEL: load_sext_16i1_to_16i16:
   3169 ; SSE41:       # %bb.0: # %entry
   3170 ; SSE41-NEXT:    movzwl (%rdi), %eax
   3171 ; SSE41-NEXT:    movl %eax, %ecx
   3172 ; SSE41-NEXT:    shrl %ecx
   3173 ; SSE41-NEXT:    andl $1, %ecx
   3174 ; SSE41-NEXT:    movl %eax, %edx
   3175 ; SSE41-NEXT:    andl $1, %edx
   3176 ; SSE41-NEXT:    movd %edx, %xmm1
   3177 ; SSE41-NEXT:    pinsrb $1, %ecx, %xmm1
   3178 ; SSE41-NEXT:    movl %eax, %ecx
   3179 ; SSE41-NEXT:    shrl $2, %ecx
   3180 ; SSE41-NEXT:    andl $1, %ecx
   3181 ; SSE41-NEXT:    pinsrb $2, %ecx, %xmm1
   3182 ; SSE41-NEXT:    movl %eax, %ecx
   3183 ; SSE41-NEXT:    shrl $3, %ecx
   3184 ; SSE41-NEXT:    andl $1, %ecx
   3185 ; SSE41-NEXT:    pinsrb $3, %ecx, %xmm1
   3186 ; SSE41-NEXT:    movl %eax, %ecx
   3187 ; SSE41-NEXT:    shrl $4, %ecx
   3188 ; SSE41-NEXT:    andl $1, %ecx
   3189 ; SSE41-NEXT:    pinsrb $4, %ecx, %xmm1
   3190 ; SSE41-NEXT:    movl %eax, %ecx
   3191 ; SSE41-NEXT:    shrl $5, %ecx
   3192 ; SSE41-NEXT:    andl $1, %ecx
   3193 ; SSE41-NEXT:    pinsrb $5, %ecx, %xmm1
   3194 ; SSE41-NEXT:    movl %eax, %ecx
   3195 ; SSE41-NEXT:    shrl $6, %ecx
   3196 ; SSE41-NEXT:    andl $1, %ecx
   3197 ; SSE41-NEXT:    pinsrb $6, %ecx, %xmm1
   3198 ; SSE41-NEXT:    movl %eax, %ecx
   3199 ; SSE41-NEXT:    shrl $7, %ecx
   3200 ; SSE41-NEXT:    andl $1, %ecx
   3201 ; SSE41-NEXT:    pinsrb $7, %ecx, %xmm1
   3202 ; SSE41-NEXT:    movl %eax, %ecx
   3203 ; SSE41-NEXT:    shrl $8, %ecx
   3204 ; SSE41-NEXT:    andl $1, %ecx
   3205 ; SSE41-NEXT:    pinsrb $8, %ecx, %xmm1
   3206 ; SSE41-NEXT:    movl %eax, %ecx
   3207 ; SSE41-NEXT:    shrl $9, %ecx
   3208 ; SSE41-NEXT:    andl $1, %ecx
   3209 ; SSE41-NEXT:    pinsrb $9, %ecx, %xmm1
   3210 ; SSE41-NEXT:    movl %eax, %ecx
   3211 ; SSE41-NEXT:    shrl $10, %ecx
   3212 ; SSE41-NEXT:    andl $1, %ecx
   3213 ; SSE41-NEXT:    pinsrb $10, %ecx, %xmm1
   3214 ; SSE41-NEXT:    movl %eax, %ecx
   3215 ; SSE41-NEXT:    shrl $11, %ecx
   3216 ; SSE41-NEXT:    andl $1, %ecx
   3217 ; SSE41-NEXT:    pinsrb $11, %ecx, %xmm1
   3218 ; SSE41-NEXT:    movl %eax, %ecx
   3219 ; SSE41-NEXT:    shrl $12, %ecx
   3220 ; SSE41-NEXT:    andl $1, %ecx
   3221 ; SSE41-NEXT:    pinsrb $12, %ecx, %xmm1
   3222 ; SSE41-NEXT:    movl %eax, %ecx
   3223 ; SSE41-NEXT:    shrl $13, %ecx
   3224 ; SSE41-NEXT:    andl $1, %ecx
   3225 ; SSE41-NEXT:    pinsrb $13, %ecx, %xmm1
   3226 ; SSE41-NEXT:    movl %eax, %ecx
   3227 ; SSE41-NEXT:    shrl $14, %ecx
   3228 ; SSE41-NEXT:    andl $1, %ecx
   3229 ; SSE41-NEXT:    pinsrb $14, %ecx, %xmm1
   3230 ; SSE41-NEXT:    shrl $15, %eax
   3231 ; SSE41-NEXT:    pinsrb $15, %eax, %xmm1
   3232 ; SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero
   3233 ; SSE41-NEXT:    psllw $15, %xmm0
   3234 ; SSE41-NEXT:    psraw $15, %xmm0
   3235 ; SSE41-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
   3236 ; SSE41-NEXT:    psllw $15, %xmm1
   3237 ; SSE41-NEXT:    psraw $15, %xmm1
   3238 ; SSE41-NEXT:    retq
   3239 ;
   3240 ; AVX1-LABEL: load_sext_16i1_to_16i16:
   3241 ; AVX1:       # %bb.0: # %entry
   3242 ; AVX1-NEXT:    pushq %rbp
   3243 ; AVX1-NEXT:    .cfi_def_cfa_offset 16
   3244 ; AVX1-NEXT:    pushq %r15
   3245 ; AVX1-NEXT:    .cfi_def_cfa_offset 24
   3246 ; AVX1-NEXT:    pushq %r14
   3247 ; AVX1-NEXT:    .cfi_def_cfa_offset 32
   3248 ; AVX1-NEXT:    pushq %r13
   3249 ; AVX1-NEXT:    .cfi_def_cfa_offset 40
   3250 ; AVX1-NEXT:    pushq %r12
   3251 ; AVX1-NEXT:    .cfi_def_cfa_offset 48
   3252 ; AVX1-NEXT:    pushq %rbx
   3253 ; AVX1-NEXT:    .cfi_def_cfa_offset 56
   3254 ; AVX1-NEXT:    .cfi_offset %rbx, -56
   3255 ; AVX1-NEXT:    .cfi_offset %r12, -48
   3256 ; AVX1-NEXT:    .cfi_offset %r13, -40
   3257 ; AVX1-NEXT:    .cfi_offset %r14, -32
   3258 ; AVX1-NEXT:    .cfi_offset %r15, -24
   3259 ; AVX1-NEXT:    .cfi_offset %rbp, -16
   3260 ; AVX1-NEXT:    movswq (%rdi), %rax
   3261 ; AVX1-NEXT:    movq %rax, %rcx
   3262 ; AVX1-NEXT:    shlq $55, %rcx
   3263 ; AVX1-NEXT:    sarq $63, %rcx
   3264 ; AVX1-NEXT:    vmovd %ecx, %xmm0
   3265 ; AVX1-NEXT:    movq %rax, %r8
   3266 ; AVX1-NEXT:    movq %rax, %r10
   3267 ; AVX1-NEXT:    movq %rax, %r11
   3268 ; AVX1-NEXT:    movq %rax, %r14
   3269 ; AVX1-NEXT:    movq %rax, %r15
   3270 ; AVX1-NEXT:    movq %rax, %r9
   3271 ; AVX1-NEXT:    movq %rax, %r12
   3272 ; AVX1-NEXT:    movq %rax, %r13
   3273 ; AVX1-NEXT:    movq %rax, %rbx
   3274 ; AVX1-NEXT:    movq %rax, %rdi
   3275 ; AVX1-NEXT:    movq %rax, %rcx
   3276 ; AVX1-NEXT:    movq %rax, %rdx
   3277 ; AVX1-NEXT:    movq %rax, %rsi
   3278 ; AVX1-NEXT:    movsbq %al, %rbp
   3279 ; AVX1-NEXT:    shlq $54, %rax
   3280 ; AVX1-NEXT:    sarq $63, %rax
   3281 ; AVX1-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0
   3282 ; AVX1-NEXT:    shlq $53, %r8
   3283 ; AVX1-NEXT:    sarq $63, %r8
   3284 ; AVX1-NEXT:    vpinsrw $2, %r8d, %xmm0, %xmm0
   3285 ; AVX1-NEXT:    shlq $52, %r10
   3286 ; AVX1-NEXT:    sarq $63, %r10
   3287 ; AVX1-NEXT:    vpinsrw $3, %r10d, %xmm0, %xmm0
   3288 ; AVX1-NEXT:    shlq $51, %r11
   3289 ; AVX1-NEXT:    sarq $63, %r11
   3290 ; AVX1-NEXT:    vpinsrw $4, %r11d, %xmm0, %xmm0
   3291 ; AVX1-NEXT:    shlq $50, %r14
   3292 ; AVX1-NEXT:    sarq $63, %r14
   3293 ; AVX1-NEXT:    vpinsrw $5, %r14d, %xmm0, %xmm0
   3294 ; AVX1-NEXT:    shlq $49, %r15
   3295 ; AVX1-NEXT:    sarq $63, %r15
   3296 ; AVX1-NEXT:    vpinsrw $6, %r15d, %xmm0, %xmm0
   3297 ; AVX1-NEXT:    shrq $15, %r9
   3298 ; AVX1-NEXT:    vpinsrw $7, %r9d, %xmm0, %xmm0
   3299 ; AVX1-NEXT:    shlq $63, %r13
   3300 ; AVX1-NEXT:    sarq $63, %r13
   3301 ; AVX1-NEXT:    vmovd %r13d, %xmm1
   3302 ; AVX1-NEXT:    shlq $62, %r12
   3303 ; AVX1-NEXT:    sarq $63, %r12
   3304 ; AVX1-NEXT:    vpinsrw $1, %r12d, %xmm1, %xmm1
   3305 ; AVX1-NEXT:    shlq $61, %rbx
   3306 ; AVX1-NEXT:    sarq $63, %rbx
   3307 ; AVX1-NEXT:    vpinsrw $2, %ebx, %xmm1, %xmm1
   3308 ; AVX1-NEXT:    shlq $60, %rdi
   3309 ; AVX1-NEXT:    sarq $63, %rdi
   3310 ; AVX1-NEXT:    vpinsrw $3, %edi, %xmm1, %xmm1
   3311 ; AVX1-NEXT:    shlq $59, %rcx
   3312 ; AVX1-NEXT:    sarq $63, %rcx
   3313 ; AVX1-NEXT:    vpinsrw $4, %ecx, %xmm1, %xmm1
   3314 ; AVX1-NEXT:    shlq $58, %rdx
   3315 ; AVX1-NEXT:    sarq $63, %rdx
   3316 ; AVX1-NEXT:    vpinsrw $5, %edx, %xmm1, %xmm1
   3317 ; AVX1-NEXT:    shlq $57, %rsi
   3318 ; AVX1-NEXT:    sarq $63, %rsi
   3319 ; AVX1-NEXT:    vpinsrw $6, %esi, %xmm1, %xmm1
   3320 ; AVX1-NEXT:    shrq $7, %rbp
   3321 ; AVX1-NEXT:    vpinsrw $7, %ebp, %xmm1, %xmm1
   3322 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   3323 ; AVX1-NEXT:    popq %rbx
   3324 ; AVX1-NEXT:    .cfi_def_cfa_offset 48
   3325 ; AVX1-NEXT:    popq %r12
   3326 ; AVX1-NEXT:    .cfi_def_cfa_offset 40
   3327 ; AVX1-NEXT:    popq %r13
   3328 ; AVX1-NEXT:    .cfi_def_cfa_offset 32
   3329 ; AVX1-NEXT:    popq %r14
   3330 ; AVX1-NEXT:    .cfi_def_cfa_offset 24
   3331 ; AVX1-NEXT:    popq %r15
   3332 ; AVX1-NEXT:    .cfi_def_cfa_offset 16
   3333 ; AVX1-NEXT:    popq %rbp
   3334 ; AVX1-NEXT:    .cfi_def_cfa_offset 8
   3335 ; AVX1-NEXT:    retq
   3336 ;
   3337 ; AVX2-LABEL: load_sext_16i1_to_16i16:
   3338 ; AVX2:       # %bb.0: # %entry
   3339 ; AVX2-NEXT:    pushq %rbp
   3340 ; AVX2-NEXT:    .cfi_def_cfa_offset 16
   3341 ; AVX2-NEXT:    pushq %r15
   3342 ; AVX2-NEXT:    .cfi_def_cfa_offset 24
   3343 ; AVX2-NEXT:    pushq %r14
   3344 ; AVX2-NEXT:    .cfi_def_cfa_offset 32
   3345 ; AVX2-NEXT:    pushq %r13
   3346 ; AVX2-NEXT:    .cfi_def_cfa_offset 40
   3347 ; AVX2-NEXT:    pushq %r12
   3348 ; AVX2-NEXT:    .cfi_def_cfa_offset 48
   3349 ; AVX2-NEXT:    pushq %rbx
   3350 ; AVX2-NEXT:    .cfi_def_cfa_offset 56
   3351 ; AVX2-NEXT:    .cfi_offset %rbx, -56
   3352 ; AVX2-NEXT:    .cfi_offset %r12, -48
   3353 ; AVX2-NEXT:    .cfi_offset %r13, -40
   3354 ; AVX2-NEXT:    .cfi_offset %r14, -32
   3355 ; AVX2-NEXT:    .cfi_offset %r15, -24
   3356 ; AVX2-NEXT:    .cfi_offset %rbp, -16
   3357 ; AVX2-NEXT:    movswq (%rdi), %rax
   3358 ; AVX2-NEXT:    movq %rax, %rcx
   3359 ; AVX2-NEXT:    shlq $55, %rcx
   3360 ; AVX2-NEXT:    sarq $63, %rcx
   3361 ; AVX2-NEXT:    vmovd %ecx, %xmm0
   3362 ; AVX2-NEXT:    movq %rax, %r8
   3363 ; AVX2-NEXT:    movq %rax, %r10
   3364 ; AVX2-NEXT:    movq %rax, %r11
   3365 ; AVX2-NEXT:    movq %rax, %r14
   3366 ; AVX2-NEXT:    movq %rax, %r15
   3367 ; AVX2-NEXT:    movq %rax, %r9
   3368 ; AVX2-NEXT:    movq %rax, %r12
   3369 ; AVX2-NEXT:    movq %rax, %r13
   3370 ; AVX2-NEXT:    movq %rax, %rbx
   3371 ; AVX2-NEXT:    movq %rax, %rdi
   3372 ; AVX2-NEXT:    movq %rax, %rcx
   3373 ; AVX2-NEXT:    movq %rax, %rdx
   3374 ; AVX2-NEXT:    movq %rax, %rsi
   3375 ; AVX2-NEXT:    movsbq %al, %rbp
   3376 ; AVX2-NEXT:    shlq $54, %rax
   3377 ; AVX2-NEXT:    sarq $63, %rax
   3378 ; AVX2-NEXT:    vpinsrw $1, %eax, %xmm0, %xmm0
   3379 ; AVX2-NEXT:    shlq $53, %r8
   3380 ; AVX2-NEXT:    sarq $63, %r8
   3381 ; AVX2-NEXT:    vpinsrw $2, %r8d, %xmm0, %xmm0
   3382 ; AVX2-NEXT:    shlq $52, %r10
   3383 ; AVX2-NEXT:    sarq $63, %r10
   3384 ; AVX2-NEXT:    vpinsrw $3, %r10d, %xmm0, %xmm0
   3385 ; AVX2-NEXT:    shlq $51, %r11
   3386 ; AVX2-NEXT:    sarq $63, %r11
   3387 ; AVX2-NEXT:    vpinsrw $4, %r11d, %xmm0, %xmm0
   3388 ; AVX2-NEXT:    shlq $50, %r14
   3389 ; AVX2-NEXT:    sarq $63, %r14
   3390 ; AVX2-NEXT:    vpinsrw $5, %r14d, %xmm0, %xmm0
   3391 ; AVX2-NEXT:    shlq $49, %r15
   3392 ; AVX2-NEXT:    sarq $63, %r15
   3393 ; AVX2-NEXT:    vpinsrw $6, %r15d, %xmm0, %xmm0
   3394 ; AVX2-NEXT:    shrq $15, %r9
   3395 ; AVX2-NEXT:    vpinsrw $7, %r9d, %xmm0, %xmm0
   3396 ; AVX2-NEXT:    shlq $63, %r13
   3397 ; AVX2-NEXT:    sarq $63, %r13
   3398 ; AVX2-NEXT:    vmovd %r13d, %xmm1
   3399 ; AVX2-NEXT:    shlq $62, %r12
   3400 ; AVX2-NEXT:    sarq $63, %r12
   3401 ; AVX2-NEXT:    vpinsrw $1, %r12d, %xmm1, %xmm1
   3402 ; AVX2-NEXT:    shlq $61, %rbx
   3403 ; AVX2-NEXT:    sarq $63, %rbx
   3404 ; AVX2-NEXT:    vpinsrw $2, %ebx, %xmm1, %xmm1
   3405 ; AVX2-NEXT:    shlq $60, %rdi
   3406 ; AVX2-NEXT:    sarq $63, %rdi
   3407 ; AVX2-NEXT:    vpinsrw $3, %edi, %xmm1, %xmm1
   3408 ; AVX2-NEXT:    shlq $59, %rcx
   3409 ; AVX2-NEXT:    sarq $63, %rcx
   3410 ; AVX2-NEXT:    vpinsrw $4, %ecx, %xmm1, %xmm1
   3411 ; AVX2-NEXT:    shlq $58, %rdx
   3412 ; AVX2-NEXT:    sarq $63, %rdx
   3413 ; AVX2-NEXT:    vpinsrw $5, %edx, %xmm1, %xmm1
   3414 ; AVX2-NEXT:    shlq $57, %rsi
   3415 ; AVX2-NEXT:    sarq $63, %rsi
   3416 ; AVX2-NEXT:    vpinsrw $6, %esi, %xmm1, %xmm1
   3417 ; AVX2-NEXT:    shrq $7, %rbp
   3418 ; AVX2-NEXT:    vpinsrw $7, %ebp, %xmm1, %xmm1
   3419 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
   3420 ; AVX2-NEXT:    popq %rbx
   3421 ; AVX2-NEXT:    .cfi_def_cfa_offset 48
   3422 ; AVX2-NEXT:    popq %r12
   3423 ; AVX2-NEXT:    .cfi_def_cfa_offset 40
   3424 ; AVX2-NEXT:    popq %r13
   3425 ; AVX2-NEXT:    .cfi_def_cfa_offset 32
   3426 ; AVX2-NEXT:    popq %r14
   3427 ; AVX2-NEXT:    .cfi_def_cfa_offset 24
   3428 ; AVX2-NEXT:    popq %r15
   3429 ; AVX2-NEXT:    .cfi_def_cfa_offset 16
   3430 ; AVX2-NEXT:    popq %rbp
   3431 ; AVX2-NEXT:    .cfi_def_cfa_offset 8
   3432 ; AVX2-NEXT:    retq
   3433 ;
   3434 ; AVX512F-LABEL: load_sext_16i1_to_16i16:
   3435 ; AVX512F:       # %bb.0: # %entry
   3436 ; AVX512F-NEXT:    kmovw (%rdi), %k1
   3437 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
   3438 ; AVX512F-NEXT:    vpmovdw %zmm0, %ymm0
   3439 ; AVX512F-NEXT:    retq
   3440 ;
   3441 ; AVX512BW-LABEL: load_sext_16i1_to_16i16:
   3442 ; AVX512BW:       # %bb.0: # %entry
   3443 ; AVX512BW-NEXT:    kmovw (%rdi), %k0
   3444 ; AVX512BW-NEXT:    vpmovm2w %k0, %zmm0
   3445 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
   3446 ; AVX512BW-NEXT:    retq
   3447 ;
   3448 ; X32-SSE41-LABEL: load_sext_16i1_to_16i16:
   3449 ; X32-SSE41:       # %bb.0: # %entry
   3450 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   3451 ; X32-SSE41-NEXT:    movzwl (%eax), %eax
   3452 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3453 ; X32-SSE41-NEXT:    shrl %ecx
   3454 ; X32-SSE41-NEXT:    andl $1, %ecx
   3455 ; X32-SSE41-NEXT:    movl %eax, %edx
   3456 ; X32-SSE41-NEXT:    andl $1, %edx
   3457 ; X32-SSE41-NEXT:    movd %edx, %xmm1
   3458 ; X32-SSE41-NEXT:    pinsrb $1, %ecx, %xmm1
   3459 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3460 ; X32-SSE41-NEXT:    shrl $2, %ecx
   3461 ; X32-SSE41-NEXT:    andl $1, %ecx
   3462 ; X32-SSE41-NEXT:    pinsrb $2, %ecx, %xmm1
   3463 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3464 ; X32-SSE41-NEXT:    shrl $3, %ecx
   3465 ; X32-SSE41-NEXT:    andl $1, %ecx
   3466 ; X32-SSE41-NEXT:    pinsrb $3, %ecx, %xmm1
   3467 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3468 ; X32-SSE41-NEXT:    shrl $4, %ecx
   3469 ; X32-SSE41-NEXT:    andl $1, %ecx
   3470 ; X32-SSE41-NEXT:    pinsrb $4, %ecx, %xmm1
   3471 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3472 ; X32-SSE41-NEXT:    shrl $5, %ecx
   3473 ; X32-SSE41-NEXT:    andl $1, %ecx
   3474 ; X32-SSE41-NEXT:    pinsrb $5, %ecx, %xmm1
   3475 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3476 ; X32-SSE41-NEXT:    shrl $6, %ecx
   3477 ; X32-SSE41-NEXT:    andl $1, %ecx
   3478 ; X32-SSE41-NEXT:    pinsrb $6, %ecx, %xmm1
   3479 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3480 ; X32-SSE41-NEXT:    shrl $7, %ecx
   3481 ; X32-SSE41-NEXT:    andl $1, %ecx
   3482 ; X32-SSE41-NEXT:    pinsrb $7, %ecx, %xmm1
   3483 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3484 ; X32-SSE41-NEXT:    shrl $8, %ecx
   3485 ; X32-SSE41-NEXT:    andl $1, %ecx
   3486 ; X32-SSE41-NEXT:    pinsrb $8, %ecx, %xmm1
   3487 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3488 ; X32-SSE41-NEXT:    shrl $9, %ecx
   3489 ; X32-SSE41-NEXT:    andl $1, %ecx
   3490 ; X32-SSE41-NEXT:    pinsrb $9, %ecx, %xmm1
   3491 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3492 ; X32-SSE41-NEXT:    shrl $10, %ecx
   3493 ; X32-SSE41-NEXT:    andl $1, %ecx
   3494 ; X32-SSE41-NEXT:    pinsrb $10, %ecx, %xmm1
   3495 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3496 ; X32-SSE41-NEXT:    shrl $11, %ecx
   3497 ; X32-SSE41-NEXT:    andl $1, %ecx
   3498 ; X32-SSE41-NEXT:    pinsrb $11, %ecx, %xmm1
   3499 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3500 ; X32-SSE41-NEXT:    shrl $12, %ecx
   3501 ; X32-SSE41-NEXT:    andl $1, %ecx
   3502 ; X32-SSE41-NEXT:    pinsrb $12, %ecx, %xmm1
   3503 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3504 ; X32-SSE41-NEXT:    shrl $13, %ecx
   3505 ; X32-SSE41-NEXT:    andl $1, %ecx
   3506 ; X32-SSE41-NEXT:    pinsrb $13, %ecx, %xmm1
   3507 ; X32-SSE41-NEXT:    movl %eax, %ecx
   3508 ; X32-SSE41-NEXT:    shrl $14, %ecx
   3509 ; X32-SSE41-NEXT:    andl $1, %ecx
   3510 ; X32-SSE41-NEXT:    pinsrb $14, %ecx, %xmm1
   3511 ; X32-SSE41-NEXT:    shrl $15, %eax
   3512 ; X32-SSE41-NEXT:    pinsrb $15, %eax, %xmm1
   3513 ; X32-SSE41-NEXT:    pmovzxbw {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero,xmm1[4],zero,xmm1[5],zero,xmm1[6],zero,xmm1[7],zero
   3514 ; X32-SSE41-NEXT:    psllw $15, %xmm0
   3515 ; X32-SSE41-NEXT:    psraw $15, %xmm0
   3516 ; X32-SSE41-NEXT:    punpckhbw {{.*#+}} xmm1 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]
   3517 ; X32-SSE41-NEXT:    psllw $15, %xmm1
   3518 ; X32-SSE41-NEXT:    psraw $15, %xmm1
   3519 ; X32-SSE41-NEXT:    retl
   3520 entry:
   3521  %X = load <16 x i1>, <16 x i1>* %ptr
   3522  %Y = sext <16 x i1> %X to <16 x i16>
   3523  ret <16 x i16> %Y
   3524 }
   3525 
   3526 define <32 x i8> @load_sext_32i1_to_32i8(<32 x i1> *%ptr) nounwind readnone {
   3527 ; SSE2-LABEL: load_sext_32i1_to_32i8:
   3528 ; SSE2:       # %bb.0: # %entry
   3529 ; SSE2-NEXT:    pushq %rbp
   3530 ; SSE2-NEXT:    pushq %r15
   3531 ; SSE2-NEXT:    pushq %r14
   3532 ; SSE2-NEXT:    pushq %r13
   3533 ; SSE2-NEXT:    pushq %r12
   3534 ; SSE2-NEXT:    pushq %rbx
   3535 ; SSE2-NEXT:    movswq (%rdi), %rax
   3536 ; SSE2-NEXT:    movq %rax, %r10
   3537 ; SSE2-NEXT:    movq %rax, %r8
   3538 ; SSE2-NEXT:    movq %rax, %r9
   3539 ; SSE2-NEXT:    movq %rax, %r11
   3540 ; SSE2-NEXT:    movq %rax, %r14
   3541 ; SSE2-NEXT:    movq %rax, %r15
   3542 ; SSE2-NEXT:    movq %rax, %r12
   3543 ; SSE2-NEXT:    movq %rax, %r13
   3544 ; SSE2-NEXT:    movq %rax, %rdx
   3545 ; SSE2-NEXT:    movq %rax, %rsi
   3546 ; SSE2-NEXT:    movq %rax, %rcx
   3547 ; SSE2-NEXT:    movq %rax, %rbp
   3548 ; SSE2-NEXT:    movq %rax, %rbx
   3549 ; SSE2-NEXT:    shrq $15, %rbx
   3550 ; SSE2-NEXT:    movd %ebx, %xmm0
   3551 ; SSE2-NEXT:    movq %rax, %rbx
   3552 ; SSE2-NEXT:    shlq $49, %r10
   3553 ; SSE2-NEXT:    sarq $63, %r10
   3554 ; SSE2-NEXT:    movd %r10d, %xmm15
   3555 ; SSE2-NEXT:    movq %rax, %r10
   3556 ; SSE2-NEXT:    movsbq %al, %rax
   3557 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm15 = xmm15[0],xmm0[0],xmm15[1],xmm0[1],xmm15[2],xmm0[2],xmm15[3],xmm0[3],xmm15[4],xmm0[4],xmm15[5],xmm0[5],xmm15[6],xmm0[6],xmm15[7],xmm0[7]
   3558 ; SSE2-NEXT:    shlq $50, %r8
   3559 ; SSE2-NEXT:    sarq $63, %r8
   3560 ; SSE2-NEXT:    movd %r8d, %xmm8
   3561 ; SSE2-NEXT:    shlq $51, %r9
   3562 ; SSE2-NEXT:    sarq $63, %r9
   3563 ; SSE2-NEXT:    movd %r9d, %xmm3
   3564 ; SSE2-NEXT:    shlq $52, %r11
   3565 ; SSE2-NEXT:    sarq $63, %r11
   3566 ; SSE2-NEXT:    movd %r11d, %xmm9
   3567 ; SSE2-NEXT:    shlq $53, %r14
   3568 ; SSE2-NEXT:    sarq $63, %r14
   3569 ; SSE2-NEXT:    movd %r14d, %xmm6
   3570 ; SSE2-NEXT:    shlq $54, %r15
   3571 ; SSE2-NEXT:    sarq $63, %r15
   3572 ; SSE2-NEXT:    movd %r15d, %xmm10
   3573 ; SSE2-NEXT:    shlq $55, %r12
   3574 ; SSE2-NEXT:    sarq $63, %r12
   3575 ; SSE2-NEXT:    movd %r12d, %xmm2
   3576 ; SSE2-NEXT:    shlq $60, %r13
   3577 ; SSE2-NEXT:    sarq $63, %r13
   3578 ; SSE2-NEXT:    movd %r13d, %xmm11
   3579 ; SSE2-NEXT:    shlq $61, %rdx
   3580 ; SSE2-NEXT:    sarq $63, %rdx
   3581 ; SSE2-NEXT:    movd %edx, %xmm5
   3582 ; SSE2-NEXT:    shlq $62, %rsi
   3583 ; SSE2-NEXT:    sarq $63, %rsi
   3584 ; SSE2-NEXT:    movd %esi, %xmm12
   3585 ; SSE2-NEXT:    shlq $63, %rcx
   3586 ; SSE2-NEXT:    sarq $63, %rcx
   3587 ; SSE2-NEXT:    movd %ecx, %xmm0
   3588 ; SSE2-NEXT:    shlq $58, %rbp
   3589 ; SSE2-NEXT:    sarq $63, %rbp
   3590 ; SSE2-NEXT:    movd %ebp, %xmm13
   3591 ; SSE2-NEXT:    shlq $59, %rbx
   3592 ; SSE2-NEXT:    sarq $63, %rbx
   3593 ; SSE2-NEXT:    movd %ebx, %xmm7
   3594 ; SSE2-NEXT:    shlq $57, %r10
   3595 ; SSE2-NEXT:    sarq $63, %r10
   3596 ; SSE2-NEXT:    movd %r10d, %xmm4
   3597 ; SSE2-NEXT:    shrq $7, %rax
   3598 ; SSE2-NEXT:    movd %eax, %xmm14
   3599 ; SSE2-NEXT:    movswq 2(%rdi), %rsi
   3600 ; SSE2-NEXT:    movq %rsi, %r8
   3601 ; SSE2-NEXT:    movq %rsi, %r9
   3602 ; SSE2-NEXT:    movq %rsi, %r10
   3603 ; SSE2-NEXT:    movq %rsi, %r11
   3604 ; SSE2-NEXT:    movq %rsi, %r14
   3605 ; SSE2-NEXT:    movq %rsi, %r15
   3606 ; SSE2-NEXT:    movq %rsi, %r12
   3607 ; SSE2-NEXT:    movq %rsi, %r13
   3608 ; SSE2-NEXT:    movq %rsi, %rbx
   3609 ; SSE2-NEXT:    movq %rsi, %rax
   3610 ; SSE2-NEXT:    movq %rsi, %rcx
   3611 ; SSE2-NEXT:    movq %rsi, %rdx
   3612 ; SSE2-NEXT:    movq %rsi, %rdi
   3613 ; SSE2-NEXT:    movq %rsi, %rbp
   3614 ; SSE2-NEXT:    shrq $15, %rbp
   3615 ; SSE2-NEXT:    movd %ebp, %xmm1
   3616 ; SSE2-NEXT:    movq %rsi, %rbp
   3617 ; SSE2-NEXT:    movsbq %sil, %rsi
   3618 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm8[0],xmm3[1],xmm8[1],xmm3[2],xmm8[2],xmm3[3],xmm8[3],xmm3[4],xmm8[4],xmm3[5],xmm8[5],xmm3[6],xmm8[6],xmm3[7],xmm8[7]
   3619 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm15[0],xmm3[1],xmm15[1],xmm3[2],xmm15[2],xmm3[3],xmm15[3]
   3620 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm9[0],xmm6[1],xmm9[1],xmm6[2],xmm9[2],xmm6[3],xmm9[3],xmm6[4],xmm9[4],xmm6[5],xmm9[5],xmm6[6],xmm9[6],xmm6[7],xmm9[7]
   3621 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm10[0],xmm2[1],xmm10[1],xmm2[2],xmm10[2],xmm2[3],xmm10[3],xmm2[4],xmm10[4],xmm2[5],xmm10[5],xmm2[6],xmm10[6],xmm2[7],xmm10[7]
   3622 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1],xmm2[2],xmm6[2],xmm2[3],xmm6[3]
   3623 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
   3624 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm11[0],xmm5[1],xmm11[1],xmm5[2],xmm11[2],xmm5[3],xmm11[3],xmm5[4],xmm11[4],xmm5[5],xmm11[5],xmm5[6],xmm11[6],xmm5[7],xmm11[7]
   3625 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm12[0],xmm0[1],xmm12[1],xmm0[2],xmm12[2],xmm0[3],xmm12[3],xmm0[4],xmm12[4],xmm0[5],xmm12[5],xmm0[6],xmm12[6],xmm0[7],xmm12[7]
   3626 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3]
   3627 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm13[0],xmm7[1],xmm13[1],xmm7[2],xmm13[2],xmm7[3],xmm13[3],xmm7[4],xmm13[4],xmm7[5],xmm13[5],xmm7[6],xmm13[6],xmm7[7],xmm13[7]
   3628 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm14[0],xmm4[1],xmm14[1],xmm4[2],xmm14[2],xmm4[3],xmm14[3],xmm4[4],xmm14[4],xmm4[5],xmm14[5],xmm4[6],xmm14[6],xmm4[7],xmm14[7]
   3629 ; SSE2-NEXT:    shlq $49, %r8
   3630 ; SSE2-NEXT:    sarq $63, %r8
   3631 ; SSE2-NEXT:    movd %r8d, %xmm3
   3632 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm7 = xmm7[0],xmm4[0],xmm7[1],xmm4[1],xmm7[2],xmm4[2],xmm7[3],xmm4[3]
   3633 ; SSE2-NEXT:    shlq $50, %r9
   3634 ; SSE2-NEXT:    sarq $63, %r9
   3635 ; SSE2-NEXT:    movd %r9d, %xmm4
   3636 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1]
   3637 ; SSE2-NEXT:    shlq $51, %r10
   3638 ; SSE2-NEXT:    sarq $63, %r10
   3639 ; SSE2-NEXT:    movd %r10d, %xmm5
   3640 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
   3641 ; SSE2-NEXT:    shlq $52, %r11
   3642 ; SSE2-NEXT:    sarq $63, %r11
   3643 ; SSE2-NEXT:    movd %r11d, %xmm2
   3644 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
   3645 ; SSE2-NEXT:    shlq $53, %r14
   3646 ; SSE2-NEXT:    sarq $63, %r14
   3647 ; SSE2-NEXT:    movd %r14d, %xmm1
   3648 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1],xmm5[2],xmm4[2],xmm5[3],xmm4[3],xmm5[4],xmm4[4],xmm5[5],xmm4[5],xmm5[6],xmm4[6],xmm5[7],xmm4[7]
   3649 ; SSE2-NEXT:    shlq $54, %r15
   3650 ; SSE2-NEXT:    sarq $63, %r15
   3651 ; SSE2-NEXT:    movd %r15d, %xmm4
   3652 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1],xmm5[2],xmm3[2],xmm5[3],xmm3[3]
   3653 ; SSE2-NEXT:    shlq $55, %r12
   3654 ; SSE2-NEXT:    sarq $63, %r12
   3655 ; SSE2-NEXT:    movd %r12d, %xmm3
   3656 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
   3657 ; SSE2-NEXT:    shlq $60, %r13
   3658 ; SSE2-NEXT:    sarq $63, %r13
   3659 ; SSE2-NEXT:    movd %r13d, %xmm2
   3660 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1],xmm3[2],xmm4[2],xmm3[3],xmm4[3],xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]
   3661 ; SSE2-NEXT:    shlq $61, %rbx
   3662 ; SSE2-NEXT:    sarq $63, %rbx
   3663 ; SSE2-NEXT:    movd %ebx, %xmm4
   3664 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
   3665 ; SSE2-NEXT:    shlq $62, %rax
   3666 ; SSE2-NEXT:    sarq $63, %rax
   3667 ; SSE2-NEXT:    movd %eax, %xmm6
   3668 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm5[0],xmm3[1],xmm5[1]
   3669 ; SSE2-NEXT:    shlq $63, %rcx
   3670 ; SSE2-NEXT:    sarq $63, %rcx
   3671 ; SSE2-NEXT:    movd %ecx, %xmm1
   3672 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3],xmm4[4],xmm2[4],xmm4[5],xmm2[5],xmm4[6],xmm2[6],xmm4[7],xmm2[7]
   3673 ; SSE2-NEXT:    shlq $58, %rdx
   3674 ; SSE2-NEXT:    sarq $63, %rdx
   3675 ; SSE2-NEXT:    movd %edx, %xmm2
   3676 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm6[0],xmm1[1],xmm6[1],xmm1[2],xmm6[2],xmm1[3],xmm6[3],xmm1[4],xmm6[4],xmm1[5],xmm6[5],xmm1[6],xmm6[6],xmm1[7],xmm6[7]
   3677 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3]
   3678 ; SSE2-NEXT:    shlq $59, %rdi
   3679 ; SSE2-NEXT:    sarq $63, %rdi
   3680 ; SSE2-NEXT:    movd %edi, %xmm4
   3681 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3],xmm4[4],xmm2[4],xmm4[5],xmm2[5],xmm4[6],xmm2[6],xmm4[7],xmm2[7]
   3682 ; SSE2-NEXT:    shlq $57, %rbp
   3683 ; SSE2-NEXT:    sarq $63, %rbp
   3684 ; SSE2-NEXT:    movd %ebp, %xmm2
   3685 ; SSE2-NEXT:    shrq $7, %rsi
   3686 ; SSE2-NEXT:    movd %esi, %xmm5
   3687 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1],xmm2[2],xmm5[2],xmm2[3],xmm5[3],xmm2[4],xmm5[4],xmm2[5],xmm5[5],xmm2[6],xmm5[6],xmm2[7],xmm5[7]
   3688 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3]
   3689 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1]
   3690 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
   3691 ; SSE2-NEXT:    popq %rbx
   3692 ; SSE2-NEXT:    popq %r12
   3693 ; SSE2-NEXT:    popq %r13
   3694 ; SSE2-NEXT:    popq %r14
   3695 ; SSE2-NEXT:    popq %r15
   3696 ; SSE2-NEXT:    popq %rbp
   3697 ; SSE2-NEXT:    retq
   3698 ;
   3699 ; SSSE3-LABEL: load_sext_32i1_to_32i8:
   3700 ; SSSE3:       # %bb.0: # %entry
   3701 ; SSSE3-NEXT:    pushq %rbp
   3702 ; SSSE3-NEXT:    pushq %r15
   3703 ; SSSE3-NEXT:    pushq %r14
   3704 ; SSSE3-NEXT:    pushq %r13
   3705 ; SSSE3-NEXT:    pushq %r12
   3706 ; SSSE3-NEXT:    pushq %rbx
   3707 ; SSSE3-NEXT:    movswq (%rdi), %rax
   3708 ; SSSE3-NEXT:    movq %rax, %r10
   3709 ; SSSE3-NEXT:    movq %rax, %r8
   3710 ; SSSE3-NEXT:    movq %rax, %r9
   3711 ; SSSE3-NEXT:    movq %rax, %r11
   3712 ; SSSE3-NEXT:    movq %rax, %r14
   3713 ; SSSE3-NEXT:    movq %rax, %r15
   3714 ; SSSE3-NEXT:    movq %rax, %r12
   3715 ; SSSE3-NEXT:    movq %rax, %r13
   3716 ; SSSE3-NEXT:    movq %rax, %rdx
   3717 ; SSSE3-NEXT:    movq %rax, %rsi
   3718 ; SSSE3-NEXT:    movq %rax, %rcx
   3719 ; SSSE3-NEXT:    movq %rax, %rbp
   3720 ; SSSE3-NEXT:    movq %rax, %rbx
   3721 ; SSSE3-NEXT:    shrq $15, %rbx
   3722 ; SSSE3-NEXT:    movd %ebx, %xmm0
   3723 ; SSSE3-NEXT:    movq %rax, %rbx
   3724 ; SSSE3-NEXT:    shlq $49, %r10
   3725 ; SSSE3-NEXT:    sarq $63, %r10
   3726 ; SSSE3-NEXT:    movd %r10d, %xmm15
   3727 ; SSSE3-NEXT:    movq %rax, %r10
   3728 ; SSSE3-NEXT:    movsbq %al, %rax
   3729 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm15 = xmm15[0],xmm0[0],xmm15[1],xmm0[1],xmm15[2],xmm0[2],xmm15[3],xmm0[3],xmm15[4],xmm0[4],xmm15[5],xmm0[5],xmm15[6],xmm0[6],xmm15[7],xmm0[7]
   3730 ; SSSE3-NEXT:    shlq $50, %r8
   3731 ; SSSE3-NEXT:    sarq $63, %r8
   3732 ; SSSE3-NEXT:    movd %r8d, %xmm8
   3733 ; SSSE3-NEXT:    shlq $51, %r9
   3734 ; SSSE3-NEXT:    sarq $63, %r9
   3735 ; SSSE3-NEXT:    movd %r9d, %xmm3
   3736 ; SSSE3-NEXT:    shlq $52, %r11
   3737 ; SSSE3-NEXT:    sarq $63, %r11
   3738 ; SSSE3-NEXT:    movd %r11d, %xmm9
   3739 ; SSSE3-NEXT:    shlq $53, %r14
   3740 ; SSSE3-NEXT:    sarq $63, %r14
   3741 ; SSSE3-NEXT:    movd %r14d, %xmm6
   3742 ; SSSE3-NEXT:    shlq $54, %r15
   3743 ; SSSE3-NEXT:    sarq $63, %r15
   3744 ; SSSE3-NEXT:    movd %r15d, %xmm10
   3745 ; SSSE3-NEXT:    shlq $55, %r12
   3746 ; SSSE3-NEXT:    sarq $63, %r12
   3747 ; SSSE3-NEXT:    movd %r12d, %xmm2
   3748 ; SSSE3-NEXT:    shlq $60, %r13
   3749 ; SSSE3-NEXT:    sarq $63, %r13
   3750 ; SSSE3-NEXT:    movd %r13d, %xmm11
   3751 ; SSSE3-NEXT:    shlq $61, %rdx
   3752 ; SSSE3-NEXT:    sarq $63, %rdx
   3753 ; SSSE3-NEXT:    movd %edx, %xmm5
   3754 ; SSSE3-NEXT:    shlq $62, %rsi
   3755 ; SSSE3-NEXT:    sarq $63, %rsi
   3756 ; SSSE3-NEXT:    movd %esi, %xmm12
   3757 ; SSSE3-NEXT:    shlq $63, %rcx
   3758 ; SSSE3-NEXT:    sarq $63, %rcx
   3759 ; SSSE3-NEXT:    movd %ecx, %xmm0
   3760 ; SSSE3-NEXT:    shlq $58, %rbp
   3761 ; SSSE3-NEXT:    sarq $63, %rbp
   3762 ; SSSE3-NEXT:    movd %ebp, %xmm13
   3763 ; SSSE3-NEXT:    shlq $59, %rbx
   3764 ; SSSE3-NEXT:    sarq $63, %rbx
   3765 ; SSSE3-NEXT:    movd %ebx, %xmm7
   3766 ; SSSE3-NEXT:    shlq $57, %r10
   3767 ; SSSE3-NEXT:    sarq $63, %r10
   3768 ; SSSE3-NEXT:    movd %r10d, %xmm4
   3769 ; SSSE3-NEXT:    shrq $7, %rax
   3770 ; SSSE3-NEXT:    movd %eax, %xmm14
   3771 ; SSSE3-NEXT:    movswq 2(%rdi), %rsi
   3772 ; SSSE3-NEXT:    movq %rsi, %r8
   3773 ; SSSE3-NEXT:    movq %rsi, %r9
   3774 ; SSSE3-NEXT:    movq %rsi, %r10
   3775 ; SSSE3-NEXT:    movq %rsi, %r11
   3776 ; SSSE3-NEXT:    movq %rsi, %r14
   3777 ; SSSE3-NEXT:    movq %rsi, %r15
   3778 ; SSSE3-NEXT:    movq %rsi, %r12
   3779 ; SSSE3-NEXT:    movq %rsi, %r13
   3780 ; SSSE3-NEXT:    movq %rsi, %rbx
   3781 ; SSSE3-NEXT:    movq %rsi, %rax
   3782 ; SSSE3-NEXT:    movq %rsi, %rcx
   3783 ; SSSE3-NEXT:    movq %rsi, %rdx
   3784 ; SSSE3-NEXT:    movq %rsi, %rdi
   3785 ; SSSE3-NEXT:    movq %rsi, %rbp
   3786 ; SSSE3-NEXT:    shrq $15, %rbp
   3787 ; SSSE3-NEXT:    movd %ebp, %xmm1
   3788 ; SSSE3-NEXT:    movq %rsi, %rbp
   3789 ; SSSE3-NEXT:    movsbq %sil, %rsi
   3790 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm8[0],xmm3[1],xmm8[1],xmm3[2],xmm8[2],xmm3[3],xmm8[3],xmm3[4],xmm8[4],xmm3[5],xmm8[5],xmm3[6],xmm8[6],xmm3[7],xmm8[7]
   3791 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm15[0],xmm3[1],xmm15[1],xmm3[2],xmm15[2],xmm3[3],xmm15[3]
   3792 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm9[0],xmm6[1],xmm9[1],xmm6[2],xmm9[2],xmm6[3],xmm9[3],xmm6[4],xmm9[4],xmm6[5],xmm9[5],xmm6[6],xmm9[6],xmm6[7],xmm9[7]
   3793 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm10[0],xmm2[1],xmm10[1],xmm2[2],xmm10[2],xmm2[3],xmm10[3],xmm2[4],xmm10[4],xmm2[5],xmm10[5],xmm2[6],xmm10[6],xmm2[7],xmm10[7]
   3794 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm6[0],xmm2[1],xmm6[1],xmm2[2],xmm6[2],xmm2[3],xmm6[3]
   3795 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1]
   3796 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm11[0],xmm5[1],xmm11[1],xmm5[2],xmm11[2],xmm5[3],xmm11[3],xmm5[4],xmm11[4],xmm5[5],xmm11[5],xmm5[6],xmm11[6],xmm5[7],xmm11[7]
   3797 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm12[0],xmm0[1],xmm12[1],xmm0[2],xmm12[2],xmm0[3],xmm12[3],xmm0[4],xmm12[4],xmm0[5],xmm12[5],xmm0[6],xmm12[6],xmm0[7],xmm12[7]
   3798 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm5[0],xmm0[1],xmm5[1],xmm0[2],xmm5[2],xmm0[3],xmm5[3]
   3799 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm13[0],xmm7[1],xmm13[1],xmm7[2],xmm13[2],xmm7[3],xmm13[3],xmm7[4],xmm13[4],xmm7[5],xmm13[5],xmm7[6],xmm13[6],xmm7[7],xmm13[7]
   3800 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm14[0],xmm4[1],xmm14[1],xmm4[2],xmm14[2],xmm4[3],xmm14[3],xmm4[4],xmm14[4],xmm4[5],xmm14[5],xmm4[6],xmm14[6],xmm4[7],xmm14[7]
   3801 ; SSSE3-NEXT:    shlq $49, %r8
   3802 ; SSSE3-NEXT:    sarq $63, %r8
   3803 ; SSSE3-NEXT:    movd %r8d, %xmm3
   3804 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm7 = xmm7[0],xmm4[0],xmm7[1],xmm4[1],xmm7[2],xmm4[2],xmm7[3],xmm4[3]
   3805 ; SSSE3-NEXT:    shlq $50, %r9
   3806 ; SSSE3-NEXT:    sarq $63, %r9
   3807 ; SSSE3-NEXT:    movd %r9d, %xmm4
   3808 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm7[0],xmm0[1],xmm7[1]
   3809 ; SSSE3-NEXT:    shlq $51, %r10
   3810 ; SSSE3-NEXT:    sarq $63, %r10
   3811 ; SSSE3-NEXT:    movd %r10d, %xmm5
   3812 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0]
   3813 ; SSSE3-NEXT:    shlq $52, %r11
   3814 ; SSSE3-NEXT:    sarq $63, %r11
   3815 ; SSSE3-NEXT:    movd %r11d, %xmm2
   3816 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3],xmm3[4],xmm1[4],xmm3[5],xmm1[5],xmm3[6],xmm1[6],xmm3[7],xmm1[7]
   3817 ; SSSE3-NEXT:    shlq $53, %r14
   3818 ; SSSE3-NEXT:    sarq $63, %r14
   3819 ; SSSE3-NEXT:    movd %r14d, %xmm1
   3820 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1],xmm5[2],xmm4[2],xmm5[3],xmm4[3],xmm5[4],xmm4[4],xmm5[5],xmm4[5],xmm5[6],xmm4[6],xmm5[7],xmm4[7]
   3821 ; SSSE3-NEXT:    shlq $54, %r15
   3822 ; SSSE3-NEXT:    sarq $63, %r15
   3823 ; SSSE3-NEXT:    movd %r15d, %xmm4
   3824 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1],xmm5[2],xmm3[2],xmm5[3],xmm3[3]
   3825 ; SSSE3-NEXT:    shlq $55, %r12
   3826 ; SSSE3-NEXT:    sarq $63, %r12
   3827 ; SSSE3-NEXT:    movd %r12d, %xmm3
   3828 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3],xmm1[4],xmm2[4],xmm1[5],xmm2[5],xmm1[6],xmm2[6],xmm1[7],xmm2[7]
   3829 ; SSSE3-NEXT:    shlq $60, %r13
   3830 ; SSSE3-NEXT:    sarq $63, %r13
   3831 ; SSSE3-NEXT:    movd %r13d, %xmm2
   3832 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm4[0],xmm3[1],xmm4[1],xmm3[2],xmm4[2],xmm3[3],xmm4[3],xmm3[4],xmm4[4],xmm3[5],xmm4[5],xmm3[6],xmm4[6],xmm3[7],xmm4[7]
   3833 ; SSSE3-NEXT:    shlq $61, %rbx
   3834 ; SSSE3-NEXT:    sarq $63, %rbx
   3835 ; SSSE3-NEXT:    movd %ebx, %xmm4
   3836 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3]
   3837 ; SSSE3-NEXT:    shlq $62, %rax
   3838 ; SSSE3-NEXT:    sarq $63, %rax
   3839 ; SSSE3-NEXT:    movd %eax, %xmm6
   3840 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm3 = xmm3[0],xmm5[0],xmm3[1],xmm5[1]
   3841 ; SSSE3-NEXT:    shlq $63, %rcx
   3842 ; SSSE3-NEXT:    sarq $63, %rcx
   3843 ; SSSE3-NEXT:    movd %ecx, %xmm1
   3844 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3],xmm4[4],xmm2[4],xmm4[5],xmm2[5],xmm4[6],xmm2[6],xmm4[7],xmm2[7]
   3845 ; SSSE3-NEXT:    shlq $58, %rdx
   3846 ; SSSE3-NEXT:    sarq $63, %rdx
   3847 ; SSSE3-NEXT:    movd %edx, %xmm2
   3848 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm6[0],xmm1[1],xmm6[1],xmm1[2],xmm6[2],xmm1[3],xmm6[3],xmm1[4],xmm6[4],xmm1[5],xmm6[5],xmm1[6],xmm6[6],xmm1[7],xmm6[7]
   3849 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3]
   3850 ; SSSE3-NEXT:    shlq $59, %rdi
   3851 ; SSSE3-NEXT:    sarq $63, %rdi
   3852 ; SSSE3-NEXT:    movd %edi, %xmm4
   3853 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3],xmm4[4],xmm2[4],xmm4[5],xmm2[5],xmm4[6],xmm2[6],xmm4[7],xmm2[7]
   3854 ; SSSE3-NEXT:    shlq $57, %rbp
   3855 ; SSSE3-NEXT:    sarq $63, %rbp
   3856 ; SSSE3-NEXT:    movd %ebp, %xmm2
   3857 ; SSSE3-NEXT:    shrq $7, %rsi
   3858 ; SSSE3-NEXT:    movd %esi, %xmm5
   3859 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm5[0],xmm2[1],xmm5[1],xmm2[2],xmm5[2],xmm2[3],xmm5[3],xmm2[4],xmm5[4],xmm2[5],xmm5[5],xmm2[6],xmm5[6],xmm2[7],xmm5[7]
   3860 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3]
   3861 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1]
   3862 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]
   3863 ; SSSE3-NEXT:    popq %rbx
   3864 ; SSSE3-NEXT:    popq %r12
   3865 ; SSSE3-NEXT:    popq %r13
   3866 ; SSSE3-NEXT:    popq %r14
   3867 ; SSSE3-NEXT:    popq %r15
   3868 ; SSSE3-NEXT:    popq %rbp
   3869 ; SSSE3-NEXT:    retq
   3870 ;
   3871 ; SSE41-LABEL: load_sext_32i1_to_32i8:
   3872 ; SSE41:       # %bb.0: # %entry
   3873 ; SSE41-NEXT:    movswq (%rdi), %rax
   3874 ; SSE41-NEXT:    movq %rax, %rcx
   3875 ; SSE41-NEXT:    shlq $62, %rcx
   3876 ; SSE41-NEXT:    sarq $63, %rcx
   3877 ; SSE41-NEXT:    movq %rax, %rdx
   3878 ; SSE41-NEXT:    shlq $63, %rdx
   3879 ; SSE41-NEXT:    sarq $63, %rdx
   3880 ; SSE41-NEXT:    movd %edx, %xmm0
   3881 ; SSE41-NEXT:    pinsrb $1, %ecx, %xmm0
   3882 ; SSE41-NEXT:    movq %rax, %rcx
   3883 ; SSE41-NEXT:    shlq $61, %rcx
   3884 ; SSE41-NEXT:    sarq $63, %rcx
   3885 ; SSE41-NEXT:    pinsrb $2, %ecx, %xmm0
   3886 ; SSE41-NEXT:    movq %rax, %rcx
   3887 ; SSE41-NEXT:    shlq $60, %rcx
   3888 ; SSE41-NEXT:    sarq $63, %rcx
   3889 ; SSE41-NEXT:    pinsrb $3, %ecx, %xmm0
   3890 ; SSE41-NEXT:    movq %rax, %rcx
   3891 ; SSE41-NEXT:    shlq $59, %rcx
   3892 ; SSE41-NEXT:    sarq $63, %rcx
   3893 ; SSE41-NEXT:    pinsrb $4, %ecx, %xmm0
   3894 ; SSE41-NEXT:    movq %rax, %rcx
   3895 ; SSE41-NEXT:    shlq $58, %rcx
   3896 ; SSE41-NEXT:    sarq $63, %rcx
   3897 ; SSE41-NEXT:    pinsrb $5, %ecx, %xmm0
   3898 ; SSE41-NEXT:    movq %rax, %rcx
   3899 ; SSE41-NEXT:    shlq $57, %rcx
   3900 ; SSE41-NEXT:    sarq $63, %rcx
   3901 ; SSE41-NEXT:    pinsrb $6, %ecx, %xmm0
   3902 ; SSE41-NEXT:    movsbq %al, %rcx
   3903 ; SSE41-NEXT:    shrq $7, %rcx
   3904 ; SSE41-NEXT:    pinsrb $7, %ecx, %xmm0
   3905 ; SSE41-NEXT:    movq %rax, %rcx
   3906 ; SSE41-NEXT:    shlq $55, %rcx
   3907 ; SSE41-NEXT:    sarq $63, %rcx
   3908 ; SSE41-NEXT:    pinsrb $8, %ecx, %xmm0
   3909 ; SSE41-NEXT:    movq %rax, %rcx
   3910 ; SSE41-NEXT:    shlq $54, %rcx
   3911 ; SSE41-NEXT:    sarq $63, %rcx
   3912 ; SSE41-NEXT:    pinsrb $9, %ecx, %xmm0
   3913 ; SSE41-NEXT:    movq %rax, %rcx
   3914 ; SSE41-NEXT:    shlq $53, %rcx
   3915 ; SSE41-NEXT:    sarq $63, %rcx
   3916 ; SSE41-NEXT:    pinsrb $10, %ecx, %xmm0
   3917 ; SSE41-NEXT:    movq %rax, %rcx
   3918 ; SSE41-NEXT:    shlq $52, %rcx
   3919 ; SSE41-NEXT:    sarq $63, %rcx
   3920 ; SSE41-NEXT:    pinsrb $11, %ecx, %xmm0
   3921 ; SSE41-NEXT:    movq %rax, %rcx
   3922 ; SSE41-NEXT:    shlq $51, %rcx
   3923 ; SSE41-NEXT:    sarq $63, %rcx
   3924 ; SSE41-NEXT:    pinsrb $12, %ecx, %xmm0
   3925 ; SSE41-NEXT:    movq %rax, %rcx
   3926 ; SSE41-NEXT:    shlq $50, %rcx
   3927 ; SSE41-NEXT:    sarq $63, %rcx
   3928 ; SSE41-NEXT:    pinsrb $13, %ecx, %xmm0
   3929 ; SSE41-NEXT:    movq %rax, %rcx
   3930 ; SSE41-NEXT:    shlq $49, %rcx
   3931 ; SSE41-NEXT:    sarq $63, %rcx
   3932 ; SSE41-NEXT:    pinsrb $14, %ecx, %xmm0
   3933 ; SSE41-NEXT:    shrq $15, %rax
   3934 ; SSE41-NEXT:    pinsrb $15, %eax, %xmm0
   3935 ; SSE41-NEXT:    movswq 2(%rdi), %rax
   3936 ; SSE41-NEXT:    movq %rax, %rcx
   3937 ; SSE41-NEXT:    shlq $62, %rcx
   3938 ; SSE41-NEXT:    sarq $63, %rcx
   3939 ; SSE41-NEXT:    movq %rax, %rdx
   3940 ; SSE41-NEXT:    shlq $63, %rdx
   3941 ; SSE41-NEXT:    sarq $63, %rdx
   3942 ; SSE41-NEXT:    movd %edx, %xmm1
   3943 ; SSE41-NEXT:    pinsrb $1, %ecx, %xmm1
   3944 ; SSE41-NEXT:    movq %rax, %rcx
   3945 ; SSE41-NEXT:    shlq $61, %rcx
   3946 ; SSE41-NEXT:    sarq $63, %rcx
   3947 ; SSE41-NEXT:    pinsrb $2, %ecx, %xmm1
   3948 ; SSE41-NEXT:    movq %rax, %rcx
   3949 ; SSE41-NEXT:    shlq $60, %rcx
   3950 ; SSE41-NEXT:    sarq $63, %rcx
   3951 ; SSE41-NEXT:    pinsrb $3, %ecx, %xmm1
   3952 ; SSE41-NEXT:    movq %rax, %rcx
   3953 ; SSE41-NEXT:    shlq $59, %rcx
   3954 ; SSE41-NEXT:    sarq $63, %rcx
   3955 ; SSE41-NEXT:    pinsrb $4, %ecx, %xmm1
   3956 ; SSE41-NEXT:    movq %rax, %rcx
   3957 ; SSE41-NEXT:    shlq $58, %rcx
   3958 ; SSE41-NEXT:    sarq $63, %rcx
   3959 ; SSE41-NEXT:    pinsrb $5, %ecx, %xmm1
   3960 ; SSE41-NEXT:    movq %rax, %rcx
   3961 ; SSE41-NEXT:    shlq $57, %rcx
   3962 ; SSE41-NEXT:    sarq $63, %rcx
   3963 ; SSE41-NEXT:    pinsrb $6, %ecx, %xmm1
   3964 ; SSE41-NEXT:    movsbq %al, %rcx
   3965 ; SSE41-NEXT:    shrq $7, %rcx
   3966 ; SSE41-NEXT:    pinsrb $7, %ecx, %xmm1
   3967 ; SSE41-NEXT:    movq %rax, %rcx
   3968 ; SSE41-NEXT:    shlq $55, %rcx
   3969 ; SSE41-NEXT:    sarq $63, %rcx
   3970 ; SSE41-NEXT:    pinsrb $8, %ecx, %xmm1
   3971 ; SSE41-NEXT:    movq %rax, %rcx
   3972 ; SSE41-NEXT:    shlq $54, %rcx
   3973 ; SSE41-NEXT:    sarq $63, %rcx
   3974 ; SSE41-NEXT:    pinsrb $9, %ecx, %xmm1
   3975 ; SSE41-NEXT:    movq %rax, %rcx
   3976 ; SSE41-NEXT:    shlq $53, %rcx
   3977 ; SSE41-NEXT:    sarq $63, %rcx
   3978 ; SSE41-NEXT:    pinsrb $10, %ecx, %xmm1
   3979 ; SSE41-NEXT:    movq %rax, %rcx
   3980 ; SSE41-NEXT:    shlq $52, %rcx
   3981 ; SSE41-NEXT:    sarq $63, %rcx
   3982 ; SSE41-NEXT:    pinsrb $11, %ecx, %xmm1
   3983 ; SSE41-NEXT:    movq %rax, %rcx
   3984 ; SSE41-NEXT:    shlq $51, %rcx
   3985 ; SSE41-NEXT:    sarq $63, %rcx
   3986 ; SSE41-NEXT:    pinsrb $12, %ecx, %xmm1
   3987 ; SSE41-NEXT:    movq %rax, %rcx
   3988 ; SSE41-NEXT:    shlq $50, %rcx
   3989 ; SSE41-NEXT:    sarq $63, %rcx
   3990 ; SSE41-NEXT:    pinsrb $13, %ecx, %xmm1
   3991 ; SSE41-NEXT:    movq %rax, %rcx
   3992 ; SSE41-NEXT:    shlq $49, %rcx
   3993 ; SSE41-NEXT:    sarq $63, %rcx
   3994 ; SSE41-NEXT:    pinsrb $14, %ecx, %xmm1
   3995 ; SSE41-NEXT:    shrq $15, %rax
   3996 ; SSE41-NEXT:    pinsrb $15, %eax, %xmm1
   3997 ; SSE41-NEXT:    retq
   3998 ;
   3999 ; AVX1-LABEL: load_sext_32i1_to_32i8:
   4000 ; AVX1:       # %bb.0: # %entry
   4001 ; AVX1-NEXT:    pushq %rbp
   4002 ; AVX1-NEXT:    pushq %r15
   4003 ; AVX1-NEXT:    pushq %r14
   4004 ; AVX1-NEXT:    pushq %r13
   4005 ; AVX1-NEXT:    pushq %r12
   4006 ; AVX1-NEXT:    pushq %rbx
   4007 ; AVX1-NEXT:    movslq (%rdi), %rax
   4008 ; AVX1-NEXT:    movq %rax, %rcx
   4009 ; AVX1-NEXT:    shlq $47, %rcx
   4010 ; AVX1-NEXT:    sarq $63, %rcx
   4011 ; AVX1-NEXT:    vmovd %ecx, %xmm0
   4012 ; AVX1-NEXT:    movq %rax, %r8
   4013 ; AVX1-NEXT:    movq %rax, %rdx
   4014 ; AVX1-NEXT:    movq %rax, %rcx
   4015 ; AVX1-NEXT:    movq %rax, %rdi
   4016 ; AVX1-NEXT:    movq %rax, %r13
   4017 ; AVX1-NEXT:    movq %rax, %rsi
   4018 ; AVX1-NEXT:    movq %rax, %r10
   4019 ; AVX1-NEXT:    movq %rax, %r11
   4020 ; AVX1-NEXT:    movq %rax, %r9
   4021 ; AVX1-NEXT:    movq %rax, %rbx
   4022 ; AVX1-NEXT:    movq %rax, %r14
   4023 ; AVX1-NEXT:    movq %rax, %r15
   4024 ; AVX1-NEXT:    movq %rax, %r12
   4025 ; AVX1-NEXT:    movq %rax, %rbp
   4026 ; AVX1-NEXT:    shlq $46, %rbp
   4027 ; AVX1-NEXT:    sarq $63, %rbp
   4028 ; AVX1-NEXT:    vpinsrb $1, %ebp, %xmm0, %xmm0
   4029 ; AVX1-NEXT:    movq %rax, %rbp
   4030 ; AVX1-NEXT:    shlq $45, %r8
   4031 ; AVX1-NEXT:    sarq $63, %r8
   4032 ; AVX1-NEXT:    vpinsrb $2, %r8d, %xmm0, %xmm0
   4033 ; AVX1-NEXT:    movq %rax, %r8
   4034 ; AVX1-NEXT:    shlq $44, %rdx
   4035 ; AVX1-NEXT:    sarq $63, %rdx
   4036 ; AVX1-NEXT:    vpinsrb $3, %edx, %xmm0, %xmm0
   4037 ; AVX1-NEXT:    movq %rax, %rdx
   4038 ; AVX1-NEXT:    shlq $43, %rcx
   4039 ; AVX1-NEXT:    sarq $63, %rcx
   4040 ; AVX1-NEXT:    vpinsrb $4, %ecx, %xmm0, %xmm0
   4041 ; AVX1-NEXT:    movq %rax, %rcx
   4042 ; AVX1-NEXT:    shlq $42, %rdi
   4043 ; AVX1-NEXT:    sarq $63, %rdi
   4044 ; AVX1-NEXT:    vpinsrb $5, %edi, %xmm0, %xmm0
   4045 ; AVX1-NEXT:    movq %rax, %rdi
   4046 ; AVX1-NEXT:    shlq $41, %r13
   4047 ; AVX1-NEXT:    sarq $63, %r13
   4048 ; AVX1-NEXT:    vpinsrb $6, %r13d, %xmm0, %xmm0
   4049 ; AVX1-NEXT:    movq %rax, %r13
   4050 ; AVX1-NEXT:    shlq $40, %rsi
   4051 ; AVX1-NEXT:    sarq $63, %rsi
   4052 ; AVX1-NEXT:    vpinsrb $7, %esi, %xmm0, %xmm0
   4053 ; AVX1-NEXT:    movq %rax, %rsi
   4054 ; AVX1-NEXT:    shlq $39, %r10
   4055 ; AVX1-NEXT:    sarq $63, %r10
   4056 ; AVX1-NEXT:    vpinsrb $8, %r10d, %xmm0, %xmm0
   4057 ; AVX1-NEXT:    movq %rax, %r10
   4058 ; AVX1-NEXT:    shlq $38, %r11
   4059 ; AVX1-NEXT:    sarq $63, %r11
   4060 ; AVX1-NEXT:    vpinsrb $9, %r11d, %xmm0, %xmm0
   4061 ; AVX1-NEXT:    movsbq %al, %r11
   4062 ; AVX1-NEXT:    shlq $37, %r9
   4063 ; AVX1-NEXT:    sarq $63, %r9
   4064 ; AVX1-NEXT:    vpinsrb $10, %r9d, %xmm0, %xmm0
   4065 ; AVX1-NEXT:    movq %rax, %r9
   4066 ; AVX1-NEXT:    shlq $36, %rbx
   4067 ; AVX1-NEXT:    sarq $63, %rbx
   4068 ; AVX1-NEXT:    vpinsrb $11, %ebx, %xmm0, %xmm0
   4069 ; AVX1-NEXT:    movq %rax, %rbx
   4070 ; AVX1-NEXT:    shlq $35, %r14
   4071 ; AVX1-NEXT:    sarq $63, %r14
   4072 ; AVX1-NEXT:    vpinsrb $12, %r14d, %xmm0, %xmm0
   4073 ; AVX1-NEXT:    movq %rax, %r14
   4074 ; AVX1-NEXT:    shlq $34, %r15
   4075 ; AVX1-NEXT:    sarq $63, %r15
   4076 ; AVX1-NEXT:    vpinsrb $13, %r15d, %xmm0, %xmm0
   4077 ; AVX1-NEXT:    movq %rax, %r15
   4078 ; AVX1-NEXT:    shlq $33, %r12
   4079 ; AVX1-NEXT:    sarq $63, %r12
   4080 ; AVX1-NEXT:    vpinsrb $14, %r12d, %xmm0, %xmm0
   4081 ; AVX1-NEXT:    movq %rax, %r12
   4082 ; AVX1-NEXT:    shrq $31, %rbp
   4083 ; AVX1-NEXT:    vpinsrb $15, %ebp, %xmm0, %xmm0
   4084 ; AVX1-NEXT:    movq %rax, %rbp
   4085 ; AVX1-NEXT:    shlq $63, %rdx
   4086 ; AVX1-NEXT:    sarq $63, %rdx
   4087 ; AVX1-NEXT:    vmovd %edx, %xmm1
   4088 ; AVX1-NEXT:    movq %rax, %rdx
   4089 ; AVX1-NEXT:    movswq %ax, %rax
   4090 ; AVX1-NEXT:    shlq $62, %r8
   4091 ; AVX1-NEXT:    sarq $63, %r8
   4092 ; AVX1-NEXT:    vpinsrb $1, %r8d, %xmm1, %xmm1
   4093 ; AVX1-NEXT:    shlq $61, %rcx
   4094 ; AVX1-NEXT:    sarq $63, %rcx
   4095 ; AVX1-NEXT:    vpinsrb $2, %ecx, %xmm1, %xmm1
   4096 ; AVX1-NEXT:    shlq $60, %rdi
   4097 ; AVX1-NEXT:    sarq $63, %rdi
   4098 ; AVX1-NEXT:    vpinsrb $3, %edi, %xmm1, %xmm1
   4099 ; AVX1-NEXT:    shlq $59, %r13
   4100 ; AVX1-NEXT:    sarq $63, %r13
   4101 ; AVX1-NEXT:    vpinsrb $4, %r13d, %xmm1, %xmm1
   4102 ; AVX1-NEXT:    shlq $58, %rsi
   4103 ; AVX1-NEXT:    sarq $63, %rsi
   4104 ; AVX1-NEXT:    vpinsrb $5, %esi, %xmm1, %xmm1
   4105 ; AVX1-NEXT:    shlq $57, %r10
   4106 ; AVX1-NEXT:    sarq $63, %r10
   4107 ; AVX1-NEXT:    vpinsrb $6, %r10d, %xmm1, %xmm1
   4108 ; AVX1-NEXT:    shrq $7, %r11
   4109 ; AVX1-NEXT:    vpinsrb $7, %r11d, %xmm1, %xmm1
   4110 ; AVX1-NEXT:    shlq $55, %r9
   4111 ; AVX1-NEXT:    sarq $63, %r9
   4112 ; AVX1-NEXT:    vpinsrb $8, %r9d, %xmm1, %xmm1
   4113 ; AVX1-NEXT:    shlq $54, %rbx
   4114 ; AVX1-NEXT:    sarq $63, %rbx
   4115 ; AVX1-NEXT:    vpinsrb $9, %ebx, %xmm1, %xmm1
   4116 ; AVX1-NEXT:    shlq $53, %r14
   4117 ; AVX1-NEXT:    sarq $63, %r14
   4118 ; AVX1-NEXT:    vpinsrb $10, %r14d, %xmm1, %xmm1
   4119 ; AVX1-NEXT:    shlq $52, %r15
   4120 ; AVX1-NEXT:    sarq $63, %r15
   4121 ; AVX1-NEXT:    vpinsrb $11, %r15d, %xmm1, %xmm1
   4122 ; AVX1-NEXT:    shlq $51, %r12
   4123 ; AVX1-NEXT:    sarq $63, %r12
   4124 ; AVX1-NEXT:    vpinsrb $12, %r12d, %xmm1, %xmm1
   4125 ; AVX1-NEXT:    shlq $50, %rbp
   4126 ; AVX1-NEXT:    sarq $63, %rbp
   4127 ; AVX1-NEXT:    vpinsrb $13, %ebp, %xmm1, %xmm1
   4128 ; AVX1-NEXT:    shlq $49, %rdx
   4129 ; AVX1-NEXT:    sarq $63, %rdx
   4130 ; AVX1-NEXT:    vpinsrb $14, %edx, %xmm1, %xmm1
   4131 ; AVX1-NEXT:    shrq $15, %rax
   4132 ; AVX1-NEXT:    vpinsrb $15, %eax, %xmm1, %xmm1
   4133 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   4134 ; AVX1-NEXT:    popq %rbx
   4135 ; AVX1-NEXT:    popq %r12
   4136 ; AVX1-NEXT:    popq %r13
   4137 ; AVX1-NEXT:    popq %r14
   4138 ; AVX1-NEXT:    popq %r15
   4139 ; AVX1-NEXT:    popq %rbp
   4140 ; AVX1-NEXT:    retq
   4141 ;
   4142 ; AVX2-LABEL: load_sext_32i1_to_32i8:
   4143 ; AVX2:       # %bb.0: # %entry
   4144 ; AVX2-NEXT:    pushq %rbp
   4145 ; AVX2-NEXT:    pushq %r15
   4146 ; AVX2-NEXT:    pushq %r14
   4147 ; AVX2-NEXT:    pushq %r13
   4148 ; AVX2-NEXT:    pushq %r12
   4149 ; AVX2-NEXT:    pushq %rbx
   4150 ; AVX2-NEXT:    movslq (%rdi), %rax
   4151 ; AVX2-NEXT:    movq %rax, %rcx
   4152 ; AVX2-NEXT:    shlq $47, %rcx
   4153 ; AVX2-NEXT:    sarq $63, %rcx
   4154 ; AVX2-NEXT:    vmovd %ecx, %xmm0
   4155 ; AVX2-NEXT:    movq %rax, %r8
   4156 ; AVX2-NEXT:    movq %rax, %rdx
   4157 ; AVX2-NEXT:    movq %rax, %rcx
   4158 ; AVX2-NEXT:    movq %rax, %rdi
   4159 ; AVX2-NEXT:    movq %rax, %r13
   4160 ; AVX2-NEXT:    movq %rax, %rsi
   4161 ; AVX2-NEXT:    movq %rax, %r10
   4162 ; AVX2-NEXT:    movq %rax, %r11
   4163 ; AVX2-NEXT:    movq %rax, %r9
   4164 ; AVX2-NEXT:    movq %rax, %rbx
   4165 ; AVX2-NEXT:    movq %rax, %r14
   4166 ; AVX2-NEXT:    movq %rax, %r15
   4167 ; AVX2-NEXT:    movq %rax, %r12
   4168 ; AVX2-NEXT:    movq %rax, %rbp
   4169 ; AVX2-NEXT:    shlq $46, %rbp
   4170 ; AVX2-NEXT:    sarq $63, %rbp
   4171 ; AVX2-NEXT:    vpinsrb $1, %ebp, %xmm0, %xmm0
   4172 ; AVX2-NEXT:    movq %rax, %rbp
   4173 ; AVX2-NEXT:    shlq $45, %r8
   4174 ; AVX2-NEXT:    sarq $63, %r8
   4175 ; AVX2-NEXT:    vpinsrb $2, %r8d, %xmm0, %xmm0
   4176 ; AVX2-NEXT:    movq %rax, %r8
   4177 ; AVX2-NEXT:    shlq $44, %rdx
   4178 ; AVX2-NEXT:    sarq $63, %rdx
   4179 ; AVX2-NEXT:    vpinsrb $3, %edx, %xmm0, %xmm0
   4180 ; AVX2-NEXT:    movq %rax, %rdx
   4181 ; AVX2-NEXT:    shlq $43, %rcx
   4182 ; AVX2-NEXT:    sarq $63, %rcx
   4183 ; AVX2-NEXT:    vpinsrb $4, %ecx, %xmm0, %xmm0
   4184 ; AVX2-NEXT:    movq %rax, %rcx
   4185 ; AVX2-NEXT:    shlq $42, %rdi
   4186 ; AVX2-NEXT:    sarq $63, %rdi
   4187 ; AVX2-NEXT:    vpinsrb $5, %edi, %xmm0, %xmm0
   4188 ; AVX2-NEXT:    movq %rax, %rdi
   4189 ; AVX2-NEXT:    shlq $41, %r13
   4190 ; AVX2-NEXT:    sarq $63, %r13
   4191 ; AVX2-NEXT:    vpinsrb $6, %r13d, %xmm0, %xmm0
   4192 ; AVX2-NEXT:    movq %rax, %r13
   4193 ; AVX2-NEXT:    shlq $40, %rsi
   4194 ; AVX2-NEXT:    sarq $63, %rsi
   4195 ; AVX2-NEXT:    vpinsrb $7, %esi, %xmm0, %xmm0
   4196 ; AVX2-NEXT:    movq %rax, %rsi
   4197 ; AVX2-NEXT:    shlq $39, %r10
   4198 ; AVX2-NEXT:    sarq $63, %r10
   4199 ; AVX2-NEXT:    vpinsrb $8, %r10d, %xmm0, %xmm0
   4200 ; AVX2-NEXT:    movq %rax, %r10
   4201 ; AVX2-NEXT:    shlq $38, %r11
   4202 ; AVX2-NEXT:    sarq $63, %r11
   4203 ; AVX2-NEXT:    vpinsrb $9, %r11d, %xmm0, %xmm0
   4204 ; AVX2-NEXT:    movsbq %al, %r11
   4205 ; AVX2-NEXT:    shlq $37, %r9
   4206 ; AVX2-NEXT:    sarq $63, %r9
   4207 ; AVX2-NEXT:    vpinsrb $10, %r9d, %xmm0, %xmm0
   4208 ; AVX2-NEXT:    movq %rax, %r9
   4209 ; AVX2-NEXT:    shlq $36, %rbx
   4210 ; AVX2-NEXT:    sarq $63, %rbx
   4211 ; AVX2-NEXT:    vpinsrb $11, %ebx, %xmm0, %xmm0
   4212 ; AVX2-NEXT:    movq %rax, %rbx
   4213 ; AVX2-NEXT:    shlq $35, %r14
   4214 ; AVX2-NEXT:    sarq $63, %r14
   4215 ; AVX2-NEXT:    vpinsrb $12, %r14d, %xmm0, %xmm0
   4216 ; AVX2-NEXT:    movq %rax, %r14
   4217 ; AVX2-NEXT:    shlq $34, %r15
   4218 ; AVX2-NEXT:    sarq $63, %r15
   4219 ; AVX2-NEXT:    vpinsrb $13, %r15d, %xmm0, %xmm0
   4220 ; AVX2-NEXT:    movq %rax, %r15
   4221 ; AVX2-NEXT:    shlq $33, %r12
   4222 ; AVX2-NEXT:    sarq $63, %r12
   4223 ; AVX2-NEXT:    vpinsrb $14, %r12d, %xmm0, %xmm0
   4224 ; AVX2-NEXT:    movq %rax, %r12
   4225 ; AVX2-NEXT:    shrq $31, %rbp
   4226 ; AVX2-NEXT:    vpinsrb $15, %ebp, %xmm0, %xmm0
   4227 ; AVX2-NEXT:    movq %rax, %rbp
   4228 ; AVX2-NEXT:    shlq $63, %rdx
   4229 ; AVX2-NEXT:    sarq $63, %rdx
   4230 ; AVX2-NEXT:    vmovd %edx, %xmm1
   4231 ; AVX2-NEXT:    movq %rax, %rdx
   4232 ; AVX2-NEXT:    movswq %ax, %rax
   4233 ; AVX2-NEXT:    shlq $62, %r8
   4234 ; AVX2-NEXT:    sarq $63, %r8
   4235 ; AVX2-NEXT:    vpinsrb $1, %r8d, %xmm1, %xmm1
   4236 ; AVX2-NEXT:    shlq $61, %rcx
   4237 ; AVX2-NEXT:    sarq $63, %rcx
   4238 ; AVX2-NEXT:    vpinsrb $2, %ecx, %xmm1, %xmm1
   4239 ; AVX2-NEXT:    shlq $60, %rdi
   4240 ; AVX2-NEXT:    sarq $63, %rdi
   4241 ; AVX2-NEXT:    vpinsrb $3, %edi, %xmm1, %xmm1
   4242 ; AVX2-NEXT:    shlq $59, %r13
   4243 ; AVX2-NEXT:    sarq $63, %r13
   4244 ; AVX2-NEXT:    vpinsrb $4, %r13d, %xmm1, %xmm1
   4245 ; AVX2-NEXT:    shlq $58, %rsi
   4246 ; AVX2-NEXT:    sarq $63, %rsi
   4247 ; AVX2-NEXT:    vpinsrb $5, %esi, %xmm1, %xmm1
   4248 ; AVX2-NEXT:    shlq $57, %r10
   4249 ; AVX2-NEXT:    sarq $63, %r10
   4250 ; AVX2-NEXT:    vpinsrb $6, %r10d, %xmm1, %xmm1
   4251 ; AVX2-NEXT:    shrq $7, %r11
   4252 ; AVX2-NEXT:    vpinsrb $7, %r11d, %xmm1, %xmm1
   4253 ; AVX2-NEXT:    shlq $55, %r9
   4254 ; AVX2-NEXT:    sarq $63, %r9
   4255 ; AVX2-NEXT:    vpinsrb $8, %r9d, %xmm1, %xmm1
   4256 ; AVX2-NEXT:    shlq $54, %rbx
   4257 ; AVX2-NEXT:    sarq $63, %rbx
   4258 ; AVX2-NEXT:    vpinsrb $9, %ebx, %xmm1, %xmm1
   4259 ; AVX2-NEXT:    shlq $53, %r14
   4260 ; AVX2-NEXT:    sarq $63, %r14
   4261 ; AVX2-NEXT:    vpinsrb $10, %r14d, %xmm1, %xmm1
   4262 ; AVX2-NEXT:    shlq $52, %r15
   4263 ; AVX2-NEXT:    sarq $63, %r15
   4264 ; AVX2-NEXT:    vpinsrb $11, %r15d, %xmm1, %xmm1
   4265 ; AVX2-NEXT:    shlq $51, %r12
   4266 ; AVX2-NEXT:    sarq $63, %r12
   4267 ; AVX2-NEXT:    vpinsrb $12, %r12d, %xmm1, %xmm1
   4268 ; AVX2-NEXT:    shlq $50, %rbp
   4269 ; AVX2-NEXT:    sarq $63, %rbp
   4270 ; AVX2-NEXT:    vpinsrb $13, %ebp, %xmm1, %xmm1
   4271 ; AVX2-NEXT:    shlq $49, %rdx
   4272 ; AVX2-NEXT:    sarq $63, %rdx
   4273 ; AVX2-NEXT:    vpinsrb $14, %edx, %xmm1, %xmm1
   4274 ; AVX2-NEXT:    shrq $15, %rax
   4275 ; AVX2-NEXT:    vpinsrb $15, %eax, %xmm1, %xmm1
   4276 ; AVX2-NEXT:    vinserti128 $1, %xmm0, %ymm1, %ymm0
   4277 ; AVX2-NEXT:    popq %rbx
   4278 ; AVX2-NEXT:    popq %r12
   4279 ; AVX2-NEXT:    popq %r13
   4280 ; AVX2-NEXT:    popq %r14
   4281 ; AVX2-NEXT:    popq %r15
   4282 ; AVX2-NEXT:    popq %rbp
   4283 ; AVX2-NEXT:    retq
   4284 ;
   4285 ; AVX512F-LABEL: load_sext_32i1_to_32i8:
   4286 ; AVX512F:       # %bb.0: # %entry
   4287 ; AVX512F-NEXT:    kmovw (%rdi), %k1
   4288 ; AVX512F-NEXT:    kmovw 2(%rdi), %k2
   4289 ; AVX512F-NEXT:    vpternlogd $255, %zmm0, %zmm0, %zmm0 {%k1} {z}
   4290 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
   4291 ; AVX512F-NEXT:    vpternlogd $255, %zmm1, %zmm1, %zmm1 {%k2} {z}
   4292 ; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
   4293 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
   4294 ; AVX512F-NEXT:    retq
   4295 ;
   4296 ; AVX512BW-LABEL: load_sext_32i1_to_32i8:
   4297 ; AVX512BW:       # %bb.0: # %entry
   4298 ; AVX512BW-NEXT:    kmovd (%rdi), %k0
   4299 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
   4300 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
   4301 ; AVX512BW-NEXT:    retq
   4302 ;
   4303 ; X32-SSE41-LABEL: load_sext_32i1_to_32i8:
   4304 ; X32-SSE41:       # %bb.0: # %entry
   4305 ; X32-SSE41-NEXT:    pushl %esi
   4306 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   4307 ; X32-SSE41-NEXT:    movswl (%eax), %ecx
   4308 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4309 ; X32-SSE41-NEXT:    shll $30, %edx
   4310 ; X32-SSE41-NEXT:    sarl $31, %edx
   4311 ; X32-SSE41-NEXT:    movl %ecx, %esi
   4312 ; X32-SSE41-NEXT:    shll $31, %esi
   4313 ; X32-SSE41-NEXT:    sarl $31, %esi
   4314 ; X32-SSE41-NEXT:    movd %esi, %xmm0
   4315 ; X32-SSE41-NEXT:    pinsrb $1, %edx, %xmm0
   4316 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4317 ; X32-SSE41-NEXT:    shll $29, %edx
   4318 ; X32-SSE41-NEXT:    sarl $31, %edx
   4319 ; X32-SSE41-NEXT:    pinsrb $2, %edx, %xmm0
   4320 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4321 ; X32-SSE41-NEXT:    shll $28, %edx
   4322 ; X32-SSE41-NEXT:    sarl $31, %edx
   4323 ; X32-SSE41-NEXT:    pinsrb $3, %edx, %xmm0
   4324 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4325 ; X32-SSE41-NEXT:    shll $27, %edx
   4326 ; X32-SSE41-NEXT:    sarl $31, %edx
   4327 ; X32-SSE41-NEXT:    pinsrb $4, %edx, %xmm0
   4328 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4329 ; X32-SSE41-NEXT:    shll $26, %edx
   4330 ; X32-SSE41-NEXT:    sarl $31, %edx
   4331 ; X32-SSE41-NEXT:    pinsrb $5, %edx, %xmm0
   4332 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4333 ; X32-SSE41-NEXT:    shll $25, %edx
   4334 ; X32-SSE41-NEXT:    sarl $31, %edx
   4335 ; X32-SSE41-NEXT:    pinsrb $6, %edx, %xmm0
   4336 ; X32-SSE41-NEXT:    movsbl %cl, %edx
   4337 ; X32-SSE41-NEXT:    shrl $7, %edx
   4338 ; X32-SSE41-NEXT:    pinsrb $7, %edx, %xmm0
   4339 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4340 ; X32-SSE41-NEXT:    shll $23, %edx
   4341 ; X32-SSE41-NEXT:    sarl $31, %edx
   4342 ; X32-SSE41-NEXT:    pinsrb $8, %edx, %xmm0
   4343 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4344 ; X32-SSE41-NEXT:    shll $22, %edx
   4345 ; X32-SSE41-NEXT:    sarl $31, %edx
   4346 ; X32-SSE41-NEXT:    pinsrb $9, %edx, %xmm0
   4347 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4348 ; X32-SSE41-NEXT:    shll $21, %edx
   4349 ; X32-SSE41-NEXT:    sarl $31, %edx
   4350 ; X32-SSE41-NEXT:    pinsrb $10, %edx, %xmm0
   4351 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4352 ; X32-SSE41-NEXT:    shll $20, %edx
   4353 ; X32-SSE41-NEXT:    sarl $31, %edx
   4354 ; X32-SSE41-NEXT:    pinsrb $11, %edx, %xmm0
   4355 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4356 ; X32-SSE41-NEXT:    shll $19, %edx
   4357 ; X32-SSE41-NEXT:    sarl $31, %edx
   4358 ; X32-SSE41-NEXT:    pinsrb $12, %edx, %xmm0
   4359 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4360 ; X32-SSE41-NEXT:    shll $18, %edx
   4361 ; X32-SSE41-NEXT:    sarl $31, %edx
   4362 ; X32-SSE41-NEXT:    pinsrb $13, %edx, %xmm0
   4363 ; X32-SSE41-NEXT:    movl %ecx, %edx
   4364 ; X32-SSE41-NEXT:    shll $17, %edx
   4365 ; X32-SSE41-NEXT:    sarl $31, %edx
   4366 ; X32-SSE41-NEXT:    pinsrb $14, %edx, %xmm0
   4367 ; X32-SSE41-NEXT:    shrl $15, %ecx
   4368 ; X32-SSE41-NEXT:    pinsrb $15, %ecx, %xmm0
   4369 ; X32-SSE41-NEXT:    movswl 2(%eax), %eax
   4370 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4371 ; X32-SSE41-NEXT:    shll $30, %ecx
   4372 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4373 ; X32-SSE41-NEXT:    movl %eax, %edx
   4374 ; X32-SSE41-NEXT:    shll $31, %edx
   4375 ; X32-SSE41-NEXT:    sarl $31, %edx
   4376 ; X32-SSE41-NEXT:    movd %edx, %xmm1
   4377 ; X32-SSE41-NEXT:    pinsrb $1, %ecx, %xmm1
   4378 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4379 ; X32-SSE41-NEXT:    shll $29, %ecx
   4380 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4381 ; X32-SSE41-NEXT:    pinsrb $2, %ecx, %xmm1
   4382 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4383 ; X32-SSE41-NEXT:    shll $28, %ecx
   4384 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4385 ; X32-SSE41-NEXT:    pinsrb $3, %ecx, %xmm1
   4386 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4387 ; X32-SSE41-NEXT:    shll $27, %ecx
   4388 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4389 ; X32-SSE41-NEXT:    pinsrb $4, %ecx, %xmm1
   4390 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4391 ; X32-SSE41-NEXT:    shll $26, %ecx
   4392 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4393 ; X32-SSE41-NEXT:    pinsrb $5, %ecx, %xmm1
   4394 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4395 ; X32-SSE41-NEXT:    shll $25, %ecx
   4396 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4397 ; X32-SSE41-NEXT:    pinsrb $6, %ecx, %xmm1
   4398 ; X32-SSE41-NEXT:    movsbl %al, %ecx
   4399 ; X32-SSE41-NEXT:    shrl $7, %ecx
   4400 ; X32-SSE41-NEXT:    pinsrb $7, %ecx, %xmm1
   4401 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4402 ; X32-SSE41-NEXT:    shll $23, %ecx
   4403 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4404 ; X32-SSE41-NEXT:    pinsrb $8, %ecx, %xmm1
   4405 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4406 ; X32-SSE41-NEXT:    shll $22, %ecx
   4407 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4408 ; X32-SSE41-NEXT:    pinsrb $9, %ecx, %xmm1
   4409 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4410 ; X32-SSE41-NEXT:    shll $21, %ecx
   4411 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4412 ; X32-SSE41-NEXT:    pinsrb $10, %ecx, %xmm1
   4413 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4414 ; X32-SSE41-NEXT:    shll $20, %ecx
   4415 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4416 ; X32-SSE41-NEXT:    pinsrb $11, %ecx, %xmm1
   4417 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4418 ; X32-SSE41-NEXT:    shll $19, %ecx
   4419 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4420 ; X32-SSE41-NEXT:    pinsrb $12, %ecx, %xmm1
   4421 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4422 ; X32-SSE41-NEXT:    shll $18, %ecx
   4423 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4424 ; X32-SSE41-NEXT:    pinsrb $13, %ecx, %xmm1
   4425 ; X32-SSE41-NEXT:    movl %eax, %ecx
   4426 ; X32-SSE41-NEXT:    shll $17, %ecx
   4427 ; X32-SSE41-NEXT:    sarl $31, %ecx
   4428 ; X32-SSE41-NEXT:    pinsrb $14, %ecx, %xmm1
   4429 ; X32-SSE41-NEXT:    shrl $15, %eax
   4430 ; X32-SSE41-NEXT:    pinsrb $15, %eax, %xmm1
   4431 ; X32-SSE41-NEXT:    popl %esi
   4432 ; X32-SSE41-NEXT:    retl
   4433 entry:
   4434  %X = load <32 x i1>, <32 x i1>* %ptr
   4435  %Y = sext <32 x i1> %X to <32 x i8>
   4436  ret <32 x i8> %Y
   4437 }
   4438 
   4439 define <16 x i16> @load_sext_16i8_to_16i16(<16 x i8> *%ptr) {
   4440 ; SSE2-LABEL: load_sext_16i8_to_16i16:
   4441 ; SSE2:       # %bb.0: # %entry
   4442 ; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
   4443 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   4444 ; SSE2-NEXT:    psraw $8, %xmm0
   4445 ; SSE2-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
   4446 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   4447 ; SSE2-NEXT:    psraw $8, %xmm1
   4448 ; SSE2-NEXT:    retq
   4449 ;
   4450 ; SSSE3-LABEL: load_sext_16i8_to_16i16:
   4451 ; SSSE3:       # %bb.0: # %entry
   4452 ; SSSE3-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
   4453 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   4454 ; SSSE3-NEXT:    psraw $8, %xmm0
   4455 ; SSSE3-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
   4456 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   4457 ; SSSE3-NEXT:    psraw $8, %xmm1
   4458 ; SSSE3-NEXT:    retq
   4459 ;
   4460 ; SSE41-LABEL: load_sext_16i8_to_16i16:
   4461 ; SSE41:       # %bb.0: # %entry
   4462 ; SSE41-NEXT:    pmovsxbw (%rdi), %xmm0
   4463 ; SSE41-NEXT:    pmovsxbw 8(%rdi), %xmm1
   4464 ; SSE41-NEXT:    retq
   4465 ;
   4466 ; AVX1-LABEL: load_sext_16i8_to_16i16:
   4467 ; AVX1:       # %bb.0: # %entry
   4468 ; AVX1-NEXT:    vpmovsxbw 8(%rdi), %xmm0
   4469 ; AVX1-NEXT:    vpmovsxbw (%rdi), %xmm1
   4470 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   4471 ; AVX1-NEXT:    retq
   4472 ;
   4473 ; AVX2-LABEL: load_sext_16i8_to_16i16:
   4474 ; AVX2:       # %bb.0: # %entry
   4475 ; AVX2-NEXT:    vpmovsxbw (%rdi), %ymm0
   4476 ; AVX2-NEXT:    retq
   4477 ;
   4478 ; AVX512-LABEL: load_sext_16i8_to_16i16:
   4479 ; AVX512:       # %bb.0: # %entry
   4480 ; AVX512-NEXT:    vpmovsxbw (%rdi), %ymm0
   4481 ; AVX512-NEXT:    retq
   4482 ;
   4483 ; X32-SSE41-LABEL: load_sext_16i8_to_16i16:
   4484 ; X32-SSE41:       # %bb.0: # %entry
   4485 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   4486 ; X32-SSE41-NEXT:    pmovsxbw (%eax), %xmm0
   4487 ; X32-SSE41-NEXT:    pmovsxbw 8(%eax), %xmm1
   4488 ; X32-SSE41-NEXT:    retl
   4489 entry:
   4490  %X = load <16 x i8>, <16 x i8>* %ptr
   4491  %Y = sext <16 x i8> %X to <16 x i16>
   4492  ret <16 x i16> %Y
   4493 }
   4494 
   4495 define <2 x i64> @load_sext_2i16_to_2i64(<2 x i16> *%ptr) {
   4496 ; SSE2-LABEL: load_sext_2i16_to_2i64:
   4497 ; SSE2:       # %bb.0: # %entry
   4498 ; SSE2-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
   4499 ; SSE2-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,1,4,5,6,7]
   4500 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
   4501 ; SSE2-NEXT:    psrad $31, %xmm1
   4502 ; SSE2-NEXT:    psrad $16, %xmm0
   4503 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
   4504 ; SSE2-NEXT:    retq
   4505 ;
   4506 ; SSSE3-LABEL: load_sext_2i16_to_2i64:
   4507 ; SSSE3:       # %bb.0: # %entry
   4508 ; SSSE3-NEXT:    movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
   4509 ; SSSE3-NEXT:    pshuflw {{.*#+}} xmm0 = xmm0[0,0,2,1,4,5,6,7]
   4510 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
   4511 ; SSSE3-NEXT:    psrad $31, %xmm1
   4512 ; SSSE3-NEXT:    psrad $16, %xmm0
   4513 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
   4514 ; SSSE3-NEXT:    retq
   4515 ;
   4516 ; SSE41-LABEL: load_sext_2i16_to_2i64:
   4517 ; SSE41:       # %bb.0: # %entry
   4518 ; SSE41-NEXT:    pmovsxwq (%rdi), %xmm0
   4519 ; SSE41-NEXT:    retq
   4520 ;
   4521 ; AVX-LABEL: load_sext_2i16_to_2i64:
   4522 ; AVX:       # %bb.0: # %entry
   4523 ; AVX-NEXT:    vpmovsxwq (%rdi), %xmm0
   4524 ; AVX-NEXT:    retq
   4525 ;
   4526 ; X32-SSE41-LABEL: load_sext_2i16_to_2i64:
   4527 ; X32-SSE41:       # %bb.0: # %entry
   4528 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   4529 ; X32-SSE41-NEXT:    pmovsxwq (%eax), %xmm0
   4530 ; X32-SSE41-NEXT:    retl
   4531 entry:
   4532  %X = load <2 x i16>, <2 x i16>* %ptr
   4533  %Y = sext <2 x i16> %X to <2 x i64>
   4534  ret <2 x i64> %Y
   4535 }
   4536 
   4537 define <4 x i32> @load_sext_4i16_to_4i32(<4 x i16> *%ptr) {
   4538 ; SSE2-LABEL: load_sext_4i16_to_4i32:
   4539 ; SSE2:       # %bb.0: # %entry
   4540 ; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
   4541 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
   4542 ; SSE2-NEXT:    psrad $16, %xmm0
   4543 ; SSE2-NEXT:    retq
   4544 ;
   4545 ; SSSE3-LABEL: load_sext_4i16_to_4i32:
   4546 ; SSSE3:       # %bb.0: # %entry
   4547 ; SSSE3-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
   4548 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
   4549 ; SSSE3-NEXT:    psrad $16, %xmm0
   4550 ; SSSE3-NEXT:    retq
   4551 ;
   4552 ; SSE41-LABEL: load_sext_4i16_to_4i32:
   4553 ; SSE41:       # %bb.0: # %entry
   4554 ; SSE41-NEXT:    pmovsxwd (%rdi), %xmm0
   4555 ; SSE41-NEXT:    retq
   4556 ;
   4557 ; AVX-LABEL: load_sext_4i16_to_4i32:
   4558 ; AVX:       # %bb.0: # %entry
   4559 ; AVX-NEXT:    vpmovsxwd (%rdi), %xmm0
   4560 ; AVX-NEXT:    retq
   4561 ;
   4562 ; X32-SSE41-LABEL: load_sext_4i16_to_4i32:
   4563 ; X32-SSE41:       # %bb.0: # %entry
   4564 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   4565 ; X32-SSE41-NEXT:    pmovsxwd (%eax), %xmm0
   4566 ; X32-SSE41-NEXT:    retl
   4567 entry:
   4568  %X = load <4 x i16>, <4 x i16>* %ptr
   4569  %Y = sext <4 x i16> %X to <4 x i32>
   4570  ret <4 x i32> %Y
   4571 }
   4572 
   4573 define <4 x i64> @load_sext_4i16_to_4i64(<4 x i16> *%ptr) {
   4574 ; SSE2-LABEL: load_sext_4i16_to_4i64:
   4575 ; SSE2:       # %bb.0: # %entry
   4576 ; SSE2-NEXT:    movswq 2(%rdi), %rax
   4577 ; SSE2-NEXT:    movq %rax, %xmm1
   4578 ; SSE2-NEXT:    movswq (%rdi), %rax
   4579 ; SSE2-NEXT:    movq %rax, %xmm0
   4580 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   4581 ; SSE2-NEXT:    movswq 6(%rdi), %rax
   4582 ; SSE2-NEXT:    movq %rax, %xmm2
   4583 ; SSE2-NEXT:    movswq 4(%rdi), %rax
   4584 ; SSE2-NEXT:    movq %rax, %xmm1
   4585 ; SSE2-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
   4586 ; SSE2-NEXT:    retq
   4587 ;
   4588 ; SSSE3-LABEL: load_sext_4i16_to_4i64:
   4589 ; SSSE3:       # %bb.0: # %entry
   4590 ; SSSE3-NEXT:    movswq 2(%rdi), %rax
   4591 ; SSSE3-NEXT:    movq %rax, %xmm1
   4592 ; SSSE3-NEXT:    movswq (%rdi), %rax
   4593 ; SSSE3-NEXT:    movq %rax, %xmm0
   4594 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0]
   4595 ; SSSE3-NEXT:    movswq 6(%rdi), %rax
   4596 ; SSSE3-NEXT:    movq %rax, %xmm2
   4597 ; SSSE3-NEXT:    movswq 4(%rdi), %rax
   4598 ; SSSE3-NEXT:    movq %rax, %xmm1
   4599 ; SSSE3-NEXT:    punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0]
   4600 ; SSSE3-NEXT:    retq
   4601 ;
   4602 ; SSE41-LABEL: load_sext_4i16_to_4i64:
   4603 ; SSE41:       # %bb.0: # %entry
   4604 ; SSE41-NEXT:    pmovsxwq (%rdi), %xmm0
   4605 ; SSE41-NEXT:    pmovsxwq 4(%rdi), %xmm1
   4606 ; SSE41-NEXT:    retq
   4607 ;
   4608 ; AVX1-LABEL: load_sext_4i16_to_4i64:
   4609 ; AVX1:       # %bb.0: # %entry
   4610 ; AVX1-NEXT:    vpmovsxwd (%rdi), %xmm0
   4611 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm1
   4612 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   4613 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
   4614 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   4615 ; AVX1-NEXT:    retq
   4616 ;
   4617 ; AVX2-LABEL: load_sext_4i16_to_4i64:
   4618 ; AVX2:       # %bb.0: # %entry
   4619 ; AVX2-NEXT:    vpmovsxwq (%rdi), %ymm0
   4620 ; AVX2-NEXT:    retq
   4621 ;
   4622 ; AVX512-LABEL: load_sext_4i16_to_4i64:
   4623 ; AVX512:       # %bb.0: # %entry
   4624 ; AVX512-NEXT:    vpmovsxwq (%rdi), %ymm0
   4625 ; AVX512-NEXT:    retq
   4626 ;
   4627 ; X32-SSE41-LABEL: load_sext_4i16_to_4i64:
   4628 ; X32-SSE41:       # %bb.0: # %entry
   4629 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   4630 ; X32-SSE41-NEXT:    pmovsxwq (%eax), %xmm0
   4631 ; X32-SSE41-NEXT:    pmovsxwq 4(%eax), %xmm1
   4632 ; X32-SSE41-NEXT:    retl
   4633 entry:
   4634  %X = load <4 x i16>, <4 x i16>* %ptr
   4635  %Y = sext <4 x i16> %X to <4 x i64>
   4636  ret <4 x i64> %Y
   4637 }
   4638 
   4639 define <8 x i32> @load_sext_8i16_to_8i32(<8 x i16> *%ptr) {
   4640 ; SSE2-LABEL: load_sext_8i16_to_8i32:
   4641 ; SSE2:       # %bb.0: # %entry
   4642 ; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
   4643 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
   4644 ; SSE2-NEXT:    psrad $16, %xmm0
   4645 ; SSE2-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
   4646 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3]
   4647 ; SSE2-NEXT:    psrad $16, %xmm1
   4648 ; SSE2-NEXT:    retq
   4649 ;
   4650 ; SSSE3-LABEL: load_sext_8i16_to_8i32:
   4651 ; SSSE3:       # %bb.0: # %entry
   4652 ; SSSE3-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
   4653 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
   4654 ; SSSE3-NEXT:    psrad $16, %xmm0
   4655 ; SSSE3-NEXT:    movq {{.*#+}} xmm1 = mem[0],zero
   4656 ; SSSE3-NEXT:    punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3]
   4657 ; SSSE3-NEXT:    psrad $16, %xmm1
   4658 ; SSSE3-NEXT:    retq
   4659 ;
   4660 ; SSE41-LABEL: load_sext_8i16_to_8i32:
   4661 ; SSE41:       # %bb.0: # %entry
   4662 ; SSE41-NEXT:    pmovsxwd (%rdi), %xmm0
   4663 ; SSE41-NEXT:    pmovsxwd 8(%rdi), %xmm1
   4664 ; SSE41-NEXT:    retq
   4665 ;
   4666 ; AVX1-LABEL: load_sext_8i16_to_8i32:
   4667 ; AVX1:       # %bb.0: # %entry
   4668 ; AVX1-NEXT:    vpmovsxwd 8(%rdi), %xmm0
   4669 ; AVX1-NEXT:    vpmovsxwd (%rdi), %xmm1
   4670 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   4671 ; AVX1-NEXT:    retq
   4672 ;
   4673 ; AVX2-LABEL: load_sext_8i16_to_8i32:
   4674 ; AVX2:       # %bb.0: # %entry
   4675 ; AVX2-NEXT:    vpmovsxwd (%rdi), %ymm0
   4676 ; AVX2-NEXT:    retq
   4677 ;
   4678 ; AVX512-LABEL: load_sext_8i16_to_8i32:
   4679 ; AVX512:       # %bb.0: # %entry
   4680 ; AVX512-NEXT:    vpmovsxwd (%rdi), %ymm0
   4681 ; AVX512-NEXT:    retq
   4682 ;
   4683 ; X32-SSE41-LABEL: load_sext_8i16_to_8i32:
   4684 ; X32-SSE41:       # %bb.0: # %entry
   4685 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   4686 ; X32-SSE41-NEXT:    pmovsxwd (%eax), %xmm0
   4687 ; X32-SSE41-NEXT:    pmovsxwd 8(%eax), %xmm1
   4688 ; X32-SSE41-NEXT:    retl
   4689 entry:
   4690  %X = load <8 x i16>, <8 x i16>* %ptr
   4691  %Y = sext <8 x i16> %X to <8 x i32>
   4692  ret <8 x i32> %Y
   4693 }
   4694 
   4695 define <2 x i64> @load_sext_2i32_to_2i64(<2 x i32> *%ptr) {
   4696 ; SSE2-LABEL: load_sext_2i32_to_2i64:
   4697 ; SSE2:       # %bb.0: # %entry
   4698 ; SSE2-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
   4699 ; SSE2-NEXT:    movdqa %xmm0, %xmm1
   4700 ; SSE2-NEXT:    psrad $31, %xmm1
   4701 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
   4702 ; SSE2-NEXT:    retq
   4703 ;
   4704 ; SSSE3-LABEL: load_sext_2i32_to_2i64:
   4705 ; SSSE3:       # %bb.0: # %entry
   4706 ; SSSE3-NEXT:    movq {{.*#+}} xmm0 = mem[0],zero
   4707 ; SSSE3-NEXT:    movdqa %xmm0, %xmm1
   4708 ; SSSE3-NEXT:    psrad $31, %xmm1
   4709 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]
   4710 ; SSSE3-NEXT:    retq
   4711 ;
   4712 ; SSE41-LABEL: load_sext_2i32_to_2i64:
   4713 ; SSE41:       # %bb.0: # %entry
   4714 ; SSE41-NEXT:    pmovsxdq (%rdi), %xmm0
   4715 ; SSE41-NEXT:    retq
   4716 ;
   4717 ; AVX-LABEL: load_sext_2i32_to_2i64:
   4718 ; AVX:       # %bb.0: # %entry
   4719 ; AVX-NEXT:    vpmovsxdq (%rdi), %xmm0
   4720 ; AVX-NEXT:    retq
   4721 ;
   4722 ; X32-SSE41-LABEL: load_sext_2i32_to_2i64:
   4723 ; X32-SSE41:       # %bb.0: # %entry
   4724 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   4725 ; X32-SSE41-NEXT:    pmovsxdq (%eax), %xmm0
   4726 ; X32-SSE41-NEXT:    retl
   4727 entry:
   4728  %X = load <2 x i32>, <2 x i32>* %ptr
   4729  %Y = sext <2 x i32> %X to <2 x i64>
   4730  ret <2 x i64> %Y
   4731 }
   4732 
   4733 define <4 x i64> @load_sext_4i32_to_4i64(<4 x i32> *%ptr) {
   4734 ; SSE2-LABEL: load_sext_4i32_to_4i64:
   4735 ; SSE2:       # %bb.0: # %entry
   4736 ; SSE2-NEXT:    movdqa (%rdi), %xmm0
   4737 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   4738 ; SSE2-NEXT:    psrad $31, %xmm2
   4739 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
   4740 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   4741 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   4742 ; SSE2-NEXT:    psrad $31, %xmm2
   4743 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
   4744 ; SSE2-NEXT:    retq
   4745 ;
   4746 ; SSSE3-LABEL: load_sext_4i32_to_4i64:
   4747 ; SSSE3:       # %bb.0: # %entry
   4748 ; SSSE3-NEXT:    movdqa (%rdi), %xmm0
   4749 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
   4750 ; SSSE3-NEXT:    psrad $31, %xmm2
   4751 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
   4752 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   4753 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
   4754 ; SSSE3-NEXT:    psrad $31, %xmm2
   4755 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
   4756 ; SSSE3-NEXT:    retq
   4757 ;
   4758 ; SSE41-LABEL: load_sext_4i32_to_4i64:
   4759 ; SSE41:       # %bb.0: # %entry
   4760 ; SSE41-NEXT:    pmovsxdq (%rdi), %xmm0
   4761 ; SSE41-NEXT:    pmovsxdq 8(%rdi), %xmm1
   4762 ; SSE41-NEXT:    retq
   4763 ;
   4764 ; AVX1-LABEL: load_sext_4i32_to_4i64:
   4765 ; AVX1:       # %bb.0: # %entry
   4766 ; AVX1-NEXT:    vpmovsxdq 8(%rdi), %xmm0
   4767 ; AVX1-NEXT:    vpmovsxdq (%rdi), %xmm1
   4768 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   4769 ; AVX1-NEXT:    retq
   4770 ;
   4771 ; AVX2-LABEL: load_sext_4i32_to_4i64:
   4772 ; AVX2:       # %bb.0: # %entry
   4773 ; AVX2-NEXT:    vpmovsxdq (%rdi), %ymm0
   4774 ; AVX2-NEXT:    retq
   4775 ;
   4776 ; AVX512-LABEL: load_sext_4i32_to_4i64:
   4777 ; AVX512:       # %bb.0: # %entry
   4778 ; AVX512-NEXT:    vpmovsxdq (%rdi), %ymm0
   4779 ; AVX512-NEXT:    retq
   4780 ;
   4781 ; X32-SSE41-LABEL: load_sext_4i32_to_4i64:
   4782 ; X32-SSE41:       # %bb.0: # %entry
   4783 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   4784 ; X32-SSE41-NEXT:    pmovsxdq (%eax), %xmm0
   4785 ; X32-SSE41-NEXT:    pmovsxdq 8(%eax), %xmm1
   4786 ; X32-SSE41-NEXT:    retl
   4787 entry:
   4788  %X = load <4 x i32>, <4 x i32>* %ptr
   4789  %Y = sext <4 x i32> %X to <4 x i64>
   4790  ret <4 x i64> %Y
   4791 }
   4792 
   4793 define i32 @sext_2i8_to_i32(<16 x i8> %A) nounwind uwtable readnone ssp {
   4794 ; SSE2-LABEL: sext_2i8_to_i32:
   4795 ; SSE2:       # %bb.0: # %entry
   4796 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   4797 ; SSE2-NEXT:    psraw $8, %xmm0
   4798 ; SSE2-NEXT:    movd %xmm0, %eax
   4799 ; SSE2-NEXT:    retq
   4800 ;
   4801 ; SSSE3-LABEL: sext_2i8_to_i32:
   4802 ; SSSE3:       # %bb.0: # %entry
   4803 ; SSSE3-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   4804 ; SSSE3-NEXT:    psraw $8, %xmm0
   4805 ; SSSE3-NEXT:    movd %xmm0, %eax
   4806 ; SSSE3-NEXT:    retq
   4807 ;
   4808 ; SSE41-LABEL: sext_2i8_to_i32:
   4809 ; SSE41:       # %bb.0: # %entry
   4810 ; SSE41-NEXT:    pmovsxbw %xmm0, %xmm0
   4811 ; SSE41-NEXT:    movd %xmm0, %eax
   4812 ; SSE41-NEXT:    retq
   4813 ;
   4814 ; AVX-LABEL: sext_2i8_to_i32:
   4815 ; AVX:       # %bb.0: # %entry
   4816 ; AVX-NEXT:    vpmovsxbw %xmm0, %xmm0
   4817 ; AVX-NEXT:    vmovd %xmm0, %eax
   4818 ; AVX-NEXT:    retq
   4819 ;
   4820 ; X32-SSE41-LABEL: sext_2i8_to_i32:
   4821 ; X32-SSE41:       # %bb.0: # %entry
   4822 ; X32-SSE41-NEXT:    pushl %eax
   4823 ; X32-SSE41-NEXT:    .cfi_def_cfa_offset 8
   4824 ; X32-SSE41-NEXT:    pmovsxbw %xmm0, %xmm0
   4825 ; X32-SSE41-NEXT:    movd %xmm0, %eax
   4826 ; X32-SSE41-NEXT:    popl %ecx
   4827 ; X32-SSE41-NEXT:    .cfi_def_cfa_offset 4
   4828 ; X32-SSE41-NEXT:    retl
   4829 entry:
   4830   %Shuf = shufflevector <16 x i8> %A, <16 x i8> undef, <2 x i32> <i32 0, i32 1>
   4831   %Ex = sext <2 x i8> %Shuf to <2 x i16>
   4832   %Bc = bitcast <2 x i16> %Ex to i32
   4833   ret i32 %Bc
   4834 }
   4835 
   4836 define <4 x i64> @sext_4i1_to_4i64(<4 x i1> %mask) {
   4837 ; SSE2-LABEL: sext_4i1_to_4i64:
   4838 ; SSE2:       # %bb.0:
   4839 ; SSE2-NEXT:    pslld $31, %xmm0
   4840 ; SSE2-NEXT:    psrad $31, %xmm0
   4841 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   4842 ; SSE2-NEXT:    psrad $31, %xmm2
   4843 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
   4844 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   4845 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   4846 ; SSE2-NEXT:    psrad $31, %xmm2
   4847 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
   4848 ; SSE2-NEXT:    retq
   4849 ;
   4850 ; SSSE3-LABEL: sext_4i1_to_4i64:
   4851 ; SSSE3:       # %bb.0:
   4852 ; SSSE3-NEXT:    pslld $31, %xmm0
   4853 ; SSSE3-NEXT:    psrad $31, %xmm0
   4854 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
   4855 ; SSSE3-NEXT:    psrad $31, %xmm2
   4856 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
   4857 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   4858 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
   4859 ; SSSE3-NEXT:    psrad $31, %xmm2
   4860 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
   4861 ; SSSE3-NEXT:    retq
   4862 ;
   4863 ; SSE41-LABEL: sext_4i1_to_4i64:
   4864 ; SSE41:       # %bb.0:
   4865 ; SSE41-NEXT:    pslld $31, %xmm0
   4866 ; SSE41-NEXT:    psrad $31, %xmm0
   4867 ; SSE41-NEXT:    pmovsxdq %xmm0, %xmm2
   4868 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   4869 ; SSE41-NEXT:    pmovsxdq %xmm0, %xmm1
   4870 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
   4871 ; SSE41-NEXT:    retq
   4872 ;
   4873 ; AVX1-LABEL: sext_4i1_to_4i64:
   4874 ; AVX1:       # %bb.0:
   4875 ; AVX1-NEXT:    vpslld $31, %xmm0, %xmm0
   4876 ; AVX1-NEXT:    vpsrad $31, %xmm0, %xmm0
   4877 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm1
   4878 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   4879 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
   4880 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   4881 ; AVX1-NEXT:    retq
   4882 ;
   4883 ; AVX2-LABEL: sext_4i1_to_4i64:
   4884 ; AVX2:       # %bb.0:
   4885 ; AVX2-NEXT:    vpslld $31, %xmm0, %xmm0
   4886 ; AVX2-NEXT:    vpsrad $31, %xmm0, %xmm0
   4887 ; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm0
   4888 ; AVX2-NEXT:    retq
   4889 ;
   4890 ; AVX512-LABEL: sext_4i1_to_4i64:
   4891 ; AVX512:       # %bb.0:
   4892 ; AVX512-NEXT:    vpslld $31, %xmm0, %xmm0
   4893 ; AVX512-NEXT:    vpsrad $31, %xmm0, %xmm0
   4894 ; AVX512-NEXT:    vpmovsxdq %xmm0, %ymm0
   4895 ; AVX512-NEXT:    retq
   4896 ;
   4897 ; X32-SSE41-LABEL: sext_4i1_to_4i64:
   4898 ; X32-SSE41:       # %bb.0:
   4899 ; X32-SSE41-NEXT:    pslld $31, %xmm0
   4900 ; X32-SSE41-NEXT:    psrad $31, %xmm0
   4901 ; X32-SSE41-NEXT:    pmovsxdq %xmm0, %xmm2
   4902 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   4903 ; X32-SSE41-NEXT:    pmovsxdq %xmm0, %xmm1
   4904 ; X32-SSE41-NEXT:    movdqa %xmm2, %xmm0
   4905 ; X32-SSE41-NEXT:    retl
   4906   %extmask = sext <4 x i1> %mask to <4 x i64>
   4907   ret <4 x i64> %extmask
   4908 }
   4909 
   4910 define <4 x i64> @sext_4i8_to_4i64(<4 x i8> %mask) {
   4911 ; SSE2-LABEL: sext_4i8_to_4i64:
   4912 ; SSE2:       # %bb.0:
   4913 ; SSE2-NEXT:    pslld $24, %xmm0
   4914 ; SSE2-NEXT:    psrad $24, %xmm0
   4915 ; SSE2-NEXT:    movdqa %xmm0, %xmm2
   4916 ; SSE2-NEXT:    psrad $31, %xmm2
   4917 ; SSE2-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
   4918 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   4919 ; SSE2-NEXT:    movdqa %xmm1, %xmm2
   4920 ; SSE2-NEXT:    psrad $31, %xmm2
   4921 ; SSE2-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
   4922 ; SSE2-NEXT:    retq
   4923 ;
   4924 ; SSSE3-LABEL: sext_4i8_to_4i64:
   4925 ; SSSE3:       # %bb.0:
   4926 ; SSSE3-NEXT:    pslld $24, %xmm0
   4927 ; SSSE3-NEXT:    psrad $24, %xmm0
   4928 ; SSSE3-NEXT:    movdqa %xmm0, %xmm2
   4929 ; SSSE3-NEXT:    psrad $31, %xmm2
   4930 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1]
   4931 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1]
   4932 ; SSSE3-NEXT:    movdqa %xmm1, %xmm2
   4933 ; SSSE3-NEXT:    psrad $31, %xmm2
   4934 ; SSSE3-NEXT:    punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1]
   4935 ; SSSE3-NEXT:    retq
   4936 ;
   4937 ; SSE41-LABEL: sext_4i8_to_4i64:
   4938 ; SSE41:       # %bb.0:
   4939 ; SSE41-NEXT:    pslld $24, %xmm0
   4940 ; SSE41-NEXT:    psrad $24, %xmm0
   4941 ; SSE41-NEXT:    pmovsxdq %xmm0, %xmm2
   4942 ; SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   4943 ; SSE41-NEXT:    pmovsxdq %xmm0, %xmm1
   4944 ; SSE41-NEXT:    movdqa %xmm2, %xmm0
   4945 ; SSE41-NEXT:    retq
   4946 ;
   4947 ; AVX1-LABEL: sext_4i8_to_4i64:
   4948 ; AVX1:       # %bb.0:
   4949 ; AVX1-NEXT:    vpslld $24, %xmm0, %xmm0
   4950 ; AVX1-NEXT:    vpsrad $24, %xmm0, %xmm0
   4951 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm1
   4952 ; AVX1-NEXT:    vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   4953 ; AVX1-NEXT:    vpmovsxdq %xmm0, %xmm0
   4954 ; AVX1-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0
   4955 ; AVX1-NEXT:    retq
   4956 ;
   4957 ; AVX2-LABEL: sext_4i8_to_4i64:
   4958 ; AVX2:       # %bb.0:
   4959 ; AVX2-NEXT:    vpslld $24, %xmm0, %xmm0
   4960 ; AVX2-NEXT:    vpsrad $24, %xmm0, %xmm0
   4961 ; AVX2-NEXT:    vpmovsxdq %xmm0, %ymm0
   4962 ; AVX2-NEXT:    retq
   4963 ;
   4964 ; AVX512-LABEL: sext_4i8_to_4i64:
   4965 ; AVX512:       # %bb.0:
   4966 ; AVX512-NEXT:    vpslld $24, %xmm0, %xmm0
   4967 ; AVX512-NEXT:    vpsrad $24, %xmm0, %xmm0
   4968 ; AVX512-NEXT:    vpmovsxdq %xmm0, %ymm0
   4969 ; AVX512-NEXT:    retq
   4970 ;
   4971 ; X32-SSE41-LABEL: sext_4i8_to_4i64:
   4972 ; X32-SSE41:       # %bb.0:
   4973 ; X32-SSE41-NEXT:    pslld $24, %xmm0
   4974 ; X32-SSE41-NEXT:    psrad $24, %xmm0
   4975 ; X32-SSE41-NEXT:    pmovsxdq %xmm0, %xmm2
   4976 ; X32-SSE41-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1]
   4977 ; X32-SSE41-NEXT:    pmovsxdq %xmm0, %xmm1
   4978 ; X32-SSE41-NEXT:    movdqa %xmm2, %xmm0
   4979 ; X32-SSE41-NEXT:    retl
   4980   %extmask = sext <4 x i8> %mask to <4 x i64>
   4981   ret <4 x i64> %extmask
   4982 }
   4983 
   4984 define <32 x i8> @sext_32xi1_to_32xi8(<32 x i16> %c1, <32 x i16> %c2)nounwind {
   4985 ; SSE-LABEL: sext_32xi1_to_32xi8:
   4986 ; SSE:       # %bb.0:
   4987 ; SSE-NEXT:    pcmpeqw %xmm5, %xmm1
   4988 ; SSE-NEXT:    pcmpeqw %xmm4, %xmm0
   4989 ; SSE-NEXT:    packsswb %xmm1, %xmm0
   4990 ; SSE-NEXT:    pcmpeqw %xmm7, %xmm3
   4991 ; SSE-NEXT:    pcmpeqw %xmm6, %xmm2
   4992 ; SSE-NEXT:    packsswb %xmm3, %xmm2
   4993 ; SSE-NEXT:    movdqa %xmm2, %xmm1
   4994 ; SSE-NEXT:    retq
   4995 ;
   4996 ; AVX1-LABEL: sext_32xi1_to_32xi8:
   4997 ; AVX1:       # %bb.0:
   4998 ; AVX1-NEXT:    vextractf128 $1, %ymm3, %xmm4
   4999 ; AVX1-NEXT:    vextractf128 $1, %ymm1, %xmm5
   5000 ; AVX1-NEXT:    vpcmpeqw %xmm4, %xmm5, %xmm4
   5001 ; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm1, %xmm1
   5002 ; AVX1-NEXT:    vpacksswb %xmm4, %xmm1, %xmm1
   5003 ; AVX1-NEXT:    vextractf128 $1, %ymm2, %xmm3
   5004 ; AVX1-NEXT:    vextractf128 $1, %ymm0, %xmm4
   5005 ; AVX1-NEXT:    vpcmpeqw %xmm3, %xmm4, %xmm3
   5006 ; AVX1-NEXT:    vpcmpeqw %xmm2, %xmm0, %xmm0
   5007 ; AVX1-NEXT:    vpacksswb %xmm3, %xmm0, %xmm0
   5008 ; AVX1-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm0
   5009 ; AVX1-NEXT:    retq
   5010 ;
   5011 ; AVX2-LABEL: sext_32xi1_to_32xi8:
   5012 ; AVX2:       # %bb.0:
   5013 ; AVX2-NEXT:    vpcmpeqw %ymm3, %ymm1, %ymm1
   5014 ; AVX2-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
   5015 ; AVX2-NEXT:    vpacksswb %ymm1, %ymm0, %ymm0
   5016 ; AVX2-NEXT:    vpermq {{.*#+}} ymm0 = ymm0[0,2,1,3]
   5017 ; AVX2-NEXT:    retq
   5018 ;
   5019 ; AVX512F-LABEL: sext_32xi1_to_32xi8:
   5020 ; AVX512F:       # %bb.0:
   5021 ; AVX512F-NEXT:    vpcmpeqw %ymm2, %ymm0, %ymm0
   5022 ; AVX512F-NEXT:    vpmovsxwd %ymm0, %zmm0
   5023 ; AVX512F-NEXT:    vpmovdb %zmm0, %xmm0
   5024 ; AVX512F-NEXT:    vpcmpeqw %ymm3, %ymm1, %ymm1
   5025 ; AVX512F-NEXT:    vpmovsxwd %ymm1, %zmm1
   5026 ; AVX512F-NEXT:    vpmovdb %zmm1, %xmm1
   5027 ; AVX512F-NEXT:    vinserti128 $1, %xmm1, %ymm0, %ymm0
   5028 ; AVX512F-NEXT:    retq
   5029 ;
   5030 ; AVX512BW-LABEL: sext_32xi1_to_32xi8:
   5031 ; AVX512BW:       # %bb.0:
   5032 ; AVX512BW-NEXT:    vpcmpeqw %zmm1, %zmm0, %k0
   5033 ; AVX512BW-NEXT:    vpmovm2b %k0, %zmm0
   5034 ; AVX512BW-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0
   5035 ; AVX512BW-NEXT:    retq
   5036 ;
   5037 ; X32-SSE41-LABEL: sext_32xi1_to_32xi8:
   5038 ; X32-SSE41:       # %bb.0:
   5039 ; X32-SSE41-NEXT:    pushl %ebp
   5040 ; X32-SSE41-NEXT:    movl %esp, %ebp
   5041 ; X32-SSE41-NEXT:    andl $-16, %esp
   5042 ; X32-SSE41-NEXT:    subl $16, %esp
   5043 ; X32-SSE41-NEXT:    movdqa 8(%ebp), %xmm3
   5044 ; X32-SSE41-NEXT:    pcmpeqw 40(%ebp), %xmm1
   5045 ; X32-SSE41-NEXT:    pcmpeqw 24(%ebp), %xmm0
   5046 ; X32-SSE41-NEXT:    packsswb %xmm1, %xmm0
   5047 ; X32-SSE41-NEXT:    pcmpeqw 72(%ebp), %xmm3
   5048 ; X32-SSE41-NEXT:    pcmpeqw 56(%ebp), %xmm2
   5049 ; X32-SSE41-NEXT:    packsswb %xmm3, %xmm2
   5050 ; X32-SSE41-NEXT:    movdqa %xmm2, %xmm1
   5051 ; X32-SSE41-NEXT:    movl %ebp, %esp
   5052 ; X32-SSE41-NEXT:    popl %ebp
   5053 ; X32-SSE41-NEXT:    retl
   5054   %a = icmp eq <32 x i16> %c1, %c2
   5055   %b = sext <32 x i1> %a to <32 x i8>
   5056   ret <32 x i8> %b
   5057 }
   5058 
   5059 define <2 x i32> @sext_2i8_to_2i32(<2 x i8>* %addr) {
   5060 ; SSE2-LABEL: sext_2i8_to_2i32:
   5061 ; SSE2:       # %bb.0:
   5062 ; SSE2-NEXT:    movzwl (%rdi), %eax
   5063 ; SSE2-NEXT:    movd %eax, %xmm0
   5064 ; SSE2-NEXT:    punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7]
   5065 ; SSE2-NEXT:    punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3]
   5066 ; SSE2-NEXT:    psrad $24, %xmm0
   5067 ; SSE2-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]
   5068 ; SSE2-NEXT:    paddq %xmm0, %xmm0
   5069 ; SSE2-NEXT:    retq
   5070 ;
   5071 ; SSSE3-LABEL: sext_2i8_to_2i32:
   5072 ; SSSE3:       # %bb.0:
   5073 ; SSSE3-NEXT:    movzwl (%rdi), %eax
   5074 ; SSSE3-NEXT:    movd %eax, %xmm0
   5075 ; SSSE3-NEXT:    pshufb {{.*#+}} xmm0 = xmm0[u,u,u,0,u,u,u,1,u,u,u,u,u,u,u,u]
   5076 ; SSSE3-NEXT:    psrad $24, %xmm0
   5077 ; SSSE3-NEXT:    pshufd {{.*#+}} xmm0 = xmm0[0,1,1,3]
   5078 ; SSSE3-NEXT:    paddq %xmm0, %xmm0
   5079 ; SSSE3-NEXT:    retq
   5080 ;
   5081 ; SSE41-LABEL: sext_2i8_to_2i32:
   5082 ; SSE41:       # %bb.0:
   5083 ; SSE41-NEXT:    pmovsxbq (%rdi), %xmm0
   5084 ; SSE41-NEXT:    paddq %xmm0, %xmm0
   5085 ; SSE41-NEXT:    retq
   5086 ;
   5087 ; AVX-LABEL: sext_2i8_to_2i32:
   5088 ; AVX:       # %bb.0:
   5089 ; AVX-NEXT:    vpmovsxbq (%rdi), %xmm0
   5090 ; AVX-NEXT:    vpaddq %xmm0, %xmm0, %xmm0
   5091 ; AVX-NEXT:    retq
   5092 ;
   5093 ; X32-SSE41-LABEL: sext_2i8_to_2i32:
   5094 ; X32-SSE41:       # %bb.0:
   5095 ; X32-SSE41-NEXT:    movl {{[0-9]+}}(%esp), %eax
   5096 ; X32-SSE41-NEXT:    pmovsxbq (%eax), %xmm0
   5097 ; X32-SSE41-NEXT:    paddq %xmm0, %xmm0
   5098 ; X32-SSE41-NEXT:    retl
   5099   %x = load <2 x i8>, <2 x i8>* %addr, align 1
   5100   %y = sext <2 x i8> %x to <2 x i32>
   5101   %z = add <2 x i32>%y, %y
   5102   ret <2 x i32>%z
   5103 }
   5104 
   5105