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