#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*/ bbob2009_fmax(int, int);
double bbob2009_fmin(int, int /*<<< orphan*/);
int /*<<< orphan*/ bbob2009_gauss(double *, int, long);
int bbob2009_round(int);
double bbob2009_compute_fopt(size_t function, size_t instance) {
  long rseed, rrseed;
  double gval, gval2;
  if (function == 4)
    rseed = 3;
  else if (function == 18)
    rseed = 17;
  else if (function == 101 || function == 102 || function == 103 ||
           function == 107 || function == 108 || function == 109)
    rseed = 1;
  else if (function == 104 || function == 105 || function == 106 ||
           function == 110 || function == 111 || function == 112)
    rseed = 8;
  else if (function == 113 || function == 114 || function == 115)
    rseed = 7;
  else if (function == 116 || function == 117 || function == 118)
    rseed = 10;
  else if (function == 119 || function == 120 || function == 121)
    rseed = 14;
  else if (function == 122 || function == 123 || function == 124)
    rseed = 17;
  else if (function == 125 || function == 126 || function == 127)
    rseed = 19;
  else if (function == 128 || function == 129 || function == 130)
    rseed = 21;
  else
    rseed = (long)function;
  rrseed = rseed + (long)(10000 * instance);
  bbob2009_gauss(&gval, 1, rrseed);
  bbob2009_gauss(&gval2, 1, rrseed + 1);
  return bbob2009_fmin(
      1000.,
      bbob2009_fmax(-1000., bbob2009_round(100. * 100. * gval / gval2) / 100.));
}


