[llvm] AMDGPU: Remove most manual AVLdSt decoder code (PR #157861)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 10 06:46:05 PDT 2025
https://github.com/arsenm created https://github.com/llvm/llvm-project/pull/157861
This was additional hacking around using incorrect register class
constraints for paired data operands. I'm not really sure why we
need any of what's left. In particular the IS_VGPR special case
seems backwards from how the encoding works.
>From 7d5c6d4a6a35d008cd6a57fa98d8720ed57df85f Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Wed, 10 Sep 2025 22:04:17 +0900
Subject: [PATCH] AMDGPU: Remove most manual AVLdSt decoder code
This was additional hacking around using incorrect register class
constraints for paired data operands. I'm not really sure why we
need any of what's left. In particular the IS_VGPR special case
seems backwards from how the encoding works.
---
.../Disassembler/AMDGPUDisassembler.cpp | 42 -------------------
1 file changed, 42 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
index 6f6039bf4ec21..d3db1b7394675 100644
--- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
+++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp
@@ -368,51 +368,9 @@ static DecodeStatus decodeOperandVOPDDstY(MCInst &Inst, unsigned Val,
return addOperand(Inst, DAsm->decodeVOPDDstYOp(Inst, Val));
}
-static bool IsAGPROperand(const MCInst &Inst, int OpIdx,
- const MCRegisterInfo *MRI) {
- if (OpIdx < 0)
- return false;
-
- const MCOperand &Op = Inst.getOperand(OpIdx);
- if (!Op.isReg())
- return false;
-
- MCRegister Sub = MRI->getSubReg(Op.getReg(), AMDGPU::sub0);
- auto Reg = Sub ? Sub : Op.getReg();
- return Reg >= AMDGPU::AGPR0 && Reg <= AMDGPU::AGPR255;
-}
-
static DecodeStatus decodeAVLdSt(MCInst &Inst, unsigned Imm, unsigned Opw,
const MCDisassembler *Decoder) {
const auto *DAsm = static_cast<const AMDGPUDisassembler *>(Decoder);
- if (!DAsm->isGFX90A()) {
- Imm &= 511;
- } else {
- // If atomic has both vdata and vdst their register classes are tied.
- // The bit is decoded along with the vdst, first operand. We need to
- // change register class to AGPR if vdst was AGPR.
- // If a DS instruction has both data0 and data1 their register classes
- // are also tied.
- unsigned Opc = Inst.getOpcode();
- uint64_t TSFlags = DAsm->getMCII()->get(Opc).TSFlags;
- AMDGPU::OpName DataName = (TSFlags & SIInstrFlags::DS)
- ? AMDGPU::OpName::data0
- : AMDGPU::OpName::vdata;
- const MCRegisterInfo *MRI = DAsm->getContext().getRegisterInfo();
- int DataIdx = AMDGPU::getNamedOperandIdx(Opc, DataName);
- if ((int)Inst.getNumOperands() == DataIdx) {
- int DstIdx = AMDGPU::getNamedOperandIdx(Opc, AMDGPU::OpName::vdst);
- if (IsAGPROperand(Inst, DstIdx, MRI))
- Imm |= 512;
- }
-
- if (TSFlags & SIInstrFlags::DS) {
- int Data2Idx = AMDGPU::getNamedOperandIdx(Opc, AMDGPU::OpName::data1);
- if ((int)Inst.getNumOperands() == Data2Idx &&
- IsAGPROperand(Inst, DataIdx, MRI))
- Imm |= 512;
- }
- }
return addOperand(Inst, DAsm->decodeSrcOp(Opw, Imm | 256));
}
More information about the llvm-commits
mailing list