From 7a49fdcd1136c26d9c60b19c087ca9d578cc9834 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 31 Aug 2005 01:34:29 +0000 Subject: [PATCH] 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 --- lib/Target/PowerPC/PPCISelDAGToDAG.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index 69a33ebd2b6..9eef4fbc459 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. -- 2.34.1