[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