brintos

brintos / llvm-project-archived public Read only

0
0
Text · 75.5 KiB · c5b1880 Raw
1537 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 %s -o - | FileCheck %s3 4define <2 x double> @test_2xdouble_dup_low(<2 x double> %vec) {5; CHECK-LABEL: test_2xdouble_dup_low:6; CHECK:       # %bb.0:7; CHECK-NEXT:    vmovddup {{.*#+}} xmm0 = xmm0[0,0]8; CHECK-NEXT:    retq9  %res = shufflevector <2 x double> %vec, <2 x double> undef, <2 x i32> <i32 0, i32 0>10  ret <2 x double> %res11}12define <2 x double> @test_masked_2xdouble_dup_low_mask0(<2 x double> %vec, <2 x double> %vec2, <2 x double> %mask) {13; CHECK-LABEL: test_masked_2xdouble_dup_low_mask0:14; CHECK:       # %bb.0:15; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm316; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k117; CHECK-NEXT:    vmovddup {{.*#+}} xmm1 {%k1} = xmm0[0,0]18; CHECK-NEXT:    vmovapd %xmm1, %xmm019; CHECK-NEXT:    retq20  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <2 x i32> <i32 0, i32 0>21  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer22  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> %vec223  ret <2 x double> %res24}25 26define <2 x double> @test_masked_z_2xdouble_dup_low_mask0(<2 x double> %vec, <2 x double> %mask) {27; CHECK-LABEL: test_masked_z_2xdouble_dup_low_mask0:28; CHECK:       # %bb.0:29; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm230; CHECK-NEXT:    vcmpeqpd %xmm2, %xmm1, %k131; CHECK-NEXT:    vmovddup {{.*#+}} xmm0 {%k1} {z} = xmm0[0,0]32; CHECK-NEXT:    retq33  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <2 x i32> <i32 0, i32 0>34  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer35  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> zeroinitializer36  ret <2 x double> %res37}38define <2 x double> @test_masked_2xdouble_dup_low_mask1(<2 x double> %vec, <2 x double> %vec2, <2 x double> %mask) {39; CHECK-LABEL: test_masked_2xdouble_dup_low_mask1:40; CHECK:       # %bb.0:41; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm342; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k143; CHECK-NEXT:    vmovddup {{.*#+}} xmm1 {%k1} = xmm0[0,0]44; CHECK-NEXT:    vmovapd %xmm1, %xmm045; CHECK-NEXT:    retq46  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <2 x i32> <i32 0, i32 0>47  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer48  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> %vec249  ret <2 x double> %res50}51 52define <2 x double> @test_masked_z_2xdouble_dup_low_mask1(<2 x double> %vec, <2 x double> %mask) {53; CHECK-LABEL: test_masked_z_2xdouble_dup_low_mask1:54; CHECK:       # %bb.0:55; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm256; CHECK-NEXT:    vcmpeqpd %xmm2, %xmm1, %k157; CHECK-NEXT:    vmovddup {{.*#+}} xmm0 {%k1} {z} = xmm0[0,0]58; CHECK-NEXT:    retq59  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <2 x i32> <i32 0, i32 0>60  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer61  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> zeroinitializer62  ret <2 x double> %res63}64define <2 x double> @test_2xdouble_dup_low_mem(ptr %vp) {65; CHECK-LABEL: test_2xdouble_dup_low_mem:66; CHECK:       # %bb.0:67; CHECK-NEXT:    vmovddup {{.*#+}} xmm0 = mem[0,0]68; CHECK-NEXT:    retq69  %vec = load <2 x double>, ptr %vp70  %res = shufflevector <2 x double> %vec, <2 x double> undef, <2 x i32> <i32 0, i32 0>71  ret <2 x double> %res72}73define <2 x double> @test_masked_2xdouble_dup_low_mem_mask0(ptr %vp, <2 x double> %vec2, <2 x double> %mask) {74; CHECK-LABEL: test_masked_2xdouble_dup_low_mem_mask0:75; CHECK:       # %bb.0:76; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm277; CHECK-NEXT:    vcmpeqpd %xmm2, %xmm1, %k178; CHECK-NEXT:    vmovddup {{.*#+}} xmm0 {%k1} = mem[0,0]79; CHECK-NEXT:    retq80  %vec = load <2 x double>, ptr %vp81  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <2 x i32> <i32 0, i32 0>82  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer83  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> %vec284  ret <2 x double> %res85}86 87define <2 x double> @test_masked_z_2xdouble_dup_low_mem_mask0(ptr %vp, <2 x double> %mask) {88; CHECK-LABEL: test_masked_z_2xdouble_dup_low_mem_mask0:89; CHECK:       # %bb.0:90; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm191; CHECK-NEXT:    vcmpeqpd %xmm1, %xmm0, %k192; CHECK-NEXT:    vmovddup {{.*#+}} xmm0 {%k1} {z} = mem[0,0]93; CHECK-NEXT:    retq94  %vec = load <2 x double>, ptr %vp95  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <2 x i32> <i32 0, i32 0>96  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer97  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> zeroinitializer98  ret <2 x double> %res99}100define <2 x double> @test_masked_2xdouble_dup_low_mem_mask1(ptr %vp, <2 x double> %vec2, <2 x double> %mask) {101; CHECK-LABEL: test_masked_2xdouble_dup_low_mem_mask1:102; CHECK:       # %bb.0:103; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2104; CHECK-NEXT:    vcmpeqpd %xmm2, %xmm1, %k1105; CHECK-NEXT:    vmovddup {{.*#+}} xmm0 {%k1} = mem[0,0]106; CHECK-NEXT:    retq107  %vec = load <2 x double>, ptr %vp108  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <2 x i32> <i32 0, i32 0>109  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer110  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> %vec2111  ret <2 x double> %res112}113 114define <2 x double> @test_masked_z_2xdouble_dup_low_mem_mask1(ptr %vp, <2 x double> %mask) {115; CHECK-LABEL: test_masked_z_2xdouble_dup_low_mem_mask1:116; CHECK:       # %bb.0:117; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1118; CHECK-NEXT:    vcmpeqpd %xmm1, %xmm0, %k1119; CHECK-NEXT:    vmovddup {{.*#+}} xmm0 {%k1} {z} = mem[0,0]120; CHECK-NEXT:    retq121  %vec = load <2 x double>, ptr %vp122  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <2 x i32> <i32 0, i32 0>123  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer124  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> zeroinitializer125  ret <2 x double> %res126}127define <4 x double> @test_4xdouble_dup_low(<4 x double> %vec) {128; CHECK-LABEL: test_4xdouble_dup_low:129; CHECK:       # %bb.0:130; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 = ymm0[0,0,2,2]131; CHECK-NEXT:    retq132  %res = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>133  ret <4 x double> %res134}135define <4 x double> @test_masked_4xdouble_dup_low_mask0(<4 x double> %vec, <4 x double> %vec2, <4 x double> %mask) {136; CHECK-LABEL: test_masked_4xdouble_dup_low_mask0:137; CHECK:       # %bb.0:138; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3139; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k1140; CHECK-NEXT:    vmovddup {{.*#+}} ymm1 {%k1} = ymm0[0,0,2,2]141; CHECK-NEXT:    vmovapd %ymm1, %ymm0142; CHECK-NEXT:    retq143  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>144  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer145  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec2146  ret <4 x double> %res147}148 149define <4 x double> @test_masked_z_4xdouble_dup_low_mask0(<4 x double> %vec, <4 x double> %mask) {150; CHECK-LABEL: test_masked_z_4xdouble_dup_low_mask0:151; CHECK:       # %bb.0:152; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2153; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1154; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2]155; CHECK-NEXT:    retq156  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>157  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer158  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer159  ret <4 x double> %res160}161define <4 x double> @test_masked_4xdouble_dup_low_mask1(<4 x double> %vec, <4 x double> %vec2, <4 x double> %mask) {162; CHECK-LABEL: test_masked_4xdouble_dup_low_mask1:163; CHECK:       # %bb.0:164; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3165; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k1166; CHECK-NEXT:    vmovddup {{.*#+}} ymm1 {%k1} = ymm0[0,0,2,2]167; CHECK-NEXT:    vmovapd %ymm1, %ymm0168; CHECK-NEXT:    retq169  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>170  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer171  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec2172  ret <4 x double> %res173}174 175define <4 x double> @test_masked_z_4xdouble_dup_low_mask1(<4 x double> %vec, <4 x double> %mask) {176; CHECK-LABEL: test_masked_z_4xdouble_dup_low_mask1:177; CHECK:       # %bb.0:178; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2179; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1180; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2]181; CHECK-NEXT:    retq182  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>183  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer184  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer185  ret <4 x double> %res186}187define <4 x double> @test_masked_4xdouble_dup_low_mask2(<4 x double> %vec, <4 x double> %vec2, <4 x double> %mask) {188; CHECK-LABEL: test_masked_4xdouble_dup_low_mask2:189; CHECK:       # %bb.0:190; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3191; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k1192; CHECK-NEXT:    vmovddup {{.*#+}} ymm1 {%k1} = ymm0[0,0,2,2]193; CHECK-NEXT:    vmovapd %ymm1, %ymm0194; CHECK-NEXT:    retq195  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>196  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer197  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec2198  ret <4 x double> %res199}200 201define <4 x double> @test_masked_z_4xdouble_dup_low_mask2(<4 x double> %vec, <4 x double> %mask) {202; CHECK-LABEL: test_masked_z_4xdouble_dup_low_mask2:203; CHECK:       # %bb.0:204; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2205; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1206; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2]207; CHECK-NEXT:    retq208  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>209  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer210  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer211  ret <4 x double> %res212}213define <4 x double> @test_masked_4xdouble_dup_low_mask3(<4 x double> %vec, <4 x double> %vec2, <4 x double> %mask) {214; CHECK-LABEL: test_masked_4xdouble_dup_low_mask3:215; CHECK:       # %bb.0:216; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3217; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k1218; CHECK-NEXT:    vmovddup {{.*#+}} ymm1 {%k1} = ymm0[0,0,2,2]219; CHECK-NEXT:    vmovapd %ymm1, %ymm0220; CHECK-NEXT:    retq221  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>222  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer223  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec2224  ret <4 x double> %res225}226 227define <4 x double> @test_masked_z_4xdouble_dup_low_mask3(<4 x double> %vec, <4 x double> %mask) {228; CHECK-LABEL: test_masked_z_4xdouble_dup_low_mask3:229; CHECK:       # %bb.0:230; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2231; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1232; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2]233; CHECK-NEXT:    retq234  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>235  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer236  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer237  ret <4 x double> %res238}239define <4 x double> @test_masked_4xdouble_dup_low_mask4(<4 x double> %vec, <4 x double> %vec2, <4 x double> %mask) {240; CHECK-LABEL: test_masked_4xdouble_dup_low_mask4:241; CHECK:       # %bb.0:242; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3243; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k1244; CHECK-NEXT:    vmovddup {{.*#+}} ymm1 {%k1} = ymm0[0,0,2,2]245; CHECK-NEXT:    vmovapd %ymm1, %ymm0246; CHECK-NEXT:    retq247  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>248  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer249  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec2250  ret <4 x double> %res251}252 253define <4 x double> @test_masked_z_4xdouble_dup_low_mask4(<4 x double> %vec, <4 x double> %mask) {254; CHECK-LABEL: test_masked_z_4xdouble_dup_low_mask4:255; CHECK:       # %bb.0:256; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2257; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1258; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2]259; CHECK-NEXT:    retq260  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>261  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer262  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer263  ret <4 x double> %res264}265define <4 x double> @test_4xdouble_dup_low_mem(ptr %vp) {266; CHECK-LABEL: test_4xdouble_dup_low_mem:267; CHECK:       # %bb.0:268; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 = mem[0,0,2,2]269; CHECK-NEXT:    retq270  %vec = load <4 x double>, ptr %vp271  %res = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>272  ret <4 x double> %res273}274define <4 x double> @test_masked_4xdouble_dup_low_mem_mask0(ptr %vp, <4 x double> %vec2, <4 x double> %mask) {275; CHECK-LABEL: test_masked_4xdouble_dup_low_mem_mask0:276; CHECK:       # %bb.0:277; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2278; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1279; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} = mem[0,0,2,2]280; CHECK-NEXT:    retq281  %vec = load <4 x double>, ptr %vp282  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>283  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer284  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec2285  ret <4 x double> %res286}287 288define <4 x double> @test_masked_z_4xdouble_dup_low_mem_mask0(ptr %vp, <4 x double> %mask) {289; CHECK-LABEL: test_masked_z_4xdouble_dup_low_mem_mask0:290; CHECK:       # %bb.0:291; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1292; CHECK-NEXT:    vcmpeqpd %ymm1, %ymm0, %k1293; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} {z} = mem[0,0,2,2]294; CHECK-NEXT:    retq295  %vec = load <4 x double>, ptr %vp296  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>297  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer298  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer299  ret <4 x double> %res300}301define <4 x double> @test_masked_4xdouble_dup_low_mem_mask1(ptr %vp, <4 x double> %vec2, <4 x double> %mask) {302; CHECK-LABEL: test_masked_4xdouble_dup_low_mem_mask1:303; CHECK:       # %bb.0:304; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2305; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1306; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} = mem[0,0,2,2]307; CHECK-NEXT:    retq308  %vec = load <4 x double>, ptr %vp309  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>310  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer311  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec2312  ret <4 x double> %res313}314 315define <4 x double> @test_masked_z_4xdouble_dup_low_mem_mask1(ptr %vp, <4 x double> %mask) {316; CHECK-LABEL: test_masked_z_4xdouble_dup_low_mem_mask1:317; CHECK:       # %bb.0:318; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1319; CHECK-NEXT:    vcmpeqpd %ymm1, %ymm0, %k1320; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} {z} = mem[0,0,2,2]321; CHECK-NEXT:    retq322  %vec = load <4 x double>, ptr %vp323  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>324  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer325  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer326  ret <4 x double> %res327}328define <4 x double> @test_masked_4xdouble_dup_low_mem_mask2(ptr %vp, <4 x double> %vec2, <4 x double> %mask) {329; CHECK-LABEL: test_masked_4xdouble_dup_low_mem_mask2:330; CHECK:       # %bb.0:331; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2332; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1333; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} = mem[0,0,2,2]334; CHECK-NEXT:    retq335  %vec = load <4 x double>, ptr %vp336  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>337  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer338  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec2339  ret <4 x double> %res340}341 342define <4 x double> @test_masked_z_4xdouble_dup_low_mem_mask2(ptr %vp, <4 x double> %mask) {343; CHECK-LABEL: test_masked_z_4xdouble_dup_low_mem_mask2:344; CHECK:       # %bb.0:345; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1346; CHECK-NEXT:    vcmpeqpd %ymm1, %ymm0, %k1347; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} {z} = mem[0,0,2,2]348; CHECK-NEXT:    retq349  %vec = load <4 x double>, ptr %vp350  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>351  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer352  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer353  ret <4 x double> %res354}355define <4 x double> @test_masked_4xdouble_dup_low_mem_mask3(ptr %vp, <4 x double> %vec2, <4 x double> %mask) {356; CHECK-LABEL: test_masked_4xdouble_dup_low_mem_mask3:357; CHECK:       # %bb.0:358; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2359; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1360; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} = mem[0,0,2,2]361; CHECK-NEXT:    retq362  %vec = load <4 x double>, ptr %vp363  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>364  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer365  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec2366  ret <4 x double> %res367}368 369define <4 x double> @test_masked_z_4xdouble_dup_low_mem_mask3(ptr %vp, <4 x double> %mask) {370; CHECK-LABEL: test_masked_z_4xdouble_dup_low_mem_mask3:371; CHECK:       # %bb.0:372; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1373; CHECK-NEXT:    vcmpeqpd %ymm1, %ymm0, %k1374; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} {z} = mem[0,0,2,2]375; CHECK-NEXT:    retq376  %vec = load <4 x double>, ptr %vp377  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>378  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer379  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer380  ret <4 x double> %res381}382define <4 x double> @test_masked_4xdouble_dup_low_mem_mask4(ptr %vp, <4 x double> %vec2, <4 x double> %mask) {383; CHECK-LABEL: test_masked_4xdouble_dup_low_mem_mask4:384; CHECK:       # %bb.0:385; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2386; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1387; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} = mem[0,0,2,2]388; CHECK-NEXT:    retq389  %vec = load <4 x double>, ptr %vp390  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>391  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer392  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec2393  ret <4 x double> %res394}395 396define <4 x double> @test_masked_z_4xdouble_dup_low_mem_mask4(ptr %vp, <4 x double> %mask) {397; CHECK-LABEL: test_masked_z_4xdouble_dup_low_mem_mask4:398; CHECK:       # %bb.0:399; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1400; CHECK-NEXT:    vcmpeqpd %ymm1, %ymm0, %k1401; CHECK-NEXT:    vmovddup {{.*#+}} ymm0 {%k1} {z} = mem[0,0,2,2]402; CHECK-NEXT:    retq403  %vec = load <4 x double>, ptr %vp404  %shuf = shufflevector <4 x double> %vec, <4 x double> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>405  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer406  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer407  ret <4 x double> %res408}409define <8 x double> @test_8xdouble_dup_low(<8 x double> %vec) {410; CHECK-LABEL: test_8xdouble_dup_low:411; CHECK:       # %bb.0:412; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6]413; CHECK-NEXT:    retq414  %res = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>415  ret <8 x double> %res416}417define <8 x double> @test_masked_8xdouble_dup_low_mask0(<8 x double> %vec, <8 x double> %vec2, <8 x double> %mask) {418; CHECK-LABEL: test_masked_8xdouble_dup_low_mask0:419; CHECK:       # %bb.0:420; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3421; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k1422; CHECK-NEXT:    vmovddup {{.*#+}} zmm1 {%k1} = zmm0[0,0,2,2,4,4,6,6]423; CHECK-NEXT:    vmovapd %zmm1, %zmm0424; CHECK-NEXT:    retq425  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>426  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer427  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec2428  ret <8 x double> %res429}430 431define <8 x double> @test_masked_z_8xdouble_dup_low_mask0(<8 x double> %vec, <8 x double> %mask) {432; CHECK-LABEL: test_masked_z_8xdouble_dup_low_mask0:433; CHECK:       # %bb.0:434; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2435; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1436; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6]437; CHECK-NEXT:    retq438  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>439  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer440  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer441  ret <8 x double> %res442}443define <8 x double> @test_masked_8xdouble_dup_low_mask1(<8 x double> %vec, <8 x double> %vec2, <8 x double> %mask) {444; CHECK-LABEL: test_masked_8xdouble_dup_low_mask1:445; CHECK:       # %bb.0:446; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3447; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k1448; CHECK-NEXT:    vmovddup {{.*#+}} zmm1 {%k1} = zmm0[0,0,2,2,4,4,6,6]449; CHECK-NEXT:    vmovapd %zmm1, %zmm0450; CHECK-NEXT:    retq451  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>452  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer453  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec2454  ret <8 x double> %res455}456 457define <8 x double> @test_masked_z_8xdouble_dup_low_mask1(<8 x double> %vec, <8 x double> %mask) {458; CHECK-LABEL: test_masked_z_8xdouble_dup_low_mask1:459; CHECK:       # %bb.0:460; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2461; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1462; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6]463; CHECK-NEXT:    retq464  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>465  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer466  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer467  ret <8 x double> %res468}469define <8 x double> @test_masked_8xdouble_dup_low_mask2(<8 x double> %vec, <8 x double> %vec2, <8 x double> %mask) {470; CHECK-LABEL: test_masked_8xdouble_dup_low_mask2:471; CHECK:       # %bb.0:472; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3473; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k1474; CHECK-NEXT:    vmovddup {{.*#+}} zmm1 {%k1} = zmm0[0,0,2,2,4,4,6,6]475; CHECK-NEXT:    vmovapd %zmm1, %zmm0476; CHECK-NEXT:    retq477  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>478  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer479  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec2480  ret <8 x double> %res481}482 483define <8 x double> @test_masked_z_8xdouble_dup_low_mask2(<8 x double> %vec, <8 x double> %mask) {484; CHECK-LABEL: test_masked_z_8xdouble_dup_low_mask2:485; CHECK:       # %bb.0:486; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2487; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1488; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6]489; CHECK-NEXT:    retq490  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>491  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer492  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer493  ret <8 x double> %res494}495define <8 x double> @test_masked_8xdouble_dup_low_mask3(<8 x double> %vec, <8 x double> %vec2, <8 x double> %mask) {496; CHECK-LABEL: test_masked_8xdouble_dup_low_mask3:497; CHECK:       # %bb.0:498; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3499; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k1500; CHECK-NEXT:    vmovddup {{.*#+}} zmm1 {%k1} = zmm0[0,0,2,2,4,4,6,6]501; CHECK-NEXT:    vmovapd %zmm1, %zmm0502; CHECK-NEXT:    retq503  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>504  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer505  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec2506  ret <8 x double> %res507}508 509define <8 x double> @test_masked_z_8xdouble_dup_low_mask3(<8 x double> %vec, <8 x double> %mask) {510; CHECK-LABEL: test_masked_z_8xdouble_dup_low_mask3:511; CHECK:       # %bb.0:512; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2513; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1514; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6]515; CHECK-NEXT:    retq516  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>517  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer518  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer519  ret <8 x double> %res520}521define <8 x double> @test_masked_8xdouble_dup_low_mask4(<8 x double> %vec, <8 x double> %vec2, <8 x double> %mask) {522; CHECK-LABEL: test_masked_8xdouble_dup_low_mask4:523; CHECK:       # %bb.0:524; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3525; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k1526; CHECK-NEXT:    vmovddup {{.*#+}} zmm1 {%k1} = zmm0[0,0,2,2,4,4,6,6]527; CHECK-NEXT:    vmovapd %zmm1, %zmm0528; CHECK-NEXT:    retq529  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>530  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer531  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec2532  ret <8 x double> %res533}534 535define <8 x double> @test_masked_z_8xdouble_dup_low_mask4(<8 x double> %vec, <8 x double> %mask) {536; CHECK-LABEL: test_masked_z_8xdouble_dup_low_mask4:537; CHECK:       # %bb.0:538; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2539; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1540; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6]541; CHECK-NEXT:    retq542  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>543  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer544  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer545  ret <8 x double> %res546}547define <8 x double> @test_8xdouble_dup_low_mem(ptr %vp) {548; CHECK-LABEL: test_8xdouble_dup_low_mem:549; CHECK:       # %bb.0:550; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 = mem[0,0,2,2,4,4,6,6]551; CHECK-NEXT:    retq552  %vec = load <8 x double>, ptr %vp553  %res = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>554  ret <8 x double> %res555}556define <8 x double> @test_masked_8xdouble_dup_low_mem_mask0(ptr %vp, <8 x double> %vec2, <8 x double> %mask) {557; CHECK-LABEL: test_masked_8xdouble_dup_low_mem_mask0:558; CHECK:       # %bb.0:559; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2560; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1561; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} = mem[0,0,2,2,4,4,6,6]562; CHECK-NEXT:    retq563  %vec = load <8 x double>, ptr %vp564  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>565  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer566  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec2567  ret <8 x double> %res568}569 570define <8 x double> @test_masked_z_8xdouble_dup_low_mem_mask0(ptr %vp, <8 x double> %mask) {571; CHECK-LABEL: test_masked_z_8xdouble_dup_low_mem_mask0:572; CHECK:       # %bb.0:573; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1574; CHECK-NEXT:    vcmpeqpd %zmm1, %zmm0, %k1575; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6]576; CHECK-NEXT:    retq577  %vec = load <8 x double>, ptr %vp578  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>579  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer580  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer581  ret <8 x double> %res582}583define <8 x double> @test_masked_8xdouble_dup_low_mem_mask1(ptr %vp, <8 x double> %vec2, <8 x double> %mask) {584; CHECK-LABEL: test_masked_8xdouble_dup_low_mem_mask1:585; CHECK:       # %bb.0:586; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2587; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1588; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} = mem[0,0,2,2,4,4,6,6]589; CHECK-NEXT:    retq590  %vec = load <8 x double>, ptr %vp591  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>592  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer593  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec2594  ret <8 x double> %res595}596 597define <8 x double> @test_masked_z_8xdouble_dup_low_mem_mask1(ptr %vp, <8 x double> %mask) {598; CHECK-LABEL: test_masked_z_8xdouble_dup_low_mem_mask1:599; CHECK:       # %bb.0:600; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1601; CHECK-NEXT:    vcmpeqpd %zmm1, %zmm0, %k1602; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6]603; CHECK-NEXT:    retq604  %vec = load <8 x double>, ptr %vp605  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>606  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer607  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer608  ret <8 x double> %res609}610define <8 x double> @test_masked_8xdouble_dup_low_mem_mask2(ptr %vp, <8 x double> %vec2, <8 x double> %mask) {611; CHECK-LABEL: test_masked_8xdouble_dup_low_mem_mask2:612; CHECK:       # %bb.0:613; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2614; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1615; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} = mem[0,0,2,2,4,4,6,6]616; CHECK-NEXT:    retq617  %vec = load <8 x double>, ptr %vp618  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>619  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer620  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec2621  ret <8 x double> %res622}623 624define <8 x double> @test_masked_z_8xdouble_dup_low_mem_mask2(ptr %vp, <8 x double> %mask) {625; CHECK-LABEL: test_masked_z_8xdouble_dup_low_mem_mask2:626; CHECK:       # %bb.0:627; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1628; CHECK-NEXT:    vcmpeqpd %zmm1, %zmm0, %k1629; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6]630; CHECK-NEXT:    retq631  %vec = load <8 x double>, ptr %vp632  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>633  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer634  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer635  ret <8 x double> %res636}637define <8 x double> @test_masked_8xdouble_dup_low_mem_mask3(ptr %vp, <8 x double> %vec2, <8 x double> %mask) {638; CHECK-LABEL: test_masked_8xdouble_dup_low_mem_mask3:639; CHECK:       # %bb.0:640; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2641; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1642; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} = mem[0,0,2,2,4,4,6,6]643; CHECK-NEXT:    retq644  %vec = load <8 x double>, ptr %vp645  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>646  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer647  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec2648  ret <8 x double> %res649}650 651define <8 x double> @test_masked_z_8xdouble_dup_low_mem_mask3(ptr %vp, <8 x double> %mask) {652; CHECK-LABEL: test_masked_z_8xdouble_dup_low_mem_mask3:653; CHECK:       # %bb.0:654; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1655; CHECK-NEXT:    vcmpeqpd %zmm1, %zmm0, %k1656; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6]657; CHECK-NEXT:    retq658  %vec = load <8 x double>, ptr %vp659  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>660  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer661  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer662  ret <8 x double> %res663}664define <8 x double> @test_masked_8xdouble_dup_low_mem_mask4(ptr %vp, <8 x double> %vec2, <8 x double> %mask) {665; CHECK-LABEL: test_masked_8xdouble_dup_low_mem_mask4:666; CHECK:       # %bb.0:667; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2668; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1669; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} = mem[0,0,2,2,4,4,6,6]670; CHECK-NEXT:    retq671  %vec = load <8 x double>, ptr %vp672  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>673  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer674  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec2675  ret <8 x double> %res676}677 678define <8 x double> @test_masked_z_8xdouble_dup_low_mem_mask4(ptr %vp, <8 x double> %mask) {679; CHECK-LABEL: test_masked_z_8xdouble_dup_low_mem_mask4:680; CHECK:       # %bb.0:681; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1682; CHECK-NEXT:    vcmpeqpd %zmm1, %zmm0, %k1683; CHECK-NEXT:    vmovddup {{.*#+}} zmm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6]684; CHECK-NEXT:    retq685  %vec = load <8 x double>, ptr %vp686  %shuf = shufflevector <8 x double> %vec, <8 x double> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>687  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer688  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer689  ret <8 x double> %res690}691define <4 x float> @test_4xfloat_dup_low(<4 x float> %vec) {692; CHECK-LABEL: test_4xfloat_dup_low:693; CHECK:       # %bb.0:694; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 = xmm0[0,0,2,2]695; CHECK-NEXT:    retq696  %res = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>697  ret <4 x float> %res698}699define <4 x float> @test_masked_4xfloat_dup_low_mask0(<4 x float> %vec, <4 x float> %vec2, <4 x float> %mask) {700; CHECK-LABEL: test_masked_4xfloat_dup_low_mask0:701; CHECK:       # %bb.0:702; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3703; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1704; CHECK-NEXT:    vmovsldup {{.*#+}} xmm1 {%k1} = xmm0[0,0,2,2]705; CHECK-NEXT:    vmovaps %xmm1, %xmm0706; CHECK-NEXT:    retq707  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>708  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer709  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2710  ret <4 x float> %res711}712 713define <4 x float> @test_masked_z_4xfloat_dup_low_mask0(<4 x float> %vec, <4 x float> %mask) {714; CHECK-LABEL: test_masked_z_4xfloat_dup_low_mask0:715; CHECK:       # %bb.0:716; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2717; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1718; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} {z} = xmm0[0,0,2,2]719; CHECK-NEXT:    retq720  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>721  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer722  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer723  ret <4 x float> %res724}725define <4 x float> @test_masked_4xfloat_dup_low_mask1(<4 x float> %vec, <4 x float> %vec2, <4 x float> %mask) {726; CHECK-LABEL: test_masked_4xfloat_dup_low_mask1:727; CHECK:       # %bb.0:728; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3729; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1730; CHECK-NEXT:    vmovsldup {{.*#+}} xmm1 {%k1} = xmm0[0,0,2,2]731; CHECK-NEXT:    vmovaps %xmm1, %xmm0732; CHECK-NEXT:    retq733  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>734  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer735  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2736  ret <4 x float> %res737}738 739define <4 x float> @test_masked_z_4xfloat_dup_low_mask1(<4 x float> %vec, <4 x float> %mask) {740; CHECK-LABEL: test_masked_z_4xfloat_dup_low_mask1:741; CHECK:       # %bb.0:742; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2743; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1744; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} {z} = xmm0[0,0,2,2]745; CHECK-NEXT:    retq746  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>747  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer748  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer749  ret <4 x float> %res750}751define <4 x float> @test_masked_4xfloat_dup_low_mask2(<4 x float> %vec, <4 x float> %vec2, <4 x float> %mask) {752; CHECK-LABEL: test_masked_4xfloat_dup_low_mask2:753; CHECK:       # %bb.0:754; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3755; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1756; CHECK-NEXT:    vmovsldup {{.*#+}} xmm1 {%k1} = xmm0[0,0,2,2]757; CHECK-NEXT:    vmovaps %xmm1, %xmm0758; CHECK-NEXT:    retq759  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>760  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer761  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2762  ret <4 x float> %res763}764 765define <4 x float> @test_masked_z_4xfloat_dup_low_mask2(<4 x float> %vec, <4 x float> %mask) {766; CHECK-LABEL: test_masked_z_4xfloat_dup_low_mask2:767; CHECK:       # %bb.0:768; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2769; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1770; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} {z} = xmm0[0,0,2,2]771; CHECK-NEXT:    retq772  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>773  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer774  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer775  ret <4 x float> %res776}777define <4 x float> @test_masked_4xfloat_dup_low_mask3(<4 x float> %vec, <4 x float> %vec2, <4 x float> %mask) {778; CHECK-LABEL: test_masked_4xfloat_dup_low_mask3:779; CHECK:       # %bb.0:780; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3781; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1782; CHECK-NEXT:    vmovsldup {{.*#+}} xmm1 {%k1} = xmm0[0,0,2,2]783; CHECK-NEXT:    vmovaps %xmm1, %xmm0784; CHECK-NEXT:    retq785  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>786  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer787  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2788  ret <4 x float> %res789}790 791define <4 x float> @test_masked_z_4xfloat_dup_low_mask3(<4 x float> %vec, <4 x float> %mask) {792; CHECK-LABEL: test_masked_z_4xfloat_dup_low_mask3:793; CHECK:       # %bb.0:794; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2795; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1796; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} {z} = xmm0[0,0,2,2]797; CHECK-NEXT:    retq798  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>799  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer800  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer801  ret <4 x float> %res802}803define <4 x float> @test_masked_4xfloat_dup_low_mask4(<4 x float> %vec, <4 x float> %vec2, <4 x float> %mask) {804; CHECK-LABEL: test_masked_4xfloat_dup_low_mask4:805; CHECK:       # %bb.0:806; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3807; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1808; CHECK-NEXT:    vmovsldup {{.*#+}} xmm1 {%k1} = xmm0[0,0,2,2]809; CHECK-NEXT:    vmovaps %xmm1, %xmm0810; CHECK-NEXT:    retq811  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>812  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer813  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2814  ret <4 x float> %res815}816 817define <4 x float> @test_masked_z_4xfloat_dup_low_mask4(<4 x float> %vec, <4 x float> %mask) {818; CHECK-LABEL: test_masked_z_4xfloat_dup_low_mask4:819; CHECK:       # %bb.0:820; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2821; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1822; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} {z} = xmm0[0,0,2,2]823; CHECK-NEXT:    retq824  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>825  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer826  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer827  ret <4 x float> %res828}829define <4 x float> @test_4xfloat_dup_low_mem(ptr %vp) {830; CHECK-LABEL: test_4xfloat_dup_low_mem:831; CHECK:       # %bb.0:832; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 = mem[0,0,2,2]833; CHECK-NEXT:    retq834  %vec = load <4 x float>, ptr %vp835  %res = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>836  ret <4 x float> %res837}838define <4 x float> @test_masked_4xfloat_dup_low_mem_mask0(ptr %vp, <4 x float> %vec2, <4 x float> %mask) {839; CHECK-LABEL: test_masked_4xfloat_dup_low_mem_mask0:840; CHECK:       # %bb.0:841; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2842; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1843; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} = mem[0,0,2,2]844; CHECK-NEXT:    retq845  %vec = load <4 x float>, ptr %vp846  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>847  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer848  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2849  ret <4 x float> %res850}851 852define <4 x float> @test_masked_z_4xfloat_dup_low_mem_mask0(ptr %vp, <4 x float> %mask) {853; CHECK-LABEL: test_masked_z_4xfloat_dup_low_mem_mask0:854; CHECK:       # %bb.0:855; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1856; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1857; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} {z} = mem[0,0,2,2]858; CHECK-NEXT:    retq859  %vec = load <4 x float>, ptr %vp860  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>861  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer862  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer863  ret <4 x float> %res864}865define <4 x float> @test_masked_4xfloat_dup_low_mem_mask1(ptr %vp, <4 x float> %vec2, <4 x float> %mask) {866; CHECK-LABEL: test_masked_4xfloat_dup_low_mem_mask1:867; CHECK:       # %bb.0:868; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2869; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1870; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} = mem[0,0,2,2]871; CHECK-NEXT:    retq872  %vec = load <4 x float>, ptr %vp873  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>874  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer875  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2876  ret <4 x float> %res877}878 879define <4 x float> @test_masked_z_4xfloat_dup_low_mem_mask1(ptr %vp, <4 x float> %mask) {880; CHECK-LABEL: test_masked_z_4xfloat_dup_low_mem_mask1:881; CHECK:       # %bb.0:882; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1883; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1884; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} {z} = mem[0,0,2,2]885; CHECK-NEXT:    retq886  %vec = load <4 x float>, ptr %vp887  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>888  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer889  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer890  ret <4 x float> %res891}892define <4 x float> @test_masked_4xfloat_dup_low_mem_mask2(ptr %vp, <4 x float> %vec2, <4 x float> %mask) {893; CHECK-LABEL: test_masked_4xfloat_dup_low_mem_mask2:894; CHECK:       # %bb.0:895; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2896; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1897; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} = mem[0,0,2,2]898; CHECK-NEXT:    retq899  %vec = load <4 x float>, ptr %vp900  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>901  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer902  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2903  ret <4 x float> %res904}905 906define <4 x float> @test_masked_z_4xfloat_dup_low_mem_mask2(ptr %vp, <4 x float> %mask) {907; CHECK-LABEL: test_masked_z_4xfloat_dup_low_mem_mask2:908; CHECK:       # %bb.0:909; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1910; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1911; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} {z} = mem[0,0,2,2]912; CHECK-NEXT:    retq913  %vec = load <4 x float>, ptr %vp914  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>915  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer916  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer917  ret <4 x float> %res918}919define <4 x float> @test_masked_4xfloat_dup_low_mem_mask3(ptr %vp, <4 x float> %vec2, <4 x float> %mask) {920; CHECK-LABEL: test_masked_4xfloat_dup_low_mem_mask3:921; CHECK:       # %bb.0:922; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2923; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1924; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} = mem[0,0,2,2]925; CHECK-NEXT:    retq926  %vec = load <4 x float>, ptr %vp927  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>928  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer929  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2930  ret <4 x float> %res931}932 933define <4 x float> @test_masked_z_4xfloat_dup_low_mem_mask3(ptr %vp, <4 x float> %mask) {934; CHECK-LABEL: test_masked_z_4xfloat_dup_low_mem_mask3:935; CHECK:       # %bb.0:936; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1937; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1938; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} {z} = mem[0,0,2,2]939; CHECK-NEXT:    retq940  %vec = load <4 x float>, ptr %vp941  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>942  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer943  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer944  ret <4 x float> %res945}946define <4 x float> @test_masked_4xfloat_dup_low_mem_mask4(ptr %vp, <4 x float> %vec2, <4 x float> %mask) {947; CHECK-LABEL: test_masked_4xfloat_dup_low_mem_mask4:948; CHECK:       # %bb.0:949; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2950; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1951; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} = mem[0,0,2,2]952; CHECK-NEXT:    retq953  %vec = load <4 x float>, ptr %vp954  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>955  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer956  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2957  ret <4 x float> %res958}959 960define <4 x float> @test_masked_z_4xfloat_dup_low_mem_mask4(ptr %vp, <4 x float> %mask) {961; CHECK-LABEL: test_masked_z_4xfloat_dup_low_mem_mask4:962; CHECK:       # %bb.0:963; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1964; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1965; CHECK-NEXT:    vmovsldup {{.*#+}} xmm0 {%k1} {z} = mem[0,0,2,2]966; CHECK-NEXT:    retq967  %vec = load <4 x float>, ptr %vp968  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 0, i32 0, i32 2, i32 2>969  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer970  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer971  ret <4 x float> %res972}973define <8 x float> @test_8xfloat_dup_low(<8 x float> %vec) {974; CHECK-LABEL: test_8xfloat_dup_low:975; CHECK:       # %bb.0:976; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 = ymm0[0,0,2,2,4,4,6,6]977; CHECK-NEXT:    retq978  %res = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>979  ret <8 x float> %res980}981define <8 x float> @test_masked_8xfloat_dup_low_mask0(<8 x float> %vec, <8 x float> %vec2, <8 x float> %mask) {982; CHECK-LABEL: test_masked_8xfloat_dup_low_mask0:983; CHECK:       # %bb.0:984; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3985; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1986; CHECK-NEXT:    vmovsldup {{.*#+}} ymm1 {%k1} = ymm0[0,0,2,2,4,4,6,6]987; CHECK-NEXT:    vmovaps %ymm1, %ymm0988; CHECK-NEXT:    retq989  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>990  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer991  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec2992  ret <8 x float> %res993}994 995define <8 x float> @test_masked_z_8xfloat_dup_low_mask0(<8 x float> %vec, <8 x float> %mask) {996; CHECK-LABEL: test_masked_z_8xfloat_dup_low_mask0:997; CHECK:       # %bb.0:998; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2999; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11000; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2,4,4,6,6]1001; CHECK-NEXT:    retq1002  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1003  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1004  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1005  ret <8 x float> %res1006}1007define <8 x float> @test_masked_8xfloat_dup_low_mask1(<8 x float> %vec, <8 x float> %vec2, <8 x float> %mask) {1008; CHECK-LABEL: test_masked_8xfloat_dup_low_mask1:1009; CHECK:       # %bb.0:1010; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31011; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k11012; CHECK-NEXT:    vmovsldup {{.*#+}} ymm1 {%k1} = ymm0[0,0,2,2,4,4,6,6]1013; CHECK-NEXT:    vmovaps %ymm1, %ymm01014; CHECK-NEXT:    retq1015  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1016  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1017  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec21018  ret <8 x float> %res1019}1020 1021define <8 x float> @test_masked_z_8xfloat_dup_low_mask1(<8 x float> %vec, <8 x float> %mask) {1022; CHECK-LABEL: test_masked_z_8xfloat_dup_low_mask1:1023; CHECK:       # %bb.0:1024; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21025; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11026; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2,4,4,6,6]1027; CHECK-NEXT:    retq1028  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1029  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1030  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1031  ret <8 x float> %res1032}1033define <8 x float> @test_masked_8xfloat_dup_low_mask2(<8 x float> %vec, <8 x float> %vec2, <8 x float> %mask) {1034; CHECK-LABEL: test_masked_8xfloat_dup_low_mask2:1035; CHECK:       # %bb.0:1036; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31037; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k11038; CHECK-NEXT:    vmovsldup {{.*#+}} ymm1 {%k1} = ymm0[0,0,2,2,4,4,6,6]1039; CHECK-NEXT:    vmovaps %ymm1, %ymm01040; CHECK-NEXT:    retq1041  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1042  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1043  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec21044  ret <8 x float> %res1045}1046 1047define <8 x float> @test_masked_z_8xfloat_dup_low_mask2(<8 x float> %vec, <8 x float> %mask) {1048; CHECK-LABEL: test_masked_z_8xfloat_dup_low_mask2:1049; CHECK:       # %bb.0:1050; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21051; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11052; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2,4,4,6,6]1053; CHECK-NEXT:    retq1054  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1055  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1056  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1057  ret <8 x float> %res1058}1059define <8 x float> @test_masked_8xfloat_dup_low_mask3(<8 x float> %vec, <8 x float> %vec2, <8 x float> %mask) {1060; CHECK-LABEL: test_masked_8xfloat_dup_low_mask3:1061; CHECK:       # %bb.0:1062; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31063; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k11064; CHECK-NEXT:    vmovsldup {{.*#+}} ymm1 {%k1} = ymm0[0,0,2,2,4,4,6,6]1065; CHECK-NEXT:    vmovaps %ymm1, %ymm01066; CHECK-NEXT:    retq1067  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1068  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1069  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec21070  ret <8 x float> %res1071}1072 1073define <8 x float> @test_masked_z_8xfloat_dup_low_mask3(<8 x float> %vec, <8 x float> %mask) {1074; CHECK-LABEL: test_masked_z_8xfloat_dup_low_mask3:1075; CHECK:       # %bb.0:1076; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21077; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11078; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2,4,4,6,6]1079; CHECK-NEXT:    retq1080  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1081  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1082  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1083  ret <8 x float> %res1084}1085define <8 x float> @test_masked_8xfloat_dup_low_mask4(<8 x float> %vec, <8 x float> %vec2, <8 x float> %mask) {1086; CHECK-LABEL: test_masked_8xfloat_dup_low_mask4:1087; CHECK:       # %bb.0:1088; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31089; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k11090; CHECK-NEXT:    vmovsldup {{.*#+}} ymm1 {%k1} = ymm0[0,0,2,2,4,4,6,6]1091; CHECK-NEXT:    vmovaps %ymm1, %ymm01092; CHECK-NEXT:    retq1093  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1094  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1095  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec21096  ret <8 x float> %res1097}1098 1099define <8 x float> @test_masked_z_8xfloat_dup_low_mask4(<8 x float> %vec, <8 x float> %mask) {1100; CHECK-LABEL: test_masked_z_8xfloat_dup_low_mask4:1101; CHECK:       # %bb.0:1102; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21103; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11104; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} {z} = ymm0[0,0,2,2,4,4,6,6]1105; CHECK-NEXT:    retq1106  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1107  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1108  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1109  ret <8 x float> %res1110}1111define <8 x float> @test_8xfloat_dup_low_mem(ptr %vp) {1112; CHECK-LABEL: test_8xfloat_dup_low_mem:1113; CHECK:       # %bb.0:1114; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 = mem[0,0,2,2,4,4,6,6]1115; CHECK-NEXT:    retq1116  %vec = load <8 x float>, ptr %vp1117  %res = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1118  ret <8 x float> %res1119}1120define <8 x float> @test_masked_8xfloat_dup_low_mem_mask0(ptr %vp, <8 x float> %vec2, <8 x float> %mask) {1121; CHECK-LABEL: test_masked_8xfloat_dup_low_mem_mask0:1122; CHECK:       # %bb.0:1123; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21124; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11125; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} = mem[0,0,2,2,4,4,6,6]1126; CHECK-NEXT:    retq1127  %vec = load <8 x float>, ptr %vp1128  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1129  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1130  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec21131  ret <8 x float> %res1132}1133 1134define <8 x float> @test_masked_z_8xfloat_dup_low_mem_mask0(ptr %vp, <8 x float> %mask) {1135; CHECK-LABEL: test_masked_z_8xfloat_dup_low_mem_mask0:1136; CHECK:       # %bb.0:1137; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11138; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k11139; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6]1140; CHECK-NEXT:    retq1141  %vec = load <8 x float>, ptr %vp1142  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1143  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1144  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1145  ret <8 x float> %res1146}1147define <8 x float> @test_masked_8xfloat_dup_low_mem_mask1(ptr %vp, <8 x float> %vec2, <8 x float> %mask) {1148; CHECK-LABEL: test_masked_8xfloat_dup_low_mem_mask1:1149; CHECK:       # %bb.0:1150; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21151; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11152; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} = mem[0,0,2,2,4,4,6,6]1153; CHECK-NEXT:    retq1154  %vec = load <8 x float>, ptr %vp1155  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1156  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1157  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec21158  ret <8 x float> %res1159}1160 1161define <8 x float> @test_masked_z_8xfloat_dup_low_mem_mask1(ptr %vp, <8 x float> %mask) {1162; CHECK-LABEL: test_masked_z_8xfloat_dup_low_mem_mask1:1163; CHECK:       # %bb.0:1164; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11165; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k11166; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6]1167; CHECK-NEXT:    retq1168  %vec = load <8 x float>, ptr %vp1169  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1170  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1171  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1172  ret <8 x float> %res1173}1174define <8 x float> @test_masked_8xfloat_dup_low_mem_mask2(ptr %vp, <8 x float> %vec2, <8 x float> %mask) {1175; CHECK-LABEL: test_masked_8xfloat_dup_low_mem_mask2:1176; CHECK:       # %bb.0:1177; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21178; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11179; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} = mem[0,0,2,2,4,4,6,6]1180; CHECK-NEXT:    retq1181  %vec = load <8 x float>, ptr %vp1182  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1183  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1184  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec21185  ret <8 x float> %res1186}1187 1188define <8 x float> @test_masked_z_8xfloat_dup_low_mem_mask2(ptr %vp, <8 x float> %mask) {1189; CHECK-LABEL: test_masked_z_8xfloat_dup_low_mem_mask2:1190; CHECK:       # %bb.0:1191; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11192; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k11193; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6]1194; CHECK-NEXT:    retq1195  %vec = load <8 x float>, ptr %vp1196  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1197  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1198  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1199  ret <8 x float> %res1200}1201define <8 x float> @test_masked_8xfloat_dup_low_mem_mask3(ptr %vp, <8 x float> %vec2, <8 x float> %mask) {1202; CHECK-LABEL: test_masked_8xfloat_dup_low_mem_mask3:1203; CHECK:       # %bb.0:1204; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21205; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11206; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} = mem[0,0,2,2,4,4,6,6]1207; CHECK-NEXT:    retq1208  %vec = load <8 x float>, ptr %vp1209  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1210  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1211  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec21212  ret <8 x float> %res1213}1214 1215define <8 x float> @test_masked_z_8xfloat_dup_low_mem_mask3(ptr %vp, <8 x float> %mask) {1216; CHECK-LABEL: test_masked_z_8xfloat_dup_low_mem_mask3:1217; CHECK:       # %bb.0:1218; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11219; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k11220; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6]1221; CHECK-NEXT:    retq1222  %vec = load <8 x float>, ptr %vp1223  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1224  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1225  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1226  ret <8 x float> %res1227}1228define <8 x float> @test_masked_8xfloat_dup_low_mem_mask4(ptr %vp, <8 x float> %vec2, <8 x float> %mask) {1229; CHECK-LABEL: test_masked_8xfloat_dup_low_mem_mask4:1230; CHECK:       # %bb.0:1231; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21232; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11233; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} = mem[0,0,2,2,4,4,6,6]1234; CHECK-NEXT:    retq1235  %vec = load <8 x float>, ptr %vp1236  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1237  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1238  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec21239  ret <8 x float> %res1240}1241 1242define <8 x float> @test_masked_z_8xfloat_dup_low_mem_mask4(ptr %vp, <8 x float> %mask) {1243; CHECK-LABEL: test_masked_z_8xfloat_dup_low_mem_mask4:1244; CHECK:       # %bb.0:1245; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11246; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k11247; CHECK-NEXT:    vmovsldup {{.*#+}} ymm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6]1248; CHECK-NEXT:    retq1249  %vec = load <8 x float>, ptr %vp1250  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6>1251  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1252  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1253  ret <8 x float> %res1254}1255define <16 x float> @test_16xfloat_dup_low(<16 x float> %vec) {1256; CHECK-LABEL: test_16xfloat_dup_low:1257; CHECK:       # %bb.0:1258; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1259; CHECK-NEXT:    retq1260  %res = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1261  ret <16 x float> %res1262}1263define <16 x float> @test_masked_16xfloat_dup_low_mask0(<16 x float> %vec, <16 x float> %vec2, <16 x float> %mask) {1264; CHECK-LABEL: test_masked_16xfloat_dup_low_mask0:1265; CHECK:       # %bb.0:1266; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31267; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k11268; CHECK-NEXT:    vmovsldup {{.*#+}} zmm1 {%k1} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1269; CHECK-NEXT:    vmovaps %zmm1, %zmm01270; CHECK-NEXT:    retq1271  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1272  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1273  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec21274  ret <16 x float> %res1275}1276 1277define <16 x float> @test_masked_z_16xfloat_dup_low_mask0(<16 x float> %vec, <16 x float> %mask) {1278; CHECK-LABEL: test_masked_z_16xfloat_dup_low_mask0:1279; CHECK:       # %bb.0:1280; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21281; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11282; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1283; CHECK-NEXT:    retq1284  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1285  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1286  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1287  ret <16 x float> %res1288}1289define <16 x float> @test_masked_16xfloat_dup_low_mask1(<16 x float> %vec, <16 x float> %vec2, <16 x float> %mask) {1290; CHECK-LABEL: test_masked_16xfloat_dup_low_mask1:1291; CHECK:       # %bb.0:1292; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31293; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k11294; CHECK-NEXT:    vmovsldup {{.*#+}} zmm1 {%k1} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1295; CHECK-NEXT:    vmovaps %zmm1, %zmm01296; CHECK-NEXT:    retq1297  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1298  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1299  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec21300  ret <16 x float> %res1301}1302 1303define <16 x float> @test_masked_z_16xfloat_dup_low_mask1(<16 x float> %vec, <16 x float> %mask) {1304; CHECK-LABEL: test_masked_z_16xfloat_dup_low_mask1:1305; CHECK:       # %bb.0:1306; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21307; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11308; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1309; CHECK-NEXT:    retq1310  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1311  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1312  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1313  ret <16 x float> %res1314}1315define <16 x float> @test_masked_16xfloat_dup_low_mask2(<16 x float> %vec, <16 x float> %vec2, <16 x float> %mask) {1316; CHECK-LABEL: test_masked_16xfloat_dup_low_mask2:1317; CHECK:       # %bb.0:1318; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31319; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k11320; CHECK-NEXT:    vmovsldup {{.*#+}} zmm1 {%k1} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1321; CHECK-NEXT:    vmovaps %zmm1, %zmm01322; CHECK-NEXT:    retq1323  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1324  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1325  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec21326  ret <16 x float> %res1327}1328 1329define <16 x float> @test_masked_z_16xfloat_dup_low_mask2(<16 x float> %vec, <16 x float> %mask) {1330; CHECK-LABEL: test_masked_z_16xfloat_dup_low_mask2:1331; CHECK:       # %bb.0:1332; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21333; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11334; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1335; CHECK-NEXT:    retq1336  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1337  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1338  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1339  ret <16 x float> %res1340}1341define <16 x float> @test_masked_16xfloat_dup_low_mask3(<16 x float> %vec, <16 x float> %vec2, <16 x float> %mask) {1342; CHECK-LABEL: test_masked_16xfloat_dup_low_mask3:1343; CHECK:       # %bb.0:1344; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31345; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k11346; CHECK-NEXT:    vmovsldup {{.*#+}} zmm1 {%k1} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1347; CHECK-NEXT:    vmovaps %zmm1, %zmm01348; CHECK-NEXT:    retq1349  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1350  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1351  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec21352  ret <16 x float> %res1353}1354 1355define <16 x float> @test_masked_z_16xfloat_dup_low_mask3(<16 x float> %vec, <16 x float> %mask) {1356; CHECK-LABEL: test_masked_z_16xfloat_dup_low_mask3:1357; CHECK:       # %bb.0:1358; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21359; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11360; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1361; CHECK-NEXT:    retq1362  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1363  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1364  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1365  ret <16 x float> %res1366}1367define <16 x float> @test_masked_16xfloat_dup_low_mask4(<16 x float> %vec, <16 x float> %vec2, <16 x float> %mask) {1368; CHECK-LABEL: test_masked_16xfloat_dup_low_mask4:1369; CHECK:       # %bb.0:1370; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31371; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k11372; CHECK-NEXT:    vmovsldup {{.*#+}} zmm1 {%k1} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1373; CHECK-NEXT:    vmovaps %zmm1, %zmm01374; CHECK-NEXT:    retq1375  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1376  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1377  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec21378  ret <16 x float> %res1379}1380 1381define <16 x float> @test_masked_z_16xfloat_dup_low_mask4(<16 x float> %vec, <16 x float> %mask) {1382; CHECK-LABEL: test_masked_z_16xfloat_dup_low_mask4:1383; CHECK:       # %bb.0:1384; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21385; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11386; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = zmm0[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1387; CHECK-NEXT:    retq1388  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1389  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1390  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1391  ret <16 x float> %res1392}1393define <16 x float> @test_16xfloat_dup_low_mem(ptr %vp) {1394; CHECK-LABEL: test_16xfloat_dup_low_mem:1395; CHECK:       # %bb.0:1396; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1397; CHECK-NEXT:    retq1398  %vec = load <16 x float>, ptr %vp1399  %res = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1400  ret <16 x float> %res1401}1402define <16 x float> @test_masked_16xfloat_dup_low_mem_mask0(ptr %vp, <16 x float> %vec2, <16 x float> %mask) {1403; CHECK-LABEL: test_masked_16xfloat_dup_low_mem_mask0:1404; CHECK:       # %bb.0:1405; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21406; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11407; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1408; CHECK-NEXT:    retq1409  %vec = load <16 x float>, ptr %vp1410  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1411  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1412  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec21413  ret <16 x float> %res1414}1415 1416define <16 x float> @test_masked_z_16xfloat_dup_low_mem_mask0(ptr %vp, <16 x float> %mask) {1417; CHECK-LABEL: test_masked_z_16xfloat_dup_low_mem_mask0:1418; CHECK:       # %bb.0:1419; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11420; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k11421; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1422; CHECK-NEXT:    retq1423  %vec = load <16 x float>, ptr %vp1424  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1425  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1426  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1427  ret <16 x float> %res1428}1429define <16 x float> @test_masked_16xfloat_dup_low_mem_mask1(ptr %vp, <16 x float> %vec2, <16 x float> %mask) {1430; CHECK-LABEL: test_masked_16xfloat_dup_low_mem_mask1:1431; CHECK:       # %bb.0:1432; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21433; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11434; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1435; CHECK-NEXT:    retq1436  %vec = load <16 x float>, ptr %vp1437  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1438  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1439  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec21440  ret <16 x float> %res1441}1442 1443define <16 x float> @test_masked_z_16xfloat_dup_low_mem_mask1(ptr %vp, <16 x float> %mask) {1444; CHECK-LABEL: test_masked_z_16xfloat_dup_low_mem_mask1:1445; CHECK:       # %bb.0:1446; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11447; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k11448; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1449; CHECK-NEXT:    retq1450  %vec = load <16 x float>, ptr %vp1451  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1452  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1453  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1454  ret <16 x float> %res1455}1456define <16 x float> @test_masked_16xfloat_dup_low_mem_mask2(ptr %vp, <16 x float> %vec2, <16 x float> %mask) {1457; CHECK-LABEL: test_masked_16xfloat_dup_low_mem_mask2:1458; CHECK:       # %bb.0:1459; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21460; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11461; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1462; CHECK-NEXT:    retq1463  %vec = load <16 x float>, ptr %vp1464  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1465  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1466  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec21467  ret <16 x float> %res1468}1469 1470define <16 x float> @test_masked_z_16xfloat_dup_low_mem_mask2(ptr %vp, <16 x float> %mask) {1471; CHECK-LABEL: test_masked_z_16xfloat_dup_low_mem_mask2:1472; CHECK:       # %bb.0:1473; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11474; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k11475; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1476; CHECK-NEXT:    retq1477  %vec = load <16 x float>, ptr %vp1478  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1479  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1480  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1481  ret <16 x float> %res1482}1483define <16 x float> @test_masked_16xfloat_dup_low_mem_mask3(ptr %vp, <16 x float> %vec2, <16 x float> %mask) {1484; CHECK-LABEL: test_masked_16xfloat_dup_low_mem_mask3:1485; CHECK:       # %bb.0:1486; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21487; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11488; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1489; CHECK-NEXT:    retq1490  %vec = load <16 x float>, ptr %vp1491  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1492  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1493  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec21494  ret <16 x float> %res1495}1496 1497define <16 x float> @test_masked_z_16xfloat_dup_low_mem_mask3(ptr %vp, <16 x float> %mask) {1498; CHECK-LABEL: test_masked_z_16xfloat_dup_low_mem_mask3:1499; CHECK:       # %bb.0:1500; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11501; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k11502; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1503; CHECK-NEXT:    retq1504  %vec = load <16 x float>, ptr %vp1505  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1506  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1507  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1508  ret <16 x float> %res1509}1510define <16 x float> @test_masked_16xfloat_dup_low_mem_mask4(ptr %vp, <16 x float> %vec2, <16 x float> %mask) {1511; CHECK-LABEL: test_masked_16xfloat_dup_low_mem_mask4:1512; CHECK:       # %bb.0:1513; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21514; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11515; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1516; CHECK-NEXT:    retq1517  %vec = load <16 x float>, ptr %vp1518  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1519  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1520  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec21521  ret <16 x float> %res1522}1523 1524define <16 x float> @test_masked_z_16xfloat_dup_low_mem_mask4(ptr %vp, <16 x float> %mask) {1525; CHECK-LABEL: test_masked_z_16xfloat_dup_low_mem_mask4:1526; CHECK:       # %bb.0:1527; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11528; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k11529; CHECK-NEXT:    vmovsldup {{.*#+}} zmm0 {%k1} {z} = mem[0,0,2,2,4,4,6,6,8,8,10,10,12,12,14,14]1530; CHECK-NEXT:    retq1531  %vec = load <16 x float>, ptr %vp1532  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 0, i32 0, i32 2, i32 2, i32 4, i32 4, i32 6, i32 6, i32 8, i32 8, i32 10, i32 10, i32 12, i32 12, i32 14, i32 14>1533  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1534  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1535  ret <16 x float> %res1536}1537