[llvm-branch-commits] [llvm-branch] r109203 - /llvm/branches/Apple/Morbo/lib/Target/X86/X86ISelLowering.cpp
Dale Johannesen
dalej at apple.com
Thu Jul 22 17:43:18 PDT 2010
Author: johannes
Date: Thu Jul 22 19:43:18 2010
New Revision: 109203
URL: http://llvm.org/viewvc/llvm-project?rev=109203&view=rev
Log:
--- Merging r109201 into '.':
U lib/Target/X86/X86ISelLowering.cpp
Modified:
llvm/branches/Apple/Morbo/lib/Target/X86/X86ISelLowering.cpp
Modified: llvm/branches/Apple/Morbo/lib/Target/X86/X86ISelLowering.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/branches/Apple/Morbo/lib/Target/X86/X86ISelLowering.cpp?rev=109203&r1=109202&r2=109203&view=diff
==============================================================================
--- llvm/branches/Apple/Morbo/lib/Target/X86/X86ISelLowering.cpp (original)
+++ llvm/branches/Apple/Morbo/lib/Target/X86/X86ISelLowering.cpp Thu Jul 22 19:43:18 2010
@@ -1239,6 +1239,20 @@
CCValAssign &VA = RVLocs[i];
assert(VA.isRegLoc() && "Can only return in registers!");
SDValue ValToCopy = Outs[i].Val;
+ EVT ValVT = ValToCopy.getValueType();
+
+ // If this is x86-64, and we disabled SSE, we can't return FP values
+ if ((ValVT == MVT::f32 || ValVT == MVT::f64) &&
+ (Subtarget->is64Bit() && !Subtarget->hasSSE1())) {
+ report_fatal_error("SSE register return with SSE disabled");
+ }
+ // Likewise we can't return F64 values with SSE1 only. gcc does so, but
+ // llvm-gcc has never done it right and no one has noticed, so this
+ // should be OK for now.
+ if (ValVT == MVT::f64 &&
+ (Subtarget->is64Bit() && !Subtarget->hasSSE2())) {
+ report_fatal_error("SSE2 register return with SSE2 disabled");
+ }
// Returns in ST0/ST1 are handled specially: these are pushed as operands to
// the RET instruction and handled by the FP Stackifier.
@@ -1256,7 +1270,6 @@
// 64-bit vector (MMX) values are returned in XMM0 / XMM1 except for v1i64
// which is returned in RAX / RDX.
if (Subtarget->is64Bit()) {
- EVT ValVT = ValToCopy.getValueType();
if (ValVT.isVector() && ValVT.getSizeInBits() == 64) {
ValToCopy = DAG.getNode(ISD::BIT_CONVERT, dl, MVT::i64, ValToCopy);
if (VA.getLocReg() == X86::XMM0 || VA.getLocReg() == X86::XMM1)
More information about the llvm-branch-commits
mailing list