#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
struct two_floats_t {
  int dummy;
};
struct three_char_t {
  int dummy;
};
struct small_rep_info_t {
  int dummy;
};
struct one_double_t {
  int dummy;
};
struct int_char_combo_t {
  int dummy;
};
struct five_char_t {
  int dummy;
};
struct bit_flags_t {
  int dummy;
};
struct bit_flags_combo_t {
  int dummy;
};

/* Variables and functions */
int /*<<< orphan*/ init_bit_flags(struct bit_flags_t *, unsigned int,
                                  unsigned int, unsigned int, unsigned int,
                                  unsigned int, unsigned int);
int /*<<< orphan*/ init_bit_flags_combo(struct bit_flags_combo_t *,
                                        unsigned int, unsigned int, char,
                                        unsigned int, unsigned int, char,
                                        unsigned int, unsigned int);
int /*<<< orphan*/ init_five_chars(struct five_char_t *, char, char, char, char,
                                   char);
int /*<<< orphan*/ init_int_char_combo(struct int_char_combo_t *, int, char);
int /*<<< orphan*/ init_one_double(struct one_double_t *, double);
int /*<<< orphan*/ init_struct_rep(struct small_rep_info_t *, int);
int /*<<< orphan*/ init_three_chars(struct three_char_t *, char, char, char);
int /*<<< orphan*/ init_two_floats(struct two_floats_t *, double, double);
void init_small_structs(
    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.375);
  init_one_double(d3, 675.09375);
  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)
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)
call   1030 <init_bit_flags_combo@plt>
mov    0x10(%rbp),%rdi
mov    $0x61,%esi
mov    $0x62,%edx
mov    $0x63,%ecx
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
call   1090 <init_five_chars@plt>
mov    0x20(%rbp),%rdi
mov    $0x7b,%esi
mov    $0x7a,%edx
call   1040 <init_int_char_combo@plt>
mov    -0x8(%rbp),%rdi
mov    $0x2,%esi
call   10a0 <init_struct_rep@plt>
mov    -0x10(%rbp),%rdi
mov    $0x4,%esi
call   10a0 <init_struct_rep@plt>
mov    -0x18(%rbp),%rdi
mov    $0x5,%esi
call   10a0 <init_struct_rep@plt>
mov    -0x20(%rbp),%rdi
mov    $0x6,%esi
call   10a0 <init_struct_rep@plt>
mov    0x28(%rbp),%rdi
movsd  0xd93(%rip),%xmm0
call   1060 <init_one_double@plt>
mov    0x30(%rbp),%rdi
movsd  0xd7a(%rip),%xmm0
call   1060 <init_one_double@plt>
mov    0x38(%rbp),%rdi
movsd  0xd61(%rip),%xmm0
call   1060 <init_one_double@plt>
mov    0x40(%rbp),%rdi
movsd  0xd40(%rip),%xmm0
movsd  0xd40(%rip),%xmm1
call   1070 <init_two_floats@plt>
mov    0x48(%rbp),%rdi
movsd  0xd17(%rip),%xmm0
movsd  0xd17(%rip),%xmm1
call   1070 <init_two_floats@plt>
mov    0x50(%rbp),%rdi
movsd  0xcee(%rip),%xmm0
movsd  0xcee(%rip),%xmm1
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
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
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
call   1080 <init_three_chars@plt>
mov    %rbp,%rdi
mov    $0x6c,%esi
mov    $0x6d,%edx
mov    $0x6e,%ecx
mov    $0x6f,%r8d
mov    $0x70,%r9d
call   1090 <init_five_chars@plt>
mov    %rbx,%rdi
mov    $0x7b,%esi
mov    $0x7a,%edx
call   1040 <init_int_char_combo@plt>
mov    %r13,%rdi
mov    $0x2,%esi
call   10a0 <init_struct_rep@plt>
mov    %r12,%rdi
mov    $0x4,%esi
call   10a0 <init_struct_rep@plt>
mov    0x8(%rsp),%rdi
mov    $0x5,%esi
call   10a0 <init_struct_rep@plt>
mov    0x18(%rsp),%rdi
mov    $0x6,%esi
call   10a0 <init_struct_rep@plt>
movsd  0xd1f(%rip),%xmm0
mov    0x10(%rsp),%rdi
call   1060 <init_one_double@plt>
movsd  0xd15(%rip),%xmm0
mov    0x20(%rsp),%rdi
call   1060 <init_one_double@plt>
movsd  0xd0b(%rip),%xmm0
mov    0x28(%rsp),%rdi
call   1060 <init_one_double@plt>
movsd  0xd01(%rip),%xmm0
movsd  0xd01(%rip),%xmm1
mov    0x30(%rsp),%rdi
call   1070 <init_two_floats@plt>
movsd  0xcf7(%rip),%xmm0
movsd  0xcf7(%rip),%xmm1
mov    0x38(%rsp),%rdi
call   1070 <init_two_floats@plt>
movsd  0xced(%rip),%xmm0
movsd  0xced(%rip),%xmm1
mov    0x40(%rsp),%rdi
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 { i32 }
%struct.bit_flags_t = type { i32 }
%struct.bit_flags_combo_t = type { i32 }
%struct.three_char_t = type { i32 }
%struct.five_char_t = type { i32 }
%struct.int_char_combo_t = type { i32 }
%struct.one_double_t = type { i32 }
%struct.two_floats_t = type { i32 }
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 @init_bit_flags(%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 @init_bit_flags_combo(%struct.bit_flags_combo_t* %33, i32 1, i32 0, i8 signext 121, i32 1, i32 0, i8 signext 110, i32 1, i32 0)
%35 = load %struct.three_char_t*, %struct.three_char_t** %22
%36 = call i32 @init_three_chars(%struct.three_char_t* %35, i8 signext 97, i8 signext 98, i8 signext 99)
%37 = load %struct.five_char_t*, %struct.five_char_t** %23
%38 = call i32 @init_five_chars(%struct.five_char_t* %37, i8 signext 108, i8 signext 109, i8 signext 110, i8 signext 111, i8 signext 112)
%39 = load %struct.int_char_combo_t*, %struct.int_char_combo_t** %24
%40 = call i32 @init_int_char_combo(%struct.int_char_combo_t* %39, i32 123, i8 signext 122)
%41 = load %struct.small_rep_info_t*, %struct.small_rep_info_t** %16
%42 = call i32 @init_struct_rep(%struct.small_rep_info_t* %41, i32 2)
%43 = load %struct.small_rep_info_t*, %struct.small_rep_info_t** %17
%44 = call i32 @init_struct_rep(%struct.small_rep_info_t* %43, i32 4)
%45 = load %struct.small_rep_info_t*, %struct.small_rep_info_t** %18
%46 = call i32 @init_struct_rep(%struct.small_rep_info_t* %45, i32 5)
%47 = load %struct.small_rep_info_t*, %struct.small_rep_info_t** %19
%48 = call i32 @init_struct_rep(%struct.small_rep_info_t* %47, i32 6)
%49 = load %struct.one_double_t*, %struct.one_double_t** %25
%50 = call i32 @init_one_double(%struct.one_double_t* %49, double 1.050000e+01)
%51 = load %struct.one_double_t*, %struct.one_double_t** %26
%52 = call i32 @init_one_double(%struct.one_double_t* %51, double -3.375000e+00)
%53 = load %struct.one_double_t*, %struct.one_double_t** %27
%54 = call i32 @init_one_double(%struct.one_double_t* %53, double 0x408518C000000000)
%55 = load %struct.two_floats_t*, %struct.two_floats_t** %28
%56 = call i32 @init_two_floats(%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 @init_two_floats(%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 @init_two_floats(%struct.two_floats_t* %59, double 0xC093416147AE147B, double -1.992100e+02)
ret void
}

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