[llvm] AMDGPU: Add helper function for implicit parameter offsets.

Matt Arsenault arsenm2 at gmail.com
Wed Jul 8 10:12:30 PDT 2015


> On Jul 8, 2015, at 10:06 AM, Zoltan Gilian <zoltan.gilian at gmail.com> wrote:
> 
> ---
> lib/Target/AMDGPU/AMDGPUISelLowering.cpp | 12 ++++++++++++
> lib/Target/AMDGPU/AMDGPUISelLowering.h   |  7 +++++++
> lib/Target/AMDGPU/R600ISelLowering.cpp   |  6 ++++--
> lib/Target/AMDGPU/SIISelLowering.cpp     |  4 ++--
> 4 files changed, 25 insertions(+), 4 deletions(-)

LGTM with some trivial changes.


> 
> diff --git a/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
> index 9479d23..1c8d9cd 100644
> --- a/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
> +++ b/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
> @@ -2645,6 +2645,18 @@ SDValue AMDGPUTargetLowering::CreateLiveInRegister(SelectionDAG &DAG,
>   return DAG.getRegister(VirtualRegister, VT);
> }
> 
> +unsigned AMDGPUTargetLowering::GetImplicitParameterOffset(

Function name should start with lowercase letter. I would also prefer this return uint32_t

> +    const AMDGPUMachineFunction *MFI, const ImplicitParameter param) const {
param should be capitalized

> +  uint64_t ArgOffset = MFI->ABIArgOffset;
> +  switch (param) {
> +  case GRID_DIM:
> +    return ArgOffset;
> +  case GRID_OFFSET:
> +    return ArgOffset + 4;
> +  }
> +  llvm_unreachable("unexpected implicit parameter type");
> +}
> +
> #define NODE_NAME_CASE(node) case AMDGPUISD::node: return #node;
> 
> const char* AMDGPUTargetLowering::getTargetNodeName(unsigned Opcode) const {
> diff --git a/lib/Target/AMDGPU/AMDGPUISelLowering.h b/lib/Target/AMDGPU/AMDGPUISelLowering.h
> index fbb7d3c..c87b2bd 100644
> --- a/lib/Target/AMDGPU/AMDGPUISelLowering.h
> +++ b/lib/Target/AMDGPU/AMDGPUISelLowering.h
> @@ -207,6 +207,13 @@ public:
>   virtual SDValue CreateLiveInRegister(SelectionDAG &DAG,
>                                        const TargetRegisterClass *RC,
>                                        unsigned Reg, EVT VT) const;
> +
> +  enum ImplicitParameter { GRID_DIM, GRID_OFFSET };
Can you break these onto separate lines?

> +
> +  /// \brief Helper function that returns the byte offset of the given
> +  /// type of implicit parameter.
> +  unsigned GetImplicitParameterOffset(const AMDGPUMachineFunction *MFI,
> +                                      const ImplicitParameter param) const;
> };
> 
> namespace AMDGPUISD {
> diff --git a/lib/Target/AMDGPU/R600ISelLowering.cpp b/lib/Target/AMDGPU/R600ISelLowering.cpp
> index 8357b6d..828d60f 100644
> --- a/lib/Target/AMDGPU/R600ISelLowering.cpp
> +++ b/lib/Target/AMDGPU/R600ISelLowering.cpp
> @@ -815,8 +815,10 @@ SDValue R600TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const
>     case Intrinsic::r600_read_local_size_z:
>       return LowerImplicitParameter(DAG, VT, DL, 8);
> 
> -    case Intrinsic::AMDGPU_read_workdim:
> -      return LowerImplicitParameter(DAG, VT, DL, MFI->ABIArgOffset / 4);
> +    case Intrinsic::AMDGPU_read_workdim: {
> +      auto ByteOffset = GetImplicitParameterOffset(MFI, GRID_DIM);
Don’t use auto here

> +      return LowerImplicitParameter(DAG, VT, DL, ByteOffset / 4);
> +    }
> 
>     case Intrinsic::r600_read_tgid_x:
>       return CreateLiveInRegister(DAG, &AMDGPU::R600_TReg32RegClass,
> diff --git a/lib/Target/AMDGPU/SIISelLowering.cpp b/lib/Target/AMDGPU/SIISelLowering.cpp
> index 32f452e..9940f6f 100644
> --- a/lib/Target/AMDGPU/SIISelLowering.cpp
> +++ b/lib/Target/AMDGPU/SIISelLowering.cpp
> @@ -926,6 +926,7 @@ SDValue SITargetLowering::copyToM0(SelectionDAG &DAG, SDValue Chain, SDLoc DL,
> SDValue SITargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
>                                                   SelectionDAG &DAG) const {
>   MachineFunction &MF = DAG.getMachineFunction();
> +  auto MFI = MF.getInfo<SIMachineFunctionInfo>();
>   const SIRegisterInfo *TRI =
>       static_cast<const SIRegisterInfo *>(Subtarget->getRegisterInfo());
> 
> @@ -964,8 +965,7 @@ SDValue SITargetLowering::LowerINTRINSIC_WO_CHAIN(SDValue Op,
> 
>   case Intrinsic::AMDGPU_read_workdim:
>     return LowerParameter(DAG, VT, VT, DL, DAG.getEntryNode(),
> -                          MF.getInfo<SIMachineFunctionInfo>()->ABIArgOffset,
> -                          false);
> +                          GetImplicitParameterOffset(MFI, GRID_DIM), false);
> 
>   case Intrinsic::r600_read_tgid_x:
>     return CreateLiveInRegister(DAG, &AMDGPU::SReg_32RegClass,
> -- 
> 2.4.2

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150708/8891be74/attachment.html>


More information about the llvm-commits mailing list