diff options
author | Nate Begeman <natebegeman@mac.com> | 2005-10-18 23:23:37 +0000 |
---|---|---|
committer | Nate Begeman <natebegeman@mac.com> | 2005-10-18 23:23:37 +0000 |
commit | 78afac2ddd5fdff66e53b0cea6dccc978740b874 (patch) | |
tree | 8a3c7b5cb67ddc0b6beae8555d85f20b97c50c2a /llvm/lib/CodeGen | |
parent | 0a71a9ac86e9a8fb89f1638e600e6b1ae45d0013 (diff) | |
download | bcm5719-llvm-78afac2ddd5fdff66e53b0cea6dccc978740b874.tar.gz bcm5719-llvm-78afac2ddd5fdff66e53b0cea6dccc978740b874.zip |
Add the ability to lower return instructions to TargetLowering. This
allows us to lower legal return types to something else, to meet ABI
requirements (such as that i64 be returned in two i32 regs on Darwin/ppc).
llvm-svn: 23802
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index 72ee7501082..4a89578eaa0 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -450,8 +450,8 @@ void SelectionDAGLowering::visitRet(ReturnInst &I) { case MVT::f64: break; // No extension needed! } - - DAG.setRoot(DAG.getNode(ISD::RET, MVT::Other, getRoot(), Op1)); + // Allow targets to lower this further to meet ABI requirements + DAG.setRoot(TLI.LowerReturnTo(getRoot(), Op1, DAG)); } void SelectionDAGLowering::visitBr(BranchInst &I) { @@ -898,6 +898,11 @@ MachineBasicBlock *TargetLowering::InsertAtEndOfBasicBlock(MachineInstr *MI, return 0; } +SDOperand TargetLowering::LowerReturnTo(SDOperand Chain, SDOperand Op, + SelectionDAG &DAG) { + return DAG.getNode(ISD::RET, MVT::Other, Chain, Op); +} + SDOperand TargetLowering::LowerVAStart(SDOperand Chain, SDOperand VAListP, Value *VAListV, SelectionDAG &DAG) { |