[llvm-branch-commits] [llvm] [AMDGPU] Make getNumSubRegsForSpillOp externally available (NFC). (PR #174997)

via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Tue Sep 29 06:01:14 PDT 2026


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 <Christudasan.Devadasan at amd.com>
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 <Christudasan.Devadasan at amd.com>
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 <Christudasan.Devadasan at amd.com>
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 <Aaditya.AlokDeshpande at amd.com>
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:



More information about the llvm-branch-commits mailing list