[LLVMdev] using large structures in registers/returns

Chandler Carruth chandlerc at google.com
Tue Nov 6 22:53:53 PST 2012


On Tue, Nov 6, 2012 at 10:32 PM, edA-qa mort-ora-y <eda-qa at disemia.com> wrote:
> I can't find a lot of information about using structures directly as
> parameters, returns, and in registers. Is this fully supported on all
> platforms? Does it always convert to creating a hidden parameter when
> too large?
>
> For example (assume very.large is too big to fit in the target machine
> registers):
>
> define %very.large @get_struct() {
>         %m1 = insertvalue %very.large undef, i32 10, 0
>         ...
>         %m10 = insertvalue %very.large %m9, i32 25, 9
>         ret %very.large %m10
> }
>
> define void @use_struct( %very.large %m ) { ... }
>
> define i32 @main() {
>         %m = call %very.large @get_struct()
>         call void @use_struct( %very.large %m )
> }
>
> Will this work on all targets?

It should "work", although it may not match any ABI you care about.

However, you don't need to ask us. =] Just try it with various
backends and check the assembly that comes out.



More information about the llvm-dev mailing list