minor cleanups

llvm-svn: 48448
This commit is contained in:
Chris Lattner 2008-03-17 06:57:02 +00:00
parent 24bc123e80
commit 52f16deb65
1 changed files with 30 additions and 36 deletions

View File

@ -227,11 +227,10 @@ LowerJumpTable(SDOperand Op, SelectionDAG &DAG)
SDOperand MipsTargetLowering:: SDOperand MipsTargetLowering::
LowerCALL(SDOperand Op, SelectionDAG &DAG) LowerCALL(SDOperand Op, SelectionDAG &DAG)
{ {
unsigned CallingConv= cast<ConstantSDNode>(Op.getOperand(1))->getValue(); unsigned CallingConv = cast<ConstantSDNode>(Op.getOperand(1))->getValue();
// By now, only CallingConv::C implemented // By now, only CallingConv::C implemented
switch (CallingConv) switch (CallingConv) {
{
default: default:
assert(0 && "Unsupported calling convention"); assert(0 && "Unsupported calling convention");
case CallingConv::Fast: case CallingConv::Fast:
@ -248,7 +247,6 @@ SDOperand MipsTargetLowering::
LowerCCCCallTo(SDOperand Op, SelectionDAG &DAG, unsigned CC) LowerCCCCallTo(SDOperand Op, SelectionDAG &DAG, unsigned CC)
{ {
MachineFunction &MF = DAG.getMachineFunction(); MachineFunction &MF = DAG.getMachineFunction();
unsigned StackReg = MF.getTarget().getRegisterInfo()->getFrameRegister(MF);
SDOperand Chain = Op.getOperand(0); SDOperand Chain = Op.getOperand(0);
SDOperand Callee = Op.getOperand(4); SDOperand Callee = Op.getOperand(4);
@ -275,8 +273,7 @@ LowerCCCCallTo(SDOperand Op, SelectionDAG &DAG, unsigned CC)
SmallVector<std::pair<unsigned, SDOperand>, 8> RegsToPass; SmallVector<std::pair<unsigned, SDOperand>, 8> RegsToPass;
SmallVector<SDOperand, 8> MemOpChains; SmallVector<SDOperand, 8> MemOpChains;
SDOperand StackPtr; int LastStackLoc = 0;
int LastStackLoc=0;
// Walk the register/memloc assignments, inserting copies/loads. // Walk the register/memloc assignments, inserting copies/loads.
for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) { for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) {
@ -287,43 +284,40 @@ LowerCCCCallTo(SDOperand Op, SelectionDAG &DAG, unsigned CC)
// Promote the value if needed. // Promote the value if needed.
switch (VA.getLocInfo()) { switch (VA.getLocInfo()) {
default: assert(0 && "Unknown loc info!"); default: assert(0 && "Unknown loc info!");
case CCValAssign::Full: break; case CCValAssign::Full: break;
case CCValAssign::SExt: case CCValAssign::SExt:
Arg = DAG.getNode(ISD::SIGN_EXTEND, VA.getLocVT(), Arg); Arg = DAG.getNode(ISD::SIGN_EXTEND, VA.getLocVT(), Arg);
break; break;
case CCValAssign::ZExt: case CCValAssign::ZExt:
Arg = DAG.getNode(ISD::ZERO_EXTEND, VA.getLocVT(), Arg); Arg = DAG.getNode(ISD::ZERO_EXTEND, VA.getLocVT(), Arg);
break; break;
case CCValAssign::AExt: case CCValAssign::AExt:
Arg = DAG.getNode(ISD::ANY_EXTEND, VA.getLocVT(), Arg); Arg = DAG.getNode(ISD::ANY_EXTEND, VA.getLocVT(), Arg);
break; break;
} }
// Arguments that can be passed on register must be kept at // Arguments that can be passed on register must be kept at
// RegsToPass vector // RegsToPass vector
if (VA.isRegLoc()) { if (VA.isRegLoc()) {
RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg)); RegsToPass.push_back(std::make_pair(VA.getLocReg(), Arg));
} else { continue;
assert(VA.isMemLoc());
if (StackPtr.Val == 0)
StackPtr = DAG.getRegister(StackReg, getPointerTy());
// Create the frame index object for this incoming parameter
// This guarantees that when allocating Local Area the firsts
// 16 bytes which are alwayes reserved won't be overwritten.
LastStackLoc = (16 + VA.getLocMemOffset());
int FI = MFI->CreateFixedObject(MVT::getSizeInBits(VA.getValVT())/8,
LastStackLoc);
SDOperand PtrOff = DAG.getFrameIndex(FI,getPointerTy());
// emit ISD::STORE whichs stores the
// parameter value to a stack Location
MemOpChains.push_back(DAG.getStore(Chain, Arg, PtrOff, NULL, 0));
} }
assert(VA.isMemLoc());
// Create the frame index object for this incoming parameter
// This guarantees that when allocating Local Area the firsts
// 16 bytes which are alwayes reserved won't be overwritten.
LastStackLoc = (16 + VA.getLocMemOffset());
int FI = MFI->CreateFixedObject(MVT::getSizeInBits(VA.getValVT())/8,
LastStackLoc);
SDOperand PtrOff = DAG.getFrameIndex(FI,getPointerTy());
// emit ISD::STORE whichs stores the
// parameter value to a stack Location
MemOpChains.push_back(DAG.getStore(Chain, Arg, PtrOff, NULL, 0));
} }
// Transform all store nodes into one single node because // Transform all store nodes into one single node because