diff options
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp')
| -rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp | 9 | 
1 files changed, 6 insertions, 3 deletions
| diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp index a4246eb8eb9..50bd5a94f4b 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyISelLowering.cpp @@ -674,13 +674,16 @@ WebAssemblyTargetLowering::LowerCall(CallLoweringInfo &CLI,    if (IsVarArg) {      // Outgoing non-fixed arguments are placed in a buffer. First      // compute their offsets and the total amount of buffer space needed. -    for (SDValue Arg : -         make_range(OutVals.begin() + NumFixedArgs, OutVals.end())) { +    for (unsigned I = NumFixedArgs; I < Outs.size(); ++I) { +      const ISD::OutputArg &Out = Outs[I]; +      SDValue &Arg = OutVals[I];        EVT VT = Arg.getValueType();        assert(VT != MVT::iPTR && "Legalized args should be concrete");        Type *Ty = VT.getTypeForEVT(*DAG.getContext()); +      unsigned Align = std::max(Out.Flags.getOrigAlign(), +                                Layout.getABITypeAlignment(Ty));        unsigned Offset = CCInfo.AllocateStack(Layout.getTypeAllocSize(Ty), -                                             Layout.getABITypeAlignment(Ty)); +                                             Align);        CCInfo.addLoc(CCValAssign::getMem(ArgLocs.size(), VT.getSimpleVT(),                                          Offset, VT.getSimpleVT(),                                          CCValAssign::Full)); | 

