brintos

brintos / llvm-project-archived public Read only

0
0
Text · 47.4 KiB · edd3933 Raw
881 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2                                                                 | FileCheck %s --check-prefixes=CHECK,CHECK-SLOW3; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle                                | FileCheck %s --check-prefixes=CHECK,CHECK-FAST4; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-perlane-shuffle                                  | FileCheck %s --check-prefixes=CHECK,CHECK-SLOW5; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+avx2,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=CHECK,CHECK-FAST6 7; Shuffle lowest element of some subvector into highest element of some subvector.8; Mainly this is testing how well we avoid subvector extractions/insertions.9; https://bugs.llvm.org/show_bug.cgi?id=5097110 11define <2 x double> @vec128_eltty_double_source_subvec_0_target_subvec_mask_1_unary(<2 x double> %x) nounwind {12; CHECK-LABEL: vec128_eltty_double_source_subvec_0_target_subvec_mask_1_unary:13; CHECK:       # %bb.0:14; CHECK-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]15; CHECK-NEXT:    retq16  %r = shufflevector <2 x double> %x, <2 x double> poison, <2 x i32> zeroinitializer17  ret <2 x double> %r18}19 20define <2 x double> @vec128_eltty_double_source_subvec_0_target_subvec_mask_1_binary(<2 x double> %x, <2 x double> %y) nounwind {21; CHECK-LABEL: vec128_eltty_double_source_subvec_0_target_subvec_mask_1_binary:22; CHECK:       # %bb.0:23; CHECK-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]24; CHECK-NEXT:    retq25  %r = shufflevector <2 x double> %x, <2 x double> %y, <2 x i32> <i32 0, i32 2>26  ret <2 x double> %r27}28 29define <2 x i64> @vec128_eltty_i64_source_subvec_0_target_subvec_mask_1_unary(<2 x i64> %x) nounwind {30; CHECK-LABEL: vec128_eltty_i64_source_subvec_0_target_subvec_mask_1_unary:31; CHECK:       # %bb.0:32; CHECK-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]33; CHECK-NEXT:    retq34  %r = shufflevector <2 x i64> %x, <2 x i64> poison, <2 x i32> zeroinitializer35  ret <2 x i64> %r36}37 38define <2 x i64> @vec128_eltty_i64_source_subvec_0_target_subvec_mask_1_binary(<2 x i64> %x, <2 x i64> %y) nounwind {39; CHECK-LABEL: vec128_eltty_i64_source_subvec_0_target_subvec_mask_1_binary:40; CHECK:       # %bb.0:41; CHECK-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]42; CHECK-NEXT:    retq43  %r = shufflevector <2 x i64> %x, <2 x i64> %y, <2 x i32> <i32 0, i32 2>44  ret <2 x i64> %r45}46 47define <4 x float> @vec128_eltty_float_source_subvec_0_target_subvec_mask_1_unary(<4 x float> %x) nounwind {48; CHECK-LABEL: vec128_eltty_float_source_subvec_0_target_subvec_mask_1_unary:49; CHECK:       # %bb.0:50; CHECK-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,1,2,0]51; CHECK-NEXT:    retq52  %r = shufflevector <4 x float> %x, <4 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 0>53  ret <4 x float> %r54}55 56define <4 x float> @vec128_eltty_float_source_subvec_0_target_subvec_mask_1_binary(<4 x float> %x, <4 x float> %y) nounwind {57; CHECK-LABEL: vec128_eltty_float_source_subvec_0_target_subvec_mask_1_binary:58; CHECK:       # %bb.0:59; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[0]60; CHECK-NEXT:    retq61  %r = shufflevector <4 x float> %x, <4 x float> %y, <4 x i32> <i32 0, i32 1, i32 2, i32 4>62  ret <4 x float> %r63}64 65define <4 x i32> @vec128_eltty_i32_source_subvec_0_target_subvec_mask_1_unary(<4 x i32> %x) nounwind {66; CHECK-LABEL: vec128_eltty_i32_source_subvec_0_target_subvec_mask_1_unary:67; CHECK:       # %bb.0:68; CHECK-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,1,2,0]69; CHECK-NEXT:    retq70  %r = shufflevector <4 x i32> %x, <4 x i32> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 0>71  ret <4 x i32> %r72}73 74define <4 x i32> @vec128_eltty_i32_source_subvec_0_target_subvec_mask_1_binary(<4 x i32> %x, <4 x i32> %y) nounwind {75; CHECK-LABEL: vec128_eltty_i32_source_subvec_0_target_subvec_mask_1_binary:76; CHECK:       # %bb.0:77; CHECK-NEXT:    vbroadcastss %xmm1, %xmm178; CHECK-NEXT:    vblendps {{.*#+}} xmm0 = xmm0[0,1,2],xmm1[3]79; CHECK-NEXT:    retq80  %r = shufflevector <4 x i32> %x, <4 x i32> %y, <4 x i32> <i32 0, i32 1, i32 2, i32 4>81  ret <4 x i32> %r82}83 84define <8 x i16> @vec128_eltty_i16_source_subvec_0_target_subvec_mask_1_unary(<8 x i16> %x) nounwind {85; CHECK-LABEL: vec128_eltty_i16_source_subvec_0_target_subvec_mask_1_unary:86; CHECK:       # %bb.0:87; CHECK-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,0,1]88; CHECK-NEXT:    retq89  %r = shufflevector <8 x i16> %x, <8 x i16> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 0>90  ret <8 x i16> %r91}92 93define <8 x i16> @vec128_eltty_i16_source_subvec_0_target_subvec_mask_1_binary(<8 x i16> %x, <8 x i16> %y) nounwind {94; CHECK-LABEL: vec128_eltty_i16_source_subvec_0_target_subvec_mask_1_binary:95; CHECK:       # %bb.0:96; CHECK-NEXT:    vpbroadcastw %xmm1, %xmm197; CHECK-NEXT:    vpblendw {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6],xmm1[7]98; CHECK-NEXT:    retq99  %r = shufflevector <8 x i16> %x, <8 x i16> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 8>100  ret <8 x i16> %r101}102 103define <16 x i8> @vec128_eltty_i8_source_subvec_0_target_subvec_mask_1_unary(<16 x i8> %x) nounwind {104; CHECK-LABEL: vec128_eltty_i8_source_subvec_0_target_subvec_mask_1_unary:105; CHECK:       # %bb.0:106; CHECK-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,0]107; CHECK-NEXT:    retq108  %r = shufflevector <16 x i8> %x, <16 x i8> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 0>109  ret <16 x i8> %r110}111 112define <16 x i8> @vec128_eltty_i8_source_subvec_0_target_subvec_mask_1_binary(<16 x i8> %x, <16 x i8> %y) nounwind {113; CHECK-LABEL: vec128_eltty_i8_source_subvec_0_target_subvec_mask_1_binary:114; CHECK:       # %bb.0:115; CHECK-NEXT:    vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0]116; CHECK-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14],zero117; CHECK-NEXT:    vpor %xmm1, %xmm0, %xmm0118; CHECK-NEXT:    retq119  %r = shufflevector <16 x i8> %x, <16 x i8> %y, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 16>120  ret <16 x i8> %r121}122 123define <4 x double> @vec256_eltty_double_source_subvec_0_target_subvec_mask_1_unary(<4 x double> %x) nounwind {124; CHECK-LABEL: vec256_eltty_double_source_subvec_0_target_subvec_mask_1_unary:125; CHECK:       # %bb.0:126; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0,0,2,3]127; CHECK-NEXT:    retq128  %r = shufflevector <4 x double> %x, <4 x double> poison, <4 x i32> <i32 0, i32 0, i32 2, i32 3>129  ret <4 x double> %r130}131 132define <4 x double> @vec256_eltty_double_source_subvec_0_target_subvec_mask_1_binary(<4 x double> %x, <4 x double> %y) nounwind {133; CHECK-LABEL: vec256_eltty_double_source_subvec_0_target_subvec_mask_1_binary:134; CHECK:       # %bb.0:135; CHECK-NEXT:    vmovddup {{.*#+}} xmm1 = xmm1[0,0]136; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7]137; CHECK-NEXT:    retq138  %r = shufflevector <4 x double> %x, <4 x double> %y, <4 x i32> <i32 0, i32 4, i32 2, i32 3>139  ret <4 x double> %r140}141 142define <4 x double> @vec256_eltty_double_source_subvec_0_target_subvec_mask_2_unary(<4 x double> %x) nounwind {143; CHECK-LABEL: vec256_eltty_double_source_subvec_0_target_subvec_mask_2_unary:144; CHECK:       # %bb.0:145; CHECK-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,2,0]146; CHECK-NEXT:    retq147  %r = shufflevector <4 x double> %x, <4 x double> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 0>148  ret <4 x double> %r149}150 151define <4 x double> @vec256_eltty_double_source_subvec_0_target_subvec_mask_2_binary(<4 x double> %x, <4 x double> %y) nounwind {152; CHECK-LABEL: vec256_eltty_double_source_subvec_0_target_subvec_mask_2_binary:153; CHECK:       # %bb.0:154; CHECK-NEXT:    vbroadcastsd %xmm1, %ymm1155; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]156; CHECK-NEXT:    retq157  %r = shufflevector <4 x double> %x, <4 x double> %y, <4 x i32> <i32 0, i32 1, i32 2, i32 4>158  ret <4 x double> %r159}160 161define <4 x double> @vec256_eltty_double_source_subvec_0_target_subvec_mask_3_unary(<4 x double> %x) nounwind {162; CHECK-LABEL: vec256_eltty_double_source_subvec_0_target_subvec_mask_3_unary:163; CHECK:       # %bb.0:164; CHECK-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,0]165; CHECK-NEXT:    retq166  %r = shufflevector <4 x double> %x, <4 x double> poison, <4 x i32> <i32 0, i32 0, i32 2, i32 0>167  ret <4 x double> %r168}169 170define <4 x double> @vec256_eltty_double_source_subvec_0_target_subvec_mask_3_binary(<4 x double> %x, <4 x double> %y) nounwind {171; CHECK-LABEL: vec256_eltty_double_source_subvec_0_target_subvec_mask_3_binary:172; CHECK:       # %bb.0:173; CHECK-NEXT:    vbroadcastsd %xmm1, %ymm1174; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]175; CHECK-NEXT:    retq176  %r = shufflevector <4 x double> %x, <4 x double> %y, <4 x i32> <i32 0, i32 4, i32 2, i32 4>177  ret <4 x double> %r178}179 180define <4 x double> @vec256_eltty_double_source_subvec_1_target_subvec_mask_1_unary(<4 x double> %x) nounwind {181; CHECK-LABEL: vec256_eltty_double_source_subvec_1_target_subvec_mask_1_unary:182; CHECK:       # %bb.0:183; CHECK-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,2,3]184; CHECK-NEXT:    retq185  %r = shufflevector <4 x double> %x, <4 x double> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 3>186  ret <4 x double> %r187}188 189define <4 x double> @vec256_eltty_double_source_subvec_1_target_subvec_mask_1_binary(<4 x double> %x, <4 x double> %y) nounwind {190; CHECK-LABEL: vec256_eltty_double_source_subvec_1_target_subvec_mask_1_binary:191; CHECK:       # %bb.0:192; CHECK-NEXT:    vperm2f128 {{.*#+}} ymm1 = ymm1[2,3],ymm0[2,3]193; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[3]194; CHECK-NEXT:    retq195  %r = shufflevector <4 x double> %x, <4 x double> %y, <4 x i32> <i32 0, i32 6, i32 2, i32 3>196  ret <4 x double> %r197}198 199define <4 x double> @vec256_eltty_double_source_subvec_1_target_subvec_mask_2_unary(<4 x double> %x) nounwind {200; CHECK-LABEL: vec256_eltty_double_source_subvec_1_target_subvec_mask_2_unary:201; CHECK:       # %bb.0:202; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0,1,2,2]203; CHECK-NEXT:    retq204  %r = shufflevector <4 x double> %x, <4 x double> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 2>205  ret <4 x double> %r206}207 208define <4 x double> @vec256_eltty_double_source_subvec_1_target_subvec_mask_2_binary(<4 x double> %x, <4 x double> %y) nounwind {209; CHECK-LABEL: vec256_eltty_double_source_subvec_1_target_subvec_mask_2_binary:210; CHECK:       # %bb.0:211; CHECK-NEXT:    vmovddup {{.*#+}} ymm1 = ymm1[0,0,2,2]212; CHECK-NEXT:    vblendpd {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3]213; CHECK-NEXT:    retq214  %r = shufflevector <4 x double> %x, <4 x double> %y, <4 x i32> <i32 0, i32 1, i32 2, i32 6>215  ret <4 x double> %r216}217 218define <4 x double> @vec256_eltty_double_source_subvec_1_target_subvec_mask_3_unary(<4 x double> %x) nounwind {219; CHECK-LABEL: vec256_eltty_double_source_subvec_1_target_subvec_mask_3_unary:220; CHECK:       # %bb.0:221; CHECK-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,2,2]222; CHECK-NEXT:    retq223  %r = shufflevector <4 x double> %x, <4 x double> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>224  ret <4 x double> %r225}226 227define <4 x double> @vec256_eltty_double_source_subvec_1_target_subvec_mask_3_binary(<4 x double> %x, <4 x double> %y) nounwind {228; CHECK-LABEL: vec256_eltty_double_source_subvec_1_target_subvec_mask_3_binary:229; CHECK:       # %bb.0:230; CHECK-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[2,2,2,2]231; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]232; CHECK-NEXT:    retq233  %r = shufflevector <4 x double> %x, <4 x double> %y, <4 x i32> <i32 0, i32 6, i32 2, i32 6>234  ret <4 x double> %r235}236 237define <4 x i64> @vec256_eltty_i64_source_subvec_0_target_subvec_mask_1_unary(<4 x i64> %x) nounwind {238; CHECK-LABEL: vec256_eltty_i64_source_subvec_0_target_subvec_mask_1_unary:239; CHECK:       # %bb.0:240; CHECK-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,3]241; CHECK-NEXT:    retq242  %r = shufflevector <4 x i64> %x, <4 x i64> poison, <4 x i32> <i32 0, i32 0, i32 2, i32 3>243  ret <4 x i64> %r244}245 246define <4 x i64> @vec256_eltty_i64_source_subvec_0_target_subvec_mask_1_binary(<4 x i64> %x, <4 x i64> %y) nounwind {247; CHECK-LABEL: vec256_eltty_i64_source_subvec_0_target_subvec_mask_1_binary:248; CHECK:       # %bb.0:249; CHECK-NEXT:    vmovddup {{.*#+}} xmm1 = xmm1[0,0]250; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7]251; CHECK-NEXT:    retq252  %r = shufflevector <4 x i64> %x, <4 x i64> %y, <4 x i32> <i32 0, i32 4, i32 2, i32 3>253  ret <4 x i64> %r254}255 256define <4 x i64> @vec256_eltty_i64_source_subvec_0_target_subvec_mask_2_unary(<4 x i64> %x) nounwind {257; CHECK-LABEL: vec256_eltty_i64_source_subvec_0_target_subvec_mask_2_unary:258; CHECK:       # %bb.0:259; CHECK-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,2,0]260; CHECK-NEXT:    retq261  %r = shufflevector <4 x i64> %x, <4 x i64> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 0>262  ret <4 x i64> %r263}264 265define <4 x i64> @vec256_eltty_i64_source_subvec_0_target_subvec_mask_2_binary(<4 x i64> %x, <4 x i64> %y) nounwind {266; CHECK-LABEL: vec256_eltty_i64_source_subvec_0_target_subvec_mask_2_binary:267; CHECK:       # %bb.0:268; CHECK-NEXT:    vbroadcastsd %xmm1, %ymm1269; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]270; CHECK-NEXT:    retq271  %r = shufflevector <4 x i64> %x, <4 x i64> %y, <4 x i32> <i32 0, i32 1, i32 2, i32 4>272  ret <4 x i64> %r273}274 275define <4 x i64> @vec256_eltty_i64_source_subvec_0_target_subvec_mask_3_unary(<4 x i64> %x) nounwind {276; CHECK-LABEL: vec256_eltty_i64_source_subvec_0_target_subvec_mask_3_unary:277; CHECK:       # %bb.0:278; CHECK-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,2,0]279; CHECK-NEXT:    retq280  %r = shufflevector <4 x i64> %x, <4 x i64> poison, <4 x i32> <i32 0, i32 0, i32 2, i32 0>281  ret <4 x i64> %r282}283 284define <4 x i64> @vec256_eltty_i64_source_subvec_0_target_subvec_mask_3_binary(<4 x i64> %x, <4 x i64> %y) nounwind {285; CHECK-LABEL: vec256_eltty_i64_source_subvec_0_target_subvec_mask_3_binary:286; CHECK:       # %bb.0:287; CHECK-NEXT:    vbroadcastsd %xmm1, %ymm1288; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]289; CHECK-NEXT:    retq290  %r = shufflevector <4 x i64> %x, <4 x i64> %y, <4 x i32> <i32 0, i32 4, i32 2, i32 4>291  ret <4 x i64> %r292}293 294define <4 x i64> @vec256_eltty_i64_source_subvec_1_target_subvec_mask_1_unary(<4 x i64> %x) nounwind {295; CHECK-LABEL: vec256_eltty_i64_source_subvec_1_target_subvec_mask_1_unary:296; CHECK:       # %bb.0:297; CHECK-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,2,3]298; CHECK-NEXT:    retq299  %r = shufflevector <4 x i64> %x, <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 3>300  ret <4 x i64> %r301}302 303define <4 x i64> @vec256_eltty_i64_source_subvec_1_target_subvec_mask_1_binary(<4 x i64> %x, <4 x i64> %y) nounwind {304; CHECK-LABEL: vec256_eltty_i64_source_subvec_1_target_subvec_mask_1_binary:305; CHECK:       # %bb.0:306; CHECK-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[2,2,2,2]307; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5,6,7]308; CHECK-NEXT:    retq309  %r = shufflevector <4 x i64> %x, <4 x i64> %y, <4 x i32> <i32 0, i32 6, i32 2, i32 3>310  ret <4 x i64> %r311}312 313define <4 x i64> @vec256_eltty_i64_source_subvec_1_target_subvec_mask_2_unary(<4 x i64> %x) nounwind {314; CHECK-LABEL: vec256_eltty_i64_source_subvec_1_target_subvec_mask_2_unary:315; CHECK:       # %bb.0:316; CHECK-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,1,2,2]317; CHECK-NEXT:    retq318  %r = shufflevector <4 x i64> %x, <4 x i64> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 2>319  ret <4 x i64> %r320}321 322define <4 x i64> @vec256_eltty_i64_source_subvec_1_target_subvec_mask_2_binary(<4 x i64> %x, <4 x i64> %y) nounwind {323; CHECK-LABEL: vec256_eltty_i64_source_subvec_1_target_subvec_mask_2_binary:324; CHECK:       # %bb.0:325; CHECK-NEXT:    vshufps {{.*#+}} ymm1 = ymm1[0,1,0,1,4,5,4,5]326; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5],ymm1[6,7]327; CHECK-NEXT:    retq328  %r = shufflevector <4 x i64> %x, <4 x i64> %y, <4 x i32> <i32 0, i32 1, i32 2, i32 6>329  ret <4 x i64> %r330}331 332define <4 x i64> @vec256_eltty_i64_source_subvec_1_target_subvec_mask_3_unary(<4 x i64> %x) nounwind {333; CHECK-LABEL: vec256_eltty_i64_source_subvec_1_target_subvec_mask_3_unary:334; CHECK:       # %bb.0:335; CHECK-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,2,2,2]336; CHECK-NEXT:    retq337  %r = shufflevector <4 x i64> %x, <4 x i64> poison, <4 x i32> <i32 0, i32 2, i32 2, i32 2>338  ret <4 x i64> %r339}340 341define <4 x i64> @vec256_eltty_i64_source_subvec_1_target_subvec_mask_3_binary(<4 x i64> %x, <4 x i64> %y) nounwind {342; CHECK-LABEL: vec256_eltty_i64_source_subvec_1_target_subvec_mask_3_binary:343; CHECK:       # %bb.0:344; CHECK-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[2,2,2,2]345; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]346; CHECK-NEXT:    retq347  %r = shufflevector <4 x i64> %x, <4 x i64> %y, <4 x i32> <i32 0, i32 6, i32 2, i32 6>348  ret <4 x i64> %r349}350 351define <8 x float> @vec256_eltty_float_source_subvec_0_target_subvec_mask_1_unary(<8 x float> %x) nounwind {352; CHECK-LABEL: vec256_eltty_float_source_subvec_0_target_subvec_mask_1_unary:353; CHECK:       # %bb.0:354; CHECK-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,0,4,5,6,7]355; CHECK-NEXT:    retq356  %r = shufflevector <8 x float> %x, <8 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 0, i32 4, i32 5, i32 6, i32 7>357  ret <8 x float> %r358}359 360define <8 x float> @vec256_eltty_float_source_subvec_0_target_subvec_mask_1_binary(<8 x float> %x, <8 x float> %y) nounwind {361; CHECK-LABEL: vec256_eltty_float_source_subvec_0_target_subvec_mask_1_binary:362; CHECK:       # %bb.0:363; CHECK-NEXT:    vbroadcastss %xmm1, %xmm1364; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7]365; CHECK-NEXT:    retq366  %r = shufflevector <8 x float> %x, <8 x float> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 8, i32 4, i32 5, i32 6, i32 7>367  ret <8 x float> %r368}369 370define <8 x float> @vec256_eltty_float_source_subvec_0_target_subvec_mask_2_unary(<8 x float> %x) nounwind {371; CHECK-LABEL: vec256_eltty_float_source_subvec_0_target_subvec_mask_2_unary:372; CHECK:       # %bb.0:373; CHECK-NEXT:    vmovaps {{.*#+}} ymm1 = [0,1,2,3,4,5,6,0]374; CHECK-NEXT:    vpermps %ymm0, %ymm1, %ymm0375; CHECK-NEXT:    retq376  %r = shufflevector <8 x float> %x, <8 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 0>377  ret <8 x float> %r378}379 380define <8 x float> @vec256_eltty_float_source_subvec_0_target_subvec_mask_2_binary(<8 x float> %x, <8 x float> %y) nounwind {381; CHECK-LABEL: vec256_eltty_float_source_subvec_0_target_subvec_mask_2_binary:382; CHECK:       # %bb.0:383; CHECK-NEXT:    vbroadcastss %xmm1, %ymm1384; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7]385; CHECK-NEXT:    retq386  %r = shufflevector <8 x float> %x, <8 x float> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 8>387  ret <8 x float> %r388}389 390define <8 x float> @vec256_eltty_float_source_subvec_0_target_subvec_mask_3_unary(<8 x float> %x) nounwind {391; CHECK-LABEL: vec256_eltty_float_source_subvec_0_target_subvec_mask_3_unary:392; CHECK:       # %bb.0:393; CHECK-NEXT:    vmovaps {{.*#+}} ymm1 = [0,1,2,0,4,5,6,0]394; CHECK-NEXT:    vpermps %ymm0, %ymm1, %ymm0395; CHECK-NEXT:    retq396  %r = shufflevector <8 x float> %x, <8 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 0, i32 4, i32 5, i32 6, i32 0>397  ret <8 x float> %r398}399 400define <8 x float> @vec256_eltty_float_source_subvec_0_target_subvec_mask_3_binary(<8 x float> %x, <8 x float> %y) nounwind {401; CHECK-LABEL: vec256_eltty_float_source_subvec_0_target_subvec_mask_3_binary:402; CHECK:       # %bb.0:403; CHECK-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[0,1,0,1]404; CHECK-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]405; CHECK-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,0],ymm0[4,5],ymm1[6,4]406; CHECK-NEXT:    retq407  %r = shufflevector <8 x float> %x, <8 x float> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 8, i32 4, i32 5, i32 6, i32 8>408  ret <8 x float> %r409}410 411define <8 x float> @vec256_eltty_float_source_subvec_1_target_subvec_mask_1_unary(<8 x float> %x) nounwind {412; CHECK-LABEL: vec256_eltty_float_source_subvec_1_target_subvec_mask_1_unary:413; CHECK:       # %bb.0:414; CHECK-NEXT:    vmovaps {{.*#+}} ymm1 = [0,1,2,4,4,5,6,7]415; CHECK-NEXT:    vpermps %ymm0, %ymm1, %ymm0416; CHECK-NEXT:    retq417  %r = shufflevector <8 x float> %x, <8 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 4, i32 4, i32 5, i32 6, i32 7>418  ret <8 x float> %r419}420 421define <8 x float> @vec256_eltty_float_source_subvec_1_target_subvec_mask_1_binary(<8 x float> %x, <8 x float> %y) nounwind {422; CHECK-LABEL: vec256_eltty_float_source_subvec_1_target_subvec_mask_1_binary:423; CHECK:       # %bb.0:424; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm1425; CHECK-NEXT:    vbroadcastss %xmm1, %xmm1426; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7]427; CHECK-NEXT:    retq428  %r = shufflevector <8 x float> %x, <8 x float> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 12, i32 4, i32 5, i32 6, i32 7>429  ret <8 x float> %r430}431 432define <8 x float> @vec256_eltty_float_source_subvec_1_target_subvec_mask_2_unary(<8 x float> %x) nounwind {433; CHECK-LABEL: vec256_eltty_float_source_subvec_1_target_subvec_mask_2_unary:434; CHECK:       # %bb.0:435; CHECK-NEXT:    vpermilps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6,4]436; CHECK-NEXT:    retq437  %r = shufflevector <8 x float> %x, <8 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 4>438  ret <8 x float> %r439}440 441define <8 x float> @vec256_eltty_float_source_subvec_1_target_subvec_mask_2_binary(<8 x float> %x, <8 x float> %y) nounwind {442; CHECK-SLOW-LABEL: vec256_eltty_float_source_subvec_1_target_subvec_mask_2_binary:443; CHECK-SLOW:       # %bb.0:444; CHECK-SLOW-NEXT:    vextractf128 $1, %ymm1, %xmm1445; CHECK-SLOW-NEXT:    vbroadcastss %xmm1, %ymm1446; CHECK-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7]447; CHECK-SLOW-NEXT:    retq448;449; CHECK-FAST-LABEL: vec256_eltty_float_source_subvec_1_target_subvec_mask_2_binary:450; CHECK-FAST:       # %bb.0:451; CHECK-FAST-NEXT:    vshufps {{.*#+}} ymm1 = ymm1[0,0,0,0,4,4,4,4]452; CHECK-FAST-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7]453; CHECK-FAST-NEXT:    retq454  %r = shufflevector <8 x float> %x, <8 x float> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 12>455  ret <8 x float> %r456}457 458define <8 x float> @vec256_eltty_float_source_subvec_1_target_subvec_mask_3_unary(<8 x float> %x) nounwind {459; CHECK-LABEL: vec256_eltty_float_source_subvec_1_target_subvec_mask_3_unary:460; CHECK:       # %bb.0:461; CHECK-NEXT:    vmovaps {{.*#+}} ymm1 = [0,1,2,4,4,5,6,4]462; CHECK-NEXT:    vpermps %ymm0, %ymm1, %ymm0463; CHECK-NEXT:    retq464  %r = shufflevector <8 x float> %x, <8 x float> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 4, i32 4, i32 5, i32 6, i32 4>465  ret <8 x float> %r466}467 468define <8 x float> @vec256_eltty_float_source_subvec_1_target_subvec_mask_3_binary(<8 x float> %x, <8 x float> %y) nounwind {469; CHECK-LABEL: vec256_eltty_float_source_subvec_1_target_subvec_mask_3_binary:470; CHECK:       # %bb.0:471; CHECK-NEXT:    vpermpd {{.*#+}} ymm1 = ymm1[2,3,2,3]472; CHECK-NEXT:    vblendps {{.*#+}} ymm1 = ymm1[0,1],ymm0[2,3],ymm1[4,5],ymm0[6,7]473; CHECK-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,0],ymm0[4,5],ymm1[6,4]474; CHECK-NEXT:    retq475  %r = shufflevector <8 x float> %x, <8 x float> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 12, i32 4, i32 5, i32 6, i32 12>476  ret <8 x float> %r477}478 479define <8 x i32> @vec256_eltty_i32_source_subvec_0_target_subvec_mask_1_unary(<8 x i32> %x) nounwind {480; CHECK-LABEL: vec256_eltty_i32_source_subvec_0_target_subvec_mask_1_unary:481; CHECK:       # %bb.0:482; CHECK-NEXT:    vmovaps {{.*#+}} ymm1 = [0,1,2,0,4,5,6,7]483; CHECK-NEXT:    vpermps %ymm0, %ymm1, %ymm0484; CHECK-NEXT:    retq485  %r = shufflevector <8 x i32> %x, <8 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 0, i32 4, i32 5, i32 6, i32 7>486  ret <8 x i32> %r487}488 489define <8 x i32> @vec256_eltty_i32_source_subvec_0_target_subvec_mask_1_binary(<8 x i32> %x, <8 x i32> %y) nounwind {490; CHECK-LABEL: vec256_eltty_i32_source_subvec_0_target_subvec_mask_1_binary:491; CHECK:       # %bb.0:492; CHECK-NEXT:    vbroadcastss %xmm1, %xmm1493; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7]494; CHECK-NEXT:    retq495  %r = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 8, i32 4, i32 5, i32 6, i32 7>496  ret <8 x i32> %r497}498 499define <8 x i32> @vec256_eltty_i32_source_subvec_0_target_subvec_mask_2_unary(<8 x i32> %x) nounwind {500; CHECK-LABEL: vec256_eltty_i32_source_subvec_0_target_subvec_mask_2_unary:501; CHECK:       # %bb.0:502; CHECK-NEXT:    vmovaps {{.*#+}} ymm1 = [0,1,2,3,4,5,6,0]503; CHECK-NEXT:    vpermps %ymm0, %ymm1, %ymm0504; CHECK-NEXT:    retq505  %r = shufflevector <8 x i32> %x, <8 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 0>506  ret <8 x i32> %r507}508 509define <8 x i32> @vec256_eltty_i32_source_subvec_0_target_subvec_mask_2_binary(<8 x i32> %x, <8 x i32> %y) nounwind {510; CHECK-LABEL: vec256_eltty_i32_source_subvec_0_target_subvec_mask_2_binary:511; CHECK:       # %bb.0:512; CHECK-NEXT:    vbroadcastss %xmm1, %ymm1513; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7]514; CHECK-NEXT:    retq515  %r = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 8>516  ret <8 x i32> %r517}518 519define <8 x i32> @vec256_eltty_i32_source_subvec_0_target_subvec_mask_3_unary(<8 x i32> %x) nounwind {520; CHECK-LABEL: vec256_eltty_i32_source_subvec_0_target_subvec_mask_3_unary:521; CHECK:       # %bb.0:522; CHECK-NEXT:    vmovaps {{.*#+}} ymm1 = [0,1,2,0,4,5,6,0]523; CHECK-NEXT:    vpermps %ymm0, %ymm1, %ymm0524; CHECK-NEXT:    retq525  %r = shufflevector <8 x i32> %x, <8 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 0, i32 4, i32 5, i32 6, i32 0>526  ret <8 x i32> %r527}528 529define <8 x i32> @vec256_eltty_i32_source_subvec_0_target_subvec_mask_3_binary(<8 x i32> %x, <8 x i32> %y) nounwind {530; CHECK-LABEL: vec256_eltty_i32_source_subvec_0_target_subvec_mask_3_binary:531; CHECK:       # %bb.0:532; CHECK-NEXT:    vbroadcastss %xmm1, %ymm1533; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6],ymm1[7]534; CHECK-NEXT:    retq535  %r = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 8, i32 4, i32 5, i32 6, i32 8>536  ret <8 x i32> %r537}538 539define <8 x i32> @vec256_eltty_i32_source_subvec_1_target_subvec_mask_1_unary(<8 x i32> %x) nounwind {540; CHECK-LABEL: vec256_eltty_i32_source_subvec_1_target_subvec_mask_1_unary:541; CHECK:       # %bb.0:542; CHECK-NEXT:    vmovaps {{.*#+}} ymm1 = [0,1,2,4,4,5,6,7]543; CHECK-NEXT:    vpermps %ymm0, %ymm1, %ymm0544; CHECK-NEXT:    retq545  %r = shufflevector <8 x i32> %x, <8 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 4, i32 4, i32 5, i32 6, i32 7>546  ret <8 x i32> %r547}548 549define <8 x i32> @vec256_eltty_i32_source_subvec_1_target_subvec_mask_1_binary(<8 x i32> %x, <8 x i32> %y) nounwind {550; CHECK-LABEL: vec256_eltty_i32_source_subvec_1_target_subvec_mask_1_binary:551; CHECK:       # %bb.0:552; CHECK-NEXT:    vextractf128 $1, %ymm1, %xmm1553; CHECK-NEXT:    vbroadcastss %xmm1, %xmm1554; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6,7]555; CHECK-NEXT:    retq556  %r = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 12, i32 4, i32 5, i32 6, i32 7>557  ret <8 x i32> %r558}559 560define <8 x i32> @vec256_eltty_i32_source_subvec_1_target_subvec_mask_2_unary(<8 x i32> %x) nounwind {561; CHECK-LABEL: vec256_eltty_i32_source_subvec_1_target_subvec_mask_2_unary:562; CHECK:       # %bb.0:563; CHECK-NEXT:    vmovaps {{.*#+}} ymm1 = [0,1,2,3,4,5,6,4]564; CHECK-NEXT:    vpermps %ymm0, %ymm1, %ymm0565; CHECK-NEXT:    retq566  %r = shufflevector <8 x i32> %x, <8 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 4>567  ret <8 x i32> %r568}569 570define <8 x i32> @vec256_eltty_i32_source_subvec_1_target_subvec_mask_2_binary(<8 x i32> %x, <8 x i32> %y) nounwind {571; CHECK-SLOW-LABEL: vec256_eltty_i32_source_subvec_1_target_subvec_mask_2_binary:572; CHECK-SLOW:       # %bb.0:573; CHECK-SLOW-NEXT:    vextractf128 $1, %ymm1, %xmm1574; CHECK-SLOW-NEXT:    vbroadcastss %xmm1, %ymm1575; CHECK-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7]576; CHECK-SLOW-NEXT:    retq577;578; CHECK-FAST-LABEL: vec256_eltty_i32_source_subvec_1_target_subvec_mask_2_binary:579; CHECK-FAST:       # %bb.0:580; CHECK-FAST-NEXT:    vshufps {{.*#+}} ymm1 = ymm1[0,0,0,0,4,4,4,4]581; CHECK-FAST-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7]582; CHECK-FAST-NEXT:    retq583  %r = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 12>584  ret <8 x i32> %r585}586 587define <8 x i32> @vec256_eltty_i32_source_subvec_1_target_subvec_mask_3_unary(<8 x i32> %x) nounwind {588; CHECK-LABEL: vec256_eltty_i32_source_subvec_1_target_subvec_mask_3_unary:589; CHECK:       # %bb.0:590; CHECK-NEXT:    vmovaps {{.*#+}} ymm1 = [0,1,2,4,4,5,6,4]591; CHECK-NEXT:    vpermps %ymm0, %ymm1, %ymm0592; CHECK-NEXT:    retq593  %r = shufflevector <8 x i32> %x, <8 x i32> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 4, i32 4, i32 5, i32 6, i32 4>594  ret <8 x i32> %r595}596 597define <8 x i32> @vec256_eltty_i32_source_subvec_1_target_subvec_mask_3_binary(<8 x i32> %x, <8 x i32> %y) nounwind {598; CHECK-SLOW-LABEL: vec256_eltty_i32_source_subvec_1_target_subvec_mask_3_binary:599; CHECK-SLOW:       # %bb.0:600; CHECK-SLOW-NEXT:    vextractf128 $1, %ymm1, %xmm1601; CHECK-SLOW-NEXT:    vbroadcastss %xmm1, %ymm1602; CHECK-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6],ymm1[7]603; CHECK-SLOW-NEXT:    retq604;605; CHECK-FAST-LABEL: vec256_eltty_i32_source_subvec_1_target_subvec_mask_3_binary:606; CHECK-FAST:       # %bb.0:607; CHECK-FAST-NEXT:    vbroadcastss {{.*#+}} ymm2 = [4,4,4,4,4,4,4,4]608; CHECK-FAST-NEXT:    vpermps %ymm1, %ymm2, %ymm1609; CHECK-FAST-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1,2],ymm1[3],ymm0[4,5,6],ymm1[7]610; CHECK-FAST-NEXT:    retq611  %r = shufflevector <8 x i32> %x, <8 x i32> %y, <8 x i32> <i32 0, i32 1, i32 2, i32 12, i32 4, i32 5, i32 6, i32 12>612  ret <8 x i32> %r613}614 615define <16 x i16> @vec256_eltty_i16_source_subvec_0_target_subvec_mask_1_unary(<16 x i16> %x) nounwind {616; CHECK-LABEL: vec256_eltty_i16_source_subvec_0_target_subvec_mask_1_unary:617; CHECK:       # %bb.0:618; CHECK-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,0,1,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]619; CHECK-NEXT:    retq620  %r = shufflevector <16 x i16> %x, <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 0, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>621  ret <16 x i16> %r622}623 624define <16 x i16> @vec256_eltty_i16_source_subvec_0_target_subvec_mask_1_binary(<16 x i16> %x, <16 x i16> %y) nounwind {625; CHECK-LABEL: vec256_eltty_i16_source_subvec_0_target_subvec_mask_1_binary:626; CHECK:       # %bb.0:627; CHECK-NEXT:    vpbroadcastw %xmm1, %xmm1628; CHECK-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,5,6],xmm1[7]629; CHECK-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]630; CHECK-NEXT:    retq631  %r = shufflevector <16 x i16> %x, <16 x i16> %y, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 16, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>632  ret <16 x i16> %r633}634 635define <16 x i16> @vec256_eltty_i16_source_subvec_0_target_subvec_mask_2_unary(<16 x i16> %x) nounwind {636; CHECK-LABEL: vec256_eltty_i16_source_subvec_0_target_subvec_mask_2_unary:637; CHECK:       # %bb.0:638; CHECK-NEXT:    vpbroadcastw %xmm0, %ymm1639; CHECK-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]640; CHECK-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]641; CHECK-NEXT:    retq642  %r = shufflevector <16 x i16> %x, <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 0>643  ret <16 x i16> %r644}645 646define <16 x i16> @vec256_eltty_i16_source_subvec_0_target_subvec_mask_2_binary(<16 x i16> %x, <16 x i16> %y) nounwind {647; CHECK-LABEL: vec256_eltty_i16_source_subvec_0_target_subvec_mask_2_binary:648; CHECK:       # %bb.0:649; CHECK-NEXT:    vpbroadcastw %xmm1, %ymm1650; CHECK-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]651; CHECK-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]652; CHECK-NEXT:    retq653  %r = shufflevector <16 x i16> %x, <16 x i16> %y, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 16>654  ret <16 x i16> %r655}656 657define <16 x i16> @vec256_eltty_i16_source_subvec_0_target_subvec_mask_3_unary(<16 x i16> %x) nounwind {658; CHECK-LABEL: vec256_eltty_i16_source_subvec_0_target_subvec_mask_3_unary:659; CHECK:       # %bb.0:660; CHECK-NEXT:    vpbroadcastw %xmm0, %ymm1661; CHECK-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]662; CHECK-NEXT:    retq663  %r = shufflevector <16 x i16> %x, <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 0, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 0>664  ret <16 x i16> %r665}666 667define <16 x i16> @vec256_eltty_i16_source_subvec_0_target_subvec_mask_3_binary(<16 x i16> %x, <16 x i16> %y) nounwind {668; CHECK-LABEL: vec256_eltty_i16_source_subvec_0_target_subvec_mask_3_binary:669; CHECK:       # %bb.0:670; CHECK-NEXT:    vpbroadcastw %xmm1, %ymm1671; CHECK-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]672; CHECK-NEXT:    retq673  %r = shufflevector <16 x i16> %x, <16 x i16> %y, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 16, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 16>674  ret <16 x i16> %r675}676 677define <16 x i16> @vec256_eltty_i16_source_subvec_1_target_subvec_mask_1_unary(<16 x i16> %x) nounwind {678; CHECK-LABEL: vec256_eltty_i16_source_subvec_1_target_subvec_mask_1_unary:679; CHECK:       # %bb.0:680; CHECK-NEXT:    vextracti128 $1, %ymm0, %xmm1681; CHECK-NEXT:    vpbroadcastw %xmm1, %xmm1682; CHECK-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,5,6],xmm1[7]683; CHECK-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]684; CHECK-NEXT:    retq685  %r = shufflevector <16 x i16> %x, <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 8, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>686  ret <16 x i16> %r687}688 689define <16 x i16> @vec256_eltty_i16_source_subvec_1_target_subvec_mask_1_binary(<16 x i16> %x, <16 x i16> %y) nounwind {690; CHECK-LABEL: vec256_eltty_i16_source_subvec_1_target_subvec_mask_1_binary:691; CHECK:       # %bb.0:692; CHECK-NEXT:    vextracti128 $1, %ymm1, %xmm1693; CHECK-NEXT:    vpbroadcastw %xmm1, %xmm1694; CHECK-NEXT:    vpblendw {{.*#+}} xmm1 = xmm0[0,1,2,3,4,5,6],xmm1[7]695; CHECK-NEXT:    vpblendd {{.*#+}} ymm0 = ymm1[0,1,2,3],ymm0[4,5,6,7]696; CHECK-NEXT:    retq697  %r = shufflevector <16 x i16> %x, <16 x i16> %y, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 24, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>698  ret <16 x i16> %r699}700 701define <16 x i16> @vec256_eltty_i16_source_subvec_1_target_subvec_mask_2_unary(<16 x i16> %x) nounwind {702; CHECK-LABEL: vec256_eltty_i16_source_subvec_1_target_subvec_mask_2_unary:703; CHECK:       # %bb.0:704; CHECK-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,16,17]705; CHECK-NEXT:    retq706  %r = shufflevector <16 x i16> %x, <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 8>707  ret <16 x i16> %r708}709 710define <16 x i16> @vec256_eltty_i16_source_subvec_1_target_subvec_mask_2_binary(<16 x i16> %x, <16 x i16> %y) nounwind {711; CHECK-LABEL: vec256_eltty_i16_source_subvec_1_target_subvec_mask_2_binary:712; CHECK:       # %bb.0:713; CHECK-NEXT:    vextracti128 $1, %ymm1, %xmm1714; CHECK-NEXT:    vpbroadcastw %xmm1, %ymm1715; CHECK-NEXT:    vpblendw {{.*#+}} ymm1 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]716; CHECK-NEXT:    vpblendd {{.*#+}} ymm0 = ymm0[0,1,2,3],ymm1[4,5,6,7]717; CHECK-NEXT:    retq718  %r = shufflevector <16 x i16> %x, <16 x i16> %y, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 24>719  ret <16 x i16> %r720}721 722define <16 x i16> @vec256_eltty_i16_source_subvec_1_target_subvec_mask_3_unary(<16 x i16> %x) nounwind {723; CHECK-LABEL: vec256_eltty_i16_source_subvec_1_target_subvec_mask_3_unary:724; CHECK:       # %bb.0:725; CHECK-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]726; CHECK-NEXT:    vpslldq {{.*#+}} ymm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm1[0,1],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm1[16,17]727; CHECK-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]728; CHECK-NEXT:    retq729  %r = shufflevector <16 x i16> %x, <16 x i16> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 8, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 8>730  ret <16 x i16> %r731}732 733define <16 x i16> @vec256_eltty_i16_source_subvec_1_target_subvec_mask_3_binary(<16 x i16> %x, <16 x i16> %y) nounwind {734; CHECK-LABEL: vec256_eltty_i16_source_subvec_1_target_subvec_mask_3_binary:735; CHECK:       # %bb.0:736; CHECK-NEXT:    vextracti128 $1, %ymm1, %xmm1737; CHECK-NEXT:    vpbroadcastw %xmm1, %ymm1738; CHECK-NEXT:    vpblendw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6],ymm1[7],ymm0[8,9,10,11,12,13,14],ymm1[15]739; CHECK-NEXT:    retq740  %r = shufflevector <16 x i16> %x, <16 x i16> %y, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 24, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 24>741  ret <16 x i16> %r742}743 744define <32 x i8> @vec256_eltty_i8_source_subvec_0_target_subvec_mask_1_unary(<32 x i8> %x) nounwind {745; CHECK-LABEL: vec256_eltty_i8_source_subvec_0_target_subvec_mask_1_unary:746; CHECK:       # %bb.0:747; CHECK-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,0,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31]748; CHECK-NEXT:    retq749  %r = shufflevector <32 x i8> %x, <32 x i8> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 0, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>750  ret <32 x i8> %r751}752 753define <32 x i8> @vec256_eltty_i8_source_subvec_0_target_subvec_mask_1_binary(<32 x i8> %x, <32 x i8> %y) nounwind {754; CHECK-LABEL: vec256_eltty_i8_source_subvec_0_target_subvec_mask_1_binary:755; CHECK:       # %bb.0:756; CHECK-NEXT:    vpbroadcastb %xmm1, %ymm1757; CHECK-NEXT:    vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]758; CHECK-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0759; CHECK-NEXT:    retq760  %r = shufflevector <32 x i8> %x, <32 x i8> %y, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 32, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>761  ret <32 x i8> %r762}763 764define <32 x i8> @vec256_eltty_i8_source_subvec_0_target_subvec_mask_2_unary(<32 x i8> %x) nounwind {765; CHECK-LABEL: vec256_eltty_i8_source_subvec_0_target_subvec_mask_2_unary:766; CHECK:       # %bb.0:767; CHECK-NEXT:    vpbroadcastb %xmm0, %ymm1768; CHECK-NEXT:    vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]769; CHECK-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0770; CHECK-NEXT:    retq771  %r = shufflevector <32 x i8> %x, <32 x i8> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 0>772  ret <32 x i8> %r773}774 775define <32 x i8> @vec256_eltty_i8_source_subvec_0_target_subvec_mask_2_binary(<32 x i8> %x, <32 x i8> %y) nounwind {776; CHECK-LABEL: vec256_eltty_i8_source_subvec_0_target_subvec_mask_2_binary:777; CHECK:       # %bb.0:778; CHECK-NEXT:    vpbroadcastb %xmm1, %ymm1779; CHECK-NEXT:    vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]780; CHECK-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0781; CHECK-NEXT:    retq782  %r = shufflevector <32 x i8> %x, <32 x i8> %y, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 32>783  ret <32 x i8> %r784}785 786define <32 x i8> @vec256_eltty_i8_source_subvec_0_target_subvec_mask_3_unary(<32 x i8> %x) nounwind {787; CHECK-LABEL: vec256_eltty_i8_source_subvec_0_target_subvec_mask_3_unary:788; CHECK:       # %bb.0:789; CHECK-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[0,1,0,1]790; CHECK-NEXT:    vpslldq {{.*#+}} ymm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm1[0],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm1[16]791; CHECK-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]792; CHECK-NEXT:    # ymm2 = mem[0,1,0,1]793; CHECK-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0794; CHECK-NEXT:    retq795  %r = shufflevector <32 x i8> %x, <32 x i8> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 0, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 0>796  ret <32 x i8> %r797}798 799define <32 x i8> @vec256_eltty_i8_source_subvec_0_target_subvec_mask_3_binary(<32 x i8> %x, <32 x i8> %y) nounwind {800; CHECK-LABEL: vec256_eltty_i8_source_subvec_0_target_subvec_mask_3_binary:801; CHECK:       # %bb.0:802; CHECK-NEXT:    vpbroadcastb %xmm1, %ymm1803; CHECK-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]804; CHECK-NEXT:    # ymm2 = mem[0,1,0,1]805; CHECK-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0806; CHECK-NEXT:    retq807  %r = shufflevector <32 x i8> %x, <32 x i8> %y, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 32, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 32>808  ret <32 x i8> %r809}810 811define <32 x i8> @vec256_eltty_i8_source_subvec_1_target_subvec_mask_1_unary(<32 x i8> %x) nounwind {812; CHECK-LABEL: vec256_eltty_i8_source_subvec_1_target_subvec_mask_1_unary:813; CHECK:       # %bb.0:814; CHECK-NEXT:    vextracti128 $1, %ymm0, %xmm1815; CHECK-NEXT:    vpbroadcastb %xmm1, %ymm1816; CHECK-NEXT:    vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]817; CHECK-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0818; CHECK-NEXT:    retq819  %r = shufflevector <32 x i8> %x, <32 x i8> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 16, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>820  ret <32 x i8> %r821}822 823define <32 x i8> @vec256_eltty_i8_source_subvec_1_target_subvec_mask_1_binary(<32 x i8> %x, <32 x i8> %y) nounwind {824; CHECK-LABEL: vec256_eltty_i8_source_subvec_1_target_subvec_mask_1_binary:825; CHECK:       # %bb.0:826; CHECK-NEXT:    vextracti128 $1, %ymm1, %xmm1827; CHECK-NEXT:    vpslldq {{.*#+}} xmm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,xmm1[0]828; CHECK-NEXT:    vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255]829; CHECK-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0830; CHECK-NEXT:    retq831  %r = shufflevector <32 x i8> %x, <32 x i8> %y, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 48, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31>832  ret <32 x i8> %r833}834 835define <32 x i8> @vec256_eltty_i8_source_subvec_1_target_subvec_mask_2_unary(<32 x i8> %x) nounwind {836; CHECK-LABEL: vec256_eltty_i8_source_subvec_1_target_subvec_mask_2_unary:837; CHECK:       # %bb.0:838; CHECK-NEXT:    vpshufb {{.*#+}} ymm0 = ymm0[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,16]839; CHECK-NEXT:    retq840  %r = shufflevector <32 x i8> %x, <32 x i8> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 16>841  ret <32 x i8> %r842}843 844define <32 x i8> @vec256_eltty_i8_source_subvec_1_target_subvec_mask_2_binary(<32 x i8> %x, <32 x i8> %y) nounwind {845; CHECK-LABEL: vec256_eltty_i8_source_subvec_1_target_subvec_mask_2_binary:846; CHECK:       # %bb.0:847; CHECK-NEXT:    vextracti128 $1, %ymm1, %xmm1848; CHECK-NEXT:    vpbroadcastb %xmm1, %ymm1849; CHECK-NEXT:    vmovdqa {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]850; CHECK-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0851; CHECK-NEXT:    retq852  %r = shufflevector <32 x i8> %x, <32 x i8> %y, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 48>853  ret <32 x i8> %r854}855 856define <32 x i8> @vec256_eltty_i8_source_subvec_1_target_subvec_mask_3_unary(<32 x i8> %x) nounwind {857; CHECK-LABEL: vec256_eltty_i8_source_subvec_1_target_subvec_mask_3_unary:858; CHECK:       # %bb.0:859; CHECK-NEXT:    vpermq {{.*#+}} ymm1 = ymm0[2,3,2,3]860; CHECK-NEXT:    vpslldq {{.*#+}} ymm1 = zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm1[0],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,ymm1[16]861; CHECK-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]862; CHECK-NEXT:    # ymm2 = mem[0,1,0,1]863; CHECK-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0864; CHECK-NEXT:    retq865  %r = shufflevector <32 x i8> %x, <32 x i8> poison, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 16, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 16>866  ret <32 x i8> %r867}868 869define <32 x i8> @vec256_eltty_i8_source_subvec_1_target_subvec_mask_3_binary(<32 x i8> %x, <32 x i8> %y) nounwind {870; CHECK-LABEL: vec256_eltty_i8_source_subvec_1_target_subvec_mask_3_binary:871; CHECK:       # %bb.0:872; CHECK-NEXT:    vextracti128 $1, %ymm1, %xmm1873; CHECK-NEXT:    vpbroadcastb %xmm1, %ymm1874; CHECK-NEXT:    vbroadcasti128 {{.*#+}} ymm2 = [255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0]875; CHECK-NEXT:    # ymm2 = mem[0,1,0,1]876; CHECK-NEXT:    vpblendvb %ymm2, %ymm0, %ymm1, %ymm0877; CHECK-NEXT:    retq878  %r = shufflevector <32 x i8> %x, <32 x i8> %y, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 48, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 48>879  ret <32 x i8> %r880}881