#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 */
float fabs(float);
int /*<<< orphan*/ nrerror(char *);
float stub1(float);
float stub2(float);
float stub3(float);
float stub4(float);
float stub5(float);
float dbrent(float ax, float bx, float cx, float (*f)(float),
             float (*df)(float), float tol, float *xmin) {
  int iter, ok1, ok2;
  float a, b, d, d1, d2, du, dv, dw, dx, e = 0.0;
  float fu, fv, fw, fx, olde, tol1, tol2, u, u1, u2, v, w, x, xm;
  a = (ax < cx ? ax : cx);
  b = (ax > cx ? ax : cx);
  x = w = v = bx;
  fw = fv = fx = (*f)(x);
  dw = dv = dx = (*df)(x);
  for (iter = 1; iter <= 100; iter++) {
    xm = 0.5 * (a + b);
    tol1 = tol * fabs(x) + 1.0e-10;
    tol2 = 2.0 * tol1;
    if (fabs(x - xm) <= (tol2 - 0.5 * (b - a))) {
      *xmin = x;
      return fx;
    }
    if (fabs(e) > tol1) {
      d1 = 2.0 * (b - a);
      d2 = d1;
      if (dw != dx)
        d1 = (w - x) * dx / (dx - dw);
      if (dv != dx)
        d2 = (v - x) * dx / (dx - dv);
      u1 = x + d1;
      u2 = x + d2;
      ok1 = (a - u1) * (u1 - b) > 0.0 && dx * d1 <= 0.0;
      ok2 = (a - u2) * (u2 - b) > 0.0 && dx * d2 <= 0.0;
      olde = e;
      e = d;
      if (ok1 || ok2) {
        if (ok1 && ok2)
          d = (fabs(d1) < fabs(d2) ? d1 : d2);
        else if (ok1)
          d = d1;
        else
          d = d2;
        if (fabs(d) <= fabs(0.5 * olde)) {
          u = x + d;
          if (u - a < tol2 || b - u < tol2)
            d = ((xm - x) >= 0.0 ? fabs(tol1) : -fabs(tol1));
        } else {
          d = 0.5 * (e = (dx >= 0.0 ? a - x : b - x));
        }
      } else {
        d = 0.5 * (e = (dx >= 0.0 ? a - x : b - x));
      }
    } else {
      d = 0.5 * (e = (dx >= 0.0 ? a - x : b - x));
    }
    if (fabs(d) >= tol1) {
      u = x + d;
      fu = (*f)(u);
    } else {
      u = x + ((d) >= 0.0 ? fabs(tol1) : -fabs(tol1));
      fu = (*f)(u);
      if (fu > fx) {
        *xmin = x;
        return fx;
      }
    }
    du = (*df)(u);
    if (fu <= fx) {
      if (u >= x)
        a = x;
      else
        b = x;
      (v) = (w);
      (fv) = (fw);
      (dv) = (dw);
      (w) = (x);
      (fw) = (fx);
      (dw) = (dx);
      (x) = (u);
      (fx) = (fu);
      (dx) = (du);
    } else {
      if (u < x)
        a = u;
      else
        b = u;
      if (fu <= fw || w == x) {
        (v) = (w);
        (fv) = (fw);
        (dv) = (dw);
        (w) = (u);
        (fw) = (fu);
        (dw) = (du);
      } else if (fu < fv || v == x || v == w) {
        (v) = (u);
        (fv) = (fu);
        (dv) = (du);
      }
    }
  }
  nrerror("Too many iterations in routine dbrent");
  return 0.0;
}


