https://github.com/Artem-B updated https://github.com/llvm/llvm-project/pull/117074
>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 1/2] [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" >From fa14b78a76010cde65d702b442027ab0b5cd879f Mon Sep 17 00:00:00 2001 From: Artem Belevich <t...@google.com> Date: Thu, 21 Nov 2024 10:36:32 -0800 Subject: [PATCH 2/2] Update HIPAMD toolchain. Update tests. --- clang/lib/Driver/ToolChains/HIPAMD.cpp | 2 +- clang/test/Driver/cuda-no-threadsafe-statics.cu | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index 4eb8c4f58923fd..42c48f6c9b7743 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -238,7 +238,7 @@ void HIPAMDToolChain::addClangTargetOptions( assert(DeviceOffloadingKind == Action::OFK_HIP && "Only HIP offloading kinds are supported for GPUs."); - CC1Args.push_back("-fcuda-is-device"); + CC1Args.append({"-fcuda-is-device", "-fno-threadsafe-statics"}); if (!DriverArgs.hasFlag(options::OPT_fgpu_rdc, options::OPT_fno_gpu_rdc, false)) diff --git a/clang/test/Driver/cuda-no-threadsafe-statics.cu b/clang/test/Driver/cuda-no-threadsafe-statics.cu index fd0465f175846d..eb15312f8f7d14 100644 --- a/clang/test/Driver/cuda-no-threadsafe-statics.cu +++ b/clang/test/Driver/cuda-no-threadsafe-statics.cu @@ -1,8 +1,11 @@ // 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 +// RUN: %clang -### -x cuda --target=x86_64-linux-gnu -c --cuda-gpu-arch=sm_20 %s \ +// RUN: -nocudainc -nocudalib 2>&1 | FileCheck %s + +// RUN: %clang -### -x hip --target=x86_64-linux-gnu -c --cuda-gpu-arch=gfx1010 %s \ +// RUN: -nocudainc -nocudalib 2>&1 | FileCheck %s // // CHECK: "-fcuda-is-device" // CHECK-SAME: "-fno-threadsafe-statics" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits