518 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl | FileCheck --check-prefixes=ALL,KNL %s3; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=skx | FileCheck --check-prefixes=ALL,SKX %s4 5target triple = "x86_64-unknown-unknown"6 7define <32 x i16> @shuffle_v32i16(<32 x i16> %a) {8; KNL-LABEL: shuffle_v32i16:9; KNL: ## %bb.0:10; KNL-NEXT: vpbroadcastw %xmm0, %ymm011; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm012; KNL-NEXT: retq13;14; SKX-LABEL: shuffle_v32i16:15; SKX: ## %bb.0:16; SKX-NEXT: vpbroadcastw %xmm0, %zmm017; SKX-NEXT: retq18 %c = shufflevector <32 x i16> %a, <32 x i16> poison, <32 x i32> zeroinitializer19 ret <32 x i16> %c20}21 22define <32 x i16> @shuffle_v32i16_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08(<32 x i16> %a) {23; KNL-LABEL: shuffle_v32i16_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08:24; KNL: ## %bb.0:25; KNL-NEXT: vextracti128 $1, %ymm0, %xmm026; KNL-NEXT: vpbroadcastw %xmm0, %ymm027; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm028; KNL-NEXT: retq29;30; SKX-LABEL: shuffle_v32i16_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08_08:31; SKX: ## %bb.0:32; SKX-NEXT: vpbroadcastd {{.*#+}} zmm1 = [8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8]33; SKX-NEXT: vpermw %zmm0, %zmm1, %zmm034; SKX-NEXT: retq35 %c = shufflevector <32 x i16> %a, <32 x i16> poison, <32 x i32> <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>36 ret <32 x i16> %c37}38 39define <32 x i16> @shuffle_v32i16_02_05_u_u_07_u_0a_01_00_05_u_04_07_u_0a_01_02_05_u_u_07_u_0a_01_00_05_u_04_07_u_0a_1f(<32 x i16> %a) {40; KNL-LABEL: shuffle_v32i16_02_05_u_u_07_u_0a_01_00_05_u_04_07_u_0a_01_02_05_u_u_07_u_0a_01_00_05_u_04_07_u_0a_1f:41; KNL: ## %bb.0:42; KNL-NEXT: vpshufb {{.*#+}} ymm1 = ymm0[4,5,10,11,4,5,6,7,14,15,2,3,4,5,2,3,20,21,26,27,20,21,22,23,30,31,18,19,20,21,18,19]43; KNL-NEXT: vpermq {{.*#+}} ymm2 = ymm0[2,3,0,1]44; KNL-NEXT: vpshufb {{.*#+}} ymm3 = ymm2[0,1,10,11,8,9,8,9,14,15,6,7,4,5,14,15,16,17,26,27,24,25,24,25,30,31,22,23,20,21,30,31]45; KNL-NEXT: vmovdqa {{.*#+}} ymm4 = [255,255,255,255,u,u,u,u,255,255,u,u,0,0,255,255,0,0,0,0,u,u,0,0,0,0,u,u,255,255,u,u]46; KNL-NEXT: vpblendvb %ymm4, %ymm1, %ymm3, %ymm347; KNL-NEXT: vextracti64x4 $1, %zmm0, %ymm048; KNL-NEXT: vpblendw {{.*#+}} ymm0 = ymm3[0,1,2,3,4,5,6],ymm0[7],ymm3[8,9,10,11,12,13,14],ymm0[15]49; KNL-NEXT: vpblendd {{.*#+}} ymm0 = ymm3[0,1,2,3],ymm0[4,5,6,7]50; KNL-NEXT: vpshufb {{.*#+}} ymm2 = ymm2[0,1,10,11,8,9,8,9,14,15,2,3,4,5,2,3,16,17,26,27,24,25,24,25,30,31,18,19,20,21,18,19]51; KNL-NEXT: vmovdqa {{.*#+}} ymm3 = [0,0,0,0,u,u,u,u,0,0,u,u,255,255,0,0,255,255,255,255,u,u,255,255,255,255,u,u,0,0,255,255]52; KNL-NEXT: vpblendvb %ymm3, %ymm2, %ymm1, %ymm153; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm054; KNL-NEXT: retq55;56; SKX-LABEL: shuffle_v32i16_02_05_u_u_07_u_0a_01_00_05_u_04_07_u_0a_01_02_05_u_u_07_u_0a_01_00_05_u_04_07_u_0a_1f:57; SKX: ## %bb.0:58; SKX-NEXT: vmovdqa64 {{.*#+}} zmm1 = [2,5,u,u,7,u,10,1,0,5,u,4,7,u,10,1,2,5,u,u,7,u,10,1,0,5,u,4,7,u,10,31]59; SKX-NEXT: vpermw %zmm0, %zmm1, %zmm060; SKX-NEXT: retq61 %c = shufflevector <32 x i16> %a, <32 x i16> poison, <32 x i32> <i32 2, i32 5, i32 poison, i32 poison, i32 7, i32 poison, i32 10, i32 1, i32 0, i32 5, i32 poison, i32 4, i32 7, i32 poison, i32 10, i32 1, i32 2, i32 5, i32 poison, i32 poison, i32 7, i32 poison, i32 10, i32 1, i32 0, i32 5, i32 poison, i32 4, i32 7, i32 poison, i32 10, i32 31>62 ret <32 x i16> %c63}64 65define <32 x i16> @shuffle_v32i16_0f_1f_0e_16_0d_1d_04_1e_0b_1b_0a_1a_09_19_08_18_0f_1f_0e_16_0d_1d_04_1e_0b_1b_0a_1a_09_19_08_38(<32 x i16> %a, <32 x i16> %b) {66; KNL-LABEL: shuffle_v32i16_0f_1f_0e_16_0d_1d_04_1e_0b_1b_0a_1a_09_19_08_18_0f_1f_0e_16_0d_1d_04_1e_0b_1b_0a_1a_09_19_08_38:67; KNL: ## %bb.0:68; KNL-NEXT: vextracti64x4 $1, %zmm0, %ymm269; KNL-NEXT: vpermq {{.*#+}} ymm2 = ymm2[3,1,2,3]70; KNL-NEXT: vpshufb {{.*#+}} ymm3 = ymm2[6,7,12,13,2,3,0,1,u,u,u,u,u,u,u,u,22,23,20,21,18,19,u,u,u,u,u,u,u,u,u,u]71; KNL-NEXT: vpermq {{.*#+}} ymm0 = ymm0[3,1,2,3]72; KNL-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[6,7,4,5,2,3,8,9,u,u,u,u,u,u,u,u,22,23,20,21,18,19,16,17,u,u,u,u,u,u,u,u]73; KNL-NEXT: vpunpcklwd {{.*#+}} ymm3 = ymm0[0],ymm3[0],ymm0[1],ymm3[1],ymm0[2],ymm3[2],ymm0[3],ymm3[3],ymm0[8],ymm3[8],ymm0[9],ymm3[9],ymm0[10],ymm3[10],ymm0[11],ymm3[11]74; KNL-NEXT: vextracti32x4 $3, %zmm1, %xmm175; KNL-NEXT: vpbroadcastw %xmm1, %ymm176; KNL-NEXT: vpblendw {{.*#+}} ymm1 = ymm3[0,1,2,3,4,5,6],ymm1[7],ymm3[8,9,10,11,12,13,14],ymm1[15]77; KNL-NEXT: vpblendd {{.*#+}} ymm1 = ymm3[0,1,2,3],ymm1[4,5,6,7]78; KNL-NEXT: vpshufb {{.*#+}} ymm2 = ymm2[6,7,12,13,2,3,0,1,u,u,u,u,u,u,u,u,22,23,20,21,18,19,16,17,u,u,u,u,u,u,u,u]79; KNL-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm2[0],ymm0[1],ymm2[1],ymm0[2],ymm2[2],ymm0[3],ymm2[3],ymm0[8],ymm2[8],ymm0[9],ymm2[9],ymm0[10],ymm2[10],ymm0[11],ymm2[11]80; KNL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm081; KNL-NEXT: retq82;83; SKX-LABEL: shuffle_v32i16_0f_1f_0e_16_0d_1d_04_1e_0b_1b_0a_1a_09_19_08_18_0f_1f_0e_16_0d_1d_04_1e_0b_1b_0a_1a_09_19_08_38:84; SKX: ## %bb.0:85; SKX-NEXT: vmovdqa64 {{.*#+}} zmm2 = [15,31,14,22,13,29,4,28,11,27,10,26,9,25,8,24,15,31,14,22,13,29,4,28,11,27,10,26,9,25,8,56]86; SKX-NEXT: vpermt2w %zmm1, %zmm2, %zmm087; SKX-NEXT: retq88 %c = shufflevector <32 x i16> %a, <32 x i16> %b, <32 x i32> <i32 15, i32 31, i32 14, i32 22, i32 13, i32 29, i32 4, i32 28, i32 11, i32 27, i32 10, i32 26, i32 9, i32 25, i32 8, i32 24, i32 15, i32 31, i32 14, i32 22, i32 13, i32 29, i32 4, i32 28, i32 11, i32 27, i32 10, i32 26, i32 9, i32 25, i32 8, i32 56>89 ret <32 x i16> %c90}91 92define <32 x i16> @shuffle_v16i32_0_32_1_33_2_34_3_35_8_40_9_41_u_u_u_u(<32 x i16> %a, <32 x i16> %b) {93; ALL-LABEL: shuffle_v16i32_0_32_1_33_2_34_3_35_8_40_9_41_u_u_u_u:94; ALL: ## %bb.0:95; ALL-NEXT: vpunpcklwd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[8],ymm1[8],ymm0[9],ymm1[9],ymm0[10],ymm1[10],ymm0[11],ymm1[11]96; ALL-NEXT: retq97 %c = shufflevector <32 x i16> %a, <32 x i16> %b, <32 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 8, i32 40, i32 9, i32 41, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>98 ret <32 x i16> %c99}100 101define <32 x i16> @shuffle_v16i32_4_36_5_37_6_38_7_39_12_44_13_45_u_u_u_u(<32 x i16> %a, <32 x i16> %b) {102; ALL-LABEL: shuffle_v16i32_4_36_5_37_6_38_7_39_12_44_13_45_u_u_u_u:103; ALL: ## %bb.0:104; ALL-NEXT: vpunpckhwd {{.*#+}} ymm0 = ymm0[4],ymm1[4],ymm0[5],ymm1[5],ymm0[6],ymm1[6],ymm0[7],ymm1[7],ymm0[12],ymm1[12],ymm0[13],ymm1[13],ymm0[14],ymm1[14],ymm0[15],ymm1[15]105; ALL-NEXT: retq106 %c = shufflevector <32 x i16> %a, <32 x i16> %b, <32 x i32> <i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 12, i32 44, i32 13, i32 45, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>107 ret <32 x i16> %c108}109 110define <32 x i16> @shuffle_v32i16_1_z_3_z_5_z_7_z_9_z_11_z_13_z_15_z_17_z_19_z_21_z_23_z_25_z_27_z_29_z_31_z(<32 x i16> %a, <32 x i16> %b) {111; ALL-LABEL: shuffle_v32i16_1_z_3_z_5_z_7_z_9_z_11_z_13_z_15_z_17_z_19_z_21_z_23_z_25_z_27_z_29_z_31_z:112; ALL: ## %bb.0:113; ALL-NEXT: vpsrld $16, %zmm0, %zmm0114; ALL-NEXT: retq115 %c = shufflevector <32 x i16> %a, <32 x i16> zeroinitializer, <32 x i32> <i32 1, i32 34, i32 3, i32 34, i32 5, i32 34, i32 7, i32 34, i32 9, i32 34, i32 11, i32 34, i32 13, i32 34, i32 15, i32 34, i32 17, i32 34, i32 19, i32 34, i32 21, i32 34, i32 23, i32 34, i32 25, i32 34, i32 27, i32 34, i32 29, i32 34, i32 31, i32 34>116 ret <32 x i16> %c117}118 119define <32 x i16> @shuffle_v32i16_z_0_z_2_z_4_z_6_z_8_z_10_z_12_z_14_z_16_z_18_z_20_z_22_z_24_z_26_z_28_z_30(<32 x i16> %a, <32 x i16> %b) {120; ALL-LABEL: shuffle_v32i16_z_0_z_2_z_4_z_6_z_8_z_10_z_12_z_14_z_16_z_18_z_20_z_22_z_24_z_26_z_28_z_30:121; ALL: ## %bb.0:122; ALL-NEXT: vpslld $16, %zmm0, %zmm0123; ALL-NEXT: retq124 %c = shufflevector <32 x i16> %a, <32 x i16> zeroinitializer, <32 x i32> <i32 34, i32 0, i32 34, i32 2, i32 34, i32 4, i32 34, i32 6, i32 34, i32 8, i32 34, i32 10, i32 34, i32 12, i32 34, i32 14, i32 34, i32 16, i32 34, i32 18, i32 34, i32 20, i32 34, i32 22, i32 34, i32 24, i32 34, i32 26, i32 34, i32 28, i32 34, i32 30>125 ret <32 x i16> %c126}127 128define <32 x i16> @shuffle_v32i16_1_1_0_0_4_5_6_7_9_9_8_8_12_13_14_15_17_17_16_16_20_21_22_23_25_25_24_24_28_29_30_31(<32 x i16> %a, <32 x i16> %b) {129; KNL-LABEL: shuffle_v32i16_1_1_0_0_4_5_6_7_9_9_8_8_12_13_14_15_17_17_16_16_20_21_22_23_25_25_24_24_28_29_30_31:130; KNL: ## %bb.0:131; KNL-NEXT: vpshuflw {{.*#+}} ymm1 = ymm0[1,1,0,0,4,5,6,7,9,9,8,8,12,13,14,15]132; KNL-NEXT: vextracti64x4 $1, %zmm0, %ymm0133; KNL-NEXT: vpshuflw {{.*#+}} ymm0 = ymm0[1,1,0,0,4,5,6,7,9,9,8,8,12,13,14,15]134; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0135; KNL-NEXT: retq136;137; SKX-LABEL: shuffle_v32i16_1_1_0_0_4_5_6_7_9_9_8_8_12_13_14_15_17_17_16_16_20_21_22_23_25_25_24_24_28_29_30_31:138; SKX: ## %bb.0:139; SKX-NEXT: vpshuflw {{.*#+}} zmm0 = zmm0[1,1,0,0,4,5,6,7,9,9,8,8,12,13,14,15,17,17,16,16,20,21,22,23,25,25,24,24,28,29,30,31]140; SKX-NEXT: retq141 %c = shufflevector <32 x i16> %a, <32 x i16> zeroinitializer, <32 x i32> <i32 1, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7, i32 9, i32 9, i32 8, i32 8, i32 12, i32 13, i32 14, i32 15, i32 17, i32 17, i32 16, i32 16, i32 20, i32 21, i32 22, i32 23, i32 25, i32 25, i32 24, i32 24, i32 28, i32 29, i32 30, i32 31>142 ret <32 x i16> %c143}144 145define <32 x i16> @shuffle_v32i16_0_1_2_3_5_5_4_4_8_9_10_11_13_13_12_12_16_17_18_19_21_21_20_20_24_25_26_27_29_29_28_28(<32 x i16> %a, <32 x i16> %b) {146; KNL-LABEL: shuffle_v32i16_0_1_2_3_5_5_4_4_8_9_10_11_13_13_12_12_16_17_18_19_21_21_20_20_24_25_26_27_29_29_28_28:147; KNL: ## %bb.0:148; KNL-NEXT: vpshufhw {{.*#+}} ymm1 = ymm0[0,1,2,3,5,5,4,4,8,9,10,11,13,13,12,12]149; KNL-NEXT: vextracti64x4 $1, %zmm0, %ymm0150; KNL-NEXT: vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,5,5,4,4,8,9,10,11,13,13,12,12]151; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0152; KNL-NEXT: retq153;154; SKX-LABEL: shuffle_v32i16_0_1_2_3_5_5_4_4_8_9_10_11_13_13_12_12_16_17_18_19_21_21_20_20_24_25_26_27_29_29_28_28:155; SKX: ## %bb.0:156; SKX-NEXT: vpshufhw {{.*#+}} zmm0 = zmm0[0,1,2,3,5,5,4,4,8,9,10,11,13,13,12,12,16,17,18,19,21,21,20,20,24,25,26,27,29,29,28,28]157; SKX-NEXT: retq158 %c = shufflevector <32 x i16> %a, <32 x i16> zeroinitializer, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 4, i32 4, i32 8, i32 9, i32 10, i32 11, i32 13, i32 13, i32 12, i32 12, i32 16, i32 17, i32 18, i32 19, i32 21, i32 21, i32 20, i32 20, i32 24, i32 25, i32 26, i32 27, i32 29, i32 29, i32 28, i32 28>159 ret <32 x i16> %c160}161 162define <32 x i16> @shuffle_v32i16_1_1_0_0_5_5_4_4_9_9_11_11_13_13_12_12_17_17_19_19_21_21_20_20_25_25_27_27_29_29_28_28(<32 x i16> %a, <32 x i16> %b) {163; KNL-LABEL: shuffle_v32i16_1_1_0_0_5_5_4_4_9_9_11_11_13_13_12_12_17_17_19_19_21_21_20_20_25_25_27_27_29_29_28_28:164; KNL: ## %bb.0:165; KNL-NEXT: vpshuflw {{.*#+}} ymm1 = ymm0[1,1,0,0,4,5,6,7,9,9,8,8,12,13,14,15]166; KNL-NEXT: vpshufhw {{.*#+}} ymm1 = ymm1[0,1,2,3,5,5,4,4,8,9,10,11,13,13,12,12]167; KNL-NEXT: vextracti64x4 $1, %zmm0, %ymm0168; KNL-NEXT: vpshuflw {{.*#+}} ymm0 = ymm0[1,1,0,0,4,5,6,7,9,9,8,8,12,13,14,15]169; KNL-NEXT: vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,5,5,4,4,8,9,10,11,13,13,12,12]170; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0171; KNL-NEXT: retq172;173; SKX-LABEL: shuffle_v32i16_1_1_0_0_5_5_4_4_9_9_11_11_13_13_12_12_17_17_19_19_21_21_20_20_25_25_27_27_29_29_28_28:174; SKX: ## %bb.0:175; SKX-NEXT: vpshufb {{.*#+}} zmm0 = zmm0[2,3,2,3,0,1,0,1,10,11,10,11,8,9,8,9,18,19,18,19,16,17,16,17,26,27,26,27,24,25,24,25,34,35,34,35,32,33,32,33,42,43,42,43,40,41,40,41,50,51,50,51,48,49,48,49,58,59,58,59,56,57,56,57]176; SKX-NEXT: retq177 %c = shufflevector <32 x i16> %a, <32 x i16> zeroinitializer, <32 x i32> <i32 1, i32 1, i32 0, i32 0, i32 5, i32 5, i32 4, i32 4, i32 9, i32 9, i32 8, i32 8, i32 13, i32 13, i32 12, i32 12, i32 17, i32 17, i32 16, i32 16, i32 21, i32 21, i32 20, i32 20, i32 25, i32 25, i32 24, i32 24, i32 29, i32 29, i32 28, i32 28>178 ret <32 x i16> %c179}180 181define <32 x i16> @shuffle_v32i16_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14_17_16_19_18_21_20_23_22_25_24_27_26_29_28_31_30(<32 x i16> %a) {182; ALL-LABEL: shuffle_v32i16_01_00_03_02_05_04_07_06_09_08_11_10_13_12_15_14_17_16_19_18_21_20_23_22_25_24_27_26_29_28_31_30:183; ALL: ## %bb.0:184; ALL-NEXT: vprold $16, %zmm0, %zmm0185; ALL-NEXT: retq186 %shuffle = shufflevector <32 x i16> %a, <32 x i16> poison, <32 x i32> <i32 1, i32 0, i32 3, i32 2, i32 5, i32 4, i32 7, i32 6, i32 9, i32 8, i32 11, i32 10, i32 13, i32 12, i32 15, i32 14, i32 17, i32 16, i32 19, i32 18, i32 21, i32 20, i32 23, i32 22, i32 25, i32 24, i32 27, i32 26, i32 29, i32 28, i32 31, i32 30>187 ret <32 x i16> %shuffle188}189 190define <32 x i16> @shuffle_v32i16_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14_19_16_17_18_23_20_21_22_27_24_25_26_31_28_29_30(<32 x i16> %a) {191; ALL-LABEL: shuffle_v32i16_03_00_01_02_07_04_05_06_11_08_09_10_15_12_13_14_19_16_17_18_23_20_21_22_27_24_25_26_31_28_29_30:192; ALL: ## %bb.0:193; ALL-NEXT: vprolq $16, %zmm0, %zmm0194; ALL-NEXT: retq195 %shuffle = shufflevector <32 x i16> %a, <32 x i16> poison, <32 x i32> <i32 3, i32 0, i32 1, i32 2, i32 7, i32 4, i32 5, i32 6, i32 11, i32 8, i32 9, i32 10, i32 15, i32 12, i32 13, i32 14, i32 19, i32 16, i32 17, i32 18, i32 23, i32 20, i32 21, i32 22, i32 27, i32 24, i32 25, i32 26, i32 31, i32 28, i32 29, i32 30>196 ret <32 x i16> %shuffle197}198 199define <32 x i16> @shuffle_v32i16_0zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz(<32 x i16> %a) {200; KNL-LABEL: shuffle_v32i16_0zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz:201; KNL: ## %bb.0:202; KNL-NEXT: vmovd {{.*#+}} xmm1 = [65535,0,0,0]203; KNL-NEXT: vpandq %zmm1, %zmm0, %zmm0204; KNL-NEXT: retq205;206; SKX-LABEL: shuffle_v32i16_0zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz:207; SKX: ## %bb.0:208; SKX-NEXT: vmovaps {{.*#+}} xmm1 = [65535,0,0,0]209; SKX-NEXT: vandps %zmm1, %zmm0, %zmm0210; SKX-NEXT: retq211 %shuffle = shufflevector <32 x i16> %a, <32 x i16> zeroinitializer, <32 x i32> <i32 0, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32>212 ret <32 x i16> %shuffle213}214 215define <32 x i16> @shuffle_v32i16_ashr_00_02_04_06_32_34_36_38_08_10_12_14_40_42_44_46_16_18_20_22_48_50_52_54_24_26_28_30_56_58_60_62(<16 x i32> %a0, <16 x i32> %a1) nounwind {216; KNL-LABEL: shuffle_v32i16_ashr_00_02_04_06_32_34_36_38_08_10_12_14_40_42_44_46_16_18_20_22_48_50_52_54_24_26_28_30_56_58_60_62:217; KNL: ## %bb.0:218; KNL-NEXT: vpsrad $25, %zmm0, %zmm0219; KNL-NEXT: vpsrad $25, %zmm1, %zmm1220; KNL-NEXT: vextracti64x4 $1, %zmm1, %ymm2221; KNL-NEXT: vextracti64x4 $1, %zmm0, %ymm3222; KNL-NEXT: vpackssdw %ymm2, %ymm3, %ymm2223; KNL-NEXT: vpackssdw %ymm1, %ymm0, %ymm0224; KNL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0225; KNL-NEXT: retq226;227; SKX-LABEL: shuffle_v32i16_ashr_00_02_04_06_32_34_36_38_08_10_12_14_40_42_44_46_16_18_20_22_48_50_52_54_24_26_28_30_56_58_60_62:228; SKX: ## %bb.0:229; SKX-NEXT: vpsrad $25, %zmm0, %zmm0230; SKX-NEXT: vpsrad $25, %zmm1, %zmm1231; SKX-NEXT: vpackssdw %zmm1, %zmm0, %zmm0232; SKX-NEXT: retq233 %1 = ashr <16 x i32> %a0, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>234 %2 = ashr <16 x i32> %a1, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>235 %3 = bitcast <16 x i32> %1 to <32 x i16>236 %4 = bitcast <16 x i32> %2 to <32 x i16>237 %5 = shufflevector <32 x i16> %3, <32 x i16> %4, <32 x i32> <i32 0, i32 2, i32 4, i32 6, i32 32, i32 34, i32 36, i32 38, i32 8, i32 10, i32 12, i32 14, i32 40, i32 42, i32 44, i32 46, i32 16, i32 18, i32 20, i32 22, i32 48, i32 50, i32 52, i32 54, i32 24, i32 26, i32 28, i32 30, i32 56, i32 58, i32 60, i32 62>238 ret <32 x i16> %5239}240 241define <32 x i16> @shuffle_v32i16_lshr_00_02_04_06_32_34_36_38_08_10_12_14_40_42_44_46_16_18_20_22_48_50_52_54_24_26_28_30_56_58_60_62(<16 x i32> %a0, <16 x i32> %a1) nounwind {242; KNL-LABEL: shuffle_v32i16_lshr_00_02_04_06_32_34_36_38_08_10_12_14_40_42_44_46_16_18_20_22_48_50_52_54_24_26_28_30_56_58_60_62:243; KNL: ## %bb.0:244; KNL-NEXT: vpsrld $25, %zmm0, %zmm0245; KNL-NEXT: vpsrld $25, %zmm1, %zmm1246; KNL-NEXT: vextracti64x4 $1, %zmm1, %ymm2247; KNL-NEXT: vextracti64x4 $1, %zmm0, %ymm3248; KNL-NEXT: vpackusdw %ymm2, %ymm3, %ymm2249; KNL-NEXT: vpackusdw %ymm1, %ymm0, %ymm0250; KNL-NEXT: vinserti64x4 $1, %ymm2, %zmm0, %zmm0251; KNL-NEXT: retq252;253; SKX-LABEL: shuffle_v32i16_lshr_00_02_04_06_32_34_36_38_08_10_12_14_40_42_44_46_16_18_20_22_48_50_52_54_24_26_28_30_56_58_60_62:254; SKX: ## %bb.0:255; SKX-NEXT: vpsrld $25, %zmm0, %zmm0256; SKX-NEXT: vpsrld $25, %zmm1, %zmm1257; SKX-NEXT: vpackusdw %zmm1, %zmm0, %zmm0258; SKX-NEXT: retq259 %1 = lshr <16 x i32> %a0, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>260 %2 = lshr <16 x i32> %a1, <i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25, i32 25>261 %3 = bitcast <16 x i32> %1 to <32 x i16>262 %4 = bitcast <16 x i32> %2 to <32 x i16>263 %5 = shufflevector <32 x i16> %3, <32 x i16> %4, <32 x i32> <i32 0, i32 2, i32 4, i32 6, i32 32, i32 34, i32 36, i32 38, i32 8, i32 10, i32 12, i32 14, i32 40, i32 42, i32 44, i32 46, i32 16, i32 18, i32 20, i32 22, i32 48, i32 50, i32 52, i32 54, i32 24, i32 26, i32 28, i32 30, i32 56, i32 58, i32 60, i32 62>264 ret <32 x i16> %5265}266 267define <32 x i16> @shuffle_v32i16_concat_00_00_00_00_04_05_06_07_08_08_08_08_12_13_14_15_16_16_16_16_20_21_22_23_24_24_24_24_28_29_30_31(<16 x i16> %a0, <16 x i16> %a1) {268; KNL-LABEL: shuffle_v32i16_concat_00_00_00_00_04_05_06_07_08_08_08_08_12_13_14_15_16_16_16_16_20_21_22_23_24_24_24_24_28_29_30_31:269; KNL: ## %bb.0:270; KNL-NEXT: vpshuflw {{.*#+}} ymm0 = ymm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]271; KNL-NEXT: vpshuflw {{.*#+}} ymm1 = ymm1[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15]272; KNL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0273; KNL-NEXT: retq274;275; SKX-LABEL: shuffle_v32i16_concat_00_00_00_00_04_05_06_07_08_08_08_08_12_13_14_15_16_16_16_16_20_21_22_23_24_24_24_24_28_29_30_31:276; SKX: ## %bb.0:277; SKX-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm0278; SKX-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0279; SKX-NEXT: vpshuflw {{.*#+}} zmm0 = zmm0[0,0,0,0,4,5,6,7,8,8,8,8,12,13,14,15,16,16,16,16,20,21,22,23,24,24,24,24,28,29,30,31]280; SKX-NEXT: retq281 %shuffle = shufflevector <16 x i16> %a0, <16 x i16> %a1, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7, i32 8, i32 8, i32 8, i32 8, i32 12, i32 13, i32 14, i32 15, i32 16, i32 16, i32 16, i32 16, i32 20, i32 21, i32 22, i32 23, i32 24, i32 24, i32 24, i32 24, i32 28, i32 29, i32 30, i32 31>282 ret <32 x i16> %shuffle283}284 285define <32 x i16> @shuffle_v32i16_concat_00_01_02_03_04_07_06_04_08_09_10_11_12_15_14_12_16_17_18_19_20_23_22_20_24_25_26_27_28_31_30_28(<16 x i16> %a0, <16 x i16> %a1) {286; KNL-LABEL: shuffle_v32i16_concat_00_01_02_03_04_07_06_04_08_09_10_11_12_15_14_12_16_17_18_19_20_23_22_20_24_25_26_27_28_31_30_28:287; KNL: ## %bb.0:288; KNL-NEXT: vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,7,6,4,8,9,10,11,12,15,14,12]289; KNL-NEXT: vpshufhw {{.*#+}} ymm1 = ymm1[0,1,2,3,4,7,6,4,8,9,10,11,12,15,14,12]290; KNL-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0291; KNL-NEXT: retq292;293; SKX-LABEL: shuffle_v32i16_concat_00_01_02_03_04_07_06_04_08_09_10_11_12_15_14_12_16_17_18_19_20_23_22_20_24_25_26_27_28_31_30_28:294; SKX: ## %bb.0:295; SKX-NEXT: ## kill: def $ymm0 killed $ymm0 def $zmm0296; SKX-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0297; SKX-NEXT: vpshufhw {{.*#+}} zmm0 = zmm0[0,1,2,3,4,7,6,4,8,9,10,11,12,15,14,12,16,17,18,19,20,23,22,20,24,25,26,27,28,31,30,28]298; SKX-NEXT: retq299 %shuffle = shufflevector <16 x i16> %a0, <16 x i16> %a1, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 7, i32 6, i32 4, i32 8, i32 9, i32 10, i32 11, i32 12, i32 15, i32 14, i32 12, i32 16, i32 17, i32 18, i32 19, i32 20, i32 23, i32 22, i32 20, i32 24, i32 25, i32 26, i32 27, i32 28, i32 31, i32 30, i32 28>300 ret <32 x i16> %shuffle301}302 303define <32 x i16> @insert_dup_mem_v32i16_i32(ptr %ptr) {304; KNL-LABEL: insert_dup_mem_v32i16_i32:305; KNL: ## %bb.0:306; KNL-NEXT: vpbroadcastw (%rdi), %ymm0307; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0308; KNL-NEXT: retq309;310; SKX-LABEL: insert_dup_mem_v32i16_i32:311; SKX: ## %bb.0:312; SKX-NEXT: vpbroadcastw (%rdi), %zmm0313; SKX-NEXT: retq314 %tmp = load i32, ptr %ptr, align 4315 %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 0316 %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>317 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <32 x i32> zeroinitializer318 ret <32 x i16> %tmp3319}320 321define <32 x i16> @insert_dup_mem_v32i16_sext_i16(ptr %ptr) {322; KNL-LABEL: insert_dup_mem_v32i16_sext_i16:323; KNL: ## %bb.0:324; KNL-NEXT: vpbroadcastw (%rdi), %ymm0325; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0326; KNL-NEXT: retq327;328; SKX-LABEL: insert_dup_mem_v32i16_sext_i16:329; SKX: ## %bb.0:330; SKX-NEXT: vpbroadcastw (%rdi), %zmm0331; SKX-NEXT: retq332 %tmp = load i16, ptr %ptr, align 2333 %tmp1 = sext i16 %tmp to i32334 %tmp2 = insertelement <4 x i32> zeroinitializer, i32 %tmp1, i32 0335 %tmp3 = bitcast <4 x i32> %tmp2 to <8 x i16>336 %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> poison, <32 x i32> zeroinitializer337 ret <32 x i16> %tmp4338}339 340define <32 x i16> @insert_dup_elt1_mem_v32i16_i32(ptr %ptr) #0 {341; KNL-LABEL: insert_dup_elt1_mem_v32i16_i32:342; KNL: ## %bb.0:343; KNL-NEXT: vpbroadcastw 2(%rdi), %ymm0344; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0345; KNL-NEXT: retq346;347; SKX-LABEL: insert_dup_elt1_mem_v32i16_i32:348; SKX: ## %bb.0:349; SKX-NEXT: vpbroadcastw 2(%rdi), %zmm0350; SKX-NEXT: retq351 %tmp = load i32, ptr %ptr, align 4352 %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 0353 %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>354 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <32 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>355 ret <32 x i16> %tmp3356}357 358define <32 x i16> @insert_dup_elt3_mem_v32i16_i32(ptr %ptr) #0 {359; KNL-LABEL: insert_dup_elt3_mem_v32i16_i32:360; KNL: ## %bb.0:361; KNL-NEXT: vpbroadcastw 2(%rdi), %ymm0362; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0363; KNL-NEXT: retq364;365; SKX-LABEL: insert_dup_elt3_mem_v32i16_i32:366; SKX: ## %bb.0:367; SKX-NEXT: vpbroadcastw 2(%rdi), %zmm0368; SKX-NEXT: retq369 %tmp = load i32, ptr %ptr, align 4370 %tmp1 = insertelement <4 x i32> zeroinitializer, i32 %tmp, i32 1371 %tmp2 = bitcast <4 x i32> %tmp1 to <8 x i16>372 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <32 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>373 ret <32 x i16> %tmp3374}375 376define <32 x i16> @insert_dup_mem_v16i16_i64(ptr %ptr) {377; KNL-LABEL: insert_dup_mem_v16i16_i64:378; KNL: ## %bb.0:379; KNL-NEXT: vpbroadcastw (%rdi), %ymm0380; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0381; KNL-NEXT: retq382;383; SKX-LABEL: insert_dup_mem_v16i16_i64:384; SKX: ## %bb.0:385; SKX-NEXT: vpbroadcastw (%rdi), %zmm0386; SKX-NEXT: retq387 %tmp = load i64, ptr %ptr, align 4388 %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 0389 %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>390 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <32 x i32> zeroinitializer391 ret <32 x i16> %tmp3392}393 394define <32 x i16> @insert_dup_elt1_mem_v16i16_i64(ptr %ptr) {395; KNL-LABEL: insert_dup_elt1_mem_v16i16_i64:396; KNL: ## %bb.0:397; KNL-NEXT: vpbroadcastw 2(%rdi), %ymm0398; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0399; KNL-NEXT: retq400;401; SKX-LABEL: insert_dup_elt1_mem_v16i16_i64:402; SKX: ## %bb.0:403; SKX-NEXT: vpbroadcastw 2(%rdi), %zmm0404; SKX-NEXT: retq405 %tmp = load i64, ptr %ptr, align 4406 %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 0407 %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>408 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <32 x i32> <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>409 ret <32 x i16> %tmp3410}411 412define <32 x i16> @insert_dup_elt3_mem_v16i16_i64(ptr %ptr) {413; KNL-LABEL: insert_dup_elt3_mem_v16i16_i64:414; KNL: ## %bb.0:415; KNL-NEXT: vpbroadcastw 6(%rdi), %ymm0416; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0417; KNL-NEXT: retq418;419; SKX-LABEL: insert_dup_elt3_mem_v16i16_i64:420; SKX: ## %bb.0:421; SKX-NEXT: vpbroadcastw 6(%rdi), %zmm0422; SKX-NEXT: retq423 %tmp = load i64, ptr %ptr, align 4424 %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 0425 %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>426 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <32 x i32> <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>427 ret <32 x i16> %tmp3428}429 430define <32 x i16> @insert_dup_elt7_mem_v16i16_i64(ptr %ptr) {431; KNL-LABEL: insert_dup_elt7_mem_v16i16_i64:432; KNL: ## %bb.0:433; KNL-NEXT: vpbroadcastw 6(%rdi), %ymm0434; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0435; KNL-NEXT: retq436;437; SKX-LABEL: insert_dup_elt7_mem_v16i16_i64:438; SKX: ## %bb.0:439; SKX-NEXT: vpbroadcastw 6(%rdi), %zmm0440; SKX-NEXT: retq441 %tmp = load i64, ptr %ptr, align 4442 %tmp1 = insertelement <2 x i64> zeroinitializer, i64 %tmp, i32 1443 %tmp2 = bitcast <2 x i64> %tmp1 to <8 x i16>444 %tmp3 = shufflevector <8 x i16> %tmp2, <8 x i16> poison, <32 x i32> <i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7>445 ret <32 x i16> %tmp3446}447 448define <32 x i16> @insert_dup_mem_v16i16_sext_i16_i64(ptr %ptr) {449; KNL-LABEL: insert_dup_mem_v16i16_sext_i16_i64:450; KNL: ## %bb.0:451; KNL-NEXT: vpbroadcastw (%rdi), %ymm0452; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm0, %zmm0453; KNL-NEXT: retq454;455; SKX-LABEL: insert_dup_mem_v16i16_sext_i16_i64:456; SKX: ## %bb.0:457; SKX-NEXT: vpbroadcastw (%rdi), %zmm0458; SKX-NEXT: retq459 %tmp = load i16, ptr %ptr, align 2460 %tmp1 = sext i16 %tmp to i64461 %tmp2 = insertelement <2 x i64> zeroinitializer, i64 %tmp1, i32 0462 %tmp3 = bitcast <2 x i64> %tmp2 to <8 x i16>463 %tmp4 = shufflevector <8 x i16> %tmp3, <8 x i16> poison, <32 x i32> zeroinitializer464 ret <32 x i16> %tmp4465}466 467define <32 x i16> @shuffle_v32i16_32_zz_zz_zz_33_zz_zz_zz_34_zz_zz_zz_35_zz_zz_zz_36_zz_zz_zz_37_zz_zz_zz_38_zz_zz_zz_39_zz_zz_zz(<32 x i16> %a) {468; ALL-LABEL: shuffle_v32i16_32_zz_zz_zz_33_zz_zz_zz_34_zz_zz_zz_35_zz_zz_zz_36_zz_zz_zz_37_zz_zz_zz_38_zz_zz_zz_39_zz_zz_zz:469; ALL: ## %bb.0:470; ALL-NEXT: vpmovzxwq {{.*#+}} zmm0 = xmm0[0],zero,zero,zero,xmm0[1],zero,zero,zero,xmm0[2],zero,zero,zero,xmm0[3],zero,zero,zero,xmm0[4],zero,zero,zero,xmm0[5],zero,zero,zero,xmm0[6],zero,zero,zero,xmm0[7],zero,zero,zero471; ALL-NEXT: retq472 %shuffle = shufflevector <32 x i16> zeroinitializer, <32 x i16> %a, <32 x i32> <i32 32, i32 0, i32 0, i32 0, i32 33, i32 0, i32 0, i32 0, i32 34, i32 0, i32 0, i32 0, i32 35, i32 0, i32 0, i32 0, i32 36, i32 0, i32 0, i32 0, i32 37, i32 0, i32 0, i32 0, i32 38, i32 0, i32 0, i32 0, i32 39, i32 0, i32 0, i32 0>473 ret <32 x i16> %shuffle474}475 476define <32 x i16> @shuffle_v32i16_32_zz_33_zz_34_zz_35_zz_36_zz_37_zz_38_zz_39_zz_40_zz_41_zz_42_zz_43_zz_44_zz_45_zz_46_zz_47_zz(<32 x i16> %a) {477; ALL-LABEL: shuffle_v32i16_32_zz_33_zz_34_zz_35_zz_36_zz_37_zz_38_zz_39_zz_40_zz_41_zz_42_zz_43_zz_44_zz_45_zz_46_zz_47_zz:478; ALL: ## %bb.0:479; ALL-NEXT: vpmovzxwd {{.*#+}} zmm0 = ymm0[0],zero,ymm0[1],zero,ymm0[2],zero,ymm0[3],zero,ymm0[4],zero,ymm0[5],zero,ymm0[6],zero,ymm0[7],zero,ymm0[8],zero,ymm0[9],zero,ymm0[10],zero,ymm0[11],zero,ymm0[12],zero,ymm0[13],zero,ymm0[14],zero,ymm0[15],zero480; ALL-NEXT: retq481 %shuffle = shufflevector <32 x i16> zeroinitializer, <32 x i16> %a, <32 x i32> <i32 32, i32 0, i32 33, i32 0, i32 34, i32 0, i32 35, i32 0, i32 36, i32 0, i32 37, i32 0, i32 38, i32 0, i32 39, i32 0, i32 40, i32 0, i32 41, i32 0, i32 42, i32 0, i32 43, i32 0, i32 44, i32 0, i32 45, i32 0, i32 46, i32 0, i32 47, i32 0>482 ret <32 x i16> %shuffle483}484 485define <8 x i16> @pr32967(<32 x i16> %v) {486; KNL-LABEL: pr32967:487; KNL: ## %bb.0:488; KNL-NEXT: vpsrlq $16, %zmm0, %zmm0489; KNL-NEXT: vpmovqw %zmm0, %xmm0490; KNL-NEXT: retq491;492; SKX-LABEL: pr32967:493; SKX: ## %bb.0:494; SKX-NEXT: vpsrlq $16, %zmm0, %zmm0495; SKX-NEXT: vpmovqw %zmm0, %xmm0496; SKX-NEXT: vzeroupper497; SKX-NEXT: retq498 %shuffle = shufflevector <32 x i16> %v, <32 x i16> poison, <8 x i32> <i32 1,i32 5,i32 9,i32 13,i32 17,i32 21,i32 25,i32 29>499 ret <8 x i16> %shuffle500}501 502define <32 x i16> @shuffle_v32i16_07_zz_05_zz_03_zz_01_zz_15_zz_13_zz_11_zz_09_zz_23_zz_21_zz_19_zz_17_zz_31_zz_29_zz_27_zz_25_zz(<32 x i16> %a) {503; KNL-LABEL: shuffle_v32i16_07_zz_05_zz_03_zz_01_zz_15_zz_13_zz_11_zz_09_zz_23_zz_21_zz_19_zz_17_zz_31_zz_29_zz_27_zz_25_zz:504; KNL: ## %bb.0:505; KNL-NEXT: vpshufb {{.*#+}} ymm1 = ymm0[14,15],zero,zero,ymm0[10,11],zero,zero,ymm0[6,7],zero,zero,ymm0[2,3],zero,zero,ymm0[30,31],zero,zero,ymm0[26,27],zero,zero,ymm0[22,23],zero,zero,ymm0[18,19],zero,zero506; KNL-NEXT: vextracti64x4 $1, %zmm0, %ymm0507; KNL-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[14,15],zero,zero,ymm0[10,11],zero,zero,ymm0[6,7],zero,zero,ymm0[2,3],zero,zero,ymm0[30,31],zero,zero,ymm0[26,27],zero,zero,ymm0[22,23],zero,zero,ymm0[20,21],zero,zero508; KNL-NEXT: vinserti64x4 $1, %ymm0, %zmm1, %zmm0509; KNL-NEXT: retq510;511; SKX-LABEL: shuffle_v32i16_07_zz_05_zz_03_zz_01_zz_15_zz_13_zz_11_zz_09_zz_23_zz_21_zz_19_zz_17_zz_31_zz_29_zz_27_zz_25_zz:512; SKX: ## %bb.0:513; SKX-NEXT: vpshufb {{.*#+}} zmm0 = zmm0[14,15],zero,zero,zmm0[10,11],zero,zero,zmm0[6,7],zero,zero,zmm0[2,3],zero,zero,zmm0[30,31],zero,zero,zmm0[26,27],zero,zero,zmm0[22,23],zero,zero,zmm0[18,19],zero,zero,zmm0[46,47],zero,zero,zmm0[42,43],zero,zero,zmm0[38,39],zero,zero,zmm0[34,35],zero,zero,zmm0[62,63],zero,zero,zmm0[58,59],zero,zero,zmm0[54,55],zero,zero,zmm0[52,53],zero,zero514; SKX-NEXT: retq515 %shuffle = shufflevector <32 x i16> zeroinitializer, <32 x i16> %a, <32 x i32> <i32 39, i32 0, i32 37, i32 0, i32 35, i32 0, i32 33, i32 0, i32 47, i32 0, i32 45, i32 0, i32 43, i32 0, i32 41, i32 0, i32 55, i32 0, i32 53, i32 0, i32 51, i32 0, i32 49, i32 0, i32 63, i32 0, i32 61, i32 0, i32 59, i32 0, i32 58, i32 0>516 ret <32 x i16> %shuffle517}518