void mnbrak(ax, bx, cx, fa, fb, fc, func) double *ax, *bx, *cx, *fa, *fb, *fc;
double (*func)();
{
  double ulim, u, r, q, fu, dum;
  *fa = (*func)(*ax);
  *fb = (*func)(*bx);
  if (*fb > *fa) {
    (dum) = (*ax);
    (*ax) = (*bx);
    (*bx) = (dum);
    (dum) = (*fb);
    (*fb) = (*fa);
    (*fa) = (dum);
  }
  *cx = (*bx) + 1.618033988750 * (*bx - *ax);
  *fc = (*func)(*cx);
  while (*fb > *fc) {
    r = (*bx - *ax) * (*fb - *fc);
    q = (*bx - *cx) * (*fb - *fa);
    u = (*bx) -
        ((*bx - *cx) * q - (*bx - *ax) * r) /
            (2.0 * ((q - r) > 0.0
                        ? fabs(((fabs(q - r)) > (1.0e-16) ? (fabs(q - r))
                                                          : (1.0e-16)))
                        : -fabs(((fabs(q - r)) > (1.0e-16) ? (fabs(q - r))
                                                           : (1.0e-16)))));
    ulim = (*bx) + 100.0 * (*cx - *bx);
    if ((*bx - u) * (u - *cx) > 0.0) {
      fu = (*func)(u);
      if (fu < *fc) {
        *ax = (*bx);
        *bx = u;
        *fa = (*fb);
        *fb = fu;
        return;
      } else if (fu > *fb) {
        *cx = u;
        *fc = fu;
        return;
      }
      u = (*cx) + 1.618033988750 * (*cx - *bx);
      fu = (*func)(u);
    } else if ((*cx - u) * (u - ulim) > 0.0) {
      fu = (*func)(u);
      if (fu < *fc) {
        (*bx) = (*cx);
        (*cx) = (u);
        (u) = (*cx + 1.618033988750 * (*cx - *bx));
        (*fb) = (*fc);
        (*fc) = (fu);
        (fu) = ((*func)(u));
      }
    } else if ((u - ulim) * (ulim - *cx) >= 0.0) {
      u = ulim;
      fu = (*func)(u);
    } else {
      u = (*cx) + 1.618033988750 * (*cx - *bx);
      fu = (*func)(u);
    }
    (*ax) = (*bx);
    (*bx) = (*cx);
    (*cx) = (u);
    (*fa) = (*fb);
    (*fb) = (*fc);
    (*fc) = (fu);
  }
}


