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