float brent(ax, bx, cx, f, tol, xmin) float (*f)(), *xmin, ax, bx, cx, tol;
{
  int iter;
  float a, b, d, etemp, fu, fv, fw, fx, p, q, r, tol1, tol2, u, v, w, x, xm;
  float e = 0.0;
  a = (ax < cx ? ax : cx);
  b = (ax > cx ? ax : cx);
  x = w = v = bx;
  fw = fv = fx = (*f)(x);
  for (iter = 1; iter <= 100; iter++) {
    xm = 0.5 * (a + b);
    tol2 = 2.0 * (tol1 = tol * fabs(x) + 1.0e-10);
    if (fabs(x - xm) <= (tol2 - 0.5 * (b - a))) {
      *xmin = x;
      return fx;
    }
    if (fabs(e) > tol1) {
      r = (x - w) * (fx - fv);
      q = (x - v) * (fx - fw);
      p = (x - v) * q - (x - w) * r;
      q = 2.0 * (q - r);
      if (q > 0.0)
        p = -p;
      q = fabs(q);
      etemp = e;
      e = d;
      if (fabs(p) >= fabs(0.5 * q * etemp) || p <= q * (a - x) ||
          p >= q * (b - x))
        d = 0.3819660 * (e = (x >= xm ? a - x : b - x));
      else {
        d = p / q;
        u = x + d;
        if (u - a < tol2 || b - u < tol2)
          d = ((xm - x) >= 0.0 ? fabs(tol1) : -fabs(tol1));
      }
    } else {
      d = 0.3819660 * (e = (x >= xm ? a - x : b - x));
    }
    u = (fabs(d) >= tol1 ? x + d : x + ((d) >= 0.0 ? fabs(tol1) : -fabs(tol1)));
    fu = (*f)(u);
    if (fu <= fx) {
      if (u >= x)
        a = x;
      else
        b = x;
      (v) = (w);
      (w) = (x);
      (x) = (u);
      (fv) = (fw);
      (fw) = (fx);
      (fx) = (fu);
    } else {
      if (u < x)
        a = u;
      else
        b = u;
      if (fu <= fw || w == x) {
        v = w;
        w = u;
        fv = fw;
        fw = fu;
      } else if (fu <= fv || v == x || v == w) {
        v = u;
        fv = fu;
      }
    }
  }
  nrerror("Too many iterations in brent");
  *xmin = x;
  return fx;
}


