brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.8 KiB · db3be98 Raw
691 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i386-pc-linux-gnu -mattr=+avx512f,+avx512vl,+avx512bw,+avx512dq | FileCheck %s --check-prefixes=CHECK,AVX512,X86-AVX512,AVX512-SLOW,X86-AVX512-SLOW3; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu -mattr=+avx512f,+avx512vl,+avx512bw,+avx512dq | FileCheck %s --check-prefixes=CHECK,AVX512,X64-AVX512,AVX512-SLOW,X64-AVX512-SLOW4; RUN: llc < %s -mtriple=i386-pc-linux-gnu -mattr=+avx512f,+avx512vl,+avx512bw,+avx512dq,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=CHECK,AVX512,X86-AVX512,AVX512-FAST,X86-AVX512-FAST5; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu -mattr=+avx512f,+avx512vl,+avx512bw,+avx512dq,+fast-variable-crosslane-shuffle,+fast-variable-perlane-shuffle | FileCheck %s --check-prefixes=CHECK,AVX512,X64-AVX512,AVX512-FAST,X64-AVX512-FAST6; RUN: llc < %s -mtriple=i386-pc-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,AVX512F,X86-AVX512F7; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu -mattr=+avx512f | FileCheck %s --check-prefixes=CHECK,AVX512F,X64-AVX512F8 9;expand 128 -> 256 include <4 x float> <2 x double>10define <8 x float> @expand(<4 x float> %a) {11; AVX512-LABEL: expand:12; AVX512:       # %bb.0:13; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm014; AVX512-NEXT:    movb $5, %al15; AVX512-NEXT:    kmovd %eax, %k116; AVX512-NEXT:    vexpandps %ymm0, %ymm0 {%k1} {z}17; AVX512-NEXT:    ret{{[l|q]}}18;19; AVX512F-LABEL: expand:20; AVX512F:       # %bb.0:21; AVX512F-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,1,1,3]22; AVX512F-NEXT:    vxorps %xmm1, %xmm1, %xmm123; AVX512F-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1],ymm0[2],ymm1[3,4,5,6,7]24; AVX512F-NEXT:    ret{{[l|q]}}25   %res = shufflevector <4 x float> %a, <4 x float> zeroinitializer, <8 x i32> <i32 0, i32 5, i32 1, i32 5, i32 5, i32 5, i32 5, i32 5>26   ret <8 x float> %res27}28 29define <8 x float> @expand1(<4 x float> %a ) {30; AVX512-LABEL: expand1:31; AVX512:       # %bb.0:32; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm033; AVX512-NEXT:    movb $-86, %al34; AVX512-NEXT:    kmovd %eax, %k135; AVX512-NEXT:    vexpandps %ymm0, %ymm0 {%k1} {z}36; AVX512-NEXT:    ret{{[l|q]}}37;38; AVX512F-LABEL: expand1:39; AVX512F:       # %bb.0:40; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm041; AVX512F-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [16,0,18,1,20,2,22,3]42; AVX512F-NEXT:    vxorps %xmm2, %xmm2, %xmm243; AVX512F-NEXT:    vpermt2ps %zmm2, %zmm1, %zmm044; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm045; AVX512F-NEXT:    ret{{[l|q]}}46   %res = shufflevector <4 x float> zeroinitializer, <4 x float> %a, <8 x i32> <i32 0, i32 4, i32 1, i32 5, i32 2, i32 6, i32 3, i32 7>47   ret <8 x float> %res48}49 50;Expand 128 -> 256 test <2 x double> -> <4 x double>51define <4 x double> @expand2(<2 x double> %a) {52; CHECK-LABEL: expand2:53; CHECK:       # %bb.0:54; CHECK-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm055; CHECK-NEXT:    vperm2f128 {{.*#+}} ymm1 = zero,zero,ymm0[0,1]56; CHECK-NEXT:    vmovaps %xmm0, %xmm057; CHECK-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]58; CHECK-NEXT:    ret{{[l|q]}}59   %res = shufflevector <2 x double> %a, <2 x double> zeroinitializer, <4 x i32> <i32 0, i32 2, i32 2, i32 1>60   ret <4 x double> %res61}62 63;expand 128 -> 256 include case <4 x i32> <8 x i32>64define <8 x i32> @expand3(<4 x i32> %a ) {65; AVX512-LABEL: expand3:66; AVX512:       # %bb.0:67; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm068; AVX512-NEXT:    movb $-127, %al69; AVX512-NEXT:    kmovd %eax, %k170; AVX512-NEXT:    vpexpandd %ymm0, %ymm0 {%k1} {z}71; AVX512-NEXT:    ret{{[l|q]}}72;73; AVX512F-LABEL: expand3:74; AVX512F:       # %bb.0:75; AVX512F-NEXT:    vbroadcastsd %xmm0, %ymm076; AVX512F-NEXT:    vxorps %xmm1, %xmm1, %xmm177; AVX512F-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0],ymm1[1,2,3,4,5,6],ymm0[7]78; AVX512F-NEXT:    ret{{[l|q]}}79   %res = shufflevector <4 x i32> zeroinitializer, <4 x i32> %a, <8 x i32> <i32 4, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0,i32 5>80   ret <8 x i32> %res81}82 83;expand 128 -> 256 include case <2 x i64> <4 x i64>84define <4 x i64> @expand4(<2 x i64> %a ) {85; AVX512-LABEL: expand4:86; AVX512:       # %bb.0:87; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm088; AVX512-NEXT:    movb $9, %al89; AVX512-NEXT:    kmovd %eax, %k190; AVX512-NEXT:    vpexpandq %ymm0, %ymm0 {%k1} {z}91; AVX512-NEXT:    ret{{[l|q]}}92;93; AVX512F-LABEL: expand4:94; AVX512F:       # %bb.0:95; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm096; AVX512F-NEXT:    vperm2f128 {{.*#+}} ymm1 = zero,zero,ymm0[0,1]97; AVX512F-NEXT:    vmovaps %xmm0, %xmm098; AVX512F-NEXT:    vblendps {{.*#+}} ymm0 = ymm0[0,1],ymm1[2,3],ymm0[4,5],ymm1[6,7]99; AVX512F-NEXT:    ret{{[l|q]}}100   %res = shufflevector <2 x i64> zeroinitializer, <2 x i64> %a, <4 x i32> <i32 2, i32 0, i32 0, i32 3>101   ret <4 x i64> %res102}103 104;Negative test for 128-> 256105define <8 x float> @expand5(<4 x float> %a ) {106; AVX512-SLOW-LABEL: expand5:107; AVX512-SLOW:       # %bb.0:108; AVX512-SLOW-NEXT:    vbroadcastss %xmm0, %ymm0109; AVX512-SLOW-NEXT:    vxorps %xmm1, %xmm1, %xmm1110; AVX512-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]111; AVX512-SLOW-NEXT:    ret{{[l|q]}}112;113; AVX512-FAST-LABEL: expand5:114; AVX512-FAST:       # %bb.0:115; AVX512-FAST-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0116; AVX512-FAST-NEXT:    vxorps %xmm1, %xmm1, %xmm1117; AVX512-FAST-NEXT:    vpmovsxbq {{.*#+}} ymm2 = [8,10,12,14]118; AVX512-FAST-NEXT:    vpermt2ps %ymm1, %ymm2, %ymm0119; AVX512-FAST-NEXT:    ret{{[l|q]}}120;121; AVX512F-LABEL: expand5:122; AVX512F:       # %bb.0:123; AVX512F-NEXT:    vbroadcastss %xmm0, %ymm0124; AVX512F-NEXT:    vxorps %xmm1, %xmm1, %xmm1125; AVX512F-NEXT:    vblendps {{.*#+}} ymm0 = ymm1[0],ymm0[1],ymm1[2],ymm0[3],ymm1[4],ymm0[5],ymm1[6],ymm0[7]126; AVX512F-NEXT:    ret{{[l|q]}}127   %res = shufflevector <4 x float> zeroinitializer, <4 x float> %a, <8 x i32> <i32 0, i32 4, i32 1, i32 4, i32 2, i32 4, i32 3, i32 4>128   ret <8 x float> %res129}130 131;expand 256 -> 512 include <8 x float> <16 x float>132define <8 x float> @expand6(<4 x float> %a ) {133; CHECK-LABEL: expand6:134; CHECK:       # %bb.0:135; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1136; CHECK-NEXT:    vinsertf128 $1, %xmm0, %ymm1, %ymm0137; CHECK-NEXT:    ret{{[l|q]}}138   %res = shufflevector <4 x float> zeroinitializer, <4 x float> %a, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>139   ret <8 x float> %res140}141 142define <16 x float> @expand7(<8 x float> %a) {143; AVX512-LABEL: expand7:144; AVX512:       # %bb.0:145; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0146; AVX512-NEXT:    movw $1285, %ax # imm = 0x505147; AVX512-NEXT:    kmovd %eax, %k1148; AVX512-NEXT:    vexpandps %zmm0, %zmm0 {%k1} {z}149; AVX512-NEXT:    ret{{[l|q]}}150;151; AVX512F-LABEL: expand7:152; AVX512F:       # %bb.0:153; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0154; AVX512F-NEXT:    movw $1285, %ax # imm = 0x505155; AVX512F-NEXT:    kmovw %eax, %k1156; AVX512F-NEXT:    vexpandps %zmm0, %zmm0 {%k1} {z}157; AVX512F-NEXT:    ret{{[l|q]}}158   %res = shufflevector <8 x float> %a, <8 x float> zeroinitializer, <16 x i32> <i32 0, i32 8, i32 1, i32 8, i32 8, i32 8, i32 8, i32 8, i32 2, i32 8, i32 3, i32 8, i32 8, i32 8, i32 8, i32 8>159   ret <16 x float> %res160}161 162define <16 x float> @expand8(<8 x float> %a ) {163; AVX512-LABEL: expand8:164; AVX512:       # %bb.0:165; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0166; AVX512-NEXT:    movw $-21846, %ax # imm = 0xAAAA167; AVX512-NEXT:    kmovd %eax, %k1168; AVX512-NEXT:    vexpandps %zmm0, %zmm0 {%k1} {z}169; AVX512-NEXT:    ret{{[l|q]}}170;171; AVX512F-LABEL: expand8:172; AVX512F:       # %bb.0:173; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0174; AVX512F-NEXT:    movw $-21846, %ax # imm = 0xAAAA175; AVX512F-NEXT:    kmovw %eax, %k1176; AVX512F-NEXT:    vexpandps %zmm0, %zmm0 {%k1} {z}177; AVX512F-NEXT:    ret{{[l|q]}}178   %res = shufflevector <8 x float> zeroinitializer, <8 x float> %a, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>179   ret <16 x float> %res180}181 182;expand 256 -> 512 include <4 x double> <8 x double>183define <8 x double> @expand9(<4 x double> %a) {184; AVX512-LABEL: expand9:185; AVX512:       # %bb.0:186; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0187; AVX512-NEXT:    movb $-127, %al188; AVX512-NEXT:    kmovd %eax, %k1189; AVX512-NEXT:    vexpandpd %zmm0, %zmm0 {%k1} {z}190; AVX512-NEXT:    ret{{[l|q]}}191;192; AVX512F-LABEL: expand9:193; AVX512F:       # %bb.0:194; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0195; AVX512F-NEXT:    movb $-127, %al196; AVX512F-NEXT:    kmovw %eax, %k1197; AVX512F-NEXT:    vexpandpd %zmm0, %zmm0 {%k1} {z}198; AVX512F-NEXT:    ret{{[l|q]}}199   %res = shufflevector <4 x double> %a, <4 x double> zeroinitializer, <8 x i32> <i32 0, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 1>200   ret <8 x double> %res201}202 203define <16 x i32> @expand10(<8 x i32> %a ) {204; AVX512-LABEL: expand10:205; AVX512:       # %bb.0:206; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0207; AVX512-NEXT:    movw $-21846, %ax # imm = 0xAAAA208; AVX512-NEXT:    kmovd %eax, %k1209; AVX512-NEXT:    vpexpandd %zmm0, %zmm0 {%k1} {z}210; AVX512-NEXT:    ret{{[l|q]}}211;212; AVX512F-LABEL: expand10:213; AVX512F:       # %bb.0:214; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0215; AVX512F-NEXT:    movw $-21846, %ax # imm = 0xAAAA216; AVX512F-NEXT:    kmovw %eax, %k1217; AVX512F-NEXT:    vpexpandd %zmm0, %zmm0 {%k1} {z}218; AVX512F-NEXT:    ret{{[l|q]}}219   %res = shufflevector <8 x i32> zeroinitializer, <8 x i32> %a, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>220   ret <16 x i32> %res221}222 223define <8 x i64> @expand11(<4 x i64> %a) {224; AVX512-LABEL: expand11:225; AVX512:       # %bb.0:226; AVX512-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0227; AVX512-NEXT:    movb $-127, %al228; AVX512-NEXT:    kmovd %eax, %k1229; AVX512-NEXT:    vpexpandq %zmm0, %zmm0 {%k1} {z}230; AVX512-NEXT:    ret{{[l|q]}}231;232; AVX512F-LABEL: expand11:233; AVX512F:       # %bb.0:234; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0235; AVX512F-NEXT:    movb $-127, %al236; AVX512F-NEXT:    kmovw %eax, %k1237; AVX512F-NEXT:    vpexpandq %zmm0, %zmm0 {%k1} {z}238; AVX512F-NEXT:    ret{{[l|q]}}239   %res = shufflevector <4 x i64> %a, <4 x i64> zeroinitializer, <8 x i32> <i32 0, i32 4, i32 4, i32 4, i32 4, i32 4, i32 4, i32 1>240   ret <8 x i64> %res241}242 243;Negative test for 256-> 512244define <16 x float> @expand12(<8 x float> %a) {245; CHECK-LABEL: expand12:246; CHECK:       # %bb.0:247; CHECK-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0248; CHECK-NEXT:    vpmovsxbd {{.*#+}} zmm2 = [0,16,2,16,4,16,6,16,0,16,1,16,2,16,3,16]249; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1250; CHECK-NEXT:    vpermt2ps %zmm0, %zmm2, %zmm1251; CHECK-NEXT:    vmovaps %zmm1, %zmm0252; CHECK-NEXT:    ret{{[l|q]}}253   %res = shufflevector <8 x float> zeroinitializer, <8 x float> %a, <16 x i32> <i32 0, i32 8, i32 1, i32 8, i32 2, i32 8, i32 3, i32 8,i32 0, i32 8, i32 1, i32 8, i32 2, i32 8, i32 3, i32 8>254   ret <16 x float> %res255}256 257define <16 x float> @expand13(<8 x float> %a ) {258; CHECK-LABEL: expand13:259; CHECK:       # %bb.0:260; CHECK-NEXT:    vxorps %xmm1, %xmm1, %xmm1261; CHECK-NEXT:    vinsertf64x4 $1, %ymm0, %zmm1, %zmm0262; CHECK-NEXT:    ret{{[l|q]}}263   %res = shufflevector <8 x float> zeroinitializer, <8 x float> %a, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7,i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>264   ret <16 x float> %res265}266 267; The function checks for a case where the vector is mixed values vector ,and the mask points on zero elements from this vector.268 269define <8 x float> @expand14(<4 x float> %a) {270; AVX512-LABEL: expand14:271; AVX512:       # %bb.0:272; AVX512-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0273; AVX512-NEXT:    movb $20, %al274; AVX512-NEXT:    kmovd %eax, %k1275; AVX512-NEXT:    vexpandps %ymm0, %ymm0 {%k1} {z}276; AVX512-NEXT:    ret{{[l|q]}}277;278; AVX512F-LABEL: expand14:279; AVX512F:       # %bb.0:280; AVX512F-NEXT:    # kill: def $xmm0 killed $xmm0 def $zmm0281; AVX512F-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [16,17,0,19,1,21,22,23]282; AVX512F-NEXT:    vxorps %xmm2, %xmm2, %xmm2283; AVX512F-NEXT:    vpermt2ps %zmm2, %zmm1, %zmm0284; AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0285; AVX512F-NEXT:    ret{{[l|q]}}286   %addV = fadd <4 x float> <float 0.0,float 1.0,float 2.0,float 0.0> , <float 0.0,float 1.0,float 2.0,float 0.0>287   %res = shufflevector <4 x float> %addV, <4 x float> %a, <8 x i32> <i32 3, i32 3, i32 4, i32 0, i32 5, i32 0, i32 0, i32 0>288   ret <8 x float> %res289}290 291;Negative test.292define <8 x float> @expand15(<4 x float> %a) {293; AVX512-SLOW-LABEL: expand15:294; AVX512-SLOW:       # %bb.0:295; AVX512-SLOW-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,1,1,3]296; AVX512-SLOW-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,3]297; AVX512-SLOW-NEXT:    vblendps {{.*#+}} ymm0 = mem[0,1],ymm0[2],mem[3],ymm0[4],mem[5,6,7]298; AVX512-SLOW-NEXT:    ret{{[l|q]}}299;300; AVX512-FAST-LABEL: expand15:301; AVX512-FAST:       # %bb.0:302; AVX512-FAST-NEXT:    # kill: def $xmm0 killed $xmm0 def $ymm0303; AVX512-FAST-NEXT:    vpmovsxbq {{.*#+}} ymm1 = [0,0,1,0]304; AVX512-FAST-NEXT:    vpermps %ymm0, %ymm1, %ymm0305; AVX512-FAST-NEXT:    vblendps {{.*#+}} ymm0 = mem[0,1],ymm0[2],mem[3],ymm0[4],mem[5,6,7]306; AVX512-FAST-NEXT:    ret{{[l|q]}}307;308; AVX512F-LABEL: expand15:309; AVX512F:       # %bb.0:310; AVX512F-NEXT:    vshufps {{.*#+}} xmm0 = xmm0[0,1,1,3]311; AVX512F-NEXT:    vpermpd {{.*#+}} ymm0 = ymm0[0,0,1,3]312; AVX512F-NEXT:    vblendps {{.*#+}} ymm0 = mem[0,1],ymm0[2],mem[3],ymm0[4],mem[5,6,7]313; AVX512F-NEXT:    ret{{[l|q]}}314   %addV = fadd <4 x float> <float 0.0,float 1.0,float 2.0,float 0.0> , <float 0.0,float 1.0,float 2.0,float 0.0>315   %res = shufflevector <4 x float> %addV, <4 x float> %a, <8 x i32> <i32 0, i32 1, i32 4, i32 0, i32 5, i32 0, i32 0, i32 0>316   ret <8 x float> %res317}318 319; Shuffle to blend test320 321define <64 x i8> @test_mm512_mask_blend_epi8(<64 x i8> %A, <64 x i8> %W){322; X86-AVX512-LABEL: test_mm512_mask_blend_epi8:323; X86-AVX512:       # %bb.0: # %entry324; X86-AVX512-NEXT:    movl $-1431655766, %eax # imm = 0xAAAAAAAA325; X86-AVX512-NEXT:    kmovd %eax, %k0326; X86-AVX512-NEXT:    kunpckdq %k0, %k0, %k1327; X86-AVX512-NEXT:    vpblendmb %zmm0, %zmm1, %zmm0 {%k1}328; X86-AVX512-NEXT:    retl329;330; X64-AVX512-LABEL: test_mm512_mask_blend_epi8:331; X64-AVX512:       # %bb.0: # %entry332; X64-AVX512-NEXT:    movabsq $-6148914691236517206, %rax # imm = 0xAAAAAAAAAAAAAAAA333; X64-AVX512-NEXT:    kmovq %rax, %k1334; X64-AVX512-NEXT:    vpblendmb %zmm0, %zmm1, %zmm0 {%k1}335; X64-AVX512-NEXT:    retq336;337; AVX512F-LABEL: test_mm512_mask_blend_epi8:338; AVX512F:       # %bb.0: # %entry339; AVX512F-NEXT:    vpbroadcastw {{.*#+}} ymm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]340; AVX512F-NEXT:    vinserti64x4 $1, %ymm2, %zmm2, %zmm2341; AVX512F-NEXT:    vpternlogq {{.*#+}} zmm0 = zmm0 ^ (zmm2 & (zmm0 ^ zmm1))342; AVX512F-NEXT:    ret{{[l|q]}}343entry:344  %0 = shufflevector <64 x i8> %A, <64 x i8> %W, <64 x i32>  <i32 64, i32 1, i32 66, i32 3, i32 68, i32 5, i32 70, i32 7, i32 72, i32 9, i32 74, i32 11, i32 76, i32 13, i32 78, i32 15, i32 80, i32 17, i32 82, i32 19, i32 84, i32 21, i32 86, i32 23, i32 88, i32 25, i32 90, i32 27, i32 92, i32 29, i32 94, i32 31, i32 96, i32 33, i32 98, i32 35, i32 100, i32 37, i32 102, i32 39, i32 104, i32 41, i32 106, i32 43, i32 108, i32 45, i32 110, i32 47, i32 112, i32 49, i32 114, i32 51, i32 116, i32 53, i32 118, i32 55, i32 120, i32 57, i32 122, i32 59, i32 124, i32 61, i32 126, i32 63>345  ret <64 x i8> %0346}347 348define <32 x i16> @test_mm512_mask_blend_epi16(<32 x i16> %A, <32 x i16> %W){349; AVX512-LABEL: test_mm512_mask_blend_epi16:350; AVX512:       # %bb.0: # %entry351; AVX512-NEXT:    movl $-1431655766, %eax # imm = 0xAAAAAAAA352; AVX512-NEXT:    kmovd %eax, %k1353; AVX512-NEXT:    vpblendmw %zmm0, %zmm1, %zmm0 {%k1}354; AVX512-NEXT:    ret{{[l|q]}}355;356; AVX512F-LABEL: test_mm512_mask_blend_epi16:357; AVX512F:       # %bb.0: # %entry358; AVX512F-NEXT:    vpternlogd {{.*#+}} zmm0 = zmm0 ^ (m32bcst & (zmm0 ^ zmm1))359; AVX512F-NEXT:    ret{{[l|q]}}360entry:361  %0 = shufflevector <32 x i16> %A, <32 x i16> %W, <32 x i32>  <i32 32, i32 1, i32 34, i32 3, i32 36, i32 5, i32 38, i32 7, i32 40, i32 9, i32 42, i32 11, i32 44, i32 13, i32 46, i32 15, i32 48, i32 17, i32 50, i32 19, i32 52, i32 21, i32 54, i32 23, i32 56, i32 25, i32 58, i32 27, i32 60, i32 29, i32 62, i32 31>362  ret <32 x i16> %0363}364 365define <16 x i32> @test_mm512_mask_blend_epi32(<16 x i32> %A, <16 x i32> %W){366; AVX512-LABEL: test_mm512_mask_blend_epi32:367; AVX512:       # %bb.0: # %entry368; AVX512-NEXT:    movw $-21846, %ax # imm = 0xAAAA369; AVX512-NEXT:    kmovd %eax, %k1370; AVX512-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}371; AVX512-NEXT:    ret{{[l|q]}}372;373; AVX512F-LABEL: test_mm512_mask_blend_epi32:374; AVX512F:       # %bb.0: # %entry375; AVX512F-NEXT:    movw $-21846, %ax # imm = 0xAAAA376; AVX512F-NEXT:    kmovw %eax, %k1377; AVX512F-NEXT:    vpblendmd %zmm0, %zmm1, %zmm0 {%k1}378; AVX512F-NEXT:    ret{{[l|q]}}379entry:380  %0 = shufflevector <16 x i32> %A, <16 x i32> %W, <16 x i32>  <i32 16, i32 1, i32 18, i32 3, i32 20, i32 5, i32 22, i32 7, i32 24, i32 9, i32 26, i32 11, i32 28, i32 13, i32 30, i32 15>381  ret <16 x i32> %0382}383 384define <8 x i64> @test_mm512_mask_blend_epi64(<8 x i64> %A, <8 x i64> %W){385; AVX512-LABEL: test_mm512_mask_blend_epi64:386; AVX512:       # %bb.0: # %entry387; AVX512-NEXT:    movb $-86, %al388; AVX512-NEXT:    kmovd %eax, %k1389; AVX512-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}390; AVX512-NEXT:    ret{{[l|q]}}391;392; AVX512F-LABEL: test_mm512_mask_blend_epi64:393; AVX512F:       # %bb.0: # %entry394; AVX512F-NEXT:    movb $-86, %al395; AVX512F-NEXT:    kmovw %eax, %k1396; AVX512F-NEXT:    vpblendmq %zmm0, %zmm1, %zmm0 {%k1}397; AVX512F-NEXT:    ret{{[l|q]}}398entry:399  %0 = shufflevector <8 x i64> %A, <8 x i64> %W, <8 x i32>  <i32 8, i32 1, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>400  ret <8 x i64> %0401}402 403define <16 x float> @test_mm512_mask_blend_ps(<16 x float> %A, <16 x float> %W){404; AVX512-LABEL: test_mm512_mask_blend_ps:405; AVX512:       # %bb.0: # %entry406; AVX512-NEXT:    movw $-21846, %ax # imm = 0xAAAA407; AVX512-NEXT:    kmovd %eax, %k1408; AVX512-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1}409; AVX512-NEXT:    ret{{[l|q]}}410;411; AVX512F-LABEL: test_mm512_mask_blend_ps:412; AVX512F:       # %bb.0: # %entry413; AVX512F-NEXT:    movw $-21846, %ax # imm = 0xAAAA414; AVX512F-NEXT:    kmovw %eax, %k1415; AVX512F-NEXT:    vblendmps %zmm0, %zmm1, %zmm0 {%k1}416; AVX512F-NEXT:    ret{{[l|q]}}417entry:418  %0 = shufflevector <16 x float> %A, <16 x float> %W, <16 x i32>  <i32 16, i32 1, i32 18, i32 3, i32 20, i32 5, i32 22, i32 7, i32 24, i32 9, i32 26, i32 11, i32 28, i32 13, i32 30, i32 15>419  ret <16 x float> %0420}421 422define <8 x double> @test_mm512_mask_blend_pd(<8 x double> %A, <8 x double> %W){423; AVX512-LABEL: test_mm512_mask_blend_pd:424; AVX512:       # %bb.0: # %entry425; AVX512-NEXT:    movb $-88, %al426; AVX512-NEXT:    kmovd %eax, %k1427; AVX512-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1}428; AVX512-NEXT:    ret{{[l|q]}}429;430; AVX512F-LABEL: test_mm512_mask_blend_pd:431; AVX512F:       # %bb.0: # %entry432; AVX512F-NEXT:    movb $-88, %al433; AVX512F-NEXT:    kmovw %eax, %k1434; AVX512F-NEXT:    vblendmpd %zmm0, %zmm1, %zmm0 {%k1}435; AVX512F-NEXT:    ret{{[l|q]}}436entry:437  %0 = shufflevector <8 x double> %A, <8 x double> %W, <8 x i32>  <i32 8, i32 9, i32 10, i32 3, i32 12, i32 5, i32 14, i32 7>438  ret <8 x double> %0439}440 441 442define <32 x i8> @test_mm256_mask_blend_epi8(<32 x i8> %A, <32 x i8> %W){443; AVX512-LABEL: test_mm256_mask_blend_epi8:444; AVX512:       # %bb.0: # %entry445; AVX512-NEXT:    movl $-1431655766, %eax # imm = 0xAAAAAAAA446; AVX512-NEXT:    kmovd %eax, %k1447; AVX512-NEXT:    vpblendmb %ymm0, %ymm1, %ymm0 {%k1}448; AVX512-NEXT:    ret{{[l|q]}}449;450; AVX512F-LABEL: test_mm256_mask_blend_epi8:451; AVX512F:       # %bb.0: # %entry452; AVX512F-NEXT:    vpbroadcastw {{.*#+}} ymm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]453; AVX512F-NEXT:    vpblendvb %ymm2, %ymm1, %ymm0, %ymm0454; AVX512F-NEXT:    ret{{[l|q]}}455entry:456  %0 = shufflevector <32 x i8> %A, <32 x i8> %W, <32 x i32>  <i32 32, i32 1, i32 34, i32 3, i32 36, i32 5, i32 38, i32 7, i32 40, i32 9, i32 42, i32 11, i32 44, i32 13, i32 46, i32 15, i32 48, i32 17, i32 50, i32 19, i32 52, i32 21, i32 54, i32 23, i32 56, i32 25, i32 58, i32 27, i32 60, i32 29, i32 62, i32 31>457  ret <32 x i8> %0458}459 460define <16 x i8> @test_mm_mask_blend_epi8(<16 x i8> %A, <16 x i8> %W){461; AVX512-LABEL: test_mm_mask_blend_epi8:462; AVX512:       # %bb.0: # %entry463; AVX512-NEXT:    movw $-21846, %ax # imm = 0xAAAA464; AVX512-NEXT:    kmovd %eax, %k1465; AVX512-NEXT:    vpblendmb %xmm0, %xmm1, %xmm0 {%k1}466; AVX512-NEXT:    ret{{[l|q]}}467;468; AVX512F-LABEL: test_mm_mask_blend_epi8:469; AVX512F:       # %bb.0: # %entry470; AVX512F-NEXT:    vpbroadcastw {{.*#+}} xmm2 = [255,0,255,0,255,0,255,0,255,0,255,0,255,0,255,0]471; AVX512F-NEXT:    vpblendvb %xmm2, %xmm1, %xmm0, %xmm0472; AVX512F-NEXT:    ret{{[l|q]}}473entry:474  %0 = shufflevector <16 x i8> %A, <16 x i8> %W, <16 x i32>  <i32 16, i32 1, i32 18, i32 3, i32 20, i32 5, i32 22, i32 7, i32 24, i32 9, i32 26, i32 11, i32 28, i32 13, i32 30, i32 15>475  ret <16 x i8> %0476}477 478; PR34370479define <8 x float> @test_masked_permps_v8f32(ptr %vp, <8 x float> %vec2) {480; X86-AVX512-LABEL: test_masked_permps_v8f32:481; X86-AVX512:       # %bb.0:482; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax483; X86-AVX512-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [15,14,11,3,15,14,6,7]484; X86-AVX512-NEXT:    vpermt2ps (%eax), %ymm1, %ymm0485; X86-AVX512-NEXT:    retl486;487; X64-AVX512-LABEL: test_masked_permps_v8f32:488; X64-AVX512:       # %bb.0:489; X64-AVX512-NEXT:    vpmovsxbd {{.*#+}} ymm1 = [15,14,11,3,15,14,6,7]490; X64-AVX512-NEXT:    vpermt2ps (%rdi), %ymm1, %ymm0491; X64-AVX512-NEXT:    retq492;493; X86-AVX512F-LABEL: test_masked_permps_v8f32:494; X86-AVX512F:       # %bb.0:495; X86-AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0496; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %eax497; X86-AVX512F-NEXT:    vmovaps (%eax), %ymm1498; X86-AVX512F-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [23,22,19,3,23,22,6,7]499; X86-AVX512F-NEXT:    vpermt2ps %zmm1, %zmm2, %zmm0500; X86-AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0501; X86-AVX512F-NEXT:    retl502;503; X64-AVX512F-LABEL: test_masked_permps_v8f32:504; X64-AVX512F:       # %bb.0:505; X64-AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0506; X64-AVX512F-NEXT:    vmovaps (%rdi), %ymm1507; X64-AVX512F-NEXT:    vpmovsxbd {{.*#+}} ymm2 = [23,22,19,3,23,22,6,7]508; X64-AVX512F-NEXT:    vpermt2ps %zmm1, %zmm2, %zmm0509; X64-AVX512F-NEXT:    # kill: def $ymm0 killed $ymm0 killed $zmm0510; X64-AVX512F-NEXT:    retq511  %vec = load <8 x float>, ptr %vp512  %shuf = shufflevector <8 x float> %vec, <8 x float> undef, <8 x i32> <i32 7, i32 6, i32 3, i32 0, i32 7, i32 6, i32 3, i32 0>513  %res = select <8 x i1> <i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 0>, <8 x float> %shuf, <8 x float> %vec2514  ret <8 x float> %res515}516 517define <16 x float> @test_masked_permps_v16f32(ptr %vp, <16 x float> %vec2) {518; X86-AVX512-LABEL: test_masked_permps_v16f32:519; X86-AVX512:       # %bb.0:520; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax521; X86-AVX512-NEXT:    vpmovsxbd {{.*#+}} zmm1 = [31,29,27,3,30,28,6,7,23,22,19,11,23,13,19,15]522; X86-AVX512-NEXT:    vpermt2ps (%eax), %zmm1, %zmm0523; X86-AVX512-NEXT:    retl524;525; X64-AVX512-LABEL: test_masked_permps_v16f32:526; X64-AVX512:       # %bb.0:527; X64-AVX512-NEXT:    vpmovsxbd {{.*#+}} zmm1 = [31,29,27,3,30,28,6,7,23,22,19,11,23,13,19,15]528; X64-AVX512-NEXT:    vpermt2ps (%rdi), %zmm1, %zmm0529; X64-AVX512-NEXT:    retq530;531; X86-AVX512F-LABEL: test_masked_permps_v16f32:532; X86-AVX512F:       # %bb.0:533; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %eax534; X86-AVX512F-NEXT:    vpmovsxbd {{.*#+}} zmm1 = [31,29,27,3,30,28,6,7,23,22,19,11,23,13,19,15]535; X86-AVX512F-NEXT:    vpermt2ps (%eax), %zmm1, %zmm0536; X86-AVX512F-NEXT:    retl537;538; X64-AVX512F-LABEL: test_masked_permps_v16f32:539; X64-AVX512F:       # %bb.0:540; X64-AVX512F-NEXT:    vpmovsxbd {{.*#+}} zmm1 = [31,29,27,3,30,28,6,7,23,22,19,11,23,13,19,15]541; X64-AVX512F-NEXT:    vpermt2ps (%rdi), %zmm1, %zmm0542; X64-AVX512F-NEXT:    retq543  %vec = load <16 x float>, ptr %vp544  %shuf = shufflevector <16 x float> %vec, <16 x float> undef, <16 x i32> <i32 15, i32 13, i32 11, i32 9, i32 14, i32 12, i32 10, i32 8, i32 7, i32 6, i32 3, i32 0, i32 7, i32 6, i32 3, i32 0>545  %res = select <16 x i1> <i1 1, i1 1, i1 1, i1 0, i1 1, i1 1, i1 0, i1 0, i1 1, i1 1, i1 1, i1 0, i1 1, i1 0, i1 1, i1 0>, <16 x float> %shuf, <16 x float> %vec2546  ret <16 x float> %res547}548 549define void @test_demandedelts_pshufb_v32i8_v16i8(ptr %src, ptr %dst) {550; X86-AVX512-SLOW-LABEL: test_demandedelts_pshufb_v32i8_v16i8:551; X86-AVX512-SLOW:       # %bb.0:552; X86-AVX512-SLOW-NEXT:    movl {{[0-9]+}}(%esp), %eax553; X86-AVX512-SLOW-NEXT:    movl {{[0-9]+}}(%esp), %ecx554; X86-AVX512-SLOW-NEXT:    vpbroadcastd 44(%ecx), %xmm0555; X86-AVX512-SLOW-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero556; X86-AVX512-SLOW-NEXT:    vmovdqa %ymm0, 672(%eax)557; X86-AVX512-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = mem[1,0,2,3]558; X86-AVX512-SLOW-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero559; X86-AVX512-SLOW-NEXT:    vmovdqa %ymm0, 832(%eax)560; X86-AVX512-SLOW-NEXT:    vzeroupper561; X86-AVX512-SLOW-NEXT:    retl562;563; X64-AVX512-SLOW-LABEL: test_demandedelts_pshufb_v32i8_v16i8:564; X64-AVX512-SLOW:       # %bb.0:565; X64-AVX512-SLOW-NEXT:    vpbroadcastd 44(%rdi), %xmm0566; X64-AVX512-SLOW-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero567; X64-AVX512-SLOW-NEXT:    vmovdqa %ymm0, 672(%rsi)568; X64-AVX512-SLOW-NEXT:    vpshufd {{.*#+}} xmm0 = mem[1,0,2,3]569; X64-AVX512-SLOW-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero570; X64-AVX512-SLOW-NEXT:    vmovdqa %ymm0, 832(%rsi)571; X64-AVX512-SLOW-NEXT:    vzeroupper572; X64-AVX512-SLOW-NEXT:    retq573;574; X86-AVX512-FAST-LABEL: test_demandedelts_pshufb_v32i8_v16i8:575; X86-AVX512-FAST:       # %bb.0:576; X86-AVX512-FAST-NEXT:    movl {{[0-9]+}}(%esp), %eax577; X86-AVX512-FAST-NEXT:    movl {{[0-9]+}}(%esp), %ecx578; X86-AVX512-FAST-NEXT:    vpbroadcastd 44(%ecx), %xmm0579; X86-AVX512-FAST-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero580; X86-AVX512-FAST-NEXT:    vmovdqa %ymm0, 672(%eax)581; X86-AVX512-FAST-NEXT:    vmovdqa 208(%ecx), %xmm0582; X86-AVX512-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,2,3],zero,zero,zero,zero,zero,zero,zero,zero583; X86-AVX512-FAST-NEXT:    vmovdqa %ymm0, 832(%eax)584; X86-AVX512-FAST-NEXT:    vzeroupper585; X86-AVX512-FAST-NEXT:    retl586;587; X64-AVX512-FAST-LABEL: test_demandedelts_pshufb_v32i8_v16i8:588; X64-AVX512-FAST:       # %bb.0:589; X64-AVX512-FAST-NEXT:    vpbroadcastd 44(%rdi), %xmm0590; X64-AVX512-FAST-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero591; X64-AVX512-FAST-NEXT:    vmovdqa %ymm0, 672(%rsi)592; X64-AVX512-FAST-NEXT:    vmovdqa 208(%rdi), %xmm0593; X64-AVX512-FAST-NEXT:    vpshufb {{.*#+}} xmm0 = xmm0[4,5,6,7,0,1,2,3],zero,zero,zero,zero,zero,zero,zero,zero594; X64-AVX512-FAST-NEXT:    vmovdqa %ymm0, 832(%rsi)595; X64-AVX512-FAST-NEXT:    vzeroupper596; X64-AVX512-FAST-NEXT:    retq597;598; X86-AVX512F-LABEL: test_demandedelts_pshufb_v32i8_v16i8:599; X86-AVX512F:       # %bb.0:600; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %eax601; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %ecx602; X86-AVX512F-NEXT:    vpbroadcastd 44(%ecx), %xmm0603; X86-AVX512F-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero604; X86-AVX512F-NEXT:    vmovdqa %ymm0, 672(%eax)605; X86-AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = mem[1,0,2,3]606; X86-AVX512F-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero607; X86-AVX512F-NEXT:    vmovdqa %ymm0, 832(%eax)608; X86-AVX512F-NEXT:    vzeroupper609; X86-AVX512F-NEXT:    retl610;611; X64-AVX512F-LABEL: test_demandedelts_pshufb_v32i8_v16i8:612; X64-AVX512F:       # %bb.0:613; X64-AVX512F-NEXT:    vpbroadcastd 44(%rdi), %xmm0614; X64-AVX512F-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero615; X64-AVX512F-NEXT:    vmovdqa %ymm0, 672(%rsi)616; X64-AVX512F-NEXT:    vpshufd {{.*#+}} xmm0 = mem[1,0,2,3]617; X64-AVX512F-NEXT:    vmovq {{.*#+}} xmm0 = xmm0[0],zero618; X64-AVX512F-NEXT:    vmovdqa %ymm0, 832(%rsi)619; X64-AVX512F-NEXT:    vzeroupper620; X64-AVX512F-NEXT:    retq621  %t87 = load <16 x i32>, ptr %src, align 64622  %t88 = extractelement <16 x i32> %t87, i64 11623  %t89 = insertelement <8 x i32> <i32 undef, i32 undef, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>, i32 %t88, i64 0624  %t90 = insertelement <8 x i32> %t89, i32 %t88, i64 1625  %ptridx49.i = getelementptr inbounds <8 x i32>, ptr %dst, i64 21626  store <8 x i32> %t90, ptr %ptridx49.i, align 32627  %ptridx56.i = getelementptr inbounds <2 x i32>, ptr %src, i64 24628  %t09 = load <16 x i32>, ptr %ptridx56.i, align 64629  %t10 = extractelement <16 x i32> %t09, i64 5630  %t11 = insertelement <8 x i32> <i32 undef, i32 undef, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0>, i32 %t10, i64 0631  %t12 = extractelement <16 x i32> %t09, i64 4632  %t13 = insertelement <8 x i32> %t11, i32 %t12, i64 1633  %ptridx64.i = getelementptr inbounds <8 x i32>, ptr %dst, i64 26634  store <8 x i32> %t13, ptr %ptridx64.i, align 32635  ret void636}637 638define <32 x float> @PR47534(<8 x float> %tmp) {639; CHECK-LABEL: PR47534:640; CHECK:       # %bb.0:641; CHECK-NEXT:    # kill: def $ymm0 killed $ymm0 def $zmm0642; CHECK-NEXT:    vxorps %xmm2, %xmm2, %xmm2643; CHECK-NEXT:    vpmovsxbd {{.*#+}} zmm1 = [7,17,18,19,7,21,22,23,0,25,26,27,0,29,30,31]644; CHECK-NEXT:    vpermi2ps %zmm2, %zmm0, %zmm1645; CHECK-NEXT:    ret{{[l|q]}}646  %tmp1 = shufflevector <8 x float> %tmp, <8 x float> undef, <32 x i32> <i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 7, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef>647  %tmp2 = shufflevector <32 x float> <float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float undef, float 0.000000e+00, float 0.000000e+00, float 0.000000e+00>, <32 x float> undef, <32 x i32> <i32 39, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 29, i32 30, i32 31>648  %tmp18 = shufflevector <32 x float> %tmp2, <32 x float> %tmp1, <32 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 39, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 undef, i32 29, i32 30, i32 31>649  ret <32 x float> %tmp18650}651 652%union1= type { <16 x float> }653@src1 = external dso_local local_unnamed_addr global %union1, align 64654 655define void @PR43170(ptr %a0) {656; X86-AVX512-LABEL: PR43170:657; X86-AVX512:       # %bb.0: # %entry658; X86-AVX512-NEXT:    movl {{[0-9]+}}(%esp), %eax659; X86-AVX512-NEXT:    vmovaps src1, %ymm0660; X86-AVX512-NEXT:    vmovaps %zmm0, (%eax)661; X86-AVX512-NEXT:    vzeroupper662; X86-AVX512-NEXT:    retl663;664; X64-AVX512-LABEL: PR43170:665; X64-AVX512:       # %bb.0: # %entry666; X64-AVX512-NEXT:    vmovaps src1(%rip), %ymm0667; X64-AVX512-NEXT:    vmovaps %zmm0, (%rdi)668; X64-AVX512-NEXT:    vzeroupper669; X64-AVX512-NEXT:    retq670;671; X86-AVX512F-LABEL: PR43170:672; X86-AVX512F:       # %bb.0: # %entry673; X86-AVX512F-NEXT:    movl {{[0-9]+}}(%esp), %eax674; X86-AVX512F-NEXT:    vmovaps src1, %ymm0675; X86-AVX512F-NEXT:    vmovaps %zmm0, (%eax)676; X86-AVX512F-NEXT:    vzeroupper677; X86-AVX512F-NEXT:    retl678;679; X64-AVX512F-LABEL: PR43170:680; X64-AVX512F:       # %bb.0: # %entry681; X64-AVX512F-NEXT:    vmovaps src1(%rip), %ymm0682; X64-AVX512F-NEXT:    vmovaps %zmm0, (%rdi)683; X64-AVX512F-NEXT:    vzeroupper684; X64-AVX512F-NEXT:    retq685entry:686  %0 = load <8 x float>, ptr @src1, align 64687  %1 = shufflevector <8 x float> %0, <8 x float> zeroinitializer, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15>688  store <16 x float> %1, ptr %a0, align 64689  ret void690}691