int trust(vfs, ffs, nfs, nstep, dtoler, toler)
int nfs, (*vfs[])(), (*ffs[])();
int nstep;
float toler, dtoler;
{
  int i, j, ifs;
  float vb, vt, vto, vtk;
  float a_max_f(), lam, vtoler, v_predict();
  printf(" entering trust \n");
  a_v_zero();
  if (dtoler < 1.e-3)
    dtoler = .1;
  for (i = 0; i < nstep; i++) {
    vb = 0.;
    for (ifs = 0; ifs < nfs; ifs++)
      (*vfs[ifs])(&vb, 0.);
    a_f_zero();
    for (ifs = 0; ifs < nfs; ifs++)
      (*ffs[ifs])(0.);
    lam = a_max_f();
    printf(" vb, maxf %f %f \n", vb, (lam));
    if (lam <= toler)
      return 1;
    if (lam <= 1.) {
      a_ftodx(1., 0.);
    } else {
      a_ftodx(.1 / sqrt(lam), 0.);
    }
    vto = vb;
    vtk = vb;
    lam = 0.;
    vtoler = abs(vb * dtoler);
    if (vtoler < .1)
      vtoler = .1;
    for (j = 0; j < 200; j++) {
      vt = 0.;
      lam = lam + .001 * j;
      for (ifs = 0; ifs < nfs; ifs++)
        (*vfs[ifs])(&vt, lam);
      vto = v_predict(lam, vb);
      if ((vt - vto) > vtoler) {
        lam = lam - .001 * j;
        break;
      }
      if (vt > vtk && j != 0) {
        lam = lam - .001 * j;
        break;
      }
      vtk = vt;
    }
    a_inc_d(lam);
  }
  vb = 0.;
  for (ifs = 0; ifs < nfs; ifs++)
    (*vfs[ifs])(&vb, 0.);
  printf(" vb %f \n", vb);
  return 0;
}


