Changes in directory llvm/lib/Target/X86:
X86ISelLowering.cpp updated: 1.72 -> 1.73 --- Log message: Be smarter about whether to store the SSE return value in memory. If it is already available in memory, do a fld directly from there. --- Diffs of the changes: (+16 -9) X86ISelLowering.cpp | 25 ++++++++++++++++--------- 1 files changed, 16 insertions(+), 9 deletions(-) Index: llvm/lib/Target/X86/X86ISelLowering.cpp diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.72 llvm/lib/Target/X86/X86ISelLowering.cpp:1.73 --- llvm/lib/Target/X86/X86ISelLowering.cpp:1.72 Tue Jan 31 16:28:30 2006 +++ llvm/lib/Target/X86/X86ISelLowering.cpp Tue Jan 31 17:19:54 2006 @@ -1912,20 +1912,27 @@ Ops.push_back(Op.getOperand(1)); Copy = DAG.getNode(X86ISD::FP_SET_RESULT, Tys, Ops); } else { - // Spill the value to memory and reload it into top of stack. - unsigned Size = MVT::getSizeInBits(ArgVT)/8; - MachineFunction &MF = DAG.getMachineFunction(); - int SSFI = MF.getFrameInfo()->CreateStackObject(Size, Size); - SDOperand StackSlot = DAG.getFrameIndex(SSFI, getPointerTy()); - SDOperand Chain = DAG.getNode(ISD::STORE, MVT::Other, Op.getOperand(0), - Op.getOperand(1), StackSlot, - DAG.getSrcValue(0)); + SDOperand MemLoc, Chain; + SDOperand Value = Op.getOperand(1); + + if (Value.getOpcode() == ISD::LOAD) { + Chain = Value.getOperand(0); + MemLoc = Value.getOperand(1); + } else { + // Spill the value to memory and reload it into top of stack. + unsigned Size = MVT::getSizeInBits(ArgVT)/8; + MachineFunction &MF = DAG.getMachineFunction(); + int SSFI = MF.getFrameInfo()->CreateStackObject(Size, Size); + MemLoc = DAG.getFrameIndex(SSFI, getPointerTy()); + Chain = DAG.getNode(ISD::STORE, MVT::Other, Op.getOperand(0), + Value, MemLoc, DAG.getSrcValue(0)); + } std::vector<MVT::ValueType> Tys; Tys.push_back(MVT::f64); Tys.push_back(MVT::Other); std::vector<SDOperand> Ops; Ops.push_back(Chain); - Ops.push_back(StackSlot); + Ops.push_back(MemLoc); Ops.push_back(DAG.getValueType(ArgVT)); Copy = DAG.getNode(X86ISD::FLD, Tys, Ops); Tys.clear(); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits