[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