x86 assembly (clang, -O0):
<mnbrak>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    0x10(%rbp),%rcx
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
mov    $0x1,%al
call   *%rcx
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x10(%rbp),%rcx
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    $0x1,%al
call   *%rcx
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    11c1 <mnbrak+0xc1>
mov    -0x8(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x60(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x60(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  (%rax),%xmm0
movsd  0xe1f(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x10(%rbp),%rcx
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    $0x1,%al
call   *%rcx
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x30(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    1705 <mnbrak+0x605>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
subsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x30(%rbp),%rax
subsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
subsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x20(%rbp),%rax
subsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
subsd  (%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x8(%rbp),%rax
subsd  (%rax),%xmm1
mulsd  -0x48(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x50(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1355 <mnbrak+0x255>
movsd  -0x50(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movaps 0xd2c(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xd08(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1329 <mnbrak+0x229>
movsd  -0x50(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movaps 0xd05(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    133b <mnbrak+0x23b>
movsd  0xcd7(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    133b <mnbrak+0x23b>
movsd  -0x78(%rbp),%xmm0
movaps 0xcd9(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    13e2 <mnbrak+0x2e2>
movsd  -0x50(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movaps 0xcba(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xc96(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    139e <mnbrak+0x29e>
movsd  -0x50(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movaps 0xc93(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    13b3 <mnbrak+0x2b3>
movsd  0xc62(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    13b3 <mnbrak+0x2b3>
movsd  -0x88(%rbp),%xmm0
ff
movaps 0xc5e(%rip),%xmm1
pand   %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
movsd  -0x80(%rbp),%xmm3
movsd  0xc1f(%rip),%xmm2
mulsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm0
movsd  0xbe6(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
mov    -0x18(%rbp),%rax
subsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1545 <mnbrak+0x445>
mov    0x10(%rbp),%rcx
movsd  -0x40(%rbp),%xmm0
mov    $0x1,%al
call   *%rcx
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm1
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    14ca <mnbrak+0x3ca>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1705 <mnbrak+0x605>
movsd  -0x58(%rbp),%xmm0
mov    -0x28(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    14fc <mnbrak+0x3fc>
movsd  -0x40(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1705 <mnbrak+0x605>
jmp    1501 <mnbrak+0x401>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm0
movsd  0xadf(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    0x10(%rbp),%rcx
movsd  -0x40(%rbp),%xmm0
mov    $0x1,%al
call   *%rcx
movsd  %xmm0,-0x58(%rbp)
jmp    16a6 <mnbrak+0x5a6>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x40(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
subsd  -0x38(%rbp),%xmm1
mulsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1614 <mnbrak+0x514>
mov    0x10(%rbp),%rcx
movsd  -0x40(%rbp),%xmm0
mov    $0x1,%al
call   *%rcx
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm1
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    160f <mnbrak+0x50f>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x40(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm0
movsd  0xa2d(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x10(%rbp),%rcx
movsd  -0x40(%rbp),%xmm0
mov    $0x1,%al
call   *%rcx
movsd  %xmm0,-0x58(%rbp)
jmp    16a1 <mnbrak+0x5a1>
movsd  -0x40(%rbp),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
mov    -0x18(%rbp),%rax
subsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     165d <mnbrak+0x55d>
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    0x10(%rbp),%rcx
movsd  -0x40(%rbp),%xmm0
mov    $0x1,%al
call   *%rcx
movsd  %xmm0,-0x58(%rbp)
jmp    169c <mnbrak+0x59c>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm0
movsd  0x983(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    0x10(%rbp),%rcx
movsd  -0x40(%rbp),%xmm0
mov    $0x1,%al
call   *%rcx
movsd  %xmm0,-0x58(%rbp)
jmp    16a1 <mnbrak+0x5a1>
jmp    16a6 <mnbrak+0x5a6>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x40(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1209 <mnbrak+0x109>
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<mnbrak>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r9,%r15
mov    %r8,%r12
mov    %rcx,%r14
mov    %rdx,%r13
mov    %rsi,%rbx
mov    %rdi,%rbp
movsd  (%rdi),%xmm0
mov    $0x1,%al
call   *0x40(%rsp)
movsd  %xmm0,(%r14)
movsd  (%rbx),%xmm0
mov    $0x1,%al
call   *0x40(%rsp)
movsd  %xmm0,(%r12)
ucomisd (%r14),%xmm0
jbe    116b <mnbrak+0x6b>
movsd  0x0(%rbp),%xmm0
movsd  (%rbx),%xmm1
movsd  %xmm1,0x0(%rbp)
movsd  %xmm0,(%rbx)
movsd  (%r12),%xmm0
movsd  (%r14),%xmm1
movsd  %xmm1,(%r12)
movsd  %xmm0,(%r14)
movsd  (%rbx),%xmm1
movapd %xmm1,%xmm0
subsd  0x0(%rbp),%xmm0
mulsd  0xe80(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x0(%r13)
mov    $0x1,%al
call   *0x40(%rsp)
movsd  %xmm0,(%r15)
movsd  (%r12),%xmm2
ucomisd %xmm0,%xmm2
jbe    13e3 <mnbrak+0x2e3>
xorpd  %xmm6,%xmm6
jmp    120c <mnbrak+0x10c>
nopl   0x0(%rax,%rax,1)
movsd  %xmm5,(%rsp)
movapd %xmm5,%xmm0
mov    $0x1,%al
call   *0x40(%rsp)
movsd  (%rsp),%xmm2
movsd  (%rbx),%xmm1
movsd  %xmm1,0x0(%rbp)
movsd  0x0(%r13),%xmm1
movsd  %xmm1,(%rbx)
movsd  %xmm2,0x0(%r13)
movsd  (%r12),%xmm1
movsd  %xmm1,(%r14)
movsd  (%r15),%xmm1
movsd  %xmm1,(%r12)
movsd  %xmm0,(%r15)
movsd  (%r12),%xmm2
ucomisd %xmm0,%xmm2
xorpd  %xmm6,%xmm6
jbe    13e3 <mnbrak+0x2e3>
movsd  (%rbx),%xmm1
movapd %xmm1,%xmm4
subsd  0x0(%rbp),%xmm4
movapd %xmm2,%xmm5
subsd  %xmm0,%xmm5
mulsd  %xmm4,%xmm5
movsd  0x0(%r13),%xmm7
movapd %xmm1,%xmm3
subsd  (%r14),%xmm2
subsd  %xmm7,%xmm3
mulsd  %xmm3,%xmm2
mulsd  %xmm5,%xmm4
mulsd  %xmm2,%xmm3
subsd  %xmm4,%xmm3
subsd  %xmm5,%xmm2
xorpd  %xmm4,%xmm4
cmpltsd %xmm2,%xmm4
andpd  0xdc3(%rip),%xmm2
maxsd  0xda3(%rip),%xmm2
movapd %xmm4,%xmm5
andpd  %xmm2,%xmm5
xorpd  0xdbb(%rip),%xmm2
andnpd %xmm2,%xmm4
orpd   %xmm5,%xmm4
addsd  %xmm4,%xmm4
divsd  %xmm4,%xmm3
movapd %xmm1,%xmm0
subsd  %xmm3,%xmm0
movapd %xmm7,%xmm2
subsd  %xmm1,%xmm2
movapd %xmm2,%xmm5
mulsd  0xd6f(%rip),%xmm5
movapd %xmm1,%xmm3
subsd  %xmm0,%xmm3
movapd %xmm0,%xmm4
subsd  %xmm7,%xmm4
mulsd  %xmm3,%xmm4
ucomisd %xmm6,%xmm4
jbe    1300 <mnbrak+0x200>
movsd  %xmm0,(%rsp)
mov    $0x1,%al
call   *0x40(%rsp)
movsd  (%r15),%xmm1
ucomisd %xmm0,%xmm1
ja     13ab <mnbrak+0x2ab>
ucomisd (%r12),%xmm0
ja     13d0 <mnbrak+0x2d0>
movsd  0x0(%r13),%xmm0
movapd %xmm0,%xmm5
subsd  (%rbx),%xmm5
mulsd  0xd09(%rip),%xmm5
addsd  %xmm0,%xmm5
jmp    11b0 <mnbrak+0xb0>
addsd  %xmm1,%xmm5
movapd %xmm7,%xmm3
subsd  %xmm0,%xmm3
movapd %xmm0,%xmm1
subsd  %xmm5,%xmm1
mulsd  %xmm1,%xmm3
ucomisd %xmm6,%xmm3
jbe    1380 <mnbrak+0x280>
mov    $0x1,%al
movsd  %xmm0,(%rsp)
call   *0x40(%rsp)
movsd  (%r15),%xmm1
ucomisd %xmm0,%xmm1
jbe    11bf <mnbrak+0xbf>
movsd  0x0(%r13),%xmm1
movsd  %xmm1,(%rbx)
movsd  (%rsp),%xmm1
movsd  %xmm1,0x0(%r13)
movapd %xmm1,%xmm5
subsd  (%rbx),%xmm5
mulsd  0xca3(%rip),%xmm5
addsd  %xmm1,%xmm5
movsd  (%r15),%xmm1
movsd  %xmm1,(%r12)
movsd  %xmm0,(%r15)
jmp    11b0 <mnbrak+0xb0>
cs nopw 0x0(%rax,%rax,1)
movapd %xmm5,%xmm3
subsd  %xmm7,%xmm3
mulsd  %xmm1,%xmm3
ucomisd %xmm6,%xmm3
jae    11b0 <mnbrak+0xb0>
mulsd  0xc62(%rip),%xmm2
addsd  %xmm7,%xmm2
movapd %xmm2,%xmm5
jmp    11b0 <mnbrak+0xb0>
movsd  (%rbx),%xmm1
movsd  %xmm1,0x0(%rbp)
movsd  (%rsp),%xmm1
movsd  %xmm1,(%rbx)
movsd  (%r12),%xmm1
movsd  %xmm1,(%r14)
movsd  %xmm0,(%r12)
jmp    13e3 <mnbrak+0x2e3>
movsd  (%rsp),%xmm1
movsd  %xmm1,0x0(%r13)
mov    %r15,%r12
movsd  %xmm0,(%r15)
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @mnbrak(double* %0, double* %1, double* %2, double* %3, double* %4, double* %5, double (...)* %6) {
%8 = alloca double*
%9 = alloca double*
%10 = alloca double*
%11 = alloca double*
%12 = alloca double*
%13 = alloca double*
%14 = alloca double (...)*
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
store double* %0, double** %8
store double* %1, double** %9
store double* %2, double** %10
store double* %3, double** %11
store double* %4, double** %12
store double* %5, double** %13
store double (...)* %6, double (...)** %14
%21 = load double (...)*, double (...)** %14
%22 = load double*, double** %8
%23 = load double, double* %22
%24 = bitcast double (...)* %21 to double (double, ...)*
%25 = call double (double, ...) %24(double %23)
%26 = load double*, double** %11
store double %25, double* %26
%27 = load double (...)*, double (...)** %14
%28 = load double*, double** %9
%29 = load double, double* %28
%30 = bitcast double (...)* %27 to double (double, ...)*
%31 = call double (double, ...) %30(double %29)
%32 = load double*, double** %12
store double %31, double* %32
%33 = load double*, double** %12
%34 = load double, double* %33
%35 = load double*, double** %11
%36 = load double, double* %35
%37 = fcmp ogt double %34, %36
br i1 %37, label %38, label %53
38: ; preds = %7
%39 = load double*, double** %8
%40 = load double, double* %39
store double %40, double* %20
%41 = load double*, double** %9
%42 = load double, double* %41
%43 = load double*, double** %8
store double %42, double* %43
%44 = load double, double* %20
%45 = load double*, double** %9
store double %44, double* %45
%46 = load double*, double** %12
%47 = load double, double* %46
store double %47, double* %20
%48 = load double*, double** %11
%49 = load double, double* %48
%50 = load double*, double** %12
store double %49, double* %50
%51 = load double, double* %20
%52 = load double*, double** %11
store double %51, double* %52
br label %53
53: ; preds = %38, %7
%54 = load double*, double** %9
%55 = load double, double* %54
%56 = load double*, double** %9
%57 = load double, double* %56
%58 = load double*, double** %8
%59 = load double, double* %58
%60 = fsub double %57, %59
%61 = call double @llvm.fmuladd.f64(double 0x3FF9E3779B97F681, double %60, double %55)
%62 = load double*, double** %10
store double %61, double* %62
%63 = load double (...)*, double (...)** %14
%64 = load double*, double** %10
%65 = load double, double* %64
%66 = bitcast double (...)* %63 to double (double, ...)*
%67 = call double (double, ...) %66(double %65)
%68 = load double*, double** %13
store double %67, double* %68
br label %69
69: ; preds = %291, %53
%70 = load double*, double** %12
%71 = load double, double* %70
%72 = load double*, double** %13
%73 = load double, double* %72
%74 = fcmp ogt double %71, %73
br i1 %74, label %75, label %308
75: ; preds = %69
%76 = load double*, double** %9
%77 = load double, double* %76
%78 = load double*, double** %8
%79 = load double, double* %78
%80 = fsub double %77, %79
%81 = load double*, double** %12
%82 = load double, double* %81
%83 = load double*, double** %13
%84 = load double, double* %83
%85 = fsub double %82, %84
%86 = fmul double %80, %85
store double %86, double* %17
%87 = load double*, double** %9
%88 = load double, double* %87
%89 = load double*, double** %10
%90 = load double, double* %89
%91 = fsub double %88, %90
%92 = load double*, double** %12
%93 = load double, double* %92
%94 = load double*, double** %11
%95 = load double, double* %94
%96 = fsub double %93, %95
%97 = fmul double %91, %96
store double %97, double* %18
%98 = load double*, double** %9
%99 = load double, double* %98
%100 = load double*, double** %9
%101 = load double, double* %100
%102 = load double*, double** %10
%103 = load double, double* %102
%104 = fsub double %101, %103
%105 = load double, double* %18
%106 = load double*, double** %9
%107 = load double, double* %106
%108 = load double*, double** %8
%109 = load double, double* %108
%110 = fsub double %107, %109
%111 = load double, double* %17
%112 = fmul double %110, %111
%113 = fneg double %112
%114 = call double @llvm.fmuladd.f64(double %104, double %105, double %113)
%115 = load double, double* %18
%116 = load double, double* %17
%117 = fsub double %115, %116
%118 = fcmp ogt double %117, 0.000000e+00
br i1 %118, label %119, label %134
119: ; preds = %75
%120 = load double, double* %18
%121 = load double, double* %17
%122 = fsub double %120, %121
%123 = call double @llvm.fabs.f64(double %122)
%124 = fcmp ogt double %123, 0x3C9CD2B297D889BC
br i1 %124, label %125, label %130
125: ; preds = %119
%126 = load double, double* %18
%127 = load double, double* %17
%128 = fsub double %126, %127
%129 = call double @llvm.fabs.f64(double %128)
br label %131
130: ; preds = %119
br label %131
131: ; preds = %130, %125
%132 = phi double [ %129, %125 ], [ 0x3C9CD2B297D889BC, %130 ]
%133 = call double @llvm.fabs.f64(double %132)
br label %150
134: ; preds = %75
%135 = load double, double* %18
%136 = load double, double* %17
%137 = fsub double %135, %136
%138 = call double @llvm.fabs.f64(double %137)
%139 = fcmp ogt double %138, 0x3C9CD2B297D889BC
br i1 %139, label %140, label %145
140: ; preds = %134
%141 = load double, double* %18
%142 = load double, double* %17
%143 = fsub double %141, %142
%144 = call double @llvm.fabs.f64(double %143)
br label %146
145: ; preds = %134
br label %146
146: ; preds = %145, %140
%147 = phi double [ %144, %140 ], [ 0x3C9CD2B297D889BC, %145 ]
%148 = call double @llvm.fabs.f64(double %147)
%149 = fneg double %148
br label %150
150: ; preds = %146, %131
%151 = phi double [ %133, %131 ], [ %149, %146 ]
%152 = fmul double 2.000000e+00, %151
%153 = fdiv double %114, %152
%154 = fsub double %99, %153
store double %154, double* %16
%155 = load double*, double** %9
%156 = load double, double* %155
%157 = load double*, double** %10
%158 = load double, double* %157
%159 = load double*, double** %9
%160 = load double, double* %159
%161 = fsub double %158, %160
%162 = call double @llvm.fmuladd.f64(double 1.000000e+02, double %161, double %156)
store double %162, double* %15
%163 = load double*, double** %9
%164 = load double, double* %163
%165 = load double, double* %16
%166 = fsub double %164, %165
%167 = load double, double* %16
%168 = load double*, double** %10
%169 = load double, double* %168
%170 = fsub double %167, %169
%171 = fmul double %166, %170
%172 = fcmp ogt double %171, 0.000000e+00
br i1 %172, label %173, label %217
173: ; preds = %150
%174 = load double (...)*, double (...)** %14
%175 = load double, double* %16
%176 = bitcast double (...)* %174 to double (double, ...)*
%177 = call double (double, ...) %176(double %175)
store double %177, double* %19
%178 = load double, double* %19
%179 = load double*, double** %13
%180 = load double, double* %179
%181 = fcmp olt double %178, %180
br i1 %181, label %182, label %193
182: ; preds = %173
%183 = load double*, double** %9
%184 = load double, double* %183
%185 = load double*, double** %8
store double %184, double* %185
%186 = load double, double* %16
%187 = load double*, double** %9
store double %186, double* %187
%188 = load double*, double** %12
%189 = load double, double* %188
%190 = load double*, double** %11
store double %189, double* %190
%191 = load double, double* %19
%192 = load double*, double** %12
store double %191, double* %192
br label %308
193: ; preds = %173
%194 = load double, double* %19
%195 = load double*, double** %12
%196 = load double, double* %195
%197 = fcmp ogt double %194, %196
br i1 %197, label %198, label %203
198: ; preds = %193
%199 = load double, double* %16
%200 = load double*, double** %10
store double %199, double* %200
%201 = load double, double* %19
%202 = load double*, double** %13
store double %201, double* %202
br label %308
203: ; preds = %193
br label %204
204: ; preds = %203
%205 = load double*, double** %10
%206 = load double, double* %205
%207 = load double*, double** %10
%208 = load double, double* %207
%209 = load double*, double** %9
%210 = load double, double* %209
%211 = fsub double %208, %210
%212 = call double @llvm.fmuladd.f64(double 0x3FF9E3779B97F681, double %211, double %206)
store double %212, double* %16
%213 = load double (...)*, double (...)** %14
%214 = load double, double* %16
%215 = bitcast double (...)* %213 to double (double, ...)*
%216 = call double (double, ...) %215(double %214)
store double %216, double* %19
br label %291
217: ; preds = %150
%218 = load double*, double** %10
%219 = load double, double* %218
%220 = load double, double* %16
%221 = fsub double %219, %220
%222 = load double, double* %16
%223 = load double, double* %15
%224 = fsub double %222, %223
%225 = fmul double %221, %224
%226 = fcmp ogt double %225, 0.000000e+00
br i1 %226, label %227, label %260
227: ; preds = %217
%228 = load double (...)*, double (...)** %14
%229 = load double, double* %16
%230 = bitcast double (...)* %228 to double (double, ...)*
%231 = call double (double, ...) %230(double %229)
store double %231, double* %19
%232 = load double, double* %19
%233 = load double*, double** %13
%234 = load double, double* %233
%235 = fcmp olt double %232, %234
br i1 %235, label %236, label %259
236: ; preds = %227
%237 = load double*, double** %10
%238 = load double, double* %237
%239 = load double*, double** %9
store double %238, double* %239
%240 = load double, double* %16
%241 = load double*, double** %10
store double %240, double* %241
%242 = load double*, double** %10
%243 = load double, double* %242
%244 = load double*, double** %10
%245 = load double, double* %244
%246 = load double*, double** %9
%247 = load double, double* %246
%248 = fsub double %245, %247
%249 = call double @llvm.fmuladd.f64(double 0x3FF9E3779B97F681, double %248, double %243)
store double %249, double* %16
%250 = load double*, double** %13
%251 = load double, double* %250
%252 = load double*, double** %12
store double %251, double* %252
%253 = load double, double* %19
%254 = load double*, double** %13
store double %253, double* %254
%255 = load double (...)*, double (...)** %14
%256 = load double, double* %16
%257 = bitcast double (...)* %255 to double (double, ...)*
%258 = call double (double, ...) %257(double %256)
store double %258, double* %19
br label %259
259: ; preds = %236, %227
br label %290
260: ; preds = %217
%261 = load double, double* %16
%262 = load double, double* %15
%263 = fsub double %261, %262
%264 = load double, double* %15
%265 = load double*, double** %10
%266 = load double, double* %265
%267 = fsub double %264, %266
%268 = fmul double %263, %267
%269 = fcmp oge double %268, 0.000000e+00
br i1 %269, label %270, label %276
270: ; preds = %260
%271 = load double, double* %15
store double %271, double* %16
%272 = load double (...)*, double (...)** %14
%273 = load double, double* %16
%274 = bitcast double (...)* %272 to double (double, ...)*
%275 = call double (double, ...) %274(double %273)
store double %275, double* %19
br label %289
276: ; preds = %260
%277 = load double*, double** %10
%278 = load double, double* %277
%279 = load double*, double** %10
%280 = load double, double* %279
%281 = load double*, double** %9
%282 = load double, double* %281
%283 = fsub double %280, %282
%284 = call double @llvm.fmuladd.f64(double 0x3FF9E3779B97F681, double %283, double %278)
store double %284, double* %16
%285 = load double (...)*, double (...)** %14
%286 = load double, double* %16
%287 = bitcast double (...)* %285 to double (double, ...)*
%288 = call double (double, ...) %287(double %286)
store double %288, double* %19
br label %289
289: ; preds = %276, %270
br label %290
290: ; preds = %289, %259
br label %291
291: ; preds = %290, %204
%292 = load double*, double** %9
%293 = load double, double* %292
%294 = load double*, double** %8
store double %293, double* %294
%295 = load double*, double** %10
%296 = load double, double* %295
%297 = load double*, double** %9
store double %296, double* %297
%298 = load double, double* %16
%299 = load double*, double** %10
store double %298, double* %299
%300 = load double*, double** %12
%301 = load double, double* %300
%302 = load double*, double** %11
store double %301, double* %302
%303 = load double*, double** %13
%304 = load double, double* %303
%305 = load double*, double** %12
store double %304, double* %305
%306 = load double, double* %19
%307 = load double*, double** %13
store double %306, double* %307
br label %69
308: ; preds = %182, %198, %69
ret void
}

LLVM IR (-O2):
define void @mnbrak(double* nocapture %0, double* nocapture %1, double* nocapture %2, double* nocapture %3, double* nocapture %4, double* nocapture %5, double (...)* nocapture %6) {
%8 = load double, double* %0
%9 = bitcast double (...)* %6 to double (double, ...)*
%10 = tail call double (double, ...) %9(double %8)
store double %10, double* %3
%11 = load double, double* %1
%12 = tail call double (double, ...) %9(double %11)
store double %12, double* %4
%13 = load double, double* %3
%14 = fcmp ogt double %12, %13
br i1 %14, label %15, label %20
15: ; preds = %7
%16 = load double, double* %0
%17 = load double, double* %1
store double %17, double* %0
store double %16, double* %1
%18 = load double, double* %4
%19 = load double, double* %3
store double %19, double* %4
store double %18, double* %3
br label %20
20: ; preds = %15, %7
%21 = load double, double* %1
%22 = load double, double* %0
%23 = fsub double %21, %22
%24 = tail call double @llvm.fmuladd.f64(double %23, double 0x3FF9E3779B97F681, double %21)
store double %24, double* %2
%25 = tail call double (double, ...) %9(double %24)
store double %25, double* %5
%26 = load double, double* %4
%27 = fcmp ogt double %26, %25
br i1 %27, label %28, label %111
28: ; preds = %20, %100
%29 = phi double [ %107, %100 ], [ %26, %20 ]
%30 = phi double [ %101, %100 ], [ %25, %20 ]
%31 = load double, double* %1
%32 = load double, double* %0
%33 = fsub double %31, %32
%34 = fsub double %29, %30
%35 = fmul double %34, %33
%36 = load double, double* %2
%37 = fsub double %31, %36
%38 = load double, double* %3
%39 = fsub double %29, %38
%40 = fmul double %37, %39
%41 = fneg double %33
%42 = fmul double %35, %41
%43 = tail call double @llvm.fmuladd.f64(double %37, double %40, double %42)
%44 = fsub double %40, %35
%45 = fcmp ogt double %44, 0.000000e+00
%46 = tail call double @llvm.fabs.f64(double %44)
%47 = fcmp ogt double %46, 0x3C9CD2B297D889BC
%48 = select i1 %47, double %46, double 0x3C9CD2B297D889BC
%49 = fneg double %48
%50 = select i1 %45, double %48, double %49
%51 = fmul double %50, 2.000000e+00
%52 = fdiv double %43, %51
%53 = fsub double %31, %52
%54 = fsub double %36, %31
%55 = tail call double @llvm.fmuladd.f64(double %54, double 1.000000e+02, double %31)
%56 = fsub double %31, %53
%57 = fsub double %53, %36
%58 = fmul double %56, %57
%59 = fcmp ogt double %58, 0.000000e+00
br i1 %59, label %60, label %76
60: ; preds = %28
%61 = tail call double (double, ...) %9(double %53)
%62 = load double, double* %5
%63 = fcmp olt double %61, %62
br i1 %63, label %64, label %67
64: ; preds = %60
%65 = load double, double* %1
store double %65, double* %0
store double %53, double* %1
%66 = load double, double* %4
store double %66, double* %3
br label %109
67: ; preds = %60
%68 = load double, double* %4
%69 = fcmp ogt double %61, %68
br i1 %69, label %70, label %71
70: ; preds = %67
store double %53, double* %2
br label %109
71: ; preds = %67
%72 = load double, double* %2
%73 = load double, double* %1
%74 = fsub double %72, %73
%75 = tail call double @llvm.fmuladd.f64(double %74, double 0x3FF9E3779B97F681, double %72)
br label %97
76: ; preds = %28
%77 = fsub double %36, %53
%78 = fsub double %53, %55
%79 = fmul double %77, %78
%80 = fcmp ogt double %79, 0.000000e+00
br i1 %80, label %81, label %91
81: ; preds = %76
%82 = tail call double (double, ...) %9(double %53)
%83 = load double, double* %5
%84 = fcmp olt double %82, %83
br i1 %84, label %85, label %100
85: ; preds = %81
%86 = load double, double* %2
store double %86, double* %1
store double %53, double* %2
%87 = load double, double* %1
%88 = fsub double %53, %87
%89 = tail call double @llvm.fmuladd.f64(double %88, double 0x3FF9E3779B97F681, double %53)
%90 = load double, double* %5
store double %90, double* %4
store double %82, double* %5
br label %97
91: ; preds = %76
%92 = fsub double %55, %36
%93 = fmul double %92, %78
%94 = fcmp ult double %93, 0.000000e+00
br i1 %94, label %95, label %97
95: ; preds = %91
%96 = tail call double @llvm.fmuladd.f64(double %54, double 0x3FF9E3779B97F681, double %36)
br label %97
97: ; preds = %91, %71, %95, %85
%98 = phi double [ %89, %85 ], [ %96, %95 ], [ %75, %71 ], [ %55, %91 ]
%99 = tail call double (double, ...) %9(double %98)
br label %100
100: ; preds = %97, %81
%101 = phi double [ %82, %81 ], [ %99, %97 ]
%102 = phi double [ %53, %81 ], [ %98, %97 ]
%103 = load double, double* %1
store double %103, double* %0
%104 = load double, double* %2
store double %104, double* %1
store double %102, double* %2
%105 = load double, double* %4
store double %105, double* %3
%106 = load double, double* %5
store double %106, double* %4
store double %101, double* %5
%107 = load double, double* %4
%108 = fcmp ogt double %107, %101
br i1 %108, label %28, label %111
109: ; preds = %64, %70
%110 = phi double* [ %5, %70 ], [ %4, %64 ]
store double %61, double* %110
br label %111
111: ; preds = %100, %109, %20
ret void
}