[clang] [HIP] Don't add -fvisibility=hidden for SPIR-V compilation flow (PR #184821)
Dmitry Sidorov via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 5 08:29:34 PST 2026
https://github.com/MrSidims created https://github.com/llvm/llvm-project/pull/184821
SPIR-V doesn't have a concept of visibility.
>From 1c57b0b45564cad68680e53e6106f846ae6d8b18 Mon Sep 17 00:00:00 2001
From: Dmitry Sidorov <Dmitry.Sidorov at amd.com>
Date: Thu, 5 Mar 2026 10:19:41 -0600
Subject: [PATCH] [HIP] Don't add -fvisibility=hidden for SPIR-V compilation
flow
SPIR-V doesn't have a concept of visibility.
---
clang/lib/Driver/ToolChains/HIPAMD.cpp | 4 +++-
clang/test/Driver/hip-spirv-backend-opt.c | 5 ++++-
clang/test/Driver/hip-toolchain-no-rdc.hip | 11 +++++++++--
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp
index 5b1bc6d8b6fd7..e7a5d1b7bb80e 100644
--- a/clang/lib/Driver/ToolChains/HIPAMD.cpp
+++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp
@@ -261,8 +261,10 @@ void HIPAMDToolChain::addClangTargetOptions(
// Default to "hidden" visibility, as object level linking will not be
// supported for the foreseeable future.
+ // Make an exception for SPIR-V as it doesn't have hidden visibility anyway.
if (!DriverArgs.hasArg(options::OPT_fvisibility_EQ,
- options::OPT_fvisibility_ms_compat)) {
+ options::OPT_fvisibility_ms_compat) &&
+ !getEffectiveTriple().isSPIRV()) {
CC1Args.append({"-fvisibility=hidden"});
CC1Args.push_back("-fapply-global-visibility-to-externs");
}
diff --git a/clang/test/Driver/hip-spirv-backend-opt.c b/clang/test/Driver/hip-spirv-backend-opt.c
index 10d9a0b01caf3..05daa10b96df6 100644
--- a/clang/test/Driver/hip-spirv-backend-opt.c
+++ b/clang/test/Driver/hip-spirv-backend-opt.c
@@ -52,7 +52,10 @@
// RUN: 2>&1 | FileCheck %s --check-prefixes=CHECK-SPIRV-TRANSLATOR,CHECK-SPIRV-BACKEND-BC,CHECK-SPIRV-BACKEND-BINARY-EQ-TRIPLE
// CHECK-SPIRV-TRANSLATOR-NOT: "{{.*llvm-spirv.*}}"
-// CHECK-SPIRV-BACKEND-TEXTUAL: "{{.*clang(\.exe)?}}" "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}} "-S"
+// CHECK-SPIRV-BACKEND-TEXTUAL: "{{.*clang(\.exe)?}}" "-cc1" "-triple" "spirv64-amd-amdhsa"
+// CHECK-SPIRV-BACKEND-TEXTUAL-NOT: -fvisibility=hidden
+// CHECK-SPIRV-BACKEND-TEXTUAL-NOT: -fapply-global-visibility-to-externs
+// CHECK-SPIRV-BACKEND-TEXTUAL: "-S"
// CHECK-SPIRV-BACKEND-BINARY: "{{.*clang(\.exe)?}}" "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}} "-emit-obj"
// CHECK-SPIRV-BACKEND-BC: "{{.*clang(\.exe)?}}" "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}} "-emit-llvm-bc"
// CHECK-SPIRV-BACKEND-LL: "{{.*clang(\.exe)?}}" "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}} "-emit-llvm"
diff --git a/clang/test/Driver/hip-toolchain-no-rdc.hip b/clang/test/Driver/hip-toolchain-no-rdc.hip
index 024129e4435ff..e40da16e28a64 100644
--- a/clang/test/Driver/hip-toolchain-no-rdc.hip
+++ b/clang/test/Driver/hip-toolchain-no-rdc.hip
@@ -210,9 +210,13 @@
//
// Check mixed AMDGCNSPIRV and concrete GPU arch.
+// Check that visibility is not hidden when compiling to SPIR-V.
//
-// AMDGCNSPIRV: "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}}"-emit-llvm-bc" {{.*}}"-fembed-bitcode=marker" "-disable-llvm-passes" {{.*}} "-o" "[[AMDGCNSPV_BC:.*bc]]"
+// AMDGCNSPIRV: "-cc1" "-triple" "spirv64-amd-amdhsa"
+// AMDGCNSPIRV-NOT: -fvisibility=hidden
+// AMDGCNSPIRV-NOT: -fapply-global-visibility-to-externs
+// AMDGCNSPIRV: "-emit-llvm-bc" {{.*}}"-fembed-bitcode=marker" "-disable-llvm-passes" {{.*}} "-o" "[[AMDGCNSPV_BC:.*bc]]"
// AMDGCNSPIRV: {{".*llvm-link.*"}} "-o" "[[AMDGCNSPV_TMP:.*bc]]" "[[AMDGCNSPV_BC]]"
// AMDGCNSPIRV: {{".*llvm-spirv.*"}} "--spirv-max-version=1.6" "--spirv-ext=+all,-SPV_KHR_untyped_pointers" {{.*}} "[[AMDGCNSPV_TMP]]" {{.*}}"-o" "[[AMDGCNSPV_CO:.*out]]"
// AMDGCNSPIRV: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}}"-emit-obj" {{.*}}"-target-cpu" "gfx900"{{.*}} "-o" "[[GFX900_OBJ:.*o]]"
@@ -220,7 +224,10 @@
// AMDGCNSPIRV: {{".*clang-offload-bundler.*"}} "-type=o"
// AMDGCNSPIRV-SAME: "-targets={{.*}}hipv4-spirv64-amd-amdhsa--amdgcnspirv,hipv4-amdgcn-amd-amdhsa--gfx900"
// AMDGCNSPIRV-SAME: "-input=[[AMDGCNSPV_CO]]" "-input=[[GFX900_CO]]"
-// AMDGCNSPIRV-NEW: "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}}"-emit-llvm-bc" {{.*}} "-o" "[[AMDGCNSPV_BC:.*bc]]"
+// AMDGCNSPIRV-NEW: "-cc1" "-triple" "spirv64-amd-amdhsa"
+// AMDGCNSPIRV-NEW-NOT: -fvisibility=hidden
+// AMDGCNSPIRV-NEW-NOT: -fapply-global-visibility-to-externs
+// AMDGCNSPIRV-NEW: "-emit-llvm-bc" {{.*}} "-o" "[[AMDGCNSPV_BC:.*bc]]"
// Check verbose printing with the new driver.
// RUN: %clang -### --target=x86_64-linux-gnu -fno-gpu-rdc -nogpulib -nogpuinc \
More information about the cfe-commits
mailing list