using large structures in registers/returns

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.