[llvm-commits] [llvm-gcc-4.2] r48502 - /llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp

Chris Lattner clattner at apple.com
Wed Mar 19 18:02:59 PDT 2008


On Mar 19, 2008, at 12:08 PM, Duncan Sands wrote:

> Hi Dale,
>
>> That term 'aggregate' is confusing.
>
> inside llvm-convert, aggregate means: not a first class type.  So an
> "aggregate" is exactly something that cannot be passed around in a
> Value (thus the use of DestLoc).  Since gcc vector types are converted
> to LLVM vector types, they are not aggregates in this sense, because
> they are first class types.  In the rest of this email, when I use the
> word "aggregate" I will mean it in this sense.
>
>> From the point of view of LLVM
>> calls these vectors *are* aggregates in this case, in that the  
>> correct
>> IR to generate for the call uses the sret mechanism.
>
> Let's call this: "pass by sret".  Whether something is passed by sret
> or not is specified by the ABI and as such has nothing to do with  
> whether
> it is an aggregate or not.  For example, some strange ABI could  
> specify
> that integers should be passed using the sret mechanism.  Silly, but
> logically possible.

Right.  It seems logical in this case for the EmitCall code to say  
"this is a first class LLVM value that is references as llvm values"  
and "this first class value needs to be returned as sret" therefore "I  
should create a temporary in EmitCall, and issue a load after the call  
to return the first class value".

Does this seem reasonable Dale?

-Chris




More information about the llvm-commits mailing list