summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
diff options
context:
space:
mode:
authorDan Gohman <gohman@apple.com>2008-03-08 00:19:12 +0000
committerDan Gohman <gohman@apple.com>2008-03-08 00:19:12 +0000
commitd2ab5fd713eb933c48876c1cb9f627a99c64f2b9 (patch)
treec0a613a45d8c9fc7210eadfb408330d79a49413b /llvm/lib/Target/PowerPC/PPCISelLowering.cpp
parentd6951455e46780384219d686a6f6b72c57d5b7db (diff)
downloadbcm5719-llvm-d2ab5fd713eb933c48876c1cb9f627a99c64f2b9.tar.gz
bcm5719-llvm-d2ab5fd713eb933c48876c1cb9f627a99c64f2b9.zip
Add support for calls with i128 return values on ppc64.
llvm-svn: 48041
Diffstat (limited to 'llvm/lib/Target/PowerPC/PPCISelLowering.cpp')
-rw-r--r--llvm/lib/Target/PowerPC/PPCISelLowering.cpp16
1 files changed, 13 insertions, 3 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
index 7773fc9ee50..06098de0635 100644
--- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
+++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp
@@ -2015,9 +2015,19 @@ SDOperand PPCTargetLowering::LowerCALL(SDOperand Op, SelectionDAG &DAG,
NodeTys.push_back(MVT::i32);
break;
case MVT::i64:
- Chain = DAG.getCopyFromReg(Chain, PPC::X3, MVT::i64, InFlag).getValue(1);
- ResultVals[0] = Chain.getValue(0);
- NumResults = 1;
+ if (Op.Val->getValueType(1) == MVT::i64) {
+ Chain = DAG.getCopyFromReg(Chain, PPC::X3, MVT::i64, InFlag).getValue(1);
+ ResultVals[0] = Chain.getValue(0);
+ Chain = DAG.getCopyFromReg(Chain, PPC::X4, MVT::i64,
+ Chain.getValue(2)).getValue(1);
+ ResultVals[1] = Chain.getValue(0);
+ NumResults = 2;
+ NodeTys.push_back(MVT::i64);
+ } else {
+ Chain = DAG.getCopyFromReg(Chain, PPC::X3, MVT::i64, InFlag).getValue(1);
+ ResultVals[0] = Chain.getValue(0);
+ NumResults = 1;
+ }
NodeTys.push_back(MVT::i64);
break;
case MVT::f64:
OpenPOWER on IntegriCloud