2181 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=i686-unknown | FileCheck %s --check-prefix=X86-I323; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=i686-unknown | FileCheck %s --check-prefix=X86-I644; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=i686-unknown -mattr=sse2 | FileCheck %s --check-prefix=X86-SSE25; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=i686-unknown -mattr=avx | FileCheck %s --check-prefixes=X86-AVX,X86-AVX16; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=i686-unknown -mattr=avx512f | FileCheck %s --check-prefixes=X86-AVX,AVX512-i327; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=i686-unknown -mattr=avx512dq,avx512vl | FileCheck %s --check-prefixes=X86-AVX,AVX512-i328; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=x86_64-unknown -mattr=avx | FileCheck %s --check-prefixes=X64-AVX-i32,X64-AVX1-i329; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=x86_64-unknown -mattr=avx512f | FileCheck %s --check-prefixes=X64-AVX-i32,AVX512-i3210; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=x86_64-unknown -mattr=avx512dq,avx512vl | FileCheck %s --check-prefixes=X64-AVX-i32,AVX512-i3211; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=x86_64-unknown -mattr=avx | FileCheck %s --check-prefixes=X64-AVX-i64,X64-AVX1-i6412; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=x86_64-unknown -mattr=avx512f | FileCheck %s --check-prefixes=X64-AVX-i64,AVX512-i6413; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=x86_64-unknown -mattr=avx512dq,avx512vl | FileCheck %s --check-prefixes=X64-AVX-i64,AVX512DQ-i6414 15define <1 x iXLen> @lrint_v1f32(<1 x float> %x) nounwind {16; X86-I32-LABEL: lrint_v1f32:17; X86-I32: # %bb.0:18; X86-I32-NEXT: pushl %eax19; X86-I32-NEXT: flds {{[0-9]+}}(%esp)20; X86-I32-NEXT: fistpl (%esp)21; X86-I32-NEXT: movl (%esp), %eax22; X86-I32-NEXT: popl %ecx23; X86-I32-NEXT: retl24;25; X86-I64-LABEL: lrint_v1f32:26; X86-I64: # %bb.0:27; X86-I64-NEXT: pushl %ebp28; X86-I64-NEXT: movl %esp, %ebp29; X86-I64-NEXT: andl $-8, %esp30; X86-I64-NEXT: subl $8, %esp31; X86-I64-NEXT: flds 8(%ebp)32; X86-I64-NEXT: fistpll (%esp)33; X86-I64-NEXT: movl (%esp), %eax34; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edx35; X86-I64-NEXT: movl %ebp, %esp36; X86-I64-NEXT: popl %ebp37; X86-I64-NEXT: retl38;39; X86-SSE2-LABEL: lrint_v1f32:40; X86-SSE2: # %bb.0:41; X86-SSE2-NEXT: cvtss2si {{[0-9]+}}(%esp), %eax42; X86-SSE2-NEXT: retl43;44; X86-AVX-LABEL: lrint_v1f32:45; X86-AVX: # %bb.0:46; X86-AVX-NEXT: vcvtss2si {{[0-9]+}}(%esp), %eax47; X86-AVX-NEXT: retl48;49; X64-AVX-i32-LABEL: lrint_v1f32:50; X64-AVX-i32: # %bb.0:51; X64-AVX-i32-NEXT: vcvtss2si %xmm0, %eax52; X64-AVX-i32-NEXT: retq53;54; X64-AVX-i64-LABEL: lrint_v1f32:55; X64-AVX-i64: # %bb.0:56; X64-AVX-i64-NEXT: vcvtss2si %xmm0, %rax57; X64-AVX-i64-NEXT: retq58 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f32(<1 x float> %x)59 ret <1 x iXLen> %a60}61declare <1 x iXLen> @llvm.lrint.v1iXLen.v1f32(<1 x float>)62 63define <2 x iXLen> @lrint_v2f32(<2 x float> %x) nounwind {64; X86-I32-LABEL: lrint_v2f32:65; X86-I32: # %bb.0:66; X86-I32-NEXT: subl $8, %esp67; X86-I32-NEXT: flds {{[0-9]+}}(%esp)68; X86-I32-NEXT: flds {{[0-9]+}}(%esp)69; X86-I32-NEXT: fistpl (%esp)70; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)71; X86-I32-NEXT: movl (%esp), %eax72; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %edx73; X86-I32-NEXT: addl $8, %esp74; X86-I32-NEXT: retl75;76; X86-I64-LABEL: lrint_v2f32:77; X86-I64: # %bb.0:78; X86-I64-NEXT: pushl %ebp79; X86-I64-NEXT: movl %esp, %ebp80; X86-I64-NEXT: pushl %edi81; X86-I64-NEXT: pushl %esi82; X86-I64-NEXT: andl $-8, %esp83; X86-I64-NEXT: subl $16, %esp84; X86-I64-NEXT: movl 8(%ebp), %eax85; X86-I64-NEXT: flds 16(%ebp)86; X86-I64-NEXT: flds 12(%ebp)87; X86-I64-NEXT: fistpll (%esp)88; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)89; X86-I64-NEXT: movl (%esp), %ecx90; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edx91; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %esi92; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edi93; X86-I64-NEXT: movl %edi, 12(%eax)94; X86-I64-NEXT: movl %esi, 8(%eax)95; X86-I64-NEXT: movl %edx, 4(%eax)96; X86-I64-NEXT: movl %ecx, (%eax)97; X86-I64-NEXT: leal -8(%ebp), %esp98; X86-I64-NEXT: popl %esi99; X86-I64-NEXT: popl %edi100; X86-I64-NEXT: popl %ebp101; X86-I64-NEXT: retl $4102;103; X86-SSE2-LABEL: lrint_v2f32:104; X86-SSE2: # %bb.0:105; X86-SSE2-NEXT: cvtps2dq %xmm0, %xmm0106; X86-SSE2-NEXT: retl107;108; X86-AVX-LABEL: lrint_v2f32:109; X86-AVX: # %bb.0:110; X86-AVX-NEXT: vcvtps2dq %xmm0, %xmm0111; X86-AVX-NEXT: retl112;113; X64-AVX-i32-LABEL: lrint_v2f32:114; X64-AVX-i32: # %bb.0:115; X64-AVX-i32-NEXT: vcvtps2dq %xmm0, %xmm0116; X64-AVX-i32-NEXT: retq117;118; X64-AVX1-i64-LABEL: lrint_v2f32:119; X64-AVX1-i64: # %bb.0:120; X64-AVX1-i64-NEXT: vcvtss2si %xmm0, %rax121; X64-AVX1-i64-NEXT: vmovq %rax, %xmm1122; X64-AVX1-i64-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]123; X64-AVX1-i64-NEXT: vcvtss2si %xmm0, %rax124; X64-AVX1-i64-NEXT: vmovq %rax, %xmm0125; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]126; X64-AVX1-i64-NEXT: retq127;128; AVX512-i64-LABEL: lrint_v2f32:129; AVX512-i64: # %bb.0:130; AVX512-i64-NEXT: vcvtss2si %xmm0, %rax131; AVX512-i64-NEXT: vmovq %rax, %xmm1132; AVX512-i64-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]133; AVX512-i64-NEXT: vcvtss2si %xmm0, %rax134; AVX512-i64-NEXT: vmovq %rax, %xmm0135; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]136; AVX512-i64-NEXT: retq137;138; AVX512DQ-i64-LABEL: lrint_v2f32:139; AVX512DQ-i64: # %bb.0:140; AVX512DQ-i64-NEXT: vcvtps2qq %xmm0, %xmm0141; AVX512DQ-i64-NEXT: retq142 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f32(<2 x float> %x)143 ret <2 x iXLen> %a144}145declare <2 x iXLen> @llvm.lrint.v2iXLen.v2f32(<2 x float>)146 147define <4 x iXLen> @lrint_v4f32(<4 x float> %x) nounwind {148; X86-I32-LABEL: lrint_v4f32:149; X86-I32: # %bb.0:150; X86-I32-NEXT: pushl %edi151; X86-I32-NEXT: pushl %esi152; X86-I32-NEXT: subl $16, %esp153; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %eax154; X86-I32-NEXT: flds {{[0-9]+}}(%esp)155; X86-I32-NEXT: flds {{[0-9]+}}(%esp)156; X86-I32-NEXT: flds {{[0-9]+}}(%esp)157; X86-I32-NEXT: flds {{[0-9]+}}(%esp)158; X86-I32-NEXT: fistpl (%esp)159; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)160; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)161; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)162; X86-I32-NEXT: movl (%esp), %ecx163; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %edx164; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %esi165; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %edi166; X86-I32-NEXT: movl %edi, 12(%eax)167; X86-I32-NEXT: movl %esi, 8(%eax)168; X86-I32-NEXT: movl %edx, 4(%eax)169; X86-I32-NEXT: movl %ecx, (%eax)170; X86-I32-NEXT: addl $16, %esp171; X86-I32-NEXT: popl %esi172; X86-I32-NEXT: popl %edi173; X86-I32-NEXT: retl $4174;175; X86-I64-LABEL: lrint_v4f32:176; X86-I64: # %bb.0:177; X86-I64-NEXT: pushl %ebp178; X86-I64-NEXT: movl %esp, %ebp179; X86-I64-NEXT: pushl %ebx180; X86-I64-NEXT: pushl %edi181; X86-I64-NEXT: pushl %esi182; X86-I64-NEXT: andl $-8, %esp183; X86-I64-NEXT: subl $56, %esp184; X86-I64-NEXT: movl 8(%ebp), %eax185; X86-I64-NEXT: flds 24(%ebp)186; X86-I64-NEXT: flds 20(%ebp)187; X86-I64-NEXT: flds 16(%ebp)188; X86-I64-NEXT: flds 12(%ebp)189; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)190; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)191; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)192; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)193; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx194; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill195; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx196; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill197; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx198; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill199; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edi200; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ebx201; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edx202; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx203; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %esi204; X86-I64-NEXT: movl %esi, 28(%eax)205; X86-I64-NEXT: movl %ecx, 24(%eax)206; X86-I64-NEXT: movl %edx, 20(%eax)207; X86-I64-NEXT: movl %ebx, 16(%eax)208; X86-I64-NEXT: movl %edi, 12(%eax)209; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload210; X86-I64-NEXT: movl %ecx, 8(%eax)211; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload212; X86-I64-NEXT: movl %ecx, 4(%eax)213; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload214; X86-I64-NEXT: movl %ecx, (%eax)215; X86-I64-NEXT: leal -12(%ebp), %esp216; X86-I64-NEXT: popl %esi217; X86-I64-NEXT: popl %edi218; X86-I64-NEXT: popl %ebx219; X86-I64-NEXT: popl %ebp220; X86-I64-NEXT: retl $4221;222; X86-SSE2-LABEL: lrint_v4f32:223; X86-SSE2: # %bb.0:224; X86-SSE2-NEXT: cvtps2dq %xmm0, %xmm0225; X86-SSE2-NEXT: retl226;227; X86-AVX-LABEL: lrint_v4f32:228; X86-AVX: # %bb.0:229; X86-AVX-NEXT: vcvtps2dq %xmm0, %xmm0230; X86-AVX-NEXT: retl231;232; X64-AVX-i32-LABEL: lrint_v4f32:233; X64-AVX-i32: # %bb.0:234; X64-AVX-i32-NEXT: vcvtps2dq %xmm0, %xmm0235; X64-AVX-i32-NEXT: retq236;237; X64-AVX1-i64-LABEL: lrint_v4f32:238; X64-AVX1-i64: # %bb.0:239; X64-AVX1-i64-NEXT: vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]240; X64-AVX1-i64-NEXT: vcvtss2si %xmm1, %rax241; X64-AVX1-i64-NEXT: vmovq %rax, %xmm1242; X64-AVX1-i64-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]243; X64-AVX1-i64-NEXT: vcvtss2si %xmm2, %rax244; X64-AVX1-i64-NEXT: vmovq %rax, %xmm2245; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]246; X64-AVX1-i64-NEXT: vcvtss2si %xmm0, %rax247; X64-AVX1-i64-NEXT: vmovq %rax, %xmm2248; X64-AVX1-i64-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]249; X64-AVX1-i64-NEXT: vcvtss2si %xmm0, %rax250; X64-AVX1-i64-NEXT: vmovq %rax, %xmm0251; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]252; X64-AVX1-i64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0253; X64-AVX1-i64-NEXT: retq254;255; AVX512-i64-LABEL: lrint_v4f32:256; AVX512-i64: # %bb.0:257; AVX512-i64-NEXT: vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]258; AVX512-i64-NEXT: vcvtss2si %xmm1, %rax259; AVX512-i64-NEXT: vmovq %rax, %xmm1260; AVX512-i64-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]261; AVX512-i64-NEXT: vcvtss2si %xmm2, %rax262; AVX512-i64-NEXT: vmovq %rax, %xmm2263; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]264; AVX512-i64-NEXT: vcvtss2si %xmm0, %rax265; AVX512-i64-NEXT: vmovq %rax, %xmm2266; AVX512-i64-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]267; AVX512-i64-NEXT: vcvtss2si %xmm0, %rax268; AVX512-i64-NEXT: vmovq %rax, %xmm0269; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]270; AVX512-i64-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0271; AVX512-i64-NEXT: retq272;273; AVX512DQ-i64-LABEL: lrint_v4f32:274; AVX512DQ-i64: # %bb.0:275; AVX512DQ-i64-NEXT: vcvtps2qq %xmm0, %ymm0276; AVX512DQ-i64-NEXT: retq277 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f32(<4 x float> %x)278 ret <4 x iXLen> %a279}280declare <4 x iXLen> @llvm.lrint.v4iXLen.v4f32(<4 x float>)281 282define <8 x iXLen> @lrint_v8f32(<8 x float> %x) nounwind {283; X86-I32-LABEL: lrint_v8f32:284; X86-I32: # %bb.0:285; X86-I32-NEXT: pushl %ebp286; X86-I32-NEXT: pushl %ebx287; X86-I32-NEXT: pushl %edi288; X86-I32-NEXT: pushl %esi289; X86-I32-NEXT: subl $40, %esp290; X86-I32-NEXT: flds {{[0-9]+}}(%esp)291; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)292; X86-I32-NEXT: flds {{[0-9]+}}(%esp)293; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)294; X86-I32-NEXT: flds {{[0-9]+}}(%esp)295; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)296; X86-I32-NEXT: flds {{[0-9]+}}(%esp)297; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)298; X86-I32-NEXT: flds {{[0-9]+}}(%esp)299; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)300; X86-I32-NEXT: flds {{[0-9]+}}(%esp)301; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)302; X86-I32-NEXT: flds {{[0-9]+}}(%esp)303; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)304; X86-I32-NEXT: flds {{[0-9]+}}(%esp)305; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)306; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %eax307; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %ecx308; X86-I32-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill309; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %ecx310; X86-I32-NEXT: movl %ecx, (%esp) # 4-byte Spill311; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %esi312; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %edi313; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %ebx314; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %ebp315; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %ecx316; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %edx317; X86-I32-NEXT: movl %edx, 28(%eax)318; X86-I32-NEXT: movl %ecx, 24(%eax)319; X86-I32-NEXT: movl %ebp, 20(%eax)320; X86-I32-NEXT: movl %ebx, 16(%eax)321; X86-I32-NEXT: movl %edi, 12(%eax)322; X86-I32-NEXT: movl %esi, 8(%eax)323; X86-I32-NEXT: movl (%esp), %ecx # 4-byte Reload324; X86-I32-NEXT: movl %ecx, 4(%eax)325; X86-I32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload326; X86-I32-NEXT: movl %ecx, (%eax)327; X86-I32-NEXT: addl $40, %esp328; X86-I32-NEXT: popl %esi329; X86-I32-NEXT: popl %edi330; X86-I32-NEXT: popl %ebx331; X86-I32-NEXT: popl %ebp332; X86-I32-NEXT: retl $4333;334; X86-I64-LABEL: lrint_v8f32:335; X86-I64: # %bb.0:336; X86-I64-NEXT: pushl %ebp337; X86-I64-NEXT: movl %esp, %ebp338; X86-I64-NEXT: pushl %ebx339; X86-I64-NEXT: pushl %edi340; X86-I64-NEXT: pushl %esi341; X86-I64-NEXT: andl $-8, %esp342; X86-I64-NEXT: subl $120, %esp343; X86-I64-NEXT: flds 12(%ebp)344; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)345; X86-I64-NEXT: flds 16(%ebp)346; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)347; X86-I64-NEXT: flds 20(%ebp)348; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)349; X86-I64-NEXT: flds 24(%ebp)350; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)351; X86-I64-NEXT: flds 28(%ebp)352; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)353; X86-I64-NEXT: flds 32(%ebp)354; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)355; X86-I64-NEXT: flds 36(%ebp)356; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)357; X86-I64-NEXT: flds 40(%ebp)358; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)359; X86-I64-NEXT: movl 8(%ebp), %eax360; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx361; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill362; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx363; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill364; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx365; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill366; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx367; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill368; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx369; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill370; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx371; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill372; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx373; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill374; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx375; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill376; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx377; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill378; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx379; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill380; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx381; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill382; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edi383; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %esi384; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edx385; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx386; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ebx387; X86-I64-NEXT: movl %ebx, 60(%eax)388; X86-I64-NEXT: movl %ecx, 56(%eax)389; X86-I64-NEXT: movl %edx, 52(%eax)390; X86-I64-NEXT: movl %esi, 48(%eax)391; X86-I64-NEXT: movl %edi, 44(%eax)392; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload393; X86-I64-NEXT: movl %ecx, 40(%eax)394; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload395; X86-I64-NEXT: movl %ecx, 36(%eax)396; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload397; X86-I64-NEXT: movl %ecx, 32(%eax)398; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload399; X86-I64-NEXT: movl %ecx, 28(%eax)400; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload401; X86-I64-NEXT: movl %ecx, 24(%eax)402; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload403; X86-I64-NEXT: movl %ecx, 20(%eax)404; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload405; X86-I64-NEXT: movl %ecx, 16(%eax)406; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload407; X86-I64-NEXT: movl %ecx, 12(%eax)408; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload409; X86-I64-NEXT: movl %ecx, 8(%eax)410; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload411; X86-I64-NEXT: movl %ecx, 4(%eax)412; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload413; X86-I64-NEXT: movl %ecx, (%eax)414; X86-I64-NEXT: leal -12(%ebp), %esp415; X86-I64-NEXT: popl %esi416; X86-I64-NEXT: popl %edi417; X86-I64-NEXT: popl %ebx418; X86-I64-NEXT: popl %ebp419; X86-I64-NEXT: retl $4420;421; X86-SSE2-LABEL: lrint_v8f32:422; X86-SSE2: # %bb.0:423; X86-SSE2-NEXT: cvtps2dq %xmm0, %xmm0424; X86-SSE2-NEXT: cvtps2dq %xmm1, %xmm1425; X86-SSE2-NEXT: retl426;427; X86-AVX-LABEL: lrint_v8f32:428; X86-AVX: # %bb.0:429; X86-AVX-NEXT: vcvtps2dq %ymm0, %ymm0430; X86-AVX-NEXT: retl431;432; X64-AVX-i32-LABEL: lrint_v8f32:433; X64-AVX-i32: # %bb.0:434; X64-AVX-i32-NEXT: vcvtps2dq %ymm0, %ymm0435; X64-AVX-i32-NEXT: retq436;437; X64-AVX1-i64-LABEL: lrint_v8f32:438; X64-AVX1-i64: # %bb.0:439; X64-AVX1-i64-NEXT: vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]440; X64-AVX1-i64-NEXT: vcvtss2si %xmm1, %rax441; X64-AVX1-i64-NEXT: vmovq %rax, %xmm1442; X64-AVX1-i64-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]443; X64-AVX1-i64-NEXT: vcvtss2si %xmm2, %rax444; X64-AVX1-i64-NEXT: vmovq %rax, %xmm2445; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]446; X64-AVX1-i64-NEXT: vcvtss2si %xmm0, %rax447; X64-AVX1-i64-NEXT: vmovq %rax, %xmm2448; X64-AVX1-i64-NEXT: vmovshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]449; X64-AVX1-i64-NEXT: vcvtss2si %xmm3, %rax450; X64-AVX1-i64-NEXT: vmovq %rax, %xmm3451; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]452; X64-AVX1-i64-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm2453; X64-AVX1-i64-NEXT: vextractf128 $1, %ymm0, %xmm0454; X64-AVX1-i64-NEXT: vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]455; X64-AVX1-i64-NEXT: vcvtss2si %xmm1, %rax456; X64-AVX1-i64-NEXT: vmovq %rax, %xmm1457; X64-AVX1-i64-NEXT: vshufpd {{.*#+}} xmm3 = xmm0[1,0]458; X64-AVX1-i64-NEXT: vcvtss2si %xmm3, %rax459; X64-AVX1-i64-NEXT: vmovq %rax, %xmm3460; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm3[0],xmm1[0]461; X64-AVX1-i64-NEXT: vcvtss2si %xmm0, %rax462; X64-AVX1-i64-NEXT: vmovq %rax, %xmm3463; X64-AVX1-i64-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]464; X64-AVX1-i64-NEXT: vcvtss2si %xmm0, %rax465; X64-AVX1-i64-NEXT: vmovq %rax, %xmm0466; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]467; X64-AVX1-i64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1468; X64-AVX1-i64-NEXT: vmovaps %ymm2, %ymm0469; X64-AVX1-i64-NEXT: retq470;471; AVX512-i64-LABEL: lrint_v8f32:472; AVX512-i64: # %bb.0:473; AVX512-i64-NEXT: vextractf128 $1, %ymm0, %xmm1474; AVX512-i64-NEXT: vshufps {{.*#+}} xmm2 = xmm1[3,3,3,3]475; AVX512-i64-NEXT: vcvtss2si %xmm2, %rax476; AVX512-i64-NEXT: vmovq %rax, %xmm2477; AVX512-i64-NEXT: vshufpd {{.*#+}} xmm3 = xmm1[1,0]478; AVX512-i64-NEXT: vcvtss2si %xmm3, %rax479; AVX512-i64-NEXT: vmovq %rax, %xmm3480; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]481; AVX512-i64-NEXT: vcvtss2si %xmm1, %rax482; AVX512-i64-NEXT: vmovq %rax, %xmm3483; AVX512-i64-NEXT: vmovshdup {{.*#+}} xmm1 = xmm1[1,1,3,3]484; AVX512-i64-NEXT: vcvtss2si %xmm1, %rax485; AVX512-i64-NEXT: vmovq %rax, %xmm1486; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm3[0],xmm1[0]487; AVX512-i64-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1488; AVX512-i64-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]489; AVX512-i64-NEXT: vcvtss2si %xmm2, %rax490; AVX512-i64-NEXT: vmovq %rax, %xmm2491; AVX512-i64-NEXT: vshufpd {{.*#+}} xmm3 = xmm0[1,0]492; AVX512-i64-NEXT: vcvtss2si %xmm3, %rax493; AVX512-i64-NEXT: vmovq %rax, %xmm3494; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]495; AVX512-i64-NEXT: vcvtss2si %xmm0, %rax496; AVX512-i64-NEXT: vmovq %rax, %xmm3497; AVX512-i64-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]498; AVX512-i64-NEXT: vcvtss2si %xmm0, %rax499; AVX512-i64-NEXT: vmovq %rax, %xmm0500; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]501; AVX512-i64-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0502; AVX512-i64-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0503; AVX512-i64-NEXT: retq504;505; AVX512DQ-i64-LABEL: lrint_v8f32:506; AVX512DQ-i64: # %bb.0:507; AVX512DQ-i64-NEXT: vcvtps2qq %ymm0, %zmm0508; AVX512DQ-i64-NEXT: retq509 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f32(<8 x float> %x)510 ret <8 x iXLen> %a511}512declare <8 x iXLen> @llvm.lrint.v8iXLen.v8f32(<8 x float>)513 514define <16 x iXLen> @lrint_v16iXLen_v16f32(<16 x float> %x) nounwind {515 %a = call <16 x iXLen> @llvm.lrint.v16iXLen.v16f32(<16 x float> %x)516 ret <16 x iXLen> %a517}518declare <16 x iXLen> @llvm.lrint.v16iXLen.v16f32(<16 x float>)519 520define <1 x iXLen> @lrint_v1f64(<1 x double> %x) nounwind {521; X86-I32-LABEL: lrint_v1f64:522; X86-I32: # %bb.0:523; X86-I32-NEXT: pushl %eax524; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)525; X86-I32-NEXT: fistpl (%esp)526; X86-I32-NEXT: movl (%esp), %eax527; X86-I32-NEXT: popl %ecx528; X86-I32-NEXT: retl529;530; X86-I64-LABEL: lrint_v1f64:531; X86-I64: # %bb.0:532; X86-I64-NEXT: pushl %ebp533; X86-I64-NEXT: movl %esp, %ebp534; X86-I64-NEXT: andl $-8, %esp535; X86-I64-NEXT: subl $8, %esp536; X86-I64-NEXT: fldl 8(%ebp)537; X86-I64-NEXT: fistpll (%esp)538; X86-I64-NEXT: movl (%esp), %eax539; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edx540; X86-I64-NEXT: movl %ebp, %esp541; X86-I64-NEXT: popl %ebp542; X86-I64-NEXT: retl543;544; X86-SSE2-LABEL: lrint_v1f64:545; X86-SSE2: # %bb.0:546; X86-SSE2-NEXT: cvtsd2si {{[0-9]+}}(%esp), %eax547; X86-SSE2-NEXT: retl548;549; X86-AVX-LABEL: lrint_v1f64:550; X86-AVX: # %bb.0:551; X86-AVX-NEXT: vcvtsd2si {{[0-9]+}}(%esp), %eax552; X86-AVX-NEXT: retl553;554; X64-AVX-i32-LABEL: lrint_v1f64:555; X64-AVX-i32: # %bb.0:556; X64-AVX-i32-NEXT: vcvtsd2si %xmm0, %eax557; X64-AVX-i32-NEXT: retq558;559; X64-AVX-i64-LABEL: lrint_v1f64:560; X64-AVX-i64: # %bb.0:561; X64-AVX-i64-NEXT: vcvtsd2si %xmm0, %rax562; X64-AVX-i64-NEXT: retq563 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1f64(<1 x double> %x)564 ret <1 x iXLen> %a565}566declare <1 x iXLen> @llvm.lrint.v1iXLen.v1f64(<1 x double>)567 568define <2 x iXLen> @lrint_v2f64(<2 x double> %x) nounwind {569; X86-I32-LABEL: lrint_v2f64:570; X86-I32: # %bb.0:571; X86-I32-NEXT: subl $8, %esp572; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)573; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)574; X86-I32-NEXT: fistpl (%esp)575; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)576; X86-I32-NEXT: movl (%esp), %eax577; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %edx578; X86-I32-NEXT: addl $8, %esp579; X86-I32-NEXT: retl580;581; X86-I64-LABEL: lrint_v2f64:582; X86-I64: # %bb.0:583; X86-I64-NEXT: pushl %ebp584; X86-I64-NEXT: movl %esp, %ebp585; X86-I64-NEXT: pushl %edi586; X86-I64-NEXT: pushl %esi587; X86-I64-NEXT: andl $-8, %esp588; X86-I64-NEXT: subl $16, %esp589; X86-I64-NEXT: movl 8(%ebp), %eax590; X86-I64-NEXT: fldl 20(%ebp)591; X86-I64-NEXT: fldl 12(%ebp)592; X86-I64-NEXT: fistpll (%esp)593; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)594; X86-I64-NEXT: movl (%esp), %ecx595; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edx596; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %esi597; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edi598; X86-I64-NEXT: movl %edi, 12(%eax)599; X86-I64-NEXT: movl %esi, 8(%eax)600; X86-I64-NEXT: movl %edx, 4(%eax)601; X86-I64-NEXT: movl %ecx, (%eax)602; X86-I64-NEXT: leal -8(%ebp), %esp603; X86-I64-NEXT: popl %esi604; X86-I64-NEXT: popl %edi605; X86-I64-NEXT: popl %ebp606; X86-I64-NEXT: retl $4607;608; X86-SSE2-LABEL: lrint_v2f64:609; X86-SSE2: # %bb.0:610; X86-SSE2-NEXT: cvtpd2dq %xmm0, %xmm0611; X86-SSE2-NEXT: retl612;613; X86-AVX-LABEL: lrint_v2f64:614; X86-AVX: # %bb.0:615; X86-AVX-NEXT: vcvtpd2dq %xmm0, %xmm0616; X86-AVX-NEXT: retl617;618; X64-AVX-i32-LABEL: lrint_v2f64:619; X64-AVX-i32: # %bb.0:620; X64-AVX-i32-NEXT: vcvtpd2dq %xmm0, %xmm0621; X64-AVX-i32-NEXT: retq622;623; X64-AVX1-i64-LABEL: lrint_v2f64:624; X64-AVX1-i64: # %bb.0:625; X64-AVX1-i64-NEXT: vcvtsd2si %xmm0, %rax626; X64-AVX1-i64-NEXT: vmovq %rax, %xmm1627; X64-AVX1-i64-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]628; X64-AVX1-i64-NEXT: vcvtsd2si %xmm0, %rax629; X64-AVX1-i64-NEXT: vmovq %rax, %xmm0630; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]631; X64-AVX1-i64-NEXT: retq632;633; AVX512-i64-LABEL: lrint_v2f64:634; AVX512-i64: # %bb.0:635; AVX512-i64-NEXT: vcvtsd2si %xmm0, %rax636; AVX512-i64-NEXT: vmovq %rax, %xmm1637; AVX512-i64-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]638; AVX512-i64-NEXT: vcvtsd2si %xmm0, %rax639; AVX512-i64-NEXT: vmovq %rax, %xmm0640; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]641; AVX512-i64-NEXT: retq642;643; AVX512DQ-i64-LABEL: lrint_v2f64:644; AVX512DQ-i64: # %bb.0:645; AVX512DQ-i64-NEXT: vcvtpd2qq %xmm0, %xmm0646; AVX512DQ-i64-NEXT: retq647 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2f64(<2 x double> %x)648 ret <2 x iXLen> %a649}650declare <2 x iXLen> @llvm.lrint.v2iXLen.v2f64(<2 x double>)651 652define <4 x iXLen> @lrint_v4f64(<4 x double> %x) nounwind {653; X86-I32-LABEL: lrint_v4f64:654; X86-I32: # %bb.0:655; X86-I32-NEXT: pushl %edi656; X86-I32-NEXT: pushl %esi657; X86-I32-NEXT: subl $16, %esp658; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %eax659; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)660; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)661; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)662; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)663; X86-I32-NEXT: fistpl (%esp)664; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)665; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)666; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)667; X86-I32-NEXT: movl (%esp), %ecx668; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %edx669; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %esi670; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %edi671; X86-I32-NEXT: movl %edi, 12(%eax)672; X86-I32-NEXT: movl %esi, 8(%eax)673; X86-I32-NEXT: movl %edx, 4(%eax)674; X86-I32-NEXT: movl %ecx, (%eax)675; X86-I32-NEXT: addl $16, %esp676; X86-I32-NEXT: popl %esi677; X86-I32-NEXT: popl %edi678; X86-I32-NEXT: retl $4679;680; X86-I64-LABEL: lrint_v4f64:681; X86-I64: # %bb.0:682; X86-I64-NEXT: pushl %ebp683; X86-I64-NEXT: movl %esp, %ebp684; X86-I64-NEXT: pushl %ebx685; X86-I64-NEXT: pushl %edi686; X86-I64-NEXT: pushl %esi687; X86-I64-NEXT: andl $-8, %esp688; X86-I64-NEXT: subl $56, %esp689; X86-I64-NEXT: movl 8(%ebp), %eax690; X86-I64-NEXT: fldl 36(%ebp)691; X86-I64-NEXT: fldl 28(%ebp)692; X86-I64-NEXT: fldl 20(%ebp)693; X86-I64-NEXT: fldl 12(%ebp)694; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)695; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)696; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)697; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)698; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx699; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill700; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx701; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill702; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx703; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill704; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edi705; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ebx706; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edx707; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx708; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %esi709; X86-I64-NEXT: movl %esi, 28(%eax)710; X86-I64-NEXT: movl %ecx, 24(%eax)711; X86-I64-NEXT: movl %edx, 20(%eax)712; X86-I64-NEXT: movl %ebx, 16(%eax)713; X86-I64-NEXT: movl %edi, 12(%eax)714; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload715; X86-I64-NEXT: movl %ecx, 8(%eax)716; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload717; X86-I64-NEXT: movl %ecx, 4(%eax)718; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload719; X86-I64-NEXT: movl %ecx, (%eax)720; X86-I64-NEXT: leal -12(%ebp), %esp721; X86-I64-NEXT: popl %esi722; X86-I64-NEXT: popl %edi723; X86-I64-NEXT: popl %ebx724; X86-I64-NEXT: popl %ebp725; X86-I64-NEXT: retl $4726;727; X86-SSE2-LABEL: lrint_v4f64:728; X86-SSE2: # %bb.0:729; X86-SSE2-NEXT: cvtpd2dq %xmm1, %xmm1730; X86-SSE2-NEXT: cvtpd2dq %xmm0, %xmm0731; X86-SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]732; X86-SSE2-NEXT: retl733;734; X86-AVX-LABEL: lrint_v4f64:735; X86-AVX: # %bb.0:736; X86-AVX-NEXT: vcvtpd2dq %ymm0, %xmm0737; X86-AVX-NEXT: vzeroupper738; X86-AVX-NEXT: retl739;740; X64-AVX-i32-LABEL: lrint_v4f64:741; X64-AVX-i32: # %bb.0:742; X64-AVX-i32-NEXT: vcvtpd2dq %ymm0, %xmm0743; X64-AVX-i32-NEXT: vzeroupper744; X64-AVX-i32-NEXT: retq745;746; X64-AVX1-i64-LABEL: lrint_v4f64:747; X64-AVX1-i64: # %bb.0:748; X64-AVX1-i64-NEXT: vextractf128 $1, %ymm0, %xmm1749; X64-AVX1-i64-NEXT: vcvtsd2si %xmm1, %rax750; X64-AVX1-i64-NEXT: vmovq %rax, %xmm2751; X64-AVX1-i64-NEXT: vshufpd {{.*#+}} xmm1 = xmm1[1,0]752; X64-AVX1-i64-NEXT: vcvtsd2si %xmm1, %rax753; X64-AVX1-i64-NEXT: vmovq %rax, %xmm1754; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]755; X64-AVX1-i64-NEXT: vcvtsd2si %xmm0, %rax756; X64-AVX1-i64-NEXT: vmovq %rax, %xmm2757; X64-AVX1-i64-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]758; X64-AVX1-i64-NEXT: vcvtsd2si %xmm0, %rax759; X64-AVX1-i64-NEXT: vmovq %rax, %xmm0760; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]761; X64-AVX1-i64-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0762; X64-AVX1-i64-NEXT: retq763;764; AVX512-i64-LABEL: lrint_v4f64:765; AVX512-i64: # %bb.0:766; AVX512-i64-NEXT: vextractf128 $1, %ymm0, %xmm1767; AVX512-i64-NEXT: vcvtsd2si %xmm1, %rax768; AVX512-i64-NEXT: vmovq %rax, %xmm2769; AVX512-i64-NEXT: vshufpd {{.*#+}} xmm1 = xmm1[1,0]770; AVX512-i64-NEXT: vcvtsd2si %xmm1, %rax771; AVX512-i64-NEXT: vmovq %rax, %xmm1772; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]773; AVX512-i64-NEXT: vcvtsd2si %xmm0, %rax774; AVX512-i64-NEXT: vmovq %rax, %xmm2775; AVX512-i64-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]776; AVX512-i64-NEXT: vcvtsd2si %xmm0, %rax777; AVX512-i64-NEXT: vmovq %rax, %xmm0778; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]779; AVX512-i64-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0780; AVX512-i64-NEXT: retq781;782; AVX512DQ-i64-LABEL: lrint_v4f64:783; AVX512DQ-i64: # %bb.0:784; AVX512DQ-i64-NEXT: vcvtpd2qq %ymm0, %ymm0785; AVX512DQ-i64-NEXT: retq786 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4f64(<4 x double> %x)787 ret <4 x iXLen> %a788}789declare <4 x iXLen> @llvm.lrint.v4iXLen.v4f64(<4 x double>)790 791define <8 x iXLen> @lrint_v8f64(<8 x double> %x) nounwind {792; X86-I32-LABEL: lrint_v8f64:793; X86-I32: # %bb.0:794; X86-I32-NEXT: pushl %ebp795; X86-I32-NEXT: pushl %ebx796; X86-I32-NEXT: pushl %edi797; X86-I32-NEXT: pushl %esi798; X86-I32-NEXT: subl $40, %esp799; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)800; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)801; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)802; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)803; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)804; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)805; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)806; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)807; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)808; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)809; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)810; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)811; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)812; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)813; X86-I32-NEXT: fldl {{[0-9]+}}(%esp)814; X86-I32-NEXT: fistpl {{[0-9]+}}(%esp)815; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %eax816; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %ecx817; X86-I32-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill818; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %ecx819; X86-I32-NEXT: movl %ecx, (%esp) # 4-byte Spill820; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %esi821; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %edi822; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %ebx823; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %ebp824; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %ecx825; X86-I32-NEXT: movl {{[0-9]+}}(%esp), %edx826; X86-I32-NEXT: movl %edx, 28(%eax)827; X86-I32-NEXT: movl %ecx, 24(%eax)828; X86-I32-NEXT: movl %ebp, 20(%eax)829; X86-I32-NEXT: movl %ebx, 16(%eax)830; X86-I32-NEXT: movl %edi, 12(%eax)831; X86-I32-NEXT: movl %esi, 8(%eax)832; X86-I32-NEXT: movl (%esp), %ecx # 4-byte Reload833; X86-I32-NEXT: movl %ecx, 4(%eax)834; X86-I32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload835; X86-I32-NEXT: movl %ecx, (%eax)836; X86-I32-NEXT: addl $40, %esp837; X86-I32-NEXT: popl %esi838; X86-I32-NEXT: popl %edi839; X86-I32-NEXT: popl %ebx840; X86-I32-NEXT: popl %ebp841; X86-I32-NEXT: retl $4842;843; X86-I64-LABEL: lrint_v8f64:844; X86-I64: # %bb.0:845; X86-I64-NEXT: pushl %ebp846; X86-I64-NEXT: movl %esp, %ebp847; X86-I64-NEXT: pushl %ebx848; X86-I64-NEXT: pushl %edi849; X86-I64-NEXT: pushl %esi850; X86-I64-NEXT: andl $-8, %esp851; X86-I64-NEXT: subl $120, %esp852; X86-I64-NEXT: fldl 12(%ebp)853; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)854; X86-I64-NEXT: fldl 20(%ebp)855; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)856; X86-I64-NEXT: fldl 28(%ebp)857; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)858; X86-I64-NEXT: fldl 36(%ebp)859; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)860; X86-I64-NEXT: fldl 44(%ebp)861; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)862; X86-I64-NEXT: fldl 52(%ebp)863; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)864; X86-I64-NEXT: fldl 60(%ebp)865; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)866; X86-I64-NEXT: fldl 68(%ebp)867; X86-I64-NEXT: fistpll {{[0-9]+}}(%esp)868; X86-I64-NEXT: movl 8(%ebp), %eax869; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx870; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill871; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx872; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill873; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx874; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill875; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx876; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill877; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx878; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill879; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx880; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill881; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx882; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill883; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx884; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill885; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx886; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill887; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx888; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill889; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx890; X86-I64-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill891; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edi892; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %esi893; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %edx894; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ecx895; X86-I64-NEXT: movl {{[0-9]+}}(%esp), %ebx896; X86-I64-NEXT: movl %ebx, 60(%eax)897; X86-I64-NEXT: movl %ecx, 56(%eax)898; X86-I64-NEXT: movl %edx, 52(%eax)899; X86-I64-NEXT: movl %esi, 48(%eax)900; X86-I64-NEXT: movl %edi, 44(%eax)901; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload902; X86-I64-NEXT: movl %ecx, 40(%eax)903; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload904; X86-I64-NEXT: movl %ecx, 36(%eax)905; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload906; X86-I64-NEXT: movl %ecx, 32(%eax)907; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload908; X86-I64-NEXT: movl %ecx, 28(%eax)909; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload910; X86-I64-NEXT: movl %ecx, 24(%eax)911; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload912; X86-I64-NEXT: movl %ecx, 20(%eax)913; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload914; X86-I64-NEXT: movl %ecx, 16(%eax)915; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload916; X86-I64-NEXT: movl %ecx, 12(%eax)917; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload918; X86-I64-NEXT: movl %ecx, 8(%eax)919; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload920; X86-I64-NEXT: movl %ecx, 4(%eax)921; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload922; X86-I64-NEXT: movl %ecx, (%eax)923; X86-I64-NEXT: leal -12(%ebp), %esp924; X86-I64-NEXT: popl %esi925; X86-I64-NEXT: popl %edi926; X86-I64-NEXT: popl %ebx927; X86-I64-NEXT: popl %ebp928; X86-I64-NEXT: retl $4929;930; X86-SSE2-LABEL: lrint_v8f64:931; X86-SSE2: # %bb.0:932; X86-SSE2-NEXT: pushl %ebp933; X86-SSE2-NEXT: movl %esp, %ebp934; X86-SSE2-NEXT: andl $-16, %esp935; X86-SSE2-NEXT: subl $16, %esp936; X86-SSE2-NEXT: cvtpd2dq %xmm1, %xmm1937; X86-SSE2-NEXT: cvtpd2dq %xmm0, %xmm0938; X86-SSE2-NEXT: movlhps {{.*#+}} xmm0 = xmm0[0],xmm1[0]939; X86-SSE2-NEXT: cvtpd2dq %xmm2, %xmm1940; X86-SSE2-NEXT: cvtpd2dq 8(%ebp), %xmm2941; X86-SSE2-NEXT: movlhps {{.*#+}} xmm1 = xmm1[0],xmm2[0]942; X86-SSE2-NEXT: movl %ebp, %esp943; X86-SSE2-NEXT: popl %ebp944; X86-SSE2-NEXT: retl945;946; X86-AVX1-LABEL: lrint_v8f64:947; X86-AVX1: # %bb.0:948; X86-AVX1-NEXT: vcvtpd2dq %ymm0, %xmm0949; X86-AVX1-NEXT: vcvtpd2dq %ymm1, %xmm1950; X86-AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0951; X86-AVX1-NEXT: retl952;953; AVX512-i32-LABEL: lrint_v8f64:954; AVX512-i32: # %bb.0:955; AVX512-i32-NEXT: vcvtpd2dq %zmm0, %ymm0956; AVX512-i32-NEXT: ret{{[l|q]}}957;958; X64-AVX1-i32-LABEL: lrint_v8f64:959; X64-AVX1-i32: # %bb.0:960; X64-AVX1-i32-NEXT: vcvtpd2dq %ymm0, %xmm0961; X64-AVX1-i32-NEXT: vcvtpd2dq %ymm1, %xmm1962; X64-AVX1-i32-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0963; X64-AVX1-i32-NEXT: retq964;965; X64-AVX1-i64-LABEL: lrint_v8f64:966; X64-AVX1-i64: # %bb.0:967; X64-AVX1-i64-NEXT: vextractf128 $1, %ymm0, %xmm2968; X64-AVX1-i64-NEXT: vcvtsd2si %xmm2, %rax969; X64-AVX1-i64-NEXT: vmovq %rax, %xmm3970; X64-AVX1-i64-NEXT: vshufpd {{.*#+}} xmm2 = xmm2[1,0]971; X64-AVX1-i64-NEXT: vcvtsd2si %xmm2, %rax972; X64-AVX1-i64-NEXT: vmovq %rax, %xmm2973; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]974; X64-AVX1-i64-NEXT: vcvtsd2si %xmm0, %rax975; X64-AVX1-i64-NEXT: vmovq %rax, %xmm3976; X64-AVX1-i64-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]977; X64-AVX1-i64-NEXT: vcvtsd2si %xmm0, %rax978; X64-AVX1-i64-NEXT: vmovq %rax, %xmm0979; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]980; X64-AVX1-i64-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm0981; X64-AVX1-i64-NEXT: vextractf128 $1, %ymm1, %xmm2982; X64-AVX1-i64-NEXT: vcvtsd2si %xmm2, %rax983; X64-AVX1-i64-NEXT: vmovq %rax, %xmm3984; X64-AVX1-i64-NEXT: vshufpd {{.*#+}} xmm2 = xmm2[1,0]985; X64-AVX1-i64-NEXT: vcvtsd2si %xmm2, %rax986; X64-AVX1-i64-NEXT: vmovq %rax, %xmm2987; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]988; X64-AVX1-i64-NEXT: vcvtsd2si %xmm1, %rax989; X64-AVX1-i64-NEXT: vmovq %rax, %xmm3990; X64-AVX1-i64-NEXT: vshufpd {{.*#+}} xmm1 = xmm1[1,0]991; X64-AVX1-i64-NEXT: vcvtsd2si %xmm1, %rax992; X64-AVX1-i64-NEXT: vmovq %rax, %xmm1993; X64-AVX1-i64-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm3[0],xmm1[0]994; X64-AVX1-i64-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm1995; X64-AVX1-i64-NEXT: retq996;997; AVX512-i64-LABEL: lrint_v8f64:998; AVX512-i64: # %bb.0:999; AVX512-i64-NEXT: vextractf32x4 $3, %zmm0, %xmm11000; AVX512-i64-NEXT: vcvtsd2si %xmm1, %rax1001; AVX512-i64-NEXT: vmovq %rax, %xmm21002; AVX512-i64-NEXT: vshufpd {{.*#+}} xmm1 = xmm1[1,0]1003; AVX512-i64-NEXT: vcvtsd2si %xmm1, %rax1004; AVX512-i64-NEXT: vmovq %rax, %xmm11005; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]1006; AVX512-i64-NEXT: vextractf32x4 $2, %zmm0, %xmm21007; AVX512-i64-NEXT: vcvtsd2si %xmm2, %rax1008; AVX512-i64-NEXT: vmovq %rax, %xmm31009; AVX512-i64-NEXT: vshufpd {{.*#+}} xmm2 = xmm2[1,0]1010; AVX512-i64-NEXT: vcvtsd2si %xmm2, %rax1011; AVX512-i64-NEXT: vmovq %rax, %xmm21012; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]1013; AVX512-i64-NEXT: vinserti128 $1, %xmm1, %ymm2, %ymm11014; AVX512-i64-NEXT: vextractf128 $1, %ymm0, %xmm21015; AVX512-i64-NEXT: vcvtsd2si %xmm2, %rax1016; AVX512-i64-NEXT: vmovq %rax, %xmm31017; AVX512-i64-NEXT: vshufpd {{.*#+}} xmm2 = xmm2[1,0]1018; AVX512-i64-NEXT: vcvtsd2si %xmm2, %rax1019; AVX512-i64-NEXT: vmovq %rax, %xmm21020; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]1021; AVX512-i64-NEXT: vcvtsd2si %xmm0, %rax1022; AVX512-i64-NEXT: vmovq %rax, %xmm31023; AVX512-i64-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]1024; AVX512-i64-NEXT: vcvtsd2si %xmm0, %rax1025; AVX512-i64-NEXT: vmovq %rax, %xmm01026; AVX512-i64-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]1027; AVX512-i64-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm01028; AVX512-i64-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm01029; AVX512-i64-NEXT: retq1030;1031; AVX512DQ-i64-LABEL: lrint_v8f64:1032; AVX512DQ-i64: # %bb.0:1033; AVX512DQ-i64-NEXT: vcvtpd2qq %zmm0, %zmm01034; AVX512DQ-i64-NEXT: retq1035 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8f64(<8 x double> %x)1036 ret <8 x iXLen> %a1037}1038declare <8 x iXLen> @llvm.lrint.v8iXLen.v8f64(<8 x double>)1039 1040define <1 x iXLen> @lrint_v1fp128(<1 x fp128> %x) nounwind {1041; X86-I32-LABEL: lrint_v1fp128:1042; X86-I32: # %bb.0:1043; X86-I32-NEXT: pushl %ebp1044; X86-I32-NEXT: movl %esp, %ebp1045; X86-I32-NEXT: andl $-16, %esp1046; X86-I32-NEXT: subl $16, %esp1047; X86-I32-NEXT: pushl 20(%ebp)1048; X86-I32-NEXT: pushl 16(%ebp)1049; X86-I32-NEXT: pushl 12(%ebp)1050; X86-I32-NEXT: pushl 8(%ebp)1051; X86-I32-NEXT: calll lrintl1052; X86-I32-NEXT: addl $16, %esp1053; X86-I32-NEXT: movl %ebp, %esp1054; X86-I32-NEXT: popl %ebp1055; X86-I32-NEXT: retl1056;1057; X86-I64-LABEL: lrint_v1fp128:1058; X86-I64: # %bb.0:1059; X86-I64-NEXT: pushl %ebp1060; X86-I64-NEXT: movl %esp, %ebp1061; X86-I64-NEXT: andl $-16, %esp1062; X86-I64-NEXT: subl $16, %esp1063; X86-I64-NEXT: pushl 20(%ebp)1064; X86-I64-NEXT: pushl 16(%ebp)1065; X86-I64-NEXT: pushl 12(%ebp)1066; X86-I64-NEXT: pushl 8(%ebp)1067; X86-I64-NEXT: calll lrintl1068; X86-I64-NEXT: addl $16, %esp1069; X86-I64-NEXT: movl %ebp, %esp1070; X86-I64-NEXT: popl %ebp1071; X86-I64-NEXT: retl1072;1073; X86-SSE2-LABEL: lrint_v1fp128:1074; X86-SSE2: # %bb.0:1075; X86-SSE2-NEXT: pushl %ebp1076; X86-SSE2-NEXT: movl %esp, %ebp1077; X86-SSE2-NEXT: andl $-16, %esp1078; X86-SSE2-NEXT: subl $16, %esp1079; X86-SSE2-NEXT: pushl 20(%ebp)1080; X86-SSE2-NEXT: pushl 16(%ebp)1081; X86-SSE2-NEXT: pushl 12(%ebp)1082; X86-SSE2-NEXT: pushl 8(%ebp)1083; X86-SSE2-NEXT: calll lrintl1084; X86-SSE2-NEXT: addl $16, %esp1085; X86-SSE2-NEXT: movl %ebp, %esp1086; X86-SSE2-NEXT: popl %ebp1087; X86-SSE2-NEXT: retl1088;1089; X86-AVX-LABEL: lrint_v1fp128:1090; X86-AVX: # %bb.0:1091; X86-AVX-NEXT: pushl %ebp1092; X86-AVX-NEXT: movl %esp, %ebp1093; X86-AVX-NEXT: andl $-16, %esp1094; X86-AVX-NEXT: subl $32, %esp1095; X86-AVX-NEXT: vmovups 8(%ebp), %xmm01096; X86-AVX-NEXT: vmovups %xmm0, (%esp)1097; X86-AVX-NEXT: calll lrintl1098; X86-AVX-NEXT: movl %ebp, %esp1099; X86-AVX-NEXT: popl %ebp1100; X86-AVX-NEXT: retl1101;1102; X64-AVX-i32-LABEL: lrint_v1fp128:1103; X64-AVX-i32: # %bb.0:1104; X64-AVX-i32-NEXT: pushq %rax1105; X64-AVX-i32-NEXT: callq lrintl@PLT1106; X64-AVX-i32-NEXT: popq %rcx1107; X64-AVX-i32-NEXT: retq1108;1109; X64-AVX-i64-LABEL: lrint_v1fp128:1110; X64-AVX-i64: # %bb.0:1111; X64-AVX-i64-NEXT: pushq %rax1112; X64-AVX-i64-NEXT: callq lrintl@PLT1113; X64-AVX-i64-NEXT: popq %rcx1114; X64-AVX-i64-NEXT: retq1115 %a = call <1 x iXLen> @llvm.lrint.v1iXLen.v1fp128(<1 x fp128> %x)1116 ret <1 x iXLen> %a1117}1118declare <1 x iXLen> @llvm.lrint.v1iXLen.v1fp128(<1 x fp128>)1119 1120define <2 x iXLen> @lrint_v2fp128(<2 x fp128> %x) nounwind {1121; X86-I32-LABEL: lrint_v2fp128:1122; X86-I32: # %bb.0:1123; X86-I32-NEXT: pushl %ebp1124; X86-I32-NEXT: movl %esp, %ebp1125; X86-I32-NEXT: pushl %ebx1126; X86-I32-NEXT: pushl %edi1127; X86-I32-NEXT: pushl %esi1128; X86-I32-NEXT: andl $-16, %esp1129; X86-I32-NEXT: subl $16, %esp1130; X86-I32-NEXT: movl 32(%ebp), %edi1131; X86-I32-NEXT: movl 36(%ebp), %ebx1132; X86-I32-NEXT: pushl 20(%ebp)1133; X86-I32-NEXT: pushl 16(%ebp)1134; X86-I32-NEXT: pushl 12(%ebp)1135; X86-I32-NEXT: pushl 8(%ebp)1136; X86-I32-NEXT: calll lrintl1137; X86-I32-NEXT: addl $16, %esp1138; X86-I32-NEXT: movl %eax, %esi1139; X86-I32-NEXT: pushl %ebx1140; X86-I32-NEXT: pushl %edi1141; X86-I32-NEXT: pushl 28(%ebp)1142; X86-I32-NEXT: pushl 24(%ebp)1143; X86-I32-NEXT: calll lrintl1144; X86-I32-NEXT: addl $16, %esp1145; X86-I32-NEXT: movl %eax, %edx1146; X86-I32-NEXT: movl %esi, %eax1147; X86-I32-NEXT: leal -12(%ebp), %esp1148; X86-I32-NEXT: popl %esi1149; X86-I32-NEXT: popl %edi1150; X86-I32-NEXT: popl %ebx1151; X86-I32-NEXT: popl %ebp1152; X86-I32-NEXT: retl1153;1154; X86-I64-LABEL: lrint_v2fp128:1155; X86-I64: # %bb.0:1156; X86-I64-NEXT: pushl %ebp1157; X86-I64-NEXT: movl %esp, %ebp1158; X86-I64-NEXT: pushl %ebx1159; X86-I64-NEXT: pushl %edi1160; X86-I64-NEXT: pushl %esi1161; X86-I64-NEXT: andl $-16, %esp1162; X86-I64-NEXT: subl $16, %esp1163; X86-I64-NEXT: movl 8(%ebp), %esi1164; X86-I64-NEXT: pushl 24(%ebp)1165; X86-I64-NEXT: pushl 20(%ebp)1166; X86-I64-NEXT: pushl 16(%ebp)1167; X86-I64-NEXT: pushl 12(%ebp)1168; X86-I64-NEXT: calll lrintl1169; X86-I64-NEXT: addl $16, %esp1170; X86-I64-NEXT: movl %eax, %edi1171; X86-I64-NEXT: movl %edx, %ebx1172; X86-I64-NEXT: pushl 40(%ebp)1173; X86-I64-NEXT: pushl 36(%ebp)1174; X86-I64-NEXT: pushl 32(%ebp)1175; X86-I64-NEXT: pushl 28(%ebp)1176; X86-I64-NEXT: calll lrintl1177; X86-I64-NEXT: addl $16, %esp1178; X86-I64-NEXT: movl %edx, 12(%esi)1179; X86-I64-NEXT: movl %eax, 8(%esi)1180; X86-I64-NEXT: movl %ebx, 4(%esi)1181; X86-I64-NEXT: movl %edi, (%esi)1182; X86-I64-NEXT: movl %esi, %eax1183; X86-I64-NEXT: leal -12(%ebp), %esp1184; X86-I64-NEXT: popl %esi1185; X86-I64-NEXT: popl %edi1186; X86-I64-NEXT: popl %ebx1187; X86-I64-NEXT: popl %ebp1188; X86-I64-NEXT: retl $41189;1190; X86-SSE2-LABEL: lrint_v2fp128:1191; X86-SSE2: # %bb.0:1192; X86-SSE2-NEXT: pushl %ebp1193; X86-SSE2-NEXT: movl %esp, %ebp1194; X86-SSE2-NEXT: pushl %ebx1195; X86-SSE2-NEXT: pushl %edi1196; X86-SSE2-NEXT: pushl %esi1197; X86-SSE2-NEXT: andl $-16, %esp1198; X86-SSE2-NEXT: subl $32, %esp1199; X86-SSE2-NEXT: movl 12(%ebp), %edi1200; X86-SSE2-NEXT: movl 16(%ebp), %ebx1201; X86-SSE2-NEXT: movl 20(%ebp), %esi1202; X86-SSE2-NEXT: pushl 36(%ebp)1203; X86-SSE2-NEXT: pushl 32(%ebp)1204; X86-SSE2-NEXT: pushl 28(%ebp)1205; X86-SSE2-NEXT: pushl 24(%ebp)1206; X86-SSE2-NEXT: calll lrintl1207; X86-SSE2-NEXT: addl $16, %esp1208; X86-SSE2-NEXT: movd %eax, %xmm01209; X86-SSE2-NEXT: movdqa %xmm0, (%esp) # 16-byte Spill1210; X86-SSE2-NEXT: pushl %esi1211; X86-SSE2-NEXT: pushl %ebx1212; X86-SSE2-NEXT: pushl %edi1213; X86-SSE2-NEXT: pushl 8(%ebp)1214; X86-SSE2-NEXT: calll lrintl1215; X86-SSE2-NEXT: addl $16, %esp1216; X86-SSE2-NEXT: movd %eax, %xmm01217; X86-SSE2-NEXT: punpckldq (%esp), %xmm0 # 16-byte Folded Reload1218; X86-SSE2-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1219; X86-SSE2-NEXT: leal -12(%ebp), %esp1220; X86-SSE2-NEXT: popl %esi1221; X86-SSE2-NEXT: popl %edi1222; X86-SSE2-NEXT: popl %ebx1223; X86-SSE2-NEXT: popl %ebp1224; X86-SSE2-NEXT: retl1225;1226; X86-AVX-LABEL: lrint_v2fp128:1227; X86-AVX: # %bb.0:1228; X86-AVX-NEXT: pushl %ebp1229; X86-AVX-NEXT: movl %esp, %ebp1230; X86-AVX-NEXT: andl $-16, %esp1231; X86-AVX-NEXT: subl $48, %esp1232; X86-AVX-NEXT: vmovups 8(%ebp), %xmm01233; X86-AVX-NEXT: vmovups %xmm0, (%esp)1234; X86-AVX-NEXT: calll lrintl1235; X86-AVX-NEXT: vmovups 24(%ebp), %xmm01236; X86-AVX-NEXT: vmovups %xmm0, (%esp)1237; X86-AVX-NEXT: vmovd %eax, %xmm01238; X86-AVX-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1239; X86-AVX-NEXT: calll lrintl1240; X86-AVX-NEXT: vmovdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1241; X86-AVX-NEXT: vpinsrd $1, %eax, %xmm0, %xmm01242; X86-AVX-NEXT: movl %ebp, %esp1243; X86-AVX-NEXT: popl %ebp1244; X86-AVX-NEXT: retl1245;1246; X64-AVX-i32-LABEL: lrint_v2fp128:1247; X64-AVX-i32: # %bb.0:1248; X64-AVX-i32-NEXT: pushq %rbx1249; X64-AVX-i32-NEXT: subq $16, %rsp1250; X64-AVX-i32-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1251; X64-AVX-i32-NEXT: vmovaps %xmm1, %xmm01252; X64-AVX-i32-NEXT: callq lrintl@PLT1253; X64-AVX-i32-NEXT: movl %eax, %ebx1254; X64-AVX-i32-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1255; X64-AVX-i32-NEXT: callq lrintl@PLT1256; X64-AVX-i32-NEXT: vmovd %eax, %xmm01257; X64-AVX-i32-NEXT: vpinsrd $1, %ebx, %xmm0, %xmm01258; X64-AVX-i32-NEXT: addq $16, %rsp1259; X64-AVX-i32-NEXT: popq %rbx1260; X64-AVX-i32-NEXT: retq1261;1262; X64-AVX-i64-LABEL: lrint_v2fp128:1263; X64-AVX-i64: # %bb.0:1264; X64-AVX-i64-NEXT: subq $40, %rsp1265; X64-AVX-i64-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1266; X64-AVX-i64-NEXT: vmovaps %xmm1, %xmm01267; X64-AVX-i64-NEXT: callq lrintl@PLT1268; X64-AVX-i64-NEXT: vmovq %rax, %xmm01269; X64-AVX-i64-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1270; X64-AVX-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1271; X64-AVX-i64-NEXT: callq lrintl@PLT1272; X64-AVX-i64-NEXT: vmovq %rax, %xmm01273; X64-AVX-i64-NEXT: vpunpcklqdq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1274; X64-AVX-i64-NEXT: # xmm0 = xmm0[0],mem[0]1275; X64-AVX-i64-NEXT: addq $40, %rsp1276; X64-AVX-i64-NEXT: retq1277 %a = call <2 x iXLen> @llvm.lrint.v2iXLen.v2fp128(<2 x fp128> %x)1278 ret <2 x iXLen> %a1279}1280declare <2 x iXLen> @llvm.lrint.v2iXLen.v2fp128(<2 x fp128>)1281 1282define <4 x iXLen> @lrint_v4fp128(<4 x fp128> %x) nounwind {1283; X86-I32-LABEL: lrint_v4fp128:1284; X86-I32: # %bb.0:1285; X86-I32-NEXT: pushl %ebp1286; X86-I32-NEXT: movl %esp, %ebp1287; X86-I32-NEXT: pushl %ebx1288; X86-I32-NEXT: pushl %edi1289; X86-I32-NEXT: pushl %esi1290; X86-I32-NEXT: andl $-16, %esp1291; X86-I32-NEXT: subl $16, %esp1292; X86-I32-NEXT: movl 8(%ebp), %esi1293; X86-I32-NEXT: movl 36(%ebp), %ebx1294; X86-I32-NEXT: movl 40(%ebp), %edi1295; X86-I32-NEXT: pushl 24(%ebp)1296; X86-I32-NEXT: pushl 20(%ebp)1297; X86-I32-NEXT: pushl 16(%ebp)1298; X86-I32-NEXT: pushl 12(%ebp)1299; X86-I32-NEXT: calll lrintl1300; X86-I32-NEXT: addl $16, %esp1301; X86-I32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1302; X86-I32-NEXT: pushl %edi1303; X86-I32-NEXT: pushl %ebx1304; X86-I32-NEXT: pushl 32(%ebp)1305; X86-I32-NEXT: pushl 28(%ebp)1306; X86-I32-NEXT: calll lrintl1307; X86-I32-NEXT: addl $16, %esp1308; X86-I32-NEXT: movl %eax, %ebx1309; X86-I32-NEXT: pushl 56(%ebp)1310; X86-I32-NEXT: pushl 52(%ebp)1311; X86-I32-NEXT: pushl 48(%ebp)1312; X86-I32-NEXT: pushl 44(%ebp)1313; X86-I32-NEXT: calll lrintl1314; X86-I32-NEXT: addl $16, %esp1315; X86-I32-NEXT: movl %eax, %edi1316; X86-I32-NEXT: pushl 72(%ebp)1317; X86-I32-NEXT: pushl 68(%ebp)1318; X86-I32-NEXT: pushl 64(%ebp)1319; X86-I32-NEXT: pushl 60(%ebp)1320; X86-I32-NEXT: calll lrintl1321; X86-I32-NEXT: addl $16, %esp1322; X86-I32-NEXT: movl %eax, 12(%esi)1323; X86-I32-NEXT: movl %edi, 8(%esi)1324; X86-I32-NEXT: movl %ebx, 4(%esi)1325; X86-I32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1326; X86-I32-NEXT: movl %eax, (%esi)1327; X86-I32-NEXT: movl %esi, %eax1328; X86-I32-NEXT: leal -12(%ebp), %esp1329; X86-I32-NEXT: popl %esi1330; X86-I32-NEXT: popl %edi1331; X86-I32-NEXT: popl %ebx1332; X86-I32-NEXT: popl %ebp1333; X86-I32-NEXT: retl $41334;1335; X86-I64-LABEL: lrint_v4fp128:1336; X86-I64: # %bb.0:1337; X86-I64-NEXT: pushl %ebp1338; X86-I64-NEXT: movl %esp, %ebp1339; X86-I64-NEXT: pushl %ebx1340; X86-I64-NEXT: pushl %edi1341; X86-I64-NEXT: pushl %esi1342; X86-I64-NEXT: andl $-16, %esp1343; X86-I64-NEXT: subl $32, %esp1344; X86-I64-NEXT: movl 8(%ebp), %esi1345; X86-I64-NEXT: movl 36(%ebp), %edi1346; X86-I64-NEXT: movl 40(%ebp), %ebx1347; X86-I64-NEXT: pushl 24(%ebp)1348; X86-I64-NEXT: pushl 20(%ebp)1349; X86-I64-NEXT: pushl 16(%ebp)1350; X86-I64-NEXT: pushl 12(%ebp)1351; X86-I64-NEXT: calll lrintl1352; X86-I64-NEXT: addl $16, %esp1353; X86-I64-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1354; X86-I64-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1355; X86-I64-NEXT: pushl %ebx1356; X86-I64-NEXT: pushl %edi1357; X86-I64-NEXT: pushl 32(%ebp)1358; X86-I64-NEXT: pushl 28(%ebp)1359; X86-I64-NEXT: calll lrintl1360; X86-I64-NEXT: addl $16, %esp1361; X86-I64-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1362; X86-I64-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1363; X86-I64-NEXT: pushl 56(%ebp)1364; X86-I64-NEXT: pushl 52(%ebp)1365; X86-I64-NEXT: pushl 48(%ebp)1366; X86-I64-NEXT: pushl 44(%ebp)1367; X86-I64-NEXT: calll lrintl1368; X86-I64-NEXT: addl $16, %esp1369; X86-I64-NEXT: movl %eax, %edi1370; X86-I64-NEXT: movl %edx, %ebx1371; X86-I64-NEXT: pushl 72(%ebp)1372; X86-I64-NEXT: pushl 68(%ebp)1373; X86-I64-NEXT: pushl 64(%ebp)1374; X86-I64-NEXT: pushl 60(%ebp)1375; X86-I64-NEXT: calll lrintl1376; X86-I64-NEXT: addl $16, %esp1377; X86-I64-NEXT: movl %edx, 28(%esi)1378; X86-I64-NEXT: movl %eax, 24(%esi)1379; X86-I64-NEXT: movl %ebx, 20(%esi)1380; X86-I64-NEXT: movl %edi, 16(%esi)1381; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1382; X86-I64-NEXT: movl %eax, 12(%esi)1383; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1384; X86-I64-NEXT: movl %eax, 8(%esi)1385; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1386; X86-I64-NEXT: movl %eax, 4(%esi)1387; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1388; X86-I64-NEXT: movl %eax, (%esi)1389; X86-I64-NEXT: movl %esi, %eax1390; X86-I64-NEXT: leal -12(%ebp), %esp1391; X86-I64-NEXT: popl %esi1392; X86-I64-NEXT: popl %edi1393; X86-I64-NEXT: popl %ebx1394; X86-I64-NEXT: popl %ebp1395; X86-I64-NEXT: retl $41396;1397; X86-SSE2-LABEL: lrint_v4fp128:1398; X86-SSE2: # %bb.0:1399; X86-SSE2-NEXT: pushl %ebp1400; X86-SSE2-NEXT: movl %esp, %ebp1401; X86-SSE2-NEXT: pushl %ebx1402; X86-SSE2-NEXT: pushl %edi1403; X86-SSE2-NEXT: pushl %esi1404; X86-SSE2-NEXT: andl $-16, %esp1405; X86-SSE2-NEXT: subl $48, %esp1406; X86-SSE2-NEXT: movl 48(%ebp), %edi1407; X86-SSE2-NEXT: movl 52(%ebp), %ebx1408; X86-SSE2-NEXT: pushl 36(%ebp)1409; X86-SSE2-NEXT: pushl 32(%ebp)1410; X86-SSE2-NEXT: pushl 28(%ebp)1411; X86-SSE2-NEXT: pushl 24(%ebp)1412; X86-SSE2-NEXT: calll lrintl1413; X86-SSE2-NEXT: addl $16, %esp1414; X86-SSE2-NEXT: movl %eax, %esi1415; X86-SSE2-NEXT: pushl %ebx1416; X86-SSE2-NEXT: pushl %edi1417; X86-SSE2-NEXT: pushl 44(%ebp)1418; X86-SSE2-NEXT: pushl 40(%ebp)1419; X86-SSE2-NEXT: calll lrintl1420; X86-SSE2-NEXT: addl $16, %esp1421; X86-SSE2-NEXT: movl %eax, %edi1422; X86-SSE2-NEXT: pushl 68(%ebp)1423; X86-SSE2-NEXT: pushl 64(%ebp)1424; X86-SSE2-NEXT: pushl 60(%ebp)1425; X86-SSE2-NEXT: pushl 56(%ebp)1426; X86-SSE2-NEXT: calll lrintl1427; X86-SSE2-NEXT: addl $16, %esp1428; X86-SSE2-NEXT: movd %eax, %xmm01429; X86-SSE2-NEXT: movd %edi, %xmm11430; X86-SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1431; X86-SSE2-NEXT: movdqa %xmm1, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1432; X86-SSE2-NEXT: movd %esi, %xmm01433; X86-SSE2-NEXT: movdqa %xmm0, (%esp) # 16-byte Spill1434; X86-SSE2-NEXT: pushl 20(%ebp)1435; X86-SSE2-NEXT: pushl 16(%ebp)1436; X86-SSE2-NEXT: pushl 12(%ebp)1437; X86-SSE2-NEXT: pushl 8(%ebp)1438; X86-SSE2-NEXT: calll lrintl1439; X86-SSE2-NEXT: addl $16, %esp1440; X86-SSE2-NEXT: movd %eax, %xmm01441; X86-SSE2-NEXT: punpckldq (%esp), %xmm0 # 16-byte Folded Reload1442; X86-SSE2-NEXT: # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]1443; X86-SSE2-NEXT: punpcklqdq {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Folded Reload1444; X86-SSE2-NEXT: # xmm0 = xmm0[0],mem[0]1445; X86-SSE2-NEXT: leal -12(%ebp), %esp1446; X86-SSE2-NEXT: popl %esi1447; X86-SSE2-NEXT: popl %edi1448; X86-SSE2-NEXT: popl %ebx1449; X86-SSE2-NEXT: popl %ebp1450; X86-SSE2-NEXT: retl1451;1452; X86-AVX-LABEL: lrint_v4fp128:1453; X86-AVX: # %bb.0:1454; X86-AVX-NEXT: pushl %ebp1455; X86-AVX-NEXT: movl %esp, %ebp1456; X86-AVX-NEXT: pushl %edi1457; X86-AVX-NEXT: pushl %esi1458; X86-AVX-NEXT: andl $-16, %esp1459; X86-AVX-NEXT: subl $32, %esp1460; X86-AVX-NEXT: vmovups 40(%ebp), %xmm01461; X86-AVX-NEXT: vmovups %xmm0, (%esp)1462; X86-AVX-NEXT: calll lrintl1463; X86-AVX-NEXT: movl %eax, %esi1464; X86-AVX-NEXT: vmovups 24(%ebp), %xmm01465; X86-AVX-NEXT: vmovups %xmm0, (%esp)1466; X86-AVX-NEXT: calll lrintl1467; X86-AVX-NEXT: movl %eax, %edi1468; X86-AVX-NEXT: vmovups 8(%ebp), %xmm01469; X86-AVX-NEXT: vmovups %xmm0, (%esp)1470; X86-AVX-NEXT: calll lrintl1471; X86-AVX-NEXT: vmovups 56(%ebp), %xmm01472; X86-AVX-NEXT: vmovups %xmm0, (%esp)1473; X86-AVX-NEXT: vmovd %eax, %xmm01474; X86-AVX-NEXT: vpinsrd $1, %edi, %xmm0, %xmm01475; X86-AVX-NEXT: vpinsrd $2, %esi, %xmm0, %xmm01476; X86-AVX-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1477; X86-AVX-NEXT: calll lrintl1478; X86-AVX-NEXT: vmovdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1479; X86-AVX-NEXT: vpinsrd $3, %eax, %xmm0, %xmm01480; X86-AVX-NEXT: leal -8(%ebp), %esp1481; X86-AVX-NEXT: popl %esi1482; X86-AVX-NEXT: popl %edi1483; X86-AVX-NEXT: popl %ebp1484; X86-AVX-NEXT: retl1485;1486; X64-AVX-i32-LABEL: lrint_v4fp128:1487; X64-AVX-i32: # %bb.0:1488; X64-AVX-i32-NEXT: pushq %rbx1489; X64-AVX-i32-NEXT: subq $48, %rsp1490; X64-AVX-i32-NEXT: vmovaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1491; X64-AVX-i32-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1492; X64-AVX-i32-NEXT: vmovaps %xmm0, (%rsp) # 16-byte Spill1493; X64-AVX-i32-NEXT: vmovaps %xmm1, %xmm01494; X64-AVX-i32-NEXT: callq lrintl@PLT1495; X64-AVX-i32-NEXT: movl %eax, %ebx1496; X64-AVX-i32-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1497; X64-AVX-i32-NEXT: callq lrintl@PLT1498; X64-AVX-i32-NEXT: vmovd %eax, %xmm01499; X64-AVX-i32-NEXT: vpinsrd $1, %ebx, %xmm0, %xmm01500; X64-AVX-i32-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1501; X64-AVX-i32-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1502; X64-AVX-i32-NEXT: callq lrintl@PLT1503; X64-AVX-i32-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload1504; X64-AVX-i32-NEXT: vpinsrd $2, %eax, %xmm0, %xmm01505; X64-AVX-i32-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1506; X64-AVX-i32-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1507; X64-AVX-i32-NEXT: callq lrintl@PLT1508; X64-AVX-i32-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1509; X64-AVX-i32-NEXT: vpinsrd $3, %eax, %xmm0, %xmm01510; X64-AVX-i32-NEXT: addq $48, %rsp1511; X64-AVX-i32-NEXT: popq %rbx1512; X64-AVX-i32-NEXT: retq1513;1514; X64-AVX1-i64-LABEL: lrint_v4fp128:1515; X64-AVX1-i64: # %bb.0:1516; X64-AVX1-i64-NEXT: subq $72, %rsp1517; X64-AVX1-i64-NEXT: vmovaps %xmm2, (%rsp) # 16-byte Spill1518; X64-AVX1-i64-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1519; X64-AVX1-i64-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1520; X64-AVX1-i64-NEXT: vmovaps %xmm3, %xmm01521; X64-AVX1-i64-NEXT: callq lrintl@PLT1522; X64-AVX1-i64-NEXT: vmovq %rax, %xmm01523; X64-AVX1-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1524; X64-AVX1-i64-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1525; X64-AVX1-i64-NEXT: callq lrintl@PLT1526; X64-AVX1-i64-NEXT: vmovq %rax, %xmm01527; X64-AVX1-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1528; X64-AVX1-i64-NEXT: # xmm0 = xmm0[0],mem[0]1529; X64-AVX1-i64-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1530; X64-AVX1-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1531; X64-AVX1-i64-NEXT: callq lrintl@PLT1532; X64-AVX1-i64-NEXT: vmovq %rax, %xmm01533; X64-AVX1-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1534; X64-AVX1-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1535; X64-AVX1-i64-NEXT: callq lrintl@PLT1536; X64-AVX1-i64-NEXT: vmovq %rax, %xmm01537; X64-AVX1-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1538; X64-AVX1-i64-NEXT: # xmm0 = xmm0[0],mem[0]1539; X64-AVX1-i64-NEXT: vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1540; X64-AVX1-i64-NEXT: addq $72, %rsp1541; X64-AVX1-i64-NEXT: retq1542;1543; AVX512-i64-LABEL: lrint_v4fp128:1544; AVX512-i64: # %bb.0:1545; AVX512-i64-NEXT: subq $72, %rsp1546; AVX512-i64-NEXT: vmovaps %xmm2, (%rsp) # 16-byte Spill1547; AVX512-i64-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1548; AVX512-i64-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1549; AVX512-i64-NEXT: vmovaps %xmm3, %xmm01550; AVX512-i64-NEXT: callq lrintl@PLT1551; AVX512-i64-NEXT: vmovq %rax, %xmm01552; AVX512-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1553; AVX512-i64-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1554; AVX512-i64-NEXT: callq lrintl@PLT1555; AVX512-i64-NEXT: vmovq %rax, %xmm01556; AVX512-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1557; AVX512-i64-NEXT: # xmm0 = xmm0[0],mem[0]1558; AVX512-i64-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1559; AVX512-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1560; AVX512-i64-NEXT: callq lrintl@PLT1561; AVX512-i64-NEXT: vmovq %rax, %xmm01562; AVX512-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1563; AVX512-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1564; AVX512-i64-NEXT: callq lrintl@PLT1565; AVX512-i64-NEXT: vmovq %rax, %xmm01566; AVX512-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1567; AVX512-i64-NEXT: # xmm0 = xmm0[0],mem[0]1568; AVX512-i64-NEXT: vinserti128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1569; AVX512-i64-NEXT: addq $72, %rsp1570; AVX512-i64-NEXT: retq1571;1572; AVX512DQ-i64-LABEL: lrint_v4fp128:1573; AVX512DQ-i64: # %bb.0:1574; AVX512DQ-i64-NEXT: subq $72, %rsp1575; AVX512DQ-i64-NEXT: vmovaps %xmm2, (%rsp) # 16-byte Spill1576; AVX512DQ-i64-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1577; AVX512DQ-i64-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1578; AVX512DQ-i64-NEXT: vmovaps %xmm3, %xmm01579; AVX512DQ-i64-NEXT: callq lrintl@PLT1580; AVX512DQ-i64-NEXT: vmovq %rax, %xmm01581; AVX512DQ-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1582; AVX512DQ-i64-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1583; AVX512DQ-i64-NEXT: callq lrintl@PLT1584; AVX512DQ-i64-NEXT: vmovq %rax, %xmm01585; AVX512DQ-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1586; AVX512DQ-i64-NEXT: # xmm0 = xmm0[0],mem[0]1587; AVX512DQ-i64-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1588; AVX512DQ-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1589; AVX512DQ-i64-NEXT: callq lrintl@PLT1590; AVX512DQ-i64-NEXT: vmovq %rax, %xmm01591; AVX512DQ-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1592; AVX512DQ-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1593; AVX512DQ-i64-NEXT: callq lrintl@PLT1594; AVX512DQ-i64-NEXT: vmovq %rax, %xmm01595; AVX512DQ-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1596; AVX512DQ-i64-NEXT: # xmm0 = xmm0[0],mem[0]1597; AVX512DQ-i64-NEXT: vinserti128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1598; AVX512DQ-i64-NEXT: addq $72, %rsp1599; AVX512DQ-i64-NEXT: retq1600 %a = call <4 x iXLen> @llvm.lrint.v4iXLen.v4fp128(<4 x fp128> %x)1601 ret <4 x iXLen> %a1602}1603declare <4 x iXLen> @llvm.lrint.v4iXLen.v4fp128(<4 x fp128>)1604 1605define <8 x iXLen> @lrint_v8fp128(<8 x fp128> %x) nounwind {1606; X86-I32-LABEL: lrint_v8fp128:1607; X86-I32: # %bb.0:1608; X86-I32-NEXT: pushl %ebp1609; X86-I32-NEXT: movl %esp, %ebp1610; X86-I32-NEXT: pushl %ebx1611; X86-I32-NEXT: pushl %edi1612; X86-I32-NEXT: pushl %esi1613; X86-I32-NEXT: andl $-16, %esp1614; X86-I32-NEXT: subl $32, %esp1615; X86-I32-NEXT: movl 8(%ebp), %esi1616; X86-I32-NEXT: movl 36(%ebp), %ebx1617; X86-I32-NEXT: movl 40(%ebp), %edi1618; X86-I32-NEXT: pushl 24(%ebp)1619; X86-I32-NEXT: pushl 20(%ebp)1620; X86-I32-NEXT: pushl 16(%ebp)1621; X86-I32-NEXT: pushl 12(%ebp)1622; X86-I32-NEXT: calll lrintl1623; X86-I32-NEXT: addl $16, %esp1624; X86-I32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1625; X86-I32-NEXT: pushl %edi1626; X86-I32-NEXT: pushl %ebx1627; X86-I32-NEXT: pushl 32(%ebp)1628; X86-I32-NEXT: pushl 28(%ebp)1629; X86-I32-NEXT: calll lrintl1630; X86-I32-NEXT: addl $16, %esp1631; X86-I32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1632; X86-I32-NEXT: pushl 56(%ebp)1633; X86-I32-NEXT: pushl 52(%ebp)1634; X86-I32-NEXT: pushl 48(%ebp)1635; X86-I32-NEXT: pushl 44(%ebp)1636; X86-I32-NEXT: calll lrintl1637; X86-I32-NEXT: addl $16, %esp1638; X86-I32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1639; X86-I32-NEXT: pushl 72(%ebp)1640; X86-I32-NEXT: pushl 68(%ebp)1641; X86-I32-NEXT: pushl 64(%ebp)1642; X86-I32-NEXT: pushl 60(%ebp)1643; X86-I32-NEXT: calll lrintl1644; X86-I32-NEXT: addl $16, %esp1645; X86-I32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1646; X86-I32-NEXT: pushl 88(%ebp)1647; X86-I32-NEXT: pushl 84(%ebp)1648; X86-I32-NEXT: pushl 80(%ebp)1649; X86-I32-NEXT: pushl 76(%ebp)1650; X86-I32-NEXT: calll lrintl1651; X86-I32-NEXT: addl $16, %esp1652; X86-I32-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1653; X86-I32-NEXT: pushl 104(%ebp)1654; X86-I32-NEXT: pushl 100(%ebp)1655; X86-I32-NEXT: pushl 96(%ebp)1656; X86-I32-NEXT: pushl 92(%ebp)1657; X86-I32-NEXT: calll lrintl1658; X86-I32-NEXT: addl $16, %esp1659; X86-I32-NEXT: movl %eax, %ebx1660; X86-I32-NEXT: pushl 120(%ebp)1661; X86-I32-NEXT: pushl 116(%ebp)1662; X86-I32-NEXT: pushl 112(%ebp)1663; X86-I32-NEXT: pushl 108(%ebp)1664; X86-I32-NEXT: calll lrintl1665; X86-I32-NEXT: addl $16, %esp1666; X86-I32-NEXT: movl %eax, %edi1667; X86-I32-NEXT: pushl 136(%ebp)1668; X86-I32-NEXT: pushl 132(%ebp)1669; X86-I32-NEXT: pushl 128(%ebp)1670; X86-I32-NEXT: pushl 124(%ebp)1671; X86-I32-NEXT: calll lrintl1672; X86-I32-NEXT: addl $16, %esp1673; X86-I32-NEXT: movl %eax, 28(%esi)1674; X86-I32-NEXT: movl %edi, 24(%esi)1675; X86-I32-NEXT: movl %ebx, 20(%esi)1676; X86-I32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1677; X86-I32-NEXT: movl %eax, 16(%esi)1678; X86-I32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1679; X86-I32-NEXT: movl %eax, 12(%esi)1680; X86-I32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1681; X86-I32-NEXT: movl %eax, 8(%esi)1682; X86-I32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1683; X86-I32-NEXT: movl %eax, 4(%esi)1684; X86-I32-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1685; X86-I32-NEXT: movl %eax, (%esi)1686; X86-I32-NEXT: movl %esi, %eax1687; X86-I32-NEXT: leal -12(%ebp), %esp1688; X86-I32-NEXT: popl %esi1689; X86-I32-NEXT: popl %edi1690; X86-I32-NEXT: popl %ebx1691; X86-I32-NEXT: popl %ebp1692; X86-I32-NEXT: retl $41693;1694; X86-I64-LABEL: lrint_v8fp128:1695; X86-I64: # %bb.0:1696; X86-I64-NEXT: pushl %ebp1697; X86-I64-NEXT: movl %esp, %ebp1698; X86-I64-NEXT: pushl %ebx1699; X86-I64-NEXT: pushl %edi1700; X86-I64-NEXT: pushl %esi1701; X86-I64-NEXT: andl $-16, %esp1702; X86-I64-NEXT: subl $64, %esp1703; X86-I64-NEXT: movl 8(%ebp), %esi1704; X86-I64-NEXT: movl 36(%ebp), %edi1705; X86-I64-NEXT: movl 40(%ebp), %ebx1706; X86-I64-NEXT: pushl 24(%ebp)1707; X86-I64-NEXT: pushl 20(%ebp)1708; X86-I64-NEXT: pushl 16(%ebp)1709; X86-I64-NEXT: pushl 12(%ebp)1710; X86-I64-NEXT: calll lrintl1711; X86-I64-NEXT: addl $16, %esp1712; X86-I64-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1713; X86-I64-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1714; X86-I64-NEXT: pushl %ebx1715; X86-I64-NEXT: pushl %edi1716; X86-I64-NEXT: pushl 32(%ebp)1717; X86-I64-NEXT: pushl 28(%ebp)1718; X86-I64-NEXT: calll lrintl1719; X86-I64-NEXT: addl $16, %esp1720; X86-I64-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1721; X86-I64-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1722; X86-I64-NEXT: pushl 56(%ebp)1723; X86-I64-NEXT: pushl 52(%ebp)1724; X86-I64-NEXT: pushl 48(%ebp)1725; X86-I64-NEXT: pushl 44(%ebp)1726; X86-I64-NEXT: calll lrintl1727; X86-I64-NEXT: addl $16, %esp1728; X86-I64-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1729; X86-I64-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1730; X86-I64-NEXT: pushl 72(%ebp)1731; X86-I64-NEXT: pushl 68(%ebp)1732; X86-I64-NEXT: pushl 64(%ebp)1733; X86-I64-NEXT: pushl 60(%ebp)1734; X86-I64-NEXT: calll lrintl1735; X86-I64-NEXT: addl $16, %esp1736; X86-I64-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1737; X86-I64-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1738; X86-I64-NEXT: pushl 88(%ebp)1739; X86-I64-NEXT: pushl 84(%ebp)1740; X86-I64-NEXT: pushl 80(%ebp)1741; X86-I64-NEXT: pushl 76(%ebp)1742; X86-I64-NEXT: calll lrintl1743; X86-I64-NEXT: addl $16, %esp1744; X86-I64-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1745; X86-I64-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1746; X86-I64-NEXT: pushl 104(%ebp)1747; X86-I64-NEXT: pushl 100(%ebp)1748; X86-I64-NEXT: pushl 96(%ebp)1749; X86-I64-NEXT: pushl 92(%ebp)1750; X86-I64-NEXT: calll lrintl1751; X86-I64-NEXT: addl $16, %esp1752; X86-I64-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1753; X86-I64-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1754; X86-I64-NEXT: pushl 120(%ebp)1755; X86-I64-NEXT: pushl 116(%ebp)1756; X86-I64-NEXT: pushl 112(%ebp)1757; X86-I64-NEXT: pushl 108(%ebp)1758; X86-I64-NEXT: calll lrintl1759; X86-I64-NEXT: addl $16, %esp1760; X86-I64-NEXT: movl %eax, %edi1761; X86-I64-NEXT: movl %edx, %ebx1762; X86-I64-NEXT: pushl 136(%ebp)1763; X86-I64-NEXT: pushl 132(%ebp)1764; X86-I64-NEXT: pushl 128(%ebp)1765; X86-I64-NEXT: pushl 124(%ebp)1766; X86-I64-NEXT: calll lrintl1767; X86-I64-NEXT: addl $16, %esp1768; X86-I64-NEXT: movl %edx, 60(%esi)1769; X86-I64-NEXT: movl %eax, 56(%esi)1770; X86-I64-NEXT: movl %ebx, 52(%esi)1771; X86-I64-NEXT: movl %edi, 48(%esi)1772; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1773; X86-I64-NEXT: movl %eax, 44(%esi)1774; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1775; X86-I64-NEXT: movl %eax, 40(%esi)1776; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1777; X86-I64-NEXT: movl %eax, 36(%esi)1778; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1779; X86-I64-NEXT: movl %eax, 32(%esi)1780; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1781; X86-I64-NEXT: movl %eax, 28(%esi)1782; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1783; X86-I64-NEXT: movl %eax, 24(%esi)1784; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1785; X86-I64-NEXT: movl %eax, 20(%esi)1786; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1787; X86-I64-NEXT: movl %eax, 16(%esi)1788; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1789; X86-I64-NEXT: movl %eax, 12(%esi)1790; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1791; X86-I64-NEXT: movl %eax, 8(%esi)1792; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1793; X86-I64-NEXT: movl %eax, 4(%esi)1794; X86-I64-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1795; X86-I64-NEXT: movl %eax, (%esi)1796; X86-I64-NEXT: movl %esi, %eax1797; X86-I64-NEXT: leal -12(%ebp), %esp1798; X86-I64-NEXT: popl %esi1799; X86-I64-NEXT: popl %edi1800; X86-I64-NEXT: popl %ebx1801; X86-I64-NEXT: popl %ebp1802; X86-I64-NEXT: retl $41803;1804; X86-SSE2-LABEL: lrint_v8fp128:1805; X86-SSE2: # %bb.0:1806; X86-SSE2-NEXT: pushl %ebp1807; X86-SSE2-NEXT: movl %esp, %ebp1808; X86-SSE2-NEXT: pushl %ebx1809; X86-SSE2-NEXT: pushl %edi1810; X86-SSE2-NEXT: pushl %esi1811; X86-SSE2-NEXT: andl $-16, %esp1812; X86-SSE2-NEXT: subl $64, %esp1813; X86-SSE2-NEXT: movl 108(%ebp), %esi1814; X86-SSE2-NEXT: movl 112(%ebp), %edi1815; X86-SSE2-NEXT: movl 116(%ebp), %ebx1816; X86-SSE2-NEXT: pushl 100(%ebp)1817; X86-SSE2-NEXT: pushl 96(%ebp)1818; X86-SSE2-NEXT: pushl 92(%ebp)1819; X86-SSE2-NEXT: pushl 88(%ebp)1820; X86-SSE2-NEXT: calll lrintl1821; X86-SSE2-NEXT: addl $16, %esp1822; X86-SSE2-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1823; X86-SSE2-NEXT: pushl %ebx1824; X86-SSE2-NEXT: pushl %edi1825; X86-SSE2-NEXT: pushl %esi1826; X86-SSE2-NEXT: pushl 104(%ebp)1827; X86-SSE2-NEXT: calll lrintl1828; X86-SSE2-NEXT: addl $16, %esp1829; X86-SSE2-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1830; X86-SSE2-NEXT: pushl 132(%ebp)1831; X86-SSE2-NEXT: pushl 128(%ebp)1832; X86-SSE2-NEXT: pushl 124(%ebp)1833; X86-SSE2-NEXT: pushl 120(%ebp)1834; X86-SSE2-NEXT: calll lrintl1835; X86-SSE2-NEXT: addl $16, %esp1836; X86-SSE2-NEXT: movl %eax, (%esp) # 4-byte Spill1837; X86-SSE2-NEXT: pushl 20(%ebp)1838; X86-SSE2-NEXT: pushl 16(%ebp)1839; X86-SSE2-NEXT: pushl 12(%ebp)1840; X86-SSE2-NEXT: pushl 8(%ebp)1841; X86-SSE2-NEXT: calll lrintl1842; X86-SSE2-NEXT: addl $16, %esp1843; X86-SSE2-NEXT: movl %eax, %esi1844; X86-SSE2-NEXT: pushl 36(%ebp)1845; X86-SSE2-NEXT: pushl 32(%ebp)1846; X86-SSE2-NEXT: pushl 28(%ebp)1847; X86-SSE2-NEXT: pushl 24(%ebp)1848; X86-SSE2-NEXT: calll lrintl1849; X86-SSE2-NEXT: addl $16, %esp1850; X86-SSE2-NEXT: movl %eax, %edi1851; X86-SSE2-NEXT: pushl 52(%ebp)1852; X86-SSE2-NEXT: pushl 48(%ebp)1853; X86-SSE2-NEXT: pushl 44(%ebp)1854; X86-SSE2-NEXT: pushl 40(%ebp)1855; X86-SSE2-NEXT: calll lrintl1856; X86-SSE2-NEXT: addl $16, %esp1857; X86-SSE2-NEXT: movl %eax, %ebx1858; X86-SSE2-NEXT: pushl 68(%ebp)1859; X86-SSE2-NEXT: pushl 64(%ebp)1860; X86-SSE2-NEXT: pushl 60(%ebp)1861; X86-SSE2-NEXT: pushl 56(%ebp)1862; X86-SSE2-NEXT: calll lrintl1863; X86-SSE2-NEXT: addl $16, %esp1864; X86-SSE2-NEXT: movd %eax, %xmm01865; X86-SSE2-NEXT: movd %ebx, %xmm11866; X86-SSE2-NEXT: movd %edi, %xmm21867; X86-SSE2-NEXT: movd %esi, %xmm41868; X86-SSE2-NEXT: movss (%esp), %xmm3 # 4-byte Reload1869; X86-SSE2-NEXT: # xmm3 = mem[0],zero,zero,zero1870; X86-SSE2-NEXT: movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm5 # 4-byte Reload1871; X86-SSE2-NEXT: # xmm5 = mem[0],zero,zero,zero1872; X86-SSE2-NEXT: movss {{[-0-9]+}}(%e{{[sb]}}p), %xmm6 # 4-byte Reload1873; X86-SSE2-NEXT: # xmm6 = mem[0],zero,zero,zero1874; X86-SSE2-NEXT: movaps %xmm6, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1875; X86-SSE2-NEXT: punpckldq {{.*#+}} xmm1 = xmm1[0],xmm0[0],xmm1[1],xmm0[1]1876; X86-SSE2-NEXT: punpckldq {{.*#+}} xmm4 = xmm4[0],xmm2[0],xmm4[1],xmm2[1]1877; X86-SSE2-NEXT: punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm1[0]1878; X86-SSE2-NEXT: movdqa %xmm4, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1879; X86-SSE2-NEXT: unpcklps {{.*#+}} xmm5 = xmm5[0],xmm3[0],xmm5[1],xmm3[1]1880; X86-SSE2-NEXT: movaps %xmm5, (%esp) # 16-byte Spill1881; X86-SSE2-NEXT: pushl 84(%ebp)1882; X86-SSE2-NEXT: pushl 80(%ebp)1883; X86-SSE2-NEXT: pushl 76(%ebp)1884; X86-SSE2-NEXT: pushl 72(%ebp)1885; X86-SSE2-NEXT: calll lrintl1886; X86-SSE2-NEXT: addl $16, %esp1887; X86-SSE2-NEXT: movd %eax, %xmm11888; X86-SSE2-NEXT: punpckldq {{[-0-9]+}}(%e{{[sb]}}p), %xmm1 # 16-byte Folded Reload1889; X86-SSE2-NEXT: # xmm1 = xmm1[0],mem[0],xmm1[1],mem[1]1890; X86-SSE2-NEXT: punpcklqdq (%esp), %xmm1 # 16-byte Folded Reload1891; X86-SSE2-NEXT: # xmm1 = xmm1[0],mem[0]1892; X86-SSE2-NEXT: movaps {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1893; X86-SSE2-NEXT: leal -12(%ebp), %esp1894; X86-SSE2-NEXT: popl %esi1895; X86-SSE2-NEXT: popl %edi1896; X86-SSE2-NEXT: popl %ebx1897; X86-SSE2-NEXT: popl %ebp1898; X86-SSE2-NEXT: retl1899;1900; X86-AVX1-LABEL: lrint_v8fp128:1901; X86-AVX1: # %bb.0:1902; X86-AVX1-NEXT: pushl %ebp1903; X86-AVX1-NEXT: movl %esp, %ebp1904; X86-AVX1-NEXT: pushl %ebx1905; X86-AVX1-NEXT: pushl %edi1906; X86-AVX1-NEXT: pushl %esi1907; X86-AVX1-NEXT: andl $-16, %esp1908; X86-AVX1-NEXT: subl $80, %esp1909; X86-AVX1-NEXT: vmovups 40(%ebp), %xmm01910; X86-AVX1-NEXT: vmovups %xmm0, (%esp)1911; X86-AVX1-NEXT: calll lrintl1912; X86-AVX1-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1913; X86-AVX1-NEXT: vmovups 24(%ebp), %xmm01914; X86-AVX1-NEXT: vmovups %xmm0, (%esp)1915; X86-AVX1-NEXT: calll lrintl1916; X86-AVX1-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1917; X86-AVX1-NEXT: vmovups 8(%ebp), %xmm01918; X86-AVX1-NEXT: vmovups %xmm0, (%esp)1919; X86-AVX1-NEXT: calll lrintl1920; X86-AVX1-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1921; X86-AVX1-NEXT: vmovups 120(%ebp), %xmm01922; X86-AVX1-NEXT: vmovups %xmm0, (%esp)1923; X86-AVX1-NEXT: calll lrintl1924; X86-AVX1-NEXT: movl %eax, %esi1925; X86-AVX1-NEXT: vmovups 104(%ebp), %xmm01926; X86-AVX1-NEXT: vmovups %xmm0, (%esp)1927; X86-AVX1-NEXT: calll lrintl1928; X86-AVX1-NEXT: movl %eax, %edi1929; X86-AVX1-NEXT: vmovups 88(%ebp), %xmm01930; X86-AVX1-NEXT: vmovups %xmm0, (%esp)1931; X86-AVX1-NEXT: calll lrintl1932; X86-AVX1-NEXT: movl %eax, %ebx1933; X86-AVX1-NEXT: vmovups 72(%ebp), %xmm01934; X86-AVX1-NEXT: vmovups %xmm0, (%esp)1935; X86-AVX1-NEXT: calll lrintl1936; X86-AVX1-NEXT: vmovd %eax, %xmm01937; X86-AVX1-NEXT: vpinsrd $1, %ebx, %xmm0, %xmm01938; X86-AVX1-NEXT: vpinsrd $2, %edi, %xmm0, %xmm01939; X86-AVX1-NEXT: vpinsrd $3, %esi, %xmm0, %xmm01940; X86-AVX1-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1941; X86-AVX1-NEXT: vmovd {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 4-byte Folded Reload1942; X86-AVX1-NEXT: # xmm0 = mem[0],zero,zero,zero1943; X86-AVX1-NEXT: vpinsrd $1, {{[-0-9]+}}(%e{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1944; X86-AVX1-NEXT: vmovups 56(%ebp), %xmm11945; X86-AVX1-NEXT: vmovups %xmm1, (%esp)1946; X86-AVX1-NEXT: vpinsrd $2, {{[-0-9]+}}(%e{{[sb]}}p), %xmm0, %xmm0 # 4-byte Folded Reload1947; X86-AVX1-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%e{{[sb]}}p) # 16-byte Spill1948; X86-AVX1-NEXT: calll lrintl1949; X86-AVX1-NEXT: vmovdqa {{[-0-9]+}}(%e{{[sb]}}p), %xmm0 # 16-byte Reload1950; X86-AVX1-NEXT: vpinsrd $3, %eax, %xmm0, %xmm01951; X86-AVX1-NEXT: vinsertf128 $1, {{[-0-9]+}}(%e{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1952; X86-AVX1-NEXT: leal -12(%ebp), %esp1953; X86-AVX1-NEXT: popl %esi1954; X86-AVX1-NEXT: popl %edi1955; X86-AVX1-NEXT: popl %ebx1956; X86-AVX1-NEXT: popl %ebp1957; X86-AVX1-NEXT: retl1958;1959; X64-AVX1-i32-LABEL: lrint_v8fp128:1960; X64-AVX1-i32: # %bb.0:1961; X64-AVX1-i32-NEXT: pushq %rbx1962; X64-AVX1-i32-NEXT: subq $112, %rsp1963; X64-AVX1-i32-NEXT: vmovaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1964; X64-AVX1-i32-NEXT: vmovaps %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1965; X64-AVX1-i32-NEXT: vmovaps %xmm4, (%rsp) # 16-byte Spill1966; X64-AVX1-i32-NEXT: vmovaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1967; X64-AVX1-i32-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1968; X64-AVX1-i32-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1969; X64-AVX1-i32-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1970; X64-AVX1-i32-NEXT: vmovaps %xmm5, %xmm01971; X64-AVX1-i32-NEXT: callq lrintl@PLT1972; X64-AVX1-i32-NEXT: movl %eax, %ebx1973; X64-AVX1-i32-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1974; X64-AVX1-i32-NEXT: callq lrintl@PLT1975; X64-AVX1-i32-NEXT: vmovd %eax, %xmm01976; X64-AVX1-i32-NEXT: vpinsrd $1, %ebx, %xmm0, %xmm01977; X64-AVX1-i32-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1978; X64-AVX1-i32-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1979; X64-AVX1-i32-NEXT: callq lrintl@PLT1980; X64-AVX1-i32-NEXT: vmovdqa (%rsp), %xmm0 # 16-byte Reload1981; X64-AVX1-i32-NEXT: vpinsrd $2, %eax, %xmm0, %xmm01982; X64-AVX1-i32-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1983; X64-AVX1-i32-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1984; X64-AVX1-i32-NEXT: callq lrintl@PLT1985; X64-AVX1-i32-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1986; X64-AVX1-i32-NEXT: vpinsrd $3, %eax, %xmm0, %xmm01987; X64-AVX1-i32-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1988; X64-AVX1-i32-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1989; X64-AVX1-i32-NEXT: callq lrintl@PLT1990; X64-AVX1-i32-NEXT: movl %eax, %ebx1991; X64-AVX1-i32-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1992; X64-AVX1-i32-NEXT: callq lrintl@PLT1993; X64-AVX1-i32-NEXT: vmovd %eax, %xmm01994; X64-AVX1-i32-NEXT: vpinsrd $1, %ebx, %xmm0, %xmm01995; X64-AVX1-i32-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1996; X64-AVX1-i32-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1997; X64-AVX1-i32-NEXT: callq lrintl@PLT1998; X64-AVX1-i32-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1999; X64-AVX1-i32-NEXT: vpinsrd $2, %eax, %xmm0, %xmm02000; X64-AVX1-i32-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2001; X64-AVX1-i32-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2002; X64-AVX1-i32-NEXT: callq lrintl@PLT2003; X64-AVX1-i32-NEXT: vmovdqa {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2004; X64-AVX1-i32-NEXT: vpinsrd $3, %eax, %xmm0, %xmm02005; X64-AVX1-i32-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload2006; X64-AVX1-i32-NEXT: addq $112, %rsp2007; X64-AVX1-i32-NEXT: popq %rbx2008; X64-AVX1-i32-NEXT: retq2009;2010; X64-AVX1-i64-LABEL: lrint_v8fp128:2011; X64-AVX1-i64: # %bb.0:2012; X64-AVX1-i64-NEXT: subq $152, %rsp2013; X64-AVX1-i64-NEXT: vmovaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2014; X64-AVX1-i64-NEXT: vmovaps %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2015; X64-AVX1-i64-NEXT: vmovaps %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2016; X64-AVX1-i64-NEXT: vmovaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2017; X64-AVX1-i64-NEXT: vmovaps %xmm2, (%rsp) # 16-byte Spill2018; X64-AVX1-i64-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2019; X64-AVX1-i64-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2020; X64-AVX1-i64-NEXT: vmovaps %xmm3, %xmm02021; X64-AVX1-i64-NEXT: callq lrintl@PLT2022; X64-AVX1-i64-NEXT: vmovq %rax, %xmm02023; X64-AVX1-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2024; X64-AVX1-i64-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload2025; X64-AVX1-i64-NEXT: callq lrintl@PLT2026; X64-AVX1-i64-NEXT: vmovq %rax, %xmm02027; X64-AVX1-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2028; X64-AVX1-i64-NEXT: # xmm0 = xmm0[0],mem[0]2029; X64-AVX1-i64-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill2030; X64-AVX1-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2031; X64-AVX1-i64-NEXT: callq lrintl@PLT2032; X64-AVX1-i64-NEXT: vmovq %rax, %xmm02033; X64-AVX1-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2034; X64-AVX1-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2035; X64-AVX1-i64-NEXT: callq lrintl@PLT2036; X64-AVX1-i64-NEXT: vmovq %rax, %xmm02037; X64-AVX1-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2038; X64-AVX1-i64-NEXT: # xmm0 = xmm0[0],mem[0]2039; X64-AVX1-i64-NEXT: vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload2040; X64-AVX1-i64-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2041; X64-AVX1-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2042; X64-AVX1-i64-NEXT: vzeroupper2043; X64-AVX1-i64-NEXT: callq lrintl@PLT2044; X64-AVX1-i64-NEXT: vmovq %rax, %xmm02045; X64-AVX1-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2046; X64-AVX1-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2047; X64-AVX1-i64-NEXT: callq lrintl@PLT2048; X64-AVX1-i64-NEXT: vmovq %rax, %xmm02049; X64-AVX1-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2050; X64-AVX1-i64-NEXT: # xmm0 = xmm0[0],mem[0]2051; X64-AVX1-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2052; X64-AVX1-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2053; X64-AVX1-i64-NEXT: callq lrintl@PLT2054; X64-AVX1-i64-NEXT: vmovq %rax, %xmm02055; X64-AVX1-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2056; X64-AVX1-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2057; X64-AVX1-i64-NEXT: callq lrintl@PLT2058; X64-AVX1-i64-NEXT: vmovq %rax, %xmm02059; X64-AVX1-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2060; X64-AVX1-i64-NEXT: # xmm0 = xmm0[0],mem[0]2061; X64-AVX1-i64-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm1 # 16-byte Folded Reload2062; X64-AVX1-i64-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload2063; X64-AVX1-i64-NEXT: addq $152, %rsp2064; X64-AVX1-i64-NEXT: retq2065;2066; AVX512-i64-LABEL: lrint_v8fp128:2067; AVX512-i64: # %bb.0:2068; AVX512-i64-NEXT: subq $152, %rsp2069; AVX512-i64-NEXT: vmovaps %xmm6, (%rsp) # 16-byte Spill2070; AVX512-i64-NEXT: vmovaps %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2071; AVX512-i64-NEXT: vmovaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2072; AVX512-i64-NEXT: vmovaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2073; AVX512-i64-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2074; AVX512-i64-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2075; AVX512-i64-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2076; AVX512-i64-NEXT: vmovaps %xmm7, %xmm02077; AVX512-i64-NEXT: callq lrintl@PLT2078; AVX512-i64-NEXT: vmovq %rax, %xmm02079; AVX512-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2080; AVX512-i64-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload2081; AVX512-i64-NEXT: callq lrintl@PLT2082; AVX512-i64-NEXT: vmovq %rax, %xmm02083; AVX512-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2084; AVX512-i64-NEXT: # xmm0 = xmm0[0],mem[0]2085; AVX512-i64-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill2086; AVX512-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2087; AVX512-i64-NEXT: callq lrintl@PLT2088; AVX512-i64-NEXT: vmovq %rax, %xmm02089; AVX512-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2090; AVX512-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2091; AVX512-i64-NEXT: callq lrintl@PLT2092; AVX512-i64-NEXT: vmovq %rax, %xmm02093; AVX512-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2094; AVX512-i64-NEXT: # xmm0 = xmm0[0],mem[0]2095; AVX512-i64-NEXT: vinserti128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload2096; AVX512-i64-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2097; AVX512-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2098; AVX512-i64-NEXT: vzeroupper2099; AVX512-i64-NEXT: callq lrintl@PLT2100; AVX512-i64-NEXT: vmovq %rax, %xmm02101; AVX512-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2102; AVX512-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2103; AVX512-i64-NEXT: callq lrintl@PLT2104; AVX512-i64-NEXT: vmovq %rax, %xmm02105; AVX512-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2106; AVX512-i64-NEXT: # xmm0 = xmm0[0],mem[0]2107; AVX512-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2108; AVX512-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2109; AVX512-i64-NEXT: callq lrintl@PLT2110; AVX512-i64-NEXT: vmovq %rax, %xmm02111; AVX512-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2112; AVX512-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2113; AVX512-i64-NEXT: callq lrintl@PLT2114; AVX512-i64-NEXT: vmovq %rax, %xmm02115; AVX512-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2116; AVX512-i64-NEXT: # xmm0 = xmm0[0],mem[0]2117; AVX512-i64-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload2118; AVX512-i64-NEXT: vinserti64x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 32-byte Folded Reload2119; AVX512-i64-NEXT: addq $152, %rsp2120; AVX512-i64-NEXT: retq2121;2122; AVX512DQ-i64-LABEL: lrint_v8fp128:2123; AVX512DQ-i64: # %bb.0:2124; AVX512DQ-i64-NEXT: subq $152, %rsp2125; AVX512DQ-i64-NEXT: vmovaps %xmm6, (%rsp) # 16-byte Spill2126; AVX512DQ-i64-NEXT: vmovaps %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2127; AVX512DQ-i64-NEXT: vmovaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2128; AVX512DQ-i64-NEXT: vmovaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2129; AVX512DQ-i64-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2130; AVX512DQ-i64-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2131; AVX512DQ-i64-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2132; AVX512DQ-i64-NEXT: vmovaps %xmm7, %xmm02133; AVX512DQ-i64-NEXT: callq lrintl@PLT2134; AVX512DQ-i64-NEXT: vmovq %rax, %xmm02135; AVX512DQ-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2136; AVX512DQ-i64-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload2137; AVX512DQ-i64-NEXT: callq lrintl@PLT2138; AVX512DQ-i64-NEXT: vmovq %rax, %xmm02139; AVX512DQ-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2140; AVX512DQ-i64-NEXT: # xmm0 = xmm0[0],mem[0]2141; AVX512DQ-i64-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill2142; AVX512DQ-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2143; AVX512DQ-i64-NEXT: callq lrintl@PLT2144; AVX512DQ-i64-NEXT: vmovq %rax, %xmm02145; AVX512DQ-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2146; AVX512DQ-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2147; AVX512DQ-i64-NEXT: callq lrintl@PLT2148; AVX512DQ-i64-NEXT: vmovq %rax, %xmm02149; AVX512DQ-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2150; AVX512DQ-i64-NEXT: # xmm0 = xmm0[0],mem[0]2151; AVX512DQ-i64-NEXT: vinserti128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload2152; AVX512DQ-i64-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill2153; AVX512DQ-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2154; AVX512DQ-i64-NEXT: vzeroupper2155; AVX512DQ-i64-NEXT: callq lrintl@PLT2156; AVX512DQ-i64-NEXT: vmovq %rax, %xmm02157; AVX512DQ-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2158; AVX512DQ-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2159; AVX512DQ-i64-NEXT: callq lrintl@PLT2160; AVX512DQ-i64-NEXT: vmovq %rax, %xmm02161; AVX512DQ-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2162; AVX512DQ-i64-NEXT: # xmm0 = xmm0[0],mem[0]2163; AVX512DQ-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2164; AVX512DQ-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2165; AVX512DQ-i64-NEXT: callq lrintl@PLT2166; AVX512DQ-i64-NEXT: vmovq %rax, %xmm02167; AVX512DQ-i64-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill2168; AVX512DQ-i64-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload2169; AVX512DQ-i64-NEXT: callq lrintl@PLT2170; AVX512DQ-i64-NEXT: vmovq %rax, %xmm02171; AVX512DQ-i64-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload2172; AVX512DQ-i64-NEXT: # xmm0 = xmm0[0],mem[0]2173; AVX512DQ-i64-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload2174; AVX512DQ-i64-NEXT: vinserti64x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 32-byte Folded Reload2175; AVX512DQ-i64-NEXT: addq $152, %rsp2176; AVX512DQ-i64-NEXT: retq2177 %a = call <8 x iXLen> @llvm.lrint.v8iXLen.v8fp128(<8 x fp128> %x)2178 ret <8 x iXLen> %a2179}2180declare <8 x iXLen> @llvm.lrint.v8iXLen.v8fp128(<8 x fp128>)2181