diff options
| author | Chris Lattner <sabre@nondot.org> | 2005-08-29 22:22:57 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2005-08-29 22:22:57 +0000 |
| commit | b2b418509bd20c2a5636a7c5481ec5cf2e328dd5 (patch) | |
| tree | da3485fa3e34fedf8918159ea91f4fe67563508d /llvm | |
| parent | 3439ccce4d9fe184d2b7f859815cda30dc1a3cd6 (diff) | |
| download | bcm5719-llvm-b2b418509bd20c2a5636a7c5481ec5cf2e328dd5.tar.gz bcm5719-llvm-b2b418509bd20c2a5636a7c5481ec5cf2e328dd5.zip | |
Fix a dumb bug of mine where we were mishandling the PPC ABI (undef handling).
This fixes voronoi and bh in Olden, allowing all of olden to pass!
llvm-svn: 23133
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp index e7e1c9ed874..78d1cb42b87 100644 --- a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp @@ -1479,27 +1479,28 @@ SDOperand PPC32DAGToDAGISel::Select(SDOperand Op) { PPC::F8, PPC::F9, PPC::F10, PPC::F11, PPC::F12, PPC::F13 }; - for (unsigned i = 2, e = N->getNumOperands(); i != e; ++i) + for (unsigned i = 2, e = N->getNumOperands(); i != e; ++i) { + unsigned DestReg = 0; + MVT::ValueType RegTy; + if (N->getOperand(i).getValueType() == MVT::i32) { + assert(GPR_idx < 8 && "Too many int args"); + DestReg = GPR[GPR_idx++]; + RegTy = MVT::i32; + } else { + assert(MVT::isFloatingPoint(N->getOperand(i).getValueType()) && + "Unpromoted integer arg?"); + assert(FPR_idx < 13 && "Too many fp args"); + DestReg = FPR[FPR_idx++]; + RegTy = MVT::f64; // Even if this is really f32! + } + if (N->getOperand(i).getOpcode() != ISD::UNDEF) { - unsigned DestReg = 0; - MVT::ValueType RegTy; - if (N->getOperand(i).getValueType() == MVT::i32) { - assert(GPR_idx < 8 && "Too many int args"); - DestReg = GPR[GPR_idx++]; - RegTy = MVT::i32; - } else { - assert(MVT::isFloatingPoint(N->getOperand(i).getValueType()) && - "Unpromoted integer arg?"); - assert(FPR_idx < 13 && "Too many fp args"); - DestReg = FPR[FPR_idx++]; - RegTy = MVT::f64; // Even if this is really f32! - } - SDOperand Reg = CurDAG->getRegister(DestReg, RegTy); Chain = CurDAG->getNode(ISD::CopyToReg, MVT::Other, Chain, Reg, Select(N->getOperand(i))); CallOperands.push_back(Reg); } + } // Finally, once everything is in registers to pass to the call, emit the // call itself. |

