brintos

brintos / llvm-project-archived public Read only

0
0
Text · 42.9 KiB · b9ed80b Raw
850 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 float> @test_4xfloat_dup_high(<4 x float> %vec) {5; CHECK-LABEL: test_4xfloat_dup_high:6; CHECK:       # %bb.0:7; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]8; CHECK-NEXT:    retq9  %res = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>10  ret <4 x float> %res11}12define <4 x float> @test_masked_4xfloat_dup_high_mask0(<4 x float> %vec, <4 x float> %vec2, <4 x float> %mask) {13; CHECK-LABEL: test_masked_4xfloat_dup_high_mask0:14; CHECK:       # %bb.0:15; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm316; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k117; CHECK-NEXT:    vmovshdup {{.*#+}} xmm1 {%k1} = xmm0[1,1,3,3]18; CHECK-NEXT:    vmovaps %xmm1, %xmm019; CHECK-NEXT:    retq20  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>21  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer22  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec223  ret <4 x float> %res24}25 26define <4 x float> @test_masked_z_4xfloat_dup_high_mask0(<4 x float> %vec, <4 x float> %mask) {27; CHECK-LABEL: test_masked_z_4xfloat_dup_high_mask0:28; CHECK:       # %bb.0:29; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm230; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k131; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} {z} = xmm0[1,1,3,3]32; CHECK-NEXT:    retq33  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>34  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer35  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer36  ret <4 x float> %res37}38define <4 x float> @test_masked_4xfloat_dup_high_mask1(<4 x float> %vec, <4 x float> %vec2, <4 x float> %mask) {39; CHECK-LABEL: test_masked_4xfloat_dup_high_mask1:40; CHECK:       # %bb.0:41; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm342; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k143; CHECK-NEXT:    vmovshdup {{.*#+}} xmm1 {%k1} = xmm0[1,1,3,3]44; CHECK-NEXT:    vmovaps %xmm1, %xmm045; CHECK-NEXT:    retq46  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>47  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer48  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec249  ret <4 x float> %res50}51 52define <4 x float> @test_masked_z_4xfloat_dup_high_mask1(<4 x float> %vec, <4 x float> %mask) {53; CHECK-LABEL: test_masked_z_4xfloat_dup_high_mask1:54; CHECK:       # %bb.0:55; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm256; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k157; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} {z} = xmm0[1,1,3,3]58; CHECK-NEXT:    retq59  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>60  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer61  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer62  ret <4 x float> %res63}64define <4 x float> @test_masked_4xfloat_dup_high_mask2(<4 x float> %vec, <4 x float> %vec2, <4 x float> %mask) {65; CHECK-LABEL: test_masked_4xfloat_dup_high_mask2:66; CHECK:       # %bb.0:67; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm368; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k169; CHECK-NEXT:    vmovshdup {{.*#+}} xmm1 {%k1} = xmm0[1,1,3,3]70; CHECK-NEXT:    vmovaps %xmm1, %xmm071; CHECK-NEXT:    retq72  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>73  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer74  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec275  ret <4 x float> %res76}77 78define <4 x float> @test_masked_z_4xfloat_dup_high_mask2(<4 x float> %vec, <4 x float> %mask) {79; CHECK-LABEL: test_masked_z_4xfloat_dup_high_mask2:80; CHECK:       # %bb.0:81; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm282; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k183; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} {z} = xmm0[1,1,3,3]84; CHECK-NEXT:    retq85  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>86  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer87  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer88  ret <4 x float> %res89}90define <4 x float> @test_masked_4xfloat_dup_high_mask3(<4 x float> %vec, <4 x float> %vec2, <4 x float> %mask) {91; CHECK-LABEL: test_masked_4xfloat_dup_high_mask3:92; CHECK:       # %bb.0:93; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm394; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k195; CHECK-NEXT:    vmovshdup {{.*#+}} xmm1 {%k1} = xmm0[1,1,3,3]96; CHECK-NEXT:    vmovaps %xmm1, %xmm097; CHECK-NEXT:    retq98  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>99  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer100  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2101  ret <4 x float> %res102}103 104define <4 x float> @test_masked_z_4xfloat_dup_high_mask3(<4 x float> %vec, <4 x float> %mask) {105; CHECK-LABEL: test_masked_z_4xfloat_dup_high_mask3:106; CHECK:       # %bb.0:107; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2108; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1109; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} {z} = xmm0[1,1,3,3]110; CHECK-NEXT:    retq111  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>112  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer113  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer114  ret <4 x float> %res115}116define <4 x float> @test_masked_4xfloat_dup_high_mask4(<4 x float> %vec, <4 x float> %vec2, <4 x float> %mask) {117; CHECK-LABEL: test_masked_4xfloat_dup_high_mask4:118; CHECK:       # %bb.0:119; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3120; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1121; CHECK-NEXT:    vmovshdup {{.*#+}} xmm1 {%k1} = xmm0[1,1,3,3]122; CHECK-NEXT:    vmovaps %xmm1, %xmm0123; CHECK-NEXT:    retq124  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>125  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer126  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2127  ret <4 x float> %res128}129 130define <4 x float> @test_masked_z_4xfloat_dup_high_mask4(<4 x float> %vec, <4 x float> %mask) {131; CHECK-LABEL: test_masked_z_4xfloat_dup_high_mask4:132; CHECK:       # %bb.0:133; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2134; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1135; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} {z} = xmm0[1,1,3,3]136; CHECK-NEXT:    retq137  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>138  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer139  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer140  ret <4 x float> %res141}142define <4 x float> @test_4xfloat_dup_high_mem(ptr %vp) {143; CHECK-LABEL: test_4xfloat_dup_high_mem:144; CHECK:       # %bb.0:145; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 = mem[1,1,3,3]146; CHECK-NEXT:    retq147  %vec = load <4 x float>, ptr %vp148  %res = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>149  ret <4 x float> %res150}151define <4 x float> @test_masked_4xfloat_dup_high_mem_mask0(ptr %vp, <4 x float> %vec2, <4 x float> %mask) {152; CHECK-LABEL: test_masked_4xfloat_dup_high_mem_mask0:153; CHECK:       # %bb.0:154; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2155; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1156; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} = mem[1,1,3,3]157; CHECK-NEXT:    retq158  %vec = load <4 x float>, ptr %vp159  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>160  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer161  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2162  ret <4 x float> %res163}164 165define <4 x float> @test_masked_z_4xfloat_dup_high_mem_mask0(ptr %vp, <4 x float> %mask) {166; CHECK-LABEL: test_masked_z_4xfloat_dup_high_mem_mask0:167; CHECK:       # %bb.0:168; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1169; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1170; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} {z} = mem[1,1,3,3]171; CHECK-NEXT:    retq172  %vec = load <4 x float>, ptr %vp173  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>174  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer175  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer176  ret <4 x float> %res177}178define <4 x float> @test_masked_4xfloat_dup_high_mem_mask1(ptr %vp, <4 x float> %vec2, <4 x float> %mask) {179; CHECK-LABEL: test_masked_4xfloat_dup_high_mem_mask1:180; CHECK:       # %bb.0:181; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2182; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1183; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} = mem[1,1,3,3]184; CHECK-NEXT:    retq185  %vec = load <4 x float>, ptr %vp186  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>187  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer188  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2189  ret <4 x float> %res190}191 192define <4 x float> @test_masked_z_4xfloat_dup_high_mem_mask1(ptr %vp, <4 x float> %mask) {193; CHECK-LABEL: test_masked_z_4xfloat_dup_high_mem_mask1:194; CHECK:       # %bb.0:195; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1196; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1197; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} {z} = mem[1,1,3,3]198; CHECK-NEXT:    retq199  %vec = load <4 x float>, ptr %vp200  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>201  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer202  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer203  ret <4 x float> %res204}205define <4 x float> @test_masked_4xfloat_dup_high_mem_mask2(ptr %vp, <4 x float> %vec2, <4 x float> %mask) {206; CHECK-LABEL: test_masked_4xfloat_dup_high_mem_mask2:207; CHECK:       # %bb.0:208; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2209; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1210; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} = mem[1,1,3,3]211; CHECK-NEXT:    retq212  %vec = load <4 x float>, ptr %vp213  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>214  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer215  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2216  ret <4 x float> %res217}218 219define <4 x float> @test_masked_z_4xfloat_dup_high_mem_mask2(ptr %vp, <4 x float> %mask) {220; CHECK-LABEL: test_masked_z_4xfloat_dup_high_mem_mask2:221; CHECK:       # %bb.0:222; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1223; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1224; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} {z} = mem[1,1,3,3]225; CHECK-NEXT:    retq226  %vec = load <4 x float>, ptr %vp227  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>228  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer229  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer230  ret <4 x float> %res231}232define <4 x float> @test_masked_4xfloat_dup_high_mem_mask3(ptr %vp, <4 x float> %vec2, <4 x float> %mask) {233; CHECK-LABEL: test_masked_4xfloat_dup_high_mem_mask3:234; CHECK:       # %bb.0:235; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2236; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1237; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} = mem[1,1,3,3]238; CHECK-NEXT:    retq239  %vec = load <4 x float>, ptr %vp240  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>241  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer242  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2243  ret <4 x float> %res244}245 246define <4 x float> @test_masked_z_4xfloat_dup_high_mem_mask3(ptr %vp, <4 x float> %mask) {247; CHECK-LABEL: test_masked_z_4xfloat_dup_high_mem_mask3:248; CHECK:       # %bb.0:249; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1250; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1251; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} {z} = mem[1,1,3,3]252; CHECK-NEXT:    retq253  %vec = load <4 x float>, ptr %vp254  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>255  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer256  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer257  ret <4 x float> %res258}259define <4 x float> @test_masked_4xfloat_dup_high_mem_mask4(ptr %vp, <4 x float> %vec2, <4 x float> %mask) {260; CHECK-LABEL: test_masked_4xfloat_dup_high_mem_mask4:261; CHECK:       # %bb.0:262; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2263; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1264; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} = mem[1,1,3,3]265; CHECK-NEXT:    retq266  %vec = load <4 x float>, ptr %vp267  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>268  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer269  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec2270  ret <4 x float> %res271}272 273define <4 x float> @test_masked_z_4xfloat_dup_high_mem_mask4(ptr %vp, <4 x float> %mask) {274; CHECK-LABEL: test_masked_z_4xfloat_dup_high_mem_mask4:275; CHECK:       # %bb.0:276; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1277; CHECK-NEXT:    vcmpeqps %xmm1, %xmm0, %k1278; CHECK-NEXT:    vmovshdup {{.*#+}} xmm0 {%k1} {z} = mem[1,1,3,3]279; CHECK-NEXT:    retq280  %vec = load <4 x float>, ptr %vp281  %shuf = shufflevector <4 x float> %vec, <4 x float> undef, <4 x i32> <i32 1, i32 1, i32 3, i32 3>282  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer283  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer284  ret <4 x float> %res285}286define <8 x float> @test_8xfloat_dup_high(<8 x float> %vec) {287; CHECK-LABEL: test_8xfloat_dup_high:288; CHECK:       # %bb.0:289; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 = ymm0[1,1,3,3,5,5,7,7]290; CHECK-NEXT:    retq291  %res = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>292  ret <8 x float> %res293}294define <8 x float> @test_masked_8xfloat_dup_high_mask0(<8 x float> %vec, <8 x float> %vec2, <8 x float> %mask) {295; CHECK-LABEL: test_masked_8xfloat_dup_high_mask0:296; CHECK:       # %bb.0:297; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3298; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1299; CHECK-NEXT:    vmovshdup {{.*#+}} ymm1 {%k1} = ymm0[1,1,3,3,5,5,7,7]300; CHECK-NEXT:    vmovaps %ymm1, %ymm0301; CHECK-NEXT:    retq302  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>303  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer304  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec2305  ret <8 x float> %res306}307 308define <8 x float> @test_masked_z_8xfloat_dup_high_mask0(<8 x float> %vec, <8 x float> %mask) {309; CHECK-LABEL: test_masked_z_8xfloat_dup_high_mask0:310; CHECK:       # %bb.0:311; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2312; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1313; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} {z} = ymm0[1,1,3,3,5,5,7,7]314; CHECK-NEXT:    retq315  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>316  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer317  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer318  ret <8 x float> %res319}320define <8 x float> @test_masked_8xfloat_dup_high_mask1(<8 x float> %vec, <8 x float> %vec2, <8 x float> %mask) {321; CHECK-LABEL: test_masked_8xfloat_dup_high_mask1:322; CHECK:       # %bb.0:323; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3324; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1325; CHECK-NEXT:    vmovshdup {{.*#+}} ymm1 {%k1} = ymm0[1,1,3,3,5,5,7,7]326; CHECK-NEXT:    vmovaps %ymm1, %ymm0327; CHECK-NEXT:    retq328  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>329  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer330  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec2331  ret <8 x float> %res332}333 334define <8 x float> @test_masked_z_8xfloat_dup_high_mask1(<8 x float> %vec, <8 x float> %mask) {335; CHECK-LABEL: test_masked_z_8xfloat_dup_high_mask1:336; CHECK:       # %bb.0:337; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2338; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1339; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} {z} = ymm0[1,1,3,3,5,5,7,7]340; CHECK-NEXT:    retq341  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>342  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer343  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer344  ret <8 x float> %res345}346define <8 x float> @test_masked_8xfloat_dup_high_mask2(<8 x float> %vec, <8 x float> %vec2, <8 x float> %mask) {347; CHECK-LABEL: test_masked_8xfloat_dup_high_mask2:348; CHECK:       # %bb.0:349; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3350; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1351; CHECK-NEXT:    vmovshdup {{.*#+}} ymm1 {%k1} = ymm0[1,1,3,3,5,5,7,7]352; CHECK-NEXT:    vmovaps %ymm1, %ymm0353; CHECK-NEXT:    retq354  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>355  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer356  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec2357  ret <8 x float> %res358}359 360define <8 x float> @test_masked_z_8xfloat_dup_high_mask2(<8 x float> %vec, <8 x float> %mask) {361; CHECK-LABEL: test_masked_z_8xfloat_dup_high_mask2:362; CHECK:       # %bb.0:363; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2364; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1365; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} {z} = ymm0[1,1,3,3,5,5,7,7]366; CHECK-NEXT:    retq367  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>368  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer369  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer370  ret <8 x float> %res371}372define <8 x float> @test_masked_8xfloat_dup_high_mask3(<8 x float> %vec, <8 x float> %vec2, <8 x float> %mask) {373; CHECK-LABEL: test_masked_8xfloat_dup_high_mask3:374; CHECK:       # %bb.0:375; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3376; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1377; CHECK-NEXT:    vmovshdup {{.*#+}} ymm1 {%k1} = ymm0[1,1,3,3,5,5,7,7]378; CHECK-NEXT:    vmovaps %ymm1, %ymm0379; CHECK-NEXT:    retq380  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>381  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer382  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec2383  ret <8 x float> %res384}385 386define <8 x float> @test_masked_z_8xfloat_dup_high_mask3(<8 x float> %vec, <8 x float> %mask) {387; CHECK-LABEL: test_masked_z_8xfloat_dup_high_mask3:388; CHECK:       # %bb.0:389; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2390; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1391; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} {z} = ymm0[1,1,3,3,5,5,7,7]392; CHECK-NEXT:    retq393  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>394  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer395  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer396  ret <8 x float> %res397}398define <8 x float> @test_masked_8xfloat_dup_high_mask4(<8 x float> %vec, <8 x float> %vec2, <8 x float> %mask) {399; CHECK-LABEL: test_masked_8xfloat_dup_high_mask4:400; CHECK:       # %bb.0:401; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3402; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1403; CHECK-NEXT:    vmovshdup {{.*#+}} ymm1 {%k1} = ymm0[1,1,3,3,5,5,7,7]404; CHECK-NEXT:    vmovaps %ymm1, %ymm0405; CHECK-NEXT:    retq406  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>407  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer408  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec2409  ret <8 x float> %res410}411 412define <8 x float> @test_masked_z_8xfloat_dup_high_mask4(<8 x float> %vec, <8 x float> %mask) {413; CHECK-LABEL: test_masked_z_8xfloat_dup_high_mask4:414; CHECK:       # %bb.0:415; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2416; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1417; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} {z} = ymm0[1,1,3,3,5,5,7,7]418; CHECK-NEXT:    retq419  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>420  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer421  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer422  ret <8 x float> %res423}424define <8 x float> @test_8xfloat_dup_high_mem(ptr %vp) {425; CHECK-LABEL: test_8xfloat_dup_high_mem:426; CHECK:       # %bb.0:427; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 = mem[1,1,3,3,5,5,7,7]428; CHECK-NEXT:    retq429  %vec = load <8 x float>, ptr %vp430  %res = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>431  ret <8 x float> %res432}433define <8 x float> @test_masked_8xfloat_dup_high_mem_mask0(ptr %vp, <8 x float> %vec2, <8 x float> %mask) {434; CHECK-LABEL: test_masked_8xfloat_dup_high_mem_mask0:435; CHECK:       # %bb.0:436; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2437; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1438; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} = mem[1,1,3,3,5,5,7,7]439; CHECK-NEXT:    retq440  %vec = load <8 x float>, ptr %vp441  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>442  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer443  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec2444  ret <8 x float> %res445}446 447define <8 x float> @test_masked_z_8xfloat_dup_high_mem_mask0(ptr %vp, <8 x float> %mask) {448; CHECK-LABEL: test_masked_z_8xfloat_dup_high_mem_mask0:449; CHECK:       # %bb.0:450; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1451; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k1452; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} {z} = mem[1,1,3,3,5,5,7,7]453; CHECK-NEXT:    retq454  %vec = load <8 x float>, ptr %vp455  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>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_8xfloat_dup_high_mem_mask1(ptr %vp, <8 x float> %vec2, <8 x float> %mask) {461; CHECK-LABEL: test_masked_8xfloat_dup_high_mem_mask1:462; CHECK:       # %bb.0:463; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2464; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1465; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} = mem[1,1,3,3,5,5,7,7]466; CHECK-NEXT:    retq467  %vec = load <8 x float>, ptr %vp468  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>469  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer470  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec2471  ret <8 x float> %res472}473 474define <8 x float> @test_masked_z_8xfloat_dup_high_mem_mask1(ptr %vp, <8 x float> %mask) {475; CHECK-LABEL: test_masked_z_8xfloat_dup_high_mem_mask1:476; CHECK:       # %bb.0:477; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1478; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k1479; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} {z} = mem[1,1,3,3,5,5,7,7]480; CHECK-NEXT:    retq481  %vec = load <8 x float>, ptr %vp482  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>483  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer484  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer485  ret <8 x float> %res486}487define <8 x float> @test_masked_8xfloat_dup_high_mem_mask2(ptr %vp, <8 x float> %vec2, <8 x float> %mask) {488; CHECK-LABEL: test_masked_8xfloat_dup_high_mem_mask2:489; CHECK:       # %bb.0:490; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2491; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1492; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} = mem[1,1,3,3,5,5,7,7]493; CHECK-NEXT:    retq494  %vec = load <8 x float>, ptr %vp495  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>496  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer497  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec2498  ret <8 x float> %res499}500 501define <8 x float> @test_masked_z_8xfloat_dup_high_mem_mask2(ptr %vp, <8 x float> %mask) {502; CHECK-LABEL: test_masked_z_8xfloat_dup_high_mem_mask2:503; CHECK:       # %bb.0:504; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1505; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k1506; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} {z} = mem[1,1,3,3,5,5,7,7]507; CHECK-NEXT:    retq508  %vec = load <8 x float>, ptr %vp509  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>510  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer511  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer512  ret <8 x float> %res513}514define <8 x float> @test_masked_8xfloat_dup_high_mem_mask3(ptr %vp, <8 x float> %vec2, <8 x float> %mask) {515; CHECK-LABEL: test_masked_8xfloat_dup_high_mem_mask3:516; CHECK:       # %bb.0:517; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2518; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1519; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} = mem[1,1,3,3,5,5,7,7]520; CHECK-NEXT:    retq521  %vec = load <8 x float>, ptr %vp522  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>523  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer524  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec2525  ret <8 x float> %res526}527 528define <8 x float> @test_masked_z_8xfloat_dup_high_mem_mask3(ptr %vp, <8 x float> %mask) {529; CHECK-LABEL: test_masked_z_8xfloat_dup_high_mem_mask3:530; CHECK:       # %bb.0:531; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1532; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k1533; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} {z} = mem[1,1,3,3,5,5,7,7]534; CHECK-NEXT:    retq535  %vec = load <8 x float>, ptr %vp536  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>537  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer538  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer539  ret <8 x float> %res540}541define <8 x float> @test_masked_8xfloat_dup_high_mem_mask4(ptr %vp, <8 x float> %vec2, <8 x float> %mask) {542; CHECK-LABEL: test_masked_8xfloat_dup_high_mem_mask4:543; CHECK:       # %bb.0:544; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2545; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1546; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} = mem[1,1,3,3,5,5,7,7]547; CHECK-NEXT:    retq548  %vec = load <8 x float>, ptr %vp549  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>550  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer551  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec2552  ret <8 x float> %res553}554 555define <8 x float> @test_masked_z_8xfloat_dup_high_mem_mask4(ptr %vp, <8 x float> %mask) {556; CHECK-LABEL: test_masked_z_8xfloat_dup_high_mem_mask4:557; CHECK:       # %bb.0:558; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1559; CHECK-NEXT:    vcmpeqps %ymm1, %ymm0, %k1560; CHECK-NEXT:    vmovshdup {{.*#+}} ymm0 {%k1} {z} = mem[1,1,3,3,5,5,7,7]561; CHECK-NEXT:    retq562  %vec = load <8 x float>, ptr %vp563  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7>564  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer565  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer566  ret <8 x float> %res567}568define <16 x float> @test_16xfloat_dup_high(<16 x float> %vec) {569; CHECK-LABEL: test_16xfloat_dup_high:570; CHECK:       # %bb.0:571; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]572; CHECK-NEXT:    retq573  %res = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>574  ret <16 x float> %res575}576define <16 x float> @test_masked_16xfloat_dup_high_mask0(<16 x float> %vec, <16 x float> %vec2, <16 x float> %mask) {577; CHECK-LABEL: test_masked_16xfloat_dup_high_mask0:578; CHECK:       # %bb.0:579; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3580; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1581; CHECK-NEXT:    vmovshdup {{.*#+}} zmm1 {%k1} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]582; CHECK-NEXT:    vmovaps %zmm1, %zmm0583; CHECK-NEXT:    retq584  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>585  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer586  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec2587  ret <16 x float> %res588}589 590define <16 x float> @test_masked_z_16xfloat_dup_high_mask0(<16 x float> %vec, <16 x float> %mask) {591; CHECK-LABEL: test_masked_z_16xfloat_dup_high_mask0:592; CHECK:       # %bb.0:593; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2594; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1595; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]596; CHECK-NEXT:    retq597  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>598  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer599  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer600  ret <16 x float> %res601}602define <16 x float> @test_masked_16xfloat_dup_high_mask1(<16 x float> %vec, <16 x float> %vec2, <16 x float> %mask) {603; CHECK-LABEL: test_masked_16xfloat_dup_high_mask1:604; CHECK:       # %bb.0:605; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3606; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1607; CHECK-NEXT:    vmovshdup {{.*#+}} zmm1 {%k1} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]608; CHECK-NEXT:    vmovaps %zmm1, %zmm0609; CHECK-NEXT:    retq610  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>611  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer612  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec2613  ret <16 x float> %res614}615 616define <16 x float> @test_masked_z_16xfloat_dup_high_mask1(<16 x float> %vec, <16 x float> %mask) {617; CHECK-LABEL: test_masked_z_16xfloat_dup_high_mask1:618; CHECK:       # %bb.0:619; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2620; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1621; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]622; CHECK-NEXT:    retq623  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>624  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer625  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer626  ret <16 x float> %res627}628define <16 x float> @test_masked_16xfloat_dup_high_mask2(<16 x float> %vec, <16 x float> %vec2, <16 x float> %mask) {629; CHECK-LABEL: test_masked_16xfloat_dup_high_mask2:630; CHECK:       # %bb.0:631; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3632; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1633; CHECK-NEXT:    vmovshdup {{.*#+}} zmm1 {%k1} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]634; CHECK-NEXT:    vmovaps %zmm1, %zmm0635; CHECK-NEXT:    retq636  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>637  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer638  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec2639  ret <16 x float> %res640}641 642define <16 x float> @test_masked_z_16xfloat_dup_high_mask2(<16 x float> %vec, <16 x float> %mask) {643; CHECK-LABEL: test_masked_z_16xfloat_dup_high_mask2:644; CHECK:       # %bb.0:645; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2646; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1647; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]648; CHECK-NEXT:    retq649  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>650  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer651  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer652  ret <16 x float> %res653}654define <16 x float> @test_masked_16xfloat_dup_high_mask3(<16 x float> %vec, <16 x float> %vec2, <16 x float> %mask) {655; CHECK-LABEL: test_masked_16xfloat_dup_high_mask3:656; CHECK:       # %bb.0:657; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3658; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1659; CHECK-NEXT:    vmovshdup {{.*#+}} zmm1 {%k1} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]660; CHECK-NEXT:    vmovaps %zmm1, %zmm0661; CHECK-NEXT:    retq662  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>663  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer664  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec2665  ret <16 x float> %res666}667 668define <16 x float> @test_masked_z_16xfloat_dup_high_mask3(<16 x float> %vec, <16 x float> %mask) {669; CHECK-LABEL: test_masked_z_16xfloat_dup_high_mask3:670; CHECK:       # %bb.0:671; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2672; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1673; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]674; CHECK-NEXT:    retq675  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>676  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer677  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer678  ret <16 x float> %res679}680define <16 x float> @test_masked_16xfloat_dup_high_mask4(<16 x float> %vec, <16 x float> %vec2, <16 x float> %mask) {681; CHECK-LABEL: test_masked_16xfloat_dup_high_mask4:682; CHECK:       # %bb.0:683; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3684; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1685; CHECK-NEXT:    vmovshdup {{.*#+}} zmm1 {%k1} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]686; CHECK-NEXT:    vmovaps %zmm1, %zmm0687; CHECK-NEXT:    retq688  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>689  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer690  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec2691  ret <16 x float> %res692}693 694define <16 x float> @test_masked_z_16xfloat_dup_high_mask4(<16 x float> %vec, <16 x float> %mask) {695; CHECK-LABEL: test_masked_z_16xfloat_dup_high_mask4:696; CHECK:       # %bb.0:697; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2698; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1699; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = zmm0[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]700; CHECK-NEXT:    retq701  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>702  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer703  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer704  ret <16 x float> %res705}706define <16 x float> @test_16xfloat_dup_high_mem(ptr %vp) {707; CHECK-LABEL: test_16xfloat_dup_high_mem:708; CHECK:       # %bb.0:709; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 = mem[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]710; CHECK-NEXT:    retq711  %vec = load <16 x float>, ptr %vp712  %res = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>713  ret <16 x float> %res714}715define <16 x float> @test_masked_16xfloat_dup_high_mem_mask0(ptr %vp, <16 x float> %vec2, <16 x float> %mask) {716; CHECK-LABEL: test_masked_16xfloat_dup_high_mem_mask0:717; CHECK:       # %bb.0:718; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2719; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1720; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} = mem[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]721; CHECK-NEXT:    retq722  %vec = load <16 x float>, ptr %vp723  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>724  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer725  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec2726  ret <16 x float> %res727}728 729define <16 x float> @test_masked_z_16xfloat_dup_high_mem_mask0(ptr %vp, <16 x float> %mask) {730; CHECK-LABEL: test_masked_z_16xfloat_dup_high_mem_mask0:731; CHECK:       # %bb.0:732; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1733; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k1734; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = mem[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]735; CHECK-NEXT:    retq736  %vec = load <16 x float>, ptr %vp737  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>738  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer739  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer740  ret <16 x float> %res741}742define <16 x float> @test_masked_16xfloat_dup_high_mem_mask1(ptr %vp, <16 x float> %vec2, <16 x float> %mask) {743; CHECK-LABEL: test_masked_16xfloat_dup_high_mem_mask1:744; CHECK:       # %bb.0:745; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2746; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1747; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} = mem[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]748; CHECK-NEXT:    retq749  %vec = load <16 x float>, ptr %vp750  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>751  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer752  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec2753  ret <16 x float> %res754}755 756define <16 x float> @test_masked_z_16xfloat_dup_high_mem_mask1(ptr %vp, <16 x float> %mask) {757; CHECK-LABEL: test_masked_z_16xfloat_dup_high_mem_mask1:758; CHECK:       # %bb.0:759; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1760; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k1761; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = mem[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]762; CHECK-NEXT:    retq763  %vec = load <16 x float>, ptr %vp764  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>765  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer766  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer767  ret <16 x float> %res768}769define <16 x float> @test_masked_16xfloat_dup_high_mem_mask2(ptr %vp, <16 x float> %vec2, <16 x float> %mask) {770; CHECK-LABEL: test_masked_16xfloat_dup_high_mem_mask2:771; CHECK:       # %bb.0:772; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2773; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1774; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} = mem[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]775; CHECK-NEXT:    retq776  %vec = load <16 x float>, ptr %vp777  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>778  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer779  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec2780  ret <16 x float> %res781}782 783define <16 x float> @test_masked_z_16xfloat_dup_high_mem_mask2(ptr %vp, <16 x float> %mask) {784; CHECK-LABEL: test_masked_z_16xfloat_dup_high_mem_mask2:785; CHECK:       # %bb.0:786; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1787; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k1788; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = mem[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]789; CHECK-NEXT:    retq790  %vec = load <16 x float>, ptr %vp791  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>792  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer793  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer794  ret <16 x float> %res795}796define <16 x float> @test_masked_16xfloat_dup_high_mem_mask3(ptr %vp, <16 x float> %vec2, <16 x float> %mask) {797; CHECK-LABEL: test_masked_16xfloat_dup_high_mem_mask3:798; CHECK:       # %bb.0:799; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2800; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1801; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} = mem[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]802; CHECK-NEXT:    retq803  %vec = load <16 x float>, ptr %vp804  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>805  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer806  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec2807  ret <16 x float> %res808}809 810define <16 x float> @test_masked_z_16xfloat_dup_high_mem_mask3(ptr %vp, <16 x float> %mask) {811; CHECK-LABEL: test_masked_z_16xfloat_dup_high_mem_mask3:812; CHECK:       # %bb.0:813; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1814; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k1815; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = mem[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]816; CHECK-NEXT:    retq817  %vec = load <16 x float>, ptr %vp818  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>819  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer820  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer821  ret <16 x float> %res822}823define <16 x float> @test_masked_16xfloat_dup_high_mem_mask4(ptr %vp, <16 x float> %vec2, <16 x float> %mask) {824; CHECK-LABEL: test_masked_16xfloat_dup_high_mem_mask4:825; CHECK:       # %bb.0:826; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2827; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1828; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} = mem[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]829; CHECK-NEXT:    retq830  %vec = load <16 x float>, ptr %vp831  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>832  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer833  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec2834  ret <16 x float> %res835}836 837define <16 x float> @test_masked_z_16xfloat_dup_high_mem_mask4(ptr %vp, <16 x float> %mask) {838; CHECK-LABEL: test_masked_z_16xfloat_dup_high_mem_mask4:839; CHECK:       # %bb.0:840; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1841; CHECK-NEXT:    vcmpeqps %zmm1, %zmm0, %k1842; CHECK-NEXT:    vmovshdup {{.*#+}} zmm0 {%k1} {z} = mem[1,1,3,3,5,5,7,7,9,9,11,11,13,13,15,15]843; CHECK-NEXT:    retq844  %vec = load <16 x float>, ptr %vp845  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 1, i32 1, i32 3, i32 3, i32 5, i32 5, i32 7, i32 7, i32 9, i32 9, i32 11, i32 11, i32 13, i32 13, i32 15, i32 15>846  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer847  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer848  ret <16 x float> %res849}850