[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