[lld] r366504 - [WebAssembly] Use passive segments by default when memory is shared
Hans Wennborg via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 22 10:49:29 PDT 2019
Merged to lld 9 in r366709.
On Thu, Jul 18, 2019 at 2:49 PM Thomas Lively via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
>
> Author: tlively
> Date: Thu Jul 18 14:50:24 2019
> New Revision: 366504
>
> URL: http://llvm.org/viewvc/llvm-project?rev=366504&view=rev
> Log:
> [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
>
> Modified:
> lld/trunk/test/wasm/data-layout.ll
> lld/trunk/test/wasm/data-segments.ll
> lld/trunk/test/wasm/import-memory.test
> lld/trunk/test/wasm/shared-memory.yaml
> lld/trunk/test/wasm/tls.ll
> lld/trunk/wasm/Driver.cpp
> lld/trunk/wasm/Options.td
>
> Modified: lld/trunk/test/wasm/data-layout.ll
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/data-layout.ll?rev=366504&r1=366503&r2=366504&view=diff
> ==============================================================================
> --- lld/trunk/test/wasm/data-layout.ll (original)
> +++ lld/trunk/test/wasm/data-layout.ll Thu Jul 18 14:50:24 2019
> @@ -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
>
> Modified: lld/trunk/test/wasm/data-segments.ll
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/data-segments.ll?rev=366504&r1=366503&r2=366504&view=diff
> ==============================================================================
> --- lld/trunk/test/wasm/data-segments.ll (original)
> +++ lld/trunk/test/wasm/data-segments.ll Thu Jul 18 14:50:24 2019
> @@ -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
>
>
> Modified: lld/trunk/test/wasm/import-memory.test
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/import-memory.test?rev=366504&r1=366503&r2=366504&view=diff
> ==============================================================================
> --- lld/trunk/test/wasm/import-memory.test (original)
> +++ lld/trunk/test/wasm/import-memory.test Thu Jul 18 14:50:24 2019
> @@ -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
>
> Modified: lld/trunk/test/wasm/shared-memory.yaml
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/shared-memory.yaml?rev=366504&r1=366503&r2=366504&view=diff
> ==============================================================================
> --- lld/trunk/test/wasm/shared-memory.yaml (original)
> +++ lld/trunk/test/wasm/shared-memory.yaml Thu Jul 18 14:50:24 2019
> @@ -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
>
> Modified: lld/trunk/test/wasm/tls.ll
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/wasm/tls.ll?rev=366504&r1=366503&r2=366504&view=diff
> ==============================================================================
> --- lld/trunk/test/wasm/tls.ll (original)
> +++ lld/trunk/test/wasm/tls.ll Thu Jul 18 14:50:24 2019
> @@ -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
>
>
> Modified: lld/trunk/wasm/Driver.cpp
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/wasm/Driver.cpp?rev=366504&r1=366503&r2=366504&view=diff
> ==============================================================================
> --- lld/trunk/wasm/Driver.cpp (original)
> +++ lld/trunk/wasm/Driver.cpp Thu Jul 18 14:50:24 2019
> @@ -320,9 +320,8 @@ static void readConfigs(opt::InputArgLis
> 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);
>
> Modified: lld/trunk/wasm/Options.td
> URL: http://llvm.org/viewvc/llvm-project/lld/trunk/wasm/Options.td?rev=366504&r1=366503&r2=366504&view=diff
> ==============================================================================
> --- lld/trunk/wasm/Options.td (original)
> +++ lld/trunk/wasm/Options.td Thu Jul 18 14:50:24 2019
> @@ -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">;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list