From 93a4a7fe0d7f25ccd66b64f7cc0c9dc746a0908f Mon Sep 17 00:00:00 2001 From: Sanjoy Das Date: Wed, 6 May 2015 02:36:31 +0000 Subject: [PATCH] [Statepoint] Clean up StatepointLowering: symbolic constants. For accessors in the `Statepoint` class, use symbolic constants for offsets into the argument vector instead of literals. This makes the code intent clearer and simpler to change. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236566 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/IR/Statepoint.h | 45 +++++++++---------- .../SelectionDAG/StatepointLowering.cpp | 5 ++- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/include/llvm/IR/Statepoint.h b/include/llvm/IR/Statepoint.h index ee9f7b9f1cd..a337222e08e 100644 --- a/include/llvm/IR/Statepoint.h +++ b/include/llvm/IR/Statepoint.h @@ -63,11 +63,19 @@ protected: public: typedef typename CallSiteTy::arg_iterator arg_iterator; + enum { + ActualCalleePos = 0, + NumCallArgsPos = 1, + CallArgsBeginPos = 3, + }; + /// Return the underlying CallSite. CallSiteTy getCallSite() { return StatepointCS; } /// Return the value actually being called or invoked. - ValueTy *getActualCallee() { return StatepointCS.getArgument(0); } + ValueTy *getActualCallee() { + return StatepointCS.getArgument(ActualCalleePos); + } /// Return the type of the value returned by the call underlying the /// statepoint. @@ -79,26 +87,16 @@ public: /// Number of arguments to be passed to the actual callee. int getNumCallArgs() { - return cast(StatepointCS.getArgument(1))->getZExtValue(); + const Value *NumCallArgsVal = StatepointCS.getArgument(NumCallArgsPos); + return cast(NumCallArgsVal)->getZExtValue(); } - /// Number of additional arguments excluding those intended - /// for garbage collection. - int getNumTotalVMSArgs() { - const Value *NumVMSArgs = StatepointCS.getArgument(3 + getNumCallArgs()); - return cast(NumVMSArgs)->getZExtValue(); - } - - int callArgsBeginOffset() { return 3; } - typename CallSiteTy::arg_iterator call_args_begin() { - // 3 = callTarget, #callArgs, flag - int Offset = callArgsBeginOffset(); - assert(Offset <= (int)StatepointCS.arg_size()); - return StatepointCS.arg_begin() + Offset; + assert(CallArgsBeginPos <= (int)StatepointCS.arg_size()); + return StatepointCS.arg_begin() + CallArgsBeginPos; } typename CallSiteTy::arg_iterator call_args_end() { - int Offset = callArgsBeginOffset() + getNumCallArgs(); + int Offset = CallArgsBeginPos + getNumCallArgs(); assert(Offset <= (int)StatepointCS.arg_size()); return StatepointCS.arg_begin() + Offset; } @@ -108,9 +106,16 @@ public: return iterator_range(call_args_begin(), call_args_end()); } + /// Number of additional arguments excluding those intended + /// for garbage collection. + int getNumTotalVMSArgs() { + Value *NumVMSArgs = *call_args_end(); + return cast(NumVMSArgs)->getZExtValue(); + } + typename CallSiteTy::arg_iterator vm_state_begin() { return call_args_end(); } typename CallSiteTy::arg_iterator vm_state_end() { - int Offset = 3 + getNumCallArgs() + 1 + getNumTotalVMSArgs(); + int Offset = CallArgsBeginPos + getNumCallArgs() + 1 + getNumTotalVMSArgs(); assert(Offset <= (int)StatepointCS.arg_size()); return StatepointCS.arg_begin() + Offset; } @@ -120,12 +125,6 @@ public: return iterator_range(vm_state_begin(), vm_state_end()); } - typename CallSiteTy::arg_iterator first_vm_state_stack_begin() { - // 6 = numTotalVMSArgs, 1st_objectID, 1st_bci, - // 1st_#stack, 1st_#local, 1st_#monitor - return vm_state_begin() + 6; - } - typename CallSiteTy::arg_iterator gc_args_begin() { return vm_state_end(); } typename CallSiteTy::arg_iterator gc_args_end() { return StatepointCS.arg_end(); diff --git a/lib/CodeGen/SelectionDAG/StatepointLowering.cpp b/lib/CodeGen/SelectionDAG/StatepointLowering.cpp index 521e27334ff..49c08d977bc 100644 --- a/lib/CodeGen/SelectionDAG/StatepointLowering.cpp +++ b/lib/CodeGen/SelectionDAG/StatepointLowering.cpp @@ -250,8 +250,9 @@ lowerCallFromStatepoint(ImmutableStatepoint ISP, MachineBasicBlock *LandingPad, SDValue ReturnValue, CallEndVal; std::tie(ReturnValue, CallEndVal) = Builder.lowerCallOperands( - ISP.getCallSite(), ISP.callArgsBeginOffset(), ISP.getNumCallArgs(), - ActualCallee, DefTy, LandingPad, false /* IsPatchPoint */); + ISP.getCallSite(), ImmutableStatepoint::CallArgsBeginPos, + ISP.getNumCallArgs(), ActualCallee, DefTy, LandingPad, + false /* IsPatchPoint */); SDNode *CallEnd = CallEndVal.getNode();