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 11define <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 38entry: 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 44define <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 91entry: 92 %B = sext <16 x i8> %A to <16 x i16> 93 ret <16 x i16> %B 94} 95 96define <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 125entry: 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 131define <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 186entry: 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 192define <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 227entry: 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 233define <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 301entry: 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 307define <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 334entry: 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 340define <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 387entry: 388 %B = sext <8 x i16> %A to <8 x i32> 389 ret <8 x i32> %B 390} 391 392define <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 425entry: 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 431define <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 495entry: 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 501define <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 530entry: 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 536define <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 587entry: 588 %B = sext <4 x i32> %A to <4 x i64> 589 ret <4 x i64> %B 590} 591 592define <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 633entry: 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 639define <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 679entry: 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 685define <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 792entry: 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 798define <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 830entry: 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 836define <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 998entry: 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 1004define <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 1059entry: 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 1065define <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: movzbl (%rdi), %eax 1069; SSE2-NEXT: movq %rax, %rcx 1070; SSE2-NEXT: shlq $56, %rcx 1071; SSE2-NEXT: sarq $63, %rcx 1072; SSE2-NEXT: movd %ecx, %xmm0 1073; SSE2-NEXT: movq %rax, %rcx 1074; SSE2-NEXT: shlq $60, %rcx 1075; SSE2-NEXT: sarq $63, %rcx 1076; SSE2-NEXT: movd %ecx, %xmm2 1077; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1078; SSE2-NEXT: movq %rax, %rcx 1079; SSE2-NEXT: shlq $58, %rcx 1080; SSE2-NEXT: sarq $63, %rcx 1081; SSE2-NEXT: movd %ecx, %xmm0 1082; SSE2-NEXT: movq %rax, %rcx 1083; SSE2-NEXT: shlq $62, %rcx 1084; SSE2-NEXT: sarq $63, %rcx 1085; SSE2-NEXT: movd %ecx, %xmm1 1086; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 1087; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1088; SSE2-NEXT: movq %rax, %rcx 1089; SSE2-NEXT: shlq $57, %rcx 1090; SSE2-NEXT: sarq $63, %rcx 1091; SSE2-NEXT: movd %ecx, %xmm0 1092; SSE2-NEXT: movq %rax, %rcx 1093; SSE2-NEXT: shlq $61, %rcx 1094; SSE2-NEXT: sarq $63, %rcx 1095; SSE2-NEXT: movd %ecx, %xmm2 1096; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1097; SSE2-NEXT: movq %rax, %rcx 1098; SSE2-NEXT: shlq $59, %rcx 1099; SSE2-NEXT: sarq $63, %rcx 1100; SSE2-NEXT: movd %ecx, %xmm3 1101; SSE2-NEXT: shlq $63, %rax 1102; SSE2-NEXT: sarq $63, %rax 1103; SSE2-NEXT: movd %eax, %xmm0 1104; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3] 1105; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 1106; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 1107; SSE2-NEXT: retq 1108; 1109; SSSE3-LABEL: load_sext_8i1_to_8i16: 1110; SSSE3: # BB#0: # %entry 1111; SSSE3-NEXT: movzbl (%rdi), %eax 1112; SSSE3-NEXT: movq %rax, %rcx 1113; SSSE3-NEXT: shlq $56, %rcx 1114; SSSE3-NEXT: sarq $63, %rcx 1115; SSSE3-NEXT: movd %ecx, %xmm0 1116; SSSE3-NEXT: movq %rax, %rcx 1117; SSSE3-NEXT: shlq $60, %rcx 1118; SSSE3-NEXT: sarq $63, %rcx 1119; SSSE3-NEXT: movd %ecx, %xmm2 1120; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1121; SSSE3-NEXT: movq %rax, %rcx 1122; SSSE3-NEXT: shlq $58, %rcx 1123; SSSE3-NEXT: sarq $63, %rcx 1124; SSSE3-NEXT: movd %ecx, %xmm0 1125; SSSE3-NEXT: movq %rax, %rcx 1126; SSSE3-NEXT: shlq $62, %rcx 1127; SSSE3-NEXT: sarq $63, %rcx 1128; SSSE3-NEXT: movd %ecx, %xmm1 1129; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 1130; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1131; SSSE3-NEXT: movq %rax, %rcx 1132; SSSE3-NEXT: shlq $57, %rcx 1133; SSSE3-NEXT: sarq $63, %rcx 1134; SSSE3-NEXT: movd %ecx, %xmm0 1135; SSSE3-NEXT: movq %rax, %rcx 1136; SSSE3-NEXT: shlq $61, %rcx 1137; SSSE3-NEXT: sarq $63, %rcx 1138; SSSE3-NEXT: movd %ecx, %xmm2 1139; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1140; SSSE3-NEXT: movq %rax, %rcx 1141; SSSE3-NEXT: shlq $59, %rcx 1142; SSSE3-NEXT: sarq $63, %rcx 1143; SSSE3-NEXT: movd %ecx, %xmm3 1144; SSSE3-NEXT: shlq $63, %rax 1145; SSSE3-NEXT: sarq $63, %rax 1146; SSSE3-NEXT: movd %eax, %xmm0 1147; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3] 1148; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1],xmm0[2],xmm2[2],xmm0[3],xmm2[3] 1149; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1],xmm0[2],xmm1[2],xmm0[3],xmm1[3] 1150; SSSE3-NEXT: retq 1151; 1152; SSE41-LABEL: load_sext_8i1_to_8i16: 1153; SSE41: # BB#0: # %entry 1154; SSE41-NEXT: movzbl (%rdi), %eax 1155; SSE41-NEXT: movq %rax, %rcx 1156; SSE41-NEXT: shlq $62, %rcx 1157; SSE41-NEXT: sarq $63, %rcx 1158; SSE41-NEXT: movq %rax, %rdx 1159; SSE41-NEXT: shlq $63, %rdx 1160; SSE41-NEXT: sarq $63, %rdx 1161; SSE41-NEXT: movd %edx, %xmm0 1162; SSE41-NEXT: pinsrw $1, %ecx, %xmm0 1163; SSE41-NEXT: movq %rax, %rcx 1164; SSE41-NEXT: shlq $61, %rcx 1165; SSE41-NEXT: sarq $63, %rcx 1166; SSE41-NEXT: pinsrw $2, %ecx, %xmm0 1167; SSE41-NEXT: movq %rax, %rcx 1168; SSE41-NEXT: shlq $60, %rcx 1169; SSE41-NEXT: sarq $63, %rcx 1170; SSE41-NEXT: pinsrw $3, %ecx, %xmm0 1171; SSE41-NEXT: movq %rax, %rcx 1172; SSE41-NEXT: shlq $59, %rcx 1173; SSE41-NEXT: sarq $63, %rcx 1174; SSE41-NEXT: pinsrw $4, %ecx, %xmm0 1175; SSE41-NEXT: movq %rax, %rcx 1176; SSE41-NEXT: shlq $58, %rcx 1177; SSE41-NEXT: sarq $63, %rcx 1178; SSE41-NEXT: pinsrw $5, %ecx, %xmm0 1179; SSE41-NEXT: movq %rax, %rcx 1180; SSE41-NEXT: shlq $57, %rcx 1181; SSE41-NEXT: sarq $63, %rcx 1182; SSE41-NEXT: pinsrw $6, %ecx, %xmm0 1183; SSE41-NEXT: shlq $56, %rax 1184; SSE41-NEXT: sarq $63, %rax 1185; SSE41-NEXT: pinsrw $7, %eax, %xmm0 1186; SSE41-NEXT: retq 1187; 1188; AVX-LABEL: load_sext_8i1_to_8i16: 1189; AVX: # BB#0: # %entry 1190; AVX-NEXT: movzbl (%rdi), %eax 1191; AVX-NEXT: movq %rax, %rcx 1192; AVX-NEXT: shlq $62, %rcx 1193; AVX-NEXT: sarq $63, %rcx 1194; AVX-NEXT: movq %rax, %rdx 1195; AVX-NEXT: shlq $63, %rdx 1196; AVX-NEXT: sarq $63, %rdx 1197; AVX-NEXT: vmovd %edx, %xmm0 1198; AVX-NEXT: vpinsrw $1, %ecx, %xmm0, %xmm0 1199; AVX-NEXT: movq %rax, %rcx 1200; AVX-NEXT: shlq $61, %rcx 1201; AVX-NEXT: sarq $63, %rcx 1202; AVX-NEXT: vpinsrw $2, %ecx, %xmm0, %xmm0 1203; AVX-NEXT: movq %rax, %rcx 1204; AVX-NEXT: shlq $60, %rcx 1205; AVX-NEXT: sarq $63, %rcx 1206; AVX-NEXT: vpinsrw $3, %ecx, %xmm0, %xmm0 1207; AVX-NEXT: movq %rax, %rcx 1208; AVX-NEXT: shlq $59, %rcx 1209; AVX-NEXT: sarq $63, %rcx 1210; AVX-NEXT: vpinsrw $4, %ecx, %xmm0, %xmm0 1211; AVX-NEXT: movq %rax, %rcx 1212; AVX-NEXT: shlq $58, %rcx 1213; AVX-NEXT: sarq $63, %rcx 1214; AVX-NEXT: vpinsrw $5, %ecx, %xmm0, %xmm0 1215; AVX-NEXT: movq %rax, %rcx 1216; AVX-NEXT: shlq $57, %rcx 1217; AVX-NEXT: sarq $63, %rcx 1218; AVX-NEXT: vpinsrw $6, %ecx, %xmm0, %xmm0 1219; AVX-NEXT: shlq $56, %rax 1220; AVX-NEXT: sarq $63, %rax 1221; AVX-NEXT: vpinsrw $7, %eax, %xmm0, %xmm0 1222; AVX-NEXT: retq 1223; 1224; X32-SSE41-LABEL: load_sext_8i1_to_8i16: 1225; X32-SSE41: # BB#0: # %entry 1226; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 1227; X32-SSE41-NEXT: movl (%eax), %eax 1228; X32-SSE41-NEXT: movl %eax, %ecx 1229; X32-SSE41-NEXT: shll $30, %ecx 1230; X32-SSE41-NEXT: sarl $31, %ecx 1231; X32-SSE41-NEXT: movl %eax, %edx 1232; X32-SSE41-NEXT: shll $31, %edx 1233; X32-SSE41-NEXT: sarl $31, %edx 1234; X32-SSE41-NEXT: movd %edx, %xmm0 1235; X32-SSE41-NEXT: pinsrw $1, %ecx, %xmm0 1236; X32-SSE41-NEXT: movl %eax, %ecx 1237; X32-SSE41-NEXT: shll $29, %ecx 1238; X32-SSE41-NEXT: sarl $31, %ecx 1239; X32-SSE41-NEXT: pinsrw $2, %ecx, %xmm0 1240; X32-SSE41-NEXT: movl %eax, %ecx 1241; X32-SSE41-NEXT: shll $28, %ecx 1242; X32-SSE41-NEXT: sarl $31, %ecx 1243; X32-SSE41-NEXT: pinsrw $3, %ecx, %xmm0 1244; X32-SSE41-NEXT: movl %eax, %ecx 1245; X32-SSE41-NEXT: shll $27, %ecx 1246; X32-SSE41-NEXT: sarl $31, %ecx 1247; X32-SSE41-NEXT: pinsrw $4, %ecx, %xmm0 1248; X32-SSE41-NEXT: movl %eax, %ecx 1249; X32-SSE41-NEXT: shll $26, %ecx 1250; X32-SSE41-NEXT: sarl $31, %ecx 1251; X32-SSE41-NEXT: pinsrw $5, %ecx, %xmm0 1252; X32-SSE41-NEXT: movl %eax, %ecx 1253; X32-SSE41-NEXT: shll $25, %ecx 1254; X32-SSE41-NEXT: sarl $31, %ecx 1255; X32-SSE41-NEXT: pinsrw $6, %ecx, %xmm0 1256; X32-SSE41-NEXT: shll $24, %eax 1257; X32-SSE41-NEXT: sarl $31, %eax 1258; X32-SSE41-NEXT: pinsrw $7, %eax, %xmm0 1259; X32-SSE41-NEXT: retl 1260entry: 1261 %X = load <8 x i1>, <8 x i1>* %ptr 1262 %Y = sext <8 x i1> %X to <8 x i16> 1263 ret <8 x i16> %Y 1264} 1265 1266define <8 x i16> @load_sext_8i8_to_8i16(<8 x i8> *%ptr) { 1267; SSE2-LABEL: load_sext_8i8_to_8i16: 1268; SSE2: # BB#0: # %entry 1269; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 1270; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1271; SSE2-NEXT: psraw $8, %xmm0 1272; SSE2-NEXT: retq 1273; 1274; SSSE3-LABEL: load_sext_8i8_to_8i16: 1275; SSSE3: # BB#0: # %entry 1276; SSSE3-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 1277; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1278; SSSE3-NEXT: psraw $8, %xmm0 1279; SSSE3-NEXT: retq 1280; 1281; SSE41-LABEL: load_sext_8i8_to_8i16: 1282; SSE41: # BB#0: # %entry 1283; SSE41-NEXT: pmovsxbw (%rdi), %xmm0 1284; SSE41-NEXT: retq 1285; 1286; AVX-LABEL: load_sext_8i8_to_8i16: 1287; AVX: # BB#0: # %entry 1288; AVX-NEXT: vpmovsxbw (%rdi), %xmm0 1289; AVX-NEXT: retq 1290; 1291; X32-SSE41-LABEL: load_sext_8i8_to_8i16: 1292; X32-SSE41: # BB#0: # %entry 1293; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 1294; X32-SSE41-NEXT: pmovsxbw (%eax), %xmm0 1295; X32-SSE41-NEXT: retl 1296entry: 1297 %X = load <8 x i8>, <8 x i8>* %ptr 1298 %Y = sext <8 x i8> %X to <8 x i16> 1299 ret <8 x i16> %Y 1300} 1301 1302define <8 x i32> @load_sext_8i1_to_8i32(<8 x i1> *%ptr) { 1303; SSE2-LABEL: load_sext_8i1_to_8i32: 1304; SSE2: # BB#0: # %entry 1305; SSE2-NEXT: movzbl (%rdi), %eax 1306; SSE2-NEXT: movl %eax, %ecx 1307; SSE2-NEXT: shrl $6, %ecx 1308; SSE2-NEXT: andl $1, %ecx 1309; SSE2-NEXT: movd %ecx, %xmm0 1310; SSE2-NEXT: movl %eax, %ecx 1311; SSE2-NEXT: shrl $2, %ecx 1312; SSE2-NEXT: andl $1, %ecx 1313; SSE2-NEXT: movd %ecx, %xmm2 1314; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1315; SSE2-NEXT: movl %eax, %ecx 1316; SSE2-NEXT: andl $1, %ecx 1317; SSE2-NEXT: movd %ecx, %xmm1 1318; SSE2-NEXT: movl %eax, %ecx 1319; SSE2-NEXT: shrl $4, %ecx 1320; SSE2-NEXT: andl $1, %ecx 1321; SSE2-NEXT: movd %ecx, %xmm0 1322; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 1323; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1324; SSE2-NEXT: movl %eax, %ecx 1325; SSE2-NEXT: shrl $5, %ecx 1326; SSE2-NEXT: andl $1, %ecx 1327; SSE2-NEXT: movd %ecx, %xmm0 1328; SSE2-NEXT: movl %eax, %ecx 1329; SSE2-NEXT: shrl %ecx 1330; SSE2-NEXT: andl $1, %ecx 1331; SSE2-NEXT: movd %ecx, %xmm2 1332; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1333; SSE2-NEXT: movl %eax, %ecx 1334; SSE2-NEXT: shrl $3, %ecx 1335; SSE2-NEXT: andl $1, %ecx 1336; SSE2-NEXT: movd %ecx, %xmm0 1337; SSE2-NEXT: shrl $7, %eax 1338; SSE2-NEXT: movzwl %ax, %eax 1339; SSE2-NEXT: movd %eax, %xmm3 1340; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3] 1341; SSE2-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1342; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1343; SSE2-NEXT: movdqa %xmm1, %xmm0 1344; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 1345; SSE2-NEXT: pslld $31, %xmm0 1346; SSE2-NEXT: psrad $31, %xmm0 1347; SSE2-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7] 1348; SSE2-NEXT: pslld $31, %xmm1 1349; SSE2-NEXT: psrad $31, %xmm1 1350; SSE2-NEXT: retq 1351; 1352; SSSE3-LABEL: load_sext_8i1_to_8i32: 1353; SSSE3: # BB#0: # %entry 1354; SSSE3-NEXT: movzbl (%rdi), %eax 1355; SSSE3-NEXT: movl %eax, %ecx 1356; SSSE3-NEXT: shrl $6, %ecx 1357; SSSE3-NEXT: andl $1, %ecx 1358; SSSE3-NEXT: movd %ecx, %xmm0 1359; SSSE3-NEXT: movl %eax, %ecx 1360; SSSE3-NEXT: shrl $2, %ecx 1361; SSSE3-NEXT: andl $1, %ecx 1362; SSSE3-NEXT: movd %ecx, %xmm2 1363; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1364; SSSE3-NEXT: movl %eax, %ecx 1365; SSSE3-NEXT: andl $1, %ecx 1366; SSSE3-NEXT: movd %ecx, %xmm1 1367; SSSE3-NEXT: movl %eax, %ecx 1368; SSSE3-NEXT: shrl $4, %ecx 1369; SSSE3-NEXT: andl $1, %ecx 1370; SSSE3-NEXT: movd %ecx, %xmm0 1371; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1],xmm1[2],xmm0[2],xmm1[3],xmm0[3] 1372; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1373; SSSE3-NEXT: movl %eax, %ecx 1374; SSSE3-NEXT: shrl $5, %ecx 1375; SSSE3-NEXT: andl $1, %ecx 1376; SSSE3-NEXT: movd %ecx, %xmm0 1377; SSSE3-NEXT: movl %eax, %ecx 1378; SSSE3-NEXT: shrl %ecx 1379; SSSE3-NEXT: andl $1, %ecx 1380; SSSE3-NEXT: movd %ecx, %xmm2 1381; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1382; SSSE3-NEXT: movl %eax, %ecx 1383; SSSE3-NEXT: shrl $3, %ecx 1384; SSSE3-NEXT: andl $1, %ecx 1385; SSSE3-NEXT: movd %ecx, %xmm0 1386; SSSE3-NEXT: shrl $7, %eax 1387; SSSE3-NEXT: movzwl %ax, %eax 1388; SSSE3-NEXT: movd %eax, %xmm3 1389; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1],xmm0[2],xmm3[2],xmm0[3],xmm3[3] 1390; SSSE3-NEXT: punpcklwd {{.*#+}} xmm2 = xmm2[0],xmm0[0],xmm2[1],xmm0[1],xmm2[2],xmm0[2],xmm2[3],xmm0[3] 1391; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1],xmm1[2],xmm2[2],xmm1[3],xmm2[3] 1392; SSSE3-NEXT: movdqa %xmm1, %xmm0 1393; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 1394; SSSE3-NEXT: pslld $31, %xmm0 1395; SSSE3-NEXT: psrad $31, %xmm0 1396; SSSE3-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7] 1397; SSSE3-NEXT: pslld $31, %xmm1 1398; SSSE3-NEXT: psrad $31, %xmm1 1399; SSSE3-NEXT: retq 1400; 1401; SSE41-LABEL: load_sext_8i1_to_8i32: 1402; SSE41: # BB#0: # %entry 1403; SSE41-NEXT: movzbl (%rdi), %eax 1404; SSE41-NEXT: movl %eax, %ecx 1405; SSE41-NEXT: shrl %ecx 1406; SSE41-NEXT: andl $1, %ecx 1407; SSE41-NEXT: movl %eax, %edx 1408; SSE41-NEXT: andl $1, %edx 1409; SSE41-NEXT: movd %edx, %xmm1 1410; SSE41-NEXT: pinsrw $1, %ecx, %xmm1 1411; SSE41-NEXT: movl %eax, %ecx 1412; SSE41-NEXT: shrl $2, %ecx 1413; SSE41-NEXT: andl $1, %ecx 1414; SSE41-NEXT: pinsrw $2, %ecx, %xmm1 1415; SSE41-NEXT: movl %eax, %ecx 1416; SSE41-NEXT: shrl $3, %ecx 1417; SSE41-NEXT: andl $1, %ecx 1418; SSE41-NEXT: pinsrw $3, %ecx, %xmm1 1419; SSE41-NEXT: movl %eax, %ecx 1420; SSE41-NEXT: shrl $4, %ecx 1421; SSE41-NEXT: andl $1, %ecx 1422; SSE41-NEXT: pinsrw $4, %ecx, %xmm1 1423; SSE41-NEXT: movl %eax, %ecx 1424; SSE41-NEXT: shrl $5, %ecx 1425; SSE41-NEXT: andl $1, %ecx 1426; SSE41-NEXT: pinsrw $5, %ecx, %xmm1 1427; SSE41-NEXT: movl %eax, %ecx 1428; SSE41-NEXT: shrl $6, %ecx 1429; SSE41-NEXT: andl $1, %ecx 1430; SSE41-NEXT: pinsrw $6, %ecx, %xmm1 1431; SSE41-NEXT: shrl $7, %eax 1432; SSE41-NEXT: movzwl %ax, %eax 1433; SSE41-NEXT: pinsrw $7, %eax, %xmm1 1434; SSE41-NEXT: pmovzxwd {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero 1435; SSE41-NEXT: pslld $31, %xmm0 1436; SSE41-NEXT: psrad $31, %xmm0 1437; SSE41-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7] 1438; SSE41-NEXT: pslld $31, %xmm1 1439; SSE41-NEXT: psrad $31, %xmm1 1440; SSE41-NEXT: retq 1441; 1442; AVX1-LABEL: load_sext_8i1_to_8i32: 1443; AVX1: # BB#0: # %entry 1444; AVX1-NEXT: movzbl (%rdi), %eax 1445; AVX1-NEXT: movq %rax, %rcx 1446; AVX1-NEXT: shlq $58, %rcx 1447; AVX1-NEXT: sarq $63, %rcx 1448; AVX1-NEXT: movq %rax, %rdx 1449; AVX1-NEXT: shlq $59, %rdx 1450; AVX1-NEXT: sarq $63, %rdx 1451; AVX1-NEXT: vmovd %edx, %xmm0 1452; AVX1-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 1453; AVX1-NEXT: movq %rax, %rcx 1454; AVX1-NEXT: shlq $57, %rcx 1455; AVX1-NEXT: sarq $63, %rcx 1456; AVX1-NEXT: vpinsrd $2, %ecx, %xmm0, %xmm0 1457; AVX1-NEXT: movq %rax, %rcx 1458; AVX1-NEXT: shlq $56, %rcx 1459; AVX1-NEXT: sarq $63, %rcx 1460; AVX1-NEXT: vpinsrd $3, %ecx, %xmm0, %xmm0 1461; AVX1-NEXT: movq %rax, %rcx 1462; AVX1-NEXT: shlq $62, %rcx 1463; AVX1-NEXT: sarq $63, %rcx 1464; AVX1-NEXT: movq %rax, %rdx 1465; AVX1-NEXT: shlq $63, %rdx 1466; AVX1-NEXT: sarq $63, %rdx 1467; AVX1-NEXT: vmovd %edx, %xmm1 1468; AVX1-NEXT: vpinsrd $1, %ecx, %xmm1, %xmm1 1469; AVX1-NEXT: movq %rax, %rcx 1470; AVX1-NEXT: shlq $61, %rcx 1471; AVX1-NEXT: sarq $63, %rcx 1472; AVX1-NEXT: vpinsrd $2, %ecx, %xmm1, %xmm1 1473; AVX1-NEXT: shlq $60, %rax 1474; AVX1-NEXT: sarq $63, %rax 1475; AVX1-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1 1476; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1477; AVX1-NEXT: retq 1478; 1479; AVX2-LABEL: load_sext_8i1_to_8i32: 1480; AVX2: # BB#0: # %entry 1481; AVX2-NEXT: movzbl (%rdi), %eax 1482; AVX2-NEXT: movq %rax, %rcx 1483; AVX2-NEXT: shlq $58, %rcx 1484; AVX2-NEXT: sarq $63, %rcx 1485; AVX2-NEXT: movq %rax, %rdx 1486; AVX2-NEXT: shlq $59, %rdx 1487; AVX2-NEXT: sarq $63, %rdx 1488; AVX2-NEXT: vmovd %edx, %xmm0 1489; AVX2-NEXT: vpinsrd $1, %ecx, %xmm0, %xmm0 1490; AVX2-NEXT: movq %rax, %rcx 1491; AVX2-NEXT: shlq $57, %rcx 1492; AVX2-NEXT: sarq $63, %rcx 1493; AVX2-NEXT: vpinsrd $2, %ecx, %xmm0, %xmm0 1494; AVX2-NEXT: movq %rax, %rcx 1495; AVX2-NEXT: shlq $56, %rcx 1496; AVX2-NEXT: sarq $63, %rcx 1497; AVX2-NEXT: vpinsrd $3, %ecx, %xmm0, %xmm0 1498; AVX2-NEXT: movq %rax, %rcx 1499; AVX2-NEXT: shlq $62, %rcx 1500; AVX2-NEXT: sarq $63, %rcx 1501; AVX2-NEXT: movq %rax, %rdx 1502; AVX2-NEXT: shlq $63, %rdx 1503; AVX2-NEXT: sarq $63, %rdx 1504; AVX2-NEXT: vmovd %edx, %xmm1 1505; AVX2-NEXT: vpinsrd $1, %ecx, %xmm1, %xmm1 1506; AVX2-NEXT: movq %rax, %rcx 1507; AVX2-NEXT: shlq $61, %rcx 1508; AVX2-NEXT: sarq $63, %rcx 1509; AVX2-NEXT: vpinsrd $2, %ecx, %xmm1, %xmm1 1510; AVX2-NEXT: shlq $60, %rax 1511; AVX2-NEXT: sarq $63, %rax 1512; AVX2-NEXT: vpinsrd $3, %eax, %xmm1, %xmm1 1513; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 1514; AVX2-NEXT: retq 1515; 1516; X32-SSE41-LABEL: load_sext_8i1_to_8i32: 1517; X32-SSE41: # BB#0: # %entry 1518; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 1519; X32-SSE41-NEXT: movzbl (%eax), %eax 1520; X32-SSE41-NEXT: movl %eax, %ecx 1521; X32-SSE41-NEXT: shrl %ecx 1522; X32-SSE41-NEXT: andl $1, %ecx 1523; X32-SSE41-NEXT: movl %eax, %edx 1524; X32-SSE41-NEXT: andl $1, %edx 1525; X32-SSE41-NEXT: movd %edx, %xmm1 1526; X32-SSE41-NEXT: pinsrw $1, %ecx, %xmm1 1527; X32-SSE41-NEXT: movl %eax, %ecx 1528; X32-SSE41-NEXT: shrl $2, %ecx 1529; X32-SSE41-NEXT: andl $1, %ecx 1530; X32-SSE41-NEXT: pinsrw $2, %ecx, %xmm1 1531; X32-SSE41-NEXT: movl %eax, %ecx 1532; X32-SSE41-NEXT: shrl $3, %ecx 1533; X32-SSE41-NEXT: andl $1, %ecx 1534; X32-SSE41-NEXT: pinsrw $3, %ecx, %xmm1 1535; X32-SSE41-NEXT: movl %eax, %ecx 1536; X32-SSE41-NEXT: shrl $4, %ecx 1537; X32-SSE41-NEXT: andl $1, %ecx 1538; X32-SSE41-NEXT: pinsrw $4, %ecx, %xmm1 1539; X32-SSE41-NEXT: movl %eax, %ecx 1540; X32-SSE41-NEXT: shrl $5, %ecx 1541; X32-SSE41-NEXT: andl $1, %ecx 1542; X32-SSE41-NEXT: pinsrw $5, %ecx, %xmm1 1543; X32-SSE41-NEXT: movl %eax, %ecx 1544; X32-SSE41-NEXT: shrl $6, %ecx 1545; X32-SSE41-NEXT: andl $1, %ecx 1546; X32-SSE41-NEXT: pinsrw $6, %ecx, %xmm1 1547; X32-SSE41-NEXT: shrl $7, %eax 1548; X32-SSE41-NEXT: pinsrw $7, %eax, %xmm1 1549; X32-SSE41-NEXT: pmovzxwd {{.*#+}} xmm0 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero 1550; X32-SSE41-NEXT: pslld $31, %xmm0 1551; X32-SSE41-NEXT: psrad $31, %xmm0 1552; X32-SSE41-NEXT: punpckhwd {{.*#+}} xmm1 = xmm1[4],xmm0[4],xmm1[5],xmm0[5],xmm1[6],xmm0[6],xmm1[7],xmm0[7] 1553; X32-SSE41-NEXT: pslld $31, %xmm1 1554; X32-SSE41-NEXT: psrad $31, %xmm1 1555; X32-SSE41-NEXT: retl 1556entry: 1557 %X = load <8 x i1>, <8 x i1>* %ptr 1558 %Y = sext <8 x i1> %X to <8 x i32> 1559 ret <8 x i32> %Y 1560} 1561 1562define <8 x i32> @load_sext_8i8_to_8i32(<8 x i8> *%ptr) { 1563; SSE2-LABEL: load_sext_8i8_to_8i32: 1564; SSE2: # BB#0: # %entry 1565; SSE2-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 1566; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1567; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 1568; SSE2-NEXT: psrad $24, %xmm0 1569; SSE2-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero 1570; SSE2-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1571; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3] 1572; SSE2-NEXT: psrad $24, %xmm1 1573; SSE2-NEXT: retq 1574; 1575; SSSE3-LABEL: load_sext_8i8_to_8i32: 1576; SSSE3: # BB#0: # %entry 1577; SSSE3-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 1578; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1579; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 1580; SSSE3-NEXT: psrad $24, %xmm0 1581; SSSE3-NEXT: movd {{.*#+}} xmm1 = mem[0],zero,zero,zero 1582; SSSE3-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 1583; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3] 1584; SSSE3-NEXT: psrad $24, %xmm1 1585; SSSE3-NEXT: retq 1586; 1587; SSE41-LABEL: load_sext_8i8_to_8i32: 1588; SSE41: # BB#0: # %entry 1589; SSE41-NEXT: pmovsxbd (%rdi), %xmm0 1590; SSE41-NEXT: pmovsxbd 4(%rdi), %xmm1 1591; SSE41-NEXT: retq 1592; 1593; AVX1-LABEL: load_sext_8i8_to_8i32: 1594; AVX1: # BB#0: # %entry 1595; AVX1-NEXT: vpmovsxbw (%rdi), %xmm0 1596; AVX1-NEXT: vpmovsxwd %xmm0, %xmm1 1597; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 1598; AVX1-NEXT: vpmovsxwd %xmm0, %xmm0 1599; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 1600; AVX1-NEXT: retq 1601; 1602; AVX2-LABEL: load_sext_8i8_to_8i32: 1603; AVX2: # BB#0: # %entry 1604; AVX2-NEXT: vpmovsxbd (%rdi), %ymm0 1605; AVX2-NEXT: retq 1606; 1607; X32-SSE41-LABEL: load_sext_8i8_to_8i32: 1608; X32-SSE41: # BB#0: # %entry 1609; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 1610; X32-SSE41-NEXT: pmovsxbd (%eax), %xmm0 1611; X32-SSE41-NEXT: pmovsxbd 4(%eax), %xmm1 1612; X32-SSE41-NEXT: retl 1613entry: 1614 %X = load <8 x i8>, <8 x i8>* %ptr 1615 %Y = sext <8 x i8> %X to <8 x i32> 1616 ret <8 x i32> %Y 1617} 1618 1619define <16 x i8> @load_sext_16i1_to_16i8(<16 x i1> *%ptr) { 1620; SSE2-LABEL: load_sext_16i1_to_16i8: 1621; SSE2: # BB#0: # %entry 1622; SSE2-NEXT: movzwl (%rdi), %eax 1623; SSE2-NEXT: movq %rax, %rcx 1624; SSE2-NEXT: shlq $48, %rcx 1625; SSE2-NEXT: sarq $63, %rcx 1626; SSE2-NEXT: movd %ecx, %xmm0 1627; SSE2-NEXT: movq %rax, %rcx 1628; SSE2-NEXT: shlq $56, %rcx 1629; SSE2-NEXT: sarq $63, %rcx 1630; SSE2-NEXT: movd %ecx, %xmm1 1631; 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] 1632; SSE2-NEXT: movq %rax, %rcx 1633; SSE2-NEXT: shlq $52, %rcx 1634; SSE2-NEXT: sarq $63, %rcx 1635; SSE2-NEXT: movd %ecx, %xmm2 1636; SSE2-NEXT: movq %rax, %rcx 1637; SSE2-NEXT: shlq $60, %rcx 1638; SSE2-NEXT: sarq $63, %rcx 1639; SSE2-NEXT: movd %ecx, %xmm0 1640; 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] 1641; SSE2-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] 1642; SSE2-NEXT: movq %rax, %rcx 1643; SSE2-NEXT: shlq $50, %rcx 1644; SSE2-NEXT: sarq $63, %rcx 1645; SSE2-NEXT: movd %ecx, %xmm1 1646; SSE2-NEXT: movq %rax, %rcx 1647; SSE2-NEXT: shlq $58, %rcx 1648; SSE2-NEXT: sarq $63, %rcx 1649; SSE2-NEXT: movd %ecx, %xmm2 1650; 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] 1651; SSE2-NEXT: movq %rax, %rcx 1652; SSE2-NEXT: shlq $54, %rcx 1653; SSE2-NEXT: sarq $63, %rcx 1654; SSE2-NEXT: movd %ecx, %xmm3 1655; SSE2-NEXT: movq %rax, %rcx 1656; SSE2-NEXT: shlq $62, %rcx 1657; SSE2-NEXT: sarq $63, %rcx 1658; SSE2-NEXT: movd %ecx, %xmm1 1659; 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] 1660; 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] 1661; 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] 1662; SSE2-NEXT: movq %rax, %rcx 1663; SSE2-NEXT: shlq $49, %rcx 1664; SSE2-NEXT: sarq $63, %rcx 1665; SSE2-NEXT: movd %ecx, %xmm0 1666; SSE2-NEXT: movq %rax, %rcx 1667; SSE2-NEXT: shlq $57, %rcx 1668; SSE2-NEXT: sarq $63, %rcx 1669; SSE2-NEXT: movd %ecx, %xmm3 1670; 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] 1671; SSE2-NEXT: movq %rax, %rcx 1672; SSE2-NEXT: shlq $53, %rcx 1673; SSE2-NEXT: sarq $63, %rcx 1674; SSE2-NEXT: movd %ecx, %xmm0 1675; SSE2-NEXT: movq %rax, %rcx 1676; SSE2-NEXT: shlq $61, %rcx 1677; SSE2-NEXT: sarq $63, %rcx 1678; SSE2-NEXT: movd %ecx, %xmm2 1679; 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] 1680; SSE2-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7] 1681; SSE2-NEXT: movq %rax, %rcx 1682; SSE2-NEXT: shlq $51, %rcx 1683; SSE2-NEXT: sarq $63, %rcx 1684; SSE2-NEXT: movd %ecx, %xmm0 1685; SSE2-NEXT: movq %rax, %rcx 1686; SSE2-NEXT: shlq $59, %rcx 1687; SSE2-NEXT: sarq $63, %rcx 1688; SSE2-NEXT: movd %ecx, %xmm3 1689; 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] 1690; SSE2-NEXT: movq %rax, %rcx 1691; SSE2-NEXT: shlq $55, %rcx 1692; SSE2-NEXT: sarq $63, %rcx 1693; SSE2-NEXT: movd %ecx, %xmm4 1694; SSE2-NEXT: shlq $63, %rax 1695; SSE2-NEXT: sarq $63, %rax 1696; SSE2-NEXT: movd %eax, %xmm0 1697; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7] 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: 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] 1700; SSE2-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] 1701; SSE2-NEXT: retq 1702; 1703; SSSE3-LABEL: load_sext_16i1_to_16i8: 1704; SSSE3: # BB#0: # %entry 1705; SSSE3-NEXT: movzwl (%rdi), %eax 1706; SSSE3-NEXT: movq %rax, %rcx 1707; SSSE3-NEXT: shlq $48, %rcx 1708; SSSE3-NEXT: sarq $63, %rcx 1709; SSSE3-NEXT: movd %ecx, %xmm0 1710; SSSE3-NEXT: movq %rax, %rcx 1711; SSSE3-NEXT: shlq $56, %rcx 1712; SSSE3-NEXT: sarq $63, %rcx 1713; SSSE3-NEXT: movd %ecx, %xmm1 1714; 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] 1715; SSSE3-NEXT: movq %rax, %rcx 1716; SSSE3-NEXT: shlq $52, %rcx 1717; SSSE3-NEXT: sarq $63, %rcx 1718; SSSE3-NEXT: movd %ecx, %xmm2 1719; SSSE3-NEXT: movq %rax, %rcx 1720; SSSE3-NEXT: shlq $60, %rcx 1721; SSSE3-NEXT: sarq $63, %rcx 1722; SSSE3-NEXT: movd %ecx, %xmm0 1723; 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] 1724; SSSE3-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] 1725; SSSE3-NEXT: movq %rax, %rcx 1726; SSSE3-NEXT: shlq $50, %rcx 1727; SSSE3-NEXT: sarq $63, %rcx 1728; SSSE3-NEXT: movd %ecx, %xmm1 1729; SSSE3-NEXT: movq %rax, %rcx 1730; SSSE3-NEXT: shlq $58, %rcx 1731; SSSE3-NEXT: sarq $63, %rcx 1732; SSSE3-NEXT: movd %ecx, %xmm2 1733; 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] 1734; SSSE3-NEXT: movq %rax, %rcx 1735; SSSE3-NEXT: shlq $54, %rcx 1736; SSSE3-NEXT: sarq $63, %rcx 1737; SSSE3-NEXT: movd %ecx, %xmm3 1738; SSSE3-NEXT: movq %rax, %rcx 1739; SSSE3-NEXT: shlq $62, %rcx 1740; SSSE3-NEXT: sarq $63, %rcx 1741; SSSE3-NEXT: movd %ecx, %xmm1 1742; 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] 1743; 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] 1744; 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] 1745; SSSE3-NEXT: movq %rax, %rcx 1746; SSSE3-NEXT: shlq $49, %rcx 1747; SSSE3-NEXT: sarq $63, %rcx 1748; SSSE3-NEXT: movd %ecx, %xmm0 1749; SSSE3-NEXT: movq %rax, %rcx 1750; SSSE3-NEXT: shlq $57, %rcx 1751; SSSE3-NEXT: sarq $63, %rcx 1752; SSSE3-NEXT: movd %ecx, %xmm3 1753; 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] 1754; SSSE3-NEXT: movq %rax, %rcx 1755; SSSE3-NEXT: shlq $53, %rcx 1756; SSSE3-NEXT: sarq $63, %rcx 1757; SSSE3-NEXT: movd %ecx, %xmm0 1758; SSSE3-NEXT: movq %rax, %rcx 1759; SSSE3-NEXT: shlq $61, %rcx 1760; SSSE3-NEXT: sarq $63, %rcx 1761; SSSE3-NEXT: movd %ecx, %xmm2 1762; 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] 1763; SSSE3-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7] 1764; SSSE3-NEXT: movq %rax, %rcx 1765; SSSE3-NEXT: shlq $51, %rcx 1766; SSSE3-NEXT: sarq $63, %rcx 1767; SSSE3-NEXT: movd %ecx, %xmm0 1768; SSSE3-NEXT: movq %rax, %rcx 1769; SSSE3-NEXT: shlq $59, %rcx 1770; SSSE3-NEXT: sarq $63, %rcx 1771; SSSE3-NEXT: movd %ecx, %xmm3 1772; 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] 1773; SSSE3-NEXT: movq %rax, %rcx 1774; SSSE3-NEXT: shlq $55, %rcx 1775; SSSE3-NEXT: sarq $63, %rcx 1776; SSSE3-NEXT: movd %ecx, %xmm4 1777; SSSE3-NEXT: shlq $63, %rax 1778; SSSE3-NEXT: sarq $63, %rax 1779; SSSE3-NEXT: movd %eax, %xmm0 1780; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7] 1781; 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] 1782; 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] 1783; SSSE3-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] 1784; SSSE3-NEXT: retq 1785; 1786; SSE41-LABEL: load_sext_16i1_to_16i8: 1787; SSE41: # BB#0: # %entry 1788; SSE41-NEXT: movzwl (%rdi), %eax 1789; SSE41-NEXT: movq %rax, %rcx 1790; SSE41-NEXT: shlq $62, %rcx 1791; SSE41-NEXT: sarq $63, %rcx 1792; SSE41-NEXT: movq %rax, %rdx 1793; SSE41-NEXT: shlq $63, %rdx 1794; SSE41-NEXT: sarq $63, %rdx 1795; SSE41-NEXT: movd %edx, %xmm0 1796; SSE41-NEXT: pinsrb $1, %ecx, %xmm0 1797; SSE41-NEXT: movq %rax, %rcx 1798; SSE41-NEXT: shlq $61, %rcx 1799; SSE41-NEXT: sarq $63, %rcx 1800; SSE41-NEXT: pinsrb $2, %ecx, %xmm0 1801; SSE41-NEXT: movq %rax, %rcx 1802; SSE41-NEXT: shlq $60, %rcx 1803; SSE41-NEXT: sarq $63, %rcx 1804; SSE41-NEXT: pinsrb $3, %ecx, %xmm0 1805; SSE41-NEXT: movq %rax, %rcx 1806; SSE41-NEXT: shlq $59, %rcx 1807; SSE41-NEXT: sarq $63, %rcx 1808; SSE41-NEXT: pinsrb $4, %ecx, %xmm0 1809; SSE41-NEXT: movq %rax, %rcx 1810; SSE41-NEXT: shlq $58, %rcx 1811; SSE41-NEXT: sarq $63, %rcx 1812; SSE41-NEXT: pinsrb $5, %ecx, %xmm0 1813; SSE41-NEXT: movq %rax, %rcx 1814; SSE41-NEXT: shlq $57, %rcx 1815; SSE41-NEXT: sarq $63, %rcx 1816; SSE41-NEXT: pinsrb $6, %ecx, %xmm0 1817; SSE41-NEXT: movq %rax, %rcx 1818; SSE41-NEXT: shlq $56, %rcx 1819; SSE41-NEXT: sarq $63, %rcx 1820; SSE41-NEXT: pinsrb $7, %ecx, %xmm0 1821; SSE41-NEXT: movq %rax, %rcx 1822; SSE41-NEXT: shlq $55, %rcx 1823; SSE41-NEXT: sarq $63, %rcx 1824; SSE41-NEXT: pinsrb $8, %ecx, %xmm0 1825; SSE41-NEXT: movq %rax, %rcx 1826; SSE41-NEXT: shlq $54, %rcx 1827; SSE41-NEXT: sarq $63, %rcx 1828; SSE41-NEXT: pinsrb $9, %ecx, %xmm0 1829; SSE41-NEXT: movq %rax, %rcx 1830; SSE41-NEXT: shlq $53, %rcx 1831; SSE41-NEXT: sarq $63, %rcx 1832; SSE41-NEXT: pinsrb $10, %ecx, %xmm0 1833; SSE41-NEXT: movq %rax, %rcx 1834; SSE41-NEXT: shlq $52, %rcx 1835; SSE41-NEXT: sarq $63, %rcx 1836; SSE41-NEXT: pinsrb $11, %ecx, %xmm0 1837; SSE41-NEXT: movq %rax, %rcx 1838; SSE41-NEXT: shlq $51, %rcx 1839; SSE41-NEXT: sarq $63, %rcx 1840; SSE41-NEXT: pinsrb $12, %ecx, %xmm0 1841; SSE41-NEXT: movq %rax, %rcx 1842; SSE41-NEXT: shlq $50, %rcx 1843; SSE41-NEXT: sarq $63, %rcx 1844; SSE41-NEXT: pinsrb $13, %ecx, %xmm0 1845; SSE41-NEXT: movq %rax, %rcx 1846; SSE41-NEXT: shlq $49, %rcx 1847; SSE41-NEXT: sarq $63, %rcx 1848; SSE41-NEXT: pinsrb $14, %ecx, %xmm0 1849; SSE41-NEXT: shlq $48, %rax 1850; SSE41-NEXT: sarq $63, %rax 1851; SSE41-NEXT: pinsrb $15, %eax, %xmm0 1852; SSE41-NEXT: retq 1853; 1854; AVX-LABEL: load_sext_16i1_to_16i8: 1855; AVX: # BB#0: # %entry 1856; AVX-NEXT: movzwl (%rdi), %eax 1857; AVX-NEXT: movq %rax, %rcx 1858; AVX-NEXT: shlq $62, %rcx 1859; AVX-NEXT: sarq $63, %rcx 1860; AVX-NEXT: movq %rax, %rdx 1861; AVX-NEXT: shlq $63, %rdx 1862; AVX-NEXT: sarq $63, %rdx 1863; AVX-NEXT: vmovd %edx, %xmm0 1864; AVX-NEXT: vpinsrb $1, %ecx, %xmm0, %xmm0 1865; AVX-NEXT: movq %rax, %rcx 1866; AVX-NEXT: shlq $61, %rcx 1867; AVX-NEXT: sarq $63, %rcx 1868; AVX-NEXT: vpinsrb $2, %ecx, %xmm0, %xmm0 1869; AVX-NEXT: movq %rax, %rcx 1870; AVX-NEXT: shlq $60, %rcx 1871; AVX-NEXT: sarq $63, %rcx 1872; AVX-NEXT: vpinsrb $3, %ecx, %xmm0, %xmm0 1873; AVX-NEXT: movq %rax, %rcx 1874; AVX-NEXT: shlq $59, %rcx 1875; AVX-NEXT: sarq $63, %rcx 1876; AVX-NEXT: vpinsrb $4, %ecx, %xmm0, %xmm0 1877; AVX-NEXT: movq %rax, %rcx 1878; AVX-NEXT: shlq $58, %rcx 1879; AVX-NEXT: sarq $63, %rcx 1880; AVX-NEXT: vpinsrb $5, %ecx, %xmm0, %xmm0 1881; AVX-NEXT: movq %rax, %rcx 1882; AVX-NEXT: shlq $57, %rcx 1883; AVX-NEXT: sarq $63, %rcx 1884; AVX-NEXT: vpinsrb $6, %ecx, %xmm0, %xmm0 1885; AVX-NEXT: movq %rax, %rcx 1886; AVX-NEXT: shlq $56, %rcx 1887; AVX-NEXT: sarq $63, %rcx 1888; AVX-NEXT: vpinsrb $7, %ecx, %xmm0, %xmm0 1889; AVX-NEXT: movq %rax, %rcx 1890; AVX-NEXT: shlq $55, %rcx 1891; AVX-NEXT: sarq $63, %rcx 1892; AVX-NEXT: vpinsrb $8, %ecx, %xmm0, %xmm0 1893; AVX-NEXT: movq %rax, %rcx 1894; AVX-NEXT: shlq $54, %rcx 1895; AVX-NEXT: sarq $63, %rcx 1896; AVX-NEXT: vpinsrb $9, %ecx, %xmm0, %xmm0 1897; AVX-NEXT: movq %rax, %rcx 1898; AVX-NEXT: shlq $53, %rcx 1899; AVX-NEXT: sarq $63, %rcx 1900; AVX-NEXT: vpinsrb $10, %ecx, %xmm0, %xmm0 1901; AVX-NEXT: movq %rax, %rcx 1902; AVX-NEXT: shlq $52, %rcx 1903; AVX-NEXT: sarq $63, %rcx 1904; AVX-NEXT: vpinsrb $11, %ecx, %xmm0, %xmm0 1905; AVX-NEXT: movq %rax, %rcx 1906; AVX-NEXT: shlq $51, %rcx 1907; AVX-NEXT: sarq $63, %rcx 1908; AVX-NEXT: vpinsrb $12, %ecx, %xmm0, %xmm0 1909; AVX-NEXT: movq %rax, %rcx 1910; AVX-NEXT: shlq $50, %rcx 1911; AVX-NEXT: sarq $63, %rcx 1912; AVX-NEXT: vpinsrb $13, %ecx, %xmm0, %xmm0 1913; AVX-NEXT: movq %rax, %rcx 1914; AVX-NEXT: shlq $49, %rcx 1915; AVX-NEXT: sarq $63, %rcx 1916; AVX-NEXT: vpinsrb $14, %ecx, %xmm0, %xmm0 1917; AVX-NEXT: shlq $48, %rax 1918; AVX-NEXT: sarq $63, %rax 1919; AVX-NEXT: vpinsrb $15, %eax, %xmm0, %xmm0 1920; AVX-NEXT: retq 1921; 1922; X32-SSE41-LABEL: load_sext_16i1_to_16i8: 1923; X32-SSE41: # BB#0: # %entry 1924; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 1925; X32-SSE41-NEXT: movl (%eax), %eax 1926; X32-SSE41-NEXT: movl %eax, %ecx 1927; X32-SSE41-NEXT: shll $30, %ecx 1928; X32-SSE41-NEXT: sarl $31, %ecx 1929; X32-SSE41-NEXT: movl %eax, %edx 1930; X32-SSE41-NEXT: shll $31, %edx 1931; X32-SSE41-NEXT: sarl $31, %edx 1932; X32-SSE41-NEXT: movd %edx, %xmm0 1933; X32-SSE41-NEXT: pinsrb $1, %ecx, %xmm0 1934; X32-SSE41-NEXT: movl %eax, %ecx 1935; X32-SSE41-NEXT: shll $29, %ecx 1936; X32-SSE41-NEXT: sarl $31, %ecx 1937; X32-SSE41-NEXT: pinsrb $2, %ecx, %xmm0 1938; X32-SSE41-NEXT: movl %eax, %ecx 1939; X32-SSE41-NEXT: shll $28, %ecx 1940; X32-SSE41-NEXT: sarl $31, %ecx 1941; X32-SSE41-NEXT: pinsrb $3, %ecx, %xmm0 1942; X32-SSE41-NEXT: movl %eax, %ecx 1943; X32-SSE41-NEXT: shll $27, %ecx 1944; X32-SSE41-NEXT: sarl $31, %ecx 1945; X32-SSE41-NEXT: pinsrb $4, %ecx, %xmm0 1946; X32-SSE41-NEXT: movl %eax, %ecx 1947; X32-SSE41-NEXT: shll $26, %ecx 1948; X32-SSE41-NEXT: sarl $31, %ecx 1949; X32-SSE41-NEXT: pinsrb $5, %ecx, %xmm0 1950; X32-SSE41-NEXT: movl %eax, %ecx 1951; X32-SSE41-NEXT: shll $25, %ecx 1952; X32-SSE41-NEXT: sarl $31, %ecx 1953; X32-SSE41-NEXT: pinsrb $6, %ecx, %xmm0 1954; X32-SSE41-NEXT: movl %eax, %ecx 1955; X32-SSE41-NEXT: shll $24, %ecx 1956; X32-SSE41-NEXT: sarl $31, %ecx 1957; X32-SSE41-NEXT: pinsrb $7, %ecx, %xmm0 1958; X32-SSE41-NEXT: movl %eax, %ecx 1959; X32-SSE41-NEXT: shll $23, %ecx 1960; X32-SSE41-NEXT: sarl $31, %ecx 1961; X32-SSE41-NEXT: pinsrb $8, %ecx, %xmm0 1962; X32-SSE41-NEXT: movl %eax, %ecx 1963; X32-SSE41-NEXT: shll $22, %ecx 1964; X32-SSE41-NEXT: sarl $31, %ecx 1965; X32-SSE41-NEXT: pinsrb $9, %ecx, %xmm0 1966; X32-SSE41-NEXT: movl %eax, %ecx 1967; X32-SSE41-NEXT: shll $21, %ecx 1968; X32-SSE41-NEXT: sarl $31, %ecx 1969; X32-SSE41-NEXT: pinsrb $10, %ecx, %xmm0 1970; X32-SSE41-NEXT: movl %eax, %ecx 1971; X32-SSE41-NEXT: shll $20, %ecx 1972; X32-SSE41-NEXT: sarl $31, %ecx 1973; X32-SSE41-NEXT: pinsrb $11, %ecx, %xmm0 1974; X32-SSE41-NEXT: movl %eax, %ecx 1975; X32-SSE41-NEXT: shll $19, %ecx 1976; X32-SSE41-NEXT: sarl $31, %ecx 1977; X32-SSE41-NEXT: pinsrb $12, %ecx, %xmm0 1978; X32-SSE41-NEXT: movl %eax, %ecx 1979; X32-SSE41-NEXT: shll $18, %ecx 1980; X32-SSE41-NEXT: sarl $31, %ecx 1981; X32-SSE41-NEXT: pinsrb $13, %ecx, %xmm0 1982; X32-SSE41-NEXT: movl %eax, %ecx 1983; X32-SSE41-NEXT: shll $17, %ecx 1984; X32-SSE41-NEXT: sarl $31, %ecx 1985; X32-SSE41-NEXT: pinsrb $14, %ecx, %xmm0 1986; X32-SSE41-NEXT: shll $16, %eax 1987; X32-SSE41-NEXT: sarl $31, %eax 1988; X32-SSE41-NEXT: pinsrb $15, %eax, %xmm0 1989; X32-SSE41-NEXT: retl 1990entry: 1991 %X = load <16 x i1>, <16 x i1>* %ptr 1992 %Y = sext <16 x i1> %X to <16 x i8> 1993 ret <16 x i8> %Y 1994} 1995 1996define <16 x i16> @load_sext_16i1_to_16i16(<16 x i1> *%ptr) { 1997; SSE2-LABEL: load_sext_16i1_to_16i16: 1998; SSE2: # BB#0: # %entry 1999; SSE2-NEXT: movzwl (%rdi), %eax 2000; SSE2-NEXT: movl %eax, %ecx 2001; SSE2-NEXT: shrl $14, %ecx 2002; SSE2-NEXT: andl $1, %ecx 2003; SSE2-NEXT: movd %ecx, %xmm0 2004; SSE2-NEXT: movl %eax, %ecx 2005; SSE2-NEXT: shrl $6, %ecx 2006; SSE2-NEXT: andl $1, %ecx 2007; SSE2-NEXT: movd %ecx, %xmm1 2008; 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] 2009; SSE2-NEXT: movl %eax, %ecx 2010; SSE2-NEXT: shrl $10, %ecx 2011; SSE2-NEXT: andl $1, %ecx 2012; SSE2-NEXT: movd %ecx, %xmm0 2013; SSE2-NEXT: movl %eax, %ecx 2014; SSE2-NEXT: shrl $2, %ecx 2015; SSE2-NEXT: andl $1, %ecx 2016; SSE2-NEXT: movd %ecx, %xmm2 2017; 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] 2018; 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] 2019; SSE2-NEXT: movl %eax, %ecx 2020; SSE2-NEXT: shrl $12, %ecx 2021; SSE2-NEXT: andl $1, %ecx 2022; SSE2-NEXT: movd %ecx, %xmm0 2023; SSE2-NEXT: movl %eax, %ecx 2024; SSE2-NEXT: shrl $4, %ecx 2025; SSE2-NEXT: andl $1, %ecx 2026; SSE2-NEXT: movd %ecx, %xmm3 2027; 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] 2028; SSE2-NEXT: movl %eax, %ecx 2029; SSE2-NEXT: andl $1, %ecx 2030; SSE2-NEXT: movd %ecx, %xmm1 2031; SSE2-NEXT: movl %eax, %ecx 2032; SSE2-NEXT: shrl $8, %ecx 2033; SSE2-NEXT: andl $1, %ecx 2034; SSE2-NEXT: movd %ecx, %xmm0 2035; 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] 2036; 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] 2037; 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] 2038; SSE2-NEXT: movl %eax, %ecx 2039; SSE2-NEXT: shrl $13, %ecx 2040; SSE2-NEXT: andl $1, %ecx 2041; SSE2-NEXT: movd %ecx, %xmm0 2042; SSE2-NEXT: movl %eax, %ecx 2043; SSE2-NEXT: shrl $5, %ecx 2044; SSE2-NEXT: andl $1, %ecx 2045; SSE2-NEXT: movd %ecx, %xmm2 2046; 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] 2047; SSE2-NEXT: movl %eax, %ecx 2048; SSE2-NEXT: shrl $9, %ecx 2049; SSE2-NEXT: andl $1, %ecx 2050; SSE2-NEXT: movd %ecx, %xmm3 2051; SSE2-NEXT: movl %eax, %ecx 2052; SSE2-NEXT: shrl %ecx 2053; SSE2-NEXT: andl $1, %ecx 2054; SSE2-NEXT: movd %ecx, %xmm0 2055; 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] 2056; 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] 2057; SSE2-NEXT: movl %eax, %ecx 2058; SSE2-NEXT: shrl $11, %ecx 2059; SSE2-NEXT: andl $1, %ecx 2060; SSE2-NEXT: movd %ecx, %xmm2 2061; SSE2-NEXT: movl %eax, %ecx 2062; SSE2-NEXT: shrl $3, %ecx 2063; SSE2-NEXT: andl $1, %ecx 2064; SSE2-NEXT: movd %ecx, %xmm3 2065; 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] 2066; SSE2-NEXT: movl %eax, %ecx 2067; SSE2-NEXT: shrl $7, %ecx 2068; SSE2-NEXT: andl $1, %ecx 2069; SSE2-NEXT: movd %ecx, %xmm2 2070; SSE2-NEXT: shrl $15, %eax 2071; SSE2-NEXT: movzwl %ax, %eax 2072; SSE2-NEXT: movd %eax, %xmm4 2073; 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] 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: 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] 2076; 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] 2077; SSE2-NEXT: movdqa %xmm1, %xmm0 2078; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 2079; SSE2-NEXT: psllw $15, %xmm0 2080; SSE2-NEXT: psraw $15, %xmm0 2081; 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] 2082; SSE2-NEXT: psllw $15, %xmm1 2083; SSE2-NEXT: psraw $15, %xmm1 2084; SSE2-NEXT: retq 2085; 2086; SSSE3-LABEL: load_sext_16i1_to_16i16: 2087; SSSE3: # BB#0: # %entry 2088; SSSE3-NEXT: movzwl (%rdi), %eax 2089; SSSE3-NEXT: movl %eax, %ecx 2090; SSSE3-NEXT: shrl $14, %ecx 2091; SSSE3-NEXT: andl $1, %ecx 2092; SSSE3-NEXT: movd %ecx, %xmm0 2093; SSSE3-NEXT: movl %eax, %ecx 2094; SSSE3-NEXT: shrl $6, %ecx 2095; SSSE3-NEXT: andl $1, %ecx 2096; SSSE3-NEXT: movd %ecx, %xmm1 2097; 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] 2098; SSSE3-NEXT: movl %eax, %ecx 2099; SSSE3-NEXT: shrl $10, %ecx 2100; SSSE3-NEXT: andl $1, %ecx 2101; SSSE3-NEXT: movd %ecx, %xmm0 2102; SSSE3-NEXT: movl %eax, %ecx 2103; SSSE3-NEXT: shrl $2, %ecx 2104; SSSE3-NEXT: andl $1, %ecx 2105; SSSE3-NEXT: movd %ecx, %xmm2 2106; 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] 2107; 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] 2108; SSSE3-NEXT: movl %eax, %ecx 2109; SSSE3-NEXT: shrl $12, %ecx 2110; SSSE3-NEXT: andl $1, %ecx 2111; SSSE3-NEXT: movd %ecx, %xmm0 2112; SSSE3-NEXT: movl %eax, %ecx 2113; SSSE3-NEXT: shrl $4, %ecx 2114; SSSE3-NEXT: andl $1, %ecx 2115; SSSE3-NEXT: movd %ecx, %xmm3 2116; 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] 2117; SSSE3-NEXT: movl %eax, %ecx 2118; SSSE3-NEXT: andl $1, %ecx 2119; SSSE3-NEXT: movd %ecx, %xmm1 2120; SSSE3-NEXT: movl %eax, %ecx 2121; SSSE3-NEXT: shrl $8, %ecx 2122; SSSE3-NEXT: andl $1, %ecx 2123; SSSE3-NEXT: movd %ecx, %xmm0 2124; 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] 2125; 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] 2126; 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] 2127; SSSE3-NEXT: movl %eax, %ecx 2128; SSSE3-NEXT: shrl $13, %ecx 2129; SSSE3-NEXT: andl $1, %ecx 2130; SSSE3-NEXT: movd %ecx, %xmm0 2131; SSSE3-NEXT: movl %eax, %ecx 2132; SSSE3-NEXT: shrl $5, %ecx 2133; SSSE3-NEXT: andl $1, %ecx 2134; SSSE3-NEXT: movd %ecx, %xmm2 2135; 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] 2136; SSSE3-NEXT: movl %eax, %ecx 2137; SSSE3-NEXT: shrl $9, %ecx 2138; SSSE3-NEXT: andl $1, %ecx 2139; SSSE3-NEXT: movd %ecx, %xmm3 2140; SSSE3-NEXT: movl %eax, %ecx 2141; SSSE3-NEXT: shrl %ecx 2142; SSSE3-NEXT: andl $1, %ecx 2143; SSSE3-NEXT: movd %ecx, %xmm0 2144; 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] 2145; 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] 2146; SSSE3-NEXT: movl %eax, %ecx 2147; SSSE3-NEXT: shrl $11, %ecx 2148; SSSE3-NEXT: andl $1, %ecx 2149; SSSE3-NEXT: movd %ecx, %xmm2 2150; SSSE3-NEXT: movl %eax, %ecx 2151; SSSE3-NEXT: shrl $3, %ecx 2152; SSSE3-NEXT: andl $1, %ecx 2153; SSSE3-NEXT: movd %ecx, %xmm3 2154; 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] 2155; SSSE3-NEXT: movl %eax, %ecx 2156; SSSE3-NEXT: shrl $7, %ecx 2157; SSSE3-NEXT: andl $1, %ecx 2158; SSSE3-NEXT: movd %ecx, %xmm2 2159; SSSE3-NEXT: shrl $15, %eax 2160; SSSE3-NEXT: movzwl %ax, %eax 2161; SSSE3-NEXT: movd %eax, %xmm4 2162; 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] 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: 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] 2165; 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] 2166; SSSE3-NEXT: movdqa %xmm1, %xmm0 2167; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 2168; SSSE3-NEXT: psllw $15, %xmm0 2169; SSSE3-NEXT: psraw $15, %xmm0 2170; 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] 2171; SSSE3-NEXT: psllw $15, %xmm1 2172; SSSE3-NEXT: psraw $15, %xmm1 2173; SSSE3-NEXT: retq 2174; 2175; SSE41-LABEL: load_sext_16i1_to_16i16: 2176; SSE41: # BB#0: # %entry 2177; SSE41-NEXT: movzwl (%rdi), %eax 2178; SSE41-NEXT: movl %eax, %ecx 2179; SSE41-NEXT: shrl %ecx 2180; SSE41-NEXT: andl $1, %ecx 2181; SSE41-NEXT: movl %eax, %edx 2182; SSE41-NEXT: andl $1, %edx 2183; SSE41-NEXT: movd %edx, %xmm1 2184; SSE41-NEXT: pinsrb $1, %ecx, %xmm1 2185; SSE41-NEXT: movl %eax, %ecx 2186; SSE41-NEXT: shrl $2, %ecx 2187; SSE41-NEXT: andl $1, %ecx 2188; SSE41-NEXT: pinsrb $2, %ecx, %xmm1 2189; SSE41-NEXT: movl %eax, %ecx 2190; SSE41-NEXT: shrl $3, %ecx 2191; SSE41-NEXT: andl $1, %ecx 2192; SSE41-NEXT: pinsrb $3, %ecx, %xmm1 2193; SSE41-NEXT: movl %eax, %ecx 2194; SSE41-NEXT: shrl $4, %ecx 2195; SSE41-NEXT: andl $1, %ecx 2196; SSE41-NEXT: pinsrb $4, %ecx, %xmm1 2197; SSE41-NEXT: movl %eax, %ecx 2198; SSE41-NEXT: shrl $5, %ecx 2199; SSE41-NEXT: andl $1, %ecx 2200; SSE41-NEXT: pinsrb $5, %ecx, %xmm1 2201; SSE41-NEXT: movl %eax, %ecx 2202; SSE41-NEXT: shrl $6, %ecx 2203; SSE41-NEXT: andl $1, %ecx 2204; SSE41-NEXT: pinsrb $6, %ecx, %xmm1 2205; SSE41-NEXT: movl %eax, %ecx 2206; SSE41-NEXT: shrl $7, %ecx 2207; SSE41-NEXT: andl $1, %ecx 2208; SSE41-NEXT: pinsrb $7, %ecx, %xmm1 2209; SSE41-NEXT: movl %eax, %ecx 2210; SSE41-NEXT: shrl $8, %ecx 2211; SSE41-NEXT: andl $1, %ecx 2212; SSE41-NEXT: pinsrb $8, %ecx, %xmm1 2213; SSE41-NEXT: movl %eax, %ecx 2214; SSE41-NEXT: shrl $9, %ecx 2215; SSE41-NEXT: andl $1, %ecx 2216; SSE41-NEXT: pinsrb $9, %ecx, %xmm1 2217; SSE41-NEXT: movl %eax, %ecx 2218; SSE41-NEXT: shrl $10, %ecx 2219; SSE41-NEXT: andl $1, %ecx 2220; SSE41-NEXT: pinsrb $10, %ecx, %xmm1 2221; SSE41-NEXT: movl %eax, %ecx 2222; SSE41-NEXT: shrl $11, %ecx 2223; SSE41-NEXT: andl $1, %ecx 2224; SSE41-NEXT: pinsrb $11, %ecx, %xmm1 2225; SSE41-NEXT: movl %eax, %ecx 2226; SSE41-NEXT: shrl $12, %ecx 2227; SSE41-NEXT: andl $1, %ecx 2228; SSE41-NEXT: pinsrb $12, %ecx, %xmm1 2229; SSE41-NEXT: movl %eax, %ecx 2230; SSE41-NEXT: shrl $13, %ecx 2231; SSE41-NEXT: andl $1, %ecx 2232; SSE41-NEXT: pinsrb $13, %ecx, %xmm1 2233; SSE41-NEXT: movl %eax, %ecx 2234; SSE41-NEXT: shrl $14, %ecx 2235; SSE41-NEXT: andl $1, %ecx 2236; SSE41-NEXT: pinsrb $14, %ecx, %xmm1 2237; SSE41-NEXT: shrl $15, %eax 2238; SSE41-NEXT: movzwl %ax, %eax 2239; SSE41-NEXT: pinsrb $15, %eax, %xmm1 2240; 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 2241; SSE41-NEXT: psllw $15, %xmm0 2242; SSE41-NEXT: psraw $15, %xmm0 2243; SSE41-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 2244; SSE41-NEXT: psllw $15, %xmm1 2245; SSE41-NEXT: psraw $15, %xmm1 2246; SSE41-NEXT: retq 2247; 2248; AVX1-LABEL: load_sext_16i1_to_16i16: 2249; AVX1: # BB#0: # %entry 2250; AVX1-NEXT: movzwl (%rdi), %eax 2251; AVX1-NEXT: movq %rax, %rcx 2252; AVX1-NEXT: shlq $54, %rcx 2253; AVX1-NEXT: sarq $63, %rcx 2254; AVX1-NEXT: movq %rax, %rdx 2255; AVX1-NEXT: shlq $55, %rdx 2256; AVX1-NEXT: sarq $63, %rdx 2257; AVX1-NEXT: vmovd %edx, %xmm0 2258; AVX1-NEXT: vpinsrw $1, %ecx, %xmm0, %xmm0 2259; AVX1-NEXT: movq %rax, %rcx 2260; AVX1-NEXT: shlq $53, %rcx 2261; AVX1-NEXT: sarq $63, %rcx 2262; AVX1-NEXT: vpinsrw $2, %ecx, %xmm0, %xmm0 2263; AVX1-NEXT: movq %rax, %rcx 2264; AVX1-NEXT: shlq $52, %rcx 2265; AVX1-NEXT: sarq $63, %rcx 2266; AVX1-NEXT: vpinsrw $3, %ecx, %xmm0, %xmm0 2267; AVX1-NEXT: movq %rax, %rcx 2268; AVX1-NEXT: shlq $51, %rcx 2269; AVX1-NEXT: sarq $63, %rcx 2270; AVX1-NEXT: vpinsrw $4, %ecx, %xmm0, %xmm0 2271; AVX1-NEXT: movq %rax, %rcx 2272; AVX1-NEXT: shlq $50, %rcx 2273; AVX1-NEXT: sarq $63, %rcx 2274; AVX1-NEXT: vpinsrw $5, %ecx, %xmm0, %xmm0 2275; AVX1-NEXT: movq %rax, %rcx 2276; AVX1-NEXT: shlq $49, %rcx 2277; AVX1-NEXT: sarq $63, %rcx 2278; AVX1-NEXT: vpinsrw $6, %ecx, %xmm0, %xmm0 2279; AVX1-NEXT: movq %rax, %rcx 2280; AVX1-NEXT: shlq $48, %rcx 2281; AVX1-NEXT: sarq $63, %rcx 2282; AVX1-NEXT: vpinsrw $7, %ecx, %xmm0, %xmm0 2283; AVX1-NEXT: movq %rax, %rcx 2284; AVX1-NEXT: shlq $62, %rcx 2285; AVX1-NEXT: sarq $63, %rcx 2286; AVX1-NEXT: movq %rax, %rdx 2287; AVX1-NEXT: shlq $63, %rdx 2288; AVX1-NEXT: sarq $63, %rdx 2289; AVX1-NEXT: vmovd %edx, %xmm1 2290; AVX1-NEXT: vpinsrw $1, %ecx, %xmm1, %xmm1 2291; AVX1-NEXT: movq %rax, %rcx 2292; AVX1-NEXT: shlq $61, %rcx 2293; AVX1-NEXT: sarq $63, %rcx 2294; AVX1-NEXT: vpinsrw $2, %ecx, %xmm1, %xmm1 2295; AVX1-NEXT: movq %rax, %rcx 2296; AVX1-NEXT: shlq $60, %rcx 2297; AVX1-NEXT: sarq $63, %rcx 2298; AVX1-NEXT: vpinsrw $3, %ecx, %xmm1, %xmm1 2299; AVX1-NEXT: movq %rax, %rcx 2300; AVX1-NEXT: shlq $59, %rcx 2301; AVX1-NEXT: sarq $63, %rcx 2302; AVX1-NEXT: vpinsrw $4, %ecx, %xmm1, %xmm1 2303; AVX1-NEXT: movq %rax, %rcx 2304; AVX1-NEXT: shlq $58, %rcx 2305; AVX1-NEXT: sarq $63, %rcx 2306; AVX1-NEXT: vpinsrw $5, %ecx, %xmm1, %xmm1 2307; AVX1-NEXT: movq %rax, %rcx 2308; AVX1-NEXT: shlq $57, %rcx 2309; AVX1-NEXT: sarq $63, %rcx 2310; AVX1-NEXT: vpinsrw $6, %ecx, %xmm1, %xmm1 2311; AVX1-NEXT: shlq $56, %rax 2312; AVX1-NEXT: sarq $63, %rax 2313; AVX1-NEXT: vpinsrw $7, %eax, %xmm1, %xmm1 2314; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 2315; AVX1-NEXT: retq 2316; 2317; AVX2-LABEL: load_sext_16i1_to_16i16: 2318; AVX2: # BB#0: # %entry 2319; AVX2-NEXT: movzwl (%rdi), %eax 2320; AVX2-NEXT: movq %rax, %rcx 2321; AVX2-NEXT: shlq $54, %rcx 2322; AVX2-NEXT: sarq $63, %rcx 2323; AVX2-NEXT: movq %rax, %rdx 2324; AVX2-NEXT: shlq $55, %rdx 2325; AVX2-NEXT: sarq $63, %rdx 2326; AVX2-NEXT: vmovd %edx, %xmm0 2327; AVX2-NEXT: vpinsrw $1, %ecx, %xmm0, %xmm0 2328; AVX2-NEXT: movq %rax, %rcx 2329; AVX2-NEXT: shlq $53, %rcx 2330; AVX2-NEXT: sarq $63, %rcx 2331; AVX2-NEXT: vpinsrw $2, %ecx, %xmm0, %xmm0 2332; AVX2-NEXT: movq %rax, %rcx 2333; AVX2-NEXT: shlq $52, %rcx 2334; AVX2-NEXT: sarq $63, %rcx 2335; AVX2-NEXT: vpinsrw $3, %ecx, %xmm0, %xmm0 2336; AVX2-NEXT: movq %rax, %rcx 2337; AVX2-NEXT: shlq $51, %rcx 2338; AVX2-NEXT: sarq $63, %rcx 2339; AVX2-NEXT: vpinsrw $4, %ecx, %xmm0, %xmm0 2340; AVX2-NEXT: movq %rax, %rcx 2341; AVX2-NEXT: shlq $50, %rcx 2342; AVX2-NEXT: sarq $63, %rcx 2343; AVX2-NEXT: vpinsrw $5, %ecx, %xmm0, %xmm0 2344; AVX2-NEXT: movq %rax, %rcx 2345; AVX2-NEXT: shlq $49, %rcx 2346; AVX2-NEXT: sarq $63, %rcx 2347; AVX2-NEXT: vpinsrw $6, %ecx, %xmm0, %xmm0 2348; AVX2-NEXT: movq %rax, %rcx 2349; AVX2-NEXT: shlq $48, %rcx 2350; AVX2-NEXT: sarq $63, %rcx 2351; AVX2-NEXT: vpinsrw $7, %ecx, %xmm0, %xmm0 2352; AVX2-NEXT: movq %rax, %rcx 2353; AVX2-NEXT: shlq $62, %rcx 2354; AVX2-NEXT: sarq $63, %rcx 2355; AVX2-NEXT: movq %rax, %rdx 2356; AVX2-NEXT: shlq $63, %rdx 2357; AVX2-NEXT: sarq $63, %rdx 2358; AVX2-NEXT: vmovd %edx, %xmm1 2359; AVX2-NEXT: vpinsrw $1, %ecx, %xmm1, %xmm1 2360; AVX2-NEXT: movq %rax, %rcx 2361; AVX2-NEXT: shlq $61, %rcx 2362; AVX2-NEXT: sarq $63, %rcx 2363; AVX2-NEXT: vpinsrw $2, %ecx, %xmm1, %xmm1 2364; AVX2-NEXT: movq %rax, %rcx 2365; AVX2-NEXT: shlq $60, %rcx 2366; AVX2-NEXT: sarq $63, %rcx 2367; AVX2-NEXT: vpinsrw $3, %ecx, %xmm1, %xmm1 2368; AVX2-NEXT: movq %rax, %rcx 2369; AVX2-NEXT: shlq $59, %rcx 2370; AVX2-NEXT: sarq $63, %rcx 2371; AVX2-NEXT: vpinsrw $4, %ecx, %xmm1, %xmm1 2372; AVX2-NEXT: movq %rax, %rcx 2373; AVX2-NEXT: shlq $58, %rcx 2374; AVX2-NEXT: sarq $63, %rcx 2375; AVX2-NEXT: vpinsrw $5, %ecx, %xmm1, %xmm1 2376; AVX2-NEXT: movq %rax, %rcx 2377; AVX2-NEXT: shlq $57, %rcx 2378; AVX2-NEXT: sarq $63, %rcx 2379; AVX2-NEXT: vpinsrw $6, %ecx, %xmm1, %xmm1 2380; AVX2-NEXT: shlq $56, %rax 2381; AVX2-NEXT: sarq $63, %rax 2382; AVX2-NEXT: vpinsrw $7, %eax, %xmm1, %xmm1 2383; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 2384; AVX2-NEXT: retq 2385; 2386; X32-SSE41-LABEL: load_sext_16i1_to_16i16: 2387; X32-SSE41: # BB#0: # %entry 2388; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 2389; X32-SSE41-NEXT: movzwl (%eax), %eax 2390; X32-SSE41-NEXT: movl %eax, %ecx 2391; X32-SSE41-NEXT: shrl %ecx 2392; X32-SSE41-NEXT: andl $1, %ecx 2393; X32-SSE41-NEXT: movl %eax, %edx 2394; X32-SSE41-NEXT: andl $1, %edx 2395; X32-SSE41-NEXT: movd %edx, %xmm1 2396; X32-SSE41-NEXT: pinsrb $1, %ecx, %xmm1 2397; X32-SSE41-NEXT: movl %eax, %ecx 2398; X32-SSE41-NEXT: shrl $2, %ecx 2399; X32-SSE41-NEXT: andl $1, %ecx 2400; X32-SSE41-NEXT: pinsrb $2, %ecx, %xmm1 2401; X32-SSE41-NEXT: movl %eax, %ecx 2402; X32-SSE41-NEXT: shrl $3, %ecx 2403; X32-SSE41-NEXT: andl $1, %ecx 2404; X32-SSE41-NEXT: pinsrb $3, %ecx, %xmm1 2405; X32-SSE41-NEXT: movl %eax, %ecx 2406; X32-SSE41-NEXT: shrl $4, %ecx 2407; X32-SSE41-NEXT: andl $1, %ecx 2408; X32-SSE41-NEXT: pinsrb $4, %ecx, %xmm1 2409; X32-SSE41-NEXT: movl %eax, %ecx 2410; X32-SSE41-NEXT: shrl $5, %ecx 2411; X32-SSE41-NEXT: andl $1, %ecx 2412; X32-SSE41-NEXT: pinsrb $5, %ecx, %xmm1 2413; X32-SSE41-NEXT: movl %eax, %ecx 2414; X32-SSE41-NEXT: shrl $6, %ecx 2415; X32-SSE41-NEXT: andl $1, %ecx 2416; X32-SSE41-NEXT: pinsrb $6, %ecx, %xmm1 2417; X32-SSE41-NEXT: movl %eax, %ecx 2418; X32-SSE41-NEXT: shrl $7, %ecx 2419; X32-SSE41-NEXT: andl $1, %ecx 2420; X32-SSE41-NEXT: pinsrb $7, %ecx, %xmm1 2421; X32-SSE41-NEXT: movl %eax, %ecx 2422; X32-SSE41-NEXT: shrl $8, %ecx 2423; X32-SSE41-NEXT: andl $1, %ecx 2424; X32-SSE41-NEXT: pinsrb $8, %ecx, %xmm1 2425; X32-SSE41-NEXT: movl %eax, %ecx 2426; X32-SSE41-NEXT: shrl $9, %ecx 2427; X32-SSE41-NEXT: andl $1, %ecx 2428; X32-SSE41-NEXT: pinsrb $9, %ecx, %xmm1 2429; X32-SSE41-NEXT: movl %eax, %ecx 2430; X32-SSE41-NEXT: shrl $10, %ecx 2431; X32-SSE41-NEXT: andl $1, %ecx 2432; X32-SSE41-NEXT: pinsrb $10, %ecx, %xmm1 2433; X32-SSE41-NEXT: movl %eax, %ecx 2434; X32-SSE41-NEXT: shrl $11, %ecx 2435; X32-SSE41-NEXT: andl $1, %ecx 2436; X32-SSE41-NEXT: pinsrb $11, %ecx, %xmm1 2437; X32-SSE41-NEXT: movl %eax, %ecx 2438; X32-SSE41-NEXT: shrl $12, %ecx 2439; X32-SSE41-NEXT: andl $1, %ecx 2440; X32-SSE41-NEXT: pinsrb $12, %ecx, %xmm1 2441; X32-SSE41-NEXT: movl %eax, %ecx 2442; X32-SSE41-NEXT: shrl $13, %ecx 2443; X32-SSE41-NEXT: andl $1, %ecx 2444; X32-SSE41-NEXT: pinsrb $13, %ecx, %xmm1 2445; X32-SSE41-NEXT: movl %eax, %ecx 2446; X32-SSE41-NEXT: shrl $14, %ecx 2447; X32-SSE41-NEXT: andl $1, %ecx 2448; X32-SSE41-NEXT: pinsrb $14, %ecx, %xmm1 2449; X32-SSE41-NEXT: shrl $15, %eax 2450; X32-SSE41-NEXT: pinsrb $15, %eax, %xmm1 2451; 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 2452; X32-SSE41-NEXT: psllw $15, %xmm0 2453; X32-SSE41-NEXT: psraw $15, %xmm0 2454; X32-SSE41-NEXT: punpckhbw {{.*#+}} xmm1 = xmm1[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15] 2455; X32-SSE41-NEXT: psllw $15, %xmm1 2456; X32-SSE41-NEXT: psraw $15, %xmm1 2457; X32-SSE41-NEXT: retl 2458entry: 2459 %X = load <16 x i1>, <16 x i1>* %ptr 2460 %Y = sext <16 x i1> %X to <16 x i16> 2461 ret <16 x i16> %Y 2462} 2463 2464define <32 x i8> @load_sext_32i1_to_32i8(<32 x i1> *%ptr) { 2465; SSE2-LABEL: load_sext_32i1_to_32i8: 2466; SSE2: # BB#0: # %entry 2467; SSE2-NEXT: movzwl (%rdi), %eax 2468; SSE2-NEXT: movq %rax, %rcx 2469; SSE2-NEXT: shlq $48, %rcx 2470; SSE2-NEXT: sarq $63, %rcx 2471; SSE2-NEXT: movd %ecx, %xmm0 2472; SSE2-NEXT: movq %rax, %rcx 2473; SSE2-NEXT: shlq $56, %rcx 2474; SSE2-NEXT: sarq $63, %rcx 2475; SSE2-NEXT: movd %ecx, %xmm1 2476; 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] 2477; SSE2-NEXT: movq %rax, %rcx 2478; SSE2-NEXT: shlq $52, %rcx 2479; SSE2-NEXT: sarq $63, %rcx 2480; SSE2-NEXT: movd %ecx, %xmm2 2481; SSE2-NEXT: movq %rax, %rcx 2482; SSE2-NEXT: shlq $60, %rcx 2483; SSE2-NEXT: sarq $63, %rcx 2484; SSE2-NEXT: movd %ecx, %xmm0 2485; 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] 2486; SSE2-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] 2487; SSE2-NEXT: movq %rax, %rcx 2488; SSE2-NEXT: shlq $50, %rcx 2489; SSE2-NEXT: sarq $63, %rcx 2490; SSE2-NEXT: movd %ecx, %xmm1 2491; SSE2-NEXT: movq %rax, %rcx 2492; SSE2-NEXT: shlq $58, %rcx 2493; SSE2-NEXT: sarq $63, %rcx 2494; SSE2-NEXT: movd %ecx, %xmm2 2495; 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] 2496; SSE2-NEXT: movq %rax, %rcx 2497; SSE2-NEXT: shlq $54, %rcx 2498; SSE2-NEXT: sarq $63, %rcx 2499; SSE2-NEXT: movd %ecx, %xmm3 2500; SSE2-NEXT: movq %rax, %rcx 2501; SSE2-NEXT: shlq $62, %rcx 2502; SSE2-NEXT: sarq $63, %rcx 2503; SSE2-NEXT: movd %ecx, %xmm1 2504; 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] 2505; 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] 2506; 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] 2507; SSE2-NEXT: movq %rax, %rcx 2508; SSE2-NEXT: shlq $49, %rcx 2509; SSE2-NEXT: sarq $63, %rcx 2510; SSE2-NEXT: movd %ecx, %xmm0 2511; SSE2-NEXT: movq %rax, %rcx 2512; SSE2-NEXT: shlq $57, %rcx 2513; SSE2-NEXT: sarq $63, %rcx 2514; SSE2-NEXT: movd %ecx, %xmm3 2515; 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] 2516; SSE2-NEXT: movq %rax, %rcx 2517; SSE2-NEXT: shlq $53, %rcx 2518; SSE2-NEXT: sarq $63, %rcx 2519; SSE2-NEXT: movd %ecx, %xmm0 2520; SSE2-NEXT: movq %rax, %rcx 2521; SSE2-NEXT: shlq $61, %rcx 2522; SSE2-NEXT: sarq $63, %rcx 2523; SSE2-NEXT: movd %ecx, %xmm2 2524; 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] 2525; SSE2-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7] 2526; SSE2-NEXT: movq %rax, %rcx 2527; SSE2-NEXT: shlq $51, %rcx 2528; SSE2-NEXT: sarq $63, %rcx 2529; SSE2-NEXT: movd %ecx, %xmm0 2530; SSE2-NEXT: movq %rax, %rcx 2531; SSE2-NEXT: shlq $59, %rcx 2532; SSE2-NEXT: sarq $63, %rcx 2533; SSE2-NEXT: movd %ecx, %xmm3 2534; 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] 2535; SSE2-NEXT: movq %rax, %rcx 2536; SSE2-NEXT: shlq $55, %rcx 2537; SSE2-NEXT: sarq $63, %rcx 2538; SSE2-NEXT: movd %ecx, %xmm4 2539; SSE2-NEXT: shlq $63, %rax 2540; SSE2-NEXT: sarq $63, %rax 2541; SSE2-NEXT: movd %eax, %xmm0 2542; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7] 2543; 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] 2544; 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] 2545; SSE2-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] 2546; SSE2-NEXT: movzwl 2(%rdi), %eax 2547; SSE2-NEXT: movq %rax, %rcx 2548; SSE2-NEXT: shlq $48, %rcx 2549; SSE2-NEXT: sarq $63, %rcx 2550; SSE2-NEXT: movd %ecx, %xmm1 2551; SSE2-NEXT: movq %rax, %rcx 2552; SSE2-NEXT: shlq $56, %rcx 2553; SSE2-NEXT: sarq $63, %rcx 2554; SSE2-NEXT: movd %ecx, %xmm2 2555; 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] 2556; SSE2-NEXT: movq %rax, %rcx 2557; SSE2-NEXT: shlq $52, %rcx 2558; SSE2-NEXT: sarq $63, %rcx 2559; SSE2-NEXT: movd %ecx, %xmm3 2560; SSE2-NEXT: movq %rax, %rcx 2561; SSE2-NEXT: shlq $60, %rcx 2562; SSE2-NEXT: sarq $63, %rcx 2563; SSE2-NEXT: movd %ecx, %xmm1 2564; 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] 2565; 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] 2566; SSE2-NEXT: movq %rax, %rcx 2567; SSE2-NEXT: shlq $50, %rcx 2568; SSE2-NEXT: sarq $63, %rcx 2569; SSE2-NEXT: movd %ecx, %xmm2 2570; SSE2-NEXT: movq %rax, %rcx 2571; SSE2-NEXT: shlq $58, %rcx 2572; SSE2-NEXT: sarq $63, %rcx 2573; SSE2-NEXT: movd %ecx, %xmm3 2574; 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] 2575; SSE2-NEXT: movq %rax, %rcx 2576; SSE2-NEXT: shlq $54, %rcx 2577; SSE2-NEXT: sarq $63, %rcx 2578; SSE2-NEXT: movd %ecx, %xmm4 2579; SSE2-NEXT: movq %rax, %rcx 2580; SSE2-NEXT: shlq $62, %rcx 2581; SSE2-NEXT: sarq $63, %rcx 2582; SSE2-NEXT: movd %ecx, %xmm2 2583; 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] 2584; SSE2-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7] 2585; 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] 2586; SSE2-NEXT: movq %rax, %rcx 2587; SSE2-NEXT: shlq $49, %rcx 2588; SSE2-NEXT: sarq $63, %rcx 2589; SSE2-NEXT: movd %ecx, %xmm1 2590; SSE2-NEXT: movq %rax, %rcx 2591; SSE2-NEXT: shlq $57, %rcx 2592; SSE2-NEXT: sarq $63, %rcx 2593; SSE2-NEXT: movd %ecx, %xmm4 2594; 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] 2595; SSE2-NEXT: movq %rax, %rcx 2596; SSE2-NEXT: shlq $53, %rcx 2597; SSE2-NEXT: sarq $63, %rcx 2598; SSE2-NEXT: movd %ecx, %xmm1 2599; SSE2-NEXT: movq %rax, %rcx 2600; SSE2-NEXT: shlq $61, %rcx 2601; SSE2-NEXT: sarq $63, %rcx 2602; SSE2-NEXT: movd %ecx, %xmm3 2603; 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] 2604; 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] 2605; SSE2-NEXT: movq %rax, %rcx 2606; SSE2-NEXT: shlq $51, %rcx 2607; SSE2-NEXT: sarq $63, %rcx 2608; SSE2-NEXT: movd %ecx, %xmm1 2609; SSE2-NEXT: movq %rax, %rcx 2610; SSE2-NEXT: shlq $59, %rcx 2611; SSE2-NEXT: sarq $63, %rcx 2612; SSE2-NEXT: movd %ecx, %xmm4 2613; 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] 2614; SSE2-NEXT: movq %rax, %rcx 2615; SSE2-NEXT: shlq $55, %rcx 2616; SSE2-NEXT: sarq $63, %rcx 2617; SSE2-NEXT: movd %ecx, %xmm5 2618; SSE2-NEXT: shlq $63, %rax 2619; SSE2-NEXT: sarq $63, %rax 2620; SSE2-NEXT: movd %eax, %xmm1 2621; SSE2-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] 2622; 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] 2623; 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] 2624; 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] 2625; SSE2-NEXT: retq 2626; 2627; SSSE3-LABEL: load_sext_32i1_to_32i8: 2628; SSSE3: # BB#0: # %entry 2629; SSSE3-NEXT: movzwl (%rdi), %eax 2630; SSSE3-NEXT: movq %rax, %rcx 2631; SSSE3-NEXT: shlq $48, %rcx 2632; SSSE3-NEXT: sarq $63, %rcx 2633; SSSE3-NEXT: movd %ecx, %xmm0 2634; SSSE3-NEXT: movq %rax, %rcx 2635; SSSE3-NEXT: shlq $56, %rcx 2636; SSSE3-NEXT: sarq $63, %rcx 2637; SSSE3-NEXT: movd %ecx, %xmm1 2638; 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] 2639; SSSE3-NEXT: movq %rax, %rcx 2640; SSSE3-NEXT: shlq $52, %rcx 2641; SSSE3-NEXT: sarq $63, %rcx 2642; SSSE3-NEXT: movd %ecx, %xmm2 2643; SSSE3-NEXT: movq %rax, %rcx 2644; SSSE3-NEXT: shlq $60, %rcx 2645; SSSE3-NEXT: sarq $63, %rcx 2646; SSSE3-NEXT: movd %ecx, %xmm0 2647; 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] 2648; SSSE3-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] 2649; SSSE3-NEXT: movq %rax, %rcx 2650; SSSE3-NEXT: shlq $50, %rcx 2651; SSSE3-NEXT: sarq $63, %rcx 2652; SSSE3-NEXT: movd %ecx, %xmm1 2653; SSSE3-NEXT: movq %rax, %rcx 2654; SSSE3-NEXT: shlq $58, %rcx 2655; SSSE3-NEXT: sarq $63, %rcx 2656; SSSE3-NEXT: movd %ecx, %xmm2 2657; 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] 2658; SSSE3-NEXT: movq %rax, %rcx 2659; SSSE3-NEXT: shlq $54, %rcx 2660; SSSE3-NEXT: sarq $63, %rcx 2661; SSSE3-NEXT: movd %ecx, %xmm3 2662; SSSE3-NEXT: movq %rax, %rcx 2663; SSSE3-NEXT: shlq $62, %rcx 2664; SSSE3-NEXT: sarq $63, %rcx 2665; SSSE3-NEXT: movd %ecx, %xmm1 2666; 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] 2667; 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] 2668; 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] 2669; SSSE3-NEXT: movq %rax, %rcx 2670; SSSE3-NEXT: shlq $49, %rcx 2671; SSSE3-NEXT: sarq $63, %rcx 2672; SSSE3-NEXT: movd %ecx, %xmm0 2673; SSSE3-NEXT: movq %rax, %rcx 2674; SSSE3-NEXT: shlq $57, %rcx 2675; SSSE3-NEXT: sarq $63, %rcx 2676; SSSE3-NEXT: movd %ecx, %xmm3 2677; 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] 2678; SSSE3-NEXT: movq %rax, %rcx 2679; SSSE3-NEXT: shlq $53, %rcx 2680; SSSE3-NEXT: sarq $63, %rcx 2681; SSSE3-NEXT: movd %ecx, %xmm0 2682; SSSE3-NEXT: movq %rax, %rcx 2683; SSSE3-NEXT: shlq $61, %rcx 2684; SSSE3-NEXT: sarq $63, %rcx 2685; SSSE3-NEXT: movd %ecx, %xmm2 2686; 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] 2687; SSSE3-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7] 2688; SSSE3-NEXT: movq %rax, %rcx 2689; SSSE3-NEXT: shlq $51, %rcx 2690; SSSE3-NEXT: sarq $63, %rcx 2691; SSSE3-NEXT: movd %ecx, %xmm0 2692; SSSE3-NEXT: movq %rax, %rcx 2693; SSSE3-NEXT: shlq $59, %rcx 2694; SSSE3-NEXT: sarq $63, %rcx 2695; SSSE3-NEXT: movd %ecx, %xmm3 2696; 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] 2697; SSSE3-NEXT: movq %rax, %rcx 2698; SSSE3-NEXT: shlq $55, %rcx 2699; SSSE3-NEXT: sarq $63, %rcx 2700; SSSE3-NEXT: movd %ecx, %xmm4 2701; SSSE3-NEXT: shlq $63, %rax 2702; SSSE3-NEXT: sarq $63, %rax 2703; SSSE3-NEXT: movd %eax, %xmm0 2704; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0],xmm4[0],xmm0[1],xmm4[1],xmm0[2],xmm4[2],xmm0[3],xmm4[3],xmm0[4],xmm4[4],xmm0[5],xmm4[5],xmm0[6],xmm4[6],xmm0[7],xmm4[7] 2705; 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] 2706; 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] 2707; SSSE3-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] 2708; SSSE3-NEXT: movzwl 2(%rdi), %eax 2709; SSSE3-NEXT: movq %rax, %rcx 2710; SSSE3-NEXT: shlq $48, %rcx 2711; SSSE3-NEXT: sarq $63, %rcx 2712; SSSE3-NEXT: movd %ecx, %xmm1 2713; SSSE3-NEXT: movq %rax, %rcx 2714; SSSE3-NEXT: shlq $56, %rcx 2715; SSSE3-NEXT: sarq $63, %rcx 2716; SSSE3-NEXT: movd %ecx, %xmm2 2717; 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] 2718; SSSE3-NEXT: movq %rax, %rcx 2719; SSSE3-NEXT: shlq $52, %rcx 2720; SSSE3-NEXT: sarq $63, %rcx 2721; SSSE3-NEXT: movd %ecx, %xmm3 2722; SSSE3-NEXT: movq %rax, %rcx 2723; SSSE3-NEXT: shlq $60, %rcx 2724; SSSE3-NEXT: sarq $63, %rcx 2725; SSSE3-NEXT: movd %ecx, %xmm1 2726; 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] 2727; 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] 2728; SSSE3-NEXT: movq %rax, %rcx 2729; SSSE3-NEXT: shlq $50, %rcx 2730; SSSE3-NEXT: sarq $63, %rcx 2731; SSSE3-NEXT: movd %ecx, %xmm2 2732; SSSE3-NEXT: movq %rax, %rcx 2733; SSSE3-NEXT: shlq $58, %rcx 2734; SSSE3-NEXT: sarq $63, %rcx 2735; SSSE3-NEXT: movd %ecx, %xmm3 2736; 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] 2737; SSSE3-NEXT: movq %rax, %rcx 2738; SSSE3-NEXT: shlq $54, %rcx 2739; SSSE3-NEXT: sarq $63, %rcx 2740; SSSE3-NEXT: movd %ecx, %xmm4 2741; SSSE3-NEXT: movq %rax, %rcx 2742; SSSE3-NEXT: shlq $62, %rcx 2743; SSSE3-NEXT: sarq $63, %rcx 2744; SSSE3-NEXT: movd %ecx, %xmm2 2745; 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] 2746; SSSE3-NEXT: punpcklbw {{.*#+}} xmm2 = xmm2[0],xmm3[0],xmm2[1],xmm3[1],xmm2[2],xmm3[2],xmm2[3],xmm3[3],xmm2[4],xmm3[4],xmm2[5],xmm3[5],xmm2[6],xmm3[6],xmm2[7],xmm3[7] 2747; 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] 2748; SSSE3-NEXT: movq %rax, %rcx 2749; SSSE3-NEXT: shlq $49, %rcx 2750; SSSE3-NEXT: sarq $63, %rcx 2751; SSSE3-NEXT: movd %ecx, %xmm1 2752; SSSE3-NEXT: movq %rax, %rcx 2753; SSSE3-NEXT: shlq $57, %rcx 2754; SSSE3-NEXT: sarq $63, %rcx 2755; SSSE3-NEXT: movd %ecx, %xmm4 2756; 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] 2757; SSSE3-NEXT: movq %rax, %rcx 2758; SSSE3-NEXT: shlq $53, %rcx 2759; SSSE3-NEXT: sarq $63, %rcx 2760; SSSE3-NEXT: movd %ecx, %xmm1 2761; SSSE3-NEXT: movq %rax, %rcx 2762; SSSE3-NEXT: shlq $61, %rcx 2763; SSSE3-NEXT: sarq $63, %rcx 2764; SSSE3-NEXT: movd %ecx, %xmm3 2765; 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] 2766; 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] 2767; SSSE3-NEXT: movq %rax, %rcx 2768; SSSE3-NEXT: shlq $51, %rcx 2769; SSSE3-NEXT: sarq $63, %rcx 2770; SSSE3-NEXT: movd %ecx, %xmm1 2771; SSSE3-NEXT: movq %rax, %rcx 2772; SSSE3-NEXT: shlq $59, %rcx 2773; SSSE3-NEXT: sarq $63, %rcx 2774; SSSE3-NEXT: movd %ecx, %xmm4 2775; 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] 2776; SSSE3-NEXT: movq %rax, %rcx 2777; SSSE3-NEXT: shlq $55, %rcx 2778; SSSE3-NEXT: sarq $63, %rcx 2779; SSSE3-NEXT: movd %ecx, %xmm5 2780; SSSE3-NEXT: shlq $63, %rax 2781; SSSE3-NEXT: sarq $63, %rax 2782; SSSE3-NEXT: movd %eax, %xmm1 2783; SSSE3-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] 2784; 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] 2785; 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] 2786; 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] 2787; SSSE3-NEXT: retq 2788; 2789; SSE41-LABEL: load_sext_32i1_to_32i8: 2790; SSE41: # BB#0: # %entry 2791; SSE41-NEXT: movzwl (%rdi), %eax 2792; SSE41-NEXT: movq %rax, %rcx 2793; SSE41-NEXT: shlq $62, %rcx 2794; SSE41-NEXT: sarq $63, %rcx 2795; SSE41-NEXT: movq %rax, %rdx 2796; SSE41-NEXT: shlq $63, %rdx 2797; SSE41-NEXT: sarq $63, %rdx 2798; SSE41-NEXT: movd %edx, %xmm0 2799; SSE41-NEXT: pinsrb $1, %ecx, %xmm0 2800; SSE41-NEXT: movq %rax, %rcx 2801; SSE41-NEXT: shlq $61, %rcx 2802; SSE41-NEXT: sarq $63, %rcx 2803; SSE41-NEXT: pinsrb $2, %ecx, %xmm0 2804; SSE41-NEXT: movq %rax, %rcx 2805; SSE41-NEXT: shlq $60, %rcx 2806; SSE41-NEXT: sarq $63, %rcx 2807; SSE41-NEXT: pinsrb $3, %ecx, %xmm0 2808; SSE41-NEXT: movq %rax, %rcx 2809; SSE41-NEXT: shlq $59, %rcx 2810; SSE41-NEXT: sarq $63, %rcx 2811; SSE41-NEXT: pinsrb $4, %ecx, %xmm0 2812; SSE41-NEXT: movq %rax, %rcx 2813; SSE41-NEXT: shlq $58, %rcx 2814; SSE41-NEXT: sarq $63, %rcx 2815; SSE41-NEXT: pinsrb $5, %ecx, %xmm0 2816; SSE41-NEXT: movq %rax, %rcx 2817; SSE41-NEXT: shlq $57, %rcx 2818; SSE41-NEXT: sarq $63, %rcx 2819; SSE41-NEXT: pinsrb $6, %ecx, %xmm0 2820; SSE41-NEXT: movq %rax, %rcx 2821; SSE41-NEXT: shlq $56, %rcx 2822; SSE41-NEXT: sarq $63, %rcx 2823; SSE41-NEXT: pinsrb $7, %ecx, %xmm0 2824; SSE41-NEXT: movq %rax, %rcx 2825; SSE41-NEXT: shlq $55, %rcx 2826; SSE41-NEXT: sarq $63, %rcx 2827; SSE41-NEXT: pinsrb $8, %ecx, %xmm0 2828; SSE41-NEXT: movq %rax, %rcx 2829; SSE41-NEXT: shlq $54, %rcx 2830; SSE41-NEXT: sarq $63, %rcx 2831; SSE41-NEXT: pinsrb $9, %ecx, %xmm0 2832; SSE41-NEXT: movq %rax, %rcx 2833; SSE41-NEXT: shlq $53, %rcx 2834; SSE41-NEXT: sarq $63, %rcx 2835; SSE41-NEXT: pinsrb $10, %ecx, %xmm0 2836; SSE41-NEXT: movq %rax, %rcx 2837; SSE41-NEXT: shlq $52, %rcx 2838; SSE41-NEXT: sarq $63, %rcx 2839; SSE41-NEXT: pinsrb $11, %ecx, %xmm0 2840; SSE41-NEXT: movq %rax, %rcx 2841; SSE41-NEXT: shlq $51, %rcx 2842; SSE41-NEXT: sarq $63, %rcx 2843; SSE41-NEXT: pinsrb $12, %ecx, %xmm0 2844; SSE41-NEXT: movq %rax, %rcx 2845; SSE41-NEXT: shlq $50, %rcx 2846; SSE41-NEXT: sarq $63, %rcx 2847; SSE41-NEXT: pinsrb $13, %ecx, %xmm0 2848; SSE41-NEXT: movq %rax, %rcx 2849; SSE41-NEXT: shlq $49, %rcx 2850; SSE41-NEXT: sarq $63, %rcx 2851; SSE41-NEXT: pinsrb $14, %ecx, %xmm0 2852; SSE41-NEXT: shlq $48, %rax 2853; SSE41-NEXT: sarq $63, %rax 2854; SSE41-NEXT: pinsrb $15, %eax, %xmm0 2855; SSE41-NEXT: movzwl 2(%rdi), %eax 2856; SSE41-NEXT: movq %rax, %rcx 2857; SSE41-NEXT: shlq $62, %rcx 2858; SSE41-NEXT: sarq $63, %rcx 2859; SSE41-NEXT: movq %rax, %rdx 2860; SSE41-NEXT: shlq $63, %rdx 2861; SSE41-NEXT: sarq $63, %rdx 2862; SSE41-NEXT: movd %edx, %xmm1 2863; SSE41-NEXT: pinsrb $1, %ecx, %xmm1 2864; SSE41-NEXT: movq %rax, %rcx 2865; SSE41-NEXT: shlq $61, %rcx 2866; SSE41-NEXT: sarq $63, %rcx 2867; SSE41-NEXT: pinsrb $2, %ecx, %xmm1 2868; SSE41-NEXT: movq %rax, %rcx 2869; SSE41-NEXT: shlq $60, %rcx 2870; SSE41-NEXT: sarq $63, %rcx 2871; SSE41-NEXT: pinsrb $3, %ecx, %xmm1 2872; SSE41-NEXT: movq %rax, %rcx 2873; SSE41-NEXT: shlq $59, %rcx 2874; SSE41-NEXT: sarq $63, %rcx 2875; SSE41-NEXT: pinsrb $4, %ecx, %xmm1 2876; SSE41-NEXT: movq %rax, %rcx 2877; SSE41-NEXT: shlq $58, %rcx 2878; SSE41-NEXT: sarq $63, %rcx 2879; SSE41-NEXT: pinsrb $5, %ecx, %xmm1 2880; SSE41-NEXT: movq %rax, %rcx 2881; SSE41-NEXT: shlq $57, %rcx 2882; SSE41-NEXT: sarq $63, %rcx 2883; SSE41-NEXT: pinsrb $6, %ecx, %xmm1 2884; SSE41-NEXT: movq %rax, %rcx 2885; SSE41-NEXT: shlq $56, %rcx 2886; SSE41-NEXT: sarq $63, %rcx 2887; SSE41-NEXT: pinsrb $7, %ecx, %xmm1 2888; SSE41-NEXT: movq %rax, %rcx 2889; SSE41-NEXT: shlq $55, %rcx 2890; SSE41-NEXT: sarq $63, %rcx 2891; SSE41-NEXT: pinsrb $8, %ecx, %xmm1 2892; SSE41-NEXT: movq %rax, %rcx 2893; SSE41-NEXT: shlq $54, %rcx 2894; SSE41-NEXT: sarq $63, %rcx 2895; SSE41-NEXT: pinsrb $9, %ecx, %xmm1 2896; SSE41-NEXT: movq %rax, %rcx 2897; SSE41-NEXT: shlq $53, %rcx 2898; SSE41-NEXT: sarq $63, %rcx 2899; SSE41-NEXT: pinsrb $10, %ecx, %xmm1 2900; SSE41-NEXT: movq %rax, %rcx 2901; SSE41-NEXT: shlq $52, %rcx 2902; SSE41-NEXT: sarq $63, %rcx 2903; SSE41-NEXT: pinsrb $11, %ecx, %xmm1 2904; SSE41-NEXT: movq %rax, %rcx 2905; SSE41-NEXT: shlq $51, %rcx 2906; SSE41-NEXT: sarq $63, %rcx 2907; SSE41-NEXT: pinsrb $12, %ecx, %xmm1 2908; SSE41-NEXT: movq %rax, %rcx 2909; SSE41-NEXT: shlq $50, %rcx 2910; SSE41-NEXT: sarq $63, %rcx 2911; SSE41-NEXT: pinsrb $13, %ecx, %xmm1 2912; SSE41-NEXT: movq %rax, %rcx 2913; SSE41-NEXT: shlq $49, %rcx 2914; SSE41-NEXT: sarq $63, %rcx 2915; SSE41-NEXT: pinsrb $14, %ecx, %xmm1 2916; SSE41-NEXT: shlq $48, %rax 2917; SSE41-NEXT: sarq $63, %rax 2918; SSE41-NEXT: pinsrb $15, %eax, %xmm1 2919; SSE41-NEXT: retq 2920; 2921; AVX1-LABEL: load_sext_32i1_to_32i8: 2922; AVX1: # BB#0: # %entry 2923; AVX1-NEXT: movl (%rdi), %eax 2924; AVX1-NEXT: movq %rax, %rcx 2925; AVX1-NEXT: shlq $46, %rcx 2926; AVX1-NEXT: sarq $63, %rcx 2927; AVX1-NEXT: movq %rax, %rdx 2928; AVX1-NEXT: shlq $47, %rdx 2929; AVX1-NEXT: sarq $63, %rdx 2930; AVX1-NEXT: vmovd %edx, %xmm0 2931; AVX1-NEXT: vpinsrb $1, %ecx, %xmm0, %xmm0 2932; AVX1-NEXT: movq %rax, %rcx 2933; AVX1-NEXT: shlq $45, %rcx 2934; AVX1-NEXT: sarq $63, %rcx 2935; AVX1-NEXT: vpinsrb $2, %ecx, %xmm0, %xmm0 2936; AVX1-NEXT: movq %rax, %rcx 2937; AVX1-NEXT: shlq $44, %rcx 2938; AVX1-NEXT: sarq $63, %rcx 2939; AVX1-NEXT: vpinsrb $3, %ecx, %xmm0, %xmm0 2940; AVX1-NEXT: movq %rax, %rcx 2941; AVX1-NEXT: shlq $43, %rcx 2942; AVX1-NEXT: sarq $63, %rcx 2943; AVX1-NEXT: vpinsrb $4, %ecx, %xmm0, %xmm0 2944; AVX1-NEXT: movq %rax, %rcx 2945; AVX1-NEXT: shlq $42, %rcx 2946; AVX1-NEXT: sarq $63, %rcx 2947; AVX1-NEXT: vpinsrb $5, %ecx, %xmm0, %xmm0 2948; AVX1-NEXT: movq %rax, %rcx 2949; AVX1-NEXT: shlq $41, %rcx 2950; AVX1-NEXT: sarq $63, %rcx 2951; AVX1-NEXT: vpinsrb $6, %ecx, %xmm0, %xmm0 2952; AVX1-NEXT: movq %rax, %rcx 2953; AVX1-NEXT: shlq $40, %rcx 2954; AVX1-NEXT: sarq $63, %rcx 2955; AVX1-NEXT: vpinsrb $7, %ecx, %xmm0, %xmm0 2956; AVX1-NEXT: movq %rax, %rcx 2957; AVX1-NEXT: shlq $39, %rcx 2958; AVX1-NEXT: sarq $63, %rcx 2959; AVX1-NEXT: vpinsrb $8, %ecx, %xmm0, %xmm0 2960; AVX1-NEXT: movq %rax, %rcx 2961; AVX1-NEXT: shlq $38, %rcx 2962; AVX1-NEXT: sarq $63, %rcx 2963; AVX1-NEXT: vpinsrb $9, %ecx, %xmm0, %xmm0 2964; AVX1-NEXT: movq %rax, %rcx 2965; AVX1-NEXT: shlq $37, %rcx 2966; AVX1-NEXT: sarq $63, %rcx 2967; AVX1-NEXT: vpinsrb $10, %ecx, %xmm0, %xmm0 2968; AVX1-NEXT: movq %rax, %rcx 2969; AVX1-NEXT: shlq $36, %rcx 2970; AVX1-NEXT: sarq $63, %rcx 2971; AVX1-NEXT: vpinsrb $11, %ecx, %xmm0, %xmm0 2972; AVX1-NEXT: movq %rax, %rcx 2973; AVX1-NEXT: shlq $35, %rcx 2974; AVX1-NEXT: sarq $63, %rcx 2975; AVX1-NEXT: vpinsrb $12, %ecx, %xmm0, %xmm0 2976; AVX1-NEXT: movq %rax, %rcx 2977; AVX1-NEXT: shlq $34, %rcx 2978; AVX1-NEXT: sarq $63, %rcx 2979; AVX1-NEXT: vpinsrb $13, %ecx, %xmm0, %xmm0 2980; AVX1-NEXT: movq %rax, %rcx 2981; AVX1-NEXT: shlq $33, %rcx 2982; AVX1-NEXT: sarq $63, %rcx 2983; AVX1-NEXT: vpinsrb $14, %ecx, %xmm0, %xmm0 2984; AVX1-NEXT: movq %rax, %rcx 2985; AVX1-NEXT: shlq $32, %rcx 2986; AVX1-NEXT: sarq $63, %rcx 2987; AVX1-NEXT: vpinsrb $15, %ecx, %xmm0, %xmm0 2988; AVX1-NEXT: movq %rax, %rcx 2989; AVX1-NEXT: shlq $62, %rcx 2990; AVX1-NEXT: sarq $63, %rcx 2991; AVX1-NEXT: movq %rax, %rdx 2992; AVX1-NEXT: shlq $63, %rdx 2993; AVX1-NEXT: sarq $63, %rdx 2994; AVX1-NEXT: vmovd %edx, %xmm1 2995; AVX1-NEXT: vpinsrb $1, %ecx, %xmm1, %xmm1 2996; AVX1-NEXT: movq %rax, %rcx 2997; AVX1-NEXT: shlq $61, %rcx 2998; AVX1-NEXT: sarq $63, %rcx 2999; AVX1-NEXT: vpinsrb $2, %ecx, %xmm1, %xmm1 3000; AVX1-NEXT: movq %rax, %rcx 3001; AVX1-NEXT: shlq $60, %rcx 3002; AVX1-NEXT: sarq $63, %rcx 3003; AVX1-NEXT: vpinsrb $3, %ecx, %xmm1, %xmm1 3004; AVX1-NEXT: movq %rax, %rcx 3005; AVX1-NEXT: shlq $59, %rcx 3006; AVX1-NEXT: sarq $63, %rcx 3007; AVX1-NEXT: vpinsrb $4, %ecx, %xmm1, %xmm1 3008; AVX1-NEXT: movq %rax, %rcx 3009; AVX1-NEXT: shlq $58, %rcx 3010; AVX1-NEXT: sarq $63, %rcx 3011; AVX1-NEXT: vpinsrb $5, %ecx, %xmm1, %xmm1 3012; AVX1-NEXT: movq %rax, %rcx 3013; AVX1-NEXT: shlq $57, %rcx 3014; AVX1-NEXT: sarq $63, %rcx 3015; AVX1-NEXT: vpinsrb $6, %ecx, %xmm1, %xmm1 3016; AVX1-NEXT: movq %rax, %rcx 3017; AVX1-NEXT: shlq $56, %rcx 3018; AVX1-NEXT: sarq $63, %rcx 3019; AVX1-NEXT: vpinsrb $7, %ecx, %xmm1, %xmm1 3020; AVX1-NEXT: movq %rax, %rcx 3021; AVX1-NEXT: shlq $55, %rcx 3022; AVX1-NEXT: sarq $63, %rcx 3023; AVX1-NEXT: vpinsrb $8, %ecx, %xmm1, %xmm1 3024; AVX1-NEXT: movq %rax, %rcx 3025; AVX1-NEXT: shlq $54, %rcx 3026; AVX1-NEXT: sarq $63, %rcx 3027; AVX1-NEXT: vpinsrb $9, %ecx, %xmm1, %xmm1 3028; AVX1-NEXT: movq %rax, %rcx 3029; AVX1-NEXT: shlq $53, %rcx 3030; AVX1-NEXT: sarq $63, %rcx 3031; AVX1-NEXT: vpinsrb $10, %ecx, %xmm1, %xmm1 3032; AVX1-NEXT: movq %rax, %rcx 3033; AVX1-NEXT: shlq $52, %rcx 3034; AVX1-NEXT: sarq $63, %rcx 3035; AVX1-NEXT: vpinsrb $11, %ecx, %xmm1, %xmm1 3036; AVX1-NEXT: movq %rax, %rcx 3037; AVX1-NEXT: shlq $51, %rcx 3038; AVX1-NEXT: sarq $63, %rcx 3039; AVX1-NEXT: vpinsrb $12, %ecx, %xmm1, %xmm1 3040; AVX1-NEXT: movq %rax, %rcx 3041; AVX1-NEXT: shlq $50, %rcx 3042; AVX1-NEXT: sarq $63, %rcx 3043; AVX1-NEXT: vpinsrb $13, %ecx, %xmm1, %xmm1 3044; AVX1-NEXT: movq %rax, %rcx 3045; AVX1-NEXT: shlq $49, %rcx 3046; AVX1-NEXT: sarq $63, %rcx 3047; AVX1-NEXT: vpinsrb $14, %ecx, %xmm1, %xmm1 3048; AVX1-NEXT: shlq $48, %rax 3049; AVX1-NEXT: sarq $63, %rax 3050; AVX1-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1 3051; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3052; AVX1-NEXT: retq 3053; 3054; AVX2-LABEL: load_sext_32i1_to_32i8: 3055; AVX2: # BB#0: # %entry 3056; AVX2-NEXT: movl (%rdi), %eax 3057; AVX2-NEXT: movq %rax, %rcx 3058; AVX2-NEXT: shlq $46, %rcx 3059; AVX2-NEXT: sarq $63, %rcx 3060; AVX2-NEXT: movq %rax, %rdx 3061; AVX2-NEXT: shlq $47, %rdx 3062; AVX2-NEXT: sarq $63, %rdx 3063; AVX2-NEXT: vmovd %edx, %xmm0 3064; AVX2-NEXT: vpinsrb $1, %ecx, %xmm0, %xmm0 3065; AVX2-NEXT: movq %rax, %rcx 3066; AVX2-NEXT: shlq $45, %rcx 3067; AVX2-NEXT: sarq $63, %rcx 3068; AVX2-NEXT: vpinsrb $2, %ecx, %xmm0, %xmm0 3069; AVX2-NEXT: movq %rax, %rcx 3070; AVX2-NEXT: shlq $44, %rcx 3071; AVX2-NEXT: sarq $63, %rcx 3072; AVX2-NEXT: vpinsrb $3, %ecx, %xmm0, %xmm0 3073; AVX2-NEXT: movq %rax, %rcx 3074; AVX2-NEXT: shlq $43, %rcx 3075; AVX2-NEXT: sarq $63, %rcx 3076; AVX2-NEXT: vpinsrb $4, %ecx, %xmm0, %xmm0 3077; AVX2-NEXT: movq %rax, %rcx 3078; AVX2-NEXT: shlq $42, %rcx 3079; AVX2-NEXT: sarq $63, %rcx 3080; AVX2-NEXT: vpinsrb $5, %ecx, %xmm0, %xmm0 3081; AVX2-NEXT: movq %rax, %rcx 3082; AVX2-NEXT: shlq $41, %rcx 3083; AVX2-NEXT: sarq $63, %rcx 3084; AVX2-NEXT: vpinsrb $6, %ecx, %xmm0, %xmm0 3085; AVX2-NEXT: movq %rax, %rcx 3086; AVX2-NEXT: shlq $40, %rcx 3087; AVX2-NEXT: sarq $63, %rcx 3088; AVX2-NEXT: vpinsrb $7, %ecx, %xmm0, %xmm0 3089; AVX2-NEXT: movq %rax, %rcx 3090; AVX2-NEXT: shlq $39, %rcx 3091; AVX2-NEXT: sarq $63, %rcx 3092; AVX2-NEXT: vpinsrb $8, %ecx, %xmm0, %xmm0 3093; AVX2-NEXT: movq %rax, %rcx 3094; AVX2-NEXT: shlq $38, %rcx 3095; AVX2-NEXT: sarq $63, %rcx 3096; AVX2-NEXT: vpinsrb $9, %ecx, %xmm0, %xmm0 3097; AVX2-NEXT: movq %rax, %rcx 3098; AVX2-NEXT: shlq $37, %rcx 3099; AVX2-NEXT: sarq $63, %rcx 3100; AVX2-NEXT: vpinsrb $10, %ecx, %xmm0, %xmm0 3101; AVX2-NEXT: movq %rax, %rcx 3102; AVX2-NEXT: shlq $36, %rcx 3103; AVX2-NEXT: sarq $63, %rcx 3104; AVX2-NEXT: vpinsrb $11, %ecx, %xmm0, %xmm0 3105; AVX2-NEXT: movq %rax, %rcx 3106; AVX2-NEXT: shlq $35, %rcx 3107; AVX2-NEXT: sarq $63, %rcx 3108; AVX2-NEXT: vpinsrb $12, %ecx, %xmm0, %xmm0 3109; AVX2-NEXT: movq %rax, %rcx 3110; AVX2-NEXT: shlq $34, %rcx 3111; AVX2-NEXT: sarq $63, %rcx 3112; AVX2-NEXT: vpinsrb $13, %ecx, %xmm0, %xmm0 3113; AVX2-NEXT: movq %rax, %rcx 3114; AVX2-NEXT: shlq $33, %rcx 3115; AVX2-NEXT: sarq $63, %rcx 3116; AVX2-NEXT: vpinsrb $14, %ecx, %xmm0, %xmm0 3117; AVX2-NEXT: movq %rax, %rcx 3118; AVX2-NEXT: shlq $32, %rcx 3119; AVX2-NEXT: sarq $63, %rcx 3120; AVX2-NEXT: vpinsrb $15, %ecx, %xmm0, %xmm0 3121; AVX2-NEXT: movq %rax, %rcx 3122; AVX2-NEXT: shlq $62, %rcx 3123; AVX2-NEXT: sarq $63, %rcx 3124; AVX2-NEXT: movq %rax, %rdx 3125; AVX2-NEXT: shlq $63, %rdx 3126; AVX2-NEXT: sarq $63, %rdx 3127; AVX2-NEXT: vmovd %edx, %xmm1 3128; AVX2-NEXT: vpinsrb $1, %ecx, %xmm1, %xmm1 3129; AVX2-NEXT: movq %rax, %rcx 3130; AVX2-NEXT: shlq $61, %rcx 3131; AVX2-NEXT: sarq $63, %rcx 3132; AVX2-NEXT: vpinsrb $2, %ecx, %xmm1, %xmm1 3133; AVX2-NEXT: movq %rax, %rcx 3134; AVX2-NEXT: shlq $60, %rcx 3135; AVX2-NEXT: sarq $63, %rcx 3136; AVX2-NEXT: vpinsrb $3, %ecx, %xmm1, %xmm1 3137; AVX2-NEXT: movq %rax, %rcx 3138; AVX2-NEXT: shlq $59, %rcx 3139; AVX2-NEXT: sarq $63, %rcx 3140; AVX2-NEXT: vpinsrb $4, %ecx, %xmm1, %xmm1 3141; AVX2-NEXT: movq %rax, %rcx 3142; AVX2-NEXT: shlq $58, %rcx 3143; AVX2-NEXT: sarq $63, %rcx 3144; AVX2-NEXT: vpinsrb $5, %ecx, %xmm1, %xmm1 3145; AVX2-NEXT: movq %rax, %rcx 3146; AVX2-NEXT: shlq $57, %rcx 3147; AVX2-NEXT: sarq $63, %rcx 3148; AVX2-NEXT: vpinsrb $6, %ecx, %xmm1, %xmm1 3149; AVX2-NEXT: movq %rax, %rcx 3150; AVX2-NEXT: shlq $56, %rcx 3151; AVX2-NEXT: sarq $63, %rcx 3152; AVX2-NEXT: vpinsrb $7, %ecx, %xmm1, %xmm1 3153; AVX2-NEXT: movq %rax, %rcx 3154; AVX2-NEXT: shlq $55, %rcx 3155; AVX2-NEXT: sarq $63, %rcx 3156; AVX2-NEXT: vpinsrb $8, %ecx, %xmm1, %xmm1 3157; AVX2-NEXT: movq %rax, %rcx 3158; AVX2-NEXT: shlq $54, %rcx 3159; AVX2-NEXT: sarq $63, %rcx 3160; AVX2-NEXT: vpinsrb $9, %ecx, %xmm1, %xmm1 3161; AVX2-NEXT: movq %rax, %rcx 3162; AVX2-NEXT: shlq $53, %rcx 3163; AVX2-NEXT: sarq $63, %rcx 3164; AVX2-NEXT: vpinsrb $10, %ecx, %xmm1, %xmm1 3165; AVX2-NEXT: movq %rax, %rcx 3166; AVX2-NEXT: shlq $52, %rcx 3167; AVX2-NEXT: sarq $63, %rcx 3168; AVX2-NEXT: vpinsrb $11, %ecx, %xmm1, %xmm1 3169; AVX2-NEXT: movq %rax, %rcx 3170; AVX2-NEXT: shlq $51, %rcx 3171; AVX2-NEXT: sarq $63, %rcx 3172; AVX2-NEXT: vpinsrb $12, %ecx, %xmm1, %xmm1 3173; AVX2-NEXT: movq %rax, %rcx 3174; AVX2-NEXT: shlq $50, %rcx 3175; AVX2-NEXT: sarq $63, %rcx 3176; AVX2-NEXT: vpinsrb $13, %ecx, %xmm1, %xmm1 3177; AVX2-NEXT: movq %rax, %rcx 3178; AVX2-NEXT: shlq $49, %rcx 3179; AVX2-NEXT: sarq $63, %rcx 3180; AVX2-NEXT: vpinsrb $14, %ecx, %xmm1, %xmm1 3181; AVX2-NEXT: shlq $48, %rax 3182; AVX2-NEXT: sarq $63, %rax 3183; AVX2-NEXT: vpinsrb $15, %eax, %xmm1, %xmm1 3184; AVX2-NEXT: vinserti128 $1, %xmm0, %ymm1, %ymm0 3185; AVX2-NEXT: retq 3186; 3187; X32-SSE41-LABEL: load_sext_32i1_to_32i8: 3188; X32-SSE41: # BB#0: # %entry 3189; X32-SSE41-NEXT: pushl %esi 3190; X32-SSE41-NEXT: .Ltmp0: 3191; X32-SSE41-NEXT: .cfi_def_cfa_offset 8 3192; X32-SSE41-NEXT: .Ltmp1: 3193; X32-SSE41-NEXT: .cfi_offset %esi, -8 3194; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3195; X32-SSE41-NEXT: movl (%eax), %ecx 3196; X32-SSE41-NEXT: movl %ecx, %edx 3197; X32-SSE41-NEXT: shll $30, %edx 3198; X32-SSE41-NEXT: sarl $31, %edx 3199; X32-SSE41-NEXT: movl %ecx, %esi 3200; X32-SSE41-NEXT: shll $31, %esi 3201; X32-SSE41-NEXT: sarl $31, %esi 3202; X32-SSE41-NEXT: movd %esi, %xmm0 3203; X32-SSE41-NEXT: pinsrb $1, %edx, %xmm0 3204; X32-SSE41-NEXT: movl %ecx, %edx 3205; X32-SSE41-NEXT: shll $29, %edx 3206; X32-SSE41-NEXT: sarl $31, %edx 3207; X32-SSE41-NEXT: pinsrb $2, %edx, %xmm0 3208; X32-SSE41-NEXT: movl %ecx, %edx 3209; X32-SSE41-NEXT: shll $28, %edx 3210; X32-SSE41-NEXT: sarl $31, %edx 3211; X32-SSE41-NEXT: pinsrb $3, %edx, %xmm0 3212; X32-SSE41-NEXT: movl %ecx, %edx 3213; X32-SSE41-NEXT: shll $27, %edx 3214; X32-SSE41-NEXT: sarl $31, %edx 3215; X32-SSE41-NEXT: pinsrb $4, %edx, %xmm0 3216; X32-SSE41-NEXT: movl %ecx, %edx 3217; X32-SSE41-NEXT: shll $26, %edx 3218; X32-SSE41-NEXT: sarl $31, %edx 3219; X32-SSE41-NEXT: pinsrb $5, %edx, %xmm0 3220; X32-SSE41-NEXT: movl %ecx, %edx 3221; X32-SSE41-NEXT: shll $25, %edx 3222; X32-SSE41-NEXT: sarl $31, %edx 3223; X32-SSE41-NEXT: pinsrb $6, %edx, %xmm0 3224; X32-SSE41-NEXT: movl %ecx, %edx 3225; X32-SSE41-NEXT: shll $24, %edx 3226; X32-SSE41-NEXT: sarl $31, %edx 3227; X32-SSE41-NEXT: pinsrb $7, %edx, %xmm0 3228; X32-SSE41-NEXT: movl %ecx, %edx 3229; X32-SSE41-NEXT: shll $23, %edx 3230; X32-SSE41-NEXT: sarl $31, %edx 3231; X32-SSE41-NEXT: pinsrb $8, %edx, %xmm0 3232; X32-SSE41-NEXT: movl %ecx, %edx 3233; X32-SSE41-NEXT: shll $22, %edx 3234; X32-SSE41-NEXT: sarl $31, %edx 3235; X32-SSE41-NEXT: pinsrb $9, %edx, %xmm0 3236; X32-SSE41-NEXT: movl %ecx, %edx 3237; X32-SSE41-NEXT: shll $21, %edx 3238; X32-SSE41-NEXT: sarl $31, %edx 3239; X32-SSE41-NEXT: pinsrb $10, %edx, %xmm0 3240; X32-SSE41-NEXT: movl %ecx, %edx 3241; X32-SSE41-NEXT: shll $20, %edx 3242; X32-SSE41-NEXT: sarl $31, %edx 3243; X32-SSE41-NEXT: pinsrb $11, %edx, %xmm0 3244; X32-SSE41-NEXT: movl %ecx, %edx 3245; X32-SSE41-NEXT: shll $19, %edx 3246; X32-SSE41-NEXT: sarl $31, %edx 3247; X32-SSE41-NEXT: pinsrb $12, %edx, %xmm0 3248; X32-SSE41-NEXT: movl %ecx, %edx 3249; X32-SSE41-NEXT: shll $18, %edx 3250; X32-SSE41-NEXT: sarl $31, %edx 3251; X32-SSE41-NEXT: pinsrb $13, %edx, %xmm0 3252; X32-SSE41-NEXT: movl %ecx, %edx 3253; X32-SSE41-NEXT: shll $17, %edx 3254; X32-SSE41-NEXT: sarl $31, %edx 3255; X32-SSE41-NEXT: pinsrb $14, %edx, %xmm0 3256; X32-SSE41-NEXT: shll $16, %ecx 3257; X32-SSE41-NEXT: sarl $31, %ecx 3258; X32-SSE41-NEXT: pinsrb $15, %ecx, %xmm0 3259; X32-SSE41-NEXT: movzwl 2(%eax), %eax 3260; X32-SSE41-NEXT: movl %eax, %ecx 3261; X32-SSE41-NEXT: shll $30, %ecx 3262; X32-SSE41-NEXT: sarl $31, %ecx 3263; X32-SSE41-NEXT: movl %eax, %edx 3264; X32-SSE41-NEXT: shll $31, %edx 3265; X32-SSE41-NEXT: sarl $31, %edx 3266; X32-SSE41-NEXT: movd %edx, %xmm1 3267; X32-SSE41-NEXT: pinsrb $1, %ecx, %xmm1 3268; X32-SSE41-NEXT: movl %eax, %ecx 3269; X32-SSE41-NEXT: shll $29, %ecx 3270; X32-SSE41-NEXT: sarl $31, %ecx 3271; X32-SSE41-NEXT: pinsrb $2, %ecx, %xmm1 3272; X32-SSE41-NEXT: movl %eax, %ecx 3273; X32-SSE41-NEXT: shll $28, %ecx 3274; X32-SSE41-NEXT: sarl $31, %ecx 3275; X32-SSE41-NEXT: pinsrb $3, %ecx, %xmm1 3276; X32-SSE41-NEXT: movl %eax, %ecx 3277; X32-SSE41-NEXT: shll $27, %ecx 3278; X32-SSE41-NEXT: sarl $31, %ecx 3279; X32-SSE41-NEXT: pinsrb $4, %ecx, %xmm1 3280; X32-SSE41-NEXT: movl %eax, %ecx 3281; X32-SSE41-NEXT: shll $26, %ecx 3282; X32-SSE41-NEXT: sarl $31, %ecx 3283; X32-SSE41-NEXT: pinsrb $5, %ecx, %xmm1 3284; X32-SSE41-NEXT: movl %eax, %ecx 3285; X32-SSE41-NEXT: shll $25, %ecx 3286; X32-SSE41-NEXT: sarl $31, %ecx 3287; X32-SSE41-NEXT: pinsrb $6, %ecx, %xmm1 3288; X32-SSE41-NEXT: movl %eax, %ecx 3289; X32-SSE41-NEXT: shll $24, %ecx 3290; X32-SSE41-NEXT: sarl $31, %ecx 3291; X32-SSE41-NEXT: pinsrb $7, %ecx, %xmm1 3292; X32-SSE41-NEXT: movl %eax, %ecx 3293; X32-SSE41-NEXT: shll $23, %ecx 3294; X32-SSE41-NEXT: sarl $31, %ecx 3295; X32-SSE41-NEXT: pinsrb $8, %ecx, %xmm1 3296; X32-SSE41-NEXT: movl %eax, %ecx 3297; X32-SSE41-NEXT: shll $22, %ecx 3298; X32-SSE41-NEXT: sarl $31, %ecx 3299; X32-SSE41-NEXT: pinsrb $9, %ecx, %xmm1 3300; X32-SSE41-NEXT: movl %eax, %ecx 3301; X32-SSE41-NEXT: shll $21, %ecx 3302; X32-SSE41-NEXT: sarl $31, %ecx 3303; X32-SSE41-NEXT: pinsrb $10, %ecx, %xmm1 3304; X32-SSE41-NEXT: movl %eax, %ecx 3305; X32-SSE41-NEXT: shll $20, %ecx 3306; X32-SSE41-NEXT: sarl $31, %ecx 3307; X32-SSE41-NEXT: pinsrb $11, %ecx, %xmm1 3308; X32-SSE41-NEXT: movl %eax, %ecx 3309; X32-SSE41-NEXT: shll $19, %ecx 3310; X32-SSE41-NEXT: sarl $31, %ecx 3311; X32-SSE41-NEXT: pinsrb $12, %ecx, %xmm1 3312; X32-SSE41-NEXT: movl %eax, %ecx 3313; X32-SSE41-NEXT: shll $18, %ecx 3314; X32-SSE41-NEXT: sarl $31, %ecx 3315; X32-SSE41-NEXT: pinsrb $13, %ecx, %xmm1 3316; X32-SSE41-NEXT: movl %eax, %ecx 3317; X32-SSE41-NEXT: shll $17, %ecx 3318; X32-SSE41-NEXT: sarl $31, %ecx 3319; X32-SSE41-NEXT: pinsrb $14, %ecx, %xmm1 3320; X32-SSE41-NEXT: shll $16, %eax 3321; X32-SSE41-NEXT: sarl $31, %eax 3322; X32-SSE41-NEXT: pinsrb $15, %eax, %xmm1 3323; X32-SSE41-NEXT: popl %esi 3324; X32-SSE41-NEXT: retl 3325entry: 3326 %X = load <32 x i1>, <32 x i1>* %ptr 3327 %Y = sext <32 x i1> %X to <32 x i8> 3328 ret <32 x i8> %Y 3329} 3330 3331define <16 x i16> @load_sext_16i8_to_16i16(<16 x i8> *%ptr) { 3332; SSE2-LABEL: load_sext_16i8_to_16i16: 3333; SSE2: # BB#0: # %entry 3334; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3335; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 3336; SSE2-NEXT: psraw $8, %xmm0 3337; SSE2-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 3338; SSE2-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 3339; SSE2-NEXT: psraw $8, %xmm1 3340; SSE2-NEXT: retq 3341; 3342; SSSE3-LABEL: load_sext_16i8_to_16i16: 3343; SSSE3: # BB#0: # %entry 3344; SSSE3-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3345; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 3346; SSSE3-NEXT: psraw $8, %xmm0 3347; SSSE3-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 3348; SSSE3-NEXT: punpcklbw {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 3349; SSSE3-NEXT: psraw $8, %xmm1 3350; SSSE3-NEXT: retq 3351; 3352; SSE41-LABEL: load_sext_16i8_to_16i16: 3353; SSE41: # BB#0: # %entry 3354; SSE41-NEXT: pmovsxbw (%rdi), %xmm0 3355; SSE41-NEXT: pmovsxbw 8(%rdi), %xmm1 3356; SSE41-NEXT: retq 3357; 3358; AVX1-LABEL: load_sext_16i8_to_16i16: 3359; AVX1: # BB#0: # %entry 3360; AVX1-NEXT: vpmovsxbw (%rdi), %xmm0 3361; AVX1-NEXT: vpmovsxbw 8(%rdi), %xmm1 3362; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 3363; AVX1-NEXT: retq 3364; 3365; AVX2-LABEL: load_sext_16i8_to_16i16: 3366; AVX2: # BB#0: # %entry 3367; AVX2-NEXT: vpmovsxbw (%rdi), %ymm0 3368; AVX2-NEXT: retq 3369; 3370; X32-SSE41-LABEL: load_sext_16i8_to_16i16: 3371; X32-SSE41: # BB#0: # %entry 3372; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3373; X32-SSE41-NEXT: pmovsxbw (%eax), %xmm0 3374; X32-SSE41-NEXT: pmovsxbw 8(%eax), %xmm1 3375; X32-SSE41-NEXT: retl 3376entry: 3377 %X = load <16 x i8>, <16 x i8>* %ptr 3378 %Y = sext <16 x i8> %X to <16 x i16> 3379 ret <16 x i16> %Y 3380} 3381 3382define <2 x i64> @load_sext_2i16_to_2i64(<2 x i16> *%ptr) { 3383; SSE2-LABEL: load_sext_2i16_to_2i64: 3384; SSE2: # BB#0: # %entry 3385; SSE2-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 3386; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 3387; SSE2-NEXT: movdqa %xmm0, %xmm1 3388; SSE2-NEXT: psrad $31, %xmm1 3389; SSE2-NEXT: psrad $16, %xmm0 3390; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 3391; SSE2-NEXT: retq 3392; 3393; SSSE3-LABEL: load_sext_2i16_to_2i64: 3394; SSSE3: # BB#0: # %entry 3395; SSSE3-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero 3396; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 3397; SSSE3-NEXT: movdqa %xmm0, %xmm1 3398; SSSE3-NEXT: psrad $31, %xmm1 3399; SSSE3-NEXT: psrad $16, %xmm0 3400; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 3401; SSSE3-NEXT: retq 3402; 3403; SSE41-LABEL: load_sext_2i16_to_2i64: 3404; SSE41: # BB#0: # %entry 3405; SSE41-NEXT: pmovsxwq (%rdi), %xmm0 3406; SSE41-NEXT: retq 3407; 3408; AVX-LABEL: load_sext_2i16_to_2i64: 3409; AVX: # BB#0: # %entry 3410; AVX-NEXT: vpmovsxwq (%rdi), %xmm0 3411; AVX-NEXT: retq 3412; 3413; X32-SSE41-LABEL: load_sext_2i16_to_2i64: 3414; X32-SSE41: # BB#0: # %entry 3415; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3416; X32-SSE41-NEXT: pmovsxwq (%eax), %xmm0 3417; X32-SSE41-NEXT: retl 3418entry: 3419 %X = load <2 x i16>, <2 x i16>* %ptr 3420 %Y = sext <2 x i16> %X to <2 x i64> 3421 ret <2 x i64> %Y 3422} 3423 3424define <4 x i32> @load_sext_4i16_to_4i32(<4 x i16> *%ptr) { 3425; SSE2-LABEL: load_sext_4i16_to_4i32: 3426; SSE2: # BB#0: # %entry 3427; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3428; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 3429; SSE2-NEXT: psrad $16, %xmm0 3430; SSE2-NEXT: retq 3431; 3432; SSSE3-LABEL: load_sext_4i16_to_4i32: 3433; SSSE3: # BB#0: # %entry 3434; SSSE3-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3435; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 3436; SSSE3-NEXT: psrad $16, %xmm0 3437; SSSE3-NEXT: retq 3438; 3439; SSE41-LABEL: load_sext_4i16_to_4i32: 3440; SSE41: # BB#0: # %entry 3441; SSE41-NEXT: pmovsxwd (%rdi), %xmm0 3442; SSE41-NEXT: retq 3443; 3444; AVX-LABEL: load_sext_4i16_to_4i32: 3445; AVX: # BB#0: # %entry 3446; AVX-NEXT: vpmovsxwd (%rdi), %xmm0 3447; AVX-NEXT: retq 3448; 3449; X32-SSE41-LABEL: load_sext_4i16_to_4i32: 3450; X32-SSE41: # BB#0: # %entry 3451; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3452; X32-SSE41-NEXT: pmovsxwd (%eax), %xmm0 3453; X32-SSE41-NEXT: retl 3454entry: 3455 %X = load <4 x i16>, <4 x i16>* %ptr 3456 %Y = sext <4 x i16> %X to <4 x i32> 3457 ret <4 x i32> %Y 3458} 3459 3460define <4 x i64> @load_sext_4i16_to_4i64(<4 x i16> *%ptr) { 3461; SSE2-LABEL: load_sext_4i16_to_4i64: 3462; SSE2: # BB#0: # %entry 3463; SSE2-NEXT: movswq 2(%rdi), %rax 3464; SSE2-NEXT: movd %rax, %xmm1 3465; SSE2-NEXT: movswq (%rdi), %rax 3466; SSE2-NEXT: movd %rax, %xmm0 3467; SSE2-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3468; SSE2-NEXT: movswq 6(%rdi), %rax 3469; SSE2-NEXT: movd %rax, %xmm2 3470; SSE2-NEXT: movswq 4(%rdi), %rax 3471; SSE2-NEXT: movd %rax, %xmm1 3472; SSE2-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0] 3473; SSE2-NEXT: retq 3474; 3475; SSSE3-LABEL: load_sext_4i16_to_4i64: 3476; SSSE3: # BB#0: # %entry 3477; SSSE3-NEXT: movswq 2(%rdi), %rax 3478; SSSE3-NEXT: movd %rax, %xmm1 3479; SSSE3-NEXT: movswq (%rdi), %rax 3480; SSSE3-NEXT: movd %rax, %xmm0 3481; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm1[0] 3482; SSSE3-NEXT: movswq 6(%rdi), %rax 3483; SSSE3-NEXT: movd %rax, %xmm2 3484; SSSE3-NEXT: movswq 4(%rdi), %rax 3485; SSSE3-NEXT: movd %rax, %xmm1 3486; SSSE3-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm2[0] 3487; SSSE3-NEXT: retq 3488; 3489; SSE41-LABEL: load_sext_4i16_to_4i64: 3490; SSE41: # BB#0: # %entry 3491; SSE41-NEXT: pmovsxwq (%rdi), %xmm0 3492; SSE41-NEXT: pmovsxwq 4(%rdi), %xmm1 3493; SSE41-NEXT: retq 3494; 3495; AVX1-LABEL: load_sext_4i16_to_4i64: 3496; AVX1: # BB#0: # %entry 3497; AVX1-NEXT: vpmovsxwd (%rdi), %xmm0 3498; AVX1-NEXT: vpmovsxdq %xmm0, %xmm1 3499; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3500; AVX1-NEXT: vpmovsxdq %xmm0, %xmm0 3501; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3502; AVX1-NEXT: retq 3503; 3504; AVX2-LABEL: load_sext_4i16_to_4i64: 3505; AVX2: # BB#0: # %entry 3506; AVX2-NEXT: vpmovsxwq (%rdi), %ymm0 3507; AVX2-NEXT: retq 3508; 3509; X32-SSE41-LABEL: load_sext_4i16_to_4i64: 3510; X32-SSE41: # BB#0: # %entry 3511; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3512; X32-SSE41-NEXT: pmovsxwq (%eax), %xmm0 3513; X32-SSE41-NEXT: pmovsxwq 4(%eax), %xmm1 3514; X32-SSE41-NEXT: retl 3515entry: 3516 %X = load <4 x i16>, <4 x i16>* %ptr 3517 %Y = sext <4 x i16> %X to <4 x i64> 3518 ret <4 x i64> %Y 3519} 3520 3521define <8 x i32> @load_sext_8i16_to_8i32(<8 x i16> *%ptr) { 3522; SSE2-LABEL: load_sext_8i16_to_8i32: 3523; SSE2: # BB#0: # %entry 3524; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3525; SSE2-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 3526; SSE2-NEXT: psrad $16, %xmm0 3527; SSE2-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 3528; SSE2-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3] 3529; SSE2-NEXT: psrad $16, %xmm1 3530; SSE2-NEXT: retq 3531; 3532; SSSE3-LABEL: load_sext_8i16_to_8i32: 3533; SSSE3: # BB#0: # %entry 3534; SSSE3-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3535; SSSE3-NEXT: punpcklwd {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3] 3536; SSSE3-NEXT: psrad $16, %xmm0 3537; SSSE3-NEXT: movq {{.*#+}} xmm1 = mem[0],zero 3538; SSSE3-NEXT: punpcklwd {{.*#+}} xmm1 = xmm1[0,0,1,1,2,2,3,3] 3539; SSSE3-NEXT: psrad $16, %xmm1 3540; SSSE3-NEXT: retq 3541; 3542; SSE41-LABEL: load_sext_8i16_to_8i32: 3543; SSE41: # BB#0: # %entry 3544; SSE41-NEXT: pmovsxwd (%rdi), %xmm0 3545; SSE41-NEXT: pmovsxwd 8(%rdi), %xmm1 3546; SSE41-NEXT: retq 3547; 3548; AVX1-LABEL: load_sext_8i16_to_8i32: 3549; AVX1: # BB#0: # %entry 3550; AVX1-NEXT: vpmovsxwd (%rdi), %xmm0 3551; AVX1-NEXT: vpmovsxwd 8(%rdi), %xmm1 3552; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 3553; AVX1-NEXT: retq 3554; 3555; AVX2-LABEL: load_sext_8i16_to_8i32: 3556; AVX2: # BB#0: # %entry 3557; AVX2-NEXT: vpmovsxwd (%rdi), %ymm0 3558; AVX2-NEXT: retq 3559; 3560; X32-SSE41-LABEL: load_sext_8i16_to_8i32: 3561; X32-SSE41: # BB#0: # %entry 3562; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3563; X32-SSE41-NEXT: pmovsxwd (%eax), %xmm0 3564; X32-SSE41-NEXT: pmovsxwd 8(%eax), %xmm1 3565; X32-SSE41-NEXT: retl 3566entry: 3567 %X = load <8 x i16>, <8 x i16>* %ptr 3568 %Y = sext <8 x i16> %X to <8 x i32> 3569 ret <8 x i32> %Y 3570} 3571 3572define <2 x i64> @load_sext_2i32_to_2i64(<2 x i32> *%ptr) { 3573; SSE2-LABEL: load_sext_2i32_to_2i64: 3574; SSE2: # BB#0: # %entry 3575; SSE2-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3576; SSE2-NEXT: movdqa %xmm0, %xmm1 3577; SSE2-NEXT: psrad $31, %xmm1 3578; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 3579; SSE2-NEXT: retq 3580; 3581; SSSE3-LABEL: load_sext_2i32_to_2i64: 3582; SSSE3: # BB#0: # %entry 3583; SSSE3-NEXT: movq {{.*#+}} xmm0 = mem[0],zero 3584; SSSE3-NEXT: movdqa %xmm0, %xmm1 3585; SSSE3-NEXT: psrad $31, %xmm1 3586; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1] 3587; SSSE3-NEXT: retq 3588; 3589; SSE41-LABEL: load_sext_2i32_to_2i64: 3590; SSE41: # BB#0: # %entry 3591; SSE41-NEXT: pmovsxdq (%rdi), %xmm0 3592; SSE41-NEXT: retq 3593; 3594; AVX-LABEL: load_sext_2i32_to_2i64: 3595; AVX: # BB#0: # %entry 3596; AVX-NEXT: vpmovsxdq (%rdi), %xmm0 3597; AVX-NEXT: retq 3598; 3599; X32-SSE41-LABEL: load_sext_2i32_to_2i64: 3600; X32-SSE41: # BB#0: # %entry 3601; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3602; X32-SSE41-NEXT: pmovsxdq (%eax), %xmm0 3603; X32-SSE41-NEXT: retl 3604entry: 3605 %X = load <2 x i32>, <2 x i32>* %ptr 3606 %Y = sext <2 x i32> %X to <2 x i64> 3607 ret <2 x i64> %Y 3608} 3609 3610define <4 x i64> @load_sext_4i32_to_4i64(<4 x i32> *%ptr) { 3611; SSE2-LABEL: load_sext_4i32_to_4i64: 3612; SSE2: # BB#0: # %entry 3613; SSE2-NEXT: movdqa (%rdi), %xmm0 3614; SSE2-NEXT: movdqa %xmm0, %xmm2 3615; SSE2-NEXT: psrad $31, %xmm2 3616; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 3617; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 3618; SSE2-NEXT: movdqa %xmm1, %xmm2 3619; SSE2-NEXT: psrad $31, %xmm2 3620; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 3621; SSE2-NEXT: retq 3622; 3623; SSSE3-LABEL: load_sext_4i32_to_4i64: 3624; SSSE3: # BB#0: # %entry 3625; SSSE3-NEXT: movdqa (%rdi), %xmm0 3626; SSSE3-NEXT: movdqa %xmm0, %xmm2 3627; SSSE3-NEXT: psrad $31, %xmm2 3628; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 3629; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 3630; SSSE3-NEXT: movdqa %xmm1, %xmm2 3631; SSSE3-NEXT: psrad $31, %xmm2 3632; SSSE3-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 3633; SSSE3-NEXT: retq 3634; 3635; SSE41-LABEL: load_sext_4i32_to_4i64: 3636; SSE41: # BB#0: # %entry 3637; SSE41-NEXT: pmovsxdq (%rdi), %xmm0 3638; SSE41-NEXT: pmovsxdq 8(%rdi), %xmm1 3639; SSE41-NEXT: retq 3640; 3641; AVX1-LABEL: load_sext_4i32_to_4i64: 3642; AVX1: # BB#0: # %entry 3643; AVX1-NEXT: vpmovsxdq (%rdi), %xmm0 3644; AVX1-NEXT: vpmovsxdq 8(%rdi), %xmm1 3645; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0 3646; AVX1-NEXT: retq 3647; 3648; AVX2-LABEL: load_sext_4i32_to_4i64: 3649; AVX2: # BB#0: # %entry 3650; AVX2-NEXT: vpmovsxdq (%rdi), %ymm0 3651; AVX2-NEXT: retq 3652; 3653; X32-SSE41-LABEL: load_sext_4i32_to_4i64: 3654; X32-SSE41: # BB#0: # %entry 3655; X32-SSE41-NEXT: movl {{[0-9]+}}(%esp), %eax 3656; X32-SSE41-NEXT: pmovsxdq (%eax), %xmm0 3657; X32-SSE41-NEXT: pmovsxdq 8(%eax), %xmm1 3658; X32-SSE41-NEXT: retl 3659entry: 3660 %X = load <4 x i32>, <4 x i32>* %ptr 3661 %Y = sext <4 x i32> %X to <4 x i64> 3662 ret <4 x i64> %Y 3663} 3664 3665define i32 @sext_2i8_to_i32(<16 x i8> %A) nounwind uwtable readnone ssp { 3666; SSE2-LABEL: sext_2i8_to_i32: 3667; SSE2: # BB#0: # %entry 3668; SSE2-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 3669; SSE2-NEXT: psraw $8, %xmm0 3670; SSE2-NEXT: movd %xmm0, %eax 3671; SSE2-NEXT: retq 3672; 3673; SSSE3-LABEL: sext_2i8_to_i32: 3674; SSSE3: # BB#0: # %entry 3675; SSSE3-NEXT: punpcklbw {{.*#+}} xmm0 = xmm0[0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7] 3676; SSSE3-NEXT: psraw $8, %xmm0 3677; SSSE3-NEXT: movd %xmm0, %eax 3678; SSSE3-NEXT: retq 3679; 3680; SSE41-LABEL: sext_2i8_to_i32: 3681; SSE41: # BB#0: # %entry 3682; SSE41-NEXT: pmovsxbw %xmm0, %xmm0 3683; SSE41-NEXT: movd %xmm0, %eax 3684; SSE41-NEXT: retq 3685; 3686; AVX-LABEL: sext_2i8_to_i32: 3687; AVX: # BB#0: # %entry 3688; AVX-NEXT: vpmovsxbw %xmm0, %xmm0 3689; AVX-NEXT: vmovd %xmm0, %eax 3690; AVX-NEXT: retq 3691; 3692; X32-SSE41-LABEL: sext_2i8_to_i32: 3693; X32-SSE41: # BB#0: # %entry 3694; X32-SSE41-NEXT: pushl %eax 3695; X32-SSE41-NEXT: .Ltmp2: 3696; X32-SSE41-NEXT: .cfi_def_cfa_offset 8 3697; X32-SSE41-NEXT: pmovsxbw %xmm0, %xmm0 3698; X32-SSE41-NEXT: movd %xmm0, %eax 3699; X32-SSE41-NEXT: popl %edx 3700; X32-SSE41-NEXT: retl 3701entry: 3702 %Shuf = shufflevector <16 x i8> %A, <16 x i8> undef, <2 x i32> <i32 0, i32 1> 3703 %Ex = sext <2 x i8> %Shuf to <2 x i16> 3704 %Bc = bitcast <2 x i16> %Ex to i32 3705 ret i32 %Bc 3706} 3707 3708define <4 x i64> @sext_4i1_to_4i64(<4 x i1> %mask) { 3709; SSE2-LABEL: sext_4i1_to_4i64: 3710; SSE2: # BB#0: 3711; SSE2-NEXT: pslld $31, %xmm0 3712; SSE2-NEXT: psrad $31, %xmm0 3713; SSE2-NEXT: movdqa %xmm0, %xmm2 3714; SSE2-NEXT: psrad $31, %xmm2 3715; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 3716; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 3717; SSE2-NEXT: movdqa %xmm1, %xmm2 3718; SSE2-NEXT: psrad $31, %xmm2 3719; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 3720; SSE2-NEXT: retq 3721; 3722; SSSE3-LABEL: sext_4i1_to_4i64: 3723; SSSE3: # BB#0: 3724; SSSE3-NEXT: pslld $31, %xmm0 3725; SSSE3-NEXT: psrad $31, %xmm0 3726; SSSE3-NEXT: movdqa %xmm0, %xmm2 3727; SSSE3-NEXT: psrad $31, %xmm2 3728; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 3729; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 3730; SSSE3-NEXT: movdqa %xmm1, %xmm2 3731; SSSE3-NEXT: psrad $31, %xmm2 3732; SSSE3-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 3733; SSSE3-NEXT: retq 3734; 3735; SSE41-LABEL: sext_4i1_to_4i64: 3736; SSE41: # BB#0: 3737; SSE41-NEXT: pslld $31, %xmm0 3738; SSE41-NEXT: psrad $31, %xmm0 3739; SSE41-NEXT: pmovsxdq %xmm0, %xmm2 3740; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3741; SSE41-NEXT: pmovsxdq %xmm0, %xmm1 3742; SSE41-NEXT: movdqa %xmm2, %xmm0 3743; SSE41-NEXT: retq 3744; 3745; AVX1-LABEL: sext_4i1_to_4i64: 3746; AVX1: # BB#0: 3747; AVX1-NEXT: vpslld $31, %xmm0, %xmm0 3748; AVX1-NEXT: vpsrad $31, %xmm0, %xmm0 3749; AVX1-NEXT: vpmovsxdq %xmm0, %xmm1 3750; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3751; AVX1-NEXT: vpmovsxdq %xmm0, %xmm0 3752; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3753; AVX1-NEXT: retq 3754; 3755; AVX2-LABEL: sext_4i1_to_4i64: 3756; AVX2: # BB#0: 3757; AVX2-NEXT: vpslld $31, %xmm0, %xmm0 3758; AVX2-NEXT: vpsrad $31, %xmm0, %xmm0 3759; AVX2-NEXT: vpmovsxdq %xmm0, %ymm0 3760; AVX2-NEXT: retq 3761; 3762; X32-SSE41-LABEL: sext_4i1_to_4i64: 3763; X32-SSE41: # BB#0: 3764; X32-SSE41-NEXT: pslld $31, %xmm0 3765; X32-SSE41-NEXT: psrad $31, %xmm0 3766; X32-SSE41-NEXT: pmovsxdq %xmm0, %xmm2 3767; X32-SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3768; X32-SSE41-NEXT: pmovsxdq %xmm0, %xmm1 3769; X32-SSE41-NEXT: movdqa %xmm2, %xmm0 3770; X32-SSE41-NEXT: retl 3771 %extmask = sext <4 x i1> %mask to <4 x i64> 3772 ret <4 x i64> %extmask 3773} 3774 3775define <4 x i64> @sext_4i8_to_4i64(<4 x i8> %mask) { 3776; SSE2-LABEL: sext_4i8_to_4i64: 3777; SSE2: # BB#0: 3778; SSE2-NEXT: pslld $24, %xmm0 3779; SSE2-NEXT: psrad $24, %xmm0 3780; SSE2-NEXT: movdqa %xmm0, %xmm2 3781; SSE2-NEXT: psrad $31, %xmm2 3782; SSE2-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 3783; SSE2-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 3784; SSE2-NEXT: movdqa %xmm1, %xmm2 3785; SSE2-NEXT: psrad $31, %xmm2 3786; SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 3787; SSE2-NEXT: retq 3788; 3789; SSSE3-LABEL: sext_4i8_to_4i64: 3790; SSSE3: # BB#0: 3791; SSSE3-NEXT: pslld $24, %xmm0 3792; SSSE3-NEXT: psrad $24, %xmm0 3793; SSSE3-NEXT: movdqa %xmm0, %xmm2 3794; SSSE3-NEXT: psrad $31, %xmm2 3795; SSSE3-NEXT: pshufd {{.*#+}} xmm1 = xmm0[2,3,0,1] 3796; SSSE3-NEXT: punpckldq {{.*#+}} xmm0 = xmm0[0],xmm2[0],xmm0[1],xmm2[1] 3797; SSSE3-NEXT: movdqa %xmm1, %xmm2 3798; SSSE3-NEXT: psrad $31, %xmm2 3799; SSSE3-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm2[0],xmm1[1],xmm2[1] 3800; SSSE3-NEXT: retq 3801; 3802; SSE41-LABEL: sext_4i8_to_4i64: 3803; SSE41: # BB#0: 3804; SSE41-NEXT: pslld $24, %xmm0 3805; SSE41-NEXT: psrad $24, %xmm0 3806; SSE41-NEXT: pmovsxdq %xmm0, %xmm2 3807; SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3808; SSE41-NEXT: pmovsxdq %xmm0, %xmm1 3809; SSE41-NEXT: movdqa %xmm2, %xmm0 3810; SSE41-NEXT: retq 3811; 3812; AVX1-LABEL: sext_4i8_to_4i64: 3813; AVX1: # BB#0: 3814; AVX1-NEXT: vpslld $24, %xmm0, %xmm0 3815; AVX1-NEXT: vpsrad $24, %xmm0, %xmm0 3816; AVX1-NEXT: vpmovsxdq %xmm0, %xmm1 3817; AVX1-NEXT: vpshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3818; AVX1-NEXT: vpmovsxdq %xmm0, %xmm0 3819; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm1, %ymm0 3820; AVX1-NEXT: retq 3821; 3822; AVX2-LABEL: sext_4i8_to_4i64: 3823; AVX2: # BB#0: 3824; AVX2-NEXT: vpslld $24, %xmm0, %xmm0 3825; AVX2-NEXT: vpsrad $24, %xmm0, %xmm0 3826; AVX2-NEXT: vpmovsxdq %xmm0, %ymm0 3827; AVX2-NEXT: retq 3828; 3829; X32-SSE41-LABEL: sext_4i8_to_4i64: 3830; X32-SSE41: # BB#0: 3831; X32-SSE41-NEXT: pslld $24, %xmm0 3832; X32-SSE41-NEXT: psrad $24, %xmm0 3833; X32-SSE41-NEXT: pmovsxdq %xmm0, %xmm2 3834; X32-SSE41-NEXT: pshufd {{.*#+}} xmm0 = xmm0[2,3,0,1] 3835; X32-SSE41-NEXT: pmovsxdq %xmm0, %xmm1 3836; X32-SSE41-NEXT: movdqa %xmm2, %xmm0 3837; X32-SSE41-NEXT: retl 3838 %extmask = sext <4 x i8> %mask to <4 x i64> 3839 ret <4 x i64> %extmask 3840} 3841