void init_small_structs(struct1, struct2, struct3, struct4, flags, flags_combo,
                        three_char, five_char, int_char_combo, d1, d2, d3, f1,
                        f2, f3) struct small_rep_info_t *struct1;
struct small_rep_info_t *struct2;
struct small_rep_info_t *struct3;
struct small_rep_info_t *struct4;
struct bit_flags_t *flags;
struct bit_flags_combo_t *flags_combo;
struct three_char_t *three_char;
struct five_char_t *five_char;
struct int_char_combo_t *int_char_combo;
struct one_double_t *d1;
struct one_double_t *d2;
struct one_double_t *d3;
struct two_floats_t *f1;
struct two_floats_t *f2;
struct two_floats_t *f3;
{
  init_bit_flags(flags, (unsigned)1, (unsigned)0, (unsigned)1, (unsigned)0,
                 (unsigned)1, (unsigned)0);
  init_bit_flags_combo(flags_combo, (unsigned)1, (unsigned)0, 'y', (unsigned)1,
                       (unsigned)0, 'n', (unsigned)1, (unsigned)0);
  init_three_chars(three_char, 'a', 'b', 'c');
  init_five_chars(five_char, 'l', 'm', 'n', 'o', 'p');
  init_int_char_combo(int_char_combo, 123, 'z');
  init_struct_rep(struct1, 2);
  init_struct_rep(struct2, 4);
  init_struct_rep(struct3, 5);
  init_struct_rep(struct4, 6);
  init_one_double(d1, 10.5);
  init_one_double(d2, -3.34);
  init_one_double(d3, 675.09123);
  init_two_floats(f1, 45.234, 43.6);
  init_two_floats(f2, 78.01, 122.10);
  init_two_floats(f3, -1232.345, -199.21);
}


