diff options
author | Dan Gohman <dev@sunfishcode.online> | 2024-12-10 09:21:58 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-10 09:21:58 -0800 |
commit | c5ab70c508457eaece5d7ff4ab79a2f90bc67f06 (patch) | |
tree | 3c3f9467d3837642a759c26e6e3854120f769893 /llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | |
parent | c7634c1b610e9abe13646c5936dd14402e0dc2f3 (diff) | |
download | llvm-c5ab70c508457eaece5d7ff4ab79a2f90bc67f06.zip llvm-c5ab70c508457eaece5d7ff4ab79a2f90bc67f06.tar.gz llvm-c5ab70c508457eaece5d7ff4ab79a2f90bc67f06.tar.bz2 |
[WebAssembly] Add `-i128:128` to the `datalayout` string. (#119204)
Clang [defaults to aligning `__int128_t` to 16 bytes], while LLVM
`datalayout` strings [default to aligning `i128` to 8 bytes]. Wasm is
currently using the defaults for both, so it's inconsistent. Fix this by
adding `-i128:128` to Wasm's `datalayout` string so that it aligns
`i128` to 16 bytes too.
This is similar to
[llvm/llvm-project@dbad963](https://github.com/llvm/llvm-project/commit/dbad963a69fd7b16c6838f81b61167fbf00a413c)
for SPARC.
This fixes rust-lang/rust#133991; see that issue for further discussion.
[defaults to aligning `__int128_t` to 16 bytes]:
https://github.com/llvm/llvm-project/blob/f8b4182f076f8fe55f9d5f617b5a25008a77b22f/clang/lib/Basic/TargetInfo.cpp#L77
[default to aligning `i128` to 8 bytes]:
https://llvm.org/docs/LangRef.html#langref-datalayout
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp index 8ec72d5..9c95d73 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp @@ -118,13 +118,13 @@ WebAssemblyTargetMachine::WebAssemblyTargetMachine( T, TT.isArch64Bit() ? (TT.isOSEmscripten() ? "e-m:e-p:64:64-p10:8:8-p20:8:8-i64:64-" - "f128:64-n32:64-S128-ni:1:10:20" + "i128:128-f128:64-n32:64-S128-ni:1:10:20" : "e-m:e-p:64:64-p10:8:8-p20:8:8-i64:64-" - "n32:64-S128-ni:1:10:20") + "i128:128-n32:64-S128-ni:1:10:20") : (TT.isOSEmscripten() ? "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-" - "f128:64-n32:64-S128-ni:1:10:20" + "i128:128-f128:64-n32:64-S128-ni:1:10:20" : "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-" - "n32:64-S128-ni:1:10:20"), + "i128:128-n32:64-S128-ni:1:10:20"), TT, CPU, FS, Options, getEffectiveRelocModel(RM, TT), getEffectiveCodeModel(CM, CodeModel::Large), OL), TLOF(new WebAssemblyTargetObjectFile()), |