The x86_64 SysV ABI specifies that __int128 is passed either in two registers (if available) or in a 16 byte aligned stack slot. GCC implements this behavior. However, if only one free register is available, LLVM will instead pass one half of the i128 in a register, and the other on the stack.
Make sure that either both are passed in registers or both on the stack.
Fixes https://github.com/llvm/llvm-project/issues/41784. The patch is basically what @craig.topper proposed to do there.