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