[llvm-commits] CVS: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp
Nate Begeman
natebegeman at mac.com
Sun Apr 3 16:11:28 PDT 2005
Changes in directory llvm/lib/Target/PowerPC:
PPC32ISelPattern.cpp updated: 1.38 -> 1.39
---
Log message:
Full varargs support. All of UnitTests now passes
---
Diffs of the changes: (+15 -5)
PPC32ISelPattern.cpp | 20 +++++++++++++++-----
1 files changed, 15 insertions(+), 5 deletions(-)
Index: llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp
diff -u llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.38 llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.39
--- llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp:1.38 Sun Apr 3 17:22:56 2005
+++ llvm/lib/Target/PowerPC/PPC32ISelPattern.cpp Sun Apr 3 18:11:17 2005
@@ -194,12 +194,22 @@
// the start of the first vararg value... for expansion of llvm.va_start.
if (F.isVarArg()) {
VarArgsFrameIndex = MFI->CreateFixedObject(4, ArgOffset);
- // If this function is vararg, store r4-r10 to their spots on the stack so
- // that they may be loaded by dereferencing va_next
SDOperand FIN = DAG.getFrameIndex(VarArgsFrameIndex, MVT::i32);
- SDOperand Val = DAG.getCopyFromReg(PPC::R4, MVT::i32, DAG.getRoot());
- SDOperand Store = DAG.getNode(ISD::STORE, MVT::Other, Val.getValue(1), Val, FIN);
- DAG.setRoot(Store);
+ // If this function is vararg, store any remaining integer argument regs
+ // to their spots on the stack so that they may be loaded by deferencing the
+ // result of va_next.
+ std::vector<SDOperand> MemOps;
+ for (; GPR_remaining > 0; --GPR_remaining, ++GPR_idx) {
+ BuildMI(&BB, PPC::IMPLICIT_DEF, 0, GPR[GPR_idx]);
+ SDOperand Val = DAG.getCopyFromReg(GPR[GPR_idx], MVT::i32, DAG.getRoot());
+ SDOperand Store = DAG.getNode(ISD::STORE, MVT::Other, Val.getValue(1),
+ Val, FIN);
+ MemOps.push_back(Store);
+ // Increment the address by four for the next argument to store
+ SDOperand PtrOff = DAG.getConstant(4, getPointerTy());
+ FIN = DAG.getNode(ISD::ADD, MVT::i32, FIN, PtrOff);
+ }
+ DAG.setRoot(DAG.getNode(ISD::TokenFactor, MVT::Other, MemOps));
}
return ArgValues;
More information about the llvm-commits
mailing list