brintos

brintos / llvm-project-archived public Read only

0
0
Text · 72.1 KiB · b7b1212 Raw
1401 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_shuff_mask0(<4 x float> %vec1, <4 x float> %vec2) {5; CHECK-LABEL: test_4xfloat_shuff_mask0:6; CHECK:       # %bb.0:7; CHECK-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[2,1],xmm1[3,1]8; CHECK-NEXT:    retq9  %res = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 1, i32 7, i32 5>10  ret <4 x float> %res11}12define <4 x float> @test_4xfloat_masked_shuff_mask0(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %vec3, <4 x float> %mask) {13; CHECK-LABEL: test_4xfloat_masked_shuff_mask0:14; CHECK:       # %bb.0:15; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm416; CHECK-NEXT:    vcmpeqps %xmm4, %xmm3, %k117; CHECK-NEXT:    vshufps {{.*#+}} xmm2 {%k1} = xmm0[2,1],xmm1[3,1]18; CHECK-NEXT:    vmovaps %xmm2, %xmm019; CHECK-NEXT:    retq20  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 1, i32 7, 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_shuff_mask0(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %mask) {27; CHECK-LABEL: test_4xfloat_zero_masked_shuff_mask0:28; CHECK:       # %bb.0:29; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm330; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k131; CHECK-NEXT:    vshufps {{.*#+}} xmm0 {%k1} {z} = xmm0[2,1],xmm1[3,1]32; CHECK-NEXT:    retq33  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 2, i32 1, i32 7, 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_shuff_mask1(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %vec3, <4 x float> %mask) {39; CHECK-LABEL: test_4xfloat_masked_shuff_mask1:40; CHECK:       # %bb.0:41; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm442; CHECK-NEXT:    vcmpeqps %xmm4, %xmm3, %k143; CHECK-NEXT:    vshufps {{.*#+}} xmm2 {%k1} = xmm0[1,2],xmm1[3,2]44; CHECK-NEXT:    vmovaps %xmm2, %xmm045; CHECK-NEXT:    retq46  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 1, i32 2, i32 7, i32 6>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_shuff_mask1(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %mask) {53; CHECK-LABEL: test_4xfloat_zero_masked_shuff_mask1:54; CHECK:       # %bb.0:55; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm356; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k157; CHECK-NEXT:    vshufps {{.*#+}} xmm0 {%k1} {z} = xmm0[1,2],xmm1[3,2]58; CHECK-NEXT:    retq59  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 1, i32 2, i32 7, i32 6>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_shuff_mask2(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %vec3, <4 x float> %mask) {65; CHECK-LABEL: test_4xfloat_masked_shuff_mask2:66; CHECK:       # %bb.0:67; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm468; CHECK-NEXT:    vcmpeqps %xmm4, %xmm3, %k169; CHECK-NEXT:    vshufps {{.*#+}} xmm2 {%k1} = xmm0[1,3],xmm1[2,1]70; CHECK-NEXT:    vmovaps %xmm2, %xmm071; CHECK-NEXT:    retq72  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 1, i32 3, i32 6, 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_shuff_mask2(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %mask) {79; CHECK-LABEL: test_4xfloat_zero_masked_shuff_mask2:80; CHECK:       # %bb.0:81; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm382; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k183; CHECK-NEXT:    vshufps {{.*#+}} xmm0 {%k1} {z} = xmm0[1,3],xmm1[2,1]84; CHECK-NEXT:    retq85  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 1, i32 3, i32 6, 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_shuff_mask3(<4 x float> %vec1, <4 x float> %vec2) {91; CHECK-LABEL: test_4xfloat_shuff_mask3:92; CHECK:       # %bb.0:93; CHECK-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[3,3],xmm1[3,3]94; CHECK-NEXT:    retq95  %res = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 3, i32 3, i32 7, i32 7>96  ret <4 x float> %res97}98define <4 x float> @test_4xfloat_masked_shuff_mask3(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %vec3, <4 x float> %mask) {99; CHECK-LABEL: test_4xfloat_masked_shuff_mask3:100; CHECK:       # %bb.0:101; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4102; CHECK-NEXT:    vcmpeqps %xmm4, %xmm3, %k1103; CHECK-NEXT:    vshufps {{.*#+}} xmm2 {%k1} = xmm0[3,3],xmm1[3,3]104; CHECK-NEXT:    vmovaps %xmm2, %xmm0105; CHECK-NEXT:    retq106  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 3, i32 3, i32 7, i32 7>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_shuff_mask3(<4 x float> %vec1, <4 x float> %vec2, <4 x float> %mask) {113; CHECK-LABEL: test_4xfloat_zero_masked_shuff_mask3:114; CHECK:       # %bb.0:115; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3116; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1117; CHECK-NEXT:    vshufps {{.*#+}} xmm0 {%k1} {z} = xmm0[3,3],xmm1[3,3]118; CHECK-NEXT:    retq119  %shuf = shufflevector <4 x float> %vec1, <4 x float> %vec2, <4 x i32> <i32 3, i32 3, i32 7, i32 7>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_shuff_mem_mask0(<4 x float> %vec1, ptr %vec2p) {125; CHECK-LABEL: test_4xfloat_shuff_mem_mask0:126; CHECK:       # %bb.0:127; CHECK-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[1,0],mem[1,2]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 1, i32 0, i32 5, i32 6>131  ret <4 x float> %res132}133define <4 x float> @test_4xfloat_masked_shuff_mem_mask0(<4 x float> %vec1, ptr %vec2p, <4 x float> %vec3, <4 x float> %mask) {134; CHECK-LABEL: test_4xfloat_masked_shuff_mem_mask0:135; CHECK:       # %bb.0:136; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3137; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1138; CHECK-NEXT:    vshufps {{.*#+}} xmm1 {%k1} = xmm0[1,0],mem[1,2]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 1, i32 0, i32 5, i32 6>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_shuff_mem_mask0(<4 x float> %vec1, ptr %vec2p, <4 x float> %mask) {149; CHECK-LABEL: test_4xfloat_zero_masked_shuff_mem_mask0:150; CHECK:       # %bb.0:151; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2152; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1153; CHECK-NEXT:    vshufps {{.*#+}} xmm0 {%k1} {z} = xmm0[1,0],mem[1,2]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 1, i32 0, i32 5, i32 6>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_shuff_mem_mask1(<4 x float> %vec1, ptr %vec2p, <4 x float> %vec3, <4 x float> %mask) {163; CHECK-LABEL: test_4xfloat_masked_shuff_mem_mask1:164; CHECK:       # %bb.0:165; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3166; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1167; CHECK-NEXT:    vshufps {{.*#+}} xmm1 {%k1} = xmm0[3,3],mem[1,3]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 3, i32 3, i32 5, i32 7>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_shuff_mem_mask1(<4 x float> %vec1, ptr %vec2p, <4 x float> %mask) {178; CHECK-LABEL: test_4xfloat_zero_masked_shuff_mem_mask1:179; CHECK:       # %bb.0:180; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2181; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1182; CHECK-NEXT:    vshufps {{.*#+}} xmm0 {%k1} {z} = xmm0[3,3],mem[1,3]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 3, i32 3, i32 5, i32 7>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_shuff_mem_mask2(<4 x float> %vec1, ptr %vec2p, <4 x float> %vec3, <4 x float> %mask) {192; CHECK-LABEL: test_4xfloat_masked_shuff_mem_mask2:193; CHECK:       # %bb.0:194; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3195; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1196; CHECK-NEXT:    vshufps {{.*#+}} xmm1 {%k1} = xmm0[1,3],mem[2,0]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 1, i32 3, i32 6, i32 4>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_shuff_mem_mask2(<4 x float> %vec1, ptr %vec2p, <4 x float> %mask) {207; CHECK-LABEL: test_4xfloat_zero_masked_shuff_mem_mask2:208; CHECK:       # %bb.0:209; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2210; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1211; CHECK-NEXT:    vshufps {{.*#+}} xmm0 {%k1} {z} = xmm0[1,3],mem[2,0]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 1, i32 3, i32 6, i32 4>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_shuff_mem_mask3(<4 x float> %vec1, ptr %vec2p) {221; CHECK-LABEL: test_4xfloat_shuff_mem_mask3:222; CHECK:       # %bb.0:223; CHECK-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[2,1],mem[3,2]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 2, i32 1, i32 7, i32 6>227  ret <4 x float> %res228}229define <4 x float> @test_4xfloat_masked_shuff_mem_mask3(<4 x float> %vec1, ptr %vec2p, <4 x float> %vec3, <4 x float> %mask) {230; CHECK-LABEL: test_4xfloat_masked_shuff_mem_mask3:231; CHECK:       # %bb.0:232; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3233; CHECK-NEXT:    vcmpeqps %xmm3, %xmm2, %k1234; CHECK-NEXT:    vshufps {{.*#+}} xmm1 {%k1} = xmm0[2,1],mem[3,2]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 2, i32 1, i32 7, i32 6>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_shuff_mem_mask3(<4 x float> %vec1, ptr %vec2p, <4 x float> %mask) {245; CHECK-LABEL: test_4xfloat_zero_masked_shuff_mem_mask3:246; CHECK:       # %bb.0:247; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2248; CHECK-NEXT:    vcmpeqps %xmm2, %xmm1, %k1249; CHECK-NEXT:    vshufps {{.*#+}} xmm0 {%k1} {z} = xmm0[2,1],mem[3,2]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 2, i32 1, i32 7, i32 6>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_shuff_mask0(<8 x float> %vec1, <8 x float> %vec2) {259; CHECK-LABEL: test_8xfloat_shuff_mask0:260; CHECK:       # %bb.0:261; CHECK-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[1,3],ymm1[0,2],ymm0[5,7],ymm1[4,6]262; CHECK-NEXT:    retq263  %res = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 1, i32 3, i32 8, i32 10, i32 5, i32 7, i32 12, i32 14>264  ret <8 x float> %res265}266define <8 x float> @test_8xfloat_masked_shuff_mask0(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %vec3, <8 x float> %mask) {267; CHECK-LABEL: test_8xfloat_masked_shuff_mask0:268; CHECK:       # %bb.0:269; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4270; CHECK-NEXT:    vcmpeqps %ymm4, %ymm3, %k1271; CHECK-NEXT:    vshufps {{.*#+}} ymm2 {%k1} = ymm0[1,3],ymm1[0,2],ymm0[5,7],ymm1[4,6]272; CHECK-NEXT:    vmovaps %ymm2, %ymm0273; CHECK-NEXT:    retq274  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 1, i32 3, i32 8, i32 10, i32 5, i32 7, i32 12, i32 14>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_shuff_mask0(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %mask) {281; CHECK-LABEL: test_8xfloat_zero_masked_shuff_mask0:282; CHECK:       # %bb.0:283; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3284; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1285; CHECK-NEXT:    vshufps {{.*#+}} ymm0 {%k1} {z} = ymm0[1,3],ymm1[0,2],ymm0[5,7],ymm1[4,6]286; CHECK-NEXT:    retq287  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 1, i32 3, i32 8, i32 10, i32 5, i32 7, i32 12, i32 14>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_shuff_mask1(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %vec3, <8 x float> %mask) {293; CHECK-LABEL: test_8xfloat_masked_shuff_mask1:294; CHECK:       # %bb.0:295; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4296; CHECK-NEXT:    vcmpeqps %ymm4, %ymm3, %k1297; CHECK-NEXT:    vshufps {{.*#+}} ymm2 {%k1} = ymm0[0,3],ymm1[3,1],ymm0[4,7],ymm1[7,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 3, i32 11, i32 9, i32 4, i32 7, i32 15, 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_shuff_mask1(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %mask) {307; CHECK-LABEL: test_8xfloat_zero_masked_shuff_mask1:308; CHECK:       # %bb.0:309; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3310; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1311; CHECK-NEXT:    vshufps {{.*#+}} ymm0 {%k1} {z} = ymm0[0,3],ymm1[3,1],ymm0[4,7],ymm1[7,5]312; CHECK-NEXT:    retq313  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 3, i32 11, i32 9, i32 4, i32 7, i32 15, 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_shuff_mask2(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %vec3, <8 x float> %mask) {319; CHECK-LABEL: test_8xfloat_masked_shuff_mask2:320; CHECK:       # %bb.0:321; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4322; CHECK-NEXT:    vcmpeqps %ymm4, %ymm3, %k1323; CHECK-NEXT:    vshufps {{.*#+}} ymm2 {%k1} = ymm0[0,2],ymm1[2,2],ymm0[4,6],ymm1[6,6]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 2, i32 10, i32 10, i32 4, i32 6, i32 14, i32 14>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_shuff_mask2(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %mask) {333; CHECK-LABEL: test_8xfloat_zero_masked_shuff_mask2:334; CHECK:       # %bb.0:335; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3336; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1337; CHECK-NEXT:    vshufps {{.*#+}} ymm0 {%k1} {z} = ymm0[0,2],ymm1[2,2],ymm0[4,6],ymm1[6,6]338; CHECK-NEXT:    retq339  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 0, i32 2, i32 10, i32 10, i32 4, i32 6, i32 14, i32 14>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_shuff_mask3(<8 x float> %vec1, <8 x float> %vec2) {345; CHECK-LABEL: test_8xfloat_shuff_mask3:346; CHECK:       # %bb.0:347; CHECK-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[3,2],ymm1[3,2],ymm0[7,6],ymm1[7,6]348; CHECK-NEXT:    retq349  %res = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 3, i32 2, i32 11, i32 10, i32 7, i32 6, i32 15, i32 14>350  ret <8 x float> %res351}352define <8 x float> @test_8xfloat_masked_shuff_mask3(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %vec3, <8 x float> %mask) {353; CHECK-LABEL: test_8xfloat_masked_shuff_mask3:354; CHECK:       # %bb.0:355; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4356; CHECK-NEXT:    vcmpeqps %ymm4, %ymm3, %k1357; CHECK-NEXT:    vshufps {{.*#+}} ymm2 {%k1} = ymm0[3,2],ymm1[3,2],ymm0[7,6],ymm1[7,6]358; CHECK-NEXT:    vmovaps %ymm2, %ymm0359; CHECK-NEXT:    retq360  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 3, i32 2, i32 11, i32 10, i32 7, i32 6, i32 15, i32 14>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_shuff_mask3(<8 x float> %vec1, <8 x float> %vec2, <8 x float> %mask) {367; CHECK-LABEL: test_8xfloat_zero_masked_shuff_mask3:368; CHECK:       # %bb.0:369; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3370; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1371; CHECK-NEXT:    vshufps {{.*#+}} ymm0 {%k1} {z} = ymm0[3,2],ymm1[3,2],ymm0[7,6],ymm1[7,6]372; CHECK-NEXT:    retq373  %shuf = shufflevector <8 x float> %vec1, <8 x float> %vec2, <8 x i32> <i32 3, i32 2, i32 11, i32 10, i32 7, i32 6, i32 15, i32 14>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_shuff_mem_mask0(<8 x float> %vec1, ptr %vec2p) {379; CHECK-LABEL: test_8xfloat_shuff_mem_mask0:380; CHECK:       # %bb.0:381; CHECK-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[2,1],mem[0,0],ymm0[6,5],mem[4,4]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 2, i32 1, i32 8, i32 8, i32 6, i32 5, i32 12, i32 12>385  ret <8 x float> %res386}387define <8 x float> @test_8xfloat_masked_shuff_mem_mask0(<8 x float> %vec1, ptr %vec2p, <8 x float> %vec3, <8 x float> %mask) {388; CHECK-LABEL: test_8xfloat_masked_shuff_mem_mask0:389; CHECK:       # %bb.0:390; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3391; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1392; CHECK-NEXT:    vshufps {{.*#+}} ymm1 {%k1} = ymm0[2,1],mem[0,0],ymm0[6,5],mem[4,4]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 2, i32 1, i32 8, i32 8, i32 6, i32 5, i32 12, i32 12>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_shuff_mem_mask0(<8 x float> %vec1, ptr %vec2p, <8 x float> %mask) {403; CHECK-LABEL: test_8xfloat_zero_masked_shuff_mem_mask0:404; CHECK:       # %bb.0:405; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2406; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1407; CHECK-NEXT:    vshufps {{.*#+}} ymm0 {%k1} {z} = ymm0[2,1],mem[0,0],ymm0[6,5],mem[4,4]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 2, i32 1, i32 8, i32 8, i32 6, i32 5, i32 12, i32 12>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_shuff_mem_mask1(<8 x float> %vec1, ptr %vec2p, <8 x float> %vec3, <8 x float> %mask) {417; CHECK-LABEL: test_8xfloat_masked_shuff_mem_mask1:418; CHECK:       # %bb.0:419; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3420; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1421; CHECK-NEXT:    vshufps {{.*#+}} ymm1 {%k1} = ymm0[2,2],mem[1,0],ymm0[6,6],mem[5,4]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 2, i32 2, i32 9, i32 8, i32 6, i32 6, i32 13, i32 12>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_shuff_mem_mask1(<8 x float> %vec1, ptr %vec2p, <8 x float> %mask) {432; CHECK-LABEL: test_8xfloat_zero_masked_shuff_mem_mask1:433; CHECK:       # %bb.0:434; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2435; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1436; CHECK-NEXT:    vshufps {{.*#+}} ymm0 {%k1} {z} = ymm0[2,2],mem[1,0],ymm0[6,6],mem[5,4]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 2, i32 2, i32 9, i32 8, i32 6, i32 6, i32 13, i32 12>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_shuff_mem_mask2(<8 x float> %vec1, ptr %vec2p, <8 x float> %vec3, <8 x float> %mask) {446; CHECK-LABEL: test_8xfloat_masked_shuff_mem_mask2:447; CHECK:       # %bb.0:448; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3449; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1450; CHECK-NEXT:    vshufps {{.*#+}} ymm1 {%k1} = ymm0[3,3],mem[3,3],ymm0[7,7],mem[7,7]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 3, i32 3, i32 11, i32 11, i32 7, i32 7, i32 15, i32 15>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_shuff_mem_mask2(<8 x float> %vec1, ptr %vec2p, <8 x float> %mask) {461; CHECK-LABEL: test_8xfloat_zero_masked_shuff_mem_mask2:462; CHECK:       # %bb.0:463; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2464; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1465; CHECK-NEXT:    vshufps {{.*#+}} ymm0 {%k1} {z} = ymm0[3,3],mem[3,3],ymm0[7,7],mem[7,7]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 3, i32 3, i32 11, i32 11, i32 7, i32 7, i32 15, i32 15>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_shuff_mem_mask3(<8 x float> %vec1, ptr %vec2p) {475; CHECK-LABEL: test_8xfloat_shuff_mem_mask3:476; CHECK:       # %bb.0:477; CHECK-NEXT:    vshufps {{.*#+}} ymm0 = ymm0[3,3],mem[2,1],ymm0[7,7],mem[6,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 3, i32 3, i32 10, i32 9, i32 7, i32 7, i32 14, i32 13>481  ret <8 x float> %res482}483define <8 x float> @test_8xfloat_masked_shuff_mem_mask3(<8 x float> %vec1, ptr %vec2p, <8 x float> %vec3, <8 x float> %mask) {484; CHECK-LABEL: test_8xfloat_masked_shuff_mem_mask3:485; CHECK:       # %bb.0:486; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3487; CHECK-NEXT:    vcmpeqps %ymm3, %ymm2, %k1488; CHECK-NEXT:    vshufps {{.*#+}} ymm1 {%k1} = ymm0[3,3],mem[2,1],ymm0[7,7],mem[6,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 3, i32 3, i32 10, i32 9, i32 7, i32 7, i32 14, 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_shuff_mem_mask3(<8 x float> %vec1, ptr %vec2p, <8 x float> %mask) {499; CHECK-LABEL: test_8xfloat_zero_masked_shuff_mem_mask3:500; CHECK:       # %bb.0:501; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2502; CHECK-NEXT:    vcmpeqps %ymm2, %ymm1, %k1503; CHECK-NEXT:    vshufps {{.*#+}} ymm0 {%k1} {z} = ymm0[3,3],mem[2,1],ymm0[7,7],mem[6,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 3, i32 3, i32 10, i32 9, i32 7, i32 7, i32 14, 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_shuff_mask0(<16 x float> %vec1, <16 x float> %vec2) {513; CHECK-LABEL: test_16xfloat_shuff_mask0:514; CHECK:       # %bb.0:515; CHECK-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[3,2],zmm1[3,2],zmm0[7,6],zmm1[7,6],zmm0[11,10],zmm1[11,10],zmm0[15,14],zmm1[15,14]516; CHECK-NEXT:    retq517  %res = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 3, i32 2, i32 19, i32 18, i32 7, i32 6, i32 23, i32 22, i32 11, i32 10, i32 27, i32 26, i32 15, i32 14, i32 31, i32 30>518  ret <16 x float> %res519}520define <16 x float> @test_16xfloat_masked_shuff_mask0(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %vec3, <16 x float> %mask) {521; CHECK-LABEL: test_16xfloat_masked_shuff_mask0:522; CHECK:       # %bb.0:523; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4524; CHECK-NEXT:    vcmpeqps %zmm4, %zmm3, %k1525; CHECK-NEXT:    vshufps {{.*#+}} zmm2 {%k1} = zmm0[3,2],zmm1[3,2],zmm0[7,6],zmm1[7,6],zmm0[11,10],zmm1[11,10],zmm0[15,14],zmm1[15,14]526; CHECK-NEXT:    vmovaps %zmm2, %zmm0527; CHECK-NEXT:    retq528  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 3, i32 2, i32 19, i32 18, i32 7, i32 6, i32 23, i32 22, i32 11, i32 10, i32 27, i32 26, i32 15, i32 14, i32 31, i32 30>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_shuff_mask0(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %mask) {535; CHECK-LABEL: test_16xfloat_zero_masked_shuff_mask0:536; CHECK:       # %bb.0:537; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3538; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1539; CHECK-NEXT:    vshufps {{.*#+}} zmm0 {%k1} {z} = zmm0[3,2],zmm1[3,2],zmm0[7,6],zmm1[7,6],zmm0[11,10],zmm1[11,10],zmm0[15,14],zmm1[15,14]540; CHECK-NEXT:    retq541  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 3, i32 2, i32 19, i32 18, i32 7, i32 6, i32 23, i32 22, i32 11, i32 10, i32 27, i32 26, i32 15, i32 14, i32 31, i32 30>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_shuff_mask1(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %vec3, <16 x float> %mask) {547; CHECK-LABEL: test_16xfloat_masked_shuff_mask1:548; CHECK:       # %bb.0:549; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4550; CHECK-NEXT:    vcmpeqps %zmm4, %zmm3, %k1551; CHECK-NEXT:    vshufps {{.*#+}} zmm2 {%k1} = zmm0[1,2],zmm1[3,3],zmm0[5,6],zmm1[7,7],zmm0[9,10],zmm1[11,11],zmm0[13,14],zmm1[15,15]552; CHECK-NEXT:    vmovaps %zmm2, %zmm0553; CHECK-NEXT:    retq554  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 1, i32 2, i32 19, i32 19, i32 5, i32 6, i32 23, i32 23, i32 9, i32 10, i32 27, i32 27, i32 13, i32 14, i32 31, i32 31>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_shuff_mask1(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %mask) {561; CHECK-LABEL: test_16xfloat_zero_masked_shuff_mask1:562; CHECK:       # %bb.0:563; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3564; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1565; CHECK-NEXT:    vshufps {{.*#+}} zmm0 {%k1} {z} = zmm0[1,2],zmm1[3,3],zmm0[5,6],zmm1[7,7],zmm0[9,10],zmm1[11,11],zmm0[13,14],zmm1[15,15]566; CHECK-NEXT:    retq567  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 1, i32 2, i32 19, i32 19, i32 5, i32 6, i32 23, i32 23, i32 9, i32 10, i32 27, i32 27, i32 13, i32 14, i32 31, i32 31>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_shuff_mask2(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %vec3, <16 x float> %mask) {573; CHECK-LABEL: test_16xfloat_masked_shuff_mask2:574; CHECK:       # %bb.0:575; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4576; CHECK-NEXT:    vcmpeqps %zmm4, %zmm3, %k1577; CHECK-NEXT:    vshufps {{.*#+}} zmm2 {%k1} = zmm0[3,0],zmm1[2,1],zmm0[7,4],zmm1[6,5],zmm0[11,8],zmm1[10,9],zmm0[15,12],zmm1[14,13]578; CHECK-NEXT:    vmovaps %zmm2, %zmm0579; CHECK-NEXT:    retq580  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 3, i32 0, i32 18, i32 17, i32 7, i32 4, i32 22, i32 21, i32 11, i32 8, i32 26, i32 25, i32 15, i32 12, i32 30, 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_shuff_mask2(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %mask) {587; CHECK-LABEL: test_16xfloat_zero_masked_shuff_mask2:588; CHECK:       # %bb.0:589; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3590; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1591; CHECK-NEXT:    vshufps {{.*#+}} zmm0 {%k1} {z} = zmm0[3,0],zmm1[2,1],zmm0[7,4],zmm1[6,5],zmm0[11,8],zmm1[10,9],zmm0[15,12],zmm1[14,13]592; CHECK-NEXT:    retq593  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 3, i32 0, i32 18, i32 17, i32 7, i32 4, i32 22, i32 21, i32 11, i32 8, i32 26, i32 25, i32 15, i32 12, i32 30, 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_shuff_mask3(<16 x float> %vec1, <16 x float> %vec2) {599; CHECK-LABEL: test_16xfloat_shuff_mask3:600; CHECK:       # %bb.0:601; CHECK-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[2,3],zmm1[0,2],zmm0[6,7],zmm1[4,6],zmm0[10,11],zmm1[8,10],zmm0[14,15],zmm1[12,14]602; CHECK-NEXT:    retq603  %res = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 3, i32 16, i32 18, i32 6, i32 7, i32 20, i32 22, i32 10, i32 11, i32 24, i32 26, i32 14, i32 15, i32 28, i32 30>604  ret <16 x float> %res605}606define <16 x float> @test_16xfloat_masked_shuff_mask3(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %vec3, <16 x float> %mask) {607; CHECK-LABEL: test_16xfloat_masked_shuff_mask3:608; CHECK:       # %bb.0:609; CHECK-NEXT:    vxorps %xmm4, %xmm4, %xmm4610; CHECK-NEXT:    vcmpeqps %zmm4, %zmm3, %k1611; CHECK-NEXT:    vshufps {{.*#+}} zmm2 {%k1} = zmm0[2,3],zmm1[0,2],zmm0[6,7],zmm1[4,6],zmm0[10,11],zmm1[8,10],zmm0[14,15],zmm1[12,14]612; CHECK-NEXT:    vmovaps %zmm2, %zmm0613; CHECK-NEXT:    retq614  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 3, i32 16, i32 18, i32 6, i32 7, i32 20, i32 22, i32 10, i32 11, i32 24, i32 26, i32 14, i32 15, i32 28, i32 30>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_shuff_mask3(<16 x float> %vec1, <16 x float> %vec2, <16 x float> %mask) {621; CHECK-LABEL: test_16xfloat_zero_masked_shuff_mask3:622; CHECK:       # %bb.0:623; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3624; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1625; CHECK-NEXT:    vshufps {{.*#+}} zmm0 {%k1} {z} = zmm0[2,3],zmm1[0,2],zmm0[6,7],zmm1[4,6],zmm0[10,11],zmm1[8,10],zmm0[14,15],zmm1[12,14]626; CHECK-NEXT:    retq627  %shuf = shufflevector <16 x float> %vec1, <16 x float> %vec2, <16 x i32> <i32 2, i32 3, i32 16, i32 18, i32 6, i32 7, i32 20, i32 22, i32 10, i32 11, i32 24, i32 26, i32 14, i32 15, i32 28, i32 30>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_shuff_mem_mask0(<16 x float> %vec1, ptr %vec2p) {633; CHECK-LABEL: test_16xfloat_shuff_mem_mask0:634; CHECK:       # %bb.0:635; CHECK-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[3,0],mem[0,2],zmm0[7,4],mem[4,6],zmm0[11,8],mem[8,10],zmm0[15,12],mem[12,14]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 3, i32 0, i32 16, i32 18, i32 7, i32 4, i32 20, i32 22, i32 11, i32 8, i32 24, i32 26, i32 15, i32 12, i32 28, i32 30>639  ret <16 x float> %res640}641define <16 x float> @test_16xfloat_masked_shuff_mem_mask0(<16 x float> %vec1, ptr %vec2p, <16 x float> %vec3, <16 x float> %mask) {642; CHECK-LABEL: test_16xfloat_masked_shuff_mem_mask0:643; CHECK:       # %bb.0:644; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3645; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1646; CHECK-NEXT:    vshufps {{.*#+}} zmm1 {%k1} = zmm0[3,0],mem[0,2],zmm0[7,4],mem[4,6],zmm0[11,8],mem[8,10],zmm0[15,12],mem[12,14]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 3, i32 0, i32 16, i32 18, i32 7, i32 4, i32 20, i32 22, i32 11, i32 8, i32 24, i32 26, i32 15, i32 12, i32 28, i32 30>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_shuff_mem_mask0(<16 x float> %vec1, ptr %vec2p, <16 x float> %mask) {657; CHECK-LABEL: test_16xfloat_zero_masked_shuff_mem_mask0:658; CHECK:       # %bb.0:659; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2660; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1661; CHECK-NEXT:    vshufps {{.*#+}} zmm0 {%k1} {z} = zmm0[3,0],mem[0,2],zmm0[7,4],mem[4,6],zmm0[11,8],mem[8,10],zmm0[15,12],mem[12,14]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 3, i32 0, i32 16, i32 18, i32 7, i32 4, i32 20, i32 22, i32 11, i32 8, i32 24, i32 26, i32 15, i32 12, i32 28, i32 30>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_shuff_mem_mask1(<16 x float> %vec1, ptr %vec2p, <16 x float> %vec3, <16 x float> %mask) {671; CHECK-LABEL: test_16xfloat_masked_shuff_mem_mask1:672; CHECK:       # %bb.0:673; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3674; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1675; CHECK-NEXT:    vshufps {{.*#+}} zmm1 {%k1} = zmm0[0,2],mem[3,2],zmm0[4,6],mem[7,6],zmm0[8,10],mem[11,10],zmm0[12,14],mem[15,14]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 2, i32 19, i32 18, i32 4, i32 6, i32 23, i32 22, i32 8, i32 10, i32 27, i32 26, i32 12, i32 14, i32 31, i32 30>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_shuff_mem_mask1(<16 x float> %vec1, ptr %vec2p, <16 x float> %mask) {686; CHECK-LABEL: test_16xfloat_zero_masked_shuff_mem_mask1:687; CHECK:       # %bb.0:688; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2689; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1690; CHECK-NEXT:    vshufps {{.*#+}} zmm0 {%k1} {z} = zmm0[0,2],mem[3,2],zmm0[4,6],mem[7,6],zmm0[8,10],mem[11,10],zmm0[12,14],mem[15,14]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 2, i32 19, i32 18, i32 4, i32 6, i32 23, i32 22, i32 8, i32 10, i32 27, i32 26, i32 12, i32 14, i32 31, i32 30>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_shuff_mem_mask2(<16 x float> %vec1, ptr %vec2p, <16 x float> %vec3, <16 x float> %mask) {700; CHECK-LABEL: test_16xfloat_masked_shuff_mem_mask2:701; CHECK:       # %bb.0:702; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3703; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1704; CHECK-NEXT:    vshufps {{.*#+}} zmm1 {%k1} = zmm0[2,0],mem[2,2],zmm0[6,4],mem[6,6],zmm0[10,8],mem[10,10],zmm0[14,12],mem[14,14]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 2, i32 0, i32 18, i32 18, i32 6, i32 4, i32 22, i32 22, i32 10, i32 8, i32 26, i32 26, i32 14, i32 12, i32 30, i32 30>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_shuff_mem_mask2(<16 x float> %vec1, ptr %vec2p, <16 x float> %mask) {715; CHECK-LABEL: test_16xfloat_zero_masked_shuff_mem_mask2:716; CHECK:       # %bb.0:717; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2718; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1719; CHECK-NEXT:    vshufps {{.*#+}} zmm0 {%k1} {z} = zmm0[2,0],mem[2,2],zmm0[6,4],mem[6,6],zmm0[10,8],mem[10,10],zmm0[14,12],mem[14,14]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 2, i32 0, i32 18, i32 18, i32 6, i32 4, i32 22, i32 22, i32 10, i32 8, i32 26, i32 26, i32 14, i32 12, i32 30, i32 30>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_shuff_mem_mask3(<16 x float> %vec1, ptr %vec2p) {729; CHECK-LABEL: test_16xfloat_shuff_mem_mask3:730; CHECK:       # %bb.0:731; CHECK-NEXT:    vshufps {{.*#+}} zmm0 = zmm0[2,1],mem[1,3],zmm0[6,5],mem[5,7],zmm0[10,9],mem[9,11],zmm0[14,13],mem[13,15]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 2, i32 1, i32 17, i32 19, i32 6, i32 5, i32 21, i32 23, i32 10, i32 9, i32 25, i32 27, i32 14, i32 13, i32 29, i32 31>735  ret <16 x float> %res736}737define <16 x float> @test_16xfloat_masked_shuff_mem_mask3(<16 x float> %vec1, ptr %vec2p, <16 x float> %vec3, <16 x float> %mask) {738; CHECK-LABEL: test_16xfloat_masked_shuff_mem_mask3:739; CHECK:       # %bb.0:740; CHECK-NEXT:    vxorps %xmm3, %xmm3, %xmm3741; CHECK-NEXT:    vcmpeqps %zmm3, %zmm2, %k1742; CHECK-NEXT:    vshufps {{.*#+}} zmm1 {%k1} = zmm0[2,1],mem[1,3],zmm0[6,5],mem[5,7],zmm0[10,9],mem[9,11],zmm0[14,13],mem[13,15]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 2, i32 1, i32 17, i32 19, i32 6, i32 5, i32 21, i32 23, i32 10, i32 9, i32 25, i32 27, i32 14, i32 13, i32 29, i32 31>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_shuff_mem_mask3(<16 x float> %vec1, ptr %vec2p, <16 x float> %mask) {753; CHECK-LABEL: test_16xfloat_zero_masked_shuff_mem_mask3:754; CHECK:       # %bb.0:755; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2756; CHECK-NEXT:    vcmpeqps %zmm2, %zmm1, %k1757; CHECK-NEXT:    vshufps {{.*#+}} zmm0 {%k1} {z} = zmm0[2,1],mem[1,3],zmm0[6,5],mem[5,7],zmm0[10,9],mem[9,11],zmm0[14,13],mem[13,15]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 2, i32 1, i32 17, i32 19, i32 6, i32 5, i32 21, i32 23, i32 10, i32 9, i32 25, i32 27, i32 14, i32 13, i32 29, i32 31>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_shuff_mask0(<2 x double> %vec1, <2 x double> %vec2) {767; CHECK-LABEL: test_2xdouble_shuff_mask0:768; CHECK:       # %bb.0:769; CHECK-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],xmm1[0]770; CHECK-NEXT:    retq771  %res = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, i32 2>772  ret <2 x double> %res773}774define <2 x double> @test_2xdouble_masked_shuff_mask0(<2 x double> %vec1, <2 x double> %vec2, <2 x double> %vec3, <2 x double> %mask) {775; CHECK-LABEL: test_2xdouble_masked_shuff_mask0:776; CHECK:       # %bb.0:777; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm4778; CHECK-NEXT:    vcmpeqpd %xmm4, %xmm3, %k1779; CHECK-NEXT:    vshufpd {{.*#+}} xmm2 {%k1} = xmm0[1],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 1, 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_shuff_mask0(<2 x double> %vec1, <2 x double> %vec2, <2 x double> %mask) {789; CHECK-LABEL: test_2xdouble_zero_masked_shuff_mask0:790; CHECK:       # %bb.0:791; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3792; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k1793; CHECK-NEXT:    vshufpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],xmm1[0]794; CHECK-NEXT:    retq795  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, 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_shuff_mask1(<2 x double> %vec1, <2 x double> %vec2, <2 x double> %vec3, <2 x double> %mask) {801; CHECK-LABEL: test_2xdouble_masked_shuff_mask1:802; CHECK:       # %bb.0:803; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm4804; CHECK-NEXT:    vcmpeqpd %xmm4, %xmm3, %k1805; CHECK-NEXT:    vshufpd {{.*#+}} xmm2 {%k1} = xmm0[1],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 1, 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_shuff_mask1(<2 x double> %vec1, <2 x double> %vec2, <2 x double> %mask) {815; CHECK-LABEL: test_2xdouble_zero_masked_shuff_mask1:816; CHECK:       # %bb.0:817; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3818; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k1819; CHECK-NEXT:    vshufpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],xmm1[0]820; CHECK-NEXT:    retq821  %shuf = shufflevector <2 x double> %vec1, <2 x double> %vec2, <2 x i32> <i32 1, 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_shuff_mem_mask0(<2 x double> %vec1, ptr %vec2p) {827; CHECK-LABEL: test_2xdouble_shuff_mem_mask0:828; CHECK:       # %bb.0:829; CHECK-NEXT:    vshufpd {{.*#+}} xmm0 = xmm0[1],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 1, i32 2>833  ret <2 x double> %res834}835define <2 x double> @test_2xdouble_masked_shuff_mem_mask0(<2 x double> %vec1, ptr %vec2p, <2 x double> %vec3, <2 x double> %mask) {836; CHECK-LABEL: test_2xdouble_masked_shuff_mem_mask0:837; CHECK:       # %bb.0:838; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3839; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k1840; CHECK-NEXT:    vshufpd {{.*#+}} xmm1 {%k1} = xmm0[1],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 1, 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_shuff_mem_mask0(<2 x double> %vec1, ptr %vec2p, <2 x double> %mask) {851; CHECK-LABEL: test_2xdouble_zero_masked_shuff_mem_mask0:852; CHECK:       # %bb.0:853; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2854; CHECK-NEXT:    vcmpeqpd %xmm2, %xmm1, %k1855; CHECK-NEXT:    vshufpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],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 1, 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_shuff_mem_mask1(<2 x double> %vec1, ptr %vec2p, <2 x double> %vec3, <2 x double> %mask) {865; CHECK-LABEL: test_2xdouble_masked_shuff_mem_mask1:866; CHECK:       # %bb.0:867; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3868; CHECK-NEXT:    vcmpeqpd %xmm3, %xmm2, %k1869; CHECK-NEXT:    vshufpd {{.*#+}} xmm1 {%k1} = xmm0[1],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 1, 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_shuff_mem_mask1(<2 x double> %vec1, ptr %vec2p, <2 x double> %mask) {880; CHECK-LABEL: test_2xdouble_zero_masked_shuff_mem_mask1:881; CHECK:       # %bb.0:882; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm2883; CHECK-NEXT:    vcmpeqpd %xmm2, %xmm1, %k1884; CHECK-NEXT:    vshufpd {{.*#+}} xmm0 {%k1} {z} = xmm0[1],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 1, 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_shuff_mask0(<4 x double> %vec1, <4 x double> %vec2) {894; CHECK-LABEL: test_4xdouble_shuff_mask0:895; CHECK:       # %bb.0:896; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[3],ymm1[3]897; CHECK-NEXT:    retq898  %res = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 3, i32 7>899  ret <4 x double> %res900}901define <4 x double> @test_4xdouble_masked_shuff_mask0(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3, <4 x double> %mask) {902; CHECK-LABEL: test_4xdouble_masked_shuff_mask0:903; CHECK:       # %bb.0:904; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm4905; CHECK-NEXT:    vcmpeqpd %ymm4, %ymm3, %k1906; CHECK-NEXT:    vshufpd {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[3],ymm1[3]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 3, i32 7>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_shuff_mask0(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %mask) {916; CHECK-LABEL: test_4xdouble_zero_masked_shuff_mask0:917; CHECK:       # %bb.0:918; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3919; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k1920; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[3],ymm1[3]921; CHECK-NEXT:    retq922  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 3, i32 7>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_shuff_mask1(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3, <4 x double> %mask) {928; CHECK-LABEL: test_4xdouble_masked_shuff_mask1:929; CHECK:       # %bb.0:930; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm4931; CHECK-NEXT:    vcmpeqpd %ymm4, %ymm3, %k1932; CHECK-NEXT:    vshufpd {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[3],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 3, 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_shuff_mask1(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %mask) {942; CHECK-LABEL: test_4xdouble_zero_masked_shuff_mask1:943; CHECK:       # %bb.0:944; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3945; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k1946; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[3],ymm1[2]947; CHECK-NEXT:    retq948  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 3, 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_shuff_mask2(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3, <4 x double> %mask) {954; CHECK-LABEL: test_4xdouble_masked_shuff_mask2:955; CHECK:       # %bb.0:956; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm4957; CHECK-NEXT:    vcmpeqpd %ymm4, %ymm3, %k1958; CHECK-NEXT:    vshufpd {{.*#+}} ymm2 {%k1} = ymm0[1],ymm1[0],ymm0[3],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 1, i32 4, i32 3, 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_shuff_mask2(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %mask) {968; CHECK-LABEL: test_4xdouble_zero_masked_shuff_mask2:969; CHECK:       # %bb.0:970; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm3971; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k1972; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],ymm1[0],ymm0[3],ymm1[2]973; CHECK-NEXT:    retq974  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 1, i32 4, i32 3, 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_shuff_mask3(<4 x double> %vec1, <4 x double> %vec2) {980; CHECK-LABEL: test_4xdouble_shuff_mask3:981; CHECK:       # %bb.0:982; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[0],ymm1[0],ymm0[2],ymm1[3]983; CHECK-NEXT:    retq984  %res = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 7>985  ret <4 x double> %res986}987define <4 x double> @test_4xdouble_masked_shuff_mask3(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %vec3, <4 x double> %mask) {988; CHECK-LABEL: test_4xdouble_masked_shuff_mask3:989; CHECK:       # %bb.0:990; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm4991; CHECK-NEXT:    vcmpeqpd %ymm4, %ymm3, %k1992; CHECK-NEXT:    vshufpd {{.*#+}} ymm2 {%k1} = ymm0[0],ymm1[0],ymm0[2],ymm1[3]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 7>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_shuff_mask3(<4 x double> %vec1, <4 x double> %vec2, <4 x double> %mask) {1002; CHECK-LABEL: test_4xdouble_zero_masked_shuff_mask3:1003; CHECK:       # %bb.0:1004; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31005; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k11006; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],ymm1[0],ymm0[2],ymm1[3]1007; CHECK-NEXT:    retq1008  %shuf = shufflevector <4 x double> %vec1, <4 x double> %vec2, <4 x i32> <i32 0, i32 4, i32 2, i32 7>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_shuff_mem_mask0(<4 x double> %vec1, ptr %vec2p) {1014; CHECK-LABEL: test_4xdouble_shuff_mem_mask0:1015; CHECK:       # %bb.0:1016; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],mem[1],ymm0[3],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 1, i32 5, i32 3, i32 6>1020  ret <4 x double> %res1021}1022define <4 x double> @test_4xdouble_masked_shuff_mem_mask0(<4 x double> %vec1, ptr %vec2p, <4 x double> %vec3, <4 x double> %mask) {1023; CHECK-LABEL: test_4xdouble_masked_shuff_mem_mask0:1024; CHECK:       # %bb.0:1025; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31026; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k11027; CHECK-NEXT:    vshufpd {{.*#+}} ymm1 {%k1} = ymm0[1],mem[1],ymm0[3],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 1, i32 5, i32 3, 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_shuff_mem_mask0(<4 x double> %vec1, ptr %vec2p, <4 x double> %mask) {1038; CHECK-LABEL: test_4xdouble_zero_masked_shuff_mem_mask0:1039; CHECK:       # %bb.0:1040; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21041; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k11042; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],mem[1],ymm0[3],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 1, i32 5, i32 3, 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_shuff_mem_mask1(<4 x double> %vec1, ptr %vec2p, <4 x double> %vec3, <4 x double> %mask) {1052; CHECK-LABEL: test_4xdouble_masked_shuff_mem_mask1:1053; CHECK:       # %bb.0:1054; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31055; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k11056; CHECK-NEXT:    vshufpd {{.*#+}} ymm1 {%k1} = ymm0[0],mem[1],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 5, 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_shuff_mem_mask1(<4 x double> %vec1, ptr %vec2p, <4 x double> %mask) {1067; CHECK-LABEL: test_4xdouble_zero_masked_shuff_mem_mask1:1068; CHECK:       # %bb.0:1069; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21070; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k11071; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[1],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 5, 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_shuff_mem_mask2(<4 x double> %vec1, ptr %vec2p, <4 x double> %vec3, <4 x double> %mask) {1081; CHECK-LABEL: test_4xdouble_masked_shuff_mem_mask2:1082; CHECK:       # %bb.0:1083; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31084; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k11085; CHECK-NEXT:    vshufpd {{.*#+}} ymm1 {%k1} = ymm0[0],mem[0],ymm0[3],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 3, 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_shuff_mem_mask2(<4 x double> %vec1, ptr %vec2p, <4 x double> %mask) {1096; CHECK-LABEL: test_4xdouble_zero_masked_shuff_mem_mask2:1097; CHECK:       # %bb.0:1098; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21099; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k11100; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 {%k1} {z} = ymm0[0],mem[0],ymm0[3],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 3, 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_shuff_mem_mask3(<4 x double> %vec1, ptr %vec2p) {1110; CHECK-LABEL: test_4xdouble_shuff_mem_mask3:1111; CHECK:       # %bb.0:1112; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 = ymm0[1],mem[1],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 1, i32 5, i32 2, i32 6>1116  ret <4 x double> %res1117}1118define <4 x double> @test_4xdouble_masked_shuff_mem_mask3(<4 x double> %vec1, ptr %vec2p, <4 x double> %vec3, <4 x double> %mask) {1119; CHECK-LABEL: test_4xdouble_masked_shuff_mem_mask3:1120; CHECK:       # %bb.0:1121; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31122; CHECK-NEXT:    vcmpeqpd %ymm3, %ymm2, %k11123; CHECK-NEXT:    vshufpd {{.*#+}} ymm1 {%k1} = ymm0[1],mem[1],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 1, i32 5, 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_shuff_mem_mask3(<4 x double> %vec1, ptr %vec2p, <4 x double> %mask) {1134; CHECK-LABEL: test_4xdouble_zero_masked_shuff_mem_mask3:1135; CHECK:       # %bb.0:1136; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21137; CHECK-NEXT:    vcmpeqpd %ymm2, %ymm1, %k11138; CHECK-NEXT:    vshufpd {{.*#+}} ymm0 {%k1} {z} = ymm0[1],mem[1],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 1, i32 5, 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_shuff_mask0(<8 x double> %vec1, <8 x double> %vec2) {1148; CHECK-LABEL: test_8xdouble_shuff_mask0:1149; CHECK:       # %bb.0:1150; CHECK-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0],zmm1[0],zmm0[2],zmm1[3],zmm0[4],zmm1[5],zmm0[7],zmm1[7]1151; CHECK-NEXT:    retq1152  %res = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 11, i32 4, i32 13, i32 7, i32 15>1153  ret <8 x double> %res1154}1155define <8 x double> @test_8xdouble_masked_shuff_mask0(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %vec3, <8 x double> %mask) {1156; CHECK-LABEL: test_8xdouble_masked_shuff_mask0:1157; CHECK:       # %bb.0:1158; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm41159; CHECK-NEXT:    vcmpeqpd %zmm4, %zmm3, %k11160; CHECK-NEXT:    vshufpd {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[2],zmm1[3],zmm0[4],zmm1[5],zmm0[7],zmm1[7]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 11, i32 4, i32 13, i32 7, i32 15>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_shuff_mask0(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %mask) {1170; CHECK-LABEL: test_8xdouble_zero_masked_shuff_mask0:1171; CHECK:       # %bb.0:1172; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31173; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11174; CHECK-NEXT:    vshufpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[2],zmm1[3],zmm0[4],zmm1[5],zmm0[7],zmm1[7]1175; CHECK-NEXT:    retq1176  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 11, i32 4, i32 13, i32 7, i32 15>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_shuff_mask1(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %vec3, <8 x double> %mask) {1182; CHECK-LABEL: test_8xdouble_masked_shuff_mask1:1183; CHECK:       # %bb.0:1184; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm41185; CHECK-NEXT:    vcmpeqpd %zmm4, %zmm3, %k11186; CHECK-NEXT:    vshufpd {{.*#+}} zmm2 {%k1} = zmm0[0],zmm1[0],zmm0[2],zmm1[3],zmm0[5],zmm1[5],zmm0[6],zmm1[7]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 11, i32 5, i32 13, i32 6, i32 15>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_shuff_mask1(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %mask) {1196; CHECK-LABEL: test_8xdouble_zero_masked_shuff_mask1:1197; CHECK:       # %bb.0:1198; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31199; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11200; CHECK-NEXT:    vshufpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],zmm1[0],zmm0[2],zmm1[3],zmm0[5],zmm1[5],zmm0[6],zmm1[7]1201; CHECK-NEXT:    retq1202  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 0, i32 8, i32 2, i32 11, i32 5, i32 13, i32 6, i32 15>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_shuff_mask2(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %vec3, <8 x double> %mask) {1208; CHECK-LABEL: test_8xdouble_masked_shuff_mask2:1209; CHECK:       # %bb.0:1210; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm41211; CHECK-NEXT:    vcmpeqpd %zmm4, %zmm3, %k11212; CHECK-NEXT:    vshufpd {{.*#+}} zmm2 {%k1} = zmm0[1],zmm1[0],zmm0[3],zmm1[3],zmm0[4],zmm1[5],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 1, i32 8, i32 3, i32 11, i32 4, i32 13, 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_shuff_mask2(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %mask) {1222; CHECK-LABEL: test_8xdouble_zero_masked_shuff_mask2:1223; CHECK:       # %bb.0:1224; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31225; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11226; CHECK-NEXT:    vshufpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],zmm1[0],zmm0[3],zmm1[3],zmm0[4],zmm1[5],zmm0[6],zmm1[6]1227; CHECK-NEXT:    retq1228  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 8, i32 3, i32 11, i32 4, i32 13, 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_shuff_mask3(<8 x double> %vec1, <8 x double> %vec2) {1234; CHECK-LABEL: test_8xdouble_shuff_mask3:1235; CHECK:       # %bb.0:1236; CHECK-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1],zmm1[0],zmm0[3],zmm1[3],zmm0[4],zmm1[4],zmm0[7],zmm1[7]1237; CHECK-NEXT:    retq1238  %res = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 8, i32 3, i32 11, i32 4, i32 12, i32 7, i32 15>1239  ret <8 x double> %res1240}1241define <8 x double> @test_8xdouble_masked_shuff_mask3(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %vec3, <8 x double> %mask) {1242; CHECK-LABEL: test_8xdouble_masked_shuff_mask3:1243; CHECK:       # %bb.0:1244; CHECK-NEXT:    vxorpd %xmm4, %xmm4, %xmm41245; CHECK-NEXT:    vcmpeqpd %zmm4, %zmm3, %k11246; CHECK-NEXT:    vshufpd {{.*#+}} zmm2 {%k1} = zmm0[1],zmm1[0],zmm0[3],zmm1[3],zmm0[4],zmm1[4],zmm0[7],zmm1[7]1247; CHECK-NEXT:    vmovapd %zmm2, %zmm01248; CHECK-NEXT:    retq1249  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 8, i32 3, i32 11, i32 4, i32 12, i32 7, i32 15>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_shuff_mask3(<8 x double> %vec1, <8 x double> %vec2, <8 x double> %mask) {1256; CHECK-LABEL: test_8xdouble_zero_masked_shuff_mask3:1257; CHECK:       # %bb.0:1258; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31259; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11260; CHECK-NEXT:    vshufpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],zmm1[0],zmm0[3],zmm1[3],zmm0[4],zmm1[4],zmm0[7],zmm1[7]1261; CHECK-NEXT:    retq1262  %shuf = shufflevector <8 x double> %vec1, <8 x double> %vec2, <8 x i32> <i32 1, i32 8, i32 3, i32 11, i32 4, i32 12, i32 7, i32 15>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_shuff_mem_mask0(<8 x double> %vec1, ptr %vec2p) {1268; CHECK-LABEL: test_8xdouble_shuff_mem_mask0:1269; CHECK:       # %bb.0:1270; CHECK-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[5],mem[5],zmm0[6],mem[7]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 5, i32 13, i32 6, i32 15>1274  ret <8 x double> %res1275}1276define <8 x double> @test_8xdouble_masked_shuff_mem_mask0(<8 x double> %vec1, ptr %vec2p, <8 x double> %vec3, <8 x double> %mask) {1277; CHECK-LABEL: test_8xdouble_masked_shuff_mem_mask0:1278; CHECK:       # %bb.0:1279; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31280; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11281; CHECK-NEXT:    vshufpd {{.*#+}} zmm1 {%k1} = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[5],mem[5],zmm0[6],mem[7]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 5, i32 13, i32 6, i32 15>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_shuff_mem_mask0(<8 x double> %vec1, ptr %vec2p, <8 x double> %mask) {1292; CHECK-LABEL: test_8xdouble_zero_masked_shuff_mem_mask0:1293; CHECK:       # %bb.0:1294; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21295; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k11296; CHECK-NEXT:    vshufpd {{.*#+}} zmm0 {%k1} {z} = zmm0[0],mem[0],zmm0[2],mem[2],zmm0[5],mem[5],zmm0[6],mem[7]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 5, i32 13, i32 6, i32 15>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_shuff_mem_mask1(<8 x double> %vec1, ptr %vec2p, <8 x double> %vec3, <8 x double> %mask) {1306; CHECK-LABEL: test_8xdouble_masked_shuff_mem_mask1:1307; CHECK:       # %bb.0:1308; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31309; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11310; CHECK-NEXT:    vshufpd {{.*#+}} zmm1 {%k1} = zmm0[1],mem[0],zmm0[3],mem[2],zmm0[4],mem[4],zmm0[7],mem[7]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 1, i32 8, i32 3, i32 10, i32 4, i32 12, i32 7, i32 15>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_shuff_mem_mask1(<8 x double> %vec1, ptr %vec2p, <8 x double> %mask) {1321; CHECK-LABEL: test_8xdouble_zero_masked_shuff_mem_mask1:1322; CHECK:       # %bb.0:1323; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21324; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k11325; CHECK-NEXT:    vshufpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],mem[0],zmm0[3],mem[2],zmm0[4],mem[4],zmm0[7],mem[7]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 1, i32 8, i32 3, i32 10, i32 4, i32 12, i32 7, i32 15>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_shuff_mem_mask2(<8 x double> %vec1, ptr %vec2p, <8 x double> %vec3, <8 x double> %mask) {1335; CHECK-LABEL: test_8xdouble_masked_shuff_mem_mask2:1336; CHECK:       # %bb.0:1337; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31338; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11339; CHECK-NEXT:    vshufpd {{.*#+}} zmm1 {%k1} = zmm0[1],mem[1],zmm0[3],mem[2],zmm0[5],mem[5],zmm0[7],mem[7]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 1, i32 9, i32 3, i32 10, i32 5, i32 13, i32 7, i32 15>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_shuff_mem_mask2(<8 x double> %vec1, ptr %vec2p, <8 x double> %mask) {1350; CHECK-LABEL: test_8xdouble_zero_masked_shuff_mem_mask2:1351; CHECK:       # %bb.0:1352; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21353; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k11354; CHECK-NEXT:    vshufpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],mem[1],zmm0[3],mem[2],zmm0[5],mem[5],zmm0[7],mem[7]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 1, i32 9, i32 3, i32 10, i32 5, i32 13, i32 7, i32 15>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_shuff_mem_mask3(<8 x double> %vec1, ptr %vec2p) {1364; CHECK-LABEL: test_8xdouble_shuff_mem_mask3:1365; CHECK:       # %bb.0:1366; CHECK-NEXT:    vshufpd {{.*#+}} zmm0 = zmm0[1],mem[1],zmm0[2],mem[3],zmm0[4],mem[5],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 1, i32 9, i32 2, i32 11, i32 4, i32 13, i32 6, i32 14>1370  ret <8 x double> %res1371}1372define <8 x double> @test_8xdouble_masked_shuff_mem_mask3(<8 x double> %vec1, ptr %vec2p, <8 x double> %vec3, <8 x double> %mask) {1373; CHECK-LABEL: test_8xdouble_masked_shuff_mem_mask3:1374; CHECK:       # %bb.0:1375; CHECK-NEXT:    vxorpd %xmm3, %xmm3, %xmm31376; CHECK-NEXT:    vcmpeqpd %zmm3, %zmm2, %k11377; CHECK-NEXT:    vshufpd {{.*#+}} zmm1 {%k1} = zmm0[1],mem[1],zmm0[2],mem[3],zmm0[4],mem[5],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 1, i32 9, i32 2, i32 11, i32 4, i32 13, 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_shuff_mem_mask3(<8 x double> %vec1, ptr %vec2p, <8 x double> %mask) {1388; CHECK-LABEL: test_8xdouble_zero_masked_shuff_mem_mask3:1389; CHECK:       # %bb.0:1390; CHECK-NEXT:    vxorpd %xmm2, %xmm2, %xmm21391; CHECK-NEXT:    vcmpeqpd %zmm2, %zmm1, %k11392; CHECK-NEXT:    vshufpd {{.*#+}} zmm0 {%k1} {z} = zmm0[1],mem[1],zmm0[2],mem[3],zmm0[4],mem[5],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 1, i32 9, i32 2, i32 11, i32 4, i32 13, 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 1401