x86 assembly (clang, -O0):
<brent>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
movsd  %xmm3,-0x80(%rbp)
movsd  %xmm2,-0x88(%rbp)
ff
movaps %xmm1,%xmm2
movsd  -0x88(%rbp),%xmm1
ff
movaps %xmm0,%xmm3
movsd  -0x80(%rbp),%xmm0
cvtsd2ss %xmm3,%xmm3
cvtsd2ss %xmm2,%xmm2
cvtsd2ss %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm0
movss  %xmm3,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
movss  %xmm1,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
movss  %xmm0,-0x1c(%rbp)
mov    %rsi,-0x28(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x8(%rbp),%xmm1
movss  -0x10(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1194 <brent+0x84>
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x8c(%rbp)
ff
jmp    11a1 <brent+0x91>
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x8c(%rbp)
ff
movss  -0x8c(%rbp),%xmm0
ff
movss  %xmm0,-0x30(%rbp)
movss  -0x8(%rbp),%xmm0
ucomiss -0x10(%rbp),%xmm0
jbe    11cf <brent+0xbf>
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x90(%rbp)
ff
jmp    11dc <brent+0xcc>
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x90(%rbp)
ff
movss  -0x90(%rbp),%xmm0
ff
movss  %xmm0,-0x34(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  %xmm0,-0x6c(%rbp)
movss  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rcx
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   *%rcx
movss  %xmm0,-0x4c(%rbp)
movss  %xmm0,-0x44(%rbp)
movss  %xmm0,-0x48(%rbp)
movl   $0x1,-0x2c(%rbp)
cmpl   $0x64,-0x2c(%rbp)
jg     18b6 <brent+0x7a6>
movss  -0x30(%rbp),%xmm0
addss  -0x34(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdd4(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x70(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movaps 0xdc6(%rip),%xmm2
pand   %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xd96(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
cvtss2sd %xmm0,%xmm1
movsd  0xd75(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x70(%rbp),%xmm0
subss  -0x74(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movaps 0xd7b(%rip),%xmm0
pand   %xmm0,%xmm1
movss  -0x60(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movss  -0x34(%rbp),%xmm0
subss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd28(%rip),%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jb     1306 <brent+0x1f6>
movss  -0x70(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    18db <brent+0x7cb>
movss  -0x78(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0xd1a(%rip),%xmm1
pand   %xmm1,%xmm0
movss  -0x5c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    15e8 <brent+0x4d8>
movss  -0x70(%rbp),%xmm0
subss  -0x6c(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm1
subss  -0x44(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x70(%rbp),%xmm0
subss  -0x68(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm1
subss  -0x48(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x70(%rbp),%xmm0
subss  -0x68(%rbp),%xmm0
movss  -0x54(%rbp),%xmm2
movss  -0x70(%rbp),%xmm1
subss  -0x6c(%rbp),%xmm1
mulss  -0x58(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x54(%rbp),%xmm0
subss  -0x58(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc53(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x54(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    13ef <brent+0x2df>
movss  -0x50(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x54(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0xc31(%rip),%xmm1
pand   %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x78(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x50(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0xc00(%rip),%xmm1
pand   %xmm1,%xmm0
movss  -0x54(%rbp),%xmm1
cvtss2sd %xmm1,%xmm2
movsd  0xbd3(%rip),%xmm1
mulsd  %xmm2,%xmm1
movss  -0x3c(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm1
movaps 0xbd3(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jae    14ad <brent+0x39d>
movss  -0x50(%rbp),%xmm1
movss  -0x54(%rbp),%xmm0
movss  -0x30(%rbp),%xmm2
subss  -0x70(%rbp),%xmm2
mulss  %xmm2,%xmm0
ucomiss %xmm1,%xmm0
jae    14ad <brent+0x39d>
movss  -0x50(%rbp),%xmm0
movss  -0x54(%rbp),%xmm1
movss  -0x34(%rbp),%xmm2
subss  -0x70(%rbp),%xmm2
mulss  %xmm2,%xmm1
ucomiss %xmm1,%xmm0
jb     1510 <brent+0x400>
movss  -0x70(%rbp),%xmm0
ucomiss -0x74(%rbp),%xmm0
jb     14d3 <brent+0x3c3>
movss  -0x30(%rbp),%xmm0
subss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x94(%rbp)
ff
jmp    14e5 <brent+0x3d5>
movss  -0x34(%rbp),%xmm0
subss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x94(%rbp)
ff
movss  -0x94(%rbp),%xmm0
ff
movss  %xmm0,-0x78(%rbp)
cvtss2sd %xmm0,%xmm1
movsd  0xb22(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
jmp    15e3 <brent+0x4d3>
movss  -0x50(%rbp),%xmm0
divss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x70(%rbp),%xmm0
addss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x64(%rbp),%xmm1
subss  -0x30(%rbp),%xmm1
movss  -0x60(%rbp),%xmm0
ucomiss %xmm1,%xmm0
ja     155e <brent+0x44e>
movss  -0x34(%rbp),%xmm1
subss  -0x64(%rbp),%xmm1
movss  -0x60(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    15de <brent+0x4ce>
movss  -0x74(%rbp),%xmm0
subss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     159a <brent+0x48a>
movss  -0x5c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0xaa7(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    15cd <brent+0x4bd>
movss  -0x5c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0xa86(%rip),%xmm1
pand   %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
jmp    15e3 <brent+0x4d3>
jmp    1646 <brent+0x536>
movss  -0x70(%rbp),%xmm0
ucomiss -0x74(%rbp),%xmm0
jb     160e <brent+0x4fe>
movss  -0x30(%rbp),%xmm0
subss  -0x70(%rbp),%xmm0
movss  %xmm0,-0xa4(%rbp)
ff
jmp    1620 <brent+0x510>
movss  -0x34(%rbp),%xmm0
subss  -0x70(%rbp),%xmm0
movss  %xmm0,-0xa4(%rbp)
ff
movss  -0xa4(%rbp),%xmm0
ff
movss  %xmm0,-0x78(%rbp)
cvtss2sd %xmm0,%xmm1
movsd  0x9e7(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0x9da(%rip),%xmm1
pand   %xmm1,%xmm0
movss  -0x5c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1688 <brent+0x578>
movss  -0x70(%rbp),%xmm0
addss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
jmp    171f <brent+0x60f>
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     16d0 <brent+0x5c0>
movss  -0x5c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0x971(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
jmp    1703 <brent+0x5f3>
movss  -0x5c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movaps 0x950(%rip),%xmm1
pand   %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm1
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x18(%rbp),%rcx
movss  -0x64(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   *%rcx
movss  %xmm0,-0x40(%rbp)
movss  -0x40(%rbp),%xmm1
movss  -0x4c(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jb     17c2 <brent+0x6b2>
movss  -0x64(%rbp),%xmm0
ucomiss -0x70(%rbp),%xmm0
jb     1777 <brent+0x667>
movss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    1781 <brent+0x671>
movss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
jmp    18a3 <brent+0x793>
movss  -0x64(%rbp),%xmm1
movss  -0x70(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    17e4 <brent+0x6d4>
movss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    17ee <brent+0x6de>
movss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x40(%rbp),%xmm1
movss  -0x48(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jae    1816 <brent+0x706>
movss  -0x6c(%rbp),%xmm0
ucomiss -0x70(%rbp),%xmm0
jne    1843 <brent+0x733>
jp     1843 <brent+0x733>
movss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    189e <brent+0x78e>
movss  -0x40(%rbp),%xmm1
movss  -0x44(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jae    1885 <brent+0x775>
movss  -0x68(%rbp),%xmm0
ucomiss -0x70(%rbp),%xmm0
jne    1870 <brent+0x760>
jp     1870 <brent+0x760>
jmp    1885 <brent+0x775>
movss  -0x68(%rbp),%xmm0
ucomiss -0x6c(%rbp),%xmm0
jne    1899 <brent+0x789>
jp     1899 <brent+0x789>
movss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
jmp    189e <brent+0x78e>
jmp    18a3 <brent+0x793>
jmp    18a8 <brent+0x798>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1224 <brent+0x114>
lea    0x783(%rip),%rdi
mov    $0x0,%al
call   1030 <nrerror@plt>
movss  -0x70(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<brent>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x98,%rsp
cvtsd2ss %xmm0,%xmm4
cvtsd2ss %xmm1,%xmm5
movaps %xmm5,0x40(%rsp)
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
xorps  %xmm1,%xmm1
cvtsd2ss %xmm3,%xmm1
movss  %xmm1,0xc(%rsp)
mov    %rsi,%r14
mov    %rdi,%r15
movaps %xmm4,%xmm2
minss  %xmm0,%xmm2
movaps %xmm2,0x20(%rsp)
maxss  %xmm0,%xmm4
movaps %xmm4,0x50(%rsp)
xorps  %xmm0,%xmm0
cvtss2sd %xmm5,%xmm0
mov    $0x1,%al
call   *%rdi
movaps 0x20(%rsp),%xmm7
movaps 0x50(%rsp),%xmm14
movaps 0x40(%rsp),%xmm12
movaps %xmm0,%xmm13
movss  0xc(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,0x68(%rsp)
mov    $0x64,%ebp
movaps 0xe7a(%rip),%xmm15
xorps  %xmm4,%xmm4
movaps %xmm12,%xmm6
movaps %xmm12,%xmm11
movss  %xmm13,0xc(%rsp)
movaps %xmm13,%xmm2
jmp    1203 <brent+0xf3>
xchg   %ax,%ax
movaps %xmm3,%xmm1
cmpnless %xmm12,%xmm1
movaps %xmm1,%xmm2
andps  %xmm3,%xmm2
andnps 0x50(%rsp),%xmm1
orps   %xmm2,%xmm1
movss  0xc(%rsp),%xmm2
movss  %xmm13,0xc(%rsp)
movaps %xmm0,%xmm13
movaps %xmm1,%xmm14
movaps %xmm4,%xmm1
movss  0x1c(%rsp),%xmm11
movaps %xmm3,%xmm6
movaps 0xe1f(%rip),%xmm15
movss  0x18(%rsp),%xmm4
movaps %xmm1,%xmm7
add    $0xffffffff,%ebp
je     15fb <brent+0x4eb>
movss  %xmm2,0x14(%rsp)
movaps %xmm14,%xmm3
addss  %xmm7,%xmm3
cvtss2sd %xmm12,%xmm8
movaps %xmm8,%xmm0
andps  %xmm15,%xmm0
mulsd  0x68(%rsp),%xmm0
addsd  0xe24(%rip),%xmm0
xorps  %xmm2,%xmm2
cvtsd2ss %xmm0,%xmm2
mulss  0xdc5(%rip),%xmm3
movaps %xmm2,%xmm5
addss  %xmm2,%xmm5
xorps  %xmm0,%xmm0
cvtss2sd %xmm5,%xmm0
movaps %xmm14,%xmm1
subss  %xmm7,%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  0xdfb(%rip),%xmm1
addsd  %xmm0,%xmm1
movaps %xmm12,%xmm0
subss  %xmm3,%xmm0
andps  0xdb0(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd %xmm0,%xmm1
movaps 0x80(%rsp),%xmm9
jae    1623 <brent+0x513>
xorps  %xmm10,%xmm10
cvtss2sd %xmm2,%xmm10
xorps  %xmm0,%xmm0
cvtss2sd %xmm4,%xmm0
movaps %xmm0,%xmm4
andps  %xmm15,%xmm4
ucomisd %xmm10,%xmm4
movss  %xmm6,0x1c(%rsp)
movss  %xmm11,0x3c(%rsp)
movaps %xmm7,0x20(%rsp)
jbe    13d0 <brent+0x2c0>
movaps %xmm12,%xmm4
subss  %xmm6,%xmm4
movaps %xmm13,%xmm1
subss  0x14(%rsp),%xmm1
mulss  %xmm4,%xmm1
movaps %xmm12,%xmm7
subss  %xmm11,%xmm7
movaps %xmm13,%xmm6
subss  0xc(%rsp),%xmm6
mulss  %xmm7,%xmm6
mulss  %xmm1,%xmm4
mulss  %xmm6,%xmm7
subss  %xmm4,%xmm7
subss  %xmm1,%xmm6
addss  %xmm6,%xmm6
movaps %xmm6,%xmm4
movaps 0xd19(%rip),%xmm11
andps  %xmm11,%xmm4
movaps %xmm7,%xmm1
andps  %xmm11,%xmm1
xorps  %xmm11,%xmm11
cvtss2sd %xmm1,%xmm11
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
mulsd  0xd3e(%rip),%xmm1
mulsd  %xmm0,%xmm1
andpd  %xmm15,%xmm1
ucomisd %xmm1,%xmm11
jae    1400 <brent+0x2f0>
movaps %xmm7,%xmm0
xorps  0xce8(%rip),%xmm0
xorpd  %xmm1,%xmm1
cmpltss %xmm6,%xmm1
andps  %xmm1,%xmm0
andnps %xmm7,%xmm1
orps   %xmm0,%xmm1
movaps 0x20(%rsp),%xmm0
subss  %xmm12,%xmm0
mulss  %xmm4,%xmm0
ucomiss %xmm1,%xmm0
jae    1400 <brent+0x2f0>
movaps %xmm14,%xmm0
subss  %xmm12,%xmm0
mulss  %xmm4,%xmm0
ucomiss %xmm0,%xmm1
jae    1400 <brent+0x2f0>
divss  %xmm4,%xmm1
movaps %xmm12,%xmm0
movaps %xmm1,%xmm4
addss  %xmm1,%xmm0
movaps %xmm0,%xmm1
movaps 0x20(%rsp),%xmm7
subss  %xmm7,%xmm1
ucomiss %xmm1,%xmm5
ja     15b8 <brent+0x4a8>
movaps %xmm14,%xmm1
subss  %xmm0,%xmm1
ucomiss %xmm1,%xmm5
ja     15b8 <brent+0x4a8>
movaps 0xc50(%rip),%xmm15
movaps %xmm4,%xmm1
movaps %xmm9,%xmm3
jmp    143b <brent+0x32b>
nopl   0x0(%rax)
cmpnless %xmm12,%xmm3
movaps %xmm3,%xmm0
andps  %xmm14,%xmm0
andnps %xmm7,%xmm3
orps   %xmm0,%xmm3
subss  %xmm12,%xmm3
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
mulsd  0xc69(%rip),%xmm0
xorps  %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm1
jmp    143b <brent+0x32b>
cmpnless %xmm12,%xmm3
movaps %xmm3,%xmm0
andps  %xmm14,%xmm0
movaps 0x20(%rsp),%xmm7
andnps %xmm7,%xmm3
orps   %xmm0,%xmm3
subss  %xmm12,%xmm3
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
mulsd  0xc34(%rip),%xmm0
xorps  %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm1
movaps 0xbd5(%rip),%xmm15
movaps %xmm1,%xmm0
andps  0xbdb(%rip),%xmm0
ucomiss %xmm2,%xmm0
movaps %xmm12,0x40(%rsp)
movss  %xmm13,0x10(%rsp)
movaps %xmm14,0x50(%rsp)
movaps %xmm1,0x80(%rsp)
movss  %xmm3,0x18(%rsp)
jae    1480 <brent+0x370>
ucomiss 0xb92(%rip),%xmm1
jb     14a0 <brent+0x390>
andpd  %xmm15,%xmm10
jmp    14a9 <brent+0x399>
nopl   0x0(%rax,%rax,1)
movaps %xmm12,%xmm0
addss  %xmm1,%xmm0
xorps  %xmm10,%xmm10
cvtss2sd %xmm0,%xmm10
jmp    14ae <brent+0x39e>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
orpd   0xb97(%rip),%xmm10
addsd  %xmm8,%xmm10
xorps  %xmm0,%xmm0
cvtsd2ss %xmm10,%xmm0
movaps %xmm0,0x70(%rsp)
cvtss2sd %xmm0,%xmm0
mov    $0x1,%al
call   *%r15
movss  0x10(%rsp),%xmm13
ucomiss %xmm0,%xmm13
jae    1570 <brent+0x460>
movaps 0x40(%rsp),%xmm12
movaps 0x70(%rsp),%xmm5
ucomiss %xmm5,%xmm12
movaps %xmm5,%xmm1
ja     14ee <brent+0x3de>
movaps 0x20(%rsp),%xmm1
movaps %xmm5,%xmm2
cmpltss %xmm12,%xmm2
movaps 0x50(%rsp),%xmm14
andps  %xmm2,%xmm14
andnps %xmm5,%xmm2
orps   %xmm2,%xmm14
movss  0xc(%rsp),%xmm2
ucomiss %xmm0,%xmm2
movaps 0xaf7(%rip),%xmm15
movss  0x1c(%rsp),%xmm6
movss  0x3c(%rsp),%xmm3
movss  0x18(%rsp),%xmm4
jae    15a0 <brent+0x490>
ucomiss %xmm12,%xmm6
jne    1535 <brent+0x425>
jnp    15a0 <brent+0x490>
movss  0x14(%rsp),%xmm2
ucomiss %xmm0,%xmm2
setae  %al
ucomiss %xmm12,%xmm3
setnp  %cl
sete   %dl
and    %cl,%dl
ucomiss %xmm6,%xmm3
setnp  %cl
sete   %bl
and    %cl,%bl
or     %dl,%bl
or     %al,%bl
jne    1564 <brent+0x454>
movaps %xmm2,%xmm0
movaps %xmm3,%xmm5
movaps %xmm0,%xmm2
movaps %xmm5,%xmm11
jmp    11f7 <brent+0xe7>
movaps 0x40(%rsp),%xmm3
movaps 0x70(%rsp),%xmm12
ucomiss %xmm3,%xmm12
movaps 0x20(%rsp),%xmm4
jb     11b0 <brent+0xa0>
movaps %xmm3,%xmm4
jmp    11b0 <brent+0xa0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movss  0xc(%rsp),%xmm2
movss  %xmm0,0xc(%rsp)
movaps %xmm6,%xmm11
movaps %xmm5,%xmm6
jmp    11f7 <brent+0xe7>
subss  %xmm12,%xmm3
ucomiss 0xa40(%rip),%xmm3
jb     15d8 <brent+0x4c8>
movaps %xmm10,%xmm0
movaps 0xa3e(%rip),%xmm15
andps  %xmm15,%xmm0
jmp    15eb <brent+0x4db>
movaps %xmm10,%xmm0
orps   0xa5d(%rip),%xmm0
movaps 0xa25(%rip),%xmm15
xorps  %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm1
movaps %xmm9,%xmm3
jmp    143b <brent+0x32b>
lea    0xa6e(%rip),%rdi
xor    %eax,%eax
movaps %xmm12,0x40(%rsp)
movss  %xmm13,0x10(%rsp)
call   1030 <nrerror@plt>
movss  0x10(%rsp),%xmm13
movaps 0x40(%rsp),%xmm12
movss  %xmm12,(%r14)
movaps %xmm13,%xmm0
add    $0x98,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

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