[llvm] 84ce7b1 - [X86] Avoid custom lowering `llrint` on non-x87 targets (#181339)

via llvm-commits llvm-commits at lists.llvm.org
Sat Feb 14 01:03:57 PST 2026


Author: Abhishek Kaushik
Date: 2026-02-14T14:33:52+05:30
New Revision: 84ce7b1f1d2997d1880f9b24ee6e6a75d4045e0a

URL: https://github.com/llvm/llvm-project/commit/84ce7b1f1d2997d1880f9b24ee6e6a75d4045e0a
DIFF: https://github.com/llvm/llvm-project/commit/84ce7b1f1d2997d1880f9b24ee6e6a75d4045e0a.diff

LOG: [X86] Avoid custom lowering `llrint` on non-x87 targets (#181339)

Fixes #181265

Added: 
    

Modified: 
    llvm/lib/Target/X86/X86ISelLowering.cpp
    llvm/test/CodeGen/X86/llrint-conv.ll
    llvm/test/CodeGen/X86/lrint-conv-i64.ll
    llvm/test/CodeGen/X86/vector-llrint.ll
    llvm/test/CodeGen/X86/vector-lrint.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index 88616e0f2a0c9..d63840267cf5f 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -303,7 +303,7 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
     setOperationAction(ISD::LLRINT,            MVT::f32, Custom);
     setOperationAction(ISD::LLRINT,            MVT::f64, Custom);
 
-    if (!Subtarget.is64Bit()) {
+    if (!Subtarget.is64Bit() && Subtarget.hasX87()) {
       setOperationAction(ISD::LRINT,  MVT::i64, Custom);
       setOperationAction(ISD::LLRINT, MVT::i64, Custom);
     }
@@ -22587,6 +22587,7 @@ SDValue X86TargetLowering::LowerLRINT_LLRINT(SDValue Op,
 
 SDValue X86TargetLowering::LRINT_LLRINTHelper(SDNode *N,
                                               SelectionDAG &DAG) const {
+  assert(DAG.getSubtarget<X86Subtarget>().hasX87() && "Expected X87");
   EVT DstVT = N->getValueType(0);
   SDValue Src = N->getOperand(0);
   EVT SrcVT = Src.getValueType();

diff  --git a/llvm/test/CodeGen/X86/llrint-conv.ll b/llvm/test/CodeGen/X86/llrint-conv.ll
index 089bc187bab7d..01551030d938a 100644
--- a/llvm/test/CodeGen/X86/llrint-conv.ll
+++ b/llvm/test/CodeGen/X86/llrint-conv.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=i686-unknown             | FileCheck %s --check-prefixes=X86,X86-NOSSE
+; RUN: llc < %s -mtriple=i686-unknown -mattr=-x87 | FileCheck %s --check-prefixes=X86-NOX87
 ; RUN: llc < %s -mtriple=i686-unknown -mattr=sse2 | FileCheck %s --check-prefixes=X86,X86-SSE2
 ; RUN: llc < %s -mtriple=i686-unknown -mattr=avx | FileCheck %s --check-prefixes=X86,X86-AVX
 ; RUN: llc < %s -mtriple=i686-unknown -mattr=avx512f | FileCheck %s --check-prefixes=X86,X86-AVX
@@ -19,6 +20,17 @@ define i64 @test_llrint_i64_f16(half %x) nounwind {
 ; X86-NOSSE-NEXT:    popl %ecx
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_llrint_i64_f16:
+; X86-NOX87:       # %bb.0: # %entry
+; X86-NOX87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-NOX87-NEXT:    pushl %eax
+; X86-NOX87-NEXT:    calll __extendhfsf2
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    pushl %eax
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_llrint_i64_f16:
 ; X86-SSE2:       # %bb.0: # %entry
 ; X86-SSE2-NEXT:    pushl %eax
@@ -61,6 +73,13 @@ define i64 @test_llrint_i64_f32(float %x) nounwind {
 ; X86-NOSSE-NEXT:    popl %ebp
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_llrint_i64_f32:
+; X86-NOX87:       # %bb.0: # %entry
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_llrint_i64_f32:
 ; X86-SSE2:       # %bb.0: # %entry
 ; X86-SSE2-NEXT:    pushl %ebp
@@ -122,6 +141,14 @@ define i64 @test_llrint_i64_f64(double %x) nounwind {
 ; X86-NOSSE-NEXT:    popl %ebp
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_llrint_i64_f64:
+; X86-NOX87:       # %bb.0: # %entry
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_llrint_i64_f64:
 ; X86-SSE2:       # %bb.0: # %entry
 ; X86-SSE2-NEXT:    pushl %ebp
@@ -183,6 +210,16 @@ define i64 @test_llrint_i64_f80(x86_fp80 %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_llrint_i64_f80:
+; X86-NOX87:       # %bb.0: # %entry
+; X86-NOX87-NEXT:    movswl {{[0-9]+}}(%esp), %eax
+; X86-NOX87-NEXT:    pushl %eax
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $12, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X64-LABEL: test_llrint_i64_f80:
 ; X64:       # %bb.0: # %entry
 ; X64-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -212,6 +249,22 @@ define i64 @test_llrint_i64_f128(fp128 %x) nounwind {
 ; X86-NOSSE-NEXT:    popl %ebp
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_llrint_i64_f128:
+; X86-NOX87:       # %bb.0: # %entry
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    movl %esp, %ebp
+; X86-NOX87-NEXT:    andl $-16, %esp
+; X86-NOX87-NEXT:    subl $16, %esp
+; X86-NOX87-NEXT:    pushl 20(%ebp)
+; X86-NOX87-NEXT:    pushl 16(%ebp)
+; X86-NOX87-NEXT:    pushl 12(%ebp)
+; X86-NOX87-NEXT:    pushl 8(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %ebp, %esp
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_llrint_i64_f128:
 ; X86-SSE2:       # %bb.0: # %entry
 ; X86-SSE2-NEXT:    pushl %ebp
@@ -262,6 +315,17 @@ define i64 @test_llrint_i64_f16_strict(half %x) nounwind strictfp {
 ; X86-NOSSE-NEXT:    popl %ecx
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_llrint_i64_f16_strict:
+; X86-NOX87:       # %bb.0: # %entry
+; X86-NOX87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-NOX87-NEXT:    pushl %eax
+; X86-NOX87-NEXT:    calll __extendhfsf2
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    pushl %eax
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_llrint_i64_f16_strict:
 ; X86-SSE2:       # %bb.0: # %entry
 ; X86-SSE2-NEXT:    pushl %eax
@@ -299,6 +363,13 @@ define i64 @test_llrint_i64_f32_strict(float %x) nounwind strictfp {
 ; X86-NOSSE-NEXT:    popl %ecx
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_llrint_i64_f32_strict:
+; X86-NOX87:       # %bb.0: # %entry
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_llrint_i64_f32_strict:
 ; X86-SSE2:       # %bb.0: # %entry
 ; X86-SSE2-NEXT:    pushl %eax
@@ -339,6 +410,14 @@ define i64 @test_llrint_i64_f64_strict(double %x) nounwind strictfp {
 ; X86-NOSSE-NEXT:    addl $8, %esp
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_llrint_i64_f64_strict:
+; X86-NOX87:       # %bb.0: # %entry
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_llrint_i64_f64_strict:
 ; X86-SSE2:       # %bb.0: # %entry
 ; X86-SSE2-NEXT:    subl $8, %esp
@@ -379,6 +458,16 @@ define i64 @test_llrint_i64_f80_strict(x86_fp80 %x) nounwind strictfp {
 ; X86-NEXT:    addl $12, %esp
 ; X86-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_llrint_i64_f80_strict:
+; X86-NOX87:       # %bb.0: # %entry
+; X86-NOX87-NEXT:    movswl {{[0-9]+}}(%esp), %eax
+; X86-NOX87-NEXT:    pushl %eax
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $12, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X64-LABEL: test_llrint_i64_f80_strict:
 ; X64:       # %bb.0: # %entry
 ; X64-NEXT:    subq $24, %rsp
@@ -411,6 +500,22 @@ define i64 @test_llrint_i64_f128_strict(fp128 %x) nounwind strictfp {
 ; X86-NOSSE-NEXT:    popl %ebp
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_llrint_i64_f128_strict:
+; X86-NOX87:       # %bb.0: # %entry
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    movl %esp, %ebp
+; X86-NOX87-NEXT:    andl $-16, %esp
+; X86-NOX87-NEXT:    subl $16, %esp
+; X86-NOX87-NEXT:    pushl 20(%ebp)
+; X86-NOX87-NEXT:    pushl 16(%ebp)
+; X86-NOX87-NEXT:    pushl 12(%ebp)
+; X86-NOX87-NEXT:    pushl 8(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %ebp, %esp
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_llrint_i64_f128_strict:
 ; X86-SSE2:       # %bb.0: # %entry
 ; X86-SSE2-NEXT:    pushl %ebp

diff  --git a/llvm/test/CodeGen/X86/lrint-conv-i64.ll b/llvm/test/CodeGen/X86/lrint-conv-i64.ll
index f18c5d6e20bdb..c45918ea4d5ee 100644
--- a/llvm/test/CodeGen/X86/lrint-conv-i64.ll
+++ b/llvm/test/CodeGen/X86/lrint-conv-i64.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=i686-unknown              | FileCheck %s --check-prefixes=X86,X86-NOSSE
+; RUN: llc < %s -mtriple=i686-unknown -mattr=-x87  | FileCheck %s --check-prefixes=X86-NOX87
 ; RUN: llc < %s -mtriple=i686-unknown -mattr=sse2  | FileCheck %s --check-prefixes=X86,X86-SSE2
 ; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefixes=CHECK,SSE
 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=avx | FileCheck %s --check-prefixes=CHECK,AVX
@@ -17,6 +18,17 @@ define i64 @test_lrint_i64_f16(half %x) nounwind {
 ; X86-NOSSE-NEXT:    popl %ecx
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_lrint_i64_f16:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-NOX87-NEXT:    pushl %eax
+; X86-NOX87-NEXT:    calll __extendhfsf2
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    pushl %eax
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_lrint_i64_f16:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    pushl %eax
@@ -58,6 +70,13 @@ define i64 @test_lrint_i64_f32(float %x) nounwind {
 ; X86-NOSSE-NEXT:    popl %ebp
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_lrint_i64_f32:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_lrint_i64_f32:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    pushl %ebp
@@ -102,6 +121,14 @@ define i64 @test_lrint_i64_f64(double %x) nounwind {
 ; X86-NOSSE-NEXT:    popl %ebp
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_lrint_i64_f64:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_lrint_i64_f64:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    pushl %ebp
@@ -146,6 +173,16 @@ define i64 @test_lrint_i64_f80(x86_fp80 %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_lrint_i64_f80:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    movswl {{[0-9]+}}(%esp), %eax
+; X86-NOX87-NEXT:    pushl %eax
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $12, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; CHECK-LABEL: test_lrint_i64_f80:
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    fldt {{[0-9]+}}(%rsp)
@@ -174,6 +211,22 @@ define i64 @test_lrint_i64_f128(fp128 %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_lrint_i64_f128:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    movl %esp, %ebp
+; X86-NOX87-NEXT:    andl $-16, %esp
+; X86-NOX87-NEXT:    subl $16, %esp
+; X86-NOX87-NEXT:    pushl 20(%ebp)
+; X86-NOX87-NEXT:    pushl 16(%ebp)
+; X86-NOX87-NEXT:    pushl 12(%ebp)
+; X86-NOX87-NEXT:    pushl 8(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %ebp, %esp
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl
+;
 ; CHECK-LABEL: test_lrint_i64_f128:
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    jmp lrintl at PLT # TAILCALL
@@ -193,6 +246,17 @@ define i64 @test_lrint_i64_f16_strict(half %x) nounwind {
 ; X86-NOSSE-NEXT:    popl %ecx
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_lrint_i64_f16_strict:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    movzwl {{[0-9]+}}(%esp), %eax
+; X86-NOX87-NEXT:    pushl %eax
+; X86-NOX87-NEXT:    calll __extendhfsf2
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    pushl %eax
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_lrint_i64_f16_strict:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    pushl %eax
@@ -227,6 +291,13 @@ define i64 @test_lrint_i64_f32_strict(float %x) nounwind {
 ; X86-NOSSE-NEXT:    popl %ecx
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_lrint_i64_f32_strict:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_lrint_i64_f32_strict:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    pushl %eax
@@ -256,6 +327,14 @@ define i64 @test_lrint_i64_f64_strict(double %x) nounwind {
 ; X86-NOSSE-NEXT:    addl $8, %esp
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_lrint_i64_f64_strict:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: test_lrint_i64_f64_strict:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    subl $8, %esp
@@ -285,6 +364,16 @@ define i64 @test_lrint_i64_f80_strict(x86_fp80 %x) nounwind {
 ; X86-NEXT:    addl $12, %esp
 ; X86-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_lrint_i64_f80_strict:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    movswl {{[0-9]+}}(%esp), %eax
+; X86-NOX87-NEXT:    pushl %eax
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $12, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; CHECK-LABEL: test_lrint_i64_f80_strict:
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    subq $24, %rsp
@@ -315,6 +404,22 @@ define i64 @test_lrint_i64_f128_strict(fp128 %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl
 ;
+; X86-NOX87-LABEL: test_lrint_i64_f128_strict:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    movl %esp, %ebp
+; X86-NOX87-NEXT:    andl $-16, %esp
+; X86-NOX87-NEXT:    subl $16, %esp
+; X86-NOX87-NEXT:    pushl 20(%ebp)
+; X86-NOX87-NEXT:    pushl 16(%ebp)
+; X86-NOX87-NEXT:    pushl 12(%ebp)
+; X86-NOX87-NEXT:    pushl 8(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %ebp, %esp
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl
+;
 ; CHECK-LABEL: test_lrint_i64_f128_strict:
 ; CHECK:       # %bb.0:
 ; CHECK-NEXT:    pushq %rax
@@ -339,6 +444,13 @@ define i32 @PR125324(float %x) nounwind {
 ; X86-NOSSE-NEXT:    popl %ebp
 ; X86-NOSSE-NEXT:    retl
 ;
+; X86-NOX87-LABEL: PR125324:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: PR125324:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    pushl %ebp

diff  --git a/llvm/test/CodeGen/X86/vector-llrint.ll b/llvm/test/CodeGen/X86/vector-llrint.ll
index 6fd1a35505aac..963816c4e0e2e 100644
--- a/llvm/test/CodeGen/X86/vector-llrint.ll
+++ b/llvm/test/CodeGen/X86/vector-llrint.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: llc < %s -mtriple=i686-unknown | FileCheck %s --check-prefix=X86
+; RUN: llc < %s -mtriple=i686-unknown -mattr=-x87 | FileCheck %s --check-prefix=X86-NOX87
 ; RUN: llc < %s -mtriple=x86_64-unknown | FileCheck %s --check-prefix=SSE
 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=avx | FileCheck %s --check-prefixes=AVX,AVX1
 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=avx512f | FileCheck %s --check-prefixes=AVX,AVX512
@@ -20,6 +21,13 @@ define <1 x i64> @llrint_v1i64_v1f32(<1 x float> %x) nounwind  {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl
 ;
+; X86-NOX87-LABEL: llrint_v1i64_v1f32:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; SSE-LABEL: llrint_v1i64_v1f32:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    cvtss2si %xmm0, %rax
@@ -67,6 +75,33 @@ define <2 x i64> @llrint_v2i64_v2f32(<2 x float> %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: llrint_v2i64_v2f32:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    movl %edx, %ebx
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %edx, 12(%esi)
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 4(%esi)
+; X86-NOX87-NEXT:    movl %edi, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; SSE-LABEL: llrint_v2i64_v2f32:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    cvtss2si %xmm0, %rax
@@ -145,6 +180,53 @@ define <4 x i64> @llrint_v4i64_v4f32(<4 x float> %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: llrint_v4i64_v4f32:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    subl $12, %esp
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, (%esp) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, %edi
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebx
+; X86-NOX87-NEXT:    movl %edx, %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %edx, 28(%esi)
+; X86-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-NOX87-NEXT:    movl %ebp, 20(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 16(%esi)
+; X86-NOX87-NEXT:    movl %edi, 12(%esi)
+; X86-NOX87-NEXT:    movl (%esp), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    addl $12, %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; SSE-LABEL: llrint_v4i64_v4f32:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    cvtss2si %xmm0, %rax
@@ -298,6 +380,90 @@ define <8 x i64> @llrint_v8i64_v8f32(<8 x float> %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: llrint_v8i64_v8f32:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    subl $44, %esp
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, (%esp) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    movl %edx, %ebx
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %edx, 60(%esi)
+; X86-NOX87-NEXT:    movl %eax, 56(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 52(%esi)
+; X86-NOX87-NEXT:    movl %edi, 48(%esi)
+; X86-NOX87-NEXT:    movl %ebp, 44(%esi)
+; X86-NOX87-NEXT:    movl (%esp), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 40(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 36(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 32(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 28(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 20(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 16(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    addl $44, %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; SSE-LABEL: llrint_v8i64_v8f32:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    movaps %xmm0, %xmm2
@@ -579,6 +745,162 @@ define <16 x i64> @llrint_v16i64_v16f32(<16 x float> %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: llrint_v16i64_v16f32:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    subl $108, %esp
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, (%esp) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, %edi
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebx
+; X86-NOX87-NEXT:    movl %edx, %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %edx, 124(%esi)
+; X86-NOX87-NEXT:    movl %eax, 120(%esi)
+; X86-NOX87-NEXT:    movl %ebp, 116(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 112(%esi)
+; X86-NOX87-NEXT:    movl %edi, 108(%esi)
+; X86-NOX87-NEXT:    movl (%esp), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 104(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 100(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 96(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 92(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 88(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 84(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 80(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 76(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 72(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 68(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 64(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 60(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 56(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 52(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 48(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 44(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 40(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 36(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 32(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 28(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 20(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 16(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    addl $108, %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; SSE-LABEL: llrint_v16i64_v16f32:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    movq %rdi, %rax
@@ -809,6 +1131,14 @@ define <1 x i64> @llrint_v1i64_v1f64(<1 x double> %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl
 ;
+; X86-NOX87-LABEL: llrint_v1i64_v1f64:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; SSE-LABEL: llrint_v1i64_v1f64:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    cvtsd2si %xmm0, %rax
@@ -856,6 +1186,35 @@ define <2 x i64> @llrint_v2i64_v2f64(<2 x double> %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: llrint_v2i64_v2f64:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    movl %edx, %ebx
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %edx, 12(%esi)
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 4(%esi)
+; X86-NOX87-NEXT:    movl %edi, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; SSE-LABEL: llrint_v2i64_v2f64:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    cvtsd2si %xmm0, %rax
@@ -934,6 +1293,58 @@ define <4 x i64> @llrint_v4i64_v4f64(<4 x double> %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: llrint_v4i64_v4f64:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    subl $12, %esp
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, (%esp) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, %edi
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebx
+; X86-NOX87-NEXT:    movl %edx, %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %edx, 28(%esi)
+; X86-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-NOX87-NEXT:    movl %ebp, 20(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 16(%esi)
+; X86-NOX87-NEXT:    movl %edi, 12(%esi)
+; X86-NOX87-NEXT:    movl (%esp), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    addl $12, %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; SSE-LABEL: llrint_v4i64_v4f64:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    cvtsd2si %xmm0, %rax
@@ -1085,6 +1496,98 @@ define <8 x i64> @llrint_v8i64_v8f64(<8 x double> %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: llrint_v8i64_v8f64:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    subl $44, %esp
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, (%esp) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    movl %edx, %ebx
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll llrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %edx, 60(%esi)
+; X86-NOX87-NEXT:    movl %eax, 56(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 52(%esi)
+; X86-NOX87-NEXT:    movl %edi, 48(%esi)
+; X86-NOX87-NEXT:    movl %ebp, 44(%esi)
+; X86-NOX87-NEXT:    movl (%esp), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 40(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 36(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 32(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 28(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 20(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 16(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    addl $44, %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; SSE-LABEL: llrint_v8i64_v8f64:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    cvtsd2si %xmm0, %rax
@@ -1209,6 +1712,22 @@ define <1 x i64> @llrint_v1i64_v1f128(<1 x fp128> %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl
 ;
+; X86-NOX87-LABEL: llrint_v1i64_v1f128:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    movl %esp, %ebp
+; X86-NOX87-NEXT:    andl $-16, %esp
+; X86-NOX87-NEXT:    subl $16, %esp
+; X86-NOX87-NEXT:    pushl 20(%ebp)
+; X86-NOX87-NEXT:    pushl 16(%ebp)
+; X86-NOX87-NEXT:    pushl 12(%ebp)
+; X86-NOX87-NEXT:    pushl 8(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %ebp, %esp
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl
+;
 ; SSE-LABEL: llrint_v1i64_v1f128:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    pushq %rax
@@ -1271,6 +1790,42 @@ define <2 x i64> @llrint_v2i64_v2f128(<2 x fp128> %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: llrint_v2i64_v2f128:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    movl %esp, %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    andl $-16, %esp
+; X86-NOX87-NEXT:    subl $16, %esp
+; X86-NOX87-NEXT:    movl 8(%ebp), %esi
+; X86-NOX87-NEXT:    pushl 24(%ebp)
+; X86-NOX87-NEXT:    pushl 20(%ebp)
+; X86-NOX87-NEXT:    pushl 16(%ebp)
+; X86-NOX87-NEXT:    pushl 12(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    movl %edx, %ebx
+; X86-NOX87-NEXT:    pushl 40(%ebp)
+; X86-NOX87-NEXT:    pushl 36(%ebp)
+; X86-NOX87-NEXT:    pushl 32(%ebp)
+; X86-NOX87-NEXT:    pushl 28(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %edx, 12(%esi)
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 4(%esi)
+; X86-NOX87-NEXT:    movl %edi, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    leal -12(%ebp), %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; SSE-LABEL: llrint_v2i64_v2f128:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    subq $40, %rsp
@@ -1386,6 +1941,68 @@ define <4 x i64> @llrint_v4i64_v4f128(<4 x fp128> %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: llrint_v4i64_v4f128:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    movl %esp, %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    andl $-16, %esp
+; X86-NOX87-NEXT:    subl $32, %esp
+; X86-NOX87-NEXT:    movl 8(%ebp), %esi
+; X86-NOX87-NEXT:    movl 36(%ebp), %edi
+; X86-NOX87-NEXT:    movl 40(%ebp), %ebx
+; X86-NOX87-NEXT:    pushl 24(%ebp)
+; X86-NOX87-NEXT:    pushl 20(%ebp)
+; X86-NOX87-NEXT:    pushl 16(%ebp)
+; X86-NOX87-NEXT:    pushl 12(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl 32(%ebp)
+; X86-NOX87-NEXT:    pushl 28(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl 56(%ebp)
+; X86-NOX87-NEXT:    pushl 52(%ebp)
+; X86-NOX87-NEXT:    pushl 48(%ebp)
+; X86-NOX87-NEXT:    pushl 44(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    movl %edx, %ebx
+; X86-NOX87-NEXT:    pushl 72(%ebp)
+; X86-NOX87-NEXT:    pushl 68(%ebp)
+; X86-NOX87-NEXT:    pushl 64(%ebp)
+; X86-NOX87-NEXT:    pushl 60(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %edx, 28(%esi)
+; X86-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 20(%esi)
+; X86-NOX87-NEXT:    movl %edi, 16(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    leal -12(%ebp), %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; SSE-LABEL: llrint_v4i64_v4f128:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    subq $72, %rsp
@@ -1617,6 +2234,116 @@ define <8 x i64> @llrint_v8i64_v8f128(<8 x fp128> %x) nounwind {
 ; X86-NEXT:    popl %ebp
 ; X86-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: llrint_v8i64_v8f128:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    movl %esp, %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    andl $-16, %esp
+; X86-NOX87-NEXT:    subl $64, %esp
+; X86-NOX87-NEXT:    movl 8(%ebp), %esi
+; X86-NOX87-NEXT:    movl 36(%ebp), %edi
+; X86-NOX87-NEXT:    movl 40(%ebp), %ebx
+; X86-NOX87-NEXT:    pushl 24(%ebp)
+; X86-NOX87-NEXT:    pushl 20(%ebp)
+; X86-NOX87-NEXT:    pushl 16(%ebp)
+; X86-NOX87-NEXT:    pushl 12(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl 32(%ebp)
+; X86-NOX87-NEXT:    pushl 28(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl 56(%ebp)
+; X86-NOX87-NEXT:    pushl 52(%ebp)
+; X86-NOX87-NEXT:    pushl 48(%ebp)
+; X86-NOX87-NEXT:    pushl 44(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl 72(%ebp)
+; X86-NOX87-NEXT:    pushl 68(%ebp)
+; X86-NOX87-NEXT:    pushl 64(%ebp)
+; X86-NOX87-NEXT:    pushl 60(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl 88(%ebp)
+; X86-NOX87-NEXT:    pushl 84(%ebp)
+; X86-NOX87-NEXT:    pushl 80(%ebp)
+; X86-NOX87-NEXT:    pushl 76(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl 104(%ebp)
+; X86-NOX87-NEXT:    pushl 100(%ebp)
+; X86-NOX87-NEXT:    pushl 96(%ebp)
+; X86-NOX87-NEXT:    pushl 92(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl 120(%ebp)
+; X86-NOX87-NEXT:    pushl 116(%ebp)
+; X86-NOX87-NEXT:    pushl 112(%ebp)
+; X86-NOX87-NEXT:    pushl 108(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    movl %edx, %ebx
+; X86-NOX87-NEXT:    pushl 136(%ebp)
+; X86-NOX87-NEXT:    pushl 132(%ebp)
+; X86-NOX87-NEXT:    pushl 128(%ebp)
+; X86-NOX87-NEXT:    pushl 124(%ebp)
+; X86-NOX87-NEXT:    calll llrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %edx, 60(%esi)
+; X86-NOX87-NEXT:    movl %eax, 56(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 52(%esi)
+; X86-NOX87-NEXT:    movl %edi, 48(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 44(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 40(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 36(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 32(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 28(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 20(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 16(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    leal -12(%ebp), %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; SSE-LABEL: llrint_v8i64_v8f128:
 ; SSE:       # %bb.0:
 ; SSE-NEXT:    subq $136, %rsp

diff  --git a/llvm/test/CodeGen/X86/vector-lrint.ll b/llvm/test/CodeGen/X86/vector-lrint.ll
index b3e5a0929b7a5..86070fa541b84 100644
--- a/llvm/test/CodeGen/X86/vector-lrint.ll
+++ b/llvm/test/CodeGen/X86/vector-lrint.ll
@@ -1,6 +1,8 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
 ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=i686-unknown | FileCheck %s --check-prefix=X86-I32
+; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=i686-unknown -mattr=-x87 | FileCheck %s --check-prefix=X86-NOX87
 ; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=i686-unknown | FileCheck %s --check-prefix=X86-I64
+; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=i686-unknown -mattr=-x87 | FileCheck %s --check-prefix=X86-I64-NOX87
 ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=i686-unknown -mattr=sse2 | FileCheck %s --check-prefix=X86-SSE2
 ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=i686-unknown -mattr=avx | FileCheck %s --check-prefixes=X86-AVX,X86-AVX1
 ; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=i686-unknown -mattr=avx512f | FileCheck %s --check-prefixes=X86-AVX,AVX512-i32
@@ -22,6 +24,13 @@ define <1 x iXLen> @lrint_v1f32(<1 x float> %x) nounwind {
 ; X86-I32-NEXT:    popl %ecx
 ; X86-I32-NEXT:    retl
 ;
+; X86-NOX87-LABEL: lrint_v1f32:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-I64-LABEL: lrint_v1f32:
 ; X86-I64:       # %bb.0:
 ; X86-I64-NEXT:    pushl %ebp
@@ -36,6 +45,13 @@ define <1 x iXLen> @lrint_v1f32(<1 x float> %x) nounwind {
 ; X86-I64-NEXT:    popl %ebp
 ; X86-I64-NEXT:    retl
 ;
+; X86-I64-NOX87-LABEL: lrint_v1f32:
+; X86-I64-NOX87:       # %bb.0:
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: lrint_v1f32:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    cvtss2si {{[0-9]+}}(%esp), %eax
@@ -73,6 +89,24 @@ define <2 x iXLen> @lrint_v2f32(<2 x float> %x) nounwind {
 ; X86-I32-NEXT:    addl $8, %esp
 ; X86-I32-NEXT:    retl
 ;
+; X86-NOX87-LABEL: lrint_v2f32:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, %esi
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, %edx
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    retl
+;
 ; X86-I64-LABEL: lrint_v2f32:
 ; X86-I64:       # %bb.0:
 ; X86-I64-NEXT:    pushl %ebp
@@ -100,6 +134,33 @@ define <2 x iXLen> @lrint_v2f32(<2 x float> %x) nounwind {
 ; X86-I64-NEXT:    popl %ebp
 ; X86-I64-NEXT:    retl $4
 ;
+; X86-I64-NOX87-LABEL: lrint_v2f32:
+; X86-I64-NOX87:       # %bb.0:
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    pushl %esi
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, %edi
+; X86-I64-NOX87-NEXT:    movl %edx, %ebx
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %edx, 12(%esi)
+; X86-I64-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebx, 4(%esi)
+; X86-I64-NOX87-NEXT:    movl %edi, (%esi)
+; X86-I64-NOX87-NEXT:    movl %esi, %eax
+; X86-I64-NOX87-NEXT:    popl %esi
+; X86-I64-NOX87-NEXT:    popl %edi
+; X86-I64-NOX87-NEXT:    popl %ebx
+; X86-I64-NOX87-NEXT:    popl %ebp
+; X86-I64-NOX87-NEXT:    retl $4
+;
 ; X86-SSE2-LABEL: lrint_v2f32:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    cvtps2dq %xmm0, %xmm0
@@ -172,6 +233,41 @@ define <4 x iXLen> @lrint_v4f32(<4 x float> %x) nounwind {
 ; X86-I32-NEXT:    popl %edi
 ; X86-I32-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: lrint_v4f32:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebx
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-NOX87-NEXT:    movl %ebp, 8(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 4(%esi)
+; X86-NOX87-NEXT:    movl %edi, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; X86-I64-LABEL: lrint_v4f32:
 ; X86-I64:       # %bb.0:
 ; X86-I64-NEXT:    pushl %ebp
@@ -219,6 +315,53 @@ define <4 x iXLen> @lrint_v4f32(<4 x float> %x) nounwind {
 ; X86-I64-NEXT:    popl %ebp
 ; X86-I64-NEXT:    retl $4
 ;
+; X86-I64-NOX87-LABEL: lrint_v4f32:
+; X86-I64-NOX87:       # %bb.0:
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    pushl %esi
+; X86-I64-NOX87-NEXT:    subl $12, %esp
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, (%esp) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, %edi
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, %ebx
+; X86-I64-NOX87-NEXT:    movl %edx, %ebp
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %edx, 28(%esi)
+; X86-I64-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebp, 20(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebx, 16(%esi)
+; X86-I64-NOX87-NEXT:    movl %edi, 12(%esi)
+; X86-I64-NOX87-NEXT:    movl (%esp), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, (%esi)
+; X86-I64-NOX87-NEXT:    movl %esi, %eax
+; X86-I64-NOX87-NEXT:    addl $12, %esp
+; X86-I64-NOX87-NEXT:    popl %esi
+; X86-I64-NOX87-NEXT:    popl %edi
+; X86-I64-NOX87-NEXT:    popl %ebx
+; X86-I64-NOX87-NEXT:    popl %ebp
+; X86-I64-NOX87-NEXT:    retl $4
+;
 ; X86-SSE2-LABEL: lrint_v4f32:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    cvtps2dq %xmm0, %xmm0
@@ -331,6 +474,68 @@ define <8 x iXLen> @lrint_v8f32(<8 x float> %x) nounwind {
 ; X86-I32-NEXT:    popl %ebp
 ; X86-I32-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: lrint_v8f32:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    subl $16, %esp
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, (%esp) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebx
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrintf
+; X86-NOX87-NEXT:    addl $4, %esp
+; X86-NOX87-NEXT:    movl %eax, 28(%esi)
+; X86-NOX87-NEXT:    movl %edi, 24(%esi)
+; X86-NOX87-NEXT:    movl %ebp, 20(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 16(%esi)
+; X86-NOX87-NEXT:    movl (%esp), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; X86-I64-LABEL: lrint_v8f32:
 ; X86-I64:       # %bb.0:
 ; X86-I64-NEXT:    pushl %ebp
@@ -418,6 +623,90 @@ define <8 x iXLen> @lrint_v8f32(<8 x float> %x) nounwind {
 ; X86-I64-NEXT:    popl %ebp
 ; X86-I64-NEXT:    retl $4
 ;
+; X86-I64-NOX87-LABEL: lrint_v8f32:
+; X86-I64-NOX87:       # %bb.0:
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    pushl %esi
+; X86-I64-NOX87-NEXT:    subl $44, %esp
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, (%esp) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, %ebp
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, %edi
+; X86-I64-NOX87-NEXT:    movl %edx, %ebx
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrintf
+; X86-I64-NOX87-NEXT:    addl $4, %esp
+; X86-I64-NOX87-NEXT:    movl %edx, 60(%esi)
+; X86-I64-NOX87-NEXT:    movl %eax, 56(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebx, 52(%esi)
+; X86-I64-NOX87-NEXT:    movl %edi, 48(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebp, 44(%esi)
+; X86-I64-NOX87-NEXT:    movl (%esp), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 40(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 36(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 32(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 28(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 20(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 16(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, (%esi)
+; X86-I64-NOX87-NEXT:    movl %esi, %eax
+; X86-I64-NOX87-NEXT:    addl $44, %esp
+; X86-I64-NOX87-NEXT:    popl %esi
+; X86-I64-NOX87-NEXT:    popl %edi
+; X86-I64-NOX87-NEXT:    popl %ebx
+; X86-I64-NOX87-NEXT:    popl %ebp
+; X86-I64-NOX87-NEXT:    retl $4
+;
 ; X86-SSE2-LABEL: lrint_v8f32:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    cvtps2dq %xmm0, %xmm0
@@ -527,6 +816,14 @@ define <1 x iXLen> @lrint_v1f64(<1 x double> %x) nounwind {
 ; X86-I32-NEXT:    popl %ecx
 ; X86-I32-NEXT:    retl
 ;
+; X86-NOX87-LABEL: lrint_v1f64:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-I64-LABEL: lrint_v1f64:
 ; X86-I64:       # %bb.0:
 ; X86-I64-NEXT:    pushl %ebp
@@ -541,6 +838,14 @@ define <1 x iXLen> @lrint_v1f64(<1 x double> %x) nounwind {
 ; X86-I64-NEXT:    popl %ebp
 ; X86-I64-NEXT:    retl
 ;
+; X86-I64-NOX87-LABEL: lrint_v1f64:
+; X86-I64-NOX87:       # %bb.0:
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: lrint_v1f64:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    cvtsd2si {{[0-9]+}}(%esp), %eax
@@ -578,6 +883,29 @@ define <2 x iXLen> @lrint_v2f64(<2 x double> %x) nounwind {
 ; X86-I32-NEXT:    addl $8, %esp
 ; X86-I32-NEXT:    retl
 ;
+; X86-NOX87-LABEL: lrint_v2f64:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, %esi
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, %edx
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    retl
+;
 ; X86-I64-LABEL: lrint_v2f64:
 ; X86-I64:       # %bb.0:
 ; X86-I64-NEXT:    pushl %ebp
@@ -605,6 +933,35 @@ define <2 x iXLen> @lrint_v2f64(<2 x double> %x) nounwind {
 ; X86-I64-NEXT:    popl %ebp
 ; X86-I64-NEXT:    retl $4
 ;
+; X86-I64-NOX87-LABEL: lrint_v2f64:
+; X86-I64-NOX87:       # %bb.0:
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    pushl %esi
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, %edi
+; X86-I64-NOX87-NEXT:    movl %edx, %ebx
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %edx, 12(%esi)
+; X86-I64-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebx, 4(%esi)
+; X86-I64-NOX87-NEXT:    movl %edi, (%esi)
+; X86-I64-NOX87-NEXT:    movl %esi, %eax
+; X86-I64-NOX87-NEXT:    popl %esi
+; X86-I64-NOX87-NEXT:    popl %edi
+; X86-I64-NOX87-NEXT:    popl %ebx
+; X86-I64-NOX87-NEXT:    popl %ebp
+; X86-I64-NOX87-NEXT:    retl $4
+;
 ; X86-SSE2-LABEL: lrint_v2f64:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    cvtpd2dq %xmm0, %xmm0
@@ -677,6 +1034,45 @@ define <4 x iXLen> @lrint_v4f64(<4 x double> %x) nounwind {
 ; X86-I32-NEXT:    popl %edi
 ; X86-I32-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: lrint_v4f64:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebx
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-NOX87-NEXT:    movl %ebp, 8(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 4(%esi)
+; X86-NOX87-NEXT:    movl %edi, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; X86-I64-LABEL: lrint_v4f64:
 ; X86-I64:       # %bb.0:
 ; X86-I64-NEXT:    pushl %ebp
@@ -724,6 +1120,58 @@ define <4 x iXLen> @lrint_v4f64(<4 x double> %x) nounwind {
 ; X86-I64-NEXT:    popl %ebp
 ; X86-I64-NEXT:    retl $4
 ;
+; X86-I64-NOX87-LABEL: lrint_v4f64:
+; X86-I64-NOX87:       # %bb.0:
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    pushl %esi
+; X86-I64-NOX87-NEXT:    subl $12, %esp
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, (%esp) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, %edi
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, %ebx
+; X86-I64-NOX87-NEXT:    movl %edx, %ebp
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %edx, 28(%esi)
+; X86-I64-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebp, 20(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebx, 16(%esi)
+; X86-I64-NOX87-NEXT:    movl %edi, 12(%esi)
+; X86-I64-NOX87-NEXT:    movl (%esp), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, (%esi)
+; X86-I64-NOX87-NEXT:    movl %esi, %eax
+; X86-I64-NOX87-NEXT:    addl $12, %esp
+; X86-I64-NOX87-NEXT:    popl %esi
+; X86-I64-NOX87-NEXT:    popl %edi
+; X86-I64-NOX87-NEXT:    popl %ebx
+; X86-I64-NOX87-NEXT:    popl %ebp
+; X86-I64-NOX87-NEXT:    retl $4
+;
 ; X86-SSE2-LABEL: lrint_v4f64:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    cvtpd2dq %xmm1, %xmm1
@@ -840,6 +1288,76 @@ define <8 x iXLen> @lrint_v8f64(<8 x double> %x) nounwind {
 ; X86-I32-NEXT:    popl %ebp
 ; X86-I32-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: lrint_v8f64:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    subl $16, %esp
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, (%esp) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebx
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebp
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-NOX87-NEXT:    calll lrint
+; X86-NOX87-NEXT:    addl $8, %esp
+; X86-NOX87-NEXT:    movl %eax, 28(%esi)
+; X86-NOX87-NEXT:    movl %edi, 24(%esi)
+; X86-NOX87-NEXT:    movl %ebp, 20(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 16(%esi)
+; X86-NOX87-NEXT:    movl (%esp), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; X86-I64-LABEL: lrint_v8f64:
 ; X86-I64:       # %bb.0:
 ; X86-I64-NEXT:    pushl %ebp
@@ -927,6 +1445,98 @@ define <8 x iXLen> @lrint_v8f64(<8 x double> %x) nounwind {
 ; X86-I64-NEXT:    popl %ebp
 ; X86-I64-NEXT:    retl $4
 ;
+; X86-I64-NOX87-LABEL: lrint_v8f64:
+; X86-I64-NOX87:       # %bb.0:
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    pushl %esi
+; X86-I64-NOX87-NEXT:    subl $44, %esp
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %esi
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %edi
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebx
+; X86-I64-NOX87-NEXT:    movl {{[0-9]+}}(%esp), %ebp
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, (%esp) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, %ebp
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, %edi
+; X86-I64-NOX87-NEXT:    movl %edx, %ebx
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    pushl {{[0-9]+}}(%esp)
+; X86-I64-NOX87-NEXT:    calll lrint
+; X86-I64-NOX87-NEXT:    addl $8, %esp
+; X86-I64-NOX87-NEXT:    movl %edx, 60(%esi)
+; X86-I64-NOX87-NEXT:    movl %eax, 56(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebx, 52(%esi)
+; X86-I64-NOX87-NEXT:    movl %edi, 48(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebp, 44(%esi)
+; X86-I64-NOX87-NEXT:    movl (%esp), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 40(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 36(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 32(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 28(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 20(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 16(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, (%esi)
+; X86-I64-NOX87-NEXT:    movl %esi, %eax
+; X86-I64-NOX87-NEXT:    addl $44, %esp
+; X86-I64-NOX87-NEXT:    popl %esi
+; X86-I64-NOX87-NEXT:    popl %edi
+; X86-I64-NOX87-NEXT:    popl %ebx
+; X86-I64-NOX87-NEXT:    popl %ebp
+; X86-I64-NOX87-NEXT:    retl $4
+;
 ; X86-SSE2-LABEL: lrint_v8f64:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    pushl %ebp
@@ -1054,6 +1664,22 @@ define <1 x iXLen> @lrint_v1fp128(<1 x fp128> %x) nounwind {
 ; X86-I32-NEXT:    popl %ebp
 ; X86-I32-NEXT:    retl
 ;
+; X86-NOX87-LABEL: lrint_v1fp128:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    movl %esp, %ebp
+; X86-NOX87-NEXT:    andl $-16, %esp
+; X86-NOX87-NEXT:    subl $16, %esp
+; X86-NOX87-NEXT:    pushl 20(%ebp)
+; X86-NOX87-NEXT:    pushl 16(%ebp)
+; X86-NOX87-NEXT:    pushl 12(%ebp)
+; X86-NOX87-NEXT:    pushl 8(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %ebp, %esp
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-I64-LABEL: lrint_v1fp128:
 ; X86-I64:       # %bb.0:
 ; X86-I64-NEXT:    pushl %ebp
@@ -1070,6 +1696,22 @@ define <1 x iXLen> @lrint_v1fp128(<1 x fp128> %x) nounwind {
 ; X86-I64-NEXT:    popl %ebp
 ; X86-I64-NEXT:    retl
 ;
+; X86-I64-NOX87-LABEL: lrint_v1fp128:
+; X86-I64-NOX87:       # %bb.0:
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    movl %esp, %ebp
+; X86-I64-NOX87-NEXT:    andl $-16, %esp
+; X86-I64-NOX87-NEXT:    subl $16, %esp
+; X86-I64-NOX87-NEXT:    pushl 20(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 16(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 12(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 8(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %ebp, %esp
+; X86-I64-NOX87-NEXT:    popl %ebp
+; X86-I64-NOX87-NEXT:    retl
+;
 ; X86-SSE2-LABEL: lrint_v1fp128:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    pushl %ebp
@@ -1151,6 +1793,39 @@ define <2 x iXLen> @lrint_v2fp128(<2 x fp128> %x) nounwind {
 ; X86-I32-NEXT:    popl %ebp
 ; X86-I32-NEXT:    retl
 ;
+; X86-NOX87-LABEL: lrint_v2fp128:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    movl %esp, %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    andl $-16, %esp
+; X86-NOX87-NEXT:    subl $16, %esp
+; X86-NOX87-NEXT:    movl 32(%ebp), %edi
+; X86-NOX87-NEXT:    movl 36(%ebp), %ebx
+; X86-NOX87-NEXT:    pushl 20(%ebp)
+; X86-NOX87-NEXT:    pushl 16(%ebp)
+; X86-NOX87-NEXT:    pushl 12(%ebp)
+; X86-NOX87-NEXT:    pushl 8(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, %esi
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl 28(%ebp)
+; X86-NOX87-NEXT:    pushl 24(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, %edx
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    leal -12(%ebp), %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl
+;
 ; X86-I64-LABEL: lrint_v2fp128:
 ; X86-I64:       # %bb.0:
 ; X86-I64-NEXT:    pushl %ebp
@@ -1187,6 +1862,42 @@ define <2 x iXLen> @lrint_v2fp128(<2 x fp128> %x) nounwind {
 ; X86-I64-NEXT:    popl %ebp
 ; X86-I64-NEXT:    retl $4
 ;
+; X86-I64-NOX87-LABEL: lrint_v2fp128:
+; X86-I64-NOX87:       # %bb.0:
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    movl %esp, %ebp
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    pushl %esi
+; X86-I64-NOX87-NEXT:    andl $-16, %esp
+; X86-I64-NOX87-NEXT:    subl $16, %esp
+; X86-I64-NOX87-NEXT:    movl 8(%ebp), %esi
+; X86-I64-NOX87-NEXT:    pushl 24(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 20(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 16(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 12(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, %edi
+; X86-I64-NOX87-NEXT:    movl %edx, %ebx
+; X86-I64-NOX87-NEXT:    pushl 40(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 36(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 32(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 28(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %edx, 12(%esi)
+; X86-I64-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebx, 4(%esi)
+; X86-I64-NOX87-NEXT:    movl %edi, (%esi)
+; X86-I64-NOX87-NEXT:    movl %esi, %eax
+; X86-I64-NOX87-NEXT:    leal -12(%ebp), %esp
+; X86-I64-NOX87-NEXT:    popl %esi
+; X86-I64-NOX87-NEXT:    popl %edi
+; X86-I64-NOX87-NEXT:    popl %ebx
+; X86-I64-NOX87-NEXT:    popl %ebp
+; X86-I64-NOX87-NEXT:    retl $4
+;
 ; X86-SSE2-LABEL: lrint_v2fp128:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    pushl %ebp
@@ -1332,6 +2043,58 @@ define <4 x iXLen> @lrint_v4fp128(<4 x fp128> %x) nounwind {
 ; X86-I32-NEXT:    popl %ebp
 ; X86-I32-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: lrint_v4fp128:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    movl %esp, %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    andl $-16, %esp
+; X86-NOX87-NEXT:    subl $16, %esp
+; X86-NOX87-NEXT:    movl 8(%ebp), %esi
+; X86-NOX87-NEXT:    movl 36(%ebp), %ebx
+; X86-NOX87-NEXT:    movl 40(%ebp), %edi
+; X86-NOX87-NEXT:    pushl 24(%ebp)
+; X86-NOX87-NEXT:    pushl 20(%ebp)
+; X86-NOX87-NEXT:    pushl 16(%ebp)
+; X86-NOX87-NEXT:    pushl 12(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl 32(%ebp)
+; X86-NOX87-NEXT:    pushl 28(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebx
+; X86-NOX87-NEXT:    pushl 56(%ebp)
+; X86-NOX87-NEXT:    pushl 52(%ebp)
+; X86-NOX87-NEXT:    pushl 48(%ebp)
+; X86-NOX87-NEXT:    pushl 44(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    pushl 72(%ebp)
+; X86-NOX87-NEXT:    pushl 68(%ebp)
+; X86-NOX87-NEXT:    pushl 64(%ebp)
+; X86-NOX87-NEXT:    pushl 60(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-NOX87-NEXT:    movl %edi, 8(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 4(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    leal -12(%ebp), %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; X86-I64-LABEL: lrint_v4fp128:
 ; X86-I64:       # %bb.0:
 ; X86-I64-NEXT:    pushl %ebp
@@ -1394,6 +2157,68 @@ define <4 x iXLen> @lrint_v4fp128(<4 x fp128> %x) nounwind {
 ; X86-I64-NEXT:    popl %ebp
 ; X86-I64-NEXT:    retl $4
 ;
+; X86-I64-NOX87-LABEL: lrint_v4fp128:
+; X86-I64-NOX87:       # %bb.0:
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    movl %esp, %ebp
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    pushl %esi
+; X86-I64-NOX87-NEXT:    andl $-16, %esp
+; X86-I64-NOX87-NEXT:    subl $32, %esp
+; X86-I64-NOX87-NEXT:    movl 8(%ebp), %esi
+; X86-I64-NOX87-NEXT:    movl 36(%ebp), %edi
+; X86-I64-NOX87-NEXT:    movl 40(%ebp), %ebx
+; X86-I64-NOX87-NEXT:    pushl 24(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 20(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 16(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 12(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    pushl 32(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 28(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl 56(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 52(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 48(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 44(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, %edi
+; X86-I64-NOX87-NEXT:    movl %edx, %ebx
+; X86-I64-NOX87-NEXT:    pushl 72(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 68(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 64(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 60(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %edx, 28(%esi)
+; X86-I64-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebx, 20(%esi)
+; X86-I64-NOX87-NEXT:    movl %edi, 16(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, (%esi)
+; X86-I64-NOX87-NEXT:    movl %esi, %eax
+; X86-I64-NOX87-NEXT:    leal -12(%ebp), %esp
+; X86-I64-NOX87-NEXT:    popl %esi
+; X86-I64-NOX87-NEXT:    popl %edi
+; X86-I64-NOX87-NEXT:    popl %ebx
+; X86-I64-NOX87-NEXT:    popl %ebp
+; X86-I64-NOX87-NEXT:    retl $4
+;
 ; X86-SSE2-LABEL: lrint_v4fp128:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    pushl %ebp
@@ -1691,6 +2516,94 @@ define <8 x iXLen> @lrint_v8fp128(<8 x fp128> %x) nounwind {
 ; X86-I32-NEXT:    popl %ebp
 ; X86-I32-NEXT:    retl $4
 ;
+; X86-NOX87-LABEL: lrint_v8fp128:
+; X86-NOX87:       # %bb.0:
+; X86-NOX87-NEXT:    pushl %ebp
+; X86-NOX87-NEXT:    movl %esp, %ebp
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %esi
+; X86-NOX87-NEXT:    andl $-16, %esp
+; X86-NOX87-NEXT:    subl $32, %esp
+; X86-NOX87-NEXT:    movl 8(%ebp), %esi
+; X86-NOX87-NEXT:    movl 36(%ebp), %ebx
+; X86-NOX87-NEXT:    movl 40(%ebp), %edi
+; X86-NOX87-NEXT:    pushl 24(%ebp)
+; X86-NOX87-NEXT:    pushl 20(%ebp)
+; X86-NOX87-NEXT:    pushl 16(%ebp)
+; X86-NOX87-NEXT:    pushl 12(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl %edi
+; X86-NOX87-NEXT:    pushl %ebx
+; X86-NOX87-NEXT:    pushl 32(%ebp)
+; X86-NOX87-NEXT:    pushl 28(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl 56(%ebp)
+; X86-NOX87-NEXT:    pushl 52(%ebp)
+; X86-NOX87-NEXT:    pushl 48(%ebp)
+; X86-NOX87-NEXT:    pushl 44(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl 72(%ebp)
+; X86-NOX87-NEXT:    pushl 68(%ebp)
+; X86-NOX87-NEXT:    pushl 64(%ebp)
+; X86-NOX87-NEXT:    pushl 60(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl 88(%ebp)
+; X86-NOX87-NEXT:    pushl 84(%ebp)
+; X86-NOX87-NEXT:    pushl 80(%ebp)
+; X86-NOX87-NEXT:    pushl 76(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-NOX87-NEXT:    pushl 104(%ebp)
+; X86-NOX87-NEXT:    pushl 100(%ebp)
+; X86-NOX87-NEXT:    pushl 96(%ebp)
+; X86-NOX87-NEXT:    pushl 92(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, %ebx
+; X86-NOX87-NEXT:    pushl 120(%ebp)
+; X86-NOX87-NEXT:    pushl 116(%ebp)
+; X86-NOX87-NEXT:    pushl 112(%ebp)
+; X86-NOX87-NEXT:    pushl 108(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, %edi
+; X86-NOX87-NEXT:    pushl 136(%ebp)
+; X86-NOX87-NEXT:    pushl 132(%ebp)
+; X86-NOX87-NEXT:    pushl 128(%ebp)
+; X86-NOX87-NEXT:    pushl 124(%ebp)
+; X86-NOX87-NEXT:    calll lrintl
+; X86-NOX87-NEXT:    addl $16, %esp
+; X86-NOX87-NEXT:    movl %eax, 28(%esi)
+; X86-NOX87-NEXT:    movl %edi, 24(%esi)
+; X86-NOX87-NEXT:    movl %ebx, 20(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 16(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-NOX87-NEXT:    movl %eax, (%esi)
+; X86-NOX87-NEXT:    movl %esi, %eax
+; X86-NOX87-NEXT:    leal -12(%ebp), %esp
+; X86-NOX87-NEXT:    popl %esi
+; X86-NOX87-NEXT:    popl %edi
+; X86-NOX87-NEXT:    popl %ebx
+; X86-NOX87-NEXT:    popl %ebp
+; X86-NOX87-NEXT:    retl $4
+;
 ; X86-I64-LABEL: lrint_v8fp128:
 ; X86-I64:       # %bb.0:
 ; X86-I64-NEXT:    pushl %ebp
@@ -1801,6 +2714,116 @@ define <8 x iXLen> @lrint_v8fp128(<8 x fp128> %x) nounwind {
 ; X86-I64-NEXT:    popl %ebp
 ; X86-I64-NEXT:    retl $4
 ;
+; X86-I64-NOX87-LABEL: lrint_v8fp128:
+; X86-I64-NOX87:       # %bb.0:
+; X86-I64-NOX87-NEXT:    pushl %ebp
+; X86-I64-NOX87-NEXT:    movl %esp, %ebp
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    pushl %esi
+; X86-I64-NOX87-NEXT:    andl $-16, %esp
+; X86-I64-NOX87-NEXT:    subl $64, %esp
+; X86-I64-NOX87-NEXT:    movl 8(%ebp), %esi
+; X86-I64-NOX87-NEXT:    movl 36(%ebp), %edi
+; X86-I64-NOX87-NEXT:    movl 40(%ebp), %ebx
+; X86-I64-NOX87-NEXT:    pushl 24(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 20(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 16(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 12(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl %ebx
+; X86-I64-NOX87-NEXT:    pushl %edi
+; X86-I64-NOX87-NEXT:    pushl 32(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 28(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl 56(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 52(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 48(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 44(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl 72(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 68(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 64(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 60(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl 88(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 84(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 80(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 76(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl 104(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 100(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 96(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 92(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    movl %edx, {{[-0-9]+}}(%e{{[sb]}}p) # 4-byte Spill
+; X86-I64-NOX87-NEXT:    pushl 120(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 116(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 112(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 108(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %eax, %edi
+; X86-I64-NOX87-NEXT:    movl %edx, %ebx
+; X86-I64-NOX87-NEXT:    pushl 136(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 132(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 128(%ebp)
+; X86-I64-NOX87-NEXT:    pushl 124(%ebp)
+; X86-I64-NOX87-NEXT:    calll lrintl
+; X86-I64-NOX87-NEXT:    addl $16, %esp
+; X86-I64-NOX87-NEXT:    movl %edx, 60(%esi)
+; X86-I64-NOX87-NEXT:    movl %eax, 56(%esi)
+; X86-I64-NOX87-NEXT:    movl %ebx, 52(%esi)
+; X86-I64-NOX87-NEXT:    movl %edi, 48(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 44(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 40(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 36(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 32(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 28(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 24(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 20(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 16(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 12(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 8(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, 4(%esi)
+; X86-I64-NOX87-NEXT:    movl {{[-0-9]+}}(%e{{[sb]}}p), %eax # 4-byte Reload
+; X86-I64-NOX87-NEXT:    movl %eax, (%esi)
+; X86-I64-NOX87-NEXT:    movl %esi, %eax
+; X86-I64-NOX87-NEXT:    leal -12(%ebp), %esp
+; X86-I64-NOX87-NEXT:    popl %esi
+; X86-I64-NOX87-NEXT:    popl %edi
+; X86-I64-NOX87-NEXT:    popl %ebx
+; X86-I64-NOX87-NEXT:    popl %ebp
+; X86-I64-NOX87-NEXT:    retl $4
+;
 ; X86-SSE2-LABEL: lrint_v8fp128:
 ; X86-SSE2:       # %bb.0:
 ; X86-SSE2-NEXT:    pushl %ebp


        


More information about the llvm-commits mailing list