2793 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512vl,+avx512bw %s -o - | FileCheck %s3 4define <16 x i8> @test_16xi8_perm_mask0(<16 x i8> %vec) {5; CHECK-LABEL: test_16xi8_perm_mask0:6; CHECK: # %bb.0:7; CHECK-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[8,6,12,4,7,9,14,8,4,12,9,4,14,15,12,14]8; CHECK-NEXT: retq9 %res = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 8, i32 6, i32 12, i32 4, i32 7, i32 9, i32 14, i32 8, i32 4, i32 12, i32 9, i32 4, i32 14, i32 15, i32 12, i32 14>10 ret <16 x i8> %res11}12define <16 x i8> @test_masked_16xi8_perm_mask0(<16 x i8> %vec, <16 x i8> %vec2, <16 x i8> %mask) {13; CHECK-LABEL: test_masked_16xi8_perm_mask0:14; CHECK: # %bb.0:15; CHECK-NEXT: vptestnmb %xmm2, %xmm2, %k116; CHECK-NEXT: vpshufb {{.*#+}} xmm1 {%k1} = xmm0[8,6,12,4,7,9,14,8,4,12,9,4,14,15,12,14]17; CHECK-NEXT: vmovdqa %xmm1, %xmm018; CHECK-NEXT: retq19 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 8, i32 6, i32 12, i32 4, i32 7, i32 9, i32 14, i32 8, i32 4, i32 12, i32 9, i32 4, i32 14, i32 15, i32 12, i32 14>20 %cmp = icmp eq <16 x i8> %mask, zeroinitializer21 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %vec222 ret <16 x i8> %res23}24 25define <16 x i8> @test_masked_z_16xi8_perm_mask0(<16 x i8> %vec, <16 x i8> %mask) {26; CHECK-LABEL: test_masked_z_16xi8_perm_mask0:27; CHECK: # %bb.0:28; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k129; CHECK-NEXT: vpshufb {{.*#+}} xmm0 {%k1} {z} = xmm0[8,6,12,4,7,9,14,8,4,12,9,4,14,15,12,14]30; CHECK-NEXT: retq31 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 8, i32 6, i32 12, i32 4, i32 7, i32 9, i32 14, i32 8, i32 4, i32 12, i32 9, i32 4, i32 14, i32 15, i32 12, i32 14>32 %cmp = icmp eq <16 x i8> %mask, zeroinitializer33 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer34 ret <16 x i8> %res35}36define <16 x i8> @test_masked_16xi8_perm_mask1(<16 x i8> %vec, <16 x i8> %vec2, <16 x i8> %mask) {37; CHECK-LABEL: test_masked_16xi8_perm_mask1:38; CHECK: # %bb.0:39; CHECK-NEXT: vptestnmb %xmm2, %xmm2, %k140; CHECK-NEXT: vpshufb {{.*#+}} xmm1 {%k1} = xmm0[4,11,14,10,7,1,6,9,14,15,7,13,4,12,8,0]41; CHECK-NEXT: vmovdqa %xmm1, %xmm042; CHECK-NEXT: retq43 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 4, i32 11, i32 14, i32 10, i32 7, i32 1, i32 6, i32 9, i32 14, i32 15, i32 7, i32 13, i32 4, i32 12, i32 8, i32 0>44 %cmp = icmp eq <16 x i8> %mask, zeroinitializer45 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %vec246 ret <16 x i8> %res47}48 49define <16 x i8> @test_masked_z_16xi8_perm_mask1(<16 x i8> %vec, <16 x i8> %mask) {50; CHECK-LABEL: test_masked_z_16xi8_perm_mask1:51; CHECK: # %bb.0:52; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k153; CHECK-NEXT: vpshufb {{.*#+}} xmm0 {%k1} {z} = xmm0[4,11,14,10,7,1,6,9,14,15,7,13,4,12,8,0]54; CHECK-NEXT: retq55 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 4, i32 11, i32 14, i32 10, i32 7, i32 1, i32 6, i32 9, i32 14, i32 15, i32 7, i32 13, i32 4, i32 12, i32 8, i32 0>56 %cmp = icmp eq <16 x i8> %mask, zeroinitializer57 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer58 ret <16 x i8> %res59}60define <16 x i8> @test_masked_16xi8_perm_mask2(<16 x i8> %vec, <16 x i8> %vec2, <16 x i8> %mask) {61; CHECK-LABEL: test_masked_16xi8_perm_mask2:62; CHECK: # %bb.0:63; CHECK-NEXT: vptestnmb %xmm2, %xmm2, %k164; CHECK-NEXT: vpshufb {{.*#+}} xmm1 {%k1} = xmm0[11,6,13,10,0,7,13,3,5,13,3,9,3,15,12,7]65; CHECK-NEXT: vmovdqa %xmm1, %xmm066; CHECK-NEXT: retq67 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 11, i32 6, i32 13, i32 10, i32 0, i32 7, i32 13, i32 3, i32 5, i32 13, i32 3, i32 9, i32 3, i32 15, i32 12, i32 7>68 %cmp = icmp eq <16 x i8> %mask, zeroinitializer69 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %vec270 ret <16 x i8> %res71}72 73define <16 x i8> @test_masked_z_16xi8_perm_mask2(<16 x i8> %vec, <16 x i8> %mask) {74; CHECK-LABEL: test_masked_z_16xi8_perm_mask2:75; CHECK: # %bb.0:76; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k177; CHECK-NEXT: vpshufb {{.*#+}} xmm0 {%k1} {z} = xmm0[11,6,13,10,0,7,13,3,5,13,3,9,3,15,12,7]78; CHECK-NEXT: retq79 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 11, i32 6, i32 13, i32 10, i32 0, i32 7, i32 13, i32 3, i32 5, i32 13, i32 3, i32 9, i32 3, i32 15, i32 12, i32 7>80 %cmp = icmp eq <16 x i8> %mask, zeroinitializer81 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer82 ret <16 x i8> %res83}84define <16 x i8> @test_16xi8_perm_mask3(<16 x i8> %vec) {85; CHECK-LABEL: test_16xi8_perm_mask3:86; CHECK: # %bb.0:87; CHECK-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[1,5,8,14,1,8,11,8,13,8,15,9,9,7,9,6]88; CHECK-NEXT: retq89 %res = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 1, i32 5, i32 8, i32 14, i32 1, i32 8, i32 11, i32 8, i32 13, i32 8, i32 15, i32 9, i32 9, i32 7, i32 9, i32 6>90 ret <16 x i8> %res91}92define <16 x i8> @test_masked_16xi8_perm_mask3(<16 x i8> %vec, <16 x i8> %vec2, <16 x i8> %mask) {93; CHECK-LABEL: test_masked_16xi8_perm_mask3:94; CHECK: # %bb.0:95; CHECK-NEXT: vptestnmb %xmm2, %xmm2, %k196; CHECK-NEXT: vpshufb {{.*#+}} xmm1 {%k1} = xmm0[1,5,8,14,1,8,11,8,13,8,15,9,9,7,9,6]97; CHECK-NEXT: vmovdqa %xmm1, %xmm098; CHECK-NEXT: retq99 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 1, i32 5, i32 8, i32 14, i32 1, i32 8, i32 11, i32 8, i32 13, i32 8, i32 15, i32 9, i32 9, i32 7, i32 9, i32 6>100 %cmp = icmp eq <16 x i8> %mask, zeroinitializer101 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %vec2102 ret <16 x i8> %res103}104 105define <16 x i8> @test_masked_z_16xi8_perm_mask3(<16 x i8> %vec, <16 x i8> %mask) {106; CHECK-LABEL: test_masked_z_16xi8_perm_mask3:107; CHECK: # %bb.0:108; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k1109; CHECK-NEXT: vpshufb {{.*#+}} xmm0 {%k1} {z} = xmm0[1,5,8,14,1,8,11,8,13,8,15,9,9,7,9,6]110; CHECK-NEXT: retq111 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 1, i32 5, i32 8, i32 14, i32 1, i32 8, i32 11, i32 8, i32 13, i32 8, i32 15, i32 9, i32 9, i32 7, i32 9, i32 6>112 %cmp = icmp eq <16 x i8> %mask, zeroinitializer113 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer114 ret <16 x i8> %res115}116define <16 x i8> @test_16xi8_perm_mem_mask0(ptr %vp) {117; CHECK-LABEL: test_16xi8_perm_mem_mask0:118; CHECK: # %bb.0:119; CHECK-NEXT: vmovdqa (%rdi), %xmm0120; CHECK-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[9,10,7,1,12,14,14,13,14,14,8,6,11,4,12,13]121; CHECK-NEXT: retq122 %vec = load <16 x i8>, ptr %vp123 %res = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 9, i32 10, i32 7, i32 1, i32 12, i32 14, i32 14, i32 13, i32 14, i32 14, i32 8, i32 6, i32 11, i32 4, i32 12, i32 13>124 ret <16 x i8> %res125}126define <16 x i8> @test_masked_16xi8_perm_mem_mask0(ptr %vp, <16 x i8> %vec2, <16 x i8> %mask) {127; CHECK-LABEL: test_masked_16xi8_perm_mem_mask0:128; CHECK: # %bb.0:129; CHECK-NEXT: vmovdqa (%rdi), %xmm2130; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k1131; CHECK-NEXT: vpshufb {{.*#+}} xmm0 {%k1} = xmm2[9,10,7,1,12,14,14,13,14,14,8,6,11,4,12,13]132; CHECK-NEXT: retq133 %vec = load <16 x i8>, ptr %vp134 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 9, i32 10, i32 7, i32 1, i32 12, i32 14, i32 14, i32 13, i32 14, i32 14, i32 8, i32 6, i32 11, i32 4, i32 12, i32 13>135 %cmp = icmp eq <16 x i8> %mask, zeroinitializer136 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %vec2137 ret <16 x i8> %res138}139 140define <16 x i8> @test_masked_z_16xi8_perm_mem_mask0(ptr %vp, <16 x i8> %mask) {141; CHECK-LABEL: test_masked_z_16xi8_perm_mem_mask0:142; CHECK: # %bb.0:143; CHECK-NEXT: vmovdqa (%rdi), %xmm1144; CHECK-NEXT: vptestnmb %xmm0, %xmm0, %k1145; CHECK-NEXT: vpshufb {{.*#+}} xmm0 {%k1} {z} = xmm1[9,10,7,1,12,14,14,13,14,14,8,6,11,4,12,13]146; CHECK-NEXT: retq147 %vec = load <16 x i8>, ptr %vp148 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 9, i32 10, i32 7, i32 1, i32 12, i32 14, i32 14, i32 13, i32 14, i32 14, i32 8, i32 6, i32 11, i32 4, i32 12, i32 13>149 %cmp = icmp eq <16 x i8> %mask, zeroinitializer150 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer151 ret <16 x i8> %res152}153 154define <16 x i8> @test_masked_16xi8_perm_mem_mask1(ptr %vp, <16 x i8> %vec2, <16 x i8> %mask) {155; CHECK-LABEL: test_masked_16xi8_perm_mem_mask1:156; CHECK: # %bb.0:157; CHECK-NEXT: vmovdqa (%rdi), %xmm2158; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k1159; CHECK-NEXT: vpshufb {{.*#+}} xmm0 {%k1} = xmm2[14,9,15,9,7,10,15,14,12,1,9,7,10,13,3,11]160; CHECK-NEXT: retq161 %vec = load <16 x i8>, ptr %vp162 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 14, i32 9, i32 15, i32 9, i32 7, i32 10, i32 15, i32 14, i32 12, i32 1, i32 9, i32 7, i32 10, i32 13, i32 3, i32 11>163 %cmp = icmp eq <16 x i8> %mask, zeroinitializer164 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %vec2165 ret <16 x i8> %res166}167 168define <16 x i8> @test_masked_z_16xi8_perm_mem_mask1(ptr %vp, <16 x i8> %mask) {169; CHECK-LABEL: test_masked_z_16xi8_perm_mem_mask1:170; CHECK: # %bb.0:171; CHECK-NEXT: vmovdqa (%rdi), %xmm1172; CHECK-NEXT: vptestnmb %xmm0, %xmm0, %k1173; CHECK-NEXT: vpshufb {{.*#+}} xmm0 {%k1} {z} = xmm1[14,9,15,9,7,10,15,14,12,1,9,7,10,13,3,11]174; CHECK-NEXT: retq175 %vec = load <16 x i8>, ptr %vp176 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 14, i32 9, i32 15, i32 9, i32 7, i32 10, i32 15, i32 14, i32 12, i32 1, i32 9, i32 7, i32 10, i32 13, i32 3, i32 11>177 %cmp = icmp eq <16 x i8> %mask, zeroinitializer178 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer179 ret <16 x i8> %res180}181 182define <16 x i8> @test_masked_16xi8_perm_mem_mask2(ptr %vp, <16 x i8> %vec2, <16 x i8> %mask) {183; CHECK-LABEL: test_masked_16xi8_perm_mem_mask2:184; CHECK: # %bb.0:185; CHECK-NEXT: vmovdqa (%rdi), %xmm2186; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k1187; CHECK-NEXT: vpshufb {{.*#+}} xmm0 {%k1} = xmm2[1,3,12,5,13,1,2,11,0,9,14,8,10,0,10,9]188; CHECK-NEXT: retq189 %vec = load <16 x i8>, ptr %vp190 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 1, i32 3, i32 12, i32 5, i32 13, i32 1, i32 2, i32 11, i32 0, i32 9, i32 14, i32 8, i32 10, i32 0, i32 10, i32 9>191 %cmp = icmp eq <16 x i8> %mask, zeroinitializer192 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %vec2193 ret <16 x i8> %res194}195 196define <16 x i8> @test_masked_z_16xi8_perm_mem_mask2(ptr %vp, <16 x i8> %mask) {197; CHECK-LABEL: test_masked_z_16xi8_perm_mem_mask2:198; CHECK: # %bb.0:199; CHECK-NEXT: vmovdqa (%rdi), %xmm1200; CHECK-NEXT: vptestnmb %xmm0, %xmm0, %k1201; CHECK-NEXT: vpshufb {{.*#+}} xmm0 {%k1} {z} = xmm1[1,3,12,5,13,1,2,11,0,9,14,8,10,0,10,9]202; CHECK-NEXT: retq203 %vec = load <16 x i8>, ptr %vp204 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 1, i32 3, i32 12, i32 5, i32 13, i32 1, i32 2, i32 11, i32 0, i32 9, i32 14, i32 8, i32 10, i32 0, i32 10, i32 9>205 %cmp = icmp eq <16 x i8> %mask, zeroinitializer206 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer207 ret <16 x i8> %res208}209 210define <16 x i8> @test_16xi8_perm_mem_mask3(ptr %vp) {211; CHECK-LABEL: test_16xi8_perm_mem_mask3:212; CHECK: # %bb.0:213; CHECK-NEXT: vmovdqa (%rdi), %xmm0214; CHECK-NEXT: vpshufb {{.*#+}} xmm0 = xmm0[9,6,5,15,0,0,15,2,1,3,12,14,0,6,1,4]215; CHECK-NEXT: retq216 %vec = load <16 x i8>, ptr %vp217 %res = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 9, i32 6, i32 5, i32 15, i32 0, i32 0, i32 15, i32 2, i32 1, i32 3, i32 12, i32 14, i32 0, i32 6, i32 1, i32 4>218 ret <16 x i8> %res219}220define <16 x i8> @test_masked_16xi8_perm_mem_mask3(ptr %vp, <16 x i8> %vec2, <16 x i8> %mask) {221; CHECK-LABEL: test_masked_16xi8_perm_mem_mask3:222; CHECK: # %bb.0:223; CHECK-NEXT: vmovdqa (%rdi), %xmm2224; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k1225; CHECK-NEXT: vpshufb {{.*#+}} xmm0 {%k1} = xmm2[9,6,5,15,0,0,15,2,1,3,12,14,0,6,1,4]226; CHECK-NEXT: retq227 %vec = load <16 x i8>, ptr %vp228 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 9, i32 6, i32 5, i32 15, i32 0, i32 0, i32 15, i32 2, i32 1, i32 3, i32 12, i32 14, i32 0, i32 6, i32 1, i32 4>229 %cmp = icmp eq <16 x i8> %mask, zeroinitializer230 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %vec2231 ret <16 x i8> %res232}233 234define <16 x i8> @test_masked_z_16xi8_perm_mem_mask3(ptr %vp, <16 x i8> %mask) {235; CHECK-LABEL: test_masked_z_16xi8_perm_mem_mask3:236; CHECK: # %bb.0:237; CHECK-NEXT: vmovdqa (%rdi), %xmm1238; CHECK-NEXT: vptestnmb %xmm0, %xmm0, %k1239; CHECK-NEXT: vpshufb {{.*#+}} xmm0 {%k1} {z} = xmm1[9,6,5,15,0,0,15,2,1,3,12,14,0,6,1,4]240; CHECK-NEXT: retq241 %vec = load <16 x i8>, ptr %vp242 %shuf = shufflevector <16 x i8> %vec, <16 x i8> undef, <16 x i32> <i32 9, i32 6, i32 5, i32 15, i32 0, i32 0, i32 15, i32 2, i32 1, i32 3, i32 12, i32 14, i32 0, i32 6, i32 1, i32 4>243 %cmp = icmp eq <16 x i8> %mask, zeroinitializer244 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer245 ret <16 x i8> %res246}247 248define <32 x i8> @test_32xi8_perm_mask0(<32 x i8> %vec) {249; CHECK-LABEL: test_32xi8_perm_mask0:250; CHECK: # %bb.0:251; CHECK-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[8,0,1,15,3,5,11,13,14,2,10,15,0,10,13,5,20,25,23,18,23,22,25,24,20,21,29,20,24,16,27,21]252; CHECK-NEXT: retq253 %res = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 8, i32 0, i32 1, i32 15, i32 3, i32 5, i32 11, i32 13, i32 14, i32 2, i32 10, i32 15, i32 0, i32 10, i32 13, i32 5, i32 20, i32 25, i32 23, i32 18, i32 23, i32 22, i32 25, i32 24, i32 20, i32 21, i32 29, i32 20, i32 24, i32 16, i32 27, i32 21>254 ret <32 x i8> %res255}256define <32 x i8> @test_masked_32xi8_perm_mask0(<32 x i8> %vec, <32 x i8> %vec2, <32 x i8> %mask) {257; CHECK-LABEL: test_masked_32xi8_perm_mask0:258; CHECK: # %bb.0:259; CHECK-NEXT: vptestnmb %ymm2, %ymm2, %k1260; CHECK-NEXT: vpshufb {{.*#+}} ymm1 {%k1} = ymm0[8,0,1,15,3,5,11,13,14,2,10,15,0,10,13,5,20,25,23,18,23,22,25,24,20,21,29,20,24,16,27,21]261; CHECK-NEXT: vmovdqa %ymm1, %ymm0262; CHECK-NEXT: retq263 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 8, i32 0, i32 1, i32 15, i32 3, i32 5, i32 11, i32 13, i32 14, i32 2, i32 10, i32 15, i32 0, i32 10, i32 13, i32 5, i32 20, i32 25, i32 23, i32 18, i32 23, i32 22, i32 25, i32 24, i32 20, i32 21, i32 29, i32 20, i32 24, i32 16, i32 27, i32 21>264 %cmp = icmp eq <32 x i8> %mask, zeroinitializer265 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %vec2266 ret <32 x i8> %res267}268 269define <32 x i8> @test_masked_z_32xi8_perm_mask0(<32 x i8> %vec, <32 x i8> %mask) {270; CHECK-LABEL: test_masked_z_32xi8_perm_mask0:271; CHECK: # %bb.0:272; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k1273; CHECK-NEXT: vpshufb {{.*#+}} ymm0 {%k1} {z} = ymm0[8,0,1,15,3,5,11,13,14,2,10,15,0,10,13,5,20,25,23,18,23,22,25,24,20,21,29,20,24,16,27,21]274; CHECK-NEXT: retq275 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 8, i32 0, i32 1, i32 15, i32 3, i32 5, i32 11, i32 13, i32 14, i32 2, i32 10, i32 15, i32 0, i32 10, i32 13, i32 5, i32 20, i32 25, i32 23, i32 18, i32 23, i32 22, i32 25, i32 24, i32 20, i32 21, i32 29, i32 20, i32 24, i32 16, i32 27, i32 21>276 %cmp = icmp eq <32 x i8> %mask, zeroinitializer277 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer278 ret <32 x i8> %res279}280define <32 x i8> @test_masked_32xi8_perm_mask1(<32 x i8> %vec, <32 x i8> %vec2, <32 x i8> %mask) {281; CHECK-LABEL: test_masked_32xi8_perm_mask1:282; CHECK: # %bb.0:283; CHECK-NEXT: vptestnmb %ymm2, %ymm2, %k1284; CHECK-NEXT: vpshufb {{.*#+}} ymm1 {%k1} = ymm0[0,4,3,15,5,4,5,15,10,9,11,6,6,10,0,3,21,19,26,22,30,25,22,22,27,22,26,16,23,20,18,24]285; CHECK-NEXT: vmovdqa %ymm1, %ymm0286; CHECK-NEXT: retq287 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 0, i32 4, i32 3, i32 15, i32 5, i32 4, i32 5, i32 15, i32 10, i32 9, i32 11, i32 6, i32 6, i32 10, i32 0, i32 3, i32 21, i32 19, i32 26, i32 22, i32 30, i32 25, i32 22, i32 22, i32 27, i32 22, i32 26, i32 16, i32 23, i32 20, i32 18, i32 24>288 %cmp = icmp eq <32 x i8> %mask, zeroinitializer289 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %vec2290 ret <32 x i8> %res291}292 293define <32 x i8> @test_masked_z_32xi8_perm_mask1(<32 x i8> %vec, <32 x i8> %mask) {294; CHECK-LABEL: test_masked_z_32xi8_perm_mask1:295; CHECK: # %bb.0:296; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k1297; CHECK-NEXT: vpshufb {{.*#+}} ymm0 {%k1} {z} = ymm0[0,4,3,15,5,4,5,15,10,9,11,6,6,10,0,3,21,19,26,22,30,25,22,22,27,22,26,16,23,20,18,24]298; CHECK-NEXT: retq299 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 0, i32 4, i32 3, i32 15, i32 5, i32 4, i32 5, i32 15, i32 10, i32 9, i32 11, i32 6, i32 6, i32 10, i32 0, i32 3, i32 21, i32 19, i32 26, i32 22, i32 30, i32 25, i32 22, i32 22, i32 27, i32 22, i32 26, i32 16, i32 23, i32 20, i32 18, i32 24>300 %cmp = icmp eq <32 x i8> %mask, zeroinitializer301 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer302 ret <32 x i8> %res303}304define <32 x i8> @test_masked_32xi8_perm_mask2(<32 x i8> %vec, <32 x i8> %vec2, <32 x i8> %mask) {305; CHECK-LABEL: test_masked_32xi8_perm_mask2:306; CHECK: # %bb.0:307; CHECK-NEXT: vptestnmb %ymm2, %ymm2, %k1308; CHECK-NEXT: vpshufb {{.*#+}} ymm1 {%k1} = ymm0[7,8,12,14,7,4,7,12,14,12,3,15,10,1,11,15,22,26,21,19,27,16,29,24,17,17,26,29,20,31,17,29]309; CHECK-NEXT: vmovdqa %ymm1, %ymm0310; CHECK-NEXT: retq311 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 7, i32 8, i32 12, i32 14, i32 7, i32 4, i32 7, i32 12, i32 14, i32 12, i32 3, i32 15, i32 10, i32 1, i32 11, i32 15, i32 22, i32 26, i32 21, i32 19, i32 27, i32 16, i32 29, i32 24, i32 17, i32 17, i32 26, i32 29, i32 20, i32 31, i32 17, i32 29>312 %cmp = icmp eq <32 x i8> %mask, zeroinitializer313 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %vec2314 ret <32 x i8> %res315}316 317define <32 x i8> @test_masked_z_32xi8_perm_mask2(<32 x i8> %vec, <32 x i8> %mask) {318; CHECK-LABEL: test_masked_z_32xi8_perm_mask2:319; CHECK: # %bb.0:320; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k1321; CHECK-NEXT: vpshufb {{.*#+}} ymm0 {%k1} {z} = ymm0[7,8,12,14,7,4,7,12,14,12,3,15,10,1,11,15,22,26,21,19,27,16,29,24,17,17,26,29,20,31,17,29]322; CHECK-NEXT: retq323 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 7, i32 8, i32 12, i32 14, i32 7, i32 4, i32 7, i32 12, i32 14, i32 12, i32 3, i32 15, i32 10, i32 1, i32 11, i32 15, i32 22, i32 26, i32 21, i32 19, i32 27, i32 16, i32 29, i32 24, i32 17, i32 17, i32 26, i32 29, i32 20, i32 31, i32 17, i32 29>324 %cmp = icmp eq <32 x i8> %mask, zeroinitializer325 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer326 ret <32 x i8> %res327}328define <32 x i8> @test_32xi8_perm_mask3(<32 x i8> %vec) {329; CHECK-LABEL: test_32xi8_perm_mask3:330; CHECK: # %bb.0:331; CHECK-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[6,1,4,7,12,13,2,8,10,5,13,4,0,0,10,8,31,31,30,16,27,27,26,27,30,26,21,24,19,25,16,18]332; CHECK-NEXT: retq333 %res = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 6, i32 1, i32 4, i32 7, i32 12, i32 13, i32 2, i32 8, i32 10, i32 5, i32 13, i32 4, i32 0, i32 0, i32 10, i32 8, i32 31, i32 31, i32 30, i32 16, i32 27, i32 27, i32 26, i32 27, i32 30, i32 26, i32 21, i32 24, i32 19, i32 25, i32 16, i32 18>334 ret <32 x i8> %res335}336define <32 x i8> @test_masked_32xi8_perm_mask3(<32 x i8> %vec, <32 x i8> %vec2, <32 x i8> %mask) {337; CHECK-LABEL: test_masked_32xi8_perm_mask3:338; CHECK: # %bb.0:339; CHECK-NEXT: vptestnmb %ymm2, %ymm2, %k1340; CHECK-NEXT: vpshufb {{.*#+}} ymm1 {%k1} = ymm0[6,1,4,7,12,13,2,8,10,5,13,4,0,0,10,8,31,31,30,16,27,27,26,27,30,26,21,24,19,25,16,18]341; CHECK-NEXT: vmovdqa %ymm1, %ymm0342; CHECK-NEXT: retq343 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 6, i32 1, i32 4, i32 7, i32 12, i32 13, i32 2, i32 8, i32 10, i32 5, i32 13, i32 4, i32 0, i32 0, i32 10, i32 8, i32 31, i32 31, i32 30, i32 16, i32 27, i32 27, i32 26, i32 27, i32 30, i32 26, i32 21, i32 24, i32 19, i32 25, i32 16, i32 18>344 %cmp = icmp eq <32 x i8> %mask, zeroinitializer345 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %vec2346 ret <32 x i8> %res347}348 349define <32 x i8> @test_masked_z_32xi8_perm_mask3(<32 x i8> %vec, <32 x i8> %mask) {350; CHECK-LABEL: test_masked_z_32xi8_perm_mask3:351; CHECK: # %bb.0:352; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k1353; CHECK-NEXT: vpshufb {{.*#+}} ymm0 {%k1} {z} = ymm0[6,1,4,7,12,13,2,8,10,5,13,4,0,0,10,8,31,31,30,16,27,27,26,27,30,26,21,24,19,25,16,18]354; CHECK-NEXT: retq355 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 6, i32 1, i32 4, i32 7, i32 12, i32 13, i32 2, i32 8, i32 10, i32 5, i32 13, i32 4, i32 0, i32 0, i32 10, i32 8, i32 31, i32 31, i32 30, i32 16, i32 27, i32 27, i32 26, i32 27, i32 30, i32 26, i32 21, i32 24, i32 19, i32 25, i32 16, i32 18>356 %cmp = icmp eq <32 x i8> %mask, zeroinitializer357 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer358 ret <32 x i8> %res359}360define <32 x i8> @test_32xi8_perm_mem_mask0(ptr %vp) {361; CHECK-LABEL: test_32xi8_perm_mem_mask0:362; CHECK: # %bb.0:363; CHECK-NEXT: vmovdqa (%rdi), %ymm0364; CHECK-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[9,0,2,15,4,6,8,4,7,3,0,2,8,1,6,5,22,17,30,23,29,31,21,23,27,22,20,27,30,30,26,22]365; CHECK-NEXT: retq366 %vec = load <32 x i8>, ptr %vp367 %res = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 9, i32 0, i32 2, i32 15, i32 4, i32 6, i32 8, i32 4, i32 7, i32 3, i32 0, i32 2, i32 8, i32 1, i32 6, i32 5, i32 22, i32 17, i32 30, i32 23, i32 29, i32 31, i32 21, i32 23, i32 27, i32 22, i32 20, i32 27, i32 30, i32 30, i32 26, i32 22>368 ret <32 x i8> %res369}370define <32 x i8> @test_masked_32xi8_perm_mem_mask0(ptr %vp, <32 x i8> %vec2, <32 x i8> %mask) {371; CHECK-LABEL: test_masked_32xi8_perm_mem_mask0:372; CHECK: # %bb.0:373; CHECK-NEXT: vmovdqa (%rdi), %ymm2374; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k1375; CHECK-NEXT: vpshufb {{.*#+}} ymm0 {%k1} = ymm2[9,0,2,15,4,6,8,4,7,3,0,2,8,1,6,5,22,17,30,23,29,31,21,23,27,22,20,27,30,30,26,22]376; CHECK-NEXT: retq377 %vec = load <32 x i8>, ptr %vp378 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 9, i32 0, i32 2, i32 15, i32 4, i32 6, i32 8, i32 4, i32 7, i32 3, i32 0, i32 2, i32 8, i32 1, i32 6, i32 5, i32 22, i32 17, i32 30, i32 23, i32 29, i32 31, i32 21, i32 23, i32 27, i32 22, i32 20, i32 27, i32 30, i32 30, i32 26, i32 22>379 %cmp = icmp eq <32 x i8> %mask, zeroinitializer380 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %vec2381 ret <32 x i8> %res382}383 384define <32 x i8> @test_masked_z_32xi8_perm_mem_mask0(ptr %vp, <32 x i8> %mask) {385; CHECK-LABEL: test_masked_z_32xi8_perm_mem_mask0:386; CHECK: # %bb.0:387; CHECK-NEXT: vmovdqa (%rdi), %ymm1388; CHECK-NEXT: vptestnmb %ymm0, %ymm0, %k1389; CHECK-NEXT: vpshufb {{.*#+}} ymm0 {%k1} {z} = ymm1[9,0,2,15,4,6,8,4,7,3,0,2,8,1,6,5,22,17,30,23,29,31,21,23,27,22,20,27,30,30,26,22]390; CHECK-NEXT: retq391 %vec = load <32 x i8>, ptr %vp392 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 9, i32 0, i32 2, i32 15, i32 4, i32 6, i32 8, i32 4, i32 7, i32 3, i32 0, i32 2, i32 8, i32 1, i32 6, i32 5, i32 22, i32 17, i32 30, i32 23, i32 29, i32 31, i32 21, i32 23, i32 27, i32 22, i32 20, i32 27, i32 30, i32 30, i32 26, i32 22>393 %cmp = icmp eq <32 x i8> %mask, zeroinitializer394 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer395 ret <32 x i8> %res396}397 398define <32 x i8> @test_masked_32xi8_perm_mem_mask1(ptr %vp, <32 x i8> %vec2, <32 x i8> %mask) {399; CHECK-LABEL: test_masked_32xi8_perm_mem_mask1:400; CHECK: # %bb.0:401; CHECK-NEXT: vmovdqa (%rdi), %ymm2402; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k1403; CHECK-NEXT: vpshufb {{.*#+}} ymm0 {%k1} = ymm2[15,10,1,1,11,0,0,6,8,7,7,9,10,6,5,15,20,28,22,21,17,29,27,30,23,26,17,22,19,16,31,19]404; CHECK-NEXT: retq405 %vec = load <32 x i8>, ptr %vp406 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 15, i32 10, i32 1, i32 1, i32 11, i32 0, i32 0, i32 6, i32 8, i32 7, i32 7, i32 9, i32 10, i32 6, i32 5, i32 15, i32 20, i32 28, i32 22, i32 21, i32 17, i32 29, i32 27, i32 30, i32 23, i32 26, i32 17, i32 22, i32 19, i32 16, i32 31, i32 19>407 %cmp = icmp eq <32 x i8> %mask, zeroinitializer408 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %vec2409 ret <32 x i8> %res410}411 412define <32 x i8> @test_masked_z_32xi8_perm_mem_mask1(ptr %vp, <32 x i8> %mask) {413; CHECK-LABEL: test_masked_z_32xi8_perm_mem_mask1:414; CHECK: # %bb.0:415; CHECK-NEXT: vmovdqa (%rdi), %ymm1416; CHECK-NEXT: vptestnmb %ymm0, %ymm0, %k1417; CHECK-NEXT: vpshufb {{.*#+}} ymm0 {%k1} {z} = ymm1[15,10,1,1,11,0,0,6,8,7,7,9,10,6,5,15,20,28,22,21,17,29,27,30,23,26,17,22,19,16,31,19]418; CHECK-NEXT: retq419 %vec = load <32 x i8>, ptr %vp420 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 15, i32 10, i32 1, i32 1, i32 11, i32 0, i32 0, i32 6, i32 8, i32 7, i32 7, i32 9, i32 10, i32 6, i32 5, i32 15, i32 20, i32 28, i32 22, i32 21, i32 17, i32 29, i32 27, i32 30, i32 23, i32 26, i32 17, i32 22, i32 19, i32 16, i32 31, i32 19>421 %cmp = icmp eq <32 x i8> %mask, zeroinitializer422 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer423 ret <32 x i8> %res424}425 426define <32 x i8> @test_masked_32xi8_perm_mem_mask2(ptr %vp, <32 x i8> %vec2, <32 x i8> %mask) {427; CHECK-LABEL: test_masked_32xi8_perm_mem_mask2:428; CHECK: # %bb.0:429; CHECK-NEXT: vmovdqa (%rdi), %ymm2430; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k1431; CHECK-NEXT: vpshufb {{.*#+}} ymm0 {%k1} = ymm2[2,3,6,8,2,15,15,2,6,10,14,7,14,5,7,7,26,19,25,19,21,31,30,29,16,18,20,28,29,25,27,28]432; CHECK-NEXT: retq433 %vec = load <32 x i8>, ptr %vp434 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 2, i32 3, i32 6, i32 8, i32 2, i32 15, i32 15, i32 2, i32 6, i32 10, i32 14, i32 7, i32 14, i32 5, i32 7, i32 7, i32 26, i32 19, i32 25, i32 19, i32 21, i32 31, i32 30, i32 29, i32 16, i32 18, i32 20, i32 28, i32 29, i32 25, i32 27, i32 28>435 %cmp = icmp eq <32 x i8> %mask, zeroinitializer436 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %vec2437 ret <32 x i8> %res438}439 440define <32 x i8> @test_masked_z_32xi8_perm_mem_mask2(ptr %vp, <32 x i8> %mask) {441; CHECK-LABEL: test_masked_z_32xi8_perm_mem_mask2:442; CHECK: # %bb.0:443; CHECK-NEXT: vmovdqa (%rdi), %ymm1444; CHECK-NEXT: vptestnmb %ymm0, %ymm0, %k1445; CHECK-NEXT: vpshufb {{.*#+}} ymm0 {%k1} {z} = ymm1[2,3,6,8,2,15,15,2,6,10,14,7,14,5,7,7,26,19,25,19,21,31,30,29,16,18,20,28,29,25,27,28]446; CHECK-NEXT: retq447 %vec = load <32 x i8>, ptr %vp448 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 2, i32 3, i32 6, i32 8, i32 2, i32 15, i32 15, i32 2, i32 6, i32 10, i32 14, i32 7, i32 14, i32 5, i32 7, i32 7, i32 26, i32 19, i32 25, i32 19, i32 21, i32 31, i32 30, i32 29, i32 16, i32 18, i32 20, i32 28, i32 29, i32 25, i32 27, i32 28>449 %cmp = icmp eq <32 x i8> %mask, zeroinitializer450 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer451 ret <32 x i8> %res452}453 454define <32 x i8> @test_32xi8_perm_mem_mask3(ptr %vp) {455; CHECK-LABEL: test_32xi8_perm_mem_mask3:456; CHECK: # %bb.0:457; CHECK-NEXT: vmovdqa (%rdi), %ymm0458; CHECK-NEXT: vpshufb {{.*#+}} ymm0 = ymm0[1,1,13,0,3,0,0,13,5,2,2,10,15,8,14,8,25,26,28,28,31,27,30,19,24,25,29,23,28,22,25,29]459; CHECK-NEXT: retq460 %vec = load <32 x i8>, ptr %vp461 %res = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 1, i32 1, i32 13, i32 0, i32 3, i32 0, i32 0, i32 13, i32 5, i32 2, i32 2, i32 10, i32 15, i32 8, i32 14, i32 8, i32 25, i32 26, i32 28, i32 28, i32 31, i32 27, i32 30, i32 19, i32 24, i32 25, i32 29, i32 23, i32 28, i32 22, i32 25, i32 29>462 ret <32 x i8> %res463}464define <32 x i8> @test_masked_32xi8_perm_mem_mask3(ptr %vp, <32 x i8> %vec2, <32 x i8> %mask) {465; CHECK-LABEL: test_masked_32xi8_perm_mem_mask3:466; CHECK: # %bb.0:467; CHECK-NEXT: vmovdqa (%rdi), %ymm2468; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k1469; CHECK-NEXT: vpshufb {{.*#+}} ymm0 {%k1} = ymm2[1,1,13,0,3,0,0,13,5,2,2,10,15,8,14,8,25,26,28,28,31,27,30,19,24,25,29,23,28,22,25,29]470; CHECK-NEXT: retq471 %vec = load <32 x i8>, ptr %vp472 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 1, i32 1, i32 13, i32 0, i32 3, i32 0, i32 0, i32 13, i32 5, i32 2, i32 2, i32 10, i32 15, i32 8, i32 14, i32 8, i32 25, i32 26, i32 28, i32 28, i32 31, i32 27, i32 30, i32 19, i32 24, i32 25, i32 29, i32 23, i32 28, i32 22, i32 25, i32 29>473 %cmp = icmp eq <32 x i8> %mask, zeroinitializer474 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %vec2475 ret <32 x i8> %res476}477 478define <32 x i8> @test_masked_z_32xi8_perm_mem_mask3(ptr %vp, <32 x i8> %mask) {479; CHECK-LABEL: test_masked_z_32xi8_perm_mem_mask3:480; CHECK: # %bb.0:481; CHECK-NEXT: vmovdqa (%rdi), %ymm1482; CHECK-NEXT: vptestnmb %ymm0, %ymm0, %k1483; CHECK-NEXT: vpshufb {{.*#+}} ymm0 {%k1} {z} = ymm1[1,1,13,0,3,0,0,13,5,2,2,10,15,8,14,8,25,26,28,28,31,27,30,19,24,25,29,23,28,22,25,29]484; CHECK-NEXT: retq485 %vec = load <32 x i8>, ptr %vp486 %shuf = shufflevector <32 x i8> %vec, <32 x i8> undef, <32 x i32> <i32 1, i32 1, i32 13, i32 0, i32 3, i32 0, i32 0, i32 13, i32 5, i32 2, i32 2, i32 10, i32 15, i32 8, i32 14, i32 8, i32 25, i32 26, i32 28, i32 28, i32 31, i32 27, i32 30, i32 19, i32 24, i32 25, i32 29, i32 23, i32 28, i32 22, i32 25, i32 29>487 %cmp = icmp eq <32 x i8> %mask, zeroinitializer488 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer489 ret <32 x i8> %res490}491 492define <64 x i8> @test_64xi8_perm_mask0(<64 x i8> %vec) {493; CHECK-LABEL: test_64xi8_perm_mask0:494; CHECK: # %bb.0:495; CHECK-NEXT: vpshufb {{.*#+}} zmm0 = zmm0[8,4,1,13,15,4,6,12,0,10,2,4,13,0,0,6,23,29,27,26,18,31,22,25,22,16,23,18,16,25,26,17,40,37,38,44,39,46,41,39,42,37,33,42,41,44,34,46,60,62,61,58,60,56,60,51,60,55,60,55,60,49,48,62]496; CHECK-NEXT: retq497 %res = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 8, i32 4, i32 1, i32 13, i32 15, i32 4, i32 6, i32 12, i32 0, i32 10, i32 2, i32 4, i32 13, i32 0, i32 0, i32 6, i32 23, i32 29, i32 27, i32 26, i32 18, i32 31, i32 22, i32 25, i32 22, i32 16, i32 23, i32 18, i32 16, i32 25, i32 26, i32 17, i32 40, i32 37, i32 38, i32 44, i32 39, i32 46, i32 41, i32 39, i32 42, i32 37, i32 33, i32 42, i32 41, i32 44, i32 34, i32 46, i32 60, i32 62, i32 61, i32 58, i32 60, i32 56, i32 60, i32 51, i32 60, i32 55, i32 60, i32 55, i32 60, i32 49, i32 48, i32 62>498 ret <64 x i8> %res499}500define <64 x i8> @test_masked_64xi8_perm_mask0(<64 x i8> %vec, <64 x i8> %vec2, <64 x i8> %mask) {501; CHECK-LABEL: test_masked_64xi8_perm_mask0:502; CHECK: # %bb.0:503; CHECK-NEXT: vptestnmb %zmm2, %zmm2, %k1504; CHECK-NEXT: vpshufb {{.*#+}} zmm1 {%k1} = zmm0[8,4,1,13,15,4,6,12,0,10,2,4,13,0,0,6,23,29,27,26,18,31,22,25,22,16,23,18,16,25,26,17,40,37,38,44,39,46,41,39,42,37,33,42,41,44,34,46,60,62,61,58,60,56,60,51,60,55,60,55,60,49,48,62]505; CHECK-NEXT: vmovdqa64 %zmm1, %zmm0506; CHECK-NEXT: retq507 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 8, i32 4, i32 1, i32 13, i32 15, i32 4, i32 6, i32 12, i32 0, i32 10, i32 2, i32 4, i32 13, i32 0, i32 0, i32 6, i32 23, i32 29, i32 27, i32 26, i32 18, i32 31, i32 22, i32 25, i32 22, i32 16, i32 23, i32 18, i32 16, i32 25, i32 26, i32 17, i32 40, i32 37, i32 38, i32 44, i32 39, i32 46, i32 41, i32 39, i32 42, i32 37, i32 33, i32 42, i32 41, i32 44, i32 34, i32 46, i32 60, i32 62, i32 61, i32 58, i32 60, i32 56, i32 60, i32 51, i32 60, i32 55, i32 60, i32 55, i32 60, i32 49, i32 48, i32 62>508 %cmp = icmp eq <64 x i8> %mask, zeroinitializer509 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %vec2510 ret <64 x i8> %res511}512 513define <64 x i8> @test_masked_z_64xi8_perm_mask0(<64 x i8> %vec, <64 x i8> %mask) {514; CHECK-LABEL: test_masked_z_64xi8_perm_mask0:515; CHECK: # %bb.0:516; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k1517; CHECK-NEXT: vpshufb {{.*#+}} zmm0 {%k1} {z} = zmm0[8,4,1,13,15,4,6,12,0,10,2,4,13,0,0,6,23,29,27,26,18,31,22,25,22,16,23,18,16,25,26,17,40,37,38,44,39,46,41,39,42,37,33,42,41,44,34,46,60,62,61,58,60,56,60,51,60,55,60,55,60,49,48,62]518; CHECK-NEXT: retq519 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 8, i32 4, i32 1, i32 13, i32 15, i32 4, i32 6, i32 12, i32 0, i32 10, i32 2, i32 4, i32 13, i32 0, i32 0, i32 6, i32 23, i32 29, i32 27, i32 26, i32 18, i32 31, i32 22, i32 25, i32 22, i32 16, i32 23, i32 18, i32 16, i32 25, i32 26, i32 17, i32 40, i32 37, i32 38, i32 44, i32 39, i32 46, i32 41, i32 39, i32 42, i32 37, i32 33, i32 42, i32 41, i32 44, i32 34, i32 46, i32 60, i32 62, i32 61, i32 58, i32 60, i32 56, i32 60, i32 51, i32 60, i32 55, i32 60, i32 55, i32 60, i32 49, i32 48, i32 62>520 %cmp = icmp eq <64 x i8> %mask, zeroinitializer521 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer522 ret <64 x i8> %res523}524define <64 x i8> @test_masked_64xi8_perm_mask1(<64 x i8> %vec, <64 x i8> %vec2, <64 x i8> %mask) {525; CHECK-LABEL: test_masked_64xi8_perm_mask1:526; CHECK: # %bb.0:527; CHECK-NEXT: vptestnmb %zmm2, %zmm2, %k1528; CHECK-NEXT: vpshufb {{.*#+}} zmm1 {%k1} = zmm0[7,14,15,10,9,3,1,13,14,12,11,6,4,1,6,9,30,30,22,17,28,27,16,23,26,16,30,31,27,17,17,21,32,37,32,47,45,33,46,35,35,42,47,33,32,37,32,41,61,50,49,53,63,50,63,53,55,52,62,63,58,50,63,49]529; CHECK-NEXT: vmovdqa64 %zmm1, %zmm0530; CHECK-NEXT: retq531 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 7, i32 14, i32 15, i32 10, i32 9, i32 3, i32 1, i32 13, i32 14, i32 12, i32 11, i32 6, i32 4, i32 1, i32 6, i32 9, i32 30, i32 30, i32 22, i32 17, i32 28, i32 27, i32 16, i32 23, i32 26, i32 16, i32 30, i32 31, i32 27, i32 17, i32 17, i32 21, i32 32, i32 37, i32 32, i32 47, i32 45, i32 33, i32 46, i32 35, i32 35, i32 42, i32 47, i32 33, i32 32, i32 37, i32 32, i32 41, i32 61, i32 50, i32 49, i32 53, i32 63, i32 50, i32 63, i32 53, i32 55, i32 52, i32 62, i32 63, i32 58, i32 50, i32 63, i32 49>532 %cmp = icmp eq <64 x i8> %mask, zeroinitializer533 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %vec2534 ret <64 x i8> %res535}536 537define <64 x i8> @test_masked_z_64xi8_perm_mask1(<64 x i8> %vec, <64 x i8> %mask) {538; CHECK-LABEL: test_masked_z_64xi8_perm_mask1:539; CHECK: # %bb.0:540; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k1541; CHECK-NEXT: vpshufb {{.*#+}} zmm0 {%k1} {z} = zmm0[7,14,15,10,9,3,1,13,14,12,11,6,4,1,6,9,30,30,22,17,28,27,16,23,26,16,30,31,27,17,17,21,32,37,32,47,45,33,46,35,35,42,47,33,32,37,32,41,61,50,49,53,63,50,63,53,55,52,62,63,58,50,63,49]542; CHECK-NEXT: retq543 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 7, i32 14, i32 15, i32 10, i32 9, i32 3, i32 1, i32 13, i32 14, i32 12, i32 11, i32 6, i32 4, i32 1, i32 6, i32 9, i32 30, i32 30, i32 22, i32 17, i32 28, i32 27, i32 16, i32 23, i32 26, i32 16, i32 30, i32 31, i32 27, i32 17, i32 17, i32 21, i32 32, i32 37, i32 32, i32 47, i32 45, i32 33, i32 46, i32 35, i32 35, i32 42, i32 47, i32 33, i32 32, i32 37, i32 32, i32 41, i32 61, i32 50, i32 49, i32 53, i32 63, i32 50, i32 63, i32 53, i32 55, i32 52, i32 62, i32 63, i32 58, i32 50, i32 63, i32 49>544 %cmp = icmp eq <64 x i8> %mask, zeroinitializer545 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer546 ret <64 x i8> %res547}548define <64 x i8> @test_masked_64xi8_perm_mask2(<64 x i8> %vec, <64 x i8> %vec2, <64 x i8> %mask) {549; CHECK-LABEL: test_masked_64xi8_perm_mask2:550; CHECK: # %bb.0:551; CHECK-NEXT: vptestnmb %zmm2, %zmm2, %k1552; CHECK-NEXT: vpshufb {{.*#+}} zmm1 {%k1} = zmm0[9,2,14,15,12,5,3,12,4,6,0,2,0,1,1,6,24,27,18,22,26,17,23,21,31,16,22,22,27,21,19,20,39,47,44,36,40,43,44,39,38,44,38,35,39,46,34,39,58,55,51,48,59,57,48,52,60,58,56,50,59,55,58,60]553; CHECK-NEXT: vmovdqa64 %zmm1, %zmm0554; CHECK-NEXT: retq555 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 9, i32 2, i32 14, i32 15, i32 12, i32 5, i32 3, i32 12, i32 4, i32 6, i32 0, i32 2, i32 0, i32 1, i32 1, i32 6, i32 24, i32 27, i32 18, i32 22, i32 26, i32 17, i32 23, i32 21, i32 31, i32 16, i32 22, i32 22, i32 27, i32 21, i32 19, i32 20, i32 39, i32 47, i32 44, i32 36, i32 40, i32 43, i32 44, i32 39, i32 38, i32 44, i32 38, i32 35, i32 39, i32 46, i32 34, i32 39, i32 58, i32 55, i32 51, i32 48, i32 59, i32 57, i32 48, i32 52, i32 60, i32 58, i32 56, i32 50, i32 59, i32 55, i32 58, i32 60>556 %cmp = icmp eq <64 x i8> %mask, zeroinitializer557 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %vec2558 ret <64 x i8> %res559}560 561define <64 x i8> @test_masked_z_64xi8_perm_mask2(<64 x i8> %vec, <64 x i8> %mask) {562; CHECK-LABEL: test_masked_z_64xi8_perm_mask2:563; CHECK: # %bb.0:564; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k1565; CHECK-NEXT: vpshufb {{.*#+}} zmm0 {%k1} {z} = zmm0[9,2,14,15,12,5,3,12,4,6,0,2,0,1,1,6,24,27,18,22,26,17,23,21,31,16,22,22,27,21,19,20,39,47,44,36,40,43,44,39,38,44,38,35,39,46,34,39,58,55,51,48,59,57,48,52,60,58,56,50,59,55,58,60]566; CHECK-NEXT: retq567 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 9, i32 2, i32 14, i32 15, i32 12, i32 5, i32 3, i32 12, i32 4, i32 6, i32 0, i32 2, i32 0, i32 1, i32 1, i32 6, i32 24, i32 27, i32 18, i32 22, i32 26, i32 17, i32 23, i32 21, i32 31, i32 16, i32 22, i32 22, i32 27, i32 21, i32 19, i32 20, i32 39, i32 47, i32 44, i32 36, i32 40, i32 43, i32 44, i32 39, i32 38, i32 44, i32 38, i32 35, i32 39, i32 46, i32 34, i32 39, i32 58, i32 55, i32 51, i32 48, i32 59, i32 57, i32 48, i32 52, i32 60, i32 58, i32 56, i32 50, i32 59, i32 55, i32 58, i32 60>568 %cmp = icmp eq <64 x i8> %mask, zeroinitializer569 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer570 ret <64 x i8> %res571}572define <64 x i8> @test_64xi8_perm_mask3(<64 x i8> %vec) {573; CHECK-LABEL: test_64xi8_perm_mask3:574; CHECK: # %bb.0:575; CHECK-NEXT: vpshufb {{.*#+}} zmm0 = zmm0[3,12,4,15,1,14,0,4,8,9,6,1,4,4,12,14,25,16,28,20,21,24,19,30,18,22,20,24,25,26,24,22,42,38,44,44,36,37,42,34,43,38,41,34,42,37,39,38,55,59,53,58,48,52,59,48,57,48,55,62,48,56,49,61]576; CHECK-NEXT: retq577 %res = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 3, i32 12, i32 4, i32 15, i32 1, i32 14, i32 0, i32 4, i32 8, i32 9, i32 6, i32 1, i32 4, i32 4, i32 12, i32 14, i32 25, i32 16, i32 28, i32 20, i32 21, i32 24, i32 19, i32 30, i32 18, i32 22, i32 20, i32 24, i32 25, i32 26, i32 24, i32 22, i32 42, i32 38, i32 44, i32 44, i32 36, i32 37, i32 42, i32 34, i32 43, i32 38, i32 41, i32 34, i32 42, i32 37, i32 39, i32 38, i32 55, i32 59, i32 53, i32 58, i32 48, i32 52, i32 59, i32 48, i32 57, i32 48, i32 55, i32 62, i32 48, i32 56, i32 49, i32 61>578 ret <64 x i8> %res579}580define <64 x i8> @test_masked_64xi8_perm_mask3(<64 x i8> %vec, <64 x i8> %vec2, <64 x i8> %mask) {581; CHECK-LABEL: test_masked_64xi8_perm_mask3:582; CHECK: # %bb.0:583; CHECK-NEXT: vptestnmb %zmm2, %zmm2, %k1584; CHECK-NEXT: vpshufb {{.*#+}} zmm1 {%k1} = zmm0[3,12,4,15,1,14,0,4,8,9,6,1,4,4,12,14,25,16,28,20,21,24,19,30,18,22,20,24,25,26,24,22,42,38,44,44,36,37,42,34,43,38,41,34,42,37,39,38,55,59,53,58,48,52,59,48,57,48,55,62,48,56,49,61]585; CHECK-NEXT: vmovdqa64 %zmm1, %zmm0586; CHECK-NEXT: retq587 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 3, i32 12, i32 4, i32 15, i32 1, i32 14, i32 0, i32 4, i32 8, i32 9, i32 6, i32 1, i32 4, i32 4, i32 12, i32 14, i32 25, i32 16, i32 28, i32 20, i32 21, i32 24, i32 19, i32 30, i32 18, i32 22, i32 20, i32 24, i32 25, i32 26, i32 24, i32 22, i32 42, i32 38, i32 44, i32 44, i32 36, i32 37, i32 42, i32 34, i32 43, i32 38, i32 41, i32 34, i32 42, i32 37, i32 39, i32 38, i32 55, i32 59, i32 53, i32 58, i32 48, i32 52, i32 59, i32 48, i32 57, i32 48, i32 55, i32 62, i32 48, i32 56, i32 49, i32 61>588 %cmp = icmp eq <64 x i8> %mask, zeroinitializer589 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %vec2590 ret <64 x i8> %res591}592 593define <64 x i8> @test_masked_z_64xi8_perm_mask3(<64 x i8> %vec, <64 x i8> %mask) {594; CHECK-LABEL: test_masked_z_64xi8_perm_mask3:595; CHECK: # %bb.0:596; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k1597; CHECK-NEXT: vpshufb {{.*#+}} zmm0 {%k1} {z} = zmm0[3,12,4,15,1,14,0,4,8,9,6,1,4,4,12,14,25,16,28,20,21,24,19,30,18,22,20,24,25,26,24,22,42,38,44,44,36,37,42,34,43,38,41,34,42,37,39,38,55,59,53,58,48,52,59,48,57,48,55,62,48,56,49,61]598; CHECK-NEXT: retq599 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 3, i32 12, i32 4, i32 15, i32 1, i32 14, i32 0, i32 4, i32 8, i32 9, i32 6, i32 1, i32 4, i32 4, i32 12, i32 14, i32 25, i32 16, i32 28, i32 20, i32 21, i32 24, i32 19, i32 30, i32 18, i32 22, i32 20, i32 24, i32 25, i32 26, i32 24, i32 22, i32 42, i32 38, i32 44, i32 44, i32 36, i32 37, i32 42, i32 34, i32 43, i32 38, i32 41, i32 34, i32 42, i32 37, i32 39, i32 38, i32 55, i32 59, i32 53, i32 58, i32 48, i32 52, i32 59, i32 48, i32 57, i32 48, i32 55, i32 62, i32 48, i32 56, i32 49, i32 61>600 %cmp = icmp eq <64 x i8> %mask, zeroinitializer601 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer602 ret <64 x i8> %res603}604define <64 x i8> @test_64xi8_perm_mem_mask0(ptr %vp) {605; CHECK-LABEL: test_64xi8_perm_mem_mask0:606; CHECK: # %bb.0:607; CHECK-NEXT: vmovdqa64 (%rdi), %zmm0608; CHECK-NEXT: vpshufb {{.*#+}} zmm0 = zmm0[0,9,15,13,11,11,3,12,4,1,7,5,2,6,14,6,23,27,24,18,30,23,28,22,28,22,19,19,31,25,16,22,35,33,34,32,42,34,41,41,43,40,36,46,37,39,42,40,63,63,62,62,57,55,59,51,52,48,50,48,58,50,60,58]609; CHECK-NEXT: retq610 %vec = load <64 x i8>, ptr %vp611 %res = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 0, i32 9, i32 15, i32 13, i32 11, i32 11, i32 3, i32 12, i32 4, i32 1, i32 7, i32 5, i32 2, i32 6, i32 14, i32 6, i32 23, i32 27, i32 24, i32 18, i32 30, i32 23, i32 28, i32 22, i32 28, i32 22, i32 19, i32 19, i32 31, i32 25, i32 16, i32 22, i32 35, i32 33, i32 34, i32 32, i32 42, i32 34, i32 41, i32 41, i32 43, i32 40, i32 36, i32 46, i32 37, i32 39, i32 42, i32 40, i32 63, i32 63, i32 62, i32 62, i32 57, i32 55, i32 59, i32 51, i32 52, i32 48, i32 50, i32 48, i32 58, i32 50, i32 60, i32 58>612 ret <64 x i8> %res613}614define <64 x i8> @test_masked_64xi8_perm_mem_mask0(ptr %vp, <64 x i8> %vec2, <64 x i8> %mask) {615; CHECK-LABEL: test_masked_64xi8_perm_mem_mask0:616; CHECK: # %bb.0:617; CHECK-NEXT: vmovdqa64 (%rdi), %zmm2618; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k1619; CHECK-NEXT: vpshufb {{.*#+}} zmm0 {%k1} = zmm2[0,9,15,13,11,11,3,12,4,1,7,5,2,6,14,6,23,27,24,18,30,23,28,22,28,22,19,19,31,25,16,22,35,33,34,32,42,34,41,41,43,40,36,46,37,39,42,40,63,63,62,62,57,55,59,51,52,48,50,48,58,50,60,58]620; CHECK-NEXT: retq621 %vec = load <64 x i8>, ptr %vp622 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 0, i32 9, i32 15, i32 13, i32 11, i32 11, i32 3, i32 12, i32 4, i32 1, i32 7, i32 5, i32 2, i32 6, i32 14, i32 6, i32 23, i32 27, i32 24, i32 18, i32 30, i32 23, i32 28, i32 22, i32 28, i32 22, i32 19, i32 19, i32 31, i32 25, i32 16, i32 22, i32 35, i32 33, i32 34, i32 32, i32 42, i32 34, i32 41, i32 41, i32 43, i32 40, i32 36, i32 46, i32 37, i32 39, i32 42, i32 40, i32 63, i32 63, i32 62, i32 62, i32 57, i32 55, i32 59, i32 51, i32 52, i32 48, i32 50, i32 48, i32 58, i32 50, i32 60, i32 58>623 %cmp = icmp eq <64 x i8> %mask, zeroinitializer624 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %vec2625 ret <64 x i8> %res626}627 628define <64 x i8> @test_masked_z_64xi8_perm_mem_mask0(ptr %vp, <64 x i8> %mask) {629; CHECK-LABEL: test_masked_z_64xi8_perm_mem_mask0:630; CHECK: # %bb.0:631; CHECK-NEXT: vmovdqa64 (%rdi), %zmm1632; CHECK-NEXT: vptestnmb %zmm0, %zmm0, %k1633; CHECK-NEXT: vpshufb {{.*#+}} zmm0 {%k1} {z} = zmm1[0,9,15,13,11,11,3,12,4,1,7,5,2,6,14,6,23,27,24,18,30,23,28,22,28,22,19,19,31,25,16,22,35,33,34,32,42,34,41,41,43,40,36,46,37,39,42,40,63,63,62,62,57,55,59,51,52,48,50,48,58,50,60,58]634; CHECK-NEXT: retq635 %vec = load <64 x i8>, ptr %vp636 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 0, i32 9, i32 15, i32 13, i32 11, i32 11, i32 3, i32 12, i32 4, i32 1, i32 7, i32 5, i32 2, i32 6, i32 14, i32 6, i32 23, i32 27, i32 24, i32 18, i32 30, i32 23, i32 28, i32 22, i32 28, i32 22, i32 19, i32 19, i32 31, i32 25, i32 16, i32 22, i32 35, i32 33, i32 34, i32 32, i32 42, i32 34, i32 41, i32 41, i32 43, i32 40, i32 36, i32 46, i32 37, i32 39, i32 42, i32 40, i32 63, i32 63, i32 62, i32 62, i32 57, i32 55, i32 59, i32 51, i32 52, i32 48, i32 50, i32 48, i32 58, i32 50, i32 60, i32 58>637 %cmp = icmp eq <64 x i8> %mask, zeroinitializer638 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer639 ret <64 x i8> %res640}641 642define <64 x i8> @test_masked_64xi8_perm_mem_mask1(ptr %vp, <64 x i8> %vec2, <64 x i8> %mask) {643; CHECK-LABEL: test_masked_64xi8_perm_mem_mask1:644; CHECK: # %bb.0:645; CHECK-NEXT: vmovdqa64 (%rdi), %zmm2646; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k1647; CHECK-NEXT: vpshufb {{.*#+}} zmm0 {%k1} = zmm2[15,6,14,7,5,1,14,12,5,7,5,0,0,5,3,8,19,19,26,27,20,29,20,21,27,16,30,17,23,27,16,28,47,39,33,33,33,44,38,46,39,33,38,44,45,32,34,39,50,61,62,53,54,56,52,56,51,52,55,57,56,52,51,49]648; CHECK-NEXT: retq649 %vec = load <64 x i8>, ptr %vp650 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 15, i32 6, i32 14, i32 7, i32 5, i32 1, i32 14, i32 12, i32 5, i32 7, i32 5, i32 0, i32 0, i32 5, i32 3, i32 8, i32 19, i32 19, i32 26, i32 27, i32 20, i32 29, i32 20, i32 21, i32 27, i32 16, i32 30, i32 17, i32 23, i32 27, i32 16, i32 28, i32 47, i32 39, i32 33, i32 33, i32 33, i32 44, i32 38, i32 46, i32 39, i32 33, i32 38, i32 44, i32 45, i32 32, i32 34, i32 39, i32 50, i32 61, i32 62, i32 53, i32 54, i32 56, i32 52, i32 56, i32 51, i32 52, i32 55, i32 57, i32 56, i32 52, i32 51, i32 49>651 %cmp = icmp eq <64 x i8> %mask, zeroinitializer652 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %vec2653 ret <64 x i8> %res654}655 656define <64 x i8> @test_masked_z_64xi8_perm_mem_mask1(ptr %vp, <64 x i8> %mask) {657; CHECK-LABEL: test_masked_z_64xi8_perm_mem_mask1:658; CHECK: # %bb.0:659; CHECK-NEXT: vmovdqa64 (%rdi), %zmm1660; CHECK-NEXT: vptestnmb %zmm0, %zmm0, %k1661; CHECK-NEXT: vpshufb {{.*#+}} zmm0 {%k1} {z} = zmm1[15,6,14,7,5,1,14,12,5,7,5,0,0,5,3,8,19,19,26,27,20,29,20,21,27,16,30,17,23,27,16,28,47,39,33,33,33,44,38,46,39,33,38,44,45,32,34,39,50,61,62,53,54,56,52,56,51,52,55,57,56,52,51,49]662; CHECK-NEXT: retq663 %vec = load <64 x i8>, ptr %vp664 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 15, i32 6, i32 14, i32 7, i32 5, i32 1, i32 14, i32 12, i32 5, i32 7, i32 5, i32 0, i32 0, i32 5, i32 3, i32 8, i32 19, i32 19, i32 26, i32 27, i32 20, i32 29, i32 20, i32 21, i32 27, i32 16, i32 30, i32 17, i32 23, i32 27, i32 16, i32 28, i32 47, i32 39, i32 33, i32 33, i32 33, i32 44, i32 38, i32 46, i32 39, i32 33, i32 38, i32 44, i32 45, i32 32, i32 34, i32 39, i32 50, i32 61, i32 62, i32 53, i32 54, i32 56, i32 52, i32 56, i32 51, i32 52, i32 55, i32 57, i32 56, i32 52, i32 51, i32 49>665 %cmp = icmp eq <64 x i8> %mask, zeroinitializer666 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer667 ret <64 x i8> %res668}669 670define <64 x i8> @test_masked_64xi8_perm_mem_mask2(ptr %vp, <64 x i8> %vec2, <64 x i8> %mask) {671; CHECK-LABEL: test_masked_64xi8_perm_mem_mask2:672; CHECK: # %bb.0:673; CHECK-NEXT: vmovdqa64 (%rdi), %zmm2674; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k1675; CHECK-NEXT: vpshufb {{.*#+}} zmm0 {%k1} = zmm2[12,1,11,3,4,11,10,11,8,13,1,10,1,11,5,10,27,26,19,29,19,24,26,19,26,20,18,28,24,21,25,16,34,38,47,40,33,44,44,44,41,43,35,43,45,44,37,41,58,62,49,61,56,53,55,48,51,58,58,55,63,55,53,61]676; CHECK-NEXT: retq677 %vec = load <64 x i8>, ptr %vp678 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 12, i32 1, i32 11, i32 3, i32 4, i32 11, i32 10, i32 11, i32 8, i32 13, i32 1, i32 10, i32 1, i32 11, i32 5, i32 10, i32 27, i32 26, i32 19, i32 29, i32 19, i32 24, i32 26, i32 19, i32 26, i32 20, i32 18, i32 28, i32 24, i32 21, i32 25, i32 16, i32 34, i32 38, i32 47, i32 40, i32 33, i32 44, i32 44, i32 44, i32 41, i32 43, i32 35, i32 43, i32 45, i32 44, i32 37, i32 41, i32 58, i32 62, i32 49, i32 61, i32 56, i32 53, i32 55, i32 48, i32 51, i32 58, i32 58, i32 55, i32 63, i32 55, i32 53, i32 61>679 %cmp = icmp eq <64 x i8> %mask, zeroinitializer680 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %vec2681 ret <64 x i8> %res682}683 684define <64 x i8> @test_masked_z_64xi8_perm_mem_mask2(ptr %vp, <64 x i8> %mask) {685; CHECK-LABEL: test_masked_z_64xi8_perm_mem_mask2:686; CHECK: # %bb.0:687; CHECK-NEXT: vmovdqa64 (%rdi), %zmm1688; CHECK-NEXT: vptestnmb %zmm0, %zmm0, %k1689; CHECK-NEXT: vpshufb {{.*#+}} zmm0 {%k1} {z} = zmm1[12,1,11,3,4,11,10,11,8,13,1,10,1,11,5,10,27,26,19,29,19,24,26,19,26,20,18,28,24,21,25,16,34,38,47,40,33,44,44,44,41,43,35,43,45,44,37,41,58,62,49,61,56,53,55,48,51,58,58,55,63,55,53,61]690; CHECK-NEXT: retq691 %vec = load <64 x i8>, ptr %vp692 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 12, i32 1, i32 11, i32 3, i32 4, i32 11, i32 10, i32 11, i32 8, i32 13, i32 1, i32 10, i32 1, i32 11, i32 5, i32 10, i32 27, i32 26, i32 19, i32 29, i32 19, i32 24, i32 26, i32 19, i32 26, i32 20, i32 18, i32 28, i32 24, i32 21, i32 25, i32 16, i32 34, i32 38, i32 47, i32 40, i32 33, i32 44, i32 44, i32 44, i32 41, i32 43, i32 35, i32 43, i32 45, i32 44, i32 37, i32 41, i32 58, i32 62, i32 49, i32 61, i32 56, i32 53, i32 55, i32 48, i32 51, i32 58, i32 58, i32 55, i32 63, i32 55, i32 53, i32 61>693 %cmp = icmp eq <64 x i8> %mask, zeroinitializer694 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer695 ret <64 x i8> %res696}697 698define <64 x i8> @test_64xi8_perm_mem_mask3(ptr %vp) {699; CHECK-LABEL: test_64xi8_perm_mem_mask3:700; CHECK: # %bb.0:701; CHECK-NEXT: vmovdqa64 (%rdi), %zmm0702; CHECK-NEXT: vpshufb {{.*#+}} zmm0 = zmm0[4,9,11,13,12,6,0,0,11,15,5,7,11,10,4,10,20,21,24,27,18,16,26,16,16,19,26,17,16,31,22,30,35,38,37,34,37,47,43,38,38,36,40,43,42,39,32,46,54,54,48,50,61,56,59,50,53,61,61,51,48,60,50,60]703; CHECK-NEXT: retq704 %vec = load <64 x i8>, ptr %vp705 %res = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 4, i32 9, i32 11, i32 13, i32 12, i32 6, i32 0, i32 0, i32 11, i32 15, i32 5, i32 7, i32 11, i32 10, i32 4, i32 10, i32 20, i32 21, i32 24, i32 27, i32 18, i32 16, i32 26, i32 16, i32 16, i32 19, i32 26, i32 17, i32 16, i32 31, i32 22, i32 30, i32 35, i32 38, i32 37, i32 34, i32 37, i32 47, i32 43, i32 38, i32 38, i32 36, i32 40, i32 43, i32 42, i32 39, i32 32, i32 46, i32 54, i32 54, i32 48, i32 50, i32 61, i32 56, i32 59, i32 50, i32 53, i32 61, i32 61, i32 51, i32 48, i32 60, i32 50, i32 60>706 ret <64 x i8> %res707}708define <64 x i8> @test_masked_64xi8_perm_mem_mask3(ptr %vp, <64 x i8> %vec2, <64 x i8> %mask) {709; CHECK-LABEL: test_masked_64xi8_perm_mem_mask3:710; CHECK: # %bb.0:711; CHECK-NEXT: vmovdqa64 (%rdi), %zmm2712; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k1713; CHECK-NEXT: vpshufb {{.*#+}} zmm0 {%k1} = zmm2[4,9,11,13,12,6,0,0,11,15,5,7,11,10,4,10,20,21,24,27,18,16,26,16,16,19,26,17,16,31,22,30,35,38,37,34,37,47,43,38,38,36,40,43,42,39,32,46,54,54,48,50,61,56,59,50,53,61,61,51,48,60,50,60]714; CHECK-NEXT: retq715 %vec = load <64 x i8>, ptr %vp716 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 4, i32 9, i32 11, i32 13, i32 12, i32 6, i32 0, i32 0, i32 11, i32 15, i32 5, i32 7, i32 11, i32 10, i32 4, i32 10, i32 20, i32 21, i32 24, i32 27, i32 18, i32 16, i32 26, i32 16, i32 16, i32 19, i32 26, i32 17, i32 16, i32 31, i32 22, i32 30, i32 35, i32 38, i32 37, i32 34, i32 37, i32 47, i32 43, i32 38, i32 38, i32 36, i32 40, i32 43, i32 42, i32 39, i32 32, i32 46, i32 54, i32 54, i32 48, i32 50, i32 61, i32 56, i32 59, i32 50, i32 53, i32 61, i32 61, i32 51, i32 48, i32 60, i32 50, i32 60>717 %cmp = icmp eq <64 x i8> %mask, zeroinitializer718 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %vec2719 ret <64 x i8> %res720}721 722define <64 x i8> @test_masked_z_64xi8_perm_mem_mask3(ptr %vp, <64 x i8> %mask) {723; CHECK-LABEL: test_masked_z_64xi8_perm_mem_mask3:724; CHECK: # %bb.0:725; CHECK-NEXT: vmovdqa64 (%rdi), %zmm1726; CHECK-NEXT: vptestnmb %zmm0, %zmm0, %k1727; CHECK-NEXT: vpshufb {{.*#+}} zmm0 {%k1} {z} = zmm1[4,9,11,13,12,6,0,0,11,15,5,7,11,10,4,10,20,21,24,27,18,16,26,16,16,19,26,17,16,31,22,30,35,38,37,34,37,47,43,38,38,36,40,43,42,39,32,46,54,54,48,50,61,56,59,50,53,61,61,51,48,60,50,60]728; CHECK-NEXT: retq729 %vec = load <64 x i8>, ptr %vp730 %shuf = shufflevector <64 x i8> %vec, <64 x i8> undef, <64 x i32> <i32 4, i32 9, i32 11, i32 13, i32 12, i32 6, i32 0, i32 0, i32 11, i32 15, i32 5, i32 7, i32 11, i32 10, i32 4, i32 10, i32 20, i32 21, i32 24, i32 27, i32 18, i32 16, i32 26, i32 16, i32 16, i32 19, i32 26, i32 17, i32 16, i32 31, i32 22, i32 30, i32 35, i32 38, i32 37, i32 34, i32 37, i32 47, i32 43, i32 38, i32 38, i32 36, i32 40, i32 43, i32 42, i32 39, i32 32, i32 46, i32 54, i32 54, i32 48, i32 50, i32 61, i32 56, i32 59, i32 50, i32 53, i32 61, i32 61, i32 51, i32 48, i32 60, i32 50, i32 60>731 %cmp = icmp eq <64 x i8> %mask, zeroinitializer732 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer733 ret <64 x i8> %res734}735 736define <8 x i16> @test_8xi16_perm_high_mask0(<8 x i16> %vec) {737; CHECK-LABEL: test_8xi16_perm_high_mask0:738; CHECK: # %bb.0:739; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,7,6]740; CHECK-NEXT: retq741 %res = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 5, i32 7, i32 6>742 ret <8 x i16> %res743}744define <8 x i16> @test_masked_8xi16_perm_high_mask0(<8 x i16> %vec, <8 x i16> %vec2, <8 x i16> %mask) {745; CHECK-LABEL: test_masked_8xi16_perm_high_mask0:746; CHECK: # %bb.0:747; CHECK-NEXT: vptestnmw %xmm2, %xmm2, %k1748; CHECK-NEXT: vpshufhw {{.*#+}} xmm1 {%k1} = xmm0[0,1,2,3,6,5,7,6]749; CHECK-NEXT: vmovdqa %xmm1, %xmm0750; CHECK-NEXT: retq751 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 5, i32 7, i32 6>752 %cmp = icmp eq <8 x i16> %mask, zeroinitializer753 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec2754 ret <8 x i16> %res755}756 757define <8 x i16> @test_masked_z_8xi16_perm_high_mask0(<8 x i16> %vec, <8 x i16> %mask) {758; CHECK-LABEL: test_masked_z_8xi16_perm_high_mask0:759; CHECK: # %bb.0:760; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1761; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1,2,3,6,5,7,6]762; CHECK-NEXT: retq763 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 5, i32 7, i32 6>764 %cmp = icmp eq <8 x i16> %mask, zeroinitializer765 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer766 ret <8 x i16> %res767}768define <8 x i16> @test_masked_8xi16_perm_low_mask1(<8 x i16> %vec, <8 x i16> %vec2, <8 x i16> %mask) {769; CHECK-LABEL: test_masked_8xi16_perm_low_mask1:770; CHECK: # %bb.0:771; CHECK-NEXT: vptestnmw %xmm2, %xmm2, %k1772; CHECK-NEXT: vpshuflw {{.*#+}} xmm1 {%k1} = xmm0[0,3,0,0,4,5,6,7]773; CHECK-NEXT: vmovdqa %xmm1, %xmm0774; CHECK-NEXT: retq775 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7>776 %cmp = icmp eq <8 x i16> %mask, zeroinitializer777 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec2778 ret <8 x i16> %res779}780 781define <8 x i16> @test_masked_z_8xi16_perm_low_mask1(<8 x i16> %vec, <8 x i16> %mask) {782; CHECK-LABEL: test_masked_z_8xi16_perm_low_mask1:783; CHECK: # %bb.0:784; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1785; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 {%k1} {z} = xmm0[0,3,0,0,4,5,6,7]786; CHECK-NEXT: retq787 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 3, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7>788 %cmp = icmp eq <8 x i16> %mask, zeroinitializer789 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer790 ret <8 x i16> %res791}792define <8 x i16> @test_masked_8xi16_perm_high_mask2(<8 x i16> %vec, <8 x i16> %vec2, <8 x i16> %mask) {793; CHECK-LABEL: test_masked_8xi16_perm_high_mask2:794; CHECK: # %bb.0:795; CHECK-NEXT: vptestnmw %xmm2, %xmm2, %k1796; CHECK-NEXT: vpshufhw {{.*#+}} xmm1 {%k1} = xmm0[0,1,2,3,5,4,4,5]797; CHECK-NEXT: vmovdqa %xmm1, %xmm0798; CHECK-NEXT: retq799 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 4, i32 5>800 %cmp = icmp eq <8 x i16> %mask, zeroinitializer801 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec2802 ret <8 x i16> %res803}804 805define <8 x i16> @test_masked_z_8xi16_perm_high_mask2(<8 x i16> %vec, <8 x i16> %mask) {806; CHECK-LABEL: test_masked_z_8xi16_perm_high_mask2:807; CHECK: # %bb.0:808; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1809; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1,2,3,5,4,4,5]810; CHECK-NEXT: retq811 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 4, i32 4, i32 5>812 %cmp = icmp eq <8 x i16> %mask, zeroinitializer813 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer814 ret <8 x i16> %res815}816define <8 x i16> @test_8xi16_perm_low_mask3(<8 x i16> %vec) {817; CHECK-LABEL: test_8xi16_perm_low_mask3:818; CHECK: # %bb.0:819; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 = xmm0[2,1,1,1,4,5,6,7]820; CHECK-NEXT: retq821 %res = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 2, i32 1, i32 1, i32 1, i32 4, i32 5, i32 6, i32 7>822 ret <8 x i16> %res823}824define <8 x i16> @test_masked_8xi16_perm_low_mask3(<8 x i16> %vec, <8 x i16> %vec2, <8 x i16> %mask) {825; CHECK-LABEL: test_masked_8xi16_perm_low_mask3:826; CHECK: # %bb.0:827; CHECK-NEXT: vptestnmw %xmm2, %xmm2, %k1828; CHECK-NEXT: vpshuflw {{.*#+}} xmm1 {%k1} = xmm0[2,1,1,1,4,5,6,7]829; CHECK-NEXT: vmovdqa %xmm1, %xmm0830; CHECK-NEXT: retq831 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 2, i32 1, i32 1, i32 1, i32 4, i32 5, i32 6, i32 7>832 %cmp = icmp eq <8 x i16> %mask, zeroinitializer833 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec2834 ret <8 x i16> %res835}836 837define <8 x i16> @test_masked_z_8xi16_perm_low_mask3(<8 x i16> %vec, <8 x i16> %mask) {838; CHECK-LABEL: test_masked_z_8xi16_perm_low_mask3:839; CHECK: # %bb.0:840; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1841; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 {%k1} {z} = xmm0[2,1,1,1,4,5,6,7]842; CHECK-NEXT: retq843 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 2, i32 1, i32 1, i32 1, i32 4, i32 5, i32 6, i32 7>844 %cmp = icmp eq <8 x i16> %mask, zeroinitializer845 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer846 ret <8 x i16> %res847}848define <8 x i16> @test_masked_8xi16_perm_high_mask4(<8 x i16> %vec, <8 x i16> %vec2, <8 x i16> %mask) {849; CHECK-LABEL: test_masked_8xi16_perm_high_mask4:850; CHECK: # %bb.0:851; CHECK-NEXT: vptestnmw %xmm2, %xmm2, %k1852; CHECK-NEXT: vpshufhw {{.*#+}} xmm1 {%k1} = xmm0[0,1,2,3,5,5,7,6]853; CHECK-NEXT: vmovdqa %xmm1, %xmm0854; CHECK-NEXT: retq855 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 7, i32 6>856 %cmp = icmp eq <8 x i16> %mask, zeroinitializer857 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec2858 ret <8 x i16> %res859}860 861define <8 x i16> @test_masked_z_8xi16_perm_high_mask4(<8 x i16> %vec, <8 x i16> %mask) {862; CHECK-LABEL: test_masked_z_8xi16_perm_high_mask4:863; CHECK: # %bb.0:864; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1865; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1,2,3,5,5,7,6]866; CHECK-NEXT: retq867 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 5, i32 7, i32 6>868 %cmp = icmp eq <8 x i16> %mask, zeroinitializer869 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer870 ret <8 x i16> %res871}872define <8 x i16> @test_masked_8xi16_perm_low_mask5(<8 x i16> %vec, <8 x i16> %vec2, <8 x i16> %mask) {873; CHECK-LABEL: test_masked_8xi16_perm_low_mask5:874; CHECK: # %bb.0:875; CHECK-NEXT: vptestnmw %xmm2, %xmm2, %k1876; CHECK-NEXT: vpshuflw {{.*#+}} xmm1 {%k1} = xmm0[3,3,2,1,4,5,6,7]877; CHECK-NEXT: vmovdqa %xmm1, %xmm0878; CHECK-NEXT: retq879 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 3, i32 3, i32 2, i32 1, i32 4, i32 5, i32 6, i32 7>880 %cmp = icmp eq <8 x i16> %mask, zeroinitializer881 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec2882 ret <8 x i16> %res883}884 885define <8 x i16> @test_masked_z_8xi16_perm_low_mask5(<8 x i16> %vec, <8 x i16> %mask) {886; CHECK-LABEL: test_masked_z_8xi16_perm_low_mask5:887; CHECK: # %bb.0:888; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1889; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 {%k1} {z} = xmm0[3,3,2,1,4,5,6,7]890; CHECK-NEXT: retq891 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 3, i32 3, i32 2, i32 1, i32 4, i32 5, i32 6, i32 7>892 %cmp = icmp eq <8 x i16> %mask, zeroinitializer893 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer894 ret <8 x i16> %res895}896define <8 x i16> @test_8xi16_perm_high_mask6(<8 x i16> %vec) {897; CHECK-LABEL: test_8xi16_perm_high_mask6:898; CHECK: # %bb.0:899; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 = xmm0[0,1,2,3,6,5,6,5]900; CHECK-NEXT: retq901 %res = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 5, i32 6, i32 5>902 ret <8 x i16> %res903}904define <8 x i16> @test_masked_8xi16_perm_high_mask6(<8 x i16> %vec, <8 x i16> %vec2, <8 x i16> %mask) {905; CHECK-LABEL: test_masked_8xi16_perm_high_mask6:906; CHECK: # %bb.0:907; CHECK-NEXT: vptestnmw %xmm2, %xmm2, %k1908; CHECK-NEXT: vpshufhw {{.*#+}} xmm1 {%k1} = xmm0[0,1,2,3,6,5,6,5]909; CHECK-NEXT: vmovdqa %xmm1, %xmm0910; CHECK-NEXT: retq911 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 5, i32 6, i32 5>912 %cmp = icmp eq <8 x i16> %mask, zeroinitializer913 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec2914 ret <8 x i16> %res915}916 917define <8 x i16> @test_masked_z_8xi16_perm_high_mask6(<8 x i16> %vec, <8 x i16> %mask) {918; CHECK-LABEL: test_masked_z_8xi16_perm_high_mask6:919; CHECK: # %bb.0:920; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1921; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1,2,3,6,5,6,5]922; CHECK-NEXT: retq923 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 5, i32 6, i32 5>924 %cmp = icmp eq <8 x i16> %mask, zeroinitializer925 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer926 ret <8 x i16> %res927}928define <8 x i16> @test_masked_8xi16_perm_low_mask7(<8 x i16> %vec, <8 x i16> %vec2, <8 x i16> %mask) {929; CHECK-LABEL: test_masked_8xi16_perm_low_mask7:930; CHECK: # %bb.0:931; CHECK-NEXT: vptestnmw %xmm2, %xmm2, %k1932; CHECK-NEXT: vpshuflw {{.*#+}} xmm1 {%k1} = xmm0[1,0,2,0,4,5,6,7]933; CHECK-NEXT: vmovdqa %xmm1, %xmm0934; CHECK-NEXT: retq935 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 2, i32 0, i32 4, i32 5, i32 6, i32 7>936 %cmp = icmp eq <8 x i16> %mask, zeroinitializer937 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec2938 ret <8 x i16> %res939}940 941define <8 x i16> @test_masked_z_8xi16_perm_low_mask7(<8 x i16> %vec, <8 x i16> %mask) {942; CHECK-LABEL: test_masked_z_8xi16_perm_low_mask7:943; CHECK: # %bb.0:944; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1945; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 {%k1} {z} = xmm0[1,0,2,0,4,5,6,7]946; CHECK-NEXT: retq947 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 1, i32 0, i32 2, i32 0, i32 4, i32 5, i32 6, i32 7>948 %cmp = icmp eq <8 x i16> %mask, zeroinitializer949 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer950 ret <8 x i16> %res951}952define <8 x i16> @test_8xi16_perm_high_mem_mask0(ptr %vp) {953; CHECK-LABEL: test_8xi16_perm_high_mem_mask0:954; CHECK: # %bb.0:955; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 = mem[0,1,2,3,7,7,4,6]956; CHECK-NEXT: retq957 %vec = load <8 x i16>, ptr %vp958 %res = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 7, i32 4, i32 6>959 ret <8 x i16> %res960}961define <8 x i16> @test_masked_8xi16_perm_high_mem_mask0(ptr %vp, <8 x i16> %vec2, <8 x i16> %mask) {962; CHECK-LABEL: test_masked_8xi16_perm_high_mem_mask0:963; CHECK: # %bb.0:964; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1965; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 {%k1} = mem[0,1,2,3,7,7,4,6]966; CHECK-NEXT: retq967 %vec = load <8 x i16>, ptr %vp968 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 7, i32 4, i32 6>969 %cmp = icmp eq <8 x i16> %mask, zeroinitializer970 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec2971 ret <8 x i16> %res972}973 974define <8 x i16> @test_masked_z_8xi16_perm_high_mem_mask0(ptr %vp, <8 x i16> %mask) {975; CHECK-LABEL: test_masked_z_8xi16_perm_high_mem_mask0:976; CHECK: # %bb.0:977; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k1978; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 {%k1} {z} = mem[0,1,2,3,7,7,4,6]979; CHECK-NEXT: retq980 %vec = load <8 x i16>, ptr %vp981 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 7, i32 4, i32 6>982 %cmp = icmp eq <8 x i16> %mask, zeroinitializer983 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer984 ret <8 x i16> %res985}986 987define <8 x i16> @test_masked_8xi16_perm_low_mem_mask1(ptr %vp, <8 x i16> %vec2, <8 x i16> %mask) {988; CHECK-LABEL: test_masked_8xi16_perm_low_mem_mask1:989; CHECK: # %bb.0:990; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1991; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 {%k1} = mem[1,3,3,2,4,5,6,7]992; CHECK-NEXT: retq993 %vec = load <8 x i16>, ptr %vp994 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 1, i32 3, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>995 %cmp = icmp eq <8 x i16> %mask, zeroinitializer996 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec2997 ret <8 x i16> %res998}999 1000define <8 x i16> @test_masked_z_8xi16_perm_low_mem_mask1(ptr %vp, <8 x i16> %mask) {1001; CHECK-LABEL: test_masked_z_8xi16_perm_low_mem_mask1:1002; CHECK: # %bb.0:1003; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k11004; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 {%k1} {z} = mem[1,3,3,2,4,5,6,7]1005; CHECK-NEXT: retq1006 %vec = load <8 x i16>, ptr %vp1007 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 1, i32 3, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>1008 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1009 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer1010 ret <8 x i16> %res1011}1012 1013define <8 x i16> @test_masked_8xi16_perm_high_mem_mask2(ptr %vp, <8 x i16> %vec2, <8 x i16> %mask) {1014; CHECK-LABEL: test_masked_8xi16_perm_high_mem_mask2:1015; CHECK: # %bb.0:1016; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k11017; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 {%k1} = mem[0,1,2,3,6,6,5,7]1018; CHECK-NEXT: retq1019 %vec = load <8 x i16>, ptr %vp1020 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 6, i32 5, i32 7>1021 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1022 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec21023 ret <8 x i16> %res1024}1025 1026define <8 x i16> @test_masked_z_8xi16_perm_high_mem_mask2(ptr %vp, <8 x i16> %mask) {1027; CHECK-LABEL: test_masked_z_8xi16_perm_high_mem_mask2:1028; CHECK: # %bb.0:1029; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k11030; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 {%k1} {z} = mem[0,1,2,3,6,6,5,7]1031; CHECK-NEXT: retq1032 %vec = load <8 x i16>, ptr %vp1033 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 6, i32 5, i32 7>1034 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1035 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer1036 ret <8 x i16> %res1037}1038 1039define <8 x i16> @test_8xi16_perm_low_mem_mask3(ptr %vp) {1040; CHECK-LABEL: test_8xi16_perm_low_mem_mask3:1041; CHECK: # %bb.0:1042; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 = mem[3,1,2,0,4,5,6,7]1043; CHECK-NEXT: retq1044 %vec = load <8 x i16>, ptr %vp1045 %res = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 3, i32 1, i32 2, i32 0, i32 4, i32 5, i32 6, i32 7>1046 ret <8 x i16> %res1047}1048define <8 x i16> @test_masked_8xi16_perm_low_mem_mask3(ptr %vp, <8 x i16> %vec2, <8 x i16> %mask) {1049; CHECK-LABEL: test_masked_8xi16_perm_low_mem_mask3:1050; CHECK: # %bb.0:1051; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k11052; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 {%k1} = mem[3,1,2,0,4,5,6,7]1053; CHECK-NEXT: retq1054 %vec = load <8 x i16>, ptr %vp1055 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 3, i32 1, i32 2, i32 0, i32 4, i32 5, i32 6, i32 7>1056 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1057 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec21058 ret <8 x i16> %res1059}1060 1061define <8 x i16> @test_masked_z_8xi16_perm_low_mem_mask3(ptr %vp, <8 x i16> %mask) {1062; CHECK-LABEL: test_masked_z_8xi16_perm_low_mem_mask3:1063; CHECK: # %bb.0:1064; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k11065; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 {%k1} {z} = mem[3,1,2,0,4,5,6,7]1066; CHECK-NEXT: retq1067 %vec = load <8 x i16>, ptr %vp1068 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 3, i32 1, i32 2, i32 0, i32 4, i32 5, i32 6, i32 7>1069 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1070 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer1071 ret <8 x i16> %res1072}1073 1074define <8 x i16> @test_masked_8xi16_perm_high_mem_mask4(ptr %vp, <8 x i16> %vec2, <8 x i16> %mask) {1075; CHECK-LABEL: test_masked_8xi16_perm_high_mem_mask4:1076; CHECK: # %bb.0:1077; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k11078; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 {%k1} = mem[0,1,2,3,7,6,7,5]1079; CHECK-NEXT: retq1080 %vec = load <8 x i16>, ptr %vp1081 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 6, i32 7, i32 5>1082 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1083 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec21084 ret <8 x i16> %res1085}1086 1087define <8 x i16> @test_masked_z_8xi16_perm_high_mem_mask4(ptr %vp, <8 x i16> %mask) {1088; CHECK-LABEL: test_masked_z_8xi16_perm_high_mem_mask4:1089; CHECK: # %bb.0:1090; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k11091; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 {%k1} {z} = mem[0,1,2,3,7,6,7,5]1092; CHECK-NEXT: retq1093 %vec = load <8 x i16>, ptr %vp1094 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 6, i32 7, i32 5>1095 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1096 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer1097 ret <8 x i16> %res1098}1099 1100define <8 x i16> @test_masked_8xi16_perm_low_mem_mask5(ptr %vp, <8 x i16> %vec2, <8 x i16> %mask) {1101; CHECK-LABEL: test_masked_8xi16_perm_low_mem_mask5:1102; CHECK: # %bb.0:1103; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k11104; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 {%k1} = mem[2,1,3,2,4,5,6,7]1105; CHECK-NEXT: retq1106 %vec = load <8 x i16>, ptr %vp1107 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 2, i32 1, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>1108 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1109 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec21110 ret <8 x i16> %res1111}1112 1113define <8 x i16> @test_masked_z_8xi16_perm_low_mem_mask5(ptr %vp, <8 x i16> %mask) {1114; CHECK-LABEL: test_masked_z_8xi16_perm_low_mem_mask5:1115; CHECK: # %bb.0:1116; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k11117; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 {%k1} {z} = mem[2,1,3,2,4,5,6,7]1118; CHECK-NEXT: retq1119 %vec = load <8 x i16>, ptr %vp1120 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 2, i32 1, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7>1121 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1122 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer1123 ret <8 x i16> %res1124}1125 1126define <8 x i16> @test_8xi16_perm_high_mem_mask6(ptr %vp) {1127; CHECK-LABEL: test_8xi16_perm_high_mem_mask6:1128; CHECK: # %bb.0:1129; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 = mem[0,1,2,3,7,4,4,4]1130; CHECK-NEXT: retq1131 %vec = load <8 x i16>, ptr %vp1132 %res = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 4, i32 4, i32 4>1133 ret <8 x i16> %res1134}1135define <8 x i16> @test_masked_8xi16_perm_high_mem_mask6(ptr %vp, <8 x i16> %vec2, <8 x i16> %mask) {1136; CHECK-LABEL: test_masked_8xi16_perm_high_mem_mask6:1137; CHECK: # %bb.0:1138; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k11139; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 {%k1} = mem[0,1,2,3,7,4,4,4]1140; CHECK-NEXT: retq1141 %vec = load <8 x i16>, ptr %vp1142 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 4, i32 4, i32 4>1143 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1144 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec21145 ret <8 x i16> %res1146}1147 1148define <8 x i16> @test_masked_z_8xi16_perm_high_mem_mask6(ptr %vp, <8 x i16> %mask) {1149; CHECK-LABEL: test_masked_z_8xi16_perm_high_mem_mask6:1150; CHECK: # %bb.0:1151; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k11152; CHECK-NEXT: vpshufhw {{.*#+}} xmm0 {%k1} {z} = mem[0,1,2,3,7,4,4,4]1153; CHECK-NEXT: retq1154 %vec = load <8 x i16>, ptr %vp1155 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 4, i32 4, i32 4>1156 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1157 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer1158 ret <8 x i16> %res1159}1160 1161define <8 x i16> @test_masked_8xi16_perm_low_mem_mask7(ptr %vp, <8 x i16> %vec2, <8 x i16> %mask) {1162; CHECK-LABEL: test_masked_8xi16_perm_low_mem_mask7:1163; CHECK: # %bb.0:1164; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k11165; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 {%k1} = mem[0,3,3,1,4,5,6,7]1166; CHECK-NEXT: retq1167 %vec = load <8 x i16>, ptr %vp1168 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 3, i32 3, i32 1, i32 4, i32 5, i32 6, i32 7>1169 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1170 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %vec21171 ret <8 x i16> %res1172}1173 1174define <8 x i16> @test_masked_z_8xi16_perm_low_mem_mask7(ptr %vp, <8 x i16> %mask) {1175; CHECK-LABEL: test_masked_z_8xi16_perm_low_mem_mask7:1176; CHECK: # %bb.0:1177; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k11178; CHECK-NEXT: vpshuflw {{.*#+}} xmm0 {%k1} {z} = mem[0,3,3,1,4,5,6,7]1179; CHECK-NEXT: retq1180 %vec = load <8 x i16>, ptr %vp1181 %shuf = shufflevector <8 x i16> %vec, <8 x i16> undef, <8 x i32> <i32 0, i32 3, i32 3, i32 1, i32 4, i32 5, i32 6, i32 7>1182 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1183 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer1184 ret <8 x i16> %res1185}1186 1187define <16 x i16> @test_16xi16_perm_high_mask0(<16 x i16> %vec) {1188; CHECK-LABEL: test_16xi16_perm_high_mask0:1189; CHECK: # %bb.0:1190; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,4,4,6,4,8,9,10,11,12,12,14,12]1191; CHECK-NEXT: retq1192 %res = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 6, i32 4, i32 8, i32 9, i32 10, i32 11, i32 12, i32 12, i32 14, i32 12>1193 ret <16 x i16> %res1194}1195define <16 x i16> @test_masked_16xi16_perm_high_mask0(<16 x i16> %vec, <16 x i16> %vec2, <16 x i16> %mask) {1196; CHECK-LABEL: test_masked_16xi16_perm_high_mask0:1197; CHECK: # %bb.0:1198; CHECK-NEXT: vptestnmw %ymm2, %ymm2, %k11199; CHECK-NEXT: vpshufhw {{.*#+}} ymm1 {%k1} = ymm0[0,1,2,3,4,4,6,4,8,9,10,11,12,12,14,12]1200; CHECK-NEXT: vmovdqa %ymm1, %ymm01201; CHECK-NEXT: retq1202 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 6, i32 4, i32 8, i32 9, i32 10, i32 11, i32 12, i32 12, i32 14, i32 12>1203 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1204 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21205 ret <16 x i16> %res1206}1207 1208define <16 x i16> @test_masked_z_16xi16_perm_high_mask0(<16 x i16> %vec, <16 x i16> %mask) {1209; CHECK-LABEL: test_masked_z_16xi16_perm_high_mask0:1210; CHECK: # %bb.0:1211; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11212; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 {%k1} {z} = ymm0[0,1,2,3,4,4,6,4,8,9,10,11,12,12,14,12]1213; CHECK-NEXT: retq1214 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 6, i32 4, i32 8, i32 9, i32 10, i32 11, i32 12, i32 12, i32 14, i32 12>1215 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1216 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1217 ret <16 x i16> %res1218}1219define <16 x i16> @test_masked_16xi16_perm_low_mask1(<16 x i16> %vec, <16 x i16> %vec2, <16 x i16> %mask) {1220; CHECK-LABEL: test_masked_16xi16_perm_low_mask1:1221; CHECK: # %bb.0:1222; CHECK-NEXT: vptestnmw %ymm2, %ymm2, %k11223; CHECK-NEXT: vpshuflw {{.*#+}} ymm1 {%k1} = ymm0[0,2,3,2,4,5,6,7,8,10,11,10,12,13,14,15]1224; CHECK-NEXT: vmovdqa %ymm1, %ymm01225; CHECK-NEXT: retq1226 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 2, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7, i32 8, i32 10, i32 11, i32 10, i32 12, i32 13, i32 14, i32 15>1227 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1228 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21229 ret <16 x i16> %res1230}1231 1232define <16 x i16> @test_masked_z_16xi16_perm_low_mask1(<16 x i16> %vec, <16 x i16> %mask) {1233; CHECK-LABEL: test_masked_z_16xi16_perm_low_mask1:1234; CHECK: # %bb.0:1235; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11236; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 {%k1} {z} = ymm0[0,2,3,2,4,5,6,7,8,10,11,10,12,13,14,15]1237; CHECK-NEXT: retq1238 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 2, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7, i32 8, i32 10, i32 11, i32 10, i32 12, i32 13, i32 14, i32 15>1239 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1240 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1241 ret <16 x i16> %res1242}1243define <16 x i16> @test_masked_16xi16_perm_high_mask2(<16 x i16> %vec, <16 x i16> %vec2, <16 x i16> %mask) {1244; CHECK-LABEL: test_masked_16xi16_perm_high_mask2:1245; CHECK: # %bb.0:1246; CHECK-NEXT: vptestnmw %ymm2, %ymm2, %k11247; CHECK-NEXT: vpshufhw {{.*#+}} ymm1 {%k1} = ymm0[0,1,2,3,7,5,5,5,8,9,10,11,15,13,13,13]1248; CHECK-NEXT: vmovdqa %ymm1, %ymm01249; CHECK-NEXT: retq1250 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 5, i32 5, i32 5, i32 8, i32 9, i32 10, i32 11, i32 15, i32 13, i32 13, i32 13>1251 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1252 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21253 ret <16 x i16> %res1254}1255 1256define <16 x i16> @test_masked_z_16xi16_perm_high_mask2(<16 x i16> %vec, <16 x i16> %mask) {1257; CHECK-LABEL: test_masked_z_16xi16_perm_high_mask2:1258; CHECK: # %bb.0:1259; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11260; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 {%k1} {z} = ymm0[0,1,2,3,7,5,5,5,8,9,10,11,15,13,13,13]1261; CHECK-NEXT: retq1262 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 5, i32 5, i32 5, i32 8, i32 9, i32 10, i32 11, i32 15, i32 13, i32 13, i32 13>1263 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1264 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1265 ret <16 x i16> %res1266}1267define <16 x i16> @test_16xi16_perm_low_mask3(<16 x i16> %vec) {1268; CHECK-LABEL: test_16xi16_perm_low_mask3:1269; CHECK: # %bb.0:1270; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 = ymm0[3,2,3,2,4,5,6,7,11,10,11,10,12,13,14,15]1271; CHECK-NEXT: retq1272 %res = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 2, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7, i32 11, i32 10, i32 11, i32 10, i32 12, i32 13, i32 14, i32 15>1273 ret <16 x i16> %res1274}1275define <16 x i16> @test_masked_16xi16_perm_low_mask3(<16 x i16> %vec, <16 x i16> %vec2, <16 x i16> %mask) {1276; CHECK-LABEL: test_masked_16xi16_perm_low_mask3:1277; CHECK: # %bb.0:1278; CHECK-NEXT: vptestnmw %ymm2, %ymm2, %k11279; CHECK-NEXT: vpshuflw {{.*#+}} ymm1 {%k1} = ymm0[3,2,3,2,4,5,6,7,11,10,11,10,12,13,14,15]1280; CHECK-NEXT: vmovdqa %ymm1, %ymm01281; CHECK-NEXT: retq1282 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 2, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7, i32 11, i32 10, i32 11, i32 10, i32 12, i32 13, i32 14, i32 15>1283 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1284 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21285 ret <16 x i16> %res1286}1287 1288define <16 x i16> @test_masked_z_16xi16_perm_low_mask3(<16 x i16> %vec, <16 x i16> %mask) {1289; CHECK-LABEL: test_masked_z_16xi16_perm_low_mask3:1290; CHECK: # %bb.0:1291; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11292; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 {%k1} {z} = ymm0[3,2,3,2,4,5,6,7,11,10,11,10,12,13,14,15]1293; CHECK-NEXT: retq1294 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 2, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7, i32 11, i32 10, i32 11, i32 10, i32 12, i32 13, i32 14, i32 15>1295 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1296 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1297 ret <16 x i16> %res1298}1299define <16 x i16> @test_masked_16xi16_perm_high_mask4(<16 x i16> %vec, <16 x i16> %vec2, <16 x i16> %mask) {1300; CHECK-LABEL: test_masked_16xi16_perm_high_mask4:1301; CHECK: # %bb.0:1302; CHECK-NEXT: vptestnmw %ymm2, %ymm2, %k11303; CHECK-NEXT: vpshufhw {{.*#+}} ymm1 {%k1} = ymm0[0,1,2,3,6,7,4,7,8,9,10,11,14,15,12,15]1304; CHECK-NEXT: vmovdqa %ymm1, %ymm01305; CHECK-NEXT: retq1306 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 7, i32 4, i32 7, i32 8, i32 9, i32 10, i32 11, i32 14, i32 15, i32 12, i32 15>1307 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1308 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21309 ret <16 x i16> %res1310}1311 1312define <16 x i16> @test_masked_z_16xi16_perm_high_mask4(<16 x i16> %vec, <16 x i16> %mask) {1313; CHECK-LABEL: test_masked_z_16xi16_perm_high_mask4:1314; CHECK: # %bb.0:1315; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11316; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 {%k1} {z} = ymm0[0,1,2,3,6,7,4,7,8,9,10,11,14,15,12,15]1317; CHECK-NEXT: retq1318 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 7, i32 4, i32 7, i32 8, i32 9, i32 10, i32 11, i32 14, i32 15, i32 12, i32 15>1319 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1320 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1321 ret <16 x i16> %res1322}1323define <16 x i16> @test_masked_16xi16_perm_low_mask5(<16 x i16> %vec, <16 x i16> %vec2, <16 x i16> %mask) {1324; CHECK-LABEL: test_masked_16xi16_perm_low_mask5:1325; CHECK: # %bb.0:1326; CHECK-NEXT: vptestnmw %ymm2, %ymm2, %k11327; CHECK-NEXT: vpshuflw {{.*#+}} ymm1 {%k1} = ymm0[3,3,3,0,4,5,6,7,11,11,11,8,12,13,14,15]1328; CHECK-NEXT: vmovdqa %ymm1, %ymm01329; CHECK-NEXT: retq1330 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 3, i32 3, i32 0, i32 4, i32 5, i32 6, i32 7, i32 11, i32 11, i32 11, i32 8, i32 12, i32 13, i32 14, i32 15>1331 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1332 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21333 ret <16 x i16> %res1334}1335 1336define <16 x i16> @test_masked_z_16xi16_perm_low_mask5(<16 x i16> %vec, <16 x i16> %mask) {1337; CHECK-LABEL: test_masked_z_16xi16_perm_low_mask5:1338; CHECK: # %bb.0:1339; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11340; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 {%k1} {z} = ymm0[3,3,3,0,4,5,6,7,11,11,11,8,12,13,14,15]1341; CHECK-NEXT: retq1342 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 3, i32 3, i32 0, i32 4, i32 5, i32 6, i32 7, i32 11, i32 11, i32 11, i32 8, i32 12, i32 13, i32 14, i32 15>1343 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1344 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1345 ret <16 x i16> %res1346}1347define <16 x i16> @test_16xi16_perm_high_mask6(<16 x i16> %vec) {1348; CHECK-LABEL: test_16xi16_perm_high_mask6:1349; CHECK: # %bb.0:1350; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 = ymm0[0,1,2,3,6,7,6,5,8,9,10,11,14,15,14,13]1351; CHECK-NEXT: retq1352 %res = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 7, i32 6, i32 5, i32 8, i32 9, i32 10, i32 11, i32 14, i32 15, i32 14, i32 13>1353 ret <16 x i16> %res1354}1355define <16 x i16> @test_masked_16xi16_perm_high_mask6(<16 x i16> %vec, <16 x i16> %vec2, <16 x i16> %mask) {1356; CHECK-LABEL: test_masked_16xi16_perm_high_mask6:1357; CHECK: # %bb.0:1358; CHECK-NEXT: vptestnmw %ymm2, %ymm2, %k11359; CHECK-NEXT: vpshufhw {{.*#+}} ymm1 {%k1} = ymm0[0,1,2,3,6,7,6,5,8,9,10,11,14,15,14,13]1360; CHECK-NEXT: vmovdqa %ymm1, %ymm01361; CHECK-NEXT: retq1362 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 7, i32 6, i32 5, i32 8, i32 9, i32 10, i32 11, i32 14, i32 15, i32 14, i32 13>1363 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1364 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21365 ret <16 x i16> %res1366}1367 1368define <16 x i16> @test_masked_z_16xi16_perm_high_mask6(<16 x i16> %vec, <16 x i16> %mask) {1369; CHECK-LABEL: test_masked_z_16xi16_perm_high_mask6:1370; CHECK: # %bb.0:1371; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11372; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 {%k1} {z} = ymm0[0,1,2,3,6,7,6,5,8,9,10,11,14,15,14,13]1373; CHECK-NEXT: retq1374 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 7, i32 6, i32 5, i32 8, i32 9, i32 10, i32 11, i32 14, i32 15, i32 14, i32 13>1375 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1376 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1377 ret <16 x i16> %res1378}1379define <16 x i16> @test_masked_16xi16_perm_low_mask7(<16 x i16> %vec, <16 x i16> %vec2, <16 x i16> %mask) {1380; CHECK-LABEL: test_masked_16xi16_perm_low_mask7:1381; CHECK: # %bb.0:1382; CHECK-NEXT: vptestnmw %ymm2, %ymm2, %k11383; CHECK-NEXT: vpshuflw {{.*#+}} ymm1 {%k1} = ymm0[3,2,1,2,4,5,6,7,11,10,9,10,12,13,14,15]1384; CHECK-NEXT: vmovdqa %ymm1, %ymm01385; CHECK-NEXT: retq1386 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 2, i32 1, i32 2, i32 4, i32 5, i32 6, i32 7, i32 11, i32 10, i32 9, i32 10, i32 12, i32 13, i32 14, i32 15>1387 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1388 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21389 ret <16 x i16> %res1390}1391 1392define <16 x i16> @test_masked_z_16xi16_perm_low_mask7(<16 x i16> %vec, <16 x i16> %mask) {1393; CHECK-LABEL: test_masked_z_16xi16_perm_low_mask7:1394; CHECK: # %bb.0:1395; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11396; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 {%k1} {z} = ymm0[3,2,1,2,4,5,6,7,11,10,9,10,12,13,14,15]1397; CHECK-NEXT: retq1398 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 2, i32 1, i32 2, i32 4, i32 5, i32 6, i32 7, i32 11, i32 10, i32 9, i32 10, i32 12, i32 13, i32 14, i32 15>1399 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1400 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1401 ret <16 x i16> %res1402}1403define <16 x i16> @test_16xi16_perm_high_mem_mask0(ptr %vp) {1404; CHECK-LABEL: test_16xi16_perm_high_mem_mask0:1405; CHECK: # %bb.0:1406; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 = mem[0,1,2,3,5,6,4,7,8,9,10,11,13,14,12,15]1407; CHECK-NEXT: retq1408 %vec = load <16 x i16>, ptr %vp1409 %res = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 6, i32 4, i32 7, i32 8, i32 9, i32 10, i32 11, i32 13, i32 14, i32 12, i32 15>1410 ret <16 x i16> %res1411}1412define <16 x i16> @test_masked_16xi16_perm_high_mem_mask0(ptr %vp, <16 x i16> %vec2, <16 x i16> %mask) {1413; CHECK-LABEL: test_masked_16xi16_perm_high_mem_mask0:1414; CHECK: # %bb.0:1415; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11416; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 {%k1} = mem[0,1,2,3,5,6,4,7,8,9,10,11,13,14,12,15]1417; CHECK-NEXT: retq1418 %vec = load <16 x i16>, ptr %vp1419 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 6, i32 4, i32 7, i32 8, i32 9, i32 10, i32 11, i32 13, i32 14, i32 12, i32 15>1420 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1421 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21422 ret <16 x i16> %res1423}1424 1425define <16 x i16> @test_masked_z_16xi16_perm_high_mem_mask0(ptr %vp, <16 x i16> %mask) {1426; CHECK-LABEL: test_masked_z_16xi16_perm_high_mem_mask0:1427; CHECK: # %bb.0:1428; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k11429; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 {%k1} {z} = mem[0,1,2,3,5,6,4,7,8,9,10,11,13,14,12,15]1430; CHECK-NEXT: retq1431 %vec = load <16 x i16>, ptr %vp1432 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 6, i32 4, i32 7, i32 8, i32 9, i32 10, i32 11, i32 13, i32 14, i32 12, i32 15>1433 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1434 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1435 ret <16 x i16> %res1436}1437 1438define <16 x i16> @test_masked_16xi16_perm_low_mem_mask1(ptr %vp, <16 x i16> %vec2, <16 x i16> %mask) {1439; CHECK-LABEL: test_masked_16xi16_perm_low_mem_mask1:1440; CHECK: # %bb.0:1441; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11442; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 {%k1} = mem[1,3,3,0,4,5,6,7,9,11,11,8,12,13,14,15]1443; CHECK-NEXT: retq1444 %vec = load <16 x i16>, ptr %vp1445 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 1, i32 3, i32 3, i32 0, i32 4, i32 5, i32 6, i32 7, i32 9, i32 11, i32 11, i32 8, i32 12, i32 13, i32 14, i32 15>1446 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1447 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21448 ret <16 x i16> %res1449}1450 1451define <16 x i16> @test_masked_z_16xi16_perm_low_mem_mask1(ptr %vp, <16 x i16> %mask) {1452; CHECK-LABEL: test_masked_z_16xi16_perm_low_mem_mask1:1453; CHECK: # %bb.0:1454; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k11455; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 {%k1} {z} = mem[1,3,3,0,4,5,6,7,9,11,11,8,12,13,14,15]1456; CHECK-NEXT: retq1457 %vec = load <16 x i16>, ptr %vp1458 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 1, i32 3, i32 3, i32 0, i32 4, i32 5, i32 6, i32 7, i32 9, i32 11, i32 11, i32 8, i32 12, i32 13, i32 14, i32 15>1459 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1460 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1461 ret <16 x i16> %res1462}1463 1464define <16 x i16> @test_masked_16xi16_perm_high_mem_mask2(ptr %vp, <16 x i16> %vec2, <16 x i16> %mask) {1465; CHECK-LABEL: test_masked_16xi16_perm_high_mem_mask2:1466; CHECK: # %bb.0:1467; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11468; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 {%k1} = mem[0,1,2,3,5,6,5,6,8,9,10,11,13,14,13,14]1469; CHECK-NEXT: retq1470 %vec = load <16 x i16>, ptr %vp1471 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 6, i32 5, i32 6, i32 8, i32 9, i32 10, i32 11, i32 13, i32 14, i32 13, i32 14>1472 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1473 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21474 ret <16 x i16> %res1475}1476 1477define <16 x i16> @test_masked_z_16xi16_perm_high_mem_mask2(ptr %vp, <16 x i16> %mask) {1478; CHECK-LABEL: test_masked_z_16xi16_perm_high_mem_mask2:1479; CHECK: # %bb.0:1480; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k11481; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 {%k1} {z} = mem[0,1,2,3,5,6,5,6,8,9,10,11,13,14,13,14]1482; CHECK-NEXT: retq1483 %vec = load <16 x i16>, ptr %vp1484 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 5, i32 6, i32 5, i32 6, i32 8, i32 9, i32 10, i32 11, i32 13, i32 14, i32 13, i32 14>1485 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1486 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1487 ret <16 x i16> %res1488}1489 1490define <16 x i16> @test_16xi16_perm_low_mem_mask3(ptr %vp) {1491; CHECK-LABEL: test_16xi16_perm_low_mem_mask3:1492; CHECK: # %bb.0:1493; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 = mem[3,2,3,0,4,5,6,7,11,10,11,8,12,13,14,15]1494; CHECK-NEXT: retq1495 %vec = load <16 x i16>, ptr %vp1496 %res = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 2, i32 3, i32 0, i32 4, i32 5, i32 6, i32 7, i32 11, i32 10, i32 11, i32 8, i32 12, i32 13, i32 14, i32 15>1497 ret <16 x i16> %res1498}1499define <16 x i16> @test_masked_16xi16_perm_low_mem_mask3(ptr %vp, <16 x i16> %vec2, <16 x i16> %mask) {1500; CHECK-LABEL: test_masked_16xi16_perm_low_mem_mask3:1501; CHECK: # %bb.0:1502; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11503; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 {%k1} = mem[3,2,3,0,4,5,6,7,11,10,11,8,12,13,14,15]1504; CHECK-NEXT: retq1505 %vec = load <16 x i16>, ptr %vp1506 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 2, i32 3, i32 0, i32 4, i32 5, i32 6, i32 7, i32 11, i32 10, i32 11, i32 8, i32 12, i32 13, i32 14, i32 15>1507 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1508 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21509 ret <16 x i16> %res1510}1511 1512define <16 x i16> @test_masked_z_16xi16_perm_low_mem_mask3(ptr %vp, <16 x i16> %mask) {1513; CHECK-LABEL: test_masked_z_16xi16_perm_low_mem_mask3:1514; CHECK: # %bb.0:1515; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k11516; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 {%k1} {z} = mem[3,2,3,0,4,5,6,7,11,10,11,8,12,13,14,15]1517; CHECK-NEXT: retq1518 %vec = load <16 x i16>, ptr %vp1519 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 2, i32 3, i32 0, i32 4, i32 5, i32 6, i32 7, i32 11, i32 10, i32 11, i32 8, i32 12, i32 13, i32 14, i32 15>1520 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1521 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1522 ret <16 x i16> %res1523}1524 1525define <16 x i16> @test_masked_16xi16_perm_high_mem_mask4(ptr %vp, <16 x i16> %vec2, <16 x i16> %mask) {1526; CHECK-LABEL: test_masked_16xi16_perm_high_mem_mask4:1527; CHECK: # %bb.0:1528; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11529; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 {%k1} = mem[0,1,2,3,7,7,6,7,8,9,10,11,15,15,14,15]1530; CHECK-NEXT: retq1531 %vec = load <16 x i16>, ptr %vp1532 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 7, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 15, i32 15, i32 14, i32 15>1533 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1534 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21535 ret <16 x i16> %res1536}1537 1538define <16 x i16> @test_masked_z_16xi16_perm_high_mem_mask4(ptr %vp, <16 x i16> %mask) {1539; CHECK-LABEL: test_masked_z_16xi16_perm_high_mem_mask4:1540; CHECK: # %bb.0:1541; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k11542; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 {%k1} {z} = mem[0,1,2,3,7,7,6,7,8,9,10,11,15,15,14,15]1543; CHECK-NEXT: retq1544 %vec = load <16 x i16>, ptr %vp1545 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 7, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 15, i32 15, i32 14, i32 15>1546 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1547 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1548 ret <16 x i16> %res1549}1550 1551define <16 x i16> @test_masked_16xi16_perm_low_mem_mask5(ptr %vp, <16 x i16> %vec2, <16 x i16> %mask) {1552; CHECK-LABEL: test_masked_16xi16_perm_low_mem_mask5:1553; CHECK: # %bb.0:1554; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11555; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 {%k1} = mem[1,3,3,2,4,5,6,7,9,11,11,10,12,13,14,15]1556; CHECK-NEXT: retq1557 %vec = load <16 x i16>, ptr %vp1558 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 1, i32 3, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7, i32 9, i32 11, i32 11, i32 10, i32 12, i32 13, i32 14, i32 15>1559 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1560 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21561 ret <16 x i16> %res1562}1563 1564define <16 x i16> @test_masked_z_16xi16_perm_low_mem_mask5(ptr %vp, <16 x i16> %mask) {1565; CHECK-LABEL: test_masked_z_16xi16_perm_low_mem_mask5:1566; CHECK: # %bb.0:1567; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k11568; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 {%k1} {z} = mem[1,3,3,2,4,5,6,7,9,11,11,10,12,13,14,15]1569; CHECK-NEXT: retq1570 %vec = load <16 x i16>, ptr %vp1571 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 1, i32 3, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7, i32 9, i32 11, i32 11, i32 10, i32 12, i32 13, i32 14, i32 15>1572 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1573 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1574 ret <16 x i16> %res1575}1576 1577define <16 x i16> @test_16xi16_perm_high_mem_mask6(ptr %vp) {1578; CHECK-LABEL: test_16xi16_perm_high_mem_mask6:1579; CHECK: # %bb.0:1580; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 = mem[0,1,2,3,4,4,4,5,8,9,10,11,12,12,12,13]1581; CHECK-NEXT: retq1582 %vec = load <16 x i16>, ptr %vp1583 %res = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 4, i32 5, i32 8, i32 9, i32 10, i32 11, i32 12, i32 12, i32 12, i32 13>1584 ret <16 x i16> %res1585}1586define <16 x i16> @test_masked_16xi16_perm_high_mem_mask6(ptr %vp, <16 x i16> %vec2, <16 x i16> %mask) {1587; CHECK-LABEL: test_masked_16xi16_perm_high_mem_mask6:1588; CHECK: # %bb.0:1589; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11590; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 {%k1} = mem[0,1,2,3,4,4,4,5,8,9,10,11,12,12,12,13]1591; CHECK-NEXT: retq1592 %vec = load <16 x i16>, ptr %vp1593 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 4, i32 5, i32 8, i32 9, i32 10, i32 11, i32 12, i32 12, i32 12, i32 13>1594 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1595 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21596 ret <16 x i16> %res1597}1598 1599define <16 x i16> @test_masked_z_16xi16_perm_high_mem_mask6(ptr %vp, <16 x i16> %mask) {1600; CHECK-LABEL: test_masked_z_16xi16_perm_high_mem_mask6:1601; CHECK: # %bb.0:1602; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k11603; CHECK-NEXT: vpshufhw {{.*#+}} ymm0 {%k1} {z} = mem[0,1,2,3,4,4,4,5,8,9,10,11,12,12,12,13]1604; CHECK-NEXT: retq1605 %vec = load <16 x i16>, ptr %vp1606 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 4, i32 5, i32 8, i32 9, i32 10, i32 11, i32 12, i32 12, i32 12, i32 13>1607 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1608 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1609 ret <16 x i16> %res1610}1611 1612define <16 x i16> @test_masked_16xi16_perm_low_mem_mask7(ptr %vp, <16 x i16> %vec2, <16 x i16> %mask) {1613; CHECK-LABEL: test_masked_16xi16_perm_low_mem_mask7:1614; CHECK: # %bb.0:1615; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11616; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 {%k1} = mem[3,1,3,2,4,5,6,7,11,9,11,10,12,13,14,15]1617; CHECK-NEXT: retq1618 %vec = load <16 x i16>, ptr %vp1619 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 1, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7, i32 11, i32 9, i32 11, i32 10, i32 12, i32 13, i32 14, i32 15>1620 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1621 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %vec21622 ret <16 x i16> %res1623}1624 1625define <16 x i16> @test_masked_z_16xi16_perm_low_mem_mask7(ptr %vp, <16 x i16> %mask) {1626; CHECK-LABEL: test_masked_z_16xi16_perm_low_mem_mask7:1627; CHECK: # %bb.0:1628; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k11629; CHECK-NEXT: vpshuflw {{.*#+}} ymm0 {%k1} {z} = mem[3,1,3,2,4,5,6,7,11,9,11,10,12,13,14,15]1630; CHECK-NEXT: retq1631 %vec = load <16 x i16>, ptr %vp1632 %shuf = shufflevector <16 x i16> %vec, <16 x i16> undef, <16 x i32> <i32 3, i32 1, i32 3, i32 2, i32 4, i32 5, i32 6, i32 7, i32 11, i32 9, i32 11, i32 10, i32 12, i32 13, i32 14, i32 15>1633 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1634 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1635 ret <16 x i16> %res1636}1637 1638define <32 x i16> @test_32xi16_perm_high_mask0(<32 x i16> %vec) {1639; CHECK-LABEL: test_32xi16_perm_high_mask0:1640; CHECK: # %bb.0:1641; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 = zmm0[0,1,2,3,4,5,6,4,8,9,10,11,12,13,14,12,16,17,18,19,20,21,22,20,24,25,26,27,28,29,30,28]1642; CHECK-NEXT: retq1643 %res = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 4, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 12, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 20, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 28>1644 ret <32 x i16> %res1645}1646define <32 x i16> @test_masked_32xi16_perm_high_mask0(<32 x i16> %vec, <32 x i16> %vec2, <32 x i16> %mask) {1647; CHECK-LABEL: test_masked_32xi16_perm_high_mask0:1648; CHECK: # %bb.0:1649; CHECK-NEXT: vptestnmw %zmm2, %zmm2, %k11650; CHECK-NEXT: vpshufhw {{.*#+}} zmm1 {%k1} = zmm0[0,1,2,3,4,5,6,4,8,9,10,11,12,13,14,12,16,17,18,19,20,21,22,20,24,25,26,27,28,29,30,28]1651; CHECK-NEXT: vmovdqa64 %zmm1, %zmm01652; CHECK-NEXT: retq1653 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 4, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 12, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 20, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 28>1654 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1655 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21656 ret <32 x i16> %res1657}1658 1659define <32 x i16> @test_masked_z_32xi16_perm_high_mask0(<32 x i16> %vec, <32 x i16> %mask) {1660; CHECK-LABEL: test_masked_z_32xi16_perm_high_mask0:1661; CHECK: # %bb.0:1662; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11663; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,2,3,4,5,6,4,8,9,10,11,12,13,14,12,16,17,18,19,20,21,22,20,24,25,26,27,28,29,30,28]1664; CHECK-NEXT: retq1665 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 4, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 12, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 20, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 28>1666 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1667 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1668 ret <32 x i16> %res1669}1670define <32 x i16> @test_masked_32xi16_perm_low_mask1(<32 x i16> %vec, <32 x i16> %vec2, <32 x i16> %mask) {1671; CHECK-LABEL: test_masked_32xi16_perm_low_mask1:1672; CHECK: # %bb.0:1673; CHECK-NEXT: vptestnmw %zmm2, %zmm2, %k11674; CHECK-NEXT: vpshuflw {{.*#+}} zmm1 {%k1} = zmm0[2,1,0,0,4,5,6,7,10,9,8,8,12,13,14,15,18,17,16,16,20,21,22,23,26,25,24,24,28,29,30,31]1675; CHECK-NEXT: vmovdqa64 %zmm1, %zmm01676; CHECK-NEXT: retq1677 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 2, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7, i32 10, i32 9, i32 8, i32 8, i32 12, i32 13, i32 14, i32 15, i32 18, i32 17, i32 16, i32 16, i32 20, i32 21, i32 22, i32 23, i32 26, i32 25, i32 24, i32 24, i32 28, i32 29, i32 30, i32 31>1678 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1679 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21680 ret <32 x i16> %res1681}1682 1683define <32 x i16> @test_masked_z_32xi16_perm_low_mask1(<32 x i16> %vec, <32 x i16> %mask) {1684; CHECK-LABEL: test_masked_z_32xi16_perm_low_mask1:1685; CHECK: # %bb.0:1686; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11687; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 {%k1} {z} = zmm0[2,1,0,0,4,5,6,7,10,9,8,8,12,13,14,15,18,17,16,16,20,21,22,23,26,25,24,24,28,29,30,31]1688; CHECK-NEXT: retq1689 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 2, i32 1, i32 0, i32 0, i32 4, i32 5, i32 6, i32 7, i32 10, i32 9, i32 8, i32 8, i32 12, i32 13, i32 14, i32 15, i32 18, i32 17, i32 16, i32 16, i32 20, i32 21, i32 22, i32 23, i32 26, i32 25, i32 24, i32 24, i32 28, i32 29, i32 30, i32 31>1690 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1691 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1692 ret <32 x i16> %res1693}1694define <32 x i16> @test_masked_32xi16_perm_high_mask2(<32 x i16> %vec, <32 x i16> %vec2, <32 x i16> %mask) {1695; CHECK-LABEL: test_masked_32xi16_perm_high_mask2:1696; CHECK: # %bb.0:1697; CHECK-NEXT: vptestnmw %zmm2, %zmm2, %k11698; CHECK-NEXT: vpshufhw {{.*#+}} zmm1 {%k1} = zmm0[0,1,2,3,4,6,4,7,8,9,10,11,12,14,12,15,16,17,18,19,20,22,20,23,24,25,26,27,28,30,28,31]1699; CHECK-NEXT: vmovdqa64 %zmm1, %zmm01700; CHECK-NEXT: retq1701 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 6, i32 4, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 14, i32 12, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 22, i32 20, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 30, i32 28, i32 31>1702 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1703 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21704 ret <32 x i16> %res1705}1706 1707define <32 x i16> @test_masked_z_32xi16_perm_high_mask2(<32 x i16> %vec, <32 x i16> %mask) {1708; CHECK-LABEL: test_masked_z_32xi16_perm_high_mask2:1709; CHECK: # %bb.0:1710; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11711; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,2,3,4,6,4,7,8,9,10,11,12,14,12,15,16,17,18,19,20,22,20,23,24,25,26,27,28,30,28,31]1712; CHECK-NEXT: retq1713 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 6, i32 4, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 14, i32 12, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 22, i32 20, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 30, i32 28, i32 31>1714 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1715 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1716 ret <32 x i16> %res1717}1718define <32 x i16> @test_32xi16_perm_low_mask3(<32 x i16> %vec) {1719; CHECK-LABEL: test_32xi16_perm_low_mask3:1720; CHECK: # %bb.0:1721; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 = zmm0[3,3,1,3,4,5,6,7,11,11,9,11,12,13,14,15,19,19,17,19,20,21,22,23,27,27,25,27,28,29,30,31]1722; CHECK-NEXT: retq1723 %res = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 3, i32 3, i32 1, i32 3, i32 4, i32 5, i32 6, i32 7, i32 11, i32 11, i32 9, i32 11, i32 12, i32 13, i32 14, i32 15, i32 19, i32 19, i32 17, i32 19, i32 20, i32 21, i32 22, i32 23, i32 27, i32 27, i32 25, i32 27, i32 28, i32 29, i32 30, i32 31>1724 ret <32 x i16> %res1725}1726define <32 x i16> @test_masked_32xi16_perm_low_mask3(<32 x i16> %vec, <32 x i16> %vec2, <32 x i16> %mask) {1727; CHECK-LABEL: test_masked_32xi16_perm_low_mask3:1728; CHECK: # %bb.0:1729; CHECK-NEXT: vptestnmw %zmm2, %zmm2, %k11730; CHECK-NEXT: vpshuflw {{.*#+}} zmm1 {%k1} = zmm0[3,3,1,3,4,5,6,7,11,11,9,11,12,13,14,15,19,19,17,19,20,21,22,23,27,27,25,27,28,29,30,31]1731; CHECK-NEXT: vmovdqa64 %zmm1, %zmm01732; CHECK-NEXT: retq1733 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 3, i32 3, i32 1, i32 3, i32 4, i32 5, i32 6, i32 7, i32 11, i32 11, i32 9, i32 11, i32 12, i32 13, i32 14, i32 15, i32 19, i32 19, i32 17, i32 19, i32 20, i32 21, i32 22, i32 23, i32 27, i32 27, i32 25, i32 27, i32 28, i32 29, i32 30, i32 31>1734 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1735 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21736 ret <32 x i16> %res1737}1738 1739define <32 x i16> @test_masked_z_32xi16_perm_low_mask3(<32 x i16> %vec, <32 x i16> %mask) {1740; CHECK-LABEL: test_masked_z_32xi16_perm_low_mask3:1741; CHECK: # %bb.0:1742; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11743; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 {%k1} {z} = zmm0[3,3,1,3,4,5,6,7,11,11,9,11,12,13,14,15,19,19,17,19,20,21,22,23,27,27,25,27,28,29,30,31]1744; CHECK-NEXT: retq1745 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 3, i32 3, i32 1, i32 3, i32 4, i32 5, i32 6, i32 7, i32 11, i32 11, i32 9, i32 11, i32 12, i32 13, i32 14, i32 15, i32 19, i32 19, i32 17, i32 19, i32 20, i32 21, i32 22, i32 23, i32 27, i32 27, i32 25, i32 27, i32 28, i32 29, i32 30, i32 31>1746 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1747 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1748 ret <32 x i16> %res1749}1750define <32 x i16> @test_masked_32xi16_perm_high_mask4(<32 x i16> %vec, <32 x i16> %vec2, <32 x i16> %mask) {1751; CHECK-LABEL: test_masked_32xi16_perm_high_mask4:1752; CHECK: # %bb.0:1753; CHECK-NEXT: vptestnmw %zmm2, %zmm2, %k11754; CHECK-NEXT: vpshufhw {{.*#+}} zmm1 {%k1} = zmm0[0,1,2,3,7,7,5,6,8,9,10,11,15,15,13,14,16,17,18,19,23,23,21,22,24,25,26,27,31,31,29,30]1755; CHECK-NEXT: vmovdqa64 %zmm1, %zmm01756; CHECK-NEXT: retq1757 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 7, i32 5, i32 6, i32 8, i32 9, i32 10, i32 11, i32 15, i32 15, i32 13, i32 14, i32 16, i32 17, i32 18, i32 19, i32 23, i32 23, i32 21, i32 22, i32 24, i32 25, i32 26, i32 27, i32 31, i32 31, i32 29, i32 30>1758 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1759 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21760 ret <32 x i16> %res1761}1762 1763define <32 x i16> @test_masked_z_32xi16_perm_high_mask4(<32 x i16> %vec, <32 x i16> %mask) {1764; CHECK-LABEL: test_masked_z_32xi16_perm_high_mask4:1765; CHECK: # %bb.0:1766; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11767; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,2,3,7,7,5,6,8,9,10,11,15,15,13,14,16,17,18,19,23,23,21,22,24,25,26,27,31,31,29,30]1768; CHECK-NEXT: retq1769 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 7, i32 5, i32 6, i32 8, i32 9, i32 10, i32 11, i32 15, i32 15, i32 13, i32 14, i32 16, i32 17, i32 18, i32 19, i32 23, i32 23, i32 21, i32 22, i32 24, i32 25, i32 26, i32 27, i32 31, i32 31, i32 29, i32 30>1770 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1771 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1772 ret <32 x i16> %res1773}1774define <32 x i16> @test_masked_32xi16_perm_low_mask5(<32 x i16> %vec, <32 x i16> %vec2, <32 x i16> %mask) {1775; CHECK-LABEL: test_masked_32xi16_perm_low_mask5:1776; CHECK: # %bb.0:1777; CHECK-NEXT: vptestnmw %zmm2, %zmm2, %k11778; CHECK-NEXT: vpshuflw {{.*#+}} zmm1 {%k1} = zmm0[2,1,1,0,4,5,6,7,10,9,9,8,12,13,14,15,18,17,17,16,20,21,22,23,26,25,25,24,28,29,30,31]1779; CHECK-NEXT: vmovdqa64 %zmm1, %zmm01780; CHECK-NEXT: retq1781 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 2, i32 1, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7, i32 10, i32 9, i32 9, i32 8, i32 12, i32 13, i32 14, i32 15, i32 18, i32 17, i32 17, i32 16, i32 20, i32 21, i32 22, i32 23, i32 26, i32 25, i32 25, i32 24, i32 28, i32 29, i32 30, i32 31>1782 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1783 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21784 ret <32 x i16> %res1785}1786 1787define <32 x i16> @test_masked_z_32xi16_perm_low_mask5(<32 x i16> %vec, <32 x i16> %mask) {1788; CHECK-LABEL: test_masked_z_32xi16_perm_low_mask5:1789; CHECK: # %bb.0:1790; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11791; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 {%k1} {z} = zmm0[2,1,1,0,4,5,6,7,10,9,9,8,12,13,14,15,18,17,17,16,20,21,22,23,26,25,25,24,28,29,30,31]1792; CHECK-NEXT: retq1793 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 2, i32 1, i32 1, i32 0, i32 4, i32 5, i32 6, i32 7, i32 10, i32 9, i32 9, i32 8, i32 12, i32 13, i32 14, i32 15, i32 18, i32 17, i32 17, i32 16, i32 20, i32 21, i32 22, i32 23, i32 26, i32 25, i32 25, i32 24, i32 28, i32 29, i32 30, i32 31>1794 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1795 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1796 ret <32 x i16> %res1797}1798define <32 x i16> @test_32xi16_perm_high_mask6(<32 x i16> %vec) {1799; CHECK-LABEL: test_32xi16_perm_high_mask6:1800; CHECK: # %bb.0:1801; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 = zmm0[0,1,2,3,4,4,5,6,8,9,10,11,12,12,13,14,16,17,18,19,20,20,21,22,24,25,26,27,28,28,29,30]1802; CHECK-NEXT: retq1803 %res = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 5, i32 6, i32 8, i32 9, i32 10, i32 11, i32 12, i32 12, i32 13, i32 14, i32 16, i32 17, i32 18, i32 19, i32 20, i32 20, i32 21, i32 22, i32 24, i32 25, i32 26, i32 27, i32 28, i32 28, i32 29, i32 30>1804 ret <32 x i16> %res1805}1806define <32 x i16> @test_masked_32xi16_perm_high_mask6(<32 x i16> %vec, <32 x i16> %vec2, <32 x i16> %mask) {1807; CHECK-LABEL: test_masked_32xi16_perm_high_mask6:1808; CHECK: # %bb.0:1809; CHECK-NEXT: vptestnmw %zmm2, %zmm2, %k11810; CHECK-NEXT: vpshufhw {{.*#+}} zmm1 {%k1} = zmm0[0,1,2,3,4,4,5,6,8,9,10,11,12,12,13,14,16,17,18,19,20,20,21,22,24,25,26,27,28,28,29,30]1811; CHECK-NEXT: vmovdqa64 %zmm1, %zmm01812; CHECK-NEXT: retq1813 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 5, i32 6, i32 8, i32 9, i32 10, i32 11, i32 12, i32 12, i32 13, i32 14, i32 16, i32 17, i32 18, i32 19, i32 20, i32 20, i32 21, i32 22, i32 24, i32 25, i32 26, i32 27, i32 28, i32 28, i32 29, i32 30>1814 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1815 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21816 ret <32 x i16> %res1817}1818 1819define <32 x i16> @test_masked_z_32xi16_perm_high_mask6(<32 x i16> %vec, <32 x i16> %mask) {1820; CHECK-LABEL: test_masked_z_32xi16_perm_high_mask6:1821; CHECK: # %bb.0:1822; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11823; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 {%k1} {z} = zmm0[0,1,2,3,4,4,5,6,8,9,10,11,12,12,13,14,16,17,18,19,20,20,21,22,24,25,26,27,28,28,29,30]1824; CHECK-NEXT: retq1825 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 4, i32 5, i32 6, i32 8, i32 9, i32 10, i32 11, i32 12, i32 12, i32 13, i32 14, i32 16, i32 17, i32 18, i32 19, i32 20, i32 20, i32 21, i32 22, i32 24, i32 25, i32 26, i32 27, i32 28, i32 28, i32 29, i32 30>1826 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1827 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1828 ret <32 x i16> %res1829}1830define <32 x i16> @test_masked_32xi16_perm_low_mask7(<32 x i16> %vec, <32 x i16> %vec2, <32 x i16> %mask) {1831; CHECK-LABEL: test_masked_32xi16_perm_low_mask7:1832; CHECK: # %bb.0:1833; CHECK-NEXT: vptestnmw %zmm2, %zmm2, %k11834; CHECK-NEXT: vpshuflw {{.*#+}} zmm1 {%k1} = zmm0[3,0,3,0,4,5,6,7,11,8,11,8,12,13,14,15,19,16,19,16,20,21,22,23,27,24,27,24,28,29,30,31]1835; CHECK-NEXT: vmovdqa64 %zmm1, %zmm01836; CHECK-NEXT: retq1837 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 3, i32 0, i32 3, i32 0, i32 4, i32 5, i32 6, i32 7, i32 11, i32 8, i32 11, i32 8, i32 12, i32 13, i32 14, i32 15, i32 19, i32 16, i32 19, i32 16, i32 20, i32 21, i32 22, i32 23, i32 27, i32 24, i32 27, i32 24, i32 28, i32 29, i32 30, i32 31>1838 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1839 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21840 ret <32 x i16> %res1841}1842 1843define <32 x i16> @test_masked_z_32xi16_perm_low_mask7(<32 x i16> %vec, <32 x i16> %mask) {1844; CHECK-LABEL: test_masked_z_32xi16_perm_low_mask7:1845; CHECK: # %bb.0:1846; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11847; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 {%k1} {z} = zmm0[3,0,3,0,4,5,6,7,11,8,11,8,12,13,14,15,19,16,19,16,20,21,22,23,27,24,27,24,28,29,30,31]1848; CHECK-NEXT: retq1849 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 3, i32 0, i32 3, i32 0, i32 4, i32 5, i32 6, i32 7, i32 11, i32 8, i32 11, i32 8, i32 12, i32 13, i32 14, i32 15, i32 19, i32 16, i32 19, i32 16, i32 20, i32 21, i32 22, i32 23, i32 27, i32 24, i32 27, i32 24, i32 28, i32 29, i32 30, i32 31>1850 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1851 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1852 ret <32 x i16> %res1853}1854define <32 x i16> @test_32xi16_perm_high_mem_mask0(ptr %vp) {1855; CHECK-LABEL: test_32xi16_perm_high_mem_mask0:1856; CHECK: # %bb.0:1857; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 = mem[0,1,2,3,7,4,5,6,8,9,10,11,15,12,13,14,16,17,18,19,23,20,21,22,24,25,26,27,31,28,29,30]1858; CHECK-NEXT: retq1859 %vec = load <32 x i16>, ptr %vp1860 %res = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 4, i32 5, i32 6, i32 8, i32 9, i32 10, i32 11, i32 15, i32 12, i32 13, i32 14, i32 16, i32 17, i32 18, i32 19, i32 23, i32 20, i32 21, i32 22, i32 24, i32 25, i32 26, i32 27, i32 31, i32 28, i32 29, i32 30>1861 ret <32 x i16> %res1862}1863define <32 x i16> @test_masked_32xi16_perm_high_mem_mask0(ptr %vp, <32 x i16> %vec2, <32 x i16> %mask) {1864; CHECK-LABEL: test_masked_32xi16_perm_high_mem_mask0:1865; CHECK: # %bb.0:1866; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11867; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,7,4,5,6,8,9,10,11,15,12,13,14,16,17,18,19,23,20,21,22,24,25,26,27,31,28,29,30]1868; CHECK-NEXT: retq1869 %vec = load <32 x i16>, ptr %vp1870 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 4, i32 5, i32 6, i32 8, i32 9, i32 10, i32 11, i32 15, i32 12, i32 13, i32 14, i32 16, i32 17, i32 18, i32 19, i32 23, i32 20, i32 21, i32 22, i32 24, i32 25, i32 26, i32 27, i32 31, i32 28, i32 29, i32 30>1871 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1872 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21873 ret <32 x i16> %res1874}1875 1876define <32 x i16> @test_masked_z_32xi16_perm_high_mem_mask0(ptr %vp, <32 x i16> %mask) {1877; CHECK-LABEL: test_masked_z_32xi16_perm_high_mem_mask0:1878; CHECK: # %bb.0:1879; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k11880; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,7,4,5,6,8,9,10,11,15,12,13,14,16,17,18,19,23,20,21,22,24,25,26,27,31,28,29,30]1881; CHECK-NEXT: retq1882 %vec = load <32 x i16>, ptr %vp1883 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 4, i32 5, i32 6, i32 8, i32 9, i32 10, i32 11, i32 15, i32 12, i32 13, i32 14, i32 16, i32 17, i32 18, i32 19, i32 23, i32 20, i32 21, i32 22, i32 24, i32 25, i32 26, i32 27, i32 31, i32 28, i32 29, i32 30>1884 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1885 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1886 ret <32 x i16> %res1887}1888 1889define <32 x i16> @test_masked_32xi16_perm_low_mem_mask1(ptr %vp, <32 x i16> %vec2, <32 x i16> %mask) {1890; CHECK-LABEL: test_masked_32xi16_perm_low_mem_mask1:1891; CHECK: # %bb.0:1892; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11893; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 {%k1} = mem[1,1,3,3,4,5,6,7,9,9,11,11,12,13,14,15,17,17,19,19,20,21,22,23,25,25,27,27,28,29,30,31]1894; CHECK-NEXT: retq1895 %vec = load <32 x i16>, ptr %vp1896 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 1, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7, i32 9, i32 9, i32 11, i32 11, i32 12, i32 13, i32 14, i32 15, i32 17, i32 17, i32 19, i32 19, i32 20, i32 21, i32 22, i32 23, i32 25, i32 25, i32 27, i32 27, i32 28, i32 29, i32 30, i32 31>1897 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1898 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21899 ret <32 x i16> %res1900}1901 1902define <32 x i16> @test_masked_z_32xi16_perm_low_mem_mask1(ptr %vp, <32 x i16> %mask) {1903; CHECK-LABEL: test_masked_z_32xi16_perm_low_mem_mask1:1904; CHECK: # %bb.0:1905; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k11906; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 {%k1} {z} = mem[1,1,3,3,4,5,6,7,9,9,11,11,12,13,14,15,17,17,19,19,20,21,22,23,25,25,27,27,28,29,30,31]1907; CHECK-NEXT: retq1908 %vec = load <32 x i16>, ptr %vp1909 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 1, i32 1, i32 3, i32 3, i32 4, i32 5, i32 6, i32 7, i32 9, i32 9, i32 11, i32 11, i32 12, i32 13, i32 14, i32 15, i32 17, i32 17, i32 19, i32 19, i32 20, i32 21, i32 22, i32 23, i32 25, i32 25, i32 27, i32 27, i32 28, i32 29, i32 30, i32 31>1910 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1911 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1912 ret <32 x i16> %res1913}1914 1915define <32 x i16> @test_masked_32xi16_perm_high_mem_mask2(ptr %vp, <32 x i16> %vec2, <32 x i16> %mask) {1916; CHECK-LABEL: test_masked_32xi16_perm_high_mem_mask2:1917; CHECK: # %bb.0:1918; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11919; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 {%k1} = mem[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]1920; CHECK-NEXT: retq1921 %vec = load <32 x i16>, ptr %vp1922 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <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>1923 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1924 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21925 ret <32 x i16> %res1926}1927 1928define <32 x i16> @test_masked_z_32xi16_perm_high_mem_mask2(ptr %vp, <32 x i16> %mask) {1929; CHECK-LABEL: test_masked_z_32xi16_perm_high_mem_mask2:1930; CHECK: # %bb.0:1931; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k11932; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 {%k1} {z} = mem[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]1933; CHECK-NEXT: retq1934 %vec = load <32 x i16>, ptr %vp1935 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <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>1936 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1937 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1938 ret <32 x i16> %res1939}1940 1941define <32 x i16> @test_32xi16_perm_low_mem_mask3(ptr %vp) {1942; CHECK-LABEL: test_32xi16_perm_low_mem_mask3:1943; CHECK: # %bb.0:1944; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 = mem[2,2,0,3,4,5,6,7,10,10,8,11,12,13,14,15,18,18,16,19,20,21,22,23,26,26,24,27,28,29,30,31]1945; CHECK-NEXT: retq1946 %vec = load <32 x i16>, ptr %vp1947 %res = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 2, i32 2, i32 0, i32 3, i32 4, i32 5, i32 6, i32 7, i32 10, i32 10, i32 8, i32 11, i32 12, i32 13, i32 14, i32 15, i32 18, i32 18, i32 16, i32 19, i32 20, i32 21, i32 22, i32 23, i32 26, i32 26, i32 24, i32 27, i32 28, i32 29, i32 30, i32 31>1948 ret <32 x i16> %res1949}1950define <32 x i16> @test_masked_32xi16_perm_low_mem_mask3(ptr %vp, <32 x i16> %vec2, <32 x i16> %mask) {1951; CHECK-LABEL: test_masked_32xi16_perm_low_mem_mask3:1952; CHECK: # %bb.0:1953; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11954; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 {%k1} = mem[2,2,0,3,4,5,6,7,10,10,8,11,12,13,14,15,18,18,16,19,20,21,22,23,26,26,24,27,28,29,30,31]1955; CHECK-NEXT: retq1956 %vec = load <32 x i16>, ptr %vp1957 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 2, i32 2, i32 0, i32 3, i32 4, i32 5, i32 6, i32 7, i32 10, i32 10, i32 8, i32 11, i32 12, i32 13, i32 14, i32 15, i32 18, i32 18, i32 16, i32 19, i32 20, i32 21, i32 22, i32 23, i32 26, i32 26, i32 24, i32 27, i32 28, i32 29, i32 30, i32 31>1958 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1959 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21960 ret <32 x i16> %res1961}1962 1963define <32 x i16> @test_masked_z_32xi16_perm_low_mem_mask3(ptr %vp, <32 x i16> %mask) {1964; CHECK-LABEL: test_masked_z_32xi16_perm_low_mem_mask3:1965; CHECK: # %bb.0:1966; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k11967; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 {%k1} {z} = mem[2,2,0,3,4,5,6,7,10,10,8,11,12,13,14,15,18,18,16,19,20,21,22,23,26,26,24,27,28,29,30,31]1968; CHECK-NEXT: retq1969 %vec = load <32 x i16>, ptr %vp1970 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 2, i32 2, i32 0, i32 3, i32 4, i32 5, i32 6, i32 7, i32 10, i32 10, i32 8, i32 11, i32 12, i32 13, i32 14, i32 15, i32 18, i32 18, i32 16, i32 19, i32 20, i32 21, i32 22, i32 23, i32 26, i32 26, i32 24, i32 27, i32 28, i32 29, i32 30, i32 31>1971 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1972 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1973 ret <32 x i16> %res1974}1975 1976define <32 x i16> @test_masked_32xi16_perm_high_mem_mask4(ptr %vp, <32 x i16> %vec2, <32 x i16> %mask) {1977; CHECK-LABEL: test_masked_32xi16_perm_high_mem_mask4:1978; CHECK: # %bb.0:1979; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11980; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,7,4,6,5,8,9,10,11,15,12,14,13,16,17,18,19,23,20,22,21,24,25,26,27,31,28,30,29]1981; CHECK-NEXT: retq1982 %vec = load <32 x i16>, ptr %vp1983 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 4, i32 6, i32 5, i32 8, i32 9, i32 10, i32 11, i32 15, i32 12, i32 14, i32 13, i32 16, i32 17, i32 18, i32 19, i32 23, i32 20, i32 22, i32 21, i32 24, i32 25, i32 26, i32 27, i32 31, i32 28, i32 30, i32 29>1984 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1985 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec21986 ret <32 x i16> %res1987}1988 1989define <32 x i16> @test_masked_z_32xi16_perm_high_mem_mask4(ptr %vp, <32 x i16> %mask) {1990; CHECK-LABEL: test_masked_z_32xi16_perm_high_mem_mask4:1991; CHECK: # %bb.0:1992; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k11993; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,7,4,6,5,8,9,10,11,15,12,14,13,16,17,18,19,23,20,22,21,24,25,26,27,31,28,30,29]1994; CHECK-NEXT: retq1995 %vec = load <32 x i16>, ptr %vp1996 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 7, i32 4, i32 6, i32 5, i32 8, i32 9, i32 10, i32 11, i32 15, i32 12, i32 14, i32 13, i32 16, i32 17, i32 18, i32 19, i32 23, i32 20, i32 22, i32 21, i32 24, i32 25, i32 26, i32 27, i32 31, i32 28, i32 30, i32 29>1997 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1998 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1999 ret <32 x i16> %res2000}2001 2002define <32 x i16> @test_masked_32xi16_perm_low_mem_mask5(ptr %vp, <32 x i16> %vec2, <32 x i16> %mask) {2003; CHECK-LABEL: test_masked_32xi16_perm_low_mem_mask5:2004; CHECK: # %bb.0:2005; CHECK-NEXT: vpshufd {{.*#+}} zmm2 = mem[0,0,2,3,4,4,6,7,8,8,10,11,12,12,14,15]2006; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k12007; CHECK-NEXT: vmovdqu16 %zmm2, %zmm0 {%k1}2008; CHECK-NEXT: retq2009 %vec = load <32 x i16>, ptr %vp2010 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 8, i32 9, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 16, i32 17, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 24, i32 25, i32 28, i32 29, i32 30, i32 31>2011 %cmp = icmp eq <32 x i16> %mask, zeroinitializer2012 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec22013 ret <32 x i16> %res2014}2015 2016define <32 x i16> @test_masked_z_32xi16_perm_low_mem_mask5(ptr %vp, <32 x i16> %mask) {2017; CHECK-LABEL: test_masked_z_32xi16_perm_low_mem_mask5:2018; CHECK: # %bb.0:2019; CHECK-NEXT: vpshufd {{.*#+}} zmm1 = mem[0,0,2,3,4,4,6,7,8,8,10,11,12,12,14,15]2020; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k12021; CHECK-NEXT: vmovdqu16 %zmm1, %zmm0 {%k1} {z}2022; CHECK-NEXT: retq2023 %vec = load <32 x i16>, ptr %vp2024 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 0, i32 1, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 8, i32 9, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 16, i32 17, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 24, i32 25, i32 28, i32 29, i32 30, i32 31>2025 %cmp = icmp eq <32 x i16> %mask, zeroinitializer2026 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer2027 ret <32 x i16> %res2028}2029 2030define <32 x i16> @test_32xi16_perm_high_mem_mask6(ptr %vp) {2031; CHECK-LABEL: test_32xi16_perm_high_mem_mask6:2032; CHECK: # %bb.0:2033; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 = mem[0,1,2,3,6,5,6,6,8,9,10,11,14,13,14,14,16,17,18,19,22,21,22,22,24,25,26,27,30,29,30,30]2034; CHECK-NEXT: retq2035 %vec = load <32 x i16>, ptr %vp2036 %res = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 5, i32 6, i32 6, i32 8, i32 9, i32 10, i32 11, i32 14, i32 13, i32 14, i32 14, i32 16, i32 17, i32 18, i32 19, i32 22, i32 21, i32 22, i32 22, i32 24, i32 25, i32 26, i32 27, i32 30, i32 29, i32 30, i32 30>2037 ret <32 x i16> %res2038}2039define <32 x i16> @test_masked_32xi16_perm_high_mem_mask6(ptr %vp, <32 x i16> %vec2, <32 x i16> %mask) {2040; CHECK-LABEL: test_masked_32xi16_perm_high_mem_mask6:2041; CHECK: # %bb.0:2042; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k12043; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,6,5,6,6,8,9,10,11,14,13,14,14,16,17,18,19,22,21,22,22,24,25,26,27,30,29,30,30]2044; CHECK-NEXT: retq2045 %vec = load <32 x i16>, ptr %vp2046 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 5, i32 6, i32 6, i32 8, i32 9, i32 10, i32 11, i32 14, i32 13, i32 14, i32 14, i32 16, i32 17, i32 18, i32 19, i32 22, i32 21, i32 22, i32 22, i32 24, i32 25, i32 26, i32 27, i32 30, i32 29, i32 30, i32 30>2047 %cmp = icmp eq <32 x i16> %mask, zeroinitializer2048 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec22049 ret <32 x i16> %res2050}2051 2052define <32 x i16> @test_masked_z_32xi16_perm_high_mem_mask6(ptr %vp, <32 x i16> %mask) {2053; CHECK-LABEL: test_masked_z_32xi16_perm_high_mem_mask6:2054; CHECK: # %bb.0:2055; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k12056; CHECK-NEXT: vpshufhw {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,6,5,6,6,8,9,10,11,14,13,14,14,16,17,18,19,22,21,22,22,24,25,26,27,30,29,30,30]2057; CHECK-NEXT: retq2058 %vec = load <32 x i16>, ptr %vp2059 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 6, i32 5, i32 6, i32 6, i32 8, i32 9, i32 10, i32 11, i32 14, i32 13, i32 14, i32 14, i32 16, i32 17, i32 18, i32 19, i32 22, i32 21, i32 22, i32 22, i32 24, i32 25, i32 26, i32 27, i32 30, i32 29, i32 30, i32 30>2060 %cmp = icmp eq <32 x i16> %mask, zeroinitializer2061 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer2062 ret <32 x i16> %res2063}2064 2065define <32 x i16> @test_masked_32xi16_perm_low_mem_mask7(ptr %vp, <32 x i16> %vec2, <32 x i16> %mask) {2066; CHECK-LABEL: test_masked_32xi16_perm_low_mem_mask7:2067; CHECK: # %bb.0:2068; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k12069; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 {%k1} = mem[3,1,3,0,4,5,6,7,11,9,11,8,12,13,14,15,19,17,19,16,20,21,22,23,27,25,27,24,28,29,30,31]2070; CHECK-NEXT: retq2071 %vec = load <32 x i16>, ptr %vp2072 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 3, i32 1, i32 3, i32 0, i32 4, i32 5, i32 6, i32 7, i32 11, i32 9, i32 11, i32 8, i32 12, i32 13, i32 14, i32 15, i32 19, i32 17, i32 19, i32 16, i32 20, i32 21, i32 22, i32 23, i32 27, i32 25, i32 27, i32 24, i32 28, i32 29, i32 30, i32 31>2073 %cmp = icmp eq <32 x i16> %mask, zeroinitializer2074 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %vec22075 ret <32 x i16> %res2076}2077 2078define <32 x i16> @test_masked_z_32xi16_perm_low_mem_mask7(ptr %vp, <32 x i16> %mask) {2079; CHECK-LABEL: test_masked_z_32xi16_perm_low_mem_mask7:2080; CHECK: # %bb.0:2081; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k12082; CHECK-NEXT: vpshuflw {{.*#+}} zmm0 {%k1} {z} = mem[3,1,3,0,4,5,6,7,11,9,11,8,12,13,14,15,19,17,19,16,20,21,22,23,27,25,27,24,28,29,30,31]2083; CHECK-NEXT: retq2084 %vec = load <32 x i16>, ptr %vp2085 %shuf = shufflevector <32 x i16> %vec, <32 x i16> undef, <32 x i32> <i32 3, i32 1, i32 3, i32 0, i32 4, i32 5, i32 6, i32 7, i32 11, i32 9, i32 11, i32 8, i32 12, i32 13, i32 14, i32 15, i32 19, i32 17, i32 19, i32 16, i32 20, i32 21, i32 22, i32 23, i32 27, i32 25, i32 27, i32 24, i32 28, i32 29, i32 30, i32 31>2086 %cmp = icmp eq <32 x i16> %mask, zeroinitializer2087 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer2088 ret <32 x i16> %res2089}2090 2091define <4 x i32> @test_4xi32_perm_mask0(<4 x i32> %vec) {2092; CHECK-LABEL: test_4xi32_perm_mask0:2093; CHECK: # %bb.0:2094; CHECK-NEXT: vshufps {{.*#+}} xmm0 = xmm0[2,3,3,0]2095; CHECK-NEXT: retq2096 %res = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 3, i32 0>2097 ret <4 x i32> %res2098}2099define <4 x i32> @test_masked_4xi32_perm_mask0(<4 x i32> %vec, <4 x i32> %vec2, <4 x i32> %mask) {2100; CHECK-LABEL: test_masked_4xi32_perm_mask0:2101; CHECK: # %bb.0:2102; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k12103; CHECK-NEXT: vpshufd {{.*#+}} xmm1 {%k1} = xmm0[2,3,3,0]2104; CHECK-NEXT: vmovdqa %xmm1, %xmm02105; CHECK-NEXT: retq2106 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 3, i32 0>2107 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2108 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %vec22109 ret <4 x i32> %res2110}2111 2112define <4 x i32> @test_masked_z_4xi32_perm_mask0(<4 x i32> %vec, <4 x i32> %mask) {2113; CHECK-LABEL: test_masked_z_4xi32_perm_mask0:2114; CHECK: # %bb.0:2115; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12116; CHECK-NEXT: vpshufd {{.*#+}} xmm0 {%k1} {z} = xmm0[2,3,3,0]2117; CHECK-NEXT: retq2118 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 2, i32 3, i32 3, i32 0>2119 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2120 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer2121 ret <4 x i32> %res2122}2123define <4 x i32> @test_masked_4xi32_perm_mask1(<4 x i32> %vec, <4 x i32> %vec2, <4 x i32> %mask) {2124; CHECK-LABEL: test_masked_4xi32_perm_mask1:2125; CHECK: # %bb.0:2126; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k12127; CHECK-NEXT: vpshufd {{.*#+}} xmm1 {%k1} = xmm0[1,0,2,0]2128; CHECK-NEXT: vmovdqa %xmm1, %xmm02129; CHECK-NEXT: retq2130 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 1, i32 0, i32 2, i32 0>2131 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2132 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %vec22133 ret <4 x i32> %res2134}2135 2136define <4 x i32> @test_masked_z_4xi32_perm_mask1(<4 x i32> %vec, <4 x i32> %mask) {2137; CHECK-LABEL: test_masked_z_4xi32_perm_mask1:2138; CHECK: # %bb.0:2139; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12140; CHECK-NEXT: vpshufd {{.*#+}} xmm0 {%k1} {z} = xmm0[1,0,2,0]2141; CHECK-NEXT: retq2142 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 1, i32 0, i32 2, i32 0>2143 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2144 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer2145 ret <4 x i32> %res2146}2147define <4 x i32> @test_masked_4xi32_perm_mask2(<4 x i32> %vec, <4 x i32> %vec2, <4 x i32> %mask) {2148; CHECK-LABEL: test_masked_4xi32_perm_mask2:2149; CHECK: # %bb.0:2150; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k12151; CHECK-NEXT: vpshufd {{.*#+}} xmm1 {%k1} = xmm0[3,0,1,0]2152; CHECK-NEXT: vmovdqa %xmm1, %xmm02153; CHECK-NEXT: retq2154 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 0>2155 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2156 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %vec22157 ret <4 x i32> %res2158}2159 2160define <4 x i32> @test_masked_z_4xi32_perm_mask2(<4 x i32> %vec, <4 x i32> %mask) {2161; CHECK-LABEL: test_masked_z_4xi32_perm_mask2:2162; CHECK: # %bb.0:2163; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12164; CHECK-NEXT: vpshufd {{.*#+}} xmm0 {%k1} {z} = xmm0[3,0,1,0]2165; CHECK-NEXT: retq2166 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 3, i32 0, i32 1, i32 0>2167 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2168 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer2169 ret <4 x i32> %res2170}2171define <4 x i32> @test_4xi32_perm_mask3(<4 x i32> %vec) {2172; CHECK-LABEL: test_4xi32_perm_mask3:2173; CHECK: # %bb.0:2174; CHECK-NEXT: vshufps {{.*#+}} xmm0 = xmm0[1,1,0,3]2175; CHECK-NEXT: retq2176 %res = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 1, i32 1, i32 0, i32 3>2177 ret <4 x i32> %res2178}2179define <4 x i32> @test_masked_4xi32_perm_mask3(<4 x i32> %vec, <4 x i32> %vec2, <4 x i32> %mask) {2180; CHECK-LABEL: test_masked_4xi32_perm_mask3:2181; CHECK: # %bb.0:2182; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k12183; CHECK-NEXT: vpshufd {{.*#+}} xmm1 {%k1} = xmm0[1,1,0,3]2184; CHECK-NEXT: vmovdqa %xmm1, %xmm02185; CHECK-NEXT: retq2186 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 1, i32 1, i32 0, i32 3>2187 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2188 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %vec22189 ret <4 x i32> %res2190}2191 2192define <4 x i32> @test_masked_z_4xi32_perm_mask3(<4 x i32> %vec, <4 x i32> %mask) {2193; CHECK-LABEL: test_masked_z_4xi32_perm_mask3:2194; CHECK: # %bb.0:2195; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12196; CHECK-NEXT: vpshufd {{.*#+}} xmm0 {%k1} {z} = xmm0[1,1,0,3]2197; CHECK-NEXT: retq2198 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 1, i32 1, i32 0, i32 3>2199 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2200 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer2201 ret <4 x i32> %res2202}2203define <4 x i32> @test_4xi32_perm_mem_mask0(ptr %vp) {2204; CHECK-LABEL: test_4xi32_perm_mem_mask0:2205; CHECK: # %bb.0:2206; CHECK-NEXT: vpermilps {{.*#+}} xmm0 = mem[0,1,3,3]2207; CHECK-NEXT: retq2208 %vec = load <4 x i32>, ptr %vp2209 %res = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 3, i32 3>2210 ret <4 x i32> %res2211}2212define <4 x i32> @test_masked_4xi32_perm_mem_mask0(ptr %vp, <4 x i32> %vec2, <4 x i32> %mask) {2213; CHECK-LABEL: test_masked_4xi32_perm_mem_mask0:2214; CHECK: # %bb.0:2215; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12216; CHECK-NEXT: vpshufd {{.*#+}} xmm0 {%k1} = mem[0,1,3,3]2217; CHECK-NEXT: retq2218 %vec = load <4 x i32>, ptr %vp2219 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 3, i32 3>2220 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2221 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %vec22222 ret <4 x i32> %res2223}2224 2225define <4 x i32> @test_masked_z_4xi32_perm_mem_mask0(ptr %vp, <4 x i32> %mask) {2226; CHECK-LABEL: test_masked_z_4xi32_perm_mem_mask0:2227; CHECK: # %bb.0:2228; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k12229; CHECK-NEXT: vpshufd {{.*#+}} xmm0 {%k1} {z} = mem[0,1,3,3]2230; CHECK-NEXT: retq2231 %vec = load <4 x i32>, ptr %vp2232 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 3, i32 3>2233 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2234 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer2235 ret <4 x i32> %res2236}2237 2238define <4 x i32> @test_masked_4xi32_perm_mem_mask1(ptr %vp, <4 x i32> %vec2, <4 x i32> %mask) {2239; CHECK-LABEL: test_masked_4xi32_perm_mem_mask1:2240; CHECK: # %bb.0:2241; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12242; CHECK-NEXT: vpshufd {{.*#+}} xmm0 {%k1} = mem[2,2,3,1]2243; CHECK-NEXT: retq2244 %vec = load <4 x i32>, ptr %vp2245 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 2, i32 2, i32 3, i32 1>2246 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2247 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %vec22248 ret <4 x i32> %res2249}2250 2251define <4 x i32> @test_masked_z_4xi32_perm_mem_mask1(ptr %vp, <4 x i32> %mask) {2252; CHECK-LABEL: test_masked_z_4xi32_perm_mem_mask1:2253; CHECK: # %bb.0:2254; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k12255; CHECK-NEXT: vpshufd {{.*#+}} xmm0 {%k1} {z} = mem[2,2,3,1]2256; CHECK-NEXT: retq2257 %vec = load <4 x i32>, ptr %vp2258 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 2, i32 2, i32 3, i32 1>2259 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2260 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer2261 ret <4 x i32> %res2262}2263 2264define <4 x i32> @test_masked_4xi32_perm_mem_mask2(ptr %vp, <4 x i32> %vec2, <4 x i32> %mask) {2265; CHECK-LABEL: test_masked_4xi32_perm_mem_mask2:2266; CHECK: # %bb.0:2267; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12268; CHECK-NEXT: vpshufd {{.*#+}} xmm0 {%k1} = mem[0,3,0,1]2269; CHECK-NEXT: retq2270 %vec = load <4 x i32>, ptr %vp2271 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 3, i32 0, i32 1>2272 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2273 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %vec22274 ret <4 x i32> %res2275}2276 2277define <4 x i32> @test_masked_z_4xi32_perm_mem_mask2(ptr %vp, <4 x i32> %mask) {2278; CHECK-LABEL: test_masked_z_4xi32_perm_mem_mask2:2279; CHECK: # %bb.0:2280; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k12281; CHECK-NEXT: vpshufd {{.*#+}} xmm0 {%k1} {z} = mem[0,3,0,1]2282; CHECK-NEXT: retq2283 %vec = load <4 x i32>, ptr %vp2284 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 3, i32 0, i32 1>2285 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2286 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer2287 ret <4 x i32> %res2288}2289 2290define <4 x i32> @test_4xi32_perm_mem_mask3(ptr %vp) {2291; CHECK-LABEL: test_4xi32_perm_mem_mask3:2292; CHECK: # %bb.0:2293; CHECK-NEXT: vpermilps {{.*#+}} xmm0 = mem[1,0,1,0]2294; CHECK-NEXT: retq2295 %vec = load <4 x i32>, ptr %vp2296 %res = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 1, i32 0, i32 1, i32 0>2297 ret <4 x i32> %res2298}2299define <4 x i32> @test_masked_4xi32_perm_mem_mask3(ptr %vp, <4 x i32> %vec2, <4 x i32> %mask) {2300; CHECK-LABEL: test_masked_4xi32_perm_mem_mask3:2301; CHECK: # %bb.0:2302; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12303; CHECK-NEXT: vpshufd {{.*#+}} xmm0 {%k1} = mem[1,0,1,0]2304; CHECK-NEXT: retq2305 %vec = load <4 x i32>, ptr %vp2306 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 1, i32 0, i32 1, i32 0>2307 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2308 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %vec22309 ret <4 x i32> %res2310}2311 2312define <4 x i32> @test_masked_z_4xi32_perm_mem_mask3(ptr %vp, <4 x i32> %mask) {2313; CHECK-LABEL: test_masked_z_4xi32_perm_mem_mask3:2314; CHECK: # %bb.0:2315; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k12316; CHECK-NEXT: vpshufd {{.*#+}} xmm0 {%k1} {z} = mem[1,0,1,0]2317; CHECK-NEXT: retq2318 %vec = load <4 x i32>, ptr %vp2319 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 1, i32 0, i32 1, i32 0>2320 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2321 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer2322 ret <4 x i32> %res2323}2324 2325define <8 x i32> @test_8xi32_perm_mask0(<8 x i32> %vec) {2326; CHECK-LABEL: test_8xi32_perm_mask0:2327; CHECK: # %bb.0:2328; CHECK-NEXT: vshufps {{.*#+}} ymm0 = ymm0[2,3,1,0,6,7,5,4]2329; CHECK-NEXT: retq2330 %res = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 2, i32 3, i32 1, i32 0, i32 6, i32 7, i32 5, i32 4>2331 ret <8 x i32> %res2332}2333define <8 x i32> @test_masked_8xi32_perm_mask0(<8 x i32> %vec, <8 x i32> %vec2, <8 x i32> %mask) {2334; CHECK-LABEL: test_masked_8xi32_perm_mask0:2335; CHECK: # %bb.0:2336; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k12337; CHECK-NEXT: vpshufd {{.*#+}} ymm1 {%k1} = ymm0[2,3,1,0,6,7,5,4]2338; CHECK-NEXT: vmovdqa %ymm1, %ymm02339; CHECK-NEXT: retq2340 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 2, i32 3, i32 1, i32 0, i32 6, i32 7, i32 5, i32 4>2341 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2342 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %vec22343 ret <8 x i32> %res2344}2345 2346define <8 x i32> @test_masked_z_8xi32_perm_mask0(<8 x i32> %vec, <8 x i32> %mask) {2347; CHECK-LABEL: test_masked_z_8xi32_perm_mask0:2348; CHECK: # %bb.0:2349; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12350; CHECK-NEXT: vpshufd {{.*#+}} ymm0 {%k1} {z} = ymm0[2,3,1,0,6,7,5,4]2351; CHECK-NEXT: retq2352 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 2, i32 3, i32 1, i32 0, i32 6, i32 7, i32 5, i32 4>2353 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2354 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer2355 ret <8 x i32> %res2356}2357define <8 x i32> @test_masked_8xi32_perm_mask1(<8 x i32> %vec, <8 x i32> %vec2, <8 x i32> %mask) {2358; CHECK-LABEL: test_masked_8xi32_perm_mask1:2359; CHECK: # %bb.0:2360; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k12361; CHECK-NEXT: vpshufd {{.*#+}} ymm1 {%k1} = ymm0[0,3,3,3,4,7,7,7]2362; CHECK-NEXT: vmovdqa %ymm1, %ymm02363; CHECK-NEXT: retq2364 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 3, i32 3, i32 3, i32 4, i32 7, i32 7, i32 7>2365 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2366 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %vec22367 ret <8 x i32> %res2368}2369 2370define <8 x i32> @test_masked_z_8xi32_perm_mask1(<8 x i32> %vec, <8 x i32> %mask) {2371; CHECK-LABEL: test_masked_z_8xi32_perm_mask1:2372; CHECK: # %bb.0:2373; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12374; CHECK-NEXT: vpshufd {{.*#+}} ymm0 {%k1} {z} = ymm0[0,3,3,3,4,7,7,7]2375; CHECK-NEXT: retq2376 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 3, i32 3, i32 3, i32 4, i32 7, i32 7, i32 7>2377 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2378 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer2379 ret <8 x i32> %res2380}2381define <8 x i32> @test_masked_8xi32_perm_mask2(<8 x i32> %vec, <8 x i32> %vec2, <8 x i32> %mask) {2382; CHECK-LABEL: test_masked_8xi32_perm_mask2:2383; CHECK: # %bb.0:2384; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k12385; CHECK-NEXT: vpshufd {{.*#+}} ymm1 {%k1} = ymm0[1,2,0,3,5,6,4,7]2386; CHECK-NEXT: vmovdqa %ymm1, %ymm02387; CHECK-NEXT: retq2388 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 1, i32 2, i32 0, i32 3, i32 5, i32 6, i32 4, i32 7>2389 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2390 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %vec22391 ret <8 x i32> %res2392}2393 2394define <8 x i32> @test_masked_z_8xi32_perm_mask2(<8 x i32> %vec, <8 x i32> %mask) {2395; CHECK-LABEL: test_masked_z_8xi32_perm_mask2:2396; CHECK: # %bb.0:2397; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12398; CHECK-NEXT: vpshufd {{.*#+}} ymm0 {%k1} {z} = ymm0[1,2,0,3,5,6,4,7]2399; CHECK-NEXT: retq2400 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 1, i32 2, i32 0, i32 3, i32 5, i32 6, i32 4, i32 7>2401 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2402 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer2403 ret <8 x i32> %res2404}2405define <8 x i32> @test_8xi32_perm_mask3(<8 x i32> %vec) {2406; CHECK-LABEL: test_8xi32_perm_mask3:2407; CHECK: # %bb.0:2408; CHECK-NEXT: vshufps {{.*#+}} ymm0 = ymm0[1,3,1,0,5,7,5,4]2409; CHECK-NEXT: retq2410 %res = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 1, i32 3, i32 1, i32 0, i32 5, i32 7, i32 5, i32 4>2411 ret <8 x i32> %res2412}2413define <8 x i32> @test_masked_8xi32_perm_mask3(<8 x i32> %vec, <8 x i32> %vec2, <8 x i32> %mask) {2414; CHECK-LABEL: test_masked_8xi32_perm_mask3:2415; CHECK: # %bb.0:2416; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k12417; CHECK-NEXT: vpshufd {{.*#+}} ymm1 {%k1} = ymm0[1,3,1,0,5,7,5,4]2418; CHECK-NEXT: vmovdqa %ymm1, %ymm02419; CHECK-NEXT: retq2420 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 1, i32 3, i32 1, i32 0, i32 5, i32 7, i32 5, i32 4>2421 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2422 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %vec22423 ret <8 x i32> %res2424}2425 2426define <8 x i32> @test_masked_z_8xi32_perm_mask3(<8 x i32> %vec, <8 x i32> %mask) {2427; CHECK-LABEL: test_masked_z_8xi32_perm_mask3:2428; CHECK: # %bb.0:2429; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12430; CHECK-NEXT: vpshufd {{.*#+}} ymm0 {%k1} {z} = ymm0[1,3,1,0,5,7,5,4]2431; CHECK-NEXT: retq2432 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 1, i32 3, i32 1, i32 0, i32 5, i32 7, i32 5, i32 4>2433 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2434 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer2435 ret <8 x i32> %res2436}2437define <8 x i32> @test_8xi32_perm_mem_mask0(ptr %vp) {2438; CHECK-LABEL: test_8xi32_perm_mem_mask0:2439; CHECK: # %bb.0:2440; CHECK-NEXT: vpermilps {{.*#+}} ymm0 = mem[1,0,2,0,5,4,6,4]2441; CHECK-NEXT: retq2442 %vec = load <8 x i32>, ptr %vp2443 %res = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 1, i32 0, i32 2, i32 0, i32 5, i32 4, i32 6, i32 4>2444 ret <8 x i32> %res2445}2446define <8 x i32> @test_masked_8xi32_perm_mem_mask0(ptr %vp, <8 x i32> %vec2, <8 x i32> %mask) {2447; CHECK-LABEL: test_masked_8xi32_perm_mem_mask0:2448; CHECK: # %bb.0:2449; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12450; CHECK-NEXT: vpshufd {{.*#+}} ymm0 {%k1} = mem[1,0,2,0,5,4,6,4]2451; CHECK-NEXT: retq2452 %vec = load <8 x i32>, ptr %vp2453 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 1, i32 0, i32 2, i32 0, i32 5, i32 4, i32 6, i32 4>2454 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2455 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %vec22456 ret <8 x i32> %res2457}2458 2459define <8 x i32> @test_masked_z_8xi32_perm_mem_mask0(ptr %vp, <8 x i32> %mask) {2460; CHECK-LABEL: test_masked_z_8xi32_perm_mem_mask0:2461; CHECK: # %bb.0:2462; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k12463; CHECK-NEXT: vpshufd {{.*#+}} ymm0 {%k1} {z} = mem[1,0,2,0,5,4,6,4]2464; CHECK-NEXT: retq2465 %vec = load <8 x i32>, ptr %vp2466 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 1, i32 0, i32 2, i32 0, i32 5, i32 4, i32 6, i32 4>2467 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2468 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer2469 ret <8 x i32> %res2470}2471 2472define <8 x i32> @test_masked_8xi32_perm_mem_mask1(ptr %vp, <8 x i32> %vec2, <8 x i32> %mask) {2473; CHECK-LABEL: test_masked_8xi32_perm_mem_mask1:2474; CHECK: # %bb.0:2475; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12476; CHECK-NEXT: vpshufd {{.*#+}} ymm0 {%k1} = mem[0,3,2,0,4,7,6,4]2477; CHECK-NEXT: retq2478 %vec = load <8 x i32>, ptr %vp2479 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 3, i32 2, i32 0, i32 4, i32 7, i32 6, i32 4>2480 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2481 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %vec22482 ret <8 x i32> %res2483}2484 2485define <8 x i32> @test_masked_z_8xi32_perm_mem_mask1(ptr %vp, <8 x i32> %mask) {2486; CHECK-LABEL: test_masked_z_8xi32_perm_mem_mask1:2487; CHECK: # %bb.0:2488; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k12489; CHECK-NEXT: vpshufd {{.*#+}} ymm0 {%k1} {z} = mem[0,3,2,0,4,7,6,4]2490; CHECK-NEXT: retq2491 %vec = load <8 x i32>, ptr %vp2492 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 3, i32 2, i32 0, i32 4, i32 7, i32 6, i32 4>2493 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2494 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer2495 ret <8 x i32> %res2496}2497 2498define <8 x i32> @test_masked_8xi32_perm_mem_mask2(ptr %vp, <8 x i32> %vec2, <8 x i32> %mask) {2499; CHECK-LABEL: test_masked_8xi32_perm_mem_mask2:2500; CHECK: # %bb.0:2501; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12502; CHECK-NEXT: vpshufd {{.*#+}} ymm0 {%k1} = mem[3,2,3,1,7,6,7,5]2503; CHECK-NEXT: retq2504 %vec = load <8 x i32>, ptr %vp2505 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 3, i32 2, i32 3, i32 1, i32 7, i32 6, i32 7, i32 5>2506 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2507 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %vec22508 ret <8 x i32> %res2509}2510 2511define <8 x i32> @test_masked_z_8xi32_perm_mem_mask2(ptr %vp, <8 x i32> %mask) {2512; CHECK-LABEL: test_masked_z_8xi32_perm_mem_mask2:2513; CHECK: # %bb.0:2514; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k12515; CHECK-NEXT: vpshufd {{.*#+}} ymm0 {%k1} {z} = mem[3,2,3,1,7,6,7,5]2516; CHECK-NEXT: retq2517 %vec = load <8 x i32>, ptr %vp2518 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 3, i32 2, i32 3, i32 1, i32 7, i32 6, i32 7, i32 5>2519 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2520 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer2521 ret <8 x i32> %res2522}2523 2524define <8 x i32> @test_8xi32_perm_mem_mask3(ptr %vp) {2525; CHECK-LABEL: test_8xi32_perm_mem_mask3:2526; CHECK: # %bb.0:2527; CHECK-NEXT: vpermilps {{.*#+}} ymm0 = mem[3,2,0,0,7,6,4,4]2528; CHECK-NEXT: retq2529 %vec = load <8 x i32>, ptr %vp2530 %res = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 3, i32 2, i32 0, i32 0, i32 7, i32 6, i32 4, i32 4>2531 ret <8 x i32> %res2532}2533define <8 x i32> @test_masked_8xi32_perm_mem_mask3(ptr %vp, <8 x i32> %vec2, <8 x i32> %mask) {2534; CHECK-LABEL: test_masked_8xi32_perm_mem_mask3:2535; CHECK: # %bb.0:2536; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12537; CHECK-NEXT: vpshufd {{.*#+}} ymm0 {%k1} = mem[3,2,0,0,7,6,4,4]2538; CHECK-NEXT: retq2539 %vec = load <8 x i32>, ptr %vp2540 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 3, i32 2, i32 0, i32 0, i32 7, i32 6, i32 4, i32 4>2541 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2542 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %vec22543 ret <8 x i32> %res2544}2545 2546define <8 x i32> @test_masked_z_8xi32_perm_mem_mask3(ptr %vp, <8 x i32> %mask) {2547; CHECK-LABEL: test_masked_z_8xi32_perm_mem_mask3:2548; CHECK: # %bb.0:2549; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k12550; CHECK-NEXT: vpshufd {{.*#+}} ymm0 {%k1} {z} = mem[3,2,0,0,7,6,4,4]2551; CHECK-NEXT: retq2552 %vec = load <8 x i32>, ptr %vp2553 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 3, i32 2, i32 0, i32 0, i32 7, i32 6, i32 4, i32 4>2554 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2555 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer2556 ret <8 x i32> %res2557}2558 2559define <16 x i32> @test_16xi32_perm_mask0(<16 x i32> %vec) {2560; CHECK-LABEL: test_16xi32_perm_mask0:2561; CHECK: # %bb.0:2562; CHECK-NEXT: vshufps {{.*#+}} zmm0 = zmm0[3,1,3,0,7,5,7,4,11,9,11,8,15,13,15,12]2563; CHECK-NEXT: retq2564 %res = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 3, i32 1, i32 3, i32 0, i32 7, i32 5, i32 7, i32 4, i32 11, i32 9, i32 11, i32 8, i32 15, i32 13, i32 15, i32 12>2565 ret <16 x i32> %res2566}2567define <16 x i32> @test_masked_16xi32_perm_mask0(<16 x i32> %vec, <16 x i32> %vec2, <16 x i32> %mask) {2568; CHECK-LABEL: test_masked_16xi32_perm_mask0:2569; CHECK: # %bb.0:2570; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k12571; CHECK-NEXT: vpshufd {{.*#+}} zmm1 {%k1} = zmm0[3,1,3,0,7,5,7,4,11,9,11,8,15,13,15,12]2572; CHECK-NEXT: vmovdqa64 %zmm1, %zmm02573; CHECK-NEXT: retq2574 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 3, i32 1, i32 3, i32 0, i32 7, i32 5, i32 7, i32 4, i32 11, i32 9, i32 11, i32 8, i32 15, i32 13, i32 15, i32 12>2575 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2576 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %vec22577 ret <16 x i32> %res2578}2579 2580define <16 x i32> @test_masked_z_16xi32_perm_mask0(<16 x i32> %vec, <16 x i32> %mask) {2581; CHECK-LABEL: test_masked_z_16xi32_perm_mask0:2582; CHECK: # %bb.0:2583; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12584; CHECK-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[3,1,3,0,7,5,7,4,11,9,11,8,15,13,15,12]2585; CHECK-NEXT: retq2586 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 3, i32 1, i32 3, i32 0, i32 7, i32 5, i32 7, i32 4, i32 11, i32 9, i32 11, i32 8, i32 15, i32 13, i32 15, i32 12>2587 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2588 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer2589 ret <16 x i32> %res2590}2591define <16 x i32> @test_masked_16xi32_perm_mask1(<16 x i32> %vec, <16 x i32> %vec2, <16 x i32> %mask) {2592; CHECK-LABEL: test_masked_16xi32_perm_mask1:2593; CHECK: # %bb.0:2594; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k12595; CHECK-NEXT: vpshufd {{.*#+}} zmm1 {%k1} = zmm0[2,0,3,0,6,4,7,4,10,8,11,8,14,12,15,12]2596; CHECK-NEXT: vmovdqa64 %zmm1, %zmm02597; CHECK-NEXT: retq2598 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 2, i32 0, i32 3, i32 0, i32 6, i32 4, i32 7, i32 4, i32 10, i32 8, i32 11, i32 8, i32 14, i32 12, i32 15, i32 12>2599 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2600 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %vec22601 ret <16 x i32> %res2602}2603 2604define <16 x i32> @test_masked_z_16xi32_perm_mask1(<16 x i32> %vec, <16 x i32> %mask) {2605; CHECK-LABEL: test_masked_z_16xi32_perm_mask1:2606; CHECK: # %bb.0:2607; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12608; CHECK-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[2,0,3,0,6,4,7,4,10,8,11,8,14,12,15,12]2609; CHECK-NEXT: retq2610 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 2, i32 0, i32 3, i32 0, i32 6, i32 4, i32 7, i32 4, i32 10, i32 8, i32 11, i32 8, i32 14, i32 12, i32 15, i32 12>2611 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2612 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer2613 ret <16 x i32> %res2614}2615define <16 x i32> @test_masked_16xi32_perm_mask2(<16 x i32> %vec, <16 x i32> %vec2, <16 x i32> %mask) {2616; CHECK-LABEL: test_masked_16xi32_perm_mask2:2617; CHECK: # %bb.0:2618; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k12619; CHECK-NEXT: vpshufd {{.*#+}} zmm1 {%k1} = zmm0[1,3,3,0,5,7,7,4,9,11,11,8,13,15,15,12]2620; CHECK-NEXT: vmovdqa64 %zmm1, %zmm02621; CHECK-NEXT: retq2622 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 1, i32 3, i32 3, i32 0, i32 5, i32 7, i32 7, i32 4, i32 9, i32 11, i32 11, i32 8, i32 13, i32 15, i32 15, i32 12>2623 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2624 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %vec22625 ret <16 x i32> %res2626}2627 2628define <16 x i32> @test_masked_z_16xi32_perm_mask2(<16 x i32> %vec, <16 x i32> %mask) {2629; CHECK-LABEL: test_masked_z_16xi32_perm_mask2:2630; CHECK: # %bb.0:2631; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12632; CHECK-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[1,3,3,0,5,7,7,4,9,11,11,8,13,15,15,12]2633; CHECK-NEXT: retq2634 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 1, i32 3, i32 3, i32 0, i32 5, i32 7, i32 7, i32 4, i32 9, i32 11, i32 11, i32 8, i32 13, i32 15, i32 15, i32 12>2635 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2636 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer2637 ret <16 x i32> %res2638}2639define <16 x i32> @test_16xi32_perm_mask3(<16 x i32> %vec) {2640; CHECK-LABEL: test_16xi32_perm_mask3:2641; CHECK: # %bb.0:2642; CHECK-NEXT: vshufps {{.*#+}} zmm0 = zmm0[3,2,0,3,7,6,4,7,11,10,8,11,15,14,12,15]2643; CHECK-NEXT: retq2644 %res = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 3, i32 2, i32 0, i32 3, i32 7, i32 6, i32 4, i32 7, i32 11, i32 10, i32 8, i32 11, i32 15, i32 14, i32 12, i32 15>2645 ret <16 x i32> %res2646}2647define <16 x i32> @test_masked_16xi32_perm_mask3(<16 x i32> %vec, <16 x i32> %vec2, <16 x i32> %mask) {2648; CHECK-LABEL: test_masked_16xi32_perm_mask3:2649; CHECK: # %bb.0:2650; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k12651; CHECK-NEXT: vpshufd {{.*#+}} zmm1 {%k1} = zmm0[3,2,0,3,7,6,4,7,11,10,8,11,15,14,12,15]2652; CHECK-NEXT: vmovdqa64 %zmm1, %zmm02653; CHECK-NEXT: retq2654 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 3, i32 2, i32 0, i32 3, i32 7, i32 6, i32 4, i32 7, i32 11, i32 10, i32 8, i32 11, i32 15, i32 14, i32 12, i32 15>2655 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2656 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %vec22657 ret <16 x i32> %res2658}2659 2660define <16 x i32> @test_masked_z_16xi32_perm_mask3(<16 x i32> %vec, <16 x i32> %mask) {2661; CHECK-LABEL: test_masked_z_16xi32_perm_mask3:2662; CHECK: # %bb.0:2663; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12664; CHECK-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = zmm0[3,2,0,3,7,6,4,7,11,10,8,11,15,14,12,15]2665; CHECK-NEXT: retq2666 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 3, i32 2, i32 0, i32 3, i32 7, i32 6, i32 4, i32 7, i32 11, i32 10, i32 8, i32 11, i32 15, i32 14, i32 12, i32 15>2667 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2668 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer2669 ret <16 x i32> %res2670}2671define <16 x i32> @test_16xi32_perm_mem_mask0(ptr %vp) {2672; CHECK-LABEL: test_16xi32_perm_mem_mask0:2673; CHECK: # %bb.0:2674; CHECK-NEXT: vpermilps {{.*#+}} zmm0 = mem[1,0,1,3,5,4,5,7,9,8,9,11,13,12,13,15]2675; CHECK-NEXT: retq2676 %vec = load <16 x i32>, ptr %vp2677 %res = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 1, i32 0, i32 1, i32 3, i32 5, i32 4, i32 5, i32 7, i32 9, i32 8, i32 9, i32 11, i32 13, i32 12, i32 13, i32 15>2678 ret <16 x i32> %res2679}2680define <16 x i32> @test_masked_16xi32_perm_mem_mask0(ptr %vp, <16 x i32> %vec2, <16 x i32> %mask) {2681; CHECK-LABEL: test_masked_16xi32_perm_mem_mask0:2682; CHECK: # %bb.0:2683; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12684; CHECK-NEXT: vpshufd {{.*#+}} zmm0 {%k1} = mem[1,0,1,3,5,4,5,7,9,8,9,11,13,12,13,15]2685; CHECK-NEXT: retq2686 %vec = load <16 x i32>, ptr %vp2687 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 1, i32 0, i32 1, i32 3, i32 5, i32 4, i32 5, i32 7, i32 9, i32 8, i32 9, i32 11, i32 13, i32 12, i32 13, i32 15>2688 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2689 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %vec22690 ret <16 x i32> %res2691}2692 2693define <16 x i32> @test_masked_z_16xi32_perm_mem_mask0(ptr %vp, <16 x i32> %mask) {2694; CHECK-LABEL: test_masked_z_16xi32_perm_mem_mask0:2695; CHECK: # %bb.0:2696; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k12697; CHECK-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = mem[1,0,1,3,5,4,5,7,9,8,9,11,13,12,13,15]2698; CHECK-NEXT: retq2699 %vec = load <16 x i32>, ptr %vp2700 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 1, i32 0, i32 1, i32 3, i32 5, i32 4, i32 5, i32 7, i32 9, i32 8, i32 9, i32 11, i32 13, i32 12, i32 13, i32 15>2701 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2702 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer2703 ret <16 x i32> %res2704}2705 2706define <16 x i32> @test_masked_16xi32_perm_mem_mask1(ptr %vp, <16 x i32> %vec2, <16 x i32> %mask) {2707; CHECK-LABEL: test_masked_16xi32_perm_mem_mask1:2708; CHECK: # %bb.0:2709; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12710; CHECK-NEXT: vpshufd {{.*#+}} zmm0 {%k1} = mem[1,0,0,2,5,4,4,6,9,8,8,10,13,12,12,14]2711; CHECK-NEXT: retq2712 %vec = load <16 x i32>, ptr %vp2713 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 1, i32 0, i32 0, i32 2, i32 5, i32 4, i32 4, i32 6, i32 9, i32 8, i32 8, i32 10, i32 13, i32 12, i32 12, i32 14>2714 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2715 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %vec22716 ret <16 x i32> %res2717}2718 2719define <16 x i32> @test_masked_z_16xi32_perm_mem_mask1(ptr %vp, <16 x i32> %mask) {2720; CHECK-LABEL: test_masked_z_16xi32_perm_mem_mask1:2721; CHECK: # %bb.0:2722; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k12723; CHECK-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = mem[1,0,0,2,5,4,4,6,9,8,8,10,13,12,12,14]2724; CHECK-NEXT: retq2725 %vec = load <16 x i32>, ptr %vp2726 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 1, i32 0, i32 0, i32 2, i32 5, i32 4, i32 4, i32 6, i32 9, i32 8, i32 8, i32 10, i32 13, i32 12, i32 12, i32 14>2727 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2728 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer2729 ret <16 x i32> %res2730}2731 2732define <16 x i32> @test_masked_16xi32_perm_mem_mask2(ptr %vp, <16 x i32> %vec2, <16 x i32> %mask) {2733; CHECK-LABEL: test_masked_16xi32_perm_mem_mask2:2734; CHECK: # %bb.0:2735; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12736; CHECK-NEXT: vpshufd {{.*#+}} zmm0 {%k1} = mem[2,0,1,2,6,4,5,6,10,8,9,10,14,12,13,14]2737; CHECK-NEXT: retq2738 %vec = load <16 x i32>, ptr %vp2739 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 2, i32 0, i32 1, i32 2, i32 6, i32 4, i32 5, i32 6, i32 10, i32 8, i32 9, i32 10, i32 14, i32 12, i32 13, i32 14>2740 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2741 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %vec22742 ret <16 x i32> %res2743}2744 2745define <16 x i32> @test_masked_z_16xi32_perm_mem_mask2(ptr %vp, <16 x i32> %mask) {2746; CHECK-LABEL: test_masked_z_16xi32_perm_mem_mask2:2747; CHECK: # %bb.0:2748; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k12749; CHECK-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = mem[2,0,1,2,6,4,5,6,10,8,9,10,14,12,13,14]2750; CHECK-NEXT: retq2751 %vec = load <16 x i32>, ptr %vp2752 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 2, i32 0, i32 1, i32 2, i32 6, i32 4, i32 5, i32 6, i32 10, i32 8, i32 9, i32 10, i32 14, i32 12, i32 13, i32 14>2753 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2754 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer2755 ret <16 x i32> %res2756}2757 2758define <16 x i32> @test_16xi32_perm_mem_mask3(ptr %vp) {2759; CHECK-LABEL: test_16xi32_perm_mem_mask3:2760; CHECK: # %bb.0:2761; CHECK-NEXT: vpermilps {{.*#+}} zmm0 = mem[3,1,1,1,7,5,5,5,11,9,9,9,15,13,13,13]2762; CHECK-NEXT: retq2763 %vec = load <16 x i32>, ptr %vp2764 %res = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 3, i32 1, i32 1, i32 1, i32 7, i32 5, i32 5, i32 5, i32 11, i32 9, i32 9, i32 9, i32 15, i32 13, i32 13, i32 13>2765 ret <16 x i32> %res2766}2767define <16 x i32> @test_masked_16xi32_perm_mem_mask3(ptr %vp, <16 x i32> %vec2, <16 x i32> %mask) {2768; CHECK-LABEL: test_masked_16xi32_perm_mem_mask3:2769; CHECK: # %bb.0:2770; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12771; CHECK-NEXT: vpshufd {{.*#+}} zmm0 {%k1} = mem[3,1,1,1,7,5,5,5,11,9,9,9,15,13,13,13]2772; CHECK-NEXT: retq2773 %vec = load <16 x i32>, ptr %vp2774 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 3, i32 1, i32 1, i32 1, i32 7, i32 5, i32 5, i32 5, i32 11, i32 9, i32 9, i32 9, i32 15, i32 13, i32 13, i32 13>2775 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2776 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %vec22777 ret <16 x i32> %res2778}2779 2780define <16 x i32> @test_masked_z_16xi32_perm_mem_mask3(ptr %vp, <16 x i32> %mask) {2781; CHECK-LABEL: test_masked_z_16xi32_perm_mem_mask3:2782; CHECK: # %bb.0:2783; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k12784; CHECK-NEXT: vpshufd {{.*#+}} zmm0 {%k1} {z} = mem[3,1,1,1,7,5,5,5,11,9,9,9,15,13,13,13]2785; CHECK-NEXT: retq2786 %vec = load <16 x i32>, ptr %vp2787 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 3, i32 1, i32 1, i32 1, i32 7, i32 5, i32 5, i32 5, i32 11, i32 9, i32 9, i32 9, i32 15, i32 13, i32 13, i32 13>2788 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2789 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer2790 ret <16 x i32> %res2791}2792 2793