1846 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefix=X863; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=SSE4; RUN: llc < %s -mtriple=x86_64-unknown -mattr=avx | FileCheck %s --check-prefixes=AVX,AVX15; RUN: llc < %s -mtriple=x86_64-unknown -mattr=avx512f | FileCheck %s --check-prefixes=AVX,AVX5126; RUN: llc < %s -mtriple=x86_64-unknown -mattr=avx512dq,avx512vl | FileCheck %s --check-prefixes=AVX512DQ7 8define <1 x i64> @llrint_v1i64_v1f32(<1 x float> %x) nounwind {9; X86-LABEL: llrint_v1i64_v1f32:10; X86: # %bb.0:11; X86-NEXT: pushl %ebp12; X86-NEXT: movl %esp, %ebp13; X86-NEXT: andl $-8, %esp14; X86-NEXT: subl $8, %esp15; X86-NEXT: flds 8(%ebp)16; X86-NEXT: fistpll (%esp)17; X86-NEXT: movl (%esp), %eax18; X86-NEXT: movl {{[0-9]+}}(%esp), %edx19; X86-NEXT: movl %ebp, %esp20; X86-NEXT: popl %ebp21; X86-NEXT: retl22;23; SSE-LABEL: llrint_v1i64_v1f32:24; SSE: # %bb.0:25; SSE-NEXT: cvtss2si %xmm0, %rax26; SSE-NEXT: retq27;28; AVX-LABEL: llrint_v1i64_v1f32:29; AVX: # %bb.0:30; AVX-NEXT: vcvtss2si %xmm0, %rax31; AVX-NEXT: retq32;33; AVX512DQ-LABEL: llrint_v1i64_v1f32:34; AVX512DQ: # %bb.0:35; AVX512DQ-NEXT: vcvtss2si %xmm0, %rax36; AVX512DQ-NEXT: retq37 %a = call <1 x i64> @llvm.llrint.v1i64.v1f32(<1 x float> %x)38 ret <1 x i64> %a39}40declare <1 x i64> @llvm.llrint.v1i64.v1f32(<1 x float>)41 42define <2 x i64> @llrint_v2i64_v2f32(<2 x float> %x) nounwind {43; X86-LABEL: llrint_v2i64_v2f32:44; X86: # %bb.0:45; X86-NEXT: pushl %ebp46; X86-NEXT: movl %esp, %ebp47; X86-NEXT: pushl %edi48; X86-NEXT: pushl %esi49; X86-NEXT: andl $-8, %esp50; X86-NEXT: subl $16, %esp51; X86-NEXT: movl 8(%ebp), %eax52; X86-NEXT: flds 16(%ebp)53; X86-NEXT: flds 12(%ebp)54; X86-NEXT: fistpll (%esp)55; X86-NEXT: fistpll {{[0-9]+}}(%esp)56; X86-NEXT: movl (%esp), %ecx57; X86-NEXT: movl {{[0-9]+}}(%esp), %edx58; X86-NEXT: movl {{[0-9]+}}(%esp), %esi59; X86-NEXT: movl {{[0-9]+}}(%esp), %edi60; X86-NEXT: movl %edi, 12(%eax)61; X86-NEXT: movl %esi, 8(%eax)62; X86-NEXT: movl %edx, 4(%eax)63; X86-NEXT: movl %ecx, (%eax)64; X86-NEXT: leal -8(%ebp), %esp65; X86-NEXT: popl %esi66; X86-NEXT: popl %edi67; X86-NEXT: popl %ebp68; X86-NEXT: retl $469;70; SSE-LABEL: llrint_v2i64_v2f32:71; SSE: # %bb.0:72; SSE-NEXT: cvtss2si %xmm0, %rax73; SSE-NEXT: movq %rax, %xmm174; SSE-NEXT: shufps {{.*#+}} xmm0 = xmm0[1,1,1,1]75; SSE-NEXT: cvtss2si %xmm0, %rax76; SSE-NEXT: movq %rax, %xmm077; SSE-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]78; SSE-NEXT: movdqa %xmm1, %xmm079; SSE-NEXT: retq80;81; AVX-LABEL: llrint_v2i64_v2f32:82; AVX: # %bb.0:83; AVX-NEXT: vcvtss2si %xmm0, %rax84; AVX-NEXT: vmovq %rax, %xmm185; AVX-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]86; AVX-NEXT: vcvtss2si %xmm0, %rax87; AVX-NEXT: vmovq %rax, %xmm088; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]89; AVX-NEXT: retq90;91; AVX512DQ-LABEL: llrint_v2i64_v2f32:92; AVX512DQ: # %bb.0:93; AVX512DQ-NEXT: vcvtps2qq %xmm0, %xmm094; AVX512DQ-NEXT: retq95 %a = call <2 x i64> @llvm.llrint.v2i64.v2f32(<2 x float> %x)96 ret <2 x i64> %a97}98declare <2 x i64> @llvm.llrint.v2i64.v2f32(<2 x float>)99 100define <4 x i64> @llrint_v4i64_v4f32(<4 x float> %x) nounwind {101; X86-LABEL: llrint_v4i64_v4f32:102; X86: # %bb.0:103; X86-NEXT: pushl %ebp104; X86-NEXT: movl %esp, %ebp105; X86-NEXT: pushl %ebx106; X86-NEXT: pushl %edi107; X86-NEXT: pushl %esi108; X86-NEXT: andl $-8, %esp109; X86-NEXT: subl $56, %esp110; X86-NEXT: movl 8(%ebp), %eax111; X86-NEXT: flds 24(%ebp)112; X86-NEXT: flds 20(%ebp)113; X86-NEXT: flds 16(%ebp)114; X86-NEXT: flds 12(%ebp)115; X86-NEXT: fistpll {{[0-9]+}}(%esp)116; X86-NEXT: fistpll {{[0-9]+}}(%esp)117; X86-NEXT: fistpll {{[0-9]+}}(%esp)118; X86-NEXT: fistpll {{[0-9]+}}(%esp)119; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx120; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill121; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx122; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill123; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx124; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill125; X86-NEXT: movl {{[0-9]+}}(%esp), %edi126; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx127; X86-NEXT: movl {{[0-9]+}}(%esp), %edx128; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx129; X86-NEXT: movl {{[0-9]+}}(%esp), %esi130; X86-NEXT: movl %esi, 28(%eax)131; X86-NEXT: movl %ecx, 24(%eax)132; X86-NEXT: movl %edx, 20(%eax)133; X86-NEXT: movl %ebx, 16(%eax)134; X86-NEXT: movl %edi, 12(%eax)135; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload136; X86-NEXT: movl %ecx, 8(%eax)137; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload138; X86-NEXT: movl %ecx, 4(%eax)139; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload140; X86-NEXT: movl %ecx, (%eax)141; X86-NEXT: leal -12(%ebp), %esp142; X86-NEXT: popl %esi143; X86-NEXT: popl %edi144; X86-NEXT: popl %ebx145; X86-NEXT: popl %ebp146; X86-NEXT: retl $4147;148; SSE-LABEL: llrint_v4i64_v4f32:149; SSE: # %bb.0:150; SSE-NEXT: cvtss2si %xmm0, %rax151; SSE-NEXT: movq %rax, %xmm2152; SSE-NEXT: movaps %xmm0, %xmm1153; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[1,1],xmm0[1,1]154; SSE-NEXT: cvtss2si %xmm1, %rax155; SSE-NEXT: movq %rax, %xmm1156; SSE-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm1[0]157; SSE-NEXT: movaps %xmm0, %xmm1158; SSE-NEXT: shufps {{.*#+}} xmm1 = xmm1[3,3],xmm0[3,3]159; SSE-NEXT: cvtss2si %xmm1, %rax160; SSE-NEXT: movq %rax, %xmm3161; SSE-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1]162; SSE-NEXT: cvtss2si %xmm0, %rax163; SSE-NEXT: movq %rax, %xmm1164; SSE-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm3[0]165; SSE-NEXT: movdqa %xmm2, %xmm0166; SSE-NEXT: retq167;168; AVX1-LABEL: llrint_v4i64_v4f32:169; AVX1: # %bb.0:170; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]171; AVX1-NEXT: vcvtss2si %xmm1, %rax172; AVX1-NEXT: vmovq %rax, %xmm1173; AVX1-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]174; AVX1-NEXT: vcvtss2si %xmm2, %rax175; AVX1-NEXT: vmovq %rax, %xmm2176; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]177; AVX1-NEXT: vcvtss2si %xmm0, %rax178; AVX1-NEXT: vmovq %rax, %xmm2179; AVX1-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]180; AVX1-NEXT: vcvtss2si %xmm0, %rax181; AVX1-NEXT: vmovq %rax, %xmm0182; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]183; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0184; AVX1-NEXT: retq185;186; AVX512-LABEL: llrint_v4i64_v4f32:187; AVX512: # %bb.0:188; AVX512-NEXT: vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]189; AVX512-NEXT: vcvtss2si %xmm1, %rax190; AVX512-NEXT: vmovq %rax, %xmm1191; AVX512-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]192; AVX512-NEXT: vcvtss2si %xmm2, %rax193; AVX512-NEXT: vmovq %rax, %xmm2194; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]195; AVX512-NEXT: vcvtss2si %xmm0, %rax196; AVX512-NEXT: vmovq %rax, %xmm2197; AVX512-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]198; AVX512-NEXT: vcvtss2si %xmm0, %rax199; AVX512-NEXT: vmovq %rax, %xmm0200; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]201; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0202; AVX512-NEXT: retq203;204; AVX512DQ-LABEL: llrint_v4i64_v4f32:205; AVX512DQ: # %bb.0:206; AVX512DQ-NEXT: vcvtps2qq %xmm0, %ymm0207; AVX512DQ-NEXT: retq208 %a = call <4 x i64> @llvm.llrint.v4i64.v4f32(<4 x float> %x)209 ret <4 x i64> %a210}211declare <4 x i64> @llvm.llrint.v4i64.v4f32(<4 x float>)212 213define <8 x i64> @llrint_v8i64_v8f32(<8 x float> %x) nounwind {214; X86-LABEL: llrint_v8i64_v8f32:215; X86: # %bb.0:216; X86-NEXT: pushl %ebp217; X86-NEXT: movl %esp, %ebp218; X86-NEXT: pushl %ebx219; X86-NEXT: pushl %edi220; X86-NEXT: pushl %esi221; X86-NEXT: andl $-8, %esp222; X86-NEXT: subl $120, %esp223; X86-NEXT: flds 12(%ebp)224; X86-NEXT: fistpll {{[0-9]+}}(%esp)225; X86-NEXT: flds 16(%ebp)226; X86-NEXT: fistpll {{[0-9]+}}(%esp)227; X86-NEXT: flds 20(%ebp)228; X86-NEXT: fistpll {{[0-9]+}}(%esp)229; X86-NEXT: flds 24(%ebp)230; X86-NEXT: fistpll {{[0-9]+}}(%esp)231; X86-NEXT: flds 28(%ebp)232; X86-NEXT: fistpll {{[0-9]+}}(%esp)233; X86-NEXT: flds 32(%ebp)234; X86-NEXT: fistpll {{[0-9]+}}(%esp)235; X86-NEXT: flds 36(%ebp)236; X86-NEXT: fistpll {{[0-9]+}}(%esp)237; X86-NEXT: flds 40(%ebp)238; X86-NEXT: fistpll {{[0-9]+}}(%esp)239; X86-NEXT: movl 8(%ebp), %eax240; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx241; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill242; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx243; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill244; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx245; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill246; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx247; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill248; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx249; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill250; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx251; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill252; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx253; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill254; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx255; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill256; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx257; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill258; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx259; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill260; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx261; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill262; X86-NEXT: movl {{[0-9]+}}(%esp), %edi263; X86-NEXT: movl {{[0-9]+}}(%esp), %esi264; X86-NEXT: movl {{[0-9]+}}(%esp), %edx265; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx266; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx267; X86-NEXT: movl %ebx, 60(%eax)268; X86-NEXT: movl %ecx, 56(%eax)269; X86-NEXT: movl %edx, 52(%eax)270; X86-NEXT: movl %esi, 48(%eax)271; X86-NEXT: movl %edi, 44(%eax)272; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload273; X86-NEXT: movl %ecx, 40(%eax)274; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload275; X86-NEXT: movl %ecx, 36(%eax)276; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload277; X86-NEXT: movl %ecx, 32(%eax)278; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload279; X86-NEXT: movl %ecx, 28(%eax)280; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload281; X86-NEXT: movl %ecx, 24(%eax)282; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload283; X86-NEXT: movl %ecx, 20(%eax)284; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload285; X86-NEXT: movl %ecx, 16(%eax)286; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload287; X86-NEXT: movl %ecx, 12(%eax)288; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload289; X86-NEXT: movl %ecx, 8(%eax)290; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload291; X86-NEXT: movl %ecx, 4(%eax)292; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload293; X86-NEXT: movl %ecx, (%eax)294; X86-NEXT: leal -12(%ebp), %esp295; X86-NEXT: popl %esi296; X86-NEXT: popl %edi297; X86-NEXT: popl %ebx298; X86-NEXT: popl %ebp299; X86-NEXT: retl $4300;301; SSE-LABEL: llrint_v8i64_v8f32:302; SSE: # %bb.0:303; SSE-NEXT: movaps %xmm0, %xmm2304; SSE-NEXT: cvtss2si %xmm0, %rax305; SSE-NEXT: movq %rax, %xmm0306; SSE-NEXT: movaps %xmm2, %xmm3307; SSE-NEXT: shufps {{.*#+}} xmm3 = xmm3[1,1],xmm2[1,1]308; SSE-NEXT: cvtss2si %xmm3, %rax309; SSE-NEXT: movq %rax, %xmm3310; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm3[0]311; SSE-NEXT: movaps %xmm2, %xmm3312; SSE-NEXT: shufps {{.*#+}} xmm3 = xmm3[3,3],xmm2[3,3]313; SSE-NEXT: cvtss2si %xmm3, %rax314; SSE-NEXT: movq %rax, %xmm3315; SSE-NEXT: movhlps {{.*#+}} xmm2 = xmm2[1,1]316; SSE-NEXT: cvtss2si %xmm2, %rax317; SSE-NEXT: movq %rax, %xmm4318; SSE-NEXT: punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm3[0]319; SSE-NEXT: cvtss2si %xmm1, %rax320; SSE-NEXT: movq %rax, %xmm2321; SSE-NEXT: movaps %xmm1, %xmm3322; SSE-NEXT: shufps {{.*#+}} xmm3 = xmm3[1,1],xmm1[1,1]323; SSE-NEXT: cvtss2si %xmm3, %rax324; SSE-NEXT: movq %rax, %xmm3325; SSE-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]326; SSE-NEXT: movaps %xmm1, %xmm3327; SSE-NEXT: shufps {{.*#+}} xmm3 = xmm3[3,3],xmm1[3,3]328; SSE-NEXT: cvtss2si %xmm3, %rax329; SSE-NEXT: movq %rax, %xmm5330; SSE-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1]331; SSE-NEXT: cvtss2si %xmm1, %rax332; SSE-NEXT: movq %rax, %xmm3333; SSE-NEXT: punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]334; SSE-NEXT: movdqa %xmm4, %xmm1335; SSE-NEXT: retq336;337; AVX1-LABEL: llrint_v8i64_v8f32:338; AVX1: # %bb.0:339; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]340; AVX1-NEXT: vcvtss2si %xmm1, %rax341; AVX1-NEXT: vmovq %rax, %xmm1342; AVX1-NEXT: vshufpd {{.*#+}} xmm2 = xmm0[1,0]343; AVX1-NEXT: vcvtss2si %xmm2, %rax344; AVX1-NEXT: vmovq %rax, %xmm2345; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]346; AVX1-NEXT: vcvtss2si %xmm0, %rax347; AVX1-NEXT: vmovq %rax, %xmm2348; AVX1-NEXT: vmovshdup {{.*#+}} xmm3 = xmm0[1,1,3,3]349; AVX1-NEXT: vcvtss2si %xmm3, %rax350; AVX1-NEXT: vmovq %rax, %xmm3351; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm3[0]352; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm2, %ymm2353; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm0354; AVX1-NEXT: vshufps {{.*#+}} xmm1 = xmm0[3,3,3,3]355; AVX1-NEXT: vcvtss2si %xmm1, %rax356; AVX1-NEXT: vmovq %rax, %xmm1357; AVX1-NEXT: vshufpd {{.*#+}} xmm3 = xmm0[1,0]358; AVX1-NEXT: vcvtss2si %xmm3, %rax359; AVX1-NEXT: vmovq %rax, %xmm3360; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm3[0],xmm1[0]361; AVX1-NEXT: vcvtss2si %xmm0, %rax362; AVX1-NEXT: vmovq %rax, %xmm3363; AVX1-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]364; AVX1-NEXT: vcvtss2si %xmm0, %rax365; AVX1-NEXT: vmovq %rax, %xmm0366; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]367; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm1368; AVX1-NEXT: vmovaps %ymm2, %ymm0369; AVX1-NEXT: retq370;371; AVX512-LABEL: llrint_v8i64_v8f32:372; AVX512: # %bb.0:373; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm1374; AVX512-NEXT: vshufps {{.*#+}} xmm2 = xmm1[3,3,3,3]375; AVX512-NEXT: vcvtss2si %xmm2, %rax376; AVX512-NEXT: vmovq %rax, %xmm2377; AVX512-NEXT: vshufpd {{.*#+}} xmm3 = xmm1[1,0]378; AVX512-NEXT: vcvtss2si %xmm3, %rax379; AVX512-NEXT: vmovq %rax, %xmm3380; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]381; AVX512-NEXT: vcvtss2si %xmm1, %rax382; AVX512-NEXT: vmovq %rax, %xmm3383; AVX512-NEXT: vmovshdup {{.*#+}} xmm1 = xmm1[1,1,3,3]384; AVX512-NEXT: vcvtss2si %xmm1, %rax385; AVX512-NEXT: vmovq %rax, %xmm1386; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm3[0],xmm1[0]387; AVX512-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1388; AVX512-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]389; AVX512-NEXT: vcvtss2si %xmm2, %rax390; AVX512-NEXT: vmovq %rax, %xmm2391; AVX512-NEXT: vshufpd {{.*#+}} xmm3 = xmm0[1,0]392; AVX512-NEXT: vcvtss2si %xmm3, %rax393; AVX512-NEXT: vmovq %rax, %xmm3394; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]395; AVX512-NEXT: vcvtss2si %xmm0, %rax396; AVX512-NEXT: vmovq %rax, %xmm3397; AVX512-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]398; AVX512-NEXT: vcvtss2si %xmm0, %rax399; AVX512-NEXT: vmovq %rax, %xmm0400; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]401; AVX512-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm0402; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm0403; AVX512-NEXT: retq404;405; AVX512DQ-LABEL: llrint_v8i64_v8f32:406; AVX512DQ: # %bb.0:407; AVX512DQ-NEXT: vcvtps2qq %ymm0, %zmm0408; AVX512DQ-NEXT: retq409 %a = call <8 x i64> @llvm.llrint.v8i64.v8f32(<8 x float> %x)410 ret <8 x i64> %a411}412declare <8 x i64> @llvm.llrint.v8i64.v8f32(<8 x float>)413 414define <16 x i64> @llrint_v16i64_v16f32(<16 x float> %x) nounwind {415; X86-LABEL: llrint_v16i64_v16f32:416; X86: # %bb.0:417; X86-NEXT: pushl %ebp418; X86-NEXT: movl %esp, %ebp419; X86-NEXT: pushl %ebx420; X86-NEXT: pushl %edi421; X86-NEXT: pushl %esi422; X86-NEXT: andl $-8, %esp423; X86-NEXT: subl $248, %esp424; X86-NEXT: flds 12(%ebp)425; X86-NEXT: fistpll {{[0-9]+}}(%esp)426; X86-NEXT: flds 16(%ebp)427; X86-NEXT: fistpll {{[0-9]+}}(%esp)428; X86-NEXT: flds 20(%ebp)429; X86-NEXT: fistpll {{[0-9]+}}(%esp)430; X86-NEXT: flds 24(%ebp)431; X86-NEXT: fistpll {{[0-9]+}}(%esp)432; X86-NEXT: flds 28(%ebp)433; X86-NEXT: fistpll {{[0-9]+}}(%esp)434; X86-NEXT: flds 32(%ebp)435; X86-NEXT: fistpll {{[0-9]+}}(%esp)436; X86-NEXT: flds 36(%ebp)437; X86-NEXT: fistpll {{[0-9]+}}(%esp)438; X86-NEXT: flds 40(%ebp)439; X86-NEXT: fistpll {{[0-9]+}}(%esp)440; X86-NEXT: flds 44(%ebp)441; X86-NEXT: fistpll {{[0-9]+}}(%esp)442; X86-NEXT: flds 48(%ebp)443; X86-NEXT: fistpll {{[0-9]+}}(%esp)444; X86-NEXT: flds 52(%ebp)445; X86-NEXT: fistpll {{[0-9]+}}(%esp)446; X86-NEXT: flds 56(%ebp)447; X86-NEXT: fistpll {{[0-9]+}}(%esp)448; X86-NEXT: flds 60(%ebp)449; X86-NEXT: fistpll {{[0-9]+}}(%esp)450; X86-NEXT: flds 64(%ebp)451; X86-NEXT: fistpll {{[0-9]+}}(%esp)452; X86-NEXT: flds 68(%ebp)453; X86-NEXT: fistpll {{[0-9]+}}(%esp)454; X86-NEXT: flds 72(%ebp)455; X86-NEXT: fistpll {{[0-9]+}}(%esp)456; X86-NEXT: movl 8(%ebp), %eax457; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx458; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill459; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx460; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill461; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx462; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill463; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx464; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill465; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx466; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill467; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx468; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill469; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx470; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill471; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx472; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill473; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx474; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill475; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx476; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill477; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx478; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill479; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx480; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill481; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx482; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill483; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx484; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill485; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx486; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill487; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx488; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill489; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx490; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill491; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx492; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill493; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx494; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill495; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx496; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill497; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx498; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill499; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx500; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill501; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx502; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill503; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx504; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill505; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx506; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill507; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx508; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill509; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx510; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill511; X86-NEXT: movl {{[0-9]+}}(%esp), %edi512; X86-NEXT: movl {{[0-9]+}}(%esp), %esi513; X86-NEXT: movl {{[0-9]+}}(%esp), %edx514; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx515; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx516; X86-NEXT: movl %ebx, 124(%eax)517; X86-NEXT: movl %ecx, 120(%eax)518; X86-NEXT: movl %edx, 116(%eax)519; X86-NEXT: movl %esi, 112(%eax)520; X86-NEXT: movl %edi, 108(%eax)521; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload522; X86-NEXT: movl %ecx, 104(%eax)523; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload524; X86-NEXT: movl %ecx, 100(%eax)525; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload526; X86-NEXT: movl %ecx, 96(%eax)527; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload528; X86-NEXT: movl %ecx, 92(%eax)529; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload530; X86-NEXT: movl %ecx, 88(%eax)531; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload532; X86-NEXT: movl %ecx, 84(%eax)533; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload534; X86-NEXT: movl %ecx, 80(%eax)535; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload536; X86-NEXT: movl %ecx, 76(%eax)537; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload538; X86-NEXT: movl %ecx, 72(%eax)539; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload540; X86-NEXT: movl %ecx, 68(%eax)541; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload542; X86-NEXT: movl %ecx, 64(%eax)543; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload544; X86-NEXT: movl %ecx, 60(%eax)545; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload546; X86-NEXT: movl %ecx, 56(%eax)547; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload548; X86-NEXT: movl %ecx, 52(%eax)549; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload550; X86-NEXT: movl %ecx, 48(%eax)551; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload552; X86-NEXT: movl %ecx, 44(%eax)553; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload554; X86-NEXT: movl %ecx, 40(%eax)555; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload556; X86-NEXT: movl %ecx, 36(%eax)557; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload558; X86-NEXT: movl %ecx, 32(%eax)559; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload560; X86-NEXT: movl %ecx, 28(%eax)561; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload562; X86-NEXT: movl %ecx, 24(%eax)563; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload564; X86-NEXT: movl %ecx, 20(%eax)565; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload566; X86-NEXT: movl %ecx, 16(%eax)567; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload568; X86-NEXT: movl %ecx, 12(%eax)569; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload570; X86-NEXT: movl %ecx, 8(%eax)571; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload572; X86-NEXT: movl %ecx, 4(%eax)573; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload574; X86-NEXT: movl %ecx, (%eax)575; X86-NEXT: leal -12(%ebp), %esp576; X86-NEXT: popl %esi577; X86-NEXT: popl %edi578; X86-NEXT: popl %ebx579; X86-NEXT: popl %ebp580; X86-NEXT: retl $4581;582; SSE-LABEL: llrint_v16i64_v16f32:583; SSE: # %bb.0:584; SSE-NEXT: movq %rdi, %rax585; SSE-NEXT: cvtss2si %xmm0, %rcx586; SSE-NEXT: movq %rcx, %xmm4587; SSE-NEXT: movaps %xmm0, %xmm5588; SSE-NEXT: shufps {{.*#+}} xmm5 = xmm5[1,1],xmm0[1,1]589; SSE-NEXT: cvtss2si %xmm5, %rcx590; SSE-NEXT: movq %rcx, %xmm5591; SSE-NEXT: punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm5[0]592; SSE-NEXT: movaps %xmm0, %xmm5593; SSE-NEXT: shufps {{.*#+}} xmm5 = xmm5[3,3],xmm0[3,3]594; SSE-NEXT: cvtss2si %xmm5, %rcx595; SSE-NEXT: movq %rcx, %xmm5596; SSE-NEXT: movhlps {{.*#+}} xmm0 = xmm0[1,1]597; SSE-NEXT: cvtss2si %xmm0, %rcx598; SSE-NEXT: movq %rcx, %xmm0599; SSE-NEXT: punpcklqdq {{.*#+}} xmm0 = xmm0[0],xmm5[0]600; SSE-NEXT: cvtss2si %xmm1, %rcx601; SSE-NEXT: movq %rcx, %xmm5602; SSE-NEXT: movaps %xmm1, %xmm6603; SSE-NEXT: shufps {{.*#+}} xmm6 = xmm6[1,1],xmm1[1,1]604; SSE-NEXT: cvtss2si %xmm6, %rcx605; SSE-NEXT: movq %rcx, %xmm6606; SSE-NEXT: punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm6[0]607; SSE-NEXT: movaps %xmm1, %xmm6608; SSE-NEXT: shufps {{.*#+}} xmm6 = xmm6[3,3],xmm1[3,3]609; SSE-NEXT: cvtss2si %xmm6, %rcx610; SSE-NEXT: movq %rcx, %xmm6611; SSE-NEXT: movhlps {{.*#+}} xmm1 = xmm1[1,1]612; SSE-NEXT: cvtss2si %xmm1, %rcx613; SSE-NEXT: movq %rcx, %xmm1614; SSE-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm6[0]615; SSE-NEXT: cvtss2si %xmm2, %rcx616; SSE-NEXT: movq %rcx, %xmm6617; SSE-NEXT: movaps %xmm2, %xmm7618; SSE-NEXT: shufps {{.*#+}} xmm7 = xmm7[1,1],xmm2[1,1]619; SSE-NEXT: cvtss2si %xmm7, %rcx620; SSE-NEXT: movq %rcx, %xmm7621; SSE-NEXT: punpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm7[0]622; SSE-NEXT: movaps %xmm2, %xmm7623; SSE-NEXT: shufps {{.*#+}} xmm7 = xmm7[3,3],xmm2[3,3]624; SSE-NEXT: cvtss2si %xmm7, %rcx625; SSE-NEXT: movq %rcx, %xmm7626; SSE-NEXT: movhlps {{.*#+}} xmm2 = xmm2[1,1]627; SSE-NEXT: cvtss2si %xmm2, %rcx628; SSE-NEXT: movq %rcx, %xmm2629; SSE-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm7[0]630; SSE-NEXT: cvtss2si %xmm3, %rcx631; SSE-NEXT: movq %rcx, %xmm7632; SSE-NEXT: movaps %xmm3, %xmm8633; SSE-NEXT: shufps {{.*#+}} xmm8 = xmm8[1,1],xmm3[1,1]634; SSE-NEXT: cvtss2si %xmm8, %rcx635; SSE-NEXT: movq %rcx, %xmm8636; SSE-NEXT: punpcklqdq {{.*#+}} xmm7 = xmm7[0],xmm8[0]637; SSE-NEXT: movaps %xmm3, %xmm8638; SSE-NEXT: shufps {{.*#+}} xmm8 = xmm8[3,3],xmm3[3,3]639; SSE-NEXT: cvtss2si %xmm8, %rcx640; SSE-NEXT: movq %rcx, %xmm8641; SSE-NEXT: movhlps {{.*#+}} xmm3 = xmm3[1,1]642; SSE-NEXT: cvtss2si %xmm3, %rcx643; SSE-NEXT: movq %rcx, %xmm3644; SSE-NEXT: punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm8[0]645; SSE-NEXT: movdqa %xmm3, 112(%rdi)646; SSE-NEXT: movdqa %xmm7, 96(%rdi)647; SSE-NEXT: movdqa %xmm2, 80(%rdi)648; SSE-NEXT: movdqa %xmm6, 64(%rdi)649; SSE-NEXT: movdqa %xmm1, 48(%rdi)650; SSE-NEXT: movdqa %xmm5, 32(%rdi)651; SSE-NEXT: movdqa %xmm0, 16(%rdi)652; SSE-NEXT: movdqa %xmm4, (%rdi)653; SSE-NEXT: retq654;655; AVX1-LABEL: llrint_v16i64_v16f32:656; AVX1: # %bb.0:657; AVX1-NEXT: vmovaps %ymm0, %ymm2658; AVX1-NEXT: vshufps {{.*#+}} xmm0 = xmm2[3,3,3,3]659; AVX1-NEXT: vcvtss2si %xmm0, %rax660; AVX1-NEXT: vmovq %rax, %xmm0661; AVX1-NEXT: vshufpd {{.*#+}} xmm3 = xmm2[1,0]662; AVX1-NEXT: vcvtss2si %xmm3, %rax663; AVX1-NEXT: vmovq %rax, %xmm3664; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]665; AVX1-NEXT: vcvtss2si %xmm2, %rax666; AVX1-NEXT: vmovq %rax, %xmm3667; AVX1-NEXT: vmovshdup {{.*#+}} xmm4 = xmm2[1,1,3,3]668; AVX1-NEXT: vcvtss2si %xmm4, %rax669; AVX1-NEXT: vmovq %rax, %xmm4670; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]671; AVX1-NEXT: vinsertf128 $1, %xmm0, %ymm3, %ymm0672; AVX1-NEXT: vextractf128 $1, %ymm2, %xmm2673; AVX1-NEXT: vshufps {{.*#+}} xmm3 = xmm2[3,3,3,3]674; AVX1-NEXT: vcvtss2si %xmm3, %rax675; AVX1-NEXT: vmovq %rax, %xmm3676; AVX1-NEXT: vshufpd {{.*#+}} xmm4 = xmm2[1,0]677; AVX1-NEXT: vcvtss2si %xmm4, %rax678; AVX1-NEXT: vmovq %rax, %xmm4679; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]680; AVX1-NEXT: vcvtss2si %xmm2, %rax681; AVX1-NEXT: vmovq %rax, %xmm4682; AVX1-NEXT: vmovshdup {{.*#+}} xmm2 = xmm2[1,1,3,3]683; AVX1-NEXT: vcvtss2si %xmm2, %rax684; AVX1-NEXT: vmovq %rax, %xmm2685; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm4[0],xmm2[0]686; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm2, %ymm4687; AVX1-NEXT: vshufps {{.*#+}} xmm2 = xmm1[3,3,3,3]688; AVX1-NEXT: vcvtss2si %xmm2, %rax689; AVX1-NEXT: vmovq %rax, %xmm2690; AVX1-NEXT: vshufpd {{.*#+}} xmm3 = xmm1[1,0]691; AVX1-NEXT: vcvtss2si %xmm3, %rax692; AVX1-NEXT: vmovq %rax, %xmm3693; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]694; AVX1-NEXT: vcvtss2si %xmm1, %rax695; AVX1-NEXT: vmovq %rax, %xmm3696; AVX1-NEXT: vmovshdup {{.*#+}} xmm5 = xmm1[1,1,3,3]697; AVX1-NEXT: vcvtss2si %xmm5, %rax698; AVX1-NEXT: vmovq %rax, %xmm5699; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm5[0]700; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm3, %ymm2701; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm1702; AVX1-NEXT: vshufps {{.*#+}} xmm3 = xmm1[3,3,3,3]703; AVX1-NEXT: vcvtss2si %xmm3, %rax704; AVX1-NEXT: vmovq %rax, %xmm3705; AVX1-NEXT: vshufpd {{.*#+}} xmm5 = xmm1[1,0]706; AVX1-NEXT: vcvtss2si %xmm5, %rax707; AVX1-NEXT: vmovq %rax, %xmm5708; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm5[0],xmm3[0]709; AVX1-NEXT: vcvtss2si %xmm1, %rax710; AVX1-NEXT: vmovq %rax, %xmm5711; AVX1-NEXT: vmovshdup {{.*#+}} xmm1 = xmm1[1,1,3,3]712; AVX1-NEXT: vcvtss2si %xmm1, %rax713; AVX1-NEXT: vmovq %rax, %xmm1714; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm5[0],xmm1[0]715; AVX1-NEXT: vinsertf128 $1, %xmm3, %ymm1, %ymm3716; AVX1-NEXT: vmovaps %ymm4, %ymm1717; AVX1-NEXT: retq718;719; AVX512-LABEL: llrint_v16i64_v16f32:720; AVX512: # %bb.0:721; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm1722; AVX512-NEXT: vshufps {{.*#+}} xmm2 = xmm1[3,3,3,3]723; AVX512-NEXT: vcvtss2si %xmm2, %rax724; AVX512-NEXT: vmovq %rax, %xmm2725; AVX512-NEXT: vshufpd {{.*#+}} xmm3 = xmm1[1,0]726; AVX512-NEXT: vcvtss2si %xmm3, %rax727; AVX512-NEXT: vmovq %rax, %xmm3728; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]729; AVX512-NEXT: vcvtss2si %xmm1, %rax730; AVX512-NEXT: vmovq %rax, %xmm3731; AVX512-NEXT: vmovshdup {{.*#+}} xmm1 = xmm1[1,1,3,3]732; AVX512-NEXT: vcvtss2si %xmm1, %rax733; AVX512-NEXT: vmovq %rax, %xmm1734; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm3[0],xmm1[0]735; AVX512-NEXT: vinserti128 $1, %xmm2, %ymm1, %ymm1736; AVX512-NEXT: vshufps {{.*#+}} xmm2 = xmm0[3,3,3,3]737; AVX512-NEXT: vcvtss2si %xmm2, %rax738; AVX512-NEXT: vmovq %rax, %xmm2739; AVX512-NEXT: vshufpd {{.*#+}} xmm3 = xmm0[1,0]740; AVX512-NEXT: vcvtss2si %xmm3, %rax741; AVX512-NEXT: vmovq %rax, %xmm3742; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]743; AVX512-NEXT: vcvtss2si %xmm0, %rax744; AVX512-NEXT: vmovq %rax, %xmm3745; AVX512-NEXT: vmovshdup {{.*#+}} xmm4 = xmm0[1,1,3,3]746; AVX512-NEXT: vcvtss2si %xmm4, %rax747; AVX512-NEXT: vmovq %rax, %xmm4748; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm4[0]749; AVX512-NEXT: vinserti128 $1, %xmm2, %ymm3, %ymm2750; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm2, %zmm2751; AVX512-NEXT: vextractf64x4 $1, %zmm0, %ymm0752; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm1753; AVX512-NEXT: vshufps {{.*#+}} xmm3 = xmm1[3,3,3,3]754; AVX512-NEXT: vcvtss2si %xmm3, %rax755; AVX512-NEXT: vmovq %rax, %xmm3756; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm1[1,0]757; AVX512-NEXT: vcvtss2si %xmm4, %rax758; AVX512-NEXT: vmovq %rax, %xmm4759; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]760; AVX512-NEXT: vcvtss2si %xmm1, %rax761; AVX512-NEXT: vmovq %rax, %xmm4762; AVX512-NEXT: vmovshdup {{.*#+}} xmm1 = xmm1[1,1,3,3]763; AVX512-NEXT: vcvtss2si %xmm1, %rax764; AVX512-NEXT: vmovq %rax, %xmm1765; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm4[0],xmm1[0]766; AVX512-NEXT: vinserti128 $1, %xmm3, %ymm1, %ymm1767; AVX512-NEXT: vshufps {{.*#+}} xmm3 = xmm0[3,3,3,3]768; AVX512-NEXT: vcvtss2si %xmm3, %rax769; AVX512-NEXT: vmovq %rax, %xmm3770; AVX512-NEXT: vshufpd {{.*#+}} xmm4 = xmm0[1,0]771; AVX512-NEXT: vcvtss2si %xmm4, %rax772; AVX512-NEXT: vmovq %rax, %xmm4773; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm3 = xmm4[0],xmm3[0]774; AVX512-NEXT: vcvtss2si %xmm0, %rax775; AVX512-NEXT: vmovq %rax, %xmm4776; AVX512-NEXT: vmovshdup {{.*#+}} xmm0 = xmm0[1,1,3,3]777; AVX512-NEXT: vcvtss2si %xmm0, %rax778; AVX512-NEXT: vmovq %rax, %xmm0779; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm4[0],xmm0[0]780; AVX512-NEXT: vinserti128 $1, %xmm3, %ymm0, %ymm0781; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm1782; AVX512-NEXT: vmovdqa64 %zmm2, %zmm0783; AVX512-NEXT: retq784;785; AVX512DQ-LABEL: llrint_v16i64_v16f32:786; AVX512DQ: # %bb.0:787; AVX512DQ-NEXT: vcvtps2qq %ymm0, %zmm2788; AVX512DQ-NEXT: vextractf64x4 $1, %zmm0, %ymm0789; AVX512DQ-NEXT: vcvtps2qq %ymm0, %zmm1790; AVX512DQ-NEXT: vmovaps %zmm2, %zmm0791; AVX512DQ-NEXT: retq792 %a = call <16 x i64> @llvm.llrint.v16i64.v16f32(<16 x float> %x)793 ret <16 x i64> %a794}795declare <16 x i64> @llvm.llrint.v16i64.v16f32(<16 x float>)796 797define <1 x i64> @llrint_v1i64_v1f64(<1 x double> %x) nounwind {798; X86-LABEL: llrint_v1i64_v1f64:799; X86: # %bb.0:800; X86-NEXT: pushl %ebp801; X86-NEXT: movl %esp, %ebp802; X86-NEXT: andl $-8, %esp803; X86-NEXT: subl $8, %esp804; X86-NEXT: fldl 8(%ebp)805; X86-NEXT: fistpll (%esp)806; X86-NEXT: movl (%esp), %eax807; X86-NEXT: movl {{[0-9]+}}(%esp), %edx808; X86-NEXT: movl %ebp, %esp809; X86-NEXT: popl %ebp810; X86-NEXT: retl811;812; SSE-LABEL: llrint_v1i64_v1f64:813; SSE: # %bb.0:814; SSE-NEXT: cvtsd2si %xmm0, %rax815; SSE-NEXT: retq816;817; AVX-LABEL: llrint_v1i64_v1f64:818; AVX: # %bb.0:819; AVX-NEXT: vcvtsd2si %xmm0, %rax820; AVX-NEXT: retq821;822; AVX512DQ-LABEL: llrint_v1i64_v1f64:823; AVX512DQ: # %bb.0:824; AVX512DQ-NEXT: vcvtsd2si %xmm0, %rax825; AVX512DQ-NEXT: retq826 %a = call <1 x i64> @llvm.llrint.v1i64.v1f64(<1 x double> %x)827 ret <1 x i64> %a828}829declare <1 x i64> @llvm.llrint.v1i64.v1f64(<1 x double>)830 831define <2 x i64> @llrint_v2i64_v2f64(<2 x double> %x) nounwind {832; X86-LABEL: llrint_v2i64_v2f64:833; X86: # %bb.0:834; X86-NEXT: pushl %ebp835; X86-NEXT: movl %esp, %ebp836; X86-NEXT: pushl %edi837; X86-NEXT: pushl %esi838; X86-NEXT: andl $-8, %esp839; X86-NEXT: subl $16, %esp840; X86-NEXT: movl 8(%ebp), %eax841; X86-NEXT: fldl 20(%ebp)842; X86-NEXT: fldl 12(%ebp)843; X86-NEXT: fistpll (%esp)844; X86-NEXT: fistpll {{[0-9]+}}(%esp)845; X86-NEXT: movl (%esp), %ecx846; X86-NEXT: movl {{[0-9]+}}(%esp), %edx847; X86-NEXT: movl {{[0-9]+}}(%esp), %esi848; X86-NEXT: movl {{[0-9]+}}(%esp), %edi849; X86-NEXT: movl %edi, 12(%eax)850; X86-NEXT: movl %esi, 8(%eax)851; X86-NEXT: movl %edx, 4(%eax)852; X86-NEXT: movl %ecx, (%eax)853; X86-NEXT: leal -8(%ebp), %esp854; X86-NEXT: popl %esi855; X86-NEXT: popl %edi856; X86-NEXT: popl %ebp857; X86-NEXT: retl $4858;859; SSE-LABEL: llrint_v2i64_v2f64:860; SSE: # %bb.0:861; SSE-NEXT: cvtsd2si %xmm0, %rax862; SSE-NEXT: movq %rax, %xmm1863; SSE-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1]864; SSE-NEXT: cvtsd2si %xmm0, %rax865; SSE-NEXT: movq %rax, %xmm0866; SSE-NEXT: punpcklqdq {{.*#+}} xmm1 = xmm1[0],xmm0[0]867; SSE-NEXT: movdqa %xmm1, %xmm0868; SSE-NEXT: retq869;870; AVX-LABEL: llrint_v2i64_v2f64:871; AVX: # %bb.0:872; AVX-NEXT: vcvtsd2si %xmm0, %rax873; AVX-NEXT: vmovq %rax, %xmm1874; AVX-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]875; AVX-NEXT: vcvtsd2si %xmm0, %rax876; AVX-NEXT: vmovq %rax, %xmm0877; AVX-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm1[0],xmm0[0]878; AVX-NEXT: retq879;880; AVX512DQ-LABEL: llrint_v2i64_v2f64:881; AVX512DQ: # %bb.0:882; AVX512DQ-NEXT: vcvtpd2qq %xmm0, %xmm0883; AVX512DQ-NEXT: retq884 %a = call <2 x i64> @llvm.llrint.v2i64.v2f64(<2 x double> %x)885 ret <2 x i64> %a886}887declare <2 x i64> @llvm.llrint.v2i64.v2f64(<2 x double>)888 889define <4 x i64> @llrint_v4i64_v4f64(<4 x double> %x) nounwind {890; X86-LABEL: llrint_v4i64_v4f64:891; X86: # %bb.0:892; X86-NEXT: pushl %ebp893; X86-NEXT: movl %esp, %ebp894; X86-NEXT: pushl %ebx895; X86-NEXT: pushl %edi896; X86-NEXT: pushl %esi897; X86-NEXT: andl $-8, %esp898; X86-NEXT: subl $56, %esp899; X86-NEXT: movl 8(%ebp), %eax900; X86-NEXT: fldl 36(%ebp)901; X86-NEXT: fldl 28(%ebp)902; X86-NEXT: fldl 20(%ebp)903; X86-NEXT: fldl 12(%ebp)904; X86-NEXT: fistpll {{[0-9]+}}(%esp)905; X86-NEXT: fistpll {{[0-9]+}}(%esp)906; X86-NEXT: fistpll {{[0-9]+}}(%esp)907; X86-NEXT: fistpll {{[0-9]+}}(%esp)908; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx909; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill910; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx911; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill912; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx913; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill914; X86-NEXT: movl {{[0-9]+}}(%esp), %edi915; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx916; X86-NEXT: movl {{[0-9]+}}(%esp), %edx917; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx918; X86-NEXT: movl {{[0-9]+}}(%esp), %esi919; X86-NEXT: movl %esi, 28(%eax)920; X86-NEXT: movl %ecx, 24(%eax)921; X86-NEXT: movl %edx, 20(%eax)922; X86-NEXT: movl %ebx, 16(%eax)923; X86-NEXT: movl %edi, 12(%eax)924; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload925; X86-NEXT: movl %ecx, 8(%eax)926; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload927; X86-NEXT: movl %ecx, 4(%eax)928; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload929; X86-NEXT: movl %ecx, (%eax)930; X86-NEXT: leal -12(%ebp), %esp931; X86-NEXT: popl %esi932; X86-NEXT: popl %edi933; X86-NEXT: popl %ebx934; X86-NEXT: popl %ebp935; X86-NEXT: retl $4936;937; SSE-LABEL: llrint_v4i64_v4f64:938; SSE: # %bb.0:939; SSE-NEXT: cvtsd2si %xmm0, %rax940; SSE-NEXT: movq %rax, %xmm2941; SSE-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1]942; SSE-NEXT: cvtsd2si %xmm0, %rax943; SSE-NEXT: movq %rax, %xmm0944; SSE-NEXT: punpcklqdq {{.*#+}} xmm2 = xmm2[0],xmm0[0]945; SSE-NEXT: cvtsd2si %xmm1, %rax946; SSE-NEXT: movq %rax, %xmm3947; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]948; SSE-NEXT: cvtsd2si %xmm1, %rax949; SSE-NEXT: movq %rax, %xmm0950; SSE-NEXT: punpcklqdq {{.*#+}} xmm3 = xmm3[0],xmm0[0]951; SSE-NEXT: movdqa %xmm2, %xmm0952; SSE-NEXT: movdqa %xmm3, %xmm1953; SSE-NEXT: retq954;955; AVX1-LABEL: llrint_v4i64_v4f64:956; AVX1: # %bb.0:957; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm1958; AVX1-NEXT: vcvtsd2si %xmm1, %rax959; AVX1-NEXT: vmovq %rax, %xmm2960; AVX1-NEXT: vshufpd {{.*#+}} xmm1 = xmm1[1,0]961; AVX1-NEXT: vcvtsd2si %xmm1, %rax962; AVX1-NEXT: vmovq %rax, %xmm1963; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]964; AVX1-NEXT: vcvtsd2si %xmm0, %rax965; AVX1-NEXT: vmovq %rax, %xmm2966; AVX1-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]967; AVX1-NEXT: vcvtsd2si %xmm0, %rax968; AVX1-NEXT: vmovq %rax, %xmm0969; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]970; AVX1-NEXT: vinsertf128 $1, %xmm1, %ymm0, %ymm0971; AVX1-NEXT: retq972;973; AVX512-LABEL: llrint_v4i64_v4f64:974; AVX512: # %bb.0:975; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm1976; AVX512-NEXT: vcvtsd2si %xmm1, %rax977; AVX512-NEXT: vmovq %rax, %xmm2978; AVX512-NEXT: vshufpd {{.*#+}} xmm1 = xmm1[1,0]979; AVX512-NEXT: vcvtsd2si %xmm1, %rax980; AVX512-NEXT: vmovq %rax, %xmm1981; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]982; AVX512-NEXT: vcvtsd2si %xmm0, %rax983; AVX512-NEXT: vmovq %rax, %xmm2984; AVX512-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]985; AVX512-NEXT: vcvtsd2si %xmm0, %rax986; AVX512-NEXT: vmovq %rax, %xmm0987; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm2[0],xmm0[0]988; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm0, %ymm0989; AVX512-NEXT: retq990;991; AVX512DQ-LABEL: llrint_v4i64_v4f64:992; AVX512DQ: # %bb.0:993; AVX512DQ-NEXT: vcvtpd2qq %ymm0, %ymm0994; AVX512DQ-NEXT: retq995 %a = call <4 x i64> @llvm.llrint.v4i64.v4f64(<4 x double> %x)996 ret <4 x i64> %a997}998declare <4 x i64> @llvm.llrint.v4i64.v4f64(<4 x double>)999 1000define <8 x i64> @llrint_v8i64_v8f64(<8 x double> %x) nounwind {1001; X86-LABEL: llrint_v8i64_v8f64:1002; X86: # %bb.0:1003; X86-NEXT: pushl %ebp1004; X86-NEXT: movl %esp, %ebp1005; X86-NEXT: pushl %ebx1006; X86-NEXT: pushl %edi1007; X86-NEXT: pushl %esi1008; X86-NEXT: andl $-8, %esp1009; X86-NEXT: subl $120, %esp1010; X86-NEXT: fldl 12(%ebp)1011; X86-NEXT: fistpll {{[0-9]+}}(%esp)1012; X86-NEXT: fldl 20(%ebp)1013; X86-NEXT: fistpll {{[0-9]+}}(%esp)1014; X86-NEXT: fldl 28(%ebp)1015; X86-NEXT: fistpll {{[0-9]+}}(%esp)1016; X86-NEXT: fldl 36(%ebp)1017; X86-NEXT: fistpll {{[0-9]+}}(%esp)1018; X86-NEXT: fldl 44(%ebp)1019; X86-NEXT: fistpll {{[0-9]+}}(%esp)1020; X86-NEXT: fldl 52(%ebp)1021; X86-NEXT: fistpll {{[0-9]+}}(%esp)1022; X86-NEXT: fldl 60(%ebp)1023; X86-NEXT: fistpll {{[0-9]+}}(%esp)1024; X86-NEXT: fldl 68(%ebp)1025; X86-NEXT: fistpll {{[0-9]+}}(%esp)1026; X86-NEXT: movl 8(%ebp), %eax1027; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1028; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1029; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1030; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1031; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1032; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1033; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1034; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1035; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1036; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1037; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1038; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1039; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1040; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1041; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1042; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1043; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1044; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1045; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1046; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1047; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1048; X86-NEXT: movl %ecx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1049; X86-NEXT: movl {{[0-9]+}}(%esp), %edi1050; X86-NEXT: movl {{[0-9]+}}(%esp), %esi1051; X86-NEXT: movl {{[0-9]+}}(%esp), %edx1052; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx1053; X86-NEXT: movl {{[0-9]+}}(%esp), %ebx1054; X86-NEXT: movl %ebx, 60(%eax)1055; X86-NEXT: movl %ecx, 56(%eax)1056; X86-NEXT: movl %edx, 52(%eax)1057; X86-NEXT: movl %esi, 48(%eax)1058; X86-NEXT: movl %edi, 44(%eax)1059; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1060; X86-NEXT: movl %ecx, 40(%eax)1061; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1062; X86-NEXT: movl %ecx, 36(%eax)1063; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1064; X86-NEXT: movl %ecx, 32(%eax)1065; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1066; X86-NEXT: movl %ecx, 28(%eax)1067; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1068; X86-NEXT: movl %ecx, 24(%eax)1069; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1070; X86-NEXT: movl %ecx, 20(%eax)1071; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1072; X86-NEXT: movl %ecx, 16(%eax)1073; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1074; X86-NEXT: movl %ecx, 12(%eax)1075; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1076; X86-NEXT: movl %ecx, 8(%eax)1077; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1078; X86-NEXT: movl %ecx, 4(%eax)1079; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %ecx # 4-byte Reload1080; X86-NEXT: movl %ecx, (%eax)1081; X86-NEXT: leal -12(%ebp), %esp1082; X86-NEXT: popl %esi1083; X86-NEXT: popl %edi1084; X86-NEXT: popl %ebx1085; X86-NEXT: popl %ebp1086; X86-NEXT: retl $41087;1088; SSE-LABEL: llrint_v8i64_v8f64:1089; SSE: # %bb.0:1090; SSE-NEXT: cvtsd2si %xmm0, %rax1091; SSE-NEXT: movq %rax, %xmm41092; SSE-NEXT: unpckhpd {{.*#+}} xmm0 = xmm0[1,1]1093; SSE-NEXT: cvtsd2si %xmm0, %rax1094; SSE-NEXT: movq %rax, %xmm01095; SSE-NEXT: punpcklqdq {{.*#+}} xmm4 = xmm4[0],xmm0[0]1096; SSE-NEXT: cvtsd2si %xmm1, %rax1097; SSE-NEXT: movq %rax, %xmm51098; SSE-NEXT: unpckhpd {{.*#+}} xmm1 = xmm1[1,1]1099; SSE-NEXT: cvtsd2si %xmm1, %rax1100; SSE-NEXT: movq %rax, %xmm01101; SSE-NEXT: punpcklqdq {{.*#+}} xmm5 = xmm5[0],xmm0[0]1102; SSE-NEXT: cvtsd2si %xmm2, %rax1103; SSE-NEXT: movq %rax, %xmm61104; SSE-NEXT: unpckhpd {{.*#+}} xmm2 = xmm2[1,1]1105; SSE-NEXT: cvtsd2si %xmm2, %rax1106; SSE-NEXT: movq %rax, %xmm01107; SSE-NEXT: punpcklqdq {{.*#+}} xmm6 = xmm6[0],xmm0[0]1108; SSE-NEXT: cvtsd2si %xmm3, %rax1109; SSE-NEXT: movq %rax, %xmm71110; SSE-NEXT: unpckhpd {{.*#+}} xmm3 = xmm3[1,1]1111; SSE-NEXT: cvtsd2si %xmm3, %rax1112; SSE-NEXT: movq %rax, %xmm01113; SSE-NEXT: punpcklqdq {{.*#+}} xmm7 = xmm7[0],xmm0[0]1114; SSE-NEXT: movdqa %xmm4, %xmm01115; SSE-NEXT: movdqa %xmm5, %xmm11116; SSE-NEXT: movdqa %xmm6, %xmm21117; SSE-NEXT: movdqa %xmm7, %xmm31118; SSE-NEXT: retq1119;1120; AVX1-LABEL: llrint_v8i64_v8f64:1121; AVX1: # %bb.0:1122; AVX1-NEXT: vextractf128 $1, %ymm0, %xmm21123; AVX1-NEXT: vcvtsd2si %xmm2, %rax1124; AVX1-NEXT: vmovq %rax, %xmm31125; AVX1-NEXT: vshufpd {{.*#+}} xmm2 = xmm2[1,0]1126; AVX1-NEXT: vcvtsd2si %xmm2, %rax1127; AVX1-NEXT: vmovq %rax, %xmm21128; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]1129; AVX1-NEXT: vcvtsd2si %xmm0, %rax1130; AVX1-NEXT: vmovq %rax, %xmm31131; AVX1-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]1132; AVX1-NEXT: vcvtsd2si %xmm0, %rax1133; AVX1-NEXT: vmovq %rax, %xmm01134; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]1135; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm0, %ymm01136; AVX1-NEXT: vextractf128 $1, %ymm1, %xmm21137; AVX1-NEXT: vcvtsd2si %xmm2, %rax1138; AVX1-NEXT: vmovq %rax, %xmm31139; AVX1-NEXT: vshufpd {{.*#+}} xmm2 = xmm2[1,0]1140; AVX1-NEXT: vcvtsd2si %xmm2, %rax1141; AVX1-NEXT: vmovq %rax, %xmm21142; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]1143; AVX1-NEXT: vcvtsd2si %xmm1, %rax1144; AVX1-NEXT: vmovq %rax, %xmm31145; AVX1-NEXT: vshufpd {{.*#+}} xmm1 = xmm1[1,0]1146; AVX1-NEXT: vcvtsd2si %xmm1, %rax1147; AVX1-NEXT: vmovq %rax, %xmm11148; AVX1-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm3[0],xmm1[0]1149; AVX1-NEXT: vinsertf128 $1, %xmm2, %ymm1, %ymm11150; AVX1-NEXT: retq1151;1152; AVX512-LABEL: llrint_v8i64_v8f64:1153; AVX512: # %bb.0:1154; AVX512-NEXT: vextractf32x4 $3, %zmm0, %xmm11155; AVX512-NEXT: vcvtsd2si %xmm1, %rax1156; AVX512-NEXT: vmovq %rax, %xmm21157; AVX512-NEXT: vshufpd {{.*#+}} xmm1 = xmm1[1,0]1158; AVX512-NEXT: vcvtsd2si %xmm1, %rax1159; AVX512-NEXT: vmovq %rax, %xmm11160; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm1 = xmm2[0],xmm1[0]1161; AVX512-NEXT: vextractf32x4 $2, %zmm0, %xmm21162; AVX512-NEXT: vcvtsd2si %xmm2, %rax1163; AVX512-NEXT: vmovq %rax, %xmm31164; AVX512-NEXT: vshufpd {{.*#+}} xmm2 = xmm2[1,0]1165; AVX512-NEXT: vcvtsd2si %xmm2, %rax1166; AVX512-NEXT: vmovq %rax, %xmm21167; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]1168; AVX512-NEXT: vinserti128 $1, %xmm1, %ymm2, %ymm11169; AVX512-NEXT: vextractf128 $1, %ymm0, %xmm21170; AVX512-NEXT: vcvtsd2si %xmm2, %rax1171; AVX512-NEXT: vmovq %rax, %xmm31172; AVX512-NEXT: vshufpd {{.*#+}} xmm2 = xmm2[1,0]1173; AVX512-NEXT: vcvtsd2si %xmm2, %rax1174; AVX512-NEXT: vmovq %rax, %xmm21175; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm2 = xmm3[0],xmm2[0]1176; AVX512-NEXT: vcvtsd2si %xmm0, %rax1177; AVX512-NEXT: vmovq %rax, %xmm31178; AVX512-NEXT: vshufpd {{.*#+}} xmm0 = xmm0[1,0]1179; AVX512-NEXT: vcvtsd2si %xmm0, %rax1180; AVX512-NEXT: vmovq %rax, %xmm01181; AVX512-NEXT: vpunpcklqdq {{.*#+}} xmm0 = xmm3[0],xmm0[0]1182; AVX512-NEXT: vinserti128 $1, %xmm2, %ymm0, %ymm01183; AVX512-NEXT: vinserti64x4 $1, %ymm1, %zmm0, %zmm01184; AVX512-NEXT: retq1185;1186; AVX512DQ-LABEL: llrint_v8i64_v8f64:1187; AVX512DQ: # %bb.0:1188; AVX512DQ-NEXT: vcvtpd2qq %zmm0, %zmm01189; AVX512DQ-NEXT: retq1190 %a = call <8 x i64> @llvm.llrint.v8i64.v8f64(<8 x double> %x)1191 ret <8 x i64> %a1192}1193declare <8 x i64> @llvm.llrint.v8i64.v8f64(<8 x double>)1194 1195define <1 x i64> @llrint_v1i64_v1f128(<1 x fp128> %x) nounwind {1196; X86-LABEL: llrint_v1i64_v1f128:1197; X86: # %bb.0:1198; X86-NEXT: pushl %ebp1199; X86-NEXT: movl %esp, %ebp1200; X86-NEXT: andl $-16, %esp1201; X86-NEXT: subl $16, %esp1202; X86-NEXT: pushl 20(%ebp)1203; X86-NEXT: pushl 16(%ebp)1204; X86-NEXT: pushl 12(%ebp)1205; X86-NEXT: pushl 8(%ebp)1206; X86-NEXT: calll llrintl1207; X86-NEXT: addl $16, %esp1208; X86-NEXT: movl %ebp, %esp1209; X86-NEXT: popl %ebp1210; X86-NEXT: retl1211;1212; SSE-LABEL: llrint_v1i64_v1f128:1213; SSE: # %bb.0:1214; SSE-NEXT: pushq %rax1215; SSE-NEXT: callq llrintl@PLT1216; SSE-NEXT: popq %rcx1217; SSE-NEXT: retq1218;1219; AVX-LABEL: llrint_v1i64_v1f128:1220; AVX: # %bb.0:1221; AVX-NEXT: pushq %rax1222; AVX-NEXT: callq llrintl@PLT1223; AVX-NEXT: popq %rcx1224; AVX-NEXT: retq1225;1226; AVX512DQ-LABEL: llrint_v1i64_v1f128:1227; AVX512DQ: # %bb.0:1228; AVX512DQ-NEXT: pushq %rax1229; AVX512DQ-NEXT: callq llrintl@PLT1230; AVX512DQ-NEXT: popq %rcx1231; AVX512DQ-NEXT: retq1232 %a = call <1 x i64> @llvm.llrint.v1i64.v1f128(<1 x fp128> %x)1233 ret <1 x i64> %a1234}1235declare <1 x i64> @llvm.llrint.v1i64.v1f128(<1 x fp128>)1236 1237define <2 x i64> @llrint_v2i64_v2f128(<2 x fp128> %x) nounwind {1238; X86-LABEL: llrint_v2i64_v2f128:1239; X86: # %bb.0:1240; X86-NEXT: pushl %ebp1241; X86-NEXT: movl %esp, %ebp1242; X86-NEXT: pushl %ebx1243; X86-NEXT: pushl %edi1244; X86-NEXT: pushl %esi1245; X86-NEXT: andl $-16, %esp1246; X86-NEXT: subl $16, %esp1247; X86-NEXT: movl 8(%ebp), %esi1248; X86-NEXT: pushl 24(%ebp)1249; X86-NEXT: pushl 20(%ebp)1250; X86-NEXT: pushl 16(%ebp)1251; X86-NEXT: pushl 12(%ebp)1252; X86-NEXT: calll llrintl1253; X86-NEXT: addl $16, %esp1254; X86-NEXT: movl %eax, %edi1255; X86-NEXT: movl %edx, %ebx1256; X86-NEXT: pushl 40(%ebp)1257; X86-NEXT: pushl 36(%ebp)1258; X86-NEXT: pushl 32(%ebp)1259; X86-NEXT: pushl 28(%ebp)1260; X86-NEXT: calll llrintl1261; X86-NEXT: addl $16, %esp1262; X86-NEXT: movl %edx, 12(%esi)1263; X86-NEXT: movl %eax, 8(%esi)1264; X86-NEXT: movl %ebx, 4(%esi)1265; X86-NEXT: movl %edi, (%esi)1266; X86-NEXT: movl %esi, %eax1267; X86-NEXT: leal -12(%ebp), %esp1268; X86-NEXT: popl %esi1269; X86-NEXT: popl %edi1270; X86-NEXT: popl %ebx1271; X86-NEXT: popl %ebp1272; X86-NEXT: retl $41273;1274; SSE-LABEL: llrint_v2i64_v2f128:1275; SSE: # %bb.0:1276; SSE-NEXT: subq $40, %rsp1277; SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1278; SSE-NEXT: movaps %xmm1, %xmm01279; SSE-NEXT: callq llrintl@PLT1280; SSE-NEXT: movq %rax, %xmm01281; SSE-NEXT: movdqa %xmm0, (%rsp) # 16-byte Spill1282; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1283; SSE-NEXT: callq llrintl@PLT1284; SSE-NEXT: movq %rax, %xmm01285; SSE-NEXT: punpcklqdq (%rsp), %xmm0 # 16-byte Folded Reload1286; SSE-NEXT: # xmm0 = xmm0[0],mem[0]1287; SSE-NEXT: addq $40, %rsp1288; SSE-NEXT: retq1289;1290; AVX-LABEL: llrint_v2i64_v2f128:1291; AVX: # %bb.0:1292; AVX-NEXT: subq $40, %rsp1293; AVX-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1294; AVX-NEXT: vmovaps %xmm1, %xmm01295; AVX-NEXT: callq llrintl@PLT1296; AVX-NEXT: vmovq %rax, %xmm01297; AVX-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1298; AVX-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1299; AVX-NEXT: callq llrintl@PLT1300; AVX-NEXT: vmovq %rax, %xmm01301; AVX-NEXT: vpunpcklqdq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1302; AVX-NEXT: # xmm0 = xmm0[0],mem[0]1303; AVX-NEXT: addq $40, %rsp1304; AVX-NEXT: retq1305;1306; AVX512DQ-LABEL: llrint_v2i64_v2f128:1307; AVX512DQ: # %bb.0:1308; AVX512DQ-NEXT: subq $40, %rsp1309; AVX512DQ-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1310; AVX512DQ-NEXT: vmovaps %xmm1, %xmm01311; AVX512DQ-NEXT: callq llrintl@PLT1312; AVX512DQ-NEXT: vmovq %rax, %xmm01313; AVX512DQ-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1314; AVX512DQ-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1315; AVX512DQ-NEXT: callq llrintl@PLT1316; AVX512DQ-NEXT: vmovq %rax, %xmm01317; AVX512DQ-NEXT: vpunpcklqdq (%rsp), %xmm0, %xmm0 # 16-byte Folded Reload1318; AVX512DQ-NEXT: # xmm0 = xmm0[0],mem[0]1319; AVX512DQ-NEXT: addq $40, %rsp1320; AVX512DQ-NEXT: retq1321 %a = call <2 x i64> @llvm.llrint.v2i64.v2f128(<2 x fp128> %x)1322 ret <2 x i64> %a1323}1324declare <2 x i64> @llvm.llrint.v2i64.v2f128(<2 x fp128>)1325 1326define <4 x i64> @llrint_v4i64_v4f128(<4 x fp128> %x) nounwind {1327; X86-LABEL: llrint_v4i64_v4f128:1328; X86: # %bb.0:1329; X86-NEXT: pushl %ebp1330; X86-NEXT: movl %esp, %ebp1331; X86-NEXT: pushl %ebx1332; X86-NEXT: pushl %edi1333; X86-NEXT: pushl %esi1334; X86-NEXT: andl $-16, %esp1335; X86-NEXT: subl $32, %esp1336; X86-NEXT: movl 8(%ebp), %esi1337; X86-NEXT: movl 36(%ebp), %edi1338; X86-NEXT: movl 40(%ebp), %ebx1339; X86-NEXT: pushl 24(%ebp)1340; X86-NEXT: pushl 20(%ebp)1341; X86-NEXT: pushl 16(%ebp)1342; X86-NEXT: pushl 12(%ebp)1343; X86-NEXT: calll llrintl1344; X86-NEXT: addl $16, %esp1345; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1346; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1347; X86-NEXT: pushl %ebx1348; X86-NEXT: pushl %edi1349; X86-NEXT: pushl 32(%ebp)1350; X86-NEXT: pushl 28(%ebp)1351; X86-NEXT: calll llrintl1352; X86-NEXT: addl $16, %esp1353; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1354; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1355; X86-NEXT: pushl 56(%ebp)1356; X86-NEXT: pushl 52(%ebp)1357; X86-NEXT: pushl 48(%ebp)1358; X86-NEXT: pushl 44(%ebp)1359; X86-NEXT: calll llrintl1360; X86-NEXT: addl $16, %esp1361; X86-NEXT: movl %eax, %edi1362; X86-NEXT: movl %edx, %ebx1363; X86-NEXT: pushl 72(%ebp)1364; X86-NEXT: pushl 68(%ebp)1365; X86-NEXT: pushl 64(%ebp)1366; X86-NEXT: pushl 60(%ebp)1367; X86-NEXT: calll llrintl1368; X86-NEXT: addl $16, %esp1369; X86-NEXT: movl %edx, 28(%esi)1370; X86-NEXT: movl %eax, 24(%esi)1371; X86-NEXT: movl %ebx, 20(%esi)1372; X86-NEXT: movl %edi, 16(%esi)1373; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1374; X86-NEXT: movl %eax, 12(%esi)1375; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1376; X86-NEXT: movl %eax, 8(%esi)1377; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1378; X86-NEXT: movl %eax, 4(%esi)1379; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1380; X86-NEXT: movl %eax, (%esi)1381; X86-NEXT: movl %esi, %eax1382; X86-NEXT: leal -12(%ebp), %esp1383; X86-NEXT: popl %esi1384; X86-NEXT: popl %edi1385; X86-NEXT: popl %ebx1386; X86-NEXT: popl %ebp1387; X86-NEXT: retl $41388;1389; SSE-LABEL: llrint_v4i64_v4f128:1390; SSE: # %bb.0:1391; SSE-NEXT: subq $72, %rsp1392; SSE-NEXT: movaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1393; SSE-NEXT: movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1394; SSE-NEXT: movaps %xmm0, (%rsp) # 16-byte Spill1395; SSE-NEXT: movaps %xmm1, %xmm01396; SSE-NEXT: callq llrintl@PLT1397; SSE-NEXT: movq %rax, %xmm01398; SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1399; SSE-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload1400; SSE-NEXT: callq llrintl@PLT1401; SSE-NEXT: movq %rax, %xmm01402; SSE-NEXT: punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1403; SSE-NEXT: # xmm0 = xmm0[0],mem[0]1404; SSE-NEXT: movdqa %xmm0, (%rsp) # 16-byte Spill1405; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1406; SSE-NEXT: callq llrintl@PLT1407; SSE-NEXT: movq %rax, %xmm01408; SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1409; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1410; SSE-NEXT: callq llrintl@PLT1411; SSE-NEXT: movq %rax, %xmm11412; SSE-NEXT: punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Folded Reload1413; SSE-NEXT: # xmm1 = xmm1[0],mem[0]1414; SSE-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload1415; SSE-NEXT: addq $72, %rsp1416; SSE-NEXT: retq1417;1418; AVX1-LABEL: llrint_v4i64_v4f128:1419; AVX1: # %bb.0:1420; AVX1-NEXT: subq $72, %rsp1421; AVX1-NEXT: vmovaps %xmm2, (%rsp) # 16-byte Spill1422; AVX1-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1423; AVX1-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1424; AVX1-NEXT: vmovaps %xmm3, %xmm01425; AVX1-NEXT: callq llrintl@PLT1426; AVX1-NEXT: vmovq %rax, %xmm01427; AVX1-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1428; AVX1-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1429; AVX1-NEXT: callq llrintl@PLT1430; AVX1-NEXT: vmovq %rax, %xmm01431; AVX1-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1432; AVX1-NEXT: # xmm0 = xmm0[0],mem[0]1433; AVX1-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1434; AVX1-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1435; AVX1-NEXT: callq llrintl@PLT1436; AVX1-NEXT: vmovq %rax, %xmm01437; AVX1-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1438; AVX1-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1439; AVX1-NEXT: callq llrintl@PLT1440; AVX1-NEXT: vmovq %rax, %xmm01441; AVX1-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1442; AVX1-NEXT: # xmm0 = xmm0[0],mem[0]1443; AVX1-NEXT: vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1444; AVX1-NEXT: addq $72, %rsp1445; AVX1-NEXT: retq1446;1447; AVX512-LABEL: llrint_v4i64_v4f128:1448; AVX512: # %bb.0:1449; AVX512-NEXT: subq $72, %rsp1450; AVX512-NEXT: vmovaps %xmm2, (%rsp) # 16-byte Spill1451; AVX512-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1452; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1453; AVX512-NEXT: vmovaps %xmm3, %xmm01454; AVX512-NEXT: callq llrintl@PLT1455; AVX512-NEXT: vmovq %rax, %xmm01456; AVX512-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1457; AVX512-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1458; AVX512-NEXT: callq llrintl@PLT1459; AVX512-NEXT: vmovq %rax, %xmm01460; AVX512-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1461; AVX512-NEXT: # xmm0 = xmm0[0],mem[0]1462; AVX512-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1463; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1464; AVX512-NEXT: callq llrintl@PLT1465; AVX512-NEXT: vmovq %rax, %xmm01466; AVX512-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1467; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1468; AVX512-NEXT: callq llrintl@PLT1469; AVX512-NEXT: vmovq %rax, %xmm01470; AVX512-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1471; AVX512-NEXT: # xmm0 = xmm0[0],mem[0]1472; AVX512-NEXT: vinserti128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1473; AVX512-NEXT: addq $72, %rsp1474; AVX512-NEXT: retq1475;1476; AVX512DQ-LABEL: llrint_v4i64_v4f128:1477; AVX512DQ: # %bb.0:1478; AVX512DQ-NEXT: subq $72, %rsp1479; AVX512DQ-NEXT: vmovaps %xmm2, (%rsp) # 16-byte Spill1480; AVX512DQ-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1481; AVX512DQ-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1482; AVX512DQ-NEXT: vmovaps %xmm3, %xmm01483; AVX512DQ-NEXT: callq llrintl@PLT1484; AVX512DQ-NEXT: vmovq %rax, %xmm01485; AVX512DQ-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1486; AVX512DQ-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1487; AVX512DQ-NEXT: callq llrintl@PLT1488; AVX512DQ-NEXT: vmovq %rax, %xmm01489; AVX512DQ-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1490; AVX512DQ-NEXT: # xmm0 = xmm0[0],mem[0]1491; AVX512DQ-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1492; AVX512DQ-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1493; AVX512DQ-NEXT: callq llrintl@PLT1494; AVX512DQ-NEXT: vmovq %rax, %xmm01495; AVX512DQ-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1496; AVX512DQ-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1497; AVX512DQ-NEXT: callq llrintl@PLT1498; AVX512DQ-NEXT: vmovq %rax, %xmm01499; AVX512DQ-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1500; AVX512DQ-NEXT: # xmm0 = xmm0[0],mem[0]1501; AVX512DQ-NEXT: vinserti128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1502; AVX512DQ-NEXT: addq $72, %rsp1503; AVX512DQ-NEXT: retq1504 %a = call <4 x i64> @llvm.llrint.v4i64.v4f128(<4 x fp128> %x)1505 ret <4 x i64> %a1506}1507declare <4 x i64> @llvm.llrint.v4i64.v4f128(<4 x fp128>)1508 1509define <8 x i64> @llrint_v8i64_v8f128(<8 x fp128> %x) nounwind {1510; X86-LABEL: llrint_v8i64_v8f128:1511; X86: # %bb.0:1512; X86-NEXT: pushl %ebp1513; X86-NEXT: movl %esp, %ebp1514; X86-NEXT: pushl %ebx1515; X86-NEXT: pushl %edi1516; X86-NEXT: pushl %esi1517; X86-NEXT: andl $-16, %esp1518; X86-NEXT: subl $64, %esp1519; X86-NEXT: movl 8(%ebp), %esi1520; X86-NEXT: movl 36(%ebp), %edi1521; X86-NEXT: movl 40(%ebp), %ebx1522; X86-NEXT: pushl 24(%ebp)1523; X86-NEXT: pushl 20(%ebp)1524; X86-NEXT: pushl 16(%ebp)1525; X86-NEXT: pushl 12(%ebp)1526; X86-NEXT: calll llrintl1527; X86-NEXT: addl $16, %esp1528; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1529; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1530; X86-NEXT: pushl %ebx1531; X86-NEXT: pushl %edi1532; X86-NEXT: pushl 32(%ebp)1533; X86-NEXT: pushl 28(%ebp)1534; X86-NEXT: calll llrintl1535; X86-NEXT: addl $16, %esp1536; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1537; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1538; X86-NEXT: pushl 56(%ebp)1539; X86-NEXT: pushl 52(%ebp)1540; X86-NEXT: pushl 48(%ebp)1541; X86-NEXT: pushl 44(%ebp)1542; X86-NEXT: calll llrintl1543; X86-NEXT: addl $16, %esp1544; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1545; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1546; X86-NEXT: pushl 72(%ebp)1547; X86-NEXT: pushl 68(%ebp)1548; X86-NEXT: pushl 64(%ebp)1549; X86-NEXT: pushl 60(%ebp)1550; X86-NEXT: calll llrintl1551; X86-NEXT: addl $16, %esp1552; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1553; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1554; X86-NEXT: pushl 88(%ebp)1555; X86-NEXT: pushl 84(%ebp)1556; X86-NEXT: pushl 80(%ebp)1557; X86-NEXT: pushl 76(%ebp)1558; X86-NEXT: calll llrintl1559; X86-NEXT: addl $16, %esp1560; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1561; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1562; X86-NEXT: pushl 104(%ebp)1563; X86-NEXT: pushl 100(%ebp)1564; X86-NEXT: pushl 96(%ebp)1565; X86-NEXT: pushl 92(%ebp)1566; X86-NEXT: calll llrintl1567; X86-NEXT: addl $16, %esp1568; X86-NEXT: movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1569; X86-NEXT: movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill1570; X86-NEXT: pushl 120(%ebp)1571; X86-NEXT: pushl 116(%ebp)1572; X86-NEXT: pushl 112(%ebp)1573; X86-NEXT: pushl 108(%ebp)1574; X86-NEXT: calll llrintl1575; X86-NEXT: addl $16, %esp1576; X86-NEXT: movl %eax, %edi1577; X86-NEXT: movl %edx, %ebx1578; X86-NEXT: pushl 136(%ebp)1579; X86-NEXT: pushl 132(%ebp)1580; X86-NEXT: pushl 128(%ebp)1581; X86-NEXT: pushl 124(%ebp)1582; X86-NEXT: calll llrintl1583; X86-NEXT: addl $16, %esp1584; X86-NEXT: movl %edx, 60(%esi)1585; X86-NEXT: movl %eax, 56(%esi)1586; X86-NEXT: movl %ebx, 52(%esi)1587; X86-NEXT: movl %edi, 48(%esi)1588; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1589; X86-NEXT: movl %eax, 44(%esi)1590; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1591; X86-NEXT: movl %eax, 40(%esi)1592; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1593; X86-NEXT: movl %eax, 36(%esi)1594; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1595; X86-NEXT: movl %eax, 32(%esi)1596; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1597; X86-NEXT: movl %eax, 28(%esi)1598; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1599; X86-NEXT: movl %eax, 24(%esi)1600; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1601; X86-NEXT: movl %eax, 20(%esi)1602; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1603; X86-NEXT: movl %eax, 16(%esi)1604; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1605; X86-NEXT: movl %eax, 12(%esi)1606; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1607; X86-NEXT: movl %eax, 8(%esi)1608; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1609; X86-NEXT: movl %eax, 4(%esi)1610; X86-NEXT: movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload1611; X86-NEXT: movl %eax, (%esi)1612; X86-NEXT: movl %esi, %eax1613; X86-NEXT: leal -12(%ebp), %esp1614; X86-NEXT: popl %esi1615; X86-NEXT: popl %edi1616; X86-NEXT: popl %ebx1617; X86-NEXT: popl %ebp1618; X86-NEXT: retl $41619;1620; SSE-LABEL: llrint_v8i64_v8f128:1621; SSE: # %bb.0:1622; SSE-NEXT: subq $136, %rsp1623; SSE-NEXT: movaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1624; SSE-NEXT: movaps %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1625; SSE-NEXT: movaps %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1626; SSE-NEXT: movaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1627; SSE-NEXT: movaps %xmm3, (%rsp) # 16-byte Spill1628; SSE-NEXT: movaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1629; SSE-NEXT: movaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1630; SSE-NEXT: movaps %xmm1, %xmm01631; SSE-NEXT: callq llrintl@PLT1632; SSE-NEXT: movq %rax, %xmm01633; SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1634; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1635; SSE-NEXT: callq llrintl@PLT1636; SSE-NEXT: movq %rax, %xmm01637; SSE-NEXT: punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1638; SSE-NEXT: # xmm0 = xmm0[0],mem[0]1639; SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1640; SSE-NEXT: movaps (%rsp), %xmm0 # 16-byte Reload1641; SSE-NEXT: callq llrintl@PLT1642; SSE-NEXT: movq %rax, %xmm01643; SSE-NEXT: movdqa %xmm0, (%rsp) # 16-byte Spill1644; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1645; SSE-NEXT: callq llrintl@PLT1646; SSE-NEXT: movq %rax, %xmm01647; SSE-NEXT: punpcklqdq (%rsp), %xmm0 # 16-byte Folded Reload1648; SSE-NEXT: # xmm0 = xmm0[0],mem[0]1649; SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1650; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1651; SSE-NEXT: callq llrintl@PLT1652; SSE-NEXT: movq %rax, %xmm01653; SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1654; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1655; SSE-NEXT: callq llrintl@PLT1656; SSE-NEXT: movq %rax, %xmm01657; SSE-NEXT: punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Folded Reload1658; SSE-NEXT: # xmm0 = xmm0[0],mem[0]1659; SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1660; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1661; SSE-NEXT: callq llrintl@PLT1662; SSE-NEXT: movq %rax, %xmm01663; SSE-NEXT: movdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1664; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1665; SSE-NEXT: callq llrintl@PLT1666; SSE-NEXT: movq %rax, %xmm31667; SSE-NEXT: punpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm3 # 16-byte Folded Reload1668; SSE-NEXT: # xmm3 = xmm3[0],mem[0]1669; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1670; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm1 # 16-byte Reload1671; SSE-NEXT: movaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm2 # 16-byte Reload1672; SSE-NEXT: addq $136, %rsp1673; SSE-NEXT: retq1674;1675; AVX1-LABEL: llrint_v8i64_v8f128:1676; AVX1: # %bb.0:1677; AVX1-NEXT: subq $152, %rsp1678; AVX1-NEXT: vmovaps %xmm7, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1679; AVX1-NEXT: vmovaps %xmm6, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1680; AVX1-NEXT: vmovaps %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1681; AVX1-NEXT: vmovaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1682; AVX1-NEXT: vmovaps %xmm2, (%rsp) # 16-byte Spill1683; AVX1-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1684; AVX1-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1685; AVX1-NEXT: vmovaps %xmm3, %xmm01686; AVX1-NEXT: callq llrintl@PLT1687; AVX1-NEXT: vmovq %rax, %xmm01688; AVX1-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1689; AVX1-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1690; AVX1-NEXT: callq llrintl@PLT1691; AVX1-NEXT: vmovq %rax, %xmm01692; AVX1-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1693; AVX1-NEXT: # xmm0 = xmm0[0],mem[0]1694; AVX1-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1695; AVX1-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1696; AVX1-NEXT: callq llrintl@PLT1697; AVX1-NEXT: vmovq %rax, %xmm01698; AVX1-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1699; AVX1-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1700; AVX1-NEXT: callq llrintl@PLT1701; AVX1-NEXT: vmovq %rax, %xmm01702; AVX1-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1703; AVX1-NEXT: # xmm0 = xmm0[0],mem[0]1704; AVX1-NEXT: vinsertf128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1705; AVX1-NEXT: vmovups %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1706; AVX1-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1707; AVX1-NEXT: vzeroupper1708; AVX1-NEXT: callq llrintl@PLT1709; AVX1-NEXT: vmovq %rax, %xmm01710; AVX1-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1711; AVX1-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1712; AVX1-NEXT: callq llrintl@PLT1713; AVX1-NEXT: vmovq %rax, %xmm01714; AVX1-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1715; AVX1-NEXT: # xmm0 = xmm0[0],mem[0]1716; AVX1-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1717; AVX1-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1718; AVX1-NEXT: callq llrintl@PLT1719; AVX1-NEXT: vmovq %rax, %xmm01720; AVX1-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1721; AVX1-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1722; AVX1-NEXT: callq llrintl@PLT1723; AVX1-NEXT: vmovq %rax, %xmm01724; AVX1-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1725; AVX1-NEXT: # xmm0 = xmm0[0],mem[0]1726; AVX1-NEXT: vinsertf128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm1 # 16-byte Folded Reload1727; AVX1-NEXT: vmovups {{[-0-9]+}}(%r{{[sb]}}p), %ymm0 # 32-byte Reload1728; AVX1-NEXT: addq $152, %rsp1729; AVX1-NEXT: retq1730;1731; AVX512-LABEL: llrint_v8i64_v8f128:1732; AVX512: # %bb.0:1733; AVX512-NEXT: subq $152, %rsp1734; AVX512-NEXT: vmovaps %xmm6, (%rsp) # 16-byte Spill1735; AVX512-NEXT: vmovaps %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1736; AVX512-NEXT: vmovaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1737; AVX512-NEXT: vmovaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1738; AVX512-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1739; AVX512-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1740; AVX512-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1741; AVX512-NEXT: vmovaps %xmm7, %xmm01742; AVX512-NEXT: callq llrintl@PLT1743; AVX512-NEXT: vmovq %rax, %xmm01744; AVX512-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1745; AVX512-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1746; AVX512-NEXT: callq llrintl@PLT1747; AVX512-NEXT: vmovq %rax, %xmm01748; AVX512-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1749; AVX512-NEXT: # xmm0 = xmm0[0],mem[0]1750; AVX512-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1751; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1752; AVX512-NEXT: callq llrintl@PLT1753; AVX512-NEXT: vmovq %rax, %xmm01754; AVX512-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1755; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1756; AVX512-NEXT: callq llrintl@PLT1757; AVX512-NEXT: vmovq %rax, %xmm01758; AVX512-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1759; AVX512-NEXT: # xmm0 = xmm0[0],mem[0]1760; AVX512-NEXT: vinserti128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1761; AVX512-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1762; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1763; AVX512-NEXT: vzeroupper1764; AVX512-NEXT: callq llrintl@PLT1765; AVX512-NEXT: vmovq %rax, %xmm01766; AVX512-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1767; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1768; AVX512-NEXT: callq llrintl@PLT1769; AVX512-NEXT: vmovq %rax, %xmm01770; AVX512-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1771; AVX512-NEXT: # xmm0 = xmm0[0],mem[0]1772; AVX512-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1773; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1774; AVX512-NEXT: callq llrintl@PLT1775; AVX512-NEXT: vmovq %rax, %xmm01776; AVX512-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1777; AVX512-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1778; AVX512-NEXT: callq llrintl@PLT1779; AVX512-NEXT: vmovq %rax, %xmm01780; AVX512-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1781; AVX512-NEXT: # xmm0 = xmm0[0],mem[0]1782; AVX512-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1783; AVX512-NEXT: vinserti64x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 32-byte Folded Reload1784; AVX512-NEXT: addq $152, %rsp1785; AVX512-NEXT: retq1786;1787; AVX512DQ-LABEL: llrint_v8i64_v8f128:1788; AVX512DQ: # %bb.0:1789; AVX512DQ-NEXT: subq $152, %rsp1790; AVX512DQ-NEXT: vmovaps %xmm6, (%rsp) # 16-byte Spill1791; AVX512DQ-NEXT: vmovaps %xmm5, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1792; AVX512DQ-NEXT: vmovaps %xmm4, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1793; AVX512DQ-NEXT: vmovaps %xmm3, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1794; AVX512DQ-NEXT: vmovaps %xmm2, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1795; AVX512DQ-NEXT: vmovaps %xmm1, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1796; AVX512DQ-NEXT: vmovaps %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1797; AVX512DQ-NEXT: vmovaps %xmm7, %xmm01798; AVX512DQ-NEXT: callq llrintl@PLT1799; AVX512DQ-NEXT: vmovq %rax, %xmm01800; AVX512DQ-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1801; AVX512DQ-NEXT: vmovaps (%rsp), %xmm0 # 16-byte Reload1802; AVX512DQ-NEXT: callq llrintl@PLT1803; AVX512DQ-NEXT: vmovq %rax, %xmm01804; AVX512DQ-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1805; AVX512DQ-NEXT: # xmm0 = xmm0[0],mem[0]1806; AVX512DQ-NEXT: vmovdqa %xmm0, (%rsp) # 16-byte Spill1807; AVX512DQ-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1808; AVX512DQ-NEXT: callq llrintl@PLT1809; AVX512DQ-NEXT: vmovq %rax, %xmm01810; AVX512DQ-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1811; AVX512DQ-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1812; AVX512DQ-NEXT: callq llrintl@PLT1813; AVX512DQ-NEXT: vmovq %rax, %xmm01814; AVX512DQ-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1815; AVX512DQ-NEXT: # xmm0 = xmm0[0],mem[0]1816; AVX512DQ-NEXT: vinserti128 $1, (%rsp), %ymm0, %ymm0 # 16-byte Folded Reload1817; AVX512DQ-NEXT: vmovdqu %ymm0, {{[-0-9]+}}(%r{{[sb]}}p) # 32-byte Spill1818; AVX512DQ-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1819; AVX512DQ-NEXT: vzeroupper1820; AVX512DQ-NEXT: callq llrintl@PLT1821; AVX512DQ-NEXT: vmovq %rax, %xmm01822; AVX512DQ-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1823; AVX512DQ-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1824; AVX512DQ-NEXT: callq llrintl@PLT1825; AVX512DQ-NEXT: vmovq %rax, %xmm01826; AVX512DQ-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1827; AVX512DQ-NEXT: # xmm0 = xmm0[0],mem[0]1828; AVX512DQ-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1829; AVX512DQ-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1830; AVX512DQ-NEXT: callq llrintl@PLT1831; AVX512DQ-NEXT: vmovq %rax, %xmm01832; AVX512DQ-NEXT: vmovdqa %xmm0, {{[-0-9]+}}(%r{{[sb]}}p) # 16-byte Spill1833; AVX512DQ-NEXT: vmovaps {{[-0-9]+}}(%r{{[sb]}}p), %xmm0 # 16-byte Reload1834; AVX512DQ-NEXT: callq llrintl@PLT1835; AVX512DQ-NEXT: vmovq %rax, %xmm01836; AVX512DQ-NEXT: vpunpcklqdq {{[-0-9]+}}(%r{{[sb]}}p), %xmm0, %xmm0 # 16-byte Folded Reload1837; AVX512DQ-NEXT: # xmm0 = xmm0[0],mem[0]1838; AVX512DQ-NEXT: vinserti128 $1, {{[-0-9]+}}(%r{{[sb]}}p), %ymm0, %ymm0 # 16-byte Folded Reload1839; AVX512DQ-NEXT: vinserti64x4 $1, {{[-0-9]+}}(%r{{[sb]}}p), %zmm0, %zmm0 # 32-byte Folded Reload1840; AVX512DQ-NEXT: addq $152, %rsp1841; AVX512DQ-NEXT: retq1842 %a = call <8 x i64> @llvm.llrint.v8i64.v8f128(<8 x fp128> %x)1843 ret <8 x i64> %a1844}1845declare <8 x i64> @llvm.llrint.v8i64.v8f128(<8 x fp128>)1846