[LLVMdev] x86-64 sign extension for parameters and return values

Chris Lattner clattner at apple.com
Thu Feb 23 15:08:08 PST 2012

On Feb 23, 2012, at 1:54 PM, Eli Friedman wrote:

>> The LLVM model implies the the caller always has to sign extend for
>> signed promotion to argument registers and that the callee always has
>> to sign extend for signed promotion to return value registers.  The
>> GCC model seems more reasonable and efficient to me because whoever is
>> actually using the values gets to choose whether a sign extension is
>> done (or not done at all).
>> Could someone explain the LLVM implementation to me?
>> [1] http://www.x86-64.org/documentation/abi.pdf
> Sorry about the delayed response; I was sort of expecting someone else
> to respond.  It looks like a rather nasty issue, and deserves some
> attention.
> LLVM has traditionally assumed that all integer argument and return
> types narrower than int are promoted to int on all architectures.
> Nobody has actually noticed any issues with this before now, as far as
> I know.

FYI, this is vaguely related:

It was brought up by people that cared about 16-bit targets but where int was 32-bit.  I don't think that anyone actively cares about this at the moment, but it would be nice to clean this up someday.


More information about the llvm-dev mailing list