brintos

brintos / llvm-project-archived public Read only

0
0
Text · 149.9 KiB · d0b183d Raw
2798 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_unpack_low_mask0(<4 x float> %vec1, <4 x float> %vec2) {5; CHECK-LABEL: test_4xfloat_unpack_low_mask0:6; CHECK:       # %bb.0:7; CHECK-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]8; CHECK-NEXT:    retq9  %res = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>10  ret <4 x float> %res11}12define <4 x float> @test_4xfloat_masked_unpack_low_mask0(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %vec3, <4 x float> %mask) {13; CHECK-LABEL: test_4xfloat_masked_unpack_low_mask0:14; CHECK:       # %bb.0:15; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm416; CHECK-NEXT:    vcmpeqps %xmm4, %xmm3, %k117; CHECK-NEXT:    vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]18; CHECK-NEXT:    vmovaps %xmm2, %xmm019; CHECK-NEXT:    retq20  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>21  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer22  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec323  ret <4 x float> %res24}25 26define <4 x float> @test_4xfloat_zero_masked_unpack_low_mask0(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %mask) {27; CHECK-LABEL: test_4xfloat_zero_masked_unpack_low_mask0:28; CHECK:       # %bb.0:29; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm330; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k131; CHECK-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]32; CHECK-NEXT:    retq33  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>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_4xfloat_masked_unpack_low_mask1(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %vec3, <4 x float> %mask) {39; CHECK-LABEL: test_4xfloat_masked_unpack_low_mask1:40; CHECK:       # %bb.0:41; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm442; CHECK-NEXT:    vcmpeqps %xmm4, %xmm3, %k143; CHECK-NEXT:    vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]44; CHECK-NEXT:    vmovaps %xmm2, %xmm045; CHECK-NEXT:    retq46  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>47  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer48  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec349  ret <4 x float> %res50}51 52define <4 x float> @test_4xfloat_zero_masked_unpack_low_mask1(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %mask) {53; CHECK-LABEL: test_4xfloat_zero_masked_unpack_low_mask1:54; CHECK:       # %bb.0:55; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm356; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k157; CHECK-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]58; CHECK-NEXT:    retq59  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>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_4xfloat_masked_unpack_low_mask2(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %vec3, <4 x float> %mask) {65; CHECK-LABEL: test_4xfloat_masked_unpack_low_mask2:66; CHECK:       # %bb.0:67; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm468; CHECK-NEXT:    vcmpeqps %xmm4, %xmm3, %k169; CHECK-NEXT:    vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]70; CHECK-NEXT:    vmovaps %xmm2, %xmm071; CHECK-NEXT:    retq72  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>73  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer74  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec375  ret <4 x float> %res76}77 78define <4 x float> @test_4xfloat_zero_masked_unpack_low_mask2(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %mask) {79; CHECK-LABEL: test_4xfloat_zero_masked_unpack_low_mask2:80; CHECK:       # %bb.0:81; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm382; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k183; CHECK-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]84; CHECK-NEXT:    retq85  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>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_4xfloat_unpack_low_mask3(<4 x float> %vec1, <4 x float> %vec2) {91; CHECK-LABEL: test_4xfloat_unpack_low_mask3:92; CHECK:       # %bb.0:93; CHECK-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[1],xmm1[1]94; CHECK-NEXT:    retq95  %res = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>96  ret <4 x float> %res97}98define <4 x float> @test_4xfloat_masked_unpack_low_mask3(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %vec3, <4 x float> %mask) {99; CHECK-LABEL: test_4xfloat_masked_unpack_low_mask3:100; CHECK:       # %bb.0:101; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4102; CHECK-NEXT:    vcmpeqps %xmm4, %xmm3, %k1103; CHECK-NEXT:    vunpcklps {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]104; CHECK-NEXT:    vmovaps %xmm2, %xmm0105; CHECK-NEXT:    retq106  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>107  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer108  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec3109  ret <4 x float> %res110}111 112define <4 x float> @test_4xfloat_zero_masked_unpack_low_mask3(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %mask) {113; CHECK-LABEL: test_4xfloat_zero_masked_unpack_low_mask3:114; CHECK:       # %bb.0:115; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3116; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1117; CHECK-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0],xmm0[1],xmm1[1]118; CHECK-NEXT:    retq119  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>120  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer121  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer122  ret <4 x float> %res123}124define <4 x float> @test_4xfloat_unpack_low_mem_mask0(<4 x float> %vec1, ptr %vec2p) {125; CHECK-LABEL: test_4xfloat_unpack_low_mem_mask0:126; CHECK:       # %bb.0:127; CHECK-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]128; CHECK-NEXT:    retq129  %vec2 = load <4 x float>, ptr %vec2p130  %res = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>131  ret <4 x float> %res132}133define <4 x float> @test_4xfloat_masked_unpack_low_mem_mask0(<4 x float> %vec1, ptr %vec2p, <4 x float> %vec3, <4 x float> %mask) {134; CHECK-LABEL: test_4xfloat_masked_unpack_low_mem_mask0:135; CHECK:       # %bb.0:136; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3137; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1138; CHECK-NEXT:    vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]139; CHECK-NEXT:    vmovaps %xmm1, %xmm0140; CHECK-NEXT:    retq141  %vec2 = load <4 x float>, ptr %vec2p142  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>143  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer144  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec3145  ret <4 x float> %res146}147 148define <4 x float> @test_4xfloat_zero_masked_unpack_low_mem_mask0(<4 x float> %vec1, ptr %vec2p, <4 x float> %mask) {149; CHECK-LABEL: test_4xfloat_zero_masked_unpack_low_mem_mask0:150; CHECK:       # %bb.0:151; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2152; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1153; CHECK-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]154; CHECK-NEXT:    retq155  %vec2 = load <4 x float>, ptr %vec2p156  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>157  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer158  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer159  ret <4 x float> %res160}161 162define <4 x float> @test_4xfloat_masked_unpack_low_mem_mask1(<4 x float> %vec1, ptr %vec2p, <4 x float> %vec3, <4 x float> %mask) {163; CHECK-LABEL: test_4xfloat_masked_unpack_low_mem_mask1:164; CHECK:       # %bb.0:165; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3166; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1167; CHECK-NEXT:    vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]168; CHECK-NEXT:    vmovaps %xmm1, %xmm0169; CHECK-NEXT:    retq170  %vec2 = load <4 x float>, ptr %vec2p171  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>172  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer173  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec3174  ret <4 x float> %res175}176 177define <4 x float> @test_4xfloat_zero_masked_unpack_low_mem_mask1(<4 x float> %vec1, ptr %vec2p, <4 x float> %mask) {178; CHECK-LABEL: test_4xfloat_zero_masked_unpack_low_mem_mask1:179; CHECK:       # %bb.0:180; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2181; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1182; CHECK-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]183; CHECK-NEXT:    retq184  %vec2 = load <4 x float>, ptr %vec2p185  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>186  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer187  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer188  ret <4 x float> %res189}190 191define <4 x float> @test_4xfloat_masked_unpack_low_mem_mask2(<4 x float> %vec1, ptr %vec2p, <4 x float> %vec3, <4 x float> %mask) {192; CHECK-LABEL: test_4xfloat_masked_unpack_low_mem_mask2:193; CHECK:       # %bb.0:194; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3195; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1196; CHECK-NEXT:    vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]197; CHECK-NEXT:    vmovaps %xmm1, %xmm0198; CHECK-NEXT:    retq199  %vec2 = load <4 x float>, ptr %vec2p200  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>201  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer202  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec3203  ret <4 x float> %res204}205 206define <4 x float> @test_4xfloat_zero_masked_unpack_low_mem_mask2(<4 x float> %vec1, ptr %vec2p, <4 x float> %mask) {207; CHECK-LABEL: test_4xfloat_zero_masked_unpack_low_mem_mask2:208; CHECK:       # %bb.0:209; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2210; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1211; CHECK-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]212; CHECK-NEXT:    retq213  %vec2 = load <4 x float>, ptr %vec2p214  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>215  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer216  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer217  ret <4 x float> %res218}219 220define <4 x float> @test_4xfloat_unpack_low_mem_mask3(<4 x float> %vec1, ptr %vec2p) {221; CHECK-LABEL: test_4xfloat_unpack_low_mem_mask3:222; CHECK:       # %bb.0:223; CHECK-NEXT:    vunpcklps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]224; CHECK-NEXT:    retq225  %vec2 = load <4 x float>, ptr %vec2p226  %res = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>227  ret <4 x float> %res228}229define <4 x float> @test_4xfloat_masked_unpack_low_mem_mask3(<4 x float> %vec1, ptr %vec2p, <4 x float> %vec3, <4 x float> %mask) {230; CHECK-LABEL: test_4xfloat_masked_unpack_low_mem_mask3:231; CHECK:       # %bb.0:232; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3233; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1234; CHECK-NEXT:    vunpcklps {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0],xmm0[1],mem[1]235; CHECK-NEXT:    vmovaps %xmm1, %xmm0236; CHECK-NEXT:    retq237  %vec2 = load <4 x float>, ptr %vec2p238  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>239  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer240  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec3241  ret <4 x float> %res242}243 244define <4 x float> @test_4xfloat_zero_masked_unpack_low_mem_mask3(<4 x float> %vec1, ptr %vec2p, <4 x float> %mask) {245; CHECK-LABEL: test_4xfloat_zero_masked_unpack_low_mem_mask3:246; CHECK:       # %bb.0:247; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2248; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1249; CHECK-NEXT:    vunpcklps {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0],xmm0[1],mem[1]250; CHECK-NEXT:    retq251  %vec2 = load <4 x float>, ptr %vec2p252  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 0, i32 4, i32 1, i32 5>253  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer254  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer255  ret <4 x float> %res256}257 258define <8 x float> @test_8xfloat_unpack_low_mask0(<8 x float> %vec1, <8 x float> %vec2) {259; CHECK-LABEL: test_8xfloat_unpack_low_mask0:260; CHECK:       # %bb.0:261; CHECK-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]262; CHECK-NEXT:    retq263  %res = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>264  ret <8 x float> %res265}266define <8 x float> @test_8xfloat_masked_unpack_low_mask0(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %vec3, <8 x float> %mask) {267; CHECK-LABEL: test_8xfloat_masked_unpack_low_mask0:268; CHECK:       # %bb.0:269; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4270; CHECK-NEXT:    vcmpeqps %ymm4, %ymm3, %k1271; CHECK-NEXT:    vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]272; CHECK-NEXT:    vmovaps %ymm2, %ymm0273; CHECK-NEXT:    retq274  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>275  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer276  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec3277  ret <8 x float> %res278}279 280define <8 x float> @test_8xfloat_zero_masked_unpack_low_mask0(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %mask) {281; CHECK-LABEL: test_8xfloat_zero_masked_unpack_low_mask0:282; CHECK:       # %bb.0:283; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3284; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1285; CHECK-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]286; CHECK-NEXT:    retq287  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>288  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer289  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer290  ret <8 x float> %res291}292define <8 x float> @test_8xfloat_masked_unpack_low_mask1(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %vec3, <8 x float> %mask) {293; CHECK-LABEL: test_8xfloat_masked_unpack_low_mask1:294; CHECK:       # %bb.0:295; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4296; CHECK-NEXT:    vcmpeqps %ymm4, %ymm3, %k1297; CHECK-NEXT:    vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]298; CHECK-NEXT:    vmovaps %ymm2, %ymm0299; CHECK-NEXT:    retq300  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>301  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer302  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec3303  ret <8 x float> %res304}305 306define <8 x float> @test_8xfloat_zero_masked_unpack_low_mask1(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %mask) {307; CHECK-LABEL: test_8xfloat_zero_masked_unpack_low_mask1:308; CHECK:       # %bb.0:309; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3310; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1311; CHECK-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]312; CHECK-NEXT:    retq313  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>314  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer315  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer316  ret <8 x float> %res317}318define <8 x float> @test_8xfloat_masked_unpack_low_mask2(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %vec3, <8 x float> %mask) {319; CHECK-LABEL: test_8xfloat_masked_unpack_low_mask2:320; CHECK:       # %bb.0:321; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4322; CHECK-NEXT:    vcmpeqps %ymm4, %ymm3, %k1323; CHECK-NEXT:    vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]324; CHECK-NEXT:    vmovaps %ymm2, %ymm0325; CHECK-NEXT:    retq326  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>327  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer328  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec3329  ret <8 x float> %res330}331 332define <8 x float> @test_8xfloat_zero_masked_unpack_low_mask2(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %mask) {333; CHECK-LABEL: test_8xfloat_zero_masked_unpack_low_mask2:334; CHECK:       # %bb.0:335; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3336; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1337; CHECK-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]338; CHECK-NEXT:    retq339  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>340  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer341  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer342  ret <8 x float> %res343}344define <8 x float> @test_8xfloat_unpack_low_mask3(<8 x float> %vec1, <8 x float> %vec2) {345; CHECK-LABEL: test_8xfloat_unpack_low_mask3:346; CHECK:       # %bb.0:347; CHECK-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]348; CHECK-NEXT:    retq349  %res = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>350  ret <8 x float> %res351}352define <8 x float> @test_8xfloat_masked_unpack_low_mask3(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %vec3, <8 x float> %mask) {353; CHECK-LABEL: test_8xfloat_masked_unpack_low_mask3:354; CHECK:       # %bb.0:355; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4356; CHECK-NEXT:    vcmpeqps %ymm4, %ymm3, %k1357; CHECK-NEXT:    vunpcklps {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]358; CHECK-NEXT:    vmovaps %ymm2, %ymm0359; CHECK-NEXT:    retq360  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>361  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer362  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec3363  ret <8 x float> %res364}365 366define <8 x float> @test_8xfloat_zero_masked_unpack_low_mask3(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %mask) {367; CHECK-LABEL: test_8xfloat_zero_masked_unpack_low_mask3:368; CHECK:       # %bb.0:369; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3370; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1371; CHECK-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[1],ymm1[1],ymm0[4],ymm1[4],ymm0[5],ymm1[5]372; CHECK-NEXT:    retq373  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>374  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer375  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer376  ret <8 x float> %res377}378define <8 x float> @test_8xfloat_unpack_low_mem_mask0(<8 x float> %vec1, ptr %vec2p) {379; CHECK-LABEL: test_8xfloat_unpack_low_mem_mask0:380; CHECK:       # %bb.0:381; CHECK-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]382; CHECK-NEXT:    retq383  %vec2 = load <8 x float>, ptr %vec2p384  %res = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>385  ret <8 x float> %res386}387define <8 x float> @test_8xfloat_masked_unpack_low_mem_mask0(<8 x float> %vec1, ptr %vec2p, <8 x float> %vec3, <8 x float> %mask) {388; CHECK-LABEL: test_8xfloat_masked_unpack_low_mem_mask0:389; CHECK:       # %bb.0:390; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3391; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1392; CHECK-NEXT:    vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]393; CHECK-NEXT:    vmovaps %ymm1, %ymm0394; CHECK-NEXT:    retq395  %vec2 = load <8 x float>, ptr %vec2p396  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>397  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer398  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec3399  ret <8 x float> %res400}401 402define <8 x float> @test_8xfloat_zero_masked_unpack_low_mem_mask0(<8 x float> %vec1, ptr %vec2p, <8 x float> %mask) {403; CHECK-LABEL: test_8xfloat_zero_masked_unpack_low_mem_mask0:404; CHECK:       # %bb.0:405; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2406; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1407; CHECK-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]408; CHECK-NEXT:    retq409  %vec2 = load <8 x float>, ptr %vec2p410  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>411  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer412  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer413  ret <8 x float> %res414}415 416define <8 x float> @test_8xfloat_masked_unpack_low_mem_mask1(<8 x float> %vec1, ptr %vec2p, <8 x float> %vec3, <8 x float> %mask) {417; CHECK-LABEL: test_8xfloat_masked_unpack_low_mem_mask1:418; CHECK:       # %bb.0:419; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3420; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1421; CHECK-NEXT:    vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]422; CHECK-NEXT:    vmovaps %ymm1, %ymm0423; CHECK-NEXT:    retq424  %vec2 = load <8 x float>, ptr %vec2p425  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>426  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer427  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec3428  ret <8 x float> %res429}430 431define <8 x float> @test_8xfloat_zero_masked_unpack_low_mem_mask1(<8 x float> %vec1, ptr %vec2p, <8 x float> %mask) {432; CHECK-LABEL: test_8xfloat_zero_masked_unpack_low_mem_mask1:433; CHECK:       # %bb.0:434; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2435; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1436; CHECK-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]437; CHECK-NEXT:    retq438  %vec2 = load <8 x float>, ptr %vec2p439  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>440  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer441  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer442  ret <8 x float> %res443}444 445define <8 x float> @test_8xfloat_masked_unpack_low_mem_mask2(<8 x float> %vec1, ptr %vec2p, <8 x float> %vec3, <8 x float> %mask) {446; CHECK-LABEL: test_8xfloat_masked_unpack_low_mem_mask2:447; CHECK:       # %bb.0:448; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3449; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1450; CHECK-NEXT:    vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]451; CHECK-NEXT:    vmovaps %ymm1, %ymm0452; CHECK-NEXT:    retq453  %vec2 = load <8 x float>, ptr %vec2p454  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>455  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer456  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec3457  ret <8 x float> %res458}459 460define <8 x float> @test_8xfloat_zero_masked_unpack_low_mem_mask2(<8 x float> %vec1, ptr %vec2p, <8 x float> %mask) {461; CHECK-LABEL: test_8xfloat_zero_masked_unpack_low_mem_mask2:462; CHECK:       # %bb.0:463; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2464; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1465; CHECK-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]466; CHECK-NEXT:    retq467  %vec2 = load <8 x float>, ptr %vec2p468  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>469  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer470  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer471  ret <8 x float> %res472}473 474define <8 x float> @test_8xfloat_unpack_low_mem_mask3(<8 x float> %vec1, ptr %vec2p) {475; CHECK-LABEL: test_8xfloat_unpack_low_mem_mask3:476; CHECK:       # %bb.0:477; CHECK-NEXT:    vunpcklps {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]478; CHECK-NEXT:    retq479  %vec2 = load <8 x float>, ptr %vec2p480  %res = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>481  ret <8 x float> %res482}483define <8 x float> @test_8xfloat_masked_unpack_low_mem_mask3(<8 x float> %vec1, ptr %vec2p, <8 x float> %vec3, <8 x float> %mask) {484; CHECK-LABEL: test_8xfloat_masked_unpack_low_mem_mask3:485; CHECK:       # %bb.0:486; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3487; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1488; CHECK-NEXT:    vunpcklps {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]489; CHECK-NEXT:    vmovaps %ymm1, %ymm0490; CHECK-NEXT:    retq491  %vec2 = load <8 x float>, ptr %vec2p492  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>493  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer494  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec3495  ret <8 x float> %res496}497 498define <8 x float> @test_8xfloat_zero_masked_unpack_low_mem_mask3(<8 x float> %vec1, ptr %vec2p, <8 x float> %mask) {499; CHECK-LABEL: test_8xfloat_zero_masked_unpack_low_mem_mask3:500; CHECK:       # %bb.0:501; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2502; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1503; CHECK-NEXT:    vunpcklps {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[1],mem[1],ymm0[4],mem[4],ymm0[5],mem[5]504; CHECK-NEXT:    retq505  %vec2 = load <8 x float>, ptr %vec2p506  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 8, i32 1, i32 9, i32 4, i32 12, i32 5, i32 13>507  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer508  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer509  ret <8 x float> %res510}511 512define <16 x float> @test_16xfloat_unpack_low_mask0(<16 x float> %vec1, <16 x float> %vec2) {513; CHECK-LABEL: test_16xfloat_unpack_low_mask0:514; CHECK:       # %bb.0:515; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]516; CHECK-NEXT:    retq517  %res = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>518  ret <16 x float> %res519}520define <16 x float> @test_16xfloat_masked_unpack_low_mask0(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %vec3, <16 x float> %mask) {521; CHECK-LABEL: test_16xfloat_masked_unpack_low_mask0:522; CHECK:       # %bb.0:523; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4524; CHECK-NEXT:    vcmpeqps %zmm4, %zmm3, %k1525; CHECK-NEXT:    vunpcklps {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]526; CHECK-NEXT:    vmovaps %zmm2, %zmm0527; CHECK-NEXT:    retq528  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>529  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer530  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec3531  ret <16 x float> %res532}533 534define <16 x float> @test_16xfloat_zero_masked_unpack_low_mask0(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %mask) {535; CHECK-LABEL: test_16xfloat_zero_masked_unpack_low_mask0:536; CHECK:       # %bb.0:537; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3538; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1539; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]540; CHECK-NEXT:    retq541  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>542  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer543  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer544  ret <16 x float> %res545}546define <16 x float> @test_16xfloat_masked_unpack_low_mask1(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %vec3, <16 x float> %mask) {547; CHECK-LABEL: test_16xfloat_masked_unpack_low_mask1:548; CHECK:       # %bb.0:549; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4550; CHECK-NEXT:    vcmpeqps %zmm4, %zmm3, %k1551; CHECK-NEXT:    vunpcklps {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]552; CHECK-NEXT:    vmovaps %zmm2, %zmm0553; CHECK-NEXT:    retq554  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>555  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer556  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec3557  ret <16 x float> %res558}559 560define <16 x float> @test_16xfloat_zero_masked_unpack_low_mask1(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %mask) {561; CHECK-LABEL: test_16xfloat_zero_masked_unpack_low_mask1:562; CHECK:       # %bb.0:563; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3564; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1565; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]566; CHECK-NEXT:    retq567  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>568  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer569  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer570  ret <16 x float> %res571}572define <16 x float> @test_16xfloat_masked_unpack_low_mask2(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %vec3, <16 x float> %mask) {573; CHECK-LABEL: test_16xfloat_masked_unpack_low_mask2:574; CHECK:       # %bb.0:575; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4576; CHECK-NEXT:    vcmpeqps %zmm4, %zmm3, %k1577; CHECK-NEXT:    vunpcklps {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]578; CHECK-NEXT:    vmovaps %zmm2, %zmm0579; CHECK-NEXT:    retq580  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>581  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer582  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec3583  ret <16 x float> %res584}585 586define <16 x float> @test_16xfloat_zero_masked_unpack_low_mask2(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %mask) {587; CHECK-LABEL: test_16xfloat_zero_masked_unpack_low_mask2:588; CHECK:       # %bb.0:589; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3590; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1591; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]592; CHECK-NEXT:    retq593  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>594  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer595  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer596  ret <16 x float> %res597}598define <16 x float> @test_16xfloat_unpack_low_mask3(<16 x float> %vec1, <16 x float> %vec2) {599; CHECK-LABEL: test_16xfloat_unpack_low_mask3:600; CHECK:       # %bb.0:601; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]602; CHECK-NEXT:    retq603  %res = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>604  ret <16 x float> %res605}606define <16 x float> @test_16xfloat_masked_unpack_low_mask3(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %vec3, <16 x float> %mask) {607; CHECK-LABEL: test_16xfloat_masked_unpack_low_mask3:608; CHECK:       # %bb.0:609; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4610; CHECK-NEXT:    vcmpeqps %zmm4, %zmm3, %k1611; CHECK-NEXT:    vunpcklps {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]612; CHECK-NEXT:    vmovaps %zmm2, %zmm0613; CHECK-NEXT:    retq614  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>615  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer616  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec3617  ret <16 x float> %res618}619 620define <16 x float> @test_16xfloat_zero_masked_unpack_low_mask3(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %mask) {621; CHECK-LABEL: test_16xfloat_zero_masked_unpack_low_mask3:622; CHECK:       # %bb.0:623; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3624; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1625; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[1],zmm1[1],zmm0[4],zmm1[4],zmm0[5],zmm1[5],zmm0[8],zmm1[8],zmm0[9],zmm1[9],zmm0[12],zmm1[12],zmm0[13],zmm1[13]626; CHECK-NEXT:    retq627  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>628  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer629  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer630  ret <16 x float> %res631}632define <16 x float> @test_16xfloat_unpack_low_mem_mask0(<16 x float> %vec1, ptr %vec2p) {633; CHECK-LABEL: test_16xfloat_unpack_low_mem_mask0:634; CHECK:       # %bb.0:635; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]636; CHECK-NEXT:    retq637  %vec2 = load <16 x float>, ptr %vec2p638  %res = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>639  ret <16 x float> %res640}641define <16 x float> @test_16xfloat_masked_unpack_low_mem_mask0(<16 x float> %vec1, ptr %vec2p, <16 x float> %vec3, <16 x float> %mask) {642; CHECK-LABEL: test_16xfloat_masked_unpack_low_mem_mask0:643; CHECK:       # %bb.0:644; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3645; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1646; CHECK-NEXT:    vunpcklps {{.*#+}} zmm1 {%k1} = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]647; CHECK-NEXT:    vmovaps %zmm1, %zmm0648; CHECK-NEXT:    retq649  %vec2 = load <16 x float>, ptr %vec2p650  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>651  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer652  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec3653  ret <16 x float> %res654}655 656define <16 x float> @test_16xfloat_zero_masked_unpack_low_mem_mask0(<16 x float> %vec1, ptr %vec2p, <16 x float> %mask) {657; CHECK-LABEL: test_16xfloat_zero_masked_unpack_low_mem_mask0:658; CHECK:       # %bb.0:659; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2660; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1661; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]662; CHECK-NEXT:    retq663  %vec2 = load <16 x float>, ptr %vec2p664  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>665  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer666  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer667  ret <16 x float> %res668}669 670define <16 x float> @test_16xfloat_masked_unpack_low_mem_mask1(<16 x float> %vec1, ptr %vec2p, <16 x float> %vec3, <16 x float> %mask) {671; CHECK-LABEL: test_16xfloat_masked_unpack_low_mem_mask1:672; CHECK:       # %bb.0:673; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3674; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1675; CHECK-NEXT:    vunpcklps {{.*#+}} zmm1 {%k1} = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]676; CHECK-NEXT:    vmovaps %zmm1, %zmm0677; CHECK-NEXT:    retq678  %vec2 = load <16 x float>, ptr %vec2p679  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>680  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer681  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec3682  ret <16 x float> %res683}684 685define <16 x float> @test_16xfloat_zero_masked_unpack_low_mem_mask1(<16 x float> %vec1, ptr %vec2p, <16 x float> %mask) {686; CHECK-LABEL: test_16xfloat_zero_masked_unpack_low_mem_mask1:687; CHECK:       # %bb.0:688; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2689; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1690; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]691; CHECK-NEXT:    retq692  %vec2 = load <16 x float>, ptr %vec2p693  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>694  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer695  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer696  ret <16 x float> %res697}698 699define <16 x float> @test_16xfloat_masked_unpack_low_mem_mask2(<16 x float> %vec1, ptr %vec2p, <16 x float> %vec3, <16 x float> %mask) {700; CHECK-LABEL: test_16xfloat_masked_unpack_low_mem_mask2:701; CHECK:       # %bb.0:702; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3703; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1704; CHECK-NEXT:    vunpcklps {{.*#+}} zmm1 {%k1} = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]705; CHECK-NEXT:    vmovaps %zmm1, %zmm0706; CHECK-NEXT:    retq707  %vec2 = load <16 x float>, ptr %vec2p708  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>709  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer710  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec3711  ret <16 x float> %res712}713 714define <16 x float> @test_16xfloat_zero_masked_unpack_low_mem_mask2(<16 x float> %vec1, ptr %vec2p, <16 x float> %mask) {715; CHECK-LABEL: test_16xfloat_zero_masked_unpack_low_mem_mask2:716; CHECK:       # %bb.0:717; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2718; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1719; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]720; CHECK-NEXT:    retq721  %vec2 = load <16 x float>, ptr %vec2p722  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>723  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer724  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer725  ret <16 x float> %res726}727 728define <16 x float> @test_16xfloat_unpack_low_mem_mask3(<16 x float> %vec1, ptr %vec2p) {729; CHECK-LABEL: test_16xfloat_unpack_low_mem_mask3:730; CHECK:       # %bb.0:731; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]732; CHECK-NEXT:    retq733  %vec2 = load <16 x float>, ptr %vec2p734  %res = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>735  ret <16 x float> %res736}737define <16 x float> @test_16xfloat_masked_unpack_low_mem_mask3(<16 x float> %vec1, ptr %vec2p, <16 x float> %vec3, <16 x float> %mask) {738; CHECK-LABEL: test_16xfloat_masked_unpack_low_mem_mask3:739; CHECK:       # %bb.0:740; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3741; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1742; CHECK-NEXT:    vunpcklps {{.*#+}} zmm1 {%k1} = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]743; CHECK-NEXT:    vmovaps %zmm1, %zmm0744; CHECK-NEXT:    retq745  %vec2 = load <16 x float>, ptr %vec2p746  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>747  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer748  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec3749  ret <16 x float> %res750}751 752define <16 x float> @test_16xfloat_zero_masked_unpack_low_mem_mask3(<16 x float> %vec1, ptr %vec2p, <16 x float> %mask) {753; CHECK-LABEL: test_16xfloat_zero_masked_unpack_low_mem_mask3:754; CHECK:       # %bb.0:755; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2756; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1757; CHECK-NEXT:    vunpcklps {{.*#+}} zmm0 {%k1} {z} = zmm0[0],mem[0],zmm0[1],mem[1],zmm0[4],mem[4],zmm0[5],mem[5],zmm0[8],mem[8],zmm0[9],mem[9],zmm0[12],mem[12],zmm0[13],mem[13]758; CHECK-NEXT:    retq759  %vec2 = load <16 x float>, ptr %vec2p760  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 4, i32 20, i32 5, i32 21, i32 8, i32 24, i32 9, i32 25, i32 12, i32 28, i32 13, i32 29>761  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer762  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer763  ret <16 x float> %res764}765 766define <2 x double> @test_2xdouble_unpack_low_mask0(<2 x double> %vec1, <2 x double> %vec2) {767; CHECK-LABEL: test_2xdouble_unpack_low_mask0:768; CHECK:       # %bb.0:769; CHECK-NEXT:    vmovlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]770; CHECK-NEXT:    retq771  %res = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 0, i32 2>772  ret <2 x double> %res773}774define <2 x double> @test_2xdouble_masked_unpack_low_mask0(<2 x double> %vec1, <2 x double> %vec2, <2 x double> %vec3, <2 x double> %mask) {775; CHECK-LABEL: test_2xdouble_masked_unpack_low_mask0:776; CHECK:       # %bb.0:777; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm4778; CHECK-NEXT:    vcmpeqpd %xmm4, %xmm3, %k1779; CHECK-NEXT:    vunpcklpd {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0]780; CHECK-NEXT:    vmovapd %xmm2, %xmm0781; CHECK-NEXT:    retq782  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 0, i32 2>783  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer784  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> %vec3785  ret <2 x double> %res786}787 788define <2 x double> @test_2xdouble_zero_masked_unpack_low_mask0(<2 x double> %vec1, <2 x double> %vec2, <2 x double> %mask) {789; CHECK-LABEL: test_2xdouble_zero_masked_unpack_low_mask0:790; CHECK:       # %bb.0:791; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3792; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k1793; CHECK-NEXT:    vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0]794; CHECK-NEXT:    retq795  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 0, i32 2>796  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer797  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> zeroinitializer798  ret <2 x double> %res799}800define <2 x double> @test_2xdouble_masked_unpack_low_mask1(<2 x double> %vec1, <2 x double> %vec2, <2 x double> %vec3, <2 x double> %mask) {801; CHECK-LABEL: test_2xdouble_masked_unpack_low_mask1:802; CHECK:       # %bb.0:803; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm4804; CHECK-NEXT:    vcmpeqpd %xmm4, %xmm3, %k1805; CHECK-NEXT:    vunpcklpd {{.*#+}} xmm2 {%k1} = xmm0[0],xmm1[0]806; CHECK-NEXT:    vmovapd %xmm2, %xmm0807; CHECK-NEXT:    retq808  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 0, i32 2>809  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer810  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> %vec3811  ret <2 x double> %res812}813 814define <2 x double> @test_2xdouble_zero_masked_unpack_low_mask1(<2 x double> %vec1, <2 x double> %vec2, <2 x double> %mask) {815; CHECK-LABEL: test_2xdouble_zero_masked_unpack_low_mask1:816; CHECK:       # %bb.0:817; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3818; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k1819; CHECK-NEXT:    vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],xmm1[0]820; CHECK-NEXT:    retq821  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 0, i32 2>822  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer823  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> zeroinitializer824  ret <2 x double> %res825}826define <2 x double> @test_2xdouble_unpack_low_mem_mask0(<2 x double> %vec1, ptr %vec2p) {827; CHECK-LABEL: test_2xdouble_unpack_low_mem_mask0:828; CHECK:       # %bb.0:829; CHECK-NEXT:    vunpcklpd {{.*#+}} xmm0 = xmm0[0],mem[0]830; CHECK-NEXT:    retq831  %vec2 = load <2 x double>, ptr %vec2p832  %res = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 0, i32 2>833  ret <2 x double> %res834}835define <2 x double> @test_2xdouble_masked_unpack_low_mem_mask0(<2 x double> %vec1, ptr %vec2p, <2 x double> %vec3, <2 x double> %mask) {836; CHECK-LABEL: test_2xdouble_masked_unpack_low_mem_mask0:837; CHECK:       # %bb.0:838; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3839; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k1840; CHECK-NEXT:    vunpcklpd {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0]841; CHECK-NEXT:    vmovapd %xmm1, %xmm0842; CHECK-NEXT:    retq843  %vec2 = load <2 x double>, ptr %vec2p844  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 0, i32 2>845  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer846  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> %vec3847  ret <2 x double> %res848}849 850define <2 x double> @test_2xdouble_zero_masked_unpack_low_mem_mask0(<2 x double> %vec1, ptr %vec2p, <2 x double> %mask) {851; CHECK-LABEL: test_2xdouble_zero_masked_unpack_low_mem_mask0:852; CHECK:       # %bb.0:853; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2854; CHECK-NEXT:    vcmpeqpd %xmm2, %xmm1, %k1855; CHECK-NEXT:    vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0]856; CHECK-NEXT:    retq857  %vec2 = load <2 x double>, ptr %vec2p858  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 0, i32 2>859  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer860  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> zeroinitializer861  ret <2 x double> %res862}863 864define <2 x double> @test_2xdouble_masked_unpack_low_mem_mask1(<2 x double> %vec1, ptr %vec2p, <2 x double> %vec3, <2 x double> %mask) {865; CHECK-LABEL: test_2xdouble_masked_unpack_low_mem_mask1:866; CHECK:       # %bb.0:867; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3868; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k1869; CHECK-NEXT:    vunpcklpd {{.*#+}} xmm1 {%k1} = xmm0[0],mem[0]870; CHECK-NEXT:    vmovapd %xmm1, %xmm0871; CHECK-NEXT:    retq872  %vec2 = load <2 x double>, ptr %vec2p873  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 0, i32 2>874  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer875  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> %vec3876  ret <2 x double> %res877}878 879define <2 x double> @test_2xdouble_zero_masked_unpack_low_mem_mask1(<2 x double> %vec1, ptr %vec2p, <2 x double> %mask) {880; CHECK-LABEL: test_2xdouble_zero_masked_unpack_low_mem_mask1:881; CHECK:       # %bb.0:882; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2883; CHECK-NEXT:    vcmpeqpd %xmm2, %xmm1, %k1884; CHECK-NEXT:    vunpcklpd {{.*#+}} xmm0 {%k1} {z} = xmm0[0],mem[0]885; CHECK-NEXT:    retq886  %vec2 = load <2 x double>, ptr %vec2p887  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 0, i32 2>888  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer889  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> zeroinitializer890  ret <2 x double> %res891}892 893define <4 x double> @test_4xdouble_unpack_low_mask0(<4 x double> %vec1, <4 x double> %vec2) {894; CHECK-LABEL: test_4xdouble_unpack_low_mask0:895; CHECK:       # %bb.0:896; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]897; CHECK-NEXT:    retq898  %res = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>899  ret <4 x double> %res900}901define <4 x double> @test_4xdouble_masked_unpack_low_mask0(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3, <4 x double> %mask) {902; CHECK-LABEL: test_4xdouble_masked_unpack_low_mask0:903; CHECK:       # %bb.0:904; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm4905; CHECK-NEXT:    vcmpeqpd %ymm4, %ymm3, %k1906; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]907; CHECK-NEXT:    vmovapd %ymm2, %ymm0908; CHECK-NEXT:    retq909  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>910  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer911  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec3912  ret <4 x double> %res913}914 915define <4 x double> @test_4xdouble_zero_masked_unpack_low_mask0(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %mask) {916; CHECK-LABEL: test_4xdouble_zero_masked_unpack_low_mask0:917; CHECK:       # %bb.0:918; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3919; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k1920; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]921; CHECK-NEXT:    retq922  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>923  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer924  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer925  ret <4 x double> %res926}927define <4 x double> @test_4xdouble_masked_unpack_low_mask1(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3, <4 x double> %mask) {928; CHECK-LABEL: test_4xdouble_masked_unpack_low_mask1:929; CHECK:       # %bb.0:930; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm4931; CHECK-NEXT:    vcmpeqpd %ymm4, %ymm3, %k1932; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]933; CHECK-NEXT:    vmovapd %ymm2, %ymm0934; CHECK-NEXT:    retq935  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>936  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer937  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec3938  ret <4 x double> %res939}940 941define <4 x double> @test_4xdouble_zero_masked_unpack_low_mask1(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %mask) {942; CHECK-LABEL: test_4xdouble_zero_masked_unpack_low_mask1:943; CHECK:       # %bb.0:944; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3945; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k1946; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]947; CHECK-NEXT:    retq948  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>949  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer950  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer951  ret <4 x double> %res952}953define <4 x double> @test_4xdouble_masked_unpack_low_mask2(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3, <4 x double> %mask) {954; CHECK-LABEL: test_4xdouble_masked_unpack_low_mask2:955; CHECK:       # %bb.0:956; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm4957; CHECK-NEXT:    vcmpeqpd %ymm4, %ymm3, %k1958; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]959; CHECK-NEXT:    vmovapd %ymm2, %ymm0960; CHECK-NEXT:    retq961  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>962  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer963  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec3964  ret <4 x double> %res965}966 967define <4 x double> @test_4xdouble_zero_masked_unpack_low_mask2(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %mask) {968; CHECK-LABEL: test_4xdouble_zero_masked_unpack_low_mask2:969; CHECK:       # %bb.0:970; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3971; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k1972; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]973; CHECK-NEXT:    retq974  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>975  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer976  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer977  ret <4 x double> %res978}979define <4 x double> @test_4xdouble_unpack_low_mask3(<4 x double> %vec1, <4 x double> %vec2) {980; CHECK-LABEL: test_4xdouble_unpack_low_mask3:981; CHECK:       # %bb.0:982; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[2]983; CHECK-NEXT:    retq984  %res = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>985  ret <4 x double> %res986}987define <4 x double> @test_4xdouble_masked_unpack_low_mask3(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3, <4 x double> %mask) {988; CHECK-LABEL: test_4xdouble_masked_unpack_low_mask3:989; CHECK:       # %bb.0:990; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm4991; CHECK-NEXT:    vcmpeqpd %ymm4, %ymm3, %k1992; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]993; CHECK-NEXT:    vmovapd %ymm2, %ymm0994; CHECK-NEXT:    retq995  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>996  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer997  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec3998  ret <4 x double> %res999}1000 1001define <4 x double> @test_4xdouble_zero_masked_unpack_low_mask3(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %mask) {1002; CHECK-LABEL: test_4xdouble_zero_masked_unpack_low_mask3:1003; CHECK:       # %bb.0:1004; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31005; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k11006; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[2],ymm1[2]1007; CHECK-NEXT:    retq1008  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1009  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer1010  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer1011  ret <4 x double> %res1012}1013define <4 x double> @test_4xdouble_unpack_low_mem_mask0(<4 x double> %vec1, ptr %vec2p) {1014; CHECK-LABEL: test_4xdouble_unpack_low_mem_mask0:1015; CHECK:       # %bb.0:1016; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]1017; CHECK-NEXT:    retq1018  %vec2 = load <4 x double>, ptr %vec2p1019  %res = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1020  ret <4 x double> %res1021}1022define <4 x double> @test_4xdouble_masked_unpack_low_mem_mask0(<4 x double> %vec1, ptr %vec2p, <4 x double> %vec3, <4 x double> %mask) {1023; CHECK-LABEL: test_4xdouble_masked_unpack_low_mem_mask0:1024; CHECK:       # %bb.0:1025; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31026; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k11027; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[2],mem[2]1028; CHECK-NEXT:    vmovapd %ymm1, %ymm01029; CHECK-NEXT:    retq1030  %vec2 = load <4 x double>, ptr %vec2p1031  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1032  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer1033  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec31034  ret <4 x double> %res1035}1036 1037define <4 x double> @test_4xdouble_zero_masked_unpack_low_mem_mask0(<4 x double> %vec1, ptr %vec2p, <4 x double> %mask) {1038; CHECK-LABEL: test_4xdouble_zero_masked_unpack_low_mem_mask0:1039; CHECK:       # %bb.0:1040; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21041; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k11042; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[2],mem[2]1043; CHECK-NEXT:    retq1044  %vec2 = load <4 x double>, ptr %vec2p1045  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1046  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer1047  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer1048  ret <4 x double> %res1049}1050 1051define <4 x double> @test_4xdouble_masked_unpack_low_mem_mask1(<4 x double> %vec1, ptr %vec2p, <4 x double> %vec3, <4 x double> %mask) {1052; CHECK-LABEL: test_4xdouble_masked_unpack_low_mem_mask1:1053; CHECK:       # %bb.0:1054; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31055; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k11056; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[2],mem[2]1057; CHECK-NEXT:    vmovapd %ymm1, %ymm01058; CHECK-NEXT:    retq1059  %vec2 = load <4 x double>, ptr %vec2p1060  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1061  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer1062  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec31063  ret <4 x double> %res1064}1065 1066define <4 x double> @test_4xdouble_zero_masked_unpack_low_mem_mask1(<4 x double> %vec1, ptr %vec2p, <4 x double> %mask) {1067; CHECK-LABEL: test_4xdouble_zero_masked_unpack_low_mem_mask1:1068; CHECK:       # %bb.0:1069; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21070; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k11071; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[2],mem[2]1072; CHECK-NEXT:    retq1073  %vec2 = load <4 x double>, ptr %vec2p1074  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1075  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer1076  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer1077  ret <4 x double> %res1078}1079 1080define <4 x double> @test_4xdouble_masked_unpack_low_mem_mask2(<4 x double> %vec1, ptr %vec2p, <4 x double> %vec3, <4 x double> %mask) {1081; CHECK-LABEL: test_4xdouble_masked_unpack_low_mem_mask2:1082; CHECK:       # %bb.0:1083; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31084; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k11085; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[2],mem[2]1086; CHECK-NEXT:    vmovapd %ymm1, %ymm01087; CHECK-NEXT:    retq1088  %vec2 = load <4 x double>, ptr %vec2p1089  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1090  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer1091  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec31092  ret <4 x double> %res1093}1094 1095define <4 x double> @test_4xdouble_zero_masked_unpack_low_mem_mask2(<4 x double> %vec1, ptr %vec2p, <4 x double> %mask) {1096; CHECK-LABEL: test_4xdouble_zero_masked_unpack_low_mem_mask2:1097; CHECK:       # %bb.0:1098; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21099; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k11100; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[2],mem[2]1101; CHECK-NEXT:    retq1102  %vec2 = load <4 x double>, ptr %vec2p1103  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1104  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer1105  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer1106  ret <4 x double> %res1107}1108 1109define <4 x double> @test_4xdouble_unpack_low_mem_mask3(<4 x double> %vec1, ptr %vec2p) {1110; CHECK-LABEL: test_4xdouble_unpack_low_mem_mask3:1111; CHECK:       # %bb.0:1112; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 = ymm0[0],mem[0],ymm0[2],mem[2]1113; CHECK-NEXT:    retq1114  %vec2 = load <4 x double>, ptr %vec2p1115  %res = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1116  ret <4 x double> %res1117}1118define <4 x double> @test_4xdouble_masked_unpack_low_mem_mask3(<4 x double> %vec1, ptr %vec2p, <4 x double> %vec3, <4 x double> %mask) {1119; CHECK-LABEL: test_4xdouble_masked_unpack_low_mem_mask3:1120; CHECK:       # %bb.0:1121; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31122; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k11123; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[2],mem[2]1124; CHECK-NEXT:    vmovapd %ymm1, %ymm01125; CHECK-NEXT:    retq1126  %vec2 = load <4 x double>, ptr %vec2p1127  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1128  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer1129  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec31130  ret <4 x double> %res1131}1132 1133define <4 x double> @test_4xdouble_zero_masked_unpack_low_mem_mask3(<4 x double> %vec1, ptr %vec2p, <4 x double> %mask) {1134; CHECK-LABEL: test_4xdouble_zero_masked_unpack_low_mem_mask3:1135; CHECK:       # %bb.0:1136; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21137; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k11138; CHECK-NEXT:    vunpcklpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[2],mem[2]1139; CHECK-NEXT:    retq1140  %vec2 = load <4 x double>, ptr %vec2p1141  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 6>1142  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer1143  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer1144  ret <4 x double> %res1145}1146 1147define <8 x double> @test_8xdouble_unpack_low_mask0(<8 x double> %vec1, <8 x double> %vec2) {1148; CHECK-LABEL: test_8xdouble_unpack_low_mask0:1149; CHECK:       # %bb.0:1150; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1151; CHECK-NEXT:    retq1152  %res = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1153  ret <8 x double> %res1154}1155define <8 x double> @test_8xdouble_masked_unpack_low_mask0(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %vec3, <8 x double> %mask) {1156; CHECK-LABEL: test_8xdouble_masked_unpack_low_mask0:1157; CHECK:       # %bb.0:1158; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm41159; CHECK-NEXT:    vcmpeqpd %zmm4, %zmm3, %k11160; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1161; CHECK-NEXT:    vmovapd %zmm2, %zmm01162; CHECK-NEXT:    retq1163  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1164  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1165  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec31166  ret <8 x double> %res1167}1168 1169define <8 x double> @test_8xdouble_zero_masked_unpack_low_mask0(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %mask) {1170; CHECK-LABEL: test_8xdouble_zero_masked_unpack_low_mask0:1171; CHECK:       # %bb.0:1172; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31173; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11174; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1175; CHECK-NEXT:    retq1176  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1177  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1178  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer1179  ret <8 x double> %res1180}1181define <8 x double> @test_8xdouble_masked_unpack_low_mask1(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %vec3, <8 x double> %mask) {1182; CHECK-LABEL: test_8xdouble_masked_unpack_low_mask1:1183; CHECK:       # %bb.0:1184; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm41185; CHECK-NEXT:    vcmpeqpd %zmm4, %zmm3, %k11186; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1187; CHECK-NEXT:    vmovapd %zmm2, %zmm01188; CHECK-NEXT:    retq1189  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1190  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1191  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec31192  ret <8 x double> %res1193}1194 1195define <8 x double> @test_8xdouble_zero_masked_unpack_low_mask1(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %mask) {1196; CHECK-LABEL: test_8xdouble_zero_masked_unpack_low_mask1:1197; CHECK:       # %bb.0:1198; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31199; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11200; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1201; CHECK-NEXT:    retq1202  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1203  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1204  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer1205  ret <8 x double> %res1206}1207define <8 x double> @test_8xdouble_masked_unpack_low_mask2(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %vec3, <8 x double> %mask) {1208; CHECK-LABEL: test_8xdouble_masked_unpack_low_mask2:1209; CHECK:       # %bb.0:1210; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm41211; CHECK-NEXT:    vcmpeqpd %zmm4, %zmm3, %k11212; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1213; CHECK-NEXT:    vmovapd %zmm2, %zmm01214; CHECK-NEXT:    retq1215  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1216  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1217  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec31218  ret <8 x double> %res1219}1220 1221define <8 x double> @test_8xdouble_zero_masked_unpack_low_mask2(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %mask) {1222; CHECK-LABEL: test_8xdouble_zero_masked_unpack_low_mask2:1223; CHECK:       # %bb.0:1224; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31225; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11226; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1227; CHECK-NEXT:    retq1228  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1229  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1230  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer1231  ret <8 x double> %res1232}1233define <8 x double> @test_8xdouble_unpack_low_mask3(<8 x double> %vec1, <8 x double> %vec2) {1234; CHECK-LABEL: test_8xdouble_unpack_low_mask3:1235; CHECK:       # %bb.0:1236; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1237; CHECK-NEXT:    retq1238  %res = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1239  ret <8 x double> %res1240}1241define <8 x double> @test_8xdouble_masked_unpack_low_mask3(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %vec3, <8 x double> %mask) {1242; CHECK-LABEL: test_8xdouble_masked_unpack_low_mask3:1243; CHECK:       # %bb.0:1244; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm41245; CHECK-NEXT:    vcmpeqpd %zmm4, %zmm3, %k11246; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1247; CHECK-NEXT:    vmovapd %zmm2, %zmm01248; CHECK-NEXT:    retq1249  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1250  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1251  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec31252  ret <8 x double> %res1253}1254 1255define <8 x double> @test_8xdouble_zero_masked_unpack_low_mask3(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %mask) {1256; CHECK-LABEL: test_8xdouble_zero_masked_unpack_low_mask3:1257; CHECK:       # %bb.0:1258; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31259; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11260; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[2],zmm1[2],zmm0[4],zmm1[4],zmm0[6],zmm1[6]1261; CHECK-NEXT:    retq1262  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1263  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1264  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer1265  ret <8 x double> %res1266}1267define <8 x double> @test_8xdouble_unpack_low_mem_mask0(<8 x double> %vec1, ptr %vec2p) {1268; CHECK-LABEL: test_8xdouble_unpack_low_mem_mask0:1269; CHECK:       # %bb.0:1270; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]1271; CHECK-NEXT:    retq1272  %vec2 = load <8 x double>, ptr %vec2p1273  %res = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1274  ret <8 x double> %res1275}1276define <8 x double> @test_8xdouble_masked_unpack_low_mem_mask0(<8 x double> %vec1, ptr %vec2p, <8 x double> %vec3, <8 x double> %mask) {1277; CHECK-LABEL: test_8xdouble_masked_unpack_low_mem_mask0:1278; CHECK:       # %bb.0:1279; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31280; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11281; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm1 {%k1} = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]1282; CHECK-NEXT:    vmovapd %zmm1, %zmm01283; CHECK-NEXT:    retq1284  %vec2 = load <8 x double>, ptr %vec2p1285  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1286  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1287  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec31288  ret <8 x double> %res1289}1290 1291define <8 x double> @test_8xdouble_zero_masked_unpack_low_mem_mask0(<8 x double> %vec1, ptr %vec2p, <8 x double> %mask) {1292; CHECK-LABEL: test_8xdouble_zero_masked_unpack_low_mem_mask0:1293; CHECK:       # %bb.0:1294; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21295; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k11296; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]1297; CHECK-NEXT:    retq1298  %vec2 = load <8 x double>, ptr %vec2p1299  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1300  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1301  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer1302  ret <8 x double> %res1303}1304 1305define <8 x double> @test_8xdouble_masked_unpack_low_mem_mask1(<8 x double> %vec1, ptr %vec2p, <8 x double> %vec3, <8 x double> %mask) {1306; CHECK-LABEL: test_8xdouble_masked_unpack_low_mem_mask1:1307; CHECK:       # %bb.0:1308; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31309; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11310; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm1 {%k1} = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]1311; CHECK-NEXT:    vmovapd %zmm1, %zmm01312; CHECK-NEXT:    retq1313  %vec2 = load <8 x double>, ptr %vec2p1314  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1315  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1316  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec31317  ret <8 x double> %res1318}1319 1320define <8 x double> @test_8xdouble_zero_masked_unpack_low_mem_mask1(<8 x double> %vec1, ptr %vec2p, <8 x double> %mask) {1321; CHECK-LABEL: test_8xdouble_zero_masked_unpack_low_mem_mask1:1322; CHECK:       # %bb.0:1323; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21324; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k11325; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]1326; CHECK-NEXT:    retq1327  %vec2 = load <8 x double>, ptr %vec2p1328  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1329  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1330  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer1331  ret <8 x double> %res1332}1333 1334define <8 x double> @test_8xdouble_masked_unpack_low_mem_mask2(<8 x double> %vec1, ptr %vec2p, <8 x double> %vec3, <8 x double> %mask) {1335; CHECK-LABEL: test_8xdouble_masked_unpack_low_mem_mask2:1336; CHECK:       # %bb.0:1337; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31338; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11339; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm1 {%k1} = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]1340; CHECK-NEXT:    vmovapd %zmm1, %zmm01341; CHECK-NEXT:    retq1342  %vec2 = load <8 x double>, ptr %vec2p1343  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1344  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1345  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec31346  ret <8 x double> %res1347}1348 1349define <8 x double> @test_8xdouble_zero_masked_unpack_low_mem_mask2(<8 x double> %vec1, ptr %vec2p, <8 x double> %mask) {1350; CHECK-LABEL: test_8xdouble_zero_masked_unpack_low_mem_mask2:1351; CHECK:       # %bb.0:1352; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21353; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k11354; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]1355; CHECK-NEXT:    retq1356  %vec2 = load <8 x double>, ptr %vec2p1357  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1358  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1359  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer1360  ret <8 x double> %res1361}1362 1363define <8 x double> @test_8xdouble_unpack_low_mem_mask3(<8 x double> %vec1, ptr %vec2p) {1364; CHECK-LABEL: test_8xdouble_unpack_low_mem_mask3:1365; CHECK:       # %bb.0:1366; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm0 = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]1367; CHECK-NEXT:    retq1368  %vec2 = load <8 x double>, ptr %vec2p1369  %res = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1370  ret <8 x double> %res1371}1372define <8 x double> @test_8xdouble_masked_unpack_low_mem_mask3(<8 x double> %vec1, ptr %vec2p, <8 x double> %vec3, <8 x double> %mask) {1373; CHECK-LABEL: test_8xdouble_masked_unpack_low_mem_mask3:1374; CHECK:       # %bb.0:1375; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31376; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11377; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm1 {%k1} = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]1378; CHECK-NEXT:    vmovapd %zmm1, %zmm01379; CHECK-NEXT:    retq1380  %vec2 = load <8 x double>, ptr %vec2p1381  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1382  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1383  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec31384  ret <8 x double> %res1385}1386 1387define <8 x double> @test_8xdouble_zero_masked_unpack_low_mem_mask3(<8 x double> %vec1, ptr %vec2p, <8 x double> %mask) {1388; CHECK-LABEL: test_8xdouble_zero_masked_unpack_low_mem_mask3:1389; CHECK:       # %bb.0:1390; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21391; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k11392; CHECK-NEXT:    vunpcklpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[4],mem[4],zmm0[6],mem[6]1393; CHECK-NEXT:    retq1394  %vec2 = load <8 x double>, ptr %vec2p1395  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 10, i32 4, i32 12, i32 6, i32 14>1396  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer1397  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer1398  ret <8 x double> %res1399}1400 1401define <4 x float> @test_4xfloat_unpack_high_mask0(<4 x float> %vec1, <4 x float> %vec2) {1402; CHECK-LABEL: test_4xfloat_unpack_high_mask0:1403; CHECK:       # %bb.0:1404; CHECK-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1405; CHECK-NEXT:    retq1406  %res = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1407  ret <4 x float> %res1408}1409define <4 x float> @test_4xfloat_masked_unpack_high_mask0(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %vec3, <4 x float> %mask) {1410; CHECK-LABEL: test_4xfloat_masked_unpack_high_mask0:1411; CHECK:       # %bb.0:1412; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm41413; CHECK-NEXT:    vcmpeqps %xmm4, %xmm3, %k11414; CHECK-NEXT:    vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1415; CHECK-NEXT:    vmovaps %xmm2, %xmm01416; CHECK-NEXT:    retq1417  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1418  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1419  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec31420  ret <4 x float> %res1421}1422 1423define <4 x float> @test_4xfloat_zero_masked_unpack_high_mask0(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %mask) {1424; CHECK-LABEL: test_4xfloat_zero_masked_unpack_high_mask0:1425; CHECK:       # %bb.0:1426; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31427; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k11428; CHECK-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1429; CHECK-NEXT:    retq1430  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1431  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1432  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer1433  ret <4 x float> %res1434}1435define <4 x float> @test_4xfloat_masked_unpack_high_mask1(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %vec3, <4 x float> %mask) {1436; CHECK-LABEL: test_4xfloat_masked_unpack_high_mask1:1437; CHECK:       # %bb.0:1438; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm41439; CHECK-NEXT:    vcmpeqps %xmm4, %xmm3, %k11440; CHECK-NEXT:    vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1441; CHECK-NEXT:    vmovaps %xmm2, %xmm01442; CHECK-NEXT:    retq1443  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1444  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1445  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec31446  ret <4 x float> %res1447}1448 1449define <4 x float> @test_4xfloat_zero_masked_unpack_high_mask1(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %mask) {1450; CHECK-LABEL: test_4xfloat_zero_masked_unpack_high_mask1:1451; CHECK:       # %bb.0:1452; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31453; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k11454; CHECK-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1455; CHECK-NEXT:    retq1456  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1457  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1458  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer1459  ret <4 x float> %res1460}1461define <4 x float> @test_4xfloat_masked_unpack_high_mask2(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %vec3, <4 x float> %mask) {1462; CHECK-LABEL: test_4xfloat_masked_unpack_high_mask2:1463; CHECK:       # %bb.0:1464; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm41465; CHECK-NEXT:    vcmpeqps %xmm4, %xmm3, %k11466; CHECK-NEXT:    vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1467; CHECK-NEXT:    vmovaps %xmm2, %xmm01468; CHECK-NEXT:    retq1469  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1470  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1471  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec31472  ret <4 x float> %res1473}1474 1475define <4 x float> @test_4xfloat_zero_masked_unpack_high_mask2(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %mask) {1476; CHECK-LABEL: test_4xfloat_zero_masked_unpack_high_mask2:1477; CHECK:       # %bb.0:1478; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31479; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k11480; CHECK-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1481; CHECK-NEXT:    retq1482  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1483  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1484  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer1485  ret <4 x float> %res1486}1487define <4 x float> @test_4xfloat_unpack_high_mask3(<4 x float> %vec1, <4 x float> %vec2) {1488; CHECK-LABEL: test_4xfloat_unpack_high_mask3:1489; CHECK:       # %bb.0:1490; CHECK-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1491; CHECK-NEXT:    retq1492  %res = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1493  ret <4 x float> %res1494}1495define <4 x float> @test_4xfloat_masked_unpack_high_mask3(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %vec3, <4 x float> %mask) {1496; CHECK-LABEL: test_4xfloat_masked_unpack_high_mask3:1497; CHECK:       # %bb.0:1498; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm41499; CHECK-NEXT:    vcmpeqps %xmm4, %xmm3, %k11500; CHECK-NEXT:    vunpckhps {{.*#+}} xmm2 {%k1} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1501; CHECK-NEXT:    vmovaps %xmm2, %xmm01502; CHECK-NEXT:    retq1503  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1504  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1505  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec31506  ret <4 x float> %res1507}1508 1509define <4 x float> @test_4xfloat_zero_masked_unpack_high_mask3(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %mask) {1510; CHECK-LABEL: test_4xfloat_zero_masked_unpack_high_mask3:1511; CHECK:       # %bb.0:1512; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31513; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k11514; CHECK-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],xmm1[2],xmm0[3],xmm1[3]1515; CHECK-NEXT:    retq1516  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1517  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1518  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer1519  ret <4 x float> %res1520}1521define <4 x float> @test_4xfloat_unpack_high_mem_mask0(<4 x float> %vec1, ptr %vec2p) {1522; CHECK-LABEL: test_4xfloat_unpack_high_mem_mask0:1523; CHECK:       # %bb.0:1524; CHECK-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]1525; CHECK-NEXT:    retq1526  %vec2 = load <4 x float>, ptr %vec2p1527  %res = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1528  ret <4 x float> %res1529}1530define <4 x float> @test_4xfloat_masked_unpack_high_mem_mask0(<4 x float> %vec1, ptr %vec2p, <4 x float> %vec3, <4 x float> %mask) {1531; CHECK-LABEL: test_4xfloat_masked_unpack_high_mem_mask0:1532; CHECK:       # %bb.0:1533; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31534; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k11535; CHECK-NEXT:    vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]1536; CHECK-NEXT:    vmovaps %xmm1, %xmm01537; CHECK-NEXT:    retq1538  %vec2 = load <4 x float>, ptr %vec2p1539  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1540  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1541  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec31542  ret <4 x float> %res1543}1544 1545define <4 x float> @test_4xfloat_zero_masked_unpack_high_mem_mask0(<4 x float> %vec1, ptr %vec2p, <4 x float> %mask) {1546; CHECK-LABEL: test_4xfloat_zero_masked_unpack_high_mem_mask0:1547; CHECK:       # %bb.0:1548; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21549; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k11550; CHECK-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]1551; CHECK-NEXT:    retq1552  %vec2 = load <4 x float>, ptr %vec2p1553  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1554  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1555  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer1556  ret <4 x float> %res1557}1558 1559define <4 x float> @test_4xfloat_masked_unpack_high_mem_mask1(<4 x float> %vec1, ptr %vec2p, <4 x float> %vec3, <4 x float> %mask) {1560; CHECK-LABEL: test_4xfloat_masked_unpack_high_mem_mask1:1561; CHECK:       # %bb.0:1562; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31563; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k11564; CHECK-NEXT:    vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]1565; CHECK-NEXT:    vmovaps %xmm1, %xmm01566; CHECK-NEXT:    retq1567  %vec2 = load <4 x float>, ptr %vec2p1568  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1569  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1570  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec31571  ret <4 x float> %res1572}1573 1574define <4 x float> @test_4xfloat_zero_masked_unpack_high_mem_mask1(<4 x float> %vec1, ptr %vec2p, <4 x float> %mask) {1575; CHECK-LABEL: test_4xfloat_zero_masked_unpack_high_mem_mask1:1576; CHECK:       # %bb.0:1577; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21578; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k11579; CHECK-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]1580; CHECK-NEXT:    retq1581  %vec2 = load <4 x float>, ptr %vec2p1582  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1583  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1584  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer1585  ret <4 x float> %res1586}1587 1588define <4 x float> @test_4xfloat_masked_unpack_high_mem_mask2(<4 x float> %vec1, ptr %vec2p, <4 x float> %vec3, <4 x float> %mask) {1589; CHECK-LABEL: test_4xfloat_masked_unpack_high_mem_mask2:1590; CHECK:       # %bb.0:1591; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31592; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k11593; CHECK-NEXT:    vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]1594; CHECK-NEXT:    vmovaps %xmm1, %xmm01595; CHECK-NEXT:    retq1596  %vec2 = load <4 x float>, ptr %vec2p1597  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1598  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1599  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec31600  ret <4 x float> %res1601}1602 1603define <4 x float> @test_4xfloat_zero_masked_unpack_high_mem_mask2(<4 x float> %vec1, ptr %vec2p, <4 x float> %mask) {1604; CHECK-LABEL: test_4xfloat_zero_masked_unpack_high_mem_mask2:1605; CHECK:       # %bb.0:1606; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21607; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k11608; CHECK-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]1609; CHECK-NEXT:    retq1610  %vec2 = load <4 x float>, ptr %vec2p1611  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1612  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1613  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer1614  ret <4 x float> %res1615}1616 1617define <4 x float> @test_4xfloat_unpack_high_mem_mask3(<4 x float> %vec1, ptr %vec2p) {1618; CHECK-LABEL: test_4xfloat_unpack_high_mem_mask3:1619; CHECK:       # %bb.0:1620; CHECK-NEXT:    vunpckhps {{.*#+}} xmm0 = xmm0[2],mem[2],xmm0[3],mem[3]1621; CHECK-NEXT:    retq1622  %vec2 = load <4 x float>, ptr %vec2p1623  %res = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1624  ret <4 x float> %res1625}1626define <4 x float> @test_4xfloat_masked_unpack_high_mem_mask3(<4 x float> %vec1, ptr %vec2p, <4 x float> %vec3, <4 x float> %mask) {1627; CHECK-LABEL: test_4xfloat_masked_unpack_high_mem_mask3:1628; CHECK:       # %bb.0:1629; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31630; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k11631; CHECK-NEXT:    vunpckhps {{.*#+}} xmm1 {%k1} = xmm0[2],mem[2],xmm0[3],mem[3]1632; CHECK-NEXT:    vmovaps %xmm1, %xmm01633; CHECK-NEXT:    retq1634  %vec2 = load <4 x float>, ptr %vec2p1635  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1636  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1637  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> %vec31638  ret <4 x float> %res1639}1640 1641define <4 x float> @test_4xfloat_zero_masked_unpack_high_mem_mask3(<4 x float> %vec1, ptr %vec2p, <4 x float> %mask) {1642; CHECK-LABEL: test_4xfloat_zero_masked_unpack_high_mem_mask3:1643; CHECK:       # %bb.0:1644; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21645; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k11646; CHECK-NEXT:    vunpckhps {{.*#+}} xmm0 {%k1} {z} = xmm0[2],mem[2],xmm0[3],mem[3]1647; CHECK-NEXT:    retq1648  %vec2 = load <4 x float>, ptr %vec2p1649  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 6, i32 3, i32 7>1650  %cmp = fcmp oeq <4 x float> %mask, zeroinitializer1651  %res = select <4 x i1> %cmp, <4 x float> %shuf, <4 x float> zeroinitializer1652  ret <4 x float> %res1653}1654 1655define <8 x float> @test_8xfloat_unpack_high_mask0(<8 x float> %vec1, <8 x float> %vec2) {1656; CHECK-LABEL: test_8xfloat_unpack_high_mask0:1657; CHECK:       # %bb.0:1658; CHECK-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]1659; CHECK-NEXT:    retq1660  %res = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1661  ret <8 x float> %res1662}1663define <8 x float> @test_8xfloat_masked_unpack_high_mask0(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %vec3, <8 x float> %mask) {1664; CHECK-LABEL: test_8xfloat_masked_unpack_high_mask0:1665; CHECK:       # %bb.0:1666; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm41667; CHECK-NEXT:    vcmpeqps %ymm4, %ymm3, %k11668; CHECK-NEXT:    vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]1669; CHECK-NEXT:    vmovaps %ymm2, %ymm01670; CHECK-NEXT:    retq1671  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1672  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1673  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec31674  ret <8 x float> %res1675}1676 1677define <8 x float> @test_8xfloat_zero_masked_unpack_high_mask0(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %mask) {1678; CHECK-LABEL: test_8xfloat_zero_masked_unpack_high_mask0:1679; CHECK:       # %bb.0:1680; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31681; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k11682; CHECK-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]1683; CHECK-NEXT:    retq1684  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1685  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1686  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1687  ret <8 x float> %res1688}1689define <8 x float> @test_8xfloat_masked_unpack_high_mask1(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %vec3, <8 x float> %mask) {1690; CHECK-LABEL: test_8xfloat_masked_unpack_high_mask1:1691; CHECK:       # %bb.0:1692; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm41693; CHECK-NEXT:    vcmpeqps %ymm4, %ymm3, %k11694; CHECK-NEXT:    vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]1695; CHECK-NEXT:    vmovaps %ymm2, %ymm01696; CHECK-NEXT:    retq1697  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1698  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1699  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec31700  ret <8 x float> %res1701}1702 1703define <8 x float> @test_8xfloat_zero_masked_unpack_high_mask1(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %mask) {1704; CHECK-LABEL: test_8xfloat_zero_masked_unpack_high_mask1:1705; CHECK:       # %bb.0:1706; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31707; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k11708; CHECK-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]1709; CHECK-NEXT:    retq1710  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1711  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1712  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1713  ret <8 x float> %res1714}1715define <8 x float> @test_8xfloat_masked_unpack_high_mask2(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %vec3, <8 x float> %mask) {1716; CHECK-LABEL: test_8xfloat_masked_unpack_high_mask2:1717; CHECK:       # %bb.0:1718; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm41719; CHECK-NEXT:    vcmpeqps %ymm4, %ymm3, %k11720; CHECK-NEXT:    vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]1721; CHECK-NEXT:    vmovaps %ymm2, %ymm01722; CHECK-NEXT:    retq1723  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1724  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1725  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec31726  ret <8 x float> %res1727}1728 1729define <8 x float> @test_8xfloat_zero_masked_unpack_high_mask2(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %mask) {1730; CHECK-LABEL: test_8xfloat_zero_masked_unpack_high_mask2:1731; CHECK:       # %bb.0:1732; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31733; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k11734; CHECK-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]1735; CHECK-NEXT:    retq1736  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1737  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1738  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1739  ret <8 x float> %res1740}1741define <8 x float> @test_8xfloat_unpack_high_mask3(<8 x float> %vec1, <8 x float> %vec2) {1742; CHECK-LABEL: test_8xfloat_unpack_high_mask3:1743; CHECK:       # %bb.0:1744; CHECK-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]1745; CHECK-NEXT:    retq1746  %res = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1747  ret <8 x float> %res1748}1749define <8 x float> @test_8xfloat_masked_unpack_high_mask3(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %vec3, <8 x float> %mask) {1750; CHECK-LABEL: test_8xfloat_masked_unpack_high_mask3:1751; CHECK:       # %bb.0:1752; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm41753; CHECK-NEXT:    vcmpeqps %ymm4, %ymm3, %k11754; CHECK-NEXT:    vunpckhps {{.*#+}} ymm2 {%k1} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]1755; CHECK-NEXT:    vmovaps %ymm2, %ymm01756; CHECK-NEXT:    retq1757  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1758  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1759  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec31760  ret <8 x float> %res1761}1762 1763define <8 x float> @test_8xfloat_zero_masked_unpack_high_mask3(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %mask) {1764; CHECK-LABEL: test_8xfloat_zero_masked_unpack_high_mask3:1765; CHECK:       # %bb.0:1766; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31767; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k11768; CHECK-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],ymm1[2],ymm0[3],ymm1[3],ymm0[6],ymm1[6],ymm0[7],ymm1[7]1769; CHECK-NEXT:    retq1770  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1771  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1772  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1773  ret <8 x float> %res1774}1775define <8 x float> @test_8xfloat_unpack_high_mem_mask0(<8 x float> %vec1, ptr %vec2p) {1776; CHECK-LABEL: test_8xfloat_unpack_high_mem_mask0:1777; CHECK:       # %bb.0:1778; CHECK-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1779; CHECK-NEXT:    retq1780  %vec2 = load <8 x float>, ptr %vec2p1781  %res = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1782  ret <8 x float> %res1783}1784define <8 x float> @test_8xfloat_masked_unpack_high_mem_mask0(<8 x float> %vec1, ptr %vec2p, <8 x float> %vec3, <8 x float> %mask) {1785; CHECK-LABEL: test_8xfloat_masked_unpack_high_mem_mask0:1786; CHECK:       # %bb.0:1787; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31788; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k11789; CHECK-NEXT:    vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1790; CHECK-NEXT:    vmovaps %ymm1, %ymm01791; CHECK-NEXT:    retq1792  %vec2 = load <8 x float>, ptr %vec2p1793  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1794  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1795  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec31796  ret <8 x float> %res1797}1798 1799define <8 x float> @test_8xfloat_zero_masked_unpack_high_mem_mask0(<8 x float> %vec1, ptr %vec2p, <8 x float> %mask) {1800; CHECK-LABEL: test_8xfloat_zero_masked_unpack_high_mem_mask0:1801; CHECK:       # %bb.0:1802; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21803; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11804; CHECK-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1805; CHECK-NEXT:    retq1806  %vec2 = load <8 x float>, ptr %vec2p1807  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1808  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1809  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1810  ret <8 x float> %res1811}1812 1813define <8 x float> @test_8xfloat_masked_unpack_high_mem_mask1(<8 x float> %vec1, ptr %vec2p, <8 x float> %vec3, <8 x float> %mask) {1814; CHECK-LABEL: test_8xfloat_masked_unpack_high_mem_mask1:1815; CHECK:       # %bb.0:1816; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31817; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k11818; CHECK-NEXT:    vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1819; CHECK-NEXT:    vmovaps %ymm1, %ymm01820; CHECK-NEXT:    retq1821  %vec2 = load <8 x float>, ptr %vec2p1822  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1823  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1824  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec31825  ret <8 x float> %res1826}1827 1828define <8 x float> @test_8xfloat_zero_masked_unpack_high_mem_mask1(<8 x float> %vec1, ptr %vec2p, <8 x float> %mask) {1829; CHECK-LABEL: test_8xfloat_zero_masked_unpack_high_mem_mask1:1830; CHECK:       # %bb.0:1831; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21832; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11833; CHECK-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1834; CHECK-NEXT:    retq1835  %vec2 = load <8 x float>, ptr %vec2p1836  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1837  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1838  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1839  ret <8 x float> %res1840}1841 1842define <8 x float> @test_8xfloat_masked_unpack_high_mem_mask2(<8 x float> %vec1, ptr %vec2p, <8 x float> %vec3, <8 x float> %mask) {1843; CHECK-LABEL: test_8xfloat_masked_unpack_high_mem_mask2:1844; CHECK:       # %bb.0:1845; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31846; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k11847; CHECK-NEXT:    vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1848; CHECK-NEXT:    vmovaps %ymm1, %ymm01849; CHECK-NEXT:    retq1850  %vec2 = load <8 x float>, ptr %vec2p1851  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1852  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1853  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec31854  ret <8 x float> %res1855}1856 1857define <8 x float> @test_8xfloat_zero_masked_unpack_high_mem_mask2(<8 x float> %vec1, ptr %vec2p, <8 x float> %mask) {1858; CHECK-LABEL: test_8xfloat_zero_masked_unpack_high_mem_mask2:1859; CHECK:       # %bb.0:1860; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21861; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11862; CHECK-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1863; CHECK-NEXT:    retq1864  %vec2 = load <8 x float>, ptr %vec2p1865  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1866  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1867  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1868  ret <8 x float> %res1869}1870 1871define <8 x float> @test_8xfloat_unpack_high_mem_mask3(<8 x float> %vec1, ptr %vec2p) {1872; CHECK-LABEL: test_8xfloat_unpack_high_mem_mask3:1873; CHECK:       # %bb.0:1874; CHECK-NEXT:    vunpckhps {{.*#+}} ymm0 = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1875; CHECK-NEXT:    retq1876  %vec2 = load <8 x float>, ptr %vec2p1877  %res = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1878  ret <8 x float> %res1879}1880define <8 x float> @test_8xfloat_masked_unpack_high_mem_mask3(<8 x float> %vec1, ptr %vec2p, <8 x float> %vec3, <8 x float> %mask) {1881; CHECK-LABEL: test_8xfloat_masked_unpack_high_mem_mask3:1882; CHECK:       # %bb.0:1883; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31884; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k11885; CHECK-NEXT:    vunpckhps {{.*#+}} ymm1 {%k1} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1886; CHECK-NEXT:    vmovaps %ymm1, %ymm01887; CHECK-NEXT:    retq1888  %vec2 = load <8 x float>, ptr %vec2p1889  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1890  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1891  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> %vec31892  ret <8 x float> %res1893}1894 1895define <8 x float> @test_8xfloat_zero_masked_unpack_high_mem_mask3(<8 x float> %vec1, ptr %vec2p, <8 x float> %mask) {1896; CHECK-LABEL: test_8xfloat_zero_masked_unpack_high_mem_mask3:1897; CHECK:       # %bb.0:1898; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm21899; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k11900; CHECK-NEXT:    vunpckhps {{.*#+}} ymm0 {%k1} {z} = ymm0[2],mem[2],ymm0[3],mem[3],ymm0[6],mem[6],ymm0[7],mem[7]1901; CHECK-NEXT:    retq1902  %vec2 = load <8 x float>, ptr %vec2p1903  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 2, i32 10, i32 3, i32 11, i32 6, i32 14, i32 7, i32 15>1904  %cmp = fcmp oeq <8 x float> %mask, zeroinitializer1905  %res = select <8 x i1> %cmp, <8 x float> %shuf, <8 x float> zeroinitializer1906  ret <8 x float> %res1907}1908 1909define <16 x float> @test_16xfloat_unpack_high_mask0(<16 x float> %vec1, <16 x float> %vec2) {1910; CHECK-LABEL: test_16xfloat_unpack_high_mask0:1911; CHECK:       # %bb.0:1912; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]1913; CHECK-NEXT:    retq1914  %res = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>1915  ret <16 x float> %res1916}1917define <16 x float> @test_16xfloat_masked_unpack_high_mask0(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %vec3, <16 x float> %mask) {1918; CHECK-LABEL: test_16xfloat_masked_unpack_high_mask0:1919; CHECK:       # %bb.0:1920; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm41921; CHECK-NEXT:    vcmpeqps %zmm4, %zmm3, %k11922; CHECK-NEXT:    vunpckhps {{.*#+}} zmm2 {%k1} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]1923; CHECK-NEXT:    vmovaps %zmm2, %zmm01924; CHECK-NEXT:    retq1925  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>1926  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1927  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec31928  ret <16 x float> %res1929}1930 1931define <16 x float> @test_16xfloat_zero_masked_unpack_high_mask0(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %mask) {1932; CHECK-LABEL: test_16xfloat_zero_masked_unpack_high_mask0:1933; CHECK:       # %bb.0:1934; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31935; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k11936; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]1937; CHECK-NEXT:    retq1938  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>1939  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1940  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1941  ret <16 x float> %res1942}1943define <16 x float> @test_16xfloat_masked_unpack_high_mask1(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %vec3, <16 x float> %mask) {1944; CHECK-LABEL: test_16xfloat_masked_unpack_high_mask1:1945; CHECK:       # %bb.0:1946; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm41947; CHECK-NEXT:    vcmpeqps %zmm4, %zmm3, %k11948; CHECK-NEXT:    vunpckhps {{.*#+}} zmm2 {%k1} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]1949; CHECK-NEXT:    vmovaps %zmm2, %zmm01950; CHECK-NEXT:    retq1951  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>1952  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1953  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec31954  ret <16 x float> %res1955}1956 1957define <16 x float> @test_16xfloat_zero_masked_unpack_high_mask1(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %mask) {1958; CHECK-LABEL: test_16xfloat_zero_masked_unpack_high_mask1:1959; CHECK:       # %bb.0:1960; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31961; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k11962; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]1963; CHECK-NEXT:    retq1964  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>1965  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1966  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1967  ret <16 x float> %res1968}1969define <16 x float> @test_16xfloat_masked_unpack_high_mask2(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %vec3, <16 x float> %mask) {1970; CHECK-LABEL: test_16xfloat_masked_unpack_high_mask2:1971; CHECK:       # %bb.0:1972; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm41973; CHECK-NEXT:    vcmpeqps %zmm4, %zmm3, %k11974; CHECK-NEXT:    vunpckhps {{.*#+}} zmm2 {%k1} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]1975; CHECK-NEXT:    vmovaps %zmm2, %zmm01976; CHECK-NEXT:    retq1977  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>1978  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1979  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec31980  ret <16 x float> %res1981}1982 1983define <16 x float> @test_16xfloat_zero_masked_unpack_high_mask2(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %mask) {1984; CHECK-LABEL: test_16xfloat_zero_masked_unpack_high_mask2:1985; CHECK:       # %bb.0:1986; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm31987; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k11988; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]1989; CHECK-NEXT:    retq1990  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>1991  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer1992  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer1993  ret <16 x float> %res1994}1995define <16 x float> @test_16xfloat_unpack_high_mask3(<16 x float> %vec1, <16 x float> %vec2) {1996; CHECK-LABEL: test_16xfloat_unpack_high_mask3:1997; CHECK:       # %bb.0:1998; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]1999; CHECK-NEXT:    retq2000  %res = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2001  ret <16 x float> %res2002}2003define <16 x float> @test_16xfloat_masked_unpack_high_mask3(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %vec3, <16 x float> %mask) {2004; CHECK-LABEL: test_16xfloat_masked_unpack_high_mask3:2005; CHECK:       # %bb.0:2006; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm42007; CHECK-NEXT:    vcmpeqps %zmm4, %zmm3, %k12008; CHECK-NEXT:    vunpckhps {{.*#+}} zmm2 {%k1} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]2009; CHECK-NEXT:    vmovaps %zmm2, %zmm02010; CHECK-NEXT:    retq2011  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2012  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer2013  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec32014  ret <16 x float> %res2015}2016 2017define <16 x float> @test_16xfloat_zero_masked_unpack_high_mask3(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %mask) {2018; CHECK-LABEL: test_16xfloat_zero_masked_unpack_high_mask3:2019; CHECK:       # %bb.0:2020; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm32021; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k12022; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],zmm1[2],zmm0[3],zmm1[3],zmm0[6],zmm1[6],zmm0[7],zmm1[7],zmm0[10],zmm1[10],zmm0[11],zmm1[11],zmm0[14],zmm1[14],zmm0[15],zmm1[15]2023; CHECK-NEXT:    retq2024  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2025  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer2026  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer2027  ret <16 x float> %res2028}2029define <16 x float> @test_16xfloat_unpack_high_mem_mask0(<16 x float> %vec1, ptr %vec2p) {2030; CHECK-LABEL: test_16xfloat_unpack_high_mem_mask0:2031; CHECK:       # %bb.0:2032; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]2033; CHECK-NEXT:    retq2034  %vec2 = load <16 x float>, ptr %vec2p2035  %res = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2036  ret <16 x float> %res2037}2038define <16 x float> @test_16xfloat_masked_unpack_high_mem_mask0(<16 x float> %vec1, ptr %vec2p, <16 x float> %vec3, <16 x float> %mask) {2039; CHECK-LABEL: test_16xfloat_masked_unpack_high_mem_mask0:2040; CHECK:       # %bb.0:2041; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm32042; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k12043; CHECK-NEXT:    vunpckhps {{.*#+}} zmm1 {%k1} = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]2044; CHECK-NEXT:    vmovaps %zmm1, %zmm02045; CHECK-NEXT:    retq2046  %vec2 = load <16 x float>, ptr %vec2p2047  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2048  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer2049  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec32050  ret <16 x float> %res2051}2052 2053define <16 x float> @test_16xfloat_zero_masked_unpack_high_mem_mask0(<16 x float> %vec1, ptr %vec2p, <16 x float> %mask) {2054; CHECK-LABEL: test_16xfloat_zero_masked_unpack_high_mem_mask0:2055; CHECK:       # %bb.0:2056; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm22057; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k12058; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]2059; CHECK-NEXT:    retq2060  %vec2 = load <16 x float>, ptr %vec2p2061  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2062  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer2063  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer2064  ret <16 x float> %res2065}2066 2067define <16 x float> @test_16xfloat_masked_unpack_high_mem_mask1(<16 x float> %vec1, ptr %vec2p, <16 x float> %vec3, <16 x float> %mask) {2068; CHECK-LABEL: test_16xfloat_masked_unpack_high_mem_mask1:2069; CHECK:       # %bb.0:2070; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm32071; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k12072; CHECK-NEXT:    vunpckhps {{.*#+}} zmm1 {%k1} = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]2073; CHECK-NEXT:    vmovaps %zmm1, %zmm02074; CHECK-NEXT:    retq2075  %vec2 = load <16 x float>, ptr %vec2p2076  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2077  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer2078  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec32079  ret <16 x float> %res2080}2081 2082define <16 x float> @test_16xfloat_zero_masked_unpack_high_mem_mask1(<16 x float> %vec1, ptr %vec2p, <16 x float> %mask) {2083; CHECK-LABEL: test_16xfloat_zero_masked_unpack_high_mem_mask1:2084; CHECK:       # %bb.0:2085; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm22086; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k12087; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]2088; CHECK-NEXT:    retq2089  %vec2 = load <16 x float>, ptr %vec2p2090  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2091  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer2092  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer2093  ret <16 x float> %res2094}2095 2096define <16 x float> @test_16xfloat_masked_unpack_high_mem_mask2(<16 x float> %vec1, ptr %vec2p, <16 x float> %vec3, <16 x float> %mask) {2097; CHECK-LABEL: test_16xfloat_masked_unpack_high_mem_mask2:2098; CHECK:       # %bb.0:2099; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm32100; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k12101; CHECK-NEXT:    vunpckhps {{.*#+}} zmm1 {%k1} = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]2102; CHECK-NEXT:    vmovaps %zmm1, %zmm02103; CHECK-NEXT:    retq2104  %vec2 = load <16 x float>, ptr %vec2p2105  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2106  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer2107  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec32108  ret <16 x float> %res2109}2110 2111define <16 x float> @test_16xfloat_zero_masked_unpack_high_mem_mask2(<16 x float> %vec1, ptr %vec2p, <16 x float> %mask) {2112; CHECK-LABEL: test_16xfloat_zero_masked_unpack_high_mem_mask2:2113; CHECK:       # %bb.0:2114; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm22115; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k12116; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]2117; CHECK-NEXT:    retq2118  %vec2 = load <16 x float>, ptr %vec2p2119  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2120  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer2121  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer2122  ret <16 x float> %res2123}2124 2125define <16 x float> @test_16xfloat_unpack_high_mem_mask3(<16 x float> %vec1, ptr %vec2p) {2126; CHECK-LABEL: test_16xfloat_unpack_high_mem_mask3:2127; CHECK:       # %bb.0:2128; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]2129; CHECK-NEXT:    retq2130  %vec2 = load <16 x float>, ptr %vec2p2131  %res = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2132  ret <16 x float> %res2133}2134define <16 x float> @test_16xfloat_masked_unpack_high_mem_mask3(<16 x float> %vec1, ptr %vec2p, <16 x float> %vec3, <16 x float> %mask) {2135; CHECK-LABEL: test_16xfloat_masked_unpack_high_mem_mask3:2136; CHECK:       # %bb.0:2137; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm32138; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k12139; CHECK-NEXT:    vunpckhps {{.*#+}} zmm1 {%k1} = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]2140; CHECK-NEXT:    vmovaps %zmm1, %zmm02141; CHECK-NEXT:    retq2142  %vec2 = load <16 x float>, ptr %vec2p2143  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2144  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer2145  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> %vec32146  ret <16 x float> %res2147}2148 2149define <16 x float> @test_16xfloat_zero_masked_unpack_high_mem_mask3(<16 x float> %vec1, ptr %vec2p, <16 x float> %mask) {2150; CHECK-LABEL: test_16xfloat_zero_masked_unpack_high_mem_mask3:2151; CHECK:       # %bb.0:2152; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm22153; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k12154; CHECK-NEXT:    vunpckhps {{.*#+}} zmm0 {%k1} {z} = zmm0[2],mem[2],zmm0[3],mem[3],zmm0[6],mem[6],zmm0[7],mem[7],zmm0[10],mem[10],zmm0[11],mem[11],zmm0[14],mem[14],zmm0[15],mem[15]2155; CHECK-NEXT:    retq2156  %vec2 = load <16 x float>, ptr %vec2p2157  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 18, i32 3, i32 19, i32 6, i32 22, i32 7, i32 23, i32 10, i32 26, i32 11, i32 27, i32 14, i32 30, i32 15, i32 31>2158  %cmp = fcmp oeq <16 x float> %mask, zeroinitializer2159  %res = select <16 x i1> %cmp, <16 x float> %shuf, <16 x float> zeroinitializer2160  ret <16 x float> %res2161}2162 2163define <2 x double> @test_2xdouble_unpack_high_mask0(<2 x double> %vec1, <2 x double> %vec2) {2164; CHECK-LABEL: test_2xdouble_unpack_high_mask0:2165; CHECK:       # %bb.0:2166; CHECK-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],xmm1[1]2167; CHECK-NEXT:    retq2168  %res = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, i32 3>2169  ret <2 x double> %res2170}2171define <2 x double> @test_2xdouble_masked_unpack_high_mask0(<2 x double> %vec1, <2 x double> %vec2, <2 x double> %vec3, <2 x double> %mask) {2172; CHECK-LABEL: test_2xdouble_masked_unpack_high_mask0:2173; CHECK:       # %bb.0:2174; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm42175; CHECK-NEXT:    vcmpeqpd %xmm4, %xmm3, %k12176; CHECK-NEXT:    vunpckhpd {{.*#+}} xmm2 {%k1} = xmm0[1],xmm1[1]2177; CHECK-NEXT:    vmovapd %xmm2, %xmm02178; CHECK-NEXT:    retq2179  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, i32 3>2180  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer2181  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> %vec32182  ret <2 x double> %res2183}2184 2185define <2 x double> @test_2xdouble_zero_masked_unpack_high_mask0(<2 x double> %vec1, <2 x double> %vec2, <2 x double> %mask) {2186; CHECK-LABEL: test_2xdouble_zero_masked_unpack_high_mask0:2187; CHECK:       # %bb.0:2188; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32189; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k12190; CHECK-NEXT:    vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],xmm1[1]2191; CHECK-NEXT:    retq2192  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, i32 3>2193  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer2194  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> zeroinitializer2195  ret <2 x double> %res2196}2197define <2 x double> @test_2xdouble_masked_unpack_high_mask1(<2 x double> %vec1, <2 x double> %vec2, <2 x double> %vec3, <2 x double> %mask) {2198; CHECK-LABEL: test_2xdouble_masked_unpack_high_mask1:2199; CHECK:       # %bb.0:2200; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm42201; CHECK-NEXT:    vcmpeqpd %xmm4, %xmm3, %k12202; CHECK-NEXT:    vunpckhpd {{.*#+}} xmm2 {%k1} = xmm0[1],xmm1[1]2203; CHECK-NEXT:    vmovapd %xmm2, %xmm02204; CHECK-NEXT:    retq2205  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, i32 3>2206  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer2207  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> %vec32208  ret <2 x double> %res2209}2210 2211define <2 x double> @test_2xdouble_zero_masked_unpack_high_mask1(<2 x double> %vec1, <2 x double> %vec2, <2 x double> %mask) {2212; CHECK-LABEL: test_2xdouble_zero_masked_unpack_high_mask1:2213; CHECK:       # %bb.0:2214; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32215; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k12216; CHECK-NEXT:    vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],xmm1[1]2217; CHECK-NEXT:    retq2218  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, i32 3>2219  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer2220  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> zeroinitializer2221  ret <2 x double> %res2222}2223define <2 x double> @test_2xdouble_unpack_high_mem_mask0(<2 x double> %vec1, ptr %vec2p) {2224; CHECK-LABEL: test_2xdouble_unpack_high_mem_mask0:2225; CHECK:       # %bb.0:2226; CHECK-NEXT:    vunpckhpd {{.*#+}} xmm0 = xmm0[1],mem[1]2227; CHECK-NEXT:    retq2228  %vec2 = load <2 x double>, ptr %vec2p2229  %res = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, i32 3>2230  ret <2 x double> %res2231}2232define <2 x double> @test_2xdouble_masked_unpack_high_mem_mask0(<2 x double> %vec1, ptr %vec2p, <2 x double> %vec3, <2 x double> %mask) {2233; CHECK-LABEL: test_2xdouble_masked_unpack_high_mem_mask0:2234; CHECK:       # %bb.0:2235; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32236; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k12237; CHECK-NEXT:    vunpckhpd {{.*#+}} xmm1 {%k1} = xmm0[1],mem[1]2238; CHECK-NEXT:    vmovapd %xmm1, %xmm02239; CHECK-NEXT:    retq2240  %vec2 = load <2 x double>, ptr %vec2p2241  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, i32 3>2242  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer2243  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> %vec32244  ret <2 x double> %res2245}2246 2247define <2 x double> @test_2xdouble_zero_masked_unpack_high_mem_mask0(<2 x double> %vec1, ptr %vec2p, <2 x double> %mask) {2248; CHECK-LABEL: test_2xdouble_zero_masked_unpack_high_mem_mask0:2249; CHECK:       # %bb.0:2250; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm22251; CHECK-NEXT:    vcmpeqpd %xmm2, %xmm1, %k12252; CHECK-NEXT:    vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],mem[1]2253; CHECK-NEXT:    retq2254  %vec2 = load <2 x double>, ptr %vec2p2255  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, i32 3>2256  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer2257  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> zeroinitializer2258  ret <2 x double> %res2259}2260 2261define <2 x double> @test_2xdouble_masked_unpack_high_mem_mask1(<2 x double> %vec1, ptr %vec2p, <2 x double> %vec3, <2 x double> %mask) {2262; CHECK-LABEL: test_2xdouble_masked_unpack_high_mem_mask1:2263; CHECK:       # %bb.0:2264; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32265; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k12266; CHECK-NEXT:    vunpckhpd {{.*#+}} xmm1 {%k1} = xmm0[1],mem[1]2267; CHECK-NEXT:    vmovapd %xmm1, %xmm02268; CHECK-NEXT:    retq2269  %vec2 = load <2 x double>, ptr %vec2p2270  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, i32 3>2271  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer2272  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> %vec32273  ret <2 x double> %res2274}2275 2276define <2 x double> @test_2xdouble_zero_masked_unpack_high_mem_mask1(<2 x double> %vec1, ptr %vec2p, <2 x double> %mask) {2277; CHECK-LABEL: test_2xdouble_zero_masked_unpack_high_mem_mask1:2278; CHECK:       # %bb.0:2279; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm22280; CHECK-NEXT:    vcmpeqpd %xmm2, %xmm1, %k12281; CHECK-NEXT:    vunpckhpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],mem[1]2282; CHECK-NEXT:    retq2283  %vec2 = load <2 x double>, ptr %vec2p2284  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, i32 3>2285  %cmp = fcmp oeq <2 x double> %mask, zeroinitializer2286  %res = select <2 x i1> %cmp, <2 x double> %shuf, <2 x double> zeroinitializer2287  ret <2 x double> %res2288}2289 2290define <4 x double> @test_4xdouble_unpack_high_mask0(<4 x double> %vec1, <4 x double> %vec2) {2291; CHECK-LABEL: test_4xdouble_unpack_high_mask0:2292; CHECK:       # %bb.0:2293; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2294; CHECK-NEXT:    retq2295  %res = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2296  ret <4 x double> %res2297}2298define <4 x double> @test_4xdouble_masked_unpack_high_mask0(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3, <4 x double> %mask) {2299; CHECK-LABEL: test_4xdouble_masked_unpack_high_mask0:2300; CHECK:       # %bb.0:2301; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm42302; CHECK-NEXT:    vcmpeqpd %ymm4, %ymm3, %k12303; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm2 {%k1} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2304; CHECK-NEXT:    vmovapd %ymm2, %ymm02305; CHECK-NEXT:    retq2306  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2307  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2308  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec32309  ret <4 x double> %res2310}2311 2312define <4 x double> @test_4xdouble_zero_masked_unpack_high_mask0(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %mask) {2313; CHECK-LABEL: test_4xdouble_zero_masked_unpack_high_mask0:2314; CHECK:       # %bb.0:2315; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32316; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k12317; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2318; CHECK-NEXT:    retq2319  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2320  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2321  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer2322  ret <4 x double> %res2323}2324define <4 x double> @test_4xdouble_masked_unpack_high_mask1(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3, <4 x double> %mask) {2325; CHECK-LABEL: test_4xdouble_masked_unpack_high_mask1:2326; CHECK:       # %bb.0:2327; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm42328; CHECK-NEXT:    vcmpeqpd %ymm4, %ymm3, %k12329; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm2 {%k1} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2330; CHECK-NEXT:    vmovapd %ymm2, %ymm02331; CHECK-NEXT:    retq2332  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2333  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2334  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec32335  ret <4 x double> %res2336}2337 2338define <4 x double> @test_4xdouble_zero_masked_unpack_high_mask1(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %mask) {2339; CHECK-LABEL: test_4xdouble_zero_masked_unpack_high_mask1:2340; CHECK:       # %bb.0:2341; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32342; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k12343; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2344; CHECK-NEXT:    retq2345  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2346  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2347  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer2348  ret <4 x double> %res2349}2350define <4 x double> @test_4xdouble_masked_unpack_high_mask2(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3, <4 x double> %mask) {2351; CHECK-LABEL: test_4xdouble_masked_unpack_high_mask2:2352; CHECK:       # %bb.0:2353; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm42354; CHECK-NEXT:    vcmpeqpd %ymm4, %ymm3, %k12355; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm2 {%k1} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2356; CHECK-NEXT:    vmovapd %ymm2, %ymm02357; CHECK-NEXT:    retq2358  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2359  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2360  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec32361  ret <4 x double> %res2362}2363 2364define <4 x double> @test_4xdouble_zero_masked_unpack_high_mask2(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %mask) {2365; CHECK-LABEL: test_4xdouble_zero_masked_unpack_high_mask2:2366; CHECK:       # %bb.0:2367; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32368; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k12369; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2370; CHECK-NEXT:    retq2371  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2372  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2373  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer2374  ret <4 x double> %res2375}2376define <4 x double> @test_4xdouble_unpack_high_mask3(<4 x double> %vec1, <4 x double> %vec2) {2377; CHECK-LABEL: test_4xdouble_unpack_high_mask3:2378; CHECK:       # %bb.0:2379; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2380; CHECK-NEXT:    retq2381  %res = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2382  ret <4 x double> %res2383}2384define <4 x double> @test_4xdouble_masked_unpack_high_mask3(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3, <4 x double> %mask) {2385; CHECK-LABEL: test_4xdouble_masked_unpack_high_mask3:2386; CHECK:       # %bb.0:2387; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm42388; CHECK-NEXT:    vcmpeqpd %ymm4, %ymm3, %k12389; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm2 {%k1} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2390; CHECK-NEXT:    vmovapd %ymm2, %ymm02391; CHECK-NEXT:    retq2392  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2393  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2394  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec32395  ret <4 x double> %res2396}2397 2398define <4 x double> @test_4xdouble_zero_masked_unpack_high_mask3(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %mask) {2399; CHECK-LABEL: test_4xdouble_zero_masked_unpack_high_mask3:2400; CHECK:       # %bb.0:2401; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32402; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k12403; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[1],ymm0[3],ymm1[3]2404; CHECK-NEXT:    retq2405  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2406  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2407  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer2408  ret <4 x double> %res2409}2410define <4 x double> @test_4xdouble_unpack_high_mem_mask0(<4 x double> %vec1, ptr %vec2p) {2411; CHECK-LABEL: test_4xdouble_unpack_high_mem_mask0:2412; CHECK:       # %bb.0:2413; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm0[1],mem[1],ymm0[3],mem[3]2414; CHECK-NEXT:    retq2415  %vec2 = load <4 x double>, ptr %vec2p2416  %res = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2417  ret <4 x double> %res2418}2419define <4 x double> @test_4xdouble_masked_unpack_high_mem_mask0(<4 x double> %vec1, ptr %vec2p, <4 x double> %vec3, <4 x double> %mask) {2420; CHECK-LABEL: test_4xdouble_masked_unpack_high_mem_mask0:2421; CHECK:       # %bb.0:2422; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32423; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k12424; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm1 {%k1} = ymm0[1],mem[1],ymm0[3],mem[3]2425; CHECK-NEXT:    vmovapd %ymm1, %ymm02426; CHECK-NEXT:    retq2427  %vec2 = load <4 x double>, ptr %vec2p2428  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2429  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2430  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec32431  ret <4 x double> %res2432}2433 2434define <4 x double> @test_4xdouble_zero_masked_unpack_high_mem_mask0(<4 x double> %vec1, ptr %vec2p, <4 x double> %mask) {2435; CHECK-LABEL: test_4xdouble_zero_masked_unpack_high_mem_mask0:2436; CHECK:       # %bb.0:2437; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm22438; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k12439; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],mem[1],ymm0[3],mem[3]2440; CHECK-NEXT:    retq2441  %vec2 = load <4 x double>, ptr %vec2p2442  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2443  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2444  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer2445  ret <4 x double> %res2446}2447 2448define <4 x double> @test_4xdouble_masked_unpack_high_mem_mask1(<4 x double> %vec1, ptr %vec2p, <4 x double> %vec3, <4 x double> %mask) {2449; CHECK-LABEL: test_4xdouble_masked_unpack_high_mem_mask1:2450; CHECK:       # %bb.0:2451; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32452; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k12453; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm1 {%k1} = ymm0[1],mem[1],ymm0[3],mem[3]2454; CHECK-NEXT:    vmovapd %ymm1, %ymm02455; CHECK-NEXT:    retq2456  %vec2 = load <4 x double>, ptr %vec2p2457  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2458  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2459  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec32460  ret <4 x double> %res2461}2462 2463define <4 x double> @test_4xdouble_zero_masked_unpack_high_mem_mask1(<4 x double> %vec1, ptr %vec2p, <4 x double> %mask) {2464; CHECK-LABEL: test_4xdouble_zero_masked_unpack_high_mem_mask1:2465; CHECK:       # %bb.0:2466; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm22467; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k12468; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],mem[1],ymm0[3],mem[3]2469; CHECK-NEXT:    retq2470  %vec2 = load <4 x double>, ptr %vec2p2471  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2472  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2473  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer2474  ret <4 x double> %res2475}2476 2477define <4 x double> @test_4xdouble_masked_unpack_high_mem_mask2(<4 x double> %vec1, ptr %vec2p, <4 x double> %vec3, <4 x double> %mask) {2478; CHECK-LABEL: test_4xdouble_masked_unpack_high_mem_mask2:2479; CHECK:       # %bb.0:2480; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32481; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k12482; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm1 {%k1} = ymm0[1],mem[1],ymm0[3],mem[3]2483; CHECK-NEXT:    vmovapd %ymm1, %ymm02484; CHECK-NEXT:    retq2485  %vec2 = load <4 x double>, ptr %vec2p2486  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2487  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2488  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec32489  ret <4 x double> %res2490}2491 2492define <4 x double> @test_4xdouble_zero_masked_unpack_high_mem_mask2(<4 x double> %vec1, ptr %vec2p, <4 x double> %mask) {2493; CHECK-LABEL: test_4xdouble_zero_masked_unpack_high_mem_mask2:2494; CHECK:       # %bb.0:2495; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm22496; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k12497; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],mem[1],ymm0[3],mem[3]2498; CHECK-NEXT:    retq2499  %vec2 = load <4 x double>, ptr %vec2p2500  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2501  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2502  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer2503  ret <4 x double> %res2504}2505 2506define <4 x double> @test_4xdouble_unpack_high_mem_mask3(<4 x double> %vec1, ptr %vec2p) {2507; CHECK-LABEL: test_4xdouble_unpack_high_mem_mask3:2508; CHECK:       # %bb.0:2509; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm0 = ymm0[1],mem[1],ymm0[3],mem[3]2510; CHECK-NEXT:    retq2511  %vec2 = load <4 x double>, ptr %vec2p2512  %res = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2513  ret <4 x double> %res2514}2515define <4 x double> @test_4xdouble_masked_unpack_high_mem_mask3(<4 x double> %vec1, ptr %vec2p, <4 x double> %vec3, <4 x double> %mask) {2516; CHECK-LABEL: test_4xdouble_masked_unpack_high_mem_mask3:2517; CHECK:       # %bb.0:2518; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32519; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k12520; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm1 {%k1} = ymm0[1],mem[1],ymm0[3],mem[3]2521; CHECK-NEXT:    vmovapd %ymm1, %ymm02522; CHECK-NEXT:    retq2523  %vec2 = load <4 x double>, ptr %vec2p2524  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2525  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2526  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> %vec32527  ret <4 x double> %res2528}2529 2530define <4 x double> @test_4xdouble_zero_masked_unpack_high_mem_mask3(<4 x double> %vec1, ptr %vec2p, <4 x double> %mask) {2531; CHECK-LABEL: test_4xdouble_zero_masked_unpack_high_mem_mask3:2532; CHECK:       # %bb.0:2533; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm22534; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k12535; CHECK-NEXT:    vunpckhpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],mem[1],ymm0[3],mem[3]2536; CHECK-NEXT:    retq2537  %vec2 = load <4 x double>, ptr %vec2p2538  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 5, i32 3, i32 7>2539  %cmp = fcmp oeq <4 x double> %mask, zeroinitializer2540  %res = select <4 x i1> %cmp, <4 x double> %shuf, <4 x double> zeroinitializer2541  ret <4 x double> %res2542}2543 2544define <8 x double> @test_8xdouble_unpack_high_mask0(<8 x double> %vec1, <8 x double> %vec2) {2545; CHECK-LABEL: test_8xdouble_unpack_high_mask0:2546; CHECK:       # %bb.0:2547; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]2548; CHECK-NEXT:    retq2549  %res = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2550  ret <8 x double> %res2551}2552define <8 x double> @test_8xdouble_masked_unpack_high_mask0(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %vec3, <8 x double> %mask) {2553; CHECK-LABEL: test_8xdouble_masked_unpack_high_mask0:2554; CHECK:       # %bb.0:2555; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm42556; CHECK-NEXT:    vcmpeqpd %zmm4, %zmm3, %k12557; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm2 {%k1} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]2558; CHECK-NEXT:    vmovapd %zmm2, %zmm02559; CHECK-NEXT:    retq2560  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2561  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2562  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec32563  ret <8 x double> %res2564}2565 2566define <8 x double> @test_8xdouble_zero_masked_unpack_high_mask0(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %mask) {2567; CHECK-LABEL: test_8xdouble_zero_masked_unpack_high_mask0:2568; CHECK:       # %bb.0:2569; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32570; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k12571; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]2572; CHECK-NEXT:    retq2573  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2574  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2575  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer2576  ret <8 x double> %res2577}2578define <8 x double> @test_8xdouble_masked_unpack_high_mask1(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %vec3, <8 x double> %mask) {2579; CHECK-LABEL: test_8xdouble_masked_unpack_high_mask1:2580; CHECK:       # %bb.0:2581; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm42582; CHECK-NEXT:    vcmpeqpd %zmm4, %zmm3, %k12583; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm2 {%k1} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]2584; CHECK-NEXT:    vmovapd %zmm2, %zmm02585; CHECK-NEXT:    retq2586  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2587  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2588  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec32589  ret <8 x double> %res2590}2591 2592define <8 x double> @test_8xdouble_zero_masked_unpack_high_mask1(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %mask) {2593; CHECK-LABEL: test_8xdouble_zero_masked_unpack_high_mask1:2594; CHECK:       # %bb.0:2595; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32596; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k12597; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]2598; CHECK-NEXT:    retq2599  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2600  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2601  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer2602  ret <8 x double> %res2603}2604define <8 x double> @test_8xdouble_masked_unpack_high_mask2(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %vec3, <8 x double> %mask) {2605; CHECK-LABEL: test_8xdouble_masked_unpack_high_mask2:2606; CHECK:       # %bb.0:2607; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm42608; CHECK-NEXT:    vcmpeqpd %zmm4, %zmm3, %k12609; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm2 {%k1} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]2610; CHECK-NEXT:    vmovapd %zmm2, %zmm02611; CHECK-NEXT:    retq2612  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2613  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2614  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec32615  ret <8 x double> %res2616}2617 2618define <8 x double> @test_8xdouble_zero_masked_unpack_high_mask2(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %mask) {2619; CHECK-LABEL: test_8xdouble_zero_masked_unpack_high_mask2:2620; CHECK:       # %bb.0:2621; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32622; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k12623; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]2624; CHECK-NEXT:    retq2625  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2626  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2627  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer2628  ret <8 x double> %res2629}2630define <8 x double> @test_8xdouble_unpack_high_mask3(<8 x double> %vec1, <8 x double> %vec2) {2631; CHECK-LABEL: test_8xdouble_unpack_high_mask3:2632; CHECK:       # %bb.0:2633; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]2634; CHECK-NEXT:    retq2635  %res = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2636  ret <8 x double> %res2637}2638define <8 x double> @test_8xdouble_masked_unpack_high_mask3(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %vec3, <8 x double> %mask) {2639; CHECK-LABEL: test_8xdouble_masked_unpack_high_mask3:2640; CHECK:       # %bb.0:2641; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm42642; CHECK-NEXT:    vcmpeqpd %zmm4, %zmm3, %k12643; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm2 {%k1} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]2644; CHECK-NEXT:    vmovapd %zmm2, %zmm02645; CHECK-NEXT:    retq2646  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2647  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2648  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec32649  ret <8 x double> %res2650}2651 2652define <8 x double> @test_8xdouble_zero_masked_unpack_high_mask3(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %mask) {2653; CHECK-LABEL: test_8xdouble_zero_masked_unpack_high_mask3:2654; CHECK:       # %bb.0:2655; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32656; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k12657; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],zmm1[1],zmm0[3],zmm1[3],zmm0[5],zmm1[5],zmm0[7],zmm1[7]2658; CHECK-NEXT:    retq2659  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2660  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2661  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer2662  ret <8 x double> %res2663}2664define <8 x double> @test_8xdouble_unpack_high_mem_mask0(<8 x double> %vec1, ptr %vec2p) {2665; CHECK-LABEL: test_8xdouble_unpack_high_mem_mask0:2666; CHECK:       # %bb.0:2667; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]2668; CHECK-NEXT:    retq2669  %vec2 = load <8 x double>, ptr %vec2p2670  %res = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2671  ret <8 x double> %res2672}2673define <8 x double> @test_8xdouble_masked_unpack_high_mem_mask0(<8 x double> %vec1, ptr %vec2p, <8 x double> %vec3, <8 x double> %mask) {2674; CHECK-LABEL: test_8xdouble_masked_unpack_high_mem_mask0:2675; CHECK:       # %bb.0:2676; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32677; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k12678; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm1 {%k1} = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]2679; CHECK-NEXT:    vmovapd %zmm1, %zmm02680; CHECK-NEXT:    retq2681  %vec2 = load <8 x double>, ptr %vec2p2682  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2683  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2684  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec32685  ret <8 x double> %res2686}2687 2688define <8 x double> @test_8xdouble_zero_masked_unpack_high_mem_mask0(<8 x double> %vec1, ptr %vec2p, <8 x double> %mask) {2689; CHECK-LABEL: test_8xdouble_zero_masked_unpack_high_mem_mask0:2690; CHECK:       # %bb.0:2691; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm22692; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k12693; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]2694; CHECK-NEXT:    retq2695  %vec2 = load <8 x double>, ptr %vec2p2696  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2697  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2698  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer2699  ret <8 x double> %res2700}2701 2702define <8 x double> @test_8xdouble_masked_unpack_high_mem_mask1(<8 x double> %vec1, ptr %vec2p, <8 x double> %vec3, <8 x double> %mask) {2703; CHECK-LABEL: test_8xdouble_masked_unpack_high_mem_mask1:2704; CHECK:       # %bb.0:2705; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32706; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k12707; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm1 {%k1} = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]2708; CHECK-NEXT:    vmovapd %zmm1, %zmm02709; CHECK-NEXT:    retq2710  %vec2 = load <8 x double>, ptr %vec2p2711  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2712  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2713  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec32714  ret <8 x double> %res2715}2716 2717define <8 x double> @test_8xdouble_zero_masked_unpack_high_mem_mask1(<8 x double> %vec1, ptr %vec2p, <8 x double> %mask) {2718; CHECK-LABEL: test_8xdouble_zero_masked_unpack_high_mem_mask1:2719; CHECK:       # %bb.0:2720; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm22721; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k12722; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]2723; CHECK-NEXT:    retq2724  %vec2 = load <8 x double>, ptr %vec2p2725  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2726  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2727  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer2728  ret <8 x double> %res2729}2730 2731define <8 x double> @test_8xdouble_masked_unpack_high_mem_mask2(<8 x double> %vec1, ptr %vec2p, <8 x double> %vec3, <8 x double> %mask) {2732; CHECK-LABEL: test_8xdouble_masked_unpack_high_mem_mask2:2733; CHECK:       # %bb.0:2734; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32735; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k12736; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm1 {%k1} = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]2737; CHECK-NEXT:    vmovapd %zmm1, %zmm02738; CHECK-NEXT:    retq2739  %vec2 = load <8 x double>, ptr %vec2p2740  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2741  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2742  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec32743  ret <8 x double> %res2744}2745 2746define <8 x double> @test_8xdouble_zero_masked_unpack_high_mem_mask2(<8 x double> %vec1, ptr %vec2p, <8 x double> %mask) {2747; CHECK-LABEL: test_8xdouble_zero_masked_unpack_high_mem_mask2:2748; CHECK:       # %bb.0:2749; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm22750; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k12751; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]2752; CHECK-NEXT:    retq2753  %vec2 = load <8 x double>, ptr %vec2p2754  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2755  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2756  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer2757  ret <8 x double> %res2758}2759 2760define <8 x double> @test_8xdouble_unpack_high_mem_mask3(<8 x double> %vec1, ptr %vec2p) {2761; CHECK-LABEL: test_8xdouble_unpack_high_mem_mask3:2762; CHECK:       # %bb.0:2763; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm0 = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]2764; CHECK-NEXT:    retq2765  %vec2 = load <8 x double>, ptr %vec2p2766  %res = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2767  ret <8 x double> %res2768}2769define <8 x double> @test_8xdouble_masked_unpack_high_mem_mask3(<8 x double> %vec1, ptr %vec2p, <8 x double> %vec3, <8 x double> %mask) {2770; CHECK-LABEL: test_8xdouble_masked_unpack_high_mem_mask3:2771; CHECK:       # %bb.0:2772; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm32773; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k12774; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm1 {%k1} = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]2775; CHECK-NEXT:    vmovapd %zmm1, %zmm02776; CHECK-NEXT:    retq2777  %vec2 = load <8 x double>, ptr %vec2p2778  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2779  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2780  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> %vec32781  ret <8 x double> %res2782}2783 2784define <8 x double> @test_8xdouble_zero_masked_unpack_high_mem_mask3(<8 x double> %vec1, ptr %vec2p, <8 x double> %mask) {2785; CHECK-LABEL: test_8xdouble_zero_masked_unpack_high_mem_mask3:2786; CHECK:       # %bb.0:2787; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm22788; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k12789; CHECK-NEXT:    vunpckhpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],mem[1],zmm0[3],mem[3],zmm0[5],mem[5],zmm0[7],mem[7]2790; CHECK-NEXT:    retq2791  %vec2 = load <8 x double>, ptr %vec2p2792  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 9, i32 3, i32 11, i32 5, i32 13, i32 7, i32 15>2793  %cmp = fcmp oeq <8 x double> %mask, zeroinitializer2794  %res = select <8 x i1> %cmp, <8 x double> %shuf, <8 x double> zeroinitializer2795  ret <8 x double> %res2796}2797 2798