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 <t...@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"

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to