From 4cd746ebe00cf3ec96198f4b9154381819670f1d Mon Sep 17 00:00:00 2001 From: Sanjoy Das Date: Wed, 23 Mar 2016 02:24:10 +0000 Subject: [PATCH] [StatepointLowering] Minor nfc refactoring Now that StatepointLoweringInfo represents base pointers, derived pointers and gc relocates as SmallVectors and not ArrayRefs, we no longer need to allocate "backing storage" on stack in LowerStatepoint. So elide the backing storage, and inline the trivial body of getIncomingStatepointGCValues. llvm-svn: 264128 --- .../CodeGen/SelectionDAG/StatepointLowering.cpp | 35 ++++------------------ 1 file changed, 6 insertions(+), 29 deletions(-) diff --git a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp index eccebf2..d4da796 100644 --- a/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/StatepointLowering.cpp @@ -317,26 +317,6 @@ static std::pair lowerCallFromStatepointLoweringInfo( return std::make_pair(ReturnValue, CallEnd->getOperand(0).getNode()); } -/// Callect all gc pointers coming into statepoint intrinsic, clean them up, -/// and return two arrays: -/// Bases - base pointers incoming to this statepoint -/// Ptrs - derived pointers incoming to this statepoint -/// Relocs - the gc_relocate corresponding to each base/ptr pair -/// Elements of this arrays should be in one-to-one correspondence with each -/// other i.e Bases[i], Ptrs[i] are from the same gcrelocate call -static void getIncomingStatepointGCValues( - SmallVectorImpl &Bases, SmallVectorImpl &Ptrs, - SmallVectorImpl &Relocs, - ImmutableStatepoint StatepointSite, SelectionDAGBuilder &Builder) { - for (const GCRelocateInst *Relocate : StatepointSite.getRelocates()) { - Relocs.push_back(Relocate); - Bases.push_back(Relocate->getBasePtr()); - Ptrs.push_back(Relocate->getDerivedPtr()); - } - - assert(Bases.size() == Ptrs.size() && Ptrs.size() == Relocs.size()); -} - /// Spill a value incoming to the statepoint. It might be either part of /// vmstate /// or gcstate. In both cases unconditionally spill it on the stack unless it @@ -746,12 +726,6 @@ SDValue SelectionDAGBuilder::LowerAsSTATEPOINT( void SelectionDAGBuilder::LowerStatepoint(ImmutableStatepoint ISP, const BasicBlock *EHPadBB /*= nullptr*/) { - SmallVector Bases; - SmallVector Ptrs; - SmallVector GCRelocates; - - getIncomingStatepointGCValues(Bases, Ptrs, GCRelocates, ISP, *this); - assert(ISP.getCallSite().getCallingConv() != CallingConv::AnyReg && "anyregcc is not supported on statepoints!"); @@ -790,9 +764,12 @@ SelectionDAGBuilder::LowerStatepoint(ImmutableStatepoint ISP, ISP.getNumCallArgs(), ActualCallee, ISP.getActualReturnType(), false /* IsPatchPoint */); - SI.Bases = Bases; - SI.Ptrs = Ptrs; - SI.GCRelocates = GCRelocates; + for (const GCRelocateInst *Relocate : ISP.getRelocates()) { + SI.GCRelocates.push_back(Relocate); + SI.Bases.push_back(Relocate->getBasePtr()); + SI.Ptrs.push_back(Relocate->getDerivedPtr()); + } + SI.GCArgs = ArrayRef(ISP.gc_args_begin(), ISP.gc_args_end()); SI.StatepointInstr = ISP.getInstruction(); SI.GCTransitionArgs = -- 2.7.4