mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-10 20:33:15 +00:00
Teach ReturnInst lowering about aggregate return values.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@52522 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6fafe847b2
commit
ab8ec0a26c
@ -1270,7 +1270,11 @@ void SelectionDAGLowering::visitRet(ReturnInst &I) {
|
||||
NewValues.push_back(getControlRoot());
|
||||
for (unsigned i = 0, e = I.getNumOperands(); i != e; ++i) {
|
||||
SDOperand RetOp = getValue(I.getOperand(i));
|
||||
MVT VT = RetOp.getValueType();
|
||||
|
||||
SmallVector<MVT, 4> ValueVTs;
|
||||
ComputeValueVTs(TLI, I.getOperand(i)->getType(), ValueVTs);
|
||||
for (unsigned j = 0, f = ValueVTs.size(); j != f; ++j) {
|
||||
MVT VT = ValueVTs[j];
|
||||
|
||||
// FIXME: C calling convention requires the return type to be promoted to
|
||||
// at least 32-bit. But this is not necessary for non-C calling conventions.
|
||||
@ -1291,13 +1295,15 @@ void SelectionDAGLowering::visitRet(ReturnInst &I) {
|
||||
else if (F->paramHasAttr(0, ParamAttr::ZExt))
|
||||
ExtendKind = ISD::ZERO_EXTEND;
|
||||
|
||||
getCopyToParts(DAG, RetOp, &Parts[0], NumParts, PartVT, ExtendKind);
|
||||
getCopyToParts(DAG, SDOperand(RetOp.Val, RetOp.ResNo + j),
|
||||
&Parts[0], NumParts, PartVT, ExtendKind);
|
||||
|
||||
for (unsigned i = 0; i < NumParts; ++i) {
|
||||
NewValues.push_back(Parts[i]);
|
||||
NewValues.push_back(DAG.getArgFlags(ISD::ArgFlagsTy()));
|
||||
}
|
||||
}
|
||||
}
|
||||
DAG.setRoot(DAG.getNode(ISD::RET, MVT::Other,
|
||||
&NewValues[0], NewValues.size()));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user