Changes in directory llvm/lib/Target/IA64:
IA64ISelDAGToDAG.cpp updated: 1.20 -> 1.21 IA64ISelLowering.cpp updated: 1.21 -> 1.22 --- Log message: explain that r12 is the stack pointer reg --- Diffs of the changes: (+5 -33) IA64ISelDAGToDAG.cpp | 34 ++-------------------------------- IA64ISelLowering.cpp | 4 +++- 2 files changed, 5 insertions(+), 33 deletions(-) Index: llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp diff -u llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.20 llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.21 --- llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp:1.20 Fri Jan 13 04:28:25 2006 +++ llvm/lib/Target/IA64/IA64ISelDAGToDAG.cpp Sun Jan 15 03:45:22 2006 @@ -450,37 +450,6 @@ case ISD::SREM: case ISD::UREM: return SelectDIV(Op); - case ISD::DYNAMIC_STACKALLOC: { - if (!isa<ConstantSDNode>(N->getOperand(2)) || - cast<ConstantSDNode>(N->getOperand(2))->getValue() != 0) { - std::cerr << "Cannot allocate stack object with greater alignment than" - << " the stack alignment yet!"; - abort(); - } - - SDOperand Chain = Select(N->getOperand(0)); - SDOperand Amt = Select(N->getOperand(1)); - SDOperand Reg = CurDAG->getRegister(IA64::r12, MVT::i64); - SDOperand Val = CurDAG->getCopyFromReg(Chain, IA64::r12, MVT::i64); - Chain = Val.getValue(1); - - // Subtract the amount (guaranteed to be a multiple of the stack alignment) - // from the stack pointer, giving us the result pointer. - SDOperand Result = Select(CurDAG->getNode(ISD::SUB, MVT::i64, Val, Amt)); - - // Copy this result back into r12. - Chain = CurDAG->getNode(ISD::CopyToReg, MVT::Other, Chain, Reg, Result); - - // Copy this result back out of r12 to make sure we're not using the stack - // space without decrementing the stack pointer. - Result = CurDAG->getCopyFromReg(Chain, IA64::r12, MVT::i64); - - // Finally, replace the DYNAMIC_STACKALLOC with the copyfromreg. - CodeGenMap[Op.getValue(0)] = Result; - CodeGenMap[Op.getValue(1)] = Result.getValue(1); - return SDOperand(Result.Val, Op.ResNo); - } - case ISD::ConstantFP: { SDOperand Chain = CurDAG->getEntryNode(); // this is a constant, so.. @@ -501,7 +470,8 @@ CurDAG->getTargetFrameIndex(FI, MVT::i64)); } - case ISD::ConstantPool: { + case ISD::ConstantPool: { // TODO: nuke the constant pool + // (ia64 doesn't need one) Constant *C = cast<ConstantPoolSDNode>(N)->get(); SDOperand CPI = CurDAG->getTargetConstantPool(C, MVT::i64); return CurDAG->getTargetNode(IA64::ADDL_GA, MVT::i64, // ? Index: llvm/lib/Target/IA64/IA64ISelLowering.cpp diff -u llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.21 llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.22 --- llvm/lib/Target/IA64/IA64ISelLowering.cpp:1.21 Sat Jan 14 16:27:21 2006 +++ llvm/lib/Target/IA64/IA64ISelLowering.cpp Sun Jan 15 03:45:23 2006 @@ -84,9 +84,11 @@ setOperationAction(ISD::ROTR , MVT::i64 , Expand); setOperationAction(ISD::BSWAP, MVT::i64 , Expand); // mux @rev - // Not implemented yet. setOperationAction(ISD::STACKSAVE, MVT::Other, Expand); setOperationAction(ISD::STACKRESTORE, MVT::Other, Expand); + setOperationAction(ISD::DYNAMIC_STACKALLOC, MVT::i64, Expand); + + setStackPointerRegisterToSaveRestore(IA64::r12); computeRegisterProperties(); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits