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 ; 8 ; Just one 32-bit run to make sure we do reasonable things there. 9 ; RUN: llc < %s -mtriple=i686-unknown-unknown -mattr=+sse4.1 | FileCheck %s --check-prefix=X32-SSE41 10 11 define <8 x i16> @sext_16i8_to_8i16(<16 x i8> %A) nounwind uwtable readnone ssp { 12 ; SSE2-LABEL: sext_16i8_to_8i16: 13 ; SSE2: # BB#0: # %entry 14 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 15 ; SSE2-NEXT: psraw $8, %xmm0 16 ; SSE2-NEXT: retq 17 ; 18 ; SSSE3-LABEL: sext_16i8_to_8i16: 19 ; SSSE3: # BB#0: # %entry 20 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 21 ; SSSE3-NEXT: psraw $8, %xmm0 22 ; SSSE3-NEXT: retq 23 ; 24 ; SSE41-LABEL: sext_16i8_to_8i16: 25 ; SSE41: # BB#0: # %entry 26 ; SSE41-NEXT: pmovsxbw %xmm0, %xmm0 27 ; SSE41-NEXT: retq 28 ; 29 ; AVX-LABEL: sext_16i8_to_8i16: 30 ; AVX: # BB#0: # %entry 31 ; AVX-NEXT: vpmovsxbw %xmm0, %xmm0 32 ; AVX-NEXT: retq 33 ; 34 ; X32-SSE41-LABEL: sext_16i8_to_8i16: 35 ; X32-SSE41: # BB#0: # %entry 36 ; X32-SSE41-NEXT: pmovsxbw %xmm0, %xmm0 37 ; X32-SSE41-NEXT: retl 38 entry: 39 %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> 40 %C = sext <8 x i8> %B to <8 x i16> 41 ret <8 x i16> %C 42 } 43 44 define <16 x i16> @sext_16i8_to_16i16(<16 x i8> %A) nounwind uwtable readnone ssp { 45 ; SSE2-LABEL: sext_16i8_to_16i16: 46 ; SSE2: # BB#0: # %entry 47 ; 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] 48 ; SSE2-NEXT: psraw $8, %xmm2 49 ; 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] 50 ; SSE2-NEXT: psraw $8, %xmm1 51 ; SSE2-NEXT: movdqa %xmm2, %xmm0 52 ; SSE2-NEXT: retq 53 ; 54 ; SSSE3-LABEL: sext_16i8_to_16i16: 55 ; SSSE3: # BB#0: # %entry 56 ; 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] 57 ; SSSE3-NEXT: psraw $8, %xmm2 58 ; 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] 59 ; SSSE3-NEXT: psraw $8, %xmm1 60 ; SSSE3-NEXT: movdqa %xmm2, %xmm0 61 ; SSSE3-NEXT: retq 62 ; 63 ; SSE41-LABEL: sext_16i8_to_16i16: 64 ; SSE41: # BB#0: # %entry 65 ; SSE41-NEXT: pmovsxbw %xmm0, %xmm2 66 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 67 ; SSE41-NEXT: pmovsxbw %xmm0, %xmm1 68 ; SSE41-NEXT: movdqa %xmm2, %xmm0 69 ; SSE41-NEXT: retq 70 ; 71 ; AVX1-LABEL: sext_16i8_to_16i16: 72 ; AVX1: # BB#0: # %entry 73 ; AVX1-NEXT: vpmovsxbw %xmm0, %xmm1 74 ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 75 ; AVX1-NEXT: vpmovsxbw %xmm0, %xmm0 76 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 77 ; AVX1-NEXT: retq 78 ; 79 ; AVX2-LABEL: sext_16i8_to_16i16: 80 ; AVX2: # BB#0: # %entry 81 ; AVX2-NEXT: vpmovsxbw %xmm0, %ymm0 82 ; AVX2-NEXT: retq 83 ; 84 ; X32-SSE41-LABEL: sext_16i8_to_16i16: 85 ; X32-SSE41: # BB#0: # %entry 86 ; X32-SSE41-NEXT: pmovsxbw %xmm0, %xmm2 87 ; X32-SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 88 ; X32-SSE41-NEXT: pmovsxbw %xmm0, %xmm1 89 ; X32-SSE41-NEXT: movdqa %xmm2, %xmm0 90 ; X32-SSE41-NEXT: retl 91 entry: 92 %B = sext <16 x i8> %A to <16 x i16> 93 ret <16 x i16> %B 94 } 95 96 define <4 x i32> @sext_16i8_to_4i32(<16 x i8> %A) nounwind uwtable readnone ssp { 97 ; SSE2-LABEL: sext_16i8_to_4i32: 98 ; SSE2: # BB#0: # %entry 99 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 100 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 101 ; SSE2-NEXT: psrad $24, %xmm0 102 ; SSE2-NEXT: retq 103 ; 104 ; SSSE3-LABEL: sext_16i8_to_4i32: 105 ; SSSE3: # BB#0: # %entry 106 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 107 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 108 ; SSSE3-NEXT: psrad $24, %xmm0 109 ; SSSE3-NEXT: retq 110 ; 111 ; SSE41-LABEL: sext_16i8_to_4i32: 112 ; SSE41: # BB#0: # %entry 113 ; SSE41-NEXT: pmovsxbd %xmm0, %xmm0 114 ; SSE41-NEXT: retq 115 ; 116 ; AVX-LABEL: sext_16i8_to_4i32: 117 ; AVX: # BB#0: # %entry 118 ; AVX-NEXT: vpmovsxbd %xmm0, %xmm0 119 ; AVX-NEXT: retq 120 ; 121 ; X32-SSE41-LABEL: sext_16i8_to_4i32: 122 ; X32-SSE41: # BB#0: # %entry 123 ; X32-SSE41-NEXT: pmovsxbd %xmm0, %xmm0 124 ; X32-SSE41-NEXT: retl 125 entry: 126 %B = shufflevector <16 x i8> %A, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 127 %C = sext <4 x i8> %B to <4 x i32> 128 ret <4 x i32> %C 129 } 130 131 define <8 x i32> @sext_16i8_to_8i32(<16 x i8> %A) nounwind uwtable readnone ssp { 132 ; SSE2-LABEL: sext_16i8_to_8i32: 133 ; SSE2: # BB#0: # %entry 134 ; 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] 135 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 136 ; SSE2-NEXT: psrad $24, %xmm2 137 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3] 138 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 139 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 140 ; SSE2-NEXT: psrad $24, %xmm1 141 ; SSE2-NEXT: movdqa %xmm2, %xmm0 142 ; SSE2-NEXT: retq 143 ; 144 ; SSSE3-LABEL: sext_16i8_to_8i32: 145 ; SSSE3: # BB#0: # %entry 146 ; 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] 147 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 148 ; SSSE3-NEXT: psrad $24, %xmm2 149 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3] 150 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 151 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 152 ; SSSE3-NEXT: psrad $24, %xmm1 153 ; SSSE3-NEXT: movdqa %xmm2, %xmm0 154 ; SSSE3-NEXT: retq 155 ; 156 ; SSE41-LABEL: sext_16i8_to_8i32: 157 ; SSE41: # BB#0: # %entry 158 ; SSE41-NEXT: pmovsxbd %xmm0, %xmm2 159 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3] 160 ; SSE41-NEXT: pmovsxbd %xmm0, %xmm1 161 ; SSE41-NEXT: movdqa %xmm2, %xmm0 162 ; SSE41-NEXT: retq 163 ; 164 ; AVX1-LABEL: sext_16i8_to_8i32: 165 ; AVX1: # BB#0: # %entry 166 ; AVX1-NEXT: vpmovsxbd %xmm0, %xmm1 167 ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,2,3] 168 ; AVX1-NEXT: vpmovsxbd %xmm0, %xmm0 169 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 170 ; AVX1-NEXT: retq 171 ; 172 ; AVX2-LABEL: sext_16i8_to_8i32: 173 ; AVX2: # BB#0: # %entry 174 ; AVX2-NEXT: vpmovzxbd {{.*#+}} ymm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero 175 ; AVX2-NEXT: vpslld $24, %ymm0, %ymm0 176 ; AVX2-NEXT: vpsrad $24, %ymm0, %ymm0 177 ; AVX2-NEXT: retq 178 ; 179 ; X32-SSE41-LABEL: sext_16i8_to_8i32: 180 ; X32-SSE41: # BB#0: # %entry 181 ; X32-SSE41-NEXT: pmovsxbd %xmm0, %xmm2 182 ; X32-SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3] 183 ; X32-SSE41-NEXT: pmovsxbd %xmm0, %xmm1 184 ; X32-SSE41-NEXT: movdqa %xmm2, %xmm0 185 ; X32-SSE41-NEXT: retl 186 entry: 187 %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> 188 %C = sext <8 x i8> %B to <8 x i32> 189 ret <8 x i32> %C 190 } 191 192 define <2 x i64> @sext_16i8_to_2i64(<16 x i8> %A) nounwind uwtable readnone ssp { 193 ; SSE2-LABEL: sext_16i8_to_2i64: 194 ; SSE2: # BB#0: # %entry 195 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 196 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 197 ; SSE2-NEXT: movdqa %xmm0, %xmm1 198 ; SSE2-NEXT: psrad $31, %xmm1 199 ; SSE2-NEXT: psrad $24, %xmm0 200 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 201 ; SSE2-NEXT: retq 202 ; 203 ; SSSE3-LABEL: sext_16i8_to_2i64: 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: movdqa %xmm0, %xmm1 208 ; SSSE3-NEXT: psrad $31, %xmm1 209 ; SSSE3-NEXT: psrad $24, %xmm0 210 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 211 ; SSSE3-NEXT: retq 212 ; 213 ; SSE41-LABEL: sext_16i8_to_2i64: 214 ; SSE41: # BB#0: # %entry 215 ; SSE41-NEXT: pmovsxbq %xmm0, %xmm0 216 ; SSE41-NEXT: retq 217 ; 218 ; AVX-LABEL: sext_16i8_to_2i64: 219 ; AVX: # BB#0: # %entry 220 ; AVX-NEXT: vpmovsxbq %xmm0, %xmm0 221 ; AVX-NEXT: retq 222 ; 223 ; X32-SSE41-LABEL: sext_16i8_to_2i64: 224 ; X32-SSE41: # BB#0: # %entry 225 ; X32-SSE41-NEXT: pmovsxbq %xmm0, %xmm0 226 ; X32-SSE41-NEXT: retl 227 entry: 228 %B = shufflevector <16 x i8> %A, <16 x i8> undef, <2 x i32> <i32 0, i32 1> 229 %C = sext <2 x i8> %B to <2 x i64> 230 ret <2 x i64> %C 231 } 232 233 define <4 x i64> @sext_16i8_to_4i64(<16 x i8> %A) nounwind uwtable readnone ssp { 234 ; SSE2-LABEL: sext_16i8_to_4i64: 235 ; SSE2: # BB#0: # %entry 236 ; 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] 237 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 238 ; SSE2-NEXT: movdqa %xmm2, %xmm1 239 ; SSE2-NEXT: psrad $31, %xmm1 240 ; SSE2-NEXT: psrad $24, %xmm2 241 ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1] 242 ; SSE2-NEXT: psrld $16, %xmm0 243 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 244 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 245 ; SSE2-NEXT: movdqa %xmm1, %xmm0 246 ; SSE2-NEXT: psrad $31, %xmm0 247 ; SSE2-NEXT: psrad $24, %xmm1 248 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 249 ; SSE2-NEXT: movdqa %xmm2, %xmm0 250 ; SSE2-NEXT: retq 251 ; 252 ; SSSE3-LABEL: sext_16i8_to_4i64: 253 ; SSSE3: # BB#0: # %entry 254 ; 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] 255 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 256 ; SSSE3-NEXT: movdqa %xmm2, %xmm1 257 ; SSSE3-NEXT: psrad $31, %xmm1 258 ; SSSE3-NEXT: psrad $24, %xmm2 259 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1] 260 ; SSSE3-NEXT: psrld $16, %xmm0 261 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 262 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 263 ; SSSE3-NEXT: movdqa %xmm1, %xmm0 264 ; SSSE3-NEXT: psrad $31, %xmm0 265 ; SSSE3-NEXT: psrad $24, %xmm1 266 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 267 ; SSSE3-NEXT: movdqa %xmm2, %xmm0 268 ; SSSE3-NEXT: retq 269 ; 270 ; SSE41-LABEL: sext_16i8_to_4i64: 271 ; SSE41: # BB#0: # %entry 272 ; SSE41-NEXT: pmovsxbq %xmm0, %xmm2 273 ; SSE41-NEXT: psrld $16, %xmm0 274 ; SSE41-NEXT: pmovsxbq %xmm0, %xmm1 275 ; SSE41-NEXT: movdqa %xmm2, %xmm0 276 ; SSE41-NEXT: retq 277 ; 278 ; AVX1-LABEL: sext_16i8_to_4i64: 279 ; AVX1: # BB#0: # %entry 280 ; AVX1-NEXT: vpmovsxbq %xmm0, %xmm1 281 ; AVX1-NEXT: vpsrld $16, %xmm0, %xmm0 282 ; AVX1-NEXT: vpmovsxbq %xmm0, %xmm0 283 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 284 ; AVX1-NEXT: retq 285 ; 286 ; AVX2-LABEL: sext_16i8_to_4i64: 287 ; AVX2: # BB#0: # %entry 288 ; AVX2-NEXT: vpmovzxbd {{.*#+}} xmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero 289 ; AVX2-NEXT: vpslld $24, %xmm0, %xmm0 290 ; AVX2-NEXT: vpsrad $24, %xmm0, %xmm0 291 ; AVX2-NEXT: vpmovsxdq %xmm0, %ymm0 292 ; AVX2-NEXT: retq 293 ; 294 ; X32-SSE41-LABEL: sext_16i8_to_4i64: 295 ; X32-SSE41: # BB#0: # %entry 296 ; X32-SSE41-NEXT: pmovsxbq %xmm0, %xmm2 297 ; X32-SSE41-NEXT: psrld $16, %xmm0 298 ; X32-SSE41-NEXT: pmovsxbq %xmm0, %xmm1 299 ; X32-SSE41-NEXT: movdqa %xmm2, %xmm0 300 ; X32-SSE41-NEXT: retl 301 entry: 302 %B = shufflevector <16 x i8> %A, <16 x i8> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 303 %C = sext <4 x i8> %B to <4 x i64> 304 ret <4 x i64> %C 305 } 306 307 define <4 x i32> @sext_8i16_to_4i32(<8 x i16> %A) nounwind uwtable readnone ssp { 308 ; SSE2-LABEL: sext_8i16_to_4i32: 309 ; SSE2: # BB#0: # %entry 310 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 311 ; SSE2-NEXT: psrad $16, %xmm0 312 ; SSE2-NEXT: retq 313 ; 314 ; SSSE3-LABEL: sext_8i16_to_4i32: 315 ; SSSE3: # BB#0: # %entry 316 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 317 ; SSSE3-NEXT: psrad $16, %xmm0 318 ; SSSE3-NEXT: retq 319 ; 320 ; SSE41-LABEL: sext_8i16_to_4i32: 321 ; SSE41: # BB#0: # %entry 322 ; SSE41-NEXT: pmovsxwd %xmm0, %xmm0 323 ; SSE41-NEXT: retq 324 ; 325 ; AVX-LABEL: sext_8i16_to_4i32: 326 ; AVX: # BB#0: # %entry 327 ; AVX-NEXT: vpmovsxwd %xmm0, %xmm0 328 ; AVX-NEXT: retq 329 ; 330 ; X32-SSE41-LABEL: sext_8i16_to_4i32: 331 ; X32-SSE41: # BB#0: # %entry 332 ; X32-SSE41-NEXT: pmovsxwd %xmm0, %xmm0 333 ; X32-SSE41-NEXT: retl 334 entry: 335 %B = shufflevector <8 x i16> %A, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 336 %C = sext <4 x i16> %B to <4 x i32> 337 ret <4 x i32> %C 338 } 339 340 define <8 x i32> @sext_8i16_to_8i32(<8 x i16> %A) nounwind uwtable readnone ssp { 341 ; SSE2-LABEL: sext_8i16_to_8i32: 342 ; SSE2: # BB#0: # %entry 343 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 344 ; SSE2-NEXT: psrad $16, %xmm2 345 ; SSE2-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7] 346 ; SSE2-NEXT: psrad $16, %xmm1 347 ; SSE2-NEXT: movdqa %xmm2, %xmm0 348 ; SSE2-NEXT: retq 349 ; 350 ; SSSE3-LABEL: sext_8i16_to_8i32: 351 ; SSSE3: # BB#0: # %entry 352 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 353 ; SSSE3-NEXT: psrad $16, %xmm2 354 ; SSSE3-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7] 355 ; SSSE3-NEXT: psrad $16, %xmm1 356 ; SSSE3-NEXT: movdqa %xmm2, %xmm0 357 ; SSSE3-NEXT: retq 358 ; 359 ; SSE41-LABEL: sext_8i16_to_8i32: 360 ; SSE41: # BB#0: # %entry 361 ; SSE41-NEXT: pmovsxwd %xmm0, %xmm2 362 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 363 ; SSE41-NEXT: pmovsxwd %xmm0, %xmm1 364 ; SSE41-NEXT: movdqa %xmm2, %xmm0 365 ; SSE41-NEXT: retq 366 ; 367 ; AVX1-LABEL: sext_8i16_to_8i32: 368 ; AVX1: # BB#0: # %entry 369 ; AVX1-NEXT: vpmovsxwd %xmm0, %xmm1 370 ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 371 ; AVX1-NEXT: vpmovsxwd %xmm0, %xmm0 372 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 373 ; AVX1-NEXT: retq 374 ; 375 ; AVX2-LABEL: sext_8i16_to_8i32: 376 ; AVX2: # BB#0: # %entry 377 ; AVX2-NEXT: vpmovsxwd %xmm0, %ymm0 378 ; AVX2-NEXT: retq 379 ; 380 ; X32-SSE41-LABEL: sext_8i16_to_8i32: 381 ; X32-SSE41: # BB#0: # %entry 382 ; X32-SSE41-NEXT: pmovsxwd %xmm0, %xmm2 383 ; X32-SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 384 ; X32-SSE41-NEXT: pmovsxwd %xmm0, %xmm1 385 ; X32-SSE41-NEXT: movdqa %xmm2, %xmm0 386 ; X32-SSE41-NEXT: retl 387 entry: 388 %B = sext <8 x i16> %A to <8 x i32> 389 ret <8 x i32> %B 390 } 391 392 define <2 x i64> @sext_8i16_to_2i64(<8 x i16> %A) nounwind uwtable readnone ssp { 393 ; SSE2-LABEL: sext_8i16_to_2i64: 394 ; SSE2: # BB#0: # %entry 395 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 396 ; SSE2-NEXT: movdqa %xmm0, %xmm1 397 ; SSE2-NEXT: psrad $31, %xmm1 398 ; SSE2-NEXT: psrad $16, %xmm0 399 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 400 ; SSE2-NEXT: retq 401 ; 402 ; SSSE3-LABEL: sext_8i16_to_2i64: 403 ; SSSE3: # BB#0: # %entry 404 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 405 ; SSSE3-NEXT: movdqa %xmm0, %xmm1 406 ; SSSE3-NEXT: psrad $31, %xmm1 407 ; SSSE3-NEXT: psrad $16, %xmm0 408 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 409 ; SSSE3-NEXT: retq 410 ; 411 ; SSE41-LABEL: sext_8i16_to_2i64: 412 ; SSE41: # BB#0: # %entry 413 ; SSE41-NEXT: pmovsxwq %xmm0, %xmm0 414 ; SSE41-NEXT: retq 415 ; 416 ; AVX-LABEL: sext_8i16_to_2i64: 417 ; AVX: # BB#0: # %entry 418 ; AVX-NEXT: vpmovsxwq %xmm0, %xmm0 419 ; AVX-NEXT: retq 420 ; 421 ; X32-SSE41-LABEL: sext_8i16_to_2i64: 422 ; X32-SSE41: # BB#0: # %entry 423 ; X32-SSE41-NEXT: pmovsxwq %xmm0, %xmm0 424 ; X32-SSE41-NEXT: retl 425 entry: 426 %B = shufflevector <8 x i16> %A, <8 x i16> undef, <2 x i32> <i32 0, i32 1> 427 %C = sext <2 x i16> %B to <2 x i64> 428 ret <2 x i64> %C 429 } 430 431 define <4 x i64> @sext_8i16_to_4i64(<8 x i16> %A) nounwind uwtable readnone ssp { 432 ; SSE2-LABEL: sext_8i16_to_4i64: 433 ; SSE2: # BB#0: # %entry 434 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 435 ; SSE2-NEXT: movdqa %xmm2, %xmm1 436 ; SSE2-NEXT: psrad $31, %xmm1 437 ; SSE2-NEXT: psrad $16, %xmm2 438 ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1] 439 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3] 440 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 441 ; SSE2-NEXT: movdqa %xmm1, %xmm0 442 ; SSE2-NEXT: psrad $31, %xmm0 443 ; SSE2-NEXT: psrad $16, %xmm1 444 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 445 ; SSE2-NEXT: movdqa %xmm2, %xmm0 446 ; SSE2-NEXT: retq 447 ; 448 ; SSSE3-LABEL: sext_8i16_to_4i64: 449 ; SSSE3: # BB#0: # %entry 450 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 451 ; SSSE3-NEXT: movdqa %xmm2, %xmm1 452 ; SSSE3-NEXT: psrad $31, %xmm1 453 ; SSSE3-NEXT: psrad $16, %xmm2 454 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1] 455 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3] 456 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 457 ; SSSE3-NEXT: movdqa %xmm1, %xmm0 458 ; SSSE3-NEXT: psrad $31, %xmm0 459 ; SSSE3-NEXT: psrad $16, %xmm1 460 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 461 ; SSSE3-NEXT: movdqa %xmm2, %xmm0 462 ; SSSE3-NEXT: retq 463 ; 464 ; SSE41-LABEL: sext_8i16_to_4i64: 465 ; SSE41: # BB#0: # %entry 466 ; SSE41-NEXT: pmovsxwq %xmm0, %xmm2 467 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3] 468 ; SSE41-NEXT: pmovsxwq %xmm0, %xmm1 469 ; SSE41-NEXT: movdqa %xmm2, %xmm0 470 ; SSE41-NEXT: retq 471 ; 472 ; AVX1-LABEL: sext_8i16_to_4i64: 473 ; AVX1: # BB#0: # %entry 474 ; AVX1-NEXT: vpmovsxwq %xmm0, %xmm1 475 ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[1,1,2,3] 476 ; AVX1-NEXT: vpmovsxwq %xmm0, %xmm0 477 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 478 ; AVX1-NEXT: retq 479 ; 480 ; AVX2-LABEL: sext_8i16_to_4i64: 481 ; AVX2: # BB#0: # %entry 482 ; AVX2-NEXT: vpmovzxwd {{.*#+}} xmm0 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero 483 ; AVX2-NEXT: vpslld $16, %xmm0, %xmm0 484 ; AVX2-NEXT: vpsrad $16, %xmm0, %xmm0 485 ; AVX2-NEXT: vpmovsxdq %xmm0, %ymm0 486 ; AVX2-NEXT: retq 487 ; 488 ; X32-SSE41-LABEL: sext_8i16_to_4i64: 489 ; X32-SSE41: # BB#0: # %entry 490 ; X32-SSE41-NEXT: pmovsxwq %xmm0, %xmm2 491 ; X32-SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,2,3] 492 ; X32-SSE41-NEXT: pmovsxwq %xmm0, %xmm1 493 ; X32-SSE41-NEXT: movdqa %xmm2, %xmm0 494 ; X32-SSE41-NEXT: retl 495 entry: 496 %B = shufflevector <8 x i16> %A, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3> 497 %C = sext <4 x i16> %B to <4 x i64> 498 ret <4 x i64> %C 499 } 500 501 define <2 x i64> @sext_4i32_to_2i64(<4 x i32> %A) nounwind uwtable readnone ssp { 502 ; SSE2-LABEL: sext_4i32_to_2i64: 503 ; SSE2: # BB#0: # %entry 504 ; SSE2-NEXT: movdqa %xmm0, %xmm1 505 ; SSE2-NEXT: psrad $31, %xmm1 506 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 507 ; SSE2-NEXT: retq 508 ; 509 ; SSSE3-LABEL: sext_4i32_to_2i64: 510 ; SSSE3: # BB#0: # %entry 511 ; SSSE3-NEXT: movdqa %xmm0, %xmm1 512 ; SSSE3-NEXT: psrad $31, %xmm1 513 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 514 ; SSSE3-NEXT: retq 515 ; 516 ; SSE41-LABEL: sext_4i32_to_2i64: 517 ; SSE41: # BB#0: # %entry 518 ; SSE41-NEXT: pmovsxdq %xmm0, %xmm0 519 ; SSE41-NEXT: retq 520 ; 521 ; AVX-LABEL: sext_4i32_to_2i64: 522 ; AVX: # BB#0: # %entry 523 ; AVX-NEXT: vpmovsxdq %xmm0, %xmm0 524 ; AVX-NEXT: retq 525 ; 526 ; X32-SSE41-LABEL: sext_4i32_to_2i64: 527 ; X32-SSE41: # BB#0: # %entry 528 ; X32-SSE41-NEXT: pmovsxdq %xmm0, %xmm0 529 ; X32-SSE41-NEXT: retl 530 entry: 531 %B = shufflevector <4 x i32> %A, <4 x i32> undef, <2 x i32> <i32 0, i32 1> 532 %C = sext <2 x i32> %B to <2 x i64> 533 ret <2 x i64> %C 534 } 535 536 define <4 x i64> @sext_4i32_to_4i64(<4 x i32> %A) nounwind uwtable readnone ssp { 537 ; SSE2-LABEL: sext_4i32_to_4i64: 538 ; SSE2: # BB#0: # %entry 539 ; SSE2-NEXT: movdqa %xmm0, %xmm2 540 ; SSE2-NEXT: psrad $31, %xmm2 541 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 542 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 543 ; SSE2-NEXT: movdqa %xmm1, %xmm2 544 ; SSE2-NEXT: psrad $31, %xmm2 545 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 546 ; SSE2-NEXT: retq 547 ; 548 ; SSSE3-LABEL: sext_4i32_to_4i64: 549 ; SSSE3: # BB#0: # %entry 550 ; SSSE3-NEXT: movdqa %xmm0, %xmm2 551 ; SSSE3-NEXT: psrad $31, %xmm2 552 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 553 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 554 ; SSSE3-NEXT: movdqa %xmm1, %xmm2 555 ; SSSE3-NEXT: psrad $31, %xmm2 556 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 557 ; SSSE3-NEXT: retq 558 ; 559 ; SSE41-LABEL: sext_4i32_to_4i64: 560 ; SSE41: # BB#0: # %entry 561 ; SSE41-NEXT: pmovsxdq %xmm0, %xmm2 562 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 563 ; SSE41-NEXT: pmovsxdq %xmm0, %xmm1 564 ; SSE41-NEXT: movdqa %xmm2, %xmm0 565 ; SSE41-NEXT: retq 566 ; 567 ; AVX1-LABEL: sext_4i32_to_4i64: 568 ; AVX1: # BB#0: # %entry 569 ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm1 570 ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 571 ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm0 572 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 573 ; AVX1-NEXT: retq 574 ; 575 ; AVX2-LABEL: sext_4i32_to_4i64: 576 ; AVX2: # BB#0: # %entry 577 ; AVX2-NEXT: vpmovsxdq %xmm0, %ymm0 578 ; AVX2-NEXT: retq 579 ; 580 ; X32-SSE41-LABEL: sext_4i32_to_4i64: 581 ; X32-SSE41: # BB#0: # %entry 582 ; X32-SSE41-NEXT: pmovsxdq %xmm0, %xmm2 583 ; X32-SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 584 ; X32-SSE41-NEXT: pmovsxdq %xmm0, %xmm1 585 ; X32-SSE41-NEXT: movdqa %xmm2, %xmm0 586 ; X32-SSE41-NEXT: retl 587 entry: 588 %B = sext <4 x i32> %A to <4 x i64> 589 ret <4 x i64> %B 590 } 591 592 define <2 x i64> @load_sext_2i1_to_2i64(<2 x i1> *%ptr) { 593 ; SSE-LABEL: load_sext_2i1_to_2i64: 594 ; SSE: # BB#0: # %entry 595 ; SSE-NEXT: movzbl (%rdi), %eax 596 ; SSE-NEXT: movq %rax, %rcx 597 ; SSE-NEXT: shlq $62, %rcx 598 ; SSE-NEXT: sarq $63, %rcx 599 ; SSE-NEXT: movd %rcx, %xmm1 600 ; SSE-NEXT: shlq $63, %rax 601 ; SSE-NEXT: sarq $63, %rax 602 ; SSE-NEXT: movd %rax, %xmm0 603 ; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 604 ; SSE-NEXT: retq 605 ; 606 ; AVX-LABEL: load_sext_2i1_to_2i64: 607 ; AVX: # BB#0: # %entry 608 ; AVX-NEXT: movzbl (%rdi), %eax 609 ; AVX-NEXT: movq %rax, %rcx 610 ; AVX-NEXT: shlq $62, %rcx 611 ; AVX-NEXT: sarq $63, %rcx 612 ; AVX-NEXT: vmovq %rcx, %xmm0 613 ; AVX-NEXT: shlq $63, %rax 614 ; AVX-NEXT: sarq $63, %rax 615 ; AVX-NEXT: vmovq %rax, %xmm1 616 ; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 617 ; AVX-NEXT: retq 618 ; 619 ; X32-SSE41-LABEL: load_sext_2i1_to_2i64: 620 ; X32-SSE41: # BB#0: # %entry 621 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 622 ; X32-SSE41-NEXT: movzbl (%eax), %eax 623 ; X32-SSE41-NEXT: movl %eax, %ecx 624 ; X32-SSE41-NEXT: shll $31, %ecx 625 ; X32-SSE41-NEXT: sarl $31, %ecx 626 ; X32-SSE41-NEXT: movd %ecx, %xmm0 627 ; X32-SSE41-NEXT: pinsrd $1, %ecx, %xmm0 628 ; X32-SSE41-NEXT: shll $30, %eax 629 ; X32-SSE41-NEXT: sarl $31, %eax 630 ; X32-SSE41-NEXT: pinsrd $2, %eax, %xmm0 631 ; X32-SSE41-NEXT: pinsrd $3, %eax, %xmm0 632 ; X32-SSE41-NEXT: retl 633 entry: 634 %X = load <2 x i1>, <2 x i1>* %ptr 635 %Y = sext <2 x i1> %X to <2 x i64> 636 ret <2 x i64> %Y 637 } 638 639 define <2 x i64> @load_sext_2i8_to_2i64(<2 x i8> *%ptr) { 640 ; SSE2-LABEL: load_sext_2i8_to_2i64: 641 ; SSE2: # BB#0: # %entry 642 ; SSE2-NEXT: movzwl (%rdi), %eax 643 ; SSE2-NEXT: movd %eax, %xmm0 644 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 645 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 646 ; SSE2-NEXT: movdqa %xmm0, %xmm1 647 ; SSE2-NEXT: psrad $31, %xmm1 648 ; SSE2-NEXT: psrad $24, %xmm0 649 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 650 ; SSE2-NEXT: retq 651 ; 652 ; SSSE3-LABEL: load_sext_2i8_to_2i64: 653 ; SSSE3: # BB#0: # %entry 654 ; SSSE3-NEXT: movzwl (%rdi), %eax 655 ; SSSE3-NEXT: movd %eax, %xmm0 656 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 657 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 658 ; SSSE3-NEXT: movdqa %xmm0, %xmm1 659 ; SSSE3-NEXT: psrad $31, %xmm1 660 ; SSSE3-NEXT: psrad $24, %xmm0 661 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 662 ; SSSE3-NEXT: retq 663 ; 664 ; SSE41-LABEL: load_sext_2i8_to_2i64: 665 ; SSE41: # BB#0: # %entry 666 ; SSE41-NEXT: pmovsxbq (%rdi), %xmm0 667 ; SSE41-NEXT: retq 668 ; 669 ; AVX-LABEL: load_sext_2i8_to_2i64: 670 ; AVX: # BB#0: # %entry 671 ; AVX-NEXT: vpmovsxbq (%rdi), %xmm0 672 ; AVX-NEXT: retq 673 ; 674 ; X32-SSE41-LABEL: load_sext_2i8_to_2i64: 675 ; X32-SSE41: # BB#0: # %entry 676 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 677 ; X32-SSE41-NEXT: pmovsxbq (%eax), %xmm0 678 ; X32-SSE41-NEXT: retl 679 entry: 680 %X = load <2 x i8>, <2 x i8>* %ptr 681 %Y = sext <2 x i8> %X to <2 x i64> 682 ret <2 x i64> %Y 683 } 684 685 define <4 x i32> @load_sext_4i1_to_4i32(<4 x i1> *%ptr) { 686 ; SSE2-LABEL: load_sext_4i1_to_4i32: 687 ; SSE2: # BB#0: # %entry 688 ; SSE2-NEXT: movzbl (%rdi), %eax 689 ; SSE2-NEXT: movq %rax, %rcx 690 ; SSE2-NEXT: shlq $60, %rcx 691 ; SSE2-NEXT: sarq $63, %rcx 692 ; SSE2-NEXT: movd %ecx, %xmm0 693 ; SSE2-NEXT: movq %rax, %rcx 694 ; SSE2-NEXT: shlq $62, %rcx 695 ; SSE2-NEXT: sarq $63, %rcx 696 ; SSE2-NEXT: movd %ecx, %xmm1 697 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 698 ; SSE2-NEXT: movq %rax, %rcx 699 ; SSE2-NEXT: shlq $61, %rcx 700 ; SSE2-NEXT: sarq $63, %rcx 701 ; SSE2-NEXT: movd %ecx, %xmm2 702 ; SSE2-NEXT: shlq $63, %rax 703 ; SSE2-NEXT: sarq $63, %rax 704 ; SSE2-NEXT: movd %eax, %xmm0 705 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 706 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 707 ; SSE2-NEXT: retq 708 ; 709 ; SSSE3-LABEL: load_sext_4i1_to_4i32: 710 ; SSSE3: # BB#0: # %entry 711 ; SSSE3-NEXT: movzbl (%rdi), %eax 712 ; SSSE3-NEXT: movq %rax, %rcx 713 ; SSSE3-NEXT: shlq $60, %rcx 714 ; SSSE3-NEXT: sarq $63, %rcx 715 ; SSSE3-NEXT: movd %ecx, %xmm0 716 ; SSSE3-NEXT: movq %rax, %rcx 717 ; SSSE3-NEXT: shlq $62, %rcx 718 ; SSSE3-NEXT: sarq $63, %rcx 719 ; SSSE3-NEXT: movd %ecx, %xmm1 720 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 721 ; SSSE3-NEXT: movq %rax, %rcx 722 ; SSSE3-NEXT: shlq $61, %rcx 723 ; SSSE3-NEXT: sarq $63, %rcx 724 ; SSSE3-NEXT: movd %ecx, %xmm2 725 ; SSSE3-NEXT: shlq $63, %rax 726 ; SSSE3-NEXT: sarq $63, %rax 727 ; SSSE3-NEXT: movd %eax, %xmm0 728 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 729 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 730 ; SSSE3-NEXT: retq 731 ; 732 ; SSE41-LABEL: load_sext_4i1_to_4i32: 733 ; SSE41: # BB#0: # %entry 734 ; SSE41-NEXT: movzbl (%rdi), %eax 735 ; SSE41-NEXT: movq %rax, %rcx 736 ; SSE41-NEXT: shlq $62, %rcx 737 ; SSE41-NEXT: sarq $63, %rcx 738 ; SSE41-NEXT: movq %rax, %rdx 739 ; SSE41-NEXT: shlq $63, %rdx 740 ; SSE41-NEXT: sarq $63, %rdx 741 ; SSE41-NEXT: movd %edx, %xmm0 742 ; SSE41-NEXT: pinsrd $1, %ecx, %xmm0 743 ; SSE41-NEXT: movq %rax, %rcx 744 ; SSE41-NEXT: shlq $61, %rcx 745 ; SSE41-NEXT: sarq $63, %rcx 746 ; SSE41-NEXT: pinsrd $2, %ecx, %xmm0 747 ; SSE41-NEXT: shlq $60, %rax 748 ; SSE41-NEXT: sarq $63, %rax 749 ; SSE41-NEXT: pinsrd $3, %eax, %xmm0 750 ; SSE41-NEXT: retq 751 ; 752 ; AVX-LABEL: load_sext_4i1_to_4i32: 753 ; AVX: # BB#0: # %entry 754 ; AVX-NEXT: movzbl (%rdi), %eax 755 ; AVX-NEXT: movq %rax, %rcx 756 ; AVX-NEXT: shlq $62, %rcx 757 ; AVX-NEXT: sarq $63, %rcx 758 ; AVX-NEXT: movq %rax, %rdx 759 ; AVX-NEXT: shlq $63, %rdx 760 ; AVX-NEXT: sarq $63, %rdx 761 ; AVX-NEXT: vmovd %edx, %xmm0 762 ; AVX-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 763 ; AVX-NEXT: movq %rax, %rcx 764 ; AVX-NEXT: shlq $61, %rcx 765 ; AVX-NEXT: sarq $63, %rcx 766 ; AVX-NEXT: vpinsrd $2, %ecx, %xmm0, %xmm0 767 ; AVX-NEXT: shlq $60, %rax 768 ; AVX-NEXT: sarq $63, %rax 769 ; AVX-NEXT: vpinsrd $3, %eax, %xmm0, %xmm0 770 ; AVX-NEXT: retq 771 ; 772 ; X32-SSE41-LABEL: load_sext_4i1_to_4i32: 773 ; X32-SSE41: # BB#0: # %entry 774 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 775 ; X32-SSE41-NEXT: movl (%eax), %eax 776 ; X32-SSE41-NEXT: movl %eax, %ecx 777 ; X32-SSE41-NEXT: shll $30, %ecx 778 ; X32-SSE41-NEXT: sarl $31, %ecx 779 ; X32-SSE41-NEXT: movl %eax, %edx 780 ; X32-SSE41-NEXT: shll $31, %edx 781 ; X32-SSE41-NEXT: sarl $31, %edx 782 ; X32-SSE41-NEXT: movd %edx, %xmm0 783 ; X32-SSE41-NEXT: pinsrd $1, %ecx, %xmm0 784 ; X32-SSE41-NEXT: movl %eax, %ecx 785 ; X32-SSE41-NEXT: shll $29, %ecx 786 ; X32-SSE41-NEXT: sarl $31, %ecx 787 ; X32-SSE41-NEXT: pinsrd $2, %ecx, %xmm0 788 ; X32-SSE41-NEXT: shll $28, %eax 789 ; X32-SSE41-NEXT: sarl $31, %eax 790 ; X32-SSE41-NEXT: pinsrd $3, %eax, %xmm0 791 ; X32-SSE41-NEXT: retl 792 entry: 793 %X = load <4 x i1>, <4 x i1>* %ptr 794 %Y = sext <4 x i1> %X to <4 x i32> 795 ret <4 x i32> %Y 796 } 797 798 define <4 x i32> @load_sext_4i8_to_4i32(<4 x i8> *%ptr) { 799 ; SSE2-LABEL: load_sext_4i8_to_4i32: 800 ; SSE2: # BB#0: # %entry 801 ; SSE2-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 802 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 803 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 804 ; SSE2-NEXT: psrad $24, %xmm0 805 ; SSE2-NEXT: retq 806 ; 807 ; SSSE3-LABEL: load_sext_4i8_to_4i32: 808 ; SSSE3: # BB#0: # %entry 809 ; SSSE3-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 810 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 811 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 812 ; SSSE3-NEXT: psrad $24, %xmm0 813 ; SSSE3-NEXT: retq 814 ; 815 ; SSE41-LABEL: load_sext_4i8_to_4i32: 816 ; SSE41: # BB#0: # %entry 817 ; SSE41-NEXT: pmovsxbd (%rdi), %xmm0 818 ; SSE41-NEXT: retq 819 ; 820 ; AVX-LABEL: load_sext_4i8_to_4i32: 821 ; AVX: # BB#0: # %entry 822 ; AVX-NEXT: vpmovsxbd (%rdi), %xmm0 823 ; AVX-NEXT: retq 824 ; 825 ; X32-SSE41-LABEL: load_sext_4i8_to_4i32: 826 ; X32-SSE41: # BB#0: # %entry 827 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 828 ; X32-SSE41-NEXT: pmovsxbd (%eax), %xmm0 829 ; X32-SSE41-NEXT: retl 830 entry: 831 %X = load <4 x i8>, <4 x i8>* %ptr 832 %Y = sext <4 x i8> %X to <4 x i32> 833 ret <4 x i32> %Y 834 } 835 836 define <4 x i64> @load_sext_4i1_to_4i64(<4 x i1> *%ptr) { 837 ; SSE2-LABEL: load_sext_4i1_to_4i64: 838 ; SSE2: # BB#0: # %entry 839 ; SSE2-NEXT: movzbl (%rdi), %eax 840 ; SSE2-NEXT: movl %eax, %ecx 841 ; SSE2-NEXT: shrl $3, %ecx 842 ; SSE2-NEXT: andl $1, %ecx 843 ; SSE2-NEXT: movd %ecx, %xmm0 844 ; SSE2-NEXT: movl %eax, %ecx 845 ; SSE2-NEXT: shrl %ecx 846 ; SSE2-NEXT: andl $1, %ecx 847 ; SSE2-NEXT: movd %ecx, %xmm1 848 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 849 ; SSE2-NEXT: movl %eax, %ecx 850 ; SSE2-NEXT: andl $1, %ecx 851 ; SSE2-NEXT: movd %ecx, %xmm2 852 ; SSE2-NEXT: shrl $2, %eax 853 ; SSE2-NEXT: andl $1, %eax 854 ; SSE2-NEXT: movd %eax, %xmm0 855 ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1] 856 ; SSE2-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1] 857 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,1,1,3] 858 ; SSE2-NEXT: psllq $63, %xmm0 859 ; SSE2-NEXT: psrad $31, %xmm0 860 ; SSE2-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 861 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm2[2,1,3,3] 862 ; SSE2-NEXT: psllq $63, %xmm1 863 ; SSE2-NEXT: psrad $31, %xmm1 864 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 865 ; SSE2-NEXT: retq 866 ; 867 ; SSSE3-LABEL: load_sext_4i1_to_4i64: 868 ; SSSE3: # BB#0: # %entry 869 ; SSSE3-NEXT: movzbl (%rdi), %eax 870 ; SSSE3-NEXT: movl %eax, %ecx 871 ; SSSE3-NEXT: shrl $3, %ecx 872 ; SSSE3-NEXT: andl $1, %ecx 873 ; SSSE3-NEXT: movd %ecx, %xmm0 874 ; SSSE3-NEXT: movl %eax, %ecx 875 ; SSSE3-NEXT: shrl %ecx 876 ; SSSE3-NEXT: andl $1, %ecx 877 ; SSSE3-NEXT: movd %ecx, %xmm1 878 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1] 879 ; SSSE3-NEXT: movl %eax, %ecx 880 ; SSSE3-NEXT: andl $1, %ecx 881 ; SSSE3-NEXT: movd %ecx, %xmm2 882 ; SSSE3-NEXT: shrl $2, %eax 883 ; SSSE3-NEXT: andl $1, %eax 884 ; SSSE3-NEXT: movd %eax, %xmm0 885 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1] 886 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1] 887 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm2[0,1,1,3] 888 ; SSSE3-NEXT: psllq $63, %xmm0 889 ; SSSE3-NEXT: psrad $31, %xmm0 890 ; SSSE3-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 891 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm2[2,1,3,3] 892 ; SSSE3-NEXT: psllq $63, %xmm1 893 ; SSSE3-NEXT: psrad $31, %xmm1 894 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 895 ; SSSE3-NEXT: retq 896 ; 897 ; SSE41-LABEL: load_sext_4i1_to_4i64: 898 ; SSE41: # BB#0: # %entry 899 ; SSE41-NEXT: movzbl (%rdi), %eax 900 ; SSE41-NEXT: movl %eax, %ecx 901 ; SSE41-NEXT: shrl %ecx 902 ; SSE41-NEXT: andl $1, %ecx 903 ; SSE41-NEXT: movl %eax, %edx 904 ; SSE41-NEXT: andl $1, %edx 905 ; SSE41-NEXT: movd %edx, %xmm1 906 ; SSE41-NEXT: pinsrd $1, %ecx, %xmm1 907 ; SSE41-NEXT: movl %eax, %ecx 908 ; SSE41-NEXT: shrl $2, %ecx 909 ; SSE41-NEXT: andl $1, %ecx 910 ; SSE41-NEXT: pinsrd $2, %ecx, %xmm1 911 ; SSE41-NEXT: shrl $3, %eax 912 ; SSE41-NEXT: andl $1, %eax 913 ; SSE41-NEXT: pinsrd $3, %eax, %xmm1 914 ; SSE41-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero 915 ; SSE41-NEXT: psllq $63, %xmm0 916 ; SSE41-NEXT: psrad $31, %xmm0 917 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 918 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,2,3,3] 919 ; SSE41-NEXT: psllq $63, %xmm1 920 ; SSE41-NEXT: psrad $31, %xmm1 921 ; SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 922 ; SSE41-NEXT: retq 923 ; 924 ; AVX1-LABEL: load_sext_4i1_to_4i64: 925 ; AVX1: # BB#0: # %entry 926 ; AVX1-NEXT: movzbl (%rdi), %eax 927 ; AVX1-NEXT: movq %rax, %rcx 928 ; AVX1-NEXT: shlq $62, %rcx 929 ; AVX1-NEXT: sarq $63, %rcx 930 ; AVX1-NEXT: movq %rax, %rdx 931 ; AVX1-NEXT: shlq $63, %rdx 932 ; AVX1-NEXT: sarq $63, %rdx 933 ; AVX1-NEXT: vmovd %edx, %xmm0 934 ; AVX1-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 935 ; AVX1-NEXT: movq %rax, %rcx 936 ; AVX1-NEXT: shlq $61, %rcx 937 ; AVX1-NEXT: sarq $63, %rcx 938 ; AVX1-NEXT: vpinsrd $2, %ecx, %xmm0, %xmm0 939 ; AVX1-NEXT: shlq $60, %rax 940 ; AVX1-NEXT: sarq $63, %rax 941 ; AVX1-NEXT: vpinsrd $3, %eax, %xmm0, %xmm0 942 ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm1 943 ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 944 ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm0 945 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 946 ; AVX1-NEXT: retq 947 ; 948 ; AVX2-LABEL: load_sext_4i1_to_4i64: 949 ; AVX2: # BB#0: # %entry 950 ; AVX2-NEXT: movzbl (%rdi), %eax 951 ; AVX2-NEXT: movq %rax, %rcx 952 ; AVX2-NEXT: shlq $60, %rcx 953 ; AVX2-NEXT: sarq $63, %rcx 954 ; AVX2-NEXT: vmovq %rcx, %xmm0 955 ; AVX2-NEXT: movq %rax, %rcx 956 ; AVX2-NEXT: shlq $61, %rcx 957 ; AVX2-NEXT: sarq $63, %rcx 958 ; AVX2-NEXT: vmovq %rcx, %xmm1 959 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0] 960 ; AVX2-NEXT: movq %rax, %rcx 961 ; AVX2-NEXT: shlq $62, %rcx 962 ; AVX2-NEXT: sarq $63, %rcx 963 ; AVX2-NEXT: vmovq %rcx, %xmm1 964 ; AVX2-NEXT: shlq $63, %rax 965 ; AVX2-NEXT: sarq $63, %rax 966 ; AVX2-NEXT: vmovq %rax, %xmm2 967 ; AVX2-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0] 968 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 969 ; AVX2-NEXT: retq 970 ; 971 ; X32-SSE41-LABEL: load_sext_4i1_to_4i64: 972 ; X32-SSE41: # BB#0: # %entry 973 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 974 ; X32-SSE41-NEXT: movzbl (%eax), %eax 975 ; X32-SSE41-NEXT: movl %eax, %ecx 976 ; X32-SSE41-NEXT: shrl %ecx 977 ; X32-SSE41-NEXT: andl $1, %ecx 978 ; X32-SSE41-NEXT: movl %eax, %edx 979 ; X32-SSE41-NEXT: andl $1, %edx 980 ; X32-SSE41-NEXT: movd %edx, %xmm1 981 ; X32-SSE41-NEXT: pinsrd $1, %ecx, %xmm1 982 ; X32-SSE41-NEXT: movl %eax, %ecx 983 ; X32-SSE41-NEXT: shrl $2, %ecx 984 ; X32-SSE41-NEXT: andl $1, %ecx 985 ; X32-SSE41-NEXT: pinsrd $2, %ecx, %xmm1 986 ; X32-SSE41-NEXT: shrl $3, %eax 987 ; X32-SSE41-NEXT: andl $1, %eax 988 ; X32-SSE41-NEXT: pinsrd $3, %eax, %xmm1 989 ; X32-SSE41-NEXT: pmovzxdq {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero 990 ; X32-SSE41-NEXT: psllq $63, %xmm0 991 ; X32-SSE41-NEXT: psrad $31, %xmm0 992 ; X32-SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[1,1,3,3] 993 ; X32-SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[2,2,3,3] 994 ; X32-SSE41-NEXT: psllq $63, %xmm1 995 ; X32-SSE41-NEXT: psrad $31, %xmm1 996 ; X32-SSE41-NEXT: pshufd {{.*#+}} xmm1 = xmm1[1,1,3,3] 997 ; X32-SSE41-NEXT: retl 998 entry: 999 %X = load <4 x i1>, <4 x i1>* %ptr 1000 %Y = sext <4 x i1> %X to <4 x i64> 1001 ret <4 x i64> %Y 1002 } 1003 1004 define <4 x i64> @load_sext_4i8_to_4i64(<4 x i8> *%ptr) { 1005 ; SSE2-LABEL: load_sext_4i8_to_4i64: 1006 ; SSE2: # BB#0: # %entry 1007 ; SSE2-NEXT: movsbq 1(%rdi), %rax 1008 ; SSE2-NEXT: movd %rax, %xmm1 1009 ; SSE2-NEXT: movsbq (%rdi), %rax 1010 ; SSE2-NEXT: movd %rax, %xmm0 1011 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1012 ; SSE2-NEXT: movsbq 3(%rdi), %rax 1013 ; SSE2-NEXT: movd %rax, %xmm2 1014 ; SSE2-NEXT: movsbq 2(%rdi), %rax 1015 ; SSE2-NEXT: movd %rax, %xmm1 1016 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0] 1017 ; SSE2-NEXT: retq 1018 ; 1019 ; SSSE3-LABEL: load_sext_4i8_to_4i64: 1020 ; SSSE3: # BB#0: # %entry 1021 ; SSSE3-NEXT: movsbq 1(%rdi), %rax 1022 ; SSSE3-NEXT: movd %rax, %xmm1 1023 ; SSSE3-NEXT: movsbq (%rdi), %rax 1024 ; SSSE3-NEXT: movd %rax, %xmm0 1025 ; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 1026 ; SSSE3-NEXT: movsbq 3(%rdi), %rax 1027 ; SSSE3-NEXT: movd %rax, %xmm2 1028 ; SSSE3-NEXT: movsbq 2(%rdi), %rax 1029 ; SSSE3-NEXT: movd %rax, %xmm1 1030 ; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0] 1031 ; SSSE3-NEXT: retq 1032 ; 1033 ; SSE41-LABEL: load_sext_4i8_to_4i64: 1034 ; SSE41: # BB#0: # %entry 1035 ; SSE41-NEXT: pmovsxbq (%rdi), %xmm0 1036 ; SSE41-NEXT: pmovsxbq 2(%rdi), %xmm1 1037 ; SSE41-NEXT: retq 1038 ; 1039 ; AVX1-LABEL: load_sext_4i8_to_4i64: 1040 ; AVX1: # BB#0: # %entry 1041 ; AVX1-NEXT: vpmovsxbd (%rdi), %xmm0 1042 ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm1 1043 ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 1044 ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm0 1045 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1046 ; AVX1-NEXT: retq 1047 ; 1048 ; AVX2-LABEL: load_sext_4i8_to_4i64: 1049 ; AVX2: # BB#0: # %entry 1050 ; AVX2-NEXT: vpmovsxbq (%rdi), %ymm0 1051 ; AVX2-NEXT: retq 1052 ; 1053 ; X32-SSE41-LABEL: load_sext_4i8_to_4i64: 1054 ; X32-SSE41: # BB#0: # %entry 1055 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 1056 ; X32-SSE41-NEXT: pmovsxbq (%eax), %xmm0 1057 ; X32-SSE41-NEXT: pmovsxbq 2(%eax), %xmm1 1058 ; X32-SSE41-NEXT: retl 1059 entry: 1060 %X = load <4 x i8>, <4 x i8>* %ptr 1061 %Y = sext <4 x i8> %X to <4 x i64> 1062 ret <4 x i64> %Y 1063 } 1064 1065 define <8 x i16> @load_sext_8i1_to_8i16(<8 x i1> *%ptr) { 1066 ; SSE2-LABEL: load_sext_8i1_to_8i16: 1067 ; SSE2: # BB#0: # %entry 1068 ; SSE2-NEXT: movsbq (%rdi), %rax 1069 ; SSE2-NEXT: movq %rax, %rcx 1070 ; SSE2-NEXT: shrq $7, %rcx 1071 ; SSE2-NEXT: movd %ecx, %xmm0 1072 ; SSE2-NEXT: movq %rax, %rcx 1073 ; SSE2-NEXT: shlq $60, %rcx 1074 ; SSE2-NEXT: sarq $63, %rcx 1075 ; SSE2-NEXT: movd %ecx, %xmm2 1076 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1077 ; SSE2-NEXT: movq %rax, %rcx 1078 ; SSE2-NEXT: shlq $58, %rcx 1079 ; SSE2-NEXT: sarq $63, %rcx 1080 ; SSE2-NEXT: movd %ecx, %xmm0 1081 ; SSE2-NEXT: movq %rax, %rcx 1082 ; SSE2-NEXT: shlq $62, %rcx 1083 ; SSE2-NEXT: sarq $63, %rcx 1084 ; SSE2-NEXT: movd %ecx, %xmm1 1085 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 1086 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1087 ; SSE2-NEXT: movq %rax, %rcx 1088 ; SSE2-NEXT: shlq $57, %rcx 1089 ; SSE2-NEXT: sarq $63, %rcx 1090 ; SSE2-NEXT: movd %ecx, %xmm0 1091 ; SSE2-NEXT: movq %rax, %rcx 1092 ; SSE2-NEXT: shlq $61, %rcx 1093 ; SSE2-NEXT: sarq $63, %rcx 1094 ; SSE2-NEXT: movd %ecx, %xmm2 1095 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1096 ; SSE2-NEXT: movq %rax, %rcx 1097 ; SSE2-NEXT: shlq $59, %rcx 1098 ; SSE2-NEXT: sarq $63, %rcx 1099 ; SSE2-NEXT: movd %ecx, %xmm3 1100 ; SSE2-NEXT: shlq $63, %rax 1101 ; SSE2-NEXT: sarq $63, %rax 1102 ; SSE2-NEXT: movd %eax, %xmm0 1103 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3] 1104 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 1105 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 1106 ; SSE2-NEXT: retq 1107 ; 1108 ; SSSE3-LABEL: load_sext_8i1_to_8i16: 1109 ; SSSE3: # BB#0: # %entry 1110 ; SSSE3-NEXT: movsbq (%rdi), %rax 1111 ; SSSE3-NEXT: movq %rax, %rcx 1112 ; SSSE3-NEXT: shrq $7, %rcx 1113 ; SSSE3-NEXT: movd %ecx, %xmm0 1114 ; SSSE3-NEXT: movq %rax, %rcx 1115 ; SSSE3-NEXT: shlq $60, %rcx 1116 ; SSSE3-NEXT: sarq $63, %rcx 1117 ; SSSE3-NEXT: movd %ecx, %xmm2 1118 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1119 ; SSSE3-NEXT: movq %rax, %rcx 1120 ; SSSE3-NEXT: shlq $58, %rcx 1121 ; SSSE3-NEXT: sarq $63, %rcx 1122 ; SSSE3-NEXT: movd %ecx, %xmm0 1123 ; SSSE3-NEXT: movq %rax, %rcx 1124 ; SSSE3-NEXT: shlq $62, %rcx 1125 ; SSSE3-NEXT: sarq $63, %rcx 1126 ; SSSE3-NEXT: movd %ecx, %xmm1 1127 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 1128 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1129 ; SSSE3-NEXT: movq %rax, %rcx 1130 ; SSSE3-NEXT: shlq $57, %rcx 1131 ; SSSE3-NEXT: sarq $63, %rcx 1132 ; SSSE3-NEXT: movd %ecx, %xmm0 1133 ; SSSE3-NEXT: movq %rax, %rcx 1134 ; SSSE3-NEXT: shlq $61, %rcx 1135 ; SSSE3-NEXT: sarq $63, %rcx 1136 ; SSSE3-NEXT: movd %ecx, %xmm2 1137 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1138 ; SSSE3-NEXT: movq %rax, %rcx 1139 ; SSSE3-NEXT: shlq $59, %rcx 1140 ; SSSE3-NEXT: sarq $63, %rcx 1141 ; SSSE3-NEXT: movd %ecx, %xmm3 1142 ; SSSE3-NEXT: shlq $63, %rax 1143 ; SSSE3-NEXT: sarq $63, %rax 1144 ; SSSE3-NEXT: movd %eax, %xmm0 1145 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3] 1146 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 1147 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 1148 ; SSSE3-NEXT: retq 1149 ; 1150 ; SSE41-LABEL: load_sext_8i1_to_8i16: 1151 ; SSE41: # BB#0: # %entry 1152 ; SSE41-NEXT: movsbq (%rdi), %rax 1153 ; SSE41-NEXT: movq %rax, %rcx 1154 ; SSE41-NEXT: shlq $62, %rcx 1155 ; SSE41-NEXT: sarq $63, %rcx 1156 ; SSE41-NEXT: movq %rax, %rdx 1157 ; SSE41-NEXT: shlq $63, %rdx 1158 ; SSE41-NEXT: sarq $63, %rdx 1159 ; SSE41-NEXT: movd %edx, %xmm0 1160 ; SSE41-NEXT: pinsrw $1, %ecx, %xmm0 1161 ; SSE41-NEXT: movq %rax, %rcx 1162 ; SSE41-NEXT: shlq $61, %rcx 1163 ; SSE41-NEXT: sarq $63, %rcx 1164 ; SSE41-NEXT: pinsrw $2, %ecx, %xmm0 1165 ; SSE41-NEXT: movq %rax, %rcx 1166 ; SSE41-NEXT: shlq $60, %rcx 1167 ; SSE41-NEXT: sarq $63, %rcx 1168 ; SSE41-NEXT: pinsrw $3, %ecx, %xmm0 1169 ; SSE41-NEXT: movq %rax, %rcx 1170 ; SSE41-NEXT: shlq $59, %rcx 1171 ; SSE41-NEXT: sarq $63, %rcx 1172 ; SSE41-NEXT: pinsrw $4, %ecx, %xmm0 1173 ; SSE41-NEXT: movq %rax, %rcx 1174 ; SSE41-NEXT: shlq $58, %rcx 1175 ; SSE41-NEXT: sarq $63, %rcx 1176 ; SSE41-NEXT: pinsrw $5, %ecx, %xmm0 1177 ; SSE41-NEXT: movq %rax, %rcx 1178 ; SSE41-NEXT: shlq $57, %rcx 1179 ; SSE41-NEXT: sarq $63, %rcx 1180 ; SSE41-NEXT: pinsrw $6, %ecx, %xmm0 1181 ; SSE41-NEXT: shrq $7, %rax 1182 ; SSE41-NEXT: pinsrw $7, %eax, %xmm0 1183 ; SSE41-NEXT: retq 1184 ; 1185 ; AVX-LABEL: load_sext_8i1_to_8i16: 1186 ; AVX: # BB#0: # %entry 1187 ; AVX-NEXT: movsbq (%rdi), %rax 1188 ; AVX-NEXT: movq %rax, %rcx 1189 ; AVX-NEXT: shlq $62, %rcx 1190 ; AVX-NEXT: sarq $63, %rcx 1191 ; AVX-NEXT: movq %rax, %rdx 1192 ; AVX-NEXT: shlq $63, %rdx 1193 ; AVX-NEXT: sarq $63, %rdx 1194 ; AVX-NEXT: vmovd %edx, %xmm0 1195 ; AVX-NEXT: vpinsrw $1, %ecx, %xmm0, %xmm0 1196 ; AVX-NEXT: movq %rax, %rcx 1197 ; AVX-NEXT: shlq $61, %rcx 1198 ; AVX-NEXT: sarq $63, %rcx 1199 ; AVX-NEXT: vpinsrw $2, %ecx, %xmm0, %xmm0 1200 ; AVX-NEXT: movq %rax, %rcx 1201 ; AVX-NEXT: shlq $60, %rcx 1202 ; AVX-NEXT: sarq $63, %rcx 1203 ; AVX-NEXT: vpinsrw $3, %ecx, %xmm0, %xmm0 1204 ; AVX-NEXT: movq %rax, %rcx 1205 ; AVX-NEXT: shlq $59, %rcx 1206 ; AVX-NEXT: sarq $63, %rcx 1207 ; AVX-NEXT: vpinsrw $4, %ecx, %xmm0, %xmm0 1208 ; AVX-NEXT: movq %rax, %rcx 1209 ; AVX-NEXT: shlq $58, %rcx 1210 ; AVX-NEXT: sarq $63, %rcx 1211 ; AVX-NEXT: vpinsrw $5, %ecx, %xmm0, %xmm0 1212 ; AVX-NEXT: movq %rax, %rcx 1213 ; AVX-NEXT: shlq $57, %rcx 1214 ; AVX-NEXT: sarq $63, %rcx 1215 ; AVX-NEXT: vpinsrw $6, %ecx, %xmm0, %xmm0 1216 ; AVX-NEXT: shrq $7, %rax 1217 ; AVX-NEXT: vpinsrw $7, %eax, %xmm0, %xmm0 1218 ; AVX-NEXT: retq 1219 ; 1220 ; X32-SSE41-LABEL: load_sext_8i1_to_8i16: 1221 ; X32-SSE41: # BB#0: # %entry 1222 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 1223 ; X32-SSE41-NEXT: movsbl (%eax), %eax 1224 ; X32-SSE41-NEXT: movl %eax, %ecx 1225 ; X32-SSE41-NEXT: shll $30, %ecx 1226 ; X32-SSE41-NEXT: sarl $31, %ecx 1227 ; X32-SSE41-NEXT: movl %eax, %edx 1228 ; X32-SSE41-NEXT: shll $31, %edx 1229 ; X32-SSE41-NEXT: sarl $31, %edx 1230 ; X32-SSE41-NEXT: movd %edx, %xmm0 1231 ; X32-SSE41-NEXT: pinsrw $1, %ecx, %xmm0 1232 ; X32-SSE41-NEXT: movl %eax, %ecx 1233 ; X32-SSE41-NEXT: shll $29, %ecx 1234 ; X32-SSE41-NEXT: sarl $31, %ecx 1235 ; X32-SSE41-NEXT: pinsrw $2, %ecx, %xmm0 1236 ; X32-SSE41-NEXT: movl %eax, %ecx 1237 ; X32-SSE41-NEXT: shll $28, %ecx 1238 ; X32-SSE41-NEXT: sarl $31, %ecx 1239 ; X32-SSE41-NEXT: pinsrw $3, %ecx, %xmm0 1240 ; X32-SSE41-NEXT: movl %eax, %ecx 1241 ; X32-SSE41-NEXT: shll $27, %ecx 1242 ; X32-SSE41-NEXT: sarl $31, %ecx 1243 ; X32-SSE41-NEXT: pinsrw $4, %ecx, %xmm0 1244 ; X32-SSE41-NEXT: movl %eax, %ecx 1245 ; X32-SSE41-NEXT: shll $26, %ecx 1246 ; X32-SSE41-NEXT: sarl $31, %ecx 1247 ; X32-SSE41-NEXT: pinsrw $5, %ecx, %xmm0 1248 ; X32-SSE41-NEXT: movl %eax, %ecx 1249 ; X32-SSE41-NEXT: shll $25, %ecx 1250 ; X32-SSE41-NEXT: sarl $31, %ecx 1251 ; X32-SSE41-NEXT: pinsrw $6, %ecx, %xmm0 1252 ; X32-SSE41-NEXT: shrl $7, %eax 1253 ; X32-SSE41-NEXT: pinsrw $7, %eax, %xmm0 1254 ; X32-SSE41-NEXT: retl 1255 entry: 1256 %X = load <8 x i1>, <8 x i1>* %ptr 1257 %Y = sext <8 x i1> %X to <8 x i16> 1258 ret <8 x i16> %Y 1259 } 1260 1261 define <8 x i16> @load_sext_8i8_to_8i16(<8 x i8> *%ptr) { 1262 ; SSE2-LABEL: load_sext_8i8_to_8i16: 1263 ; SSE2: # BB#0: # %entry 1264 ; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 1265 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1266 ; SSE2-NEXT: psraw $8, %xmm0 1267 ; SSE2-NEXT: retq 1268 ; 1269 ; SSSE3-LABEL: load_sext_8i8_to_8i16: 1270 ; SSSE3: # BB#0: # %entry 1271 ; SSSE3-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 1272 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1273 ; SSSE3-NEXT: psraw $8, %xmm0 1274 ; SSSE3-NEXT: retq 1275 ; 1276 ; SSE41-LABEL: load_sext_8i8_to_8i16: 1277 ; SSE41: # BB#0: # %entry 1278 ; SSE41-NEXT: pmovsxbw (%rdi), %xmm0 1279 ; SSE41-NEXT: retq 1280 ; 1281 ; AVX-LABEL: load_sext_8i8_to_8i16: 1282 ; AVX: # BB#0: # %entry 1283 ; AVX-NEXT: vpmovsxbw (%rdi), %xmm0 1284 ; AVX-NEXT: retq 1285 ; 1286 ; X32-SSE41-LABEL: load_sext_8i8_to_8i16: 1287 ; X32-SSE41: # BB#0: # %entry 1288 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 1289 ; X32-SSE41-NEXT: pmovsxbw (%eax), %xmm0 1290 ; X32-SSE41-NEXT: retl 1291 entry: 1292 %X = load <8 x i8>, <8 x i8>* %ptr 1293 %Y = sext <8 x i8> %X to <8 x i16> 1294 ret <8 x i16> %Y 1295 } 1296 1297 define <8 x i32> @load_sext_8i1_to_8i32(<8 x i1> *%ptr) { 1298 ; SSE2-LABEL: load_sext_8i1_to_8i32: 1299 ; SSE2: # BB#0: # %entry 1300 ; SSE2-NEXT: movzbl (%rdi), %eax 1301 ; SSE2-NEXT: movl %eax, %ecx 1302 ; SSE2-NEXT: shrl $6, %ecx 1303 ; SSE2-NEXT: andl $1, %ecx 1304 ; SSE2-NEXT: movd %ecx, %xmm0 1305 ; SSE2-NEXT: movl %eax, %ecx 1306 ; SSE2-NEXT: shrl $2, %ecx 1307 ; SSE2-NEXT: andl $1, %ecx 1308 ; SSE2-NEXT: movd %ecx, %xmm2 1309 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1310 ; SSE2-NEXT: movl %eax, %ecx 1311 ; SSE2-NEXT: andl $1, %ecx 1312 ; SSE2-NEXT: movd %ecx, %xmm1 1313 ; SSE2-NEXT: movl %eax, %ecx 1314 ; SSE2-NEXT: shrl $4, %ecx 1315 ; SSE2-NEXT: andl $1, %ecx 1316 ; SSE2-NEXT: movd %ecx, %xmm0 1317 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 1318 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1319 ; SSE2-NEXT: movl %eax, %ecx 1320 ; SSE2-NEXT: shrl $5, %ecx 1321 ; SSE2-NEXT: andl $1, %ecx 1322 ; SSE2-NEXT: movd %ecx, %xmm0 1323 ; SSE2-NEXT: movl %eax, %ecx 1324 ; SSE2-NEXT: shrl %ecx 1325 ; SSE2-NEXT: andl $1, %ecx 1326 ; SSE2-NEXT: movd %ecx, %xmm2 1327 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1328 ; SSE2-NEXT: movl %eax, %ecx 1329 ; SSE2-NEXT: shrl $3, %ecx 1330 ; SSE2-NEXT: andl $1, %ecx 1331 ; SSE2-NEXT: movd %ecx, %xmm0 1332 ; SSE2-NEXT: shrl $7, %eax 1333 ; SSE2-NEXT: movzwl %ax, %eax 1334 ; SSE2-NEXT: movd %eax, %xmm3 1335 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3] 1336 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1337 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1338 ; SSE2-NEXT: movdqa %xmm1, %xmm0 1339 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 1340 ; SSE2-NEXT: pslld $31, %xmm0 1341 ; SSE2-NEXT: psrad $31, %xmm0 1342 ; SSE2-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7] 1343 ; SSE2-NEXT: pslld $31, %xmm1 1344 ; SSE2-NEXT: psrad $31, %xmm1 1345 ; SSE2-NEXT: retq 1346 ; 1347 ; SSSE3-LABEL: load_sext_8i1_to_8i32: 1348 ; SSSE3: # BB#0: # %entry 1349 ; SSSE3-NEXT: movzbl (%rdi), %eax 1350 ; SSSE3-NEXT: movl %eax, %ecx 1351 ; SSSE3-NEXT: shrl $6, %ecx 1352 ; SSSE3-NEXT: andl $1, %ecx 1353 ; SSSE3-NEXT: movd %ecx, %xmm0 1354 ; SSSE3-NEXT: movl %eax, %ecx 1355 ; SSSE3-NEXT: shrl $2, %ecx 1356 ; SSSE3-NEXT: andl $1, %ecx 1357 ; SSSE3-NEXT: movd %ecx, %xmm2 1358 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1359 ; SSSE3-NEXT: movl %eax, %ecx 1360 ; SSSE3-NEXT: andl $1, %ecx 1361 ; SSSE3-NEXT: movd %ecx, %xmm1 1362 ; SSSE3-NEXT: movl %eax, %ecx 1363 ; SSSE3-NEXT: shrl $4, %ecx 1364 ; SSSE3-NEXT: andl $1, %ecx 1365 ; SSSE3-NEXT: movd %ecx, %xmm0 1366 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 1367 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1368 ; SSSE3-NEXT: movl %eax, %ecx 1369 ; SSSE3-NEXT: shrl $5, %ecx 1370 ; SSSE3-NEXT: andl $1, %ecx 1371 ; SSSE3-NEXT: movd %ecx, %xmm0 1372 ; SSSE3-NEXT: movl %eax, %ecx 1373 ; SSSE3-NEXT: shrl %ecx 1374 ; SSSE3-NEXT: andl $1, %ecx 1375 ; SSSE3-NEXT: movd %ecx, %xmm2 1376 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1377 ; SSSE3-NEXT: movl %eax, %ecx 1378 ; SSSE3-NEXT: shrl $3, %ecx 1379 ; SSSE3-NEXT: andl $1, %ecx 1380 ; SSSE3-NEXT: movd %ecx, %xmm0 1381 ; SSSE3-NEXT: shrl $7, %eax 1382 ; SSSE3-NEXT: movzwl %ax, %eax 1383 ; SSSE3-NEXT: movd %eax, %xmm3 1384 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3] 1385 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1386 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1387 ; SSSE3-NEXT: movdqa %xmm1, %xmm0 1388 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 1389 ; SSSE3-NEXT: pslld $31, %xmm0 1390 ; SSSE3-NEXT: psrad $31, %xmm0 1391 ; SSSE3-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7] 1392 ; SSSE3-NEXT: pslld $31, %xmm1 1393 ; SSSE3-NEXT: psrad $31, %xmm1 1394 ; SSSE3-NEXT: retq 1395 ; 1396 ; SSE41-LABEL: load_sext_8i1_to_8i32: 1397 ; SSE41: # BB#0: # %entry 1398 ; SSE41-NEXT: movzbl (%rdi), %eax 1399 ; SSE41-NEXT: movl %eax, %ecx 1400 ; SSE41-NEXT: shrl %ecx 1401 ; SSE41-NEXT: andl $1, %ecx 1402 ; SSE41-NEXT: movl %eax, %edx 1403 ; SSE41-NEXT: andl $1, %edx 1404 ; SSE41-NEXT: movd %edx, %xmm1 1405 ; SSE41-NEXT: pinsrw $1, %ecx, %xmm1 1406 ; SSE41-NEXT: movl %eax, %ecx 1407 ; SSE41-NEXT: shrl $2, %ecx 1408 ; SSE41-NEXT: andl $1, %ecx 1409 ; SSE41-NEXT: pinsrw $2, %ecx, %xmm1 1410 ; SSE41-NEXT: movl %eax, %ecx 1411 ; SSE41-NEXT: shrl $3, %ecx 1412 ; SSE41-NEXT: andl $1, %ecx 1413 ; SSE41-NEXT: pinsrw $3, %ecx, %xmm1 1414 ; SSE41-NEXT: movl %eax, %ecx 1415 ; SSE41-NEXT: shrl $4, %ecx 1416 ; SSE41-NEXT: andl $1, %ecx 1417 ; SSE41-NEXT: pinsrw $4, %ecx, %xmm1 1418 ; SSE41-NEXT: movl %eax, %ecx 1419 ; SSE41-NEXT: shrl $5, %ecx 1420 ; SSE41-NEXT: andl $1, %ecx 1421 ; SSE41-NEXT: pinsrw $5, %ecx, %xmm1 1422 ; SSE41-NEXT: movl %eax, %ecx 1423 ; SSE41-NEXT: shrl $6, %ecx 1424 ; SSE41-NEXT: andl $1, %ecx 1425 ; SSE41-NEXT: pinsrw $6, %ecx, %xmm1 1426 ; SSE41-NEXT: shrl $7, %eax 1427 ; SSE41-NEXT: movzwl %ax, %eax 1428 ; SSE41-NEXT: pinsrw $7, %eax, %xmm1 1429 ; SSE41-NEXT: pmovzxwd {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero 1430 ; SSE41-NEXT: pslld $31, %xmm0 1431 ; SSE41-NEXT: psrad $31, %xmm0 1432 ; SSE41-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7] 1433 ; SSE41-NEXT: pslld $31, %xmm1 1434 ; SSE41-NEXT: psrad $31, %xmm1 1435 ; SSE41-NEXT: retq 1436 ; 1437 ; AVX1-LABEL: load_sext_8i1_to_8i32: 1438 ; AVX1: # BB#0: # %entry 1439 ; AVX1-NEXT: movsbq (%rdi), %rax 1440 ; AVX1-NEXT: movq %rax, %rcx 1441 ; AVX1-NEXT: shlq $58, %rcx 1442 ; AVX1-NEXT: sarq $63, %rcx 1443 ; AVX1-NEXT: movq %rax, %rdx 1444 ; AVX1-NEXT: shlq $59, %rdx 1445 ; AVX1-NEXT: sarq $63, %rdx 1446 ; AVX1-NEXT: vmovd %edx, %xmm0 1447 ; AVX1-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 1448 ; AVX1-NEXT: movq %rax, %rcx 1449 ; AVX1-NEXT: shlq $57, %rcx 1450 ; AVX1-NEXT: sarq $63, %rcx 1451 ; AVX1-NEXT: vpinsrd $2, %ecx, %xmm0, %xmm0 1452 ; AVX1-NEXT: movq %rax, %rcx 1453 ; AVX1-NEXT: shrq $7, %rcx 1454 ; AVX1-NEXT: vpinsrd $3, %ecx, %xmm0, %xmm0 1455 ; AVX1-NEXT: movq %rax, %rcx 1456 ; AVX1-NEXT: shlq $62, %rcx 1457 ; AVX1-NEXT: sarq $63, %rcx 1458 ; AVX1-NEXT: movq %rax, %rdx 1459 ; AVX1-NEXT: shlq $63, %rdx 1460 ; AVX1-NEXT: sarq $63, %rdx 1461 ; AVX1-NEXT: vmovd %edx, %xmm1 1462 ; AVX1-NEXT: vpinsrd $1, %ecx, %xmm1, %xmm1 1463 ; AVX1-NEXT: movq %rax, %rcx 1464 ; AVX1-NEXT: shlq $61, %rcx 1465 ; AVX1-NEXT: sarq $63, %rcx 1466 ; AVX1-NEXT: vpinsrd $2, %ecx, %xmm1, %xmm1 1467 ; AVX1-NEXT: shlq $60, %rax 1468 ; AVX1-NEXT: sarq $63, %rax 1469 ; AVX1-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1 1470 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1471 ; AVX1-NEXT: retq 1472 ; 1473 ; AVX2-LABEL: load_sext_8i1_to_8i32: 1474 ; AVX2: # BB#0: # %entry 1475 ; AVX2-NEXT: movsbq (%rdi), %rax 1476 ; AVX2-NEXT: movq %rax, %rcx 1477 ; AVX2-NEXT: shlq $58, %rcx 1478 ; AVX2-NEXT: sarq $63, %rcx 1479 ; AVX2-NEXT: movq %rax, %rdx 1480 ; AVX2-NEXT: shlq $59, %rdx 1481 ; AVX2-NEXT: sarq $63, %rdx 1482 ; AVX2-NEXT: vmovd %edx, %xmm0 1483 ; AVX2-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 1484 ; AVX2-NEXT: movq %rax, %rcx 1485 ; AVX2-NEXT: shlq $57, %rcx 1486 ; AVX2-NEXT: sarq $63, %rcx 1487 ; AVX2-NEXT: vpinsrd $2, %ecx, %xmm0, %xmm0 1488 ; AVX2-NEXT: movq %rax, %rcx 1489 ; AVX2-NEXT: shrq $7, %rcx 1490 ; AVX2-NEXT: vpinsrd $3, %ecx, %xmm0, %xmm0 1491 ; AVX2-NEXT: movq %rax, %rcx 1492 ; AVX2-NEXT: shlq $62, %rcx 1493 ; AVX2-NEXT: sarq $63, %rcx 1494 ; AVX2-NEXT: movq %rax, %rdx 1495 ; AVX2-NEXT: shlq $63, %rdx 1496 ; AVX2-NEXT: sarq $63, %rdx 1497 ; AVX2-NEXT: vmovd %edx, %xmm1 1498 ; AVX2-NEXT: vpinsrd $1, %ecx, %xmm1, %xmm1 1499 ; AVX2-NEXT: movq %rax, %rcx 1500 ; AVX2-NEXT: shlq $61, %rcx 1501 ; AVX2-NEXT: sarq $63, %rcx 1502 ; AVX2-NEXT: vpinsrd $2, %ecx, %xmm1, %xmm1 1503 ; AVX2-NEXT: shlq $60, %rax 1504 ; AVX2-NEXT: sarq $63, %rax 1505 ; AVX2-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1 1506 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 1507 ; AVX2-NEXT: retq 1508 ; 1509 ; X32-SSE41-LABEL: load_sext_8i1_to_8i32: 1510 ; X32-SSE41: # BB#0: # %entry 1511 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 1512 ; X32-SSE41-NEXT: movzbl (%eax), %eax 1513 ; X32-SSE41-NEXT: movl %eax, %ecx 1514 ; X32-SSE41-NEXT: shrl %ecx 1515 ; X32-SSE41-NEXT: andl $1, %ecx 1516 ; X32-SSE41-NEXT: movl %eax, %edx 1517 ; X32-SSE41-NEXT: andl $1, %edx 1518 ; X32-SSE41-NEXT: movd %edx, %xmm1 1519 ; X32-SSE41-NEXT: pinsrw $1, %ecx, %xmm1 1520 ; X32-SSE41-NEXT: movl %eax, %ecx 1521 ; X32-SSE41-NEXT: shrl $2, %ecx 1522 ; X32-SSE41-NEXT: andl $1, %ecx 1523 ; X32-SSE41-NEXT: pinsrw $2, %ecx, %xmm1 1524 ; X32-SSE41-NEXT: movl %eax, %ecx 1525 ; X32-SSE41-NEXT: shrl $3, %ecx 1526 ; X32-SSE41-NEXT: andl $1, %ecx 1527 ; X32-SSE41-NEXT: pinsrw $3, %ecx, %xmm1 1528 ; X32-SSE41-NEXT: movl %eax, %ecx 1529 ; X32-SSE41-NEXT: shrl $4, %ecx 1530 ; X32-SSE41-NEXT: andl $1, %ecx 1531 ; X32-SSE41-NEXT: pinsrw $4, %ecx, %xmm1 1532 ; X32-SSE41-NEXT: movl %eax, %ecx 1533 ; X32-SSE41-NEXT: shrl $5, %ecx 1534 ; X32-SSE41-NEXT: andl $1, %ecx 1535 ; X32-SSE41-NEXT: pinsrw $5, %ecx, %xmm1 1536 ; X32-SSE41-NEXT: movl %eax, %ecx 1537 ; X32-SSE41-NEXT: shrl $6, %ecx 1538 ; X32-SSE41-NEXT: andl $1, %ecx 1539 ; X32-SSE41-NEXT: pinsrw $6, %ecx, %xmm1 1540 ; X32-SSE41-NEXT: shrl $7, %eax 1541 ; X32-SSE41-NEXT: pinsrw $7, %eax, %xmm1 1542 ; X32-SSE41-NEXT: pmovzxwd {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero 1543 ; X32-SSE41-NEXT: pslld $31, %xmm0 1544 ; X32-SSE41-NEXT: psrad $31, %xmm0 1545 ; X32-SSE41-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7] 1546 ; X32-SSE41-NEXT: pslld $31, %xmm1 1547 ; X32-SSE41-NEXT: psrad $31, %xmm1 1548 ; X32-SSE41-NEXT: retl 1549 entry: 1550 %X = load <8 x i1>, <8 x i1>* %ptr 1551 %Y = sext <8 x i1> %X to <8 x i32> 1552 ret <8 x i32> %Y 1553 } 1554 1555 define <8 x i32> @load_sext_8i8_to_8i32(<8 x i8> *%ptr) { 1556 ; SSE2-LABEL: load_sext_8i8_to_8i32: 1557 ; SSE2: # BB#0: # %entry 1558 ; SSE2-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 1559 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1560 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 1561 ; SSE2-NEXT: psrad $24, %xmm0 1562 ; SSE2-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero 1563 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1564 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3] 1565 ; SSE2-NEXT: psrad $24, %xmm1 1566 ; SSE2-NEXT: retq 1567 ; 1568 ; SSSE3-LABEL: load_sext_8i8_to_8i32: 1569 ; SSSE3: # BB#0: # %entry 1570 ; SSSE3-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 1571 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1572 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 1573 ; SSSE3-NEXT: psrad $24, %xmm0 1574 ; SSSE3-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero 1575 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1576 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3] 1577 ; SSSE3-NEXT: psrad $24, %xmm1 1578 ; SSSE3-NEXT: retq 1579 ; 1580 ; SSE41-LABEL: load_sext_8i8_to_8i32: 1581 ; SSE41: # BB#0: # %entry 1582 ; SSE41-NEXT: pmovsxbd (%rdi), %xmm0 1583 ; SSE41-NEXT: pmovsxbd 4(%rdi), %xmm1 1584 ; SSE41-NEXT: retq 1585 ; 1586 ; AVX1-LABEL: load_sext_8i8_to_8i32: 1587 ; AVX1: # BB#0: # %entry 1588 ; AVX1-NEXT: vpmovsxbw (%rdi), %xmm0 1589 ; AVX1-NEXT: vpmovsxwd %xmm0, %xmm1 1590 ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 1591 ; AVX1-NEXT: vpmovsxwd %xmm0, %xmm0 1592 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1593 ; AVX1-NEXT: retq 1594 ; 1595 ; AVX2-LABEL: load_sext_8i8_to_8i32: 1596 ; AVX2: # BB#0: # %entry 1597 ; AVX2-NEXT: vpmovsxbd (%rdi), %ymm0 1598 ; AVX2-NEXT: retq 1599 ; 1600 ; X32-SSE41-LABEL: load_sext_8i8_to_8i32: 1601 ; X32-SSE41: # BB#0: # %entry 1602 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 1603 ; X32-SSE41-NEXT: pmovsxbd (%eax), %xmm0 1604 ; X32-SSE41-NEXT: pmovsxbd 4(%eax), %xmm1 1605 ; X32-SSE41-NEXT: retl 1606 entry: 1607 %X = load <8 x i8>, <8 x i8>* %ptr 1608 %Y = sext <8 x i8> %X to <8 x i32> 1609 ret <8 x i32> %Y 1610 } 1611 1612 define <16 x i8> @load_sext_16i1_to_16i8(<16 x i1> *%ptr) nounwind readnone { 1613 ; SSE2-LABEL: load_sext_16i1_to_16i8: 1614 ; SSE2: # BB#0: # %entry 1615 ; SSE2-NEXT: pushq %rbp 1616 ; SSE2-NEXT: pushq %r15 1617 ; SSE2-NEXT: pushq %r14 1618 ; SSE2-NEXT: pushq %r13 1619 ; SSE2-NEXT: pushq %r12 1620 ; SSE2-NEXT: pushq %rbx 1621 ; SSE2-NEXT: movswq (%rdi), %rax 1622 ; SSE2-NEXT: movq %rax, %r8 1623 ; SSE2-NEXT: movq %rax, %r9 1624 ; SSE2-NEXT: movq %rax, %r10 1625 ; SSE2-NEXT: movq %rax, %r11 1626 ; SSE2-NEXT: movq %rax, %r14 1627 ; SSE2-NEXT: movq %rax, %r15 1628 ; SSE2-NEXT: movq %rax, %r12 1629 ; SSE2-NEXT: movq %rax, %r13 1630 ; SSE2-NEXT: movq %rax, %rbx 1631 ; SSE2-NEXT: movq %rax, %rcx 1632 ; SSE2-NEXT: movq %rax, %rdx 1633 ; SSE2-NEXT: movq %rax, %rsi 1634 ; SSE2-NEXT: movq %rax, %rdi 1635 ; SSE2-NEXT: movq %rax, %rbp 1636 ; SSE2-NEXT: shlq $49, %rbp 1637 ; SSE2-NEXT: sarq $63, %rbp 1638 ; SSE2-NEXT: movd %ebp, %xmm0 1639 ; SSE2-NEXT: movq %rax, %rbp 1640 ; SSE2-NEXT: movsbq %al, %rax 1641 ; SSE2-NEXT: shlq $57, %r8 1642 ; SSE2-NEXT: sarq $63, %r8 1643 ; SSE2-NEXT: movd %r8d, %xmm1 1644 ; SSE2-NEXT: shlq $53, %r9 1645 ; SSE2-NEXT: sarq $63, %r9 1646 ; SSE2-NEXT: movd %r9d, %xmm2 1647 ; SSE2-NEXT: shlq $61, %r10 1648 ; SSE2-NEXT: sarq $63, %r10 1649 ; SSE2-NEXT: movd %r10d, %xmm3 1650 ; SSE2-NEXT: shlq $51, %r11 1651 ; SSE2-NEXT: sarq $63, %r11 1652 ; SSE2-NEXT: movd %r11d, %xmm4 1653 ; 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] 1654 ; SSE2-NEXT: shlq $59, %r14 1655 ; SSE2-NEXT: sarq $63, %r14 1656 ; SSE2-NEXT: movd %r14d, %xmm5 1657 ; 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] 1658 ; SSE2-NEXT: shlq $55, %r15 1659 ; SSE2-NEXT: sarq $63, %r15 1660 ; SSE2-NEXT: movd %r15d, %xmm2 1661 ; 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] 1662 ; SSE2-NEXT: shlq $63, %r12 1663 ; SSE2-NEXT: sarq $63, %r12 1664 ; SSE2-NEXT: movd %r12d, %xmm0 1665 ; 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] 1666 ; SSE2-NEXT: shlq $50, %r13 1667 ; SSE2-NEXT: sarq $63, %r13 1668 ; SSE2-NEXT: movd %r13d, %xmm1 1669 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7] 1670 ; SSE2-NEXT: shlq $58, %rbx 1671 ; SSE2-NEXT: sarq $63, %rbx 1672 ; SSE2-NEXT: movd %ebx, %xmm2 1673 ; 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] 1674 ; SSE2-NEXT: shlq $54, %rcx 1675 ; SSE2-NEXT: sarq $63, %rcx 1676 ; SSE2-NEXT: movd %ecx, %xmm4 1677 ; 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] 1678 ; SSE2-NEXT: shlq $62, %rdx 1679 ; SSE2-NEXT: sarq $63, %rdx 1680 ; SSE2-NEXT: movd %edx, %xmm3 1681 ; 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] 1682 ; SSE2-NEXT: shlq $52, %rsi 1683 ; SSE2-NEXT: sarq $63, %rsi 1684 ; SSE2-NEXT: movd %esi, %xmm1 1685 ; 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] 1686 ; SSE2-NEXT: shlq $60, %rdi 1687 ; SSE2-NEXT: sarq $63, %rdi 1688 ; SSE2-NEXT: movd %edi, %xmm4 1689 ; 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] 1690 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1],xmm4[2],xmm1[2],xmm4[3],xmm1[3],xmm4[4],xmm1[4],xmm4[5],xmm1[5],xmm4[6],xmm1[6],xmm4[7],xmm1[7] 1691 ; SSE2-NEXT: shrq $15, %rbp 1692 ; SSE2-NEXT: movd %ebp, %xmm1 1693 ; SSE2-NEXT: shrq $7, %rax 1694 ; SSE2-NEXT: movd %eax, %xmm2 1695 ; 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] 1696 ; 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] 1697 ; 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] 1698 ; 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] 1699 ; SSE2-NEXT: popq %rbx 1700 ; SSE2-NEXT: popq %r12 1701 ; SSE2-NEXT: popq %r13 1702 ; SSE2-NEXT: popq %r14 1703 ; SSE2-NEXT: popq %r15 1704 ; SSE2-NEXT: popq %rbp 1705 ; SSE2-NEXT: retq 1706 ; 1707 ; SSSE3-LABEL: load_sext_16i1_to_16i8: 1708 ; SSSE3: # BB#0: # %entry 1709 ; SSSE3-NEXT: pushq %rbp 1710 ; SSSE3-NEXT: pushq %r15 1711 ; SSSE3-NEXT: pushq %r14 1712 ; SSSE3-NEXT: pushq %r13 1713 ; SSSE3-NEXT: pushq %r12 1714 ; SSSE3-NEXT: pushq %rbx 1715 ; SSSE3-NEXT: movswq (%rdi), %rax 1716 ; SSSE3-NEXT: movq %rax, %r8 1717 ; SSSE3-NEXT: movq %rax, %r9 1718 ; SSSE3-NEXT: movq %rax, %r10 1719 ; SSSE3-NEXT: movq %rax, %r11 1720 ; SSSE3-NEXT: movq %rax, %r14 1721 ; SSSE3-NEXT: movq %rax, %r15 1722 ; SSSE3-NEXT: movq %rax, %r12 1723 ; SSSE3-NEXT: movq %rax, %r13 1724 ; SSSE3-NEXT: movq %rax, %rbx 1725 ; SSSE3-NEXT: movq %rax, %rcx 1726 ; SSSE3-NEXT: movq %rax, %rdx 1727 ; SSSE3-NEXT: movq %rax, %rsi 1728 ; SSSE3-NEXT: movq %rax, %rdi 1729 ; SSSE3-NEXT: movq %rax, %rbp 1730 ; SSSE3-NEXT: shlq $49, %rbp 1731 ; SSSE3-NEXT: sarq $63, %rbp 1732 ; SSSE3-NEXT: movd %ebp, %xmm0 1733 ; SSSE3-NEXT: movq %rax, %rbp 1734 ; SSSE3-NEXT: movsbq %al, %rax 1735 ; SSSE3-NEXT: shlq $57, %r8 1736 ; SSSE3-NEXT: sarq $63, %r8 1737 ; SSSE3-NEXT: movd %r8d, %xmm1 1738 ; SSSE3-NEXT: shlq $53, %r9 1739 ; SSSE3-NEXT: sarq $63, %r9 1740 ; SSSE3-NEXT: movd %r9d, %xmm2 1741 ; SSSE3-NEXT: shlq $61, %r10 1742 ; SSSE3-NEXT: sarq $63, %r10 1743 ; SSSE3-NEXT: movd %r10d, %xmm3 1744 ; SSSE3-NEXT: shlq $51, %r11 1745 ; SSSE3-NEXT: sarq $63, %r11 1746 ; SSSE3-NEXT: movd %r11d, %xmm4 1747 ; 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] 1748 ; SSSE3-NEXT: shlq $59, %r14 1749 ; SSSE3-NEXT: sarq $63, %r14 1750 ; SSSE3-NEXT: movd %r14d, %xmm5 1751 ; 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] 1752 ; SSSE3-NEXT: shlq $55, %r15 1753 ; SSSE3-NEXT: sarq $63, %r15 1754 ; SSSE3-NEXT: movd %r15d, %xmm2 1755 ; 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] 1756 ; SSSE3-NEXT: shlq $63, %r12 1757 ; SSSE3-NEXT: sarq $63, %r12 1758 ; SSSE3-NEXT: movd %r12d, %xmm0 1759 ; 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] 1760 ; SSSE3-NEXT: shlq $50, %r13 1761 ; SSSE3-NEXT: sarq $63, %r13 1762 ; SSSE3-NEXT: movd %r13d, %xmm1 1763 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7] 1764 ; SSSE3-NEXT: shlq $58, %rbx 1765 ; SSSE3-NEXT: sarq $63, %rbx 1766 ; SSSE3-NEXT: movd %ebx, %xmm2 1767 ; 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] 1768 ; SSSE3-NEXT: shlq $54, %rcx 1769 ; SSSE3-NEXT: sarq $63, %rcx 1770 ; SSSE3-NEXT: movd %ecx, %xmm4 1771 ; 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] 1772 ; SSSE3-NEXT: shlq $62, %rdx 1773 ; SSSE3-NEXT: sarq $63, %rdx 1774 ; SSSE3-NEXT: movd %edx, %xmm3 1775 ; 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] 1776 ; SSSE3-NEXT: shlq $52, %rsi 1777 ; SSSE3-NEXT: sarq $63, %rsi 1778 ; SSSE3-NEXT: movd %esi, %xmm1 1779 ; 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] 1780 ; SSSE3-NEXT: shlq $60, %rdi 1781 ; SSSE3-NEXT: sarq $63, %rdi 1782 ; SSSE3-NEXT: movd %edi, %xmm4 1783 ; 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] 1784 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm1[0],xmm4[1],xmm1[1],xmm4[2],xmm1[2],xmm4[3],xmm1[3],xmm4[4],xmm1[4],xmm4[5],xmm1[5],xmm4[6],xmm1[6],xmm4[7],xmm1[7] 1785 ; SSSE3-NEXT: shrq $15, %rbp 1786 ; SSSE3-NEXT: movd %ebp, %xmm1 1787 ; SSSE3-NEXT: shrq $7, %rax 1788 ; SSSE3-NEXT: movd %eax, %xmm2 1789 ; 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] 1790 ; 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] 1791 ; 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] 1792 ; 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] 1793 ; SSSE3-NEXT: popq %rbx 1794 ; SSSE3-NEXT: popq %r12 1795 ; SSSE3-NEXT: popq %r13 1796 ; SSSE3-NEXT: popq %r14 1797 ; SSSE3-NEXT: popq %r15 1798 ; SSSE3-NEXT: popq %rbp 1799 ; SSSE3-NEXT: retq 1800 ; 1801 ; SSE41-LABEL: load_sext_16i1_to_16i8: 1802 ; SSE41: # BB#0: # %entry 1803 ; SSE41-NEXT: movswq (%rdi), %rax 1804 ; SSE41-NEXT: movq %rax, %rcx 1805 ; SSE41-NEXT: shlq $62, %rcx 1806 ; SSE41-NEXT: sarq $63, %rcx 1807 ; SSE41-NEXT: movq %rax, %rdx 1808 ; SSE41-NEXT: shlq $63, %rdx 1809 ; SSE41-NEXT: sarq $63, %rdx 1810 ; SSE41-NEXT: movd %edx, %xmm0 1811 ; SSE41-NEXT: pinsrb $1, %ecx, %xmm0 1812 ; SSE41-NEXT: movq %rax, %rcx 1813 ; SSE41-NEXT: shlq $61, %rcx 1814 ; SSE41-NEXT: sarq $63, %rcx 1815 ; SSE41-NEXT: pinsrb $2, %ecx, %xmm0 1816 ; SSE41-NEXT: movq %rax, %rcx 1817 ; SSE41-NEXT: shlq $60, %rcx 1818 ; SSE41-NEXT: sarq $63, %rcx 1819 ; SSE41-NEXT: pinsrb $3, %ecx, %xmm0 1820 ; SSE41-NEXT: movq %rax, %rcx 1821 ; SSE41-NEXT: shlq $59, %rcx 1822 ; SSE41-NEXT: sarq $63, %rcx 1823 ; SSE41-NEXT: pinsrb $4, %ecx, %xmm0 1824 ; SSE41-NEXT: movq %rax, %rcx 1825 ; SSE41-NEXT: shlq $58, %rcx 1826 ; SSE41-NEXT: sarq $63, %rcx 1827 ; SSE41-NEXT: pinsrb $5, %ecx, %xmm0 1828 ; SSE41-NEXT: movq %rax, %rcx 1829 ; SSE41-NEXT: shlq $57, %rcx 1830 ; SSE41-NEXT: sarq $63, %rcx 1831 ; SSE41-NEXT: pinsrb $6, %ecx, %xmm0 1832 ; SSE41-NEXT: movsbq %al, %rcx 1833 ; SSE41-NEXT: shrq $7, %rcx 1834 ; SSE41-NEXT: pinsrb $7, %ecx, %xmm0 1835 ; SSE41-NEXT: movq %rax, %rcx 1836 ; SSE41-NEXT: shlq $55, %rcx 1837 ; SSE41-NEXT: sarq $63, %rcx 1838 ; SSE41-NEXT: pinsrb $8, %ecx, %xmm0 1839 ; SSE41-NEXT: movq %rax, %rcx 1840 ; SSE41-NEXT: shlq $54, %rcx 1841 ; SSE41-NEXT: sarq $63, %rcx 1842 ; SSE41-NEXT: pinsrb $9, %ecx, %xmm0 1843 ; SSE41-NEXT: movq %rax, %rcx 1844 ; SSE41-NEXT: shlq $53, %rcx 1845 ; SSE41-NEXT: sarq $63, %rcx 1846 ; SSE41-NEXT: pinsrb $10, %ecx, %xmm0 1847 ; SSE41-NEXT: movq %rax, %rcx 1848 ; SSE41-NEXT: shlq $52, %rcx 1849 ; SSE41-NEXT: sarq $63, %rcx 1850 ; SSE41-NEXT: pinsrb $11, %ecx, %xmm0 1851 ; SSE41-NEXT: movq %rax, %rcx 1852 ; SSE41-NEXT: shlq $51, %rcx 1853 ; SSE41-NEXT: sarq $63, %rcx 1854 ; SSE41-NEXT: pinsrb $12, %ecx, %xmm0 1855 ; SSE41-NEXT: movq %rax, %rcx 1856 ; SSE41-NEXT: shlq $50, %rcx 1857 ; SSE41-NEXT: sarq $63, %rcx 1858 ; SSE41-NEXT: pinsrb $13, %ecx, %xmm0 1859 ; SSE41-NEXT: movq %rax, %rcx 1860 ; SSE41-NEXT: shlq $49, %rcx 1861 ; SSE41-NEXT: sarq $63, %rcx 1862 ; SSE41-NEXT: pinsrb $14, %ecx, %xmm0 1863 ; SSE41-NEXT: shrq $15, %rax 1864 ; SSE41-NEXT: pinsrb $15, %eax, %xmm0 1865 ; SSE41-NEXT: retq 1866 ; 1867 ; AVX-LABEL: load_sext_16i1_to_16i8: 1868 ; AVX: # BB#0: # %entry 1869 ; AVX-NEXT: movswq (%rdi), %rax 1870 ; AVX-NEXT: movq %rax, %rcx 1871 ; AVX-NEXT: shlq $62, %rcx 1872 ; AVX-NEXT: sarq $63, %rcx 1873 ; AVX-NEXT: movq %rax, %rdx 1874 ; AVX-NEXT: shlq $63, %rdx 1875 ; AVX-NEXT: sarq $63, %rdx 1876 ; AVX-NEXT: vmovd %edx, %xmm0 1877 ; AVX-NEXT: vpinsrb $1, %ecx, %xmm0, %xmm0 1878 ; AVX-NEXT: movq %rax, %rcx 1879 ; AVX-NEXT: shlq $61, %rcx 1880 ; AVX-NEXT: sarq $63, %rcx 1881 ; AVX-NEXT: vpinsrb $2, %ecx, %xmm0, %xmm0 1882 ; AVX-NEXT: movq %rax, %rcx 1883 ; AVX-NEXT: shlq $60, %rcx 1884 ; AVX-NEXT: sarq $63, %rcx 1885 ; AVX-NEXT: vpinsrb $3, %ecx, %xmm0, %xmm0 1886 ; AVX-NEXT: movq %rax, %rcx 1887 ; AVX-NEXT: shlq $59, %rcx 1888 ; AVX-NEXT: sarq $63, %rcx 1889 ; AVX-NEXT: vpinsrb $4, %ecx, %xmm0, %xmm0 1890 ; AVX-NEXT: movq %rax, %rcx 1891 ; AVX-NEXT: shlq $58, %rcx 1892 ; AVX-NEXT: sarq $63, %rcx 1893 ; AVX-NEXT: vpinsrb $5, %ecx, %xmm0, %xmm0 1894 ; AVX-NEXT: movq %rax, %rcx 1895 ; AVX-NEXT: shlq $57, %rcx 1896 ; AVX-NEXT: sarq $63, %rcx 1897 ; AVX-NEXT: vpinsrb $6, %ecx, %xmm0, %xmm0 1898 ; AVX-NEXT: movsbq %al, %rcx 1899 ; AVX-NEXT: shrq $7, %rcx 1900 ; AVX-NEXT: vpinsrb $7, %ecx, %xmm0, %xmm0 1901 ; AVX-NEXT: movq %rax, %rcx 1902 ; AVX-NEXT: shlq $55, %rcx 1903 ; AVX-NEXT: sarq $63, %rcx 1904 ; AVX-NEXT: vpinsrb $8, %ecx, %xmm0, %xmm0 1905 ; AVX-NEXT: movq %rax, %rcx 1906 ; AVX-NEXT: shlq $54, %rcx 1907 ; AVX-NEXT: sarq $63, %rcx 1908 ; AVX-NEXT: vpinsrb $9, %ecx, %xmm0, %xmm0 1909 ; AVX-NEXT: movq %rax, %rcx 1910 ; AVX-NEXT: shlq $53, %rcx 1911 ; AVX-NEXT: sarq $63, %rcx 1912 ; AVX-NEXT: vpinsrb $10, %ecx, %xmm0, %xmm0 1913 ; AVX-NEXT: movq %rax, %rcx 1914 ; AVX-NEXT: shlq $52, %rcx 1915 ; AVX-NEXT: sarq $63, %rcx 1916 ; AVX-NEXT: vpinsrb $11, %ecx, %xmm0, %xmm0 1917 ; AVX-NEXT: movq %rax, %rcx 1918 ; AVX-NEXT: shlq $51, %rcx 1919 ; AVX-NEXT: sarq $63, %rcx 1920 ; AVX-NEXT: vpinsrb $12, %ecx, %xmm0, %xmm0 1921 ; AVX-NEXT: movq %rax, %rcx 1922 ; AVX-NEXT: shlq $50, %rcx 1923 ; AVX-NEXT: sarq $63, %rcx 1924 ; AVX-NEXT: vpinsrb $13, %ecx, %xmm0, %xmm0 1925 ; AVX-NEXT: movq %rax, %rcx 1926 ; AVX-NEXT: shlq $49, %rcx 1927 ; AVX-NEXT: sarq $63, %rcx 1928 ; AVX-NEXT: vpinsrb $14, %ecx, %xmm0, %xmm0 1929 ; AVX-NEXT: shrq $15, %rax 1930 ; AVX-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 1931 ; AVX-NEXT: retq 1932 ; 1933 ; X32-SSE41-LABEL: load_sext_16i1_to_16i8: 1934 ; X32-SSE41: # BB#0: # %entry 1935 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 1936 ; X32-SSE41-NEXT: movswl (%eax), %eax 1937 ; X32-SSE41-NEXT: movl %eax, %ecx 1938 ; X32-SSE41-NEXT: shll $30, %ecx 1939 ; X32-SSE41-NEXT: sarl $31, %ecx 1940 ; X32-SSE41-NEXT: movl %eax, %edx 1941 ; X32-SSE41-NEXT: shll $31, %edx 1942 ; X32-SSE41-NEXT: sarl $31, %edx 1943 ; X32-SSE41-NEXT: movd %edx, %xmm0 1944 ; X32-SSE41-NEXT: pinsrb $1, %ecx, %xmm0 1945 ; X32-SSE41-NEXT: movl %eax, %ecx 1946 ; X32-SSE41-NEXT: shll $29, %ecx 1947 ; X32-SSE41-NEXT: sarl $31, %ecx 1948 ; X32-SSE41-NEXT: pinsrb $2, %ecx, %xmm0 1949 ; X32-SSE41-NEXT: movl %eax, %ecx 1950 ; X32-SSE41-NEXT: shll $28, %ecx 1951 ; X32-SSE41-NEXT: sarl $31, %ecx 1952 ; X32-SSE41-NEXT: pinsrb $3, %ecx, %xmm0 1953 ; X32-SSE41-NEXT: movl %eax, %ecx 1954 ; X32-SSE41-NEXT: shll $27, %ecx 1955 ; X32-SSE41-NEXT: sarl $31, %ecx 1956 ; X32-SSE41-NEXT: pinsrb $4, %ecx, %xmm0 1957 ; X32-SSE41-NEXT: movl %eax, %ecx 1958 ; X32-SSE41-NEXT: shll $26, %ecx 1959 ; X32-SSE41-NEXT: sarl $31, %ecx 1960 ; X32-SSE41-NEXT: pinsrb $5, %ecx, %xmm0 1961 ; X32-SSE41-NEXT: movl %eax, %ecx 1962 ; X32-SSE41-NEXT: shll $25, %ecx 1963 ; X32-SSE41-NEXT: sarl $31, %ecx 1964 ; X32-SSE41-NEXT: pinsrb $6, %ecx, %xmm0 1965 ; X32-SSE41-NEXT: movsbl %al, %ecx 1966 ; X32-SSE41-NEXT: shrl $7, %ecx 1967 ; X32-SSE41-NEXT: pinsrb $7, %ecx, %xmm0 1968 ; X32-SSE41-NEXT: movl %eax, %ecx 1969 ; X32-SSE41-NEXT: shll $23, %ecx 1970 ; X32-SSE41-NEXT: sarl $31, %ecx 1971 ; X32-SSE41-NEXT: pinsrb $8, %ecx, %xmm0 1972 ; X32-SSE41-NEXT: movl %eax, %ecx 1973 ; X32-SSE41-NEXT: shll $22, %ecx 1974 ; X32-SSE41-NEXT: sarl $31, %ecx 1975 ; X32-SSE41-NEXT: pinsrb $9, %ecx, %xmm0 1976 ; X32-SSE41-NEXT: movl %eax, %ecx 1977 ; X32-SSE41-NEXT: shll $21, %ecx 1978 ; X32-SSE41-NEXT: sarl $31, %ecx 1979 ; X32-SSE41-NEXT: pinsrb $10, %ecx, %xmm0 1980 ; X32-SSE41-NEXT: movl %eax, %ecx 1981 ; X32-SSE41-NEXT: shll $20, %ecx 1982 ; X32-SSE41-NEXT: sarl $31, %ecx 1983 ; X32-SSE41-NEXT: pinsrb $11, %ecx, %xmm0 1984 ; X32-SSE41-NEXT: movl %eax, %ecx 1985 ; X32-SSE41-NEXT: shll $19, %ecx 1986 ; X32-SSE41-NEXT: sarl $31, %ecx 1987 ; X32-SSE41-NEXT: pinsrb $12, %ecx, %xmm0 1988 ; X32-SSE41-NEXT: movl %eax, %ecx 1989 ; X32-SSE41-NEXT: shll $18, %ecx 1990 ; X32-SSE41-NEXT: sarl $31, %ecx 1991 ; X32-SSE41-NEXT: pinsrb $13, %ecx, %xmm0 1992 ; X32-SSE41-NEXT: movl %eax, %ecx 1993 ; X32-SSE41-NEXT: shll $17, %ecx 1994 ; X32-SSE41-NEXT: sarl $31, %ecx 1995 ; X32-SSE41-NEXT: pinsrb $14, %ecx, %xmm0 1996 ; X32-SSE41-NEXT: shrl $15, %eax 1997 ; X32-SSE41-NEXT: pinsrb $15, %eax, %xmm0 1998 ; X32-SSE41-NEXT: retl 1999 entry: 2000 %X = load <16 x i1>, <16 x i1>* %ptr 2001 %Y = sext <16 x i1> %X to <16 x i8> 2002 ret <16 x i8> %Y 2003 } 2004 2005 define <16 x i16> @load_sext_16i1_to_16i16(<16 x i1> *%ptr) { 2006 ; SSE2-LABEL: load_sext_16i1_to_16i16: 2007 ; SSE2: # BB#0: # %entry 2008 ; SSE2-NEXT: movzwl (%rdi), %eax 2009 ; SSE2-NEXT: movl %eax, %ecx 2010 ; SSE2-NEXT: shrl $14, %ecx 2011 ; SSE2-NEXT: andl $1, %ecx 2012 ; SSE2-NEXT: movd %ecx, %xmm0 2013 ; SSE2-NEXT: movl %eax, %ecx 2014 ; SSE2-NEXT: shrl $6, %ecx 2015 ; SSE2-NEXT: andl $1, %ecx 2016 ; SSE2-NEXT: movd %ecx, %xmm1 2017 ; 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] 2018 ; SSE2-NEXT: movl %eax, %ecx 2019 ; SSE2-NEXT: shrl $10, %ecx 2020 ; SSE2-NEXT: andl $1, %ecx 2021 ; SSE2-NEXT: movd %ecx, %xmm0 2022 ; SSE2-NEXT: movl %eax, %ecx 2023 ; SSE2-NEXT: shrl $2, %ecx 2024 ; SSE2-NEXT: andl $1, %ecx 2025 ; SSE2-NEXT: movd %ecx, %xmm2 2026 ; 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] 2027 ; 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] 2028 ; SSE2-NEXT: movl %eax, %ecx 2029 ; SSE2-NEXT: shrl $12, %ecx 2030 ; SSE2-NEXT: andl $1, %ecx 2031 ; SSE2-NEXT: movd %ecx, %xmm0 2032 ; SSE2-NEXT: movl %eax, %ecx 2033 ; SSE2-NEXT: shrl $4, %ecx 2034 ; SSE2-NEXT: andl $1, %ecx 2035 ; SSE2-NEXT: movd %ecx, %xmm3 2036 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7] 2037 ; SSE2-NEXT: movl %eax, %ecx 2038 ; SSE2-NEXT: andl $1, %ecx 2039 ; SSE2-NEXT: movd %ecx, %xmm1 2040 ; SSE2-NEXT: movl %eax, %ecx 2041 ; SSE2-NEXT: shrl $8, %ecx 2042 ; SSE2-NEXT: andl $1, %ecx 2043 ; SSE2-NEXT: movd %ecx, %xmm0 2044 ; 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] 2045 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7] 2046 ; 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] 2047 ; SSE2-NEXT: movl %eax, %ecx 2048 ; SSE2-NEXT: shrl $13, %ecx 2049 ; SSE2-NEXT: andl $1, %ecx 2050 ; SSE2-NEXT: movd %ecx, %xmm0 2051 ; SSE2-NEXT: movl %eax, %ecx 2052 ; SSE2-NEXT: shrl $5, %ecx 2053 ; SSE2-NEXT: andl $1, %ecx 2054 ; SSE2-NEXT: movd %ecx, %xmm2 2055 ; 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] 2056 ; SSE2-NEXT: movl %eax, %ecx 2057 ; SSE2-NEXT: shrl $9, %ecx 2058 ; SSE2-NEXT: andl $1, %ecx 2059 ; SSE2-NEXT: movd %ecx, %xmm3 2060 ; SSE2-NEXT: movl %eax, %ecx 2061 ; SSE2-NEXT: shrl %ecx 2062 ; SSE2-NEXT: andl $1, %ecx 2063 ; SSE2-NEXT: movd %ecx, %xmm0 2064 ; 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] 2065 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7] 2066 ; SSE2-NEXT: movl %eax, %ecx 2067 ; SSE2-NEXT: shrl $11, %ecx 2068 ; SSE2-NEXT: andl $1, %ecx 2069 ; SSE2-NEXT: movd %ecx, %xmm2 2070 ; SSE2-NEXT: movl %eax, %ecx 2071 ; SSE2-NEXT: shrl $3, %ecx 2072 ; SSE2-NEXT: andl $1, %ecx 2073 ; SSE2-NEXT: movd %ecx, %xmm3 2074 ; 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] 2075 ; SSE2-NEXT: movl %eax, %ecx 2076 ; SSE2-NEXT: shrl $7, %ecx 2077 ; SSE2-NEXT: andl $1, %ecx 2078 ; SSE2-NEXT: movd %ecx, %xmm2 2079 ; SSE2-NEXT: shrl $15, %eax 2080 ; SSE2-NEXT: movzwl %ax, %eax 2081 ; SSE2-NEXT: movd %eax, %xmm4 2082 ; 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] 2083 ; 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] 2084 ; 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] 2085 ; 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] 2086 ; SSE2-NEXT: movdqa %xmm1, %xmm0 2087 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 2088 ; SSE2-NEXT: psllw $15, %xmm0 2089 ; SSE2-NEXT: psraw $15, %xmm0 2090 ; 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] 2091 ; SSE2-NEXT: psllw $15, %xmm1 2092 ; SSE2-NEXT: psraw $15, %xmm1 2093 ; SSE2-NEXT: retq 2094 ; 2095 ; SSSE3-LABEL: load_sext_16i1_to_16i16: 2096 ; SSSE3: # BB#0: # %entry 2097 ; SSSE3-NEXT: movzwl (%rdi), %eax 2098 ; SSSE3-NEXT: movl %eax, %ecx 2099 ; SSSE3-NEXT: shrl $14, %ecx 2100 ; SSSE3-NEXT: andl $1, %ecx 2101 ; SSSE3-NEXT: movd %ecx, %xmm0 2102 ; SSSE3-NEXT: movl %eax, %ecx 2103 ; SSSE3-NEXT: shrl $6, %ecx 2104 ; SSSE3-NEXT: andl $1, %ecx 2105 ; SSSE3-NEXT: movd %ecx, %xmm1 2106 ; 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] 2107 ; SSSE3-NEXT: movl %eax, %ecx 2108 ; SSSE3-NEXT: shrl $10, %ecx 2109 ; SSSE3-NEXT: andl $1, %ecx 2110 ; SSSE3-NEXT: movd %ecx, %xmm0 2111 ; SSSE3-NEXT: movl %eax, %ecx 2112 ; SSSE3-NEXT: shrl $2, %ecx 2113 ; SSSE3-NEXT: andl $1, %ecx 2114 ; SSSE3-NEXT: movd %ecx, %xmm2 2115 ; 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] 2116 ; 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] 2117 ; SSSE3-NEXT: movl %eax, %ecx 2118 ; SSSE3-NEXT: shrl $12, %ecx 2119 ; SSSE3-NEXT: andl $1, %ecx 2120 ; SSSE3-NEXT: movd %ecx, %xmm0 2121 ; SSSE3-NEXT: movl %eax, %ecx 2122 ; SSSE3-NEXT: shrl $4, %ecx 2123 ; SSSE3-NEXT: andl $1, %ecx 2124 ; SSSE3-NEXT: movd %ecx, %xmm3 2125 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm0[0],xmm3[1],xmm0[1],xmm3[2],xmm0[2],xmm3[3],xmm0[3],xmm3[4],xmm0[4],xmm3[5],xmm0[5],xmm3[6],xmm0[6],xmm3[7],xmm0[7] 2126 ; SSSE3-NEXT: movl %eax, %ecx 2127 ; SSSE3-NEXT: andl $1, %ecx 2128 ; SSSE3-NEXT: movd %ecx, %xmm1 2129 ; SSSE3-NEXT: movl %eax, %ecx 2130 ; SSSE3-NEXT: shrl $8, %ecx 2131 ; SSSE3-NEXT: andl $1, %ecx 2132 ; SSSE3-NEXT: movd %ecx, %xmm0 2133 ; 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] 2134 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7] 2135 ; 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] 2136 ; SSSE3-NEXT: movl %eax, %ecx 2137 ; SSSE3-NEXT: shrl $13, %ecx 2138 ; SSSE3-NEXT: andl $1, %ecx 2139 ; SSSE3-NEXT: movd %ecx, %xmm0 2140 ; SSSE3-NEXT: movl %eax, %ecx 2141 ; SSSE3-NEXT: shrl $5, %ecx 2142 ; SSSE3-NEXT: andl $1, %ecx 2143 ; SSSE3-NEXT: movd %ecx, %xmm2 2144 ; 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] 2145 ; SSSE3-NEXT: movl %eax, %ecx 2146 ; SSSE3-NEXT: shrl $9, %ecx 2147 ; SSSE3-NEXT: andl $1, %ecx 2148 ; SSSE3-NEXT: movd %ecx, %xmm3 2149 ; SSSE3-NEXT: movl %eax, %ecx 2150 ; SSSE3-NEXT: shrl %ecx 2151 ; SSSE3-NEXT: andl $1, %ecx 2152 ; SSSE3-NEXT: movd %ecx, %xmm0 2153 ; 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] 2154 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7] 2155 ; SSSE3-NEXT: movl %eax, %ecx 2156 ; SSSE3-NEXT: shrl $11, %ecx 2157 ; SSSE3-NEXT: andl $1, %ecx 2158 ; SSSE3-NEXT: movd %ecx, %xmm2 2159 ; SSSE3-NEXT: movl %eax, %ecx 2160 ; SSSE3-NEXT: shrl $3, %ecx 2161 ; SSSE3-NEXT: andl $1, %ecx 2162 ; SSSE3-NEXT: movd %ecx, %xmm3 2163 ; 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] 2164 ; SSSE3-NEXT: movl %eax, %ecx 2165 ; SSSE3-NEXT: shrl $7, %ecx 2166 ; SSSE3-NEXT: andl $1, %ecx 2167 ; SSSE3-NEXT: movd %ecx, %xmm2 2168 ; SSSE3-NEXT: shrl $15, %eax 2169 ; SSSE3-NEXT: movzwl %ax, %eax 2170 ; SSSE3-NEXT: movd %eax, %xmm4 2171 ; 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] 2172 ; 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] 2173 ; 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] 2174 ; 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] 2175 ; SSSE3-NEXT: movdqa %xmm1, %xmm0 2176 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 2177 ; SSSE3-NEXT: psllw $15, %xmm0 2178 ; SSSE3-NEXT: psraw $15, %xmm0 2179 ; 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] 2180 ; SSSE3-NEXT: psllw $15, %xmm1 2181 ; SSSE3-NEXT: psraw $15, %xmm1 2182 ; SSSE3-NEXT: retq 2183 ; 2184 ; SSE41-LABEL: load_sext_16i1_to_16i16: 2185 ; SSE41: # BB#0: # %entry 2186 ; SSE41-NEXT: movzwl (%rdi), %eax 2187 ; SSE41-NEXT: movl %eax, %ecx 2188 ; SSE41-NEXT: shrl %ecx 2189 ; SSE41-NEXT: andl $1, %ecx 2190 ; SSE41-NEXT: movl %eax, %edx 2191 ; SSE41-NEXT: andl $1, %edx 2192 ; SSE41-NEXT: movd %edx, %xmm1 2193 ; SSE41-NEXT: pinsrb $1, %ecx, %xmm1 2194 ; SSE41-NEXT: movl %eax, %ecx 2195 ; SSE41-NEXT: shrl $2, %ecx 2196 ; SSE41-NEXT: andl $1, %ecx 2197 ; SSE41-NEXT: pinsrb $2, %ecx, %xmm1 2198 ; SSE41-NEXT: movl %eax, %ecx 2199 ; SSE41-NEXT: shrl $3, %ecx 2200 ; SSE41-NEXT: andl $1, %ecx 2201 ; SSE41-NEXT: pinsrb $3, %ecx, %xmm1 2202 ; SSE41-NEXT: movl %eax, %ecx 2203 ; SSE41-NEXT: shrl $4, %ecx 2204 ; SSE41-NEXT: andl $1, %ecx 2205 ; SSE41-NEXT: pinsrb $4, %ecx, %xmm1 2206 ; SSE41-NEXT: movl %eax, %ecx 2207 ; SSE41-NEXT: shrl $5, %ecx 2208 ; SSE41-NEXT: andl $1, %ecx 2209 ; SSE41-NEXT: pinsrb $5, %ecx, %xmm1 2210 ; SSE41-NEXT: movl %eax, %ecx 2211 ; SSE41-NEXT: shrl $6, %ecx 2212 ; SSE41-NEXT: andl $1, %ecx 2213 ; SSE41-NEXT: pinsrb $6, %ecx, %xmm1 2214 ; SSE41-NEXT: movl %eax, %ecx 2215 ; SSE41-NEXT: shrl $7, %ecx 2216 ; SSE41-NEXT: andl $1, %ecx 2217 ; SSE41-NEXT: pinsrb $7, %ecx, %xmm1 2218 ; SSE41-NEXT: movl %eax, %ecx 2219 ; SSE41-NEXT: shrl $8, %ecx 2220 ; SSE41-NEXT: andl $1, %ecx 2221 ; SSE41-NEXT: pinsrb $8, %ecx, %xmm1 2222 ; SSE41-NEXT: movl %eax, %ecx 2223 ; SSE41-NEXT: shrl $9, %ecx 2224 ; SSE41-NEXT: andl $1, %ecx 2225 ; SSE41-NEXT: pinsrb $9, %ecx, %xmm1 2226 ; SSE41-NEXT: movl %eax, %ecx 2227 ; SSE41-NEXT: shrl $10, %ecx 2228 ; SSE41-NEXT: andl $1, %ecx 2229 ; SSE41-NEXT: pinsrb $10, %ecx, %xmm1 2230 ; SSE41-NEXT: movl %eax, %ecx 2231 ; SSE41-NEXT: shrl $11, %ecx 2232 ; SSE41-NEXT: andl $1, %ecx 2233 ; SSE41-NEXT: pinsrb $11, %ecx, %xmm1 2234 ; SSE41-NEXT: movl %eax, %ecx 2235 ; SSE41-NEXT: shrl $12, %ecx 2236 ; SSE41-NEXT: andl $1, %ecx 2237 ; SSE41-NEXT: pinsrb $12, %ecx, %xmm1 2238 ; SSE41-NEXT: movl %eax, %ecx 2239 ; SSE41-NEXT: shrl $13, %ecx 2240 ; SSE41-NEXT: andl $1, %ecx 2241 ; SSE41-NEXT: pinsrb $13, %ecx, %xmm1 2242 ; SSE41-NEXT: movl %eax, %ecx 2243 ; SSE41-NEXT: shrl $14, %ecx 2244 ; SSE41-NEXT: andl $1, %ecx 2245 ; SSE41-NEXT: pinsrb $14, %ecx, %xmm1 2246 ; SSE41-NEXT: shrl $15, %eax 2247 ; SSE41-NEXT: movzwl %ax, %eax 2248 ; SSE41-NEXT: pinsrb $15, %eax, %xmm1 2249 ; 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 2250 ; SSE41-NEXT: psllw $15, %xmm0 2251 ; SSE41-NEXT: psraw $15, %xmm0 2252 ; SSE41-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 2253 ; SSE41-NEXT: psllw $15, %xmm1 2254 ; SSE41-NEXT: psraw $15, %xmm1 2255 ; SSE41-NEXT: retq 2256 ; 2257 ; AVX1-LABEL: load_sext_16i1_to_16i16: 2258 ; AVX1: # BB#0: # %entry 2259 ; AVX1-NEXT: pushq %rbp 2260 ; AVX1-NEXT: .Ltmp0: 2261 ; AVX1-NEXT: .cfi_def_cfa_offset 16 2262 ; AVX1-NEXT: pushq %r15 2263 ; AVX1-NEXT: .Ltmp1: 2264 ; AVX1-NEXT: .cfi_def_cfa_offset 24 2265 ; AVX1-NEXT: pushq %r14 2266 ; AVX1-NEXT: .Ltmp2: 2267 ; AVX1-NEXT: .cfi_def_cfa_offset 32 2268 ; AVX1-NEXT: pushq %r13 2269 ; AVX1-NEXT: .Ltmp3: 2270 ; AVX1-NEXT: .cfi_def_cfa_offset 40 2271 ; AVX1-NEXT: pushq %r12 2272 ; AVX1-NEXT: .Ltmp4: 2273 ; AVX1-NEXT: .cfi_def_cfa_offset 48 2274 ; AVX1-NEXT: pushq %rbx 2275 ; AVX1-NEXT: .Ltmp5: 2276 ; AVX1-NEXT: .cfi_def_cfa_offset 56 2277 ; AVX1-NEXT: .Ltmp6: 2278 ; AVX1-NEXT: .cfi_offset %rbx, -56 2279 ; AVX1-NEXT: .Ltmp7: 2280 ; AVX1-NEXT: .cfi_offset %r12, -48 2281 ; AVX1-NEXT: .Ltmp8: 2282 ; AVX1-NEXT: .cfi_offset %r13, -40 2283 ; AVX1-NEXT: .Ltmp9: 2284 ; AVX1-NEXT: .cfi_offset %r14, -32 2285 ; AVX1-NEXT: .Ltmp10: 2286 ; AVX1-NEXT: .cfi_offset %r15, -24 2287 ; AVX1-NEXT: .Ltmp11: 2288 ; AVX1-NEXT: .cfi_offset %rbp, -16 2289 ; AVX1-NEXT: movswq (%rdi), %rax 2290 ; AVX1-NEXT: movq %rax, %rcx 2291 ; AVX1-NEXT: shlq $55, %rcx 2292 ; AVX1-NEXT: sarq $63, %rcx 2293 ; AVX1-NEXT: vmovd %ecx, %xmm0 2294 ; AVX1-NEXT: movq %rax, %r8 2295 ; AVX1-NEXT: movq %rax, %r10 2296 ; AVX1-NEXT: movq %rax, %r11 2297 ; AVX1-NEXT: movq %rax, %r14 2298 ; AVX1-NEXT: movq %rax, %r15 2299 ; AVX1-NEXT: movq %rax, %r9 2300 ; AVX1-NEXT: movq %rax, %r12 2301 ; AVX1-NEXT: movq %rax, %r13 2302 ; AVX1-NEXT: movq %rax, %rbx 2303 ; AVX1-NEXT: movq %rax, %rdi 2304 ; AVX1-NEXT: movq %rax, %rcx 2305 ; AVX1-NEXT: movq %rax, %rdx 2306 ; AVX1-NEXT: movq %rax, %rsi 2307 ; AVX1-NEXT: movsbq %al, %rbp 2308 ; AVX1-NEXT: shlq $54, %rax 2309 ; AVX1-NEXT: sarq $63, %rax 2310 ; AVX1-NEXT: vpinsrw $1, %eax, %xmm0, %xmm0 2311 ; AVX1-NEXT: shlq $53, %r8 2312 ; AVX1-NEXT: sarq $63, %r8 2313 ; AVX1-NEXT: vpinsrw $2, %r8d, %xmm0, %xmm0 2314 ; AVX1-NEXT: shlq $52, %r10 2315 ; AVX1-NEXT: sarq $63, %r10 2316 ; AVX1-NEXT: vpinsrw $3, %r10d, %xmm0, %xmm0 2317 ; AVX1-NEXT: shlq $51, %r11 2318 ; AVX1-NEXT: sarq $63, %r11 2319 ; AVX1-NEXT: vpinsrw $4, %r11d, %xmm0, %xmm0 2320 ; AVX1-NEXT: shlq $50, %r14 2321 ; AVX1-NEXT: sarq $63, %r14 2322 ; AVX1-NEXT: vpinsrw $5, %r14d, %xmm0, %xmm0 2323 ; AVX1-NEXT: shlq $49, %r15 2324 ; AVX1-NEXT: sarq $63, %r15 2325 ; AVX1-NEXT: vpinsrw $6, %r15d, %xmm0, %xmm0 2326 ; AVX1-NEXT: shrq $15, %r9 2327 ; AVX1-NEXT: vpinsrw $7, %r9d, %xmm0, %xmm0 2328 ; AVX1-NEXT: shlq $63, %r13 2329 ; AVX1-NEXT: sarq $63, %r13 2330 ; AVX1-NEXT: vmovd %r13d, %xmm1 2331 ; AVX1-NEXT: shlq $62, %r12 2332 ; AVX1-NEXT: sarq $63, %r12 2333 ; AVX1-NEXT: vpinsrw $1, %r12d, %xmm1, %xmm1 2334 ; AVX1-NEXT: shlq $61, %rbx 2335 ; AVX1-NEXT: sarq $63, %rbx 2336 ; AVX1-NEXT: vpinsrw $2, %ebx, %xmm1, %xmm1 2337 ; AVX1-NEXT: shlq $60, %rdi 2338 ; AVX1-NEXT: sarq $63, %rdi 2339 ; AVX1-NEXT: vpinsrw $3, %edi, %xmm1, %xmm1 2340 ; AVX1-NEXT: shlq $59, %rcx 2341 ; AVX1-NEXT: sarq $63, %rcx 2342 ; AVX1-NEXT: vpinsrw $4, %ecx, %xmm1, %xmm1 2343 ; AVX1-NEXT: shlq $58, %rdx 2344 ; AVX1-NEXT: sarq $63, %rdx 2345 ; AVX1-NEXT: vpinsrw $5, %edx, %xmm1, %xmm1 2346 ; AVX1-NEXT: shlq $57, %rsi 2347 ; AVX1-NEXT: sarq $63, %rsi 2348 ; AVX1-NEXT: vpinsrw $6, %esi, %xmm1, %xmm1 2349 ; AVX1-NEXT: shrq $7, %rbp 2350 ; AVX1-NEXT: vpinsrw $7, %ebp, %xmm1, %xmm1 2351 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2352 ; AVX1-NEXT: popq %rbx 2353 ; AVX1-NEXT: popq %r12 2354 ; AVX1-NEXT: popq %r13 2355 ; AVX1-NEXT: popq %r14 2356 ; AVX1-NEXT: popq %r15 2357 ; AVX1-NEXT: popq %rbp 2358 ; AVX1-NEXT: retq 2359 ; 2360 ; AVX2-LABEL: load_sext_16i1_to_16i16: 2361 ; AVX2: # BB#0: # %entry 2362 ; AVX2-NEXT: pushq %rbp 2363 ; AVX2-NEXT: .Ltmp0: 2364 ; AVX2-NEXT: .cfi_def_cfa_offset 16 2365 ; AVX2-NEXT: pushq %r15 2366 ; AVX2-NEXT: .Ltmp1: 2367 ; AVX2-NEXT: .cfi_def_cfa_offset 24 2368 ; AVX2-NEXT: pushq %r14 2369 ; AVX2-NEXT: .Ltmp2: 2370 ; AVX2-NEXT: .cfi_def_cfa_offset 32 2371 ; AVX2-NEXT: pushq %r13 2372 ; AVX2-NEXT: .Ltmp3: 2373 ; AVX2-NEXT: .cfi_def_cfa_offset 40 2374 ; AVX2-NEXT: pushq %r12 2375 ; AVX2-NEXT: .Ltmp4: 2376 ; AVX2-NEXT: .cfi_def_cfa_offset 48 2377 ; AVX2-NEXT: pushq %rbx 2378 ; AVX2-NEXT: .Ltmp5: 2379 ; AVX2-NEXT: .cfi_def_cfa_offset 56 2380 ; AVX2-NEXT: .Ltmp6: 2381 ; AVX2-NEXT: .cfi_offset %rbx, -56 2382 ; AVX2-NEXT: .Ltmp7: 2383 ; AVX2-NEXT: .cfi_offset %r12, -48 2384 ; AVX2-NEXT: .Ltmp8: 2385 ; AVX2-NEXT: .cfi_offset %r13, -40 2386 ; AVX2-NEXT: .Ltmp9: 2387 ; AVX2-NEXT: .cfi_offset %r14, -32 2388 ; AVX2-NEXT: .Ltmp10: 2389 ; AVX2-NEXT: .cfi_offset %r15, -24 2390 ; AVX2-NEXT: .Ltmp11: 2391 ; AVX2-NEXT: .cfi_offset %rbp, -16 2392 ; AVX2-NEXT: movswq (%rdi), %rax 2393 ; AVX2-NEXT: movq %rax, %rcx 2394 ; AVX2-NEXT: shlq $55, %rcx 2395 ; AVX2-NEXT: sarq $63, %rcx 2396 ; AVX2-NEXT: vmovd %ecx, %xmm0 2397 ; AVX2-NEXT: movq %rax, %r8 2398 ; AVX2-NEXT: movq %rax, %r10 2399 ; AVX2-NEXT: movq %rax, %r11 2400 ; AVX2-NEXT: movq %rax, %r14 2401 ; AVX2-NEXT: movq %rax, %r15 2402 ; AVX2-NEXT: movq %rax, %r9 2403 ; AVX2-NEXT: movq %rax, %r12 2404 ; AVX2-NEXT: movq %rax, %r13 2405 ; AVX2-NEXT: movq %rax, %rbx 2406 ; AVX2-NEXT: movq %rax, %rdi 2407 ; AVX2-NEXT: movq %rax, %rcx 2408 ; AVX2-NEXT: movq %rax, %rdx 2409 ; AVX2-NEXT: movq %rax, %rsi 2410 ; AVX2-NEXT: movsbq %al, %rbp 2411 ; AVX2-NEXT: shlq $54, %rax 2412 ; AVX2-NEXT: sarq $63, %rax 2413 ; AVX2-NEXT: vpinsrw $1, %eax, %xmm0, %xmm0 2414 ; AVX2-NEXT: shlq $53, %r8 2415 ; AVX2-NEXT: sarq $63, %r8 2416 ; AVX2-NEXT: vpinsrw $2, %r8d, %xmm0, %xmm0 2417 ; AVX2-NEXT: shlq $52, %r10 2418 ; AVX2-NEXT: sarq $63, %r10 2419 ; AVX2-NEXT: vpinsrw $3, %r10d, %xmm0, %xmm0 2420 ; AVX2-NEXT: shlq $51, %r11 2421 ; AVX2-NEXT: sarq $63, %r11 2422 ; AVX2-NEXT: vpinsrw $4, %r11d, %xmm0, %xmm0 2423 ; AVX2-NEXT: shlq $50, %r14 2424 ; AVX2-NEXT: sarq $63, %r14 2425 ; AVX2-NEXT: vpinsrw $5, %r14d, %xmm0, %xmm0 2426 ; AVX2-NEXT: shlq $49, %r15 2427 ; AVX2-NEXT: sarq $63, %r15 2428 ; AVX2-NEXT: vpinsrw $6, %r15d, %xmm0, %xmm0 2429 ; AVX2-NEXT: shrq $15, %r9 2430 ; AVX2-NEXT: vpinsrw $7, %r9d, %xmm0, %xmm0 2431 ; AVX2-NEXT: shlq $63, %r13 2432 ; AVX2-NEXT: sarq $63, %r13 2433 ; AVX2-NEXT: vmovd %r13d, %xmm1 2434 ; AVX2-NEXT: shlq $62, %r12 2435 ; AVX2-NEXT: sarq $63, %r12 2436 ; AVX2-NEXT: vpinsrw $1, %r12d, %xmm1, %xmm1 2437 ; AVX2-NEXT: shlq $61, %rbx 2438 ; AVX2-NEXT: sarq $63, %rbx 2439 ; AVX2-NEXT: vpinsrw $2, %ebx, %xmm1, %xmm1 2440 ; AVX2-NEXT: shlq $60, %rdi 2441 ; AVX2-NEXT: sarq $63, %rdi 2442 ; AVX2-NEXT: vpinsrw $3, %edi, %xmm1, %xmm1 2443 ; AVX2-NEXT: shlq $59, %rcx 2444 ; AVX2-NEXT: sarq $63, %rcx 2445 ; AVX2-NEXT: vpinsrw $4, %ecx, %xmm1, %xmm1 2446 ; AVX2-NEXT: shlq $58, %rdx 2447 ; AVX2-NEXT: sarq $63, %rdx 2448 ; AVX2-NEXT: vpinsrw $5, %edx, %xmm1, %xmm1 2449 ; AVX2-NEXT: shlq $57, %rsi 2450 ; AVX2-NEXT: sarq $63, %rsi 2451 ; AVX2-NEXT: vpinsrw $6, %esi, %xmm1, %xmm1 2452 ; AVX2-NEXT: shrq $7, %rbp 2453 ; AVX2-NEXT: vpinsrw $7, %ebp, %xmm1, %xmm1 2454 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 2455 ; AVX2-NEXT: popq %rbx 2456 ; AVX2-NEXT: popq %r12 2457 ; AVX2-NEXT: popq %r13 2458 ; AVX2-NEXT: popq %r14 2459 ; AVX2-NEXT: popq %r15 2460 ; AVX2-NEXT: popq %rbp 2461 ; AVX2-NEXT: retq 2462 ; 2463 ; X32-SSE41-LABEL: load_sext_16i1_to_16i16: 2464 ; X32-SSE41: # BB#0: # %entry 2465 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 2466 ; X32-SSE41-NEXT: movzwl (%eax), %eax 2467 ; X32-SSE41-NEXT: movl %eax, %ecx 2468 ; X32-SSE41-NEXT: shrl %ecx 2469 ; X32-SSE41-NEXT: andl $1, %ecx 2470 ; X32-SSE41-NEXT: movl %eax, %edx 2471 ; X32-SSE41-NEXT: andl $1, %edx 2472 ; X32-SSE41-NEXT: movd %edx, %xmm1 2473 ; X32-SSE41-NEXT: pinsrb $1, %ecx, %xmm1 2474 ; X32-SSE41-NEXT: movl %eax, %ecx 2475 ; X32-SSE41-NEXT: shrl $2, %ecx 2476 ; X32-SSE41-NEXT: andl $1, %ecx 2477 ; X32-SSE41-NEXT: pinsrb $2, %ecx, %xmm1 2478 ; X32-SSE41-NEXT: movl %eax, %ecx 2479 ; X32-SSE41-NEXT: shrl $3, %ecx 2480 ; X32-SSE41-NEXT: andl $1, %ecx 2481 ; X32-SSE41-NEXT: pinsrb $3, %ecx, %xmm1 2482 ; X32-SSE41-NEXT: movl %eax, %ecx 2483 ; X32-SSE41-NEXT: shrl $4, %ecx 2484 ; X32-SSE41-NEXT: andl $1, %ecx 2485 ; X32-SSE41-NEXT: pinsrb $4, %ecx, %xmm1 2486 ; X32-SSE41-NEXT: movl %eax, %ecx 2487 ; X32-SSE41-NEXT: shrl $5, %ecx 2488 ; X32-SSE41-NEXT: andl $1, %ecx 2489 ; X32-SSE41-NEXT: pinsrb $5, %ecx, %xmm1 2490 ; X32-SSE41-NEXT: movl %eax, %ecx 2491 ; X32-SSE41-NEXT: shrl $6, %ecx 2492 ; X32-SSE41-NEXT: andl $1, %ecx 2493 ; X32-SSE41-NEXT: pinsrb $6, %ecx, %xmm1 2494 ; X32-SSE41-NEXT: movl %eax, %ecx 2495 ; X32-SSE41-NEXT: shrl $7, %ecx 2496 ; X32-SSE41-NEXT: andl $1, %ecx 2497 ; X32-SSE41-NEXT: pinsrb $7, %ecx, %xmm1 2498 ; X32-SSE41-NEXT: movl %eax, %ecx 2499 ; X32-SSE41-NEXT: shrl $8, %ecx 2500 ; X32-SSE41-NEXT: andl $1, %ecx 2501 ; X32-SSE41-NEXT: pinsrb $8, %ecx, %xmm1 2502 ; X32-SSE41-NEXT: movl %eax, %ecx 2503 ; X32-SSE41-NEXT: shrl $9, %ecx 2504 ; X32-SSE41-NEXT: andl $1, %ecx 2505 ; X32-SSE41-NEXT: pinsrb $9, %ecx, %xmm1 2506 ; X32-SSE41-NEXT: movl %eax, %ecx 2507 ; X32-SSE41-NEXT: shrl $10, %ecx 2508 ; X32-SSE41-NEXT: andl $1, %ecx 2509 ; X32-SSE41-NEXT: pinsrb $10, %ecx, %xmm1 2510 ; X32-SSE41-NEXT: movl %eax, %ecx 2511 ; X32-SSE41-NEXT: shrl $11, %ecx 2512 ; X32-SSE41-NEXT: andl $1, %ecx 2513 ; X32-SSE41-NEXT: pinsrb $11, %ecx, %xmm1 2514 ; X32-SSE41-NEXT: movl %eax, %ecx 2515 ; X32-SSE41-NEXT: shrl $12, %ecx 2516 ; X32-SSE41-NEXT: andl $1, %ecx 2517 ; X32-SSE41-NEXT: pinsrb $12, %ecx, %xmm1 2518 ; X32-SSE41-NEXT: movl %eax, %ecx 2519 ; X32-SSE41-NEXT: shrl $13, %ecx 2520 ; X32-SSE41-NEXT: andl $1, %ecx 2521 ; X32-SSE41-NEXT: pinsrb $13, %ecx, %xmm1 2522 ; X32-SSE41-NEXT: movl %eax, %ecx 2523 ; X32-SSE41-NEXT: shrl $14, %ecx 2524 ; X32-SSE41-NEXT: andl $1, %ecx 2525 ; X32-SSE41-NEXT: pinsrb $14, %ecx, %xmm1 2526 ; X32-SSE41-NEXT: shrl $15, %eax 2527 ; X32-SSE41-NEXT: pinsrb $15, %eax, %xmm1 2528 ; 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 2529 ; X32-SSE41-NEXT: psllw $15, %xmm0 2530 ; X32-SSE41-NEXT: psraw $15, %xmm0 2531 ; X32-SSE41-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 2532 ; X32-SSE41-NEXT: psllw $15, %xmm1 2533 ; X32-SSE41-NEXT: psraw $15, %xmm1 2534 ; X32-SSE41-NEXT: retl 2535 entry: 2536 %X = load <16 x i1>, <16 x i1>* %ptr 2537 %Y = sext <16 x i1> %X to <16 x i16> 2538 ret <16 x i16> %Y 2539 } 2540 2541 define <32 x i8> @load_sext_32i1_to_32i8(<32 x i1> *%ptr) nounwind readnone { 2542 ; SSE2-LABEL: load_sext_32i1_to_32i8: 2543 ; SSE2: # BB#0: # %entry 2544 ; SSE2-NEXT: pushq %rbp 2545 ; SSE2-NEXT: pushq %r15 2546 ; SSE2-NEXT: pushq %r14 2547 ; SSE2-NEXT: pushq %r13 2548 ; SSE2-NEXT: pushq %r12 2549 ; SSE2-NEXT: pushq %rbx 2550 ; SSE2-NEXT: movswq (%rdi), %rbx 2551 ; SSE2-NEXT: movq %rbx, %r10 2552 ; SSE2-NEXT: movq %rbx, %r8 2553 ; SSE2-NEXT: movq %rbx, %r9 2554 ; SSE2-NEXT: movq %rbx, %r11 2555 ; SSE2-NEXT: movq %rbx, %r14 2556 ; SSE2-NEXT: movq %rbx, %r15 2557 ; SSE2-NEXT: movq %rbx, %r12 2558 ; SSE2-NEXT: movq %rbx, %r13 2559 ; SSE2-NEXT: movq %rbx, %rdx 2560 ; SSE2-NEXT: movq %rbx, %rsi 2561 ; SSE2-NEXT: movq %rbx, %rcx 2562 ; SSE2-NEXT: movq %rbx, %rbp 2563 ; SSE2-NEXT: movq %rbx, %rax 2564 ; SSE2-NEXT: shlq $49, %rax 2565 ; SSE2-NEXT: sarq $63, %rax 2566 ; SSE2-NEXT: movd %eax, %xmm0 2567 ; SSE2-NEXT: movq %rbx, %rax 2568 ; SSE2-NEXT: shlq $57, %r10 2569 ; SSE2-NEXT: sarq $63, %r10 2570 ; SSE2-NEXT: movd %r10d, %xmm15 2571 ; SSE2-NEXT: movq %rbx, %r10 2572 ; SSE2-NEXT: movsbq %bl, %rbx 2573 ; 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] 2574 ; SSE2-NEXT: shlq $53, %r8 2575 ; SSE2-NEXT: sarq $63, %r8 2576 ; SSE2-NEXT: movd %r8d, %xmm8 2577 ; SSE2-NEXT: shlq $61, %r9 2578 ; SSE2-NEXT: sarq $63, %r9 2579 ; SSE2-NEXT: movd %r9d, %xmm2 2580 ; SSE2-NEXT: shlq $51, %r11 2581 ; SSE2-NEXT: sarq $63, %r11 2582 ; SSE2-NEXT: movd %r11d, %xmm9 2583 ; SSE2-NEXT: shlq $59, %r14 2584 ; SSE2-NEXT: sarq $63, %r14 2585 ; SSE2-NEXT: movd %r14d, %xmm5 2586 ; SSE2-NEXT: shlq $55, %r15 2587 ; SSE2-NEXT: sarq $63, %r15 2588 ; SSE2-NEXT: movd %r15d, %xmm10 2589 ; SSE2-NEXT: shlq $63, %r12 2590 ; SSE2-NEXT: sarq $63, %r12 2591 ; SSE2-NEXT: movd %r12d, %xmm0 2592 ; SSE2-NEXT: shlq $50, %r13 2593 ; SSE2-NEXT: sarq $63, %r13 2594 ; SSE2-NEXT: movd %r13d, %xmm11 2595 ; SSE2-NEXT: shlq $58, %rdx 2596 ; SSE2-NEXT: sarq $63, %rdx 2597 ; SSE2-NEXT: movd %edx, %xmm4 2598 ; SSE2-NEXT: shlq $54, %rsi 2599 ; SSE2-NEXT: sarq $63, %rsi 2600 ; SSE2-NEXT: movd %esi, %xmm12 2601 ; SSE2-NEXT: shlq $62, %rcx 2602 ; SSE2-NEXT: sarq $63, %rcx 2603 ; SSE2-NEXT: movd %ecx, %xmm6 2604 ; SSE2-NEXT: shlq $52, %rbp 2605 ; SSE2-NEXT: sarq $63, %rbp 2606 ; SSE2-NEXT: movd %ebp, %xmm13 2607 ; SSE2-NEXT: shlq $60, %rax 2608 ; SSE2-NEXT: sarq $63, %rax 2609 ; SSE2-NEXT: movd %eax, %xmm7 2610 ; SSE2-NEXT: shrq $15, %r10 2611 ; SSE2-NEXT: movd %r10d, %xmm14 2612 ; SSE2-NEXT: shrq $7, %rbx 2613 ; SSE2-NEXT: movd %ebx, %xmm3 2614 ; SSE2-NEXT: movswq 2(%rdi), %rdx 2615 ; SSE2-NEXT: movq %rdx, %r8 2616 ; SSE2-NEXT: movq %rdx, %r9 2617 ; SSE2-NEXT: movq %rdx, %r10 2618 ; SSE2-NEXT: movq %rdx, %r11 2619 ; SSE2-NEXT: movq %rdx, %r14 2620 ; SSE2-NEXT: movq %rdx, %r15 2621 ; SSE2-NEXT: movq %rdx, %r12 2622 ; SSE2-NEXT: movq %rdx, %r13 2623 ; SSE2-NEXT: movq %rdx, %rbx 2624 ; SSE2-NEXT: movq %rdx, %rax 2625 ; SSE2-NEXT: movq %rdx, %rcx 2626 ; SSE2-NEXT: movq %rdx, %rsi 2627 ; SSE2-NEXT: movq %rdx, %rdi 2628 ; SSE2-NEXT: movq %rdx, %rbp 2629 ; SSE2-NEXT: shlq $49, %rbp 2630 ; SSE2-NEXT: sarq $63, %rbp 2631 ; SSE2-NEXT: movd %ebp, %xmm1 2632 ; SSE2-NEXT: movq %rdx, %rbp 2633 ; SSE2-NEXT: movsbq %dl, %rdx 2634 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm8[0],xmm2[1],xmm8[1],xmm2[2],xmm8[2],xmm2[3],xmm8[3],xmm2[4],xmm8[4],xmm2[5],xmm8[5],xmm2[6],xmm8[6],xmm2[7],xmm8[7] 2635 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm15[0],xmm2[1],xmm15[1],xmm2[2],xmm15[2],xmm2[3],xmm15[3],xmm2[4],xmm15[4],xmm2[5],xmm15[5],xmm2[6],xmm15[6],xmm2[7],xmm15[7] 2636 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm9[0],xmm5[1],xmm9[1],xmm5[2],xmm9[2],xmm5[3],xmm9[3],xmm5[4],xmm9[4],xmm5[5],xmm9[5],xmm5[6],xmm9[6],xmm5[7],xmm9[7] 2637 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm10[0],xmm0[1],xmm10[1],xmm0[2],xmm10[2],xmm0[3],xmm10[3],xmm0[4],xmm10[4],xmm0[5],xmm10[5],xmm0[6],xmm10[6],xmm0[7],xmm10[7] 2638 ; 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] 2639 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7] 2640 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm11[0],xmm4[1],xmm11[1],xmm4[2],xmm11[2],xmm4[3],xmm11[3],xmm4[4],xmm11[4],xmm4[5],xmm11[5],xmm4[6],xmm11[6],xmm4[7],xmm11[7] 2641 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm12[0],xmm6[1],xmm12[1],xmm6[2],xmm12[2],xmm6[3],xmm12[3],xmm6[4],xmm12[4],xmm6[5],xmm12[5],xmm6[6],xmm12[6],xmm6[7],xmm12[7] 2642 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm4[0],xmm6[1],xmm4[1],xmm6[2],xmm4[2],xmm6[3],xmm4[3],xmm6[4],xmm4[4],xmm6[5],xmm4[5],xmm6[6],xmm4[6],xmm6[7],xmm4[7] 2643 ; 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] 2644 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm14[0],xmm3[1],xmm14[1],xmm3[2],xmm14[2],xmm3[3],xmm14[3],xmm3[4],xmm14[4],xmm3[5],xmm14[5],xmm3[6],xmm14[6],xmm3[7],xmm14[7] 2645 ; SSE2-NEXT: shlq $57, %r8 2646 ; SSE2-NEXT: sarq $63, %r8 2647 ; SSE2-NEXT: movd %r8d, %xmm2 2648 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm3[0],xmm7[1],xmm3[1],xmm7[2],xmm3[2],xmm7[3],xmm3[3],xmm7[4],xmm3[4],xmm7[5],xmm3[5],xmm7[6],xmm3[6],xmm7[7],xmm3[7] 2649 ; SSE2-NEXT: shlq $53, %r9 2650 ; SSE2-NEXT: sarq $63, %r9 2651 ; SSE2-NEXT: movd %r9d, %xmm3 2652 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[1],xmm7[1],xmm6[2],xmm7[2],xmm6[3],xmm7[3],xmm6[4],xmm7[4],xmm6[5],xmm7[5],xmm6[6],xmm7[6],xmm6[7],xmm7[7] 2653 ; SSE2-NEXT: shlq $61, %r10 2654 ; SSE2-NEXT: sarq $63, %r10 2655 ; SSE2-NEXT: movd %r10d, %xmm4 2656 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm6[0],xmm0[1],xmm6[1],xmm0[2],xmm6[2],xmm0[3],xmm6[3],xmm0[4],xmm6[4],xmm0[5],xmm6[5],xmm0[6],xmm6[6],xmm0[7],xmm6[7] 2657 ; SSE2-NEXT: shlq $51, %r11 2658 ; SSE2-NEXT: sarq $63, %r11 2659 ; SSE2-NEXT: movd %r11d, %xmm5 2660 ; 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] 2661 ; SSE2-NEXT: shlq $59, %r14 2662 ; SSE2-NEXT: sarq $63, %r14 2663 ; SSE2-NEXT: movd %r14d, %xmm6 2664 ; 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] 2665 ; SSE2-NEXT: shlq $55, %r15 2666 ; SSE2-NEXT: sarq $63, %r15 2667 ; SSE2-NEXT: movd %r15d, %xmm3 2668 ; 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] 2669 ; SSE2-NEXT: shlq $63, %r12 2670 ; SSE2-NEXT: sarq $63, %r12 2671 ; SSE2-NEXT: movd %r12d, %xmm1 2672 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm5[0],xmm6[1],xmm5[1],xmm6[2],xmm5[2],xmm6[3],xmm5[3],xmm6[4],xmm5[4],xmm6[5],xmm5[5],xmm6[6],xmm5[6],xmm6[7],xmm5[7] 2673 ; SSE2-NEXT: shlq $50, %r13 2674 ; SSE2-NEXT: sarq $63, %r13 2675 ; SSE2-NEXT: movd %r13d, %xmm2 2676 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7] 2677 ; SSE2-NEXT: shlq $58, %rbx 2678 ; SSE2-NEXT: sarq $63, %rbx 2679 ; SSE2-NEXT: movd %ebx, %xmm3 2680 ; 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] 2681 ; SSE2-NEXT: shlq $54, %rax 2682 ; SSE2-NEXT: sarq $63, %rax 2683 ; SSE2-NEXT: movd %eax, %xmm5 2684 ; 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] 2685 ; SSE2-NEXT: shlq $62, %rcx 2686 ; SSE2-NEXT: sarq $63, %rcx 2687 ; SSE2-NEXT: movd %ecx, %xmm4 2688 ; 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] 2689 ; SSE2-NEXT: shlq $52, %rsi 2690 ; SSE2-NEXT: sarq $63, %rsi 2691 ; SSE2-NEXT: movd %esi, %xmm2 2692 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1],xmm4[2],xmm5[2],xmm4[3],xmm5[3],xmm4[4],xmm5[4],xmm4[5],xmm5[5],xmm4[6],xmm5[6],xmm4[7],xmm5[7] 2693 ; 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] 2694 ; SSE2-NEXT: shlq $60, %rdi 2695 ; SSE2-NEXT: sarq $63, %rdi 2696 ; SSE2-NEXT: movd %edi, %xmm3 2697 ; 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] 2698 ; SSE2-NEXT: shrq $15, %rbp 2699 ; SSE2-NEXT: movd %ebp, %xmm2 2700 ; SSE2-NEXT: shrq $7, %rdx 2701 ; SSE2-NEXT: movd %edx, %xmm5 2702 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1],xmm5[2],xmm2[2],xmm5[3],xmm2[3],xmm5[4],xmm2[4],xmm5[5],xmm2[5],xmm5[6],xmm2[6],xmm5[7],xmm2[7] 2703 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm5[0],xmm3[1],xmm5[1],xmm3[2],xmm5[2],xmm3[3],xmm5[3],xmm3[4],xmm5[4],xmm3[5],xmm5[5],xmm3[6],xmm5[6],xmm3[7],xmm5[7] 2704 ; 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] 2705 ; 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] 2706 ; SSE2-NEXT: popq %rbx 2707 ; SSE2-NEXT: popq %r12 2708 ; SSE2-NEXT: popq %r13 2709 ; SSE2-NEXT: popq %r14 2710 ; SSE2-NEXT: popq %r15 2711 ; SSE2-NEXT: popq %rbp 2712 ; SSE2-NEXT: retq 2713 ; 2714 ; SSSE3-LABEL: load_sext_32i1_to_32i8: 2715 ; SSSE3: # BB#0: # %entry 2716 ; SSSE3-NEXT: pushq %rbp 2717 ; SSSE3-NEXT: pushq %r15 2718 ; SSSE3-NEXT: pushq %r14 2719 ; SSSE3-NEXT: pushq %r13 2720 ; SSSE3-NEXT: pushq %r12 2721 ; SSSE3-NEXT: pushq %rbx 2722 ; SSSE3-NEXT: movswq (%rdi), %rbx 2723 ; SSSE3-NEXT: movq %rbx, %r10 2724 ; SSSE3-NEXT: movq %rbx, %r8 2725 ; SSSE3-NEXT: movq %rbx, %r9 2726 ; SSSE3-NEXT: movq %rbx, %r11 2727 ; SSSE3-NEXT: movq %rbx, %r14 2728 ; SSSE3-NEXT: movq %rbx, %r15 2729 ; SSSE3-NEXT: movq %rbx, %r12 2730 ; SSSE3-NEXT: movq %rbx, %r13 2731 ; SSSE3-NEXT: movq %rbx, %rdx 2732 ; SSSE3-NEXT: movq %rbx, %rsi 2733 ; SSSE3-NEXT: movq %rbx, %rcx 2734 ; SSSE3-NEXT: movq %rbx, %rbp 2735 ; SSSE3-NEXT: movq %rbx, %rax 2736 ; SSSE3-NEXT: shlq $49, %rax 2737 ; SSSE3-NEXT: sarq $63, %rax 2738 ; SSSE3-NEXT: movd %eax, %xmm0 2739 ; SSSE3-NEXT: movq %rbx, %rax 2740 ; SSSE3-NEXT: shlq $57, %r10 2741 ; SSSE3-NEXT: sarq $63, %r10 2742 ; SSSE3-NEXT: movd %r10d, %xmm15 2743 ; SSSE3-NEXT: movq %rbx, %r10 2744 ; SSSE3-NEXT: movsbq %bl, %rbx 2745 ; 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] 2746 ; SSSE3-NEXT: shlq $53, %r8 2747 ; SSSE3-NEXT: sarq $63, %r8 2748 ; SSSE3-NEXT: movd %r8d, %xmm8 2749 ; SSSE3-NEXT: shlq $61, %r9 2750 ; SSSE3-NEXT: sarq $63, %r9 2751 ; SSSE3-NEXT: movd %r9d, %xmm2 2752 ; SSSE3-NEXT: shlq $51, %r11 2753 ; SSSE3-NEXT: sarq $63, %r11 2754 ; SSSE3-NEXT: movd %r11d, %xmm9 2755 ; SSSE3-NEXT: shlq $59, %r14 2756 ; SSSE3-NEXT: sarq $63, %r14 2757 ; SSSE3-NEXT: movd %r14d, %xmm5 2758 ; SSSE3-NEXT: shlq $55, %r15 2759 ; SSSE3-NEXT: sarq $63, %r15 2760 ; SSSE3-NEXT: movd %r15d, %xmm10 2761 ; SSSE3-NEXT: shlq $63, %r12 2762 ; SSSE3-NEXT: sarq $63, %r12 2763 ; SSSE3-NEXT: movd %r12d, %xmm0 2764 ; SSSE3-NEXT: shlq $50, %r13 2765 ; SSSE3-NEXT: sarq $63, %r13 2766 ; SSSE3-NEXT: movd %r13d, %xmm11 2767 ; SSSE3-NEXT: shlq $58, %rdx 2768 ; SSSE3-NEXT: sarq $63, %rdx 2769 ; SSSE3-NEXT: movd %edx, %xmm4 2770 ; SSSE3-NEXT: shlq $54, %rsi 2771 ; SSSE3-NEXT: sarq $63, %rsi 2772 ; SSSE3-NEXT: movd %esi, %xmm12 2773 ; SSSE3-NEXT: shlq $62, %rcx 2774 ; SSSE3-NEXT: sarq $63, %rcx 2775 ; SSSE3-NEXT: movd %ecx, %xmm6 2776 ; SSSE3-NEXT: shlq $52, %rbp 2777 ; SSSE3-NEXT: sarq $63, %rbp 2778 ; SSSE3-NEXT: movd %ebp, %xmm13 2779 ; SSSE3-NEXT: shlq $60, %rax 2780 ; SSSE3-NEXT: sarq $63, %rax 2781 ; SSSE3-NEXT: movd %eax, %xmm7 2782 ; SSSE3-NEXT: shrq $15, %r10 2783 ; SSSE3-NEXT: movd %r10d, %xmm14 2784 ; SSSE3-NEXT: shrq $7, %rbx 2785 ; SSSE3-NEXT: movd %ebx, %xmm3 2786 ; SSSE3-NEXT: movswq 2(%rdi), %rdx 2787 ; SSSE3-NEXT: movq %rdx, %r8 2788 ; SSSE3-NEXT: movq %rdx, %r9 2789 ; SSSE3-NEXT: movq %rdx, %r10 2790 ; SSSE3-NEXT: movq %rdx, %r11 2791 ; SSSE3-NEXT: movq %rdx, %r14 2792 ; SSSE3-NEXT: movq %rdx, %r15 2793 ; SSSE3-NEXT: movq %rdx, %r12 2794 ; SSSE3-NEXT: movq %rdx, %r13 2795 ; SSSE3-NEXT: movq %rdx, %rbx 2796 ; SSSE3-NEXT: movq %rdx, %rax 2797 ; SSSE3-NEXT: movq %rdx, %rcx 2798 ; SSSE3-NEXT: movq %rdx, %rsi 2799 ; SSSE3-NEXT: movq %rdx, %rdi 2800 ; SSSE3-NEXT: movq %rdx, %rbp 2801 ; SSSE3-NEXT: shlq $49, %rbp 2802 ; SSSE3-NEXT: sarq $63, %rbp 2803 ; SSSE3-NEXT: movd %ebp, %xmm1 2804 ; SSSE3-NEXT: movq %rdx, %rbp 2805 ; SSSE3-NEXT: movsbq %dl, %rdx 2806 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm8[0],xmm2[1],xmm8[1],xmm2[2],xmm8[2],xmm2[3],xmm8[3],xmm2[4],xmm8[4],xmm2[5],xmm8[5],xmm2[6],xmm8[6],xmm2[7],xmm8[7] 2807 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm15[0],xmm2[1],xmm15[1],xmm2[2],xmm15[2],xmm2[3],xmm15[3],xmm2[4],xmm15[4],xmm2[5],xmm15[5],xmm2[6],xmm15[6],xmm2[7],xmm15[7] 2808 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm9[0],xmm5[1],xmm9[1],xmm5[2],xmm9[2],xmm5[3],xmm9[3],xmm5[4],xmm9[4],xmm5[5],xmm9[5],xmm5[6],xmm9[6],xmm5[7],xmm9[7] 2809 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm10[0],xmm0[1],xmm10[1],xmm0[2],xmm10[2],xmm0[3],xmm10[3],xmm0[4],xmm10[4],xmm0[5],xmm10[5],xmm0[6],xmm10[6],xmm0[7],xmm10[7] 2810 ; 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] 2811 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3],xmm0[4],xmm2[4],xmm0[5],xmm2[5],xmm0[6],xmm2[6],xmm0[7],xmm2[7] 2812 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm11[0],xmm4[1],xmm11[1],xmm4[2],xmm11[2],xmm4[3],xmm11[3],xmm4[4],xmm11[4],xmm4[5],xmm11[5],xmm4[6],xmm11[6],xmm4[7],xmm11[7] 2813 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm12[0],xmm6[1],xmm12[1],xmm6[2],xmm12[2],xmm6[3],xmm12[3],xmm6[4],xmm12[4],xmm6[5],xmm12[5],xmm6[6],xmm12[6],xmm6[7],xmm12[7] 2814 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm4[0],xmm6[1],xmm4[1],xmm6[2],xmm4[2],xmm6[3],xmm4[3],xmm6[4],xmm4[4],xmm6[5],xmm4[5],xmm6[6],xmm4[6],xmm6[7],xmm4[7] 2815 ; 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] 2816 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm14[0],xmm3[1],xmm14[1],xmm3[2],xmm14[2],xmm3[3],xmm14[3],xmm3[4],xmm14[4],xmm3[5],xmm14[5],xmm3[6],xmm14[6],xmm3[7],xmm14[7] 2817 ; SSSE3-NEXT: shlq $57, %r8 2818 ; SSSE3-NEXT: sarq $63, %r8 2819 ; SSSE3-NEXT: movd %r8d, %xmm2 2820 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm7 = xmm7[0],xmm3[0],xmm7[1],xmm3[1],xmm7[2],xmm3[2],xmm7[3],xmm3[3],xmm7[4],xmm3[4],xmm7[5],xmm3[5],xmm7[6],xmm3[6],xmm7[7],xmm3[7] 2821 ; SSSE3-NEXT: shlq $53, %r9 2822 ; SSSE3-NEXT: sarq $63, %r9 2823 ; SSSE3-NEXT: movd %r9d, %xmm3 2824 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm7[0],xmm6[1],xmm7[1],xmm6[2],xmm7[2],xmm6[3],xmm7[3],xmm6[4],xmm7[4],xmm6[5],xmm7[5],xmm6[6],xmm7[6],xmm6[7],xmm7[7] 2825 ; SSSE3-NEXT: shlq $61, %r10 2826 ; SSSE3-NEXT: sarq $63, %r10 2827 ; SSSE3-NEXT: movd %r10d, %xmm4 2828 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm6[0],xmm0[1],xmm6[1],xmm0[2],xmm6[2],xmm0[3],xmm6[3],xmm0[4],xmm6[4],xmm0[5],xmm6[5],xmm0[6],xmm6[6],xmm0[7],xmm6[7] 2829 ; SSSE3-NEXT: shlq $51, %r11 2830 ; SSSE3-NEXT: sarq $63, %r11 2831 ; SSSE3-NEXT: movd %r11d, %xmm5 2832 ; 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] 2833 ; SSSE3-NEXT: shlq $59, %r14 2834 ; SSSE3-NEXT: sarq $63, %r14 2835 ; SSSE3-NEXT: movd %r14d, %xmm6 2836 ; 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] 2837 ; SSSE3-NEXT: shlq $55, %r15 2838 ; SSSE3-NEXT: sarq $63, %r15 2839 ; SSSE3-NEXT: movd %r15d, %xmm3 2840 ; 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] 2841 ; SSSE3-NEXT: shlq $63, %r12 2842 ; SSSE3-NEXT: sarq $63, %r12 2843 ; SSSE3-NEXT: movd %r12d, %xmm1 2844 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm6 = xmm6[0],xmm5[0],xmm6[1],xmm5[1],xmm6[2],xmm5[2],xmm6[3],xmm5[3],xmm6[4],xmm5[4],xmm6[5],xmm5[5],xmm6[6],xmm5[6],xmm6[7],xmm5[7] 2845 ; SSSE3-NEXT: shlq $50, %r13 2846 ; SSSE3-NEXT: sarq $63, %r13 2847 ; SSSE3-NEXT: movd %r13d, %xmm2 2848 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3],xmm1[4],xmm3[4],xmm1[5],xmm3[5],xmm1[6],xmm3[6],xmm1[7],xmm3[7] 2849 ; SSSE3-NEXT: shlq $58, %rbx 2850 ; SSSE3-NEXT: sarq $63, %rbx 2851 ; SSSE3-NEXT: movd %ebx, %xmm3 2852 ; 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] 2853 ; SSSE3-NEXT: shlq $54, %rax 2854 ; SSSE3-NEXT: sarq $63, %rax 2855 ; SSSE3-NEXT: movd %eax, %xmm5 2856 ; 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] 2857 ; SSSE3-NEXT: shlq $62, %rcx 2858 ; SSSE3-NEXT: sarq $63, %rcx 2859 ; SSSE3-NEXT: movd %ecx, %xmm4 2860 ; 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] 2861 ; SSSE3-NEXT: shlq $52, %rsi 2862 ; SSSE3-NEXT: sarq $63, %rsi 2863 ; SSSE3-NEXT: movd %esi, %xmm2 2864 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[1],xmm5[1],xmm4[2],xmm5[2],xmm4[3],xmm5[3],xmm4[4],xmm5[4],xmm4[5],xmm5[5],xmm4[6],xmm5[6],xmm4[7],xmm5[7] 2865 ; 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] 2866 ; SSSE3-NEXT: shlq $60, %rdi 2867 ; SSSE3-NEXT: sarq $63, %rdi 2868 ; SSSE3-NEXT: movd %edi, %xmm3 2869 ; 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] 2870 ; SSSE3-NEXT: shrq $15, %rbp 2871 ; SSSE3-NEXT: movd %ebp, %xmm2 2872 ; SSSE3-NEXT: shrq $7, %rdx 2873 ; SSSE3-NEXT: movd %edx, %xmm5 2874 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm2[0],xmm5[1],xmm2[1],xmm5[2],xmm2[2],xmm5[3],xmm2[3],xmm5[4],xmm2[4],xmm5[5],xmm2[5],xmm5[6],xmm2[6],xmm5[7],xmm2[7] 2875 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm3 = xmm3[0],xmm5[0],xmm3[1],xmm5[1],xmm3[2],xmm5[2],xmm3[3],xmm5[3],xmm3[4],xmm5[4],xmm3[5],xmm5[5],xmm3[6],xmm5[6],xmm3[7],xmm5[7] 2876 ; 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] 2877 ; 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] 2878 ; SSSE3-NEXT: popq %rbx 2879 ; SSSE3-NEXT: popq %r12 2880 ; SSSE3-NEXT: popq %r13 2881 ; SSSE3-NEXT: popq %r14 2882 ; SSSE3-NEXT: popq %r15 2883 ; SSSE3-NEXT: popq %rbp 2884 ; SSSE3-NEXT: retq 2885 ; 2886 ; SSE41-LABEL: load_sext_32i1_to_32i8: 2887 ; SSE41: # BB#0: # %entry 2888 ; SSE41-NEXT: movswq (%rdi), %rax 2889 ; SSE41-NEXT: movq %rax, %rcx 2890 ; SSE41-NEXT: shlq $62, %rcx 2891 ; SSE41-NEXT: sarq $63, %rcx 2892 ; SSE41-NEXT: movq %rax, %rdx 2893 ; SSE41-NEXT: shlq $63, %rdx 2894 ; SSE41-NEXT: sarq $63, %rdx 2895 ; SSE41-NEXT: movd %edx, %xmm0 2896 ; SSE41-NEXT: pinsrb $1, %ecx, %xmm0 2897 ; SSE41-NEXT: movq %rax, %rcx 2898 ; SSE41-NEXT: shlq $61, %rcx 2899 ; SSE41-NEXT: sarq $63, %rcx 2900 ; SSE41-NEXT: pinsrb $2, %ecx, %xmm0 2901 ; SSE41-NEXT: movq %rax, %rcx 2902 ; SSE41-NEXT: shlq $60, %rcx 2903 ; SSE41-NEXT: sarq $63, %rcx 2904 ; SSE41-NEXT: pinsrb $3, %ecx, %xmm0 2905 ; SSE41-NEXT: movq %rax, %rcx 2906 ; SSE41-NEXT: shlq $59, %rcx 2907 ; SSE41-NEXT: sarq $63, %rcx 2908 ; SSE41-NEXT: pinsrb $4, %ecx, %xmm0 2909 ; SSE41-NEXT: movq %rax, %rcx 2910 ; SSE41-NEXT: shlq $58, %rcx 2911 ; SSE41-NEXT: sarq $63, %rcx 2912 ; SSE41-NEXT: pinsrb $5, %ecx, %xmm0 2913 ; SSE41-NEXT: movq %rax, %rcx 2914 ; SSE41-NEXT: shlq $57, %rcx 2915 ; SSE41-NEXT: sarq $63, %rcx 2916 ; SSE41-NEXT: pinsrb $6, %ecx, %xmm0 2917 ; SSE41-NEXT: movsbq %al, %rcx 2918 ; SSE41-NEXT: shrq $7, %rcx 2919 ; SSE41-NEXT: pinsrb $7, %ecx, %xmm0 2920 ; SSE41-NEXT: movq %rax, %rcx 2921 ; SSE41-NEXT: shlq $55, %rcx 2922 ; SSE41-NEXT: sarq $63, %rcx 2923 ; SSE41-NEXT: pinsrb $8, %ecx, %xmm0 2924 ; SSE41-NEXT: movq %rax, %rcx 2925 ; SSE41-NEXT: shlq $54, %rcx 2926 ; SSE41-NEXT: sarq $63, %rcx 2927 ; SSE41-NEXT: pinsrb $9, %ecx, %xmm0 2928 ; SSE41-NEXT: movq %rax, %rcx 2929 ; SSE41-NEXT: shlq $53, %rcx 2930 ; SSE41-NEXT: sarq $63, %rcx 2931 ; SSE41-NEXT: pinsrb $10, %ecx, %xmm0 2932 ; SSE41-NEXT: movq %rax, %rcx 2933 ; SSE41-NEXT: shlq $52, %rcx 2934 ; SSE41-NEXT: sarq $63, %rcx 2935 ; SSE41-NEXT: pinsrb $11, %ecx, %xmm0 2936 ; SSE41-NEXT: movq %rax, %rcx 2937 ; SSE41-NEXT: shlq $51, %rcx 2938 ; SSE41-NEXT: sarq $63, %rcx 2939 ; SSE41-NEXT: pinsrb $12, %ecx, %xmm0 2940 ; SSE41-NEXT: movq %rax, %rcx 2941 ; SSE41-NEXT: shlq $50, %rcx 2942 ; SSE41-NEXT: sarq $63, %rcx 2943 ; SSE41-NEXT: pinsrb $13, %ecx, %xmm0 2944 ; SSE41-NEXT: movq %rax, %rcx 2945 ; SSE41-NEXT: shlq $49, %rcx 2946 ; SSE41-NEXT: sarq $63, %rcx 2947 ; SSE41-NEXT: pinsrb $14, %ecx, %xmm0 2948 ; SSE41-NEXT: shrq $15, %rax 2949 ; SSE41-NEXT: pinsrb $15, %eax, %xmm0 2950 ; SSE41-NEXT: movswq 2(%rdi), %rax 2951 ; SSE41-NEXT: movq %rax, %rcx 2952 ; SSE41-NEXT: shlq $62, %rcx 2953 ; SSE41-NEXT: sarq $63, %rcx 2954 ; SSE41-NEXT: movq %rax, %rdx 2955 ; SSE41-NEXT: shlq $63, %rdx 2956 ; SSE41-NEXT: sarq $63, %rdx 2957 ; SSE41-NEXT: movd %edx, %xmm1 2958 ; SSE41-NEXT: pinsrb $1, %ecx, %xmm1 2959 ; SSE41-NEXT: movq %rax, %rcx 2960 ; SSE41-NEXT: shlq $61, %rcx 2961 ; SSE41-NEXT: sarq $63, %rcx 2962 ; SSE41-NEXT: pinsrb $2, %ecx, %xmm1 2963 ; SSE41-NEXT: movq %rax, %rcx 2964 ; SSE41-NEXT: shlq $60, %rcx 2965 ; SSE41-NEXT: sarq $63, %rcx 2966 ; SSE41-NEXT: pinsrb $3, %ecx, %xmm1 2967 ; SSE41-NEXT: movq %rax, %rcx 2968 ; SSE41-NEXT: shlq $59, %rcx 2969 ; SSE41-NEXT: sarq $63, %rcx 2970 ; SSE41-NEXT: pinsrb $4, %ecx, %xmm1 2971 ; SSE41-NEXT: movq %rax, %rcx 2972 ; SSE41-NEXT: shlq $58, %rcx 2973 ; SSE41-NEXT: sarq $63, %rcx 2974 ; SSE41-NEXT: pinsrb $5, %ecx, %xmm1 2975 ; SSE41-NEXT: movq %rax, %rcx 2976 ; SSE41-NEXT: shlq $57, %rcx 2977 ; SSE41-NEXT: sarq $63, %rcx 2978 ; SSE41-NEXT: pinsrb $6, %ecx, %xmm1 2979 ; SSE41-NEXT: movsbq %al, %rcx 2980 ; SSE41-NEXT: shrq $7, %rcx 2981 ; SSE41-NEXT: pinsrb $7, %ecx, %xmm1 2982 ; SSE41-NEXT: movq %rax, %rcx 2983 ; SSE41-NEXT: shlq $55, %rcx 2984 ; SSE41-NEXT: sarq $63, %rcx 2985 ; SSE41-NEXT: pinsrb $8, %ecx, %xmm1 2986 ; SSE41-NEXT: movq %rax, %rcx 2987 ; SSE41-NEXT: shlq $54, %rcx 2988 ; SSE41-NEXT: sarq $63, %rcx 2989 ; SSE41-NEXT: pinsrb $9, %ecx, %xmm1 2990 ; SSE41-NEXT: movq %rax, %rcx 2991 ; SSE41-NEXT: shlq $53, %rcx 2992 ; SSE41-NEXT: sarq $63, %rcx 2993 ; SSE41-NEXT: pinsrb $10, %ecx, %xmm1 2994 ; SSE41-NEXT: movq %rax, %rcx 2995 ; SSE41-NEXT: shlq $52, %rcx 2996 ; SSE41-NEXT: sarq $63, %rcx 2997 ; SSE41-NEXT: pinsrb $11, %ecx, %xmm1 2998 ; SSE41-NEXT: movq %rax, %rcx 2999 ; SSE41-NEXT: shlq $51, %rcx 3000 ; SSE41-NEXT: sarq $63, %rcx 3001 ; SSE41-NEXT: pinsrb $12, %ecx, %xmm1 3002 ; SSE41-NEXT: movq %rax, %rcx 3003 ; SSE41-NEXT: shlq $50, %rcx 3004 ; SSE41-NEXT: sarq $63, %rcx 3005 ; SSE41-NEXT: pinsrb $13, %ecx, %xmm1 3006 ; SSE41-NEXT: movq %rax, %rcx 3007 ; SSE41-NEXT: shlq $49, %rcx 3008 ; SSE41-NEXT: sarq $63, %rcx 3009 ; SSE41-NEXT: pinsrb $14, %ecx, %xmm1 3010 ; SSE41-NEXT: shrq $15, %rax 3011 ; SSE41-NEXT: pinsrb $15, %eax, %xmm1 3012 ; SSE41-NEXT: retq 3013 ; 3014 ; AVX1-LABEL: load_sext_32i1_to_32i8: 3015 ; AVX1: # BB#0: # %entry 3016 ; AVX1-NEXT: pushq %rbp 3017 ; AVX1-NEXT: pushq %r15 3018 ; AVX1-NEXT: pushq %r14 3019 ; AVX1-NEXT: pushq %r13 3020 ; AVX1-NEXT: pushq %r12 3021 ; AVX1-NEXT: pushq %rbx 3022 ; AVX1-NEXT: movslq (%rdi), %rax 3023 ; AVX1-NEXT: movq %rax, %rcx 3024 ; AVX1-NEXT: shlq $47, %rcx 3025 ; AVX1-NEXT: sarq $63, %rcx 3026 ; AVX1-NEXT: vmovd %ecx, %xmm0 3027 ; AVX1-NEXT: movq %rax, %r8 3028 ; AVX1-NEXT: movq %rax, %rdx 3029 ; AVX1-NEXT: movq %rax, %rcx 3030 ; AVX1-NEXT: movq %rax, %rdi 3031 ; AVX1-NEXT: movq %rax, %r13 3032 ; AVX1-NEXT: movq %rax, %rsi 3033 ; AVX1-NEXT: movq %rax, %r10 3034 ; AVX1-NEXT: movq %rax, %r11 3035 ; AVX1-NEXT: movq %rax, %r9 3036 ; AVX1-NEXT: movq %rax, %rbx 3037 ; AVX1-NEXT: movq %rax, %r14 3038 ; AVX1-NEXT: movq %rax, %r15 3039 ; AVX1-NEXT: movq %rax, %r12 3040 ; AVX1-NEXT: movq %rax, %rbp 3041 ; AVX1-NEXT: shlq $46, %rbp 3042 ; AVX1-NEXT: sarq $63, %rbp 3043 ; AVX1-NEXT: vpinsrb $1, %ebp, %xmm0, %xmm0 3044 ; AVX1-NEXT: movq %rax, %rbp 3045 ; AVX1-NEXT: shlq $45, %r8 3046 ; AVX1-NEXT: sarq $63, %r8 3047 ; AVX1-NEXT: vpinsrb $2, %r8d, %xmm0, %xmm0 3048 ; AVX1-NEXT: movq %rax, %r8 3049 ; AVX1-NEXT: shlq $44, %rdx 3050 ; AVX1-NEXT: sarq $63, %rdx 3051 ; AVX1-NEXT: vpinsrb $3, %edx, %xmm0, %xmm0 3052 ; AVX1-NEXT: movq %rax, %rdx 3053 ; AVX1-NEXT: shlq $43, %rcx 3054 ; AVX1-NEXT: sarq $63, %rcx 3055 ; AVX1-NEXT: vpinsrb $4, %ecx, %xmm0, %xmm0 3056 ; AVX1-NEXT: movq %rax, %rcx 3057 ; AVX1-NEXT: shlq $42, %rdi 3058 ; AVX1-NEXT: sarq $63, %rdi 3059 ; AVX1-NEXT: vpinsrb $5, %edi, %xmm0, %xmm0 3060 ; AVX1-NEXT: movq %rax, %rdi 3061 ; AVX1-NEXT: shlq $41, %r13 3062 ; AVX1-NEXT: sarq $63, %r13 3063 ; AVX1-NEXT: vpinsrb $6, %r13d, %xmm0, %xmm0 3064 ; AVX1-NEXT: movq %rax, %r13 3065 ; AVX1-NEXT: shlq $40, %rsi 3066 ; AVX1-NEXT: sarq $63, %rsi 3067 ; AVX1-NEXT: vpinsrb $7, %esi, %xmm0, %xmm0 3068 ; AVX1-NEXT: movq %rax, %rsi 3069 ; AVX1-NEXT: shlq $39, %r10 3070 ; AVX1-NEXT: sarq $63, %r10 3071 ; AVX1-NEXT: vpinsrb $8, %r10d, %xmm0, %xmm0 3072 ; AVX1-NEXT: movq %rax, %r10 3073 ; AVX1-NEXT: shlq $38, %r11 3074 ; AVX1-NEXT: sarq $63, %r11 3075 ; AVX1-NEXT: vpinsrb $9, %r11d, %xmm0, %xmm0 3076 ; AVX1-NEXT: movsbq %al, %r11 3077 ; AVX1-NEXT: shlq $37, %r9 3078 ; AVX1-NEXT: sarq $63, %r9 3079 ; AVX1-NEXT: vpinsrb $10, %r9d, %xmm0, %xmm0 3080 ; AVX1-NEXT: movq %rax, %r9 3081 ; AVX1-NEXT: shlq $36, %rbx 3082 ; AVX1-NEXT: sarq $63, %rbx 3083 ; AVX1-NEXT: vpinsrb $11, %ebx, %xmm0, %xmm0 3084 ; AVX1-NEXT: movq %rax, %rbx 3085 ; AVX1-NEXT: shlq $35, %r14 3086 ; AVX1-NEXT: sarq $63, %r14 3087 ; AVX1-NEXT: vpinsrb $12, %r14d, %xmm0, %xmm0 3088 ; AVX1-NEXT: movq %rax, %r14 3089 ; AVX1-NEXT: shlq $34, %r15 3090 ; AVX1-NEXT: sarq $63, %r15 3091 ; AVX1-NEXT: vpinsrb $13, %r15d, %xmm0, %xmm0 3092 ; AVX1-NEXT: movq %rax, %r15 3093 ; AVX1-NEXT: shlq $33, %r12 3094 ; AVX1-NEXT: sarq $63, %r12 3095 ; AVX1-NEXT: vpinsrb $14, %r12d, %xmm0, %xmm0 3096 ; AVX1-NEXT: movq %rax, %r12 3097 ; AVX1-NEXT: shrq $31, %rbp 3098 ; AVX1-NEXT: vpinsrb $15, %ebp, %xmm0, %xmm0 3099 ; AVX1-NEXT: movq %rax, %rbp 3100 ; AVX1-NEXT: shlq $63, %rdx 3101 ; AVX1-NEXT: sarq $63, %rdx 3102 ; AVX1-NEXT: vmovd %edx, %xmm1 3103 ; AVX1-NEXT: movq %rax, %rdx 3104 ; AVX1-NEXT: movswq %ax, %rax 3105 ; AVX1-NEXT: shlq $62, %r8 3106 ; AVX1-NEXT: sarq $63, %r8 3107 ; AVX1-NEXT: vpinsrb $1, %r8d, %xmm1, %xmm1 3108 ; AVX1-NEXT: shlq $61, %rcx 3109 ; AVX1-NEXT: sarq $63, %rcx 3110 ; AVX1-NEXT: vpinsrb $2, %ecx, %xmm1, %xmm1 3111 ; AVX1-NEXT: shlq $60, %rdi 3112 ; AVX1-NEXT: sarq $63, %rdi 3113 ; AVX1-NEXT: vpinsrb $3, %edi, %xmm1, %xmm1 3114 ; AVX1-NEXT: shlq $59, %r13 3115 ; AVX1-NEXT: sarq $63, %r13 3116 ; AVX1-NEXT: vpinsrb $4, %r13d, %xmm1, %xmm1 3117 ; AVX1-NEXT: shlq $58, %rsi 3118 ; AVX1-NEXT: sarq $63, %rsi 3119 ; AVX1-NEXT: vpinsrb $5, %esi, %xmm1, %xmm1 3120 ; AVX1-NEXT: shlq $57, %r10 3121 ; AVX1-NEXT: sarq $63, %r10 3122 ; AVX1-NEXT: vpinsrb $6, %r10d, %xmm1, %xmm1 3123 ; AVX1-NEXT: shrq $7, %r11 3124 ; AVX1-NEXT: vpinsrb $7, %r11d, %xmm1, %xmm1 3125 ; AVX1-NEXT: shlq $55, %r9 3126 ; AVX1-NEXT: sarq $63, %r9 3127 ; AVX1-NEXT: vpinsrb $8, %r9d, %xmm1, %xmm1 3128 ; AVX1-NEXT: shlq $54, %rbx 3129 ; AVX1-NEXT: sarq $63, %rbx 3130 ; AVX1-NEXT: vpinsrb $9, %ebx, %xmm1, %xmm1 3131 ; AVX1-NEXT: shlq $53, %r14 3132 ; AVX1-NEXT: sarq $63, %r14 3133 ; AVX1-NEXT: vpinsrb $10, %r14d, %xmm1, %xmm1 3134 ; AVX1-NEXT: shlq $52, %r15 3135 ; AVX1-NEXT: sarq $63, %r15 3136 ; AVX1-NEXT: vpinsrb $11, %r15d, %xmm1, %xmm1 3137 ; AVX1-NEXT: shlq $51, %r12 3138 ; AVX1-NEXT: sarq $63, %r12 3139 ; AVX1-NEXT: vpinsrb $12, %r12d, %xmm1, %xmm1 3140 ; AVX1-NEXT: shlq $50, %rbp 3141 ; AVX1-NEXT: sarq $63, %rbp 3142 ; AVX1-NEXT: vpinsrb $13, %ebp, %xmm1, %xmm1 3143 ; AVX1-NEXT: shlq $49, %rdx 3144 ; AVX1-NEXT: sarq $63, %rdx 3145 ; AVX1-NEXT: vpinsrb $14, %edx, %xmm1, %xmm1 3146 ; AVX1-NEXT: shrq $15, %rax 3147 ; AVX1-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1 3148 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3149 ; AVX1-NEXT: popq %rbx 3150 ; AVX1-NEXT: popq %r12 3151 ; AVX1-NEXT: popq %r13 3152 ; AVX1-NEXT: popq %r14 3153 ; AVX1-NEXT: popq %r15 3154 ; AVX1-NEXT: popq %rbp 3155 ; AVX1-NEXT: retq 3156 ; 3157 ; AVX2-LABEL: load_sext_32i1_to_32i8: 3158 ; AVX2: # BB#0: # %entry 3159 ; AVX2-NEXT: pushq %rbp 3160 ; AVX2-NEXT: pushq %r15 3161 ; AVX2-NEXT: pushq %r14 3162 ; AVX2-NEXT: pushq %r13 3163 ; AVX2-NEXT: pushq %r12 3164 ; AVX2-NEXT: pushq %rbx 3165 ; AVX2-NEXT: movslq (%rdi), %rax 3166 ; AVX2-NEXT: movq %rax, %rcx 3167 ; AVX2-NEXT: shlq $47, %rcx 3168 ; AVX2-NEXT: sarq $63, %rcx 3169 ; AVX2-NEXT: vmovd %ecx, %xmm0 3170 ; AVX2-NEXT: movq %rax, %r8 3171 ; AVX2-NEXT: movq %rax, %rdx 3172 ; AVX2-NEXT: movq %rax, %rcx 3173 ; AVX2-NEXT: movq %rax, %rdi 3174 ; AVX2-NEXT: movq %rax, %r13 3175 ; AVX2-NEXT: movq %rax, %rsi 3176 ; AVX2-NEXT: movq %rax, %r10 3177 ; AVX2-NEXT: movq %rax, %r11 3178 ; AVX2-NEXT: movq %rax, %r9 3179 ; AVX2-NEXT: movq %rax, %rbx 3180 ; AVX2-NEXT: movq %rax, %r14 3181 ; AVX2-NEXT: movq %rax, %r15 3182 ; AVX2-NEXT: movq %rax, %r12 3183 ; AVX2-NEXT: movq %rax, %rbp 3184 ; AVX2-NEXT: shlq $46, %rbp 3185 ; AVX2-NEXT: sarq $63, %rbp 3186 ; AVX2-NEXT: vpinsrb $1, %ebp, %xmm0, %xmm0 3187 ; AVX2-NEXT: movq %rax, %rbp 3188 ; AVX2-NEXT: shlq $45, %r8 3189 ; AVX2-NEXT: sarq $63, %r8 3190 ; AVX2-NEXT: vpinsrb $2, %r8d, %xmm0, %xmm0 3191 ; AVX2-NEXT: movq %rax, %r8 3192 ; AVX2-NEXT: shlq $44, %rdx 3193 ; AVX2-NEXT: sarq $63, %rdx 3194 ; AVX2-NEXT: vpinsrb $3, %edx, %xmm0, %xmm0 3195 ; AVX2-NEXT: movq %rax, %rdx 3196 ; AVX2-NEXT: shlq $43, %rcx 3197 ; AVX2-NEXT: sarq $63, %rcx 3198 ; AVX2-NEXT: vpinsrb $4, %ecx, %xmm0, %xmm0 3199 ; AVX2-NEXT: movq %rax, %rcx 3200 ; AVX2-NEXT: shlq $42, %rdi 3201 ; AVX2-NEXT: sarq $63, %rdi 3202 ; AVX2-NEXT: vpinsrb $5, %edi, %xmm0, %xmm0 3203 ; AVX2-NEXT: movq %rax, %rdi 3204 ; AVX2-NEXT: shlq $41, %r13 3205 ; AVX2-NEXT: sarq $63, %r13 3206 ; AVX2-NEXT: vpinsrb $6, %r13d, %xmm0, %xmm0 3207 ; AVX2-NEXT: movq %rax, %r13 3208 ; AVX2-NEXT: shlq $40, %rsi 3209 ; AVX2-NEXT: sarq $63, %rsi 3210 ; AVX2-NEXT: vpinsrb $7, %esi, %xmm0, %xmm0 3211 ; AVX2-NEXT: movq %rax, %rsi 3212 ; AVX2-NEXT: shlq $39, %r10 3213 ; AVX2-NEXT: sarq $63, %r10 3214 ; AVX2-NEXT: vpinsrb $8, %r10d, %xmm0, %xmm0 3215 ; AVX2-NEXT: movq %rax, %r10 3216 ; AVX2-NEXT: shlq $38, %r11 3217 ; AVX2-NEXT: sarq $63, %r11 3218 ; AVX2-NEXT: vpinsrb $9, %r11d, %xmm0, %xmm0 3219 ; AVX2-NEXT: movsbq %al, %r11 3220 ; AVX2-NEXT: shlq $37, %r9 3221 ; AVX2-NEXT: sarq $63, %r9 3222 ; AVX2-NEXT: vpinsrb $10, %r9d, %xmm0, %xmm0 3223 ; AVX2-NEXT: movq %rax, %r9 3224 ; AVX2-NEXT: shlq $36, %rbx 3225 ; AVX2-NEXT: sarq $63, %rbx 3226 ; AVX2-NEXT: vpinsrb $11, %ebx, %xmm0, %xmm0 3227 ; AVX2-NEXT: movq %rax, %rbx 3228 ; AVX2-NEXT: shlq $35, %r14 3229 ; AVX2-NEXT: sarq $63, %r14 3230 ; AVX2-NEXT: vpinsrb $12, %r14d, %xmm0, %xmm0 3231 ; AVX2-NEXT: movq %rax, %r14 3232 ; AVX2-NEXT: shlq $34, %r15 3233 ; AVX2-NEXT: sarq $63, %r15 3234 ; AVX2-NEXT: vpinsrb $13, %r15d, %xmm0, %xmm0 3235 ; AVX2-NEXT: movq %rax, %r15 3236 ; AVX2-NEXT: shlq $33, %r12 3237 ; AVX2-NEXT: sarq $63, %r12 3238 ; AVX2-NEXT: vpinsrb $14, %r12d, %xmm0, %xmm0 3239 ; AVX2-NEXT: movq %rax, %r12 3240 ; AVX2-NEXT: shrq $31, %rbp 3241 ; AVX2-NEXT: vpinsrb $15, %ebp, %xmm0, %xmm0 3242 ; AVX2-NEXT: movq %rax, %rbp 3243 ; AVX2-NEXT: shlq $63, %rdx 3244 ; AVX2-NEXT: sarq $63, %rdx 3245 ; AVX2-NEXT: vmovd %edx, %xmm1 3246 ; AVX2-NEXT: movq %rax, %rdx 3247 ; AVX2-NEXT: movswq %ax, %rax 3248 ; AVX2-NEXT: shlq $62, %r8 3249 ; AVX2-NEXT: sarq $63, %r8 3250 ; AVX2-NEXT: vpinsrb $1, %r8d, %xmm1, %xmm1 3251 ; AVX2-NEXT: shlq $61, %rcx 3252 ; AVX2-NEXT: sarq $63, %rcx 3253 ; AVX2-NEXT: vpinsrb $2, %ecx, %xmm1, %xmm1 3254 ; AVX2-NEXT: shlq $60, %rdi 3255 ; AVX2-NEXT: sarq $63, %rdi 3256 ; AVX2-NEXT: vpinsrb $3, %edi, %xmm1, %xmm1 3257 ; AVX2-NEXT: shlq $59, %r13 3258 ; AVX2-NEXT: sarq $63, %r13 3259 ; AVX2-NEXT: vpinsrb $4, %r13d, %xmm1, %xmm1 3260 ; AVX2-NEXT: shlq $58, %rsi 3261 ; AVX2-NEXT: sarq $63, %rsi 3262 ; AVX2-NEXT: vpinsrb $5, %esi, %xmm1, %xmm1 3263 ; AVX2-NEXT: shlq $57, %r10 3264 ; AVX2-NEXT: sarq $63, %r10 3265 ; AVX2-NEXT: vpinsrb $6, %r10d, %xmm1, %xmm1 3266 ; AVX2-NEXT: shrq $7, %r11 3267 ; AVX2-NEXT: vpinsrb $7, %r11d, %xmm1, %xmm1 3268 ; AVX2-NEXT: shlq $55, %r9 3269 ; AVX2-NEXT: sarq $63, %r9 3270 ; AVX2-NEXT: vpinsrb $8, %r9d, %xmm1, %xmm1 3271 ; AVX2-NEXT: shlq $54, %rbx 3272 ; AVX2-NEXT: sarq $63, %rbx 3273 ; AVX2-NEXT: vpinsrb $9, %ebx, %xmm1, %xmm1 3274 ; AVX2-NEXT: shlq $53, %r14 3275 ; AVX2-NEXT: sarq $63, %r14 3276 ; AVX2-NEXT: vpinsrb $10, %r14d, %xmm1, %xmm1 3277 ; AVX2-NEXT: shlq $52, %r15 3278 ; AVX2-NEXT: sarq $63, %r15 3279 ; AVX2-NEXT: vpinsrb $11, %r15d, %xmm1, %xmm1 3280 ; AVX2-NEXT: shlq $51, %r12 3281 ; AVX2-NEXT: sarq $63, %r12 3282 ; AVX2-NEXT: vpinsrb $12, %r12d, %xmm1, %xmm1 3283 ; AVX2-NEXT: shlq $50, %rbp 3284 ; AVX2-NEXT: sarq $63, %rbp 3285 ; AVX2-NEXT: vpinsrb $13, %ebp, %xmm1, %xmm1 3286 ; AVX2-NEXT: shlq $49, %rdx 3287 ; AVX2-NEXT: sarq $63, %rdx 3288 ; AVX2-NEXT: vpinsrb $14, %edx, %xmm1, %xmm1 3289 ; AVX2-NEXT: shrq $15, %rax 3290 ; AVX2-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1 3291 ; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 3292 ; AVX2-NEXT: popq %rbx 3293 ; AVX2-NEXT: popq %r12 3294 ; AVX2-NEXT: popq %r13 3295 ; AVX2-NEXT: popq %r14 3296 ; AVX2-NEXT: popq %r15 3297 ; AVX2-NEXT: popq %rbp 3298 ; AVX2-NEXT: retq 3299 ; 3300 ; X32-SSE41-LABEL: load_sext_32i1_to_32i8: 3301 ; X32-SSE41: # BB#0: # %entry 3302 ; X32-SSE41-NEXT: pushl %esi 3303 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3304 ; X32-SSE41-NEXT: movswl (%eax), %ecx 3305 ; X32-SSE41-NEXT: movl %ecx, %edx 3306 ; X32-SSE41-NEXT: shll $30, %edx 3307 ; X32-SSE41-NEXT: sarl $31, %edx 3308 ; X32-SSE41-NEXT: movl %ecx, %esi 3309 ; X32-SSE41-NEXT: shll $31, %esi 3310 ; X32-SSE41-NEXT: sarl $31, %esi 3311 ; X32-SSE41-NEXT: movd %esi, %xmm0 3312 ; X32-SSE41-NEXT: pinsrb $1, %edx, %xmm0 3313 ; X32-SSE41-NEXT: movl %ecx, %edx 3314 ; X32-SSE41-NEXT: shll $29, %edx 3315 ; X32-SSE41-NEXT: sarl $31, %edx 3316 ; X32-SSE41-NEXT: pinsrb $2, %edx, %xmm0 3317 ; X32-SSE41-NEXT: movl %ecx, %edx 3318 ; X32-SSE41-NEXT: shll $28, %edx 3319 ; X32-SSE41-NEXT: sarl $31, %edx 3320 ; X32-SSE41-NEXT: pinsrb $3, %edx, %xmm0 3321 ; X32-SSE41-NEXT: movl %ecx, %edx 3322 ; X32-SSE41-NEXT: shll $27, %edx 3323 ; X32-SSE41-NEXT: sarl $31, %edx 3324 ; X32-SSE41-NEXT: pinsrb $4, %edx, %xmm0 3325 ; X32-SSE41-NEXT: movl %ecx, %edx 3326 ; X32-SSE41-NEXT: shll $26, %edx 3327 ; X32-SSE41-NEXT: sarl $31, %edx 3328 ; X32-SSE41-NEXT: pinsrb $5, %edx, %xmm0 3329 ; X32-SSE41-NEXT: movl %ecx, %edx 3330 ; X32-SSE41-NEXT: shll $25, %edx 3331 ; X32-SSE41-NEXT: sarl $31, %edx 3332 ; X32-SSE41-NEXT: pinsrb $6, %edx, %xmm0 3333 ; X32-SSE41-NEXT: movsbl %cl, %edx 3334 ; X32-SSE41-NEXT: shrl $7, %edx 3335 ; X32-SSE41-NEXT: pinsrb $7, %edx, %xmm0 3336 ; X32-SSE41-NEXT: movl %ecx, %edx 3337 ; X32-SSE41-NEXT: shll $23, %edx 3338 ; X32-SSE41-NEXT: sarl $31, %edx 3339 ; X32-SSE41-NEXT: pinsrb $8, %edx, %xmm0 3340 ; X32-SSE41-NEXT: movl %ecx, %edx 3341 ; X32-SSE41-NEXT: shll $22, %edx 3342 ; X32-SSE41-NEXT: sarl $31, %edx 3343 ; X32-SSE41-NEXT: pinsrb $9, %edx, %xmm0 3344 ; X32-SSE41-NEXT: movl %ecx, %edx 3345 ; X32-SSE41-NEXT: shll $21, %edx 3346 ; X32-SSE41-NEXT: sarl $31, %edx 3347 ; X32-SSE41-NEXT: pinsrb $10, %edx, %xmm0 3348 ; X32-SSE41-NEXT: movl %ecx, %edx 3349 ; X32-SSE41-NEXT: shll $20, %edx 3350 ; X32-SSE41-NEXT: sarl $31, %edx 3351 ; X32-SSE41-NEXT: pinsrb $11, %edx, %xmm0 3352 ; X32-SSE41-NEXT: movl %ecx, %edx 3353 ; X32-SSE41-NEXT: shll $19, %edx 3354 ; X32-SSE41-NEXT: sarl $31, %edx 3355 ; X32-SSE41-NEXT: pinsrb $12, %edx, %xmm0 3356 ; X32-SSE41-NEXT: movl %ecx, %edx 3357 ; X32-SSE41-NEXT: shll $18, %edx 3358 ; X32-SSE41-NEXT: sarl $31, %edx 3359 ; X32-SSE41-NEXT: pinsrb $13, %edx, %xmm0 3360 ; X32-SSE41-NEXT: movl %ecx, %edx 3361 ; X32-SSE41-NEXT: shll $17, %edx 3362 ; X32-SSE41-NEXT: sarl $31, %edx 3363 ; X32-SSE41-NEXT: pinsrb $14, %edx, %xmm0 3364 ; X32-SSE41-NEXT: shrl $15, %ecx 3365 ; X32-SSE41-NEXT: pinsrb $15, %ecx, %xmm0 3366 ; X32-SSE41-NEXT: movswl 2(%eax), %eax 3367 ; X32-SSE41-NEXT: movl %eax, %ecx 3368 ; X32-SSE41-NEXT: shll $30, %ecx 3369 ; X32-SSE41-NEXT: sarl $31, %ecx 3370 ; X32-SSE41-NEXT: movl %eax, %edx 3371 ; X32-SSE41-NEXT: shll $31, %edx 3372 ; X32-SSE41-NEXT: sarl $31, %edx 3373 ; X32-SSE41-NEXT: movd %edx, %xmm1 3374 ; X32-SSE41-NEXT: pinsrb $1, %ecx, %xmm1 3375 ; X32-SSE41-NEXT: movl %eax, %ecx 3376 ; X32-SSE41-NEXT: shll $29, %ecx 3377 ; X32-SSE41-NEXT: sarl $31, %ecx 3378 ; X32-SSE41-NEXT: pinsrb $2, %ecx, %xmm1 3379 ; X32-SSE41-NEXT: movl %eax, %ecx 3380 ; X32-SSE41-NEXT: shll $28, %ecx 3381 ; X32-SSE41-NEXT: sarl $31, %ecx 3382 ; X32-SSE41-NEXT: pinsrb $3, %ecx, %xmm1 3383 ; X32-SSE41-NEXT: movl %eax, %ecx 3384 ; X32-SSE41-NEXT: shll $27, %ecx 3385 ; X32-SSE41-NEXT: sarl $31, %ecx 3386 ; X32-SSE41-NEXT: pinsrb $4, %ecx, %xmm1 3387 ; X32-SSE41-NEXT: movl %eax, %ecx 3388 ; X32-SSE41-NEXT: shll $26, %ecx 3389 ; X32-SSE41-NEXT: sarl $31, %ecx 3390 ; X32-SSE41-NEXT: pinsrb $5, %ecx, %xmm1 3391 ; X32-SSE41-NEXT: movl %eax, %ecx 3392 ; X32-SSE41-NEXT: shll $25, %ecx 3393 ; X32-SSE41-NEXT: sarl $31, %ecx 3394 ; X32-SSE41-NEXT: pinsrb $6, %ecx, %xmm1 3395 ; X32-SSE41-NEXT: movsbl %al, %ecx 3396 ; X32-SSE41-NEXT: shrl $7, %ecx 3397 ; X32-SSE41-NEXT: pinsrb $7, %ecx, %xmm1 3398 ; X32-SSE41-NEXT: movl %eax, %ecx 3399 ; X32-SSE41-NEXT: shll $23, %ecx 3400 ; X32-SSE41-NEXT: sarl $31, %ecx 3401 ; X32-SSE41-NEXT: pinsrb $8, %ecx, %xmm1 3402 ; X32-SSE41-NEXT: movl %eax, %ecx 3403 ; X32-SSE41-NEXT: shll $22, %ecx 3404 ; X32-SSE41-NEXT: sarl $31, %ecx 3405 ; X32-SSE41-NEXT: pinsrb $9, %ecx, %xmm1 3406 ; X32-SSE41-NEXT: movl %eax, %ecx 3407 ; X32-SSE41-NEXT: shll $21, %ecx 3408 ; X32-SSE41-NEXT: sarl $31, %ecx 3409 ; X32-SSE41-NEXT: pinsrb $10, %ecx, %xmm1 3410 ; X32-SSE41-NEXT: movl %eax, %ecx 3411 ; X32-SSE41-NEXT: shll $20, %ecx 3412 ; X32-SSE41-NEXT: sarl $31, %ecx 3413 ; X32-SSE41-NEXT: pinsrb $11, %ecx, %xmm1 3414 ; X32-SSE41-NEXT: movl %eax, %ecx 3415 ; X32-SSE41-NEXT: shll $19, %ecx 3416 ; X32-SSE41-NEXT: sarl $31, %ecx 3417 ; X32-SSE41-NEXT: pinsrb $12, %ecx, %xmm1 3418 ; X32-SSE41-NEXT: movl %eax, %ecx 3419 ; X32-SSE41-NEXT: shll $18, %ecx 3420 ; X32-SSE41-NEXT: sarl $31, %ecx 3421 ; X32-SSE41-NEXT: pinsrb $13, %ecx, %xmm1 3422 ; X32-SSE41-NEXT: movl %eax, %ecx 3423 ; X32-SSE41-NEXT: shll $17, %ecx 3424 ; X32-SSE41-NEXT: sarl $31, %ecx 3425 ; X32-SSE41-NEXT: pinsrb $14, %ecx, %xmm1 3426 ; X32-SSE41-NEXT: shrl $15, %eax 3427 ; X32-SSE41-NEXT: pinsrb $15, %eax, %xmm1 3428 ; X32-SSE41-NEXT: popl %esi 3429 ; X32-SSE41-NEXT: retl 3430 entry: 3431 %X = load <32 x i1>, <32 x i1>* %ptr 3432 %Y = sext <32 x i1> %X to <32 x i8> 3433 ret <32 x i8> %Y 3434 } 3435 3436 define <16 x i16> @load_sext_16i8_to_16i16(<16 x i8> *%ptr) { 3437 ; SSE2-LABEL: load_sext_16i8_to_16i16: 3438 ; SSE2: # BB#0: # %entry 3439 ; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3440 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 3441 ; SSE2-NEXT: psraw $8, %xmm0 3442 ; SSE2-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 3443 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 3444 ; SSE2-NEXT: psraw $8, %xmm1 3445 ; SSE2-NEXT: retq 3446 ; 3447 ; SSSE3-LABEL: load_sext_16i8_to_16i16: 3448 ; SSSE3: # BB#0: # %entry 3449 ; SSSE3-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3450 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 3451 ; SSSE3-NEXT: psraw $8, %xmm0 3452 ; SSSE3-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 3453 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 3454 ; SSSE3-NEXT: psraw $8, %xmm1 3455 ; SSSE3-NEXT: retq 3456 ; 3457 ; SSE41-LABEL: load_sext_16i8_to_16i16: 3458 ; SSE41: # BB#0: # %entry 3459 ; SSE41-NEXT: pmovsxbw (%rdi), %xmm0 3460 ; SSE41-NEXT: pmovsxbw 8(%rdi), %xmm1 3461 ; SSE41-NEXT: retq 3462 ; 3463 ; AVX1-LABEL: load_sext_16i8_to_16i16: 3464 ; AVX1: # BB#0: # %entry 3465 ; AVX1-NEXT: vpmovsxbw (%rdi), %xmm0 3466 ; AVX1-NEXT: vpmovsxbw 8(%rdi), %xmm1 3467 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 3468 ; AVX1-NEXT: retq 3469 ; 3470 ; AVX2-LABEL: load_sext_16i8_to_16i16: 3471 ; AVX2: # BB#0: # %entry 3472 ; AVX2-NEXT: vpmovsxbw (%rdi), %ymm0 3473 ; AVX2-NEXT: retq 3474 ; 3475 ; X32-SSE41-LABEL: load_sext_16i8_to_16i16: 3476 ; X32-SSE41: # BB#0: # %entry 3477 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3478 ; X32-SSE41-NEXT: pmovsxbw (%eax), %xmm0 3479 ; X32-SSE41-NEXT: pmovsxbw 8(%eax), %xmm1 3480 ; X32-SSE41-NEXT: retl 3481 entry: 3482 %X = load <16 x i8>, <16 x i8>* %ptr 3483 %Y = sext <16 x i8> %X to <16 x i16> 3484 ret <16 x i16> %Y 3485 } 3486 3487 define <2 x i64> @load_sext_2i16_to_2i64(<2 x i16> *%ptr) { 3488 ; SSE2-LABEL: load_sext_2i16_to_2i64: 3489 ; SSE2: # BB#0: # %entry 3490 ; SSE2-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 3491 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 3492 ; SSE2-NEXT: movdqa %xmm0, %xmm1 3493 ; SSE2-NEXT: psrad $31, %xmm1 3494 ; SSE2-NEXT: psrad $16, %xmm0 3495 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 3496 ; SSE2-NEXT: retq 3497 ; 3498 ; SSSE3-LABEL: load_sext_2i16_to_2i64: 3499 ; SSSE3: # BB#0: # %entry 3500 ; SSSE3-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 3501 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 3502 ; SSSE3-NEXT: movdqa %xmm0, %xmm1 3503 ; SSSE3-NEXT: psrad $31, %xmm1 3504 ; SSSE3-NEXT: psrad $16, %xmm0 3505 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 3506 ; SSSE3-NEXT: retq 3507 ; 3508 ; SSE41-LABEL: load_sext_2i16_to_2i64: 3509 ; SSE41: # BB#0: # %entry 3510 ; SSE41-NEXT: pmovsxwq (%rdi), %xmm0 3511 ; SSE41-NEXT: retq 3512 ; 3513 ; AVX-LABEL: load_sext_2i16_to_2i64: 3514 ; AVX: # BB#0: # %entry 3515 ; AVX-NEXT: vpmovsxwq (%rdi), %xmm0 3516 ; AVX-NEXT: retq 3517 ; 3518 ; X32-SSE41-LABEL: load_sext_2i16_to_2i64: 3519 ; X32-SSE41: # BB#0: # %entry 3520 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3521 ; X32-SSE41-NEXT: pmovsxwq (%eax), %xmm0 3522 ; X32-SSE41-NEXT: retl 3523 entry: 3524 %X = load <2 x i16>, <2 x i16>* %ptr 3525 %Y = sext <2 x i16> %X to <2 x i64> 3526 ret <2 x i64> %Y 3527 } 3528 3529 define <4 x i32> @load_sext_4i16_to_4i32(<4 x i16> *%ptr) { 3530 ; SSE2-LABEL: load_sext_4i16_to_4i32: 3531 ; SSE2: # BB#0: # %entry 3532 ; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3533 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 3534 ; SSE2-NEXT: psrad $16, %xmm0 3535 ; SSE2-NEXT: retq 3536 ; 3537 ; SSSE3-LABEL: load_sext_4i16_to_4i32: 3538 ; SSSE3: # BB#0: # %entry 3539 ; SSSE3-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3540 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 3541 ; SSSE3-NEXT: psrad $16, %xmm0 3542 ; SSSE3-NEXT: retq 3543 ; 3544 ; SSE41-LABEL: load_sext_4i16_to_4i32: 3545 ; SSE41: # BB#0: # %entry 3546 ; SSE41-NEXT: pmovsxwd (%rdi), %xmm0 3547 ; SSE41-NEXT: retq 3548 ; 3549 ; AVX-LABEL: load_sext_4i16_to_4i32: 3550 ; AVX: # BB#0: # %entry 3551 ; AVX-NEXT: vpmovsxwd (%rdi), %xmm0 3552 ; AVX-NEXT: retq 3553 ; 3554 ; X32-SSE41-LABEL: load_sext_4i16_to_4i32: 3555 ; X32-SSE41: # BB#0: # %entry 3556 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3557 ; X32-SSE41-NEXT: pmovsxwd (%eax), %xmm0 3558 ; X32-SSE41-NEXT: retl 3559 entry: 3560 %X = load <4 x i16>, <4 x i16>* %ptr 3561 %Y = sext <4 x i16> %X to <4 x i32> 3562 ret <4 x i32> %Y 3563 } 3564 3565 define <4 x i64> @load_sext_4i16_to_4i64(<4 x i16> *%ptr) { 3566 ; SSE2-LABEL: load_sext_4i16_to_4i64: 3567 ; SSE2: # BB#0: # %entry 3568 ; SSE2-NEXT: movswq 2(%rdi), %rax 3569 ; SSE2-NEXT: movd %rax, %xmm1 3570 ; SSE2-NEXT: movswq (%rdi), %rax 3571 ; SSE2-NEXT: movd %rax, %xmm0 3572 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3573 ; SSE2-NEXT: movswq 6(%rdi), %rax 3574 ; SSE2-NEXT: movd %rax, %xmm2 3575 ; SSE2-NEXT: movswq 4(%rdi), %rax 3576 ; SSE2-NEXT: movd %rax, %xmm1 3577 ; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0] 3578 ; SSE2-NEXT: retq 3579 ; 3580 ; SSSE3-LABEL: load_sext_4i16_to_4i64: 3581 ; SSSE3: # BB#0: # %entry 3582 ; SSSE3-NEXT: movswq 2(%rdi), %rax 3583 ; SSSE3-NEXT: movd %rax, %xmm1 3584 ; SSSE3-NEXT: movswq (%rdi), %rax 3585 ; SSSE3-NEXT: movd %rax, %xmm0 3586 ; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3587 ; SSSE3-NEXT: movswq 6(%rdi), %rax 3588 ; SSSE3-NEXT: movd %rax, %xmm2 3589 ; SSSE3-NEXT: movswq 4(%rdi), %rax 3590 ; SSSE3-NEXT: movd %rax, %xmm1 3591 ; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0] 3592 ; SSSE3-NEXT: retq 3593 ; 3594 ; SSE41-LABEL: load_sext_4i16_to_4i64: 3595 ; SSE41: # BB#0: # %entry 3596 ; SSE41-NEXT: pmovsxwq (%rdi), %xmm0 3597 ; SSE41-NEXT: pmovsxwq 4(%rdi), %xmm1 3598 ; SSE41-NEXT: retq 3599 ; 3600 ; AVX1-LABEL: load_sext_4i16_to_4i64: 3601 ; AVX1: # BB#0: # %entry 3602 ; AVX1-NEXT: vpmovsxwd (%rdi), %xmm0 3603 ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm1 3604 ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3605 ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm0 3606 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3607 ; AVX1-NEXT: retq 3608 ; 3609 ; AVX2-LABEL: load_sext_4i16_to_4i64: 3610 ; AVX2: # BB#0: # %entry 3611 ; AVX2-NEXT: vpmovsxwq (%rdi), %ymm0 3612 ; AVX2-NEXT: retq 3613 ; 3614 ; X32-SSE41-LABEL: load_sext_4i16_to_4i64: 3615 ; X32-SSE41: # BB#0: # %entry 3616 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3617 ; X32-SSE41-NEXT: pmovsxwq (%eax), %xmm0 3618 ; X32-SSE41-NEXT: pmovsxwq 4(%eax), %xmm1 3619 ; X32-SSE41-NEXT: retl 3620 entry: 3621 %X = load <4 x i16>, <4 x i16>* %ptr 3622 %Y = sext <4 x i16> %X to <4 x i64> 3623 ret <4 x i64> %Y 3624 } 3625 3626 define <8 x i32> @load_sext_8i16_to_8i32(<8 x i16> *%ptr) { 3627 ; SSE2-LABEL: load_sext_8i16_to_8i32: 3628 ; SSE2: # BB#0: # %entry 3629 ; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3630 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 3631 ; SSE2-NEXT: psrad $16, %xmm0 3632 ; SSE2-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 3633 ; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3] 3634 ; SSE2-NEXT: psrad $16, %xmm1 3635 ; SSE2-NEXT: retq 3636 ; 3637 ; SSSE3-LABEL: load_sext_8i16_to_8i32: 3638 ; SSSE3: # BB#0: # %entry 3639 ; SSSE3-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3640 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 3641 ; SSSE3-NEXT: psrad $16, %xmm0 3642 ; SSSE3-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 3643 ; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3] 3644 ; SSSE3-NEXT: psrad $16, %xmm1 3645 ; SSSE3-NEXT: retq 3646 ; 3647 ; SSE41-LABEL: load_sext_8i16_to_8i32: 3648 ; SSE41: # BB#0: # %entry 3649 ; SSE41-NEXT: pmovsxwd (%rdi), %xmm0 3650 ; SSE41-NEXT: pmovsxwd 8(%rdi), %xmm1 3651 ; SSE41-NEXT: retq 3652 ; 3653 ; AVX1-LABEL: load_sext_8i16_to_8i32: 3654 ; AVX1: # BB#0: # %entry 3655 ; AVX1-NEXT: vpmovsxwd (%rdi), %xmm0 3656 ; AVX1-NEXT: vpmovsxwd 8(%rdi), %xmm1 3657 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 3658 ; AVX1-NEXT: retq 3659 ; 3660 ; AVX2-LABEL: load_sext_8i16_to_8i32: 3661 ; AVX2: # BB#0: # %entry 3662 ; AVX2-NEXT: vpmovsxwd (%rdi), %ymm0 3663 ; AVX2-NEXT: retq 3664 ; 3665 ; X32-SSE41-LABEL: load_sext_8i16_to_8i32: 3666 ; X32-SSE41: # BB#0: # %entry 3667 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3668 ; X32-SSE41-NEXT: pmovsxwd (%eax), %xmm0 3669 ; X32-SSE41-NEXT: pmovsxwd 8(%eax), %xmm1 3670 ; X32-SSE41-NEXT: retl 3671 entry: 3672 %X = load <8 x i16>, <8 x i16>* %ptr 3673 %Y = sext <8 x i16> %X to <8 x i32> 3674 ret <8 x i32> %Y 3675 } 3676 3677 define <2 x i64> @load_sext_2i32_to_2i64(<2 x i32> *%ptr) { 3678 ; SSE2-LABEL: load_sext_2i32_to_2i64: 3679 ; SSE2: # BB#0: # %entry 3680 ; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3681 ; SSE2-NEXT: movdqa %xmm0, %xmm1 3682 ; SSE2-NEXT: psrad $31, %xmm1 3683 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 3684 ; SSE2-NEXT: retq 3685 ; 3686 ; SSSE3-LABEL: load_sext_2i32_to_2i64: 3687 ; SSSE3: # BB#0: # %entry 3688 ; SSSE3-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3689 ; SSSE3-NEXT: movdqa %xmm0, %xmm1 3690 ; SSSE3-NEXT: psrad $31, %xmm1 3691 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 3692 ; SSSE3-NEXT: retq 3693 ; 3694 ; SSE41-LABEL: load_sext_2i32_to_2i64: 3695 ; SSE41: # BB#0: # %entry 3696 ; SSE41-NEXT: pmovsxdq (%rdi), %xmm0 3697 ; SSE41-NEXT: retq 3698 ; 3699 ; AVX-LABEL: load_sext_2i32_to_2i64: 3700 ; AVX: # BB#0: # %entry 3701 ; AVX-NEXT: vpmovsxdq (%rdi), %xmm0 3702 ; AVX-NEXT: retq 3703 ; 3704 ; X32-SSE41-LABEL: load_sext_2i32_to_2i64: 3705 ; X32-SSE41: # BB#0: # %entry 3706 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3707 ; X32-SSE41-NEXT: pmovsxdq (%eax), %xmm0 3708 ; X32-SSE41-NEXT: retl 3709 entry: 3710 %X = load <2 x i32>, <2 x i32>* %ptr 3711 %Y = sext <2 x i32> %X to <2 x i64> 3712 ret <2 x i64> %Y 3713 } 3714 3715 define <4 x i64> @load_sext_4i32_to_4i64(<4 x i32> *%ptr) { 3716 ; SSE2-LABEL: load_sext_4i32_to_4i64: 3717 ; SSE2: # BB#0: # %entry 3718 ; SSE2-NEXT: movdqa (%rdi), %xmm0 3719 ; SSE2-NEXT: movdqa %xmm0, %xmm2 3720 ; SSE2-NEXT: psrad $31, %xmm2 3721 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 3722 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 3723 ; SSE2-NEXT: movdqa %xmm1, %xmm2 3724 ; SSE2-NEXT: psrad $31, %xmm2 3725 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 3726 ; SSE2-NEXT: retq 3727 ; 3728 ; SSSE3-LABEL: load_sext_4i32_to_4i64: 3729 ; SSSE3: # BB#0: # %entry 3730 ; SSSE3-NEXT: movdqa (%rdi), %xmm0 3731 ; SSSE3-NEXT: movdqa %xmm0, %xmm2 3732 ; SSSE3-NEXT: psrad $31, %xmm2 3733 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 3734 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 3735 ; SSSE3-NEXT: movdqa %xmm1, %xmm2 3736 ; SSSE3-NEXT: psrad $31, %xmm2 3737 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 3738 ; SSSE3-NEXT: retq 3739 ; 3740 ; SSE41-LABEL: load_sext_4i32_to_4i64: 3741 ; SSE41: # BB#0: # %entry 3742 ; SSE41-NEXT: pmovsxdq (%rdi), %xmm0 3743 ; SSE41-NEXT: pmovsxdq 8(%rdi), %xmm1 3744 ; SSE41-NEXT: retq 3745 ; 3746 ; AVX1-LABEL: load_sext_4i32_to_4i64: 3747 ; AVX1: # BB#0: # %entry 3748 ; AVX1-NEXT: vpmovsxdq (%rdi), %xmm0 3749 ; AVX1-NEXT: vpmovsxdq 8(%rdi), %xmm1 3750 ; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 3751 ; AVX1-NEXT: retq 3752 ; 3753 ; AVX2-LABEL: load_sext_4i32_to_4i64: 3754 ; AVX2: # BB#0: # %entry 3755 ; AVX2-NEXT: vpmovsxdq (%rdi), %ymm0 3756 ; AVX2-NEXT: retq 3757 ; 3758 ; X32-SSE41-LABEL: load_sext_4i32_to_4i64: 3759 ; X32-SSE41: # BB#0: # %entry 3760 ; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3761 ; X32-SSE41-NEXT: pmovsxdq (%eax), %xmm0 3762 ; X32-SSE41-NEXT: pmovsxdq 8(%eax), %xmm1 3763 ; X32-SSE41-NEXT: retl 3764 entry: 3765 %X = load <4 x i32>, <4 x i32>* %ptr 3766 %Y = sext <4 x i32> %X to <4 x i64> 3767 ret <4 x i64> %Y 3768 } 3769 3770 define i32 @sext_2i8_to_i32(<16 x i8> %A) nounwind uwtable readnone ssp { 3771 ; SSE2-LABEL: sext_2i8_to_i32: 3772 ; SSE2: # BB#0: # %entry 3773 ; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 3774 ; SSE2-NEXT: psraw $8, %xmm0 3775 ; SSE2-NEXT: movd %xmm0, %eax 3776 ; SSE2-NEXT: retq 3777 ; 3778 ; SSSE3-LABEL: sext_2i8_to_i32: 3779 ; SSSE3: # BB#0: # %entry 3780 ; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 3781 ; SSSE3-NEXT: psraw $8, %xmm0 3782 ; SSSE3-NEXT: movd %xmm0, %eax 3783 ; SSSE3-NEXT: retq 3784 ; 3785 ; SSE41-LABEL: sext_2i8_to_i32: 3786 ; SSE41: # BB#0: # %entry 3787 ; SSE41-NEXT: pmovsxbw %xmm0, %xmm0 3788 ; SSE41-NEXT: movd %xmm0, %eax 3789 ; SSE41-NEXT: retq 3790 ; 3791 ; AVX-LABEL: sext_2i8_to_i32: 3792 ; AVX: # BB#0: # %entry 3793 ; AVX-NEXT: vpmovsxbw %xmm0, %xmm0 3794 ; AVX-NEXT: vmovd %xmm0, %eax 3795 ; AVX-NEXT: retq 3796 ; 3797 ; X32-SSE41-LABEL: sext_2i8_to_i32: 3798 ; X32-SSE41: # BB#0: # %entry 3799 ; X32-SSE41-NEXT: pushl %eax 3800 ; X32-SSE41-NEXT: .Ltmp0: 3801 ; X32-SSE41-NEXT: .cfi_def_cfa_offset 8 3802 ; X32-SSE41-NEXT: pmovsxbw %xmm0, %xmm0 3803 ; X32-SSE41-NEXT: movd %xmm0, %eax 3804 ; X32-SSE41-NEXT: popl %ecx 3805 ; X32-SSE41-NEXT: retl 3806 entry: 3807 %Shuf = shufflevector <16 x i8> %A, <16 x i8> undef, <2 x i32> <i32 0, i32 1> 3808 %Ex = sext <2 x i8> %Shuf to <2 x i16> 3809 %Bc = bitcast <2 x i16> %Ex to i32 3810 ret i32 %Bc 3811 } 3812 3813 define <4 x i64> @sext_4i1_to_4i64(<4 x i1> %mask) { 3814 ; SSE2-LABEL: sext_4i1_to_4i64: 3815 ; SSE2: # BB#0: 3816 ; SSE2-NEXT: pslld $31, %xmm0 3817 ; SSE2-NEXT: psrad $31, %xmm0 3818 ; SSE2-NEXT: movdqa %xmm0, %xmm2 3819 ; SSE2-NEXT: psrad $31, %xmm2 3820 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 3821 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 3822 ; SSE2-NEXT: movdqa %xmm1, %xmm2 3823 ; SSE2-NEXT: psrad $31, %xmm2 3824 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 3825 ; SSE2-NEXT: retq 3826 ; 3827 ; SSSE3-LABEL: sext_4i1_to_4i64: 3828 ; SSSE3: # BB#0: 3829 ; SSSE3-NEXT: pslld $31, %xmm0 3830 ; SSSE3-NEXT: psrad $31, %xmm0 3831 ; SSSE3-NEXT: movdqa %xmm0, %xmm2 3832 ; SSSE3-NEXT: psrad $31, %xmm2 3833 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 3834 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 3835 ; SSSE3-NEXT: movdqa %xmm1, %xmm2 3836 ; SSSE3-NEXT: psrad $31, %xmm2 3837 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 3838 ; SSSE3-NEXT: retq 3839 ; 3840 ; SSE41-LABEL: sext_4i1_to_4i64: 3841 ; SSE41: # BB#0: 3842 ; SSE41-NEXT: pslld $31, %xmm0 3843 ; SSE41-NEXT: psrad $31, %xmm0 3844 ; SSE41-NEXT: pmovsxdq %xmm0, %xmm2 3845 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3846 ; SSE41-NEXT: pmovsxdq %xmm0, %xmm1 3847 ; SSE41-NEXT: movdqa %xmm2, %xmm0 3848 ; SSE41-NEXT: retq 3849 ; 3850 ; AVX1-LABEL: sext_4i1_to_4i64: 3851 ; AVX1: # BB#0: 3852 ; AVX1-NEXT: vpslld $31, %xmm0, %xmm0 3853 ; AVX1-NEXT: vpsrad $31, %xmm0, %xmm0 3854 ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm1 3855 ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3856 ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm0 3857 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3858 ; AVX1-NEXT: retq 3859 ; 3860 ; AVX2-LABEL: sext_4i1_to_4i64: 3861 ; AVX2: # BB#0: 3862 ; AVX2-NEXT: vpslld $31, %xmm0, %xmm0 3863 ; AVX2-NEXT: vpsrad $31, %xmm0, %xmm0 3864 ; AVX2-NEXT: vpmovsxdq %xmm0, %ymm0 3865 ; AVX2-NEXT: retq 3866 ; 3867 ; X32-SSE41-LABEL: sext_4i1_to_4i64: 3868 ; X32-SSE41: # BB#0: 3869 ; X32-SSE41-NEXT: pslld $31, %xmm0 3870 ; X32-SSE41-NEXT: psrad $31, %xmm0 3871 ; X32-SSE41-NEXT: pmovsxdq %xmm0, %xmm2 3872 ; X32-SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3873 ; X32-SSE41-NEXT: pmovsxdq %xmm0, %xmm1 3874 ; X32-SSE41-NEXT: movdqa %xmm2, %xmm0 3875 ; X32-SSE41-NEXT: retl 3876 %extmask = sext <4 x i1> %mask to <4 x i64> 3877 ret <4 x i64> %extmask 3878 } 3879 3880 define <4 x i64> @sext_4i8_to_4i64(<4 x i8> %mask) { 3881 ; SSE2-LABEL: sext_4i8_to_4i64: 3882 ; SSE2: # BB#0: 3883 ; SSE2-NEXT: pslld $24, %xmm0 3884 ; SSE2-NEXT: psrad $24, %xmm0 3885 ; SSE2-NEXT: movdqa %xmm0, %xmm2 3886 ; SSE2-NEXT: psrad $31, %xmm2 3887 ; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 3888 ; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 3889 ; SSE2-NEXT: movdqa %xmm1, %xmm2 3890 ; SSE2-NEXT: psrad $31, %xmm2 3891 ; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 3892 ; SSE2-NEXT: retq 3893 ; 3894 ; SSSE3-LABEL: sext_4i8_to_4i64: 3895 ; SSSE3: # BB#0: 3896 ; SSSE3-NEXT: pslld $24, %xmm0 3897 ; SSSE3-NEXT: psrad $24, %xmm0 3898 ; SSSE3-NEXT: movdqa %xmm0, %xmm2 3899 ; SSSE3-NEXT: psrad $31, %xmm2 3900 ; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 3901 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 3902 ; SSSE3-NEXT: movdqa %xmm1, %xmm2 3903 ; SSSE3-NEXT: psrad $31, %xmm2 3904 ; SSSE3-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 3905 ; SSSE3-NEXT: retq 3906 ; 3907 ; SSE41-LABEL: sext_4i8_to_4i64: 3908 ; SSE41: # BB#0: 3909 ; SSE41-NEXT: pslld $24, %xmm0 3910 ; SSE41-NEXT: psrad $24, %xmm0 3911 ; SSE41-NEXT: pmovsxdq %xmm0, %xmm2 3912 ; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3913 ; SSE41-NEXT: pmovsxdq %xmm0, %xmm1 3914 ; SSE41-NEXT: movdqa %xmm2, %xmm0 3915 ; SSE41-NEXT: retq 3916 ; 3917 ; AVX1-LABEL: sext_4i8_to_4i64: 3918 ; AVX1: # BB#0: 3919 ; AVX1-NEXT: vpslld $24, %xmm0, %xmm0 3920 ; AVX1-NEXT: vpsrad $24, %xmm0, %xmm0 3921 ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm1 3922 ; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3923 ; AVX1-NEXT: vpmovsxdq %xmm0, %xmm0 3924 ; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3925 ; AVX1-NEXT: retq 3926 ; 3927 ; AVX2-LABEL: sext_4i8_to_4i64: 3928 ; AVX2: # BB#0: 3929 ; AVX2-NEXT: vpslld $24, %xmm0, %xmm0 3930 ; AVX2-NEXT: vpsrad $24, %xmm0, %xmm0 3931 ; AVX2-NEXT: vpmovsxdq %xmm0, %ymm0 3932 ; AVX2-NEXT: retq 3933 ; 3934 ; X32-SSE41-LABEL: sext_4i8_to_4i64: 3935 ; X32-SSE41: # BB#0: 3936 ; X32-SSE41-NEXT: pslld $24, %xmm0 3937 ; X32-SSE41-NEXT: psrad $24, %xmm0 3938 ; X32-SSE41-NEXT: pmovsxdq %xmm0, %xmm2 3939 ; X32-SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3940 ; X32-SSE41-NEXT: pmovsxdq %xmm0, %xmm1 3941 ; X32-SSE41-NEXT: movdqa %xmm2, %xmm0 3942 ; X32-SSE41-NEXT: retl 3943 %extmask = sext <4 x i8> %mask to <4 x i64> 3944 ret <4 x i64> %extmask 3945 } 3946