x86 assembly (clang, -O0):
<init_small_structs>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x28(%rbp),%rdi
mov    $0x1,%r9d
xor    %r8d,%r8d
mov    %r9d,%esi
mov    %r8d,%edx
mov    %r9d,%ecx
movl   $0x0,(%rsp)
mov    $0x0,%al
call   1050 <init_bit_flags@plt>
mov    -0x30(%rbp),%rdi
mov    $0x1,%r8d
xor    %r9d,%r9d
mov    $0x79,%ecx
mov    %r8d,%esi
mov    %r9d,%edx
movl   $0x6e,(%rsp)
movl   $0x1,0x8(%rsp)
movl   $0x0,0x10(%rsp)
mov    $0x0,%al
call   1030 <init_bit_flags_combo@plt>
mov    0x10(%rbp),%rdi
mov    $0x61,%esi
mov    $0x62,%edx
mov    $0x63,%ecx
mov    $0x0,%al
call   1080 <init_three_chars@plt>
mov    0x18(%rbp),%rdi
mov    $0x6c,%esi
mov    $0x6d,%edx
mov    $0x6e,%ecx
mov    $0x6f,%r8d
mov    $0x70,%r9d
mov    $0x0,%al
call   1090 <init_five_chars@plt>
mov    0x20(%rbp),%rdi
mov    $0x7b,%esi
mov    $0x7a,%edx
mov    $0x0,%al
call   1040 <init_int_char_combo@plt>
mov    -0x8(%rbp),%rdi
mov    $0x2,%esi
mov    $0x0,%al
call   10a0 <init_struct_rep@plt>
mov    -0x10(%rbp),%rdi
mov    $0x4,%esi
mov    $0x0,%al
call   10a0 <init_struct_rep@plt>
mov    -0x18(%rbp),%rdi
mov    $0x5,%esi
mov    $0x0,%al
call   10a0 <init_struct_rep@plt>
mov    -0x20(%rbp),%rdi
mov    $0x6,%esi
mov    $0x0,%al
call   10a0 <init_struct_rep@plt>
mov    0x28(%rbp),%rdi
movsd  0xd81(%rip),%xmm0
mov    $0x1,%al
call   1060 <init_one_double@plt>
mov    0x30(%rbp),%rdi
movsd  0xd66(%rip),%xmm0
mov    $0x1,%al
call   1060 <init_one_double@plt>
mov    0x38(%rbp),%rdi
movsd  0xd4b(%rip),%xmm0
mov    $0x1,%al
call   1060 <init_one_double@plt>
mov    0x40(%rbp),%rdi
movsd  0xd28(%rip),%xmm0
movsd  0xd28(%rip),%xmm1
mov    $0x2,%al
call   1070 <init_two_floats@plt>
mov    0x48(%rbp),%rdi
movsd  0xcfd(%rip),%xmm0
movsd  0xcfd(%rip),%xmm1
mov    $0x2,%al
call   1070 <init_two_floats@plt>
mov    0x50(%rbp),%rdi
movsd  0xcd2(%rip),%xmm0
movsd  0xcd2(%rip),%xmm1
mov    $0x2,%al
call   1070 <init_two_floats@plt>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_small_structs>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r9,%r15
mov    %rcx,0x18(%rsp)
mov    %rdx,0x8(%rsp)
mov    %rsi,%r12
mov    %rdi,%r13
mov    0xc0(%rsp),%rax
mov    %rax,0x40(%rsp)
mov    0xb8(%rsp),%rax
mov    %rax,0x38(%rsp)
mov    0xb0(%rsp),%rax
mov    %rax,0x30(%rsp)
mov    0xa8(%rsp),%rax
mov    %rax,0x28(%rsp)
mov    0xa0(%rsp),%rax
mov    %rax,0x20(%rsp)
mov    0x98(%rsp),%rax
mov    %rax,0x10(%rsp)
mov    0x90(%rsp),%rbx
mov    0x88(%rsp),%rbp
mov    0x80(%rsp),%r14
sub    $0x8,%rsp
mov    %r8,%rdi
mov    $0x1,%esi
xor    %edx,%edx
mov    $0x1,%ecx
xor    %r8d,%r8d
mov    $0x1,%r9d
xor    %eax,%eax
push   $0x0
call   1050 <init_bit_flags@plt>
add    $0x8,%rsp
mov    %r15,%rdi
mov    $0x1,%esi
xor    %edx,%edx
mov    $0x79,%ecx
mov    $0x1,%r8d
xor    %r9d,%r9d
xor    %eax,%eax
push   $0x0
push   $0x1
push   $0x6e
call   1030 <init_bit_flags_combo@plt>
add    $0x20,%rsp
mov    %r14,%rdi
mov    $0x61,%esi
mov    $0x62,%edx
mov    $0x63,%ecx
xor    %eax,%eax
call   1080 <init_three_chars@plt>
mov    %rbp,%rdi
mov    $0x6c,%esi
mov    $0x6d,%edx
mov    $0x6e,%ecx
mov    $0x6f,%r8d
mov    $0x70,%r9d
xor    %eax,%eax
call   1090 <init_five_chars@plt>
mov    %rbx,%rdi
mov    $0x7b,%esi
mov    $0x7a,%edx
xor    %eax,%eax
call   1040 <init_int_char_combo@plt>
mov    %r13,%rdi
mov    $0x2,%esi
xor    %eax,%eax
call   10a0 <init_struct_rep@plt>
mov    %r12,%rdi
mov    $0x4,%esi
xor    %eax,%eax
call   10a0 <init_struct_rep@plt>
mov    0x8(%rsp),%rdi
mov    $0x5,%esi
xor    %eax,%eax
call   10a0 <init_struct_rep@plt>
mov    0x18(%rsp),%rdi
mov    $0x6,%esi
xor    %eax,%eax
call   10a0 <init_struct_rep@plt>
movsd  0xd0d(%rip),%xmm0
mov    0x10(%rsp),%rdi
mov    $0x1,%al
call   1060 <init_one_double@plt>
movsd  0xd01(%rip),%xmm0
mov    0x20(%rsp),%rdi
mov    $0x1,%al
call   1060 <init_one_double@plt>
movsd  0xcf5(%rip),%xmm0
mov    0x28(%rsp),%rdi
mov    $0x1,%al
call   1060 <init_one_double@plt>
movsd  0xce9(%rip),%xmm0
movsd  0xce9(%rip),%xmm1
mov    0x30(%rsp),%rdi
mov    $0x2,%al
call   1070 <init_two_floats@plt>
movsd  0xcdd(%rip),%xmm0
movsd  0xcdd(%rip),%xmm1
mov    0x38(%rsp),%rdi
mov    $0x2,%al
call   1070 <init_two_floats@plt>
movsd  0xcd1(%rip),%xmm0
movsd  0xcd1(%rip),%xmm1
mov    0x40(%rsp),%rdi
mov    $0x2,%al
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1070 <init_two_floats@plt>

