#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 */

/* Variables and functions */
int /*<<< orphan*/ all_false(unsigned long);
int /*<<< orphan*/ all_true(unsigned long);
int /*<<< orphan*/ double_basic_op(char *, unsigned long);
int /*<<< orphan*/ file_read(unsigned int);
int /*<<< orphan*/ file_read_direct(unsigned int);
int /*<<< orphan*/ file_read_random(unsigned int);
int /*<<< orphan*/ file_read_random_direct(unsigned int);
int /*<<< orphan*/ file_write(unsigned int);
int /*<<< orphan*/ file_write_random(unsigned int);
int /*<<< orphan*/ float_basic_op(char *, unsigned long);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
int /*<<< orphan*/ function_calls(unsigned int);
int /*<<< orphan*/ function_calls_recursive(unsigned int);
int /*<<< orphan*/ int_basic_op(char *, unsigned long);
int /*<<< orphan*/ long_basic_op(char *, unsigned long);
int /*<<< orphan*/ mem_calloc(unsigned int);
int /*<<< orphan*/ mem_read_contig(unsigned int);
int /*<<< orphan*/ mem_read_ram(unsigned long);
int /*<<< orphan*/ mem_read_random(unsigned int);
int /*<<< orphan*/ mem_read_strided(unsigned int, unsigned int);
int /*<<< orphan*/ mem_write_contig(unsigned int);
int /*<<< orphan*/ mem_write_random(unsigned int);
int /*<<< orphan*/ mem_write_strided(unsigned int, unsigned int);
int /*<<< orphan*/ mk_rm_dir(unsigned int);
int /*<<< orphan*/ printf(char *);
int /*<<< orphan*/ stderr;
scalar_t__ strcmp(char *, char *);
int /*<<< orphan*/ switch_jump(unsigned long);
int /*<<< orphan*/ t2_f2(unsigned long);
int /*<<< orphan*/ t_f_random(unsigned long);
int /*<<< orphan*/ true_false(unsigned long);
void bench_level0(char *b, unsigned int s, unsigned int t, unsigned long r,
                  char *o, char *dt) {
  if (strcmp(b, "basic_op") == 0) {
    if (strcmp(dt, "int") == 0)
      int_basic_op(o, r);
    else if (strcmp(dt, "float") == 0)
      float_basic_op(o, r);
    else if (strcmp(dt, "long") == 0)
      long_basic_op(o, r);
    else if (strcmp(dt, "double") == 0)
      double_basic_op(o, r);
    else
      fprintf(stderr, "ERROR: check you are using a valid data type...\n");
  } else if (strcmp(b, "memory") == 0) {
    if (strcmp(o, "calloc") == 0)
      mem_calloc(s);
    else if (strcmp(o, "read_ram") == 0)
      mem_read_ram(r);
    else if (strcmp(o, "write_contig") == 0)
      mem_write_contig(s);
    else if (strcmp(o, "write_strided") == 0)
      mem_write_strided(s, t);
    else if (strcmp(o, "write_random") == 0)
      mem_write_random(s);
    else if (strcmp(o, "read_contig") == 0)
      mem_read_contig(s);
    else if (strcmp(o, "read_strided") == 0)
      mem_read_strided(s, t);
    else if (strcmp(o, "read_random") == 0)
      mem_read_random(s);
    else
      fprintf(stderr, "ERROR: check you are using a valid operation type...\n");
  } else if (strcmp(b, "function") == 0) {
    if (strcmp(o, "normal") == 0)
      function_calls(s);
    else if (strcmp(o, "recursive") == 0)
      function_calls_recursive(s);
    else
      fprintf(stderr, "ERROR: check you are using a valid operation type...\n");
  } else if (strcmp(b, "io") == 0) {
    if (strcmp(o, "mk_rm_dir") == 0)
      mk_rm_dir(s);
    else if (strcmp(o, "file_write") == 0)
      file_write(s);
    else if (strcmp(o, "file_read") == 0)
      file_read(s);
    else if (strcmp(o, "file_write_random") == 0)
      file_write_random(s);
    else if (strcmp(o, "file_read_random") == 0)
      file_read_random(s);
    else if (strcmp(o, "file_read_direct") == 0)
      file_read_direct(s);
    else if (strcmp(o, "file_read_random_direct") == 0)
      file_read_random_direct(s);
    else
      fprintf(stderr, "ERROR: check you are using a valid operation type...\n");
  } else if (strcmp(b, "branch") == 0) {
    if (strcmp(o, "all_true") == 0)
      all_true(r);
    else if (strcmp(o, "all_false") == 0)
      all_false(r);
    else if (strcmp(o, "true_false") == 0)
      true_false(r);
    else if (strcmp(o, "t2_f2") == 0)
      t2_f2(r);
    else if (strcmp(o, "t4_f4") == 0)
      t2_f2(r);
    else if (strcmp(o, "t8_f8") == 0)
      t2_f2(r);
    else if (strcmp(o, "t_f_random") == 0)
      t_f_random(r);
    else if (strcmp(o, "switch") == 0)
      switch_jump(r);
    else
      fprintf(stderr, "ERROR: check you are using a valid operation type...\n");
  } else
    printf("Not implemented yet.\n");
}


