[all-commits] [llvm/llvm-project] b60a39: [lld][WebAssembly] Propagate +atomics for ThinLTO ...

Derek Schuff via All-commits all-commits at lists.llvm.org
Tue Mar 24 17:31:01 PDT 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: b60a39e3c223624577d475f278bbc26540adca9c
      https://github.com/llvm/llvm-project/commit/b60a39e3c223624577d475f278bbc26540adca9c
  Author: Derek Schuff <dschuff at chromium.org>
  Date:   2026-03-25 (Wed, 25 Mar 2026)

  Changed paths:
    A lld/test/wasm/lto/thinlto-shared-memory-atomics.ll
    M lld/wasm/LTO.cpp

  Log Message:
  -----------
  [lld][WebAssembly] Propagate +atomics for ThinLTO when using --shared-memory (#188381)

When compiling WebAssembly with ThinLTO, functions are partitioned into
isolated `.bc` modules and dispatched to individual LTO backend threads.
During code generation, the `CoalesceFeaturesAndStripAtomics` pass
iterates over the module to gather the union of target features (like
`+atomics`) attached to defined functions. In particular when not using
threads, it lowers away atomics and TLS variables to their
single-threaded equivalents.

However, if a partitioned module only contains globally defined TLS
variables (e.g. there are no functions, or all functions were fully
inlined or stripped by dropDeadSymbols before ThinLTO optimization), the
module becomes completely devoid of function definitions. The coalescing
pass then falls back to fetching features from the `TargetMachine`.
Because in LTO the `TargetMachine` defaults to a generic target without
atomics enabled, the TLS is lowered away and the `wasm-feature-atomics`
flag is omitted from the resulting ThinLTO object partition, causing
`wasm-ld` to immediately reject it.

To fix this we take advantage of the fact that the linker always knows
whether threads are being used (via the --shared-memory flag). When
using shared memory, we enable +atomics and +bulk-memory in the
TargetMachine that is used for the backend, and the feature coalescing
pass will correctly detect the use of therads.
This only makes sense for atomics because of the global linker
configuration; for other features we wouldn't be able to do this, but we
don't rewrite away any other features anyway.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list