https://github.com/easyonaadit updated https://github.com/llvm/llvm-project/pull/174997
>From e9fed2f31f84c2afa97ca9ba61b2ff8889d58a7a Mon Sep 17 00:00:00 2001 From: Christudasan Devadasan <[email protected]> Date: Wed, 7 Jan 2026 09:34:03 +0000 Subject: [PATCH 1/4] [AMDGPU] Make getNumSubRegsForSpillOp externally available (NFC). --- llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp | 6 +++--- llvm/lib/Target/AMDGPU/SIRegisterInfo.h | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp b/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp index 2ab13772f2231..6eb1f4194bf73 100644 --- a/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp @@ -1145,8 +1145,8 @@ SIRegisterInfo::getCrossCopyRegClass(const TargetRegisterClass *RC) const { return RC == &AMDGPU::SCC_CLASSRegClass ? &AMDGPU::SReg_32RegClass : RC; } -static unsigned getNumSubRegsForSpillOp(const MachineInstr &MI, - const SIInstrInfo *TII) { +unsigned SIRegisterInfo::getNumSubRegsForSpillOp(const MachineInstr &MI) const { + const SIInstrInfo *TII = ST.getInstrInfo(); unsigned Op = MI.getOpcode(); switch (Op) { @@ -2741,7 +2741,7 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI, *MBB, MI, DL, Opc, Index, VData->getReg(), VData->isKill(), FrameReg, TII->getNamedOperand(*MI, AMDGPU::OpName::offset)->getImm(), *MI->memoperands_begin(), RS, nullptr, NeedsCFI); - MFI->addToSpilledVGPRs(getNumSubRegsForSpillOp(*MI, TII)); + MFI->addToSpilledVGPRs(getNumSubRegsForSpillOp(*MI)); if (IsWWMRegSpill) TII->restoreExec(*MF, *MBB, MI, DL, MFI->getSGPRForEXECCopy()); diff --git a/llvm/lib/Target/AMDGPU/SIRegisterInfo.h b/llvm/lib/Target/AMDGPU/SIRegisterInfo.h index 1eb9a88b819ed..b0cc857cd9a8a 100644 --- a/llvm/lib/Target/AMDGPU/SIRegisterInfo.h +++ b/llvm/lib/Target/AMDGPU/SIRegisterInfo.h @@ -176,6 +176,8 @@ class SIRegisterInfo final : public AMDGPUGenRegisterInfo { const TargetRegisterClass * getCrossCopyRegClass(const TargetRegisterClass *RC) const override; + unsigned getNumSubRegsForSpillOp(const MachineInstr &MI) const; + const TargetRegisterClass * getRegClassForBlockOp(const MachineFunction &MF) const { return &AMDGPU::VReg_1024RegClass; >From 09d5fe573a7bbe9a4624fed1b3804174929b6f84 Mon Sep 17 00:00:00 2001 From: Christudasan Devadasan <[email protected]> Date: Mon, 12 Jan 2026 12:50:39 +0000 Subject: [PATCH 2/4] moved the implementation to SIInstrInfo. --- llvm/lib/Target/AMDGPU/SIInstrInfo.cpp | 190 +++++++++++++++++++++ llvm/lib/Target/AMDGPU/SIInstrInfo.h | 3 + llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp | 191 +--------------------- llvm/lib/Target/AMDGPU/SIRegisterInfo.h | 2 - 4 files changed, 194 insertions(+), 192 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp index 5acbadcbab471..9d1ea56bf78c4 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -6475,6 +6475,196 @@ static unsigned VOP3OpIdxToSrcN(const MachineInstr &MI, unsigned OpIdx) { return UINT_MAX; } +unsigned SIInstrInfo::getNumSubRegsForSpillOp(const MachineInstr &MI) const { + const SIInstrInfo *TII = ST.getInstrInfo(); + + unsigned Op = MI.getOpcode(); + switch (Op) { + case AMDGPU::SI_BLOCK_SPILL_V1024_SAVE: + case AMDGPU::SI_BLOCK_SPILL_V1024_CFI_SAVE: + case AMDGPU::SI_BLOCK_SPILL_V1024_RESTORE: + // FIXME: This assumes the mask is statically known and not computed at + // runtime. However, some ABIs may want to compute the mask dynamically and + // this will need to be updated. + return llvm::popcount( + (uint64_t)TII->getNamedOperand(MI, AMDGPU::OpName::mask)->getImm()); + case AMDGPU::SI_SPILL_S1024_SAVE: + case AMDGPU::SI_SPILL_S1024_CFI_SAVE: + case AMDGPU::SI_SPILL_S1024_RESTORE: + case AMDGPU::SI_SPILL_V1024_SAVE: + case AMDGPU::SI_SPILL_V1024_CFI_SAVE: + case AMDGPU::SI_SPILL_V1024_RESTORE: + case AMDGPU::SI_SPILL_A1024_SAVE: + case AMDGPU::SI_SPILL_A1024_CFI_SAVE: + case AMDGPU::SI_SPILL_A1024_RESTORE: + case AMDGPU::SI_SPILL_AV1024_SAVE: + case AMDGPU::SI_SPILL_AV1024_CFI_SAVE: + case AMDGPU::SI_SPILL_AV1024_RESTORE: + return 32; + case AMDGPU::SI_SPILL_S512_SAVE: + case AMDGPU::SI_SPILL_S512_CFI_SAVE: + case AMDGPU::SI_SPILL_S512_RESTORE: + case AMDGPU::SI_SPILL_V512_SAVE: + case AMDGPU::SI_SPILL_V512_CFI_SAVE: + case AMDGPU::SI_SPILL_V512_RESTORE: + case AMDGPU::SI_SPILL_A512_SAVE: + case AMDGPU::SI_SPILL_A512_CFI_SAVE: + case AMDGPU::SI_SPILL_A512_RESTORE: + case AMDGPU::SI_SPILL_AV512_SAVE: + case AMDGPU::SI_SPILL_AV512_CFI_SAVE: + case AMDGPU::SI_SPILL_AV512_RESTORE: + return 16; + case AMDGPU::SI_SPILL_S384_SAVE: + case AMDGPU::SI_SPILL_S384_RESTORE: + case AMDGPU::SI_SPILL_V384_SAVE: + case AMDGPU::SI_SPILL_V384_RESTORE: + case AMDGPU::SI_SPILL_A384_SAVE: + case AMDGPU::SI_SPILL_A384_RESTORE: + case AMDGPU::SI_SPILL_AV384_SAVE: + case AMDGPU::SI_SPILL_AV384_RESTORE: + return 12; + case AMDGPU::SI_SPILL_S352_SAVE: + case AMDGPU::SI_SPILL_S352_RESTORE: + case AMDGPU::SI_SPILL_V352_SAVE: + case AMDGPU::SI_SPILL_V352_RESTORE: + case AMDGPU::SI_SPILL_A352_SAVE: + case AMDGPU::SI_SPILL_A352_RESTORE: + case AMDGPU::SI_SPILL_AV352_SAVE: + case AMDGPU::SI_SPILL_AV352_RESTORE: + return 11; + case AMDGPU::SI_SPILL_S320_SAVE: + case AMDGPU::SI_SPILL_S320_RESTORE: + case AMDGPU::SI_SPILL_V320_SAVE: + case AMDGPU::SI_SPILL_V320_RESTORE: + case AMDGPU::SI_SPILL_A320_SAVE: + case AMDGPU::SI_SPILL_A320_RESTORE: + case AMDGPU::SI_SPILL_AV320_SAVE: + case AMDGPU::SI_SPILL_AV320_RESTORE: + return 10; + case AMDGPU::SI_SPILL_S288_SAVE: + case AMDGPU::SI_SPILL_S288_RESTORE: + case AMDGPU::SI_SPILL_V288_SAVE: + case AMDGPU::SI_SPILL_V288_RESTORE: + case AMDGPU::SI_SPILL_A288_SAVE: + case AMDGPU::SI_SPILL_A288_RESTORE: + case AMDGPU::SI_SPILL_AV288_SAVE: + case AMDGPU::SI_SPILL_AV288_RESTORE: + return 9; + case AMDGPU::SI_SPILL_S256_SAVE: + case AMDGPU::SI_SPILL_S256_CFI_SAVE: + case AMDGPU::SI_SPILL_S256_RESTORE: + case AMDGPU::SI_SPILL_V256_SAVE: + case AMDGPU::SI_SPILL_V256_CFI_SAVE: + case AMDGPU::SI_SPILL_V256_RESTORE: + case AMDGPU::SI_SPILL_A256_SAVE: + case AMDGPU::SI_SPILL_A256_CFI_SAVE: + case AMDGPU::SI_SPILL_A256_RESTORE: + case AMDGPU::SI_SPILL_AV256_SAVE: + case AMDGPU::SI_SPILL_AV256_CFI_SAVE: + case AMDGPU::SI_SPILL_AV256_RESTORE: + return 8; + case AMDGPU::SI_SPILL_S224_SAVE: + case AMDGPU::SI_SPILL_S224_CFI_SAVE: + case AMDGPU::SI_SPILL_S224_RESTORE: + case AMDGPU::SI_SPILL_V224_SAVE: + case AMDGPU::SI_SPILL_V224_CFI_SAVE: + case AMDGPU::SI_SPILL_V224_RESTORE: + case AMDGPU::SI_SPILL_A224_SAVE: + case AMDGPU::SI_SPILL_A224_CFI_SAVE: + case AMDGPU::SI_SPILL_A224_RESTORE: + case AMDGPU::SI_SPILL_AV224_SAVE: + case AMDGPU::SI_SPILL_AV224_CFI_SAVE: + case AMDGPU::SI_SPILL_AV224_RESTORE: + return 7; + case AMDGPU::SI_SPILL_S192_SAVE: + case AMDGPU::SI_SPILL_S192_CFI_SAVE: + case AMDGPU::SI_SPILL_S192_RESTORE: + case AMDGPU::SI_SPILL_V192_SAVE: + case AMDGPU::SI_SPILL_V192_CFI_SAVE: + case AMDGPU::SI_SPILL_V192_RESTORE: + case AMDGPU::SI_SPILL_A192_SAVE: + case AMDGPU::SI_SPILL_A192_CFI_SAVE: + case AMDGPU::SI_SPILL_A192_RESTORE: + case AMDGPU::SI_SPILL_AV192_SAVE: + case AMDGPU::SI_SPILL_AV192_CFI_SAVE: + case AMDGPU::SI_SPILL_AV192_RESTORE: + return 6; + case AMDGPU::SI_SPILL_S160_SAVE: + case AMDGPU::SI_SPILL_S160_CFI_SAVE: + case AMDGPU::SI_SPILL_S160_RESTORE: + case AMDGPU::SI_SPILL_V160_SAVE: + case AMDGPU::SI_SPILL_V160_CFI_SAVE: + case AMDGPU::SI_SPILL_V160_RESTORE: + case AMDGPU::SI_SPILL_A160_SAVE: + case AMDGPU::SI_SPILL_A160_CFI_SAVE: + case AMDGPU::SI_SPILL_A160_RESTORE: + case AMDGPU::SI_SPILL_AV160_SAVE: + case AMDGPU::SI_SPILL_AV160_CFI_SAVE: + case AMDGPU::SI_SPILL_AV160_RESTORE: + return 5; + case AMDGPU::SI_SPILL_S128_SAVE: + case AMDGPU::SI_SPILL_S128_CFI_SAVE: + case AMDGPU::SI_SPILL_S128_RESTORE: + case AMDGPU::SI_SPILL_V128_SAVE: + case AMDGPU::SI_SPILL_V128_CFI_SAVE: + case AMDGPU::SI_SPILL_V128_RESTORE: + case AMDGPU::SI_SPILL_A128_SAVE: + case AMDGPU::SI_SPILL_A128_CFI_SAVE: + case AMDGPU::SI_SPILL_A128_RESTORE: + case AMDGPU::SI_SPILL_AV128_SAVE: + case AMDGPU::SI_SPILL_AV128_CFI_SAVE: + case AMDGPU::SI_SPILL_AV128_RESTORE: + return 4; + case AMDGPU::SI_SPILL_S96_SAVE: + case AMDGPU::SI_SPILL_S96_CFI_SAVE: + case AMDGPU::SI_SPILL_S96_RESTORE: + case AMDGPU::SI_SPILL_V96_SAVE: + case AMDGPU::SI_SPILL_V96_CFI_SAVE: + case AMDGPU::SI_SPILL_V96_RESTORE: + case AMDGPU::SI_SPILL_A96_SAVE: + case AMDGPU::SI_SPILL_A96_CFI_SAVE: + case AMDGPU::SI_SPILL_A96_RESTORE: + case AMDGPU::SI_SPILL_AV96_SAVE: + case AMDGPU::SI_SPILL_AV96_CFI_SAVE: + case AMDGPU::SI_SPILL_AV96_RESTORE: + return 3; + case AMDGPU::SI_SPILL_S64_SAVE: + case AMDGPU::SI_SPILL_S64_CFI_SAVE: + case AMDGPU::SI_SPILL_S64_RESTORE: + case AMDGPU::SI_SPILL_V64_SAVE: + case AMDGPU::SI_SPILL_V64_CFI_SAVE: + case AMDGPU::SI_SPILL_V64_RESTORE: + case AMDGPU::SI_SPILL_A64_SAVE: + case AMDGPU::SI_SPILL_A64_CFI_SAVE: + case AMDGPU::SI_SPILL_A64_RESTORE: + case AMDGPU::SI_SPILL_AV64_SAVE: + case AMDGPU::SI_SPILL_AV64_CFI_SAVE: + case AMDGPU::SI_SPILL_AV64_RESTORE: + return 2; + case AMDGPU::SI_SPILL_S32_SAVE: + case AMDGPU::SI_SPILL_S32_CFI_SAVE: + case AMDGPU::SI_SPILL_S32_RESTORE: + case AMDGPU::SI_SPILL_V32_SAVE: + case AMDGPU::SI_SPILL_V32_CFI_SAVE: + case AMDGPU::SI_SPILL_V32_RESTORE: + case AMDGPU::SI_SPILL_A32_SAVE: + case AMDGPU::SI_SPILL_A32_CFI_SAVE: + case AMDGPU::SI_SPILL_A32_RESTORE: + case AMDGPU::SI_SPILL_AV32_SAVE: + case AMDGPU::SI_SPILL_AV32_CFI_SAVE: + case AMDGPU::SI_SPILL_AV32_RESTORE: + case AMDGPU::SI_SPILL_WWM_V32_SAVE: + case AMDGPU::SI_SPILL_WWM_V32_RESTORE: + case AMDGPU::SI_SPILL_WWM_AV32_SAVE: + case AMDGPU::SI_SPILL_WWM_AV32_RESTORE: + case AMDGPU::SI_SPILL_V16_SAVE: + case AMDGPU::SI_SPILL_V16_RESTORE: + return 1; + default: + llvm_unreachable("Invalid spill opcode"); + } +} + void SIInstrInfo::legalizeOpWithMove(MachineInstr &MI, unsigned OpIdx) const { MachineBasicBlock::iterator I = MI; MachineBasicBlock *MBB = MI.getParent(); diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.h b/llvm/lib/Target/AMDGPU/SIInstrInfo.h index 48eba6b2a567d..2e6d03e8e03b4 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.h +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.h @@ -1472,6 +1472,9 @@ class SIInstrInfo final : public AMDGPUGenInstrInfo { return RI.getRegSizeInBits(*getOpRegClass(MI, OpNo)) / 8; } + /// Return the number of registers spilled/reloaded by the spill opcode. + unsigned getNumSubRegsForSpillOp(const MachineInstr &MI) const; + /// Legalize the \p OpIndex operand of this instruction by inserting /// a MOV. For example: /// ADD_I32_e32 VGPR0, 15 diff --git a/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp b/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp index 6eb1f4194bf73..f08be737ad8ad 100644 --- a/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIRegisterInfo.cpp @@ -1145,195 +1145,6 @@ SIRegisterInfo::getCrossCopyRegClass(const TargetRegisterClass *RC) const { return RC == &AMDGPU::SCC_CLASSRegClass ? &AMDGPU::SReg_32RegClass : RC; } -unsigned SIRegisterInfo::getNumSubRegsForSpillOp(const MachineInstr &MI) const { - const SIInstrInfo *TII = ST.getInstrInfo(); - - unsigned Op = MI.getOpcode(); - switch (Op) { - case AMDGPU::SI_BLOCK_SPILL_V1024_SAVE: - case AMDGPU::SI_BLOCK_SPILL_V1024_CFI_SAVE: - case AMDGPU::SI_BLOCK_SPILL_V1024_RESTORE: - // FIXME: This assumes the mask is statically known and not computed at - // runtime. However, some ABIs may want to compute the mask dynamically and - // this will need to be updated. - return llvm::popcount( - (uint64_t)TII->getNamedOperand(MI, AMDGPU::OpName::mask)->getImm()); - case AMDGPU::SI_SPILL_S1024_SAVE: - case AMDGPU::SI_SPILL_S1024_CFI_SAVE: - case AMDGPU::SI_SPILL_S1024_RESTORE: - case AMDGPU::SI_SPILL_V1024_SAVE: - case AMDGPU::SI_SPILL_V1024_CFI_SAVE: - case AMDGPU::SI_SPILL_V1024_RESTORE: - case AMDGPU::SI_SPILL_A1024_SAVE: - case AMDGPU::SI_SPILL_A1024_CFI_SAVE: - case AMDGPU::SI_SPILL_A1024_RESTORE: - case AMDGPU::SI_SPILL_AV1024_SAVE: - case AMDGPU::SI_SPILL_AV1024_CFI_SAVE: - case AMDGPU::SI_SPILL_AV1024_RESTORE: - return 32; - case AMDGPU::SI_SPILL_S512_SAVE: - case AMDGPU::SI_SPILL_S512_CFI_SAVE: - case AMDGPU::SI_SPILL_S512_RESTORE: - case AMDGPU::SI_SPILL_V512_SAVE: - case AMDGPU::SI_SPILL_V512_CFI_SAVE: - case AMDGPU::SI_SPILL_V512_RESTORE: - case AMDGPU::SI_SPILL_A512_SAVE: - case AMDGPU::SI_SPILL_A512_CFI_SAVE: - case AMDGPU::SI_SPILL_A512_RESTORE: - case AMDGPU::SI_SPILL_AV512_SAVE: - case AMDGPU::SI_SPILL_AV512_CFI_SAVE: - case AMDGPU::SI_SPILL_AV512_RESTORE: - return 16; - case AMDGPU::SI_SPILL_S384_SAVE: - case AMDGPU::SI_SPILL_S384_RESTORE: - case AMDGPU::SI_SPILL_V384_SAVE: - case AMDGPU::SI_SPILL_V384_RESTORE: - case AMDGPU::SI_SPILL_A384_SAVE: - case AMDGPU::SI_SPILL_A384_RESTORE: - case AMDGPU::SI_SPILL_AV384_SAVE: - case AMDGPU::SI_SPILL_AV384_RESTORE: - return 12; - case AMDGPU::SI_SPILL_S352_SAVE: - case AMDGPU::SI_SPILL_S352_RESTORE: - case AMDGPU::SI_SPILL_V352_SAVE: - case AMDGPU::SI_SPILL_V352_RESTORE: - case AMDGPU::SI_SPILL_A352_SAVE: - case AMDGPU::SI_SPILL_A352_RESTORE: - case AMDGPU::SI_SPILL_AV352_SAVE: - case AMDGPU::SI_SPILL_AV352_RESTORE: - return 11; - case AMDGPU::SI_SPILL_S320_SAVE: - case AMDGPU::SI_SPILL_S320_RESTORE: - case AMDGPU::SI_SPILL_V320_SAVE: - case AMDGPU::SI_SPILL_V320_RESTORE: - case AMDGPU::SI_SPILL_A320_SAVE: - case AMDGPU::SI_SPILL_A320_RESTORE: - case AMDGPU::SI_SPILL_AV320_SAVE: - case AMDGPU::SI_SPILL_AV320_RESTORE: - return 10; - case AMDGPU::SI_SPILL_S288_SAVE: - case AMDGPU::SI_SPILL_S288_RESTORE: - case AMDGPU::SI_SPILL_V288_SAVE: - case AMDGPU::SI_SPILL_V288_RESTORE: - case AMDGPU::SI_SPILL_A288_SAVE: - case AMDGPU::SI_SPILL_A288_RESTORE: - case AMDGPU::SI_SPILL_AV288_SAVE: - case AMDGPU::SI_SPILL_AV288_RESTORE: - return 9; - case AMDGPU::SI_SPILL_S256_SAVE: - case AMDGPU::SI_SPILL_S256_CFI_SAVE: - case AMDGPU::SI_SPILL_S256_RESTORE: - case AMDGPU::SI_SPILL_V256_SAVE: - case AMDGPU::SI_SPILL_V256_CFI_SAVE: - case AMDGPU::SI_SPILL_V256_RESTORE: - case AMDGPU::SI_SPILL_A256_SAVE: - case AMDGPU::SI_SPILL_A256_CFI_SAVE: - case AMDGPU::SI_SPILL_A256_RESTORE: - case AMDGPU::SI_SPILL_AV256_SAVE: - case AMDGPU::SI_SPILL_AV256_CFI_SAVE: - case AMDGPU::SI_SPILL_AV256_RESTORE: - return 8; - case AMDGPU::SI_SPILL_S224_SAVE: - case AMDGPU::SI_SPILL_S224_CFI_SAVE: - case AMDGPU::SI_SPILL_S224_RESTORE: - case AMDGPU::SI_SPILL_V224_SAVE: - case AMDGPU::SI_SPILL_V224_CFI_SAVE: - case AMDGPU::SI_SPILL_V224_RESTORE: - case AMDGPU::SI_SPILL_A224_SAVE: - case AMDGPU::SI_SPILL_A224_CFI_SAVE: - case AMDGPU::SI_SPILL_A224_RESTORE: - case AMDGPU::SI_SPILL_AV224_SAVE: - case AMDGPU::SI_SPILL_AV224_CFI_SAVE: - case AMDGPU::SI_SPILL_AV224_RESTORE: - return 7; - case AMDGPU::SI_SPILL_S192_SAVE: - case AMDGPU::SI_SPILL_S192_CFI_SAVE: - case AMDGPU::SI_SPILL_S192_RESTORE: - case AMDGPU::SI_SPILL_V192_SAVE: - case AMDGPU::SI_SPILL_V192_CFI_SAVE: - case AMDGPU::SI_SPILL_V192_RESTORE: - case AMDGPU::SI_SPILL_A192_SAVE: - case AMDGPU::SI_SPILL_A192_CFI_SAVE: - case AMDGPU::SI_SPILL_A192_RESTORE: - case AMDGPU::SI_SPILL_AV192_SAVE: - case AMDGPU::SI_SPILL_AV192_CFI_SAVE: - case AMDGPU::SI_SPILL_AV192_RESTORE: - return 6; - case AMDGPU::SI_SPILL_S160_SAVE: - case AMDGPU::SI_SPILL_S160_CFI_SAVE: - case AMDGPU::SI_SPILL_S160_RESTORE: - case AMDGPU::SI_SPILL_V160_SAVE: - case AMDGPU::SI_SPILL_V160_CFI_SAVE: - case AMDGPU::SI_SPILL_V160_RESTORE: - case AMDGPU::SI_SPILL_A160_SAVE: - case AMDGPU::SI_SPILL_A160_CFI_SAVE: - case AMDGPU::SI_SPILL_A160_RESTORE: - case AMDGPU::SI_SPILL_AV160_SAVE: - case AMDGPU::SI_SPILL_AV160_CFI_SAVE: - case AMDGPU::SI_SPILL_AV160_RESTORE: - return 5; - case AMDGPU::SI_SPILL_S128_SAVE: - case AMDGPU::SI_SPILL_S128_CFI_SAVE: - case AMDGPU::SI_SPILL_S128_RESTORE: - case AMDGPU::SI_SPILL_V128_SAVE: - case AMDGPU::SI_SPILL_V128_CFI_SAVE: - case AMDGPU::SI_SPILL_V128_RESTORE: - case AMDGPU::SI_SPILL_A128_SAVE: - case AMDGPU::SI_SPILL_A128_CFI_SAVE: - case AMDGPU::SI_SPILL_A128_RESTORE: - case AMDGPU::SI_SPILL_AV128_SAVE: - case AMDGPU::SI_SPILL_AV128_CFI_SAVE: - case AMDGPU::SI_SPILL_AV128_RESTORE: - return 4; - case AMDGPU::SI_SPILL_S96_SAVE: - case AMDGPU::SI_SPILL_S96_CFI_SAVE: - case AMDGPU::SI_SPILL_S96_RESTORE: - case AMDGPU::SI_SPILL_V96_SAVE: - case AMDGPU::SI_SPILL_V96_CFI_SAVE: - case AMDGPU::SI_SPILL_V96_RESTORE: - case AMDGPU::SI_SPILL_A96_SAVE: - case AMDGPU::SI_SPILL_A96_CFI_SAVE: - case AMDGPU::SI_SPILL_A96_RESTORE: - case AMDGPU::SI_SPILL_AV96_SAVE: - case AMDGPU::SI_SPILL_AV96_CFI_SAVE: - case AMDGPU::SI_SPILL_AV96_RESTORE: - return 3; - case AMDGPU::SI_SPILL_S64_SAVE: - case AMDGPU::SI_SPILL_S64_CFI_SAVE: - case AMDGPU::SI_SPILL_S64_RESTORE: - case AMDGPU::SI_SPILL_V64_SAVE: - case AMDGPU::SI_SPILL_V64_CFI_SAVE: - case AMDGPU::SI_SPILL_V64_RESTORE: - case AMDGPU::SI_SPILL_A64_SAVE: - case AMDGPU::SI_SPILL_A64_CFI_SAVE: - case AMDGPU::SI_SPILL_A64_RESTORE: - case AMDGPU::SI_SPILL_AV64_SAVE: - case AMDGPU::SI_SPILL_AV64_CFI_SAVE: - case AMDGPU::SI_SPILL_AV64_RESTORE: - return 2; - case AMDGPU::SI_SPILL_S32_SAVE: - case AMDGPU::SI_SPILL_S32_CFI_SAVE: - case AMDGPU::SI_SPILL_S32_RESTORE: - case AMDGPU::SI_SPILL_V32_SAVE: - case AMDGPU::SI_SPILL_V32_CFI_SAVE: - case AMDGPU::SI_SPILL_V32_RESTORE: - case AMDGPU::SI_SPILL_A32_SAVE: - case AMDGPU::SI_SPILL_A32_CFI_SAVE: - case AMDGPU::SI_SPILL_A32_RESTORE: - case AMDGPU::SI_SPILL_AV32_SAVE: - case AMDGPU::SI_SPILL_AV32_CFI_SAVE: - case AMDGPU::SI_SPILL_AV32_RESTORE: - case AMDGPU::SI_SPILL_WWM_V32_SAVE: - case AMDGPU::SI_SPILL_WWM_V32_RESTORE: - case AMDGPU::SI_SPILL_WWM_AV32_SAVE: - case AMDGPU::SI_SPILL_WWM_AV32_RESTORE: - case AMDGPU::SI_SPILL_V16_SAVE: - case AMDGPU::SI_SPILL_V16_RESTORE: - return 1; - default: llvm_unreachable("Invalid spill opcode"); - } -} - static int getOffsetMUBUFStore(unsigned Opc) { switch (Opc) { case AMDGPU::BUFFER_STORE_DWORD_OFFEN: @@ -2741,7 +2552,7 @@ bool SIRegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator MI, *MBB, MI, DL, Opc, Index, VData->getReg(), VData->isKill(), FrameReg, TII->getNamedOperand(*MI, AMDGPU::OpName::offset)->getImm(), *MI->memoperands_begin(), RS, nullptr, NeedsCFI); - MFI->addToSpilledVGPRs(getNumSubRegsForSpillOp(*MI)); + MFI->addToSpilledVGPRs(TII->getNumSubRegsForSpillOp(*MI)); if (IsWWMRegSpill) TII->restoreExec(*MF, *MBB, MI, DL, MFI->getSGPRForEXECCopy()); diff --git a/llvm/lib/Target/AMDGPU/SIRegisterInfo.h b/llvm/lib/Target/AMDGPU/SIRegisterInfo.h index b0cc857cd9a8a..1eb9a88b819ed 100644 --- a/llvm/lib/Target/AMDGPU/SIRegisterInfo.h +++ b/llvm/lib/Target/AMDGPU/SIRegisterInfo.h @@ -176,8 +176,6 @@ class SIRegisterInfo final : public AMDGPUGenRegisterInfo { const TargetRegisterClass * getCrossCopyRegClass(const TargetRegisterClass *RC) const override; - unsigned getNumSubRegsForSpillOp(const MachineInstr &MI) const; - const TargetRegisterClass * getRegClassForBlockOp(const MachineFunction &MF) const { return &AMDGPU::VReg_1024RegClass; >From e36a62ad47a607d3cfd08293ee844226a00b6228 Mon Sep 17 00:00:00 2001 From: Christudasan Devadasan <[email protected]> Date: Tue, 13 Jan 2026 03:48:15 +0000 Subject: [PATCH 3/4] fixed a comment. --- llvm/lib/Target/AMDGPU/SIInstrInfo.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.h b/llvm/lib/Target/AMDGPU/SIInstrInfo.h index 2e6d03e8e03b4..9987043915ae4 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.h +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.h @@ -1472,7 +1472,7 @@ class SIInstrInfo final : public AMDGPUGenInstrInfo { return RI.getRegSizeInBits(*getOpRegClass(MI, OpNo)) / 8; } - /// Return the number of registers spilled/reloaded by the spill opcode. + /// Return the number of registers spilled/reloaded by the spill instruction. unsigned getNumSubRegsForSpillOp(const MachineInstr &MI) const; /// Legalize the \p OpIndex operand of this instruction by inserting >From b2dc44e37590553943d38719fecf09857f265f27 Mon Sep 17 00:00:00 2001 From: Aaditya <[email protected]> Date: Tue, 29 Sep 2026 12:25:14 +0530 Subject: [PATCH 4/4] Remove redundant fields --- llvm/lib/Target/AMDGPU/SIInstrInfo.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp index 9d1ea56bf78c4..21db7e58f1b0a 100644 --- a/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp +++ b/llvm/lib/Target/AMDGPU/SIInstrInfo.cpp @@ -6476,8 +6476,6 @@ static unsigned VOP3OpIdxToSrcN(const MachineInstr &MI, unsigned OpIdx) { } unsigned SIInstrInfo::getNumSubRegsForSpillOp(const MachineInstr &MI) const { - const SIInstrInfo *TII = ST.getInstrInfo(); - unsigned Op = MI.getOpcode(); switch (Op) { case AMDGPU::SI_BLOCK_SPILL_V1024_SAVE: @@ -6487,7 +6485,7 @@ unsigned SIInstrInfo::getNumSubRegsForSpillOp(const MachineInstr &MI) const { // runtime. However, some ABIs may want to compute the mask dynamically and // this will need to be updated. return llvm::popcount( - (uint64_t)TII->getNamedOperand(MI, AMDGPU::OpName::mask)->getImm()); + (uint64_t)getNamedOperand(MI, AMDGPU::OpName::mask)->getImm()); case AMDGPU::SI_SPILL_S1024_SAVE: case AMDGPU::SI_SPILL_S1024_CFI_SAVE: case AMDGPU::SI_SPILL_S1024_RESTORE: _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