LLVM IR (-O0):
%struct.small_rep_info_t = type opaque
%struct.bit_flags_t = type opaque
%struct.bit_flags_combo_t = type opaque
%struct.three_char_t = type opaque
%struct.five_char_t = type opaque
%struct.int_char_combo_t = type opaque
%struct.one_double_t = type opaque
%struct.two_floats_t = type opaque
define void @init_small_structs(%struct.small_rep_info_t* %0, %struct.small_rep_info_t* %1, %struct.small_rep_info_t* %2, %struct.small_rep_info_t* %3, %struct.bit_flags_t* %4, %struct.bit_flags_combo_t* %5, %struct.three_char_t* %6, %struct.five_char_t* %7, %struct.int_char_combo_t* %8, %struct.one_double_t* %9, %struct.one_double_t* %10, %struct.one_double_t* %11, %struct.two_floats_t* %12, %struct.two_floats_t* %13, %struct.two_floats_t* %14) {
%16 = alloca %struct.small_rep_info_t*
%17 = alloca %struct.small_rep_info_t*
%18 = alloca %struct.small_rep_info_t*
%19 = alloca %struct.small_rep_info_t*
%20 = alloca %struct.bit_flags_t*
%21 = alloca %struct.bit_flags_combo_t*
%22 = alloca %struct.three_char_t*
%23 = alloca %struct.five_char_t*
%24 = alloca %struct.int_char_combo_t*
%25 = alloca %struct.one_double_t*
%26 = alloca %struct.one_double_t*
%27 = alloca %struct.one_double_t*
%28 = alloca %struct.two_floats_t*
%29 = alloca %struct.two_floats_t*
%30 = alloca %struct.two_floats_t*
store %struct.small_rep_info_t* %0, %struct.small_rep_info_t** %16
store %struct.small_rep_info_t* %1, %struct.small_rep_info_t** %17
store %struct.small_rep_info_t* %2, %struct.small_rep_info_t** %18
store %struct.small_rep_info_t* %3, %struct.small_rep_info_t** %19
store %struct.bit_flags_t* %4, %struct.bit_flags_t** %20
store %struct.bit_flags_combo_t* %5, %struct.bit_flags_combo_t** %21
store %struct.three_char_t* %6, %struct.three_char_t** %22
store %struct.five_char_t* %7, %struct.five_char_t** %23
store %struct.int_char_combo_t* %8, %struct.int_char_combo_t** %24
store %struct.one_double_t* %9, %struct.one_double_t** %25
store %struct.one_double_t* %10, %struct.one_double_t** %26
store %struct.one_double_t* %11, %struct.one_double_t** %27
store %struct.two_floats_t* %12, %struct.two_floats_t** %28
store %struct.two_floats_t* %13, %struct.two_floats_t** %29
store %struct.two_floats_t* %14, %struct.two_floats_t** %30
%31 = load %struct.bit_flags_t*, %struct.bit_flags_t** %20
%32 = call i32 (%struct.bit_flags_t*, i32, i32, i32, i32, i32, i32, ...) bitcast (i32 (...)* @init_bit_flags to i32 (%struct.bit_flags_t*, i32, i32, i32, i32, i32, i32, ...)*)(%struct.bit_flags_t* %31, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0)
%33 = load %struct.bit_flags_combo_t*, %struct.bit_flags_combo_t** %21
%34 = call i32 (%struct.bit_flags_combo_t*, i32, i32, i32, i32, i32, i32, i32, i32, ...) bitcast (i32 (...)* @init_bit_flags_combo to i32 (%struct.bit_flags_combo_t*, i32, i32, i32, i32, i32, i32, i32, i32, ...)*)(%struct.bit_flags_combo_t* %33, i32 1, i32 0, i32 121, i32 1, i32 0, i32 110, i32 1, i32 0)
%35 = load %struct.three_char_t*, %struct.three_char_t** %22
%36 = call i32 (%struct.three_char_t*, i32, i32, i32, ...) bitcast (i32 (...)* @init_three_chars to i32 (%struct.three_char_t*, i32, i32, i32, ...)*)(%struct.three_char_t* %35, i32 97, i32 98, i32 99)
%37 = load %struct.five_char_t*, %struct.five_char_t** %23
%38 = call i32 (%struct.five_char_t*, i32, i32, i32, i32, i32, ...) bitcast (i32 (...)* @init_five_chars to i32 (%struct.five_char_t*, i32, i32, i32, i32, i32, ...)*)(%struct.five_char_t* %37, i32 108, i32 109, i32 110, i32 111, i32 112)
%39 = load %struct.int_char_combo_t*, %struct.int_char_combo_t** %24
%40 = call i32 (%struct.int_char_combo_t*, i32, i32, ...) bitcast (i32 (...)* @init_int_char_combo to i32 (%struct.int_char_combo_t*, i32, i32, ...)*)(%struct.int_char_combo_t* %39, i32 123, i32 122)
%41 = load %struct.small_rep_info_t*, %struct.small_rep_info_t** %16
%42 = call i32 (%struct.small_rep_info_t*, i32, ...) bitcast (i32 (...)* @init_struct_rep to i32 (%struct.small_rep_info_t*, i32, ...)*)(%struct.small_rep_info_t* %41, i32 2)
%43 = load %struct.small_rep_info_t*, %struct.small_rep_info_t** %17
%44 = call i32 (%struct.small_rep_info_t*, i32, ...) bitcast (i32 (...)* @init_struct_rep to i32 (%struct.small_rep_info_t*, i32, ...)*)(%struct.small_rep_info_t* %43, i32 4)
%45 = load %struct.small_rep_info_t*, %struct.small_rep_info_t** %18
%46 = call i32 (%struct.small_rep_info_t*, i32, ...) bitcast (i32 (...)* @init_struct_rep to i32 (%struct.small_rep_info_t*, i32, ...)*)(%struct.small_rep_info_t* %45, i32 5)
%47 = load %struct.small_rep_info_t*, %struct.small_rep_info_t** %19
%48 = call i32 (%struct.small_rep_info_t*, i32, ...) bitcast (i32 (...)* @init_struct_rep to i32 (%struct.small_rep_info_t*, i32, ...)*)(%struct.small_rep_info_t* %47, i32 6)
%49 = load %struct.one_double_t*, %struct.one_double_t** %25
%50 = call i32 (%struct.one_double_t*, double, ...) bitcast (i32 (...)* @init_one_double to i32 (%struct.one_double_t*, double, ...)*)(%struct.one_double_t* %49, double 1.050000e+01)
%51 = load %struct.one_double_t*, %struct.one_double_t** %26
%52 = call i32 (%struct.one_double_t*, double, ...) bitcast (i32 (...)* @init_one_double to i32 (%struct.one_double_t*, double, ...)*)(%struct.one_double_t* %51, double -3.340000e+00)
%53 = load %struct.one_double_t*, %struct.one_double_t** %27
%54 = call i32 (%struct.one_double_t*, double, ...) bitcast (i32 (...)* @init_one_double to i32 (%struct.one_double_t*, double, ...)*)(%struct.one_double_t* %53, double 0x408518BAD6CB5350)
%55 = load %struct.two_floats_t*, %struct.two_floats_t** %28
%56 = call i32 (%struct.two_floats_t*, double, double, ...) bitcast (i32 (...)* @init_two_floats to i32 (%struct.two_floats_t*, double, double, ...)*)(%struct.two_floats_t* %55, double 4.523400e+01, double 4.360000e+01)
%57 = load %struct.two_floats_t*, %struct.two_floats_t** %29
%58 = call i32 (%struct.two_floats_t*, double, double, ...) bitcast (i32 (...)* @init_two_floats to i32 (%struct.two_floats_t*, double, double, ...)*)(%struct.two_floats_t* %57, double 7.801000e+01, double 1.221000e+02)
%59 = load %struct.two_floats_t*, %struct.two_floats_t** %30
%60 = call i32 (%struct.two_floats_t*, double, double, ...) bitcast (i32 (...)* @init_two_floats to i32 (%struct.two_floats_t*, double, double, ...)*)(%struct.two_floats_t* %59, double 0xC093416147AE147B, double -1.992100e+02)
ret void
}

