[WebAssembly] Compute and export TLS block alignment
authorGuanzhong Chen <gzchen@google.com>
Fri, 19 Jul 2019 23:34:16 +0000 (23:34 +0000)
committerGuanzhong Chen <gzchen@google.com>
Fri, 19 Jul 2019 23:34:16 +0000 (23:34 +0000)
commit5204f7611f4ad6549921f9fa757823e77f39ce32
treeef7917abad381f28851224e8fb5bf81db74902d5
parent604f802fd30d60226fca7d808b7e513e7f80c603
[WebAssembly] Compute and export TLS block alignment

Summary:
Add immutable WASM global `__tls_align` which stores the alignment
requirements of the TLS segment.

Add `__builtin_wasm_tls_align()` intrinsic to get this alignment in Clang.

The expected usage has now changed to:

    __wasm_init_tls(memalign(__builtin_wasm_tls_align(),
                             __builtin_wasm_tls_size()));

Reviewers: tlively, aheejin, sbc100, sunfish, alexcrichton

Reviewed By: tlively

Subscribers: dschuff, jgravelle-google, hiraditya, cfe-commits, llvm-commits

Tags: #clang, #llvm

Differential Revision: https://reviews.llvm.org/D65028

llvm-svn: 366624
13 files changed:
clang/include/clang/Basic/BuiltinsWebAssembly.def
clang/lib/CodeGen/CGBuiltin.cpp
clang/test/CodeGen/builtins-wasm.c
lld/test/wasm/tls-align.ll [new file with mode: 0644]
lld/test/wasm/tls.ll
lld/wasm/Driver.cpp
lld/wasm/Symbols.cpp
lld/wasm/Symbols.h
lld/wasm/Writer.cpp
llvm/include/llvm/IR/IntrinsicsWebAssembly.td
llvm/lib/Target/WebAssembly/WebAssemblyISelDAGToDAG.cpp
llvm/lib/Target/WebAssembly/WebAssemblyMCInstLower.cpp
llvm/test/CodeGen/WebAssembly/tls-general-dynamic.ll