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