#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*/ conjugate_gradient(unsigned int);
int /*<<< orphan*/ conjugate_gradient_mixed(unsigned int);
int /*<<< orphan*/ double_axpy(unsigned int);
int /*<<< orphan*/ double_dmatvec_product(unsigned int);
int /*<<< orphan*/ double_dot_product(unsigned int);
int /*<<< orphan*/ double_norm(unsigned int);
int /*<<< orphan*/ double_scalar_mult(unsigned int);
int /*<<< orphan*/ double_stencil19(unsigned int);
int /*<<< orphan*/ double_stencil27(unsigned int);
int /*<<< orphan*/ double_stencil5(unsigned int);
int /*<<< orphan*/ double_stencil9(unsigned int);
int /*<<< orphan*/ fileparse(unsigned int);
int /*<<< orphan*/ float_axpy(unsigned int);
int /*<<< orphan*/ float_dmatvec_product(unsigned int);
int /*<<< orphan*/ float_dot_product(unsigned int);
int /*<<< orphan*/ float_norm(unsigned int);
int /*<<< orphan*/ float_scalar_mult(unsigned int);
int /*<<< orphan*/ float_stencil19(unsigned int);
int /*<<< orphan*/ float_stencil27(unsigned int);
int /*<<< orphan*/ float_stencil5(unsigned int);
int /*<<< orphan*/ float_stencil9(unsigned int);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
int /*<<< orphan*/ int_axpy(unsigned int);
int /*<<< orphan*/ int_dmatvec_product(unsigned int);
int /*<<< orphan*/ int_dot_product(unsigned int);
int /*<<< orphan*/ int_norm(unsigned int);
int /*<<< orphan*/ int_scalar_mult(unsigned int);
int /*<<< orphan*/ stderr;
scalar_t__ strcmp(char *, char *);
void bench_level1(char *b, unsigned int s, unsigned long r, char *o, char *dt,
                  char *algo) {
  if (strcmp(b, "blas_op") == 0) {
    if (strcmp(o, "dot_product") == 0) {
      if (strcmp(dt, "int") == 0)
        int_dot_product(s);
      else if (strcmp(dt, "float") == 0)
        float_dot_product(s);
      else if (strcmp(dt, "double") == 0)
        double_dot_product(s);
      else
        fprintf(stderr, "ERROR: check you are using a valid data type...\n");
    } else if (strcmp(o, "scalar_product") == 0) {
      if (strcmp(dt, "int") == 0)
        int_scalar_mult(s);
      else if (strcmp(dt, "float") == 0)
        float_scalar_mult(s);
      else if (strcmp(dt, "double") == 0)
        double_scalar_mult(s);
      else
        fprintf(stderr, "ERROR: check you are using a valid data type...\n");
    } else if (strcmp(o, "norm") == 0) {
      if (strcmp(dt, "int") == 0)
        int_norm(s);
      else if (strcmp(dt, "float") == 0)
        float_norm(s);
      else if (strcmp(dt, "double") == 0)
        double_norm(s);
      else
        fprintf(stderr, "ERROR: check you are using a valid data type...\n");
    } else if (strcmp(o, "axpy") == 0) {
      if (strcmp(dt, "int") == 0)
        int_axpy(s);
      else if (strcmp(dt, "float") == 0)
        float_axpy(s);
      else if (strcmp(dt, "double") == 0)
        double_axpy(s);
      else
        fprintf(stderr, "ERROR: check you are using a valid data type...\n");
    } else if (strcmp(o, "dmv") == 0) {
      if (strcmp(dt, "int") == 0)
        int_dmatvec_product(s);
      else if (strcmp(dt, "float") == 0)
        float_dmatvec_product(s);
      else if (strcmp(dt, "double") == 0)
        double_dmatvec_product(s);
      else
        fprintf(stderr, "ERROR: check you are using a valid data type...\n");
    }
  } else if (strcmp(b, "stencil") == 0) {
    if (strcmp(o, "27") == 0 || strcmp(o, "dot_product") == 0) {
      if (strcmp(dt, "double") == 0)
        double_stencil27(s);
      else if (strcmp(dt, "float") == 0)
        float_stencil27(s);
      else {
        fprintf(stderr, "ERROR: check you are using a valid data type...\n");
      }
    } else if (strcmp(o, "19") == 0) {
      if (strcmp(dt, "double") == 0)
        double_stencil19(s);
      else if (strcmp(dt, "float") == 0)
        float_stencil19(s);
      else {
        fprintf(stderr, "ERROR: check you are using a valid data type...\n");
      }
    } else if (strcmp(o, "9") == 0) {
      if (strcmp(dt, "double") == 0)
        double_stencil9(s);
      else if (strcmp(dt, "float") == 0)
        float_stencil9(s);
      else {
        fprintf(stderr, "ERROR: check you are using a valid data type...\n");
      }
    } else if (strcmp(o, "5") == 0) {
      if (strcmp(dt, "double") == 0)
        double_stencil5(s);
      else if (strcmp(dt, "float") == 0)
        float_stencil5(s);
      else {
        fprintf(stderr, "ERROR: check you are using a valid data type...\n");
      }
    } else
      fprintf(stderr, "ERROR: check you are using a valid operation type...\n");
  } else if (strcmp(b, "fileparse") == 0) {
    fileparse(s);
  } else if (strcmp(b, "cg") == 0) {
    if (strcmp(algo, "mixed") == 0) {
      conjugate_gradient_mixed(s);
    } else if (strcmp(algo, "normal") == 0) {
      conjugate_gradient(s);
    } else
      fprintf(stderr, "ERROR: check you are using a valid algorithm...\n");
  } else
    fprintf(stderr, "ERROR: check you are using a valid benchmark...\n");
}


