diff options
author | Trevor Gross <tgross@intrepidcs.com> | 2025-07-17 04:30:36 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-17 11:30:36 +0200 |
commit | a78a0f8d204393a0cce367b63395bad90311c1b8 (patch) | |
tree | 246a764e61af0c4832671a810c7b2045a5fbefbf /clang/lib/Frontend/TestModuleFileExtension.cpp | |
parent | e66eabee0022af60347e83ef2c0d4b6dbfb7f0a5 (diff) | |
download | llvm-a78a0f8d204393a0cce367b63395bad90311c1b8.zip llvm-a78a0f8d204393a0cce367b63395bad90311c1b8.tar.gz llvm-a78a0f8d204393a0cce367b63395bad90311c1b8.tar.bz2 |
[X86] Align f128 and i128 to 16 bytes when passing on x86-32 (#138092)
The i386 psABI specifies that `__float128` has 16 byte alignment and
must be passed on the stack; however, LLVM currently stores it in a
stack slot that has an offset of 4. Add a custom lowering to correct
this alignment to 16-byte.
i386 does not specify an `__int128`, but it seems reasonable to keep the
same behavior as `__float128` so this is changed as well. There also
isn't a good way to distinguish whether a set of four registers came
from an integer or a float.
The main test demonstrating this change is `store_perturbed` in
`llvm/test/CodeGen/X86/i128-fp128-abi.ll`.
Referenced ABI:
https://gitlab.com/x86-psABIs/i386-ABI/-/wikis/uploads/14c05f1b1e156e0e46b61bfa7c1df1e2/intel386-psABI-2020-08-07.pdf
Fixes: https://github.com/llvm/llvm-project/issues/77401
Diffstat (limited to 'clang/lib/Frontend/TestModuleFileExtension.cpp')
0 files changed, 0 insertions, 0 deletions