[llvm] Adjust SPV_AMD_weak_linkage (PR #197484)

Dmitry Sidorov via llvm-commits llvm-commits at lists.llvm.org
Thu May 14 05:40:09 PDT 2026


https://github.com/MrSidims updated https://github.com/llvm/llvm-project/pull/197484

>From 2247e5be548b44298c243c79609f2184d571f3ff Mon Sep 17 00:00:00 2001
From: Dmitry Sidorov <Dmitry.Sidorov at amd.com>
Date: Wed, 13 May 2026 08:57:30 -0500
Subject: [PATCH] Adjust SPV_AMD_weak_linkage

Linkage was renamed + a capability added following review in
https://github.com/KhronosGroup/SPIRV-Registry/pull/401
---
 llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp   |  4 +++-
 llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td  |  3 ++-
 llvm/lib/Target/SPIRV/SPIRVUtils.cpp            |  2 +-
 llvm/test/CodeGen/SPIRV/linkage/weak-linkage.ll | 11 ++++++-----
 4 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
index c3c07f2efd6dd..5198c0bf5c992 100644
--- a/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVModuleAnalysis.cpp
@@ -1029,8 +1029,10 @@ static void addOpDecorateReqs(const MachineInstr &MI, unsigned DecIndex,
         static_cast<SPIRV::LinkageType::LinkageType>(LinkageOp);
     if (LnkType == SPIRV::LinkageType::LinkOnceODR)
       Reqs.addExtension(SPIRV::Extension::SPV_KHR_linkonce_odr);
-    else if (LnkType == SPIRV::LinkageType::Weak)
+    else if (LnkType == SPIRV::LinkageType::WeakAMD) {
       Reqs.addExtension(SPIRV::Extension::SPV_AMD_weak_linkage);
+      Reqs.addCapability(SPIRV::Capability::WeakLinkageAMD);
+    }
   } else if (Dec == SPIRV::Decoration::CacheControlLoadINTEL ||
              Dec == SPIRV::Decoration::CacheControlStoreINTEL) {
     Reqs.addExtension(SPIRV::Extension::SPV_INTEL_cache_controls);
diff --git a/llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td b/llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td
index 82932a6a52385..e80e70e423e01 100644
--- a/llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td
+++ b/llvm/lib/Target/SPIRV/SPIRVSymbolicOperands.td
@@ -635,6 +635,7 @@ defm TensorFloat32RoundingINTEL : CapabilityOperand<6425, 0, 0, [SPV_INTEL_tenso
 defm MaskedGatherScatterINTEL : CapabilityOperand<6427, 0, 0, [SPV_INTEL_masked_gather_scatter], []>;
 defm BFloat16DotProductKHR : CapabilityOperand<5117, 0, 0, [SPV_KHR_bfloat16], [BFloat16TypeKHR]>;
 defm BFloat16CooperativeMatrixKHR : CapabilityOperand<5118, 0, 0, [SPV_KHR_bfloat16], [BFloat16TypeKHR, CooperativeMatrixKHR]>;
+defm WeakLinkageAMD : CapabilityOperand<5181, 0, 0, [SPV_AMD_weak_linkage], [Linkage]>;
 defm BlockingPipesALTERA : CapabilityOperand<5945, 0, 0, [SPV_ALTERA_blocking_pipes], []>;
 defm ArbitraryPrecisionFixedPointALTERA : CapabilityOperand<5922, 0, 0, [SPV_ALTERA_arbitrary_precision_fixed_point], []>;
 defm ArbitraryPrecisionFloatingPointALTERA : CapabilityOperand<5845, 0, 0,[SPV_ALTERA_arbitrary_precision_floating_point], []>;
@@ -1264,7 +1265,7 @@ multiclass LinkageTypeOperand<bits<32> value, list<Capability> reqCapabilities>
 defm Export : LinkageTypeOperand<0, [Linkage]>;
 defm Import : LinkageTypeOperand<1, [Linkage]>;
 defm LinkOnceODR : LinkageTypeOperand<2, [Linkage]>;
-defm Weak : LinkageTypeOperand<3, [Linkage]>;
+defm WeakAMD : LinkageTypeOperand<3, [WeakLinkageAMD]>;
 
 //===----------------------------------------------------------------------===//
 // Multiclass used to define AccessQualifier enum values and at the same time
diff --git a/llvm/lib/Target/SPIRV/SPIRVUtils.cpp b/llvm/lib/Target/SPIRV/SPIRVUtils.cpp
index 6f8411f05cb52..0ef31f4182b4e 100644
--- a/llvm/lib/Target/SPIRV/SPIRVUtils.cpp
+++ b/llvm/lib/Target/SPIRV/SPIRVUtils.cpp
@@ -1238,7 +1238,7 @@ getSpirvLinkageTypeFor(const SPIRVSubtarget &ST, const GlobalValue &GV) {
 
   if (GV.hasWeakLinkage() &&
       ST.canUseExtension(SPIRV::Extension::SPV_AMD_weak_linkage))
-    return SPIRV::LinkageType::Weak;
+    return SPIRV::LinkageType::WeakAMD;
 
   return SPIRV::LinkageType::Export;
 }
diff --git a/llvm/test/CodeGen/SPIRV/linkage/weak-linkage.ll b/llvm/test/CodeGen/SPIRV/linkage/weak-linkage.ll
index 338484e052be6..208985613b558 100644
--- a/llvm/test/CodeGen/SPIRV/linkage/weak-linkage.ll
+++ b/llvm/test/CodeGen/SPIRV/linkage/weak-linkage.ll
@@ -5,14 +5,15 @@
 ; RUN: llc -O0 -verify-machineinstrs -mtriple=spirv32-unknown-unknown %s -o - | FileCheck %s --check-prefix=CHECK-SPIRV
 ; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv32-unknown-unknown %s -o - -filetype=obj | spirv-val %}
 
-; CHECK-SPIRV-EXT: Capability Linkage
+; CHECK-SPIRV-EXT-DAG: Capability Linkage
+; CHECK-SPIRV-EXT-DAG: Capability WeakLinkageAMD
 ; CHECK-SPIRV-EXT: Extension "SPV_AMD_weak_linkage"
-; CHECK-SPIRV-EXT-DAG: OpDecorate %[[#]] LinkageAttributes "GV" Weak
-; CHECK-SPIRV-EXT-DAG: OpDecorate %[[#]] LinkageAttributes "square" Weak
+; CHECK-SPIRV-EXT-DAG: OpDecorate %[[#]] LinkageAttributes "GV" WeakAMD
+; CHECK-SPIRV-EXT-DAG: OpDecorate %[[#]] LinkageAttributes "square" WeakAMD
 
 ; CHECK-SPIRV-NOT: OpExtension "SPV_AMD_weak_linkage"
-; CHECK-SPIRV-NOT: OpDecorate %[[#]] LinkageAttributes "GV" Weak
-; CHECK-SPIRV-NOT: OpDecorate %[[#]] LinkageAttributes "square" Weak
+; CHECK-SPIRV-NOT: OpDecorate %[[#]] LinkageAttributes "GV" WeakAMD
+; CHECK-SPIRV-NOT: OpDecorate %[[#]] LinkageAttributes "square" WeakAMD
 ; CHECK-SPIRV-DAG: OpDecorate %[[#]] LinkageAttributes "GV" Export
 ; CHECK-SPIRV-DAG: OpDecorate %[[#]] LinkageAttributes "square" Export
 



More information about the llvm-commits mailing list