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); _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits