brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.2 KiB · 72877e1 Raw
330 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 45563:5; The SplitVecRes_MLOAD 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; load that get zero storage size (and are unused).11 12define <9 x float> @mload_split9(<9 x i1> %mask, ptr %addr, <9 x float> %dst) {13; CHECK-LABEL: mload_split9:14; CHECK:       # %bb.0:15; CHECK-NEXT:    movq %rdi, %rax16; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[2,3]17; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1],xmm6[0],xmm4[3]18; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],xmm7[0]19; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]20; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0],xmm0[3]21; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm3[0]22; CHECK-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm023; CHECK-NEXT:    vmovd %esi, %xmm124; CHECK-NEXT:    vpinsrb $1, %edx, %xmm1, %xmm125; CHECK-NEXT:    vpinsrb $2, %ecx, %xmm1, %xmm126; CHECK-NEXT:    vpinsrb $3, %r8d, %xmm1, %xmm127; CHECK-NEXT:    vpinsrb $4, %r9d, %xmm1, %xmm228; CHECK-NEXT:    vpinsrb $5, {{[0-9]+}}(%rsp), %xmm2, %xmm229; CHECK-NEXT:    vpinsrb $6, {{[0-9]+}}(%rsp), %xmm2, %xmm230; CHECK-NEXT:    vpinsrb $7, {{[0-9]+}}(%rsp), %xmm2, %xmm231; CHECK-NEXT:    vpinsrb $8, {{[0-9]+}}(%rsp), %xmm2, %xmm232; CHECK-NEXT:    vmovss {{.*#+}} xmm3 = mem[0],zero,zero,zero33; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rcx34; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero35; CHECK-NEXT:    vpslld $31, %xmm1, %xmm136; CHECK-NEXT:    vpshufd {{.*#+}} xmm4 = xmm2[1,1,1,1]37; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero38; CHECK-NEXT:    vpslld $31, %xmm4, %xmm439; CHECK-NEXT:    vinsertf128 $1, %xmm4, %ymm1, %ymm140; CHECK-NEXT:    vmaskmovps (%rcx), %ymm1, %ymm441; CHECK-NEXT:    vblendvps %ymm1, %ymm4, %ymm0, %ymm042; CHECK-NEXT:    vpshufb {{.*#+}} xmm1 = xmm2[8,u,u,u],zero,xmm2[u,u,u],zero,xmm2[u,u,u],zero,xmm2[u,u,u]43; CHECK-NEXT:    vpslld $31, %xmm1, %xmm144; CHECK-NEXT:    vmaskmovps 32(%rcx), %ymm1, %ymm245; CHECK-NEXT:    vmovaps %ymm0, (%rdi)46; CHECK-NEXT:    vblendvps %xmm1, %xmm2, %xmm3, %xmm047; CHECK-NEXT:    vmovss %xmm0, 32(%rdi)48; CHECK-NEXT:    vzeroupper49; CHECK-NEXT:    retq50  %res = call <9 x float> @llvm.masked.load.v9f32.p0(ptr %addr, i32 4, <9 x i1>%mask, <9 x float> %dst)51  ret <9 x float> %res52}53 54define <13 x float> @mload_split13(<13 x i1> %mask, ptr %addr, <13 x float> %dst) {55; CHECK-LABEL: mload_split13:56; CHECK:       # %bb.0:57; CHECK-NEXT:    movq %rdi, %rax58; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[2,3]59; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1],xmm6[0],xmm4[3]60; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],xmm7[0]61; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]62; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0],xmm0[3]63; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm3[0]64; CHECK-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm065; CHECK-NEXT:    vmovd %esi, %xmm166; CHECK-NEXT:    vpinsrb $1, %edx, %xmm1, %xmm167; CHECK-NEXT:    vpinsrb $2, %ecx, %xmm1, %xmm168; CHECK-NEXT:    vpinsrb $3, %r8d, %xmm1, %xmm169; CHECK-NEXT:    vpinsrb $4, %r9d, %xmm1, %xmm270; CHECK-NEXT:    vpinsrb $5, {{[0-9]+}}(%rsp), %xmm2, %xmm271; CHECK-NEXT:    vpinsrb $6, {{[0-9]+}}(%rsp), %xmm2, %xmm272; CHECK-NEXT:    vpinsrb $7, {{[0-9]+}}(%rsp), %xmm2, %xmm273; CHECK-NEXT:    vpinsrb $8, {{[0-9]+}}(%rsp), %xmm2, %xmm274; CHECK-NEXT:    vpinsrb $9, {{[0-9]+}}(%rsp), %xmm2, %xmm275; CHECK-NEXT:    vpinsrb $10, {{[0-9]+}}(%rsp), %xmm2, %xmm276; CHECK-NEXT:    vpinsrb $11, {{[0-9]+}}(%rsp), %xmm2, %xmm277; CHECK-NEXT:    vpinsrb $12, {{[0-9]+}}(%rsp), %xmm2, %xmm378; CHECK-NEXT:    vmovss {{.*#+}} xmm4 = mem[0],zero,zero,zero79; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],mem[0],xmm4[2,3]80; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1],mem[0],xmm4[3]81; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],mem[0]82; CHECK-NEXT:    vmovss {{.*#+}} xmm5 = mem[0],zero,zero,zero83; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rcx84; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero85; CHECK-NEXT:    vpslld $31, %xmm1, %xmm186; CHECK-NEXT:    vpshufd {{.*#+}} xmm6 = xmm3[1,1,1,1]87; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm6 = xmm6[0],zero,zero,zero,xmm6[1],zero,zero,zero,xmm6[2],zero,zero,zero,xmm6[3],zero,zero,zero88; CHECK-NEXT:    vpslld $31, %xmm6, %xmm689; CHECK-NEXT:    vinsertf128 $1, %xmm6, %ymm1, %ymm190; CHECK-NEXT:    vmaskmovps (%rcx), %ymm1, %ymm691; CHECK-NEXT:    vblendvps %ymm1, %ymm6, %ymm0, %ymm092; CHECK-NEXT:    vpunpckhbw {{.*#+}} xmm1 = xmm2[8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15]93; CHECK-NEXT:    vpmovzxwd {{.*#+}} xmm1 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero94; CHECK-NEXT:    vpslld $31, %xmm1, %xmm195; CHECK-NEXT:    vpsrldq {{.*#+}} xmm2 = xmm3[12,13,14,15],zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero,zero96; CHECK-NEXT:    vpslld $31, %xmm2, %xmm297; CHECK-NEXT:    vinsertf128 $1, %xmm2, %ymm1, %ymm398; CHECK-NEXT:    vmaskmovps 32(%rcx), %ymm3, %ymm399; CHECK-NEXT:    vmovaps %ymm0, (%rdi)100; CHECK-NEXT:    vblendvps %xmm1, %xmm3, %xmm4, %xmm0101; CHECK-NEXT:    vmovaps %xmm0, 32(%rdi)102; CHECK-NEXT:    vextractf128 $1, %ymm3, %xmm0103; CHECK-NEXT:    vblendvps %xmm2, %xmm0, %xmm5, %xmm0104; CHECK-NEXT:    vmovss %xmm0, 48(%rdi)105; CHECK-NEXT:    vzeroupper106; CHECK-NEXT:    retq107  %res = call <13 x float> @llvm.masked.load.v13f32.p0(ptr %addr, i32 4, <13 x i1>%mask, <13 x float> %dst)108  ret <13 x float> %res109}110 111define <14 x float> @mload_split14(<14 x i1> %mask, ptr %addr, <14 x float> %dst) {112; CHECK-LABEL: mload_split14:113; CHECK:       # %bb.0:114; CHECK-NEXT:    movq %rdi, %rax115; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[2,3]116; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1],xmm6[0],xmm4[3]117; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],xmm7[0]118; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]119; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0],xmm0[3]120; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm3[0]121; CHECK-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm0122; CHECK-NEXT:    vmovd %esi, %xmm1123; CHECK-NEXT:    vpinsrb $1, %edx, %xmm1, %xmm1124; CHECK-NEXT:    vpinsrb $2, %ecx, %xmm1, %xmm1125; CHECK-NEXT:    vpinsrb $3, %r8d, %xmm1, %xmm1126; CHECK-NEXT:    vpinsrb $4, %r9d, %xmm1, %xmm2127; CHECK-NEXT:    vpinsrb $5, {{[0-9]+}}(%rsp), %xmm2, %xmm2128; CHECK-NEXT:    vpinsrb $6, {{[0-9]+}}(%rsp), %xmm2, %xmm2129; CHECK-NEXT:    vpinsrb $7, {{[0-9]+}}(%rsp), %xmm2, %xmm2130; CHECK-NEXT:    vpinsrb $8, {{[0-9]+}}(%rsp), %xmm2, %xmm2131; CHECK-NEXT:    vpinsrb $9, {{[0-9]+}}(%rsp), %xmm2, %xmm2132; CHECK-NEXT:    vpinsrb $10, {{[0-9]+}}(%rsp), %xmm2, %xmm2133; CHECK-NEXT:    vpinsrb $11, {{[0-9]+}}(%rsp), %xmm2, %xmm2134; CHECK-NEXT:    vpinsrb $12, {{[0-9]+}}(%rsp), %xmm2, %xmm2135; CHECK-NEXT:    vpinsrb $13, {{[0-9]+}}(%rsp), %xmm2, %xmm2136; CHECK-NEXT:    vmovss {{.*#+}} xmm3 = mem[0],zero,zero,zero137; CHECK-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0],mem[0],xmm3[2,3]138; CHECK-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0,1],mem[0],xmm3[3]139; CHECK-NEXT:    vinsertps {{.*#+}} xmm3 = xmm3[0,1,2],mem[0]140; CHECK-NEXT:    vmovss {{.*#+}} xmm4 = mem[0],zero,zero,zero141; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],mem[0],xmm4[2,3]142; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rcx143; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm1 = xmm1[0],zero,zero,zero,xmm1[1],zero,zero,zero,xmm1[2],zero,zero,zero,xmm1[3],zero,zero,zero144; CHECK-NEXT:    vpslld $31, %xmm1, %xmm1145; CHECK-NEXT:    vpshufd {{.*#+}} xmm5 = xmm2[1,1,1,1]146; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm5 = xmm5[0],zero,zero,zero,xmm5[1],zero,zero,zero,xmm5[2],zero,zero,zero,xmm5[3],zero,zero,zero147; CHECK-NEXT:    vpslld $31, %xmm5, %xmm5148; CHECK-NEXT:    vinsertf128 $1, %xmm5, %ymm1, %ymm1149; CHECK-NEXT:    vmaskmovps (%rcx), %ymm1, %ymm5150; CHECK-NEXT:    vblendvps %ymm1, %ymm5, %ymm0, %ymm0151; CHECK-NEXT:    vpshufb {{.*#+}} xmm1 = xmm2[8,u,9,u,10,u,11,u,12,u,13,u],zero,xmm2[u],zero,xmm2[u]152; CHECK-NEXT:    vpmovzxwd {{.*#+}} xmm2 = xmm1[0],zero,xmm1[1],zero,xmm1[2],zero,xmm1[3],zero153; CHECK-NEXT:    vpslld $31, %xmm2, %xmm2154; CHECK-NEXT:    vpunpckhwd {{.*#+}} xmm1 = xmm1[4,4,5,5,6,6,7,7]155; CHECK-NEXT:    vpslld $31, %xmm1, %xmm1156; CHECK-NEXT:    vinsertf128 $1, %xmm1, %ymm2, %ymm5157; CHECK-NEXT:    vmaskmovps 32(%rcx), %ymm5, %ymm5158; CHECK-NEXT:    vmovaps %ymm0, (%rdi)159; CHECK-NEXT:    vextractf128 $1, %ymm5, %xmm0160; CHECK-NEXT:    vblendvps %xmm1, %xmm0, %xmm4, %xmm0161; CHECK-NEXT:    vmovlps %xmm0, 48(%rdi)162; CHECK-NEXT:    vblendvps %xmm2, %xmm5, %xmm3, %xmm0163; CHECK-NEXT:    vmovaps %xmm0, 32(%rdi)164; CHECK-NEXT:    vzeroupper165; CHECK-NEXT:    retq166  %res = call <14 x float> @llvm.masked.load.v14f32.p0(ptr %addr, i32 4, <14 x i1>%mask, <14 x float> %dst)167  ret <14 x float> %res168}169 170define <17 x float> @mload_split17(<17 x i1> %mask, ptr %addr, <17 x float> %dst) {171; CHECK-LABEL: mload_split17:172; CHECK:       # %bb.0:173; CHECK-NEXT:    movq %rdi, %rax174; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[2,3]175; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1],xmm6[0],xmm4[3]176; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],xmm7[0]177; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]178; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0],xmm0[3]179; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm3[0]180; CHECK-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm2181; CHECK-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero182; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]183; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]184; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]185; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero186; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]187; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]188; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]189; CHECK-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm1190; CHECK-NEXT:    vmovd {{.*#+}} xmm0 = mem[0],zero,zero,zero191; CHECK-NEXT:    movzbl {{[0-9]+}}(%rsp), %r10d192; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rdi193; CHECK-NEXT:    vmovd %esi, %xmm3194; CHECK-NEXT:    vpinsrb $1, %edx, %xmm3, %xmm3195; CHECK-NEXT:    vpinsrb $2, %ecx, %xmm3, %xmm3196; CHECK-NEXT:    vpinsrb $3, %r8d, %xmm3, %xmm3197; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm4 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero198; CHECK-NEXT:    vpslld $31, %xmm4, %xmm4199; CHECK-NEXT:    vpinsrb $4, %r9d, %xmm3, %xmm3200; CHECK-NEXT:    vpinsrb $5, {{[0-9]+}}(%rsp), %xmm3, %xmm3201; CHECK-NEXT:    vpinsrb $6, {{[0-9]+}}(%rsp), %xmm3, %xmm3202; CHECK-NEXT:    vpinsrb $7, {{[0-9]+}}(%rsp), %xmm3, %xmm3203; CHECK-NEXT:    vpshufd {{.*#+}} xmm3 = xmm3[1,1,1,1]204; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm3 = xmm3[0],zero,zero,zero,xmm3[1],zero,zero,zero,xmm3[2],zero,zero,zero,xmm3[3],zero,zero,zero205; CHECK-NEXT:    vpslld $31, %xmm3, %xmm3206; CHECK-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm3207; CHECK-NEXT:    vmaskmovps (%rdi), %ymm3, %ymm4208; CHECK-NEXT:    vblendvps %ymm3, %ymm4, %ymm2, %ymm2209; CHECK-NEXT:    vmovd {{.*#+}} xmm3 = mem[0],zero,zero,zero210; CHECK-NEXT:    vpinsrb $2, {{[0-9]+}}(%rsp), %xmm3, %xmm3211; CHECK-NEXT:    vpinsrb $4, {{[0-9]+}}(%rsp), %xmm3, %xmm3212; CHECK-NEXT:    vpinsrb $6, {{[0-9]+}}(%rsp), %xmm3, %xmm3213; CHECK-NEXT:    vpmovzxwd {{.*#+}} xmm4 = xmm3[0],zero,xmm3[1],zero,xmm3[2],zero,xmm3[3],zero214; CHECK-NEXT:    vpslld $31, %xmm4, %xmm4215; CHECK-NEXT:    vpinsrb $8, {{[0-9]+}}(%rsp), %xmm3, %xmm3216; CHECK-NEXT:    vpinsrb $10, {{[0-9]+}}(%rsp), %xmm3, %xmm3217; CHECK-NEXT:    vpinsrb $12, {{[0-9]+}}(%rsp), %xmm3, %xmm3218; CHECK-NEXT:    vpinsrb $14, {{[0-9]+}}(%rsp), %xmm3, %xmm3219; CHECK-NEXT:    vpunpckhwd {{.*#+}} xmm3 = xmm3[4,4,5,5,6,6,7,7]220; CHECK-NEXT:    vpslld $31, %xmm3, %xmm3221; CHECK-NEXT:    vinsertf128 $1, %xmm3, %ymm4, %ymm3222; CHECK-NEXT:    vmaskmovps 32(%rdi), %ymm3, %ymm4223; CHECK-NEXT:    vblendvps %ymm3, %ymm4, %ymm1, %ymm1224; CHECK-NEXT:    vmovd %r10d, %xmm3225; CHECK-NEXT:    vpslld $31, %xmm3, %xmm3226; CHECK-NEXT:    vmaskmovps 64(%rdi), %ymm3, %ymm4227; CHECK-NEXT:    vblendvps %xmm3, %xmm4, %xmm0, %xmm0228; CHECK-NEXT:    vmovss %xmm0, 64(%rax)229; CHECK-NEXT:    vmovaps %ymm1, 32(%rax)230; CHECK-NEXT:    vmovaps %ymm2, (%rax)231; CHECK-NEXT:    vzeroupper232; CHECK-NEXT:    retq233  %res = call <17 x float> @llvm.masked.load.v17f32.p0(ptr %addr, i32 4, <17 x i1>%mask, <17 x float> %dst)234  ret <17 x float> %res235}236 237define <23 x float> @mload_split23(<23 x i1> %mask, ptr %addr, <23 x float> %dst) {238; CHECK-LABEL: mload_split23:239; CHECK:       # %bb.0:240; CHECK-NEXT:    movq %rdi, %rax241; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0],xmm5[0],xmm4[2,3]242; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1],xmm6[0],xmm4[3]243; CHECK-NEXT:    vinsertps {{.*#+}} xmm4 = xmm4[0,1,2],xmm7[0]244; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],xmm1[0],xmm0[2,3]245; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],xmm2[0],xmm0[3]246; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],xmm3[0]247; CHECK-NEXT:    vinsertf128 $1, %xmm4, %ymm0, %ymm3248; CHECK-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero249; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]250; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]251; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]252; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero253; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]254; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]255; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1,2],mem[0]256; CHECK-NEXT:    vinsertf128 $1, %xmm1, %ymm0, %ymm2257; CHECK-NEXT:    vmovss {{.*#+}} xmm0 = mem[0],zero,zero,zero258; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0],mem[0],xmm0[2,3]259; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1],mem[0],xmm0[3]260; CHECK-NEXT:    vinsertps {{.*#+}} xmm0 = xmm0[0,1,2],mem[0]261; CHECK-NEXT:    vmovss {{.*#+}} xmm1 = mem[0],zero,zero,zero262; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0],mem[0],xmm1[2,3]263; CHECK-NEXT:    vinsertps {{.*#+}} xmm1 = xmm1[0,1],mem[0],xmm1[3]264; CHECK-NEXT:    movzbl {{[0-9]+}}(%rsp), %r10d265; CHECK-NEXT:    movq {{[0-9]+}}(%rsp), %rdi266; CHECK-NEXT:    vmovd %esi, %xmm4267; CHECK-NEXT:    vpinsrb $1, %edx, %xmm4, %xmm4268; CHECK-NEXT:    vpinsrb $2, %ecx, %xmm4, %xmm4269; CHECK-NEXT:    vpinsrb $3, %r8d, %xmm4, %xmm4270; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm5 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero271; CHECK-NEXT:    vpslld $31, %xmm5, %xmm5272; CHECK-NEXT:    vpinsrb $4, %r9d, %xmm4, %xmm4273; CHECK-NEXT:    vpinsrb $5, {{[0-9]+}}(%rsp), %xmm4, %xmm4274; CHECK-NEXT:    vpinsrb $6, {{[0-9]+}}(%rsp), %xmm4, %xmm4275; CHECK-NEXT:    vpinsrb $7, {{[0-9]+}}(%rsp), %xmm4, %xmm4276; CHECK-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[1,1,1,1]277; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero278; CHECK-NEXT:    vpslld $31, %xmm4, %xmm4279; CHECK-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4280; CHECK-NEXT:    vmaskmovps (%rdi), %ymm4, %ymm5281; CHECK-NEXT:    vblendvps %ymm4, %ymm5, %ymm3, %ymm3282; CHECK-NEXT:    vmovd {{.*#+}} xmm4 = mem[0],zero,zero,zero283; CHECK-NEXT:    vpinsrb $2, {{[0-9]+}}(%rsp), %xmm4, %xmm4284; CHECK-NEXT:    vpinsrb $4, {{[0-9]+}}(%rsp), %xmm4, %xmm4285; CHECK-NEXT:    vpinsrb $6, {{[0-9]+}}(%rsp), %xmm4, %xmm4286; CHECK-NEXT:    vpmovzxwd {{.*#+}} xmm5 = xmm4[0],zero,xmm4[1],zero,xmm4[2],zero,xmm4[3],zero287; CHECK-NEXT:    vpslld $31, %xmm5, %xmm5288; CHECK-NEXT:    vpinsrb $8, {{[0-9]+}}(%rsp), %xmm4, %xmm4289; CHECK-NEXT:    vpinsrb $10, {{[0-9]+}}(%rsp), %xmm4, %xmm4290; CHECK-NEXT:    vpinsrb $12, {{[0-9]+}}(%rsp), %xmm4, %xmm4291; CHECK-NEXT:    vpinsrb $14, {{[0-9]+}}(%rsp), %xmm4, %xmm4292; CHECK-NEXT:    vpunpckhwd {{.*#+}} xmm4 = xmm4[4,4,5,5,6,6,7,7]293; CHECK-NEXT:    vpslld $31, %xmm4, %xmm4294; CHECK-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm4295; CHECK-NEXT:    vmaskmovps 32(%rdi), %ymm4, %ymm5296; CHECK-NEXT:    vblendvps %ymm4, %ymm5, %ymm2, %ymm2297; CHECK-NEXT:    vmovd %r10d, %xmm4298; CHECK-NEXT:    vpinsrb $1, {{[0-9]+}}(%rsp), %xmm4, %xmm4299; CHECK-NEXT:    vpinsrb $2, {{[0-9]+}}(%rsp), %xmm4, %xmm4300; CHECK-NEXT:    vpinsrb $3, {{[0-9]+}}(%rsp), %xmm4, %xmm4301; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm5 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero302; CHECK-NEXT:    vpslld $31, %xmm5, %xmm5303; CHECK-NEXT:    vpinsrb $4, {{[0-9]+}}(%rsp), %xmm4, %xmm4304; CHECK-NEXT:    vpinsrb $5, {{[0-9]+}}(%rsp), %xmm4, %xmm4305; CHECK-NEXT:    vpinsrb $6, {{[0-9]+}}(%rsp), %xmm4, %xmm4306; CHECK-NEXT:    vpshufd {{.*#+}} xmm4 = xmm4[1,1,1,1]307; CHECK-NEXT:    vpmovzxbd {{.*#+}} xmm4 = xmm4[0],zero,zero,zero,xmm4[1],zero,zero,zero,xmm4[2],zero,zero,zero,xmm4[3],zero,zero,zero308; CHECK-NEXT:    vpslld $31, %xmm4, %xmm4309; CHECK-NEXT:    vinsertf128 $1, %xmm4, %ymm5, %ymm6310; CHECK-NEXT:    vmaskmovps 64(%rdi), %ymm6, %ymm6311; CHECK-NEXT:    vmovaps %ymm2, 32(%rax)312; CHECK-NEXT:    vextractf128 $1, %ymm6, %xmm2313; CHECK-NEXT:    vblendvps %xmm4, %xmm2, %xmm1, %xmm1314; CHECK-NEXT:    vextractps $2, %xmm1, 88(%rax)315; CHECK-NEXT:    vmovlps %xmm1, 80(%rax)316; CHECK-NEXT:    vblendvps %xmm5, %xmm6, %xmm0, %xmm0317; CHECK-NEXT:    vmovaps %xmm0, 64(%rax)318; CHECK-NEXT:    vmovaps %ymm3, (%rax)319; CHECK-NEXT:    vzeroupper320; CHECK-NEXT:    retq321  %res = call <23 x float> @llvm.masked.load.v23f32.p0(ptr %addr, i32 4, <23 x i1>%mask, <23 x float> %dst)322  ret <23 x float> %res323}324 325declare <9 x float> @llvm.masked.load.v9f32.p0(ptr %addr, i32 %align, <9 x i1> %mask, <9 x float> %dst)326declare <13 x float> @llvm.masked.load.v13f32.p0(ptr %addr, i32 %align, <13 x i1> %mask, <13 x float> %dst)327declare <14 x float> @llvm.masked.load.v14f32.p0(ptr %addr, i32 %align, <14 x i1> %mask, <14 x float> %dst)328declare <17 x float> @llvm.masked.load.v17f32.p0(ptr %addr, i32 %align, <17 x i1> %mask, <17 x float> %dst)329declare <23 x float> @llvm.masked.load.v23f32.p0(ptr %addr, i32 %align, <23 x i1> %mask, <23 x float> %dst)330