[LLVMdev] How to access llvm Types from the codegen?

Rafael Espindola espindola at google.com
Fri Aug 3 03:30:15 PDT 2007


On 27/07/07, Evan Cheng <evan.cheng at apple.com> wrote:
> Code generator shouldn't introspect the LLVM type at all, except to
> get the size of the type.  Anything needed should be encoded by the
> front-end.  In the short term, please focus on getting parity with
> what we already have.  This means x86-64 will be wrong, but it
> already is.  As a second step we can then worry about x86-64-specific
> param attributes that should be added to handle this stuff correctly.
>
> Evan

Sorry for the delay. I am back from a vacation and have been busy
catching up....

That is why I need the types (just for the size). This is necessary to
implement both the current behavior and the correct ABI.

consider the llvm code
---------------------------------------
%struct.s = type { i64 }

define i64 @f(%struct.s* byval %a) {
entry:
        %tmp2 = getelementptr %struct.s* %a, i32 0, i32 0
 ; <i64*> [#uses=1]
        %tmp3 = load i64* %tmp2         ; <i64> [#uses=1]
        ret i64 %tmp3
---------------------------------------

When the DAG is constructed it will contain a load from formal_args.
It looks like a lot of work to modify the DAG so that instead it uses
a copy. Even if we decide to do this, we would need to pass the size
of the structure to the DAG, which currently is not available.

I propose that structures that are passed on registers should be slip
into many DAG level arguments (for now this would be all structs) and
the DAG should contain copies instead of loads. The nice thing about
this proposal is that for structures that are passed on the stack, the
DAG doesn't need to know the size. All that we need to add to add to
the DAG is a flag so that the code generators know that the struct
pointer should be computed based on the stack pointer.

Thoughts?

Thanks,
--
Rafael Avila de Espindola

Google Ireland Ltd.
Gordon House
Barrow Street
Dublin 4
Ireland

Registered in Dublin, Ireland
Registration Number: 368047



More information about the llvm-dev mailing list