mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
LowerFP_TO_SINT must not create a stack object if it's not needed.
llvm-svn: 43004
This commit is contained in:
parent
b4a9a2e418
commit
f5bcd3d737
@ -3895,13 +3895,7 @@ SDOperand X86TargetLowering::LowerSINT_TO_FP(SDOperand Op, SelectionDAG &DAG) {
|
||||
SDOperand X86TargetLowering::LowerFP_TO_SINT(SDOperand Op, SelectionDAG &DAG) {
|
||||
assert(Op.getValueType() <= MVT::i64 && Op.getValueType() >= MVT::i16 &&
|
||||
"Unknown FP_TO_SINT to lower!");
|
||||
// We lower FP->sint64 into FISTP64, followed by a load, all to a temporary
|
||||
// stack slot.
|
||||
SDOperand Result;
|
||||
MachineFunction &MF = DAG.getMachineFunction();
|
||||
unsigned MemSize = MVT::getSizeInBits(Op.getValueType())/8;
|
||||
int SSFI = MF.getFrameInfo()->CreateStackObject(MemSize, MemSize);
|
||||
SDOperand StackSlot = DAG.getFrameIndex(SSFI, getPointerTy());
|
||||
|
||||
// These are really Legal.
|
||||
if (Op.getValueType() == MVT::i32 &&
|
||||
@ -3915,6 +3909,12 @@ SDOperand X86TargetLowering::LowerFP_TO_SINT(SDOperand Op, SelectionDAG &DAG) {
|
||||
Op.getOperand(0).getValueType() != MVT::f80)
|
||||
return Result;
|
||||
|
||||
// We lower FP->sint64 into FISTP64, followed by a load, all to a temporary
|
||||
// stack slot.
|
||||
MachineFunction &MF = DAG.getMachineFunction();
|
||||
unsigned MemSize = MVT::getSizeInBits(Op.getValueType())/8;
|
||||
int SSFI = MF.getFrameInfo()->CreateStackObject(MemSize, MemSize);
|
||||
SDOperand StackSlot = DAG.getFrameIndex(SSFI, getPointerTy());
|
||||
unsigned Opc;
|
||||
switch (Op.getValueType()) {
|
||||
default: assert(0 && "Invalid FP_TO_SINT to lower!");
|
||||
|
18
test/CodeGen/X86/fp2sint.ll
Normal file
18
test/CodeGen/X86/fp2sint.ll
Normal file
@ -0,0 +1,18 @@
|
||||
;; LowerFP_TO_SINT should not create a stack object if it's not needed.
|
||||
|
||||
; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | not grep add
|
||||
|
||||
define i32 @main(i32 %argc, i8** %argv) {
|
||||
cond_false.i.i.i: ; preds = %bb.i5
|
||||
%tmp35.i = load double* null, align 8 ; <double> [#uses=1]
|
||||
%tmp3536.i = fptosi double %tmp35.i to i32 ; <i32> [#uses=1]
|
||||
%tmp3536140.i = zext i32 %tmp3536.i to i64 ; <i64> [#uses=1]
|
||||
%tmp39.i = load double* null, align 4 ; <double> [#uses=1]
|
||||
%tmp3940.i = fptosi double %tmp39.i to i32 ; <i32> [#uses=1]
|
||||
%tmp3940137.i = zext i32 %tmp3940.i to i64 ; <i64> [#uses=1]
|
||||
%tmp3940137138.i = shl i64 %tmp3940137.i, 32 ; <i64> [#uses=1]
|
||||
%tmp3940137138.ins.i = or i64 %tmp3940137138.i, %tmp3536140.i ; <i64> [#uses=1]
|
||||
%tmp95.i.i = trunc i64 %tmp3940137138.ins.i to i32 ; <i32> [#uses=1]
|
||||
store i32 %tmp95.i.i, i32* null, align 4
|
||||
ret i32 0
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user