diff --git a/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h b/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h index 3bee9734d8a15..0e6392084a503 100644 --- a/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h +++ b/llvm/include/llvm/CodeGen/GlobalISel/CallLowering.h @@ -355,9 +355,13 @@ class CallLowering { /// Break \p OrigArgInfo into one or more pieces the calling convention can /// process, returned in \p SplitArgs. For example, this should break structs /// down into individual fields. + /// + /// If \p Offsets is non-null, it points to a vector to be filled in + /// with the in-memory offsets of each of the individual values. void splitToValueTypes(const ArgInfo &OrigArgInfo, SmallVectorImpl &SplitArgs, - const DataLayout &DL, CallingConv::ID CallConv) const; + const DataLayout &DL, CallingConv::ID CallConv, + SmallVectorImpl *Offsets = nullptr) const; /// Generate instructions for unpacking \p SrcReg into the \p DstRegs /// corresponding to the aggregate type \p PackedTy. diff --git a/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp b/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp index 282414170a8df..a1658969ea22e 100644 --- a/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp +++ b/llvm/lib/CodeGen/GlobalISel/CallLowering.cpp @@ -207,12 +207,12 @@ CallLowering::setArgFlags(CallLowering::ArgInfo &Arg, unsigned OpIdx, void CallLowering::splitToValueTypes(const ArgInfo &OrigArg, SmallVectorImpl &SplitArgs, const DataLayout &DL, - CallingConv::ID CallConv) const { + CallingConv::ID CallConv, + SmallVectorImpl *Offsets) const { LLVMContext &Ctx = OrigArg.Ty->getContext(); SmallVector SplitVTs; - SmallVector Offsets; - ComputeValueVTs(*TLI, DL, OrigArg.Ty, SplitVTs, &Offsets, 0); + ComputeValueVTs(*TLI, DL, OrigArg.Ty, SplitVTs, Offsets, 0); if (SplitVTs.size() == 0) return;