[LLVMdev] Returning a structure
Rob Rix
rob at monochromeindustries.com
Wed Jan 27 06:18:49 PST 2010
Hi Duncan,
Thank you again for your clear and thorough response.
>> Apologies in advance if this has been hashed over already—and of course, one should be aware that I know _absolutely nothing_ in this regard ( (: )—but perhaps at least some platform ABI details could be handled by an IR-to-IR transformation (a la one of the function passes), taking a function that returns some arbitrary structure via a return mechanism and changing it to use the platform ABI (returning via reference on the stack) instead?
>
> yes, this has be discussed many times already on the mailing list, and in
> general it is not possible, sorry.
Okay, that’s pretty much what I expected.
> If this routine is only going to be called from code you generate, then you can
> use whatever calling convention you like, for example you can just return your
> struct in registers. Otherwise I'm afraid you are mistaken in thinking that
> returning a struct is simple - in fact the ABI logic on (eg) x86-64 is really
> horribly complicated for this.
Ah, I wasn’t aware of the former detail. I believe I can arrange things to suit that, or alternatively _always_ return the structure in question via the stack.
>> In this case, I actually meant building the Value of the appropriate struct type. Is there a simpler way to build a structure than to alloca a struct and store things into its fields? Or is the “{ i32 1, i32 2 }” thing only possible for 100% constant structs (I expect the answer is yes, just looking for verification (: )?
>
> Look in the docs for "first class aggregates". Check out this example:
>
> <snip>
Perfect, this is exactly what I was looking for. Thank you once again for taking the time to answer my foolish questions (:
Gratefully,
Rob
--
Rob Rix, Unknown Quantity
Monochrome Industries
More information about the llvm-dev
mailing list