x86 assembly (clang, -O0):
<trust>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
movsd  %xmm1,-0x58(%rbp)
movaps %xmm0,%xmm1
movsd  -0x58(%rbp),%xmm0
cvtsd2ss %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm0
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    %ecx,-0x20(%rbp)
movss  %xmm1,-0x24(%rbp)
movss  %xmm0,-0x28(%rbp)
lea    0xe58(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    $0x0,%al
call   1060 <a_v_zero@plt>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe15(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1202 <trust+0x72>
movss  0xe23(%rip),%xmm0
movss  %xmm0,-0x24(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    14e8 <trust+0x358>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1252 <trust+0xc2>
mov    -0x10(%rbp),%rcx
movslq -0x34(%rbp),%rdx
lea    -0x38(%rbp),%rdi
xorps  %xmm0,%xmm0
mov    $0x1,%al
call   *(%rcx,%rdx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1224 <trust+0x94>
mov    $0x0,%al
call   10a0 <a_f_zero@plt>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    128a <trust+0xfa>
mov    -0x18(%rbp),%rcx
movslq -0x34(%rbp),%rdx
xorps  %xmm0,%xmm0
mov    $0x1,%al
call   *(%rcx,%rdx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1260 <trust+0xd0>
mov    $0x0,%al
call   1030 <a_max_f@plt>
movss  %xmm0,-0x48(%rbp)
movss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x48(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
lea    0xd87(%rip),%rdi
mov    $0x2,%al
call   1050 <printf@plt>
movss  -0x48(%rbp),%xmm1
movss  -0x28(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     12d5 <trust+0x145>
movl   $0x1,-0x4(%rbp)
jmp    1543 <trust+0x3b3>
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd22(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     1307 <trust+0x177>
movsd  0xd10(%rip),%xmm0
xorps  %xmm1,%xmm1
mov    $0x2,%al
call   1080 <a_ftodx@plt>
jmp    132e <trust+0x19e>
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1090 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  0xcf0(%rip),%xmm0
divsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
mov    $0x2,%al
call   1080 <a_ftodx@plt>
movss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x38(%rbp),%xmm0
mulss  -0x24(%rbp),%xmm0
cvttss2si %xmm0,%edi
call   1040 <abs@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc99(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    138e <trust+0x1fe>
movss  0xc97(%rip),%xmm0
movss  %xmm0,-0x4c(%rbp)
movl   $0x0,-0x30(%rbp)
cmpl   $0xc8,-0x30(%rbp)
jge    14ca <trust+0x33a>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
cvtsi2sdl -0x30(%rbp),%xmm0
movsd  0xc40(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    140f <trust+0x27f>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rcx
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
lea    -0x3c(%rbp),%rdi
mov    $0x1,%al
call   *%rcx
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    13d8 <trust+0x248>
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x38(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mov    $0x2,%al
call   1070 <v_predict@plt>
movss  %xmm0,-0x40(%rbp)
movss  -0x3c(%rbp),%xmm0
subss  -0x40(%rbp),%xmm0
ucomiss -0x4c(%rbp),%xmm0
jbe    146d <trust+0x2dd>
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
cvtsi2sdl -0x30(%rbp),%xmm0
movsd  0xbc1(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    14ca <trust+0x33a>
movss  -0x3c(%rbp),%xmm0
ucomiss -0x44(%rbp),%xmm0
jbe    14b2 <trust+0x322>
cmpl   $0x0,-0x30(%rbp)
je     14b2 <trust+0x322>
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
cvtsi2sdl -0x30(%rbp),%xmm0
movsd  0xb7c(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    14ca <trust+0x33a>
movss  -0x3c(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1395 <trust+0x205>
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   10b0 <a_inc_d@plt>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1209 <trust+0x79>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1525 <trust+0x395>
mov    -0x10(%rbp),%rcx
movslq -0x34(%rbp),%rdx
lea    -0x38(%rbp),%rdi
xorps  %xmm0,%xmm0
mov    $0x1,%al
call   *(%rcx,%rdx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    14f7 <trust+0x367>
movss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
lea    0xb13(%rip),%rdi
mov    $0x1,%al
call   1050 <printf@plt>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<trust>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
movsd  %xmm1,0x10(%rsp)
mov    %ecx,0x1c(%rsp)
mov    %edx,0xc(%rsp)
mov    %rsi,%r15
mov    %rdi,%rbx
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x18(%rsp)
lea    0xe88(%rip),%rdi
call   1040 <puts@plt>
xor    %eax,%eax
call   1060 <a_v_zero@plt>
movss  0x18(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe1f(%rip),%xmm2
ucomisd %xmm0,%xmm2
jbe    11f5 <trust+0x65>
movss  0xe39(%rip),%xmm0
movss  %xmm0,0x18(%rsp)
mov    0xc(%rsp),%r14d
cmpl   $0x0,0x1c(%rsp)
jle    1489 <trust+0x2f9>
movsd  0x10(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x34(%rsp)
lea    0x8(%rsp),%r12
lea    0x24(%rsp),%r13
xor    %eax,%eax
jmp    1269 <trust+0xd9>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  0x40(%rsp),%xmm0
mulsd  0xdda(%rip),%xmm0
addsd  0x10(%rsp),%xmm0
cvtsd2ss %xmm0,%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   10b0 <a_inc_d@plt>
mov    0x38(%rsp),%eax
add    $0x1,%eax
cmp    0x1c(%rsp),%eax
lea    0x8(%rsp),%r12
je     1489 <trust+0x2f9>
mov    %eax,0x38(%rsp)
movl   $0x0,0x8(%rsp)
cmpl   $0x0,0xc(%rsp)
jle    12c0 <trust+0x130>
xor    %ebp,%ebp
xchg   %ax,%ax
xorps  %xmm0,%xmm0
mov    %r12,%rdi
mov    $0x1,%al
call   *(%rbx,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%r14
jne    1280 <trust+0xf0>
xor    %eax,%eax
call   10a0 <a_f_zero@plt>
xor    %ebp,%ebp
nopl   (%rax)
xorps  %xmm0,%xmm0
mov    $0x1,%al
call   *(%r15,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%r14
jne    12a0 <trust+0x110>
jmp    12c7 <trust+0x137>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
xor    %eax,%eax
call   10a0 <a_f_zero@plt>
xor    %eax,%eax
call   1030 <a_max_f@plt>
movaps %xmm0,%xmm1
movss  %xmm0,0x10(%rsp)
movss  0x8(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm1,%xmm1
lea    0xd44(%rip),%rdi
movsd  %xmm1,0x28(%rsp)
mov    $0x2,%al
call   1050 <printf@plt>
movss  0x10(%rsp),%xmm1
movss  0x34(%rsp),%xmm0
ucomiss %xmm1,%xmm0
jae    14c0 <trust+0x330>
movss  0xd16(%rip),%xmm0
ucomiss %xmm1,%xmm0
movsd  0xce7(%rip),%xmm0
jae    1355 <trust+0x1c5>
movsd  0x28(%rsp),%xmm0
ucomisd 0xcef(%rip),%xmm0
jb     1340 <trust+0x1b0>
xorps  %xmm1,%xmm1
sqrtsd %xmm0,%xmm1
jmp    1349 <trust+0x1b9>
nopl   0x0(%rax)
call   1090 <sqrt@plt>
movapd %xmm0,%xmm1
movsd  0xcbf(%rip),%xmm0
divsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
mov    $0x2,%al
call   1080 <a_ftodx@plt>
movss  0x8(%rsp),%xmm1
movss  0x18(%rsp),%xmm0
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,%ecx
neg    %ecx
cmovs  %eax,%ecx
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
xorps  %xmm2,%xmm2
cvtss2sd %xmm0,%xmm2
movsd  0xc80(%rip),%xmm3
ucomisd %xmm2,%xmm3
movss  0xc8c(%rip),%xmm2
movss  %xmm2,0x20(%rsp)
ja     13aa <trust+0x21a>
movss  %xmm0,0x20(%rsp)
xor    %r12d,%r12d
xorps  %xmm0,%xmm0
jmp    13d7 <trust+0x247>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%r12d
cmp    $0xc8,%r12d
movss  0x3c(%rsp),%xmm0
je     1248 <trust+0xb8>
movss  %xmm1,0x28(%rsp)
movl   $0x0,0x24(%rsp)
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sd %r12d,%xmm1
movsd  %xmm1,0x40(%rsp)
mulsd  0xc01(%rip),%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movss  %xmm0,0x3c(%rsp)
cvtss2sd %xmm0,%xmm0
cmpl   $0x0,0xc(%rsp)
movsd  %xmm0,0x10(%rsp)
jle    1447 <trust+0x2b7>
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r13,%rdi
mov    $0x1,%al
call   *(%rbx,%rbp,8)
movsd  0x10(%rsp),%xmm0
add    $0x1,%rbp
cmp    %rbp,%r14
jne    1430 <trust+0x2a0>
movss  0x8(%rsp),%xmm1
cvtss2sd %xmm1,%xmm1
mov    $0x2,%al
call   1070 <v_predict@plt>
movss  0x24(%rsp),%xmm1
movaps %xmm1,%xmm2
subss  %xmm0,%xmm2
ucomiss 0x20(%rsp),%xmm2
ja     1230 <trust+0xa0>
ucomiss 0x28(%rsp),%xmm1
jbe    13c0 <trust+0x230>
test   %r12d,%r12d
je     13c0 <trust+0x230>
jmp    1230 <trust+0xa0>
movl   $0x0,0x8(%rsp)
cmpl   $0x0,0xc(%rsp)
jle    14c7 <trust+0x337>
xor    %ebp,%ebp
lea    0x8(%rsp),%r15
nop
xorps  %xmm0,%xmm0
mov    %r15,%rdi
mov    $0x1,%al
call   *(%rbx,%rbp,8)
add    $0x1,%rbp
cmp    %rbp,%r14
jne    14a0 <trust+0x310>
movss  0x8(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
jmp    14ca <trust+0x33a>
mov    $0x1,%eax
jmp    14da <trust+0x34a>
xorps  %xmm0,%xmm0
lea    0xb71(%rip),%rdi
mov    $0x1,%al
call   1050 <printf@plt>
xor    %eax,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [18 x i8] c" entering trust \0A\00"
@.str.1 = [18 x i8] c" vb, maxf %f %f \0A\00"
@.str.2 = [9 x i8] c" vb %f \0A\00"
define i32 @trust(i32 (...)** %0, i32 (...)** %1, i32 %2, i32 %3, double %4, double %5) {
%7 = alloca i32
%8 = alloca i32 (...)**
%9 = alloca i32 (...)**
%10 = alloca i32
%11 = alloca i32
%12 = alloca float
%13 = alloca float
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca float
%23 = fptrunc double %4 to float
%24 = fptrunc double %5 to float
store i32 (...)** %0, i32 (...)*** %8
store i32 (...)** %1, i32 (...)*** %9
store i32 %2, i32* %10
store i32 %3, i32* %11
store float %23, float* %12
store float %24, float* %13
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0))
%26 = call i32 (...) @a_v_zero()
%27 = load float, float* %12
%28 = fpext float %27 to double
%29 = fcmp olt double %28, 1.000000e-03
br i1 %29, label %30, label %31
30: ; preds = %6
store float 0x3FB99999A0000000, float* %12
br label %31
31: ; preds = %30, %6
store i32 0, i32* %14
br label %32
32: ; preds = %174, %31
%33 = load i32, i32* %14
%34 = load i32, i32* %11
%35 = icmp slt i32 %33, %34
br i1 %35, label %36, label %177
36: ; preds = %32
store float 0.000000e+00, float* %17
store i32 0, i32* %16
br label %37
37: ; preds = %49, %36
%38 = load i32, i32* %16
%39 = load i32, i32* %10
%40 = icmp slt i32 %38, %39
br i1 %40, label %41, label %52
41: ; preds = %37
%42 = load i32 (...)**, i32 (...)*** %8
%43 = load i32, i32* %16
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds i32 (...)*, i32 (...)** %42, i64 %44
%46 = load i32 (...)*, i32 (...)** %45
%47 = bitcast i32 (...)* %46 to i32 (float*, double, ...)*
%48 = call i32 (float*, double, ...) %47(float* %17, double 0.000000e+00)
br label %49
49: ; preds = %41
%50 = load i32, i32* %16
%51 = add nsw i32 %50, 1
store i32 %51, i32* %16
br label %37
52: ; preds = %37
%53 = call i32 (...) @a_f_zero()
store i32 0, i32* %16
br label %54
54: ; preds = %66, %52
%55 = load i32, i32* %16
%56 = load i32, i32* %10
%57 = icmp slt i32 %55, %56
br i1 %57, label %58, label %69
58: ; preds = %54
%59 = load i32 (...)**, i32 (...)*** %9
%60 = load i32, i32* %16
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i32 (...)*, i32 (...)** %59, i64 %61
%63 = load i32 (...)*, i32 (...)** %62
%64 = bitcast i32 (...)* %63 to i32 (double, ...)*
%65 = call i32 (double, ...) %64(double 0.000000e+00)
br label %66
66: ; preds = %58
%67 = load i32, i32* %16
%68 = add nsw i32 %67, 1
store i32 %68, i32* %16
br label %54
69: ; preds = %54
%70 = call float (...) @a_max_f()
store float %70, float* %21
%71 = load float, float* %17
%72 = fpext float %71 to double
%73 = load float, float* %21
%74 = fpext float %73 to double
%75 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.1, i64 0, i64 0), double %72, double %74)
%76 = load float, float* %21
%77 = load float, float* %13
%78 = fcmp ole float %76, %77
br i1 %78, label %79, label %80
79: ; preds = %69
store i32 1, i32* %7
br label %197
80: ; preds = %69
%81 = load float, float* %21
%82 = fpext float %81 to double
%83 = fcmp ole double %82, 1.000000e+00
br i1 %83, label %84, label %86
84: ; preds = %80
%85 = call i32 (double, double, ...) bitcast (i32 (...)* @a_ftodx to i32 (double, double, ...)*)(double 1.000000e+00, double 0.000000e+00)
br label %92
86: ; preds = %80
%87 = load float, float* %21
%88 = fpext float %87 to double
%89 = call double @sqrt(double %88)
%90 = fdiv double 1.000000e-01, %89
%91 = call i32 (double, double, ...) bitcast (i32 (...)* @a_ftodx to i32 (double, double, ...)*)(double %90, double 0.000000e+00)
br label %92
92: ; preds = %86, %84
%93 = load float, float* %17
store float %93, float* %19
%94 = load float, float* %17
store float %94, float* %20
store float 0.000000e+00, float* %21
%95 = load float, float* %17
%96 = load float, float* %12
%97 = fmul float %95, %96
%98 = fptosi float %97 to i32
%99 = call i32 @abs(i32 %98)
%100 = sitofp i32 %99 to float
store float %100, float* %22
%101 = load float, float* %22
%102 = fpext float %101 to double
%103 = fcmp olt double %102, 1.000000e-01
br i1 %103, label %104, label %105
104: ; preds = %92
store float 0x3FB99999A0000000, float* %22
br label %105
105: ; preds = %104, %92
store i32 0, i32* %15
br label %106
106: ; preds = %167, %105
%107 = load i32, i32* %15
%108 = icmp slt i32 %107, 200
br i1 %108, label %109, label %170
109: ; preds = %106
store float 0.000000e+00, float* %18
%110 = load float, float* %21
%111 = fpext float %110 to double
%112 = load i32, i32* %15
%113 = sitofp i32 %112 to double
%114 = call double @llvm.fmuladd.f64(double 1.000000e-03, double %113, double %111)
%115 = fptrunc double %114 to float
store float %115, float* %21
store i32 0, i32* %16
br label %116
116: ; preds = %130, %109
%117 = load i32, i32* %16
%118 = load i32, i32* %10
%119 = icmp slt i32 %117, %118
br i1 %119, label %120, label %133
120: ; preds = %116
%121 = load i32 (...)**, i32 (...)*** %8
%122 = load i32, i32* %16
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds i32 (...)*, i32 (...)** %121, i64 %123
%125 = load i32 (...)*, i32 (...)** %124
%126 = load float, float* %21
%127 = fpext float %126 to double
%128 = bitcast i32 (...)* %125 to i32 (float*, double, ...)*
%129 = call i32 (float*, double, ...) %128(float* %18, double %127)
br label %130
130: ; preds = %120
%131 = load i32, i32* %16
%132 = add nsw i32 %131, 1
store i32 %132, i32* %16
br label %116
133: ; preds = %116
%134 = load float, float* %21
%135 = fpext float %134 to double
%136 = load float, float* %17
%137 = fpext float %136 to double
%138 = call float (double, double, ...) bitcast (float (...)* @v_predict to float (double, double, ...)*)(double %135, double %137)
store float %138, float* %19
%139 = load float, float* %18
%140 = load float, float* %19
%141 = fsub float %139, %140
%142 = load float, float* %22
%143 = fcmp ogt float %141, %142
br i1 %143, label %144, label %151
144: ; preds = %133
%145 = load float, float* %21
%146 = fpext float %145 to double
%147 = load i32, i32* %15
%148 = sitofp i32 %147 to double
%149 = call double @llvm.fmuladd.f64(double -1.000000e-03, double %148, double %146)
%150 = fptrunc double %149 to float
store float %150, float* %21
br label %170
151: ; preds = %133
%152 = load float, float* %18
%153 = load float, float* %20
%154 = fcmp ogt float %152, %153
br i1 %154, label %155, label %165
155: ; preds = %151
%156 = load i32, i32* %15
%157 = icmp ne i32 %156, 0
br i1 %157, label %158, label %165
158: ; preds = %155
%159 = load float, float* %21
%160 = fpext float %159 to double
%161 = load i32, i32* %15
%162 = sitofp i32 %161 to double
%163 = call double @llvm.fmuladd.f64(double -1.000000e-03, double %162, double %160)
%164 = fptrunc double %163 to float
store float %164, float* %21
br label %170
165: ; preds = %155, %151
%166 = load float, float* %18
store float %166, float* %20
br label %167
167: ; preds = %165
%168 = load i32, i32* %15
%169 = add nsw i32 %168, 1
store i32 %169, i32* %15
br label %106
170: ; preds = %158, %144, %106
%171 = load float, float* %21
%172 = fpext float %171 to double
%173 = call i32 (double, ...) bitcast (i32 (...)* @a_inc_d to i32 (double, ...)*)(double %172)
br label %174
174: ; preds = %170
%175 = load i32, i32* %14
%176 = add nsw i32 %175, 1
store i32 %176, i32* %14
br label %32
177: ; preds = %32
store float 0.000000e+00, float* %17
store i32 0, i32* %16
br label %178
178: ; preds = %190, %177
%179 = load i32, i32* %16
%180 = load i32, i32* %10
%181 = icmp slt i32 %179, %180
br i1 %181, label %182, label %193
182: ; preds = %178
%183 = load i32 (...)**, i32 (...)*** %8
%184 = load i32, i32* %16
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds i32 (...)*, i32 (...)** %183, i64 %185
%187 = load i32 (...)*, i32 (...)** %186
%188 = bitcast i32 (...)* %187 to i32 (float*, double, ...)*
%189 = call i32 (float*, double, ...) %188(float* %17, double 0.000000e+00)
br label %190
190: ; preds = %182
%191 = load i32, i32* %16
%192 = add nsw i32 %191, 1
store i32 %192, i32* %16
br label %178
193: ; preds = %178
%194 = load float, float* %17
%195 = fpext float %194 to double
%196 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), double %195)
store i32 0, i32* %7
br label %197
197: ; preds = %193, %79
%198 = load i32, i32* %7
ret i32 %198
}

LLVM IR (-O2):
@.str.1 = [18 x i8] c" vb, maxf %f %f \0A\00"
@.str.2 = [9 x i8] c" vb %f \0A\00"
@str = [17 x i8] c" entering trust \00"
define i32 @trust(i32 (...)** nocapture %0, i32 (...)** nocapture %1, i32 %2, i32 %3, double %4, double %5) {
%7 = alloca float
%8 = alloca float
%9 = fptrunc double %4 to float
%10 = fptrunc double %5 to float
%11 = bitcast float* %7 to i8*
%12 = bitcast float* %8 to i8*
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str, i64 0, i64 0))
%14 = tail call i32 (...) @a_v_zero()
%15 = fpext float %9 to double
%16 = fcmp olt double %15, 1.000000e-03
%17 = select i1 %16, float 0x3FB99999A0000000, float %9
%18 = icmp sgt i32 %3, 0
br i1 %18, label %19, label %110
19: ; preds = %6
%20 = icmp sgt i32 %2, 0
%21 = zext i32 %2 to i64
br label %22
22: ; preds = %19, %104
%23 = phi i32 [ 0, %19 ], [ %108, %104 ]
store float 0.000000e+00, float* %7
br i1 %20, label %26, label %24
24: ; preds = %22
%25 = call i32 (...) @a_f_zero()
br label %44
26: ; preds = %22, %26
%27 = phi i64 [ %32, %26 ], [ 0, %22 ]
%28 = getelementptr inbounds i32 (...)*, i32 (...)** %0, i64 %27
%29 = bitcast i32 (...)** %28 to i32 (float*, double, ...)**
%30 = load i32 (float*, double, ...)*, i32 (float*, double, ...)** %29
%31 = call i32 (float*, double, ...) %30(float* %7, double 0.000000e+00)
%32 = add nuw nsw i64 %27, 1
%33 = icmp eq i64 %32, %21
br i1 %33, label %34, label %26
34: ; preds = %26
%35 = call i32 (...) @a_f_zero()
br label %36
36: ; preds = %34, %36
%37 = phi i64 [ %42, %36 ], [ 0, %34 ]
%38 = getelementptr inbounds i32 (...)*, i32 (...)** %1, i64 %37
%39 = bitcast i32 (...)** %38 to i32 (double, ...)**
%40 = load i32 (double, ...)*, i32 (double, ...)** %39
%41 = call i32 (double, ...) %40(double 0.000000e+00)
%42 = add nuw nsw i64 %37, 1
%43 = icmp eq i64 %42, %21
br i1 %43, label %44, label %36
44: ; preds = %36, %24
%45 = call float (...) @a_max_f()
%46 = load float, float* %7
%47 = fpext float %46 to double
%48 = fpext float %45 to double
%49 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @.str.1, i64 0, i64 0), double %47, double %48)
%50 = fcmp ugt float %45, %10
br i1 %50, label %51, label %128
51: ; preds = %44
%52 = fcmp ugt float %45, 1.000000e+00
br i1 %52, label %53, label %56
53: ; preds = %51
%54 = call double @sqrt(double %48)
%55 = fdiv double 1.000000e-01, %54
br label %56
56: ; preds = %51, %53
%57 = phi double [ %55, %53 ], [ 1.000000e+00, %51 ]
%58 = call i32 (double, double, ...) bitcast (i32 (...)* @a_ftodx to i32 (double, double, ...)*)(double %57, double 0.000000e+00)
%59 = load float, float* %7
%60 = fmul float %17, %59
%61 = fptosi float %60 to i32
%62 = call i32 @llvm.abs.i32(i32 %61, i1 true)
%63 = sitofp i32 %62 to float
%64 = fpext float %63 to double
%65 = fcmp olt double %64, 1.000000e-01
%66 = select i1 %65, float 0x3FB99999A0000000, float %63
br label %70
67: ; preds = %97
%68 = add nuw nsw i32 %73, 1
%69 = icmp eq i32 %68, 200
br i1 %69, label %104, label %70
70: ; preds = %56, %67
%71 = phi float [ 0.000000e+00, %56 ], [ %77, %67 ]
%72 = phi float [ %59, %56 ], [ %91, %67 ]
%73 = phi i32 [ 0, %56 ], [ %68, %67 ]
store float 0.000000e+00, float* %8
%74 = fpext float %71 to double
%75 = sitofp i32 %73 to double
%76 = call double @llvm.fmuladd.f64(double %75, double 1.000000e-03, double %74)
%77 = fptrunc double %76 to float
%78 = fpext float %77 to double
br i1 %20, label %79, label %87
79: ; preds = %70, %79
%80 = phi i64 [ %85, %79 ], [ 0, %70 ]
%81 = getelementptr inbounds i32 (...)*, i32 (...)** %0, i64 %80
%82 = bitcast i32 (...)** %81 to i32 (float*, double, ...)**
%83 = load i32 (float*, double, ...)*, i32 (float*, double, ...)** %82
%84 = call i32 (float*, double, ...) %83(float* %8, double %78)
%85 = add nuw nsw i64 %80, 1
%86 = icmp eq i64 %85, %21
br i1 %86, label %87, label %79
87: ; preds = %79, %70
%88 = load float, float* %7
%89 = fpext float %88 to double
%90 = call float (double, double, ...) bitcast (float (...)* @v_predict to float (double, double, ...)*)(double %78, double %89)
%91 = load float, float* %8
%92 = fsub float %91, %90
%93 = fcmp ogt float %92, %66
br i1 %93, label %94, label %97
94: ; preds = %87
%95 = call double @llvm.fmuladd.f64(double %75, double -1.000000e-03, double %78)
%96 = fptrunc double %95 to float
br label %104
97: ; preds = %87
%98 = fcmp ogt float %91, %72
%99 = icmp ne i32 %73, 0
%100 = select i1 %98, i1 %99, i1 false
br i1 %100, label %101, label %67
101: ; preds = %97
%102 = call double @llvm.fmuladd.f64(double %75, double -1.000000e-03, double %78)
%103 = fptrunc double %102 to float
br label %104
104: ; preds = %67, %101, %94
%105 = phi float [ %96, %94 ], [ %103, %101 ], [ %77, %67 ]
%106 = fpext float %105 to double
%107 = call i32 (double, ...) bitcast (i32 (...)* @a_inc_d to i32 (double, ...)*)(double %106)
%108 = add nuw nsw i32 %23, 1
%109 = icmp eq i32 %108, %3
br i1 %109, label %110, label %22
110: ; preds = %104, %6
store float 0.000000e+00, float* %7
%111 = icmp sgt i32 %2, 0
br i1 %111, label %112, label %125
112: ; preds = %110
%113 = zext i32 %2 to i64
br label %114
114: ; preds = %112, %114
%115 = phi i64 [ 0, %112 ], [ %120, %114 ]
%116 = getelementptr inbounds i32 (...)*, i32 (...)** %0, i64 %115
%117 = bitcast i32 (...)** %116 to i32 (float*, double, ...)**
%118 = load i32 (float*, double, ...)*, i32 (float*, double, ...)** %117
%119 = call i32 (float*, double, ...) %118(float* %7, double 0.000000e+00)
%120 = add nuw nsw i64 %115, 1
%121 = icmp eq i64 %120, %113
br i1 %121, label %122, label %114
122: ; preds = %114
%123 = load float, float* %7
%124 = fpext float %123 to double
br label %125
125: ; preds = %122, %110
%126 = phi double [ %124, %122 ], [ 0.000000e+00, %110 ]
%127 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), double %126)
br label %128
128: ; preds = %44, %125
%129 = phi i32 [ 0, %125 ], [ 1, %44 ]
ret i32 %129
}