1298 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,+avx512dq,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle %s -o - | FileCheck %s3; RUN: llc -mtriple=x86_64-unknown-linux-gnu -mattr=+avx512f,+avx512vl,+avx512dq,+fast-variable-perlane-shuffle %s -o - | FileCheck %s4 5define <4 x i32> @test_2xi32_to_4xi32(<4 x i32> %vec) {6; CHECK-LABEL: test_2xi32_to_4xi32:7; CHECK: # %bb.0:8; CHECK-NEXT: vmovddup {{.*#+}} xmm0 = xmm0[0,0]9; CHECK-NEXT: retq10 %res = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>11 ret <4 x i32> %res12}13define <4 x i32> @test_masked_2xi32_to_4xi32_mask0(<4 x i32> %vec, <4 x i32> %default, <4 x i32> %mask) {14; CHECK-LABEL: test_masked_2xi32_to_4xi32_mask0:15; CHECK: # %bb.0:16; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k117; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm1 {%k1} = xmm0[0,1,0,1]18; CHECK-NEXT: vmovdqa %xmm1, %xmm019; CHECK-NEXT: retq20 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>21 %cmp = icmp eq <4 x i32> %mask, zeroinitializer22 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default23 ret <4 x i32> %res24}25 26define <4 x i32> @test_masked_z_2xi32_to_4xi32_mask0(<4 x i32> %vec, <4 x i32> %mask) {27; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mask0:28; CHECK: # %bb.0:29; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k130; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1,0,1]31; CHECK-NEXT: retq32 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>33 %cmp = icmp eq <4 x i32> %mask, zeroinitializer34 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer35 ret <4 x i32> %res36}37define <4 x i32> @test_masked_2xi32_to_4xi32_mask1(<4 x i32> %vec, <4 x i32> %default, <4 x i32> %mask) {38; CHECK-LABEL: test_masked_2xi32_to_4xi32_mask1:39; CHECK: # %bb.0:40; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k141; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm1 {%k1} = xmm0[0,1,0,1]42; CHECK-NEXT: vmovdqa %xmm1, %xmm043; CHECK-NEXT: retq44 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>45 %cmp = icmp eq <4 x i32> %mask, zeroinitializer46 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default47 ret <4 x i32> %res48}49 50define <4 x i32> @test_masked_z_2xi32_to_4xi32_mask1(<4 x i32> %vec, <4 x i32> %mask) {51; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mask1:52; CHECK: # %bb.0:53; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k154; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1,0,1]55; CHECK-NEXT: retq56 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>57 %cmp = icmp eq <4 x i32> %mask, zeroinitializer58 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer59 ret <4 x i32> %res60}61define <4 x i32> @test_masked_2xi32_to_4xi32_mask2(<4 x i32> %vec, <4 x i32> %default, <4 x i32> %mask) {62; CHECK-LABEL: test_masked_2xi32_to_4xi32_mask2:63; CHECK: # %bb.0:64; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k165; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm1 {%k1} = xmm0[0,1,0,1]66; CHECK-NEXT: vmovdqa %xmm1, %xmm067; CHECK-NEXT: retq68 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>69 %cmp = icmp eq <4 x i32> %mask, zeroinitializer70 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default71 ret <4 x i32> %res72}73 74define <4 x i32> @test_masked_z_2xi32_to_4xi32_mask2(<4 x i32> %vec, <4 x i32> %mask) {75; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mask2:76; CHECK: # %bb.0:77; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k178; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1,0,1]79; CHECK-NEXT: retq80 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>81 %cmp = icmp eq <4 x i32> %mask, zeroinitializer82 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer83 ret <4 x i32> %res84}85define <4 x i32> @test_masked_2xi32_to_4xi32_mask3(<4 x i32> %vec, <4 x i32> %default, <4 x i32> %mask) {86; CHECK-LABEL: test_masked_2xi32_to_4xi32_mask3:87; CHECK: # %bb.0:88; CHECK-NEXT: vptestnmd %xmm2, %xmm2, %k189; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm1 {%k1} = xmm0[0,1,0,1]90; CHECK-NEXT: vmovdqa %xmm1, %xmm091; CHECK-NEXT: retq92 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>93 %cmp = icmp eq <4 x i32> %mask, zeroinitializer94 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default95 ret <4 x i32> %res96}97 98define <4 x i32> @test_masked_z_2xi32_to_4xi32_mask3(<4 x i32> %vec, <4 x i32> %mask) {99; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mask3:100; CHECK: # %bb.0:101; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1102; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = xmm0[0,1,0,1]103; CHECK-NEXT: retq104 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>105 %cmp = icmp eq <4 x i32> %mask, zeroinitializer106 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer107 ret <4 x i32> %res108}109define <8 x i32> @test_2xi32_to_8xi32(<8 x i32> %vec) {110; CHECK-LABEL: test_2xi32_to_8xi32:111; CHECK: # %bb.0:112; CHECK-NEXT: vbroadcastsd %xmm0, %ymm0113; CHECK-NEXT: retq114 %res = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>115 ret <8 x i32> %res116}117define <8 x i32> @test_masked_2xi32_to_8xi32_mask0(<8 x i32> %vec, <8 x i32> %default, <8 x i32> %mask) {118; CHECK-LABEL: test_masked_2xi32_to_8xi32_mask0:119; CHECK: # %bb.0:120; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k1121; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm1 {%k1} = xmm0[0,1,0,1,0,1,0,1]122; CHECK-NEXT: vmovdqa %ymm1, %ymm0123; CHECK-NEXT: retq124 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>125 %cmp = icmp eq <8 x i32> %mask, zeroinitializer126 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default127 ret <8 x i32> %res128}129 130define <8 x i32> @test_masked_z_2xi32_to_8xi32_mask0(<8 x i32> %vec, <8 x i32> %mask) {131; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mask0:132; CHECK: # %bb.0:133; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1134; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1]135; CHECK-NEXT: retq136 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>137 %cmp = icmp eq <8 x i32> %mask, zeroinitializer138 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer139 ret <8 x i32> %res140}141define <8 x i32> @test_masked_2xi32_to_8xi32_mask1(<8 x i32> %vec, <8 x i32> %default, <8 x i32> %mask) {142; CHECK-LABEL: test_masked_2xi32_to_8xi32_mask1:143; CHECK: # %bb.0:144; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k1145; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm1 {%k1} = xmm0[0,1,0,1,0,1,0,1]146; CHECK-NEXT: vmovdqa %ymm1, %ymm0147; CHECK-NEXT: retq148 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>149 %cmp = icmp eq <8 x i32> %mask, zeroinitializer150 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default151 ret <8 x i32> %res152}153 154define <8 x i32> @test_masked_z_2xi32_to_8xi32_mask1(<8 x i32> %vec, <8 x i32> %mask) {155; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mask1:156; CHECK: # %bb.0:157; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1158; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1]159; CHECK-NEXT: retq160 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>161 %cmp = icmp eq <8 x i32> %mask, zeroinitializer162 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer163 ret <8 x i32> %res164}165define <8 x i32> @test_masked_2xi32_to_8xi32_mask2(<8 x i32> %vec, <8 x i32> %default, <8 x i32> %mask) {166; CHECK-LABEL: test_masked_2xi32_to_8xi32_mask2:167; CHECK: # %bb.0:168; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k1169; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm1 {%k1} = xmm0[0,1,0,1,0,1,0,1]170; CHECK-NEXT: vmovdqa %ymm1, %ymm0171; CHECK-NEXT: retq172 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>173 %cmp = icmp eq <8 x i32> %mask, zeroinitializer174 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default175 ret <8 x i32> %res176}177 178define <8 x i32> @test_masked_z_2xi32_to_8xi32_mask2(<8 x i32> %vec, <8 x i32> %mask) {179; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mask2:180; CHECK: # %bb.0:181; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1182; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1]183; CHECK-NEXT: retq184 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>185 %cmp = icmp eq <8 x i32> %mask, zeroinitializer186 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer187 ret <8 x i32> %res188}189define <8 x i32> @test_masked_2xi32_to_8xi32_mask3(<8 x i32> %vec, <8 x i32> %default, <8 x i32> %mask) {190; CHECK-LABEL: test_masked_2xi32_to_8xi32_mask3:191; CHECK: # %bb.0:192; CHECK-NEXT: vptestnmd %ymm2, %ymm2, %k1193; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm1 {%k1} = xmm0[0,1,0,1,0,1,0,1]194; CHECK-NEXT: vmovdqa %ymm1, %ymm0195; CHECK-NEXT: retq196 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>197 %cmp = icmp eq <8 x i32> %mask, zeroinitializer198 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default199 ret <8 x i32> %res200}201 202define <8 x i32> @test_masked_z_2xi32_to_8xi32_mask3(<8 x i32> %vec, <8 x i32> %mask) {203; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mask3:204; CHECK: # %bb.0:205; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1206; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1]207; CHECK-NEXT: retq208 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>209 %cmp = icmp eq <8 x i32> %mask, zeroinitializer210 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer211 ret <8 x i32> %res212}213define <16 x i32> @test_2xi32_to_16xi32(<16 x i32> %vec) {214; CHECK-LABEL: test_2xi32_to_16xi32:215; CHECK: # %bb.0:216; CHECK-NEXT: vbroadcastsd %xmm0, %zmm0217; CHECK-NEXT: retq218 %res = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>219 ret <16 x i32> %res220}221define <16 x i32> @test_masked_2xi32_to_16xi32_mask0(<16 x i32> %vec, <16 x i32> %default, <16 x i32> %mask) {222; CHECK-LABEL: test_masked_2xi32_to_16xi32_mask0:223; CHECK: # %bb.0:224; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k1225; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm1 {%k1} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]226; CHECK-NEXT: vmovdqa64 %zmm1, %zmm0227; CHECK-NEXT: retq228 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>229 %cmp = icmp eq <16 x i32> %mask, zeroinitializer230 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default231 ret <16 x i32> %res232}233 234define <16 x i32> @test_masked_z_2xi32_to_16xi32_mask0(<16 x i32> %vec, <16 x i32> %mask) {235; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mask0:236; CHECK: # %bb.0:237; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1238; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]239; CHECK-NEXT: retq240 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>241 %cmp = icmp eq <16 x i32> %mask, zeroinitializer242 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer243 ret <16 x i32> %res244}245define <16 x i32> @test_masked_2xi32_to_16xi32_mask1(<16 x i32> %vec, <16 x i32> %default, <16 x i32> %mask) {246; CHECK-LABEL: test_masked_2xi32_to_16xi32_mask1:247; CHECK: # %bb.0:248; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k1249; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm1 {%k1} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]250; CHECK-NEXT: vmovdqa64 %zmm1, %zmm0251; CHECK-NEXT: retq252 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>253 %cmp = icmp eq <16 x i32> %mask, zeroinitializer254 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default255 ret <16 x i32> %res256}257 258define <16 x i32> @test_masked_z_2xi32_to_16xi32_mask1(<16 x i32> %vec, <16 x i32> %mask) {259; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mask1:260; CHECK: # %bb.0:261; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1262; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]263; CHECK-NEXT: retq264 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>265 %cmp = icmp eq <16 x i32> %mask, zeroinitializer266 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer267 ret <16 x i32> %res268}269define <16 x i32> @test_masked_2xi32_to_16xi32_mask2(<16 x i32> %vec, <16 x i32> %default, <16 x i32> %mask) {270; CHECK-LABEL: test_masked_2xi32_to_16xi32_mask2:271; CHECK: # %bb.0:272; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k1273; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm1 {%k1} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]274; CHECK-NEXT: vmovdqa64 %zmm1, %zmm0275; CHECK-NEXT: retq276 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>277 %cmp = icmp eq <16 x i32> %mask, zeroinitializer278 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default279 ret <16 x i32> %res280}281 282define <16 x i32> @test_masked_z_2xi32_to_16xi32_mask2(<16 x i32> %vec, <16 x i32> %mask) {283; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mask2:284; CHECK: # %bb.0:285; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1286; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]287; CHECK-NEXT: retq288 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>289 %cmp = icmp eq <16 x i32> %mask, zeroinitializer290 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer291 ret <16 x i32> %res292}293define <16 x i32> @test_masked_2xi32_to_16xi32_mask3(<16 x i32> %vec, <16 x i32> %default, <16 x i32> %mask) {294; CHECK-LABEL: test_masked_2xi32_to_16xi32_mask3:295; CHECK: # %bb.0:296; CHECK-NEXT: vptestnmd %zmm2, %zmm2, %k1297; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm1 {%k1} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]298; CHECK-NEXT: vmovdqa64 %zmm1, %zmm0299; CHECK-NEXT: retq300 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>301 %cmp = icmp eq <16 x i32> %mask, zeroinitializer302 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default303 ret <16 x i32> %res304}305 306define <16 x i32> @test_masked_z_2xi32_to_16xi32_mask3(<16 x i32> %vec, <16 x i32> %mask) {307; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mask3:308; CHECK: # %bb.0:309; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1310; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = xmm0[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]311; CHECK-NEXT: retq312 %shuf = shufflevector <16 x i32> %vec, <16 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>313 %cmp = icmp eq <16 x i32> %mask, zeroinitializer314 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer315 ret <16 x i32> %res316}317define <4 x i32> @test_2xi32_to_4xi32_mem(ptr %vp) {318; CHECK-LABEL: test_2xi32_to_4xi32_mem:319; CHECK: # %bb.0:320; CHECK-NEXT: vmovddup {{.*#+}} xmm0 = mem[0,0]321; CHECK-NEXT: retq322 %vec = load <2 x i32>, ptr %vp323 %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>324 ret <4 x i32> %res325}326define <4 x i32> @test_masked_2xi32_to_4xi32_mem_mask0(ptr %vp, <4 x i32> %default, <4 x i32> %mask) {327; CHECK-LABEL: test_masked_2xi32_to_4xi32_mem_mask0:328; CHECK: # %bb.0:329; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1330; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm0 {%k1} = mem[0,1,0,1]331; CHECK-NEXT: retq332 %vec = load <2 x i32>, ptr %vp333 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>334 %cmp = icmp eq <4 x i32> %mask, zeroinitializer335 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default336 ret <4 x i32> %res337}338 339define <4 x i32> @test_masked_z_2xi32_to_4xi32_mem_mask0(ptr %vp, <4 x i32> %mask) {340; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mem_mask0:341; CHECK: # %bb.0:342; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k1343; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = mem[0,1,0,1]344; CHECK-NEXT: retq345 %vec = load <2 x i32>, ptr %vp346 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>347 %cmp = icmp eq <4 x i32> %mask, zeroinitializer348 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer349 ret <4 x i32> %res350}351define <4 x i32> @test_masked_2xi32_to_4xi32_mem_mask1(ptr %vp, <4 x i32> %default, <4 x i32> %mask) {352; CHECK-LABEL: test_masked_2xi32_to_4xi32_mem_mask1:353; CHECK: # %bb.0:354; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1355; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm0 {%k1} = mem[0,1,0,1]356; CHECK-NEXT: retq357 %vec = load <2 x i32>, ptr %vp358 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>359 %cmp = icmp eq <4 x i32> %mask, zeroinitializer360 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default361 ret <4 x i32> %res362}363 364define <4 x i32> @test_masked_z_2xi32_to_4xi32_mem_mask1(ptr %vp, <4 x i32> %mask) {365; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mem_mask1:366; CHECK: # %bb.0:367; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k1368; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = mem[0,1,0,1]369; CHECK-NEXT: retq370 %vec = load <2 x i32>, ptr %vp371 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>372 %cmp = icmp eq <4 x i32> %mask, zeroinitializer373 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer374 ret <4 x i32> %res375}376define <4 x i32> @test_masked_2xi32_to_4xi32_mem_mask2(ptr %vp, <4 x i32> %default, <4 x i32> %mask) {377; CHECK-LABEL: test_masked_2xi32_to_4xi32_mem_mask2:378; CHECK: # %bb.0:379; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1380; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm0 {%k1} = mem[0,1,0,1]381; CHECK-NEXT: retq382 %vec = load <2 x i32>, ptr %vp383 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>384 %cmp = icmp eq <4 x i32> %mask, zeroinitializer385 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default386 ret <4 x i32> %res387}388 389define <4 x i32> @test_masked_z_2xi32_to_4xi32_mem_mask2(ptr %vp, <4 x i32> %mask) {390; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mem_mask2:391; CHECK: # %bb.0:392; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k1393; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = mem[0,1,0,1]394; CHECK-NEXT: retq395 %vec = load <2 x i32>, ptr %vp396 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>397 %cmp = icmp eq <4 x i32> %mask, zeroinitializer398 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer399 ret <4 x i32> %res400}401define <4 x i32> @test_masked_2xi32_to_4xi32_mem_mask3(ptr %vp, <4 x i32> %default, <4 x i32> %mask) {402; CHECK-LABEL: test_masked_2xi32_to_4xi32_mem_mask3:403; CHECK: # %bb.0:404; CHECK-NEXT: vptestnmd %xmm1, %xmm1, %k1405; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm0 {%k1} = mem[0,1,0,1]406; CHECK-NEXT: retq407 %vec = load <2 x i32>, ptr %vp408 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>409 %cmp = icmp eq <4 x i32> %mask, zeroinitializer410 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> %default411 ret <4 x i32> %res412}413 414define <4 x i32> @test_masked_z_2xi32_to_4xi32_mem_mask3(ptr %vp, <4 x i32> %mask) {415; CHECK-LABEL: test_masked_z_2xi32_to_4xi32_mem_mask3:416; CHECK: # %bb.0:417; CHECK-NEXT: vptestnmd %xmm0, %xmm0, %k1418; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} xmm0 {%k1} {z} = mem[0,1,0,1]419; CHECK-NEXT: retq420 %vec = load <2 x i32>, ptr %vp421 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>422 %cmp = icmp eq <4 x i32> %mask, zeroinitializer423 %res = select <4 x i1> %cmp, <4 x i32> %shuf, <4 x i32> zeroinitializer424 ret <4 x i32> %res425}426define <8 x i32> @test_2xi32_to_8xi32_mem(ptr %vp) {427; CHECK-LABEL: test_2xi32_to_8xi32_mem:428; CHECK: # %bb.0:429; CHECK-NEXT: vbroadcastsd (%rdi), %ymm0430; CHECK-NEXT: retq431 %vec = load <2 x i32>, ptr %vp432 %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>433 ret <8 x i32> %res434}435define <8 x i32> @test_masked_2xi32_to_8xi32_mem_mask0(ptr %vp, <8 x i32> %default, <8 x i32> %mask) {436; CHECK-LABEL: test_masked_2xi32_to_8xi32_mem_mask0:437; CHECK: # %bb.0:438; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1439; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1,0,1,0,1]440; CHECK-NEXT: retq441 %vec = load <2 x i32>, ptr %vp442 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>443 %cmp = icmp eq <8 x i32> %mask, zeroinitializer444 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default445 ret <8 x i32> %res446}447 448define <8 x i32> @test_masked_z_2xi32_to_8xi32_mem_mask0(ptr %vp, <8 x i32> %mask) {449; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mem_mask0:450; CHECK: # %bb.0:451; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1452; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]453; CHECK-NEXT: retq454 %vec = load <2 x i32>, ptr %vp455 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>456 %cmp = icmp eq <8 x i32> %mask, zeroinitializer457 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer458 ret <8 x i32> %res459}460define <8 x i32> @test_masked_2xi32_to_8xi32_mem_mask1(ptr %vp, <8 x i32> %default, <8 x i32> %mask) {461; CHECK-LABEL: test_masked_2xi32_to_8xi32_mem_mask1:462; CHECK: # %bb.0:463; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1464; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1,0,1,0,1]465; CHECK-NEXT: retq466 %vec = load <2 x i32>, ptr %vp467 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>468 %cmp = icmp eq <8 x i32> %mask, zeroinitializer469 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default470 ret <8 x i32> %res471}472 473define <8 x i32> @test_masked_z_2xi32_to_8xi32_mem_mask1(ptr %vp, <8 x i32> %mask) {474; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mem_mask1:475; CHECK: # %bb.0:476; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1477; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]478; CHECK-NEXT: retq479 %vec = load <2 x i32>, ptr %vp480 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>481 %cmp = icmp eq <8 x i32> %mask, zeroinitializer482 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer483 ret <8 x i32> %res484}485define <8 x i32> @test_masked_2xi32_to_8xi32_mem_mask2(ptr %vp, <8 x i32> %default, <8 x i32> %mask) {486; CHECK-LABEL: test_masked_2xi32_to_8xi32_mem_mask2:487; CHECK: # %bb.0:488; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1489; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1,0,1,0,1]490; CHECK-NEXT: retq491 %vec = load <2 x i32>, ptr %vp492 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>493 %cmp = icmp eq <8 x i32> %mask, zeroinitializer494 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default495 ret <8 x i32> %res496}497 498define <8 x i32> @test_masked_z_2xi32_to_8xi32_mem_mask2(ptr %vp, <8 x i32> %mask) {499; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mem_mask2:500; CHECK: # %bb.0:501; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1502; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]503; CHECK-NEXT: retq504 %vec = load <2 x i32>, ptr %vp505 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>506 %cmp = icmp eq <8 x i32> %mask, zeroinitializer507 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer508 ret <8 x i32> %res509}510define <8 x i32> @test_masked_2xi32_to_8xi32_mem_mask3(ptr %vp, <8 x i32> %default, <8 x i32> %mask) {511; CHECK-LABEL: test_masked_2xi32_to_8xi32_mem_mask3:512; CHECK: # %bb.0:513; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1514; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1,0,1,0,1]515; CHECK-NEXT: retq516 %vec = load <2 x i32>, ptr %vp517 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>518 %cmp = icmp eq <8 x i32> %mask, zeroinitializer519 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default520 ret <8 x i32> %res521}522 523define <8 x i32> @test_masked_z_2xi32_to_8xi32_mem_mask3(ptr %vp, <8 x i32> %mask) {524; CHECK-LABEL: test_masked_z_2xi32_to_8xi32_mem_mask3:525; CHECK: # %bb.0:526; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1527; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]528; CHECK-NEXT: retq529 %vec = load <2 x i32>, ptr %vp530 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>531 %cmp = icmp eq <8 x i32> %mask, zeroinitializer532 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer533 ret <8 x i32> %res534}535define <16 x i32> @test_2xi32_to_16xi32_mem(ptr %vp) {536; CHECK-LABEL: test_2xi32_to_16xi32_mem:537; CHECK: # %bb.0:538; CHECK-NEXT: vbroadcastsd (%rdi), %zmm0539; CHECK-NEXT: retq540 %vec = load <2 x i32>, ptr %vp541 %res = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>542 ret <16 x i32> %res543}544define <16 x i32> @test_masked_2xi32_to_16xi32_mem_mask0(ptr %vp, <16 x i32> %default, <16 x i32> %mask) {545; CHECK-LABEL: test_masked_2xi32_to_16xi32_mem_mask0:546; CHECK: # %bb.0:547; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1548; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]549; CHECK-NEXT: retq550 %vec = load <2 x i32>, ptr %vp551 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>552 %cmp = icmp eq <16 x i32> %mask, zeroinitializer553 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default554 ret <16 x i32> %res555}556 557define <16 x i32> @test_masked_z_2xi32_to_16xi32_mem_mask0(ptr %vp, <16 x i32> %mask) {558; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mem_mask0:559; CHECK: # %bb.0:560; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1561; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]562; CHECK-NEXT: retq563 %vec = load <2 x i32>, ptr %vp564 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>565 %cmp = icmp eq <16 x i32> %mask, zeroinitializer566 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer567 ret <16 x i32> %res568}569define <16 x i32> @test_masked_2xi32_to_16xi32_mem_mask1(ptr %vp, <16 x i32> %default, <16 x i32> %mask) {570; CHECK-LABEL: test_masked_2xi32_to_16xi32_mem_mask1:571; CHECK: # %bb.0:572; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1573; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]574; CHECK-NEXT: retq575 %vec = load <2 x i32>, ptr %vp576 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>577 %cmp = icmp eq <16 x i32> %mask, zeroinitializer578 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default579 ret <16 x i32> %res580}581 582define <16 x i32> @test_masked_z_2xi32_to_16xi32_mem_mask1(ptr %vp, <16 x i32> %mask) {583; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mem_mask1:584; CHECK: # %bb.0:585; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1586; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]587; CHECK-NEXT: retq588 %vec = load <2 x i32>, ptr %vp589 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>590 %cmp = icmp eq <16 x i32> %mask, zeroinitializer591 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer592 ret <16 x i32> %res593}594define <16 x i32> @test_masked_2xi32_to_16xi32_mem_mask2(ptr %vp, <16 x i32> %default, <16 x i32> %mask) {595; CHECK-LABEL: test_masked_2xi32_to_16xi32_mem_mask2:596; CHECK: # %bb.0:597; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1598; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]599; CHECK-NEXT: retq600 %vec = load <2 x i32>, ptr %vp601 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>602 %cmp = icmp eq <16 x i32> %mask, zeroinitializer603 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default604 ret <16 x i32> %res605}606 607define <16 x i32> @test_masked_z_2xi32_to_16xi32_mem_mask2(ptr %vp, <16 x i32> %mask) {608; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mem_mask2:609; CHECK: # %bb.0:610; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1611; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]612; CHECK-NEXT: retq613 %vec = load <2 x i32>, ptr %vp614 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>615 %cmp = icmp eq <16 x i32> %mask, zeroinitializer616 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer617 ret <16 x i32> %res618}619define <16 x i32> @test_masked_2xi32_to_16xi32_mem_mask3(ptr %vp, <16 x i32> %default, <16 x i32> %mask) {620; CHECK-LABEL: test_masked_2xi32_to_16xi32_mem_mask3:621; CHECK: # %bb.0:622; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1623; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]624; CHECK-NEXT: retq625 %vec = load <2 x i32>, ptr %vp626 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>627 %cmp = icmp eq <16 x i32> %mask, zeroinitializer628 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default629 ret <16 x i32> %res630}631 632define <16 x i32> @test_masked_z_2xi32_to_16xi32_mem_mask3(ptr %vp, <16 x i32> %mask) {633; CHECK-LABEL: test_masked_z_2xi32_to_16xi32_mem_mask3:634; CHECK: # %bb.0:635; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1636; CHECK-NEXT: vbroadcasti32x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1]637; CHECK-NEXT: retq638 %vec = load <2 x i32>, ptr %vp639 %shuf = shufflevector <2 x i32> %vec, <2 x i32> undef, <16 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>640 %cmp = icmp eq <16 x i32> %mask, zeroinitializer641 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer642 ret <16 x i32> %res643}644define <8 x i32> @test_4xi32_to_8xi32_mem(ptr %vp) {645; CHECK-LABEL: test_4xi32_to_8xi32_mem:646; CHECK: # %bb.0:647; CHECK-NEXT: vbroadcasti128 {{.*#+}} ymm0 = mem[0,1,0,1]648; CHECK-NEXT: retq649 %vec = load <4 x i32>, ptr %vp650 %res = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>651 ret <8 x i32> %res652}653define <8 x i32> @test_masked_4xi32_to_8xi32_mem_mask0(ptr %vp, <8 x i32> %default, <8 x i32> %mask) {654; CHECK-LABEL: test_masked_4xi32_to_8xi32_mem_mask0:655; CHECK: # %bb.0:656; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1657; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} ymm0 {%k1} = mem[0,1,2,3,0,1,2,3]658; CHECK-NEXT: retq659 %vec = load <4 x i32>, ptr %vp660 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>661 %cmp = icmp eq <8 x i32> %mask, zeroinitializer662 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default663 ret <8 x i32> %res664}665 666define <8 x i32> @test_masked_z_4xi32_to_8xi32_mem_mask0(ptr %vp, <8 x i32> %mask) {667; CHECK-LABEL: test_masked_z_4xi32_to_8xi32_mem_mask0:668; CHECK: # %bb.0:669; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1670; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]671; CHECK-NEXT: retq672 %vec = load <4 x i32>, ptr %vp673 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>674 %cmp = icmp eq <8 x i32> %mask, zeroinitializer675 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer676 ret <8 x i32> %res677}678define <8 x i32> @test_masked_4xi32_to_8xi32_mem_mask1(ptr %vp, <8 x i32> %default, <8 x i32> %mask) {679; CHECK-LABEL: test_masked_4xi32_to_8xi32_mem_mask1:680; CHECK: # %bb.0:681; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1682; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} ymm0 {%k1} = mem[0,1,2,3,0,1,2,3]683; CHECK-NEXT: retq684 %vec = load <4 x i32>, ptr %vp685 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>686 %cmp = icmp eq <8 x i32> %mask, zeroinitializer687 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default688 ret <8 x i32> %res689}690 691define <8 x i32> @test_masked_z_4xi32_to_8xi32_mem_mask1(ptr %vp, <8 x i32> %mask) {692; CHECK-LABEL: test_masked_z_4xi32_to_8xi32_mem_mask1:693; CHECK: # %bb.0:694; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1695; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]696; CHECK-NEXT: retq697 %vec = load <4 x i32>, ptr %vp698 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>699 %cmp = icmp eq <8 x i32> %mask, zeroinitializer700 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer701 ret <8 x i32> %res702}703define <8 x i32> @test_masked_4xi32_to_8xi32_mem_mask2(ptr %vp, <8 x i32> %default, <8 x i32> %mask) {704; CHECK-LABEL: test_masked_4xi32_to_8xi32_mem_mask2:705; CHECK: # %bb.0:706; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1707; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} ymm0 {%k1} = mem[0,1,2,3,0,1,2,3]708; CHECK-NEXT: retq709 %vec = load <4 x i32>, ptr %vp710 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>711 %cmp = icmp eq <8 x i32> %mask, zeroinitializer712 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default713 ret <8 x i32> %res714}715 716define <8 x i32> @test_masked_z_4xi32_to_8xi32_mem_mask2(ptr %vp, <8 x i32> %mask) {717; CHECK-LABEL: test_masked_z_4xi32_to_8xi32_mem_mask2:718; CHECK: # %bb.0:719; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1720; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]721; CHECK-NEXT: retq722 %vec = load <4 x i32>, ptr %vp723 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>724 %cmp = icmp eq <8 x i32> %mask, zeroinitializer725 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer726 ret <8 x i32> %res727}728define <8 x i32> @test_masked_4xi32_to_8xi32_mem_mask3(ptr %vp, <8 x i32> %default, <8 x i32> %mask) {729; CHECK-LABEL: test_masked_4xi32_to_8xi32_mem_mask3:730; CHECK: # %bb.0:731; CHECK-NEXT: vptestnmd %ymm1, %ymm1, %k1732; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} ymm0 {%k1} = mem[0,1,2,3,0,1,2,3]733; CHECK-NEXT: retq734 %vec = load <4 x i32>, ptr %vp735 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>736 %cmp = icmp eq <8 x i32> %mask, zeroinitializer737 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> %default738 ret <8 x i32> %res739}740 741define <8 x i32> @test_masked_z_4xi32_to_8xi32_mem_mask3(ptr %vp, <8 x i32> %mask) {742; CHECK-LABEL: test_masked_z_4xi32_to_8xi32_mem_mask3:743; CHECK: # %bb.0:744; CHECK-NEXT: vptestnmd %ymm0, %ymm0, %k1745; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]746; CHECK-NEXT: retq747 %vec = load <4 x i32>, ptr %vp748 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>749 %cmp = icmp eq <8 x i32> %mask, zeroinitializer750 %res = select <8 x i1> %cmp, <8 x i32> %shuf, <8 x i32> zeroinitializer751 ret <8 x i32> %res752}753define <16 x i32> @test_4xi32_to_16xi32_mem(ptr %vp) {754; CHECK-LABEL: test_4xi32_to_16xi32_mem:755; CHECK: # %bb.0:756; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]757; CHECK-NEXT: retq758 %vec = load <4 x i32>, ptr %vp759 %res = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>760 ret <16 x i32> %res761}762define <16 x i32> @test_masked_4xi32_to_16xi32_mem_mask0(ptr %vp, <16 x i32> %default, <16 x i32> %mask) {763; CHECK-LABEL: test_masked_4xi32_to_16xi32_mem_mask0:764; CHECK: # %bb.0:765; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1766; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]767; CHECK-NEXT: retq768 %vec = load <4 x i32>, ptr %vp769 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>770 %cmp = icmp eq <16 x i32> %mask, zeroinitializer771 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default772 ret <16 x i32> %res773}774 775define <16 x i32> @test_masked_z_4xi32_to_16xi32_mem_mask0(ptr %vp, <16 x i32> %mask) {776; CHECK-LABEL: test_masked_z_4xi32_to_16xi32_mem_mask0:777; CHECK: # %bb.0:778; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1779; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]780; CHECK-NEXT: retq781 %vec = load <4 x i32>, ptr %vp782 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>783 %cmp = icmp eq <16 x i32> %mask, zeroinitializer784 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer785 ret <16 x i32> %res786}787define <16 x i32> @test_masked_4xi32_to_16xi32_mem_mask1(ptr %vp, <16 x i32> %default, <16 x i32> %mask) {788; CHECK-LABEL: test_masked_4xi32_to_16xi32_mem_mask1:789; CHECK: # %bb.0:790; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1791; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]792; CHECK-NEXT: retq793 %vec = load <4 x i32>, ptr %vp794 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>795 %cmp = icmp eq <16 x i32> %mask, zeroinitializer796 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default797 ret <16 x i32> %res798}799 800define <16 x i32> @test_masked_z_4xi32_to_16xi32_mem_mask1(ptr %vp, <16 x i32> %mask) {801; CHECK-LABEL: test_masked_z_4xi32_to_16xi32_mem_mask1:802; CHECK: # %bb.0:803; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1804; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]805; CHECK-NEXT: retq806 %vec = load <4 x i32>, ptr %vp807 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>808 %cmp = icmp eq <16 x i32> %mask, zeroinitializer809 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer810 ret <16 x i32> %res811}812define <16 x i32> @test_masked_4xi32_to_16xi32_mem_mask2(ptr %vp, <16 x i32> %default, <16 x i32> %mask) {813; CHECK-LABEL: test_masked_4xi32_to_16xi32_mem_mask2:814; CHECK: # %bb.0:815; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1816; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]817; CHECK-NEXT: retq818 %vec = load <4 x i32>, ptr %vp819 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>820 %cmp = icmp eq <16 x i32> %mask, zeroinitializer821 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default822 ret <16 x i32> %res823}824 825define <16 x i32> @test_masked_z_4xi32_to_16xi32_mem_mask2(ptr %vp, <16 x i32> %mask) {826; CHECK-LABEL: test_masked_z_4xi32_to_16xi32_mem_mask2:827; CHECK: # %bb.0:828; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1829; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]830; CHECK-NEXT: retq831 %vec = load <4 x i32>, ptr %vp832 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>833 %cmp = icmp eq <16 x i32> %mask, zeroinitializer834 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer835 ret <16 x i32> %res836}837define <16 x i32> @test_masked_4xi32_to_16xi32_mem_mask3(ptr %vp, <16 x i32> %default, <16 x i32> %mask) {838; CHECK-LABEL: test_masked_4xi32_to_16xi32_mem_mask3:839; CHECK: # %bb.0:840; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k1841; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]842; CHECK-NEXT: retq843 %vec = load <4 x i32>, ptr %vp844 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>845 %cmp = icmp eq <16 x i32> %mask, zeroinitializer846 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default847 ret <16 x i32> %res848}849 850define <16 x i32> @test_masked_z_4xi32_to_16xi32_mem_mask3(ptr %vp, <16 x i32> %mask) {851; CHECK-LABEL: test_masked_z_4xi32_to_16xi32_mem_mask3:852; CHECK: # %bb.0:853; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k1854; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]855; CHECK-NEXT: retq856 %vec = load <4 x i32>, ptr %vp857 %shuf = shufflevector <4 x i32> %vec, <4 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>858 %cmp = icmp eq <16 x i32> %mask, zeroinitializer859 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer860 ret <16 x i32> %res861}862define <4 x i64> @test_2xi64_to_4xi64_mem(ptr %vp) {863; CHECK-LABEL: test_2xi64_to_4xi64_mem:864; CHECK: # %bb.0:865; CHECK-NEXT: vbroadcasti128 {{.*#+}} ymm0 = mem[0,1,0,1]866; CHECK-NEXT: retq867 %vec = load <2 x i64>, ptr %vp868 %res = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>869 ret <4 x i64> %res870}871define <4 x i64> @test_masked_2xi64_to_4xi64_mem_mask0(ptr %vp, <4 x i64> %default, <4 x i64> %mask) {872; CHECK-LABEL: test_masked_2xi64_to_4xi64_mem_mask0:873; CHECK: # %bb.0:874; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k1875; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1]876; CHECK-NEXT: retq877 %vec = load <2 x i64>, ptr %vp878 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>879 %cmp = icmp eq <4 x i64> %mask, zeroinitializer880 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default881 ret <4 x i64> %res882}883 884define <4 x i64> @test_masked_z_2xi64_to_4xi64_mem_mask0(ptr %vp, <4 x i64> %mask) {885; CHECK-LABEL: test_masked_z_2xi64_to_4xi64_mem_mask0:886; CHECK: # %bb.0:887; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k1888; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1]889; CHECK-NEXT: retq890 %vec = load <2 x i64>, ptr %vp891 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>892 %cmp = icmp eq <4 x i64> %mask, zeroinitializer893 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer894 ret <4 x i64> %res895}896define <4 x i64> @test_masked_2xi64_to_4xi64_mem_mask1(ptr %vp, <4 x i64> %default, <4 x i64> %mask) {897; CHECK-LABEL: test_masked_2xi64_to_4xi64_mem_mask1:898; CHECK: # %bb.0:899; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k1900; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1]901; CHECK-NEXT: retq902 %vec = load <2 x i64>, ptr %vp903 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>904 %cmp = icmp eq <4 x i64> %mask, zeroinitializer905 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default906 ret <4 x i64> %res907}908 909define <4 x i64> @test_masked_z_2xi64_to_4xi64_mem_mask1(ptr %vp, <4 x i64> %mask) {910; CHECK-LABEL: test_masked_z_2xi64_to_4xi64_mem_mask1:911; CHECK: # %bb.0:912; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k1913; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1]914; CHECK-NEXT: retq915 %vec = load <2 x i64>, ptr %vp916 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>917 %cmp = icmp eq <4 x i64> %mask, zeroinitializer918 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer919 ret <4 x i64> %res920}921define <4 x i64> @test_masked_2xi64_to_4xi64_mem_mask2(ptr %vp, <4 x i64> %default, <4 x i64> %mask) {922; CHECK-LABEL: test_masked_2xi64_to_4xi64_mem_mask2:923; CHECK: # %bb.0:924; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k1925; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1]926; CHECK-NEXT: retq927 %vec = load <2 x i64>, ptr %vp928 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>929 %cmp = icmp eq <4 x i64> %mask, zeroinitializer930 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default931 ret <4 x i64> %res932}933 934define <4 x i64> @test_masked_z_2xi64_to_4xi64_mem_mask2(ptr %vp, <4 x i64> %mask) {935; CHECK-LABEL: test_masked_z_2xi64_to_4xi64_mem_mask2:936; CHECK: # %bb.0:937; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k1938; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1]939; CHECK-NEXT: retq940 %vec = load <2 x i64>, ptr %vp941 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>942 %cmp = icmp eq <4 x i64> %mask, zeroinitializer943 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer944 ret <4 x i64> %res945}946define <4 x i64> @test_masked_2xi64_to_4xi64_mem_mask3(ptr %vp, <4 x i64> %default, <4 x i64> %mask) {947; CHECK-LABEL: test_masked_2xi64_to_4xi64_mem_mask3:948; CHECK: # %bb.0:949; CHECK-NEXT: vptestnmq %ymm1, %ymm1, %k1950; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} ymm0 {%k1} = mem[0,1,0,1]951; CHECK-NEXT: retq952 %vec = load <2 x i64>, ptr %vp953 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>954 %cmp = icmp eq <4 x i64> %mask, zeroinitializer955 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> %default956 ret <4 x i64> %res957}958 959define <4 x i64> @test_masked_z_2xi64_to_4xi64_mem_mask3(ptr %vp, <4 x i64> %mask) {960; CHECK-LABEL: test_masked_z_2xi64_to_4xi64_mem_mask3:961; CHECK: # %bb.0:962; CHECK-NEXT: vptestnmq %ymm0, %ymm0, %k1963; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} ymm0 {%k1} {z} = mem[0,1,0,1]964; CHECK-NEXT: retq965 %vec = load <2 x i64>, ptr %vp966 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <4 x i32> <i32 0, i32 1, i32 0, i32 1>967 %cmp = icmp eq <4 x i64> %mask, zeroinitializer968 %res = select <4 x i1> %cmp, <4 x i64> %shuf, <4 x i64> zeroinitializer969 ret <4 x i64> %res970}971define <8 x i64> @test_2xi64_to_8xi64_mem(ptr %vp) {972; CHECK-LABEL: test_2xi64_to_8xi64_mem:973; CHECK: # %bb.0:974; CHECK-NEXT: vbroadcasti32x4 {{.*#+}} zmm0 = mem[0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]975; CHECK-NEXT: retq976 %vec = load <2 x i64>, ptr %vp977 %res = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>978 ret <8 x i64> %res979}980define <8 x i64> @test_masked_2xi64_to_8xi64_mem_mask0(ptr %vp, <8 x i64> %default, <8 x i64> %mask) {981; CHECK-LABEL: test_masked_2xi64_to_8xi64_mem_mask0:982; CHECK: # %bb.0:983; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k1984; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1]985; CHECK-NEXT: retq986 %vec = load <2 x i64>, ptr %vp987 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>988 %cmp = icmp eq <8 x i64> %mask, zeroinitializer989 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default990 ret <8 x i64> %res991}992 993define <8 x i64> @test_masked_z_2xi64_to_8xi64_mem_mask0(ptr %vp, <8 x i64> %mask) {994; CHECK-LABEL: test_masked_z_2xi64_to_8xi64_mem_mask0:995; CHECK: # %bb.0:996; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k1997; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]998; CHECK-NEXT: retq999 %vec = load <2 x i64>, ptr %vp1000 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>1001 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1002 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer1003 ret <8 x i64> %res1004}1005define <8 x i64> @test_masked_2xi64_to_8xi64_mem_mask1(ptr %vp, <8 x i64> %default, <8 x i64> %mask) {1006; CHECK-LABEL: test_masked_2xi64_to_8xi64_mem_mask1:1007; CHECK: # %bb.0:1008; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11009; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1]1010; CHECK-NEXT: retq1011 %vec = load <2 x i64>, ptr %vp1012 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>1013 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1014 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default1015 ret <8 x i64> %res1016}1017 1018define <8 x i64> @test_masked_z_2xi64_to_8xi64_mem_mask1(ptr %vp, <8 x i64> %mask) {1019; CHECK-LABEL: test_masked_z_2xi64_to_8xi64_mem_mask1:1020; CHECK: # %bb.0:1021; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11022; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]1023; CHECK-NEXT: retq1024 %vec = load <2 x i64>, ptr %vp1025 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>1026 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1027 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer1028 ret <8 x i64> %res1029}1030define <8 x i64> @test_masked_2xi64_to_8xi64_mem_mask2(ptr %vp, <8 x i64> %default, <8 x i64> %mask) {1031; CHECK-LABEL: test_masked_2xi64_to_8xi64_mem_mask2:1032; CHECK: # %bb.0:1033; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11034; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1]1035; CHECK-NEXT: retq1036 %vec = load <2 x i64>, ptr %vp1037 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>1038 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1039 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default1040 ret <8 x i64> %res1041}1042 1043define <8 x i64> @test_masked_z_2xi64_to_8xi64_mem_mask2(ptr %vp, <8 x i64> %mask) {1044; CHECK-LABEL: test_masked_z_2xi64_to_8xi64_mem_mask2:1045; CHECK: # %bb.0:1046; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11047; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]1048; CHECK-NEXT: retq1049 %vec = load <2 x i64>, ptr %vp1050 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>1051 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1052 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer1053 ret <8 x i64> %res1054}1055define <8 x i64> @test_masked_2xi64_to_8xi64_mem_mask3(ptr %vp, <8 x i64> %default, <8 x i64> %mask) {1056; CHECK-LABEL: test_masked_2xi64_to_8xi64_mem_mask3:1057; CHECK: # %bb.0:1058; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11059; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} zmm0 {%k1} = mem[0,1,0,1,0,1,0,1]1060; CHECK-NEXT: retq1061 %vec = load <2 x i64>, ptr %vp1062 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>1063 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1064 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default1065 ret <8 x i64> %res1066}1067 1068define <8 x i64> @test_masked_z_2xi64_to_8xi64_mem_mask3(ptr %vp, <8 x i64> %mask) {1069; CHECK-LABEL: test_masked_z_2xi64_to_8xi64_mem_mask3:1070; CHECK: # %bb.0:1071; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11072; CHECK-NEXT: vbroadcasti64x2 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,0,1,0,1,0,1]1073; CHECK-NEXT: retq1074 %vec = load <2 x i64>, ptr %vp1075 %shuf = shufflevector <2 x i64> %vec, <2 x i64> undef, <8 x i32> <i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1>1076 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1077 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer1078 ret <8 x i64> %res1079}1080define <16 x i32> @test_8xi32_to_16xi32_mem(ptr %vp) {1081; CHECK-LABEL: test_8xi32_to_16xi32_mem:1082; CHECK: # %bb.0:1083; CHECK-NEXT: vbroadcasti64x4 {{.*#+}} zmm0 = mem[0,1,2,3,0,1,2,3]1084; CHECK-NEXT: retq1085 %vec = load <8 x i32>, ptr %vp1086 %res = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1087 ret <16 x i32> %res1088}1089define <16 x i32> @test_masked_8xi32_to_16xi32_mem_mask0(ptr %vp, <16 x i32> %default, <16 x i32> %mask) {1090; CHECK-LABEL: test_masked_8xi32_to_16xi32_mem_mask0:1091; CHECK: # %bb.0:1092; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k11093; CHECK-NEXT: vbroadcasti32x8 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1094; CHECK-NEXT: retq1095 %vec = load <8 x i32>, ptr %vp1096 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1097 %cmp = icmp eq <16 x i32> %mask, zeroinitializer1098 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default1099 ret <16 x i32> %res1100}1101 1102define <16 x i32> @test_masked_z_8xi32_to_16xi32_mem_mask0(ptr %vp, <16 x i32> %mask) {1103; CHECK-LABEL: test_masked_z_8xi32_to_16xi32_mem_mask0:1104; CHECK: # %bb.0:1105; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k11106; CHECK-NEXT: vbroadcasti32x8 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1107; CHECK-NEXT: retq1108 %vec = load <8 x i32>, ptr %vp1109 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1110 %cmp = icmp eq <16 x i32> %mask, zeroinitializer1111 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer1112 ret <16 x i32> %res1113}1114define <16 x i32> @test_masked_8xi32_to_16xi32_mem_mask1(ptr %vp, <16 x i32> %default, <16 x i32> %mask) {1115; CHECK-LABEL: test_masked_8xi32_to_16xi32_mem_mask1:1116; CHECK: # %bb.0:1117; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k11118; CHECK-NEXT: vbroadcasti32x8 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1119; CHECK-NEXT: retq1120 %vec = load <8 x i32>, ptr %vp1121 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1122 %cmp = icmp eq <16 x i32> %mask, zeroinitializer1123 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default1124 ret <16 x i32> %res1125}1126 1127define <16 x i32> @test_masked_z_8xi32_to_16xi32_mem_mask1(ptr %vp, <16 x i32> %mask) {1128; CHECK-LABEL: test_masked_z_8xi32_to_16xi32_mem_mask1:1129; CHECK: # %bb.0:1130; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k11131; CHECK-NEXT: vbroadcasti32x8 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1132; CHECK-NEXT: retq1133 %vec = load <8 x i32>, ptr %vp1134 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1135 %cmp = icmp eq <16 x i32> %mask, zeroinitializer1136 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer1137 ret <16 x i32> %res1138}1139define <16 x i32> @test_masked_8xi32_to_16xi32_mem_mask2(ptr %vp, <16 x i32> %default, <16 x i32> %mask) {1140; CHECK-LABEL: test_masked_8xi32_to_16xi32_mem_mask2:1141; CHECK: # %bb.0:1142; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k11143; CHECK-NEXT: vbroadcasti32x8 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1144; CHECK-NEXT: retq1145 %vec = load <8 x i32>, ptr %vp1146 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1147 %cmp = icmp eq <16 x i32> %mask, zeroinitializer1148 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default1149 ret <16 x i32> %res1150}1151 1152define <16 x i32> @test_masked_z_8xi32_to_16xi32_mem_mask2(ptr %vp, <16 x i32> %mask) {1153; CHECK-LABEL: test_masked_z_8xi32_to_16xi32_mem_mask2:1154; CHECK: # %bb.0:1155; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k11156; CHECK-NEXT: vbroadcasti32x8 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1157; CHECK-NEXT: retq1158 %vec = load <8 x i32>, ptr %vp1159 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1160 %cmp = icmp eq <16 x i32> %mask, zeroinitializer1161 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer1162 ret <16 x i32> %res1163}1164define <16 x i32> @test_masked_8xi32_to_16xi32_mem_mask3(ptr %vp, <16 x i32> %default, <16 x i32> %mask) {1165; CHECK-LABEL: test_masked_8xi32_to_16xi32_mem_mask3:1166; CHECK: # %bb.0:1167; CHECK-NEXT: vptestnmd %zmm1, %zmm1, %k11168; CHECK-NEXT: vbroadcasti32x8 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1169; CHECK-NEXT: retq1170 %vec = load <8 x i32>, ptr %vp1171 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1172 %cmp = icmp eq <16 x i32> %mask, zeroinitializer1173 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> %default1174 ret <16 x i32> %res1175}1176 1177define <16 x i32> @test_masked_z_8xi32_to_16xi32_mem_mask3(ptr %vp, <16 x i32> %mask) {1178; CHECK-LABEL: test_masked_z_8xi32_to_16xi32_mem_mask3:1179; CHECK: # %bb.0:1180; CHECK-NEXT: vptestnmd %zmm0, %zmm0, %k11181; CHECK-NEXT: vbroadcasti32x8 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7]1182; CHECK-NEXT: retq1183 %vec = load <8 x i32>, ptr %vp1184 %shuf = shufflevector <8 x i32> %vec, <8 x i32> undef, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>1185 %cmp = icmp eq <16 x i32> %mask, zeroinitializer1186 %res = select <16 x i1> %cmp, <16 x i32> %shuf, <16 x i32> zeroinitializer1187 ret <16 x i32> %res1188}1189define <8 x i64> @test_4xi64_to_8xi64_mem(ptr %vp) {1190; CHECK-LABEL: test_4xi64_to_8xi64_mem:1191; CHECK: # %bb.0:1192; CHECK-NEXT: vbroadcasti64x4 {{.*#+}} zmm0 = mem[0,1,2,3,0,1,2,3]1193; CHECK-NEXT: retq1194 %vec = load <4 x i64>, ptr %vp1195 %res = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>1196 ret <8 x i64> %res1197}1198define <8 x i64> @test_masked_4xi64_to_8xi64_mem_mask0(ptr %vp, <8 x i64> %default, <8 x i64> %mask) {1199; CHECK-LABEL: test_masked_4xi64_to_8xi64_mem_mask0:1200; CHECK: # %bb.0:1201; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11202; CHECK-NEXT: vbroadcasti64x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3]1203; CHECK-NEXT: retq1204 %vec = load <4 x i64>, ptr %vp1205 %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>1206 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1207 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default1208 ret <8 x i64> %res1209}1210 1211define <8 x i64> @test_masked_z_4xi64_to_8xi64_mem_mask0(ptr %vp, <8 x i64> %mask) {1212; CHECK-LABEL: test_masked_z_4xi64_to_8xi64_mem_mask0:1213; CHECK: # %bb.0:1214; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11215; CHECK-NEXT: vbroadcasti64x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]1216; CHECK-NEXT: retq1217 %vec = load <4 x i64>, ptr %vp1218 %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>1219 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1220 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer1221 ret <8 x i64> %res1222}1223define <8 x i64> @test_masked_4xi64_to_8xi64_mem_mask1(ptr %vp, <8 x i64> %default, <8 x i64> %mask) {1224; CHECK-LABEL: test_masked_4xi64_to_8xi64_mem_mask1:1225; CHECK: # %bb.0:1226; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11227; CHECK-NEXT: vbroadcasti64x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3]1228; CHECK-NEXT: retq1229 %vec = load <4 x i64>, ptr %vp1230 %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>1231 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1232 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default1233 ret <8 x i64> %res1234}1235 1236define <8 x i64> @test_masked_z_4xi64_to_8xi64_mem_mask1(ptr %vp, <8 x i64> %mask) {1237; CHECK-LABEL: test_masked_z_4xi64_to_8xi64_mem_mask1:1238; CHECK: # %bb.0:1239; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11240; CHECK-NEXT: vbroadcasti64x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]1241; CHECK-NEXT: retq1242 %vec = load <4 x i64>, ptr %vp1243 %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>1244 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1245 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer1246 ret <8 x i64> %res1247}1248define <8 x i64> @test_masked_4xi64_to_8xi64_mem_mask2(ptr %vp, <8 x i64> %default, <8 x i64> %mask) {1249; CHECK-LABEL: test_masked_4xi64_to_8xi64_mem_mask2:1250; CHECK: # %bb.0:1251; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11252; CHECK-NEXT: vbroadcasti64x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3]1253; CHECK-NEXT: retq1254 %vec = load <4 x i64>, ptr %vp1255 %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>1256 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1257 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default1258 ret <8 x i64> %res1259}1260 1261define <8 x i64> @test_masked_z_4xi64_to_8xi64_mem_mask2(ptr %vp, <8 x i64> %mask) {1262; CHECK-LABEL: test_masked_z_4xi64_to_8xi64_mem_mask2:1263; CHECK: # %bb.0:1264; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11265; CHECK-NEXT: vbroadcasti64x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]1266; CHECK-NEXT: retq1267 %vec = load <4 x i64>, ptr %vp1268 %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>1269 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1270 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer1271 ret <8 x i64> %res1272}1273define <8 x i64> @test_masked_4xi64_to_8xi64_mem_mask3(ptr %vp, <8 x i64> %default, <8 x i64> %mask) {1274; CHECK-LABEL: test_masked_4xi64_to_8xi64_mem_mask3:1275; CHECK: # %bb.0:1276; CHECK-NEXT: vptestnmq %zmm1, %zmm1, %k11277; CHECK-NEXT: vbroadcasti64x4 {{.*#+}} zmm0 {%k1} = mem[0,1,2,3,0,1,2,3]1278; CHECK-NEXT: retq1279 %vec = load <4 x i64>, ptr %vp1280 %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>1281 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1282 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> %default1283 ret <8 x i64> %res1284}1285 1286define <8 x i64> @test_masked_z_4xi64_to_8xi64_mem_mask3(ptr %vp, <8 x i64> %mask) {1287; CHECK-LABEL: test_masked_z_4xi64_to_8xi64_mem_mask3:1288; CHECK: # %bb.0:1289; CHECK-NEXT: vptestnmq %zmm0, %zmm0, %k11290; CHECK-NEXT: vbroadcasti64x4 {{.*#+}} zmm0 {%k1} {z} = mem[0,1,2,3,0,1,2,3]1291; CHECK-NEXT: retq1292 %vec = load <4 x i64>, ptr %vp1293 %shuf = shufflevector <4 x i64> %vec, <4 x i64> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 0, i32 1, i32 2, i32 3>1294 %cmp = icmp eq <8 x i64> %mask, zeroinitializer1295 %res = select <8 x i1> %cmp, <8 x i64> %shuf, <8 x i64> zeroinitializer1296 ret <8 x i64> %res1297}1298