[llvm] 4bcdb7d - [AMDGPU] Cleanup dVGPR subtarget feature properly. NFC (#216990)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 19 01:10:43 PDT 2026
Author: Diana Picus
Date: 2026-08-19T08:10:39Z
New Revision: 4bcdb7db5bcbd40dec240f2f014f9664850301c2
URL: https://github.com/llvm/llvm-project/commit/4bcdb7db5bcbd40dec240f2f014f9664850301c2
DIFF: https://github.com/llvm/llvm-project/commit/4bcdb7db5bcbd40dec240f2f014f9664850301c2.diff
LOG: [AMDGPU] Cleanup dVGPR subtarget feature properly. NFC (#216990)
Dynamic VGPR mode is expressed via an attribute, not a subtarget
feature. We had some transitional code that looked for both, but we've
migrated to using only the attribute long ago, so cleaning it up
shouldn't affect anything.
Added:
Modified:
llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp
llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
llvm/lib/Target/AMDGPU/GCNSubtarget.h
llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp
llvm/tools/llvm-calc-occupancy/llvm-calc-occupancy.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp
index 900e8688d7f8c..febb61075d17d 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUPromoteAlloca.cpp
@@ -214,11 +214,6 @@ static unsigned getMaxVGPRs(unsigned LDSBytes, const TargetMachine &TM,
const GCNSubtarget &ST = TM.getSubtarget<GCNSubtarget>(F);
unsigned DynamicVGPRBlockSize = AMDGPU::getDynamicVGPRBlockSize(F);
- // Temporarily check both the attribute and the subtarget feature, until the
- // latter is removed.
- if (DynamicVGPRBlockSize == 0 && ST.isDynamicVGPREnabled())
- DynamicVGPRBlockSize = ST.getDynamicVGPRBlockSize();
-
unsigned MaxVGPRs = ST.getMaxNumVGPRs(
ST.getWavesPerEU(ST.getFlatWorkGroupSizes(F), LDSBytes, F).first,
DynamicVGPRBlockSize);
diff --git a/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp b/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
index 1c0e718bd8d97..6a4be2c452fd3 100644
--- a/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
+++ b/llvm/lib/Target/AMDGPU/GCNSubtarget.cpp
@@ -516,11 +516,6 @@ std::pair<unsigned, unsigned>
GCNSubtarget::computeOccupancy(const Function &F, unsigned LDSSize,
unsigned NumSGPRs, unsigned NumVGPRs) const {
unsigned DynamicVGPRBlockSize = AMDGPU::getDynamicVGPRBlockSize(F);
- // Temporarily check both the attribute and the subtarget feature until the
- // latter is removed.
- if (DynamicVGPRBlockSize == 0 && isDynamicVGPREnabled())
- DynamicVGPRBlockSize = getDynamicVGPRBlockSize();
-
auto [MinOcc, MaxOcc] = getOccupancyWithWorkGroupSizes(LDSSize, F);
unsigned SGPROcc = getOccupancyWithNumSGPRs(NumSGPRs);
unsigned VGPROcc = getOccupancyWithNumVGPRs(NumVGPRs, DynamicVGPRBlockSize);
@@ -630,12 +625,7 @@ unsigned GCNSubtarget::getBaseMaxNumVGPRs(
}
unsigned GCNSubtarget::getMaxNumVGPRs(const Function &F) const {
- // Temporarily check both the attribute and the subtarget feature, until the
- // latter is removed.
unsigned DynamicVGPRBlockSize = AMDGPU::getDynamicVGPRBlockSize(F);
- if (DynamicVGPRBlockSize == 0 && isDynamicVGPREnabled())
- DynamicVGPRBlockSize = getDynamicVGPRBlockSize();
-
std::pair<unsigned, unsigned> Waves = getWavesPerEU(F);
return getBaseMaxNumVGPRs(
F, {getMinNumVGPRs(Waves.second, DynamicVGPRBlockSize),
diff --git a/llvm/lib/Target/AMDGPU/GCNSubtarget.h b/llvm/lib/Target/AMDGPU/GCNSubtarget.h
index 2bcbef8d46a13..4287836b06226 100644
--- a/llvm/lib/Target/AMDGPU/GCNSubtarget.h
+++ b/llvm/lib/Target/AMDGPU/GCNSubtarget.h
@@ -84,8 +84,6 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
unsigned DataCacheLineSize = 0;
// Dynamically set bits that enable features.
- bool DynamicVGPR = false;
- bool DynamicVGPRBlockSize32 = false;
bool ScalarizeGlobal = false;
const bool BufferOOBRelaxed;
const bool TBufferOOBRelaxed;
@@ -975,11 +973,6 @@ class GCNSubtarget final : public AMDGPUGenSubtargetInfo,
// STATUS, STATE_PRIV, EXCP_FLAG_PRIV, or EXCP_FLAG_USER.
bool requiresWaitIdleBeforeGetReg() const { return HasGFX1250Insts; }
- bool isDynamicVGPREnabled() const { return DynamicVGPR; }
- unsigned getDynamicVGPRBlockSize() const {
- return DynamicVGPRBlockSize32 ? 32 : 16;
- }
-
bool requiresDisjointEarlyClobberAndUndef() const override {
// AMDGPU doesn't care if early-clobber and undef operands are allocated
// to the same register.
diff --git a/llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp b/llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp
index 950019b37a462..e87176f0795da 100644
--- a/llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/SIMachineFunctionInfo.cpp
@@ -63,12 +63,7 @@ SIMachineFunctionInfo::SIMachineFunctionInfo(const Function &F,
MaxNumWorkGroups = AMDGPU::getMaxNumWorkGroups(F);
assert(MaxNumWorkGroups.size() == 3);
- // Temporarily check both the attribute and the subtarget feature, until the
- // latter is completely removed.
DynamicVGPRBlockSize = AMDGPU::getDynamicVGPRBlockSize(F);
- if (DynamicVGPRBlockSize == 0 && ST.isDynamicVGPREnabled())
- DynamicVGPRBlockSize = ST.getDynamicVGPRBlockSize();
-
Occupancy = ST.computeOccupancy(F, getLDSSize()).second;
CallingConv::ID CC = F.getCallingConv();
diff --git a/llvm/tools/llvm-calc-occupancy/llvm-calc-occupancy.cpp b/llvm/tools/llvm-calc-occupancy/llvm-calc-occupancy.cpp
index ed44d7531640e..b87344e53e4e4 100644
--- a/llvm/tools/llvm-calc-occupancy/llvm-calc-occupancy.cpp
+++ b/llvm/tools/llvm-calc-occupancy/llvm-calc-occupancy.cpp
@@ -193,12 +193,6 @@ int main(int argc, char **argv) {
const MCSubtargetInfo &STI = ST;
- // Mirror GCNSubtarget::computeOccupancy: when the block size is not given
- // explicitly, fall back to the subtarget's default if dynamic VGPRs are on.
- unsigned DynVGPRBlockSizeEff = DynVGPRBlockSize;
- if (DynVGPRBlockSizeEff == 0 && ST.isDynamicVGPREnabled())
- DynVGPRBlockSizeEff = ST.getDynamicVGPRBlockSize();
-
// Parse inputs.
unsigned WGMin = 1, WGMax = AMDGPU::IsaInfo::getMaxFlatWorkGroupSize();
bool WGSpecified = !WGSizeStr.empty();
@@ -225,7 +219,7 @@ int main(int argc, char **argv) {
unsigned LocalMemSize = AMDGPU::IsaInfo::getLocalMemorySize(STI);
unsigned AddrLocalMem = AMDGPU::IsaInfo::getAddressableLocalMemorySize(STI);
unsigned AddrVGPRs =
- AMDGPU::IsaInfo::getAddressableNumVGPRs(STI, DynVGPRBlockSizeEff);
+ AMDGPU::IsaInfo::getAddressableNumVGPRs(STI, DynVGPRBlockSize);
unsigned AddrSGPRs = ST.getAddressableNumSGPRs();
unsigned MaxWGSize = AMDGPU::IsaInfo::getMaxFlatWorkGroupSize();
@@ -300,7 +294,7 @@ int main(int argc, char **argv) {
auto [WGMinOcc, WGMaxOcc] = ST.getOccupancyWithWorkGroupSizes(
static_cast<uint32_t>(LDSBytes), {WGMin, WGMax});
unsigned VGPROcc =
- VGPRSpecified ? ST.getOccupancyWithNumVGPRs(NumVGPRs, DynVGPRBlockSizeEff)
+ VGPRSpecified ? ST.getOccupancyWithNumVGPRs(NumVGPRs, DynVGPRBlockSize)
: MaxWaves;
unsigned SGPROcc =
SGPRSpecified ? ST.getOccupancyWithNumSGPRs(NumSGPRs) : MaxWaves;
@@ -351,7 +345,7 @@ int main(int argc, char **argv) {
if (VGPRSpecified && VGPROcc == MaxOcc) {
unsigned MaxV =
- AMDGPU::IsaInfo::getMaxNumVGPRs(STI, TargetOcc, DynVGPRBlockSizeEff);
+ AMDGPU::IsaInfo::getMaxNumVGPRs(STI, TargetOcc, DynVGPRBlockSize);
outs() << format(" VGPRs <= %u (currently %d)\n", MaxV,
static_cast<int>(NumVGPRs));
}
@@ -411,7 +405,7 @@ int main(int argc, char **argv) {
"Max SGPRs");
for (unsigned Occ = MaxWaves; Occ >= 1; --Occ) {
unsigned MaxV =
- AMDGPU::IsaInfo::getMaxNumVGPRs(STI, Occ, DynVGPRBlockSizeEff);
+ AMDGPU::IsaInfo::getMaxNumVGPRs(STI, Occ, DynVGPRBlockSize);
unsigned MaxS =
AMDGPU::IsaInfo::getMaxNumSGPRs(STI, Occ, /*Addressable=*/true);
outs() << format(" %-14u %-14u %-14u\n", Occ, MaxV, MaxS);
More information about the llvm-commits
mailing list