[clang] [CUDA] pass -fno-threadsafe-statics to GPU sub-compilations. (PR #117074)
Artem Belevich via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 20 14:46:23 PST 2024
https://github.com/Artem-B created https://github.com/llvm/llvm-project/pull/117074
We do not have support for the threadsafe statics on the GPU side.
However, we do sometimes end up with empty local static initializers, and those happen to trigger calls to `__cxa_guard*`, which breaks compilation.
Partially addresses https://github.com/llvm/llvm-project/issues/117023
>From 1c8829a1defa6dd06aacb9a2047e7f79db238e2b Mon Sep 17 00:00:00 2001
From: Artem Belevich <tra at google.com>
Date: Wed, 20 Nov 2024 14:24:00 -0800
Subject: [PATCH] [CUDA] pass -fno-threadsafe-statics to GPU sub-compilations.
We do not have support for the threadsafe statics on the GPU side.
However, we do sometimes end up with empty local static initializers,
and those happen to trigger calls to `__cxa_guard*`, which breaks compilation.
Partially addresses https://github.com/llvm/llvm-project/issues/117023
---
clang/lib/Driver/ToolChains/Cuda.cpp | 5 +++--
clang/test/Driver/cuda-no-threadsafe-statics.cu | 10 ++++++++++
2 files changed, 13 insertions(+), 2 deletions(-)
create mode 100644 clang/test/Driver/cuda-no-threadsafe-statics.cu
diff --git a/clang/lib/Driver/ToolChains/Cuda.cpp b/clang/lib/Driver/ToolChains/Cuda.cpp
index ddd5ea248ca0cc..102794829795da 100644
--- a/clang/lib/Driver/ToolChains/Cuda.cpp
+++ b/clang/lib/Driver/ToolChains/Cuda.cpp
@@ -856,8 +856,9 @@ void CudaToolChain::addClangTargetOptions(
DeviceOffloadingKind == Action::OFK_Cuda) &&
"Only OpenMP or CUDA offloading kinds are supported for NVIDIA GPUs.");
- CC1Args.append(
- {"-fcuda-is-device", "-mllvm", "-enable-memcpyopt-without-libcalls"});
+ CC1Args.append({"-fcuda-is-device", "-mllvm",
+ "-enable-memcpyopt-without-libcalls",
+ "-fno-threadsafe-statics"});
// Unsized function arguments used for variadics were introduced in CUDA-9.0
// We still do not support generating code that actually uses variadic
diff --git a/clang/test/Driver/cuda-no-threadsafe-statics.cu b/clang/test/Driver/cuda-no-threadsafe-statics.cu
new file mode 100644
index 00000000000000..fd0465f175846d
--- /dev/null
+++ b/clang/test/Driver/cuda-no-threadsafe-statics.cu
@@ -0,0 +1,10 @@
+// Check that -fno-thread-safe-statics get passed down to device-side
+// compilation only.
+//
+// RUN: not %clang -### --target=x86_64-linux-gnu -c --cuda-gpu-arch=sm_20 %s 2>&1 \
+// RUN: | FileCheck %s
+//
+// CHECK: "-fcuda-is-device"
+// CHECK-SAME: "-fno-threadsafe-statics"
+// CHECK: "-triple" "x86_64-unknown-linux-gnu"
+// CHECK-NOT: "-fno-threadsafe-statics"
More information about the cfe-commits
mailing list