#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 *);
int /*<<< orphan*/ sprintf(char *, char *, int);
float stub1(float);
float stub2(float);
float brent(float ax, float bx, float cx, float (*f)(float), float tol,
            float *xmin) {
  int iter;
  char errmesg[100];
  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;
      }
    }
  }
  sprintf(errmesg, "Too many iterations (> %d) in brent", 100);
  nrerror(errmesg);
  *xmin = x;
  return fx;
}


x86 assembly (clang, -O0):
<brent>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
movss  %xmm0,-0x8(%rbp)
movss  %xmm1,-0xc(%rbp)
movss  %xmm2,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
movss  %xmm3,-0x1c(%rbp)
mov    %rsi,-0x28(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0xdc(%rbp)
ff
movss  -0x8(%rbp),%xmm1
movss  -0x10(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1187 <brent+0x57>
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0xe0(%rbp)
ff
jmp    1194 <brent+0x64>
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0xe0(%rbp)
ff
movss  -0xe0(%rbp),%xmm0
ff
movss  %xmm0,-0x94(%rbp)
ff
movss  -0x8(%rbp),%xmm0
ucomiss -0x10(%rbp),%xmm0
jbe    11c5 <brent+0x95>
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0xe4(%rbp)
ff
jmp    11d2 <brent+0xa2>
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0xe4(%rbp)
ff
movss  -0xe4(%rbp),%xmm0
ff
movss  %xmm0,-0x98(%rbp)
ff
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0xcc(%rbp)
ff
movss  %xmm0,-0xd0(%rbp)
ff
movss  %xmm0,-0xd4(%rbp)
ff
mov    -0x18(%rbp),%rax
movss  -0xd4(%rbp),%xmm0
ff
call   *%rax
movss  %xmm0,-0xb0(%rbp)
ff
movss  %xmm0,-0xa8(%rbp)
ff
movss  %xmm0,-0xac(%rbp)
ff
movl   $0x1,-0x2c(%rbp)
cmpl   $0x64,-0x2c(%rbp)
jg     19fa <brent+0x8ca>
movss  -0x94(%rbp),%xmm0
ff
addss  -0x98(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm1
movsd  0xdc6(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xd8(%rbp)
ff
movss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0xe8(%rbp)
ff
movss  -0xd4(%rbp),%xmm0
ff
call   1040 <fabs@plt>
movaps %xmm0,%xmm1
movss  -0xe8(%rbp),%xmm0
ff
mulss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd79(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc0(%rbp)
ff
cvtss2sd %xmm0,%xmm1
movsd  0xd55(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc4(%rbp)
ff
movss  -0xd4(%rbp),%xmm0
ff
subss  -0xd8(%rbp),%xmm0
ff
call   1040 <fabs@plt>
cvtss2sd %xmm0,%xmm1
movss  -0xc4(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm2
movss  -0x98(%rbp),%xmm0
ff
subss  -0x94(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  0xcfc(%rip),%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jb     1338 <brent+0x208>
movss  -0xd4(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0xb0(%rbp),%xmm0
ff
movss  %xmm0,-0x4(%rbp)
jmp    1a3b <brent+0x90b>
movss  -0xdc(%rbp),%xmm0
ff
call   1040 <fabs@plt>
ucomiss -0xc0(%rbp),%xmm0
jbe    16a6 <brent+0x576>
movss  -0xd4(%rbp),%xmm0
ff
subss  -0xd0(%rbp),%xmm0
ff
movss  -0xb0(%rbp),%xmm1
ff
subss  -0xa8(%rbp),%xmm1
ff
mulss  %xmm1,%xmm0
movss  %xmm0,-0xbc(%rbp)
ff
movss  -0xd4(%rbp),%xmm0
ff
subss  -0xcc(%rbp),%xmm0
ff
movss  -0xb0(%rbp),%xmm1
ff
subss  -0xac(%rbp),%xmm1
ff
mulss  %xmm1,%xmm0
movss  %xmm0,-0xb8(%rbp)
ff
movss  -0xd4(%rbp),%xmm0
ff
subss  -0xcc(%rbp),%xmm0
ff
movss  -0xb8(%rbp),%xmm2
ff
movss  -0xd4(%rbp),%xmm1
ff
subss  -0xd0(%rbp),%xmm1
ff
mulss  -0xbc(%rbp),%xmm1
ff
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0xb4(%rbp)
ff
movss  -0xb8(%rbp),%xmm0
ff
subss  -0xbc(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm1
movsd  0xbf5(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xb8(%rbp)
ff
movss  -0xb8(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1459 <brent+0x329>
movss  -0xb4(%rbp),%xmm0
ff
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0xb4(%rbp)
ff
movss  -0xb8(%rbp),%xmm0
ff
call   1040 <fabs@plt>
movss  %xmm0,-0xb8(%rbp)
ff
movss  -0xdc(%rbp),%xmm0
ff
movss  %xmm0,-0xa0(%rbp)
ff
movss  -0x9c(%rbp),%xmm0
ff
movss  %xmm0,-0xdc(%rbp)
ff
movss  -0xb4(%rbp),%xmm0
ff
call   1040 <fabs@plt>
movss  %xmm0,-0xec(%rbp)
ff
movss  -0xb8(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm1
movsd  0xb61(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0xa0(%rbp),%xmm1
ff
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1040 <fabs@plt>
movaps %xmm0,%xmm1
movss  -0xec(%rbp),%xmm0
ff
ucomiss %xmm1,%xmm0
jae    1542 <brent+0x412>
movss  -0xb4(%rbp),%xmm1
ff
movss  -0xb8(%rbp),%xmm0
ff
movss  -0x94(%rbp),%xmm2
ff
subss  -0xd4(%rbp),%xmm2
ff
mulss  %xmm2,%xmm0
ucomiss %xmm1,%xmm0
jae    1542 <brent+0x412>
movss  -0xb4(%rbp),%xmm0
ff
movss  -0xb8(%rbp),%xmm1
ff
movss  -0x98(%rbp),%xmm2
ff
subss  -0xd4(%rbp),%xmm2
ff
mulss  %xmm2,%xmm1
ucomiss %xmm1,%xmm0
jb     15bd <brent+0x48d>
movss  -0xd4(%rbp),%xmm0
ff
ucomiss -0xd8(%rbp),%xmm0
jb     1574 <brent+0x444>
movss  -0x94(%rbp),%xmm0
ff
subss  -0xd4(%rbp),%xmm0
ff
movss  %xmm0,-0xf0(%rbp)
ff
jmp    158c <brent+0x45c>
movss  -0x98(%rbp),%xmm0
ff
subss  -0xd4(%rbp),%xmm0
ff
movss  %xmm0,-0xf0(%rbp)
ff
movss  -0xf0(%rbp),%xmm0
ff
movss  %xmm0,-0xdc(%rbp)
ff
cvtss2sd %xmm0,%xmm1
movsd  0xa78(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x9c(%rbp)
ff
jmp    16a1 <brent+0x571>
movss  -0xb4(%rbp),%xmm0
ff
divss  -0xb8(%rbp),%xmm0
ff
movss  %xmm0,-0x9c(%rbp)
ff
movss  -0xd4(%rbp),%xmm0
ff
addss  -0x9c(%rbp),%xmm0
ff
movss  %xmm0,-0xc8(%rbp)
ff
movss  -0xc8(%rbp),%xmm1
ff
subss  -0x94(%rbp),%xmm1
ff
movss  -0xc4(%rbp),%xmm0
ff
ucomiss %xmm1,%xmm0
ja     162f <brent+0x4ff>
movss  -0x98(%rbp),%xmm1
ff
subss  -0xc8(%rbp),%xmm1
ff
movss  -0xc4(%rbp),%xmm0
ff
ucomiss %xmm1,%xmm0
jbe    169c <brent+0x56c>
movss  -0xd8(%rbp),%xmm0
ff
subss  -0xd4(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     166a <brent+0x53a>
movss  -0xc0(%rbp),%xmm0
ff
call   1040 <fabs@plt>
movss  %xmm0,-0xf4(%rbp)
ff
jmp    168c <brent+0x55c>
movss  -0xc0(%rbp),%xmm0
ff
call   1040 <fabs@plt>
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0xf4(%rbp)
ff
movss  -0xf4(%rbp),%xmm0
ff
movss  %xmm0,-0x9c(%rbp)
ff
jmp    16a1 <brent+0x571>
jmp    171c <brent+0x5ec>
movss  -0xd4(%rbp),%xmm0
ff
ucomiss -0xd8(%rbp),%xmm0
jb     16d8 <brent+0x5a8>
movss  -0x94(%rbp),%xmm0
ff
subss  -0xd4(%rbp),%xmm0
ff
movss  %xmm0,-0xf8(%rbp)
ff
jmp    16f0 <brent+0x5c0>
movss  -0x98(%rbp),%xmm0
ff
subss  -0xd4(%rbp),%xmm0
ff
movss  %xmm0,-0xf8(%rbp)
ff
movss  -0xf8(%rbp),%xmm0
ff
movss  %xmm0,-0xdc(%rbp)
ff
cvtss2sd %xmm0,%xmm1
movsd  0x914(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x9c(%rbp)
ff
movss  -0x9c(%rbp),%xmm0
ff
call   1040 <fabs@plt>
ucomiss -0xc0(%rbp),%xmm0
jb     1753 <brent+0x623>
movss  -0xd4(%rbp),%xmm0
ff
addss  -0x9c(%rbp),%xmm0
ff
movss  %xmm0,-0xfc(%rbp)
ff
jmp    17d4 <brent+0x6a4>
movss  -0xd4(%rbp),%xmm0
ff
movss  %xmm0,-0x100(%rbp)
ff
movss  -0x9c(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1796 <brent+0x666>
movss  -0xc0(%rbp),%xmm0
ff
call   1040 <fabs@plt>
movss  %xmm0,-0x104(%rbp)
ff
jmp    17b8 <brent+0x688>
movss  -0xc0(%rbp),%xmm0
ff
call   1040 <fabs@plt>
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x104(%rbp)
ff
movss  -0x100(%rbp),%xmm0
ff
movss  -0x104(%rbp),%xmm1
ff
addss  %xmm1,%xmm0
movss  %xmm0,-0xfc(%rbp)
ff
movss  -0xfc(%rbp),%xmm0
ff
movss  %xmm0,-0xc8(%rbp)
ff
mov    -0x18(%rbp),%rax
movss  -0xc8(%rbp),%xmm0
ff
call   *%rax
movss  %xmm0,-0xa4(%rbp)
ff
movss  -0xa4(%rbp),%xmm1
ff
movss  -0xb0(%rbp),%xmm0
ff
ucomiss %xmm1,%xmm0
jb     18b2 <brent+0x782>
movss  -0xc8(%rbp),%xmm0
ff
ucomiss -0xd4(%rbp),%xmm0
jb     183d <brent+0x70d>
movss  -0xd4(%rbp),%xmm0
ff
movss  %xmm0,-0x94(%rbp)
ff
jmp    184d <brent+0x71d>
movss  -0xd4(%rbp),%xmm0
ff
movss  %xmm0,-0x98(%rbp)
ff
movss  -0xd0(%rbp),%xmm0
ff
movss  %xmm0,-0xcc(%rbp)
ff
movss  -0xd4(%rbp),%xmm0
ff
movss  %xmm0,-0xd0(%rbp)
ff
movss  -0xc8(%rbp),%xmm0
ff
movss  %xmm0,-0xd4(%rbp)
ff
movss  -0xac(%rbp),%xmm0
ff
movss  %xmm0,-0xa8(%rbp)
ff
movss  -0xb0(%rbp),%xmm0
ff
movss  %xmm0,-0xac(%rbp)
ff
movss  -0xa4(%rbp),%xmm0
ff
movss  %xmm0,-0xb0(%rbp)
ff
jmp    19e7 <brent+0x8b7>
movss  -0xc8(%rbp),%xmm1
ff
movss  -0xd4(%rbp),%xmm0
ff
ucomiss %xmm1,%xmm0
jbe    18e0 <brent+0x7b0>
movss  -0xc8(%rbp),%xmm0
ff
movss  %xmm0,-0x94(%rbp)
ff
jmp    18f0 <brent+0x7c0>
movss  -0xc8(%rbp),%xmm0
ff
movss  %xmm0,-0x98(%rbp)
ff
movss  -0xa4(%rbp),%xmm1
ff
movss  -0xac(%rbp),%xmm0
ff
ucomiss %xmm1,%xmm0
jae    1924 <brent+0x7f4>
movss  -0xd0(%rbp),%xmm0
ff
ucomiss -0xd4(%rbp),%xmm0
jne    1969 <brent+0x839>
jp     1969 <brent+0x839>
movss  -0xd0(%rbp),%xmm0
ff
movss  %xmm0,-0xcc(%rbp)
ff
movss  -0xc8(%rbp),%xmm0
ff
movss  %xmm0,-0xd0(%rbp)
ff
movss  -0xac(%rbp),%xmm0
ff
movss  %xmm0,-0xa8(%rbp)
ff
movss  -0xa4(%rbp),%xmm0
ff
movss  %xmm0,-0xac(%rbp)
ff
jmp    19e2 <brent+0x8b2>
movss  -0xa4(%rbp),%xmm1
ff
movss  -0xa8(%rbp),%xmm0
ff
ucomiss %xmm1,%xmm0
jae    19bd <brent+0x88d>
movss  -0xcc(%rbp),%xmm0
ff
ucomiss -0xd4(%rbp),%xmm0
jne    19a2 <brent+0x872>
jp     19a2 <brent+0x872>
jmp    19bd <brent+0x88d>
movss  -0xcc(%rbp),%xmm0
ff
ucomiss -0xd0(%rbp),%xmm0
jne    19dd <brent+0x8ad>
jp     19dd <brent+0x8ad>
movss  -0xc8(%rbp),%xmm0
ff
movss  %xmm0,-0xcc(%rbp)
ff
movss  -0xa4(%rbp),%xmm0
ff
movss  %xmm0,-0xa8(%rbp)
ff
jmp    19e2 <brent+0x8b2>
jmp    19e7 <brent+0x8b7>
jmp    19ec <brent+0x8bc>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    122c <brent+0xfc>
lea    -0x90(%rbp),%rdi
lea    0x620(%rip),%rsi
mov    $0x64,%edx
call   1050 <sprintf@plt>
lea    -0x90(%rbp),%rdi
call   1030 <nrerror@plt>
movss  -0xd4(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0xb0(%rbp),%xmm0
ff
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<brent>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0xe8,%rsp
mov    %rsi,%r14
movss  %xmm3,0x18(%rsp)
mov    %rdi,%r15
movaps %xmm1,0x20(%rsp)
movaps %xmm0,%xmm3
minss  %xmm2,%xmm3
movaps %xmm3,0x30(%rsp)
maxss  %xmm2,%xmm0
movaps %xmm0,0x40(%rsp)
movaps %xmm1,%xmm0
call   *%rdi
movaps 0x30(%rsp),%xmm7
movaps 0x40(%rsp),%xmm12
movaps 0x20(%rsp),%xmm10
movaps %xmm0,%xmm15
mov    $0x64,%ebp
movaps 0xe96(%rip),%xmm13
xorps  %xmm0,%xmm0
movaps %xmm0,0x70(%rsp)
movaps %xmm10,%xmm2
movaps %xmm10,%xmm9
movaps %xmm15,%xmm11
movss  %xmm15,0x8(%rsp)
jmp    11f6 <brent+0xd6>
nopw   0x0(%rax,%rax,1)
movaps %xmm3,%xmm1
cmpnless %xmm10,%xmm1
movaps %xmm1,%xmm2
andps  %xmm3,%xmm2
andnps 0x40(%rsp),%xmm1
orps   %xmm2,%xmm1
movss  0x14(%rsp),%xmm2
movss  %xmm2,0x8(%rsp)
movaps %xmm15,%xmm11
movaps %xmm0,%xmm15
movaps %xmm1,%xmm12
movaps %xmm4,%xmm1
movss  0x10(%rsp),%xmm9
movaps %xmm3,%xmm2
movaps 0xe2c(%rip),%xmm13
movaps 0x60(%rsp),%xmm8
movaps %xmm1,%xmm7
add    $0xffffffff,%ebp
je     1543 <brent+0x423>
movaps %xmm12,%xmm1
addss  %xmm7,%xmm1
movaps %xmm10,%xmm0
andps  %xmm13,%xmm0
mulss  0x18(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  0xe18(%rip),%xmm0
xorps  %xmm14,%xmm14
cvtsd2ss %xmm0,%xmm14
mulss  0xdd7(%rip),%xmm1
movaps %xmm14,%xmm3
addss  %xmm14,%xmm3
movaps %xmm10,%xmm4
subss  %xmm1,%xmm4
andps  %xmm13,%xmm4
cvtss2sd %xmm4,%xmm4
xorps  %xmm5,%xmm5
cvtss2sd %xmm3,%xmm5
movaps %xmm12,%xmm6
subss  %xmm7,%xmm6
cvtss2sd %xmm6,%xmm6
mulsd  0xddb(%rip),%xmm6
addsd  %xmm5,%xmm6
ucomisd %xmm4,%xmm6
jae    1581 <brent+0x461>
movss  %xmm15,0xc(%rsp)
movaps 0x70(%rsp),%xmm15
movaps %xmm15,%xmm4
andps  %xmm13,%xmm4
ucomiss %xmm14,%xmm4
movss  %xmm9,0x1c(%rsp)
movaps %xmm7,0x30(%rsp)
movss  %xmm2,0x10(%rsp)
jbe    13b0 <brent+0x290>
movaps %xmm10,%xmm4
subss  %xmm2,%xmm4
movss  0xc(%rsp),%xmm6
movaps %xmm6,%xmm7
subss  0x8(%rsp),%xmm7
mulss  %xmm4,%xmm7
movaps %xmm10,%xmm5
subss  %xmm9,%xmm5
subss  %xmm11,%xmm6
mulss  %xmm5,%xmm6
mulss  %xmm7,%xmm4
mulss  %xmm6,%xmm5
subss  %xmm4,%xmm5
subss  %xmm7,%xmm6
addss  %xmm6,%xmm6
movaps %xmm6,%xmm9
andps  %xmm13,%xmm9
movaps %xmm5,%xmm7
xorps  %xmm2,%xmm2
cvtss2sd %xmm9,%xmm2
mulsd  0xd50(%rip),%xmm2
xorps  %xmm4,%xmm4
cvtss2sd %xmm15,%xmm4
mulsd  %xmm2,%xmm4
xorps  %xmm2,%xmm2
cvtsd2ss %xmm4,%xmm2
andps  %xmm13,%xmm7
andps  %xmm13,%xmm2
ucomiss %xmm2,%xmm7
movaps 0x30(%rsp),%xmm7
jae    13b0 <brent+0x290>
movaps %xmm5,%xmm2
xorps  0xcf5(%rip),%xmm2
xorps  %xmm4,%xmm4
cmpltss %xmm6,%xmm4
andps  %xmm4,%xmm2
andnps %xmm5,%xmm4
orps   %xmm2,%xmm4
movaps %xmm7,%xmm2
subss  %xmm10,%xmm2
mulss  %xmm9,%xmm2
ucomiss %xmm4,%xmm2
jae    13b0 <brent+0x290>
movaps %xmm12,%xmm2
subss  %xmm10,%xmm2
mulss  %xmm9,%xmm2
ucomiss %xmm2,%xmm4
jae    13b0 <brent+0x290>
divss  %xmm9,%xmm4
movaps %xmm10,%xmm0
addss  %xmm4,%xmm0
movaps %xmm0,%xmm2
subss  %xmm7,%xmm2
ucomiss %xmm2,%xmm3
ja     1387 <brent+0x267>
movaps %xmm12,%xmm2
subss  %xmm0,%xmm2
ucomiss %xmm2,%xmm3
jbe    13e2 <brent+0x2c2>
subss  %xmm10,%xmm1
ucomiss 0xc71(%rip),%xmm1
movaps %xmm14,%xmm4
andps  %xmm13,%xmm4
jae    13e2 <brent+0x2c2>
xorps  0xc7c(%rip),%xmm4
jmp    13e2 <brent+0x2c2>
cs nopw 0x0(%rax,%rax,1)
cmpnless %xmm10,%xmm1
movaps %xmm1,%xmm2
andps  %xmm12,%xmm2
andnps %xmm7,%xmm1
orps   %xmm2,%xmm1
subss  %xmm10,%xmm1
xorps  %xmm2,%xmm2
cvtss2sd %xmm1,%xmm2
mulsd  0xc69(%rip),%xmm2
xorps  %xmm4,%xmm4
cvtsd2ss %xmm2,%xmm4
movaps %xmm1,%xmm8
movss  %xmm11,0x14(%rsp)
movaps %xmm4,%xmm1
andps  %xmm13,%xmm1
ucomiss %xmm14,%xmm1
movaps %xmm4,%xmm0
jae    1411 <brent+0x2f1>
ucomiss 0xc04(%rip),%xmm4
andps  %xmm13,%xmm14
movaps %xmm14,%xmm0
jae    1411 <brent+0x2f1>
xorps  0xc0f(%rip),%xmm0
movaps %xmm4,0x60(%rsp)
movaps %xmm8,0x70(%rsp)
movaps %xmm12,0x40(%rsp)
addss  %xmm10,%xmm0
movaps %xmm0,0x50(%rsp)
movaps %xmm10,0x20(%rsp)
call   *%r15
movss  0xc(%rsp),%xmm15
ucomiss %xmm0,%xmm15
jae    14f0 <brent+0x3d0>
movaps 0x50(%rsp),%xmm5
movaps 0x20(%rsp),%xmm10
ucomiss %xmm5,%xmm10
movaps %xmm5,%xmm1
movss  0x8(%rsp),%xmm3
movss  0x1c(%rsp),%xmm4
ja     146b <brent+0x34b>
movaps 0x30(%rsp),%xmm1
movaps %xmm5,%xmm2
cmpltss %xmm10,%xmm2
movaps 0x40(%rsp),%xmm12
andps  %xmm2,%xmm12
andnps %xmm5,%xmm2
orps   %xmm2,%xmm12
movss  0x14(%rsp),%xmm11
ucomiss %xmm0,%xmm11
movaps 0xb78(%rip),%xmm13
movaps 0x60(%rsp),%xmm8
jae    1529 <brent+0x409>
movss  0x10(%rsp),%xmm2
ucomiss %xmm10,%xmm2
jne    14b2 <brent+0x392>
jnp    1512 <brent+0x3f2>
ucomiss %xmm0,%xmm3
setae  %al
ucomiss %xmm10,%xmm4
setnp  %cl
sete   %dl
and    %cl,%dl
ucomiss %xmm2,%xmm4
setnp  %cl
sete   %bl
and    %cl,%bl
or     %dl,%bl
or     %al,%bl
jne    14db <brent+0x3bb>
movaps %xmm3,%xmm0
movaps %xmm4,%xmm5
movss  %xmm0,0x8(%rsp)
movaps %xmm5,%xmm9
jmp    11ea <brent+0xca>
nopw   0x0(%rax,%rax,1)
movaps 0x50(%rsp),%xmm10
movaps 0x20(%rsp),%xmm3
ucomiss %xmm3,%xmm10
movaps 0x30(%rsp),%xmm4
jb     11a0 <brent+0x80>
movaps %xmm3,%xmm4
jmp    11a0 <brent+0x80>
movss  %xmm11,0x8(%rsp)
movaps %xmm0,%xmm11
movaps %xmm2,%xmm9
movaps %xmm5,%xmm2
jmp    11ea <brent+0xca>
movss  %xmm11,0x8(%rsp)
movaps %xmm0,%xmm11
movss  0x10(%rsp),%xmm9
movaps %xmm5,%xmm2
jmp    11ea <brent+0xca>
lea    0xb06(%rip),%rsi
lea    0x80(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x64,%edx
movaps %xmm10,0x20(%rsp)
movss  %xmm15,0xc(%rsp)
call   1040 <sprintf@plt>
mov    %rbx,%rdi
call   1030 <nrerror@plt>
movss  0xc(%rsp),%xmm15
movaps 0x20(%rsp),%xmm10
movss  %xmm10,(%r14)
movaps %xmm15,%xmm0
add    $0xe8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

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