[llvm] AMDGPU: Remove most manual AVLdSt decoder code (PR #157861)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 10 06:46:42 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-amdgpu
Author: Matt Arsenault (arsenm)
<details>
<summary>Changes</summary>
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.
---
Full diff: https://github.com/llvm/llvm-project/pull/157861.diff
1 Files Affected:
- (modified) llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp (-42)
``````````diff
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));
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/157861
More information about the llvm-commits
mailing list