Skip to content

Commit 900c517

Browse files
authored
[AMDGPU] TableGen-erate SDNode descriptions (#168248)
This allows SDNodes to be validated against their expected type profiles and reduces the number of changes required to add a new node. Autogenerated node names start with "AMDGPUISD::", hence the changes in the tests. The few nodes defined in R600.td are *not* imported because TableGen processes AMDGPU.td that doesn't include R600.td. Ideally, we would have two sets of nodes, but that would require careful reorganization of td files since some nodes are shared between AMDGPU/R600. Not sure if it something worth looking into. Some nodes fail validation, those are listed in `AMDGPUSelectionDAGInfo::verifyTargetNode()`. Part of #119709. Pull Request: llvm/llvm-project#168248
1 parent 6d5f87f commit 900c517

13 files changed

+135
-413
lines changed

llvm/lib/Target/AMDGPU/AMDGPUISelDAGToDAG.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#ifndef LLVM_LIB_TARGET_AMDGPU_AMDGPUISELDAGTODAG_H
1515
#define LLVM_LIB_TARGET_AMDGPU_AMDGPUISELDAGTODAG_H
1616

17+
#include "AMDGPUSelectionDAGInfo.h"
1718
#include "GCNSubtarget.h"
1819
#include "SIMachineFunctionInfo.h"
1920
#include "SIModeRegisterDefaults.h"

llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp

Lines changed: 1 addition & 163 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
#include "AMDGPUInstrInfo.h"
1818
#include "AMDGPUMachineFunction.h"
1919
#include "AMDGPUMemoryUtils.h"
20+
#include "AMDGPUSelectionDAGInfo.h"
2021
#include "SIMachineFunctionInfo.h"
2122
#include "llvm/CodeGen/Analysis.h"
2223
#include "llvm/CodeGen/GlobalISel/GISelValueTracking.h"
@@ -5650,169 +5651,6 @@ uint32_t AMDGPUTargetLowering::getImplicitParameterOffset(
56505651
return getImplicitParameterOffset(MFI->getExplicitKernArgSize(), Param);
56515652
}
56525653

5653-
#define NODE_NAME_CASE(node) case AMDGPUISD::node: return #node;
5654-
5655-
const char* AMDGPUTargetLowering::getTargetNodeName(unsigned Opcode) const {
5656-
switch ((AMDGPUISD::NodeType)Opcode) {
5657-
case AMDGPUISD::FIRST_NUMBER: break;
5658-
// AMDIL DAG nodes
5659-
NODE_NAME_CASE(BRANCH_COND);
5660-
5661-
// AMDGPU DAG nodes
5662-
NODE_NAME_CASE(IF)
5663-
NODE_NAME_CASE(ELSE)
5664-
NODE_NAME_CASE(LOOP)
5665-
NODE_NAME_CASE(CALL)
5666-
NODE_NAME_CASE(TC_RETURN)
5667-
NODE_NAME_CASE(TC_RETURN_GFX)
5668-
NODE_NAME_CASE(TC_RETURN_GFX_WholeWave)
5669-
NODE_NAME_CASE(TC_RETURN_CHAIN)
5670-
NODE_NAME_CASE(TC_RETURN_CHAIN_DVGPR)
5671-
NODE_NAME_CASE(TRAP)
5672-
NODE_NAME_CASE(RET_GLUE)
5673-
NODE_NAME_CASE(WAVE_ADDRESS)
5674-
NODE_NAME_CASE(RETURN_TO_EPILOG)
5675-
NODE_NAME_CASE(ENDPGM)
5676-
NODE_NAME_CASE(ENDPGM_TRAP)
5677-
NODE_NAME_CASE(SIMULATED_TRAP)
5678-
NODE_NAME_CASE(DWORDADDR)
5679-
NODE_NAME_CASE(FRACT)
5680-
NODE_NAME_CASE(SETCC)
5681-
NODE_NAME_CASE(DENORM_MODE)
5682-
NODE_NAME_CASE(FMA_W_CHAIN)
5683-
NODE_NAME_CASE(FMUL_W_CHAIN)
5684-
NODE_NAME_CASE(CLAMP)
5685-
NODE_NAME_CASE(COS_HW)
5686-
NODE_NAME_CASE(SIN_HW)
5687-
NODE_NAME_CASE(FMAX_LEGACY)
5688-
NODE_NAME_CASE(FMIN_LEGACY)
5689-
NODE_NAME_CASE(FMAX3)
5690-
NODE_NAME_CASE(SMAX3)
5691-
NODE_NAME_CASE(UMAX3)
5692-
NODE_NAME_CASE(FMIN3)
5693-
NODE_NAME_CASE(SMIN3)
5694-
NODE_NAME_CASE(UMIN3)
5695-
NODE_NAME_CASE(FMED3)
5696-
NODE_NAME_CASE(SMED3)
5697-
NODE_NAME_CASE(UMED3)
5698-
NODE_NAME_CASE(FMAXIMUM3)
5699-
NODE_NAME_CASE(FMINIMUM3)
5700-
NODE_NAME_CASE(FDOT2)
5701-
NODE_NAME_CASE(URECIP)
5702-
NODE_NAME_CASE(DIV_SCALE)
5703-
NODE_NAME_CASE(DIV_FMAS)
5704-
NODE_NAME_CASE(DIV_FIXUP)
5705-
NODE_NAME_CASE(FMAD_FTZ)
5706-
NODE_NAME_CASE(RCP)
5707-
NODE_NAME_CASE(RSQ)
5708-
NODE_NAME_CASE(RCP_LEGACY)
5709-
NODE_NAME_CASE(RCP_IFLAG)
5710-
NODE_NAME_CASE(LOG)
5711-
NODE_NAME_CASE(EXP)
5712-
NODE_NAME_CASE(FMUL_LEGACY)
5713-
NODE_NAME_CASE(RSQ_CLAMP)
5714-
NODE_NAME_CASE(FP_CLASS)
5715-
NODE_NAME_CASE(DOT4)
5716-
NODE_NAME_CASE(CARRY)
5717-
NODE_NAME_CASE(BORROW)
5718-
NODE_NAME_CASE(BFE_U32)
5719-
NODE_NAME_CASE(BFE_I32)
5720-
NODE_NAME_CASE(BFI)
5721-
NODE_NAME_CASE(BFM)
5722-
NODE_NAME_CASE(FFBH_U32)
5723-
NODE_NAME_CASE(FFBH_I32)
5724-
NODE_NAME_CASE(FFBL_B32)
5725-
NODE_NAME_CASE(MUL_U24)
5726-
NODE_NAME_CASE(MUL_I24)
5727-
NODE_NAME_CASE(MULHI_U24)
5728-
NODE_NAME_CASE(MULHI_I24)
5729-
NODE_NAME_CASE(MAD_U24)
5730-
NODE_NAME_CASE(MAD_I24)
5731-
NODE_NAME_CASE(MAD_I64_I32)
5732-
NODE_NAME_CASE(MAD_U64_U32)
5733-
NODE_NAME_CASE(PERM)
5734-
NODE_NAME_CASE(TEXTURE_FETCH)
5735-
NODE_NAME_CASE(R600_EXPORT)
5736-
NODE_NAME_CASE(CONST_ADDRESS)
5737-
NODE_NAME_CASE(REGISTER_LOAD)
5738-
NODE_NAME_CASE(REGISTER_STORE)
5739-
NODE_NAME_CASE(CVT_F32_UBYTE0)
5740-
NODE_NAME_CASE(CVT_F32_UBYTE1)
5741-
NODE_NAME_CASE(CVT_F32_UBYTE2)
5742-
NODE_NAME_CASE(CVT_F32_UBYTE3)
5743-
NODE_NAME_CASE(CVT_PKRTZ_F16_F32)
5744-
NODE_NAME_CASE(CVT_PKNORM_I16_F32)
5745-
NODE_NAME_CASE(CVT_PKNORM_U16_F32)
5746-
NODE_NAME_CASE(CVT_PK_I16_I32)
5747-
NODE_NAME_CASE(CVT_PK_U16_U32)
5748-
NODE_NAME_CASE(FP_TO_FP16)
5749-
NODE_NAME_CASE(BUILD_VERTICAL_VECTOR)
5750-
NODE_NAME_CASE(CONST_DATA_PTR)
5751-
NODE_NAME_CASE(PC_ADD_REL_OFFSET)
5752-
NODE_NAME_CASE(PC_ADD_REL_OFFSET64)
5753-
NODE_NAME_CASE(LDS)
5754-
NODE_NAME_CASE(DUMMY_CHAIN)
5755-
NODE_NAME_CASE(LOAD_D16_HI)
5756-
NODE_NAME_CASE(LOAD_D16_LO)
5757-
NODE_NAME_CASE(LOAD_D16_HI_I8)
5758-
NODE_NAME_CASE(LOAD_D16_HI_U8)
5759-
NODE_NAME_CASE(LOAD_D16_LO_I8)
5760-
NODE_NAME_CASE(LOAD_D16_LO_U8)
5761-
NODE_NAME_CASE(STORE_MSKOR)
5762-
NODE_NAME_CASE(TBUFFER_STORE_FORMAT)
5763-
NODE_NAME_CASE(TBUFFER_STORE_FORMAT_D16)
5764-
NODE_NAME_CASE(TBUFFER_LOAD_FORMAT)
5765-
NODE_NAME_CASE(TBUFFER_LOAD_FORMAT_D16)
5766-
NODE_NAME_CASE(DS_ORDERED_COUNT)
5767-
NODE_NAME_CASE(ATOMIC_CMP_SWAP)
5768-
NODE_NAME_CASE(BUFFER_LOAD)
5769-
NODE_NAME_CASE(BUFFER_LOAD_UBYTE)
5770-
NODE_NAME_CASE(BUFFER_LOAD_USHORT)
5771-
NODE_NAME_CASE(BUFFER_LOAD_BYTE)
5772-
NODE_NAME_CASE(BUFFER_LOAD_SHORT)
5773-
NODE_NAME_CASE(BUFFER_LOAD_TFE)
5774-
NODE_NAME_CASE(BUFFER_LOAD_UBYTE_TFE)
5775-
NODE_NAME_CASE(BUFFER_LOAD_USHORT_TFE)
5776-
NODE_NAME_CASE(BUFFER_LOAD_BYTE_TFE)
5777-
NODE_NAME_CASE(BUFFER_LOAD_SHORT_TFE)
5778-
NODE_NAME_CASE(BUFFER_LOAD_FORMAT)
5779-
NODE_NAME_CASE(BUFFER_LOAD_FORMAT_TFE)
5780-
NODE_NAME_CASE(BUFFER_LOAD_FORMAT_D16)
5781-
NODE_NAME_CASE(SBUFFER_LOAD)
5782-
NODE_NAME_CASE(SBUFFER_LOAD_BYTE)
5783-
NODE_NAME_CASE(SBUFFER_LOAD_UBYTE)
5784-
NODE_NAME_CASE(SBUFFER_LOAD_SHORT)
5785-
NODE_NAME_CASE(SBUFFER_LOAD_USHORT)
5786-
NODE_NAME_CASE(SBUFFER_PREFETCH_DATA)
5787-
NODE_NAME_CASE(BUFFER_STORE)
5788-
NODE_NAME_CASE(BUFFER_STORE_BYTE)
5789-
NODE_NAME_CASE(BUFFER_STORE_SHORT)
5790-
NODE_NAME_CASE(BUFFER_STORE_FORMAT)
5791-
NODE_NAME_CASE(BUFFER_STORE_FORMAT_D16)
5792-
NODE_NAME_CASE(BUFFER_ATOMIC_SWAP)
5793-
NODE_NAME_CASE(BUFFER_ATOMIC_ADD)
5794-
NODE_NAME_CASE(BUFFER_ATOMIC_SUB)
5795-
NODE_NAME_CASE(BUFFER_ATOMIC_SMIN)
5796-
NODE_NAME_CASE(BUFFER_ATOMIC_UMIN)
5797-
NODE_NAME_CASE(BUFFER_ATOMIC_SMAX)
5798-
NODE_NAME_CASE(BUFFER_ATOMIC_UMAX)
5799-
NODE_NAME_CASE(BUFFER_ATOMIC_AND)
5800-
NODE_NAME_CASE(BUFFER_ATOMIC_OR)
5801-
NODE_NAME_CASE(BUFFER_ATOMIC_XOR)
5802-
NODE_NAME_CASE(BUFFER_ATOMIC_INC)
5803-
NODE_NAME_CASE(BUFFER_ATOMIC_DEC)
5804-
NODE_NAME_CASE(BUFFER_ATOMIC_CMPSWAP)
5805-
NODE_NAME_CASE(BUFFER_ATOMIC_CSUB)
5806-
NODE_NAME_CASE(BUFFER_ATOMIC_FADD)
5807-
NODE_NAME_CASE(BUFFER_ATOMIC_FMIN)
5808-
NODE_NAME_CASE(BUFFER_ATOMIC_FMAX)
5809-
NODE_NAME_CASE(BUFFER_ATOMIC_COND_SUB_U32)
5810-
NODE_NAME_CASE(WHOLE_WAVE_SETUP)
5811-
NODE_NAME_CASE(WHOLE_WAVE_RETURN)
5812-
}
5813-
return nullptr;
5814-
}
5815-
58165654
SDValue AMDGPUTargetLowering::getSqrtEstimate(SDValue Operand,
58175655
SelectionDAG &DAG, int Enabled,
58185656
int &RefinementSteps,

0 commit comments

Comments
 (0)