x86 assembly (clang, -O0):
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
cmpq   $0x4,-0x8(%rbp)
jne    1168 <bbob2009_compute_fopt+0x28>
movq   $0x3,-0x18(%rbp)
jmp    1370 <bbob2009_compute_fopt+0x230>
cmpq   $0x12,-0x8(%rbp)
jne    1180 <bbob2009_compute_fopt+0x40>
movq   $0x11,-0x18(%rbp)
jmp    136b <bbob2009_compute_fopt+0x22b>
cmpq   $0x65,-0x8(%rbp)
je     11c2 <bbob2009_compute_fopt+0x82>
cmpq   $0x66,-0x8(%rbp)
je     11c2 <bbob2009_compute_fopt+0x82>
cmpq   $0x67,-0x8(%rbp)
je     11c2 <bbob2009_compute_fopt+0x82>
cmpq   $0x6b,-0x8(%rbp)
je     11c2 <bbob2009_compute_fopt+0x82>
cmpq   $0x6c,-0x8(%rbp)
je     11c2 <bbob2009_compute_fopt+0x82>
cmpq   $0x6d,-0x8(%rbp)
jne    11cf <bbob2009_compute_fopt+0x8f>
movq   $0x1,-0x18(%rbp)
jmp    1366 <bbob2009_compute_fopt+0x226>
cmpq   $0x68,-0x8(%rbp)
je     1211 <bbob2009_compute_fopt+0xd1>
cmpq   $0x69,-0x8(%rbp)
je     1211 <bbob2009_compute_fopt+0xd1>
cmpq   $0x6a,-0x8(%rbp)
je     1211 <bbob2009_compute_fopt+0xd1>
cmpq   $0x6e,-0x8(%rbp)
je     1211 <bbob2009_compute_fopt+0xd1>
cmpq   $0x6f,-0x8(%rbp)
je     1211 <bbob2009_compute_fopt+0xd1>
cmpq   $0x70,-0x8(%rbp)
jne    121e <bbob2009_compute_fopt+0xde>
movq   $0x8,-0x18(%rbp)
jmp    1361 <bbob2009_compute_fopt+0x221>
cmpq   $0x71,-0x8(%rbp)
je     123f <bbob2009_compute_fopt+0xff>
cmpq   $0x72,-0x8(%rbp)
je     123f <bbob2009_compute_fopt+0xff>
cmpq   $0x73,-0x8(%rbp)
jne    124c <bbob2009_compute_fopt+0x10c>
movq   $0x7,-0x18(%rbp)
jmp    135c <bbob2009_compute_fopt+0x21c>
cmpq   $0x74,-0x8(%rbp)
je     126d <bbob2009_compute_fopt+0x12d>
cmpq   $0x75,-0x8(%rbp)
je     126d <bbob2009_compute_fopt+0x12d>
cmpq   $0x76,-0x8(%rbp)
jne    127a <bbob2009_compute_fopt+0x13a>
movq   $0xa,-0x18(%rbp)
jmp    1357 <bbob2009_compute_fopt+0x217>
cmpq   $0x77,-0x8(%rbp)
je     129b <bbob2009_compute_fopt+0x15b>
cmpq   $0x78,-0x8(%rbp)
je     129b <bbob2009_compute_fopt+0x15b>
cmpq   $0x79,-0x8(%rbp)
jne    12a8 <bbob2009_compute_fopt+0x168>
movq   $0xe,-0x18(%rbp)
jmp    1352 <bbob2009_compute_fopt+0x212>
cmpq   $0x7a,-0x8(%rbp)
je     12c9 <bbob2009_compute_fopt+0x189>
cmpq   $0x7b,-0x8(%rbp)
je     12c9 <bbob2009_compute_fopt+0x189>
cmpq   $0x7c,-0x8(%rbp)
jne    12d6 <bbob2009_compute_fopt+0x196>
movq   $0x11,-0x18(%rbp)
jmp    134d <bbob2009_compute_fopt+0x20d>
cmpq   $0x7d,-0x8(%rbp)
je     12f7 <bbob2009_compute_fopt+0x1b7>
cmpq   $0x7e,-0x8(%rbp)
je     12f7 <bbob2009_compute_fopt+0x1b7>
cmpq   $0x7f,-0x8(%rbp)
jne    1304 <bbob2009_compute_fopt+0x1c4>
movq   $0x13,-0x18(%rbp)
jmp    1348 <bbob2009_compute_fopt+0x208>
cmpq   $0x80,-0x8(%rbp)
je     132e <bbob2009_compute_fopt+0x1ee>
cmpq   $0x81,-0x8(%rbp)
je     132e <bbob2009_compute_fopt+0x1ee>
cmpq   $0x82,-0x8(%rbp)
jne    133b <bbob2009_compute_fopt+0x1fb>
movq   $0x15,-0x18(%rbp)
jmp    1343 <bbob2009_compute_fopt+0x203>
mov    -0x8(%rbp),%rax
mov    %rax,-0x18(%rbp)
jmp    1348 <bbob2009_compute_fopt+0x208>
jmp    134d <bbob2009_compute_fopt+0x20d>
jmp    1352 <bbob2009_compute_fopt+0x212>
jmp    1357 <bbob2009_compute_fopt+0x217>
jmp    135c <bbob2009_compute_fopt+0x21c>
jmp    1361 <bbob2009_compute_fopt+0x221>
jmp    1366 <bbob2009_compute_fopt+0x226>
jmp    136b <bbob2009_compute_fopt+0x22b>
jmp    1370 <bbob2009_compute_fopt+0x230>
mov    -0x18(%rbp),%rax
imul   $0x2710,-0x10(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rdx
lea    -0x28(%rbp),%rdi
mov    $0x1,%esi
call   1030 <bbob2009_gauss@plt>
mov    -0x20(%rbp),%rdx
add    $0x1,%rdx
lea    -0x30(%rbp),%rdi
mov    $0x1,%esi
call   1030 <bbob2009_gauss@plt>
movsd  0xc55(%rip),%xmm0
mulsd  -0x28(%rbp),%xmm0
divsd  -0x30(%rbp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <bbob2009_round@plt>
cvtsi2sd %eax,%xmm0
movsd  0xc2e(%rip),%xmm1
divsd  %xmm1,%xmm0
cvttsd2si %xmm0,%esi
mov    $0xfffffc18,%edi
call   1050 <bbob2009_fmax@plt>
mov    %eax,%esi
mov    $0x3e8,%edi
call   1060 <bbob2009_fmin@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
push   %r14
push   %rbx
sub    $0x18,%rsp
lea    -0x4(%rdi),%rax
cmp    $0x6c,%rax
ja     1203 <bbob2009_compute_fopt+0xc3>
mov    $0x3,%r14d
lea    0xeae(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    $0x1,%r14d
jmp    1179 <bbob2009_compute_fopt+0x39>
mov    $0x8,%r14d
imul   $0x2710,%rsi,%rbx
lea    (%r14,%rbx,1),%rdx
lea    0x10(%rsp),%rdi
mov    $0x1,%esi
call   1030 <bbob2009_gauss@plt>
lea    (%r14,%rbx,1),%rdx
add    $0x1,%rdx
lea    0x8(%rsp),%rdi
mov    $0x1,%esi
call   1030 <bbob2009_gauss@plt>
movsd  0x10(%rsp),%xmm0
mulsd  0xe48(%rip),%xmm0
divsd  0x8(%rsp),%xmm0
cvttsd2si %xmm0,%edi
call   1040 <bbob2009_round@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
divsd  0xe32(%rip),%xmm0
cvttsd2si %xmm0,%esi
mov    $0xfffffc18,%edi
call   1050 <bbob2009_fmax@plt>
mov    $0x3e8,%edi
mov    %eax,%esi
call   1060 <bbob2009_fmin@plt>
add    $0x18,%rsp
pop    %rbx
pop    %r14
ret
mov    $0x11,%r14d
jmp    1179 <bbob2009_compute_fopt+0x39>
lea    -0x71(%rdi),%rax
mov    $0x7,%r14d
cmp    $0x3,%rax
jb     1179 <bbob2009_compute_fopt+0x39>
lea    -0x74(%rdi),%rax
mov    $0xa,%r14d
cmp    $0x3,%rax
jb     1179 <bbob2009_compute_fopt+0x39>
lea    -0x77(%rdi),%rax
mov    $0xe,%r14d
cmp    $0x3,%rax
jb     1179 <bbob2009_compute_fopt+0x39>
lea    -0x7a(%rdi),%rax
mov    $0x11,%r14d
cmp    $0x3,%rax
jb     1179 <bbob2009_compute_fopt+0x39>
lea    -0x7d(%rdi),%rax
mov    $0x13,%r14d
cmp    $0x3,%rax
jb     1179 <bbob2009_compute_fopt+0x39>
lea    -0x80(%rdi),%rax
cmp    $0x3,%rax
mov    $0x15,%r14d
cmovae %rdi,%r14
jmp    1179 <bbob2009_compute_fopt+0x39>

LLVM IR (-O0):
define double @bbob2009_compute_fopt(i64 %0, i64 %1) {
%3 = alloca i64
%4 = alloca i64
%5 = alloca i64
%6 = alloca i64
%7 = alloca double
%8 = alloca double
store i64 %0, i64* %3
store i64 %1, i64* %4
%9 = load i64, i64* %3
%10 = icmp eq i64 %9, 4
br i1 %10, label %11, label %12
11: ; preds = %2
store i64 3, i64* %5
br label %125
12: ; preds = %2
%13 = load i64, i64* %3
%14 = icmp eq i64 %13, 18
br i1 %14, label %15, label %16
15: ; preds = %12
store i64 17, i64* %5
br label %124
16: ; preds = %12
%17 = load i64, i64* %3
%18 = icmp eq i64 %17, 101
br i1 %18, label %34, label %19
19: ; preds = %16
%20 = load i64, i64* %3
%21 = icmp eq i64 %20, 102
br i1 %21, label %34, label %22
22: ; preds = %19
%23 = load i64, i64* %3
%24 = icmp eq i64 %23, 103
br i1 %24, label %34, label %25
25: ; preds = %22
%26 = load i64, i64* %3
%27 = icmp eq i64 %26, 107
br i1 %27, label %34, label %28
28: ; preds = %25
%29 = load i64, i64* %3
%30 = icmp eq i64 %29, 108
br i1 %30, label %34, label %31
31: ; preds = %28
%32 = load i64, i64* %3
%33 = icmp eq i64 %32, 109
br i1 %33, label %34, label %35
34: ; preds = %31, %28, %25, %22, %19, %16
store i64 1, i64* %5
br label %123
35: ; preds = %31
%36 = load i64, i64* %3
%37 = icmp eq i64 %36, 104
br i1 %37, label %53, label %38
38: ; preds = %35
%39 = load i64, i64* %3
%40 = icmp eq i64 %39, 105
br i1 %40, label %53, label %41
41: ; preds = %38
%42 = load i64, i64* %3
%43 = icmp eq i64 %42, 106
br i1 %43, label %53, label %44
44: ; preds = %41
%45 = load i64, i64* %3
%46 = icmp eq i64 %45, 110
br i1 %46, label %53, label %47
47: ; preds = %44
%48 = load i64, i64* %3
%49 = icmp eq i64 %48, 111
br i1 %49, label %53, label %50
50: ; preds = %47
%51 = load i64, i64* %3
%52 = icmp eq i64 %51, 112
br i1 %52, label %53, label %54
53: ; preds = %50, %47, %44, %41, %38, %35
store i64 8, i64* %5
br label %122
54: ; preds = %50
%55 = load i64, i64* %3
%56 = icmp eq i64 %55, 113
br i1 %56, label %63, label %57
57: ; preds = %54
%58 = load i64, i64* %3
%59 = icmp eq i64 %58, 114
br i1 %59, label %63, label %60
60: ; preds = %57
%61 = load i64, i64* %3
%62 = icmp eq i64 %61, 115
br i1 %62, label %63, label %64
63: ; preds = %60, %57, %54
store i64 7, i64* %5
br label %121
64: ; preds = %60
%65 = load i64, i64* %3
%66 = icmp eq i64 %65, 116
br i1 %66, label %73, label %67
67: ; preds = %64
%68 = load i64, i64* %3
%69 = icmp eq i64 %68, 117
br i1 %69, label %73, label %70
70: ; preds = %67
%71 = load i64, i64* %3
%72 = icmp eq i64 %71, 118
br i1 %72, label %73, label %74
73: ; preds = %70, %67, %64
store i64 10, i64* %5
br label %120
74: ; preds = %70
%75 = load i64, i64* %3
%76 = icmp eq i64 %75, 119
br i1 %76, label %83, label %77
77: ; preds = %74
%78 = load i64, i64* %3
%79 = icmp eq i64 %78, 120
br i1 %79, label %83, label %80
80: ; preds = %77
%81 = load i64, i64* %3
%82 = icmp eq i64 %81, 121
br i1 %82, label %83, label %84
83: ; preds = %80, %77, %74
store i64 14, i64* %5
br label %119
84: ; preds = %80
%85 = load i64, i64* %3
%86 = icmp eq i64 %85, 122
br i1 %86, label %93, label %87
87: ; preds = %84
%88 = load i64, i64* %3
%89 = icmp eq i64 %88, 123
br i1 %89, label %93, label %90
90: ; preds = %87
%91 = load i64, i64* %3
%92 = icmp eq i64 %91, 124
br i1 %92, label %93, label %94
93: ; preds = %90, %87, %84
store i64 17, i64* %5
br label %118
94: ; preds = %90
%95 = load i64, i64* %3
%96 = icmp eq i64 %95, 125
br i1 %96, label %103, label %97
97: ; preds = %94
%98 = load i64, i64* %3
%99 = icmp eq i64 %98, 126
br i1 %99, label %103, label %100
100: ; preds = %97
%101 = load i64, i64* %3
%102 = icmp eq i64 %101, 127
br i1 %102, label %103, label %104
103: ; preds = %100, %97, %94
store i64 19, i64* %5
br label %117
104: ; preds = %100
%105 = load i64, i64* %3
%106 = icmp eq i64 %105, 128
br i1 %106, label %113, label %107
107: ; preds = %104
%108 = load i64, i64* %3
%109 = icmp eq i64 %108, 129
br i1 %109, label %113, label %110
110: ; preds = %107
%111 = load i64, i64* %3
%112 = icmp eq i64 %111, 130
br i1 %112, label %113, label %114
113: ; preds = %110, %107, %104
store i64 21, i64* %5
br label %116
114: ; preds = %110
%115 = load i64, i64* %3
store i64 %115, i64* %5
br label %116
116: ; preds = %114, %113
br label %117
117: ; preds = %116, %103
br label %118
118: ; preds = %117, %93
br label %119
119: ; preds = %118, %83
br label %120
120: ; preds = %119, %73
br label %121
121: ; preds = %120, %63
br label %122
122: ; preds = %121, %53
br label %123
123: ; preds = %122, %34
br label %124
124: ; preds = %123, %15
br label %125
125: ; preds = %124, %11
%126 = load i64, i64* %5
%127 = load i64, i64* %4
%128 = mul i64 10000, %127
%129 = add nsw i64 %126, %128
store i64 %129, i64* %6
%130 = load i64, i64* %6
%131 = call i32 @bbob2009_gauss(double* %7, i32 1, i64 %130)
%132 = load i64, i64* %6
%133 = add nsw i64 %132, 1
%134 = call i32 @bbob2009_gauss(double* %8, i32 1, i64 %133)
%135 = load double, double* %7
%136 = fmul double 1.000000e+04, %135
%137 = load double, double* %8
%138 = fdiv double %136, %137
%139 = fptosi double %138 to i32
%140 = call i32 @bbob2009_round(i32 %139)
%141 = sitofp i32 %140 to double
%142 = fdiv double %141, 1.000000e+02
%143 = fptosi double %142 to i32
%144 = call i32 @bbob2009_fmax(i32 -1000, i32 %143)
%145 = call double @bbob2009_fmin(i32 1000, i32 %144)
ret double %145
}

LLVM IR (-O2):
define double @bbob2009_compute_fopt(i64 %0, i64 %1) {
%3 = alloca double
%4 = alloca double
%5 = bitcast double* %3 to i8*
%6 = bitcast double* %4 to i8*
switch i64 %0, label %8 [
i64 4, label %29
i64 18, label %7
i64 109, label %27
i64 108, label %27
i64 107, label %27
i64 103, label %27
i64 102, label %27
i64 101, label %27
i64 112, label %28
i64 111, label %28
i64 110, label %28
i64 106, label %28
i64 105, label %28
i64 104, label %28
]
7: ; preds = %2
br label %29
8: ; preds = %2
%9 = add i64 %0, -113
%10 = icmp ult i64 %9, 3
br i1 %10, label %29, label %11
11: ; preds = %8
%12 = add i64 %0, -116
%13 = icmp ult i64 %12, 3
br i1 %13, label %29, label %14
14: ; preds = %11
%15 = add i64 %0, -119
%16 = icmp ult i64 %15, 3
br i1 %16, label %29, label %17
17: ; preds = %14
%18 = add i64 %0, -122
%19 = icmp ult i64 %18, 3
br i1 %19, label %29, label %20
20: ; preds = %17
%21 = add i64 %0, -125
%22 = icmp ult i64 %21, 3
br i1 %22, label %29, label %23
23: ; preds = %20
%24 = add i64 %0, -128
%25 = icmp ult i64 %24, 3
%26 = select i1 %25, i64 21, i64 %0
br label %29
27: ; preds = %2, %2, %2, %2, %2, %2
br label %29
28: ; preds = %2, %2, %2, %2, %2, %2
br label %29
29: ; preds = %23, %17, %11, %2, %28, %27, %20, %14, %8, %7
%30 = phi i64 [ 17, %7 ], [ 3, %2 ], [ 7, %8 ], [ 10, %11 ], [ 14, %14 ], [ 17, %17 ], [ 19, %20 ], [ 1, %27 ], [ 8, %28 ], [ %26, %23 ]
%31 = mul i64 %1, 10000
%32 = add nsw i64 %30, %31
%33 = call i32 @bbob2009_gauss(double* %3, i32 1, i64 %32)
%34 = add nsw i64 %32, 1
%35 = call i32 @bbob2009_gauss(double* %4, i32 1, i64 %34)
%36 = load double, double* %3
%37 = fmul double %36, 1.000000e+04
%38 = load double, double* %4
%39 = fdiv double %37, %38
%40 = fptosi double %39 to i32
%41 = call i32 @bbob2009_round(i32 %40)
%42 = sitofp i32 %41 to double
%43 = fdiv double %42, 1.000000e+02
%44 = fptosi double %43 to i32
%45 = call i32 @bbob2009_fmax(i32 -1000, i32 %44)
%46 = call double @bbob2009_fmin(i32 1000, i32 %45)
ret double %46
}