[llvm] [AMDGPU] Use subtarget feature for flat offset bit width instead of arch checks (PR #183742)
Mariusz Sikora via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 2 00:31:24 PST 2026
https://github.com/mariusz-sikora-at-amd updated https://github.com/llvm/llvm-project/pull/183742
>From 72a1d8659db4855063bfc05dc15d621a3bb62fb6 Mon Sep 17 00:00:00 2001
From: Mariusz Sikora <mariusz.sikora at amd.com>
Date: Fri, 27 Feb 2026 09:07:12 -0500
Subject: [PATCH 1/2] [AMDGPU] Use subtarget feature for flat offset bit width
instead of arch checks
---
llvm/lib/Target/AMDGPU/AMDGPU.td | 5 +++--
llvm/lib/Target/AMDGPU/AMDGPUFeatures.td | 10 ++++++++++
llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h | 3 +++
llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp | 5 ++---
4 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/AMDGPU.td b/llvm/lib/Target/AMDGPU/AMDGPU.td
index eee33dbeea022..a249e359e5df8 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPU.td
+++ b/llvm/lib/Target/AMDGPU/AMDGPU.td
@@ -1411,7 +1411,7 @@ def FeatureGFX10 : GCNSubtargetFeatureGeneration<"GFX10",
FeatureVmemWriteVgprInOrder, FeatureVMemToLDSLoad, FeatureCubeInsts,
FeatureLerpInst, FeatureSadInsts, FeatureQsadInsts,
FeatureCvtNormInsts, FeatureCvtPkNormVOP2Insts,
- FeatureCvtPkNormVOP3Insts
+ FeatureCvtPkNormVOP3Insts, FeatureFlatOffsetBits12
]
>;
@@ -1460,7 +1460,8 @@ def FeatureGFX12 : GCNSubtargetFeatureGeneration<"GFX12",
FeatureDefaultComponentBroadcast, FeatureMaxHardClauseLength32,
FeatureAtomicFMinFMaxF32GlobalInsts, FeatureAtomicFMinFMaxF32FlatInsts,
FeatureIEEEMinimumMaximumInsts, FeatureMinimum3Maximum3F32,
- FeatureMinimum3Maximum3F16, FeatureAgentScopeFineGrainedRemoteMemoryAtomics
+ FeatureMinimum3Maximum3F16, FeatureAgentScopeFineGrainedRemoteMemoryAtomics,
+ FeatureFlatOffsetBits24
]
>;
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td b/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td
index cdbd051a0c0ee..594e2ad0e3e03 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td
+++ b/llvm/lib/Target/AMDGPU/AMDGPUFeatures.td
@@ -18,6 +18,16 @@ def FeatureFMA : SubtargetFeature<"fmaf",
"Enable single precision FMA (not as fast as mul+add, but fused)"
>;
+class SubtargetFeatureFlatOffsetBits <int Value> : SubtargetFeature<
+ "flat-offset-bits-" # Value,
+ "FlatOffsetBitWidth",
+ !cast<string>(Value),
+ "Number of bits for flat offset encoding"
+>;
+
+def FeatureFlatOffsetBits12 : SubtargetFeatureFlatOffsetBits<12>;
+def FeatureFlatOffsetBits24 : SubtargetFeatureFlatOffsetBits<24>;
+
// Addressable local memory size is the maximum number of bytes of LDS that can
// be allocated to a single workgroup.
class SubtargetFeatureAddressableLocalMemorySize <int Value> : SubtargetFeature<
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h b/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h
index 302fe7c850b75..90c2590d472b1 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h
+++ b/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h
@@ -59,6 +59,7 @@ class AMDGPUSubtarget {
unsigned LocalMemorySize = 0;
unsigned AddressableLocalMemorySize = 0;
char WavefrontSizeLog2 = 0;
+ unsigned FlatOffsetBitWidth = 13;
public:
AMDGPUSubtarget(Triple TT) : TargetTriple(std::move(TT)) {}
@@ -235,6 +236,8 @@ class AMDGPUSubtarget {
return AddressableLocalMemorySize;
}
+ unsigned getFlatOffsetBitWidth() const { return FlatOffsetBitWidth; }
+
/// Number of SIMDs/EUs (execution units) per "CU" ("compute unit"), where the
/// "CU" is the unit onto which workgroups are mapped. This takes WGP mode vs.
/// CU mode into account.
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
index c1337f27a0f70..9a47567a40689 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
@@ -3465,10 +3465,9 @@ std::optional<int64_t> getSMRDEncodedLiteralOffset32(const MCSubtargetInfo &ST,
}
unsigned getNumFlatOffsetBits(const MCSubtargetInfo &ST) {
- if (AMDGPU::isGFX10(ST))
+ if (ST.getFeatureBits().test(FeatureFlatOffsetBits12))
return 12;
-
- if (AMDGPU::isGFX12(ST))
+ if (ST.getFeatureBits().test(FeatureFlatOffsetBits24))
return 24;
return 13;
}
>From b4e01caa88d898d06df7e791d70744f13d242e7d Mon Sep 17 00:00:00 2001
From: Mariusz Sikora <mariusz.sikora at amd.com>
Date: Mon, 2 Mar 2026 03:31:01 -0500
Subject: [PATCH 2/2] Remove unused getFlatOffsetBitWidth()
---
llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h | 2 --
1 file changed, 2 deletions(-)
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h b/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h
index 90c2590d472b1..d05f31a888f1e 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h
+++ b/llvm/lib/Target/AMDGPU/AMDGPUSubtarget.h
@@ -236,8 +236,6 @@ class AMDGPUSubtarget {
return AddressableLocalMemorySize;
}
- unsigned getFlatOffsetBitWidth() const { return FlatOffsetBitWidth; }
-
/// Number of SIMDs/EUs (execution units) per "CU" ("compute unit"), where the
/// "CU" is the unit onto which workgroups are mapped. This takes WGP mode vs.
/// CU mode into account.
More information about the llvm-commits
mailing list