aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2005-08-31 01:34:29 +0000
committerChris Lattner <sabre@nondot.org>2005-08-31 01:34:29 +0000
commit7a49fdcd1136c26d9c60b19c087ca9d578cc9834 (patch)
tree89d21d3150246855722d85f5646e346de9e29db9
parentfe75a2836abd15557cf21a5cc34a7048cbba654f (diff)
Fix 'ret long' to return the high and lo parts in the right registers. This
fixes crafty and probably others. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@23167 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/PowerPC/PPCISelDAGToDAG.cpp16
1 files changed, 7 insertions, 9 deletions
diff --git a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
index 69a33ebd2b..9eef4fbc45 100644
--- a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+++ b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
@@ -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.