[all-commits] [llvm/llvm-project] 98568f: [CIR] Accept __int128 in x86_64 calling-convention...
adams381 via All-commits
all-commits at lists.llvm.org
Tue Jul 28 10:29:41 PDT 2026
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 98568f6567999d03e15a611b3fed1abcfab2f123
https://github.com/llvm/llvm-project/commit/98568f6567999d03e15a611b3fed1abcfab2f123
Author: adams381 <adams at nvidia.com>
Date: 2026-07-28 (Tue, 28 Jul 2026)
Changed paths:
M clang/lib/CIR/Dialect/Transforms/CallConvLoweringPass.cpp
A clang/test/CIR/Transforms/abi-lowering/x86_64-int-nyi.cir
M clang/test/CIR/Transforms/abi-lowering/x86_64-scalars.cir
M clang/test/CIR/Transforms/abi-lowering/x86_64-struct-direct.cir
M clang/test/CIR/Transforms/abi-lowering/x86_64-struct-indirect.cir
Log Message:
-----------
[CIR] Accept __int128 in x86_64 calling-convention lowering (#211142)
The x86_64 calling-convention bridge rejected every integer wider than 64
bits, so a function taking or returning `__int128` hit `errorNYI` even though
its ABI treatment is simple.
On x86_64 `__int128` is Direct and passes in a pair of integer registers,
matching an i128 argument or return in classic CodeGen. `isSupportedType` now
accepts non-bitint integers of width 128 alongside the register-sized widths.
A struct holding a single `__int128` is exactly two eightbytes, so it reaches
the aggregate path and is Direct-coerced to i128; a struct spanning more than
two eightbytes stays Indirect (byval/sret).
`_BitInt` stays rejected pending its register-pair coercion and padding
handling, including `_BitInt(128)`. Non-C intermediate widths (65..127) stay
rejected too: the scalar Direct branch would pass them through unchanged,
without the register-pair coercion they would need.
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