[llvm] [AMDGPU] Look up DefaultDepCtrEncoding instead of caching in global state (PR #227720)

Steffen Larsen via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 30 23:48:16 PDT 2026


https://github.com/steffenlarsen updated https://github.com/llvm/llvm-project/pull/227720

>From bce88c992e870c9ffc46a9a9f116c488c73aa048 Mon Sep 17 00:00:00 2001
From: Steffen Holst Larsen <sholstla at amd.com>
Date: Wed, 30 Sep 2026 08:22:39 -0500
Subject: [PATCH 1/2] [AMDGPU] Look up DefaultDepCtrEncoding instead of caching
 in global state

This commit removes the static cache for DefaultDepCtrEncoding in
AMDGPUBaseInfo.cpp and instead looks it up from the table when needed.
This avoids potential issues when querying encoding on different
subtargets.

Signed-off-by: Steffen Holst Larsen <sholstla at amd.com>
---
 llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp  |  5 +----
 llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.cpp | 16 ++++++++++++++++
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
index e45359719d6c9..4686c0eb70f3b 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
@@ -1941,10 +1941,7 @@ static int encodeCustomOperand(const CustomOperandVal *Opr, int Size,
 namespace DepCtr {
 
 int getDefaultDepCtrEncoding(const MCSubtargetInfo &STI) {
-  static int Default = -1;
-  if (Default == -1)
-    Default = getDefaultCustomOperandEncoding(DepCtrInfo, DEP_CTR_SIZE, STI);
-  return Default;
+  return getDefaultCustomOperandEncoding(DepCtrInfo, DEP_CTR_SIZE, STI);
 }
 
 bool isSymbolicDepCtrEncoding(unsigned Code, bool &HasNonDefaultVal,
diff --git a/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.cpp b/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.cpp
index 51fda88e66eca..49b3f9e082b61 100644
--- a/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.cpp
+++ b/llvm/unittests/Target/AMDGPU/AMDGPUUnitTests.cpp
@@ -10,6 +10,7 @@
 #include "AMDGPUGenSubtargetInfo.inc"
 #include "AMDGPUTargetMachine.h"
 #include "GCNSubtarget.h"
+#include "Utils/AMDGPUBaseInfo.h"
 #include "llvm/MC/TargetRegistry.h"
 #include "llvm/Support/TargetSelect.h"
 #include "llvm/TargetParser/AMDGPUTargetParser.h"
@@ -356,6 +357,21 @@ TEST_F(AMDGPUTestBase, TestReverseComposeSubRegIndices) {
   }
 }
 
+TEST_F(AMDGPUTestBase, TestDefaultDepCtrEncodingPerSubtarget) {
+  auto TM1010 = createAMDGPUTargetMachine(
+      Triple(Triple::amdgpu, Triple::AMDGPUSubArch1010), "", "");
+  auto TM1030 = createAMDGPUTargetMachine(
+      Triple(Triple::amdgpu, Triple::AMDGPUSubArch1030), "", "");
+  if (!TM1010 || !TM1030)
+    return;
+  const MCSubtargetInfo &STI1010 = TM1010->getMCSubtargetInfo();
+  const MCSubtargetInfo &STI1030 = TM1030->getMCSubtargetInfo();
+
+  EXPECT_EQ(AMDGPU::DepCtr::getDefaultDepCtrEncoding(STI1010), 0xff1f);
+  EXPECT_EQ(AMDGPU::DepCtr::getDefaultDepCtrEncoding(STI1030), 0xff9f);
+  EXPECT_EQ(AMDGPU::DepCtr::getDefaultDepCtrEncoding(STI1010), 0xff1f);
+}
+
 TEST_F(AMDGPUTestBase, TestGetNamedOperandIdx) {
   std::unique_ptr<const GCNTargetMachine> TM =
       createAMDGPUTargetMachine(Triple("amdgpu9.00-amd-"), "", "");

>From 0e872df16204f6a6fd4efe29ac07af0a4f00dbad Mon Sep 17 00:00:00 2001
From: Steffen Holst Larsen <sholstla at amd.com>
Date: Thu, 1 Oct 2026 01:47:59 -0500
Subject: [PATCH 2/2] Move definition into header

Signed-off-by: Steffen Holst Larsen <sholstla at amd.com>
---
 llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp | 16 ----------------
 llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h   | 12 +++++++++++-
 2 files changed, 11 insertions(+), 17 deletions(-)

diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
index 4686c0eb70f3b..08bccf32319f9 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp
@@ -1857,18 +1857,6 @@ unsigned encodeStorecntDscnt(const IsaVersion &Version, unsigned Storecnt,
 // Custom Operand Values
 //===----------------------------------------------------------------------===//
 
-static unsigned getDefaultCustomOperandEncoding(const CustomOperandVal *Opr,
-                                                int Size,
-                                                const MCSubtargetInfo &STI) {
-  unsigned Enc = 0;
-  for (int Idx = 0; Idx < Size; ++Idx) {
-    const auto &Op = Opr[Idx];
-    if (Op.isSupported(STI))
-      Enc |= Op.encode(Op.Default);
-  }
-  return Enc;
-}
-
 static bool isSymbolicCustomOperandEncoding(const CustomOperandVal *Opr,
                                             int Size, unsigned Code,
                                             bool &HasNonDefaultVal,
@@ -1940,10 +1928,6 @@ static int encodeCustomOperand(const CustomOperandVal *Opr, int Size,
 
 namespace DepCtr {
 
-int getDefaultDepCtrEncoding(const MCSubtargetInfo &STI) {
-  return getDefaultCustomOperandEncoding(DepCtrInfo, DEP_CTR_SIZE, STI);
-}
-
 bool isSymbolicDepCtrEncoding(unsigned Code, bool &HasNonDefaultVal,
                               const MCSubtargetInfo &STI) {
   return isSymbolicCustomOperandEncoding(DepCtrInfo, DEP_CTR_SIZE, Code,
diff --git a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h
index bce059a0c18a7..a7bfe2305712c 100644
--- a/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h
+++ b/llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h
@@ -9,6 +9,7 @@
 #ifndef LLVM_LIB_TARGET_AMDGPU_UTILS_AMDGPUBASEINFO_H
 #define LLVM_LIB_TARGET_AMDGPU_UTILS_AMDGPUBASEINFO_H
 
+#include "AMDGPUAsmUtils.h"
 #include "AMDGPUSubtarget.h"
 #include "SIDefines.h"
 #include "llvm/ADT/APFloat.h"
@@ -1187,7 +1188,16 @@ using HwregEncoding = EncodingFields<HwregId, HwregOffset, HwregSize>;
 
 namespace DepCtr {
 
-int getDefaultDepCtrEncoding(const MCSubtargetInfo &STI);
+inline int getDefaultDepCtrEncoding(const MCSubtargetInfo &STI) {
+  unsigned Enc = 0;
+  for (int Idx = 0; Idx < DEP_CTR_SIZE; ++Idx) {
+    const auto &Op = DepCtrInfo[Idx];
+    if (Op.isSupported(STI))
+      Enc |= Op.encode(Op.Default);
+  }
+  return Enc;
+}
+
 int encodeDepCtr(const StringRef Name, int64_t Val, unsigned &UsedOprMask,
                  const MCSubtargetInfo &STI);
 bool isSymbolicDepCtrEncoding(unsigned Code, bool &HasNonDefaultVal,



More information about the llvm-commits mailing list