diff options
| author | Rahul Joshi <rjoshi@nvidia.com> | 2025-02-12 08:19:30 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-12 08:19:30 -0800 |
| commit | bee9664970d51df3f4e1d298d1bcb95bba364e17 (patch) | |
| tree | 310d1323fe2cad0643abd7b4e94319a4252c487f /llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp | |
| parent | 165a3d6a9b164dc98a70596fa8117acf3de20254 (diff) | |
[TableGen] Emit OpName as an enum class instead of a namespace (#125313)
- Change InstrInfoEmitter to emit OpName as an enum class
instead of an anonymous enum in the OpName namespace.
- This will help clearly distinguish between values that are
OpNames vs just operand indices and should help avoid
bugs due to confusion between the two.
- Rename OpName::OPERAND_LAST to NUM_OPERAND_NAMES.
- Emit declaration of getOperandIdx() along with the OpName
enum so it doesn't have to be repeated in various headers.
- Also updated AMDGPU, RISCV, and WebAssembly backends
to conform to the new definition of OpName (mostly
mechanical changes).
Diffstat (limited to 'llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp | 40 |
1 files changed, 21 insertions, 19 deletions
diff --git a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp index 02ad08740049..308ab8e3b82c 100644 --- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp +++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp @@ -75,8 +75,8 @@ addOperand(MCInst &Inst, const MCOperand& Opnd) { } static int insertNamedMCOperand(MCInst &MI, const MCOperand &Op, - uint16_t NameIdx) { - int OpIdx = AMDGPU::getNamedOperandIdx(MI.getOpcode(), NameIdx); + AMDGPU::OpName Name) { + int OpIdx = AMDGPU::getNamedOperandIdx(MI.getOpcode(), Name); if (OpIdx != -1) { auto *I = MI.begin(); std::advance(I, OpIdx); @@ -423,10 +423,11 @@ static DecodeStatus decodeAVLdSt(MCInst &Inst, unsigned Imm, // are also tied. unsigned Opc = Inst.getOpcode(); uint64_t TSFlags = DAsm->getMCII()->get(Opc).TSFlags; - uint16_t DataNameIdx = (TSFlags & SIInstrFlags::DS) ? AMDGPU::OpName::data0 - : AMDGPU::OpName::vdata; + AMDGPU::OpName DataName = (TSFlags & SIInstrFlags::DS) + ? AMDGPU::OpName::data0 + : AMDGPU::OpName::vdata; const MCRegisterInfo *MRI = DAsm->getContext().getRegisterInfo(); - int DataIdx = AMDGPU::getNamedOperandIdx(Opc, DataNameIdx); + int DataIdx = AMDGPU::getNamedOperandIdx(Opc, DataName); if ((int)Inst.getNumOperands() == DataIdx) { int DstIdx = AMDGPU::getNamedOperandIdx(Opc, AMDGPU::OpName::vdst); if (IsAGPROperand(Inst, DstIdx, MRI)) @@ -922,9 +923,9 @@ static VOPModifiers collectVOPModifiers(const MCInst &MI, bool IsVOP3P = false) { VOPModifiers Modifiers; unsigned Opc = MI.getOpcode(); - const int ModOps[] = {AMDGPU::OpName::src0_modifiers, - AMDGPU::OpName::src1_modifiers, - AMDGPU::OpName::src2_modifiers}; + const AMDGPU::OpName ModOps[] = {AMDGPU::OpName::src0_modifiers, + AMDGPU::OpName::src1_modifiers, + AMDGPU::OpName::src2_modifiers}; for (int J = 0; J < 3; ++J) { int OpIdx = AMDGPU::getNamedOperandIdx(Opc, ModOps[J]); if (OpIdx == -1) @@ -951,15 +952,15 @@ void AMDGPUDisassembler::convertTrue16OpSel(MCInst &MI) const { const unsigned Opc = MI.getOpcode(); const MCRegisterClass &ConversionRC = MRI.getRegClass(AMDGPU::VGPR_16RegClassID); - constexpr std::array<std::tuple<int, int, unsigned>, 4> OpAndOpMods = { - {{AMDGPU::OpName::src0, AMDGPU::OpName::src0_modifiers, - SISrcMods::OP_SEL_0}, - {AMDGPU::OpName::src1, AMDGPU::OpName::src1_modifiers, - SISrcMods::OP_SEL_0}, - {AMDGPU::OpName::src2, AMDGPU::OpName::src2_modifiers, - SISrcMods::OP_SEL_0}, - {AMDGPU::OpName::vdst, AMDGPU::OpName::src0_modifiers, - SISrcMods::DST_OP_SEL}}}; + constexpr std::array<std::tuple<AMDGPU::OpName, AMDGPU::OpName, unsigned>, 4> + OpAndOpMods = {{{AMDGPU::OpName::src0, AMDGPU::OpName::src0_modifiers, + SISrcMods::OP_SEL_0}, + {AMDGPU::OpName::src1, AMDGPU::OpName::src1_modifiers, + SISrcMods::OP_SEL_0}, + {AMDGPU::OpName::src2, AMDGPU::OpName::src2_modifiers, + SISrcMods::OP_SEL_0}, + {AMDGPU::OpName::vdst, AMDGPU::OpName::src0_modifiers, + SISrcMods::DST_OP_SEL}}}; for (const auto &[OpName, OpModsName, OpSelMask] : OpAndOpMods) { int OpIdx = AMDGPU::getNamedOperandIdx(Opc, OpName); int OpModsIdx = AMDGPU::getNamedOperandIdx(Opc, OpModsName); @@ -1069,8 +1070,9 @@ void AMDGPUDisassembler::convertMIMGInst(MCInst &MI) const { AMDGPU::OpName::vdata); int VAddr0Idx = AMDGPU::getNamedOperandIdx(MI.getOpcode(), AMDGPU::OpName::vaddr0); - int RsrcOpName = (TSFlags & SIInstrFlags::MIMG) ? AMDGPU::OpName::srsrc - : AMDGPU::OpName::rsrc; + AMDGPU::OpName RsrcOpName = (TSFlags & SIInstrFlags::MIMG) + ? AMDGPU::OpName::srsrc + : AMDGPU::OpName::rsrc; int RsrcIdx = AMDGPU::getNamedOperandIdx(MI.getOpcode(), RsrcOpName); int DMaskIdx = AMDGPU::getNamedOperandIdx(MI.getOpcode(), AMDGPU::OpName::dmask); |
