#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 XCSF {
  int dummy;
};
struct Cl {
  int dummy;
};

/* Variables and functions */
int /*<<< orphan*/ act_init(struct XCSF const *, struct Cl *);
int /*<<< orphan*/ action_set(struct XCSF const *, struct Cl *);
int /*<<< orphan*/ cond_init(struct XCSF const *, struct Cl *);
int /*<<< orphan*/ condition_set(struct XCSF const *, struct Cl *);
int /*<<< orphan*/ pred_init(struct XCSF const *, struct Cl *);
int /*<<< orphan*/ prediction_set(struct XCSF const *, struct Cl *);
void cl_rand(const struct XCSF *xcsf, struct Cl *c) {
  action_set(xcsf, c);
  prediction_set(xcsf, c);
  condition_set(xcsf, c);
  cond_init(xcsf, c);
  pred_init(xcsf, c);
  act_init(xcsf, c);
}


x86 assembly (clang, -O0):
<cl_rand>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <action_set@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1050 <prediction_set@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1030 <condition_set@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1040 <cond_init@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1080 <pred_init@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1070 <act_init@plt>
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cl_rand>:
push   %r14
push   %rbx
push   %rax
mov    %rsi,%r14
mov    %rdi,%rbx
call   1060 <action_set@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1050 <prediction_set@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1030 <condition_set@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1040 <cond_init@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1080 <pred_init@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
add    $0x8,%rsp
pop    %rbx
pop    %r14
jmp    1070 <act_init@plt>

LLVM IR (-O0):
%struct.XCSF = type { i32 }
%struct.Cl = type { i32 }
define void @cl_rand(%struct.XCSF* %0, %struct.Cl* %1) {
%3 = alloca %struct.XCSF*
%4 = alloca %struct.Cl*
store %struct.XCSF* %0, %struct.XCSF** %3
store %struct.Cl* %1, %struct.Cl** %4
%5 = load %struct.XCSF*, %struct.XCSF** %3
%6 = load %struct.Cl*, %struct.Cl** %4
%7 = call i32 @action_set(%struct.XCSF* %5, %struct.Cl* %6)
%8 = load %struct.XCSF*, %struct.XCSF** %3
%9 = load %struct.Cl*, %struct.Cl** %4
%10 = call i32 @prediction_set(%struct.XCSF* %8, %struct.Cl* %9)
%11 = load %struct.XCSF*, %struct.XCSF** %3
%12 = load %struct.Cl*, %struct.Cl** %4
%13 = call i32 @condition_set(%struct.XCSF* %11, %struct.Cl* %12)
%14 = load %struct.XCSF*, %struct.XCSF** %3
%15 = load %struct.Cl*, %struct.Cl** %4
%16 = call i32 @cond_init(%struct.XCSF* %14, %struct.Cl* %15)
%17 = load %struct.XCSF*, %struct.XCSF** %3
%18 = load %struct.Cl*, %struct.Cl** %4
%19 = call i32 @pred_init(%struct.XCSF* %17, %struct.Cl* %18)
%20 = load %struct.XCSF*, %struct.XCSF** %3
%21 = load %struct.Cl*, %struct.Cl** %4
%22 = call i32 @act_init(%struct.XCSF* %20, %struct.Cl* %21)
ret void
}

LLVM IR (-O2):
%struct.XCSF = type { i32 }
%struct.Cl = type { i32 }
define void @cl_rand(%struct.XCSF* %0, %struct.Cl* %1) {
%3 = tail call i32 @action_set(%struct.XCSF* %0, %struct.Cl* %1)
%4 = tail call i32 @prediction_set(%struct.XCSF* %0, %struct.Cl* %1)
%5 = tail call i32 @condition_set(%struct.XCSF* %0, %struct.Cl* %1)
%6 = tail call i32 @cond_init(%struct.XCSF* %0, %struct.Cl* %1)
%7 = tail call i32 @pred_init(%struct.XCSF* %0, %struct.Cl* %1)
%8 = tail call i32 @act_init(%struct.XCSF* %0, %struct.Cl* %1)
ret void
}