Fix 'ret long' to return the high and lo parts in the right registers. This
authorChris Lattner <sabre@nondot.org>
Wed, 31 Aug 2005 01:34:29 +0000 (01:34 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 31 Aug 2005 01:34:29 +0000 (01:34 +0000)
fixes crafty and probably others.

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

lib/Target/PowerPC/PPCISelDAGToDAG.cpp

index 69a33ebd2b63b02c64aa6108c611aba6263899cd..9eef4fbc4591be9d9cefd186b9411b19d0dc4adb 100644 (file)
@@ -1569,7 +1569,7 @@ SDOperand PPC32DAGToDAGISel::Select(SDOperand Op) {
   case ISD::RET: {
     SDOperand Chain = Select(N->getOperand(0));     // Token chain.
 
-    if (N->getNumOperands() > 1) {
+    if (N->getNumOperands() == 2) {
       SDOperand Val = Select(N->getOperand(1));
       if (N->getOperand(1).getValueType() == MVT::i32) {
         Chain = CurDAG->getCopyToReg(Chain, PPC::R3, Val);
@@ -1577,14 +1577,12 @@ SDOperand PPC32DAGToDAGISel::Select(SDOperand Op) {
         assert(MVT::isFloatingPoint(N->getOperand(1).getValueType()));
         Chain = CurDAG->getCopyToReg(Chain, PPC::F1, Val);
       }
-
-      if (N->getNumOperands() > 2) {
-        assert(N->getOperand(1).getValueType() == MVT::i32 &&
-               N->getOperand(2).getValueType() == MVT::i32 &&
-               N->getNumOperands() == 3 && "Unknown two-register ret value!");
-        Val = Select(N->getOperand(2));
-        Chain = CurDAG->getCopyToReg(Chain, PPC::R4, Val);
-      }
+    } else if (N->getNumOperands() > 1) {
+      assert(N->getOperand(1).getValueType() == MVT::i32 &&
+             N->getOperand(2).getValueType() == MVT::i32 &&
+             N->getNumOperands() == 3 && "Unknown two-register ret value!");
+      Chain = CurDAG->getCopyToReg(Chain, PPC::R4, Select(N->getOperand(1)));
+      Chain = CurDAG->getCopyToReg(Chain, PPC::R3, Select(N->getOperand(2)));
     }
 
     // Finally, select this to a blr (return) instruction.