1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s --check-prefix=SSE --check-prefix=SSE2 3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx | FileCheck %s --check-prefix=AVX --check-prefix=AVX1 4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2 | FileCheck %s --check-prefix=AVX --check-prefix=AVX2 5 6; 7; PR6455 'Clear Upper Bits' Patterns 8; 9 10define <2 x i64> @_clearupper2xi64a(<2 x i64>) nounwind { 11; SSE-LABEL: _clearupper2xi64a: 12; SSE: # BB#0: 13; SSE-NEXT: andps {{.*}}(%rip), %xmm0 14; SSE-NEXT: retq 15; 16; AVX1-LABEL: _clearupper2xi64a: 17; AVX1: # BB#0: 18; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 19; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7] 20; AVX1-NEXT: retq 21; 22; AVX2-LABEL: _clearupper2xi64a: 23; AVX2: # BB#0: 24; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 25; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3] 26; AVX2-NEXT: retq 27 %x0 = extractelement <2 x i64> %0, i32 0 28 %x1 = extractelement <2 x i64> %0, i32 1 29 %trunc0 = trunc i64 %x0 to i32 30 %trunc1 = trunc i64 %x1 to i32 31 %ext0 = zext i32 %trunc0 to i64 32 %ext1 = zext i32 %trunc1 to i64 33 %v0 = insertelement <2 x i64> undef, i64 %ext0, i32 0 34 %v1 = insertelement <2 x i64> %v0, i64 %ext1, i32 1 35 ret <2 x i64> %v1 36} 37 38define <4 x i64> @_clearupper4xi64a(<4 x i64>) nounwind { 39; SSE-LABEL: _clearupper4xi64a: 40; SSE: # BB#0: 41; SSE-NEXT: movaps {{.*#+}} xmm2 = [4294967295,4294967295] 42; SSE-NEXT: andps %xmm2, %xmm0 43; SSE-NEXT: andps %xmm2, %xmm1 44; SSE-NEXT: retq 45; 46; AVX1-LABEL: _clearupper4xi64a: 47; AVX1: # BB#0: 48; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 49; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] 50; AVX1-NEXT: retq 51; 52; AVX2-LABEL: _clearupper4xi64a: 53; AVX2: # BB#0: 54; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 55; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] 56; AVX2-NEXT: retq 57 %x0 = extractelement <4 x i64> %0, i32 0 58 %x1 = extractelement <4 x i64> %0, i32 1 59 %x2 = extractelement <4 x i64> %0, i32 2 60 %x3 = extractelement <4 x i64> %0, i32 3 61 %trunc0 = trunc i64 %x0 to i32 62 %trunc1 = trunc i64 %x1 to i32 63 %trunc2 = trunc i64 %x2 to i32 64 %trunc3 = trunc i64 %x3 to i32 65 %ext0 = zext i32 %trunc0 to i64 66 %ext1 = zext i32 %trunc1 to i64 67 %ext2 = zext i32 %trunc2 to i64 68 %ext3 = zext i32 %trunc3 to i64 69 %v0 = insertelement <4 x i64> undef, i64 %ext0, i32 0 70 %v1 = insertelement <4 x i64> %v0, i64 %ext1, i32 1 71 %v2 = insertelement <4 x i64> %v1, i64 %ext2, i32 2 72 %v3 = insertelement <4 x i64> %v2, i64 %ext3, i32 3 73 ret <4 x i64> %v3 74} 75 76define <4 x i32> @_clearupper4xi32a(<4 x i32>) nounwind { 77; SSE-LABEL: _clearupper4xi32a: 78; SSE: # BB#0: 79; SSE-NEXT: andps {{.*}}(%rip), %xmm0 80; SSE-NEXT: retq 81; 82; AVX-LABEL: _clearupper4xi32a: 83; AVX: # BB#0: 84; AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 85; AVX-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] 86; AVX-NEXT: retq 87 %x0 = extractelement <4 x i32> %0, i32 0 88 %x1 = extractelement <4 x i32> %0, i32 1 89 %x2 = extractelement <4 x i32> %0, i32 2 90 %x3 = extractelement <4 x i32> %0, i32 3 91 %trunc0 = trunc i32 %x0 to i16 92 %trunc1 = trunc i32 %x1 to i16 93 %trunc2 = trunc i32 %x2 to i16 94 %trunc3 = trunc i32 %x3 to i16 95 %ext0 = zext i16 %trunc0 to i32 96 %ext1 = zext i16 %trunc1 to i32 97 %ext2 = zext i16 %trunc2 to i32 98 %ext3 = zext i16 %trunc3 to i32 99 %v0 = insertelement <4 x i32> undef, i32 %ext0, i32 0 100 %v1 = insertelement <4 x i32> %v0, i32 %ext1, i32 1 101 %v2 = insertelement <4 x i32> %v1, i32 %ext2, i32 2 102 %v3 = insertelement <4 x i32> %v2, i32 %ext3, i32 3 103 ret <4 x i32> %v3 104} 105 106; FIXME: Missed vpblendw on AVX2 target 107define <8 x i32> @_clearupper8xi32a(<8 x i32>) nounwind { 108; SSE-LABEL: _clearupper8xi32a: 109; SSE: # BB#0: 110; SSE-NEXT: movaps {{.*#+}} xmm2 = [65535,65535,65535,65535] 111; SSE-NEXT: andps %xmm2, %xmm0 112; SSE-NEXT: andps %xmm2, %xmm1 113; SSE-NEXT: retq 114; 115; AVX1-LABEL: _clearupper8xi32a: 116; AVX1: # BB#0: 117; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 118; AVX1-NEXT: retq 119; 120; AVX2-LABEL: _clearupper8xi32a: 121; AVX2: # BB#0: 122; AVX2-NEXT: vbroadcastss {{.*}}(%rip), %ymm1 123; AVX2-NEXT: vandps %ymm1, %ymm0, %ymm0 124; AVX2-NEXT: retq 125 %x0 = extractelement <8 x i32> %0, i32 0 126 %x1 = extractelement <8 x i32> %0, i32 1 127 %x2 = extractelement <8 x i32> %0, i32 2 128 %x3 = extractelement <8 x i32> %0, i32 3 129 %x4 = extractelement <8 x i32> %0, i32 4 130 %x5 = extractelement <8 x i32> %0, i32 5 131 %x6 = extractelement <8 x i32> %0, i32 6 132 %x7 = extractelement <8 x i32> %0, i32 7 133 %trunc0 = trunc i32 %x0 to i16 134 %trunc1 = trunc i32 %x1 to i16 135 %trunc2 = trunc i32 %x2 to i16 136 %trunc3 = trunc i32 %x3 to i16 137 %trunc4 = trunc i32 %x4 to i16 138 %trunc5 = trunc i32 %x5 to i16 139 %trunc6 = trunc i32 %x6 to i16 140 %trunc7 = trunc i32 %x7 to i16 141 %ext0 = zext i16 %trunc0 to i32 142 %ext1 = zext i16 %trunc1 to i32 143 %ext2 = zext i16 %trunc2 to i32 144 %ext3 = zext i16 %trunc3 to i32 145 %ext4 = zext i16 %trunc4 to i32 146 %ext5 = zext i16 %trunc5 to i32 147 %ext6 = zext i16 %trunc6 to i32 148 %ext7 = zext i16 %trunc7 to i32 149 %v0 = insertelement <8 x i32> undef, i32 %ext0, i32 0 150 %v1 = insertelement <8 x i32> %v0, i32 %ext1, i32 1 151 %v2 = insertelement <8 x i32> %v1, i32 %ext2, i32 2 152 %v3 = insertelement <8 x i32> %v2, i32 %ext3, i32 3 153 %v4 = insertelement <8 x i32> %v3, i32 %ext4, i32 4 154 %v5 = insertelement <8 x i32> %v4, i32 %ext5, i32 5 155 %v6 = insertelement <8 x i32> %v5, i32 %ext6, i32 6 156 %v7 = insertelement <8 x i32> %v6, i32 %ext7, i32 7 157 ret <8 x i32> %v7 158} 159 160define <8 x i16> @_clearupper8xi16a(<8 x i16>) nounwind { 161; SSE-LABEL: _clearupper8xi16a: 162; SSE: # BB#0: 163; SSE-NEXT: pextrw $1, %xmm0, %eax 164; SSE-NEXT: pextrw $2, %xmm0, %r9d 165; SSE-NEXT: pextrw $3, %xmm0, %edx 166; SSE-NEXT: pextrw $4, %xmm0, %r8d 167; SSE-NEXT: pextrw $5, %xmm0, %edi 168; SSE-NEXT: pextrw $6, %xmm0, %esi 169; SSE-NEXT: pextrw $7, %xmm0, %ecx 170; SSE-NEXT: movd %ecx, %xmm1 171; SSE-NEXT: movd %edx, %xmm2 172; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 173; SSE-NEXT: movd %edi, %xmm1 174; SSE-NEXT: movd %eax, %xmm3 175; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm1[0],xmm3[1],xmm1[1],xmm3[2],xmm1[2],xmm3[3],xmm1[3] 176; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3] 177; SSE-NEXT: movd %esi, %xmm1 178; SSE-NEXT: movd %r9d, %xmm2 179; SSE-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1],xmm2[2],xmm1[2],xmm2[3],xmm1[3] 180; SSE-NEXT: movd %r8d, %xmm1 181; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 182; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 183; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3] 184; SSE-NEXT: pand {{.*}}(%rip), %xmm0 185; SSE-NEXT: retq 186; 187; AVX-LABEL: _clearupper8xi16a: 188; AVX: # BB#0: 189; AVX-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0 190; AVX-NEXT: retq 191 %x0 = extractelement <8 x i16> %0, i32 0 192 %x1 = extractelement <8 x i16> %0, i32 1 193 %x2 = extractelement <8 x i16> %0, i32 2 194 %x3 = extractelement <8 x i16> %0, i32 3 195 %x4 = extractelement <8 x i16> %0, i32 4 196 %x5 = extractelement <8 x i16> %0, i32 5 197 %x6 = extractelement <8 x i16> %0, i32 6 198 %x7 = extractelement <8 x i16> %0, i32 7 199 %trunc0 = trunc i16 %x0 to i8 200 %trunc1 = trunc i16 %x1 to i8 201 %trunc2 = trunc i16 %x2 to i8 202 %trunc3 = trunc i16 %x3 to i8 203 %trunc4 = trunc i16 %x4 to i8 204 %trunc5 = trunc i16 %x5 to i8 205 %trunc6 = trunc i16 %x6 to i8 206 %trunc7 = trunc i16 %x7 to i8 207 %ext0 = zext i8 %trunc0 to i16 208 %ext1 = zext i8 %trunc1 to i16 209 %ext2 = zext i8 %trunc2 to i16 210 %ext3 = zext i8 %trunc3 to i16 211 %ext4 = zext i8 %trunc4 to i16 212 %ext5 = zext i8 %trunc5 to i16 213 %ext6 = zext i8 %trunc6 to i16 214 %ext7 = zext i8 %trunc7 to i16 215 %v0 = insertelement <8 x i16> undef, i16 %ext0, i32 0 216 %v1 = insertelement <8 x i16> %v0, i16 %ext1, i32 1 217 %v2 = insertelement <8 x i16> %v1, i16 %ext2, i32 2 218 %v3 = insertelement <8 x i16> %v2, i16 %ext3, i32 3 219 %v4 = insertelement <8 x i16> %v3, i16 %ext4, i32 4 220 %v5 = insertelement <8 x i16> %v4, i16 %ext5, i32 5 221 %v6 = insertelement <8 x i16> %v5, i16 %ext6, i32 6 222 %v7 = insertelement <8 x i16> %v6, i16 %ext7, i32 7 223 ret <8 x i16> %v7 224} 225 226define <16 x i16> @_clearupper16xi16a(<16 x i16>) nounwind { 227; SSE-LABEL: _clearupper16xi16a: 228; SSE: # BB#0: 229; SSE-NEXT: pushq %rbp 230; SSE-NEXT: pushq %r15 231; SSE-NEXT: pushq %r14 232; SSE-NEXT: pushq %r12 233; SSE-NEXT: pushq %rbx 234; SSE-NEXT: pextrw $1, %xmm0, %edi 235; SSE-NEXT: pextrw $2, %xmm0, %eax 236; SSE-NEXT: pextrw $3, %xmm0, %ecx 237; SSE-NEXT: pextrw $4, %xmm0, %edx 238; SSE-NEXT: pextrw $5, %xmm0, %esi 239; SSE-NEXT: pextrw $6, %xmm0, %ebx 240; SSE-NEXT: pextrw $7, %xmm0, %ebp 241; SSE-NEXT: pextrw $1, %xmm1, %r10d 242; SSE-NEXT: pextrw $2, %xmm1, %r9d 243; SSE-NEXT: pextrw $3, %xmm1, %r14d 244; SSE-NEXT: pextrw $4, %xmm1, %r8d 245; SSE-NEXT: pextrw $5, %xmm1, %r15d 246; SSE-NEXT: pextrw $6, %xmm1, %r11d 247; SSE-NEXT: pextrw $7, %xmm1, %r12d 248; SSE-NEXT: movd %ebp, %xmm2 249; SSE-NEXT: movd %ecx, %xmm3 250; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3] 251; SSE-NEXT: movd %esi, %xmm2 252; SSE-NEXT: movd %edi, %xmm4 253; SSE-NEXT: punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1],xmm4[2],xmm2[2],xmm4[3],xmm2[3] 254; SSE-NEXT: punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3] 255; SSE-NEXT: movd %ebx, %xmm2 256; SSE-NEXT: movd %eax, %xmm3 257; SSE-NEXT: punpcklwd {{.*#+}} xmm3 = xmm3[0],xmm2[0],xmm3[1],xmm2[1],xmm3[2],xmm2[2],xmm3[3],xmm2[3] 258; SSE-NEXT: movd %edx, %xmm2 259; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 260; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3] 261; SSE-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3] 262; SSE-NEXT: movdqa {{.*#+}} xmm2 = [255,255,255,255,255,255,255,255] 263; SSE-NEXT: pand %xmm2, %xmm0 264; SSE-NEXT: movd %r12d, %xmm3 265; SSE-NEXT: movd %r14d, %xmm4 266; SSE-NEXT: punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3] 267; SSE-NEXT: movd %r15d, %xmm3 268; SSE-NEXT: movd %r10d, %xmm5 269; SSE-NEXT: punpcklwd {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1],xmm5[2],xmm3[2],xmm5[3],xmm3[3] 270; SSE-NEXT: punpcklwd {{.*#+}} xmm5 = xmm5[0],xmm4[0],xmm5[1],xmm4[1],xmm5[2],xmm4[2],xmm5[3],xmm4[3] 271; SSE-NEXT: movd %r11d, %xmm3 272; SSE-NEXT: movd %r9d, %xmm4 273; SSE-NEXT: punpcklwd {{.*#+}} xmm4 = xmm4[0],xmm3[0],xmm4[1],xmm3[1],xmm4[2],xmm3[2],xmm4[3],xmm3[3] 274; SSE-NEXT: movd %r8d, %xmm3 275; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm3[0],xmm1[1],xmm3[1],xmm1[2],xmm3[2],xmm1[3],xmm3[3] 276; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm4[0],xmm1[1],xmm4[1],xmm1[2],xmm4[2],xmm1[3],xmm4[3] 277; SSE-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm5[0],xmm1[1],xmm5[1],xmm1[2],xmm5[2],xmm1[3],xmm5[3] 278; SSE-NEXT: pand %xmm2, %xmm1 279; SSE-NEXT: popq %rbx 280; SSE-NEXT: popq %r12 281; SSE-NEXT: popq %r14 282; SSE-NEXT: popq %r15 283; SSE-NEXT: popq %rbp 284; SSE-NEXT: retq 285; 286; AVX-LABEL: _clearupper16xi16a: 287; AVX: # BB#0: 288; AVX-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 289; AVX-NEXT: retq 290 %x0 = extractelement <16 x i16> %0, i32 0 291 %x1 = extractelement <16 x i16> %0, i32 1 292 %x2 = extractelement <16 x i16> %0, i32 2 293 %x3 = extractelement <16 x i16> %0, i32 3 294 %x4 = extractelement <16 x i16> %0, i32 4 295 %x5 = extractelement <16 x i16> %0, i32 5 296 %x6 = extractelement <16 x i16> %0, i32 6 297 %x7 = extractelement <16 x i16> %0, i32 7 298 %x8 = extractelement <16 x i16> %0, i32 8 299 %x9 = extractelement <16 x i16> %0, i32 9 300 %x10 = extractelement <16 x i16> %0, i32 10 301 %x11 = extractelement <16 x i16> %0, i32 11 302 %x12 = extractelement <16 x i16> %0, i32 12 303 %x13 = extractelement <16 x i16> %0, i32 13 304 %x14 = extractelement <16 x i16> %0, i32 14 305 %x15 = extractelement <16 x i16> %0, i32 15 306 %trunc0 = trunc i16 %x0 to i8 307 %trunc1 = trunc i16 %x1 to i8 308 %trunc2 = trunc i16 %x2 to i8 309 %trunc3 = trunc i16 %x3 to i8 310 %trunc4 = trunc i16 %x4 to i8 311 %trunc5 = trunc i16 %x5 to i8 312 %trunc6 = trunc i16 %x6 to i8 313 %trunc7 = trunc i16 %x7 to i8 314 %trunc8 = trunc i16 %x8 to i8 315 %trunc9 = trunc i16 %x9 to i8 316 %trunc10 = trunc i16 %x10 to i8 317 %trunc11 = trunc i16 %x11 to i8 318 %trunc12 = trunc i16 %x12 to i8 319 %trunc13 = trunc i16 %x13 to i8 320 %trunc14 = trunc i16 %x14 to i8 321 %trunc15 = trunc i16 %x15 to i8 322 %ext0 = zext i8 %trunc0 to i16 323 %ext1 = zext i8 %trunc1 to i16 324 %ext2 = zext i8 %trunc2 to i16 325 %ext3 = zext i8 %trunc3 to i16 326 %ext4 = zext i8 %trunc4 to i16 327 %ext5 = zext i8 %trunc5 to i16 328 %ext6 = zext i8 %trunc6 to i16 329 %ext7 = zext i8 %trunc7 to i16 330 %ext8 = zext i8 %trunc8 to i16 331 %ext9 = zext i8 %trunc9 to i16 332 %ext10 = zext i8 %trunc10 to i16 333 %ext11 = zext i8 %trunc11 to i16 334 %ext12 = zext i8 %trunc12 to i16 335 %ext13 = zext i8 %trunc13 to i16 336 %ext14 = zext i8 %trunc14 to i16 337 %ext15 = zext i8 %trunc15 to i16 338 %v0 = insertelement <16 x i16> undef, i16 %ext0, i32 0 339 %v1 = insertelement <16 x i16> %v0, i16 %ext1, i32 1 340 %v2 = insertelement <16 x i16> %v1, i16 %ext2, i32 2 341 %v3 = insertelement <16 x i16> %v2, i16 %ext3, i32 3 342 %v4 = insertelement <16 x i16> %v3, i16 %ext4, i32 4 343 %v5 = insertelement <16 x i16> %v4, i16 %ext5, i32 5 344 %v6 = insertelement <16 x i16> %v5, i16 %ext6, i32 6 345 %v7 = insertelement <16 x i16> %v6, i16 %ext7, i32 7 346 %v8 = insertelement <16 x i16> %v7, i16 %ext8, i32 8 347 %v9 = insertelement <16 x i16> %v8, i16 %ext9, i32 9 348 %v10 = insertelement <16 x i16> %v9, i16 %ext10, i32 10 349 %v11 = insertelement <16 x i16> %v10, i16 %ext11, i32 11 350 %v12 = insertelement <16 x i16> %v11, i16 %ext12, i32 12 351 %v13 = insertelement <16 x i16> %v12, i16 %ext13, i32 13 352 %v14 = insertelement <16 x i16> %v13, i16 %ext14, i32 14 353 %v15 = insertelement <16 x i16> %v14, i16 %ext15, i32 15 354 ret <16 x i16> %v15 355} 356 357define <16 x i8> @_clearupper16xi8a(<16 x i8>) nounwind { 358; SSE-LABEL: _clearupper16xi8a: 359; SSE: # BB#0: 360; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) 361; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 362; SSE-NEXT: movd %eax, %xmm0 363; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 364; SSE-NEXT: movd %eax, %xmm1 365; SSE-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] 366; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 367; SSE-NEXT: movd %eax, %xmm0 368; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 369; SSE-NEXT: movd %eax, %xmm2 370; SSE-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] 371; SSE-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] 372; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 373; SSE-NEXT: movd %eax, %xmm0 374; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 375; SSE-NEXT: movd %eax, %xmm3 376; SSE-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] 377; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 378; SSE-NEXT: movd %eax, %xmm0 379; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 380; SSE-NEXT: movd %eax, %xmm1 381; SSE-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] 382; SSE-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] 383; SSE-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] 384; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 385; SSE-NEXT: movd {{.*#+}} xmm2 = mem[0],zero,zero,zero 386; SSE-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] 387; SSE-NEXT: movd {{.*#+}} xmm3 = mem[0],zero,zero,zero 388; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 389; SSE-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] 390; SSE-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] 391; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 392; SSE-NEXT: movd %eax, %xmm2 393; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 394; SSE-NEXT: movd %eax, %xmm3 395; SSE-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] 396; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 397; SSE-NEXT: movd %eax, %xmm2 398; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 399; SSE-NEXT: movd %eax, %xmm4 400; SSE-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] 401; SSE-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] 402; SSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7] 403; SSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] 404; SSE-NEXT: pand {{.*}}(%rip), %xmm0 405; SSE-NEXT: retq 406; 407; AVX-LABEL: _clearupper16xi8a: 408; AVX: # BB#0: 409; AVX-NEXT: vpextrb $0, %xmm0, %eax 410; AVX-NEXT: vpextrb $1, %xmm0, %ecx 411; AVX-NEXT: vmovd %eax, %xmm1 412; AVX-NEXT: vpinsrb $1, %ecx, %xmm1, %xmm1 413; AVX-NEXT: vpblendw {{.*#+}} xmm0 = xmm1[0],xmm0[1,2,3,4,5,6,7] 414; AVX-NEXT: vpand {{.*}}(%rip), %xmm0, %xmm0 415; AVX-NEXT: retq 416 %x0 = extractelement <16 x i8> %0, i32 0 417 %x1 = extractelement <16 x i8> %0, i32 1 418 %x2 = extractelement <16 x i8> %0, i32 2 419 %x3 = extractelement <16 x i8> %0, i32 3 420 %x4 = extractelement <16 x i8> %0, i32 4 421 %x5 = extractelement <16 x i8> %0, i32 5 422 %x6 = extractelement <16 x i8> %0, i32 6 423 %x7 = extractelement <16 x i8> %0, i32 7 424 %x8 = extractelement <16 x i8> %0, i32 8 425 %x9 = extractelement <16 x i8> %0, i32 9 426 %x10 = extractelement <16 x i8> %0, i32 10 427 %x11 = extractelement <16 x i8> %0, i32 11 428 %x12 = extractelement <16 x i8> %0, i32 12 429 %x13 = extractelement <16 x i8> %0, i32 13 430 %x14 = extractelement <16 x i8> %0, i32 14 431 %x15 = extractelement <16 x i8> %0, i32 15 432 %trunc0 = trunc i8 %x0 to i4 433 %trunc1 = trunc i8 %x1 to i4 434 %trunc2 = trunc i8 %x2 to i4 435 %trunc3 = trunc i8 %x3 to i4 436 %trunc4 = trunc i8 %x4 to i4 437 %trunc5 = trunc i8 %x5 to i4 438 %trunc6 = trunc i8 %x6 to i4 439 %trunc7 = trunc i8 %x7 to i4 440 %trunc8 = trunc i8 %x8 to i4 441 %trunc9 = trunc i8 %x9 to i4 442 %trunc10 = trunc i8 %x10 to i4 443 %trunc11 = trunc i8 %x11 to i4 444 %trunc12 = trunc i8 %x12 to i4 445 %trunc13 = trunc i8 %x13 to i4 446 %trunc14 = trunc i8 %x14 to i4 447 %trunc15 = trunc i8 %x15 to i4 448 %ext0 = zext i4 %trunc0 to i8 449 %ext1 = zext i4 %trunc1 to i8 450 %ext2 = zext i4 %trunc2 to i8 451 %ext3 = zext i4 %trunc3 to i8 452 %ext4 = zext i4 %trunc4 to i8 453 %ext5 = zext i4 %trunc5 to i8 454 %ext6 = zext i4 %trunc6 to i8 455 %ext7 = zext i4 %trunc7 to i8 456 %ext8 = zext i4 %trunc8 to i8 457 %ext9 = zext i4 %trunc9 to i8 458 %ext10 = zext i4 %trunc10 to i8 459 %ext11 = zext i4 %trunc11 to i8 460 %ext12 = zext i4 %trunc12 to i8 461 %ext13 = zext i4 %trunc13 to i8 462 %ext14 = zext i4 %trunc14 to i8 463 %ext15 = zext i4 %trunc15 to i8 464 %v0 = insertelement <16 x i8> undef, i8 %ext0, i32 0 465 %v1 = insertelement <16 x i8> %v0, i8 %ext1, i32 1 466 %v2 = insertelement <16 x i8> %v1, i8 %ext2, i32 2 467 %v3 = insertelement <16 x i8> %v2, i8 %ext3, i32 3 468 %v4 = insertelement <16 x i8> %v3, i8 %ext4, i32 4 469 %v5 = insertelement <16 x i8> %v4, i8 %ext5, i32 5 470 %v6 = insertelement <16 x i8> %v5, i8 %ext6, i32 6 471 %v7 = insertelement <16 x i8> %v6, i8 %ext7, i32 7 472 %v8 = insertelement <16 x i8> %v7, i8 %ext8, i32 8 473 %v9 = insertelement <16 x i8> %v8, i8 %ext9, i32 9 474 %v10 = insertelement <16 x i8> %v9, i8 %ext10, i32 10 475 %v11 = insertelement <16 x i8> %v10, i8 %ext11, i32 11 476 %v12 = insertelement <16 x i8> %v11, i8 %ext12, i32 12 477 %v13 = insertelement <16 x i8> %v12, i8 %ext13, i32 13 478 %v14 = insertelement <16 x i8> %v13, i8 %ext14, i32 14 479 %v15 = insertelement <16 x i8> %v14, i8 %ext15, i32 15 480 ret <16 x i8> %v15 481} 482 483define <32 x i8> @_clearupper32xi8a(<32 x i8>) nounwind { 484; SSE-LABEL: _clearupper32xi8a: 485; SSE: # BB#0: 486; SSE-NEXT: movaps %xmm0, -{{[0-9]+}}(%rsp) 487; SSE-NEXT: movaps %xmm1, -{{[0-9]+}}(%rsp) 488; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 489; SSE-NEXT: movd %eax, %xmm0 490; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 491; SSE-NEXT: movd %eax, %xmm1 492; SSE-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] 493; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 494; SSE-NEXT: movd %eax, %xmm0 495; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 496; SSE-NEXT: movd %eax, %xmm2 497; SSE-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] 498; SSE-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] 499; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 500; SSE-NEXT: movd %eax, %xmm0 501; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 502; SSE-NEXT: movd %eax, %xmm3 503; SSE-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] 504; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 505; SSE-NEXT: movd %eax, %xmm0 506; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 507; SSE-NEXT: movd %eax, %xmm1 508; SSE-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] 509; SSE-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] 510; SSE-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] 511; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 512; SSE-NEXT: movd {{.*#+}} xmm2 = mem[0],zero,zero,zero 513; SSE-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] 514; SSE-NEXT: movd {{.*#+}} xmm3 = mem[0],zero,zero,zero 515; SSE-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 516; SSE-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] 517; SSE-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] 518; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 519; SSE-NEXT: movd %eax, %xmm2 520; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 521; SSE-NEXT: movd %eax, %xmm3 522; SSE-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] 523; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 524; SSE-NEXT: movd %eax, %xmm2 525; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 526; SSE-NEXT: movd %eax, %xmm4 527; SSE-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] 528; SSE-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] 529; SSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7] 530; SSE-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3],xmm0[4],xmm1[4],xmm0[5],xmm1[5],xmm0[6],xmm1[6],xmm0[7],xmm1[7] 531; SSE-NEXT: movdqa {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 532; SSE-NEXT: pand %xmm2, %xmm0 533; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 534; SSE-NEXT: movd %eax, %xmm1 535; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 536; SSE-NEXT: movd %eax, %xmm3 537; SSE-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] 538; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 539; SSE-NEXT: movd %eax, %xmm1 540; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 541; SSE-NEXT: movd %eax, %xmm4 542; SSE-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] 543; SSE-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] 544; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 545; SSE-NEXT: movd %eax, %xmm1 546; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 547; SSE-NEXT: movd %eax, %xmm5 548; SSE-NEXT: punpcklbw {{.*#+}} xmm5 = xmm5[0],xmm1[0],xmm5[1],xmm1[1],xmm5[2],xmm1[2],xmm5[3],xmm1[3],xmm5[4],xmm1[4],xmm5[5],xmm1[5],xmm5[6],xmm1[6],xmm5[7],xmm1[7] 549; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 550; SSE-NEXT: movd %eax, %xmm1 551; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 552; SSE-NEXT: movd %eax, %xmm3 553; SSE-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] 554; SSE-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] 555; SSE-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] 556; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero 557; SSE-NEXT: movd {{.*#+}} xmm4 = mem[0],zero,zero,zero 558; SSE-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] 559; SSE-NEXT: movd {{.*#+}} xmm5 = mem[0],zero,zero,zero 560; SSE-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero 561; SSE-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0],xmm5[0],xmm1[1],xmm5[1],xmm1[2],xmm5[2],xmm1[3],xmm5[3],xmm1[4],xmm5[4],xmm1[5],xmm5[5],xmm1[6],xmm5[6],xmm1[7],xmm5[7] 562; SSE-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] 563; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 564; SSE-NEXT: movd %eax, %xmm4 565; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 566; SSE-NEXT: movd %eax, %xmm5 567; SSE-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] 568; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 569; SSE-NEXT: movd %eax, %xmm4 570; SSE-NEXT: movzbl -{{[0-9]+}}(%rsp), %eax 571; SSE-NEXT: movd %eax, %xmm6 572; SSE-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] 573; SSE-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] 574; SSE-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] 575; SSE-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] 576; SSE-NEXT: pand %xmm2, %xmm1 577; SSE-NEXT: retq 578; 579; AVX1-LABEL: _clearupper32xi8a: 580; AVX1: # BB#0: 581; AVX1-NEXT: vpextrb $0, %xmm0, %eax 582; AVX1-NEXT: vpextrb $1, %xmm0, %ecx 583; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1 584; AVX1-NEXT: vpextrb $0, %xmm1, %edx 585; AVX1-NEXT: vpextrb $1, %xmm1, %esi 586; AVX1-NEXT: vmovd %edx, %xmm2 587; AVX1-NEXT: vpinsrb $1, %esi, %xmm2, %xmm2 588; AVX1-NEXT: vpblendw {{.*#+}} xmm1 = xmm2[0],xmm1[1,2,3,4,5,6,7] 589; AVX1-NEXT: vmovd %eax, %xmm2 590; AVX1-NEXT: vpinsrb $1, %ecx, %xmm2, %xmm2 591; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3,4,5,6,7] 592; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 593; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 594; AVX1-NEXT: retq 595; 596; AVX2-LABEL: _clearupper32xi8a: 597; AVX2: # BB#0: 598; AVX2-NEXT: vpextrb $0, %xmm0, %eax 599; AVX2-NEXT: vpextrb $1, %xmm0, %ecx 600; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm1 601; AVX2-NEXT: vpextrb $0, %xmm1, %edx 602; AVX2-NEXT: vpextrb $1, %xmm1, %esi 603; AVX2-NEXT: vmovd %edx, %xmm2 604; AVX2-NEXT: vpinsrb $1, %esi, %xmm2, %xmm2 605; AVX2-NEXT: vpblendw {{.*#+}} xmm1 = xmm2[0],xmm1[1,2,3,4,5,6,7] 606; AVX2-NEXT: vmovd %eax, %xmm2 607; AVX2-NEXT: vpinsrb $1, %ecx, %xmm2, %xmm2 608; AVX2-NEXT: vpblendw {{.*#+}} xmm0 = xmm2[0],xmm0[1,2,3,4,5,6,7] 609; AVX2-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0 610; AVX2-NEXT: vpand {{.*}}(%rip), %ymm0, %ymm0 611; AVX2-NEXT: retq 612 %x0 = extractelement <32 x i8> %0, i32 0 613 %x1 = extractelement <32 x i8> %0, i32 1 614 %x2 = extractelement <32 x i8> %0, i32 2 615 %x3 = extractelement <32 x i8> %0, i32 3 616 %x4 = extractelement <32 x i8> %0, i32 4 617 %x5 = extractelement <32 x i8> %0, i32 5 618 %x6 = extractelement <32 x i8> %0, i32 6 619 %x7 = extractelement <32 x i8> %0, i32 7 620 %x8 = extractelement <32 x i8> %0, i32 8 621 %x9 = extractelement <32 x i8> %0, i32 9 622 %x10 = extractelement <32 x i8> %0, i32 10 623 %x11 = extractelement <32 x i8> %0, i32 11 624 %x12 = extractelement <32 x i8> %0, i32 12 625 %x13 = extractelement <32 x i8> %0, i32 13 626 %x14 = extractelement <32 x i8> %0, i32 14 627 %x15 = extractelement <32 x i8> %0, i32 15 628 %x16 = extractelement <32 x i8> %0, i32 16 629 %x17 = extractelement <32 x i8> %0, i32 17 630 %x18 = extractelement <32 x i8> %0, i32 18 631 %x19 = extractelement <32 x i8> %0, i32 19 632 %x20 = extractelement <32 x i8> %0, i32 20 633 %x21 = extractelement <32 x i8> %0, i32 21 634 %x22 = extractelement <32 x i8> %0, i32 22 635 %x23 = extractelement <32 x i8> %0, i32 23 636 %x24 = extractelement <32 x i8> %0, i32 24 637 %x25 = extractelement <32 x i8> %0, i32 25 638 %x26 = extractelement <32 x i8> %0, i32 26 639 %x27 = extractelement <32 x i8> %0, i32 27 640 %x28 = extractelement <32 x i8> %0, i32 28 641 %x29 = extractelement <32 x i8> %0, i32 29 642 %x30 = extractelement <32 x i8> %0, i32 30 643 %x31 = extractelement <32 x i8> %0, i32 31 644 %trunc0 = trunc i8 %x0 to i4 645 %trunc1 = trunc i8 %x1 to i4 646 %trunc2 = trunc i8 %x2 to i4 647 %trunc3 = trunc i8 %x3 to i4 648 %trunc4 = trunc i8 %x4 to i4 649 %trunc5 = trunc i8 %x5 to i4 650 %trunc6 = trunc i8 %x6 to i4 651 %trunc7 = trunc i8 %x7 to i4 652 %trunc8 = trunc i8 %x8 to i4 653 %trunc9 = trunc i8 %x9 to i4 654 %trunc10 = trunc i8 %x10 to i4 655 %trunc11 = trunc i8 %x11 to i4 656 %trunc12 = trunc i8 %x12 to i4 657 %trunc13 = trunc i8 %x13 to i4 658 %trunc14 = trunc i8 %x14 to i4 659 %trunc15 = trunc i8 %x15 to i4 660 %trunc16 = trunc i8 %x16 to i4 661 %trunc17 = trunc i8 %x17 to i4 662 %trunc18 = trunc i8 %x18 to i4 663 %trunc19 = trunc i8 %x19 to i4 664 %trunc20 = trunc i8 %x20 to i4 665 %trunc21 = trunc i8 %x21 to i4 666 %trunc22 = trunc i8 %x22 to i4 667 %trunc23 = trunc i8 %x23 to i4 668 %trunc24 = trunc i8 %x24 to i4 669 %trunc25 = trunc i8 %x25 to i4 670 %trunc26 = trunc i8 %x26 to i4 671 %trunc27 = trunc i8 %x27 to i4 672 %trunc28 = trunc i8 %x28 to i4 673 %trunc29 = trunc i8 %x29 to i4 674 %trunc30 = trunc i8 %x30 to i4 675 %trunc31 = trunc i8 %x31 to i4 676 %ext0 = zext i4 %trunc0 to i8 677 %ext1 = zext i4 %trunc1 to i8 678 %ext2 = zext i4 %trunc2 to i8 679 %ext3 = zext i4 %trunc3 to i8 680 %ext4 = zext i4 %trunc4 to i8 681 %ext5 = zext i4 %trunc5 to i8 682 %ext6 = zext i4 %trunc6 to i8 683 %ext7 = zext i4 %trunc7 to i8 684 %ext8 = zext i4 %trunc8 to i8 685 %ext9 = zext i4 %trunc9 to i8 686 %ext10 = zext i4 %trunc10 to i8 687 %ext11 = zext i4 %trunc11 to i8 688 %ext12 = zext i4 %trunc12 to i8 689 %ext13 = zext i4 %trunc13 to i8 690 %ext14 = zext i4 %trunc14 to i8 691 %ext15 = zext i4 %trunc15 to i8 692 %ext16 = zext i4 %trunc16 to i8 693 %ext17 = zext i4 %trunc17 to i8 694 %ext18 = zext i4 %trunc18 to i8 695 %ext19 = zext i4 %trunc19 to i8 696 %ext20 = zext i4 %trunc20 to i8 697 %ext21 = zext i4 %trunc21 to i8 698 %ext22 = zext i4 %trunc22 to i8 699 %ext23 = zext i4 %trunc23 to i8 700 %ext24 = zext i4 %trunc24 to i8 701 %ext25 = zext i4 %trunc25 to i8 702 %ext26 = zext i4 %trunc26 to i8 703 %ext27 = zext i4 %trunc27 to i8 704 %ext28 = zext i4 %trunc28 to i8 705 %ext29 = zext i4 %trunc29 to i8 706 %ext30 = zext i4 %trunc30 to i8 707 %ext31 = zext i4 %trunc31 to i8 708 %v0 = insertelement <32 x i8> undef, i8 %ext0, i32 0 709 %v1 = insertelement <32 x i8> %v0, i8 %ext1, i32 1 710 %v2 = insertelement <32 x i8> %v1, i8 %ext2, i32 2 711 %v3 = insertelement <32 x i8> %v2, i8 %ext3, i32 3 712 %v4 = insertelement <32 x i8> %v3, i8 %ext4, i32 4 713 %v5 = insertelement <32 x i8> %v4, i8 %ext5, i32 5 714 %v6 = insertelement <32 x i8> %v5, i8 %ext6, i32 6 715 %v7 = insertelement <32 x i8> %v6, i8 %ext7, i32 7 716 %v8 = insertelement <32 x i8> %v7, i8 %ext8, i32 8 717 %v9 = insertelement <32 x i8> %v8, i8 %ext9, i32 9 718 %v10 = insertelement <32 x i8> %v9, i8 %ext10, i32 10 719 %v11 = insertelement <32 x i8> %v10, i8 %ext11, i32 11 720 %v12 = insertelement <32 x i8> %v11, i8 %ext12, i32 12 721 %v13 = insertelement <32 x i8> %v12, i8 %ext13, i32 13 722 %v14 = insertelement <32 x i8> %v13, i8 %ext14, i32 14 723 %v15 = insertelement <32 x i8> %v14, i8 %ext15, i32 15 724 %v16 = insertelement <32 x i8> %v15, i8 %ext16, i32 16 725 %v17 = insertelement <32 x i8> %v16, i8 %ext17, i32 17 726 %v18 = insertelement <32 x i8> %v17, i8 %ext18, i32 18 727 %v19 = insertelement <32 x i8> %v18, i8 %ext19, i32 19 728 %v20 = insertelement <32 x i8> %v19, i8 %ext20, i32 20 729 %v21 = insertelement <32 x i8> %v20, i8 %ext21, i32 21 730 %v22 = insertelement <32 x i8> %v21, i8 %ext22, i32 22 731 %v23 = insertelement <32 x i8> %v22, i8 %ext23, i32 23 732 %v24 = insertelement <32 x i8> %v23, i8 %ext24, i32 24 733 %v25 = insertelement <32 x i8> %v24, i8 %ext25, i32 25 734 %v26 = insertelement <32 x i8> %v25, i8 %ext26, i32 26 735 %v27 = insertelement <32 x i8> %v26, i8 %ext27, i32 27 736 %v28 = insertelement <32 x i8> %v27, i8 %ext28, i32 28 737 %v29 = insertelement <32 x i8> %v28, i8 %ext29, i32 29 738 %v30 = insertelement <32 x i8> %v29, i8 %ext30, i32 30 739 %v31 = insertelement <32 x i8> %v30, i8 %ext31, i32 31 740 ret <32 x i8> %v31 741} 742 743define <2 x i64> @_clearupper2xi64b(<2 x i64>) nounwind { 744; SSE-LABEL: _clearupper2xi64b: 745; SSE: # BB#0: 746; SSE-NEXT: andps {{.*}}(%rip), %xmm0 747; SSE-NEXT: retq 748; 749; AVX1-LABEL: _clearupper2xi64b: 750; AVX1: # BB#0: 751; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 752; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7] 753; AVX1-NEXT: retq 754; 755; AVX2-LABEL: _clearupper2xi64b: 756; AVX2: # BB#0: 757; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 758; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3] 759; AVX2-NEXT: retq 760 %x32 = bitcast <2 x i64> %0 to <4 x i32> 761 %r0 = insertelement <4 x i32> %x32, i32 zeroinitializer, i32 1 762 %r1 = insertelement <4 x i32> %r0, i32 zeroinitializer, i32 3 763 %r = bitcast <4 x i32> %r1 to <2 x i64> 764 ret <2 x i64> %r 765} 766 767define <4 x i64> @_clearupper4xi64b(<4 x i64>) nounwind { 768; SSE-LABEL: _clearupper4xi64b: 769; SSE: # BB#0: 770; SSE-NEXT: movaps {{.*#+}} xmm2 = [4294967295,0,4294967295,0] 771; SSE-NEXT: andps %xmm2, %xmm0 772; SSE-NEXT: andps %xmm2, %xmm1 773; SSE-NEXT: retq 774; 775; AVX1-LABEL: _clearupper4xi64b: 776; AVX1: # BB#0: 777; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 778; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] 779; AVX1-NEXT: retq 780; 781; AVX2-LABEL: _clearupper4xi64b: 782; AVX2: # BB#0: 783; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 784; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] 785; AVX2-NEXT: retq 786 %x32 = bitcast <4 x i64> %0 to <8 x i32> 787 %r0 = insertelement <8 x i32> %x32, i32 zeroinitializer, i32 1 788 %r1 = insertelement <8 x i32> %r0, i32 zeroinitializer, i32 3 789 %r2 = insertelement <8 x i32> %r1, i32 zeroinitializer, i32 5 790 %r3 = insertelement <8 x i32> %r2, i32 zeroinitializer, i32 7 791 %r = bitcast <8 x i32> %r3 to <4 x i64> 792 ret <4 x i64> %r 793} 794 795define <4 x i32> @_clearupper4xi32b(<4 x i32>) nounwind { 796; SSE-LABEL: _clearupper4xi32b: 797; SSE: # BB#0: 798; SSE-NEXT: andps {{.*}}(%rip), %xmm0 799; SSE-NEXT: retq 800; 801; AVX-LABEL: _clearupper4xi32b: 802; AVX: # BB#0: 803; AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 804; AVX-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] 805; AVX-NEXT: retq 806 %x16 = bitcast <4 x i32> %0 to <8 x i16> 807 %r0 = insertelement <8 x i16> %x16, i16 zeroinitializer, i32 1 808 %r1 = insertelement <8 x i16> %r0, i16 zeroinitializer, i32 3 809 %r2 = insertelement <8 x i16> %r1, i16 zeroinitializer, i32 5 810 %r3 = insertelement <8 x i16> %r2, i16 zeroinitializer, i32 7 811 %r = bitcast <8 x i16> %r3 to <4 x i32> 812 ret <4 x i32> %r 813} 814 815define <8 x i32> @_clearupper8xi32b(<8 x i32>) nounwind { 816; SSE-LABEL: _clearupper8xi32b: 817; SSE: # BB#0: 818; SSE-NEXT: movaps {{.*#+}} xmm2 = [65535,0,65535,0,65535,0,65535,0] 819; SSE-NEXT: andps %xmm2, %xmm0 820; SSE-NEXT: andps %xmm2, %xmm1 821; SSE-NEXT: retq 822; 823; AVX1-LABEL: _clearupper8xi32b: 824; AVX1: # BB#0: 825; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 826; AVX1-NEXT: vpblendw {{.*#+}} xmm2 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] 827; AVX1-NEXT: vblendps {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm0[4,5,6,7] 828; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 829; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] 830; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0 831; AVX1-NEXT: retq 832; 833; AVX2-LABEL: _clearupper8xi32b: 834; AVX2: # BB#0: 835; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 836; AVX2-NEXT: vpblendw {{.*#+}} xmm2 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] 837; AVX2-NEXT: vpblendd {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm0[4,5,6,7] 838; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 839; AVX2-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] 840; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm2, %ymm0 841; AVX2-NEXT: retq 842 %x16 = bitcast <8 x i32> %0 to <16 x i16> 843 %r0 = insertelement <16 x i16> %x16, i16 zeroinitializer, i32 1 844 %r1 = insertelement <16 x i16> %r0, i16 zeroinitializer, i32 3 845 %r2 = insertelement <16 x i16> %r1, i16 zeroinitializer, i32 5 846 %r3 = insertelement <16 x i16> %r2, i16 zeroinitializer, i32 7 847 %r4 = insertelement <16 x i16> %r3, i16 zeroinitializer, i32 9 848 %r5 = insertelement <16 x i16> %r4, i16 zeroinitializer, i32 11 849 %r6 = insertelement <16 x i16> %r5, i16 zeroinitializer, i32 13 850 %r7 = insertelement <16 x i16> %r6, i16 zeroinitializer, i32 15 851 %r = bitcast <16 x i16> %r7 to <8 x i32> 852 ret <8 x i32> %r 853} 854 855define <8 x i16> @_clearupper8xi16b(<8 x i16>) nounwind { 856; SSE-LABEL: _clearupper8xi16b: 857; SSE: # BB#0: 858; SSE-NEXT: andps {{.*}}(%rip), %xmm0 859; SSE-NEXT: retq 860; 861; AVX-LABEL: _clearupper8xi16b: 862; AVX: # BB#0: 863; AVX-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0 864; AVX-NEXT: retq 865 %x8 = bitcast <8 x i16> %0 to <16 x i8> 866 %r0 = insertelement <16 x i8> %x8, i8 zeroinitializer, i32 1 867 %r1 = insertelement <16 x i8> %r0, i8 zeroinitializer, i32 3 868 %r2 = insertelement <16 x i8> %r1, i8 zeroinitializer, i32 5 869 %r3 = insertelement <16 x i8> %r2, i8 zeroinitializer, i32 7 870 %r4 = insertelement <16 x i8> %r3, i8 zeroinitializer, i32 9 871 %r5 = insertelement <16 x i8> %r4, i8 zeroinitializer, i32 11 872 %r6 = insertelement <16 x i8> %r5, i8 zeroinitializer, i32 13 873 %r7 = insertelement <16 x i8> %r6, i8 zeroinitializer, i32 15 874 %r = bitcast <16 x i8> %r7 to <8 x i16> 875 ret <8 x i16> %r 876} 877 878define <16 x i16> @_clearupper16xi16b(<16 x i16>) nounwind { 879; SSE-LABEL: _clearupper16xi16b: 880; SSE: # BB#0: 881; SSE-NEXT: movaps {{.*#+}} xmm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0] 882; SSE-NEXT: andps %xmm2, %xmm0 883; SSE-NEXT: andps %xmm2, %xmm1 884; SSE-NEXT: retq 885; 886; AVX1-LABEL: _clearupper16xi16b: 887; AVX1: # BB#0: 888; AVX1-NEXT: vmovaps {{.*#+}} xmm1 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0] 889; AVX1-NEXT: vandps %xmm1, %xmm0, %xmm2 890; AVX1-NEXT: vblendps {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm0[4,5,6,7] 891; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 892; AVX1-NEXT: vandps %xmm1, %xmm0, %xmm0 893; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0 894; AVX1-NEXT: retq 895; 896; AVX2-LABEL: _clearupper16xi16b: 897; AVX2: # BB#0: 898; AVX2-NEXT: vmovdqa {{.*#+}} xmm1 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0] 899; AVX2-NEXT: vpand %xmm1, %xmm0, %xmm2 900; AVX2-NEXT: vpblendd {{.*#+}} ymm2 = ymm2[0,1,2,3],ymm0[4,5,6,7] 901; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 902; AVX2-NEXT: vpand %xmm1, %xmm0, %xmm0 903; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm2, %ymm0 904; AVX2-NEXT: retq 905 %x8 = bitcast <16 x i16> %0 to <32 x i8> 906 %r0 = insertelement <32 x i8> %x8, i8 zeroinitializer, i32 1 907 %r1 = insertelement <32 x i8> %r0, i8 zeroinitializer, i32 3 908 %r2 = insertelement <32 x i8> %r1, i8 zeroinitializer, i32 5 909 %r3 = insertelement <32 x i8> %r2, i8 zeroinitializer, i32 7 910 %r4 = insertelement <32 x i8> %r3, i8 zeroinitializer, i32 9 911 %r5 = insertelement <32 x i8> %r4, i8 zeroinitializer, i32 11 912 %r6 = insertelement <32 x i8> %r5, i8 zeroinitializer, i32 13 913 %r7 = insertelement <32 x i8> %r6, i8 zeroinitializer, i32 15 914 %r8 = insertelement <32 x i8> %r7, i8 zeroinitializer, i32 17 915 %r9 = insertelement <32 x i8> %r8, i8 zeroinitializer, i32 19 916 %r10 = insertelement <32 x i8> %r9, i8 zeroinitializer, i32 21 917 %r11 = insertelement <32 x i8> %r10, i8 zeroinitializer, i32 23 918 %r12 = insertelement <32 x i8> %r11, i8 zeroinitializer, i32 25 919 %r13 = insertelement <32 x i8> %r12, i8 zeroinitializer, i32 27 920 %r14 = insertelement <32 x i8> %r13, i8 zeroinitializer, i32 29 921 %r15 = insertelement <32 x i8> %r14, i8 zeroinitializer, i32 31 922 %r = bitcast <32 x i8> %r15 to <16 x i16> 923 ret <16 x i16> %r 924} 925 926define <16 x i8> @_clearupper16xi8b(<16 x i8>) nounwind { 927; SSE-LABEL: _clearupper16xi8b: 928; SSE: # BB#0: 929; SSE-NEXT: pushq %r14 930; SSE-NEXT: pushq %rbx 931; SSE-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 932; SSE-NEXT: movd %xmm0, %rcx 933; SSE-NEXT: movq %rcx, %r8 934; SSE-NEXT: movq %rcx, %r9 935; SSE-NEXT: movq %rcx, %r10 936; SSE-NEXT: movq %rcx, %rax 937; SSE-NEXT: movq %rcx, %rdx 938; SSE-NEXT: movq %rcx, %rsi 939; SSE-NEXT: movq %rcx, %rdi 940; SSE-NEXT: andb $15, %cl 941; SSE-NEXT: movb %cl, -{{[0-9]+}}(%rsp) 942; SSE-NEXT: movd %xmm1, %rcx 943; SSE-NEXT: shrq $56, %rdi 944; SSE-NEXT: andb $15, %dil 945; SSE-NEXT: movb %dil, -{{[0-9]+}}(%rsp) 946; SSE-NEXT: movq %rcx, %r11 947; SSE-NEXT: shrq $48, %rsi 948; SSE-NEXT: andb $15, %sil 949; SSE-NEXT: movb %sil, -{{[0-9]+}}(%rsp) 950; SSE-NEXT: movq %rcx, %r14 951; SSE-NEXT: shrq $40, %rdx 952; SSE-NEXT: andb $15, %dl 953; SSE-NEXT: movb %dl, -{{[0-9]+}}(%rsp) 954; SSE-NEXT: movq %rcx, %rdx 955; SSE-NEXT: shrq $32, %rax 956; SSE-NEXT: andb $15, %al 957; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) 958; SSE-NEXT: movq %rcx, %rax 959; SSE-NEXT: shrq $24, %r10 960; SSE-NEXT: andb $15, %r10b 961; SSE-NEXT: movb %r10b, -{{[0-9]+}}(%rsp) 962; SSE-NEXT: movq %rcx, %rdi 963; SSE-NEXT: shrq $16, %r9 964; SSE-NEXT: andb $15, %r9b 965; SSE-NEXT: movb %r9b, -{{[0-9]+}}(%rsp) 966; SSE-NEXT: movq %rcx, %rsi 967; SSE-NEXT: shrq $8, %r8 968; SSE-NEXT: andb $15, %r8b 969; SSE-NEXT: movb %r8b, -{{[0-9]+}}(%rsp) 970; SSE-NEXT: movq %rcx, %rbx 971; SSE-NEXT: movb $0, -{{[0-9]+}}(%rsp) 972; SSE-NEXT: andb $15, %cl 973; SSE-NEXT: movb %cl, -{{[0-9]+}}(%rsp) 974; SSE-NEXT: shrq $56, %rbx 975; SSE-NEXT: andb $15, %bl 976; SSE-NEXT: movb %bl, -{{[0-9]+}}(%rsp) 977; SSE-NEXT: shrq $48, %rsi 978; SSE-NEXT: andb $15, %sil 979; SSE-NEXT: movb %sil, -{{[0-9]+}}(%rsp) 980; SSE-NEXT: shrq $40, %rdi 981; SSE-NEXT: andb $15, %dil 982; SSE-NEXT: movb %dil, -{{[0-9]+}}(%rsp) 983; SSE-NEXT: shrq $32, %rax 984; SSE-NEXT: andb $15, %al 985; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) 986; SSE-NEXT: shrq $24, %rdx 987; SSE-NEXT: andb $15, %dl 988; SSE-NEXT: movb %dl, -{{[0-9]+}}(%rsp) 989; SSE-NEXT: shrq $16, %r14 990; SSE-NEXT: andb $15, %r14b 991; SSE-NEXT: movb %r14b, -{{[0-9]+}}(%rsp) 992; SSE-NEXT: shrq $8, %r11 993; SSE-NEXT: andb $15, %r11b 994; SSE-NEXT: movb %r11b, -{{[0-9]+}}(%rsp) 995; SSE-NEXT: movb $0, -{{[0-9]+}}(%rsp) 996; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 997; SSE-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 998; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 999; SSE-NEXT: popq %rbx 1000; SSE-NEXT: popq %r14 1001; SSE-NEXT: retq 1002; 1003; AVX-LABEL: _clearupper16xi8b: 1004; AVX: # BB#0: 1005; AVX-NEXT: pushq %rbp 1006; AVX-NEXT: pushq %r15 1007; AVX-NEXT: pushq %r14 1008; AVX-NEXT: pushq %r13 1009; AVX-NEXT: pushq %r12 1010; AVX-NEXT: pushq %rbx 1011; AVX-NEXT: vmovaps %xmm0, -{{[0-9]+}}(%rsp) 1012; AVX-NEXT: movq -{{[0-9]+}}(%rsp), %rcx 1013; AVX-NEXT: movq -{{[0-9]+}}(%rsp), %rdx 1014; AVX-NEXT: movq %rcx, %r8 1015; AVX-NEXT: movq %rcx, %r9 1016; AVX-NEXT: movq %rcx, %r10 1017; AVX-NEXT: movq %rcx, %r11 1018; AVX-NEXT: movq %rcx, %r14 1019; AVX-NEXT: movq %rcx, %r15 1020; AVX-NEXT: movq %rdx, %r12 1021; AVX-NEXT: movq %rdx, %r13 1022; AVX-NEXT: movq %rdx, %rdi 1023; AVX-NEXT: movq %rdx, %rax 1024; AVX-NEXT: movq %rdx, %rsi 1025; AVX-NEXT: movq %rdx, %rbx 1026; AVX-NEXT: movq %rdx, %rbp 1027; AVX-NEXT: andb $15, %dl 1028; AVX-NEXT: movb %dl, -{{[0-9]+}}(%rsp) 1029; AVX-NEXT: movq %rcx, %rdx 1030; AVX-NEXT: andb $15, %cl 1031; AVX-NEXT: movb %cl, -{{[0-9]+}}(%rsp) 1032; AVX-NEXT: shrq $56, %rbp 1033; AVX-NEXT: andb $15, %bpl 1034; AVX-NEXT: movb %bpl, -{{[0-9]+}}(%rsp) 1035; AVX-NEXT: shrq $48, %rbx 1036; AVX-NEXT: andb $15, %bl 1037; AVX-NEXT: movb %bl, -{{[0-9]+}}(%rsp) 1038; AVX-NEXT: shrq $40, %rsi 1039; AVX-NEXT: andb $15, %sil 1040; AVX-NEXT: movb %sil, -{{[0-9]+}}(%rsp) 1041; AVX-NEXT: shrq $32, %rax 1042; AVX-NEXT: andb $15, %al 1043; AVX-NEXT: movb %al, -{{[0-9]+}}(%rsp) 1044; AVX-NEXT: shrq $24, %rdi 1045; AVX-NEXT: andb $15, %dil 1046; AVX-NEXT: movb %dil, -{{[0-9]+}}(%rsp) 1047; AVX-NEXT: shrq $16, %r13 1048; AVX-NEXT: andb $15, %r13b 1049; AVX-NEXT: movb %r13b, -{{[0-9]+}}(%rsp) 1050; AVX-NEXT: shrq $8, %r12 1051; AVX-NEXT: andb $15, %r12b 1052; AVX-NEXT: movb %r12b, -{{[0-9]+}}(%rsp) 1053; AVX-NEXT: shrq $56, %rdx 1054; AVX-NEXT: andb $15, %dl 1055; AVX-NEXT: movb %dl, -{{[0-9]+}}(%rsp) 1056; AVX-NEXT: shrq $48, %r15 1057; AVX-NEXT: andb $15, %r15b 1058; AVX-NEXT: movb %r15b, -{{[0-9]+}}(%rsp) 1059; AVX-NEXT: shrq $40, %r14 1060; AVX-NEXT: andb $15, %r14b 1061; AVX-NEXT: movb %r14b, -{{[0-9]+}}(%rsp) 1062; AVX-NEXT: shrq $32, %r11 1063; AVX-NEXT: andb $15, %r11b 1064; AVX-NEXT: movb %r11b, -{{[0-9]+}}(%rsp) 1065; AVX-NEXT: shrq $24, %r10 1066; AVX-NEXT: andb $15, %r10b 1067; AVX-NEXT: movb %r10b, -{{[0-9]+}}(%rsp) 1068; AVX-NEXT: shrq $16, %r9 1069; AVX-NEXT: andb $15, %r9b 1070; AVX-NEXT: movb %r9b, -{{[0-9]+}}(%rsp) 1071; AVX-NEXT: shrq $8, %r8 1072; AVX-NEXT: andb $15, %r8b 1073; AVX-NEXT: movb %r8b, -{{[0-9]+}}(%rsp) 1074; AVX-NEXT: movb $0, -{{[0-9]+}}(%rsp) 1075; AVX-NEXT: vmovaps -{{[0-9]+}}(%rsp), %xmm0 1076; AVX-NEXT: popq %rbx 1077; AVX-NEXT: popq %r12 1078; AVX-NEXT: popq %r13 1079; AVX-NEXT: popq %r14 1080; AVX-NEXT: popq %r15 1081; AVX-NEXT: popq %rbp 1082; AVX-NEXT: retq 1083 %x4 = bitcast <16 x i8> %0 to <32 x i4> 1084 %r0 = insertelement <32 x i4> %x4, i4 zeroinitializer, i32 1 1085 %r1 = insertelement <32 x i4> %r0, i4 zeroinitializer, i32 3 1086 %r2 = insertelement <32 x i4> %r1, i4 zeroinitializer, i32 5 1087 %r3 = insertelement <32 x i4> %r2, i4 zeroinitializer, i32 7 1088 %r4 = insertelement <32 x i4> %r3, i4 zeroinitializer, i32 9 1089 %r5 = insertelement <32 x i4> %r4, i4 zeroinitializer, i32 11 1090 %r6 = insertelement <32 x i4> %r5, i4 zeroinitializer, i32 13 1091 %r7 = insertelement <32 x i4> %r6, i4 zeroinitializer, i32 15 1092 %r8 = insertelement <32 x i4> %r7, i4 zeroinitializer, i32 17 1093 %r9 = insertelement <32 x i4> %r8, i4 zeroinitializer, i32 19 1094 %r10 = insertelement <32 x i4> %r9, i4 zeroinitializer, i32 21 1095 %r11 = insertelement <32 x i4> %r10, i4 zeroinitializer, i32 23 1096 %r12 = insertelement <32 x i4> %r11, i4 zeroinitializer, i32 25 1097 %r13 = insertelement <32 x i4> %r12, i4 zeroinitializer, i32 27 1098 %r14 = insertelement <32 x i4> %r13, i4 zeroinitializer, i32 29 1099 %r15 = insertelement <32 x i4> %r14, i4 zeroinitializer, i32 31 1100 %r = bitcast <32 x i4> %r15 to <16 x i8> 1101 ret <16 x i8> %r 1102} 1103 1104define <32 x i8> @_clearupper32xi8b(<32 x i8>) nounwind { 1105; SSE-LABEL: _clearupper32xi8b: 1106; SSE: # BB#0: 1107; SSE-NEXT: pushq %r14 1108; SSE-NEXT: pushq %rbx 1109; SSE-NEXT: pshufd {{.*#+}} xmm2 = xmm0[2,3,0,1] 1110; SSE-NEXT: movd %xmm0, %rcx 1111; SSE-NEXT: movq %rcx, %r8 1112; SSE-NEXT: movq %rcx, %r9 1113; SSE-NEXT: movq %rcx, %r10 1114; SSE-NEXT: movq %rcx, %rax 1115; SSE-NEXT: movq %rcx, %rdx 1116; SSE-NEXT: movq %rcx, %rsi 1117; SSE-NEXT: movq %rcx, %rdi 1118; SSE-NEXT: andb $15, %cl 1119; SSE-NEXT: movb %cl, -{{[0-9]+}}(%rsp) 1120; SSE-NEXT: movd %xmm2, %rcx 1121; SSE-NEXT: shrq $56, %rdi 1122; SSE-NEXT: andb $15, %dil 1123; SSE-NEXT: movb %dil, -{{[0-9]+}}(%rsp) 1124; SSE-NEXT: movq %rcx, %r11 1125; SSE-NEXT: shrq $48, %rsi 1126; SSE-NEXT: andb $15, %sil 1127; SSE-NEXT: movb %sil, -{{[0-9]+}}(%rsp) 1128; SSE-NEXT: movq %rcx, %r14 1129; SSE-NEXT: shrq $40, %rdx 1130; SSE-NEXT: andb $15, %dl 1131; SSE-NEXT: movb %dl, -{{[0-9]+}}(%rsp) 1132; SSE-NEXT: movq %rcx, %rdx 1133; SSE-NEXT: shrq $32, %rax 1134; SSE-NEXT: andb $15, %al 1135; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) 1136; SSE-NEXT: movq %rcx, %rax 1137; SSE-NEXT: shrq $24, %r10 1138; SSE-NEXT: andb $15, %r10b 1139; SSE-NEXT: movb %r10b, -{{[0-9]+}}(%rsp) 1140; SSE-NEXT: movq %rcx, %rdi 1141; SSE-NEXT: shrq $16, %r9 1142; SSE-NEXT: andb $15, %r9b 1143; SSE-NEXT: movb %r9b, -{{[0-9]+}}(%rsp) 1144; SSE-NEXT: movq %rcx, %rsi 1145; SSE-NEXT: shrq $8, %r8 1146; SSE-NEXT: andb $15, %r8b 1147; SSE-NEXT: movb %r8b, -{{[0-9]+}}(%rsp) 1148; SSE-NEXT: movq %rcx, %rbx 1149; SSE-NEXT: movb $0, -{{[0-9]+}}(%rsp) 1150; SSE-NEXT: andb $15, %cl 1151; SSE-NEXT: movb %cl, -{{[0-9]+}}(%rsp) 1152; SSE-NEXT: shrq $56, %rbx 1153; SSE-NEXT: andb $15, %bl 1154; SSE-NEXT: movb %bl, -{{[0-9]+}}(%rsp) 1155; SSE-NEXT: shrq $48, %rsi 1156; SSE-NEXT: andb $15, %sil 1157; SSE-NEXT: movb %sil, -{{[0-9]+}}(%rsp) 1158; SSE-NEXT: shrq $40, %rdi 1159; SSE-NEXT: andb $15, %dil 1160; SSE-NEXT: movb %dil, -{{[0-9]+}}(%rsp) 1161; SSE-NEXT: shrq $32, %rax 1162; SSE-NEXT: andb $15, %al 1163; SSE-NEXT: movb %al, -{{[0-9]+}}(%rsp) 1164; SSE-NEXT: shrq $24, %rdx 1165; SSE-NEXT: andb $15, %dl 1166; SSE-NEXT: movb %dl, -{{[0-9]+}}(%rsp) 1167; SSE-NEXT: shrq $16, %r14 1168; SSE-NEXT: andb $15, %r14b 1169; SSE-NEXT: movb %r14b, -{{[0-9]+}}(%rsp) 1170; SSE-NEXT: shrq $8, %r11 1171; SSE-NEXT: andb $15, %r11b 1172; SSE-NEXT: movb %r11b, -{{[0-9]+}}(%rsp) 1173; SSE-NEXT: movb $0, -{{[0-9]+}}(%rsp) 1174; SSE-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 1175; SSE-NEXT: movq {{.*#+}} xmm2 = mem[0],zero 1176; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm2[0] 1177; SSE-NEXT: popq %rbx 1178; SSE-NEXT: popq %r14 1179; SSE-NEXT: retq 1180; 1181; AVX1-LABEL: _clearupper32xi8b: 1182; AVX1: # BB#0: 1183; AVX1-NEXT: pushq %r14 1184; AVX1-NEXT: pushq %rbx 1185; AVX1-NEXT: vpextrq $1, %xmm0, -{{[0-9]+}}(%rsp) 1186; AVX1-NEXT: vmovq %xmm0, -{{[0-9]+}}(%rsp) 1187; AVX1-NEXT: movq -{{[0-9]+}}(%rsp), %r14 1188; AVX1-NEXT: vpextrq $1, %xmm0, %rdx 1189; AVX1-NEXT: movq %rdx, %r8 1190; AVX1-NEXT: movq %rdx, %r9 1191; AVX1-NEXT: movq %rdx, %r11 1192; AVX1-NEXT: movq %rdx, %rsi 1193; AVX1-NEXT: movq %rdx, %rdi 1194; AVX1-NEXT: movq %rdx, %rcx 1195; AVX1-NEXT: movq %rdx, %rax 1196; AVX1-NEXT: andb $15, %dl 1197; AVX1-NEXT: movb %dl, -{{[0-9]+}}(%rsp) 1198; AVX1-NEXT: shrq $56, %rax 1199; AVX1-NEXT: andb $15, %al 1200; AVX1-NEXT: movb %al, -{{[0-9]+}}(%rsp) 1201; AVX1-NEXT: movq %r14, %r10 1202; AVX1-NEXT: shrq $48, %rcx 1203; AVX1-NEXT: andb $15, %cl 1204; AVX1-NEXT: movb %cl, -{{[0-9]+}}(%rsp) 1205; AVX1-NEXT: movq %r14, %rdx 1206; AVX1-NEXT: shrq $40, %rdi 1207; AVX1-NEXT: andb $15, %dil 1208; AVX1-NEXT: movb %dil, -{{[0-9]+}}(%rsp) 1209; AVX1-NEXT: movq %r14, %rax 1210; AVX1-NEXT: shrq $32, %rsi 1211; AVX1-NEXT: andb $15, %sil 1212; AVX1-NEXT: movb %sil, -{{[0-9]+}}(%rsp) 1213; AVX1-NEXT: movq %r14, %rcx 1214; AVX1-NEXT: shrq $24, %r11 1215; AVX1-NEXT: andb $15, %r11b 1216; AVX1-NEXT: movb %r11b, -{{[0-9]+}}(%rsp) 1217; AVX1-NEXT: movq %r14, %rsi 1218; AVX1-NEXT: shrq $16, %r9 1219; AVX1-NEXT: andb $15, %r9b 1220; AVX1-NEXT: movb %r9b, -{{[0-9]+}}(%rsp) 1221; AVX1-NEXT: movq %r14, %rdi 1222; AVX1-NEXT: shrq $8, %r8 1223; AVX1-NEXT: andb $15, %r8b 1224; AVX1-NEXT: movb %r8b, -{{[0-9]+}}(%rsp) 1225; AVX1-NEXT: movq %r14, %rbx 1226; AVX1-NEXT: andb $15, %r14b 1227; AVX1-NEXT: movb %r14b, -{{[0-9]+}}(%rsp) 1228; AVX1-NEXT: shrq $8, %r10 1229; AVX1-NEXT: shrq $16, %rdx 1230; AVX1-NEXT: shrq $24, %rax 1231; AVX1-NEXT: shrq $32, %rcx 1232; AVX1-NEXT: shrq $40, %rsi 1233; AVX1-NEXT: shrq $48, %rdi 1234; AVX1-NEXT: shrq $56, %rbx 1235; AVX1-NEXT: andb $15, %bl 1236; AVX1-NEXT: movb %bl, -{{[0-9]+}}(%rsp) 1237; AVX1-NEXT: andb $15, %dil 1238; AVX1-NEXT: movb %dil, -{{[0-9]+}}(%rsp) 1239; AVX1-NEXT: andb $15, %sil 1240; AVX1-NEXT: movb %sil, -{{[0-9]+}}(%rsp) 1241; AVX1-NEXT: andb $15, %cl 1242; AVX1-NEXT: movb %cl, -{{[0-9]+}}(%rsp) 1243; AVX1-NEXT: andb $15, %al 1244; AVX1-NEXT: movb %al, -{{[0-9]+}}(%rsp) 1245; AVX1-NEXT: andb $15, %dl 1246; AVX1-NEXT: movb %dl, -{{[0-9]+}}(%rsp) 1247; AVX1-NEXT: andb $15, %r10b 1248; AVX1-NEXT: movb %r10b, -{{[0-9]+}}(%rsp) 1249; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0 1250; AVX1-NEXT: vmovq %xmm0, %rax 1251; AVX1-NEXT: movq %rax, %r8 1252; AVX1-NEXT: movq %rax, %rdx 1253; AVX1-NEXT: movq %rax, %rsi 1254; AVX1-NEXT: movq %rax, %rdi 1255; AVX1-NEXT: movl %eax, %ebx 1256; AVX1-NEXT: movl %eax, %ecx 1257; AVX1-NEXT: vmovd %eax, %xmm1 1258; AVX1-NEXT: shrl $8, %eax 1259; AVX1-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1 1260; AVX1-NEXT: shrl $16, %ecx 1261; AVX1-NEXT: vpinsrb $2, %ecx, %xmm1, %xmm1 1262; AVX1-NEXT: shrl $24, %ebx 1263; AVX1-NEXT: vpinsrb $3, %ebx, %xmm1, %xmm1 1264; AVX1-NEXT: shrq $32, %rdi 1265; AVX1-NEXT: vpinsrb $4, %edi, %xmm1, %xmm1 1266; AVX1-NEXT: shrq $40, %rsi 1267; AVX1-NEXT: vpinsrb $5, %esi, %xmm1, %xmm1 1268; AVX1-NEXT: movb $0, -{{[0-9]+}}(%rsp) 1269; AVX1-NEXT: vmovdqa -{{[0-9]+}}(%rsp), %xmm2 1270; AVX1-NEXT: shrq $48, %rdx 1271; AVX1-NEXT: vpinsrb $6, %edx, %xmm1, %xmm1 1272; AVX1-NEXT: vpextrq $1, %xmm0, %rax 1273; AVX1-NEXT: shrq $56, %r8 1274; AVX1-NEXT: vpinsrb $7, %r8d, %xmm1, %xmm0 1275; AVX1-NEXT: movl %eax, %ecx 1276; AVX1-NEXT: shrl $8, %ecx 1277; AVX1-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0 1278; AVX1-NEXT: vpinsrb $9, %ecx, %xmm0, %xmm0 1279; AVX1-NEXT: movl %eax, %ecx 1280; AVX1-NEXT: shrl $16, %ecx 1281; AVX1-NEXT: vpinsrb $10, %ecx, %xmm0, %xmm0 1282; AVX1-NEXT: movl %eax, %ecx 1283; AVX1-NEXT: shrl $24, %ecx 1284; AVX1-NEXT: vpinsrb $11, %ecx, %xmm0, %xmm0 1285; AVX1-NEXT: movq %rax, %rcx 1286; AVX1-NEXT: shrq $32, %rcx 1287; AVX1-NEXT: vpinsrb $12, %ecx, %xmm0, %xmm0 1288; AVX1-NEXT: movq %rax, %rcx 1289; AVX1-NEXT: shrq $40, %rcx 1290; AVX1-NEXT: vpinsrb $13, %ecx, %xmm0, %xmm0 1291; AVX1-NEXT: movq %rax, %rcx 1292; AVX1-NEXT: shrq $48, %rcx 1293; AVX1-NEXT: vpinsrb $14, %ecx, %xmm0, %xmm0 1294; AVX1-NEXT: vmovq %xmm2, %rcx 1295; AVX1-NEXT: shrq $56, %rax 1296; AVX1-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 1297; AVX1-NEXT: movl %ecx, %eax 1298; AVX1-NEXT: shrl $8, %eax 1299; AVX1-NEXT: vmovd %ecx, %xmm1 1300; AVX1-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1 1301; AVX1-NEXT: movl %ecx, %eax 1302; AVX1-NEXT: shrl $16, %eax 1303; AVX1-NEXT: vpinsrb $2, %eax, %xmm1, %xmm1 1304; AVX1-NEXT: movl %ecx, %eax 1305; AVX1-NEXT: shrl $24, %eax 1306; AVX1-NEXT: vpinsrb $3, %eax, %xmm1, %xmm1 1307; AVX1-NEXT: movq %rcx, %rax 1308; AVX1-NEXT: shrq $32, %rax 1309; AVX1-NEXT: vpinsrb $4, %eax, %xmm1, %xmm1 1310; AVX1-NEXT: movq %rcx, %rax 1311; AVX1-NEXT: shrq $40, %rax 1312; AVX1-NEXT: vpinsrb $5, %eax, %xmm1, %xmm1 1313; AVX1-NEXT: movq %rcx, %rax 1314; AVX1-NEXT: shrq $48, %rax 1315; AVX1-NEXT: vpinsrb $6, %eax, %xmm1, %xmm1 1316; AVX1-NEXT: vpextrq $1, %xmm2, %rax 1317; AVX1-NEXT: shrq $56, %rcx 1318; AVX1-NEXT: vpinsrb $7, %ecx, %xmm1, %xmm1 1319; AVX1-NEXT: movl %eax, %ecx 1320; AVX1-NEXT: shrl $8, %ecx 1321; AVX1-NEXT: vpinsrb $8, %eax, %xmm1, %xmm1 1322; AVX1-NEXT: vpinsrb $9, %ecx, %xmm1, %xmm1 1323; AVX1-NEXT: movl %eax, %ecx 1324; AVX1-NEXT: shrl $16, %ecx 1325; AVX1-NEXT: vpinsrb $10, %ecx, %xmm1, %xmm1 1326; AVX1-NEXT: movl %eax, %ecx 1327; AVX1-NEXT: shrl $24, %ecx 1328; AVX1-NEXT: vpinsrb $11, %ecx, %xmm1, %xmm1 1329; AVX1-NEXT: movq %rax, %rcx 1330; AVX1-NEXT: shrq $32, %rcx 1331; AVX1-NEXT: vpinsrb $12, %ecx, %xmm1, %xmm1 1332; AVX1-NEXT: movq %rax, %rcx 1333; AVX1-NEXT: shrq $40, %rcx 1334; AVX1-NEXT: vpinsrb $13, %ecx, %xmm1, %xmm1 1335; AVX1-NEXT: movq %rax, %rcx 1336; AVX1-NEXT: shrq $48, %rcx 1337; AVX1-NEXT: vpinsrb $14, %ecx, %xmm1, %xmm1 1338; AVX1-NEXT: shrq $56, %rax 1339; AVX1-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1 1340; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1341; AVX1-NEXT: popq %rbx 1342; AVX1-NEXT: popq %r14 1343; AVX1-NEXT: retq 1344; 1345; AVX2-LABEL: _clearupper32xi8b: 1346; AVX2: # BB#0: 1347; AVX2-NEXT: pushq %r14 1348; AVX2-NEXT: pushq %rbx 1349; AVX2-NEXT: vpextrq $1, %xmm0, -{{[0-9]+}}(%rsp) 1350; AVX2-NEXT: vmovq %xmm0, -{{[0-9]+}}(%rsp) 1351; AVX2-NEXT: movq -{{[0-9]+}}(%rsp), %r14 1352; AVX2-NEXT: vpextrq $1, %xmm0, %rdx 1353; AVX2-NEXT: movq %rdx, %r8 1354; AVX2-NEXT: movq %rdx, %r9 1355; AVX2-NEXT: movq %rdx, %r11 1356; AVX2-NEXT: movq %rdx, %rsi 1357; AVX2-NEXT: movq %rdx, %rdi 1358; AVX2-NEXT: movq %rdx, %rcx 1359; AVX2-NEXT: movq %rdx, %rax 1360; AVX2-NEXT: andb $15, %dl 1361; AVX2-NEXT: movb %dl, -{{[0-9]+}}(%rsp) 1362; AVX2-NEXT: shrq $56, %rax 1363; AVX2-NEXT: andb $15, %al 1364; AVX2-NEXT: movb %al, -{{[0-9]+}}(%rsp) 1365; AVX2-NEXT: movq %r14, %r10 1366; AVX2-NEXT: shrq $48, %rcx 1367; AVX2-NEXT: andb $15, %cl 1368; AVX2-NEXT: movb %cl, -{{[0-9]+}}(%rsp) 1369; AVX2-NEXT: movq %r14, %rdx 1370; AVX2-NEXT: shrq $40, %rdi 1371; AVX2-NEXT: andb $15, %dil 1372; AVX2-NEXT: movb %dil, -{{[0-9]+}}(%rsp) 1373; AVX2-NEXT: movq %r14, %rax 1374; AVX2-NEXT: shrq $32, %rsi 1375; AVX2-NEXT: andb $15, %sil 1376; AVX2-NEXT: movb %sil, -{{[0-9]+}}(%rsp) 1377; AVX2-NEXT: movq %r14, %rcx 1378; AVX2-NEXT: shrq $24, %r11 1379; AVX2-NEXT: andb $15, %r11b 1380; AVX2-NEXT: movb %r11b, -{{[0-9]+}}(%rsp) 1381; AVX2-NEXT: movq %r14, %rsi 1382; AVX2-NEXT: shrq $16, %r9 1383; AVX2-NEXT: andb $15, %r9b 1384; AVX2-NEXT: movb %r9b, -{{[0-9]+}}(%rsp) 1385; AVX2-NEXT: movq %r14, %rdi 1386; AVX2-NEXT: shrq $8, %r8 1387; AVX2-NEXT: andb $15, %r8b 1388; AVX2-NEXT: movb %r8b, -{{[0-9]+}}(%rsp) 1389; AVX2-NEXT: movq %r14, %rbx 1390; AVX2-NEXT: andb $15, %r14b 1391; AVX2-NEXT: movb %r14b, -{{[0-9]+}}(%rsp) 1392; AVX2-NEXT: shrq $8, %r10 1393; AVX2-NEXT: shrq $16, %rdx 1394; AVX2-NEXT: shrq $24, %rax 1395; AVX2-NEXT: shrq $32, %rcx 1396; AVX2-NEXT: shrq $40, %rsi 1397; AVX2-NEXT: shrq $48, %rdi 1398; AVX2-NEXT: shrq $56, %rbx 1399; AVX2-NEXT: andb $15, %bl 1400; AVX2-NEXT: movb %bl, -{{[0-9]+}}(%rsp) 1401; AVX2-NEXT: andb $15, %dil 1402; AVX2-NEXT: movb %dil, -{{[0-9]+}}(%rsp) 1403; AVX2-NEXT: andb $15, %sil 1404; AVX2-NEXT: movb %sil, -{{[0-9]+}}(%rsp) 1405; AVX2-NEXT: andb $15, %cl 1406; AVX2-NEXT: movb %cl, -{{[0-9]+}}(%rsp) 1407; AVX2-NEXT: andb $15, %al 1408; AVX2-NEXT: movb %al, -{{[0-9]+}}(%rsp) 1409; AVX2-NEXT: andb $15, %dl 1410; AVX2-NEXT: movb %dl, -{{[0-9]+}}(%rsp) 1411; AVX2-NEXT: andb $15, %r10b 1412; AVX2-NEXT: movb %r10b, -{{[0-9]+}}(%rsp) 1413; AVX2-NEXT: vextracti128 $1, %ymm0, %xmm0 1414; AVX2-NEXT: vmovq %xmm0, %rax 1415; AVX2-NEXT: movq %rax, %r8 1416; AVX2-NEXT: movq %rax, %rdx 1417; AVX2-NEXT: movq %rax, %rsi 1418; AVX2-NEXT: movq %rax, %rdi 1419; AVX2-NEXT: movl %eax, %ebx 1420; AVX2-NEXT: movl %eax, %ecx 1421; AVX2-NEXT: vmovd %eax, %xmm1 1422; AVX2-NEXT: shrl $8, %eax 1423; AVX2-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1 1424; AVX2-NEXT: shrl $16, %ecx 1425; AVX2-NEXT: vpinsrb $2, %ecx, %xmm1, %xmm1 1426; AVX2-NEXT: shrl $24, %ebx 1427; AVX2-NEXT: vpinsrb $3, %ebx, %xmm1, %xmm1 1428; AVX2-NEXT: shrq $32, %rdi 1429; AVX2-NEXT: vpinsrb $4, %edi, %xmm1, %xmm1 1430; AVX2-NEXT: shrq $40, %rsi 1431; AVX2-NEXT: vpinsrb $5, %esi, %xmm1, %xmm1 1432; AVX2-NEXT: movb $0, -{{[0-9]+}}(%rsp) 1433; AVX2-NEXT: vmovdqa -{{[0-9]+}}(%rsp), %xmm2 1434; AVX2-NEXT: shrq $48, %rdx 1435; AVX2-NEXT: vpinsrb $6, %edx, %xmm1, %xmm1 1436; AVX2-NEXT: vpextrq $1, %xmm0, %rax 1437; AVX2-NEXT: shrq $56, %r8 1438; AVX2-NEXT: vpinsrb $7, %r8d, %xmm1, %xmm0 1439; AVX2-NEXT: movl %eax, %ecx 1440; AVX2-NEXT: shrl $8, %ecx 1441; AVX2-NEXT: vpinsrb $8, %eax, %xmm0, %xmm0 1442; AVX2-NEXT: vpinsrb $9, %ecx, %xmm0, %xmm0 1443; AVX2-NEXT: movl %eax, %ecx 1444; AVX2-NEXT: shrl $16, %ecx 1445; AVX2-NEXT: vpinsrb $10, %ecx, %xmm0, %xmm0 1446; AVX2-NEXT: movl %eax, %ecx 1447; AVX2-NEXT: shrl $24, %ecx 1448; AVX2-NEXT: vpinsrb $11, %ecx, %xmm0, %xmm0 1449; AVX2-NEXT: movq %rax, %rcx 1450; AVX2-NEXT: shrq $32, %rcx 1451; AVX2-NEXT: vpinsrb $12, %ecx, %xmm0, %xmm0 1452; AVX2-NEXT: movq %rax, %rcx 1453; AVX2-NEXT: shrq $40, %rcx 1454; AVX2-NEXT: vpinsrb $13, %ecx, %xmm0, %xmm0 1455; AVX2-NEXT: movq %rax, %rcx 1456; AVX2-NEXT: shrq $48, %rcx 1457; AVX2-NEXT: vpinsrb $14, %ecx, %xmm0, %xmm0 1458; AVX2-NEXT: vmovq %xmm2, %rcx 1459; AVX2-NEXT: shrq $56, %rax 1460; AVX2-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 1461; AVX2-NEXT: movl %ecx, %eax 1462; AVX2-NEXT: shrl $8, %eax 1463; AVX2-NEXT: vmovd %ecx, %xmm1 1464; AVX2-NEXT: vpinsrb $1, %eax, %xmm1, %xmm1 1465; AVX2-NEXT: movl %ecx, %eax 1466; AVX2-NEXT: shrl $16, %eax 1467; AVX2-NEXT: vpinsrb $2, %eax, %xmm1, %xmm1 1468; AVX2-NEXT: movl %ecx, %eax 1469; AVX2-NEXT: shrl $24, %eax 1470; AVX2-NEXT: vpinsrb $3, %eax, %xmm1, %xmm1 1471; AVX2-NEXT: movq %rcx, %rax 1472; AVX2-NEXT: shrq $32, %rax 1473; AVX2-NEXT: vpinsrb $4, %eax, %xmm1, %xmm1 1474; AVX2-NEXT: movq %rcx, %rax 1475; AVX2-NEXT: shrq $40, %rax 1476; AVX2-NEXT: vpinsrb $5, %eax, %xmm1, %xmm1 1477; AVX2-NEXT: movq %rcx, %rax 1478; AVX2-NEXT: shrq $48, %rax 1479; AVX2-NEXT: vpinsrb $6, %eax, %xmm1, %xmm1 1480; AVX2-NEXT: vpextrq $1, %xmm2, %rax 1481; AVX2-NEXT: shrq $56, %rcx 1482; AVX2-NEXT: vpinsrb $7, %ecx, %xmm1, %xmm1 1483; AVX2-NEXT: movl %eax, %ecx 1484; AVX2-NEXT: shrl $8, %ecx 1485; AVX2-NEXT: vpinsrb $8, %eax, %xmm1, %xmm1 1486; AVX2-NEXT: vpinsrb $9, %ecx, %xmm1, %xmm1 1487; AVX2-NEXT: movl %eax, %ecx 1488; AVX2-NEXT: shrl $16, %ecx 1489; AVX2-NEXT: vpinsrb $10, %ecx, %xmm1, %xmm1 1490; AVX2-NEXT: movl %eax, %ecx 1491; AVX2-NEXT: shrl $24, %ecx 1492; AVX2-NEXT: vpinsrb $11, %ecx, %xmm1, %xmm1 1493; AVX2-NEXT: movq %rax, %rcx 1494; AVX2-NEXT: shrq $32, %rcx 1495; AVX2-NEXT: vpinsrb $12, %ecx, %xmm1, %xmm1 1496; AVX2-NEXT: movq %rax, %rcx 1497; AVX2-NEXT: shrq $40, %rcx 1498; AVX2-NEXT: vpinsrb $13, %ecx, %xmm1, %xmm1 1499; AVX2-NEXT: movq %rax, %rcx 1500; AVX2-NEXT: shrq $48, %rcx 1501; AVX2-NEXT: vpinsrb $14, %ecx, %xmm1, %xmm1 1502; AVX2-NEXT: shrq $56, %rax 1503; AVX2-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1 1504; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 1505; AVX2-NEXT: popq %rbx 1506; AVX2-NEXT: popq %r14 1507; AVX2-NEXT: retq 1508 %x4 = bitcast <32 x i8> %0 to <64 x i4> 1509 %r0 = insertelement <64 x i4> %x4, i4 zeroinitializer, i32 1 1510 %r1 = insertelement <64 x i4> %r0, i4 zeroinitializer, i32 3 1511 %r2 = insertelement <64 x i4> %r1, i4 zeroinitializer, i32 5 1512 %r3 = insertelement <64 x i4> %r2, i4 zeroinitializer, i32 7 1513 %r4 = insertelement <64 x i4> %r3, i4 zeroinitializer, i32 9 1514 %r5 = insertelement <64 x i4> %r4, i4 zeroinitializer, i32 11 1515 %r6 = insertelement <64 x i4> %r5, i4 zeroinitializer, i32 13 1516 %r7 = insertelement <64 x i4> %r6, i4 zeroinitializer, i32 15 1517 %r8 = insertelement <64 x i4> %r7, i4 zeroinitializer, i32 17 1518 %r9 = insertelement <64 x i4> %r8, i4 zeroinitializer, i32 19 1519 %r10 = insertelement <64 x i4> %r9, i4 zeroinitializer, i32 21 1520 %r11 = insertelement <64 x i4> %r10, i4 zeroinitializer, i32 23 1521 %r12 = insertelement <64 x i4> %r11, i4 zeroinitializer, i32 25 1522 %r13 = insertelement <64 x i4> %r12, i4 zeroinitializer, i32 27 1523 %r14 = insertelement <64 x i4> %r13, i4 zeroinitializer, i32 29 1524 %r15 = insertelement <64 x i4> %r14, i4 zeroinitializer, i32 31 1525 %r16 = insertelement <64 x i4> %r15, i4 zeroinitializer, i32 33 1526 %r17 = insertelement <64 x i4> %r16, i4 zeroinitializer, i32 35 1527 %r18 = insertelement <64 x i4> %r17, i4 zeroinitializer, i32 37 1528 %r19 = insertelement <64 x i4> %r18, i4 zeroinitializer, i32 39 1529 %r20 = insertelement <64 x i4> %r19, i4 zeroinitializer, i32 41 1530 %r21 = insertelement <64 x i4> %r20, i4 zeroinitializer, i32 43 1531 %r22 = insertelement <64 x i4> %r21, i4 zeroinitializer, i32 45 1532 %r23 = insertelement <64 x i4> %r22, i4 zeroinitializer, i32 47 1533 %r24 = insertelement <64 x i4> %r23, i4 zeroinitializer, i32 49 1534 %r25 = insertelement <64 x i4> %r24, i4 zeroinitializer, i32 51 1535 %r26 = insertelement <64 x i4> %r25, i4 zeroinitializer, i32 53 1536 %r27 = insertelement <64 x i4> %r26, i4 zeroinitializer, i32 55 1537 %r28 = insertelement <64 x i4> %r27, i4 zeroinitializer, i32 57 1538 %r29 = insertelement <64 x i4> %r28, i4 zeroinitializer, i32 59 1539 %r30 = insertelement <64 x i4> %r29, i4 zeroinitializer, i32 61 1540 %r31 = insertelement <64 x i4> %r30, i4 zeroinitializer, i32 63 1541 %r = bitcast <64 x i4> %r15 to <32 x i8> 1542 ret <32 x i8> %r 1543} 1544 1545define <2 x i64> @_clearupper2xi64c(<2 x i64>) nounwind { 1546; SSE-LABEL: _clearupper2xi64c: 1547; SSE: # BB#0: 1548; SSE-NEXT: andps {{.*}}(%rip), %xmm0 1549; SSE-NEXT: retq 1550; 1551; AVX1-LABEL: _clearupper2xi64c: 1552; AVX1: # BB#0: 1553; AVX1-NEXT: vpxor %xmm1, %xmm1, %xmm1 1554; AVX1-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0,1],xmm1[2,3],xmm0[4,5],xmm1[6,7] 1555; AVX1-NEXT: retq 1556; 1557; AVX2-LABEL: _clearupper2xi64c: 1558; AVX2: # BB#0: 1559; AVX2-NEXT: vpxor %xmm1, %xmm1, %xmm1 1560; AVX2-NEXT: vpblendd {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3] 1561; AVX2-NEXT: retq 1562 %r = and <2 x i64> <i64 4294967295, i64 4294967295>, %0 1563 ret <2 x i64> %r 1564} 1565 1566define <4 x i64> @_clearupper4xi64c(<4 x i64>) nounwind { 1567; SSE-LABEL: _clearupper4xi64c: 1568; SSE: # BB#0: 1569; SSE-NEXT: movaps {{.*#+}} xmm2 = [4294967295,0,4294967295,0] 1570; SSE-NEXT: andps %xmm2, %xmm0 1571; SSE-NEXT: andps %xmm2, %xmm1 1572; SSE-NEXT: retq 1573; 1574; AVX1-LABEL: _clearupper4xi64c: 1575; AVX1: # BB#0: 1576; AVX1-NEXT: vxorps %ymm1, %ymm1, %ymm1 1577; AVX1-NEXT: vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] 1578; AVX1-NEXT: retq 1579; 1580; AVX2-LABEL: _clearupper4xi64c: 1581; AVX2: # BB#0: 1582; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 1583; AVX2-NEXT: vpblendd {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7] 1584; AVX2-NEXT: retq 1585 %r = and <4 x i64> <i64 4294967295, i64 4294967295, i64 4294967295, i64 4294967295>, %0 1586 ret <4 x i64> %r 1587} 1588 1589define <4 x i32> @_clearupper4xi32c(<4 x i32>) nounwind { 1590; SSE-LABEL: _clearupper4xi32c: 1591; SSE: # BB#0: 1592; SSE-NEXT: andps {{.*}}(%rip), %xmm0 1593; SSE-NEXT: retq 1594; 1595; AVX-LABEL: _clearupper4xi32c: 1596; AVX: # BB#0: 1597; AVX-NEXT: vpxor %xmm1, %xmm1, %xmm1 1598; AVX-NEXT: vpblendw {{.*#+}} xmm0 = xmm0[0],xmm1[1],xmm0[2],xmm1[3],xmm0[4],xmm1[5],xmm0[6],xmm1[7] 1599; AVX-NEXT: retq 1600 %r = and <4 x i32> <i32 65535, i32 65535, i32 65535, i32 65535>, %0 1601 ret <4 x i32> %r 1602} 1603 1604define <8 x i32> @_clearupper8xi32c(<8 x i32>) nounwind { 1605; SSE-LABEL: _clearupper8xi32c: 1606; SSE: # BB#0: 1607; SSE-NEXT: movaps {{.*#+}} xmm2 = [65535,0,65535,0,65535,0,65535,0] 1608; SSE-NEXT: andps %xmm2, %xmm0 1609; SSE-NEXT: andps %xmm2, %xmm1 1610; SSE-NEXT: retq 1611; 1612; AVX1-LABEL: _clearupper8xi32c: 1613; AVX1: # BB#0: 1614; AVX1-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 1615; AVX1-NEXT: retq 1616; 1617; AVX2-LABEL: _clearupper8xi32c: 1618; AVX2: # BB#0: 1619; AVX2-NEXT: vpxor %ymm1, %ymm1, %ymm1 1620; AVX2-NEXT: vpblendw {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3],ymm0[4],ymm1[5],ymm0[6],ymm1[7],ymm0[8],ymm1[9],ymm0[10],ymm1[11],ymm0[12],ymm1[13],ymm0[14],ymm1[15] 1621; AVX2-NEXT: retq 1622 %r = and <8 x i32> <i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535, i32 65535>, %0 1623 ret <8 x i32> %r 1624} 1625 1626define <8 x i16> @_clearupper8xi16c(<8 x i16>) nounwind { 1627; SSE-LABEL: _clearupper8xi16c: 1628; SSE: # BB#0: 1629; SSE-NEXT: andps {{.*}}(%rip), %xmm0 1630; SSE-NEXT: retq 1631; 1632; AVX-LABEL: _clearupper8xi16c: 1633; AVX: # BB#0: 1634; AVX-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0 1635; AVX-NEXT: retq 1636 %r = and <8 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>, %0 1637 ret <8 x i16> %r 1638} 1639 1640define <16 x i16> @_clearupper16xi16c(<16 x i16>) nounwind { 1641; SSE-LABEL: _clearupper16xi16c: 1642; SSE: # BB#0: 1643; SSE-NEXT: movaps {{.*#+}} xmm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0] 1644; SSE-NEXT: andps %xmm2, %xmm0 1645; SSE-NEXT: andps %xmm2, %xmm1 1646; SSE-NEXT: retq 1647; 1648; AVX-LABEL: _clearupper16xi16c: 1649; AVX: # BB#0: 1650; AVX-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 1651; AVX-NEXT: retq 1652 %r = and <16 x i16> <i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>, %0 1653 ret <16 x i16> %r 1654} 1655 1656define <16 x i8> @_clearupper16xi8c(<16 x i8>) nounwind { 1657; SSE-LABEL: _clearupper16xi8c: 1658; SSE: # BB#0: 1659; SSE-NEXT: andps {{.*}}(%rip), %xmm0 1660; SSE-NEXT: retq 1661; 1662; AVX-LABEL: _clearupper16xi8c: 1663; AVX: # BB#0: 1664; AVX-NEXT: vandps {{.*}}(%rip), %xmm0, %xmm0 1665; AVX-NEXT: retq 1666 %r = and <16 x i8> <i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15>, %0 1667 ret <16 x i8> %r 1668} 1669 1670define <32 x i8> @_clearupper32xi8c(<32 x i8>) nounwind { 1671; SSE-LABEL: _clearupper32xi8c: 1672; SSE: # BB#0: 1673; SSE-NEXT: movaps {{.*#+}} xmm2 = [15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15] 1674; SSE-NEXT: andps %xmm2, %xmm0 1675; SSE-NEXT: andps %xmm2, %xmm1 1676; SSE-NEXT: retq 1677; 1678; AVX-LABEL: _clearupper32xi8c: 1679; AVX: # BB#0: 1680; AVX-NEXT: vandps {{.*}}(%rip), %ymm0, %ymm0 1681; AVX-NEXT: retq 1682 %r = and <32 x i8> <i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15, i8 15>, %0 1683 ret <32 x i8> %r 1684} 1685