[llvm-commits] [llvm-gcc-4.2] r46164 - in /llvm-gcc-4.2/trunk/gcc/config/i386: llvm-i386-target.h llvm-i386.cpp
Evan Cheng
evan.cheng at apple.com
Wed Jan 23 19:05:03 PST 2008
On Jan 22, 2008, at 11:23 PM, Duncan Sands wrote:
>
> Can you please clarify the roles of llvm-gcc and the code generators
> in getting ABI compatibility. When generating IR for x86-64, llvm-gcc
> sometimes chops by-value structs into pieces, and sometimes passes the
> struct as a byval parameter. Since it chops up all-integer structs,
> and this corresponds more or less to what the ABI says, I assumed this
> was an attempt to get ABI correctness. Especially as the code
> generators
> don't seem to bother themselves with following the details of the
> ABI (yet),
> and just push byval parameters onto the stack. Since you say
If ABI specifies the aggregate should be passed in memory, then llvm-
gcc passes it byval. Otherwise, it chops up in pieces following the
ABI specification (only x86-64 uses a mixture of integer and non-
integer registers).
>
>>> This is an optimization, not a correctness issue
>
> I guess this means that the plan is to teach the codegenerators how to
> pass any aggregate byval in an ABI conformant way (not the case
> right now),
> but still do some chopping up in the front-end to help the optimizers.
> Of course this chopping up needs to be done carefully so the final
> result
> squirted out by the codegenerators (once they are ABI conformant)
> is the
> same as if the chopping had not been done... Is this chopping
> really a
> big win? Is it not possible to get an equivalent level of
> optimization
> by enhancing alias analysis?
We are only doing thise for small integer aggregates that are not
passed through registers. This guarantees ABI compliance. Chopping it
up into small integer pieces ensure the code generator does not make
a copy of the object (among other potential benefits). One day when
the code generator is smarter about it then perhaps we can eliminate
this optimization.
Evan
>
> Ciao,
>
> Duncan.
More information about the llvm-commits
mailing list