x86 assembly (clang, -O0):
<bench_level1>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x8(%rbp),%rdi
lea    0xd16(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1691 <bench_level1+0x3d1>
mov    -0x20(%rbp),%rdi
lea    0xd04(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    13ac <bench_level1+0xec>
mov    -0x28(%rbp),%rdi
lea    0xcf6(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    133a <bench_level1+0x7a>
mov    -0xc(%rbp),%edi
call   10e0 <int_dot_product@plt>
jmp    13a7 <bench_level1+0xe7>
mov    -0x28(%rbp),%rdi
lea    0xcd3(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1361 <bench_level1+0xa1>
mov    -0xc(%rbp),%edi
call   1040 <float_dot_product@plt>
jmp    13a2 <bench_level1+0xe2>
mov    -0x28(%rbp),%rdi
lea    0xcb2(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1388 <bench_level1+0xc8>
mov    -0xc(%rbp),%edi
call   11b0 <double_dot_product@plt>
jmp    139d <bench_level1+0xdd>
mov    0x2c51(%rip),%rax
mov    (%rax),%edi
lea    0xc8d(%rip),%rsi
call   1100 <fprintf@plt>
jmp    13a2 <bench_level1+0xe2>
jmp    13a7 <bench_level1+0xe7>
jmp    168c <bench_level1+0x3cc>
mov    -0x20(%rbp),%rdi
lea    0xc9f(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    145f <bench_level1+0x19f>
mov    -0x28(%rbp),%rdi
lea    0xc43(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    13ed <bench_level1+0x12d>
mov    -0xc(%rbp),%edi
call   1150 <int_scalar_mult@plt>
jmp    145a <bench_level1+0x19a>
mov    -0x28(%rbp),%rdi
lea    0xc20(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1414 <bench_level1+0x154>
mov    -0xc(%rbp),%edi
call   1170 <float_scalar_mult@plt>
jmp    1455 <bench_level1+0x195>
mov    -0x28(%rbp),%rdi
lea    0xbff(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    143b <bench_level1+0x17b>
mov    -0xc(%rbp),%edi
call   1140 <double_scalar_mult@plt>
jmp    1450 <bench_level1+0x190>
mov    0x2b9e(%rip),%rax
mov    (%rax),%edi
lea    0xbda(%rip),%rsi
call   1100 <fprintf@plt>
jmp    1455 <bench_level1+0x195>
jmp    145a <bench_level1+0x19a>
jmp    1687 <bench_level1+0x3c7>
mov    -0x20(%rbp),%rdi
lea    0xbfb(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1512 <bench_level1+0x252>
mov    -0x28(%rbp),%rdi
lea    0xb90(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    14a0 <bench_level1+0x1e0>
mov    -0xc(%rbp),%edi
call   1030 <int_norm@plt>
jmp    150d <bench_level1+0x24d>
mov    -0x28(%rbp),%rdi
lea    0xb6d(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    14c7 <bench_level1+0x207>
mov    -0xc(%rbp),%edi
call   1080 <float_norm@plt>
jmp    1508 <bench_level1+0x248>
mov    -0x28(%rbp),%rdi
lea    0xb4c(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    14ee <bench_level1+0x22e>
mov    -0xc(%rbp),%edi
call   11c0 <double_norm@plt>
jmp    1503 <bench_level1+0x243>
mov    0x2aeb(%rip),%rax
mov    (%rax),%edi
lea    0xb27(%rip),%rsi
call   1100 <fprintf@plt>
jmp    1508 <bench_level1+0x248>
jmp    150d <bench_level1+0x24d>
jmp    1682 <bench_level1+0x3c2>
mov    -0x20(%rbp),%rdi
lea    0xb4d(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    15c5 <bench_level1+0x305>
mov    -0x28(%rbp),%rdi
lea    0xadd(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1553 <bench_level1+0x293>
mov    -0xc(%rbp),%edi
call   11a0 <int_axpy@plt>
jmp    15c0 <bench_level1+0x300>
mov    -0x28(%rbp),%rdi
lea    0xaba(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    157a <bench_level1+0x2ba>
mov    -0xc(%rbp),%edi
call   11d0 <float_axpy@plt>
jmp    15bb <bench_level1+0x2fb>
mov    -0x28(%rbp),%rdi
lea    0xa99(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    15a1 <bench_level1+0x2e1>
mov    -0xc(%rbp),%edi
call   1050 <double_axpy@plt>
jmp    15b6 <bench_level1+0x2f6>
mov    0x2a38(%rip),%rax
mov    (%rax),%edi
lea    0xa74(%rip),%rsi
call   1100 <fprintf@plt>
jmp    15bb <bench_level1+0x2fb>
jmp    15c0 <bench_level1+0x300>
jmp    167d <bench_level1+0x3bd>
mov    -0x20(%rbp),%rdi
lea    0xa9f(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1678 <bench_level1+0x3b8>
mov    -0x28(%rbp),%rdi
lea    0xa2a(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1606 <bench_level1+0x346>
mov    -0xc(%rbp),%edi
call   1110 <int_dmatvec_product@plt>
jmp    1673 <bench_level1+0x3b3>
mov    -0x28(%rbp),%rdi
lea    0xa07(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    162d <bench_level1+0x36d>
mov    -0xc(%rbp),%edi
call   10c0 <float_dmatvec_product@plt>
jmp    166e <bench_level1+0x3ae>
mov    -0x28(%rbp),%rdi
lea    0x9e6(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1654 <bench_level1+0x394>
mov    -0xc(%rbp),%edi
call   1180 <double_dmatvec_product@plt>
jmp    1669 <bench_level1+0x3a9>
mov    0x2985(%rip),%rax
mov    (%rax),%edi
lea    0x9c1(%rip),%rsi
call   1100 <fprintf@plt>
jmp    166e <bench_level1+0x3ae>
jmp    1673 <bench_level1+0x3b3>
jmp    1678 <bench_level1+0x3b8>
jmp    167d <bench_level1+0x3bd>
jmp    1682 <bench_level1+0x3c2>
jmp    1687 <bench_level1+0x3c7>
jmp    168c <bench_level1+0x3cc>
jmp    19dc <bench_level1+0x71c>
mov    -0x8(%rbp),%rdi
lea    0x9d7(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    190a <bench_level1+0x64a>
mov    -0x20(%rbp),%rdi
lea    0x9c5(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
je     16df <bench_level1+0x41f>
mov    -0x20(%rbp),%rdi
lea    0x938(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    174c <bench_level1+0x48c>
mov    -0x28(%rbp),%rdi
lea    0x934(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1706 <bench_level1+0x446>
mov    -0xc(%rbp),%edi
call   10b0 <double_stencil27@plt>
jmp    1747 <bench_level1+0x487>
mov    -0x28(%rbp),%rdi
lea    0x907(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    172d <bench_level1+0x46d>
mov    -0xc(%rbp),%edi
call   1060 <float_stencil27@plt>
jmp    1742 <bench_level1+0x482>
mov    0x28ac(%rip),%rax
mov    (%rax),%edi
lea    0x8e8(%rip),%rsi
call   1100 <fprintf@plt>
jmp    1747 <bench_level1+0x487>
jmp    1905 <bench_level1+0x645>
mov    -0x20(%rbp),%rdi
lea    0x927(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    17d3 <bench_level1+0x513>
mov    -0x28(%rbp),%rdi
lea    0x8ad(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    178d <bench_level1+0x4cd>
mov    -0xc(%rbp),%edi
call   11e0 <double_stencil19@plt>
jmp    17ce <bench_level1+0x50e>
mov    -0x28(%rbp),%rdi
lea    0x880(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    17b4 <bench_level1+0x4f4>
mov    -0xc(%rbp),%edi
call   10f0 <float_stencil19@plt>
jmp    17c9 <bench_level1+0x509>
mov    0x2825(%rip),%rax
mov    (%rax),%edi
lea    0x861(%rip),%rsi
call   1100 <fprintf@plt>
jmp    17ce <bench_level1+0x50e>
jmp    1900 <bench_level1+0x640>
mov    -0x20(%rbp),%rdi
lea    0x8a1(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    185a <bench_level1+0x59a>
mov    -0x28(%rbp),%rdi
lea    0x826(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1814 <bench_level1+0x554>
mov    -0xc(%rbp),%edi
call   1090 <double_stencil9@plt>
jmp    1855 <bench_level1+0x595>
mov    -0x28(%rbp),%rdi
lea    0x7f9(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    183b <bench_level1+0x57b>
mov    -0xc(%rbp),%edi
call   1120 <float_stencil9@plt>
jmp    1850 <bench_level1+0x590>
mov    0x279e(%rip),%rax
mov    (%rax),%edi
lea    0x7da(%rip),%rsi
call   1100 <fprintf@plt>
jmp    1855 <bench_level1+0x595>
jmp    18fb <bench_level1+0x63b>
mov    -0x20(%rbp),%rdi
lea    0x81c(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    18e1 <bench_level1+0x621>
mov    -0x28(%rbp),%rdi
lea    0x79f(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    189b <bench_level1+0x5db>
mov    -0xc(%rbp),%edi
call   10a0 <double_stencil5@plt>
jmp    18dc <bench_level1+0x61c>
mov    -0x28(%rbp),%rdi
lea    0x772(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    18c2 <bench_level1+0x602>
mov    -0xc(%rbp),%edi
call   1130 <float_stencil5@plt>
jmp    18d7 <bench_level1+0x617>
mov    0x2717(%rip),%rax
mov    (%rax),%edi
lea    0x753(%rip),%rsi
call   1100 <fprintf@plt>
jmp    18dc <bench_level1+0x61c>
jmp    18f6 <bench_level1+0x636>
mov    0x26f8(%rip),%rax
mov    (%rax),%edi
lea    0x792(%rip),%rsi
call   1100 <fprintf@plt>
jmp    18fb <bench_level1+0x63b>
jmp    1900 <bench_level1+0x640>
jmp    1905 <bench_level1+0x645>
jmp    19d7 <bench_level1+0x717>
mov    -0x8(%rbp),%rdi
lea    0x7a4(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1931 <bench_level1+0x671>
mov    -0xc(%rbp),%edi
call   1160 <fileparse@plt>
jmp    19d2 <bench_level1+0x712>
mov    -0x8(%rbp),%rdi
lea    0x787(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    19b8 <bench_level1+0x6f8>
mov    -0x30(%rbp),%rdi
lea    0x770(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1972 <bench_level1+0x6b2>
mov    -0xc(%rbp),%edi
call   1190 <conjugate_gradient_mixed@plt>
jmp    19b3 <bench_level1+0x6f3>
mov    -0x30(%rbp),%rdi
lea    0x74f(%rip),%rsi
call   10d0 <strcmp@plt>
cmp    $0x0,%rax
jne    1999 <bench_level1+0x6d9>
mov    -0xc(%rbp),%edi
call   1070 <conjugate_gradient@plt>
jmp    19ae <bench_level1+0x6ee>
mov    0x2640(%rip),%rax
mov    (%rax),%edi
lea    0x72a(%rip),%rsi
call   1100 <fprintf@plt>
jmp    19b3 <bench_level1+0x6f3>
jmp    19cd <bench_level1+0x70d>
mov    0x2621(%rip),%rax
mov    (%rax),%edi
lea    0x73c(%rip),%rsi
call   1100 <fprintf@plt>
jmp    19d2 <bench_level1+0x712>
jmp    19d7 <bench_level1+0x717>
jmp    19dc <bench_level1+0x71c>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bench_level1>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %r9,%r12
mov    %r8,%r15
mov    %rcx,%rbp
mov    %esi,%r14d
mov    %rdi,%rbx
lea    0xd22(%rip),%rsi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1345 <bench_level1+0x85>
lea    0xd84(%rip),%rsi
mov    %rbx,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     13c6 <bench_level1+0x106>
lea    0xdb2(%rip),%rsi
mov    %rbx,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     144f <bench_level1+0x18f>
lea    0xda4(%rip),%rsi
mov    %rbx,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     14f7 <bench_level1+0x237>
mov    0x2ca9(%rip),%rax
mov    (%rax),%edi
lea    0xdc4(%rip),%rsi
jmp    17d8 <bench_level1+0x518>
lea    0xcbc(%rip),%rsi
mov    %rbp,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     149f <bench_level1+0x1df>
lea    0xcf2(%rip),%rsi
mov    %rbp,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     153c <bench_level1+0x27c>
lea    0xce9(%rip),%rsi
mov    %rbp,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1594 <bench_level1+0x2d4>
lea    0xcd6(%rip),%rsi
mov    %rbp,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     160c <bench_level1+0x34c>
lea    0xcc3(%rip),%rsi
mov    %rbp,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     16d4 <bench_level1+0x414>
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
lea    0xcae(%rip),%rsi
mov    %rbp,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     145f <bench_level1+0x19f>
lea    0xc23(%rip),%rsi
mov    %rbp,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     145f <bench_level1+0x19f>
lea    0xc85(%rip),%rsi
mov    %rbp,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1664 <bench_level1+0x3a4>
lea    0xc6e(%rip),%rsi
mov    %rbp,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     172c <bench_level1+0x46c>
lea    0xc58(%rip),%rsi
mov    %rbp,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1798 <bench_level1+0x4d8>
mov    0x2b9f(%rip),%rax
mov    (%rax),%edi
lea    0xc39(%rip),%rsi
jmp    17d8 <bench_level1+0x518>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1160 <fileparse@plt>
lea    0xbb8(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     15ec <bench_level1+0x32c>
lea    0xb9a(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
jne    17c8 <bench_level1+0x508>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1060 <float_stencil27@plt>
lea    0xb6e(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     15fc <bench_level1+0x33c>
lea    0xb5a(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     16b4 <bench_level1+0x3f4>
lea    0xb48(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
jne    17c8 <bench_level1+0x508>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    11b0 <double_dot_product@plt>
lea    0xbc8(%rip),%rsi
mov    %r12,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     16a4 <bench_level1+0x3e4>
lea    0xbb6(%rip),%rsi
mov    %r12,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1768 <bench_level1+0x4a8>
mov    0x2ab2(%rip),%rax
mov    (%rax),%edi
lea    0xb9c(%rip),%rsi
jmp    17d8 <bench_level1+0x518>
lea    0xad1(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     16c4 <bench_level1+0x404>
lea    0xabd(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1778 <bench_level1+0x4b8>
lea    0xaab(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
jne    17c8 <bench_level1+0x508>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1140 <double_scalar_mult@plt>
lea    0xa79(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1788 <bench_level1+0x4c8>
lea    0xa65(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     17e5 <bench_level1+0x525>
lea    0xa53(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
jne    17c8 <bench_level1+0x508>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    11c0 <double_norm@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    10b0 <double_stencil27@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    10e0 <int_dot_product@plt>
lea    0xa01(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     17f5 <bench_level1+0x535>
lea    0x9ed(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1815 <bench_level1+0x555>
lea    0x9db(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
jne    17c8 <bench_level1+0x508>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1050 <double_axpy@plt>
lea    0x9b3(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1805 <bench_level1+0x545>
lea    0x995(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
jne    17c8 <bench_level1+0x508>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    10f0 <float_stencil19@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1190 <conjugate_gradient_mixed@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1040 <float_dot_product@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1150 <int_scalar_mult@plt>
lea    0x939(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1825 <bench_level1+0x565>
lea    0x925(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1845 <bench_level1+0x585>
lea    0x913(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
jne    17c8 <bench_level1+0x508>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1180 <double_dmatvec_product@plt>
lea    0x8eb(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1835 <bench_level1+0x575>
lea    0x8cd(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
jne    17c8 <bench_level1+0x508>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1120 <float_stencil9@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1070 <conjugate_gradient@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1170 <float_scalar_mult@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <int_norm@plt>
lea    0x87f(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1855 <bench_level1+0x595>
lea    0x861(%rip),%rsi
mov    %r15,%rdi
call   10d0 <strcmp@plt>
test   %rax,%rax
je     1865 <bench_level1+0x5a5>
mov    0x2811(%rip),%rax
mov    (%rax),%edi
lea    0x84d(%rip),%rsi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1100 <fprintf@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1080 <float_norm@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    11a0 <int_axpy@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    11e0 <double_stencil19@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    11d0 <float_axpy@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1110 <int_dmatvec_product@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1090 <double_stencil9@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    10c0 <float_dmatvec_product@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    10a0 <double_stencil5@plt>
mov    %r14d,%edi
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1130 <float_stencil5@plt>

LLVM IR (-O0):
@.str = [8 x i8] c"blas_op\00"
@.str.1 = [12 x i8] c"dot_product\00"
@.str.2 = [4 x i8] c"int\00"
@.str.3 = [6 x i8] c"float\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 = [15 x i8] c"scalar_product\00"
@.str.7 = [5 x i8] c"norm\00"
@.str.8 = [5 x i8] c"axpy\00"
@.str.9 = [4 x i8] c"dmv\00"
@.str.10 = [8 x i8] c"stencil\00"
@.str.11 = [3 x i8] c"27\00"
@.str.12 = [3 x i8] c"19\00"
@.str.13 = [2 x i8] c"9\00"
@.str.14 = [2 x i8] c"5\00"
@.str.15 = [54 x i8] c"ERROR: check you are using a valid operation type...\0A\00"
@.str.16 = [10 x i8] c"fileparse\00"
@.str.17 = [3 x i8] c"cg\00"
@.str.18 = [6 x i8] c"mixed\00"
@.str.19 = [7 x i8] c"normal\00"
@.str.20 = [49 x i8] c"ERROR: check you are using a valid algorithm...\0A\00"
@.str.21 = [49 x i8] c"ERROR: check you are using a valid benchmark...\0A\00"
define void @bench_level1(i8* %0, i32 %1, i64 %2, i8* %3, i8* %4, i8* %5) {
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i64
%10 = alloca i8*
%11 = alloca i8*
%12 = alloca i8*
store i8* %0, i8** %7
store i32 %1, i32* %8
store i64 %2, i64* %9
store i8* %3, i8** %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 ([8 x i8], [8 x i8]* @.str, i64 0, i64 0))
%15 = icmp eq i64 %14, 0
br i1 %15, label %16, label %176
16: ; preds = %6
%17 = load i8*, i8** %10
%18 = call i64 @strcmp(i8* %17, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
%19 = icmp eq i64 %18, 0
br i1 %19, label %20, label %47
20: ; preds = %16
%21 = load i8*, i8** %11
%22 = call i64 @strcmp(i8* %21, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%23 = icmp eq i64 %22, 0
br i1 %23, label %24, label %27
24: ; preds = %20
%25 = load i32, i32* %8
%26 = call i32 @int_dot_product(i32 %25)
br label %46
27: ; preds = %20
%28 = load i8*, i8** %11
%29 = call i64 @strcmp(i8* %28, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%30 = icmp eq i64 %29, 0
br i1 %30, label %31, label %34
31: ; preds = %27
%32 = load i32, i32* %8
%33 = call i32 @float_dot_product(i32 %32)
br label %45
34: ; preds = %27
%35 = load i8*, i8** %11
%36 = call i64 @strcmp(i8* %35, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%37 = icmp eq i64 %36, 0
br i1 %37, label %38, label %41
38: ; preds = %34
%39 = load i32, i32* %8
%40 = call i32 @double_dot_product(i32 %39)
br label %44
41: ; preds = %34
%42 = load i32, i32* @stderr
%43 = call i32 @fprintf(i32 %42, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %44
44: ; preds = %41, %38
br label %45
45: ; preds = %44, %31
br label %46
46: ; preds = %45, %24
br label %175
47: ; preds = %16
%48 = load i8*, i8** %10
%49 = call i64 @strcmp(i8* %48, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.6, i64 0, i64 0))
%50 = icmp eq i64 %49, 0
br i1 %50, label %51, label %78
51: ; preds = %47
%52 = load i8*, i8** %11
%53 = call i64 @strcmp(i8* %52, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%54 = icmp eq i64 %53, 0
br i1 %54, label %55, label %58
55: ; preds = %51
%56 = load i32, i32* %8
%57 = call i32 @int_scalar_mult(i32 %56)
br label %77
58: ; preds = %51
%59 = load i8*, i8** %11
%60 = call i64 @strcmp(i8* %59, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%61 = icmp eq i64 %60, 0
br i1 %61, label %62, label %65
62: ; preds = %58
%63 = load i32, i32* %8
%64 = call i32 @float_scalar_mult(i32 %63)
br label %76
65: ; preds = %58
%66 = load i8*, i8** %11
%67 = call i64 @strcmp(i8* %66, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%68 = icmp eq i64 %67, 0
br i1 %68, label %69, label %72
69: ; preds = %65
%70 = load i32, i32* %8
%71 = call i32 @double_scalar_mult(i32 %70)
br label %75
72: ; preds = %65
%73 = load i32, i32* @stderr
%74 = call i32 @fprintf(i32 %73, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %75
75: ; preds = %72, %69
br label %76
76: ; preds = %75, %62
br label %77
77: ; preds = %76, %55
br label %174
78: ; preds = %47
%79 = load i8*, i8** %10
%80 = call i64 @strcmp(i8* %79, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%81 = icmp eq i64 %80, 0
br i1 %81, label %82, label %109
82: ; preds = %78
%83 = load i8*, i8** %11
%84 = call i64 @strcmp(i8* %83, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%85 = icmp eq i64 %84, 0
br i1 %85, label %86, label %89
86: ; preds = %82
%87 = load i32, i32* %8
%88 = call i32 @int_norm(i32 %87)
br label %108
89: ; preds = %82
%90 = load i8*, i8** %11
%91 = call i64 @strcmp(i8* %90, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%92 = icmp eq i64 %91, 0
br i1 %92, label %93, label %96
93: ; preds = %89
%94 = load i32, i32* %8
%95 = call i32 @float_norm(i32 %94)
br label %107
96: ; preds = %89
%97 = load i8*, i8** %11
%98 = call i64 @strcmp(i8* %97, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%99 = icmp eq i64 %98, 0
br i1 %99, label %100, label %103
100: ; preds = %96
%101 = load i32, i32* %8
%102 = call i32 @double_norm(i32 %101)
br label %106
103: ; preds = %96
%104 = load i32, i32* @stderr
%105 = call i32 @fprintf(i32 %104, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %106
106: ; preds = %103, %100
br label %107
107: ; preds = %106, %93
br label %108
108: ; preds = %107, %86
br label %173
109: ; preds = %78
%110 = load i8*, i8** %10
%111 = call i64 @strcmp(i8* %110, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0))
%112 = icmp eq i64 %111, 0
br i1 %112, label %113, label %140
113: ; preds = %109
%114 = load i8*, i8** %11
%115 = call i64 @strcmp(i8* %114, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%116 = icmp eq i64 %115, 0
br i1 %116, label %117, label %120
117: ; preds = %113
%118 = load i32, i32* %8
%119 = call i32 @int_axpy(i32 %118)
br label %139
120: ; preds = %113
%121 = load i8*, i8** %11
%122 = call i64 @strcmp(i8* %121, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%123 = icmp eq i64 %122, 0
br i1 %123, label %124, label %127
124: ; preds = %120
%125 = load i32, i32* %8
%126 = call i32 @float_axpy(i32 %125)
br label %138
127: ; preds = %120
%128 = load i8*, i8** %11
%129 = call i64 @strcmp(i8* %128, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%130 = icmp eq i64 %129, 0
br i1 %130, label %131, label %134
131: ; preds = %127
%132 = load i32, i32* %8
%133 = call i32 @double_axpy(i32 %132)
br label %137
134: ; preds = %127
%135 = load i32, i32* @stderr
%136 = call i32 @fprintf(i32 %135, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %137
137: ; preds = %134, %131
br label %138
138: ; preds = %137, %124
br label %139
139: ; preds = %138, %117
br label %172
140: ; preds = %109
%141 = load i8*, i8** %10
%142 = call i64 @strcmp(i8* %141, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i64 0, i64 0))
%143 = icmp eq i64 %142, 0
br i1 %143, label %144, label %171
144: ; preds = %140
%145 = load i8*, i8** %11
%146 = call i64 @strcmp(i8* %145, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%147 = icmp eq i64 %146, 0
br i1 %147, label %148, label %151
148: ; preds = %144
%149 = load i32, i32* %8
%150 = call i32 @int_dmatvec_product(i32 %149)
br label %170
151: ; preds = %144
%152 = load i8*, i8** %11
%153 = call i64 @strcmp(i8* %152, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%154 = icmp eq i64 %153, 0
br i1 %154, label %155, label %158
155: ; preds = %151
%156 = load i32, i32* %8
%157 = call i32 @float_dmatvec_product(i32 %156)
br label %169
158: ; preds = %151
%159 = load i8*, i8** %11
%160 = call i64 @strcmp(i8* %159, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%161 = icmp eq i64 %160, 0
br i1 %161, label %162, label %165
162: ; preds = %158
%163 = load i32, i32* %8
%164 = call i32 @double_dmatvec_product(i32 %163)
br label %168
165: ; preds = %158
%166 = load i32, i32* @stderr
%167 = call i32 @fprintf(i32 %166, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %168
168: ; preds = %165, %162
br label %169
169: ; preds = %168, %155
br label %170
170: ; preds = %169, %148
br label %171
171: ; preds = %170, %140
br label %172
172: ; preds = %171, %139
br label %173
173: ; preds = %172, %108
br label %174
174: ; preds = %173, %77
br label %175
175: ; preds = %174, %46
br label %319
176: ; preds = %6
%177 = load i8*, i8** %7
%178 = call i64 @strcmp(i8* %177, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.10, i64 0, i64 0))
%179 = icmp eq i64 %178, 0
br i1 %179, label %180, label %283
180: ; preds = %176
%181 = load i8*, i8** %10
%182 = call i64 @strcmp(i8* %181, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i64 0, i64 0))
%183 = icmp eq i64 %182, 0
br i1 %183, label %188, label %184
184: ; preds = %180
%185 = load i8*, i8** %10
%186 = call i64 @strcmp(i8* %185, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
%187 = icmp eq i64 %186, 0
br i1 %187, label %188, label %207
188: ; preds = %184, %180
%189 = load i8*, i8** %11
%190 = call i64 @strcmp(i8* %189, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%191 = icmp eq i64 %190, 0
br i1 %191, label %192, label %195
192: ; preds = %188
%193 = load i32, i32* %8
%194 = call i32 @double_stencil27(i32 %193)
br label %206
195: ; preds = %188
%196 = load i8*, i8** %11
%197 = call i64 @strcmp(i8* %196, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%198 = icmp eq i64 %197, 0
br i1 %198, label %199, label %202
199: ; preds = %195
%200 = load i32, i32* %8
%201 = call i32 @float_stencil27(i32 %200)
br label %205
202: ; preds = %195
%203 = load i32, i32* @stderr
%204 = call i32 @fprintf(i32 %203, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %205
205: ; preds = %202, %199
br label %206
206: ; preds = %205, %192
br label %282
207: ; preds = %184
%208 = load i8*, i8** %10
%209 = call i64 @strcmp(i8* %208, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0))
%210 = icmp eq i64 %209, 0
br i1 %210, label %211, label %230
211: ; preds = %207
%212 = load i8*, i8** %11
%213 = call i64 @strcmp(i8* %212, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%214 = icmp eq i64 %213, 0
br i1 %214, label %215, label %218
215: ; preds = %211
%216 = load i32, i32* %8
%217 = call i32 @double_stencil19(i32 %216)
br label %229
218: ; preds = %211
%219 = load i8*, i8** %11
%220 = call i64 @strcmp(i8* %219, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%221 = icmp eq i64 %220, 0
br i1 %221, label %222, label %225
222: ; preds = %218
%223 = load i32, i32* %8
%224 = call i32 @float_stencil19(i32 %223)
br label %228
225: ; preds = %218
%226 = load i32, i32* @stderr
%227 = call i32 @fprintf(i32 %226, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %228
228: ; preds = %225, %222
br label %229
229: ; preds = %228, %215
br label %281
230: ; preds = %207
%231 = load i8*, i8** %10
%232 = call i64 @strcmp(i8* %231, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.13, i64 0, i64 0))
%233 = icmp eq i64 %232, 0
br i1 %233, label %234, label %253
234: ; preds = %230
%235 = load i8*, i8** %11
%236 = call i64 @strcmp(i8* %235, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%237 = icmp eq i64 %236, 0
br i1 %237, label %238, label %241
238: ; preds = %234
%239 = load i32, i32* %8
%240 = call i32 @double_stencil9(i32 %239)
br label %252
241: ; preds = %234
%242 = load i8*, i8** %11
%243 = call i64 @strcmp(i8* %242, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%244 = icmp eq i64 %243, 0
br i1 %244, label %245, label %248
245: ; preds = %241
%246 = load i32, i32* %8
%247 = call i32 @float_stencil9(i32 %246)
br label %251
248: ; preds = %241
%249 = load i32, i32* @stderr
%250 = call i32 @fprintf(i32 %249, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %251
251: ; preds = %248, %245
br label %252
252: ; preds = %251, %238
br label %280
253: ; preds = %230
%254 = load i8*, i8** %10
%255 = call i64 @strcmp(i8* %254, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.14, i64 0, i64 0))
%256 = icmp eq i64 %255, 0
br i1 %256, label %257, label %276
257: ; preds = %253
%258 = load i8*, i8** %11
%259 = call i64 @strcmp(i8* %258, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%260 = icmp eq i64 %259, 0
br i1 %260, label %261, label %264
261: ; preds = %257
%262 = load i32, i32* %8
%263 = call i32 @double_stencil5(i32 %262)
br label %275
264: ; preds = %257
%265 = load i8*, i8** %11
%266 = call i64 @strcmp(i8* %265, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%267 = icmp eq i64 %266, 0
br i1 %267, label %268, label %271
268: ; preds = %264
%269 = load i32, i32* %8
%270 = call i32 @float_stencil5(i32 %269)
br label %274
271: ; preds = %264
%272 = load i32, i32* @stderr
%273 = call i32 @fprintf(i32 %272, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %274
274: ; preds = %271, %268
br label %275
275: ; preds = %274, %261
br label %279
276: ; preds = %253
%277 = load i32, i32* @stderr
%278 = call i32 @fprintf(i32 %277, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.15, i64 0, i64 0))
br label %279
279: ; preds = %276, %275
br label %280
280: ; preds = %279, %252
br label %281
281: ; preds = %280, %229
br label %282
282: ; preds = %281, %206
br label %318
283: ; preds = %176
%284 = load i8*, i8** %7
%285 = call i64 @strcmp(i8* %284, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0))
%286 = icmp eq i64 %285, 0
br i1 %286, label %287, label %290
287: ; preds = %283
%288 = load i32, i32* %8
%289 = call i32 @fileparse(i32 %288)
br label %317
290: ; preds = %283
%291 = load i8*, i8** %7
%292 = call i64 @strcmp(i8* %291, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.17, i64 0, i64 0))
%293 = icmp eq i64 %292, 0
br i1 %293, label %294, label %313
294: ; preds = %290
%295 = load i8*, i8** %12
%296 = call i64 @strcmp(i8* %295, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.18, i64 0, i64 0))
%297 = icmp eq i64 %296, 0
br i1 %297, label %298, label %301
298: ; preds = %294
%299 = load i32, i32* %8
%300 = call i32 @conjugate_gradient_mixed(i32 %299)
br label %312
301: ; preds = %294
%302 = load i8*, i8** %12
%303 = call i64 @strcmp(i8* %302, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.19, i64 0, i64 0))
%304 = icmp eq i64 %303, 0
br i1 %304, label %305, label %308
305: ; preds = %301
%306 = load i32, i32* %8
%307 = call i32 @conjugate_gradient(i32 %306)
br label %311
308: ; preds = %301
%309 = load i32, i32* @stderr
%310 = call i32 @fprintf(i32 %309, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.20, i64 0, i64 0))
br label %311
311: ; preds = %308, %305
br label %312
312: ; preds = %311, %298
br label %316
313: ; preds = %290
%314 = load i32, i32* @stderr
%315 = call i32 @fprintf(i32 %314, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.21, i64 0, i64 0))
br label %316
316: ; preds = %313, %312
br label %317
317: ; preds = %316, %287
br label %318
318: ; preds = %317, %282
br label %319
319: ; preds = %318, %175
ret void
}

LLVM IR (-O2):
@.str = [8 x i8] c"blas_op\00"
@.str.1 = [12 x i8] c"dot_product\00"
@.str.2 = [4 x i8] c"int\00"
@.str.3 = [6 x i8] c"float\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 = [15 x i8] c"scalar_product\00"
@.str.7 = [5 x i8] c"norm\00"
@.str.8 = [5 x i8] c"axpy\00"
@.str.9 = [4 x i8] c"dmv\00"
@.str.10 = [8 x i8] c"stencil\00"
@.str.11 = [3 x i8] c"27\00"
@.str.12 = [3 x i8] c"19\00"
@.str.13 = [2 x i8] c"9\00"
@.str.14 = [2 x i8] c"5\00"
@.str.15 = [54 x i8] c"ERROR: check you are using a valid operation type...\0A\00"
@.str.16 = [10 x i8] c"fileparse\00"
@.str.17 = [3 x i8] c"cg\00"
@.str.18 = [6 x i8] c"mixed\00"
@.str.19 = [7 x i8] c"normal\00"
@.str.20 = [49 x i8] c"ERROR: check you are using a valid algorithm...\0A\00"
@.str.21 = [49 x i8] c"ERROR: check you are using a valid benchmark...\0A\00"
define void @bench_level1(i8* %0, i32 %1, i64 %2, i8* %3, i8* %4, i8* %5) {
%7 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0))
%8 = icmp eq i64 %7, 0
br i1 %8, label %9, label %114
9: ; preds = %6
%10 = tail call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
%11 = icmp eq i64 %10, 0
br i1 %11, label %12, label %30
12: ; preds = %9
%13 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%14 = icmp eq i64 %13, 0
br i1 %14, label %15, label %17
15: ; preds = %12
%16 = tail call i32 @int_dot_product(i32 %1)
br label %211
17: ; preds = %12
%18 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%19 = icmp eq i64 %18, 0
br i1 %19, label %20, label %22
20: ; preds = %17
%21 = tail call i32 @float_dot_product(i32 %1)
br label %211
22: ; preds = %17
%23 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%24 = icmp eq i64 %23, 0
br i1 %24, label %25, label %27
25: ; preds = %22
%26 = tail call i32 @double_dot_product(i32 %1)
br label %211
27: ; preds = %22
%28 = load i32, i32* @stderr
%29 = tail call i32 @fprintf(i32 %28, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %211
30: ; preds = %9
%31 = tail call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.6, i64 0, i64 0))
%32 = icmp eq i64 %31, 0
br i1 %32, label %33, label %51
33: ; preds = %30
%34 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%35 = icmp eq i64 %34, 0
br i1 %35, label %36, label %38
36: ; preds = %33
%37 = tail call i32 @int_scalar_mult(i32 %1)
br label %211
38: ; preds = %33
%39 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%40 = icmp eq i64 %39, 0
br i1 %40, label %41, label %43
41: ; preds = %38
%42 = tail call i32 @float_scalar_mult(i32 %1)
br label %211
43: ; preds = %38
%44 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%45 = icmp eq i64 %44, 0
br i1 %45, label %46, label %48
46: ; preds = %43
%47 = tail call i32 @double_scalar_mult(i32 %1)
br label %211
48: ; preds = %43
%49 = load i32, i32* @stderr
%50 = tail call i32 @fprintf(i32 %49, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %211
51: ; preds = %30
%52 = tail call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0))
%53 = icmp eq i64 %52, 0
br i1 %53, label %54, label %72
54: ; preds = %51
%55 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%56 = icmp eq i64 %55, 0
br i1 %56, label %57, label %59
57: ; preds = %54
%58 = tail call i32 @int_norm(i32 %1)
br label %211
59: ; preds = %54
%60 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%61 = icmp eq i64 %60, 0
br i1 %61, label %62, label %64
62: ; preds = %59
%63 = tail call i32 @float_norm(i32 %1)
br label %211
64: ; preds = %59
%65 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%66 = icmp eq i64 %65, 0
br i1 %66, label %67, label %69
67: ; preds = %64
%68 = tail call i32 @double_norm(i32 %1)
br label %211
69: ; preds = %64
%70 = load i32, i32* @stderr
%71 = tail call i32 @fprintf(i32 %70, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %211
72: ; preds = %51
%73 = tail call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0))
%74 = icmp eq i64 %73, 0
br i1 %74, label %75, label %93
75: ; preds = %72
%76 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%77 = icmp eq i64 %76, 0
br i1 %77, label %78, label %80
78: ; preds = %75
%79 = tail call i32 @int_axpy(i32 %1)
br label %211
80: ; preds = %75
%81 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%82 = icmp eq i64 %81, 0
br i1 %82, label %83, label %85
83: ; preds = %80
%84 = tail call i32 @float_axpy(i32 %1)
br label %211
85: ; preds = %80
%86 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%87 = icmp eq i64 %86, 0
br i1 %87, label %88, label %90
88: ; preds = %85
%89 = tail call i32 @double_axpy(i32 %1)
br label %211
90: ; preds = %85
%91 = load i32, i32* @stderr
%92 = tail call i32 @fprintf(i32 %91, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %211
93: ; preds = %72
%94 = tail call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i64 0, i64 0))
%95 = icmp eq i64 %94, 0
br i1 %95, label %96, label %211
96: ; preds = %93
%97 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%98 = icmp eq i64 %97, 0
br i1 %98, label %99, label %101
99: ; preds = %96
%100 = tail call i32 @int_dmatvec_product(i32 %1)
br label %211
101: ; preds = %96
%102 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%103 = icmp eq i64 %102, 0
br i1 %103, label %104, label %106
104: ; preds = %101
%105 = tail call i32 @float_dmatvec_product(i32 %1)
br label %211
106: ; preds = %101
%107 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%108 = icmp eq i64 %107, 0
br i1 %108, label %109, label %111
109: ; preds = %106
%110 = tail call i32 @double_dmatvec_product(i32 %1)
br label %211
111: ; preds = %106
%112 = load i32, i32* @stderr
%113 = tail call i32 @fprintf(i32 %112, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %211
114: ; preds = %6
%115 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.10, i64 0, i64 0))
%116 = icmp eq i64 %115, 0
br i1 %116, label %117, label %187
117: ; preds = %114
%118 = tail call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i64 0, i64 0))
%119 = icmp eq i64 %118, 0
br i1 %119, label %123, label %120
120: ; preds = %117
%121 = tail call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.1, i64 0, i64 0))
%122 = icmp eq i64 %121, 0
br i1 %122, label %123, label %136
123: ; preds = %120, %117
%124 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%125 = icmp eq i64 %124, 0
br i1 %125, label %126, label %128
126: ; preds = %123
%127 = tail call i32 @double_stencil27(i32 %1)
br label %211
128: ; preds = %123
%129 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%130 = icmp eq i64 %129, 0
br i1 %130, label %131, label %133
131: ; preds = %128
%132 = tail call i32 @float_stencil27(i32 %1)
br label %211
133: ; preds = %128
%134 = load i32, i32* @stderr
%135 = tail call i32 @fprintf(i32 %134, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %211
136: ; preds = %120
%137 = tail call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0))
%138 = icmp eq i64 %137, 0
br i1 %138, label %139, label %152
139: ; preds = %136
%140 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%141 = icmp eq i64 %140, 0
br i1 %141, label %142, label %144
142: ; preds = %139
%143 = tail call i32 @double_stencil19(i32 %1)
br label %211
144: ; preds = %139
%145 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%146 = icmp eq i64 %145, 0
br i1 %146, label %147, label %149
147: ; preds = %144
%148 = tail call i32 @float_stencil19(i32 %1)
br label %211
149: ; preds = %144
%150 = load i32, i32* @stderr
%151 = tail call i32 @fprintf(i32 %150, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %211
152: ; preds = %136
%153 = tail call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.13, i64 0, i64 0))
%154 = icmp eq i64 %153, 0
br i1 %154, label %155, label %168
155: ; preds = %152
%156 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%157 = icmp eq i64 %156, 0
br i1 %157, label %158, label %160
158: ; preds = %155
%159 = tail call i32 @double_stencil9(i32 %1)
br label %211
160: ; preds = %155
%161 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%162 = icmp eq i64 %161, 0
br i1 %162, label %163, label %165
163: ; preds = %160
%164 = tail call i32 @float_stencil9(i32 %1)
br label %211
165: ; preds = %160
%166 = load i32, i32* @stderr
%167 = tail call i32 @fprintf(i32 %166, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %211
168: ; preds = %152
%169 = tail call i64 @strcmp(i8* %3, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.14, i64 0, i64 0))
%170 = icmp eq i64 %169, 0
br i1 %170, label %171, label %184
171: ; preds = %168
%172 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0))
%173 = icmp eq i64 %172, 0
br i1 %173, label %174, label %176
174: ; preds = %171
%175 = tail call i32 @double_stencil5(i32 %1)
br label %211
176: ; preds = %171
%177 = tail call i64 @strcmp(i8* %4, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
%178 = icmp eq i64 %177, 0
br i1 %178, label %179, label %181
179: ; preds = %176
%180 = tail call i32 @float_stencil5(i32 %1)
br label %211
181: ; preds = %176
%182 = load i32, i32* @stderr
%183 = tail call i32 @fprintf(i32 %182, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.5, i64 0, i64 0))
br label %211
184: ; preds = %168
%185 = load i32, i32* @stderr
%186 = tail call i32 @fprintf(i32 %185, i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.15, i64 0, i64 0))
br label %211
187: ; preds = %114
%188 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0))
%189 = icmp eq i64 %188, 0
br i1 %189, label %190, label %192
190: ; preds = %187
%191 = tail call i32 @fileparse(i32 %1)
br label %211
192: ; preds = %187
%193 = tail call i64 @strcmp(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.17, i64 0, i64 0))
%194 = icmp eq i64 %193, 0
br i1 %194, label %195, label %208
195: ; preds = %192
%196 = tail call i64 @strcmp(i8* %5, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.18, i64 0, i64 0))
%197 = icmp eq i64 %196, 0
br i1 %197, label %198, label %200
198: ; preds = %195
%199 = tail call i32 @conjugate_gradient_mixed(i32 %1)
br label %211
200: ; preds = %195
%201 = tail call i64 @strcmp(i8* %5, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.19, i64 0, i64 0))
%202 = icmp eq i64 %201, 0
br i1 %202, label %203, label %205
203: ; preds = %200
%204 = tail call i32 @conjugate_gradient(i32 %1)
br label %211
205: ; preds = %200
%206 = load i32, i32* @stderr
%207 = tail call i32 @fprintf(i32 %206, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.20, i64 0, i64 0))
br label %211
208: ; preds = %192
%209 = load i32, i32* @stderr
%210 = tail call i32 @fprintf(i32 %209, i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.21, i64 0, i64 0))
br label %211
211: ; preds = %147, %149, %142, %184, %179, %181, %174, %158, %165, %163, %126, %133, %131, %208, %203, %205, %198, %190, %20, %27, %25, %15, %62, %69, %67, %57, %93, %104, %111, %109, %99, %78, %88, %90, %83, %36, %46, %48, %41
ret void
}