Hi Jakub,

Just to make it clear, I'm not an official representative of Clang, or
LLVM, nor I was involved in all discussions about implementing
extensions either. I do not have an agenda to promote LLVM changes.

> To me this sounds like clang proposing extensions because they aren't
> willing to implement existing extensions, not a good reason to change.

Whatever I say or propose is only my limited view of the world as of a
few years ago (when I started working with LLVM) and I'm mainly
discussing this here exactly because I don't want to implement
extensions just for the sake of it, and I want opinions from all
angles before taking any *technical* decision. The arguments you guys
are giving to me are solid and will be taken back to the LLVM list to
discuss this further (after I do some research on past discussions).

Please, don't take my emails as "Clang pushing GCC to do things", as
they're *clearly* not. If anything, they're only a display or my own
ignorance.

AFAIK, the whole idea of __builtin_stack_pointer was to mimic the
already existing __builtin_frame_address, but the usage and examples
you and Andrew gave me (separate files, not meaningful in all targets)
show why it hasn't been done in GCC.

I honestly took it as a simple oversight of kernel engineers
implementing something that could be done better in a way GCC already
understood (as it happens a lot, example is the inline asm + Macro
issue we raised earlier). It seems this time, it was not.


On 27 March 2014 10:44, Jakub Jelinek <ja...@redhat.com> wrote:
> I don't see what is wrong with this, this isn't inline asm, it is
> the local register var GNU extension,

The argument I remember hearing of is the joint of:
 1. The "register" specifier is not guaranteed to keep variables'
values in registers (C99, 6.7.1p4)
 2. Representing register names are not possible in LLVM IR at the moment

I understand that these reasons are not stronger than the case both
you and Andrew made.

In theory, if we can lower SP as a register value, we should be able
to lower any register. So we should be able to create an intrinsic
that maps that specific construct into a name, for example:

%reg = @llvm.register("sp")

And lower the same way Marc's code lowers the stack pointer. I'll
follow up on the LLVM list.


> which is far more general then this
> proposal.  Using stack pointer is inherently target specific anyway, some
> targets (e.g. sparc64) apply e.g. a bias to the stack pointer register,
> it is unclear what this builtin would do in that case.

This is true. Joined with the fact that Andrew mentioned, that the
code is split in files anyway, our proposal loses a lot of weight.

Thanks both for your comments!

cheers,
--renato

Reply via email to