[LLVMdev] Pass and return of large objects

Russell Wallace
Tue, 02 Mar 2010 01:34:03 -0000

On Mon, Mar 1, 2010 at 7:39 PM, Reid Kleckner <rnk at mit.edu>
wrote:
> IIRC they lower it themselves, doing whatever the ABI says they
> should, which is usually adding a hidden sret parameter to the
> function once you get beyond small structs.

Okay, so we seem to be saying sret or suchlike is how you pass and
return large objects by value in LLVM.

What exactly counts as large? As I understand it, the largest integers
correctly handled as first-class values are the size of two pointers,
i.e. usually either 64 or 128 bits. Is the same true of structs?

> It'd be nice to move some
> of that logic back into LLVM, but it's tricky because C99 says things
> about complex numbers which requires special frontend type knowledge
> that LLVM doesn't have.

I hadn't realized that, I would've expected complex numbers to be
doable as just a pair of scalar values. What's the fly in the ointment
with C99 complex numbers?

> I'm just echoing previous discussion, and you can probably get a more
> reliable answer by finding the original discussion in the archives.

I don't suppose you've any idea what search keywords might work?