Fix pifft by correcting the case when a i64/f64 straddles O5 and memory:
authorChris Lattner <sabre@nondot.org>
Mon, 19 Dec 2005 07:57:53 +0000 (07:57 +0000)
committerChris Lattner <sabre@nondot.org>
Mon, 19 Dec 2005 07:57:53 +0000 (07:57 +0000)
we were storing into [FP+88] instead of [FP+92].
Improve codegen by emitting [FP+92], instead of emitting a copy of FP into
another GPR which wouldn't be coallesced because FP isn't register allocated.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24859 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Sparc/SparcISelDAGToDAG.cpp
lib/Target/SparcV8/SparcV8ISelDAGToDAG.cpp

index 195a32e7fb228e5f91fc9ca0f231910ff19242a3..6c84d28311f4fa5b0e401c433fa50cd832f00011 100644 (file)
@@ -456,6 +456,8 @@ SparcV8TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy,
       
       if (RegValuesToPass.size() >= 6) {
         ValToStore = Lo;
+        ArgOffset += 4;
+        ObjSize = 4;
       } else {
         RegValuesToPass.push_back(Lo);
       }
@@ -464,7 +466,7 @@ SparcV8TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy,
     
     if (ValToStore.Val) {
       if (!StackPtr.Val) {
-        StackPtr = DAG.getCopyFromReg(DAG.getEntryNode(), V8::O6, MVT::i32);
+        StackPtr = DAG.getRegister(V8::O6, MVT::i32);
         NullSV = DAG.getSrcValue(NULL);
       }
       SDOperand PtrOff = DAG.getConstant(ArgOffset, getPointerTy());
@@ -893,6 +895,7 @@ SDOperand SparcV8DAGToDAGISel::Select(SDOperand Op) {
   
   switch (N->getOpcode()) {
   default: break;
+  case ISD::Register: return Op;
   case ISD::FrameIndex: {
     int FI = cast<FrameIndexSDNode>(N)->getIndex();
     if (N->hasOneUse())
index 195a32e7fb228e5f91fc9ca0f231910ff19242a3..6c84d28311f4fa5b0e401c433fa50cd832f00011 100644 (file)
@@ -456,6 +456,8 @@ SparcV8TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy,
       
       if (RegValuesToPass.size() >= 6) {
         ValToStore = Lo;
+        ArgOffset += 4;
+        ObjSize = 4;
       } else {
         RegValuesToPass.push_back(Lo);
       }
@@ -464,7 +466,7 @@ SparcV8TargetLowering::LowerCallTo(SDOperand Chain, const Type *RetTy,
     
     if (ValToStore.Val) {
       if (!StackPtr.Val) {
-        StackPtr = DAG.getCopyFromReg(DAG.getEntryNode(), V8::O6, MVT::i32);
+        StackPtr = DAG.getRegister(V8::O6, MVT::i32);
         NullSV = DAG.getSrcValue(NULL);
       }
       SDOperand PtrOff = DAG.getConstant(ArgOffset, getPointerTy());
@@ -893,6 +895,7 @@ SDOperand SparcV8DAGToDAGISel::Select(SDOperand Op) {
   
   switch (N->getOpcode()) {
   default: break;
+  case ISD::Register: return Op;
   case ISD::FrameIndex: {
     int FI = cast<FrameIndexSDNode>(N)->getIndex();
     if (N->hasOneUse())