diff options
author | Thomas Lively <tlively@google.com> | 2019-03-29 00:14:01 +0000 |
---|---|---|
committer | Thomas Lively <tlively@google.com> | 2019-03-29 00:14:01 +0000 |
commit | 3f34e1b883351c7d98426b084386a7aa762aa366 (patch) | |
tree | 04c234c41b653cc23f751e4c711e8a66a78f51a6 /llvm/lib/Target/WebAssembly/WebAssemblySubtarget.cpp | |
parent | 0c9ea1053058be474a58859be2ab212aaf33ea31 (diff) | |
download | llvm-3f34e1b883351c7d98426b084386a7aa762aa366.zip llvm-3f34e1b883351c7d98426b084386a7aa762aa366.tar.gz llvm-3f34e1b883351c7d98426b084386a7aa762aa366.tar.bz2 |
[WebAssembly] Merge used feature sets, update atomics linkage policy
Summary:
It does not currently make sense to use WebAssembly features in some functions
but not others, so this CL adds an IR pass that takes the union of all used
feature sets and applies it to each function in the module. This allows us to
prevent atomics from being lowered away if some function has opted in to using
them. When atomics is not enabled anywhere, we detect whether there exists any
atomic operations or thread local storage that would be stripped and disallow
linking with objects that contain atomics if and only if atomics or tls are
stripped. When atomics is enabled, mark it as used but do not require it of
other objects in the link. These changes allow libraries that do not use atomics
to be built once and linked into both single-threaded and multithreaded
binaries.
Reviewers: aheejin, sbc100, dschuff
Subscribers: jgravelle-google, hiraditya, sunfish, jfb, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D59625
llvm-svn: 357226
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblySubtarget.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblySubtarget.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblySubtarget.cpp b/llvm/lib/Target/WebAssembly/WebAssemblySubtarget.cpp index bf2f70c..196a745 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblySubtarget.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblySubtarget.cpp @@ -44,6 +44,11 @@ WebAssemblySubtarget::WebAssemblySubtarget(const Triple &TT, InstrInfo(initializeSubtargetDependencies(FS)), TSInfo(), TLInfo(TM, *this) {} +bool WebAssemblySubtarget::enableAtomicExpand() const { + // If atomics are disabled, atomic ops are lowered instead of expanded + return hasAtomics(); +} + bool WebAssemblySubtarget::enableMachineScheduler() const { // Disable the MachineScheduler for now. Even with ShouldTrackPressure set and // enableMachineSchedDefaultSched overridden, it appears to have an overall |