Skip to content

Commit 2e81ac2

Browse files
authored
[AMDGPU][NFC] Simplify AGPR/VGPR load/store operand definitions. (#79289)
Part of <#62629>.
1 parent 31f41f0 commit 2e81ac2

File tree

2 files changed

+18
-59
lines changed

2 files changed

+18
-59
lines changed

llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp

Lines changed: 10 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -365,9 +365,9 @@ static bool IsAGPROperand(const MCInst &Inst, int OpIdx,
365365
return Reg >= AMDGPU::AGPR0 && Reg <= AMDGPU::AGPR255;
366366
}
367367

368-
static DecodeStatus decodeOperand_AVLdSt_Any(MCInst &Inst, unsigned Imm,
369-
AMDGPUDisassembler::OpWidthTy Opw,
370-
const MCDisassembler *Decoder) {
368+
static DecodeStatus decodeAVLdSt(MCInst &Inst, unsigned Imm,
369+
AMDGPUDisassembler::OpWidthTy Opw,
370+
const MCDisassembler *Decoder) {
371371
auto DAsm = static_cast<const AMDGPUDisassembler*>(Decoder);
372372
if (!DAsm->isGFX90A()) {
373373
Imm &= 511;
@@ -399,6 +399,13 @@ static DecodeStatus decodeOperand_AVLdSt_Any(MCInst &Inst, unsigned Imm,
399399
return addOperand(Inst, DAsm->decodeSrcOp(Opw, Imm | 256));
400400
}
401401

402+
template <AMDGPUDisassembler::OpWidthTy Opw>
403+
static DecodeStatus decodeAVLdSt(MCInst &Inst, unsigned Imm,
404+
uint64_t /* Addr */,
405+
const MCDisassembler *Decoder) {
406+
return decodeAVLdSt(Inst, Imm, Opw, Decoder);
407+
}
408+
402409
static DecodeStatus decodeOperand_VSrc_f64(MCInst &Inst, unsigned Imm,
403410
uint64_t Addr,
404411
const MCDisassembler *Decoder) {
@@ -408,41 +415,6 @@ static DecodeStatus decodeOperand_VSrc_f64(MCInst &Inst, unsigned Imm,
408415
Inst, DAsm->decodeSrcOp(AMDGPUDisassembler::OPW64, Imm, false, 64, true));
409416
}
410417

411-
static DecodeStatus
412-
DecodeAVLdSt_32RegisterClass(MCInst &Inst, unsigned Imm, uint64_t Addr,
413-
const MCDisassembler *Decoder) {
414-
return decodeOperand_AVLdSt_Any(Inst, Imm,
415-
AMDGPUDisassembler::OPW32, Decoder);
416-
}
417-
418-
static DecodeStatus
419-
DecodeAVLdSt_64RegisterClass(MCInst &Inst, unsigned Imm, uint64_t Addr,
420-
const MCDisassembler *Decoder) {
421-
return decodeOperand_AVLdSt_Any(Inst, Imm,
422-
AMDGPUDisassembler::OPW64, Decoder);
423-
}
424-
425-
static DecodeStatus
426-
DecodeAVLdSt_96RegisterClass(MCInst &Inst, unsigned Imm, uint64_t Addr,
427-
const MCDisassembler *Decoder) {
428-
return decodeOperand_AVLdSt_Any(Inst, Imm,
429-
AMDGPUDisassembler::OPW96, Decoder);
430-
}
431-
432-
static DecodeStatus
433-
DecodeAVLdSt_128RegisterClass(MCInst &Inst, unsigned Imm, uint64_t Addr,
434-
const MCDisassembler *Decoder) {
435-
return decodeOperand_AVLdSt_Any(Inst, Imm,
436-
AMDGPUDisassembler::OPW128, Decoder);
437-
}
438-
439-
static DecodeStatus
440-
DecodeAVLdSt_160RegisterClass(MCInst &Inst, unsigned Imm, uint64_t Addr,
441-
const MCDisassembler *Decoder) {
442-
return decodeOperand_AVLdSt_Any(Inst, Imm, AMDGPUDisassembler::OPW160,
443-
Decoder);
444-
}
445-
446418
#define DECODE_SDWA(DecName) \
447419
DECODE_OPERAND(decodeSDWA##DecName, decodeSDWA##DecName)
448420

llvm/lib/Target/AMDGPU/SIRegisterInfo.td

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1384,30 +1384,17 @@ def AVDst_512 : RegisterOperand<AV_512> {
13841384
let EncoderMethod = "getAVOperandEncoding";
13851385
}
13861386

1387-
def AVLdSt_32 : RegisterOperand<AV_32> {
1388-
let DecoderMethod = "DecodeAVLdSt_32RegisterClass";
1387+
class AVLdStOperand<RegisterClass regClass, string width>
1388+
: RegisterOperand<regClass> {
1389+
let DecoderMethod = "decodeAVLdSt<AMDGPUDisassembler::" # width # ">";
13891390
let EncoderMethod = "getAVOperandEncoding";
13901391
}
13911392

1392-
def AVLdSt_64 : RegisterOperand<AV_64> {
1393-
let DecoderMethod = "DecodeAVLdSt_64RegisterClass";
1394-
let EncoderMethod = "getAVOperandEncoding";
1395-
}
1396-
1397-
def AVLdSt_96 : RegisterOperand<AV_96> {
1398-
let DecoderMethod = "DecodeAVLdSt_96RegisterClass";
1399-
let EncoderMethod = "getAVOperandEncoding";
1400-
}
1401-
1402-
def AVLdSt_128 : RegisterOperand<AV_128> {
1403-
let DecoderMethod = "DecodeAVLdSt_128RegisterClass";
1404-
let EncoderMethod = "getAVOperandEncoding";
1405-
}
1406-
1407-
def AVLdSt_160 : RegisterOperand<AV_160> {
1408-
let DecoderMethod = "DecodeAVLdSt_160RegisterClass";
1409-
let EncoderMethod = "getAVOperandEncoding";
1410-
}
1393+
def AVLdSt_32 : AVLdStOperand<AV_32, "OPW32">;
1394+
def AVLdSt_64 : AVLdStOperand<AV_64, "OPW64">;
1395+
def AVLdSt_96 : AVLdStOperand<AV_96, "OPW96">;
1396+
def AVLdSt_128 : AVLdStOperand<AV_128, "OPW128">;
1397+
def AVLdSt_160 : AVLdStOperand<AV_160, "OPW160">;
14111398

14121399
//===----------------------------------------------------------------------===//
14131400
// ACSrc_* Operands with an AGPR or an inline constant

0 commit comments

Comments
 (0)