[llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp
Chris Lattner
sabre at nondot.org
Tue Feb 27 21:39:43 PST 2007
Changes in directory llvm/lib/Target/X86:
X86ISelLowering.cpp updated: 1.347 -> 1.348
---
Log message:
simplify sret handling
---
Diffs of the changes: (+5 -13)
X86ISelLowering.cpp | 18 +++++-------------
1 files changed, 5 insertions(+), 13 deletions(-)
Index: llvm/lib/Target/X86/X86ISelLowering.cpp
diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.347 llvm/lib/Target/X86/X86ISelLowering.cpp:1.348
--- llvm/lib/Target/X86/X86ISelLowering.cpp:1.347 Tue Feb 27 23:31:48 2007
+++ llvm/lib/Target/X86/X86ISelLowering.cpp Tue Feb 27 23:39:26 2007
@@ -819,7 +819,6 @@
SmallVector<SDOperand, 8> MemOpChains;
SDOperand StackPtr;
- unsigned NumSRetBytes = 0;
// Walk the register/memloc assignments, inserting copies/loads.
for (unsigned i = 0, e = ArgLocs.size(); i != e; ++i) {
@@ -850,19 +849,12 @@
SDOperand PtrOff = DAG.getConstant(VA.getLocMemOffset(), getPointerTy());
PtrOff = DAG.getNode(ISD::ADD, getPointerTy(), StackPtr, PtrOff);
MemOpChains.push_back(DAG.getStore(Chain, Arg, PtrOff, NULL, 0));
-
- // FIXME: What is this doing?
- unsigned Flags =
- cast<ConstantSDNode>(Op.getOperand(5+2*VA.getValNo()+1))->getValue();
- if ((Flags >> 2) & 1)
- NumSRetBytes += 4;
}
}
- // Sanity check: we haven't seen NumSRetBytes > 4
- assert((NumSRetBytes<=4) &&
- "Too much space for struct-return pointer requested");
-
+ // If the first argument is an sret pointer, remember it.
+ bool isSRet = NumOps &&(cast<ConstantSDNode>(Op.getOperand(6))->getValue()&4);
+
if (!MemOpChains.empty())
Chain = DAG.getNode(ISD::TokenFactor, MVT::Other,
&MemOpChains[0], MemOpChains.size());
@@ -926,14 +918,14 @@
if (CC == CallingConv::X86_StdCall) {
if (isVarArg)
- NumBytesForCalleeToPush = NumSRetBytes;
+ NumBytesForCalleeToPush = isSRet ? 4 : 0;
else
NumBytesForCalleeToPush = NumBytes;
} else {
// If this is is a call to a struct-return function, the callee
// pops the hidden struct pointer, so we have to push it back.
// This is common for Darwin/X86, Linux & Mingw32 targets.
- NumBytesForCalleeToPush = NumSRetBytes;
+ NumBytesForCalleeToPush = isSRet ? 4 : 0;
}
NodeTys = DAG.getVTList(MVT::Other, MVT::Flag);
More information about the llvm-commits
mailing list