summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/test/wasm/lto/atomics.ll14
-rw-r--r--lld/wasm/LTO.cpp5
2 files changed, 18 insertions, 1 deletions
diff --git a/lld/test/wasm/lto/atomics.ll b/lld/test/wasm/lto/atomics.ll
new file mode 100644
index 00000000000..a5a82ae2a5f
--- /dev/null
+++ b/lld/test/wasm/lto/atomics.ll
@@ -0,0 +1,14 @@
+; RUN: llvm-as %s -o %t.o
+; RUN: wasm-ld %t.o -o %t.wasm -lto-O0
+; Atomic operations with fail to compile if the ThreadModel is not
+; correctly set to Single (i.e. if atomics are not lowered to regular ops).
+
+target datalayout = "e-m:e-p:32:32-i64:64-n32:64-S128"
+target triple = "wasm32-unknown-unknown-wasm"
+
+@foo = hidden global i32 1
+
+define void @_start() {
+ %1 = load atomic i32, i32* @foo unordered, align 4
+ ret void
+}
diff --git a/lld/wasm/LTO.cpp b/lld/wasm/LTO.cpp
index dd66c67e39f..f15551da8b8 100644
--- a/lld/wasm/LTO.cpp
+++ b/lld/wasm/LTO.cpp
@@ -45,10 +45,13 @@ static std::unique_ptr<lto::LTO> createLTO() {
lto::Config C;
C.Options = InitTargetOptionsFromCodeGenFlags();
- // Always emit a section per function/datum with LTO.
+ // Always emit a section per function/data with LTO.
C.Options.FunctionSections = true;
C.Options.DataSections = true;
+ // Wasm currently only supports ThreadModel::Single
+ C.Options.ThreadModel = ThreadModel::Single;
+
C.DisableVerify = Config->DisableVerify;
C.DiagHandler = diagnosticHandler;
C.OptLevel = Config->LTOO;
OpenPOWER on IntegriCloud