brintos

brintos / llvm-project-archived public Read only

0
0
Text · 58.4 KiB · 4066a33 Raw
1239 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 <4 x double> @test_double_to_4(double %s) {5; CHECK-LABEL: test_double_to_4:6; CHECK:       # %bb.0:7; CHECK-NEXT:    vbroadcastsd %xmm0, %ymm08; CHECK-NEXT:    retq9  %vec = insertelement <2 x double> undef, double %s, i32 010  %res = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>11  ret <4 x double> %res12}13define <4 x double> @test_masked_double_to_4_mask0(double %s, <4 x double> %default, <4 x double> %mask) {14; CHECK-LABEL: test_masked_double_to_4_mask0:15; CHECK:       # %bb.0:16; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm317; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k118; CHECK-NEXT:    vbroadcastsd %xmm0, %ymm1 {%k1}19; CHECK-NEXT:    vmovapd %ymm1, %ymm020; CHECK-NEXT:    retq21  %vec = insertelement <2 x double> undef, double %s, i32 022  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>23  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer24  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %default25  ret <4 x double> %res26}27 28define <4 x double> @test_masked_z_double_to_4_mask0(double %s, <4 x double> %mask) {29; CHECK-LABEL: test_masked_z_double_to_4_mask0:30; CHECK:       # %bb.0:31; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm232; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k133; CHECK-NEXT:    vbroadcastsd %xmm0, %ymm0 {%k1} {z}34; CHECK-NEXT:    retq35  %vec = insertelement <2 x double> undef, double %s, i32 036  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>37  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer38  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer39  ret <4 x double> %res40}41define <4 x double> @test_masked_double_to_4_mask1(double %s, <4 x double> %default, <4 x double> %mask) {42; CHECK-LABEL: test_masked_double_to_4_mask1:43; CHECK:       # %bb.0:44; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm345; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k146; CHECK-NEXT:    vbroadcastsd %xmm0, %ymm1 {%k1}47; CHECK-NEXT:    vmovapd %ymm1, %ymm048; CHECK-NEXT:    retq49  %vec = insertelement <2 x double> undef, double %s, i32 050  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>51  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer52  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %default53  ret <4 x double> %res54}55 56define <4 x double> @test_masked_z_double_to_4_mask1(double %s, <4 x double> %mask) {57; CHECK-LABEL: test_masked_z_double_to_4_mask1:58; CHECK:       # %bb.0:59; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm260; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k161; CHECK-NEXT:    vbroadcastsd %xmm0, %ymm0 {%k1} {z}62; CHECK-NEXT:    retq63  %vec = insertelement <2 x double> undef, double %s, i32 064  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>65  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer66  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer67  ret <4 x double> %res68}69define <4 x double> @test_masked_double_to_4_mask2(double %s, <4 x double> %default, <4 x double> %mask) {70; CHECK-LABEL: test_masked_double_to_4_mask2:71; CHECK:       # %bb.0:72; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm373; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k174; CHECK-NEXT:    vbroadcastsd %xmm0, %ymm1 {%k1}75; CHECK-NEXT:    vmovapd %ymm1, %ymm076; CHECK-NEXT:    retq77  %vec = insertelement <2 x double> undef, double %s, i32 078  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>79  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer80  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %default81  ret <4 x double> %res82}83 84define <4 x double> @test_masked_z_double_to_4_mask2(double %s, <4 x double> %mask) {85; CHECK-LABEL: test_masked_z_double_to_4_mask2:86; CHECK:       # %bb.0:87; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm288; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k189; CHECK-NEXT:    vbroadcastsd %xmm0, %ymm0 {%k1} {z}90; CHECK-NEXT:    retq91  %vec = insertelement <2 x double> undef, double %s, i32 092  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>93  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer94  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer95  ret <4 x double> %res96}97define <4 x double> @test_masked_double_to_4_mask3(double %s, <4 x double> %default, <4 x double> %mask) {98; CHECK-LABEL: test_masked_double_to_4_mask3:99; CHECK:       # %bb.0:100; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3101; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k1102; CHECK-NEXT:    vbroadcastsd %xmm0, %ymm1 {%k1}103; CHECK-NEXT:    vmovapd %ymm1, %ymm0104; CHECK-NEXT:    retq105  %vec = insertelement <2 x double> undef, double %s, i32 0106  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>107  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer108  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %default109  ret <4 x double> %res110}111 112define <4 x double> @test_masked_z_double_to_4_mask3(double %s, <4 x double> %mask) {113; CHECK-LABEL: test_masked_z_double_to_4_mask3:114; CHECK:       # %bb.0:115; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2116; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1117; CHECK-NEXT:    vbroadcastsd %xmm0, %ymm0 {%k1} {z}118; CHECK-NEXT:    retq119  %vec = insertelement <2 x double> undef, double %s, i32 0120  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>121  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer122  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer123  ret <4 x double> %res124}125define <8 x double> @test_double_to_8(double %s) {126; CHECK-LABEL: test_double_to_8:127; CHECK:       # %bb.0:128; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm0129; CHECK-NEXT:    retq130  %vec = insertelement <2 x double> undef, double %s, i32 0131  %res = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>132  ret <8 x double> %res133}134define <8 x double> @test_masked_double_to_8_mask0(double %s, <8 x double> %default, <8 x double> %mask) {135; CHECK-LABEL: test_masked_double_to_8_mask0:136; CHECK:       # %bb.0:137; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3138; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k1139; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm1 {%k1}140; CHECK-NEXT:    vmovapd %zmm1, %zmm0141; CHECK-NEXT:    retq142  %vec = insertelement <2 x double> undef, double %s, i32 0143  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>144  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer145  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %default146  ret <8 x double> %res147}148 149define <8 x double> @test_masked_z_double_to_8_mask0(double %s, <8 x double> %mask) {150; CHECK-LABEL: test_masked_z_double_to_8_mask0:151; CHECK:       # %bb.0:152; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2153; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1154; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm0 {%k1} {z}155; CHECK-NEXT:    retq156  %vec = insertelement <2 x double> undef, double %s, i32 0157  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>158  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer159  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer160  ret <8 x double> %res161}162define <8 x double> @test_masked_double_to_8_mask1(double %s, <8 x double> %default, <8 x double> %mask) {163; CHECK-LABEL: test_masked_double_to_8_mask1:164; CHECK:       # %bb.0:165; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3166; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k1167; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm1 {%k1}168; CHECK-NEXT:    vmovapd %zmm1, %zmm0169; CHECK-NEXT:    retq170  %vec = insertelement <2 x double> undef, double %s, i32 0171  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>172  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer173  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %default174  ret <8 x double> %res175}176 177define <8 x double> @test_masked_z_double_to_8_mask1(double %s, <8 x double> %mask) {178; CHECK-LABEL: test_masked_z_double_to_8_mask1:179; CHECK:       # %bb.0:180; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2181; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1182; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm0 {%k1} {z}183; CHECK-NEXT:    retq184  %vec = insertelement <2 x double> undef, double %s, i32 0185  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>186  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer187  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer188  ret <8 x double> %res189}190define <8 x double> @test_masked_double_to_8_mask2(double %s, <8 x double> %default, <8 x double> %mask) {191; CHECK-LABEL: test_masked_double_to_8_mask2:192; CHECK:       # %bb.0:193; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3194; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k1195; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm1 {%k1}196; CHECK-NEXT:    vmovapd %zmm1, %zmm0197; CHECK-NEXT:    retq198  %vec = insertelement <2 x double> undef, double %s, i32 0199  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>200  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer201  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %default202  ret <8 x double> %res203}204 205define <8 x double> @test_masked_z_double_to_8_mask2(double %s, <8 x double> %mask) {206; CHECK-LABEL: test_masked_z_double_to_8_mask2:207; CHECK:       # %bb.0:208; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2209; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1210; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm0 {%k1} {z}211; CHECK-NEXT:    retq212  %vec = insertelement <2 x double> undef, double %s, i32 0213  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>214  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer215  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer216  ret <8 x double> %res217}218define <8 x double> @test_masked_double_to_8_mask3(double %s, <8 x double> %default, <8 x double> %mask) {219; CHECK-LABEL: test_masked_double_to_8_mask3:220; CHECK:       # %bb.0:221; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3222; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k1223; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm1 {%k1}224; CHECK-NEXT:    vmovapd %zmm1, %zmm0225; CHECK-NEXT:    retq226  %vec = insertelement <2 x double> undef, double %s, i32 0227  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>228  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer229  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %default230  ret <8 x double> %res231}232 233define <8 x double> @test_masked_z_double_to_8_mask3(double %s, <8 x double> %mask) {234; CHECK-LABEL: test_masked_z_double_to_8_mask3:235; CHECK:       # %bb.0:236; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2237; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1238; CHECK-NEXT:    vbroadcastsd %xmm0, %zmm0 {%k1} {z}239; CHECK-NEXT:    retq240  %vec = insertelement <2 x double> undef, double %s, i32 0241  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>242  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer243  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer244  ret <8 x double> %res245}246define <4 x float> @test_float_to_4(float %s) {247; CHECK-LABEL: test_float_to_4:248; CHECK:       # %bb.0:249; CHECK-NEXT:    vbroadcastss %xmm0, %xmm0250; CHECK-NEXT:    retq251  %vec = insertelement <2 x float> undef, float %s, i32 0252  %res = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>253  ret <4 x float> %res254}255define <4 x float> @test_masked_float_to_4_mask0(float %s, <4 x float> %default, <4 x float> %mask) {256; CHECK-LABEL: test_masked_float_to_4_mask0:257; CHECK:       # %bb.0:258; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3259; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1260; CHECK-NEXT:    vbroadcastss %xmm0, %xmm1 {%k1}261; CHECK-NEXT:    vmovaps %xmm1, %xmm0262; CHECK-NEXT:    retq263  %vec = insertelement <2 x float> undef, float %s, i32 0264  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>265  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer266  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %default267  ret <4 x float> %res268}269 270define <4 x float> @test_masked_z_float_to_4_mask0(float %s, <4 x float> %mask) {271; CHECK-LABEL: test_masked_z_float_to_4_mask0:272; CHECK:       # %bb.0:273; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2274; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1275; CHECK-NEXT:    vbroadcastss %xmm0, %xmm0 {%k1} {z}276; CHECK-NEXT:    retq277  %vec = insertelement <2 x float> undef, float %s, i32 0278  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>279  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer280  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer281  ret <4 x float> %res282}283define <4 x float> @test_masked_float_to_4_mask1(float %s, <4 x float> %default, <4 x float> %mask) {284; CHECK-LABEL: test_masked_float_to_4_mask1:285; CHECK:       # %bb.0:286; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3287; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1288; CHECK-NEXT:    vbroadcastss %xmm0, %xmm1 {%k1}289; CHECK-NEXT:    vmovaps %xmm1, %xmm0290; CHECK-NEXT:    retq291  %vec = insertelement <2 x float> undef, float %s, i32 0292  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>293  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer294  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %default295  ret <4 x float> %res296}297 298define <4 x float> @test_masked_z_float_to_4_mask1(float %s, <4 x float> %mask) {299; CHECK-LABEL: test_masked_z_float_to_4_mask1:300; CHECK:       # %bb.0:301; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2302; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1303; CHECK-NEXT:    vbroadcastss %xmm0, %xmm0 {%k1} {z}304; CHECK-NEXT:    retq305  %vec = insertelement <2 x float> undef, float %s, i32 0306  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>307  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer308  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer309  ret <4 x float> %res310}311define <4 x float> @test_masked_float_to_4_mask2(float %s, <4 x float> %default, <4 x float> %mask) {312; CHECK-LABEL: test_masked_float_to_4_mask2:313; CHECK:       # %bb.0:314; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3315; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1316; CHECK-NEXT:    vbroadcastss %xmm0, %xmm1 {%k1}317; CHECK-NEXT:    vmovaps %xmm1, %xmm0318; CHECK-NEXT:    retq319  %vec = insertelement <2 x float> undef, float %s, i32 0320  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>321  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer322  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %default323  ret <4 x float> %res324}325 326define <4 x float> @test_masked_z_float_to_4_mask2(float %s, <4 x float> %mask) {327; CHECK-LABEL: test_masked_z_float_to_4_mask2:328; CHECK:       # %bb.0:329; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2330; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1331; CHECK-NEXT:    vbroadcastss %xmm0, %xmm0 {%k1} {z}332; CHECK-NEXT:    retq333  %vec = insertelement <2 x float> undef, float %s, i32 0334  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>335  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer336  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer337  ret <4 x float> %res338}339define <4 x float> @test_masked_float_to_4_mask3(float %s, <4 x float> %default, <4 x float> %mask) {340; CHECK-LABEL: test_masked_float_to_4_mask3:341; CHECK:       # %bb.0:342; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3343; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1344; CHECK-NEXT:    vbroadcastss %xmm0, %xmm1 {%k1}345; CHECK-NEXT:    vmovaps %xmm1, %xmm0346; CHECK-NEXT:    retq347  %vec = insertelement <2 x float> undef, float %s, i32 0348  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>349  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer350  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %default351  ret <4 x float> %res352}353 354define <4 x float> @test_masked_z_float_to_4_mask3(float %s, <4 x float> %mask) {355; CHECK-LABEL: test_masked_z_float_to_4_mask3:356; CHECK:       # %bb.0:357; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2358; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1359; CHECK-NEXT:    vbroadcastss %xmm0, %xmm0 {%k1} {z}360; CHECK-NEXT:    retq361  %vec = insertelement <2 x float> undef, float %s, i32 0362  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>363  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer364  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer365  ret <4 x float> %res366}367define <8 x float> @test_float_to_8(float %s) {368; CHECK-LABEL: test_float_to_8:369; CHECK:       # %bb.0:370; CHECK-NEXT:    vbroadcastss %xmm0, %ymm0371; CHECK-NEXT:    retq372  %vec = insertelement <2 x float> undef, float %s, i32 0373  %res = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>374  ret <8 x float> %res375}376define <8 x float> @test_masked_float_to_8_mask0(float %s, <8 x float> %default, <8 x float> %mask) {377; CHECK-LABEL: test_masked_float_to_8_mask0:378; CHECK:       # %bb.0:379; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3380; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1381; CHECK-NEXT:    vbroadcastss %xmm0, %ymm1 {%k1}382; CHECK-NEXT:    vmovaps %ymm1, %ymm0383; CHECK-NEXT:    retq384  %vec = insertelement <2 x float> undef, float %s, i32 0385  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>386  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer387  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %default388  ret <8 x float> %res389}390 391define <8 x float> @test_masked_z_float_to_8_mask0(float %s, <8 x float> %mask) {392; CHECK-LABEL: test_masked_z_float_to_8_mask0:393; CHECK:       # %bb.0:394; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2395; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1396; CHECK-NEXT:    vbroadcastss %xmm0, %ymm0 {%k1} {z}397; CHECK-NEXT:    retq398  %vec = insertelement <2 x float> undef, float %s, i32 0399  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>400  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer401  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer402  ret <8 x float> %res403}404define <8 x float> @test_masked_float_to_8_mask1(float %s, <8 x float> %default, <8 x float> %mask) {405; CHECK-LABEL: test_masked_float_to_8_mask1:406; CHECK:       # %bb.0:407; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3408; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1409; CHECK-NEXT:    vbroadcastss %xmm0, %ymm1 {%k1}410; CHECK-NEXT:    vmovaps %ymm1, %ymm0411; CHECK-NEXT:    retq412  %vec = insertelement <2 x float> undef, float %s, i32 0413  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>414  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer415  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %default416  ret <8 x float> %res417}418 419define <8 x float> @test_masked_z_float_to_8_mask1(float %s, <8 x float> %mask) {420; CHECK-LABEL: test_masked_z_float_to_8_mask1:421; CHECK:       # %bb.0:422; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2423; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1424; CHECK-NEXT:    vbroadcastss %xmm0, %ymm0 {%k1} {z}425; CHECK-NEXT:    retq426  %vec = insertelement <2 x float> undef, float %s, i32 0427  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>428  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer429  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer430  ret <8 x float> %res431}432define <8 x float> @test_masked_float_to_8_mask2(float %s, <8 x float> %default, <8 x float> %mask) {433; CHECK-LABEL: test_masked_float_to_8_mask2:434; CHECK:       # %bb.0:435; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3436; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1437; CHECK-NEXT:    vbroadcastss %xmm0, %ymm1 {%k1}438; CHECK-NEXT:    vmovaps %ymm1, %ymm0439; CHECK-NEXT:    retq440  %vec = insertelement <2 x float> undef, float %s, i32 0441  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>442  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer443  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %default444  ret <8 x float> %res445}446 447define <8 x float> @test_masked_z_float_to_8_mask2(float %s, <8 x float> %mask) {448; CHECK-LABEL: test_masked_z_float_to_8_mask2:449; CHECK:       # %bb.0:450; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2451; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1452; CHECK-NEXT:    vbroadcastss %xmm0, %ymm0 {%k1} {z}453; CHECK-NEXT:    retq454  %vec = insertelement <2 x float> undef, float %s, i32 0455  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>456  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer457  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer458  ret <8 x float> %res459}460define <8 x float> @test_masked_float_to_8_mask3(float %s, <8 x float> %default, <8 x float> %mask) {461; CHECK-LABEL: test_masked_float_to_8_mask3:462; CHECK:       # %bb.0:463; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3464; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1465; CHECK-NEXT:    vbroadcastss %xmm0, %ymm1 {%k1}466; CHECK-NEXT:    vmovaps %ymm1, %ymm0467; CHECK-NEXT:    retq468  %vec = insertelement <2 x float> undef, float %s, i32 0469  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>470  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer471  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %default472  ret <8 x float> %res473}474 475define <8 x float> @test_masked_z_float_to_8_mask3(float %s, <8 x float> %mask) {476; CHECK-LABEL: test_masked_z_float_to_8_mask3:477; CHECK:       # %bb.0:478; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2479; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1480; CHECK-NEXT:    vbroadcastss %xmm0, %ymm0 {%k1} {z}481; CHECK-NEXT:    retq482  %vec = insertelement <2 x float> undef, float %s, i32 0483  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>484  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer485  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer486  ret <8 x float> %res487}488define <16 x float> @test_float_to_16(float %s) {489; CHECK-LABEL: test_float_to_16:490; CHECK:       # %bb.0:491; CHECK-NEXT:    vbroadcastss %xmm0, %zmm0492; CHECK-NEXT:    retq493  %vec = insertelement <2 x float> undef, float %s, i32 0494  %res = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>495  ret <16 x float> %res496}497define <16 x float> @test_masked_float_to_16_mask0(float %s, <16 x float> %default, <16 x float> %mask) {498; CHECK-LABEL: test_masked_float_to_16_mask0:499; CHECK:       # %bb.0:500; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3501; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1502; CHECK-NEXT:    vbroadcastss %xmm0, %zmm1 {%k1}503; CHECK-NEXT:    vmovaps %zmm1, %zmm0504; CHECK-NEXT:    retq505  %vec = insertelement <2 x float> undef, float %s, i32 0506  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>507  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer508  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %default509  ret <16 x float> %res510}511 512define <16 x float> @test_masked_z_float_to_16_mask0(float %s, <16 x float> %mask) {513; CHECK-LABEL: test_masked_z_float_to_16_mask0:514; CHECK:       # %bb.0:515; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2516; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1517; CHECK-NEXT:    vbroadcastss %xmm0, %zmm0 {%k1} {z}518; CHECK-NEXT:    retq519  %vec = insertelement <2 x float> undef, float %s, i32 0520  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>521  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer522  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer523  ret <16 x float> %res524}525define <16 x float> @test_masked_float_to_16_mask1(float %s, <16 x float> %default, <16 x float> %mask) {526; CHECK-LABEL: test_masked_float_to_16_mask1:527; CHECK:       # %bb.0:528; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3529; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1530; CHECK-NEXT:    vbroadcastss %xmm0, %zmm1 {%k1}531; CHECK-NEXT:    vmovaps %zmm1, %zmm0532; CHECK-NEXT:    retq533  %vec = insertelement <2 x float> undef, float %s, i32 0534  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>535  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer536  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %default537  ret <16 x float> %res538}539 540define <16 x float> @test_masked_z_float_to_16_mask1(float %s, <16 x float> %mask) {541; CHECK-LABEL: test_masked_z_float_to_16_mask1:542; CHECK:       # %bb.0:543; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2544; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1545; CHECK-NEXT:    vbroadcastss %xmm0, %zmm0 {%k1} {z}546; CHECK-NEXT:    retq547  %vec = insertelement <2 x float> undef, float %s, i32 0548  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>549  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer550  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer551  ret <16 x float> %res552}553define <16 x float> @test_masked_float_to_16_mask2(float %s, <16 x float> %default, <16 x float> %mask) {554; CHECK-LABEL: test_masked_float_to_16_mask2:555; CHECK:       # %bb.0:556; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3557; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1558; CHECK-NEXT:    vbroadcastss %xmm0, %zmm1 {%k1}559; CHECK-NEXT:    vmovaps %zmm1, %zmm0560; CHECK-NEXT:    retq561  %vec = insertelement <2 x float> undef, float %s, i32 0562  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>563  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer564  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %default565  ret <16 x float> %res566}567 568define <16 x float> @test_masked_z_float_to_16_mask2(float %s, <16 x float> %mask) {569; CHECK-LABEL: test_masked_z_float_to_16_mask2:570; CHECK:       # %bb.0:571; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2572; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1573; CHECK-NEXT:    vbroadcastss %xmm0, %zmm0 {%k1} {z}574; CHECK-NEXT:    retq575  %vec = insertelement <2 x float> undef, float %s, i32 0576  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>577  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer578  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer579  ret <16 x float> %res580}581define <16 x float> @test_masked_float_to_16_mask3(float %s, <16 x float> %default, <16 x float> %mask) {582; CHECK-LABEL: test_masked_float_to_16_mask3:583; CHECK:       # %bb.0:584; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3585; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1586; CHECK-NEXT:    vbroadcastss %xmm0, %zmm1 {%k1}587; CHECK-NEXT:    vmovaps %zmm1, %zmm0588; CHECK-NEXT:    retq589  %vec = insertelement <2 x float> undef, float %s, i32 0590  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>591  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer592  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %default593  ret <16 x float> %res594}595 596define <16 x float> @test_masked_z_float_to_16_mask3(float %s, <16 x float> %mask) {597; CHECK-LABEL: test_masked_z_float_to_16_mask3:598; CHECK:       # %bb.0:599; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2600; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1601; CHECK-NEXT:    vbroadcastss %xmm0, %zmm0 {%k1} {z}602; CHECK-NEXT:    retq603  %vec = insertelement <2 x float> undef, float %s, i32 0604  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>605  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer606  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer607  ret <16 x float> %res608}609define <4 x double> @test_double_to_4_mem(ptr %p) {610; CHECK-LABEL: test_double_to_4_mem:611; CHECK:       # %bb.0:612; CHECK-NEXT:    vbroadcastsd (%rdi), %ymm0613; CHECK-NEXT:    retq614  %s = load double, ptr %p615  %vec = insertelement <2 x double> undef, double %s, i32 0616  %res = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>617  ret <4 x double> %res618}619define <4 x double> @test_masked_double_to_4_mem_mask0(ptr %p, <4 x double> %default, <4 x double> %mask) {620; CHECK-LABEL: test_masked_double_to_4_mem_mask0:621; CHECK:       # %bb.0:622; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2623; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1624; CHECK-NEXT:    vbroadcastsd (%rdi), %ymm0 {%k1}625; CHECK-NEXT:    retq626  %s = load double, ptr %p627  %vec = insertelement <2 x double> undef, double %s, i32 0628  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>629  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer630  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %default631  ret <4 x double> %res632}633 634define <4 x double> @test_masked_z_double_to_4_mem_mask0(ptr %p, <4 x double> %mask) {635; CHECK-LABEL: test_masked_z_double_to_4_mem_mask0:636; CHECK:       # %bb.0:637; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1638; CHECK-NEXT:    vcmpeqpd %ymm1, %ymm0, %k1639; CHECK-NEXT:    vbroadcastsd (%rdi), %ymm0 {%k1} {z}640; CHECK-NEXT:    retq641  %s = load double, ptr %p642  %vec = insertelement <2 x double> undef, double %s, i32 0643  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>644  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer645  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer646  ret <4 x double> %res647}648define <4 x double> @test_masked_double_to_4_mem_mask1(ptr %p, <4 x double> %default, <4 x double> %mask) {649; CHECK-LABEL: test_masked_double_to_4_mem_mask1:650; CHECK:       # %bb.0:651; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2652; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1653; CHECK-NEXT:    vbroadcastsd (%rdi), %ymm0 {%k1}654; CHECK-NEXT:    retq655  %s = load double, ptr %p656  %vec = insertelement <2 x double> undef, double %s, i32 0657  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>658  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer659  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %default660  ret <4 x double> %res661}662 663define <4 x double> @test_masked_z_double_to_4_mem_mask1(ptr %p, <4 x double> %mask) {664; CHECK-LABEL: test_masked_z_double_to_4_mem_mask1:665; CHECK:       # %bb.0:666; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1667; CHECK-NEXT:    vcmpeqpd %ymm1, %ymm0, %k1668; CHECK-NEXT:    vbroadcastsd (%rdi), %ymm0 {%k1} {z}669; CHECK-NEXT:    retq670  %s = load double, ptr %p671  %vec = insertelement <2 x double> undef, double %s, i32 0672  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>673  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer674  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer675  ret <4 x double> %res676}677define <4 x double> @test_masked_double_to_4_mem_mask2(ptr %p, <4 x double> %default, <4 x double> %mask) {678; CHECK-LABEL: test_masked_double_to_4_mem_mask2:679; CHECK:       # %bb.0:680; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2681; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1682; CHECK-NEXT:    vbroadcastsd (%rdi), %ymm0 {%k1}683; CHECK-NEXT:    retq684  %s = load double, ptr %p685  %vec = insertelement <2 x double> undef, double %s, i32 0686  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>687  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer688  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %default689  ret <4 x double> %res690}691 692define <4 x double> @test_masked_z_double_to_4_mem_mask2(ptr %p, <4 x double> %mask) {693; CHECK-LABEL: test_masked_z_double_to_4_mem_mask2:694; CHECK:       # %bb.0:695; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1696; CHECK-NEXT:    vcmpeqpd %ymm1, %ymm0, %k1697; CHECK-NEXT:    vbroadcastsd (%rdi), %ymm0 {%k1} {z}698; CHECK-NEXT:    retq699  %s = load double, ptr %p700  %vec = insertelement <2 x double> undef, double %s, i32 0701  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>702  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer703  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer704  ret <4 x double> %res705}706define <4 x double> @test_masked_double_to_4_mem_mask3(ptr %p, <4 x double> %default, <4 x double> %mask) {707; CHECK-LABEL: test_masked_double_to_4_mem_mask3:708; CHECK:       # %bb.0:709; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2710; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k1711; CHECK-NEXT:    vbroadcastsd (%rdi), %ymm0 {%k1}712; CHECK-NEXT:    retq713  %s = load double, ptr %p714  %vec = insertelement <2 x double> undef, double %s, i32 0715  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>716  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer717  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %default718  ret <4 x double> %res719}720 721define <4 x double> @test_masked_z_double_to_4_mem_mask3(ptr %p, <4 x double> %mask) {722; CHECK-LABEL: test_masked_z_double_to_4_mem_mask3:723; CHECK:       # %bb.0:724; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1725; CHECK-NEXT:    vcmpeqpd %ymm1, %ymm0, %k1726; CHECK-NEXT:    vbroadcastsd (%rdi), %ymm0 {%k1} {z}727; CHECK-NEXT:    retq728  %s = load double, ptr %p729  %vec = insertelement <2 x double> undef, double %s, i32 0730  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>731  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer732  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer733  ret <4 x double> %res734}735define <8 x double> @test_double_to_8_mem(ptr %p) {736; CHECK-LABEL: test_double_to_8_mem:737; CHECK:       # %bb.0:738; CHECK-NEXT:    vbroadcastsd (%rdi), %zmm0739; CHECK-NEXT:    retq740  %s = load double, ptr %p741  %vec = insertelement <2 x double> undef, double %s, i32 0742  %res = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>743  ret <8 x double> %res744}745define <8 x double> @test_masked_double_to_8_mem_mask0(ptr %p, <8 x double> %default, <8 x double> %mask) {746; CHECK-LABEL: test_masked_double_to_8_mem_mask0:747; CHECK:       # %bb.0:748; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2749; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1750; CHECK-NEXT:    vbroadcastsd (%rdi), %zmm0 {%k1}751; CHECK-NEXT:    retq752  %s = load double, ptr %p753  %vec = insertelement <2 x double> undef, double %s, i32 0754  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>755  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer756  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %default757  ret <8 x double> %res758}759 760define <8 x double> @test_masked_z_double_to_8_mem_mask0(ptr %p, <8 x double> %mask) {761; CHECK-LABEL: test_masked_z_double_to_8_mem_mask0:762; CHECK:       # %bb.0:763; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1764; CHECK-NEXT:    vcmpeqpd %zmm1, %zmm0, %k1765; CHECK-NEXT:    vbroadcastsd (%rdi), %zmm0 {%k1} {z}766; CHECK-NEXT:    retq767  %s = load double, ptr %p768  %vec = insertelement <2 x double> undef, double %s, i32 0769  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>770  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer771  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer772  ret <8 x double> %res773}774define <8 x double> @test_masked_double_to_8_mem_mask1(ptr %p, <8 x double> %default, <8 x double> %mask) {775; CHECK-LABEL: test_masked_double_to_8_mem_mask1:776; CHECK:       # %bb.0:777; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2778; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1779; CHECK-NEXT:    vbroadcastsd (%rdi), %zmm0 {%k1}780; CHECK-NEXT:    retq781  %s = load double, ptr %p782  %vec = insertelement <2 x double> undef, double %s, i32 0783  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>784  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer785  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %default786  ret <8 x double> %res787}788 789define <8 x double> @test_masked_z_double_to_8_mem_mask1(ptr %p, <8 x double> %mask) {790; CHECK-LABEL: test_masked_z_double_to_8_mem_mask1:791; CHECK:       # %bb.0:792; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1793; CHECK-NEXT:    vcmpeqpd %zmm1, %zmm0, %k1794; CHECK-NEXT:    vbroadcastsd (%rdi), %zmm0 {%k1} {z}795; CHECK-NEXT:    retq796  %s = load double, ptr %p797  %vec = insertelement <2 x double> undef, double %s, i32 0798  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>799  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer800  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer801  ret <8 x double> %res802}803define <8 x double> @test_masked_double_to_8_mem_mask2(ptr %p, <8 x double> %default, <8 x double> %mask) {804; CHECK-LABEL: test_masked_double_to_8_mem_mask2:805; CHECK:       # %bb.0:806; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2807; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1808; CHECK-NEXT:    vbroadcastsd (%rdi), %zmm0 {%k1}809; CHECK-NEXT:    retq810  %s = load double, ptr %p811  %vec = insertelement <2 x double> undef, double %s, i32 0812  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>813  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer814  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %default815  ret <8 x double> %res816}817 818define <8 x double> @test_masked_z_double_to_8_mem_mask2(ptr %p, <8 x double> %mask) {819; CHECK-LABEL: test_masked_z_double_to_8_mem_mask2:820; CHECK:       # %bb.0:821; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1822; CHECK-NEXT:    vcmpeqpd %zmm1, %zmm0, %k1823; CHECK-NEXT:    vbroadcastsd (%rdi), %zmm0 {%k1} {z}824; CHECK-NEXT:    retq825  %s = load double, ptr %p826  %vec = insertelement <2 x double> undef, double %s, i32 0827  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>828  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer829  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer830  ret <8 x double> %res831}832define <8 x double> @test_masked_double_to_8_mem_mask3(ptr %p, <8 x double> %default, <8 x double> %mask) {833; CHECK-LABEL: test_masked_double_to_8_mem_mask3:834; CHECK:       # %bb.0:835; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2836; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k1837; CHECK-NEXT:    vbroadcastsd (%rdi), %zmm0 {%k1}838; CHECK-NEXT:    retq839  %s = load double, ptr %p840  %vec = insertelement <2 x double> undef, double %s, i32 0841  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>842  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer843  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %default844  ret <8 x double> %res845}846 847define <8 x double> @test_masked_z_double_to_8_mem_mask3(ptr %p, <8 x double> %mask) {848; CHECK-LABEL: test_masked_z_double_to_8_mem_mask3:849; CHECK:       # %bb.0:850; CHECK-NEXT:    vxorpd %xmm1, %xmm1, %xmm1851; CHECK-NEXT:    vcmpeqpd %zmm1, %zmm0, %k1852; CHECK-NEXT:    vbroadcastsd (%rdi), %zmm0 {%k1} {z}853; CHECK-NEXT:    retq854  %s = load double, ptr %p855  %vec = insertelement <2 x double> undef, double %s, i32 0856  %shuf = shufflevector <2 x double> %vec, <2 x double> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>857  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer858  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer859  ret <8 x double> %res860}861define <4 x float> @test_float_to_4_mem(ptr %p) {862; CHECK-LABEL: test_float_to_4_mem:863; CHECK:       # %bb.0:864; CHECK-NEXT:    vbroadcastss (%rdi), %xmm0865; CHECK-NEXT:    retq866  %s = load float, ptr %p867  %vec = insertelement <2 x float> undef, float %s, i32 0868  %res = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>869  ret <4 x float> %res870}871define <4 x float> @test_masked_float_to_4_mem_mask0(ptr %p, <4 x float> %default, <4 x float> %mask) {872; CHECK-LABEL: test_masked_float_to_4_mem_mask0:873; CHECK:       # %bb.0:874; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2875; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1876; CHECK-NEXT:    vbroadcastss (%rdi), %xmm0 {%k1}877; CHECK-NEXT:    retq878  %s = load float, ptr %p879  %vec = insertelement <2 x float> undef, float %s, i32 0880  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>881  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer882  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %default883  ret <4 x float> %res884}885 886define <4 x float> @test_masked_z_float_to_4_mem_mask0(ptr %p, <4 x float> %mask) {887; CHECK-LABEL: test_masked_z_float_to_4_mem_mask0:888; CHECK:       # %bb.0:889; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1890; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1891; CHECK-NEXT:    vbroadcastss (%rdi), %xmm0 {%k1} {z}892; CHECK-NEXT:    retq893  %s = load float, ptr %p894  %vec = insertelement <2 x float> undef, float %s, i32 0895  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>896  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer897  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer898  ret <4 x float> %res899}900define <4 x float> @test_masked_float_to_4_mem_mask1(ptr %p, <4 x float> %default, <4 x float> %mask) {901; CHECK-LABEL: test_masked_float_to_4_mem_mask1:902; CHECK:       # %bb.0:903; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2904; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1905; CHECK-NEXT:    vbroadcastss (%rdi), %xmm0 {%k1}906; CHECK-NEXT:    retq907  %s = load float, ptr %p908  %vec = insertelement <2 x float> undef, float %s, i32 0909  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>910  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer911  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %default912  ret <4 x float> %res913}914 915define <4 x float> @test_masked_z_float_to_4_mem_mask1(ptr %p, <4 x float> %mask) {916; CHECK-LABEL: test_masked_z_float_to_4_mem_mask1:917; CHECK:       # %bb.0:918; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1919; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1920; CHECK-NEXT:    vbroadcastss (%rdi), %xmm0 {%k1} {z}921; CHECK-NEXT:    retq922  %s = load float, ptr %p923  %vec = insertelement <2 x float> undef, float %s, i32 0924  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>925  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer926  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer927  ret <4 x float> %res928}929define <4 x float> @test_masked_float_to_4_mem_mask2(ptr %p, <4 x float> %default, <4 x float> %mask) {930; CHECK-LABEL: test_masked_float_to_4_mem_mask2:931; CHECK:       # %bb.0:932; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2933; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1934; CHECK-NEXT:    vbroadcastss (%rdi), %xmm0 {%k1}935; CHECK-NEXT:    retq936  %s = load float, ptr %p937  %vec = insertelement <2 x float> undef, float %s, i32 0938  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>939  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer940  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %default941  ret <4 x float> %res942}943 944define <4 x float> @test_masked_z_float_to_4_mem_mask2(ptr %p, <4 x float> %mask) {945; CHECK-LABEL: test_masked_z_float_to_4_mem_mask2:946; CHECK:       # %bb.0:947; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1948; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1949; CHECK-NEXT:    vbroadcastss (%rdi), %xmm0 {%k1} {z}950; CHECK-NEXT:    retq951  %s = load float, ptr %p952  %vec = insertelement <2 x float> undef, float %s, i32 0953  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>954  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer955  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer956  ret <4 x float> %res957}958define <4 x float> @test_masked_float_to_4_mem_mask3(ptr %p, <4 x float> %default, <4 x float> %mask) {959; CHECK-LABEL: test_masked_float_to_4_mem_mask3:960; CHECK:       # %bb.0:961; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2962; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1963; CHECK-NEXT:    vbroadcastss (%rdi), %xmm0 {%k1}964; CHECK-NEXT:    retq965  %s = load float, ptr %p966  %vec = insertelement <2 x float> undef, float %s, i32 0967  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>968  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer969  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %default970  ret <4 x float> %res971}972 973define <4 x float> @test_masked_z_float_to_4_mem_mask3(ptr %p, <4 x float> %mask) {974; CHECK-LABEL: test_masked_z_float_to_4_mem_mask3:975; CHECK:       # %bb.0:976; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1977; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1978; CHECK-NEXT:    vbroadcastss (%rdi), %xmm0 {%k1} {z}979; CHECK-NEXT:    retq980  %s = load float, ptr %p981  %vec = insertelement <2 x float> undef, float %s, i32 0982  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <4 x i32> <i32 0, i32 0, i32 0, i32 0>983  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer984  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer985  ret <4 x float> %res986}987define <8 x float> @test_float_to_8_mem(ptr %p) {988; CHECK-LABEL: test_float_to_8_mem:989; CHECK:       # %bb.0:990; CHECK-NEXT:    vbroadcastss (%rdi), %ymm0991; CHECK-NEXT:    retq992  %s = load float, ptr %p993  %vec = insertelement <2 x float> undef, float %s, i32 0994  %res = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>995  ret <8 x float> %res996}997define <8 x float> @test_masked_float_to_8_mem_mask0(ptr %p, <8 x float> %default, <8 x float> %mask) {998; CHECK-LABEL: test_masked_float_to_8_mem_mask0:999; CHECK:       # %bb.0:1000; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21001; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11002; CHECK-NEXT:    vbroadcastss (%rdi), %ymm0 {%k1}1003; CHECK-NEXT:    retq1004  %s = load float, ptr %p1005  %vec = insertelement <2 x float> undef, float %s, i32 01006  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1007  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1008  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %default1009  ret <8 x float> %res1010}1011 1012define <8 x float> @test_masked_z_float_to_8_mem_mask0(ptr %p, <8 x float> %mask) {1013; CHECK-LABEL: test_masked_z_float_to_8_mem_mask0:1014; CHECK:       # %bb.0:1015; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11016; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k11017; CHECK-NEXT:    vbroadcastss (%rdi), %ymm0 {%k1} {z}1018; CHECK-NEXT:    retq1019  %s = load float, ptr %p1020  %vec = insertelement <2 x float> undef, float %s, i32 01021  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1022  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1023  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1024  ret <8 x float> %res1025}1026define <8 x float> @test_masked_float_to_8_mem_mask1(ptr %p, <8 x float> %default, <8 x float> %mask) {1027; CHECK-LABEL: test_masked_float_to_8_mem_mask1:1028; CHECK:       # %bb.0:1029; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21030; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11031; CHECK-NEXT:    vbroadcastss (%rdi), %ymm0 {%k1}1032; CHECK-NEXT:    retq1033  %s = load float, ptr %p1034  %vec = insertelement <2 x float> undef, float %s, i32 01035  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1036  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1037  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %default1038  ret <8 x float> %res1039}1040 1041define <8 x float> @test_masked_z_float_to_8_mem_mask1(ptr %p, <8 x float> %mask) {1042; CHECK-LABEL: test_masked_z_float_to_8_mem_mask1:1043; CHECK:       # %bb.0:1044; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11045; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k11046; CHECK-NEXT:    vbroadcastss (%rdi), %ymm0 {%k1} {z}1047; CHECK-NEXT:    retq1048  %s = load float, ptr %p1049  %vec = insertelement <2 x float> undef, float %s, i32 01050  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1051  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1052  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1053  ret <8 x float> %res1054}1055define <8 x float> @test_masked_float_to_8_mem_mask2(ptr %p, <8 x float> %default, <8 x float> %mask) {1056; CHECK-LABEL: test_masked_float_to_8_mem_mask2:1057; CHECK:       # %bb.0:1058; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21059; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11060; CHECK-NEXT:    vbroadcastss (%rdi), %ymm0 {%k1}1061; CHECK-NEXT:    retq1062  %s = load float, ptr %p1063  %vec = insertelement <2 x float> undef, float %s, i32 01064  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1065  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1066  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %default1067  ret <8 x float> %res1068}1069 1070define <8 x float> @test_masked_z_float_to_8_mem_mask2(ptr %p, <8 x float> %mask) {1071; CHECK-LABEL: test_masked_z_float_to_8_mem_mask2:1072; CHECK:       # %bb.0:1073; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11074; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k11075; CHECK-NEXT:    vbroadcastss (%rdi), %ymm0 {%k1} {z}1076; CHECK-NEXT:    retq1077  %s = load float, ptr %p1078  %vec = insertelement <2 x float> undef, float %s, i32 01079  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1080  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1081  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1082  ret <8 x float> %res1083}1084define <8 x float> @test_masked_float_to_8_mem_mask3(ptr %p, <8 x float> %default, <8 x float> %mask) {1085; CHECK-LABEL: test_masked_float_to_8_mem_mask3:1086; CHECK:       # %bb.0:1087; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21088; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11089; CHECK-NEXT:    vbroadcastss (%rdi), %ymm0 {%k1}1090; CHECK-NEXT:    retq1091  %s = load float, ptr %p1092  %vec = insertelement <2 x float> undef, float %s, i32 01093  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1094  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1095  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %default1096  ret <8 x float> %res1097}1098 1099define <8 x float> @test_masked_z_float_to_8_mem_mask3(ptr %p, <8 x float> %mask) {1100; CHECK-LABEL: test_masked_z_float_to_8_mem_mask3:1101; CHECK:       # %bb.0:1102; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11103; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k11104; CHECK-NEXT:    vbroadcastss (%rdi), %ymm0 {%k1} {z}1105; CHECK-NEXT:    retq1106  %s = load float, ptr %p1107  %vec = insertelement <2 x float> undef, float %s, i32 01108  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1109  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1110  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1111  ret <8 x float> %res1112}1113define <16 x float> @test_float_to_16_mem(ptr %p) {1114; CHECK-LABEL: test_float_to_16_mem:1115; CHECK:       # %bb.0:1116; CHECK-NEXT:    vbroadcastss (%rdi), %zmm01117; CHECK-NEXT:    retq1118  %s = load float, ptr %p1119  %vec = insertelement <2 x float> undef, float %s, i32 01120  %res = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1121  ret <16 x float> %res1122}1123define <16 x float> @test_masked_float_to_16_mem_mask0(ptr %p, <16 x float> %default, <16 x float> %mask) {1124; CHECK-LABEL: test_masked_float_to_16_mem_mask0:1125; CHECK:       # %bb.0:1126; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21127; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11128; CHECK-NEXT:    vbroadcastss (%rdi), %zmm0 {%k1}1129; CHECK-NEXT:    retq1130  %s = load float, ptr %p1131  %vec = insertelement <2 x float> undef, float %s, i32 01132  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1133  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1134  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %default1135  ret <16 x float> %res1136}1137 1138define <16 x float> @test_masked_z_float_to_16_mem_mask0(ptr %p, <16 x float> %mask) {1139; CHECK-LABEL: test_masked_z_float_to_16_mem_mask0:1140; CHECK:       # %bb.0:1141; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11142; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k11143; CHECK-NEXT:    vbroadcastss (%rdi), %zmm0 {%k1} {z}1144; CHECK-NEXT:    retq1145  %s = load float, ptr %p1146  %vec = insertelement <2 x float> undef, float %s, i32 01147  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1148  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1149  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1150  ret <16 x float> %res1151}1152define <16 x float> @test_masked_float_to_16_mem_mask1(ptr %p, <16 x float> %default, <16 x float> %mask) {1153; CHECK-LABEL: test_masked_float_to_16_mem_mask1:1154; CHECK:       # %bb.0:1155; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21156; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11157; CHECK-NEXT:    vbroadcastss (%rdi), %zmm0 {%k1}1158; CHECK-NEXT:    retq1159  %s = load float, ptr %p1160  %vec = insertelement <2 x float> undef, float %s, i32 01161  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1162  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1163  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %default1164  ret <16 x float> %res1165}1166 1167define <16 x float> @test_masked_z_float_to_16_mem_mask1(ptr %p, <16 x float> %mask) {1168; CHECK-LABEL: test_masked_z_float_to_16_mem_mask1:1169; CHECK:       # %bb.0:1170; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11171; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k11172; CHECK-NEXT:    vbroadcastss (%rdi), %zmm0 {%k1} {z}1173; CHECK-NEXT:    retq1174  %s = load float, ptr %p1175  %vec = insertelement <2 x float> undef, float %s, i32 01176  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1177  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1178  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1179  ret <16 x float> %res1180}1181define <16 x float> @test_masked_float_to_16_mem_mask2(ptr %p, <16 x float> %default, <16 x float> %mask) {1182; CHECK-LABEL: test_masked_float_to_16_mem_mask2:1183; CHECK:       # %bb.0:1184; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21185; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11186; CHECK-NEXT:    vbroadcastss (%rdi), %zmm0 {%k1}1187; CHECK-NEXT:    retq1188  %s = load float, ptr %p1189  %vec = insertelement <2 x float> undef, float %s, i32 01190  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1191  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1192  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %default1193  ret <16 x float> %res1194}1195 1196define <16 x float> @test_masked_z_float_to_16_mem_mask2(ptr %p, <16 x float> %mask) {1197; CHECK-LABEL: test_masked_z_float_to_16_mem_mask2:1198; CHECK:       # %bb.0:1199; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11200; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k11201; CHECK-NEXT:    vbroadcastss (%rdi), %zmm0 {%k1} {z}1202; CHECK-NEXT:    retq1203  %s = load float, ptr %p1204  %vec = insertelement <2 x float> undef, float %s, i32 01205  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1206  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1207  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1208  ret <16 x float> %res1209}1210define <16 x float> @test_masked_float_to_16_mem_mask3(ptr %p, <16 x float> %default, <16 x float> %mask) {1211; CHECK-LABEL: test_masked_float_to_16_mem_mask3:1212; CHECK:       # %bb.0:1213; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21214; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k11215; CHECK-NEXT:    vbroadcastss (%rdi), %zmm0 {%k1}1216; CHECK-NEXT:    retq1217  %s = load float, ptr %p1218  %vec = insertelement <2 x float> undef, float %s, i32 01219  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1220  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1221  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %default1222  ret <16 x float> %res1223}1224 1225define <16 x float> @test_masked_z_float_to_16_mem_mask3(ptr %p, <16 x float> %mask) {1226; CHECK-LABEL: test_masked_z_float_to_16_mem_mask3:1227; CHECK:       # %bb.0:1228; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm11229; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k11230; CHECK-NEXT:    vbroadcastss (%rdi), %zmm0 {%k1} {z}1231; CHECK-NEXT:    retq1232  %s = load float, ptr %p1233  %vec = insertelement <2 x float> undef, float %s, i32 01234  %shuf = shufflevector <2 x float> %vec, <2 x float> undef, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>1235  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1236  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1237  ret <16 x float> %res1238}1239