x86 assembly (clang, -O0):
<bench_level0>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
mov    -0x8(%rbp),%rdi
lea    0xcf7(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    13f1 <bench_level0+0x111>
mov    -0x28(%rbp),%rdi
lea    0xce6(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1344 <bench_level0+0x64>
mov    -0x20(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1050 <int_basic_op@plt>
jmp    13ec <bench_level0+0x10c>
mov    -0x28(%rbp),%rdi
lea    0xcbe(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1370 <bench_level0+0x90>
mov    -0x20(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   10c0 <float_basic_op@plt>
jmp    13e7 <bench_level0+0x107>
mov    -0x28(%rbp),%rdi
lea    0xc98(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    139c <bench_level0+0xbc>
mov    -0x20(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1170 <long_basic_op@plt>
jmp    13e2 <bench_level0+0x102>
mov    -0x28(%rbp),%rdi
lea    0xc71(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    13c8 <bench_level0+0xe8>
mov    -0x20(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   10f0 <double_basic_op@plt>
jmp    13dd <bench_level0+0xfd>
mov    0x2c11(%rip),%rax
mov    (%rax),%edi
lea    0xc47(%rip),%rsi
call   1100 <fprintf@plt>
jmp    13e2 <bench_level0+0x102>
jmp    13e7 <bench_level0+0x107>
jmp    13ec <bench_level0+0x10c>
jmp    1928 <bench_level0+0x648>
mov    -0x8(%rbp),%rdi
lea    0xc54(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1587 <bench_level0+0x2a7>
mov    -0x20(%rbp),%rdi
lea    0xc41(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1432 <bench_level0+0x152>
mov    -0xc(%rbp),%edi
call   11d0 <mem_calloc@plt>
jmp    1582 <bench_level0+0x2a2>
mov    -0x20(%rbp),%rdi
lea    0xc21(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    145a <bench_level0+0x17a>
mov    -0x18(%rbp),%rdi
call   1200 <mem_read_ram@plt>
jmp    157d <bench_level0+0x29d>
mov    -0x20(%rbp),%rdi
lea    0xc02(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1481 <bench_level0+0x1a1>
mov    -0xc(%rbp),%edi
call   1120 <mem_write_contig@plt>
jmp    1578 <bench_level0+0x298>
mov    -0x20(%rbp),%rdi
lea    0xbe8(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    14ab <bench_level0+0x1cb>
mov    -0xc(%rbp),%edi
mov    -0x10(%rbp),%esi
call   1140 <mem_write_strided@plt>
jmp    1573 <bench_level0+0x293>
mov    -0x20(%rbp),%rdi
lea    0xc5c(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    14d2 <bench_level0+0x1f2>
mov    -0xc(%rbp),%edi
call   1090 <mem_write_random@plt>
jmp    156e <bench_level0+0x28e>
mov    -0x20(%rbp),%rdi
lea    0xba5(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    14f9 <bench_level0+0x219>
mov    -0xc(%rbp),%edi
call   1110 <mem_read_contig@plt>
jmp    1569 <bench_level0+0x289>
mov    -0x20(%rbp),%rdi
lea    0xb8a(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1523 <bench_level0+0x243>
mov    -0xc(%rbp),%edi
mov    -0x10(%rbp),%esi
call   10b0 <mem_read_strided@plt>
jmp    1564 <bench_level0+0x284>
mov    -0x20(%rbp),%rdi
lea    0xbf6(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    154a <bench_level0+0x26a>
mov    -0xc(%rbp),%edi
call   1190 <mem_read_random@plt>
jmp    155f <bench_level0+0x27f>
mov    0x2a8f(%rip),%rax
mov    (%rax),%edi
lea    0xb41(%rip),%rsi
call   1100 <fprintf@plt>
jmp    1564 <bench_level0+0x284>
jmp    1569 <bench_level0+0x289>
jmp    156e <bench_level0+0x28e>
jmp    1573 <bench_level0+0x293>
jmp    1578 <bench_level0+0x298>
jmp    157d <bench_level0+0x29d>
jmp    1582 <bench_level0+0x2a2>
jmp    1923 <bench_level0+0x643>
mov    -0x8(%rbp),%rdi
lea    0xb3f(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    160e <bench_level0+0x32e>
mov    -0x20(%rbp),%rdi
lea    0xb2e(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    15c8 <bench_level0+0x2e8>
mov    -0xc(%rbp),%edi
call   11e0 <function_calls@plt>
jmp    1609 <bench_level0+0x329>
mov    -0x20(%rbp),%rdi
lea    0xb0e(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    15ef <bench_level0+0x30f>
mov    -0xc(%rbp),%edi
call   1180 <function_calls_recursive@plt>
jmp    1604 <bench_level0+0x324>
mov    0x29ea(%rip),%rax
mov    (%rax),%edi
lea    0xa9c(%rip),%rsi
call   1100 <fprintf@plt>
jmp    1609 <bench_level0+0x329>
jmp    191e <bench_level0+0x63e>
mov    -0x8(%rbp),%rdi
lea    0xad2(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1771 <bench_level0+0x491>
mov    -0x20(%rbp),%rdi
lea    0xabb(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    164f <bench_level0+0x36f>
mov    -0xc(%rbp),%edi
call   1030 <mk_rm_dir@plt>
jmp    176c <bench_level0+0x48c>
mov    -0x20(%rbp),%rdi
lea    0xa9e(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1676 <bench_level0+0x396>
mov    -0xc(%rbp),%edi
call   11f0 <file_write@plt>
jmp    1767 <bench_level0+0x487>
mov    -0x20(%rbp),%rdi
lea    0xa82(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    169d <bench_level0+0x3bd>
mov    -0xc(%rbp),%edi
call   11b0 <file_read@plt>
jmp    1762 <bench_level0+0x482>
mov    -0x20(%rbp),%rdi
lea    0xa65(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    16c4 <bench_level0+0x3e4>
mov    -0xc(%rbp),%edi
call   1160 <file_write_random@plt>
jmp    175d <bench_level0+0x47d>
mov    -0x20(%rbp),%rdi
lea    0xa50(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    16eb <bench_level0+0x40b>
mov    -0xc(%rbp),%edi
call   11c0 <file_read_random@plt>
jmp    1758 <bench_level0+0x478>
mov    -0x20(%rbp),%rdi
lea    0xa3a(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1712 <bench_level0+0x432>
mov    -0xc(%rbp),%edi
call   11a0 <file_read_direct@plt>
jmp    1753 <bench_level0+0x473>
mov    -0x20(%rbp),%rdi
lea    0xa24(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1739 <bench_level0+0x459>
mov    -0xc(%rbp),%edi
call   1040 <file_read_random_direct@plt>
jmp    174e <bench_level0+0x46e>
mov    0x28a0(%rip),%rax
mov    (%rax),%edi
lea    0x952(%rip),%rsi
call   1100 <fprintf@plt>
jmp    1753 <bench_level0+0x473>
jmp    1758 <bench_level0+0x478>
jmp    175d <bench_level0+0x47d>
jmp    1762 <bench_level0+0x482>
jmp    1767 <bench_level0+0x487>
jmp    176c <bench_level0+0x48c>
jmp    1919 <bench_level0+0x639>
mov    -0x8(%rbp),%rdi
lea    0x9dd(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1908 <bench_level0+0x628>
mov    -0x20(%rbp),%rdi
lea    0x9ca(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    17b3 <bench_level0+0x4d3>
mov    -0x18(%rbp),%rdi
call   1150 <all_true@plt>
jmp    1903 <bench_level0+0x623>
mov    -0x20(%rbp),%rdi
lea    0x9ab(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    17db <bench_level0+0x4fb>
mov    -0x18(%rbp),%rdi
call   1130 <all_false@plt>
jmp    18fe <bench_level0+0x61e>
mov    -0x20(%rbp),%rdi
lea    0x98d(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1803 <bench_level0+0x523>
mov    -0x18(%rbp),%rdi
call   1060 <true_false@plt>
jmp    18f9 <bench_level0+0x619>
mov    -0x20(%rbp),%rdi
lea    0x970(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    182b <bench_level0+0x54b>
mov    -0x18(%rbp),%rdi
call   10a0 <t2_f2@plt>
jmp    18f4 <bench_level0+0x614>
mov    -0x20(%rbp),%rdi
lea    0x94e(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    1853 <bench_level0+0x573>
mov    -0x18(%rbp),%rdi
call   10a0 <t2_f2@plt>
jmp    18ef <bench_level0+0x60f>
mov    -0x20(%rbp),%rdi
lea    0x92c(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    187b <bench_level0+0x59b>
mov    -0x18(%rbp),%rdi
call   10a0 <t2_f2@plt>
jmp    18ea <bench_level0+0x60a>
mov    -0x20(%rbp),%rdi
lea    0x90a(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    18a3 <bench_level0+0x5c3>
mov    -0x18(%rbp),%rdi
call   1070 <t_f_random@plt>
jmp    18e5 <bench_level0+0x605>
mov    -0x20(%rbp),%rdi
lea    0x8ed(%rip),%rsi
call   10e0 <strcmp@plt>
cmp    $0x0,%rax
jne    18cb <bench_level0+0x5eb>
mov    -0x18(%rbp),%rdi
call   10d0 <switch_jump@plt>
jmp    18e0 <bench_level0+0x600>
mov    0x270e(%rip),%rax
mov    (%rax),%edi
lea    0x7c0(%rip),%rsi
call   1100 <fprintf@plt>
jmp    18e5 <bench_level0+0x605>
jmp    18ea <bench_level0+0x60a>
jmp    18ef <bench_level0+0x60f>
jmp    18f4 <bench_level0+0x614>
jmp    18f9 <bench_level0+0x619>
jmp    18fe <bench_level0+0x61e>
jmp    1903 <bench_level0+0x623>
jmp    1914 <bench_level0+0x634>
lea    0x893(%rip),%rdi
call   1080 <printf@plt>
jmp    1919 <bench_level0+0x639>
jmp    191e <bench_level0+0x63e>
jmp    1923 <bench_level0+0x643>
jmp    1928 <bench_level0+0x648>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bench_level0>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r9,%rbx
mov    %r8,%r12
mov    %rcx,%r15
mov    %edx,%r13d
mov    %esi,%r14d
mov    %rdi,%rbp
lea    0xcfc(%rip),%rsi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1388 <bench_level0+0xa8>
lea    0xd3b(%rip),%rsi
mov    %rbp,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     13fd <bench_level0+0x11d>
lea    0xda4(%rip),%rsi
mov    %rbp,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     14cf <bench_level0+0x1ef>
lea    0xda6(%rip),%rsi
mov    %rbp,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     153b <bench_level0+0x25b>
lea    0xdfc(%rip),%rsi
mov    %rbp,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1628 <bench_level0+0x348>
lea    0xe2d(%rip),%rdi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1060 <puts@plt>
lea    0xc7a(%rip),%rsi
mov    %rbx,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1522 <bench_level0+0x242>
lea    0xc66(%rip),%rsi
mov    %rbx,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     15f9 <bench_level0+0x319>
lea    0xc54(%rip),%rsi
mov    %rbx,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     16fe <bench_level0+0x41e>
lea    0xc41(%rip),%rsi
mov    %rbx,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1743 <bench_level0+0x463>
mov    0x2bf1(%rip),%rax
mov    (%rax),%edi
lea    0xc27(%rip),%rsi
jmp    150f <bench_level0+0x22f>
lea    0xc53(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1612 <bench_level0+0x332>
lea    0xc42(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1717 <bench_level0+0x437>
lea    0xc33(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     175c <bench_level0+0x47c>
lea    0xc28(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     179e <bench_level0+0x4be>
lea    0xcae(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     17e3 <bench_level0+0x503>
lea    0xc06(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     183b <bench_level0+0x55b>
lea    0xbfa(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     187d <bench_level0+0x59d>
lea    0xc78(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
jne    14ff <bench_level0+0x21f>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1190 <mem_read_random@plt>
lea    0xc04(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     172d <bench_level0+0x44d>
lea    0xbf3(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1772 <bench_level0+0x492>
mov    0x2ada(%rip),%rax
mov    (%rax),%edi
lea    0xb8c(%rip),%rsi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1100 <fprintf@plt>
mov    %r12,%rdi
mov    %r15,%rsi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1050 <int_basic_op@plt>
lea    0xbac(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1788 <bench_level0+0x4a8>
lea    0xb9e(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     17b7 <bench_level0+0x4d7>
lea    0xb91(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     17f9 <bench_level0+0x519>
lea    0xb83(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1851 <bench_level0+0x571>
lea    0xb7d(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1896 <bench_level0+0x5b6>
lea    0xb76(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     18ac <bench_level0+0x5cc>
lea    0xb6f(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
jne    14ff <bench_level0+0x21f>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1040 <file_read_random_direct@plt>
mov    %r12,%rdi
mov    %r15,%rsi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    10c0 <float_basic_op@plt>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    11d0 <mem_calloc@plt>
lea    0xb31(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     17cd <bench_level0+0x4ed>
lea    0xb22(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     180f <bench_level0+0x52f>
lea    0xb14(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1867 <bench_level0+0x587>
lea    0xb07(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1825 <bench_level0+0x545>
lea    0xaf5(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1825 <bench_level0+0x545>
lea    0xae3(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     1825 <bench_level0+0x545>
lea    0xad1(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
je     18c2 <bench_level0+0x5e2>
lea    0xac4(%rip),%rsi
mov    %r12,%rdi
call   10e0 <strcmp@plt>
test   %rax,%rax
jne    14ff <bench_level0+0x21f>
mov    %r15,%rdi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    10d0 <switch_jump@plt>
mov    %r12,%rdi
mov    %r15,%rsi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1170 <long_basic_op@plt>
mov    %r15,%rdi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1200 <mem_read_ram@plt>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    11e0 <function_calls@plt>
mov    %r12,%rdi
mov    %r15,%rsi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    10f0 <double_basic_op@plt>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1120 <mem_write_contig@plt>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1180 <function_calls_recursive@plt>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <mk_rm_dir@plt>
mov    %r14d,%edi
mov    %r13d,%esi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1140 <mem_write_strided@plt>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    11f0 <file_write@plt>
mov    %r15,%rdi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1150 <all_true@plt>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1090 <mem_write_random@plt>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    11b0 <file_read@plt>
mov    %r15,%rdi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1130 <all_false@plt>
mov    %r15,%rdi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    10a0 <t2_f2@plt>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1110 <mem_read_contig@plt>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1160 <file_write_random@plt>
mov    %r15,%rdi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1070 <true_false@plt>
mov    %r14d,%edi
mov    %r13d,%esi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    10b0 <mem_read_strided@plt>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    11c0 <file_read_random@plt>
mov    %r14d,%edi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    11a0 <file_read_direct@plt>
mov    %r15,%rdi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1080 <t_f_random@plt>

LLVM IR (-O0):
@.str = [9 x i8] c"basic_op\00"
@.str.1 = [4 x i8] c"int\00"
@.str.2 = [6 x i8] c"float\00"
@.str.3 = [5 x i8] c"long\00"
@.str.4 = [7 x i8] c"double\00"
@stderr = global i32 0
@.str.5 = [49 x i8] c"ERROR: check you are using a valid data type...\0A\00"
@.str.6 = [7 x i8] c"memory\00"
@.str.7 = [7 x i8] c"calloc\00"
@.str.8 = [9 x i8] c"read_ram\00"
@.str.9 = [13 x i8] c"write_contig\00"
@.str.10 = [14 x i8] c"write_strided\00"
@.str.11 = [13 x i8] c"write_random\00"
@.str.12 = [12 x i8] c"read_contig\00"
@.str.13 = [13 x i8] c"read_strided\00"
@.str.14 = [12 x i8] c"read_random\00"
@.str.15 = [54 x i8] c"ERROR: check you are using a valid operation type...\0A\00"
@.str.16 = [9 x i8] c"function\00"
@.str.17 = [7 x i8] c"normal\00"
@.str.18 = [10 x i8] c"recursive\00"
@.str.19 = [3 x i8] c"io\00"
@.str.20 = [10 x i8] c"mk_rm_dir\00"
@.str.21 = [11 x i8] c"file_write\00"
@.str.22 = [10 x i8] c"file_read\00"
@.str.23 = [18 x i8] c"file_write_random\00"
@.str.24 = [17 x i8] c"file_read_random\00"
@.str.25 = [17 x i8] c"file_read_direct\00"
@.str.26 = [24 x i8] c"file_read_random_direct\00"
@.str.27 = [7 x i8] c"branch\00"
@.str.28 = [9 x i8] c"all_true\00"
@.str.29 = [10 x i8] c"all_false\00"
@.str.30 = [11 x i8] c"true_false\00"
@.str.31 = [6 x i8] c"t2_f2\00"
@.str.32 = [6 x i8] c"t4_f4\00"
@.str.33 = [6 x i8] c"t8_f8\00"
@.str.34 = [11 x i8] c"t_f_random\00"
@.str.35 = [7 x i8] c"switch\00"
@.str.36 = [22 x i8] c"Not implemented yet.\0A\00"
define void @bench_level0(i8* %0, i32 %1, i32 %2, i64 %3, i8* %4, i8* %5) {
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i64
%11 = alloca i8*
%12 = alloca i8*
store i8* %0, i8** %7
store i32 %1, i32* %8
store i32 %2, i32* %9
store i64 %3, i64* %10
store i8* %4, i8** %11
store i8* %5, i8** %12
%13 = load i8*, i8** %7
%14 = call i64 @strcmp(i8* %13, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
%15 = icmp eq i64 %14, 0
br i1 %15, label %16, label %55
16: ; preds = %6
%17 = load i8*, i8** %12
%18 = call i64 @strcmp(i8* %17, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
%19 = icmp eq i64 %18, 0
br i1 %19, label %20, label %24
20: ; preds = %16
%21 = load i8*, i8** %11
%22 = load i64, i64* %10
%23 = call i32 @int_basic_op(i8* %21, i64 %22)
br label %54
24: ; preds = %16
%25 = load i8*, i8** %12
%26 = call i64 @strcmp(i8* %25, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0))
%27 = icmp eq i64 %26, 0
br i1 %27, label %28, label %32
28: ; preds = %24
%29 = load i8*, i8** %11
%30 = load i64, i64* %10
%31 = call i32 @float_basic_op(i8* %29, i64 %30)
br label %53
32: ; preds = %24
%33 = load i8*, i8** %12
%34 = call i64 @strcmp(i8* %33, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%35 = icmp eq i64 %34, 0
br i1 %35, label %36, label %40
36: ; preds = %32
%37 = load i8*, i8** %11
%38 = load i64, i64* %10
%39 = call i32 @long_basic_op(i8* %37, i64 %38)
br label %52
40: ; preds = %32
%41 = load i8*, i8** %12
%42 = call i64 @strcmp(i8* %41, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%43 = icmp eq i64 %42, 0
br i1 %43, label %44, label %48
44: ; preds = %40
%45 = load i8*, i8** %11
%46 = load i64, i64* %10
%47 = call i32 @double_basic_op(i8* %45, i64 %46)
br label %51
48: ; preds = %40
%49 = load i32, i32* @stderr
%50 = call i32 @fprintf(i32 %49, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %51
51: ; preds = %48, %44
br label %52
52: ; preds = %51, %36
br label %53
53: ; preds = %52, %28
br label %54
54: ; preds = %53, %20
br label %291
55: ; preds = %6
%56 = load i8*, i8** %7
%57 = call i64 @strcmp(i8* %56, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i64 0, i64 0))
%58 = icmp eq i64 %57, 0
br i1 %58, label %59, label %128
59: ; preds = %55
%60 = load i8*, i8** %11
%61 = call i64 @strcmp(i8* %60, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0))
%62 = icmp eq i64 %61, 0
br i1 %62, label %63, label %66
63: ; preds = %59
%64 = load i32, i32* %8
%65 = call i32 @mem_calloc(i32 %64)
br label %127
66: ; preds = %59
%67 = load i8*, i8** %11
%68 = call i64 @strcmp(i8* %67, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0))
%69 = icmp eq i64 %68, 0
br i1 %69, label %70, label %73
70: ; preds = %66
%71 = load i64, i64* %10
%72 = call i32 @mem_read_ram(i64 %71)
br label %126
73: ; preds = %66
%74 = load i8*, i8** %11
%75 = call i64 @strcmp(i8* %74, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i64 0, i64 0))
%76 = icmp eq i64 %75, 0
br i1 %76, label %77, label %80
77: ; preds = %73
%78 = load i32, i32* %8
%79 = call i32 @mem_write_contig(i32 %78)
br label %125
80: ; preds = %73
%81 = load i8*, i8** %11
%82 = call i64 @strcmp(i8* %81, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.10, i64 0, i64 0))
%83 = icmp eq i64 %82, 0
br i1 %83, label %84, label %88
84: ; preds = %80
%85 = load i32, i32* %8
%86 = load i32, i32* %9
%87 = call i32 @mem_write_strided(i32 %85, i32 %86)
br label %124
88: ; preds = %80
%89 = load i8*, i8** %11
%90 = call i64 @strcmp(i8* %89, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i64 0, i64 0))
%91 = icmp eq i64 %90, 0
br i1 %91, label %92, label %95
92: ; preds = %88
%93 = load i32, i32* %8
%94 = call i32 @mem_write_random(i32 %93)
br label %123
95: ; preds = %88
%96 = load i8*, i8** %11
%97 = call i64 @strcmp(i8* %96, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.12, i64 0, i64 0))
%98 = icmp eq i64 %97, 0
br i1 %98, label %99, label %102
99: ; preds = %95
%100 = load i32, i32* %8
%101 = call i32 @mem_read_contig(i32 %100)
br label %122
102: ; preds = %95
%103 = load i8*, i8** %11
%104 = call i64 @strcmp(i8* %103, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.13, i64 0, i64 0))
%105 = icmp eq i64 %104, 0
br i1 %105, label %106, label %110
106: ; preds = %102
%107 = load i32, i32* %8
%108 = load i32, i32* %9
%109 = call i32 @mem_read_strided(i32 %107, i32 %108)
br label %121
110: ; preds = %102
%111 = load i8*, i8** %11
%112 = call i64 @strcmp(i8* %111, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.14, i64 0, i64 0))
%113 = icmp eq i64 %112, 0
br i1 %113, label %114, label %117
114: ; preds = %110
%115 = load i32, i32* %8
%116 = call i32 @mem_read_random(i32 %115)
br label %120
117: ; preds = %110
%118 = load i32, i32* @stderr
%119 = call i32 @fprintf(i32 %118, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.15, i64 0, i64 0))
br label %120
120: ; preds = %117, %114
br label %121
121: ; preds = %120, %106
br label %122
122: ; preds = %121, %99
br label %123
123: ; preds = %122, %92
br label %124
124: ; preds = %123, %84
br label %125
125: ; preds = %124, %77
br label %126
126: ; preds = %125, %70
br label %127
127: ; preds = %126, %63
br label %290
128: ; preds = %55
%129 = load i8*, i8** %7
%130 = call i64 @strcmp(i8* %129, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.16, i64 0, i64 0))
%131 = icmp eq i64 %130, 0
br i1 %131, label %132, label %151
132: ; preds = %128
%133 = load i8*, i8** %11
%134 = call i64 @strcmp(i8* %133, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.17, i64 0, i64 0))
%135 = icmp eq i64 %134, 0
br i1 %135, label %136, label %139
136: ; preds = %132
%137 = load i32, i32* %8
%138 = call i32 @function_calls(i32 %137)
br label %150
139: ; preds = %132
%140 = load i8*, i8** %11
%141 = call i64 @strcmp(i8* %140, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.18, i64 0, i64 0))
%142 = icmp eq i64 %141, 0
br i1 %142, label %143, label %146
143: ; preds = %139
%144 = load i32, i32* %8
%145 = call i32 @function_calls_recursive(i32 %144)
br label %149
146: ; preds = %139
%147 = load i32, i32* @stderr
%148 = call i32 @fprintf(i32 %147, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.15, i64 0, i64 0))
br label %149
149: ; preds = %146, %143
br label %150
150: ; preds = %149, %136
br label %289
151: ; preds = %128
%152 = load i8*, i8** %7
%153 = call i64 @strcmp(i8* %152, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0))
%154 = icmp eq i64 %153, 0
br i1 %154, label %155, label %214
155: ; preds = %151
%156 = load i8*, i8** %11
%157 = call i64 @strcmp(i8* %156, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.20, i64 0, i64 0))
%158 = icmp eq i64 %157, 0
br i1 %158, label %159, label %162
159: ; preds = %155
%160 = load i32, i32* %8
%161 = call i32 @mk_rm_dir(i32 %160)
br label %213
162: ; preds = %155
%163 = load i8*, i8** %11
%164 = call i64 @strcmp(i8* %163, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.21, i64 0, i64 0))
%165 = icmp eq i64 %164, 0
br i1 %165, label %166, label %169
166: ; preds = %162
%167 = load i32, i32* %8
%168 = call i32 @file_write(i32 %167)
br label %212
169: ; preds = %162
%170 = load i8*, i8** %11
%171 = call i64 @strcmp(i8* %170, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.22, i64 0, i64 0))
%172 = icmp eq i64 %171, 0
br i1 %172, label %173, label %176
173: ; preds = %169
%174 = load i32, i32* %8
%175 = call i32 @file_read(i32 %174)
br label %211
176: ; preds = %169
%177 = load i8*, i8** %11
%178 = call i64 @strcmp(i8* %177, i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.23, i64 0, i64 0))
%179 = icmp eq i64 %178, 0
br i1 %179, label %180, label %183
180: ; preds = %176
%181 = load i32, i32* %8
%182 = call i32 @file_write_random(i32 %181)
br label %210
183: ; preds = %176
%184 = load i8*, i8** %11
%185 = call i64 @strcmp(i8* %184, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.24, i64 0, i64 0))
%186 = icmp eq i64 %185, 0
br i1 %186, label %187, label %190
187: ; preds = %183
%188 = load i32, i32* %8
%189 = call i32 @file_read_random(i32 %188)
br label %209
190: ; preds = %183
%191 = load i8*, i8** %11
%192 = call i64 @strcmp(i8* %191, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.25, i64 0, i64 0))
%193 = icmp eq i64 %192, 0
br i1 %193, label %194, label %197
194: ; preds = %190
%195 = load i32, i32* %8
%196 = call i32 @file_read_direct(i32 %195)
br label %208
197: ; preds = %190
%198 = load i8*, i8** %11
%199 = call i64 @strcmp(i8* %198, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.26, i64 0, i64 0))
%200 = icmp eq i64 %199, 0
br i1 %200, label %201, label %204
201: ; preds = %197
%202 = load i32, i32* %8
%203 = call i32 @file_read_random_direct(i32 %202)
br label %207
204: ; preds = %197
%205 = load i32, i32* @stderr
%206 = call i32 @fprintf(i32 %205, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.15, i64 0, i64 0))
br label %207
207: ; preds = %204, %201
br label %208
208: ; preds = %207, %194
br label %209
209: ; preds = %208, %187
br label %210
210: ; preds = %209, %180
br label %211
211: ; preds = %210, %173
br label %212
212: ; preds = %211, %166
br label %213
213: ; preds = %212, %159
br label %288
214: ; preds = %151
%215 = load i8*, i8** %7
%216 = call i64 @strcmp(i8* %215, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.27, i64 0, i64 0))
%217 = icmp eq i64 %216, 0
br i1 %217, label %218, label %285
218: ; preds = %214
%219 = load i8*, i8** %11
%220 = call i64 @strcmp(i8* %219, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.28, i64 0, i64 0))
%221 = icmp eq i64 %220, 0
br i1 %221, label %222, label %225
222: ; preds = %218
%223 = load i64, i64* %10
%224 = call i32 @all_true(i64 %223)
br label %284
225: ; preds = %218
%226 = load i8*, i8** %11
%227 = call i64 @strcmp(i8* %226, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.29, i64 0, i64 0))
%228 = icmp eq i64 %227, 0
br i1 %228, label %229, label %232
229: ; preds = %225
%230 = load i64, i64* %10
%231 = call i32 @all_false(i64 %230)
br label %283
232: ; preds = %225
%233 = load i8*, i8** %11
%234 = call i64 @strcmp(i8* %233, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0))
%235 = icmp eq i64 %234, 0
br i1 %235, label %236, label %239
236: ; preds = %232
%237 = load i64, i64* %10
%238 = call i32 @true_false(i64 %237)
br label %282
239: ; preds = %232
%240 = load i8*, i8** %11
%241 = call i64 @strcmp(i8* %240, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.31, i64 0, i64 0))
%242 = icmp eq i64 %241, 0
br i1 %242, label %243, label %246
243: ; preds = %239
%244 = load i64, i64* %10
%245 = call i32 @t2_f2(i64 %244)
br label %281
246: ; preds = %239
%247 = load i8*, i8** %11
%248 = call i64 @strcmp(i8* %247, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.32, i64 0, i64 0))
%249 = icmp eq i64 %248, 0
br i1 %249, label %250, label %253
250: ; preds = %246
%251 = load i64, i64* %10
%252 = call i32 @t2_f2(i64 %251)
br label %280
253: ; preds = %246
%254 = load i8*, i8** %11
%255 = call i64 @strcmp(i8* %254, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.33, i64 0, i64 0))
%256 = icmp eq i64 %255, 0
br i1 %256, label %257, label %260
257: ; preds = %253
%258 = load i64, i64* %10
%259 = call i32 @t2_f2(i64 %258)
br label %279
260: ; preds = %253
%261 = load i8*, i8** %11
%262 = call i64 @strcmp(i8* %261, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.34, i64 0, i64 0))
%263 = icmp eq i64 %262, 0
br i1 %263, label %264, label %267
264: ; preds = %260
%265 = load i64, i64* %10
%266 = call i32 @t_f_random(i64 %265)
br label %278
267: ; preds = %260
%268 = load i8*, i8** %11
%269 = call i64 @strcmp(i8* %268, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.35, i64 0, i64 0))
%270 = icmp eq i64 %269, 0
br i1 %270, label %271, label %274
271: ; preds = %267
%272 = load i64, i64* %10
%273 = call i32 @switch_jump(i64 %272)
br label %277
274: ; preds = %267
%275 = load i32, i32* @stderr
%276 = call i32 @fprintf(i32 %275, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.15, i64 0, i64 0))
br label %277
277: ; preds = %274, %271
br label %278
278: ; preds = %277, %264
br label %279
279: ; preds = %278, %257
br label %280
280: ; preds = %279, %250
br label %281
281: ; preds = %280, %243
br label %282
282: ; preds = %281, %236
br label %283
283: ; preds = %282, %229
br label %284
284: ; preds = %283, %222
br label %287
285: ; preds = %214
%286 = call i32 @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.36, i64 0, i64 0))
br label %287
287: ; preds = %285, %284
br label %288
288: ; preds = %287, %213
br label %289
289: ; preds = %288, %150
br label %290
290: ; preds = %289, %127
br label %291
291: ; preds = %290, %54
ret void
}

LLVM IR (-O2):
@.str = [9 x i8] c"basic_op\00"
@.str.1 = [4 x i8] c"int\00"
@.str.2 = [6 x i8] c"float\00"
@.str.3 = [5 x i8] c"long\00"
@.str.4 = [7 x i8] c"double\00"
@stderr = global i32 0
@.str.5 = [49 x i8] c"ERROR: check you are using a valid data type...\0A\00"
@.str.6 = [7 x i8] c"memory\00"
@.str.7 = [7 x i8] c"calloc\00"
@.str.8 = [9 x i8] c"read_ram\00"
@.str.9 = [13 x i8] c"write_contig\00"
@.str.10 = [14 x i8] c"write_strided\00"
@.str.11 = [13 x i8] c"write_random\00"
@.str.12 = [12 x i8] c"read_contig\00"
@.str.13 = [13 x i8] c"read_strided\00"
@.str.14 = [12 x i8] c"read_random\00"
@.str.15 = [54 x i8] c"ERROR: check you are using a valid operation type...\0A\00"
@.str.16 = [9 x i8] c"function\00"
@.str.17 = [7 x i8] c"normal\00"
@.str.18 = [10 x i8] c"recursive\00"
@.str.19 = [3 x i8] c"io\00"
@.str.20 = [10 x i8] c"mk_rm_dir\00"
@.str.21 = [11 x i8] c"file_write\00"
@.str.22 = [10 x i8] c"file_read\00"
@.str.23 = [18 x i8] c"file_write_random\00"
@.str.24 = [17 x i8] c"file_read_random\00"
@.str.25 = [17 x i8] c"file_read_direct\00"
@.str.26 = [24 x i8] c"file_read_random_direct\00"
@.str.27 = [7 x i8] c"branch\00"
@.str.28 = [9 x i8] c"all_true\00"
@.str.29 = [10 x i8] c"all_false\00"
@.str.30 = [11 x i8] c"true_false\00"
@.str.31 = [6 x i8] c"t2_f2\00"
@.str.32 = [6 x i8] c"t4_f4\00"
@.str.33 = [6 x i8] c"t8_f8\00"
@.str.34 = [11 x i8] c"t_f_random\00"
@.str.35 = [7 x i8] c"switch\00"
@str = [21 x i8] c"Not implemented yet.\00"
define void @bench_level0(i8* %0, i32 %1, i32 %2, i64 %3, i8* %4, i8* %5) {
%7 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
%8 = icmp eq i64 %7, 0
br i1 %8, label %9, label %32
9: ; preds = %6
%10 = tail call i64 @strcmp(i8* %5, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
%11 = icmp eq i64 %10, 0
br i1 %11, label %12, label %14
12: ; preds = %9
%13 = tail call i32 @int_basic_op(i8* %4, i64 %3)
br label %183
14: ; preds = %9
%15 = tail call i64 @strcmp(i8* %5, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.2, i64 0, i64 0))
%16 = icmp eq i64 %15, 0
br i1 %16, label %17, label %19
17: ; preds = %14
%18 = tail call i32 @float_basic_op(i8* %4, i64 %3)
br label %183
19: ; preds = %14
%20 = tail call i64 @strcmp(i8* %5, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%21 = icmp eq i64 %20, 0
br i1 %21, label %22, label %24
22: ; preds = %19
%23 = tail call i32 @long_basic_op(i8* %4, i64 %3)
br label %183
24: ; preds = %19
%25 = tail call i64 @strcmp(i8* %5, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%26 = icmp eq i64 %25, 0
br i1 %26, label %27, label %29
27: ; preds = %24
%28 = tail call i32 @double_basic_op(i8* %4, i64 %3)
br label %183
29: ; preds = %24
%30 = load i32, i32* @stderr
%31 = tail call i32 @fprintf(i32 %30, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %183
32: ; preds = %6
%33 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.6, i64 0, i64 0))
%34 = icmp eq i64 %33, 0
br i1 %34, label %35, label %78
35: ; preds = %32
%36 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0))
%37 = icmp eq i64 %36, 0
br i1 %37, label %38, label %40
38: ; preds = %35
%39 = tail call i32 @mem_calloc(i32 %1)
br label %183
40: ; preds = %35
%41 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i64 0, i64 0))
%42 = icmp eq i64 %41, 0
br i1 %42, label %43, label %45
43: ; preds = %40
%44 = tail call i32 @mem_read_ram(i64 %3)
br label %183
45: ; preds = %40
%46 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i64 0, i64 0))
%47 = icmp eq i64 %46, 0
br i1 %47, label %48, label %50
48: ; preds = %45
%49 = tail call i32 @mem_write_contig(i32 %1)
br label %183
50: ; preds = %45
%51 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.10, i64 0, i64 0))
%52 = icmp eq i64 %51, 0
br i1 %52, label %53, label %55
53: ; preds = %50
%54 = tail call i32 @mem_write_strided(i32 %1, i32 %2)
br label %183
55: ; preds = %50
%56 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i64 0, i64 0))
%57 = icmp eq i64 %56, 0
br i1 %57, label %58, label %60
58: ; preds = %55
%59 = tail call i32 @mem_write_random(i32 %1)
br label %183
60: ; preds = %55
%61 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.12, i64 0, i64 0))
%62 = icmp eq i64 %61, 0
br i1 %62, label %63, label %65
63: ; preds = %60
%64 = tail call i32 @mem_read_contig(i32 %1)
br label %183
65: ; preds = %60
%66 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.13, i64 0, i64 0))
%67 = icmp eq i64 %66, 0
br i1 %67, label %68, label %70
68: ; preds = %65
%69 = tail call i32 @mem_read_strided(i32 %1, i32 %2)
br label %183
70: ; preds = %65
%71 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.14, i64 0, i64 0))
%72 = icmp eq i64 %71, 0
br i1 %72, label %73, label %75
73: ; preds = %70
%74 = tail call i32 @mem_read_random(i32 %1)
br label %183
75: ; preds = %70
%76 = load i32, i32* @stderr
%77 = tail call i32 @fprintf(i32 %76, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.15, i64 0, i64 0))
br label %183
78: ; preds = %32
%79 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.16, i64 0, i64 0))
%80 = icmp eq i64 %79, 0
br i1 %80, label %81, label %94
81: ; preds = %78
%82 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.17, i64 0, i64 0))
%83 = icmp eq i64 %82, 0
br i1 %83, label %84, label %86
84: ; preds = %81
%85 = tail call i32 @function_calls(i32 %1)
br label %183
86: ; preds = %81
%87 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.18, i64 0, i64 0))
%88 = icmp eq i64 %87, 0
br i1 %88, label %89, label %91
89: ; preds = %86
%90 = tail call i32 @function_calls_recursive(i32 %1)
br label %183
91: ; preds = %86
%92 = load i32, i32* @stderr
%93 = tail call i32 @fprintf(i32 %92, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.15, i64 0, i64 0))
br label %183
94: ; preds = %78
%95 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0))
%96 = icmp eq i64 %95, 0
br i1 %96, label %97, label %135
97: ; preds = %94
%98 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.20, i64 0, i64 0))
%99 = icmp eq i64 %98, 0
br i1 %99, label %100, label %102
100: ; preds = %97
%101 = tail call i32 @mk_rm_dir(i32 %1)
br label %183
102: ; preds = %97
%103 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.21, i64 0, i64 0))
%104 = icmp eq i64 %103, 0
br i1 %104, label %105, label %107
105: ; preds = %102
%106 = tail call i32 @file_write(i32 %1)
br label %183
107: ; preds = %102
%108 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.22, i64 0, i64 0))
%109 = icmp eq i64 %108, 0
br i1 %109, label %110, label %112
110: ; preds = %107
%111 = tail call i32 @file_read(i32 %1)
br label %183
112: ; preds = %107
%113 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.23, i64 0, i64 0))
%114 = icmp eq i64 %113, 0
br i1 %114, label %115, label %117
115: ; preds = %112
%116 = tail call i32 @file_write_random(i32 %1)
br label %183
117: ; preds = %112
%118 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.24, i64 0, i64 0))
%119 = icmp eq i64 %118, 0
br i1 %119, label %120, label %122
120: ; preds = %117
%121 = tail call i32 @file_read_random(i32 %1)
br label %183
122: ; preds = %117
%123 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.25, i64 0, i64 0))
%124 = icmp eq i64 %123, 0
br i1 %124, label %125, label %127
125: ; preds = %122
%126 = tail call i32 @file_read_direct(i32 %1)
br label %183
127: ; preds = %122
%128 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.26, i64 0, i64 0))
%129 = icmp eq i64 %128, 0
br i1 %129, label %130, label %132
130: ; preds = %127
%131 = tail call i32 @file_read_random_direct(i32 %1)
br label %183
132: ; preds = %127
%133 = load i32, i32* @stderr
%134 = tail call i32 @fprintf(i32 %133, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.15, i64 0, i64 0))
br label %183
135: ; preds = %94
%136 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.27, i64 0, i64 0))
%137 = icmp eq i64 %136, 0
br i1 %137, label %138, label %181
138: ; preds = %135
%139 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.28, i64 0, i64 0))
%140 = icmp eq i64 %139, 0
br i1 %140, label %141, label %143
141: ; preds = %138
%142 = tail call i32 @all_true(i64 %3)
br label %183
143: ; preds = %138
%144 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.29, i64 0, i64 0))
%145 = icmp eq i64 %144, 0
br i1 %145, label %146, label %148
146: ; preds = %143
%147 = tail call i32 @all_false(i64 %3)
br label %183
148: ; preds = %143
%149 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.30, i64 0, i64 0))
%150 = icmp eq i64 %149, 0
br i1 %150, label %151, label %153
151: ; preds = %148
%152 = tail call i32 @true_false(i64 %3)
br label %183
153: ; preds = %148
%154 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.31, i64 0, i64 0))
%155 = icmp eq i64 %154, 0
br i1 %155, label %156, label %158
156: ; preds = %153
%157 = tail call i32 @t2_f2(i64 %3)
br label %183
158: ; preds = %153
%159 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.32, i64 0, i64 0))
%160 = icmp eq i64 %159, 0
br i1 %160, label %161, label %163
161: ; preds = %158
%162 = tail call i32 @t2_f2(i64 %3)
br label %183
163: ; preds = %158
%164 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.33, i64 0, i64 0))
%165 = icmp eq i64 %164, 0
br i1 %165, label %166, label %168
166: ; preds = %163
%167 = tail call i32 @t2_f2(i64 %3)
br label %183
168: ; preds = %163
%169 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.34, i64 0, i64 0))
%170 = icmp eq i64 %169, 0
br i1 %170, label %171, label %173
171: ; preds = %168
%172 = tail call i32 @t_f_random(i64 %3)
br label %183
173: ; preds = %168
%174 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.35, i64 0, i64 0))
%175 = icmp eq i64 %174, 0
br i1 %175, label %176, label %178
176: ; preds = %173
%177 = tail call i32 @switch_jump(i64 %3)
br label %183
178: ; preds = %173
%179 = load i32, i32* @stderr
%180 = tail call i32 @fprintf(i32 %179, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.15, i64 0, i64 0))
br label %183
181: ; preds = %135
%182 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @str, i64 0, i64 0))
br label %183
183: ; preds = %43, %53, %63, %73, %75, %68, %58, %48, %38, %105, %115, %125, %132, %130, %120, %110, %100, %141, %151, %161, %171, %178, %176, %166, %156, %146, %181, %84, %91, %89, %12, %22, %29, %27, %17
ret void
}