LLVM IR (-O2):
%struct.small_rep_info_t = type opaque
%struct.bit_flags_t = type opaque
%struct.bit_flags_combo_t = type opaque
%struct.three_char_t = type opaque
%struct.five_char_t = type opaque
%struct.int_char_combo_t = type opaque
%struct.one_double_t = type opaque
%struct.two_floats_t = type opaque
define void @init_small_structs(%struct.small_rep_info_t* %0, %struct.small_rep_info_t* %1, %struct.small_rep_info_t* %2, %struct.small_rep_info_t* %3, %struct.bit_flags_t* %4, %struct.bit_flags_combo_t* %5, %struct.three_char_t* %6, %struct.five_char_t* %7, %struct.int_char_combo_t* %8, %struct.one_double_t* %9, %struct.one_double_t* %10, %struct.one_double_t* %11, %struct.two_floats_t* %12, %struct.two_floats_t* %13, %struct.two_floats_t* %14) {
%16 = tail call i32 (%struct.bit_flags_t*, i32, i32, i32, i32, i32, i32, ...) bitcast (i32 (...)* @init_bit_flags to i32 (%struct.bit_flags_t*, i32, i32, i32, i32, i32, i32, ...)*)(%struct.bit_flags_t* %4, i32 1, i32 0, i32 1, i32 0, i32 1, i32 0)
%17 = tail call i32 (%struct.bit_flags_combo_t*, i32, i32, i32, i32, i32, i32, i32, i32, ...) bitcast (i32 (...)* @init_bit_flags_combo to i32 (%struct.bit_flags_combo_t*, i32, i32, i32, i32, i32, i32, i32, i32, ...)*)(%struct.bit_flags_combo_t* %5, i32 1, i32 0, i32 121, i32 1, i32 0, i32 110, i32 1, i32 0)
%18 = tail call i32 (%struct.three_char_t*, i32, i32, i32, ...) bitcast (i32 (...)* @init_three_chars to i32 (%struct.three_char_t*, i32, i32, i32, ...)*)(%struct.three_char_t* %6, i32 97, i32 98, i32 99)
%19 = tail call i32 (%struct.five_char_t*, i32, i32, i32, i32, i32, ...) bitcast (i32 (...)* @init_five_chars to i32 (%struct.five_char_t*, i32, i32, i32, i32, i32, ...)*)(%struct.five_char_t* %7, i32 108, i32 109, i32 110, i32 111, i32 112)
%20 = tail call i32 (%struct.int_char_combo_t*, i32, i32, ...) bitcast (i32 (...)* @init_int_char_combo to i32 (%struct.int_char_combo_t*, i32, i32, ...)*)(%struct.int_char_combo_t* %8, i32 123, i32 122)
%21 = tail call i32 (%struct.small_rep_info_t*, i32, ...) bitcast (i32 (...)* @init_struct_rep to i32 (%struct.small_rep_info_t*, i32, ...)*)(%struct.small_rep_info_t* %0, i32 2)
%22 = tail call i32 (%struct.small_rep_info_t*, i32, ...) bitcast (i32 (...)* @init_struct_rep to i32 (%struct.small_rep_info_t*, i32, ...)*)(%struct.small_rep_info_t* %1, i32 4)
%23 = tail call i32 (%struct.small_rep_info_t*, i32, ...) bitcast (i32 (...)* @init_struct_rep to i32 (%struct.small_rep_info_t*, i32, ...)*)(%struct.small_rep_info_t* %2, i32 5)
%24 = tail call i32 (%struct.small_rep_info_t*, i32, ...) bitcast (i32 (...)* @init_struct_rep to i32 (%struct.small_rep_info_t*, i32, ...)*)(%struct.small_rep_info_t* %3, i32 6)
%25 = tail call i32 (%struct.one_double_t*, double, ...) bitcast (i32 (...)* @init_one_double to i32 (%struct.one_double_t*, double, ...)*)(%struct.one_double_t* %9, double 1.050000e+01)
%26 = tail call i32 (%struct.one_double_t*, double, ...) bitcast (i32 (...)* @init_one_double to i32 (%struct.one_double_t*, double, ...)*)(%struct.one_double_t* %10, double -3.340000e+00)
%27 = tail call i32 (%struct.one_double_t*, double, ...) bitcast (i32 (...)* @init_one_double to i32 (%struct.one_double_t*, double, ...)*)(%struct.one_double_t* %11, double 0x408518BAD6CB5350)
%28 = tail call i32 (%struct.two_floats_t*, double, double, ...) bitcast (i32 (...)* @init_two_floats to i32 (%struct.two_floats_t*, double, double, ...)*)(%struct.two_floats_t* %12, double 4.523400e+01, double 4.360000e+01)
%29 = tail call i32 (%struct.two_floats_t*, double, double, ...) bitcast (i32 (...)* @init_two_floats to i32 (%struct.two_floats_t*, double, double, ...)*)(%struct.two_floats_t* %13, double 7.801000e+01, double 1.221000e+02)
%30 = tail call i32 (%struct.two_floats_t*, double, double, ...) bitcast (i32 (...)* @init_two_floats to i32 (%struct.two_floats_t*, double, double, ...)*)(%struct.two_floats_t* %14, double 0xC093416147AE147B, double -1.992100e+02)
ret void
}