289 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O3 -mtriple=x86_64-linux-generic -mattr=avx < %s | FileCheck %s3 4; Bug 45833:5; The SplitVecRes_MSTORE method should split a extended value type6; according to the halving of the enveloping type to avoid all sorts7; of inconsistencies downstream. For example for a extended value type8; with VL=14 and enveloping type VL=16 that is split 8/8, the extended9; type should be split 8/6 and not 7/7. This also accounts for hi masked10; store that get zero storage size (and are unused).11 12define void @mstore_split9(<9 x float> %value, ptr %addr, <9 x i1> %mask) {13; CHECK-LABEL: mstore_split9:14; CHECK: # %bb.0:15; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[2,3]16; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0,1],xmm6[0],xmm4[3]17; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],xmm7[0]18; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]19; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0],xmm0[3]20; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm3[0]21; CHECK-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm022; CHECK-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero23; CHECK-NEXT: vmovd %esi, %xmm224; CHECK-NEXT: vpinsrb $1, %edx, %xmm2, %xmm225; CHECK-NEXT: vpinsrb $2, %ecx, %xmm2, %xmm226; CHECK-NEXT: vpinsrb $3, %r8d, %xmm2, %xmm227; CHECK-NEXT: vpinsrb $4, %r9d, %xmm2, %xmm328; CHECK-NEXT: vpinsrb $5, {{[0-9]+}}(%rsp), %xmm3, %xmm329; CHECK-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm3, %xmm330; CHECK-NEXT: vpinsrb $7, {{[0-9]+}}(%rsp), %xmm3, %xmm331; CHECK-NEXT: vpinsrb $8, {{[0-9]+}}(%rsp), %xmm3, %xmm332; CHECK-NEXT: vpshufb {{.*#+}} xmm4 = xmm3[8,u,u,u],zero,xmm3[u,u,u],zero,xmm3[u,u,u],zero,xmm3[u,u,u]33; CHECK-NEXT: vpslld $31, %xmm4, %xmm434; CHECK-NEXT: vmaskmovps %ymm1, %ymm4, 32(%rdi)35; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm1 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero36; CHECK-NEXT: vpslld $31, %xmm1, %xmm137; CHECK-NEXT: vpshufd {{.*#+}} xmm2 = xmm3[1,1,1,1]38; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero39; CHECK-NEXT: vpslld $31, %xmm2, %xmm240; CHECK-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm141; CHECK-NEXT: vmaskmovps %ymm0, %ymm1, (%rdi)42; CHECK-NEXT: vzeroupper43; CHECK-NEXT: retq44 call void @llvm.masked.store.v9f32.p0(<9 x float> %value, ptr %addr, i32 4, <9 x i1>%mask)45 ret void46}47 48define void @mstore_split13(<13 x float> %value, ptr %addr, <13 x i1> %mask) {49; CHECK-LABEL: mstore_split13:50; CHECK: # %bb.0:51; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[2,3]52; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0,1],xmm6[0],xmm4[3]53; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],xmm7[0]54; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]55; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0],xmm0[3]56; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm3[0]57; CHECK-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm058; CHECK-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero59; CHECK-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]60; CHECK-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]61; CHECK-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]62; CHECK-NEXT: vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero63; CHECK-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm164; CHECK-NEXT: vmovd %esi, %xmm265; CHECK-NEXT: vpinsrb $1, %edx, %xmm2, %xmm266; CHECK-NEXT: vpinsrb $2, %ecx, %xmm2, %xmm267; CHECK-NEXT: vpinsrb $3, %r8d, %xmm2, %xmm268; CHECK-NEXT: vpinsrb $4, %r9d, %xmm2, %xmm369; CHECK-NEXT: vpinsrb $5, {{[0-9]+}}(%rsp), %xmm3, %xmm370; CHECK-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm3, %xmm371; CHECK-NEXT: vpinsrb $7, {{[0-9]+}}(%rsp), %xmm3, %xmm372; CHECK-NEXT: vpinsrb $8, {{[0-9]+}}(%rsp), %xmm3, %xmm373; CHECK-NEXT: vpinsrb $9, {{[0-9]+}}(%rsp), %xmm3, %xmm374; CHECK-NEXT: vpinsrb $10, {{[0-9]+}}(%rsp), %xmm3, %xmm375; CHECK-NEXT: vpinsrb $11, {{[0-9]+}}(%rsp), %xmm3, %xmm376; CHECK-NEXT: vpinsrb $12, {{[0-9]+}}(%rsp), %xmm3, %xmm477; CHECK-NEXT: vpunpckhbw {{.*#+}} xmm3 = xmm3[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]78; CHECK-NEXT: vpmovzxwd {{.*#+}} xmm3 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero79; CHECK-NEXT: vpslld $31, %xmm3, %xmm380; CHECK-NEXT: vpsrldq {{.*#+}} xmm5 = xmm4[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero81; CHECK-NEXT: vpslld $31, %xmm5, %xmm582; CHECK-NEXT: vinsertf128 $1, %xmm5, %ymm3, %ymm383; CHECK-NEXT: vmaskmovps %ymm1, %ymm3, 32(%rdi)84; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm1 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero85; CHECK-NEXT: vpslld $31, %xmm1, %xmm186; CHECK-NEXT: vpshufd {{.*#+}} xmm2 = xmm4[1,1,1,1]87; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero88; CHECK-NEXT: vpslld $31, %xmm2, %xmm289; CHECK-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm190; CHECK-NEXT: vmaskmovps %ymm0, %ymm1, (%rdi)91; CHECK-NEXT: vzeroupper92; CHECK-NEXT: retq93 call void @llvm.masked.store.v13f32.p0(<13 x float> %value, ptr %addr, i32 4, <13 x i1>%mask)94 ret void95}96 97define void @mstore_split14(<14 x float> %value, ptr %addr, <14 x i1> %mask) {98; CHECK-LABEL: mstore_split14:99; CHECK: # %bb.0:100; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[2,3]101; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0,1],xmm6[0],xmm4[3]102; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],xmm7[0]103; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]104; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0],xmm0[3]105; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm3[0]106; CHECK-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0107; CHECK-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero108; CHECK-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]109; CHECK-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]110; CHECK-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]111; CHECK-NEXT: vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero112; CHECK-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]113; CHECK-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1114; CHECK-NEXT: vmovd %esi, %xmm2115; CHECK-NEXT: vpinsrb $1, %edx, %xmm2, %xmm2116; CHECK-NEXT: vpinsrb $2, %ecx, %xmm2, %xmm2117; CHECK-NEXT: vpinsrb $3, %r8d, %xmm2, %xmm2118; CHECK-NEXT: vpinsrb $4, %r9d, %xmm2, %xmm3119; CHECK-NEXT: vpinsrb $5, {{[0-9]+}}(%rsp), %xmm3, %xmm3120; CHECK-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm3, %xmm3121; CHECK-NEXT: vpinsrb $7, {{[0-9]+}}(%rsp), %xmm3, %xmm3122; CHECK-NEXT: vpinsrb $8, {{[0-9]+}}(%rsp), %xmm3, %xmm3123; CHECK-NEXT: vpinsrb $9, {{[0-9]+}}(%rsp), %xmm3, %xmm3124; CHECK-NEXT: vpinsrb $10, {{[0-9]+}}(%rsp), %xmm3, %xmm3125; CHECK-NEXT: vpinsrb $11, {{[0-9]+}}(%rsp), %xmm3, %xmm3126; CHECK-NEXT: vpinsrb $12, {{[0-9]+}}(%rsp), %xmm3, %xmm3127; CHECK-NEXT: vpinsrb $13, {{[0-9]+}}(%rsp), %xmm3, %xmm3128; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero129; CHECK-NEXT: vpslld $31, %xmm2, %xmm2130; CHECK-NEXT: vpshufd {{.*#+}} xmm4 = xmm3[1,1,1,1]131; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero132; CHECK-NEXT: vpslld $31, %xmm4, %xmm4133; CHECK-NEXT: vinsertf128 $1, %xmm4, %ymm2, %ymm2134; CHECK-NEXT: vmaskmovps %ymm0, %ymm2, (%rdi)135; CHECK-NEXT: vpshufb {{.*#+}} xmm0 = xmm3[8,u,9,u,10,u,11,u,12,u,13,u],zero,xmm3[u],zero,xmm3[u]136; CHECK-NEXT: vpmovzxwd {{.*#+}} xmm2 = xmm0[0],zero,xmm0[1],zero,xmm0[2],zero,xmm0[3],zero137; CHECK-NEXT: vpslld $31, %xmm2, %xmm2138; CHECK-NEXT: vpunpckhwd {{.*#+}} xmm0 = xmm0[4,4,5,5,6,6,7,7]139; CHECK-NEXT: vpslld $31, %xmm0, %xmm0140; CHECK-NEXT: vinsertf128 $1, %xmm0, %ymm2, %ymm0141; CHECK-NEXT: vmaskmovps %ymm1, %ymm0, 32(%rdi)142; CHECK-NEXT: vzeroupper143; CHECK-NEXT: retq144 call void @llvm.masked.store.v14f32.p0(<14 x float> %value, ptr %addr, i32 4, <14 x i1>%mask)145 ret void146}147 148define void @mstore_split17(<17 x float> %value, ptr %addr, <17 x i1> %mask) {149; CHECK-LABEL: mstore_split17:150; CHECK: # %bb.0:151; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[2,3]152; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0,1],xmm6[0],xmm4[3]153; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],xmm7[0]154; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]155; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0],xmm0[3]156; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm3[0]157; CHECK-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0158; CHECK-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero159; CHECK-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]160; CHECK-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]161; CHECK-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]162; CHECK-NEXT: vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero163; CHECK-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]164; CHECK-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]165; CHECK-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]166; CHECK-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1167; CHECK-NEXT: vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero168; CHECK-NEXT: movzbl {{[0-9]+}}(%rsp), %eax169; CHECK-NEXT: vmovd %eax, %xmm3170; CHECK-NEXT: vpslld $31, %xmm3, %xmm3171; CHECK-NEXT: vmaskmovps %ymm2, %ymm3, 64(%rdi)172; CHECK-NEXT: vmovd {{.*#+}} xmm2 = mem[0],zero,zero,zero173; CHECK-NEXT: vpinsrb $2, {{[0-9]+}}(%rsp), %xmm2, %xmm2174; CHECK-NEXT: vpinsrb $4, {{[0-9]+}}(%rsp), %xmm2, %xmm2175; CHECK-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm2, %xmm2176; CHECK-NEXT: vpmovzxwd {{.*#+}} xmm3 = xmm2[0],zero,xmm2[1],zero,xmm2[2],zero,xmm2[3],zero177; CHECK-NEXT: vpslld $31, %xmm3, %xmm3178; CHECK-NEXT: vpinsrb $8, {{[0-9]+}}(%rsp), %xmm2, %xmm2179; CHECK-NEXT: vpinsrb $10, {{[0-9]+}}(%rsp), %xmm2, %xmm2180; CHECK-NEXT: vpinsrb $12, {{[0-9]+}}(%rsp), %xmm2, %xmm2181; CHECK-NEXT: vpinsrb $14, {{[0-9]+}}(%rsp), %xmm2, %xmm2182; CHECK-NEXT: vpunpckhwd {{.*#+}} xmm2 = xmm2[4,4,5,5,6,6,7,7]183; CHECK-NEXT: vpslld $31, %xmm2, %xmm2184; CHECK-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2185; CHECK-NEXT: vmaskmovps %ymm1, %ymm2, 32(%rdi)186; CHECK-NEXT: vmovd %esi, %xmm1187; CHECK-NEXT: vpinsrb $1, %edx, %xmm1, %xmm1188; CHECK-NEXT: vpinsrb $2, %ecx, %xmm1, %xmm1189; CHECK-NEXT: vpinsrb $3, %r8d, %xmm1, %xmm1190; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm2 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero191; CHECK-NEXT: vpslld $31, %xmm2, %xmm2192; CHECK-NEXT: vpinsrb $4, %r9d, %xmm1, %xmm1193; CHECK-NEXT: vpinsrb $5, {{[0-9]+}}(%rsp), %xmm1, %xmm1194; CHECK-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm1, %xmm1195; CHECK-NEXT: vpinsrb $7, {{[0-9]+}}(%rsp), %xmm1, %xmm1196; CHECK-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,1,1]197; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero198; CHECK-NEXT: vpslld $31, %xmm1, %xmm1199; CHECK-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1200; CHECK-NEXT: vmaskmovps %ymm0, %ymm1, (%rdi)201; CHECK-NEXT: vzeroupper202; CHECK-NEXT: retq203 call void @llvm.masked.store.v17f32.p0(<17 x float> %value, ptr %addr, i32 4, <17 x i1>%mask)204 ret void205}206 207define void @mstore_split23(<23 x float> %value, ptr %addr, <23 x i1> %mask) {208; CHECK-LABEL: mstore_split23:209; CHECK: # %bb.0:210; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[2,3]211; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0,1],xmm6[0],xmm4[3]212; CHECK-NEXT: vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],xmm7[0]213; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]214; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0],xmm0[3]215; CHECK-NEXT: vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm3[0]216; CHECK-NEXT: vinsertf128 $1, %xmm4, %ymm0, %ymm0217; CHECK-NEXT: vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero218; CHECK-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]219; CHECK-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]220; CHECK-NEXT: vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]221; CHECK-NEXT: vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero222; CHECK-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]223; CHECK-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]224; CHECK-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1225; CHECK-NEXT: vmovss {{.*#+}} xmm2 = mem[0],zero,zero,zero226; CHECK-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0],mem[0],xmm2[2,3]227; CHECK-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1],mem[0],xmm2[3]228; CHECK-NEXT: vinsertps {{.*#+}} xmm2 = xmm2[0,1,2],mem[0]229; CHECK-NEXT: vmovss {{.*#+}} xmm3 = mem[0],zero,zero,zero230; CHECK-NEXT: vinsertps {{.*#+}} xmm3 = xmm3[0],mem[0],xmm3[2,3]231; CHECK-NEXT: vinsertps {{.*#+}} xmm3 = xmm3[0,1],mem[0],xmm3[3]232; CHECK-NEXT: vinsertps {{.*#+}} xmm3 = xmm3[0,1,2],mem[0]233; CHECK-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm2234; CHECK-NEXT: movzbl {{[0-9]+}}(%rsp), %eax235; CHECK-NEXT: vmovd {{.*#+}} xmm3 = mem[0],zero,zero,zero236; CHECK-NEXT: vpinsrb $2, {{[0-9]+}}(%rsp), %xmm3, %xmm3237; CHECK-NEXT: vpinsrb $4, {{[0-9]+}}(%rsp), %xmm3, %xmm3238; CHECK-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm3, %xmm3239; CHECK-NEXT: vpmovzxwd {{.*#+}} xmm4 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero240; CHECK-NEXT: vpslld $31, %xmm4, %xmm4241; CHECK-NEXT: vpinsrb $8, {{[0-9]+}}(%rsp), %xmm3, %xmm3242; CHECK-NEXT: vpinsrb $10, {{[0-9]+}}(%rsp), %xmm3, %xmm3243; CHECK-NEXT: vpinsrb $12, {{[0-9]+}}(%rsp), %xmm3, %xmm3244; CHECK-NEXT: vpinsrb $14, {{[0-9]+}}(%rsp), %xmm3, %xmm3245; CHECK-NEXT: vpunpckhwd {{.*#+}} xmm3 = xmm3[4,4,5,5,6,6,7,7]246; CHECK-NEXT: vpslld $31, %xmm3, %xmm3247; CHECK-NEXT: vinsertf128 $1, %xmm3, %ymm4, %ymm3248; CHECK-NEXT: vmaskmovps %ymm2, %ymm3, 32(%rdi)249; CHECK-NEXT: vmovd %eax, %xmm2250; CHECK-NEXT: vpinsrb $1, {{[0-9]+}}(%rsp), %xmm2, %xmm2251; CHECK-NEXT: vpinsrb $2, {{[0-9]+}}(%rsp), %xmm2, %xmm2252; CHECK-NEXT: vpinsrb $3, {{[0-9]+}}(%rsp), %xmm2, %xmm2253; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm3 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero254; CHECK-NEXT: vpslld $31, %xmm3, %xmm3255; CHECK-NEXT: vpinsrb $4, {{[0-9]+}}(%rsp), %xmm2, %xmm2256; CHECK-NEXT: vpinsrb $5, {{[0-9]+}}(%rsp), %xmm2, %xmm2257; CHECK-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm2, %xmm2258; CHECK-NEXT: vpshufd {{.*#+}} xmm2 = xmm2[1,1,1,1]259; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm2 = xmm2[0],zero,zero,zero,xmm2[1],zero,zero,zero,xmm2[2],zero,zero,zero,xmm2[3],zero,zero,zero260; CHECK-NEXT: vpslld $31, %xmm2, %xmm2261; CHECK-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2262; CHECK-NEXT: vmaskmovps %ymm1, %ymm2, 64(%rdi)263; CHECK-NEXT: vmovd %esi, %xmm1264; CHECK-NEXT: vpinsrb $1, %edx, %xmm1, %xmm1265; CHECK-NEXT: vpinsrb $2, %ecx, %xmm1, %xmm1266; CHECK-NEXT: vpinsrb $3, %r8d, %xmm1, %xmm1267; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm2 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero268; CHECK-NEXT: vpslld $31, %xmm2, %xmm2269; CHECK-NEXT: vpinsrb $4, %r9d, %xmm1, %xmm1270; CHECK-NEXT: vpinsrb $5, {{[0-9]+}}(%rsp), %xmm1, %xmm1271; CHECK-NEXT: vpinsrb $6, {{[0-9]+}}(%rsp), %xmm1, %xmm1272; CHECK-NEXT: vpinsrb $7, {{[0-9]+}}(%rsp), %xmm1, %xmm1273; CHECK-NEXT: vpshufd {{.*#+}} xmm1 = xmm1[1,1,1,1]274; CHECK-NEXT: vpmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero275; CHECK-NEXT: vpslld $31, %xmm1, %xmm1276; CHECK-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm1277; CHECK-NEXT: vmaskmovps %ymm0, %ymm1, (%rdi)278; CHECK-NEXT: vzeroupper279; CHECK-NEXT: retq280 call void @llvm.masked.store.v23f32.p0(<23 x float> %value, ptr %addr, i32 4, <23 x i1>%mask)281 ret void282}283 284declare void @llvm.masked.store.v9f32.p0(<9 x float>, ptr, i32, <9 x i1>)285declare void @llvm.masked.store.v13f32.p0(<13 x float>, ptr, i32, <13 x i1>)286declare void @llvm.masked.store.v14f32.p0(<14 x float>, ptr, i32, <14 x i1>)287declare void @llvm.masked.store.v17f32.p0(<17 x float>, ptr, i32, <17 x i1>)288declare void @llvm.masked.store.v23f32.p0(<23 x float>, ptr, i32, <23 x i1>)289