Author: Sam Clegg Date: 2022-01-31T14:26:09-08:00 New Revision: 45ad3467b708618841869cb529a814001d2295f9
URL: https://github.com/llvm/llvm-project/commit/45ad3467b708618841869cb529a814001d2295f9 DIFF: https://github.com/llvm/llvm-project/commit/45ad3467b708618841869cb529a814001d2295f9.diff LOG: [clang][WebAssembly] Imply -fno-threadsafe-static when threading is disabled When we don't enable atomics we completely disabled threading in which case there is no point in generating thread safe code for static initialization. This should always be safe because, in WebAssembly, it is not possible to link object compiled without the atomics feature into a mutli-threaded program. See https://github.com/emscripten-core/emscripten/pull/16152 Differential Revision: https://reviews.llvm.org/D118571 Added: Modified: clang/lib/Basic/Targets/WebAssembly.cpp clang/test/CodeGenCXX/static-init-wasm.cpp Removed: ################################################################################ diff --git a/clang/lib/Basic/Targets/WebAssembly.cpp b/clang/lib/Basic/Targets/WebAssembly.cpp index 4cba861f61d2c..2309997eb77b2 100644 --- a/clang/lib/Basic/Targets/WebAssembly.cpp +++ b/clang/lib/Basic/Targets/WebAssembly.cpp @@ -260,6 +260,7 @@ void WebAssemblyTargetInfo::adjust(DiagnosticsEngine &Diags, if (!HasAtomics) { Opts.POSIXThreads = false; Opts.setThreadModel(LangOptions::ThreadModelKind::Single); + Opts.ThreadsafeStatics = false; } } diff --git a/clang/test/CodeGenCXX/static-init-wasm.cpp b/clang/test/CodeGenCXX/static-init-wasm.cpp index 647a61b84721e..0a066de616fa9 100644 --- a/clang/test/CodeGenCXX/static-init-wasm.cpp +++ b/clang/test/CodeGenCXX/static-init-wasm.cpp @@ -1,6 +1,6 @@ -// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -o - %s \ +// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -target-feature +atomics -o - %s \ // RUN: | FileCheck %s -check-prefix=WEBASSEMBLY32 -// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -o - %s \ +// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -target-feature +atomics -o - %s \ // RUN: | FileCheck %s -check-prefix=WEBASSEMBLY64 // Test that we don't create common blocks. @@ -52,3 +52,17 @@ A theA; // WEBASSEMBLY64: call noundef %struct.A* @_ZN1AC1Ev(%struct.A* {{[^,]*}} @theA) // WEBASSEMBLY64: define internal void @_GLOBAL__sub_I_static_init_wasm.cpp() #3 { // WEBASSEMBLY64: call void @__cxx_global_var_init() + +// RUN: %clang_cc1 -emit-llvm -triple=wasm32-unknown-unknown -o - %s \ +// RUN: | FileCheck %s -check-prefix=NOATOMICS +// RUN: %clang_cc1 -emit-llvm -triple=wasm64-unknown-unknown -o - %s \ +// RUN: | FileCheck %s -check-prefix=NOATOMICS + +// NOATOMICS-LABEL: @_Z1gv() +// NOATOMICS: %[[R0:.+]] = load i8, i8* @_ZGVZ1gvE1a, align 1 +// NOATOMICS-NEXT: %guard.uninitialized = icmp eq i8 %[[R0]], 0 +// NOATOMICS-NEXT: br i1 %guard.uninitialized, label %[[CHECK:.+]], label %[[END:.+]], +// NOATOMICS: [[CHECK]]: +// NOATOMICS-NOT: __cxa_guard_acquire +// NOATOMICS: [[END]]: +// NOATOMICS-NEXT: ret void _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits