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

Tom Stellard tom at stellard.net
Thu Jul 9 17:06:53 PDT 2015


Committed as 241861, thanks!

-Tom

On Wed, Jul 08, 2015 at 08:04:18PM +0200, Zoltan Gilian wrote:
> ---
>  lib/Target/AMDGPU/AMDGPUISelLowering.cpp | 12 ++++++++++++
>  lib/Target/AMDGPU/AMDGPUISelLowering.h   | 10 ++++++++++
>  lib/Target/AMDGPU/R600ISelLowering.cpp   |  6 ++++--
>  lib/Target/AMDGPU/SIISelLowering.cpp     |  4 ++--
>  4 files changed, 28 insertions(+), 4 deletions(-)
> 
> diff --git a/lib/Target/AMDGPU/AMDGPUISelLowering.cpp b/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
> index 9479d23..c65abf9 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);
>  }
>  
> +uint32_t AMDGPUTargetLowering::getImplicitParameterOffset(
> +    const AMDGPUMachineFunction *MFI, const ImplicitParameter Param) const {
> +  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..27ceaf1 100644
> --- a/lib/Target/AMDGPU/AMDGPUISelLowering.h
> +++ b/lib/Target/AMDGPU/AMDGPUISelLowering.h
> @@ -207,6 +207,16 @@ public:
>    virtual SDValue CreateLiveInRegister(SelectionDAG &DAG,
>                                         const TargetRegisterClass *RC,
>                                         unsigned Reg, EVT VT) const;
> +
> +  enum ImplicitParameter {
> +    GRID_DIM,
> +    GRID_OFFSET
> +  };
> +
> +  /// \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..9552c72 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: {
> +      uint32_t ByteOffset = getImplicitParameterOffset(MFI, GRID_DIM);
> +      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..f73e0ca 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
> 



More information about the llvm-commits mailing list