2624 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_i8_to_16(i8 %s) {5; CHECK-LABEL: test_i8_to_16:6; CHECK: # %bb.0:7; CHECK-NEXT: vpbroadcastb %edi, %xmm08; CHECK-NEXT: retq9 %vec = insertelement <2 x i8> undef, i8 %s, i32 010 %res = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>11 ret <16 x i8> %res12}13define <16 x i8> @test_masked_i8_to_16_mask0(i8 %s, <16 x i8> %default, <16 x i8> %mask) {14; CHECK-LABEL: test_masked_i8_to_16_mask0:15; CHECK: # %bb.0:16; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k117; CHECK-NEXT: vpbroadcastb %edi, %xmm0 {%k1}18; CHECK-NEXT: retq19 %vec = insertelement <2 x i8> undef, i8 %s, i32 020 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>21 %cmp = icmp eq <16 x i8> %mask, zeroinitializer22 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %default23 ret <16 x i8> %res24}25 26define <16 x i8> @test_masked_z_i8_to_16_mask0(i8 %s, <16 x i8> %mask) {27; CHECK-LABEL: test_masked_z_i8_to_16_mask0:28; CHECK: # %bb.0:29; CHECK-NEXT: vptestnmb %xmm0, %xmm0, %k130; CHECK-NEXT: vpbroadcastb %edi, %xmm0 {%k1} {z}31; CHECK-NEXT: retq32 %vec = insertelement <2 x i8> undef, i8 %s, i32 033 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>34 %cmp = icmp eq <16 x i8> %mask, zeroinitializer35 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer36 ret <16 x i8> %res37}38define <16 x i8> @test_masked_i8_to_16_mask1(i8 %s, <16 x i8> %default, <16 x i8> %mask) {39; CHECK-LABEL: test_masked_i8_to_16_mask1:40; CHECK: # %bb.0:41; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k142; CHECK-NEXT: vpbroadcastb %edi, %xmm0 {%k1}43; CHECK-NEXT: retq44 %vec = insertelement <2 x i8> undef, i8 %s, i32 045 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>46 %cmp = icmp eq <16 x i8> %mask, zeroinitializer47 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %default48 ret <16 x i8> %res49}50 51define <16 x i8> @test_masked_z_i8_to_16_mask1(i8 %s, <16 x i8> %mask) {52; CHECK-LABEL: test_masked_z_i8_to_16_mask1:53; CHECK: # %bb.0:54; CHECK-NEXT: vptestnmb %xmm0, %xmm0, %k155; CHECK-NEXT: vpbroadcastb %edi, %xmm0 {%k1} {z}56; CHECK-NEXT: retq57 %vec = insertelement <2 x i8> undef, i8 %s, i32 058 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>59 %cmp = icmp eq <16 x i8> %mask, zeroinitializer60 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer61 ret <16 x i8> %res62}63define <16 x i8> @test_masked_i8_to_16_mask2(i8 %s, <16 x i8> %default, <16 x i8> %mask) {64; CHECK-LABEL: test_masked_i8_to_16_mask2:65; CHECK: # %bb.0:66; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k167; CHECK-NEXT: vpbroadcastb %edi, %xmm0 {%k1}68; CHECK-NEXT: retq69 %vec = insertelement <2 x i8> undef, i8 %s, i32 070 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>71 %cmp = icmp eq <16 x i8> %mask, zeroinitializer72 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %default73 ret <16 x i8> %res74}75 76define <16 x i8> @test_masked_z_i8_to_16_mask2(i8 %s, <16 x i8> %mask) {77; CHECK-LABEL: test_masked_z_i8_to_16_mask2:78; CHECK: # %bb.0:79; CHECK-NEXT: vptestnmb %xmm0, %xmm0, %k180; CHECK-NEXT: vpbroadcastb %edi, %xmm0 {%k1} {z}81; CHECK-NEXT: retq82 %vec = insertelement <2 x i8> undef, i8 %s, i32 083 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>84 %cmp = icmp eq <16 x i8> %mask, zeroinitializer85 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer86 ret <16 x i8> %res87}88define <16 x i8> @test_masked_i8_to_16_mask3(i8 %s, <16 x i8> %default, <16 x i8> %mask) {89; CHECK-LABEL: test_masked_i8_to_16_mask3:90; CHECK: # %bb.0:91; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k192; CHECK-NEXT: vpbroadcastb %edi, %xmm0 {%k1}93; CHECK-NEXT: retq94 %vec = insertelement <2 x i8> undef, i8 %s, i32 095 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>96 %cmp = icmp eq <16 x i8> %mask, zeroinitializer97 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %default98 ret <16 x i8> %res99}100 101define <16 x i8> @test_masked_z_i8_to_16_mask3(i8 %s, <16 x i8> %mask) {102; CHECK-LABEL: test_masked_z_i8_to_16_mask3:103; CHECK: # %bb.0:104; CHECK-NEXT: vptestnmb %xmm0, %xmm0, %k1105; CHECK-NEXT: vpbroadcastb %edi, %xmm0 {%k1} {z}106; CHECK-NEXT: retq107 %vec = insertelement <2 x i8> undef, i8 %s, i32 0108 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>109 %cmp = icmp eq <16 x i8> %mask, zeroinitializer110 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer111 ret <16 x i8> %res112}113define <32 x i8> @test_i8_to_32(i8 %s) {114; CHECK-LABEL: test_i8_to_32:115; CHECK: # %bb.0:116; CHECK-NEXT: vpbroadcastb %edi, %ymm0117; CHECK-NEXT: retq118 %vec = insertelement <2 x i8> undef, i8 %s, i32 0119 %res = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>120 ret <32 x i8> %res121}122define <32 x i8> @test_masked_i8_to_32_mask0(i8 %s, <32 x i8> %default, <32 x i8> %mask) {123; CHECK-LABEL: test_masked_i8_to_32_mask0:124; CHECK: # %bb.0:125; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k1126; CHECK-NEXT: vpbroadcastb %edi, %ymm0 {%k1}127; CHECK-NEXT: retq128 %vec = insertelement <2 x i8> undef, i8 %s, i32 0129 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>130 %cmp = icmp eq <32 x i8> %mask, zeroinitializer131 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %default132 ret <32 x i8> %res133}134 135define <32 x i8> @test_masked_z_i8_to_32_mask0(i8 %s, <32 x i8> %mask) {136; CHECK-LABEL: test_masked_z_i8_to_32_mask0:137; CHECK: # %bb.0:138; CHECK-NEXT: vptestnmb %ymm0, %ymm0, %k1139; CHECK-NEXT: vpbroadcastb %edi, %ymm0 {%k1} {z}140; CHECK-NEXT: retq141 %vec = insertelement <2 x i8> undef, i8 %s, i32 0142 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>143 %cmp = icmp eq <32 x i8> %mask, zeroinitializer144 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer145 ret <32 x i8> %res146}147define <32 x i8> @test_masked_i8_to_32_mask1(i8 %s, <32 x i8> %default, <32 x i8> %mask) {148; CHECK-LABEL: test_masked_i8_to_32_mask1:149; CHECK: # %bb.0:150; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k1151; CHECK-NEXT: vpbroadcastb %edi, %ymm0 {%k1}152; CHECK-NEXT: retq153 %vec = insertelement <2 x i8> undef, i8 %s, i32 0154 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>155 %cmp = icmp eq <32 x i8> %mask, zeroinitializer156 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %default157 ret <32 x i8> %res158}159 160define <32 x i8> @test_masked_z_i8_to_32_mask1(i8 %s, <32 x i8> %mask) {161; CHECK-LABEL: test_masked_z_i8_to_32_mask1:162; CHECK: # %bb.0:163; CHECK-NEXT: vptestnmb %ymm0, %ymm0, %k1164; CHECK-NEXT: vpbroadcastb %edi, %ymm0 {%k1} {z}165; CHECK-NEXT: retq166 %vec = insertelement <2 x i8> undef, i8 %s, i32 0167 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>168 %cmp = icmp eq <32 x i8> %mask, zeroinitializer169 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer170 ret <32 x i8> %res171}172define <32 x i8> @test_masked_i8_to_32_mask2(i8 %s, <32 x i8> %default, <32 x i8> %mask) {173; CHECK-LABEL: test_masked_i8_to_32_mask2:174; CHECK: # %bb.0:175; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k1176; CHECK-NEXT: vpbroadcastb %edi, %ymm0 {%k1}177; CHECK-NEXT: retq178 %vec = insertelement <2 x i8> undef, i8 %s, i32 0179 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>180 %cmp = icmp eq <32 x i8> %mask, zeroinitializer181 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %default182 ret <32 x i8> %res183}184 185define <32 x i8> @test_masked_z_i8_to_32_mask2(i8 %s, <32 x i8> %mask) {186; CHECK-LABEL: test_masked_z_i8_to_32_mask2:187; CHECK: # %bb.0:188; CHECK-NEXT: vptestnmb %ymm0, %ymm0, %k1189; CHECK-NEXT: vpbroadcastb %edi, %ymm0 {%k1} {z}190; CHECK-NEXT: retq191 %vec = insertelement <2 x i8> undef, i8 %s, i32 0192 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>193 %cmp = icmp eq <32 x i8> %mask, zeroinitializer194 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer195 ret <32 x i8> %res196}197define <32 x i8> @test_masked_i8_to_32_mask3(i8 %s, <32 x i8> %default, <32 x i8> %mask) {198; CHECK-LABEL: test_masked_i8_to_32_mask3:199; CHECK: # %bb.0:200; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k1201; CHECK-NEXT: vpbroadcastb %edi, %ymm0 {%k1}202; CHECK-NEXT: retq203 %vec = insertelement <2 x i8> undef, i8 %s, i32 0204 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>205 %cmp = icmp eq <32 x i8> %mask, zeroinitializer206 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %default207 ret <32 x i8> %res208}209 210define <32 x i8> @test_masked_z_i8_to_32_mask3(i8 %s, <32 x i8> %mask) {211; CHECK-LABEL: test_masked_z_i8_to_32_mask3:212; CHECK: # %bb.0:213; CHECK-NEXT: vptestnmb %ymm0, %ymm0, %k1214; CHECK-NEXT: vpbroadcastb %edi, %ymm0 {%k1} {z}215; CHECK-NEXT: retq216 %vec = insertelement <2 x i8> undef, i8 %s, i32 0217 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>218 %cmp = icmp eq <32 x i8> %mask, zeroinitializer219 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer220 ret <32 x i8> %res221}222define <64 x i8> @test_i8_to_64(i8 %s) {223; CHECK-LABEL: test_i8_to_64:224; CHECK: # %bb.0:225; CHECK-NEXT: vpbroadcastb %edi, %zmm0226; CHECK-NEXT: retq227 %vec = insertelement <2 x i8> undef, i8 %s, i32 0228 %res = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>229 ret <64 x i8> %res230}231define <64 x i8> @test_masked_i8_to_64_mask0(i8 %s, <64 x i8> %default, <64 x i8> %mask) {232; CHECK-LABEL: test_masked_i8_to_64_mask0:233; CHECK: # %bb.0:234; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k1235; CHECK-NEXT: vpbroadcastb %edi, %zmm0 {%k1}236; CHECK-NEXT: retq237 %vec = insertelement <2 x i8> undef, i8 %s, i32 0238 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>239 %cmp = icmp eq <64 x i8> %mask, zeroinitializer240 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %default241 ret <64 x i8> %res242}243 244define <64 x i8> @test_masked_z_i8_to_64_mask0(i8 %s, <64 x i8> %mask) {245; CHECK-LABEL: test_masked_z_i8_to_64_mask0:246; CHECK: # %bb.0:247; CHECK-NEXT: vptestnmb %zmm0, %zmm0, %k1248; CHECK-NEXT: vpbroadcastb %edi, %zmm0 {%k1} {z}249; CHECK-NEXT: retq250 %vec = insertelement <2 x i8> undef, i8 %s, i32 0251 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>252 %cmp = icmp eq <64 x i8> %mask, zeroinitializer253 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer254 ret <64 x i8> %res255}256define <64 x i8> @test_masked_i8_to_64_mask1(i8 %s, <64 x i8> %default, <64 x i8> %mask) {257; CHECK-LABEL: test_masked_i8_to_64_mask1:258; CHECK: # %bb.0:259; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k1260; CHECK-NEXT: vpbroadcastb %edi, %zmm0 {%k1}261; CHECK-NEXT: retq262 %vec = insertelement <2 x i8> undef, i8 %s, i32 0263 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>264 %cmp = icmp eq <64 x i8> %mask, zeroinitializer265 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %default266 ret <64 x i8> %res267}268 269define <64 x i8> @test_masked_z_i8_to_64_mask1(i8 %s, <64 x i8> %mask) {270; CHECK-LABEL: test_masked_z_i8_to_64_mask1:271; CHECK: # %bb.0:272; CHECK-NEXT: vptestnmb %zmm0, %zmm0, %k1273; CHECK-NEXT: vpbroadcastb %edi, %zmm0 {%k1} {z}274; CHECK-NEXT: retq275 %vec = insertelement <2 x i8> undef, i8 %s, i32 0276 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>277 %cmp = icmp eq <64 x i8> %mask, zeroinitializer278 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer279 ret <64 x i8> %res280}281define <64 x i8> @test_masked_i8_to_64_mask2(i8 %s, <64 x i8> %default, <64 x i8> %mask) {282; CHECK-LABEL: test_masked_i8_to_64_mask2:283; CHECK: # %bb.0:284; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k1285; CHECK-NEXT: vpbroadcastb %edi, %zmm0 {%k1}286; CHECK-NEXT: retq287 %vec = insertelement <2 x i8> undef, i8 %s, i32 0288 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>289 %cmp = icmp eq <64 x i8> %mask, zeroinitializer290 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %default291 ret <64 x i8> %res292}293 294define <64 x i8> @test_masked_z_i8_to_64_mask2(i8 %s, <64 x i8> %mask) {295; CHECK-LABEL: test_masked_z_i8_to_64_mask2:296; CHECK: # %bb.0:297; CHECK-NEXT: vptestnmb %zmm0, %zmm0, %k1298; CHECK-NEXT: vpbroadcastb %edi, %zmm0 {%k1} {z}299; CHECK-NEXT: retq300 %vec = insertelement <2 x i8> undef, i8 %s, i32 0301 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>302 %cmp = icmp eq <64 x i8> %mask, zeroinitializer303 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer304 ret <64 x i8> %res305}306define <64 x i8> @test_masked_i8_to_64_mask3(i8 %s, <64 x i8> %default, <64 x i8> %mask) {307; CHECK-LABEL: test_masked_i8_to_64_mask3:308; CHECK: # %bb.0:309; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k1310; CHECK-NEXT: vpbroadcastb %edi, %zmm0 {%k1}311; CHECK-NEXT: retq312 %vec = insertelement <2 x i8> undef, i8 %s, i32 0313 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>314 %cmp = icmp eq <64 x i8> %mask, zeroinitializer315 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %default316 ret <64 x i8> %res317}318 319define <64 x i8> @test_masked_z_i8_to_64_mask3(i8 %s, <64 x i8> %mask) {320; CHECK-LABEL: test_masked_z_i8_to_64_mask3:321; CHECK: # %bb.0:322; CHECK-NEXT: vptestnmb %zmm0, %zmm0, %k1323; CHECK-NEXT: vpbroadcastb %edi, %zmm0 {%k1} {z}324; CHECK-NEXT: retq325 %vec = insertelement <2 x i8> undef, i8 %s, i32 0326 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>327 %cmp = icmp eq <64 x i8> %mask, zeroinitializer328 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer329 ret <64 x i8> %res330}331define <8 x i16> @test_i16_to_8(i16 %s) {332; CHECK-LABEL: test_i16_to_8:333; CHECK: # %bb.0:334; CHECK-NEXT: vpbroadcastw %edi, %xmm0335; CHECK-NEXT: retq336 %vec = insertelement <2 x i16> undef, i16 %s, i32 0337 %res = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>338 ret <8 x i16> %res339}340define <8 x i16> @test_masked_i16_to_8_mask0(i16 %s, <8 x i16> %default, <8 x i16> %mask) {341; CHECK-LABEL: test_masked_i16_to_8_mask0:342; CHECK: # %bb.0:343; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1344; CHECK-NEXT: vpbroadcastw %edi, %xmm0 {%k1}345; CHECK-NEXT: retq346 %vec = insertelement <2 x i16> undef, i16 %s, i32 0347 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>348 %cmp = icmp eq <8 x i16> %mask, zeroinitializer349 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %default350 ret <8 x i16> %res351}352 353define <8 x i16> @test_masked_z_i16_to_8_mask0(i16 %s, <8 x i16> %mask) {354; CHECK-LABEL: test_masked_z_i16_to_8_mask0:355; CHECK: # %bb.0:356; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k1357; CHECK-NEXT: vpbroadcastw %edi, %xmm0 {%k1} {z}358; CHECK-NEXT: retq359 %vec = insertelement <2 x i16> undef, i16 %s, i32 0360 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>361 %cmp = icmp eq <8 x i16> %mask, zeroinitializer362 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer363 ret <8 x i16> %res364}365define <8 x i16> @test_masked_i16_to_8_mask1(i16 %s, <8 x i16> %default, <8 x i16> %mask) {366; CHECK-LABEL: test_masked_i16_to_8_mask1:367; CHECK: # %bb.0:368; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1369; CHECK-NEXT: vpbroadcastw %edi, %xmm0 {%k1}370; CHECK-NEXT: retq371 %vec = insertelement <2 x i16> undef, i16 %s, i32 0372 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>373 %cmp = icmp eq <8 x i16> %mask, zeroinitializer374 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %default375 ret <8 x i16> %res376}377 378define <8 x i16> @test_masked_z_i16_to_8_mask1(i16 %s, <8 x i16> %mask) {379; CHECK-LABEL: test_masked_z_i16_to_8_mask1:380; CHECK: # %bb.0:381; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k1382; CHECK-NEXT: vpbroadcastw %edi, %xmm0 {%k1} {z}383; CHECK-NEXT: retq384 %vec = insertelement <2 x i16> undef, i16 %s, i32 0385 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>386 %cmp = icmp eq <8 x i16> %mask, zeroinitializer387 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer388 ret <8 x i16> %res389}390define <8 x i16> @test_masked_i16_to_8_mask2(i16 %s, <8 x i16> %default, <8 x i16> %mask) {391; CHECK-LABEL: test_masked_i16_to_8_mask2:392; CHECK: # %bb.0:393; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1394; CHECK-NEXT: vpbroadcastw %edi, %xmm0 {%k1}395; CHECK-NEXT: retq396 %vec = insertelement <2 x i16> undef, i16 %s, i32 0397 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>398 %cmp = icmp eq <8 x i16> %mask, zeroinitializer399 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %default400 ret <8 x i16> %res401}402 403define <8 x i16> @test_masked_z_i16_to_8_mask2(i16 %s, <8 x i16> %mask) {404; CHECK-LABEL: test_masked_z_i16_to_8_mask2:405; CHECK: # %bb.0:406; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k1407; CHECK-NEXT: vpbroadcastw %edi, %xmm0 {%k1} {z}408; CHECK-NEXT: retq409 %vec = insertelement <2 x i16> undef, i16 %s, i32 0410 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>411 %cmp = icmp eq <8 x i16> %mask, zeroinitializer412 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer413 ret <8 x i16> %res414}415define <8 x i16> @test_masked_i16_to_8_mask3(i16 %s, <8 x i16> %default, <8 x i16> %mask) {416; CHECK-LABEL: test_masked_i16_to_8_mask3:417; CHECK: # %bb.0:418; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k1419; CHECK-NEXT: vpbroadcastw %edi, %xmm0 {%k1}420; CHECK-NEXT: retq421 %vec = insertelement <2 x i16> undef, i16 %s, i32 0422 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>423 %cmp = icmp eq <8 x i16> %mask, zeroinitializer424 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %default425 ret <8 x i16> %res426}427 428define <8 x i16> @test_masked_z_i16_to_8_mask3(i16 %s, <8 x i16> %mask) {429; CHECK-LABEL: test_masked_z_i16_to_8_mask3:430; CHECK: # %bb.0:431; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k1432; CHECK-NEXT: vpbroadcastw %edi, %xmm0 {%k1} {z}433; CHECK-NEXT: retq434 %vec = insertelement <2 x i16> undef, i16 %s, i32 0435 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>436 %cmp = icmp eq <8 x i16> %mask, zeroinitializer437 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer438 ret <8 x i16> %res439}440define <16 x i16> @test_i16_to_16(i16 %s) {441; CHECK-LABEL: test_i16_to_16:442; CHECK: # %bb.0:443; CHECK-NEXT: vpbroadcastw %edi, %ymm0444; CHECK-NEXT: retq445 %vec = insertelement <2 x i16> undef, i16 %s, i32 0446 %res = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>447 ret <16 x i16> %res448}449define <16 x i16> @test_masked_i16_to_16_mask0(i16 %s, <16 x i16> %default, <16 x i16> %mask) {450; CHECK-LABEL: test_masked_i16_to_16_mask0:451; CHECK: # %bb.0:452; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k1453; CHECK-NEXT: vpbroadcastw %edi, %ymm0 {%k1}454; CHECK-NEXT: retq455 %vec = insertelement <2 x i16> undef, i16 %s, i32 0456 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>457 %cmp = icmp eq <16 x i16> %mask, zeroinitializer458 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %default459 ret <16 x i16> %res460}461 462define <16 x i16> @test_masked_z_i16_to_16_mask0(i16 %s, <16 x i16> %mask) {463; CHECK-LABEL: test_masked_z_i16_to_16_mask0:464; CHECK: # %bb.0:465; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k1466; CHECK-NEXT: vpbroadcastw %edi, %ymm0 {%k1} {z}467; CHECK-NEXT: retq468 %vec = insertelement <2 x i16> undef, i16 %s, i32 0469 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>470 %cmp = icmp eq <16 x i16> %mask, zeroinitializer471 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer472 ret <16 x i16> %res473}474define <16 x i16> @test_masked_i16_to_16_mask1(i16 %s, <16 x i16> %default, <16 x i16> %mask) {475; CHECK-LABEL: test_masked_i16_to_16_mask1:476; CHECK: # %bb.0:477; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k1478; CHECK-NEXT: vpbroadcastw %edi, %ymm0 {%k1}479; CHECK-NEXT: retq480 %vec = insertelement <2 x i16> undef, i16 %s, i32 0481 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>482 %cmp = icmp eq <16 x i16> %mask, zeroinitializer483 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %default484 ret <16 x i16> %res485}486 487define <16 x i16> @test_masked_z_i16_to_16_mask1(i16 %s, <16 x i16> %mask) {488; CHECK-LABEL: test_masked_z_i16_to_16_mask1:489; CHECK: # %bb.0:490; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k1491; CHECK-NEXT: vpbroadcastw %edi, %ymm0 {%k1} {z}492; CHECK-NEXT: retq493 %vec = insertelement <2 x i16> undef, i16 %s, i32 0494 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>495 %cmp = icmp eq <16 x i16> %mask, zeroinitializer496 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer497 ret <16 x i16> %res498}499define <16 x i16> @test_masked_i16_to_16_mask2(i16 %s, <16 x i16> %default, <16 x i16> %mask) {500; CHECK-LABEL: test_masked_i16_to_16_mask2:501; CHECK: # %bb.0:502; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k1503; CHECK-NEXT: vpbroadcastw %edi, %ymm0 {%k1}504; CHECK-NEXT: retq505 %vec = insertelement <2 x i16> undef, i16 %s, i32 0506 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>507 %cmp = icmp eq <16 x i16> %mask, zeroinitializer508 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %default509 ret <16 x i16> %res510}511 512define <16 x i16> @test_masked_z_i16_to_16_mask2(i16 %s, <16 x i16> %mask) {513; CHECK-LABEL: test_masked_z_i16_to_16_mask2:514; CHECK: # %bb.0:515; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k1516; CHECK-NEXT: vpbroadcastw %edi, %ymm0 {%k1} {z}517; CHECK-NEXT: retq518 %vec = insertelement <2 x i16> undef, i16 %s, i32 0519 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>520 %cmp = icmp eq <16 x i16> %mask, zeroinitializer521 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer522 ret <16 x i16> %res523}524define <16 x i16> @test_masked_i16_to_16_mask3(i16 %s, <16 x i16> %default, <16 x i16> %mask) {525; CHECK-LABEL: test_masked_i16_to_16_mask3:526; CHECK: # %bb.0:527; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k1528; CHECK-NEXT: vpbroadcastw %edi, %ymm0 {%k1}529; CHECK-NEXT: retq530 %vec = insertelement <2 x i16> undef, i16 %s, i32 0531 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>532 %cmp = icmp eq <16 x i16> %mask, zeroinitializer533 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %default534 ret <16 x i16> %res535}536 537define <16 x i16> @test_masked_z_i16_to_16_mask3(i16 %s, <16 x i16> %mask) {538; CHECK-LABEL: test_masked_z_i16_to_16_mask3:539; CHECK: # %bb.0:540; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k1541; CHECK-NEXT: vpbroadcastw %edi, %ymm0 {%k1} {z}542; CHECK-NEXT: retq543 %vec = insertelement <2 x i16> undef, i16 %s, i32 0544 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>545 %cmp = icmp eq <16 x i16> %mask, zeroinitializer546 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer547 ret <16 x i16> %res548}549define <32 x i16> @test_i16_to_32(i16 %s) {550; CHECK-LABEL: test_i16_to_32:551; CHECK: # %bb.0:552; CHECK-NEXT: vpbroadcastw %edi, %zmm0553; CHECK-NEXT: retq554 %vec = insertelement <2 x i16> undef, i16 %s, i32 0555 %res = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>556 ret <32 x i16> %res557}558define <32 x i16> @test_masked_i16_to_32_mask0(i16 %s, <32 x i16> %default, <32 x i16> %mask) {559; CHECK-LABEL: test_masked_i16_to_32_mask0:560; CHECK: # %bb.0:561; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k1562; CHECK-NEXT: vpbroadcastw %edi, %zmm0 {%k1}563; CHECK-NEXT: retq564 %vec = insertelement <2 x i16> undef, i16 %s, i32 0565 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>566 %cmp = icmp eq <32 x i16> %mask, zeroinitializer567 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %default568 ret <32 x i16> %res569}570 571define <32 x i16> @test_masked_z_i16_to_32_mask0(i16 %s, <32 x i16> %mask) {572; CHECK-LABEL: test_masked_z_i16_to_32_mask0:573; CHECK: # %bb.0:574; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k1575; CHECK-NEXT: vpbroadcastw %edi, %zmm0 {%k1} {z}576; CHECK-NEXT: retq577 %vec = insertelement <2 x i16> undef, i16 %s, i32 0578 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>579 %cmp = icmp eq <32 x i16> %mask, zeroinitializer580 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer581 ret <32 x i16> %res582}583define <32 x i16> @test_masked_i16_to_32_mask1(i16 %s, <32 x i16> %default, <32 x i16> %mask) {584; CHECK-LABEL: test_masked_i16_to_32_mask1:585; CHECK: # %bb.0:586; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k1587; CHECK-NEXT: vpbroadcastw %edi, %zmm0 {%k1}588; CHECK-NEXT: retq589 %vec = insertelement <2 x i16> undef, i16 %s, i32 0590 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>591 %cmp = icmp eq <32 x i16> %mask, zeroinitializer592 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %default593 ret <32 x i16> %res594}595 596define <32 x i16> @test_masked_z_i16_to_32_mask1(i16 %s, <32 x i16> %mask) {597; CHECK-LABEL: test_masked_z_i16_to_32_mask1:598; CHECK: # %bb.0:599; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k1600; CHECK-NEXT: vpbroadcastw %edi, %zmm0 {%k1} {z}601; CHECK-NEXT: retq602 %vec = insertelement <2 x i16> undef, i16 %s, i32 0603 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>604 %cmp = icmp eq <32 x i16> %mask, zeroinitializer605 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer606 ret <32 x i16> %res607}608define <32 x i16> @test_masked_i16_to_32_mask2(i16 %s, <32 x i16> %default, <32 x i16> %mask) {609; CHECK-LABEL: test_masked_i16_to_32_mask2:610; CHECK: # %bb.0:611; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k1612; CHECK-NEXT: vpbroadcastw %edi, %zmm0 {%k1}613; CHECK-NEXT: retq614 %vec = insertelement <2 x i16> undef, i16 %s, i32 0615 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>616 %cmp = icmp eq <32 x i16> %mask, zeroinitializer617 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %default618 ret <32 x i16> %res619}620 621define <32 x i16> @test_masked_z_i16_to_32_mask2(i16 %s, <32 x i16> %mask) {622; CHECK-LABEL: test_masked_z_i16_to_32_mask2:623; CHECK: # %bb.0:624; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k1625; CHECK-NEXT: vpbroadcastw %edi, %zmm0 {%k1} {z}626; CHECK-NEXT: retq627 %vec = insertelement <2 x i16> undef, i16 %s, i32 0628 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>629 %cmp = icmp eq <32 x i16> %mask, zeroinitializer630 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer631 ret <32 x i16> %res632}633define <32 x i16> @test_masked_i16_to_32_mask3(i16 %s, <32 x i16> %default, <32 x i16> %mask) {634; CHECK-LABEL: test_masked_i16_to_32_mask3:635; CHECK: # %bb.0:636; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k1637; CHECK-NEXT: vpbroadcastw %edi, %zmm0 {%k1}638; CHECK-NEXT: retq639 %vec = insertelement <2 x i16> undef, i16 %s, i32 0640 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>641 %cmp = icmp eq <32 x i16> %mask, zeroinitializer642 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %default643 ret <32 x i16> %res644}645 646define <32 x i16> @test_masked_z_i16_to_32_mask3(i16 %s, <32 x i16> %mask) {647; CHECK-LABEL: test_masked_z_i16_to_32_mask3:648; CHECK: # %bb.0:649; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k1650; CHECK-NEXT: vpbroadcastw %edi, %zmm0 {%k1} {z}651; CHECK-NEXT: retq652 %vec = insertelement <2 x i16> undef, i16 %s, i32 0653 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>654 %cmp = icmp eq <32 x i16> %mask, zeroinitializer655 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer656 ret <32 x i16> %res657}658define <4 x i32> @test_i32_to_4(i32 %s) {659; CHECK-LABEL: test_i32_to_4:660; CHECK: # %bb.0:661; CHECK-NEXT: vpbroadcastd %edi, %xmm0662; CHECK-NEXT: retq663 %vec = insertelement <2 x i32> undef, i32 %s, i32 0664 %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>665 ret <4 x i32> %res666}667define <4 x i32> @test_masked_i32_to_4_mask0(i32 %s, <4 x i32> %default, <4 x i32> %mask) {668; CHECK-LABEL: test_masked_i32_to_4_mask0:669; CHECK: # %bb.0:670; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1671; CHECK-NEXT: vpbroadcastd %edi, %xmm0 {%k1}672; CHECK-NEXT: retq673 %vec = insertelement <2 x i32> undef, i32 %s, i32 0674 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>675 %cmp = icmp eq <4 x i32> %mask, zeroinitializer676 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default677 ret <4 x i32> %res678}679 680define <4 x i32> @test_masked_z_i32_to_4_mask0(i32 %s, <4 x i32> %mask) {681; CHECK-LABEL: test_masked_z_i32_to_4_mask0:682; CHECK: # %bb.0:683; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k1684; CHECK-NEXT: vpbroadcastd %edi, %xmm0 {%k1} {z}685; CHECK-NEXT: retq686 %vec = insertelement <2 x i32> undef, i32 %s, i32 0687 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>688 %cmp = icmp eq <4 x i32> %mask, zeroinitializer689 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer690 ret <4 x i32> %res691}692define <4 x i32> @test_masked_i32_to_4_mask1(i32 %s, <4 x i32> %default, <4 x i32> %mask) {693; CHECK-LABEL: test_masked_i32_to_4_mask1:694; CHECK: # %bb.0:695; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1696; CHECK-NEXT: vpbroadcastd %edi, %xmm0 {%k1}697; CHECK-NEXT: retq698 %vec = insertelement <2 x i32> undef, i32 %s, i32 0699 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>700 %cmp = icmp eq <4 x i32> %mask, zeroinitializer701 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default702 ret <4 x i32> %res703}704 705define <4 x i32> @test_masked_z_i32_to_4_mask1(i32 %s, <4 x i32> %mask) {706; CHECK-LABEL: test_masked_z_i32_to_4_mask1:707; CHECK: # %bb.0:708; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k1709; CHECK-NEXT: vpbroadcastd %edi, %xmm0 {%k1} {z}710; CHECK-NEXT: retq711 %vec = insertelement <2 x i32> undef, i32 %s, i32 0712 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>713 %cmp = icmp eq <4 x i32> %mask, zeroinitializer714 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer715 ret <4 x i32> %res716}717define <4 x i32> @test_masked_i32_to_4_mask2(i32 %s, <4 x i32> %default, <4 x i32> %mask) {718; CHECK-LABEL: test_masked_i32_to_4_mask2:719; CHECK: # %bb.0:720; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1721; CHECK-NEXT: vpbroadcastd %edi, %xmm0 {%k1}722; CHECK-NEXT: retq723 %vec = insertelement <2 x i32> undef, i32 %s, i32 0724 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>725 %cmp = icmp eq <4 x i32> %mask, zeroinitializer726 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default727 ret <4 x i32> %res728}729 730define <4 x i32> @test_masked_z_i32_to_4_mask2(i32 %s, <4 x i32> %mask) {731; CHECK-LABEL: test_masked_z_i32_to_4_mask2:732; CHECK: # %bb.0:733; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k1734; CHECK-NEXT: vpbroadcastd %edi, %xmm0 {%k1} {z}735; CHECK-NEXT: retq736 %vec = insertelement <2 x i32> undef, i32 %s, i32 0737 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>738 %cmp = icmp eq <4 x i32> %mask, zeroinitializer739 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer740 ret <4 x i32> %res741}742define <4 x i32> @test_masked_i32_to_4_mask3(i32 %s, <4 x i32> %default, <4 x i32> %mask) {743; CHECK-LABEL: test_masked_i32_to_4_mask3:744; CHECK: # %bb.0:745; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1746; CHECK-NEXT: vpbroadcastd %edi, %xmm0 {%k1}747; CHECK-NEXT: retq748 %vec = insertelement <2 x i32> undef, i32 %s, i32 0749 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>750 %cmp = icmp eq <4 x i32> %mask, zeroinitializer751 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default752 ret <4 x i32> %res753}754 755define <4 x i32> @test_masked_z_i32_to_4_mask3(i32 %s, <4 x i32> %mask) {756; CHECK-LABEL: test_masked_z_i32_to_4_mask3:757; CHECK: # %bb.0:758; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k1759; CHECK-NEXT: vpbroadcastd %edi, %xmm0 {%k1} {z}760; CHECK-NEXT: retq761 %vec = insertelement <2 x i32> undef, i32 %s, i32 0762 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>763 %cmp = icmp eq <4 x i32> %mask, zeroinitializer764 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer765 ret <4 x i32> %res766}767define <8 x i32> @test_i32_to_8(i32 %s) {768; CHECK-LABEL: test_i32_to_8:769; CHECK: # %bb.0:770; CHECK-NEXT: vpbroadcastd %edi, %ymm0771; CHECK-NEXT: retq772 %vec = insertelement <2 x i32> undef, i32 %s, i32 0773 %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>774 ret <8 x i32> %res775}776define <8 x i32> @test_masked_i32_to_8_mask0(i32 %s, <8 x i32> %default, <8 x i32> %mask) {777; CHECK-LABEL: test_masked_i32_to_8_mask0:778; CHECK: # %bb.0:779; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1780; CHECK-NEXT: vpbroadcastd %edi, %ymm0 {%k1}781; CHECK-NEXT: retq782 %vec = insertelement <2 x i32> undef, i32 %s, i32 0783 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>784 %cmp = icmp eq <8 x i32> %mask, zeroinitializer785 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default786 ret <8 x i32> %res787}788 789define <8 x i32> @test_masked_z_i32_to_8_mask0(i32 %s, <8 x i32> %mask) {790; CHECK-LABEL: test_masked_z_i32_to_8_mask0:791; CHECK: # %bb.0:792; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1793; CHECK-NEXT: vpbroadcastd %edi, %ymm0 {%k1} {z}794; CHECK-NEXT: retq795 %vec = insertelement <2 x i32> undef, i32 %s, i32 0796 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>797 %cmp = icmp eq <8 x i32> %mask, zeroinitializer798 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer799 ret <8 x i32> %res800}801define <8 x i32> @test_masked_i32_to_8_mask1(i32 %s, <8 x i32> %default, <8 x i32> %mask) {802; CHECK-LABEL: test_masked_i32_to_8_mask1:803; CHECK: # %bb.0:804; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1805; CHECK-NEXT: vpbroadcastd %edi, %ymm0 {%k1}806; CHECK-NEXT: retq807 %vec = insertelement <2 x i32> undef, i32 %s, i32 0808 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>809 %cmp = icmp eq <8 x i32> %mask, zeroinitializer810 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default811 ret <8 x i32> %res812}813 814define <8 x i32> @test_masked_z_i32_to_8_mask1(i32 %s, <8 x i32> %mask) {815; CHECK-LABEL: test_masked_z_i32_to_8_mask1:816; CHECK: # %bb.0:817; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1818; CHECK-NEXT: vpbroadcastd %edi, %ymm0 {%k1} {z}819; CHECK-NEXT: retq820 %vec = insertelement <2 x i32> undef, i32 %s, i32 0821 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>822 %cmp = icmp eq <8 x i32> %mask, zeroinitializer823 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer824 ret <8 x i32> %res825}826define <8 x i32> @test_masked_i32_to_8_mask2(i32 %s, <8 x i32> %default, <8 x i32> %mask) {827; CHECK-LABEL: test_masked_i32_to_8_mask2:828; CHECK: # %bb.0:829; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1830; CHECK-NEXT: vpbroadcastd %edi, %ymm0 {%k1}831; CHECK-NEXT: retq832 %vec = insertelement <2 x i32> undef, i32 %s, i32 0833 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>834 %cmp = icmp eq <8 x i32> %mask, zeroinitializer835 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default836 ret <8 x i32> %res837}838 839define <8 x i32> @test_masked_z_i32_to_8_mask2(i32 %s, <8 x i32> %mask) {840; CHECK-LABEL: test_masked_z_i32_to_8_mask2:841; CHECK: # %bb.0:842; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1843; CHECK-NEXT: vpbroadcastd %edi, %ymm0 {%k1} {z}844; CHECK-NEXT: retq845 %vec = insertelement <2 x i32> undef, i32 %s, i32 0846 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>847 %cmp = icmp eq <8 x i32> %mask, zeroinitializer848 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer849 ret <8 x i32> %res850}851define <8 x i32> @test_masked_i32_to_8_mask3(i32 %s, <8 x i32> %default, <8 x i32> %mask) {852; CHECK-LABEL: test_masked_i32_to_8_mask3:853; CHECK: # %bb.0:854; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1855; CHECK-NEXT: vpbroadcastd %edi, %ymm0 {%k1}856; CHECK-NEXT: retq857 %vec = insertelement <2 x i32> undef, i32 %s, i32 0858 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>859 %cmp = icmp eq <8 x i32> %mask, zeroinitializer860 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default861 ret <8 x i32> %res862}863 864define <8 x i32> @test_masked_z_i32_to_8_mask3(i32 %s, <8 x i32> %mask) {865; CHECK-LABEL: test_masked_z_i32_to_8_mask3:866; CHECK: # %bb.0:867; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1868; CHECK-NEXT: vpbroadcastd %edi, %ymm0 {%k1} {z}869; CHECK-NEXT: retq870 %vec = insertelement <2 x i32> undef, i32 %s, i32 0871 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>872 %cmp = icmp eq <8 x i32> %mask, zeroinitializer873 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer874 ret <8 x i32> %res875}876define <16 x i32> @test_i32_to_16(i32 %s) {877; CHECK-LABEL: test_i32_to_16:878; CHECK: # %bb.0:879; CHECK-NEXT: vpbroadcastd %edi, %zmm0880; CHECK-NEXT: retq881 %vec = insertelement <2 x i32> undef, i32 %s, i32 0882 %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>883 ret <16 x i32> %res884}885define <16 x i32> @test_masked_i32_to_16_mask0(i32 %s, <16 x i32> %default, <16 x i32> %mask) {886; CHECK-LABEL: test_masked_i32_to_16_mask0:887; CHECK: # %bb.0:888; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1889; CHECK-NEXT: vpbroadcastd %edi, %zmm0 {%k1}890; CHECK-NEXT: retq891 %vec = insertelement <2 x i32> undef, i32 %s, i32 0892 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>893 %cmp = icmp eq <16 x i32> %mask, zeroinitializer894 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default895 ret <16 x i32> %res896}897 898define <16 x i32> @test_masked_z_i32_to_16_mask0(i32 %s, <16 x i32> %mask) {899; CHECK-LABEL: test_masked_z_i32_to_16_mask0:900; CHECK: # %bb.0:901; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1902; CHECK-NEXT: vpbroadcastd %edi, %zmm0 {%k1} {z}903; CHECK-NEXT: retq904 %vec = insertelement <2 x i32> undef, i32 %s, i32 0905 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>906 %cmp = icmp eq <16 x i32> %mask, zeroinitializer907 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer908 ret <16 x i32> %res909}910define <16 x i32> @test_masked_i32_to_16_mask1(i32 %s, <16 x i32> %default, <16 x i32> %mask) {911; CHECK-LABEL: test_masked_i32_to_16_mask1:912; CHECK: # %bb.0:913; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1914; CHECK-NEXT: vpbroadcastd %edi, %zmm0 {%k1}915; CHECK-NEXT: retq916 %vec = insertelement <2 x i32> undef, i32 %s, i32 0917 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>918 %cmp = icmp eq <16 x i32> %mask, zeroinitializer919 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default920 ret <16 x i32> %res921}922 923define <16 x i32> @test_masked_z_i32_to_16_mask1(i32 %s, <16 x i32> %mask) {924; CHECK-LABEL: test_masked_z_i32_to_16_mask1:925; CHECK: # %bb.0:926; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1927; CHECK-NEXT: vpbroadcastd %edi, %zmm0 {%k1} {z}928; CHECK-NEXT: retq929 %vec = insertelement <2 x i32> undef, i32 %s, i32 0930 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>931 %cmp = icmp eq <16 x i32> %mask, zeroinitializer932 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer933 ret <16 x i32> %res934}935define <16 x i32> @test_masked_i32_to_16_mask2(i32 %s, <16 x i32> %default, <16 x i32> %mask) {936; CHECK-LABEL: test_masked_i32_to_16_mask2:937; CHECK: # %bb.0:938; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1939; CHECK-NEXT: vpbroadcastd %edi, %zmm0 {%k1}940; CHECK-NEXT: retq941 %vec = insertelement <2 x i32> undef, i32 %s, i32 0942 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>943 %cmp = icmp eq <16 x i32> %mask, zeroinitializer944 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default945 ret <16 x i32> %res946}947 948define <16 x i32> @test_masked_z_i32_to_16_mask2(i32 %s, <16 x i32> %mask) {949; CHECK-LABEL: test_masked_z_i32_to_16_mask2:950; CHECK: # %bb.0:951; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1952; CHECK-NEXT: vpbroadcastd %edi, %zmm0 {%k1} {z}953; CHECK-NEXT: retq954 %vec = insertelement <2 x i32> undef, i32 %s, i32 0955 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>956 %cmp = icmp eq <16 x i32> %mask, zeroinitializer957 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer958 ret <16 x i32> %res959}960define <16 x i32> @test_masked_i32_to_16_mask3(i32 %s, <16 x i32> %default, <16 x i32> %mask) {961; CHECK-LABEL: test_masked_i32_to_16_mask3:962; CHECK: # %bb.0:963; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1964; CHECK-NEXT: vpbroadcastd %edi, %zmm0 {%k1}965; CHECK-NEXT: retq966 %vec = insertelement <2 x i32> undef, i32 %s, i32 0967 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>968 %cmp = icmp eq <16 x i32> %mask, zeroinitializer969 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default970 ret <16 x i32> %res971}972 973define <16 x i32> @test_masked_z_i32_to_16_mask3(i32 %s, <16 x i32> %mask) {974; CHECK-LABEL: test_masked_z_i32_to_16_mask3:975; CHECK: # %bb.0:976; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1977; CHECK-NEXT: vpbroadcastd %edi, %zmm0 {%k1} {z}978; CHECK-NEXT: retq979 %vec = insertelement <2 x i32> undef, i32 %s, i32 0980 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>981 %cmp = icmp eq <16 x i32> %mask, zeroinitializer982 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer983 ret <16 x i32> %res984}985define <2 x i64> @test_i64_to_2(i64 %s) {986; CHECK-LABEL: test_i64_to_2:987; CHECK: # %bb.0:988; CHECK-NEXT: vpbroadcastq %rdi, %xmm0989; CHECK-NEXT: retq990 %vec = insertelement <2 x i64> undef, i64 %s, i32 0991 %res = shufflevector <2 x i64> %vec, <2 x i64> undef, <2 x i32> <i32 0, i32 0>992 ret <2 x i64> %res993}994define <2 x i64> @test_masked_i64_to_2_mask0(i64 %s, <2 x i64> %default, <2 x i64> %mask) {995; CHECK-LABEL: test_masked_i64_to_2_mask0:996; CHECK: # %bb.0:997; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k1998; CHECK-NEXT: vpbroadcastq %rdi, %xmm0 {%k1}999; CHECK-NEXT: retq1000 %vec = insertelement <2 x i64> undef, i64 %s, i32 01001 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <2 x i32> <i32 0, i32 0>1002 %cmp = icmp eq <2 x i64> %mask, zeroinitializer1003 %res = select <2 x i1> %cmp, <2 x i64> %shuf, <2 x i64> %default1004 ret <2 x i64> %res1005}1006 1007define <2 x i64> @test_masked_z_i64_to_2_mask0(i64 %s, <2 x i64> %mask) {1008; CHECK-LABEL: test_masked_z_i64_to_2_mask0:1009; CHECK: # %bb.0:1010; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k11011; CHECK-NEXT: vpbroadcastq %rdi, %xmm0 {%k1} {z}1012; CHECK-NEXT: retq1013 %vec = insertelement <2 x i64> undef, i64 %s, i32 01014 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <2 x i32> <i32 0, i32 0>1015 %cmp = icmp eq <2 x i64> %mask, zeroinitializer1016 %res = select <2 x i1> %cmp, <2 x i64> %shuf, <2 x i64> zeroinitializer1017 ret <2 x i64> %res1018}1019define <2 x i64> @test_masked_i64_to_2_mask1(i64 %s, <2 x i64> %default, <2 x i64> %mask) {1020; CHECK-LABEL: test_masked_i64_to_2_mask1:1021; CHECK: # %bb.0:1022; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k11023; CHECK-NEXT: vpbroadcastq %rdi, %xmm0 {%k1}1024; CHECK-NEXT: retq1025 %vec = insertelement <2 x i64> undef, i64 %s, i32 01026 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <2 x i32> <i32 0, i32 0>1027 %cmp = icmp eq <2 x i64> %mask, zeroinitializer1028 %res = select <2 x i1> %cmp, <2 x i64> %shuf, <2 x i64> %default1029 ret <2 x i64> %res1030}1031 1032define <2 x i64> @test_masked_z_i64_to_2_mask1(i64 %s, <2 x i64> %mask) {1033; CHECK-LABEL: test_masked_z_i64_to_2_mask1:1034; CHECK: # %bb.0:1035; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k11036; CHECK-NEXT: vpbroadcastq %rdi, %xmm0 {%k1} {z}1037; CHECK-NEXT: retq1038 %vec = insertelement <2 x i64> undef, i64 %s, i32 01039 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <2 x i32> <i32 0, i32 0>1040 %cmp = icmp eq <2 x i64> %mask, zeroinitializer1041 %res = select <2 x i1> %cmp, <2 x i64> %shuf, <2 x i64> zeroinitializer1042 ret <2 x i64> %res1043}1044define <4 x i64> @test_i64_to_4(i64 %s) {1045; CHECK-LABEL: test_i64_to_4:1046; CHECK: # %bb.0:1047; CHECK-NEXT: vpbroadcastq %rdi, %ymm01048; CHECK-NEXT: retq1049 %vec = insertelement <2 x i64> undef, i64 %s, i32 01050 %res = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1051 ret <4 x i64> %res1052}1053define <4 x i64> @test_masked_i64_to_4_mask0(i64 %s, <4 x i64> %default, <4 x i64> %mask) {1054; CHECK-LABEL: test_masked_i64_to_4_mask0:1055; CHECK: # %bb.0:1056; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k11057; CHECK-NEXT: vpbroadcastq %rdi, %ymm0 {%k1}1058; CHECK-NEXT: retq1059 %vec = insertelement <2 x i64> undef, i64 %s, i32 01060 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1061 %cmp = icmp eq <4 x i64> %mask, zeroinitializer1062 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default1063 ret <4 x i64> %res1064}1065 1066define <4 x i64> @test_masked_z_i64_to_4_mask0(i64 %s, <4 x i64> %mask) {1067; CHECK-LABEL: test_masked_z_i64_to_4_mask0:1068; CHECK: # %bb.0:1069; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k11070; CHECK-NEXT: vpbroadcastq %rdi, %ymm0 {%k1} {z}1071; CHECK-NEXT: retq1072 %vec = insertelement <2 x i64> undef, i64 %s, i32 01073 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1074 %cmp = icmp eq <4 x i64> %mask, zeroinitializer1075 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer1076 ret <4 x i64> %res1077}1078define <4 x i64> @test_masked_i64_to_4_mask1(i64 %s, <4 x i64> %default, <4 x i64> %mask) {1079; CHECK-LABEL: test_masked_i64_to_4_mask1:1080; CHECK: # %bb.0:1081; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k11082; CHECK-NEXT: vpbroadcastq %rdi, %ymm0 {%k1}1083; CHECK-NEXT: retq1084 %vec = insertelement <2 x i64> undef, i64 %s, i32 01085 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1086 %cmp = icmp eq <4 x i64> %mask, zeroinitializer1087 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default1088 ret <4 x i64> %res1089}1090 1091define <4 x i64> @test_masked_z_i64_to_4_mask1(i64 %s, <4 x i64> %mask) {1092; CHECK-LABEL: test_masked_z_i64_to_4_mask1:1093; CHECK: # %bb.0:1094; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k11095; CHECK-NEXT: vpbroadcastq %rdi, %ymm0 {%k1} {z}1096; CHECK-NEXT: retq1097 %vec = insertelement <2 x i64> undef, i64 %s, i32 01098 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1099 %cmp = icmp eq <4 x i64> %mask, zeroinitializer1100 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer1101 ret <4 x i64> %res1102}1103define <4 x i64> @test_masked_i64_to_4_mask2(i64 %s, <4 x i64> %default, <4 x i64> %mask) {1104; CHECK-LABEL: test_masked_i64_to_4_mask2:1105; CHECK: # %bb.0:1106; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k11107; CHECK-NEXT: vpbroadcastq %rdi, %ymm0 {%k1}1108; CHECK-NEXT: retq1109 %vec = insertelement <2 x i64> undef, i64 %s, i32 01110 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1111 %cmp = icmp eq <4 x i64> %mask, zeroinitializer1112 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default1113 ret <4 x i64> %res1114}1115 1116define <4 x i64> @test_masked_z_i64_to_4_mask2(i64 %s, <4 x i64> %mask) {1117; CHECK-LABEL: test_masked_z_i64_to_4_mask2:1118; CHECK: # %bb.0:1119; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k11120; CHECK-NEXT: vpbroadcastq %rdi, %ymm0 {%k1} {z}1121; CHECK-NEXT: retq1122 %vec = insertelement <2 x i64> undef, i64 %s, i32 01123 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1124 %cmp = icmp eq <4 x i64> %mask, zeroinitializer1125 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer1126 ret <4 x i64> %res1127}1128define <4 x i64> @test_masked_i64_to_4_mask3(i64 %s, <4 x i64> %default, <4 x i64> %mask) {1129; CHECK-LABEL: test_masked_i64_to_4_mask3:1130; CHECK: # %bb.0:1131; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k11132; CHECK-NEXT: vpbroadcastq %rdi, %ymm0 {%k1}1133; CHECK-NEXT: retq1134 %vec = insertelement <2 x i64> undef, i64 %s, i32 01135 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1136 %cmp = icmp eq <4 x i64> %mask, zeroinitializer1137 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default1138 ret <4 x i64> %res1139}1140 1141define <4 x i64> @test_masked_z_i64_to_4_mask3(i64 %s, <4 x i64> %mask) {1142; CHECK-LABEL: test_masked_z_i64_to_4_mask3:1143; CHECK: # %bb.0:1144; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k11145; CHECK-NEXT: vpbroadcastq %rdi, %ymm0 {%k1} {z}1146; CHECK-NEXT: retq1147 %vec = insertelement <2 x i64> undef, i64 %s, i32 01148 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1149 %cmp = icmp eq <4 x i64> %mask, zeroinitializer1150 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer1151 ret <4 x i64> %res1152}1153define <8 x i64> @test_i64_to_8(i64 %s) {1154; CHECK-LABEL: test_i64_to_8:1155; CHECK: # %bb.0:1156; CHECK-NEXT: vpbroadcastq %rdi, %zmm01157; CHECK-NEXT: retq1158 %vec = insertelement <2 x i64> undef, i64 %s, i32 01159 %res = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1160 ret <8 x i64> %res1161}1162define <8 x i64> @test_masked_i64_to_8_mask0(i64 %s, <8 x i64> %default, <8 x i64> %mask) {1163; CHECK-LABEL: test_masked_i64_to_8_mask0:1164; CHECK: # %bb.0:1165; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11166; CHECK-NEXT: vpbroadcastq %rdi, %zmm0 {%k1}1167; CHECK-NEXT: retq1168 %vec = insertelement <2 x i64> undef, i64 %s, i32 01169 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1170 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1171 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default1172 ret <8 x i64> %res1173}1174 1175define <8 x i64> @test_masked_z_i64_to_8_mask0(i64 %s, <8 x i64> %mask) {1176; CHECK-LABEL: test_masked_z_i64_to_8_mask0:1177; CHECK: # %bb.0:1178; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11179; CHECK-NEXT: vpbroadcastq %rdi, %zmm0 {%k1} {z}1180; CHECK-NEXT: retq1181 %vec = insertelement <2 x i64> undef, i64 %s, i32 01182 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1183 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1184 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer1185 ret <8 x i64> %res1186}1187define <8 x i64> @test_masked_i64_to_8_mask1(i64 %s, <8 x i64> %default, <8 x i64> %mask) {1188; CHECK-LABEL: test_masked_i64_to_8_mask1:1189; CHECK: # %bb.0:1190; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11191; CHECK-NEXT: vpbroadcastq %rdi, %zmm0 {%k1}1192; CHECK-NEXT: retq1193 %vec = insertelement <2 x i64> undef, i64 %s, i32 01194 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1195 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1196 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default1197 ret <8 x i64> %res1198}1199 1200define <8 x i64> @test_masked_z_i64_to_8_mask1(i64 %s, <8 x i64> %mask) {1201; CHECK-LABEL: test_masked_z_i64_to_8_mask1:1202; CHECK: # %bb.0:1203; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11204; CHECK-NEXT: vpbroadcastq %rdi, %zmm0 {%k1} {z}1205; CHECK-NEXT: retq1206 %vec = insertelement <2 x i64> undef, i64 %s, i32 01207 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1208 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1209 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer1210 ret <8 x i64> %res1211}1212define <8 x i64> @test_masked_i64_to_8_mask2(i64 %s, <8 x i64> %default, <8 x i64> %mask) {1213; CHECK-LABEL: test_masked_i64_to_8_mask2:1214; CHECK: # %bb.0:1215; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11216; CHECK-NEXT: vpbroadcastq %rdi, %zmm0 {%k1}1217; CHECK-NEXT: retq1218 %vec = insertelement <2 x i64> undef, i64 %s, i32 01219 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1220 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1221 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default1222 ret <8 x i64> %res1223}1224 1225define <8 x i64> @test_masked_z_i64_to_8_mask2(i64 %s, <8 x i64> %mask) {1226; CHECK-LABEL: test_masked_z_i64_to_8_mask2:1227; CHECK: # %bb.0:1228; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11229; CHECK-NEXT: vpbroadcastq %rdi, %zmm0 {%k1} {z}1230; CHECK-NEXT: retq1231 %vec = insertelement <2 x i64> undef, i64 %s, i32 01232 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1233 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1234 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer1235 ret <8 x i64> %res1236}1237define <8 x i64> @test_masked_i64_to_8_mask3(i64 %s, <8 x i64> %default, <8 x i64> %mask) {1238; CHECK-LABEL: test_masked_i64_to_8_mask3:1239; CHECK: # %bb.0:1240; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11241; CHECK-NEXT: vpbroadcastq %rdi, %zmm0 {%k1}1242; CHECK-NEXT: retq1243 %vec = insertelement <2 x i64> undef, i64 %s, i32 01244 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1245 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1246 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default1247 ret <8 x i64> %res1248}1249 1250define <8 x i64> @test_masked_z_i64_to_8_mask3(i64 %s, <8 x i64> %mask) {1251; CHECK-LABEL: test_masked_z_i64_to_8_mask3:1252; CHECK: # %bb.0:1253; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11254; CHECK-NEXT: vpbroadcastq %rdi, %zmm0 {%k1} {z}1255; CHECK-NEXT: retq1256 %vec = insertelement <2 x i64> undef, i64 %s, i32 01257 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1258 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1259 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer1260 ret <8 x i64> %res1261}1262define <16 x i8> @test_i8_to_16_mem(ptr %p) {1263; CHECK-LABEL: test_i8_to_16_mem:1264; CHECK: # %bb.0:1265; CHECK-NEXT: vpbroadcastb (%rdi), %xmm01266; CHECK-NEXT: retq1267 %s = load i8, ptr %p1268 %vec = insertelement <2 x i8> undef, i8 %s, i32 01269 %res = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1270 ret <16 x i8> %res1271}1272define <16 x i8> @test_masked_i8_to_16_mem_mask0(ptr %p, <16 x i8> %default, <16 x i8> %mask) {1273; CHECK-LABEL: test_masked_i8_to_16_mem_mask0:1274; CHECK: # %bb.0:1275; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k11276; CHECK-NEXT: vpbroadcastb (%rdi), %xmm0 {%k1}1277; CHECK-NEXT: retq1278 %s = load i8, ptr %p1279 %vec = insertelement <2 x i8> undef, i8 %s, i32 01280 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1281 %cmp = icmp eq <16 x i8> %mask, zeroinitializer1282 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %default1283 ret <16 x i8> %res1284}1285 1286define <16 x i8> @test_masked_z_i8_to_16_mem_mask0(ptr %p, <16 x i8> %mask) {1287; CHECK-LABEL: test_masked_z_i8_to_16_mem_mask0:1288; CHECK: # %bb.0:1289; CHECK-NEXT: vptestnmb %xmm0, %xmm0, %k11290; CHECK-NEXT: vpbroadcastb (%rdi), %xmm0 {%k1} {z}1291; CHECK-NEXT: retq1292 %s = load i8, ptr %p1293 %vec = insertelement <2 x i8> undef, i8 %s, i32 01294 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1295 %cmp = icmp eq <16 x i8> %mask, zeroinitializer1296 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer1297 ret <16 x i8> %res1298}1299define <16 x i8> @test_masked_i8_to_16_mem_mask1(ptr %p, <16 x i8> %default, <16 x i8> %mask) {1300; CHECK-LABEL: test_masked_i8_to_16_mem_mask1:1301; CHECK: # %bb.0:1302; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k11303; CHECK-NEXT: vpbroadcastb (%rdi), %xmm0 {%k1}1304; CHECK-NEXT: retq1305 %s = load i8, ptr %p1306 %vec = insertelement <2 x i8> undef, i8 %s, i32 01307 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1308 %cmp = icmp eq <16 x i8> %mask, zeroinitializer1309 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %default1310 ret <16 x i8> %res1311}1312 1313define <16 x i8> @test_masked_z_i8_to_16_mem_mask1(ptr %p, <16 x i8> %mask) {1314; CHECK-LABEL: test_masked_z_i8_to_16_mem_mask1:1315; CHECK: # %bb.0:1316; CHECK-NEXT: vptestnmb %xmm0, %xmm0, %k11317; CHECK-NEXT: vpbroadcastb (%rdi), %xmm0 {%k1} {z}1318; CHECK-NEXT: retq1319 %s = load i8, ptr %p1320 %vec = insertelement <2 x i8> undef, i8 %s, i32 01321 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1322 %cmp = icmp eq <16 x i8> %mask, zeroinitializer1323 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer1324 ret <16 x i8> %res1325}1326define <16 x i8> @test_masked_i8_to_16_mem_mask2(ptr %p, <16 x i8> %default, <16 x i8> %mask) {1327; CHECK-LABEL: test_masked_i8_to_16_mem_mask2:1328; CHECK: # %bb.0:1329; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k11330; CHECK-NEXT: vpbroadcastb (%rdi), %xmm0 {%k1}1331; CHECK-NEXT: retq1332 %s = load i8, ptr %p1333 %vec = insertelement <2 x i8> undef, i8 %s, i32 01334 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1335 %cmp = icmp eq <16 x i8> %mask, zeroinitializer1336 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %default1337 ret <16 x i8> %res1338}1339 1340define <16 x i8> @test_masked_z_i8_to_16_mem_mask2(ptr %p, <16 x i8> %mask) {1341; CHECK-LABEL: test_masked_z_i8_to_16_mem_mask2:1342; CHECK: # %bb.0:1343; CHECK-NEXT: vptestnmb %xmm0, %xmm0, %k11344; CHECK-NEXT: vpbroadcastb (%rdi), %xmm0 {%k1} {z}1345; CHECK-NEXT: retq1346 %s = load i8, ptr %p1347 %vec = insertelement <2 x i8> undef, i8 %s, i32 01348 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1349 %cmp = icmp eq <16 x i8> %mask, zeroinitializer1350 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer1351 ret <16 x i8> %res1352}1353define <16 x i8> @test_masked_i8_to_16_mem_mask3(ptr %p, <16 x i8> %default, <16 x i8> %mask) {1354; CHECK-LABEL: test_masked_i8_to_16_mem_mask3:1355; CHECK: # %bb.0:1356; CHECK-NEXT: vptestnmb %xmm1, %xmm1, %k11357; CHECK-NEXT: vpbroadcastb (%rdi), %xmm0 {%k1}1358; CHECK-NEXT: retq1359 %s = load i8, ptr %p1360 %vec = insertelement <2 x i8> undef, i8 %s, i32 01361 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1362 %cmp = icmp eq <16 x i8> %mask, zeroinitializer1363 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> %default1364 ret <16 x i8> %res1365}1366 1367define <16 x i8> @test_masked_z_i8_to_16_mem_mask3(ptr %p, <16 x i8> %mask) {1368; CHECK-LABEL: test_masked_z_i8_to_16_mem_mask3:1369; CHECK: # %bb.0:1370; CHECK-NEXT: vptestnmb %xmm0, %xmm0, %k11371; CHECK-NEXT: vpbroadcastb (%rdi), %xmm0 {%k1} {z}1372; CHECK-NEXT: retq1373 %s = load i8, ptr %p1374 %vec = insertelement <2 x i8> undef, i8 %s, i32 01375 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1376 %cmp = icmp eq <16 x i8> %mask, zeroinitializer1377 %res = select <16 x i1> %cmp, <16 x i8> %shuf, <16 x i8> zeroinitializer1378 ret <16 x i8> %res1379}1380define <32 x i8> @test_i8_to_32_mem(ptr %p) {1381; CHECK-LABEL: test_i8_to_32_mem:1382; CHECK: # %bb.0:1383; CHECK-NEXT: vpbroadcastb (%rdi), %ymm01384; CHECK-NEXT: retq1385 %s = load i8, ptr %p1386 %vec = insertelement <2 x i8> undef, i8 %s, i32 01387 %res = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1388 ret <32 x i8> %res1389}1390define <32 x i8> @test_masked_i8_to_32_mem_mask0(ptr %p, <32 x i8> %default, <32 x i8> %mask) {1391; CHECK-LABEL: test_masked_i8_to_32_mem_mask0:1392; CHECK: # %bb.0:1393; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k11394; CHECK-NEXT: vpbroadcastb (%rdi), %ymm0 {%k1}1395; CHECK-NEXT: retq1396 %s = load i8, ptr %p1397 %vec = insertelement <2 x i8> undef, i8 %s, i32 01398 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1399 %cmp = icmp eq <32 x i8> %mask, zeroinitializer1400 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %default1401 ret <32 x i8> %res1402}1403 1404define <32 x i8> @test_masked_z_i8_to_32_mem_mask0(ptr %p, <32 x i8> %mask) {1405; CHECK-LABEL: test_masked_z_i8_to_32_mem_mask0:1406; CHECK: # %bb.0:1407; CHECK-NEXT: vptestnmb %ymm0, %ymm0, %k11408; CHECK-NEXT: vpbroadcastb (%rdi), %ymm0 {%k1} {z}1409; CHECK-NEXT: retq1410 %s = load i8, ptr %p1411 %vec = insertelement <2 x i8> undef, i8 %s, i32 01412 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1413 %cmp = icmp eq <32 x i8> %mask, zeroinitializer1414 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer1415 ret <32 x i8> %res1416}1417define <32 x i8> @test_masked_i8_to_32_mem_mask1(ptr %p, <32 x i8> %default, <32 x i8> %mask) {1418; CHECK-LABEL: test_masked_i8_to_32_mem_mask1:1419; CHECK: # %bb.0:1420; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k11421; CHECK-NEXT: vpbroadcastb (%rdi), %ymm0 {%k1}1422; CHECK-NEXT: retq1423 %s = load i8, ptr %p1424 %vec = insertelement <2 x i8> undef, i8 %s, i32 01425 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1426 %cmp = icmp eq <32 x i8> %mask, zeroinitializer1427 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %default1428 ret <32 x i8> %res1429}1430 1431define <32 x i8> @test_masked_z_i8_to_32_mem_mask1(ptr %p, <32 x i8> %mask) {1432; CHECK-LABEL: test_masked_z_i8_to_32_mem_mask1:1433; CHECK: # %bb.0:1434; CHECK-NEXT: vptestnmb %ymm0, %ymm0, %k11435; CHECK-NEXT: vpbroadcastb (%rdi), %ymm0 {%k1} {z}1436; CHECK-NEXT: retq1437 %s = load i8, ptr %p1438 %vec = insertelement <2 x i8> undef, i8 %s, i32 01439 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1440 %cmp = icmp eq <32 x i8> %mask, zeroinitializer1441 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer1442 ret <32 x i8> %res1443}1444define <32 x i8> @test_masked_i8_to_32_mem_mask2(ptr %p, <32 x i8> %default, <32 x i8> %mask) {1445; CHECK-LABEL: test_masked_i8_to_32_mem_mask2:1446; CHECK: # %bb.0:1447; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k11448; CHECK-NEXT: vpbroadcastb (%rdi), %ymm0 {%k1}1449; CHECK-NEXT: retq1450 %s = load i8, ptr %p1451 %vec = insertelement <2 x i8> undef, i8 %s, i32 01452 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1453 %cmp = icmp eq <32 x i8> %mask, zeroinitializer1454 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %default1455 ret <32 x i8> %res1456}1457 1458define <32 x i8> @test_masked_z_i8_to_32_mem_mask2(ptr %p, <32 x i8> %mask) {1459; CHECK-LABEL: test_masked_z_i8_to_32_mem_mask2:1460; CHECK: # %bb.0:1461; CHECK-NEXT: vptestnmb %ymm0, %ymm0, %k11462; CHECK-NEXT: vpbroadcastb (%rdi), %ymm0 {%k1} {z}1463; CHECK-NEXT: retq1464 %s = load i8, ptr %p1465 %vec = insertelement <2 x i8> undef, i8 %s, i32 01466 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1467 %cmp = icmp eq <32 x i8> %mask, zeroinitializer1468 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer1469 ret <32 x i8> %res1470}1471define <32 x i8> @test_masked_i8_to_32_mem_mask3(ptr %p, <32 x i8> %default, <32 x i8> %mask) {1472; CHECK-LABEL: test_masked_i8_to_32_mem_mask3:1473; CHECK: # %bb.0:1474; CHECK-NEXT: vptestnmb %ymm1, %ymm1, %k11475; CHECK-NEXT: vpbroadcastb (%rdi), %ymm0 {%k1}1476; CHECK-NEXT: retq1477 %s = load i8, ptr %p1478 %vec = insertelement <2 x i8> undef, i8 %s, i32 01479 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1480 %cmp = icmp eq <32 x i8> %mask, zeroinitializer1481 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> %default1482 ret <32 x i8> %res1483}1484 1485define <32 x i8> @test_masked_z_i8_to_32_mem_mask3(ptr %p, <32 x i8> %mask) {1486; CHECK-LABEL: test_masked_z_i8_to_32_mem_mask3:1487; CHECK: # %bb.0:1488; CHECK-NEXT: vptestnmb %ymm0, %ymm0, %k11489; CHECK-NEXT: vpbroadcastb (%rdi), %ymm0 {%k1} {z}1490; CHECK-NEXT: retq1491 %s = load i8, ptr %p1492 %vec = insertelement <2 x i8> undef, i8 %s, i32 01493 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1494 %cmp = icmp eq <32 x i8> %mask, zeroinitializer1495 %res = select <32 x i1> %cmp, <32 x i8> %shuf, <32 x i8> zeroinitializer1496 ret <32 x i8> %res1497}1498define <64 x i8> @test_i8_to_64_mem(ptr %p) {1499; CHECK-LABEL: test_i8_to_64_mem:1500; CHECK: # %bb.0:1501; CHECK-NEXT: vpbroadcastb (%rdi), %zmm01502; CHECK-NEXT: retq1503 %s = load i8, ptr %p1504 %vec = insertelement <2 x i8> undef, i8 %s, i32 01505 %res = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1506 ret <64 x i8> %res1507}1508define <64 x i8> @test_masked_i8_to_64_mem_mask0(ptr %p, <64 x i8> %default, <64 x i8> %mask) {1509; CHECK-LABEL: test_masked_i8_to_64_mem_mask0:1510; CHECK: # %bb.0:1511; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k11512; CHECK-NEXT: vpbroadcastb (%rdi), %zmm0 {%k1}1513; CHECK-NEXT: retq1514 %s = load i8, ptr %p1515 %vec = insertelement <2 x i8> undef, i8 %s, i32 01516 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1517 %cmp = icmp eq <64 x i8> %mask, zeroinitializer1518 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %default1519 ret <64 x i8> %res1520}1521 1522define <64 x i8> @test_masked_z_i8_to_64_mem_mask0(ptr %p, <64 x i8> %mask) {1523; CHECK-LABEL: test_masked_z_i8_to_64_mem_mask0:1524; CHECK: # %bb.0:1525; CHECK-NEXT: vptestnmb %zmm0, %zmm0, %k11526; CHECK-NEXT: vpbroadcastb (%rdi), %zmm0 {%k1} {z}1527; CHECK-NEXT: retq1528 %s = load i8, ptr %p1529 %vec = insertelement <2 x i8> undef, i8 %s, i32 01530 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1531 %cmp = icmp eq <64 x i8> %mask, zeroinitializer1532 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer1533 ret <64 x i8> %res1534}1535define <64 x i8> @test_masked_i8_to_64_mem_mask1(ptr %p, <64 x i8> %default, <64 x i8> %mask) {1536; CHECK-LABEL: test_masked_i8_to_64_mem_mask1:1537; CHECK: # %bb.0:1538; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k11539; CHECK-NEXT: vpbroadcastb (%rdi), %zmm0 {%k1}1540; CHECK-NEXT: retq1541 %s = load i8, ptr %p1542 %vec = insertelement <2 x i8> undef, i8 %s, i32 01543 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1544 %cmp = icmp eq <64 x i8> %mask, zeroinitializer1545 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %default1546 ret <64 x i8> %res1547}1548 1549define <64 x i8> @test_masked_z_i8_to_64_mem_mask1(ptr %p, <64 x i8> %mask) {1550; CHECK-LABEL: test_masked_z_i8_to_64_mem_mask1:1551; CHECK: # %bb.0:1552; CHECK-NEXT: vptestnmb %zmm0, %zmm0, %k11553; CHECK-NEXT: vpbroadcastb (%rdi), %zmm0 {%k1} {z}1554; CHECK-NEXT: retq1555 %s = load i8, ptr %p1556 %vec = insertelement <2 x i8> undef, i8 %s, i32 01557 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1558 %cmp = icmp eq <64 x i8> %mask, zeroinitializer1559 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer1560 ret <64 x i8> %res1561}1562define <64 x i8> @test_masked_i8_to_64_mem_mask2(ptr %p, <64 x i8> %default, <64 x i8> %mask) {1563; CHECK-LABEL: test_masked_i8_to_64_mem_mask2:1564; CHECK: # %bb.0:1565; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k11566; CHECK-NEXT: vpbroadcastb (%rdi), %zmm0 {%k1}1567; CHECK-NEXT: retq1568 %s = load i8, ptr %p1569 %vec = insertelement <2 x i8> undef, i8 %s, i32 01570 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1571 %cmp = icmp eq <64 x i8> %mask, zeroinitializer1572 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %default1573 ret <64 x i8> %res1574}1575 1576define <64 x i8> @test_masked_z_i8_to_64_mem_mask2(ptr %p, <64 x i8> %mask) {1577; CHECK-LABEL: test_masked_z_i8_to_64_mem_mask2:1578; CHECK: # %bb.0:1579; CHECK-NEXT: vptestnmb %zmm0, %zmm0, %k11580; CHECK-NEXT: vpbroadcastb (%rdi), %zmm0 {%k1} {z}1581; CHECK-NEXT: retq1582 %s = load i8, ptr %p1583 %vec = insertelement <2 x i8> undef, i8 %s, i32 01584 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1585 %cmp = icmp eq <64 x i8> %mask, zeroinitializer1586 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer1587 ret <64 x i8> %res1588}1589define <64 x i8> @test_masked_i8_to_64_mem_mask3(ptr %p, <64 x i8> %default, <64 x i8> %mask) {1590; CHECK-LABEL: test_masked_i8_to_64_mem_mask3:1591; CHECK: # %bb.0:1592; CHECK-NEXT: vptestnmb %zmm1, %zmm1, %k11593; CHECK-NEXT: vpbroadcastb (%rdi), %zmm0 {%k1}1594; CHECK-NEXT: retq1595 %s = load i8, ptr %p1596 %vec = insertelement <2 x i8> undef, i8 %s, i32 01597 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1598 %cmp = icmp eq <64 x i8> %mask, zeroinitializer1599 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> %default1600 ret <64 x i8> %res1601}1602 1603define <64 x i8> @test_masked_z_i8_to_64_mem_mask3(ptr %p, <64 x i8> %mask) {1604; CHECK-LABEL: test_masked_z_i8_to_64_mem_mask3:1605; CHECK: # %bb.0:1606; CHECK-NEXT: vptestnmb %zmm0, %zmm0, %k11607; CHECK-NEXT: vpbroadcastb (%rdi), %zmm0 {%k1} {z}1608; CHECK-NEXT: retq1609 %s = load i8, ptr %p1610 %vec = insertelement <2 x i8> undef, i8 %s, i32 01611 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <64 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1612 %cmp = icmp eq <64 x i8> %mask, zeroinitializer1613 %res = select <64 x i1> %cmp, <64 x i8> %shuf, <64 x i8> zeroinitializer1614 ret <64 x i8> %res1615}1616define <8 x i16> @test_i16_to_8_mem(ptr %p) {1617; CHECK-LABEL: test_i16_to_8_mem:1618; CHECK: # %bb.0:1619; CHECK-NEXT: vpbroadcastw (%rdi), %xmm01620; CHECK-NEXT: retq1621 %s = load i16, ptr %p1622 %vec = insertelement <2 x i16> undef, i16 %s, i32 01623 %res = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1624 ret <8 x i16> %res1625}1626define <8 x i16> @test_masked_i16_to_8_mem_mask0(ptr %p, <8 x i16> %default, <8 x i16> %mask) {1627; CHECK-LABEL: test_masked_i16_to_8_mem_mask0:1628; CHECK: # %bb.0:1629; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k11630; CHECK-NEXT: vpbroadcastw (%rdi), %xmm0 {%k1}1631; CHECK-NEXT: retq1632 %s = load i16, ptr %p1633 %vec = insertelement <2 x i16> undef, i16 %s, i32 01634 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1635 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1636 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %default1637 ret <8 x i16> %res1638}1639 1640define <8 x i16> @test_masked_z_i16_to_8_mem_mask0(ptr %p, <8 x i16> %mask) {1641; CHECK-LABEL: test_masked_z_i16_to_8_mem_mask0:1642; CHECK: # %bb.0:1643; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k11644; CHECK-NEXT: vpbroadcastw (%rdi), %xmm0 {%k1} {z}1645; CHECK-NEXT: retq1646 %s = load i16, ptr %p1647 %vec = insertelement <2 x i16> undef, i16 %s, i32 01648 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1649 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1650 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer1651 ret <8 x i16> %res1652}1653define <8 x i16> @test_masked_i16_to_8_mem_mask1(ptr %p, <8 x i16> %default, <8 x i16> %mask) {1654; CHECK-LABEL: test_masked_i16_to_8_mem_mask1:1655; CHECK: # %bb.0:1656; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k11657; CHECK-NEXT: vpbroadcastw (%rdi), %xmm0 {%k1}1658; CHECK-NEXT: retq1659 %s = load i16, ptr %p1660 %vec = insertelement <2 x i16> undef, i16 %s, i32 01661 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1662 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1663 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %default1664 ret <8 x i16> %res1665}1666 1667define <8 x i16> @test_masked_z_i16_to_8_mem_mask1(ptr %p, <8 x i16> %mask) {1668; CHECK-LABEL: test_masked_z_i16_to_8_mem_mask1:1669; CHECK: # %bb.0:1670; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k11671; CHECK-NEXT: vpbroadcastw (%rdi), %xmm0 {%k1} {z}1672; CHECK-NEXT: retq1673 %s = load i16, ptr %p1674 %vec = insertelement <2 x i16> undef, i16 %s, i32 01675 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1676 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1677 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer1678 ret <8 x i16> %res1679}1680define <8 x i16> @test_masked_i16_to_8_mem_mask2(ptr %p, <8 x i16> %default, <8 x i16> %mask) {1681; CHECK-LABEL: test_masked_i16_to_8_mem_mask2:1682; CHECK: # %bb.0:1683; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k11684; CHECK-NEXT: vpbroadcastw (%rdi), %xmm0 {%k1}1685; CHECK-NEXT: retq1686 %s = load i16, ptr %p1687 %vec = insertelement <2 x i16> undef, i16 %s, i32 01688 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1689 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1690 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %default1691 ret <8 x i16> %res1692}1693 1694define <8 x i16> @test_masked_z_i16_to_8_mem_mask2(ptr %p, <8 x i16> %mask) {1695; CHECK-LABEL: test_masked_z_i16_to_8_mem_mask2:1696; CHECK: # %bb.0:1697; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k11698; CHECK-NEXT: vpbroadcastw (%rdi), %xmm0 {%k1} {z}1699; CHECK-NEXT: retq1700 %s = load i16, ptr %p1701 %vec = insertelement <2 x i16> undef, i16 %s, i32 01702 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1703 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1704 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer1705 ret <8 x i16> %res1706}1707define <8 x i16> @test_masked_i16_to_8_mem_mask3(ptr %p, <8 x i16> %default, <8 x i16> %mask) {1708; CHECK-LABEL: test_masked_i16_to_8_mem_mask3:1709; CHECK: # %bb.0:1710; CHECK-NEXT: vptestnmw %xmm1, %xmm1, %k11711; CHECK-NEXT: vpbroadcastw (%rdi), %xmm0 {%k1}1712; CHECK-NEXT: retq1713 %s = load i16, ptr %p1714 %vec = insertelement <2 x i16> undef, i16 %s, i32 01715 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1716 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1717 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> %default1718 ret <8 x i16> %res1719}1720 1721define <8 x i16> @test_masked_z_i16_to_8_mem_mask3(ptr %p, <8 x i16> %mask) {1722; CHECK-LABEL: test_masked_z_i16_to_8_mem_mask3:1723; CHECK: # %bb.0:1724; CHECK-NEXT: vptestnmw %xmm0, %xmm0, %k11725; CHECK-NEXT: vpbroadcastw (%rdi), %xmm0 {%k1} {z}1726; CHECK-NEXT: retq1727 %s = load i16, ptr %p1728 %vec = insertelement <2 x i16> undef, i16 %s, i32 01729 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1730 %cmp = icmp eq <8 x i16> %mask, zeroinitializer1731 %res = select <8 x i1> %cmp, <8 x i16> %shuf, <8 x i16> zeroinitializer1732 ret <8 x i16> %res1733}1734define <16 x i16> @test_i16_to_16_mem(ptr %p) {1735; CHECK-LABEL: test_i16_to_16_mem:1736; CHECK: # %bb.0:1737; CHECK-NEXT: vpbroadcastw (%rdi), %ymm01738; CHECK-NEXT: retq1739 %s = load i16, ptr %p1740 %vec = insertelement <2 x i16> undef, i16 %s, i32 01741 %res = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1742 ret <16 x i16> %res1743}1744define <16 x i16> @test_masked_i16_to_16_mem_mask0(ptr %p, <16 x i16> %default, <16 x i16> %mask) {1745; CHECK-LABEL: test_masked_i16_to_16_mem_mask0:1746; CHECK: # %bb.0:1747; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11748; CHECK-NEXT: vpbroadcastw (%rdi), %ymm0 {%k1}1749; CHECK-NEXT: retq1750 %s = load i16, ptr %p1751 %vec = insertelement <2 x i16> undef, i16 %s, i32 01752 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1753 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1754 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %default1755 ret <16 x i16> %res1756}1757 1758define <16 x i16> @test_masked_z_i16_to_16_mem_mask0(ptr %p, <16 x i16> %mask) {1759; CHECK-LABEL: test_masked_z_i16_to_16_mem_mask0:1760; CHECK: # %bb.0:1761; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k11762; CHECK-NEXT: vpbroadcastw (%rdi), %ymm0 {%k1} {z}1763; CHECK-NEXT: retq1764 %s = load i16, ptr %p1765 %vec = insertelement <2 x i16> undef, i16 %s, i32 01766 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1767 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1768 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1769 ret <16 x i16> %res1770}1771define <16 x i16> @test_masked_i16_to_16_mem_mask1(ptr %p, <16 x i16> %default, <16 x i16> %mask) {1772; CHECK-LABEL: test_masked_i16_to_16_mem_mask1:1773; CHECK: # %bb.0:1774; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11775; CHECK-NEXT: vpbroadcastw (%rdi), %ymm0 {%k1}1776; CHECK-NEXT: retq1777 %s = load i16, ptr %p1778 %vec = insertelement <2 x i16> undef, i16 %s, i32 01779 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1780 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1781 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %default1782 ret <16 x i16> %res1783}1784 1785define <16 x i16> @test_masked_z_i16_to_16_mem_mask1(ptr %p, <16 x i16> %mask) {1786; CHECK-LABEL: test_masked_z_i16_to_16_mem_mask1:1787; CHECK: # %bb.0:1788; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k11789; CHECK-NEXT: vpbroadcastw (%rdi), %ymm0 {%k1} {z}1790; CHECK-NEXT: retq1791 %s = load i16, ptr %p1792 %vec = insertelement <2 x i16> undef, i16 %s, i32 01793 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1794 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1795 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1796 ret <16 x i16> %res1797}1798define <16 x i16> @test_masked_i16_to_16_mem_mask2(ptr %p, <16 x i16> %default, <16 x i16> %mask) {1799; CHECK-LABEL: test_masked_i16_to_16_mem_mask2:1800; CHECK: # %bb.0:1801; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11802; CHECK-NEXT: vpbroadcastw (%rdi), %ymm0 {%k1}1803; CHECK-NEXT: retq1804 %s = load i16, ptr %p1805 %vec = insertelement <2 x i16> undef, i16 %s, i32 01806 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1807 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1808 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %default1809 ret <16 x i16> %res1810}1811 1812define <16 x i16> @test_masked_z_i16_to_16_mem_mask2(ptr %p, <16 x i16> %mask) {1813; CHECK-LABEL: test_masked_z_i16_to_16_mem_mask2:1814; CHECK: # %bb.0:1815; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k11816; CHECK-NEXT: vpbroadcastw (%rdi), %ymm0 {%k1} {z}1817; CHECK-NEXT: retq1818 %s = load i16, ptr %p1819 %vec = insertelement <2 x i16> undef, i16 %s, i32 01820 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1821 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1822 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1823 ret <16 x i16> %res1824}1825define <16 x i16> @test_masked_i16_to_16_mem_mask3(ptr %p, <16 x i16> %default, <16 x i16> %mask) {1826; CHECK-LABEL: test_masked_i16_to_16_mem_mask3:1827; CHECK: # %bb.0:1828; CHECK-NEXT: vptestnmw %ymm1, %ymm1, %k11829; CHECK-NEXT: vpbroadcastw (%rdi), %ymm0 {%k1}1830; CHECK-NEXT: retq1831 %s = load i16, ptr %p1832 %vec = insertelement <2 x i16> undef, i16 %s, i32 01833 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1834 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1835 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> %default1836 ret <16 x i16> %res1837}1838 1839define <16 x i16> @test_masked_z_i16_to_16_mem_mask3(ptr %p, <16 x i16> %mask) {1840; CHECK-LABEL: test_masked_z_i16_to_16_mem_mask3:1841; CHECK: # %bb.0:1842; CHECK-NEXT: vptestnmw %ymm0, %ymm0, %k11843; CHECK-NEXT: vpbroadcastw (%rdi), %ymm0 {%k1} {z}1844; CHECK-NEXT: retq1845 %s = load i16, ptr %p1846 %vec = insertelement <2 x i16> undef, i16 %s, i32 01847 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1848 %cmp = icmp eq <16 x i16> %mask, zeroinitializer1849 %res = select <16 x i1> %cmp, <16 x i16> %shuf, <16 x i16> zeroinitializer1850 ret <16 x i16> %res1851}1852define <32 x i16> @test_i16_to_32_mem(ptr %p) {1853; CHECK-LABEL: test_i16_to_32_mem:1854; CHECK: # %bb.0:1855; CHECK-NEXT: vpbroadcastw (%rdi), %zmm01856; CHECK-NEXT: retq1857 %s = load i16, ptr %p1858 %vec = insertelement <2 x i16> undef, i16 %s, i32 01859 %res = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1860 ret <32 x i16> %res1861}1862define <32 x i16> @test_masked_i16_to_32_mem_mask0(ptr %p, <32 x i16> %default, <32 x i16> %mask) {1863; CHECK-LABEL: test_masked_i16_to_32_mem_mask0:1864; CHECK: # %bb.0:1865; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11866; CHECK-NEXT: vpbroadcastw (%rdi), %zmm0 {%k1}1867; CHECK-NEXT: retq1868 %s = load i16, ptr %p1869 %vec = insertelement <2 x i16> undef, i16 %s, i32 01870 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1871 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1872 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %default1873 ret <32 x i16> %res1874}1875 1876define <32 x i16> @test_masked_z_i16_to_32_mem_mask0(ptr %p, <32 x i16> %mask) {1877; CHECK-LABEL: test_masked_z_i16_to_32_mem_mask0:1878; CHECK: # %bb.0:1879; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k11880; CHECK-NEXT: vpbroadcastw (%rdi), %zmm0 {%k1} {z}1881; CHECK-NEXT: retq1882 %s = load i16, ptr %p1883 %vec = insertelement <2 x i16> undef, i16 %s, i32 01884 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1885 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1886 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1887 ret <32 x i16> %res1888}1889define <32 x i16> @test_masked_i16_to_32_mem_mask1(ptr %p, <32 x i16> %default, <32 x i16> %mask) {1890; CHECK-LABEL: test_masked_i16_to_32_mem_mask1:1891; CHECK: # %bb.0:1892; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11893; CHECK-NEXT: vpbroadcastw (%rdi), %zmm0 {%k1}1894; CHECK-NEXT: retq1895 %s = load i16, ptr %p1896 %vec = insertelement <2 x i16> undef, i16 %s, i32 01897 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1898 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1899 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %default1900 ret <32 x i16> %res1901}1902 1903define <32 x i16> @test_masked_z_i16_to_32_mem_mask1(ptr %p, <32 x i16> %mask) {1904; CHECK-LABEL: test_masked_z_i16_to_32_mem_mask1:1905; CHECK: # %bb.0:1906; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k11907; CHECK-NEXT: vpbroadcastw (%rdi), %zmm0 {%k1} {z}1908; CHECK-NEXT: retq1909 %s = load i16, ptr %p1910 %vec = insertelement <2 x i16> undef, i16 %s, i32 01911 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1912 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1913 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1914 ret <32 x i16> %res1915}1916define <32 x i16> @test_masked_i16_to_32_mem_mask2(ptr %p, <32 x i16> %default, <32 x i16> %mask) {1917; CHECK-LABEL: test_masked_i16_to_32_mem_mask2:1918; CHECK: # %bb.0:1919; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11920; CHECK-NEXT: vpbroadcastw (%rdi), %zmm0 {%k1}1921; CHECK-NEXT: retq1922 %s = load i16, ptr %p1923 %vec = insertelement <2 x i16> undef, i16 %s, i32 01924 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1925 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1926 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %default1927 ret <32 x i16> %res1928}1929 1930define <32 x i16> @test_masked_z_i16_to_32_mem_mask2(ptr %p, <32 x i16> %mask) {1931; CHECK-LABEL: test_masked_z_i16_to_32_mem_mask2:1932; CHECK: # %bb.0:1933; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k11934; CHECK-NEXT: vpbroadcastw (%rdi), %zmm0 {%k1} {z}1935; CHECK-NEXT: retq1936 %s = load i16, ptr %p1937 %vec = insertelement <2 x i16> undef, i16 %s, i32 01938 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1939 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1940 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1941 ret <32 x i16> %res1942}1943define <32 x i16> @test_masked_i16_to_32_mem_mask3(ptr %p, <32 x i16> %default, <32 x i16> %mask) {1944; CHECK-LABEL: test_masked_i16_to_32_mem_mask3:1945; CHECK: # %bb.0:1946; CHECK-NEXT: vptestnmw %zmm1, %zmm1, %k11947; CHECK-NEXT: vpbroadcastw (%rdi), %zmm0 {%k1}1948; CHECK-NEXT: retq1949 %s = load i16, ptr %p1950 %vec = insertelement <2 x i16> undef, i16 %s, i32 01951 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1952 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1953 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> %default1954 ret <32 x i16> %res1955}1956 1957define <32 x i16> @test_masked_z_i16_to_32_mem_mask3(ptr %p, <32 x i16> %mask) {1958; CHECK-LABEL: test_masked_z_i16_to_32_mem_mask3:1959; CHECK: # %bb.0:1960; CHECK-NEXT: vptestnmw %zmm0, %zmm0, %k11961; CHECK-NEXT: vpbroadcastw (%rdi), %zmm0 {%k1} {z}1962; CHECK-NEXT: retq1963 %s = load i16, ptr %p1964 %vec = insertelement <2 x i16> undef, i16 %s, i32 01965 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <32 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1966 %cmp = icmp eq <32 x i16> %mask, zeroinitializer1967 %res = select <32 x i1> %cmp, <32 x i16> %shuf, <32 x i16> zeroinitializer1968 ret <32 x i16> %res1969}1970define <4 x i32> @test_i32_to_4_mem(ptr %p) {1971; CHECK-LABEL: test_i32_to_4_mem:1972; CHECK: # %bb.0:1973; CHECK-NEXT: vbroadcastss (%rdi), %xmm01974; CHECK-NEXT: retq1975 %s = load i32, ptr %p1976 %vec = insertelement <2 x i32> undef, i32 %s, i32 01977 %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1978 ret <4 x i32> %res1979}1980define <4 x i32> @test_masked_i32_to_4_mem_mask0(ptr %p, <4 x i32> %default, <4 x i32> %mask) {1981; CHECK-LABEL: test_masked_i32_to_4_mem_mask0:1982; CHECK: # %bb.0:1983; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k11984; CHECK-NEXT: vpbroadcastd (%rdi), %xmm0 {%k1}1985; CHECK-NEXT: retq1986 %s = load i32, ptr %p1987 %vec = insertelement <2 x i32> undef, i32 %s, i32 01988 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>1989 %cmp = icmp eq <4 x i32> %mask, zeroinitializer1990 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default1991 ret <4 x i32> %res1992}1993 1994define <4 x i32> @test_masked_z_i32_to_4_mem_mask0(ptr %p, <4 x i32> %mask) {1995; CHECK-LABEL: test_masked_z_i32_to_4_mem_mask0:1996; CHECK: # %bb.0:1997; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k11998; CHECK-NEXT: vpbroadcastd (%rdi), %xmm0 {%k1} {z}1999; CHECK-NEXT: retq2000 %s = load i32, ptr %p2001 %vec = insertelement <2 x i32> undef, i32 %s, i32 02002 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2003 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2004 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer2005 ret <4 x i32> %res2006}2007define <4 x i32> @test_masked_i32_to_4_mem_mask1(ptr %p, <4 x i32> %default, <4 x i32> %mask) {2008; CHECK-LABEL: test_masked_i32_to_4_mem_mask1:2009; CHECK: # %bb.0:2010; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12011; CHECK-NEXT: vpbroadcastd (%rdi), %xmm0 {%k1}2012; CHECK-NEXT: retq2013 %s = load i32, ptr %p2014 %vec = insertelement <2 x i32> undef, i32 %s, i32 02015 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2016 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2017 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default2018 ret <4 x i32> %res2019}2020 2021define <4 x i32> @test_masked_z_i32_to_4_mem_mask1(ptr %p, <4 x i32> %mask) {2022; CHECK-LABEL: test_masked_z_i32_to_4_mem_mask1:2023; CHECK: # %bb.0:2024; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k12025; CHECK-NEXT: vpbroadcastd (%rdi), %xmm0 {%k1} {z}2026; CHECK-NEXT: retq2027 %s = load i32, ptr %p2028 %vec = insertelement <2 x i32> undef, i32 %s, i32 02029 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2030 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2031 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer2032 ret <4 x i32> %res2033}2034define <4 x i32> @test_masked_i32_to_4_mem_mask2(ptr %p, <4 x i32> %default, <4 x i32> %mask) {2035; CHECK-LABEL: test_masked_i32_to_4_mem_mask2:2036; CHECK: # %bb.0:2037; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12038; CHECK-NEXT: vpbroadcastd (%rdi), %xmm0 {%k1}2039; CHECK-NEXT: retq2040 %s = load i32, ptr %p2041 %vec = insertelement <2 x i32> undef, i32 %s, i32 02042 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2043 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2044 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default2045 ret <4 x i32> %res2046}2047 2048define <4 x i32> @test_masked_z_i32_to_4_mem_mask2(ptr %p, <4 x i32> %mask) {2049; CHECK-LABEL: test_masked_z_i32_to_4_mem_mask2:2050; CHECK: # %bb.0:2051; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k12052; CHECK-NEXT: vpbroadcastd (%rdi), %xmm0 {%k1} {z}2053; CHECK-NEXT: retq2054 %s = load i32, ptr %p2055 %vec = insertelement <2 x i32> undef, i32 %s, i32 02056 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2057 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2058 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer2059 ret <4 x i32> %res2060}2061define <4 x i32> @test_masked_i32_to_4_mem_mask3(ptr %p, <4 x i32> %default, <4 x i32> %mask) {2062; CHECK-LABEL: test_masked_i32_to_4_mem_mask3:2063; CHECK: # %bb.0:2064; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k12065; CHECK-NEXT: vpbroadcastd (%rdi), %xmm0 {%k1}2066; CHECK-NEXT: retq2067 %s = load i32, ptr %p2068 %vec = insertelement <2 x i32> undef, i32 %s, i32 02069 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2070 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2071 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default2072 ret <4 x i32> %res2073}2074 2075define <4 x i32> @test_masked_z_i32_to_4_mem_mask3(ptr %p, <4 x i32> %mask) {2076; CHECK-LABEL: test_masked_z_i32_to_4_mem_mask3:2077; CHECK: # %bb.0:2078; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k12079; CHECK-NEXT: vpbroadcastd (%rdi), %xmm0 {%k1} {z}2080; CHECK-NEXT: retq2081 %s = load i32, ptr %p2082 %vec = insertelement <2 x i32> undef, i32 %s, i32 02083 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2084 %cmp = icmp eq <4 x i32> %mask, zeroinitializer2085 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer2086 ret <4 x i32> %res2087}2088define <8 x i32> @test_i32_to_8_mem(ptr %p) {2089; CHECK-LABEL: test_i32_to_8_mem:2090; CHECK: # %bb.0:2091; CHECK-NEXT: vbroadcastss (%rdi), %ymm02092; CHECK-NEXT: retq2093 %s = load i32, ptr %p2094 %vec = insertelement <2 x i32> undef, i32 %s, i32 02095 %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2096 ret <8 x i32> %res2097}2098define <8 x i32> @test_masked_i32_to_8_mem_mask0(ptr %p, <8 x i32> %default, <8 x i32> %mask) {2099; CHECK-LABEL: test_masked_i32_to_8_mem_mask0:2100; CHECK: # %bb.0:2101; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12102; CHECK-NEXT: vpbroadcastd (%rdi), %ymm0 {%k1}2103; CHECK-NEXT: retq2104 %s = load i32, ptr %p2105 %vec = insertelement <2 x i32> undef, i32 %s, i32 02106 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2107 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2108 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default2109 ret <8 x i32> %res2110}2111 2112define <8 x i32> @test_masked_z_i32_to_8_mem_mask0(ptr %p, <8 x i32> %mask) {2113; CHECK-LABEL: test_masked_z_i32_to_8_mem_mask0:2114; CHECK: # %bb.0:2115; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k12116; CHECK-NEXT: vpbroadcastd (%rdi), %ymm0 {%k1} {z}2117; CHECK-NEXT: retq2118 %s = load i32, ptr %p2119 %vec = insertelement <2 x i32> undef, i32 %s, i32 02120 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2121 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2122 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer2123 ret <8 x i32> %res2124}2125define <8 x i32> @test_masked_i32_to_8_mem_mask1(ptr %p, <8 x i32> %default, <8 x i32> %mask) {2126; CHECK-LABEL: test_masked_i32_to_8_mem_mask1:2127; CHECK: # %bb.0:2128; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12129; CHECK-NEXT: vpbroadcastd (%rdi), %ymm0 {%k1}2130; CHECK-NEXT: retq2131 %s = load i32, ptr %p2132 %vec = insertelement <2 x i32> undef, i32 %s, i32 02133 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2134 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2135 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default2136 ret <8 x i32> %res2137}2138 2139define <8 x i32> @test_masked_z_i32_to_8_mem_mask1(ptr %p, <8 x i32> %mask) {2140; CHECK-LABEL: test_masked_z_i32_to_8_mem_mask1:2141; CHECK: # %bb.0:2142; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k12143; CHECK-NEXT: vpbroadcastd (%rdi), %ymm0 {%k1} {z}2144; CHECK-NEXT: retq2145 %s = load i32, ptr %p2146 %vec = insertelement <2 x i32> undef, i32 %s, i32 02147 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2148 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2149 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer2150 ret <8 x i32> %res2151}2152define <8 x i32> @test_masked_i32_to_8_mem_mask2(ptr %p, <8 x i32> %default, <8 x i32> %mask) {2153; CHECK-LABEL: test_masked_i32_to_8_mem_mask2:2154; CHECK: # %bb.0:2155; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12156; CHECK-NEXT: vpbroadcastd (%rdi), %ymm0 {%k1}2157; CHECK-NEXT: retq2158 %s = load i32, ptr %p2159 %vec = insertelement <2 x i32> undef, i32 %s, i32 02160 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2161 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2162 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default2163 ret <8 x i32> %res2164}2165 2166define <8 x i32> @test_masked_z_i32_to_8_mem_mask2(ptr %p, <8 x i32> %mask) {2167; CHECK-LABEL: test_masked_z_i32_to_8_mem_mask2:2168; CHECK: # %bb.0:2169; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k12170; CHECK-NEXT: vpbroadcastd (%rdi), %ymm0 {%k1} {z}2171; CHECK-NEXT: retq2172 %s = load i32, ptr %p2173 %vec = insertelement <2 x i32> undef, i32 %s, i32 02174 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2175 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2176 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer2177 ret <8 x i32> %res2178}2179define <8 x i32> @test_masked_i32_to_8_mem_mask3(ptr %p, <8 x i32> %default, <8 x i32> %mask) {2180; CHECK-LABEL: test_masked_i32_to_8_mem_mask3:2181; CHECK: # %bb.0:2182; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k12183; CHECK-NEXT: vpbroadcastd (%rdi), %ymm0 {%k1}2184; CHECK-NEXT: retq2185 %s = load i32, ptr %p2186 %vec = insertelement <2 x i32> undef, i32 %s, i32 02187 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2188 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2189 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default2190 ret <8 x i32> %res2191}2192 2193define <8 x i32> @test_masked_z_i32_to_8_mem_mask3(ptr %p, <8 x i32> %mask) {2194; CHECK-LABEL: test_masked_z_i32_to_8_mem_mask3:2195; CHECK: # %bb.0:2196; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k12197; CHECK-NEXT: vpbroadcastd (%rdi), %ymm0 {%k1} {z}2198; CHECK-NEXT: retq2199 %s = load i32, ptr %p2200 %vec = insertelement <2 x i32> undef, i32 %s, i32 02201 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2202 %cmp = icmp eq <8 x i32> %mask, zeroinitializer2203 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer2204 ret <8 x i32> %res2205}2206define <16 x i32> @test_i32_to_16_mem(ptr %p) {2207; CHECK-LABEL: test_i32_to_16_mem:2208; CHECK: # %bb.0:2209; CHECK-NEXT: vbroadcastss (%rdi), %zmm02210; CHECK-NEXT: retq2211 %s = load i32, ptr %p2212 %vec = insertelement <2 x i32> undef, i32 %s, i32 02213 %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2214 ret <16 x i32> %res2215}2216define <16 x i32> @test_masked_i32_to_16_mem_mask0(ptr %p, <16 x i32> %default, <16 x i32> %mask) {2217; CHECK-LABEL: test_masked_i32_to_16_mem_mask0:2218; CHECK: # %bb.0:2219; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12220; CHECK-NEXT: vpbroadcastd (%rdi), %zmm0 {%k1}2221; CHECK-NEXT: retq2222 %s = load i32, ptr %p2223 %vec = insertelement <2 x i32> undef, i32 %s, i32 02224 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2225 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2226 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default2227 ret <16 x i32> %res2228}2229 2230define <16 x i32> @test_masked_z_i32_to_16_mem_mask0(ptr %p, <16 x i32> %mask) {2231; CHECK-LABEL: test_masked_z_i32_to_16_mem_mask0:2232; CHECK: # %bb.0:2233; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k12234; CHECK-NEXT: vpbroadcastd (%rdi), %zmm0 {%k1} {z}2235; CHECK-NEXT: retq2236 %s = load i32, ptr %p2237 %vec = insertelement <2 x i32> undef, i32 %s, i32 02238 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2239 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2240 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer2241 ret <16 x i32> %res2242}2243define <16 x i32> @test_masked_i32_to_16_mem_mask1(ptr %p, <16 x i32> %default, <16 x i32> %mask) {2244; CHECK-LABEL: test_masked_i32_to_16_mem_mask1:2245; CHECK: # %bb.0:2246; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12247; CHECK-NEXT: vpbroadcastd (%rdi), %zmm0 {%k1}2248; CHECK-NEXT: retq2249 %s = load i32, ptr %p2250 %vec = insertelement <2 x i32> undef, i32 %s, i32 02251 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2252 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2253 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default2254 ret <16 x i32> %res2255}2256 2257define <16 x i32> @test_masked_z_i32_to_16_mem_mask1(ptr %p, <16 x i32> %mask) {2258; CHECK-LABEL: test_masked_z_i32_to_16_mem_mask1:2259; CHECK: # %bb.0:2260; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k12261; CHECK-NEXT: vpbroadcastd (%rdi), %zmm0 {%k1} {z}2262; CHECK-NEXT: retq2263 %s = load i32, ptr %p2264 %vec = insertelement <2 x i32> undef, i32 %s, i32 02265 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2266 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2267 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer2268 ret <16 x i32> %res2269}2270define <16 x i32> @test_masked_i32_to_16_mem_mask2(ptr %p, <16 x i32> %default, <16 x i32> %mask) {2271; CHECK-LABEL: test_masked_i32_to_16_mem_mask2:2272; CHECK: # %bb.0:2273; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12274; CHECK-NEXT: vpbroadcastd (%rdi), %zmm0 {%k1}2275; CHECK-NEXT: retq2276 %s = load i32, ptr %p2277 %vec = insertelement <2 x i32> undef, i32 %s, i32 02278 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2279 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2280 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default2281 ret <16 x i32> %res2282}2283 2284define <16 x i32> @test_masked_z_i32_to_16_mem_mask2(ptr %p, <16 x i32> %mask) {2285; CHECK-LABEL: test_masked_z_i32_to_16_mem_mask2:2286; CHECK: # %bb.0:2287; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k12288; CHECK-NEXT: vpbroadcastd (%rdi), %zmm0 {%k1} {z}2289; CHECK-NEXT: retq2290 %s = load i32, ptr %p2291 %vec = insertelement <2 x i32> undef, i32 %s, i32 02292 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2293 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2294 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer2295 ret <16 x i32> %res2296}2297define <16 x i32> @test_masked_i32_to_16_mem_mask3(ptr %p, <16 x i32> %default, <16 x i32> %mask) {2298; CHECK-LABEL: test_masked_i32_to_16_mem_mask3:2299; CHECK: # %bb.0:2300; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k12301; CHECK-NEXT: vpbroadcastd (%rdi), %zmm0 {%k1}2302; CHECK-NEXT: retq2303 %s = load i32, ptr %p2304 %vec = insertelement <2 x i32> undef, i32 %s, i32 02305 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2306 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2307 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default2308 ret <16 x i32> %res2309}2310 2311define <16 x i32> @test_masked_z_i32_to_16_mem_mask3(ptr %p, <16 x i32> %mask) {2312; CHECK-LABEL: test_masked_z_i32_to_16_mem_mask3:2313; CHECK: # %bb.0:2314; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k12315; CHECK-NEXT: vpbroadcastd (%rdi), %zmm0 {%k1} {z}2316; CHECK-NEXT: retq2317 %s = load i32, ptr %p2318 %vec = insertelement <2 x i32> undef, i32 %s, i32 02319 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2320 %cmp = icmp eq <16 x i32> %mask, zeroinitializer2321 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer2322 ret <16 x i32> %res2323}2324define <2 x i64> @test_i64_to_2_mem(ptr %p) {2325; CHECK-LABEL: test_i64_to_2_mem:2326; CHECK: # %bb.0:2327; CHECK-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0]2328; CHECK-NEXT: retq2329 %s = load i64, ptr %p2330 %vec = insertelement <2 x i64> undef, i64 %s, i32 02331 %res = shufflevector <2 x i64> %vec, <2 x i64> undef, <2 x i32> <i32 0, i32 0>2332 ret <2 x i64> %res2333}2334define <2 x i64> @test_masked_i64_to_2_mem_mask0(ptr %p, <2 x i64> %default, <2 x i64> %mask) {2335; CHECK-LABEL: test_masked_i64_to_2_mem_mask0:2336; CHECK: # %bb.0:2337; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k12338; CHECK-NEXT: vpbroadcastq (%rdi), %xmm0 {%k1}2339; CHECK-NEXT: retq2340 %s = load i64, ptr %p2341 %vec = insertelement <2 x i64> undef, i64 %s, i32 02342 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <2 x i32> <i32 0, i32 0>2343 %cmp = icmp eq <2 x i64> %mask, zeroinitializer2344 %res = select <2 x i1> %cmp, <2 x i64> %shuf, <2 x i64> %default2345 ret <2 x i64> %res2346}2347 2348define <2 x i64> @test_masked_z_i64_to_2_mem_mask0(ptr %p, <2 x i64> %mask) {2349; CHECK-LABEL: test_masked_z_i64_to_2_mem_mask0:2350; CHECK: # %bb.0:2351; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k12352; CHECK-NEXT: vpbroadcastq (%rdi), %xmm0 {%k1} {z}2353; CHECK-NEXT: retq2354 %s = load i64, ptr %p2355 %vec = insertelement <2 x i64> undef, i64 %s, i32 02356 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <2 x i32> <i32 0, i32 0>2357 %cmp = icmp eq <2 x i64> %mask, zeroinitializer2358 %res = select <2 x i1> %cmp, <2 x i64> %shuf, <2 x i64> zeroinitializer2359 ret <2 x i64> %res2360}2361define <2 x i64> @test_masked_i64_to_2_mem_mask1(ptr %p, <2 x i64> %default, <2 x i64> %mask) {2362; CHECK-LABEL: test_masked_i64_to_2_mem_mask1:2363; CHECK: # %bb.0:2364; CHECK-NEXT: vptestnmq %xmm1, %xmm1, %k12365; CHECK-NEXT: vpbroadcastq (%rdi), %xmm0 {%k1}2366; CHECK-NEXT: retq2367 %s = load i64, ptr %p2368 %vec = insertelement <2 x i64> undef, i64 %s, i32 02369 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <2 x i32> <i32 0, i32 0>2370 %cmp = icmp eq <2 x i64> %mask, zeroinitializer2371 %res = select <2 x i1> %cmp, <2 x i64> %shuf, <2 x i64> %default2372 ret <2 x i64> %res2373}2374 2375define <2 x i64> @test_masked_z_i64_to_2_mem_mask1(ptr %p, <2 x i64> %mask) {2376; CHECK-LABEL: test_masked_z_i64_to_2_mem_mask1:2377; CHECK: # %bb.0:2378; CHECK-NEXT: vptestnmq %xmm0, %xmm0, %k12379; CHECK-NEXT: vpbroadcastq (%rdi), %xmm0 {%k1} {z}2380; CHECK-NEXT: retq2381 %s = load i64, ptr %p2382 %vec = insertelement <2 x i64> undef, i64 %s, i32 02383 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <2 x i32> <i32 0, i32 0>2384 %cmp = icmp eq <2 x i64> %mask, zeroinitializer2385 %res = select <2 x i1> %cmp, <2 x i64> %shuf, <2 x i64> zeroinitializer2386 ret <2 x i64> %res2387}2388define <4 x i64> @test_i64_to_4_mem(ptr %p) {2389; CHECK-LABEL: test_i64_to_4_mem:2390; CHECK: # %bb.0:2391; CHECK-NEXT: vbroadcastsd (%rdi), %ymm02392; CHECK-NEXT: retq2393 %s = load i64, ptr %p2394 %vec = insertelement <2 x i64> undef, i64 %s, i32 02395 %res = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2396 ret <4 x i64> %res2397}2398define <4 x i64> @test_masked_i64_to_4_mem_mask0(ptr %p, <4 x i64> %default, <4 x i64> %mask) {2399; CHECK-LABEL: test_masked_i64_to_4_mem_mask0:2400; CHECK: # %bb.0:2401; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k12402; CHECK-NEXT: vpbroadcastq (%rdi), %ymm0 {%k1}2403; CHECK-NEXT: retq2404 %s = load i64, ptr %p2405 %vec = insertelement <2 x i64> undef, i64 %s, i32 02406 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2407 %cmp = icmp eq <4 x i64> %mask, zeroinitializer2408 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default2409 ret <4 x i64> %res2410}2411 2412define <4 x i64> @test_masked_z_i64_to_4_mem_mask0(ptr %p, <4 x i64> %mask) {2413; CHECK-LABEL: test_masked_z_i64_to_4_mem_mask0:2414; CHECK: # %bb.0:2415; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k12416; CHECK-NEXT: vpbroadcastq (%rdi), %ymm0 {%k1} {z}2417; CHECK-NEXT: retq2418 %s = load i64, ptr %p2419 %vec = insertelement <2 x i64> undef, i64 %s, i32 02420 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2421 %cmp = icmp eq <4 x i64> %mask, zeroinitializer2422 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer2423 ret <4 x i64> %res2424}2425define <4 x i64> @test_masked_i64_to_4_mem_mask1(ptr %p, <4 x i64> %default, <4 x i64> %mask) {2426; CHECK-LABEL: test_masked_i64_to_4_mem_mask1:2427; CHECK: # %bb.0:2428; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k12429; CHECK-NEXT: vpbroadcastq (%rdi), %ymm0 {%k1}2430; CHECK-NEXT: retq2431 %s = load i64, ptr %p2432 %vec = insertelement <2 x i64> undef, i64 %s, i32 02433 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2434 %cmp = icmp eq <4 x i64> %mask, zeroinitializer2435 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default2436 ret <4 x i64> %res2437}2438 2439define <4 x i64> @test_masked_z_i64_to_4_mem_mask1(ptr %p, <4 x i64> %mask) {2440; CHECK-LABEL: test_masked_z_i64_to_4_mem_mask1:2441; CHECK: # %bb.0:2442; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k12443; CHECK-NEXT: vpbroadcastq (%rdi), %ymm0 {%k1} {z}2444; CHECK-NEXT: retq2445 %s = load i64, ptr %p2446 %vec = insertelement <2 x i64> undef, i64 %s, i32 02447 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2448 %cmp = icmp eq <4 x i64> %mask, zeroinitializer2449 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer2450 ret <4 x i64> %res2451}2452define <4 x i64> @test_masked_i64_to_4_mem_mask2(ptr %p, <4 x i64> %default, <4 x i64> %mask) {2453; CHECK-LABEL: test_masked_i64_to_4_mem_mask2:2454; CHECK: # %bb.0:2455; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k12456; CHECK-NEXT: vpbroadcastq (%rdi), %ymm0 {%k1}2457; CHECK-NEXT: retq2458 %s = load i64, ptr %p2459 %vec = insertelement <2 x i64> undef, i64 %s, i32 02460 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2461 %cmp = icmp eq <4 x i64> %mask, zeroinitializer2462 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default2463 ret <4 x i64> %res2464}2465 2466define <4 x i64> @test_masked_z_i64_to_4_mem_mask2(ptr %p, <4 x i64> %mask) {2467; CHECK-LABEL: test_masked_z_i64_to_4_mem_mask2:2468; CHECK: # %bb.0:2469; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k12470; CHECK-NEXT: vpbroadcastq (%rdi), %ymm0 {%k1} {z}2471; CHECK-NEXT: retq2472 %s = load i64, ptr %p2473 %vec = insertelement <2 x i64> undef, i64 %s, i32 02474 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2475 %cmp = icmp eq <4 x i64> %mask, zeroinitializer2476 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer2477 ret <4 x i64> %res2478}2479define <4 x i64> @test_masked_i64_to_4_mem_mask3(ptr %p, <4 x i64> %default, <4 x i64> %mask) {2480; CHECK-LABEL: test_masked_i64_to_4_mem_mask3:2481; CHECK: # %bb.0:2482; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k12483; CHECK-NEXT: vpbroadcastq (%rdi), %ymm0 {%k1}2484; CHECK-NEXT: retq2485 %s = load i64, ptr %p2486 %vec = insertelement <2 x i64> undef, i64 %s, i32 02487 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2488 %cmp = icmp eq <4 x i64> %mask, zeroinitializer2489 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default2490 ret <4 x i64> %res2491}2492 2493define <4 x i64> @test_masked_z_i64_to_4_mem_mask3(ptr %p, <4 x i64> %mask) {2494; CHECK-LABEL: test_masked_z_i64_to_4_mem_mask3:2495; CHECK: # %bb.0:2496; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k12497; CHECK-NEXT: vpbroadcastq (%rdi), %ymm0 {%k1} {z}2498; CHECK-NEXT: retq2499 %s = load i64, ptr %p2500 %vec = insertelement <2 x i64> undef, i64 %s, i32 02501 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>2502 %cmp = icmp eq <4 x i64> %mask, zeroinitializer2503 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer2504 ret <4 x i64> %res2505}2506define <8 x i64> @test_i64_to_8_mem(ptr %p) {2507; CHECK-LABEL: test_i64_to_8_mem:2508; CHECK: # %bb.0:2509; CHECK-NEXT: vbroadcastsd (%rdi), %zmm02510; CHECK-NEXT: retq2511 %s = load i64, ptr %p2512 %vec = insertelement <2 x i64> undef, i64 %s, i32 02513 %res = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2514 ret <8 x i64> %res2515}2516define <8 x i64> @test_masked_i64_to_8_mem_mask0(ptr %p, <8 x i64> %default, <8 x i64> %mask) {2517; CHECK-LABEL: test_masked_i64_to_8_mem_mask0:2518; CHECK: # %bb.0:2519; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k12520; CHECK-NEXT: vpbroadcastq (%rdi), %zmm0 {%k1}2521; CHECK-NEXT: retq2522 %s = load i64, ptr %p2523 %vec = insertelement <2 x i64> undef, i64 %s, i32 02524 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2525 %cmp = icmp eq <8 x i64> %mask, zeroinitializer2526 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default2527 ret <8 x i64> %res2528}2529 2530define <8 x i64> @test_masked_z_i64_to_8_mem_mask0(ptr %p, <8 x i64> %mask) {2531; CHECK-LABEL: test_masked_z_i64_to_8_mem_mask0:2532; CHECK: # %bb.0:2533; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k12534; CHECK-NEXT: vpbroadcastq (%rdi), %zmm0 {%k1} {z}2535; CHECK-NEXT: retq2536 %s = load i64, ptr %p2537 %vec = insertelement <2 x i64> undef, i64 %s, i32 02538 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2539 %cmp = icmp eq <8 x i64> %mask, zeroinitializer2540 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer2541 ret <8 x i64> %res2542}2543define <8 x i64> @test_masked_i64_to_8_mem_mask1(ptr %p, <8 x i64> %default, <8 x i64> %mask) {2544; CHECK-LABEL: test_masked_i64_to_8_mem_mask1:2545; CHECK: # %bb.0:2546; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k12547; CHECK-NEXT: vpbroadcastq (%rdi), %zmm0 {%k1}2548; CHECK-NEXT: retq2549 %s = load i64, ptr %p2550 %vec = insertelement <2 x i64> undef, i64 %s, i32 02551 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2552 %cmp = icmp eq <8 x i64> %mask, zeroinitializer2553 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default2554 ret <8 x i64> %res2555}2556 2557define <8 x i64> @test_masked_z_i64_to_8_mem_mask1(ptr %p, <8 x i64> %mask) {2558; CHECK-LABEL: test_masked_z_i64_to_8_mem_mask1:2559; CHECK: # %bb.0:2560; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k12561; CHECK-NEXT: vpbroadcastq (%rdi), %zmm0 {%k1} {z}2562; CHECK-NEXT: retq2563 %s = load i64, ptr %p2564 %vec = insertelement <2 x i64> undef, i64 %s, i32 02565 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2566 %cmp = icmp eq <8 x i64> %mask, zeroinitializer2567 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer2568 ret <8 x i64> %res2569}2570define <8 x i64> @test_masked_i64_to_8_mem_mask2(ptr %p, <8 x i64> %default, <8 x i64> %mask) {2571; CHECK-LABEL: test_masked_i64_to_8_mem_mask2:2572; CHECK: # %bb.0:2573; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k12574; CHECK-NEXT: vpbroadcastq (%rdi), %zmm0 {%k1}2575; CHECK-NEXT: retq2576 %s = load i64, ptr %p2577 %vec = insertelement <2 x i64> undef, i64 %s, i32 02578 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2579 %cmp = icmp eq <8 x i64> %mask, zeroinitializer2580 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default2581 ret <8 x i64> %res2582}2583 2584define <8 x i64> @test_masked_z_i64_to_8_mem_mask2(ptr %p, <8 x i64> %mask) {2585; CHECK-LABEL: test_masked_z_i64_to_8_mem_mask2:2586; CHECK: # %bb.0:2587; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k12588; CHECK-NEXT: vpbroadcastq (%rdi), %zmm0 {%k1} {z}2589; CHECK-NEXT: retq2590 %s = load i64, ptr %p2591 %vec = insertelement <2 x i64> undef, i64 %s, i32 02592 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2593 %cmp = icmp eq <8 x i64> %mask, zeroinitializer2594 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer2595 ret <8 x i64> %res2596}2597define <8 x i64> @test_masked_i64_to_8_mem_mask3(ptr %p, <8 x i64> %default, <8 x i64> %mask) {2598; CHECK-LABEL: test_masked_i64_to_8_mem_mask3:2599; CHECK: # %bb.0:2600; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k12601; CHECK-NEXT: vpbroadcastq (%rdi), %zmm0 {%k1}2602; CHECK-NEXT: retq2603 %s = load i64, ptr %p2604 %vec = insertelement <2 x i64> undef, i64 %s, i32 02605 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2606 %cmp = icmp eq <8 x i64> %mask, zeroinitializer2607 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default2608 ret <8 x i64> %res2609}2610 2611define <8 x i64> @test_masked_z_i64_to_8_mem_mask3(ptr %p, <8 x i64> %mask) {2612; CHECK-LABEL: test_masked_z_i64_to_8_mem_mask3:2613; CHECK: # %bb.0:2614; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k12615; CHECK-NEXT: vpbroadcastq (%rdi), %zmm0 {%k1} {z}2616; CHECK-NEXT: retq2617 %s = load i64, ptr %p2618 %vec = insertelement <2 x i64> undef, i64 %s, i32 02619 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>2620 %cmp = icmp eq <8 x i64> %mask, zeroinitializer2621 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer2622 ret <8 x i64> %res2623}2624