x86 assembly (clang, -O0):
<dbrent>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
movss  %xmm0,-0x8(%rbp)
movss  %xmm1,-0xc(%rbp)
movss  %xmm2,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
movss  %xmm3,-0x24(%rbp)
mov    %rdx,-0x30(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x8(%rbp),%xmm1
movss  -0x10(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1178 <dbrent+0x58>
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0xa0(%rbp)
ff
jmp    1185 <dbrent+0x65>
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0xa0(%rbp)
ff
movss  -0xa0(%rbp),%xmm0
ff
movss  %xmm0,-0x40(%rbp)
movss  -0x8(%rbp),%xmm0
ucomiss -0x10(%rbp),%xmm0
jbe    11b3 <dbrent+0x93>
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0xa4(%rbp)
ff
jmp    11c0 <dbrent+0xa0>
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0xa4(%rbp)
ff
movss  -0xa4(%rbp),%xmm0
ff
movss  %xmm0,-0x44(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x90(%rbp)
ff
movss  %xmm0,-0x94(%rbp)
ff
movss  %xmm0,-0x98(%rbp)
ff
mov    -0x18(%rbp),%rax
movss  -0x98(%rbp),%xmm0
ff
call   *%rax
movss  %xmm0,-0x74(%rbp)
movss  %xmm0,-0x6c(%rbp)
movss  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movss  -0x98(%rbp),%xmm0
ff
call   *%rax
movss  %xmm0,-0x60(%rbp)
movss  %xmm0,-0x58(%rbp)
movss  %xmm0,-0x5c(%rbp)
movl   $0x1,-0x34(%rbp)
cmpl   $0x64,-0x34(%rbp)
jg     1ae7 <dbrent+0x9c7>
movss  -0x40(%rbp),%xmm0
addss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdcd(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x9c(%rbp)
ff
movss  -0x24(%rbp),%xmm0
movss  %xmm0,-0xa8(%rbp)
ff
movss  -0x98(%rbp),%xmm0
ff
call   1040 <fabs@plt>
movaps %xmm0,%xmm1
movss  -0xa8(%rbp),%xmm0
ff
mulss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd80(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  -0x7c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd5a(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x80(%rbp)
movss  -0x98(%rbp),%xmm0
ff
subss  -0x9c(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtss2sd %xmm0,%xmm1
movss  -0x80(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movss  -0x44(%rbp),%xmm0
subss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd0d(%rip),%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jb     1324 <dbrent+0x204>
movss  -0x98(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x74(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1afb <dbrent+0x9db>
movss  -0x64(%rbp),%xmm0
call   1040 <fabs@plt>
ucomiss -0x7c(%rbp),%xmm0
jbe    1770 <dbrent+0x650>
movss  -0x44(%rbp),%xmm0
subss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xcba(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x5c(%rbp),%xmm0
ucomiss -0x60(%rbp),%xmm0
jne    137f <dbrent+0x25f>
jp     137f <dbrent+0x25f>
jmp    13a7 <dbrent+0x287>
movss  -0x94(%rbp),%xmm0
ff
subss  -0x98(%rbp),%xmm0
ff
mulss  -0x60(%rbp),%xmm0
movss  -0x60(%rbp),%xmm1
subss  -0x5c(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x58(%rbp),%xmm0
ucomiss -0x60(%rbp),%xmm0
jne    13c1 <dbrent+0x2a1>
jp     13c1 <dbrent+0x2a1>
jmp    13e9 <dbrent+0x2c9>
movss  -0x90(%rbp),%xmm0
ff
subss  -0x98(%rbp),%xmm0
ff
mulss  -0x60(%rbp),%xmm0
movss  -0x60(%rbp),%xmm1
subss  -0x58(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x98(%rbp),%xmm0
ff
addss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x88(%rbp)
ff
movss  -0x98(%rbp),%xmm0
ff
addss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x8c(%rbp)
ff
movss  -0x40(%rbp),%xmm0
subss  -0x88(%rbp),%xmm0
ff
movss  -0x88(%rbp),%xmm1
ff
subss  -0x44(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0xa9(%rbp)
jbe    1468 <dbrent+0x348>
movss  -0x60(%rbp),%xmm0
mulss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
setae  %al
mov    %al,-0xa9(%rbp)
mov    -0xa9(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x38(%rbp)
movss  -0x40(%rbp),%xmm0
subss  -0x8c(%rbp),%xmm0
ff
movss  -0x8c(%rbp),%xmm1
ff
subss  -0x44(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
xor    %eax,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %al,-0xaa(%rbp)
jbe    14cb <dbrent+0x3ab>
movss  -0x60(%rbp),%xmm0
mulss  -0x50(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
setae  %al
mov    %al,-0xaa(%rbp)
mov    -0xaa(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x3c(%rbp)
movss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
cmpl   $0x0,-0x38(%rbp)
jne    1501 <dbrent+0x3e1>
cmpl   $0x0,-0x3c(%rbp)
je     1700 <dbrent+0x5e0>
cmpl   $0x0,-0x38(%rbp)
je     1573 <dbrent+0x453>
cmpl   $0x0,-0x3c(%rbp)
je     1573 <dbrent+0x453>
movss  -0x4c(%rbp),%xmm0
call   1040 <fabs@plt>
movss  %xmm0,-0xb0(%rbp)
ff
movss  -0x50(%rbp),%xmm0
call   1040 <fabs@plt>
movss  -0xb0(%rbp),%xmm1
ff
ucomiss %xmm1,%xmm0
jbe    1554 <dbrent+0x434>
movss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0xb4(%rbp)
ff
jmp    1561 <dbrent+0x441>
movss  -0x50(%rbp),%xmm0
movss  %xmm0,-0xb4(%rbp)
ff
movss  -0xb4(%rbp),%xmm0
ff
movss  %xmm0,-0x48(%rbp)
jmp    159b <dbrent+0x47b>
cmpl   $0x0,-0x38(%rbp)
je     158c <dbrent+0x46c>
movss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    1596 <dbrent+0x476>
movss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    159b <dbrent+0x47b>
movss  -0x48(%rbp),%xmm0
call   1040 <fabs@plt>
movss  %xmm0,-0xb8(%rbp)
ff
movss  -0x78(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xa5a(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1040 <fabs@plt>
movss  -0xb8(%rbp),%xmm1
ff
ucomiss %xmm1,%xmm0
jb     1690 <dbrent+0x570>
movss  -0x98(%rbp),%xmm0
ff
addss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x84(%rbp)
ff
movss  -0x84(%rbp),%xmm1
ff
subss  -0x40(%rbp),%xmm1
movss  -0x80(%rbp),%xmm0
ucomiss %xmm1,%xmm0
ja     1627 <dbrent+0x507>
movss  -0x44(%rbp),%xmm1
subss  -0x84(%rbp),%xmm1
ff
movss  -0x80(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    168b <dbrent+0x56b>
movss  -0x9c(%rbp),%xmm0
ff
subss  -0x98(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     165f <dbrent+0x53f>
movss  -0x7c(%rbp),%xmm0
call   1040 <fabs@plt>
movss  %xmm0,-0xbc(%rbp)
ff
jmp    167e <dbrent+0x55e>
movss  -0x7c(%rbp),%xmm0
call   1040 <fabs@plt>
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0xbc(%rbp)
ff
movss  -0xbc(%rbp),%xmm0
ff
movss  %xmm0,-0x48(%rbp)
jmp    16fb <dbrent+0x5db>
movss  -0x60(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     16c0 <dbrent+0x5a0>
movss  -0x40(%rbp),%xmm0
subss  -0x98(%rbp),%xmm0
ff
movss  %xmm0,-0xc0(%rbp)
ff
jmp    16d5 <dbrent+0x5b5>
movss  -0x44(%rbp),%xmm0
subss  -0x98(%rbp),%xmm0
ff
movss  %xmm0,-0xc0(%rbp)
ff
movss  -0xc0(%rbp),%xmm0
ff
movss  %xmm0,-0x64(%rbp)
cvtss2sd %xmm0,%xmm1
movsd  0x92a(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    176b <dbrent+0x64b>
movss  -0x60(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1730 <dbrent+0x610>
movss  -0x40(%rbp),%xmm0
subss  -0x98(%rbp),%xmm0
ff
movss  %xmm0,-0xc4(%rbp)
ff
jmp    1745 <dbrent+0x625>
movss  -0x44(%rbp),%xmm0
subss  -0x98(%rbp),%xmm0
ff
movss  %xmm0,-0xc4(%rbp)
ff
movss  -0xc4(%rbp),%xmm0
ff
movss  %xmm0,-0x64(%rbp)
cvtss2sd %xmm0,%xmm1
movsd  0x8ba(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    17db <dbrent+0x6bb>
movss  -0x60(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     17a0 <dbrent+0x680>
movss  -0x40(%rbp),%xmm0
subss  -0x98(%rbp),%xmm0
ff
movss  %xmm0,-0xc8(%rbp)
ff
jmp    17b5 <dbrent+0x695>
movss  -0x44(%rbp),%xmm0
subss  -0x98(%rbp),%xmm0
ff
movss  %xmm0,-0xc8(%rbp)
ff
movss  -0xc8(%rbp),%xmm0
ff
movss  %xmm0,-0x64(%rbp)
cvtss2sd %xmm0,%xmm1
movsd  0x84a(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x48(%rbp),%xmm0
call   1040 <fabs@plt>
ucomiss -0x7c(%rbp),%xmm0
jb     181c <dbrent+0x6fc>
movss  -0x98(%rbp),%xmm0
ff
addss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x84(%rbp)
ff
mov    -0x18(%rbp),%rax
movss  -0x84(%rbp),%xmm0
ff
call   *%rax
movss  %xmm0,-0x68(%rbp)
jmp    18da <dbrent+0x7ba>
movss  -0x98(%rbp),%xmm0
ff
movss  %xmm0,-0xcc(%rbp)
ff
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1859 <dbrent+0x739>
movss  -0x7c(%rbp),%xmm0
call   1040 <fabs@plt>
movss  %xmm0,-0xd0(%rbp)
ff
jmp    1878 <dbrent+0x758>
movss  -0x7c(%rbp),%xmm0
call   1040 <fabs@plt>
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0xd0(%rbp)
ff
movss  -0xcc(%rbp),%xmm0
ff
movss  -0xd0(%rbp),%xmm1
ff
addss  %xmm1,%xmm0
movss  %xmm0,-0x84(%rbp)
ff
mov    -0x18(%rbp),%rax
movss  -0x84(%rbp),%xmm0
ff
call   *%rax
movss  %xmm0,-0x68(%rbp)
movss  -0x68(%rbp),%xmm0
ucomiss -0x74(%rbp),%xmm0
jbe    18d5 <dbrent+0x7b5>
movss  -0x98(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x74(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1afb <dbrent+0x9db>
jmp    18da <dbrent+0x7ba>
mov    -0x20(%rbp),%rax
movss  -0x84(%rbp),%xmm0
ff
call   *%rax
movss  %xmm0,-0x54(%rbp)
movss  -0x68(%rbp),%xmm1
movss  -0x74(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     19a5 <dbrent+0x885>
movss  -0x84(%rbp),%xmm0
ff
ucomiss -0x98(%rbp),%xmm0
jb     1927 <dbrent+0x807>
movss  -0x98(%rbp),%xmm0
ff
movss  %xmm0,-0x40(%rbp)
jmp    1934 <dbrent+0x814>
movss  -0x98(%rbp),%xmm0
ff
movss  %xmm0,-0x44(%rbp)
movss  -0x94(%rbp),%xmm0
ff
movss  %xmm0,-0x90(%rbp)
ff
movss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x98(%rbp),%xmm0
ff
movss  %xmm0,-0x94(%rbp)
ff
movss  -0x74(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x60(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x84(%rbp),%xmm0
ff
movss  %xmm0,-0x98(%rbp)
ff
movss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
jmp    1ad4 <dbrent+0x9b4>
movss  -0x84(%rbp),%xmm1
ff
movss  -0x98(%rbp),%xmm0
ff
ucomiss %xmm1,%xmm0
jbe    19d0 <dbrent+0x8b0>
movss  -0x84(%rbp),%xmm0
ff
movss  %xmm0,-0x40(%rbp)
jmp    19dd <dbrent+0x8bd>
movss  -0x84(%rbp),%xmm0
ff
movss  %xmm0,-0x44(%rbp)
movss  -0x68(%rbp),%xmm1
movss  -0x70(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jae    1a0b <dbrent+0x8eb>
movss  -0x94(%rbp),%xmm0
ff
ucomiss -0x98(%rbp),%xmm0
jne    1a58 <dbrent+0x938>
jp     1a58 <dbrent+0x938>
movss  -0x94(%rbp),%xmm0
ff
movss  %xmm0,-0x90(%rbp)
ff
movss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x84(%rbp),%xmm0
ff
movss  %xmm0,-0x94(%rbp)
ff
movss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
jmp    1acf <dbrent+0x9af>
movss  -0x68(%rbp),%xmm1
movss  -0x6c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
ja     1aa6 <dbrent+0x986>
movss  -0x90(%rbp),%xmm0
ff
ucomiss -0x98(%rbp),%xmm0
jne    1a8b <dbrent+0x96b>
jp     1a8b <dbrent+0x96b>
jmp    1aa6 <dbrent+0x986>
movss  -0x90(%rbp),%xmm0
ff
ucomiss -0x94(%rbp),%xmm0
jne    1aca <dbrent+0x9aa>
jp     1aca <dbrent+0x9aa>
movss  -0x84(%rbp),%xmm0
ff
movss  %xmm0,-0x90(%rbp)
ff
movss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
jmp    1acf <dbrent+0x9af>
jmp    1ad4 <dbrent+0x9b4>
jmp    1ad9 <dbrent+0x9b9>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    122b <dbrent+0x10b>
lea    0x532(%rip),%rdi
call   1030 <nrerror@plt>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dbrent>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0xa8,%rsp
mov    %rdx,%r14
movss  %xmm3,0x4c(%rsp)
mov    %rsi,%r15
mov    %rdi,%rbx
movaps %xmm1,0x50(%rsp)
movaps %xmm0,%xmm3
minss  %xmm2,%xmm3
movaps %xmm3,0x60(%rsp)
maxss  %xmm2,%xmm0
movaps %xmm0,0x70(%rsp)
movaps %xmm1,%xmm0
call   *%rdi
movss  %xmm0,0xc(%rsp)
movaps 0x50(%rsp),%xmm0
call   *%r15
movaps 0x60(%rsp),%xmm9
movaps 0x70(%rsp),%xmm10
movss  0xc(%rsp),%xmm1
movaps 0x50(%rsp),%xmm8
movaps %xmm0,%xmm11
mov    $0x64,%ebp
movss  0xe7d(%rip),%xmm13
movaps 0xe85(%rip),%xmm14
movaps %xmm8,%xmm7
movaps %xmm8,%xmm5
movaps %xmm1,%xmm2
movss  %xmm1,0x10(%rsp)
xorps  %xmm0,%xmm0
movaps %xmm0,0x30(%rsp)
movaps %xmm11,%xmm12
movss  %xmm11,0x14(%rsp)
jmp    121d <dbrent+0x10d>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movaps %xmm3,%xmm1
cmpnless %xmm6,%xmm1
movaps %xmm1,%xmm2
andps  %xmm3,%xmm2
andnps %xmm4,%xmm1
orps   %xmm2,%xmm1
movss  %xmm9,0x14(%rsp)
movss  0x24(%rsp),%xmm12
movaps %xmm0,%xmm11
movss  0x28(%rsp),%xmm0
movss  %xmm0,0x10(%rsp)
movaps %xmm5,%xmm2
movss  0x2c(%rsp),%xmm0
movss  %xmm0,0xc(%rsp)
movaps %xmm1,%xmm10
movaps %xmm7,%xmm9
movaps %xmm8,%xmm5
movaps %xmm3,%xmm7
movaps %xmm6,%xmm8
add    $0xffffffff,%ebp
je     1674 <dbrent+0x564>
movss  %xmm5,0x18(%rsp)
movss  %xmm2,0x28(%rsp)
movaps %xmm10,%xmm1
addss  %xmm9,%xmm1
movaps %xmm8,%xmm0
andps  %xmm14,%xmm0
mulss  0x4c(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  0xde4(%rip),%xmm0
xorps  %xmm15,%xmm15
cvtsd2ss %xmm0,%xmm15
mulss  %xmm13,%xmm1
movaps %xmm15,%xmm2
addss  %xmm15,%xmm2
movaps %xmm8,%xmm3
subss  %xmm1,%xmm3
andps  %xmm14,%xmm3
cvtss2sd %xmm3,%xmm3
xorps  %xmm5,%xmm5
cvtss2sd %xmm2,%xmm5
movaps %xmm10,%xmm4
subss  %xmm9,%xmm4
xorps  %xmm6,%xmm6
cvtss2sd %xmm4,%xmm6
mulsd  0xda6(%rip),%xmm6
addsd  %xmm5,%xmm6
ucomisd %xmm3,%xmm6
jae    1667 <dbrent+0x557>
movaps 0x30(%rsp),%xmm3
andps  %xmm14,%xmm3
ucomiss %xmm15,%xmm3
movss  %xmm12,0x1c(%rsp)
jbe    13f0 <dbrent+0x2e0>
addss  %xmm4,%xmm4
ucomiss %xmm11,%xmm12
movaps %xmm4,%xmm3
jne    12c9 <dbrent+0x1b9>
jnp    12e3 <dbrent+0x1d3>
movaps %xmm7,%xmm3
subss  %xmm8,%xmm3
mulss  %xmm11,%xmm3
movaps %xmm11,%xmm5
subss  %xmm12,%xmm5
divss  %xmm5,%xmm3
movaps %xmm7,%xmm0
movss  0x14(%rsp),%xmm6
ucomiss %xmm11,%xmm6
jne    12f4 <dbrent+0x1e4>
jnp    1310 <dbrent+0x200>
movss  0x18(%rsp),%xmm4
subss  %xmm8,%xmm4
mulss  %xmm11,%xmm4
movaps %xmm11,%xmm5
subss  %xmm6,%xmm5
divss  %xmm5,%xmm4
movaps %xmm8,%xmm5
shufps $0x0,%xmm8,%xmm5
movaps %xmm4,%xmm6
unpcklps %xmm3,%xmm6
movaps %xmm11,%xmm7
mulss  %xmm3,%xmm7
xorps  %xmm12,%xmm12
ucomiss %xmm7,%xmm12
addps  %xmm5,%xmm6
setae  %cl
movaps %xmm9,%xmm5
shufps $0x0,%xmm9,%xmm5
subps  %xmm6,%xmm5
movaps %xmm10,%xmm7
shufps $0x0,%xmm10,%xmm7
subps  %xmm7,%xmm6
mulps  %xmm5,%xmm6
xorps  %xmm5,%xmm5
cmpltps %xmm6,%xmm5
unpcklps %xmm5,%xmm5
movmskpd %xmm5,%edx
mov    %edx,%eax
shr    %al
and    %cl,%al
movaps %xmm11,%xmm5
mulss  %xmm4,%xmm5
xorps  %xmm7,%xmm7
ucomiss %xmm5,%xmm12
setae  %cl
and    %dl,%cl
test   %al,%al
jne    1380 <dbrent+0x270>
test   %cl,%cl
je     13c0 <dbrent+0x2b0>
and    %al,%cl
cmp    $0x1,%cl
jne    139b <dbrent+0x28b>
movaps %xmm3,%xmm5
andps  %xmm14,%xmm5
movaps %xmm4,%xmm6
andps  %xmm14,%xmm6
ucomiss %xmm5,%xmm6
seta   %al
test   %al,%al
jne    13a2 <dbrent+0x292>
movaps %xmm4,%xmm3
movaps %xmm3,%xmm4
andps  %xmm14,%xmm4
movaps 0x30(%rsp),%xmm5
mulss  %xmm13,%xmm5
andps  %xmm14,%xmm5
ucomiss %xmm4,%xmm5
jae    15ff <dbrent+0x4ef>
xorps  %xmm3,%xmm3
cmpnless %xmm11,%xmm3
movaps %xmm3,%xmm1
andps  %xmm10,%xmm1
andnps %xmm9,%xmm3
orps   %xmm1,%xmm3
subss  %xmm8,%xmm3
movaps %xmm3,0x30(%rsp)
mulss  %xmm13,%xmm3
movaps %xmm0,%xmm7
jmp    1416 <dbrent+0x306>
nopl   0x0(%rax,%rax,1)
xorps  %xmm3,%xmm3
cmpnless %xmm11,%xmm3
movaps %xmm3,%xmm1
andps  %xmm10,%xmm1
andnps %xmm9,%xmm3
orps   %xmm1,%xmm3
subss  %xmm8,%xmm3
movaps %xmm3,0x30(%rsp)
mulss  %xmm13,%xmm3
movaps %xmm9,0x60(%rsp)
movss  %xmm7,0x20(%rsp)
movss  %xmm11,0x24(%rsp)
movaps %xmm10,0x70(%rsp)
movaps %xmm3,%xmm1
andps  %xmm14,%xmm1
ucomiss %xmm15,%xmm1
movaps %xmm8,0x50(%rsp)
movaps %xmm3,0x90(%rsp)
jae    1490 <dbrent+0x380>
movaps %xmm15,%xmm1
andps  %xmm14,%xmm1
orps   0xbc6(%rip),%xmm15
xorps  %xmm0,%xmm0
cmpnless %xmm3,%xmm0
andps  %xmm0,%xmm15
andnps %xmm1,%xmm0
orps   %xmm15,%xmm0
addss  %xmm8,%xmm0
movaps %xmm0,0x80(%rsp)
call   *%rbx
movss  0xc(%rsp),%xmm1
ucomiss %xmm1,%xmm0
jbe    14a8 <dbrent+0x398>
jmp    1685 <dbrent+0x575>
nopl   0x0(%rax)
movaps %xmm8,%xmm0
addss  %xmm3,%xmm0
movaps %xmm0,0x80(%rsp)
call   *%rbx
movss  0xc(%rsp),%xmm1
movss  %xmm1,0xc(%rsp)
movss  %xmm0,0x2c(%rsp)
movaps 0x80(%rsp),%xmm0
call   *%r15
movss  0x2c(%rsp),%xmm6
movss  0xc(%rsp),%xmm5
ucomiss %xmm6,%xmm5
jae    1590 <dbrent+0x480>
movaps 0x50(%rsp),%xmm8
movaps 0x80(%rsp),%xmm4
ucomiss %xmm4,%xmm8
movaps %xmm4,%xmm9
movaps 0x70(%rsp),%xmm10
movss  0xb07(%rip),%xmm13
movaps 0xb0f(%rip),%xmm14
movss  0x20(%rsp),%xmm7
movss  0x1c(%rsp),%xmm12
movaps 0x60(%rsp),%xmm2
ja     1519 <dbrent+0x409>
movaps %xmm2,%xmm9
movaps %xmm4,%xmm2
cmpltss %xmm8,%xmm2
andps  %xmm2,%xmm10
andnps %xmm4,%xmm2
orps   %xmm2,%xmm10
movss  0x28(%rsp),%xmm2
ucomiss %xmm6,%xmm2
movss  0x24(%rsp),%xmm11
movss  0x18(%rsp),%xmm5
jae    15e0 <dbrent+0x4d0>
ucomiss %xmm8,%xmm7
jne    1555 <dbrent+0x445>
jnp    15e0 <dbrent+0x4d0>
movss  0x10(%rsp),%xmm3
ucomiss %xmm6,%xmm3
ja     1577 <dbrent+0x467>
ucomiss %xmm8,%xmm5
jne    1568 <dbrent+0x458>
jnp    1577 <dbrent+0x467>
ucomiss %xmm7,%xmm5
jne    1214 <dbrent+0x104>
jp     1214 <dbrent+0x104>
movss  %xmm0,0x14(%rsp)
movss  %xmm6,0x10(%rsp)
movaps %xmm4,%xmm5
jmp    1214 <dbrent+0x104>
nopl   0x0(%rax,%rax,1)
movaps 0x50(%rsp),%xmm3
movaps 0x80(%rsp),%xmm6
ucomiss %xmm3,%xmm6
movaps 0x70(%rsp),%xmm4
movss  0xa52(%rip),%xmm13
movaps 0xa5a(%rip),%xmm14
movss  0x20(%rsp),%xmm8
movss  0x1c(%rsp),%xmm9
movaps 0x60(%rsp),%xmm7
jb     11c0 <dbrent+0xb0>
movaps %xmm3,%xmm7
jmp    11c0 <dbrent+0xb0>
nopw   0x0(%rax,%rax,1)
movss  %xmm12,0x14(%rsp)
movaps %xmm0,%xmm12
movss  %xmm2,0x10(%rsp)
movaps %xmm6,%xmm2
movaps %xmm7,%xmm5
movaps %xmm4,%xmm7
jmp    1214 <dbrent+0x104>
movaps %xmm8,%xmm4
addss  %xmm3,%xmm4
movaps %xmm4,%xmm5
subss  %xmm9,%xmm5
ucomiss %xmm5,%xmm2
ja     1636 <dbrent+0x526>
movaps %xmm10,%xmm5
subss  %xmm4,%xmm5
ucomiss %xmm5,%xmm2
ja     1636 <dbrent+0x526>
movaps 0x90(%rsp),%xmm1
movaps %xmm1,0x30(%rsp)
movaps %xmm0,%xmm7
jmp    1416 <dbrent+0x306>
subss  %xmm8,%xmm1
ucomiss %xmm7,%xmm1
movaps %xmm15,%xmm1
andps  %xmm14,%xmm1
jae    164f <dbrent+0x53f>
xorps  0x9d1(%rip),%xmm1
movaps 0x90(%rsp),%xmm2
movaps %xmm2,0x30(%rsp)
movaps %xmm1,%xmm3
movaps %xmm0,%xmm7
jmp    1416 <dbrent+0x306>
movss  %xmm8,(%r14)
movss  0xc(%rsp),%xmm0
jmp    1692 <dbrent+0x582>
lea    0x9c5(%rip),%rdi
call   1030 <nrerror@plt>
xorps  %xmm0,%xmm0
jmp    1692 <dbrent+0x582>
movaps 0x50(%rsp),%xmm0
movss  %xmm0,(%r14)
movaps %xmm1,%xmm0
add    $0xa8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [38 x i8] c"Too many iterations in routine dbrent\00"
define float @dbrent(float %0, float %1, float %2, float (float)* %3, float (float)* %4, float %5, float* %6) {
%8 = alloca float
%9 = alloca float
%10 = alloca float
%11 = alloca float
%12 = alloca float (float)*
%13 = alloca float (float)*
%14 = alloca float
%15 = alloca float*
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca float
%23 = alloca float
%24 = alloca float
%25 = alloca float
%26 = alloca float
%27 = alloca float
%28 = alloca float
%29 = alloca float
%30 = alloca float
%31 = alloca float
%32 = alloca float
%33 = alloca float
%34 = alloca float
%35 = alloca float
%36 = alloca float
%37 = alloca float
%38 = alloca float
%39 = alloca float
%40 = alloca float
%41 = alloca float
%42 = alloca float
store float %0, float* %9
store float %1, float* %10
store float %2, float* %11
store float (float)* %3, float (float)** %12
store float (float)* %4, float (float)** %13
store float %5, float* %14
store float* %6, float** %15
store float 0.000000e+00, float* %28
%43 = load float, float* %9
%44 = load float, float* %11
%45 = fcmp olt float %43, %44
br i1 %45, label %46, label %48
46: ; preds = %7
%47 = load float, float* %9
br label %50
48: ; preds = %7
%49 = load float, float* %11
br label %50
50: ; preds = %48, %46
%51 = phi float [ %47, %46 ], [ %49, %48 ]
store float %51, float* %19
%52 = load float, float* %9
%53 = load float, float* %11
%54 = fcmp ogt float %52, %53
br i1 %54, label %55, label %57
55: ; preds = %50
%56 = load float, float* %9
br label %59
57: ; preds = %50
%58 = load float, float* %11
br label %59
59: ; preds = %57, %55
%60 = phi float [ %56, %55 ], [ %58, %57 ]
store float %60, float* %20
%61 = load float, float* %10
store float %61, float* %39
store float %61, float* %40
store float %61, float* %41
%62 = load float (float)*, float (float)** %12
%63 = load float, float* %41
%64 = call float %62(float %63)
store float %64, float* %32
store float %64, float* %30
store float %64, float* %31
%65 = load float (float)*, float (float)** %13
%66 = load float, float* %41
%67 = call float %65(float %66)
store float %67, float* %27
store float %67, float* %25
store float %67, float* %26
store i32 1, i32* %16
br label %68
68: ; preds = %420, %59
%69 = load i32, i32* %16
%70 = icmp sle i32 %69, 100
br i1 %70, label %71, label %423
71: ; preds = %68
%72 = load float, float* %19
%73 = load float, float* %20
%74 = fadd float %72, %73
%75 = fpext float %74 to double
%76 = fmul double 5.000000e-01, %75
%77 = fptrunc double %76 to float
store float %77, float* %42
%78 = load float, float* %14
%79 = load float, float* %41
%80 = call float @fabs(float %79)
%81 = fmul float %78, %80
%82 = fpext float %81 to double
%83 = fadd double %82, 1.000000e-10
%84 = fptrunc double %83 to float
store float %84, float* %34
%85 = load float, float* %34
%86 = fpext float %85 to double
%87 = fmul double 2.000000e+00, %86
%88 = fptrunc double %87 to float
store float %88, float* %35
%89 = load float, float* %41
%90 = load float, float* %42
%91 = fsub float %89, %90
%92 = call float @fabs(float %91)
%93 = fpext float %92 to double
%94 = load float, float* %35
%95 = fpext float %94 to double
%96 = load float, float* %20
%97 = load float, float* %19
%98 = fsub float %96, %97
%99 = fpext float %98 to double
%100 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %99, double %95)
%101 = fcmp ole double %93, %100
br i1 %101, label %102, label %106
102: ; preds = %71
%103 = load float, float* %41
%104 = load float*, float** %15
store float %103, float* %104
%105 = load float, float* %32
store float %105, float* %8
br label %425
106: ; preds = %71
%107 = load float, float* %28
%108 = call float @fabs(float %107)
%109 = load float, float* %34
%110 = fcmp ogt float %108, %109
br i1 %110, label %111, label %298
111: ; preds = %106
%112 = load float, float* %20
%113 = load float, float* %19
%114 = fsub float %112, %113
%115 = fpext float %114 to double
%116 = fmul double 2.000000e+00, %115
%117 = fptrunc double %116 to float
store float %117, float* %22
%118 = load float, float* %22
store float %118, float* %23
%119 = load float, float* %26
%120 = load float, float* %27
%121 = fcmp une float %119, %120
br i1 %121, label %122, label %132
122: ; preds = %111
%123 = load float, float* %40
%124 = load float, float* %41
%125 = fsub float %123, %124
%126 = load float, float* %27
%127 = fmul float %125, %126
%128 = load float, float* %27
%129 = load float, float* %26
%130 = fsub float %128, %129
%131 = fdiv float %127, %130
store float %131, float* %22
br label %132
132: ; preds = %122, %111
%133 = load float, float* %25
%134 = load float, float* %27
%135 = fcmp une float %133, %134
br i1 %135, label %136, label %146
136: ; preds = %132
%137 = load float, float* %39
%138 = load float, float* %41
%139 = fsub float %137, %138
%140 = load float, float* %27
%141 = fmul float %139, %140
%142 = load float, float* %27
%143 = load float, float* %25
%144 = fsub float %142, %143
%145 = fdiv float %141, %144
store float %145, float* %23
br label %146
146: ; preds = %136, %132
%147 = load float, float* %41
%148 = load float, float* %22
%149 = fadd float %147, %148
store float %149, float* %37
%150 = load float, float* %41
%151 = load float, float* %23
%152 = fadd float %150, %151
store float %152, float* %38
%153 = load float, float* %19
%154 = load float, float* %37
%155 = fsub float %153, %154
%156 = load float, float* %37
%157 = load float, float* %20
%158 = fsub float %156, %157
%159 = fmul float %155, %158
%160 = fpext float %159 to double
%161 = fcmp ogt double %160, 0.000000e+00
br i1 %161, label %162, label %168
162: ; preds = %146
%163 = load float, float* %27
%164 = load float, float* %22
%165 = fmul float %163, %164
%166 = fpext float %165 to double
%167 = fcmp ole double %166, 0.000000e+00
br label %168
168: ; preds = %162, %146
%169 = phi i1 [ false, %146 ], [ %167, %162 ]
%170 = zext i1 %169 to i32
store i32 %170, i32* %17
%171 = load float, float* %19
%172 = load float, float* %38
%173 = fsub float %171, %172
%174 = load float, float* %38
%175 = load float, float* %20
%176 = fsub float %174, %175
%177 = fmul float %173, %176
%178 = fpext float %177 to double
%179 = fcmp ogt double %178, 0.000000e+00
br i1 %179, label %180, label %186
180: ; preds = %168
%181 = load float, float* %27
%182 = load float, float* %23
%183 = fmul float %181, %182
%184 = fpext float %183 to double
%185 = fcmp ole double %184, 0.000000e+00
br label %186
186: ; preds = %180, %168
%187 = phi i1 [ false, %168 ], [ %185, %180 ]
%188 = zext i1 %187 to i32
store i32 %188, i32* %18
%189 = load float, float* %28
store float %189, float* %33
%190 = load float, float* %21
store float %190, float* %28
%191 = load i32, i32* %17
%192 = icmp ne i32 %191, 0
br i1 %192, label %196, label %193
193: ; preds = %186
%194 = load i32, i32* %18
%195 = icmp ne i32 %194, 0
br i1 %195, label %196, label %280
196: ; preds = %193, %186
%197 = load i32, i32* %17
%198 = icmp ne i32 %197, 0
br i1 %198, label %199, label %214
199: ; preds = %196
%200 = load i32, i32* %18
%201 = icmp ne i32 %200, 0
br i1 %201, label %202, label %214
202: ; preds = %199
%203 = load float, float* %22
%204 = call float @fabs(float %203)
%205 = load float, float* %23
%206 = call float @fabs(float %205)
%207 = fcmp olt float %204, %206
br i1 %207, label %208, label %210
208: ; preds = %202
%209 = load float, float* %22
br label %212
210: ; preds = %202
%211 = load float, float* %23
br label %212
212: ; preds = %210, %208
%213 = phi float [ %209, %208 ], [ %211, %210 ]
store float %213, float* %21
br label %222
214: ; preds = %199, %196
%215 = load i32, i32* %17
%216 = icmp ne i32 %215, 0
br i1 %216, label %217, label %219
217: ; preds = %214
%218 = load float, float* %22
store float %218, float* %21
br label %221
219: ; preds = %214
%220 = load float, float* %23
store float %220, float* %21
br label %221
221: ; preds = %219, %217
br label %222
222: ; preds = %221, %212
%223 = load float, float* %21
%224 = call float @fabs(float %223)
%225 = load float, float* %33
%226 = fpext float %225 to double
%227 = fmul double 5.000000e-01, %226
%228 = fptrunc double %227 to float
%229 = call float @fabs(float %228)
%230 = fcmp ole float %224, %229
br i1 %230, label %231, label %262
231: ; preds = %222
%232 = load float, float* %41
%233 = load float, float* %21
%234 = fadd float %232, %233
store float %234, float* %36
%235 = load float, float* %36
%236 = load float, float* %19
%237 = fsub float %235, %236
%238 = load float, float* %35
%239 = fcmp olt float %237, %238
br i1 %239, label %246, label %240
240: ; preds = %231
%241 = load float, float* %20
%242 = load float, float* %36
%243 = fsub float %241, %242
%244 = load float, float* %35
%245 = fcmp olt float %243, %244
br i1 %245, label %246, label %261
246: ; preds = %240, %231
%247 = load float, float* %42
%248 = load float, float* %41
%249 = fsub float %247, %248
%250 = fpext float %249 to double
%251 = fcmp oge double %250, 0.000000e+00
br i1 %251, label %252, label %255
252: ; preds = %246
%253 = load float, float* %34
%254 = call float @fabs(float %253)
br label %259
255: ; preds = %246
%256 = load float, float* %34
%257 = call float @fabs(float %256)
%258 = fneg float %257
br label %259
259: ; preds = %255, %252
%260 = phi float [ %254, %252 ], [ %258, %255 ]
store float %260, float* %21
br label %261
261: ; preds = %259, %240
br label %279
262: ; preds = %222
%263 = load float, float* %27
%264 = fpext float %263 to double
%265 = fcmp oge double %264, 0.000000e+00
br i1 %265, label %266, label %270
266: ; preds = %262
%267 = load float, float* %19
%268 = load float, float* %41
%269 = fsub float %267, %268
br label %274
270: ; preds = %262
%271 = load float, float* %20
%272 = load float, float* %41
%273 = fsub float %271, %272
br label %274
274: ; preds = %270, %266
%275 = phi float [ %269, %266 ], [ %273, %270 ]
store float %275, float* %28
%276 = fpext float %275 to double
%277 = fmul double 5.000000e-01, %276
%278 = fptrunc double %277 to float
store float %278, float* %21
br label %279
279: ; preds = %274, %261
br label %297
280: ; preds = %193
%281 = load float, float* %27
%282 = fpext float %281 to double
%283 = fcmp oge double %282, 0.000000e+00
br i1 %283, label %284, label %288
284: ; preds = %280
%285 = load float, float* %19
%286 = load float, float* %41
%287 = fsub float %285, %286
br label %292
288: ; preds = %280
%289 = load float, float* %20
%290 = load float, float* %41
%291 = fsub float %289, %290
br label %292
292: ; preds = %288, %284
%293 = phi float [ %287, %284 ], [ %291, %288 ]
store float %293, float* %28
%294 = fpext float %293 to double
%295 = fmul double 5.000000e-01, %294
%296 = fptrunc double %295 to float
store float %296, float* %21
br label %297
297: ; preds = %292, %279
br label %315
298: ; preds = %106
%299 = load float, float* %27
%300 = fpext float %299 to double
%301 = fcmp oge double %300, 0.000000e+00
br i1 %301, label %302, label %306
302: ; preds = %298
%303 = load float, float* %19
%304 = load float, float* %41
%305 = fsub float %303, %304
br label %310
306: ; preds = %298
%307 = load float, float* %20
%308 = load float, float* %41
%309 = fsub float %307, %308
br label %310
310: ; preds = %306, %302
%311 = phi float [ %305, %302 ], [ %309, %306 ]
store float %311, float* %28
%312 = fpext float %311 to double
%313 = fmul double 5.000000e-01, %312
%314 = fptrunc double %313 to float
store float %314, float* %21
br label %315
315: ; preds = %310, %297
%316 = load float, float* %21
%317 = call float @fabs(float %316)
%318 = load float, float* %34
%319 = fcmp oge float %317, %318
br i1 %319, label %320, label %327
320: ; preds = %315
%321 = load float, float* %41
%322 = load float, float* %21
%323 = fadd float %321, %322
store float %323, float* %36
%324 = load float (float)*, float (float)** %12
%325 = load float, float* %36
%326 = call float %324(float %325)
store float %326, float* %29
br label %353
327: ; preds = %315
%328 = load float, float* %41
%329 = load float, float* %21
%330 = fpext float %329 to double
%331 = fcmp oge double %330, 0.000000e+00
br i1 %331, label %332, label %335
332: ; preds = %327
%333 = load float, float* %34
%334 = call float @fabs(float %333)
br label %339
335: ; preds = %327
%336 = load float, float* %34
%337 = call float @fabs(float %336)
%338 = fneg float %337
br label %339
339: ; preds = %335, %332
%340 = phi float [ %334, %332 ], [ %338, %335 ]
%341 = fadd float %328, %340
store float %341, float* %36
%342 = load float (float)*, float (float)** %12
%343 = load float, float* %36
%344 = call float %342(float %343)
store float %344, float* %29
%345 = load float, float* %29
%346 = load float, float* %32
%347 = fcmp ogt float %345, %346
br i1 %347, label %348, label %352
348: ; preds = %339
%349 = load float, float* %41
%350 = load float*, float** %15
store float %349, float* %350
%351 = load float, float* %32
store float %351, float* %8
br label %425
352: ; preds = %339
br label %353
353: ; preds = %352, %320
%354 = load float (float)*, float (float)** %13
%355 = load float, float* %36
%356 = call float %354(float %355)
store float %356, float* %24
%357 = load float, float* %29
%358 = load float, float* %32
%359 = fcmp ole float %357, %358
br i1 %359, label %360, label %378
360: ; preds = %353
%361 = load float, float* %36
%362 = load float, float* %41
%363 = fcmp oge float %361, %362
br i1 %363, label %364, label %366
364: ; preds = %360
%365 = load float, float* %41
store float %365, float* %19
br label %368
366: ; preds = %360
%367 = load float, float* %41
store float %367, float* %20
br label %368
368: ; preds = %366, %364
%369 = load float, float* %40
store float %369, float* %39
%370 = load float, float* %31
store float %370, float* %30
%371 = load float, float* %26
store float %371, float* %25
%372 = load float, float* %41
store float %372, float* %40
%373 = load float, float* %32
store float %373, float* %31
%374 = load float, float* %27
store float %374, float* %26
%375 = load float, float* %36
store float %375, float* %41
%376 = load float, float* %29
store float %376, float* %32
%377 = load float, float* %24
store float %377, float* %27
br label %419
378: ; preds = %353
%379 = load float, float* %36
%380 = load float, float* %41
%381 = fcmp olt float %379, %380
br i1 %381, label %382, label %384
382: ; preds = %378
%383 = load float, float* %36
store float %383, float* %19
br label %386
384: ; preds = %378
%385 = load float, float* %36
store float %385, float* %20
br label %386
386: ; preds = %384, %382
%387 = load float, float* %29
%388 = load float, float* %31
%389 = fcmp ole float %387, %388
br i1 %389, label %394, label %390
390: ; preds = %386
%391 = load float, float* %40
%392 = load float, float* %41
%393 = fcmp oeq float %391, %392
br i1 %393, label %394, label %401
394: ; preds = %390, %386
%395 = load float, float* %40
store float %395, float* %39
%396 = load float, float* %31
store float %396, float* %30
%397 = load float, float* %26
store float %397, float* %25
%398 = load float, float* %36
store float %398, float* %40
%399 = load float, float* %29
store float %399, float* %31
%400 = load float, float* %24
store float %400, float* %26
br label %418
401: ; preds = %390
%402 = load float, float* %29
%403 = load float, float* %30
%404 = fcmp olt float %402, %403
br i1 %404, label %413, label %405
405: ; preds = %401
%406 = load float, float* %39
%407 = load float, float* %41
%408 = fcmp oeq float %406, %407
br i1 %408, label %413, label %409
409: ; preds = %405
%410 = load float, float* %39
%411 = load float, float* %40
%412 = fcmp oeq float %410, %411
br i1 %412, label %413, label %417
413: ; preds = %409, %405, %401
%414 = load float, float* %36
store float %414, float* %39
%415 = load float, float* %29
store float %415, float* %30
%416 = load float, float* %24
store float %416, float* %25
br label %417
417: ; preds = %413, %409
br label %418
418: ; preds = %417, %394
br label %419
419: ; preds = %418, %368
br label %420
420: ; preds = %419
%421 = load i32, i32* %16
%422 = add nsw i32 %421, 1
store i32 %422, i32* %16
br label %68
423: ; preds = %68
%424 = call i32 @nrerror(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str, i64 0, i64 0))
store float 0.000000e+00, float* %8
br label %425
425: ; preds = %423, %348, %102
%426 = load float, float* %8
ret float %426
}

LLVM IR (-O2):
@.str = [38 x i8] c"Too many iterations in routine dbrent\00"
define float @dbrent(float %0, float %1, float %2, float (float)* nocapture %3, float (float)* nocapture %4, float %5, float* nocapture writeonly %6) {
%8 = fcmp olt float %0, %2
%9 = select i1 %8, float %0, float %2
%10 = fcmp ogt float %0, %2
%11 = select i1 %10, float %0, float %2
%12 = tail call float %3(float %1)
%13 = tail call float %4(float %1)
br label %14
14: ; preds = %7, %170
%15 = phi float [ %1, %7 ], [ %181, %170 ]
%16 = phi float [ %1, %7 ], [ %180, %170 ]
%17 = phi float [ %1, %7 ], [ %179, %170 ]
%18 = phi i32 [ 1, %7 ], [ %182, %170 ]
%19 = phi float [ %9, %7 ], [ %178, %170 ]
%20 = phi float [ %11, %7 ], [ %177, %170 ]
%21 = phi float [ undef, %7 ], [ %132, %170 ]
%22 = phi float [ %12, %7 ], [ %176, %170 ]
%23 = phi float [ %12, %7 ], [ %175, %170 ]
%24 = phi float [ %12, %7 ], [ %174, %170 ]
%25 = phi float [ 0.000000e+00, %7 ], [ %131, %170 ]
%26 = phi float [ %13, %7 ], [ %173, %170 ]
%27 = phi float [ %13, %7 ], [ %172, %170 ]
%28 = phi float [ %13, %7 ], [ %171, %170 ]
%29 = fadd float %20, %19
%30 = fmul float %29, 5.000000e-01
%31 = tail call float @llvm.fabs.f32(float %15)
%32 = fmul float %31, %5
%33 = fpext float %32 to double
%34 = fadd double %33, 1.000000e-10
%35 = fptrunc double %34 to float
%36 = fmul float %35, 2.000000e+00
%37 = fsub float %15, %30
%38 = tail call float @llvm.fabs.f32(float %37)
%39 = fpext float %38 to double
%40 = fpext float %36 to double
%41 = fsub float %20, %19
%42 = fpext float %41 to double
%43 = tail call double @llvm.fmuladd.f64(double %42, double -5.000000e-01, double %40)
%44 = fcmp ult double %43, %39
br i1 %44, label %46, label %45
45: ; preds = %14
store float %15, float* %6
br label %186
46: ; preds = %14
%47 = tail call float @llvm.fabs.f32(float %25)
%48 = fcmp ogt float %47, %35
br i1 %48, label %49, label %125
49: ; preds = %46
%50 = fmul float %41, 2.000000e+00
%51 = fcmp une float %27, %26
br i1 %51, label %52, label %57
52: ; preds = %49
%53 = fsub float %16, %15
%54 = fmul float %26, %53
%55 = fsub float %26, %27
%56 = fdiv float %54, %55
br label %57
57: ; preds = %52, %49
%58 = phi float [ %56, %52 ], [ %50, %49 ]
%59 = fcmp une float %28, %26
br i1 %59, label %60, label %65
60: ; preds = %57
%61 = fsub float %17, %15
%62 = fmul float %26, %61
%63 = fsub float %26, %28
%64 = fdiv float %62, %63
br label %65
65: ; preds = %60, %57
%66 = phi float [ %64, %60 ], [ %50, %57 ]
%67 = insertelement <2 x float> poison, float %15, i64 0
%68 = shufflevector <2 x float> %67, <2 x float> poison, <2 x i32> zeroinitializer
%69 = insertelement <2 x float> poison, float %66, i64 0
%70 = insertelement <2 x float> %69, float %58, i64 1
%71 = fadd <2 x float> %68, %70
%72 = fmul float %26, %58
%73 = fcmp ole float %72, 0.000000e+00
%74 = insertelement <2 x float> poison, float %19, i64 0
%75 = shufflevector <2 x float> %74, <2 x float> poison, <2 x i32> zeroinitializer
%76 = fsub <2 x float> %75, %71
%77 = insertelement <2 x float> poison, float %20, i64 0
%78 = shufflevector <2 x float> %77, <2 x float> poison, <2 x i32> zeroinitializer
%79 = fsub <2 x float> %71, %78
%80 = fmul <2 x float> %76, %79
%81 = fcmp ogt <2 x float> %80, zeroinitializer
%82 = extractelement <2 x i1> %81, i64 1
%83 = select i1 %82, i1 %73, i1 false
%84 = fmul float %26, %66
%85 = fcmp ole float %84, 0.000000e+00
%86 = extractelement <2 x i1> %81, i64 0
%87 = select i1 %86, i1 %85, i1 false
%88 = select i1 %83, i1 true, i1 %87
br i1 %88, label %89, label %120
89: ; preds = %65
%90 = select i1 %83, i1 %87, i1 false
br i1 %90, label %91, label %95
91: ; preds = %89
%92 = tail call float @llvm.fabs.f32(float %58)
%93 = tail call float @llvm.fabs.f32(float %66)
%94 = fcmp olt float %92, %93
br label %95
95: ; preds = %89, %91
%96 = phi i1 [ %94, %91 ], [ %83, %89 ]
%97 = select i1 %96, float %58, float %66
%98 = tail call float @llvm.fabs.f32(float %97)
%99 = fmul float %25, 5.000000e-01
%100 = tail call float @llvm.fabs.f32(float %99)
%101 = fcmp ugt float %98, %100
br i1 %101, label %115, label %102
102: ; preds = %95
%103 = fadd float %15, %97
%104 = fsub float %103, %19
%105 = fcmp olt float %104, %36
%106 = fsub float %20, %103
%107 = fcmp olt float %106, %36
%108 = select i1 %105, i1 true, i1 %107
br i1 %108, label %109, label %130
109: ; preds = %102
%110 = fsub float %30, %15
%111 = fcmp ult float %110, 0.000000e+00
%112 = tail call float @llvm.fabs.f32(float %35)
br i1 %111, label %113, label %130
113: ; preds = %109
%114 = fneg float %112
br label %130
115: ; preds = %95
%116 = fcmp ult float %26, 0.000000e+00
%117 = select i1 %116, float %20, float %19
%118 = fsub float %117, %15
%119 = fmul float %118, 5.000000e-01
br label %130
120: ; preds = %65
%121 = fcmp ult float %26, 0.000000e+00
%122 = select i1 %121, float %20, float %19
%123 = fsub float %122, %15
%124 = fmul float %123, 5.000000e-01
br label %130
125: ; preds = %46
%126 = fcmp ult float %26, 0.000000e+00
%127 = select i1 %126, float %20, float %19
%128 = fsub float %127, %15
%129 = fmul float %128, 5.000000e-01
br label %130
130: ; preds = %109, %113, %102, %120, %115, %125
%131 = phi float [ %118, %115 ], [ %123, %120 ], [ %128, %125 ], [ %21, %102 ], [ %21, %113 ], [ %21, %109 ]
%132 = phi float [ %119, %115 ], [ %124, %120 ], [ %129, %125 ], [ %97, %102 ], [ %114, %113 ], [ %112, %109 ]
%133 = tail call float @llvm.fabs.f32(float %132)
%134 = fcmp ult float %133, %35
br i1 %134, label %138, label %135
135: ; preds = %130
%136 = fadd float %15, %132
%137 = tail call float %3(float %136)
br label %147
138: ; preds = %130
%139 = fcmp ult float %132, 0.000000e+00
%140 = tail call float @llvm.fabs.f32(float %35)
%141 = fneg float %140
%142 = select i1 %139, float %141, float %140
%143 = fadd float %15, %142
%144 = tail call float %3(float %143)
%145 = fcmp ogt float %144, %22
br i1 %145, label %146, label %147
146: ; preds = %138
store float %15, float* %6
br label %186
147: ; preds = %138, %135
%148 = phi float [ %137, %135 ], [ %144, %138 ]
%149 = phi float [ %136, %135 ], [ %143, %138 ]
%150 = tail call float %4(float %149)
%151 = fcmp ugt float %148, %22
br i1 %151, label %156, label %152
152: ; preds = %147
%153 = fcmp ult float %149, %15
%154 = select i1 %153, float %15, float %20
%155 = select i1 %153, float %19, float %15
br label %170
156: ; preds = %147
%157 = fcmp olt float %149, %15
%158 = select i1 %157, float %20, float %149
%159 = select i1 %157, float %149, float %19
%160 = fcmp ole float %148, %23
%161 = fcmp oeq float %16, %15
%162 = select i1 %160, i1 true, i1 %161
br i1 %162, label %170, label %163
163: ; preds = %156
%164 = fcmp olt float %148, %24
%165 = fcmp oeq float %17, %15
%166 = select i1 %164, i1 true, i1 %165
%167 = fcmp oeq float %17, %16
%168 = select i1 %166, i1 true, i1 %167
br i1 %168, label %169, label %170
169: ; preds = %163
br label %170
170: ; preds = %163, %156, %152, %169
%171 = phi float [ %27, %152 ], [ %150, %169 ], [ %27, %156 ], [ %28, %163 ]
%172 = phi float [ %26, %152 ], [ %27, %169 ], [ %150, %156 ], [ %27, %163 ]
%173 = phi float [ %150, %152 ], [ %26, %169 ], [ %26, %156 ], [ %26, %163 ]
%174 = phi float [ %23, %152 ], [ %148, %169 ], [ %23, %156 ], [ %24, %163 ]
%175 = phi float [ %22, %152 ], [ %23, %169 ], [ %148, %156 ], [ %23, %163 ]
%176 = phi float [ %148, %152 ], [ %22, %169 ], [ %22, %156 ], [ %22, %163 ]
%177 = phi float [ %154, %152 ], [ %158, %169 ], [ %158, %156 ], [ %158, %163 ]
%178 = phi float [ %155, %152 ], [ %159, %169 ], [ %159, %156 ], [ %159, %163 ]
%179 = phi float [ %16, %152 ], [ %149, %169 ], [ %16, %156 ], [ %17, %163 ]
%180 = phi float [ %15, %152 ], [ %16, %169 ], [ %149, %156 ], [ %16, %163 ]
%181 = phi float [ %149, %152 ], [ %15, %169 ], [ %15, %156 ], [ %15, %163 ]
%182 = add nuw nsw i32 %18, 1
%183 = icmp eq i32 %182, 101
br i1 %183, label %184, label %14
184: ; preds = %170
%185 = tail call i32 @nrerror(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str, i64 0, i64 0))
br label %186
186: ; preds = %184, %146, %45
%187 = phi float [ %22, %45 ], [ %22, %146 ], [ 0.000000e+00, %184 ]
ret float %187
}