aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2019-07-22 17:50:00 +0000
committerHans Wennborg <hans@hanshq.net>2019-07-22 17:50:00 +0000
commit678ad509eea4acaceabee94ca3a3a146f279e169 (patch)
tree7244639ed240d6e442304ea6ad08a3894c444126
parenta19f0b93e6dc998002be8a835308ed3d87021aea (diff)
Merging r366504:
------------------------------------------------------------------------ r366504 | tlively | 2019-07-18 23:50:24 +0200 (Thu, 18 Jul 2019) | 15 lines [WebAssembly] Use passive segments by default when memory is shared Summary: This change makes it so that passing --shared-memory is all a user needs to do to get proper multithreaded code. This default can still be explicitly overridden for any reason using --passive-segments and --active-segments. Reviewers: sbc100, quantum Subscribers: dschuff, jgravelle-google, aheejin, sunfish, jfb, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D64950 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/lld/branches/release_90@366709 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--test/wasm/data-layout.ll2
-rw-r--r--test/wasm/data-segments.ll13
-rw-r--r--test/wasm/import-memory.test4
-rw-r--r--test/wasm/shared-memory.yaml12
-rw-r--r--test/wasm/tls.ll10
-rw-r--r--wasm/Driver.cpp5
-rw-r--r--wasm/Options.td4
7 files changed, 23 insertions, 27 deletions
diff --git a/test/wasm/data-layout.ll b/test/wasm/data-layout.ll
index 20fe30445..6c060f460 100644
--- a/test/wasm/data-layout.ll
+++ b/test/wasm/data-layout.ll
@@ -76,7 +76,7 @@ target triple = "wasm32-unknown-unknown"
; RUN: wasm-ld -no-gc-sections --allow-undefined --no-entry --shared-memory \
; RUN: --initial-memory=131072 --max-memory=131072 -o %t_max.wasm %t.o \
-; RUN: %t.hello.o
+; RUN: --active-segments %t.hello.o
; RUN: obj2yaml %t_max.wasm | FileCheck %s -check-prefix=CHECK-SHARED
; CHECK-SHARED: - Type: MEMORY
diff --git a/test/wasm/data-segments.ll b/test/wasm/data-segments.ll
index 944895a0d..32fb6812d 100644
--- a/test/wasm/data-segments.ll
+++ b/test/wasm/data-segments.ll
@@ -2,9 +2,8 @@
; RUN: llc -filetype=obj %s -o %t.bulk-mem.o -mattr=+bulk-memory
; RUN: llc -filetype=obj %s -o %t.atomics.bulk-mem.o -mattr=+atomics,+bulk-memory
-; atomics => active segments (TODO: error)
-; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 %t.atomics.o -o %t.atomics.wasm
-; RUN: obj2yaml %t.atomics.wasm | FileCheck %s --check-prefixes ACTIVE,ACTIVE-TLS
+; atomics => error
+; RUN: not wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 %t.atomics.o -o %t.atomics.wasm 2>&1 | FileCheck %s --check-prefix ERROR
; atomics, active segments => active segments
; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 --active-segments %t.atomics.o -o %t.atomics.active.wasm
@@ -25,15 +24,15 @@
; RUN: wasm-ld -no-gc-sections --no-entry --passive-segments %t.bulk-mem.o -o %t.bulk-mem.passive.wasm
; RUN: obj2yaml %t.bulk-mem.passive.wasm | FileCheck %s --check-prefix PASSIVE
-; atomics, bulk memory => active segments (TODO: passive)
+; atomics, bulk memory => passive segments
; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 %t.atomics.bulk-mem.o -o %t.atomics.bulk-mem.wasm
-; RUN: obj2yaml %t.atomics.bulk-mem.wasm | FileCheck %s --check-prefixes ACTIVE,ACTIVE-TLS
+; RUN: obj2yaml %t.atomics.bulk-mem.wasm | FileCheck %s --check-prefixes PASSIVE,PASSIVE-TLS
-; atomics, bulk memory, active segments => active segments
+; atomics, bulk memory, active segments => active segments
; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 --active-segments %t.atomics.bulk-mem.o -o %t.atomics.bulk-mem.active.wasm
; RUN: obj2yaml %t.atomics.bulk-mem.active.wasm | FileCheck %s --check-prefixes ACTIVE,ACTIVE-TLS
-; atomics, bulk memory, passive segments => passive segments
+; atomics, bulk memory, passive segments => passive segments
; RUN: wasm-ld -no-gc-sections --no-entry --shared-memory --max-memory=131072 --passive-segments %t.atomics.bulk-mem.o -o %t.atomics.bulk-mem.passive.wasm
; RUN: obj2yaml %t.atomics.bulk-mem.passive.wasm | FileCheck %s --check-prefixes PASSIVE,PASSIVE-TLS
diff --git a/test/wasm/import-memory.test b/test/wasm/import-memory.test
index 0a64afd6c..e9dd972bc 100644
--- a/test/wasm/import-memory.test
+++ b/test/wasm/import-memory.test
@@ -32,8 +32,8 @@
# CHECK-MAX-NEXT: Maximum: 0x00000005
# CHECK-MAX-NEXT: - Type:
-# RUN: wasm-ld --import-memory --shared-memory --initial-memory=262144 \
-# RUN: --max-memory=327680 -o %t.max.wasm %t.start.o
+# RUN: wasm-ld --import-memory --shared-memory --active-segments \
+# RUN: --initial-memory=262144 --max-memory=327680 -o %t.max.wasm %t.start.o
# RUN: obj2yaml %t.max.wasm | FileCheck -check-prefix=CHECK-SHARED %s
# Verify the --shared-memory flag works with imports
diff --git a/test/wasm/shared-memory.yaml b/test/wasm/shared-memory.yaml
index 3538f34a4..57eccf152 100644
--- a/test/wasm/shared-memory.yaml
+++ b/test/wasm/shared-memory.yaml
@@ -1,18 +1,18 @@
# RUN: yaml2obj %s -o %t1.o
-# RUN: not wasm-ld --no-entry --shared-memory %t1.o -o - 2>&1 | FileCheck %s --check-prefix SHARED-NO-MAX
+# RUN: not wasm-ld --no-entry --shared-memory --active-segments %t1.o -o - 2>&1 | FileCheck %s --check-prefix SHARED-NO-MAX
-# RUN: not wasm-ld --no-entry --shared-memory --max-memory=100000 %t1.o -o - 2>&1 | FileCheck %s --check-prefix SHARED-UNALIGNED
+# RUN: not wasm-ld --no-entry --shared-memory --active-segments --max-memory=100000 %t1.o -o - 2>&1 | FileCheck %s --check-prefix SHARED-UNALIGNED
-# RUN: wasm-ld --no-entry --shared-memory --max-memory=131072 %t1.o -o - | obj2yaml | FileCheck %s --check-prefix SHARED
+# RUN: wasm-ld --no-entry --shared-memory --active-segments --max-memory=131072 %t1.o -o - | obj2yaml | FileCheck %s --check-prefix SHARED
# RUN: not wasm-ld --no-entry --features=atomics %t1.o -o - 2>&1 | FileCheck %s --check-prefix ATOMICS-NO-SHARED
-# RUN: not wasm-ld --no-entry --features=atomics --shared-memory %t1.o -o - 2>&1 | FileCheck %s --check-prefix ATOMICS-NO-MAX
+# RUN: not wasm-ld --no-entry --features=atomics --shared-memory --active-segments %t1.o -o - 2>&1 | FileCheck %s --check-prefix ATOMICS-NO-MAX
-# RUN: not wasm-ld --no-entry --features=atomics --shared-memory --max-memory=100000 %t1.o -o - 2>&1 | FileCheck %s --check-prefix ATOMICS-UNALIGNED
+# RUN: not wasm-ld --no-entry --features=atomics --shared-memory --active-segments --max-memory=100000 %t1.o -o - 2>&1 | FileCheck %s --check-prefix ATOMICS-UNALIGNED
-# RUN: wasm-ld --no-entry --features=atomics --shared-memory --max-memory=131072 %t1.o -o - | obj2yaml | FileCheck %s --check-prefix SHARED
+# RUN: wasm-ld --no-entry --features=atomics --shared-memory --active-segments --max-memory=131072 %t1.o -o - | obj2yaml | FileCheck %s --check-prefix SHARED
--- !WASM
diff --git a/test/wasm/tls.ll b/test/wasm/tls.ll
index 855180ddd..e410e0865 100644
--- a/test/wasm/tls.ll
+++ b/test/wasm/tls.ll
@@ -44,10 +44,8 @@ define i32* @tls2_addr() {
; CHECK: - Type: CODE
; CHECK-NEXT: Functions:
-; CHECK-NEXT: - Index: 0
-; CHECK-NEXT: Locals: []
-; CHECK-NEXT: Body: 0B
-; CHECK-NEXT: - Index: 1
+; Skip __wasm_call_ctors and __wasm_init_memory
+; CHECK: - Index: 2
; CHECK-NEXT: Locals: []
; CHECK-NEXT: Body: 20002401200041004108FC0801000B
@@ -60,7 +58,7 @@ define i32* @tls2_addr() {
; memory.init 1, 0
; end
-; CHECK-NEXT: - Index: 2
+; CHECK-NEXT: - Index: 3
; CHECK-NEXT: Locals: []
; CHECK-NEXT: Body: 2381808080004180808080006A0B
@@ -70,7 +68,7 @@ define i32* @tls2_addr() {
; i32.add
; end
-; CHECK-NEXT: - Index: 3
+; CHECK-NEXT: - Index: 4
; CHECK-NEXT: Locals: []
; CHECK-NEXT: Body: 2381808080004184808080006A0B
diff --git a/wasm/Driver.cpp b/wasm/Driver.cpp
index 900cd051d..003dd0d30 100644
--- a/wasm/Driver.cpp
+++ b/wasm/Driver.cpp
@@ -320,9 +320,8 @@ static void readConfigs(opt::InputArgList &args) {
args.hasFlag(OPT_fatal_warnings, OPT_no_fatal_warnings, false);
config->importMemory = args.hasArg(OPT_import_memory);
config->sharedMemory = args.hasArg(OPT_shared_memory);
- // TODO: Make passive segments the default with shared memory
- config->passiveSegments =
- args.hasFlag(OPT_passive_segments, OPT_active_segments, false);
+ config->passiveSegments = args.hasFlag(
+ OPT_passive_segments, OPT_active_segments, config->sharedMemory);
config->importTable = args.hasArg(OPT_import_table);
config->ltoo = args::getInteger(args, OPT_lto_O, 2);
config->ltoPartitions = args::getInteger(args, OPT_lto_partitions, 1);
diff --git a/wasm/Options.td b/wasm/Options.td
index 29bd9d9ef..4bce790cd 100644
--- a/wasm/Options.td
+++ b/wasm/Options.td
@@ -144,10 +144,10 @@ def shared_memory: F<"shared-memory">,
HelpText<"Use shared linear memory">;
def active_segments: F<"active-segments">,
- HelpText<"Force segments to be active">;
+ HelpText<"Force segments to be active (default with unshared memory)">;
def passive_segments: F<"passive-segments">,
- HelpText<"Force segments to be passive">;
+ HelpText<"Force segments to be passive (default with shared memory)">;
def import_table: F<"import-table">,
HelpText<"Import function table from the environment">;