#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 */
double dsign(double, double);
double fabs(double);
double sqrt(double);
double minimize(double ax, double bx, double tol, double (*f)(double, void *),
                void *data) {
  double a, b, c, d, e, eps, xm, p, q, r, tol1, tol2, u, v, w;
  double fu, fv, fw, fx, x;
  c = 0.5 * (3.0 - sqrt(5.0));
  eps = 1.0;
mach:
  eps = eps / 2.0;
  tol1 = 1.0 + eps;
  if (tol1 > 1.0)
    goto mach;
  eps = sqrt(eps);
  a = ax;
  b = bx;
  v = a + c * (b - a);
  w = v;
  x = v;
  e = 0.0;
  fx = f(x, data);
  fv = fx;
  fw = fx;
loop:
  xm = 0.5 * (a + b);
  tol1 = eps * fabs(x) + tol / 3.0;
  tol2 = 2.0 * tol1;
  if (fabs(x - xm) <= (tol2 - 0.5 * (b - a)))
    goto end;
  if (fabs(e) <= tol1)
    goto golden;
  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);
  r = e;
  e = d;
  if (fabs(p) >= fabs(0.5 * q * r))
    goto golden;
  if (p <= q * (a - x))
    goto golden;
  if (p >= q * (b - x))
    goto golden;
  d = p / q;
  u = x + d;
  if ((u - a) < tol2)
    d = dsign(tol1, xm - x);
  if ((b - u) < tol2)
    d = dsign(tol1, xm - x);
  goto fnotclose;
golden:
  if (x >= xm)
    e = a - x;
  if (x < xm)
    e = b - x;
  d = c * e;
fnotclose:
  if (fabs(d) >= tol1)
    u = x + d;
  if (fabs(d) < tol1)
    u = x + dsign(tol1, d);
  fu = f(u, data);
  if (fu > fx)
    goto sixty;
  if (u >= x)
    a = x;
  if (u < x)
    b = x;
  v = w;
  fv = fw;
  w = x;
  fw = fx;
  x = u;
  fx = fu;
  goto loop;
sixty:
  if (u < x)
    a = u;
  if (u >= x)
    b = u;
  if (fu <= fw)
    goto sevty;
  if (w == x)
    goto sevty;
  if (fu <= fv)
    goto eigty;
  if (v == x)
    goto eigty;
  if (v == w)
    goto eigty;
  goto loop;
sevty:
  v = w;
  fv = fw;
  w = u;
  fw = fu;
  goto loop;
eigty:
  v = u;
  fv = fu;
  goto loop;
end:
  return x;
}


x86 assembly (clang, -O0):
<minimize>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
mov    %rdi,-0x20(%rbp)
mov    %rsi,-0x28(%rbp)
movsd  0xece(%rip),%xmm0
call   1040 <sqrt@plt>
movsd  0xeb9(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0xea5(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xe8c(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  0xe9a(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xe69(%rip),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  0xe52(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    11bd <minimize+0x9d>
jmp    1179 <minimize+0x59>
movsd  -0x58(%rbp),%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x58(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm1
movsd  -0x40(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
subsd  -0x30(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  -0xc8(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rdi
call   *%rax
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x30(%rbp),%xmm1
addsd  -0x38(%rbp),%xmm1
movsd  0xd90(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  -0xc8(%rbp),%xmm2
ff
movaps 0xd9b(%rip),%xmm1
pand   %xmm1,%xmm2
movsd  -0x18(%rbp),%xmm1
movsd  0xd6a(%rip),%xmm3
divsd  %xmm3,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0xd61(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
subsd  -0x60(%rbp),%xmm1
movaps 0xd50(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0x88(%rbp),%xmm2
ff
movsd  -0x38(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  0xd2a(%rip),%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jb     1315 <minimize+0x1f5>
jmp    189f <minimize+0x77f>
movsd  -0x50(%rbp),%xmm1
movaps 0xd0f(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1339 <minimize+0x219>
jmp    157f <minimize+0x45f>
movsd  -0xc8(%rbp),%xmm0
ff
subsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm1
ff
subsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0xc8(%rbp),%xmm0
ff
subsd  -0x98(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm1
ff
subsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0xc8(%rbp),%xmm0
ff
subsd  -0x98(%rbp),%xmm0
ff
movsd  -0x70(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
subsd  -0xa0(%rbp),%xmm1
ff
mulsd  -0x78(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x70(%rbp),%xmm1
subsd  -0x78(%rbp),%xmm1
movsd  0xc35(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1427 <minimize+0x307>
movsd  -0x68(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x70(%rbp),%xmm0
movaps 0xbfd(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x68(%rbp),%xmm0
movaps 0xbd4(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xba0(%rip),%xmm1
mulsd  -0x70(%rbp),%xmm1
mulsd  -0x78(%rbp),%xmm1
movaps 0xbb7(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jb     148c <minimize+0x36c>
jmp    157f <minimize+0x45f>
movsd  -0x68(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
subsd  -0xc8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jb     14b6 <minimize+0x396>
jmp    157f <minimize+0x45f>
movsd  -0x68(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm2
subsd  -0xc8(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jb     14e0 <minimize+0x3c0>
jmp    157f <minimize+0x45f>
movsd  -0x68(%rbp),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0xc8(%rbp),%xmm0
ff
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
subsd  -0x30(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    153f <minimize+0x41f>
movsd  -0x80(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
subsd  -0xc8(%rbp),%xmm1
ff
call   1030 <dsign@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  -0x38(%rbp),%xmm1
subsd  -0x90(%rbp),%xmm1
ff
movsd  -0x88(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    157a <minimize+0x45a>
movsd  -0x80(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
subsd  -0xc8(%rbp),%xmm1
ff
call   1030 <dsign@plt>
movsd  %xmm0,-0x48(%rbp)
jmp    15dc <minimize+0x4bc>
movsd  -0xc8(%rbp),%xmm0
ff
ucomisd -0x60(%rbp),%xmm0
jb     15a4 <minimize+0x484>
movsd  -0x30(%rbp),%xmm0
subsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x50(%rbp)
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0x60(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    15cd <minimize+0x4ad>
movsd  -0x38(%rbp),%xmm0
subsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
movaps 0xa48(%rip),%xmm1
pand   %xmm1,%xmm0
ucomisd -0x80(%rbp),%xmm0
jb     160c <minimize+0x4ec>
movsd  -0xc8(%rbp),%xmm0
ff
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x48(%rbp),%xmm1
movaps 0xa18(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1661 <minimize+0x541>
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
call   1030 <dsign@plt>
movaps %xmm0,%xmm1
movsd  -0xd0(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rdi
call   *%rax
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
ucomisd -0xc0(%rbp),%xmm0
ff
jbe    1696 <minimize+0x576>
jmp    1745 <minimize+0x625>
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0xc8(%rbp),%xmm0
ff
jb     16b9 <minimize+0x599>
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x30(%rbp)
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0xc8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    16e0 <minimize+0x5c0>
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x38(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
jmp    1266 <minimize+0x146>
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0xc8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    176c <minimize+0x64c>
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x30(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0xc8(%rbp),%xmm0
ff
jb     178f <minimize+0x66f>
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x38(%rbp)
movsd  -0xa8(%rbp),%xmm1
ff
movsd  -0xb8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jb     17ae <minimize+0x68e>
jmp    1835 <minimize+0x715>
movsd  -0xa0(%rbp),%xmm0
ff
ucomisd -0xc8(%rbp),%xmm0
ff
jne    17cf <minimize+0x6af>
jp     17cf <minimize+0x6af>
jmp    1835 <minimize+0x715>
movsd  -0xa8(%rbp),%xmm1
ff
movsd  -0xb0(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jb     17ee <minimize+0x6ce>
jmp    187a <minimize+0x75a>
movsd  -0x98(%rbp),%xmm0
ff
ucomisd -0xc8(%rbp),%xmm0
ff
jne    180f <minimize+0x6ef>
jp     180f <minimize+0x6ef>
jmp    187a <minimize+0x75a>
movsd  -0x98(%rbp),%xmm0
ff
ucomisd -0xa0(%rbp),%xmm0
ff
jne    1830 <minimize+0x710>
jp     1830 <minimize+0x710>
jmp    187a <minimize+0x75a>
jmp    1266 <minimize+0x146>
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
jmp    1266 <minimize+0x146>
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
jmp    1266 <minimize+0x146>
movsd  -0xc8(%rbp),%xmm0
ff
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<minimize>:
push   %r15
push   %r14
push   %rbx
sub    $0xe0,%rsp
mov    %rsi,%r14
mov    %rdi,%r15
movsd  %xmm2,0x10(%rsp)
movapd %xmm1,0x20(%rsp)
movapd %xmm1,%xmm2
movapd %xmm0,0x90(%rsp)
subsd  %xmm0,%xmm2
movsd  %xmm2,0x60(%rsp)
movsd  0xeb3(%rip),%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movapd %xmm1,(%rsp)
movapd %xmm1,%xmm0
mov    %rsi,%rdi
call   *%r15
movapd 0x20(%rsp),%xmm5
movapd 0x90(%rsp),%xmm12
movapd (%rsp),%xmm2
movsd  0x10(%rsp),%xmm1
divsd  0xe81(%rip),%xmm1
movapd 0xea1(%rip),%xmm4
movapd %xmm2,%xmm8
andpd  %xmm4,%xmm8
mulsd  0xe6e(%rip),%xmm8
movsd  %xmm1,0x10(%rsp)
addsd  %xmm1,%xmm8
movapd %xmm8,%xmm3
movapd %xmm5,%xmm6
addsd  %xmm12,%xmm6
mulsd  0xe55(%rip),%xmm6
addsd  %xmm8,%xmm3
movapd %xmm2,%xmm1
subsd  %xmm6,%xmm1
movsd  0x60(%rsp),%xmm7
mulsd  0xe42(%rip),%xmm7
andpd  %xmm4,%xmm1
movapd %xmm3,0x30(%rsp)
addsd  %xmm3,%xmm7
ucomisd %xmm1,%xmm7
jae    179a <minimize+0x68a>
xorpd  %xmm7,%xmm7
movapd 0xe2d(%rip),%xmm11
movapd %xmm0,%xmm9
movsd  %xmm0,0x18(%rsp)
movapd %xmm2,%xmm10
movapd %xmm2,%xmm4
movapd %xmm2,%xmm14
movapd %xmm10,%xmm1
movapd %xmm9,%xmm3
movapd %xmm0,%xmm9
movapd %xmm2,%xmm13
movapd %xmm3,%xmm0
movapd %xmm8,0x80(%rsp)
movsd  %xmm9,0xa8(%rsp)
movapd %xmm2,0x50(%rsp)
movapd %xmm4,%xmm1
movsd  %xmm10,0x78(%rsp)
movsd  0x18(%rsp),%xmm4
movapd %xmm13,%xmm2
subsd  %xmm10,%xmm2
movapd %xmm9,%xmm3
movsd  %xmm0,0x18(%rsp)
subsd  %xmm0,%xmm3
movsd  %xmm3,0xa0(%rsp)
movapd %xmm2,0xd0(%rsp)
xorpd  0xdae(%rip),%xmm2
movapd %xmm2,0xc0(%rsp)
movapd %xmm14,%xmm10
jmp    12f4 <minimize+0x1e4>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movapd %xmm5,%xmm6
addsd  %xmm12,%xmm6
mulsd  0xd57(%rip),%xmm6
movapd %xmm13,%xmm2
subsd  %xmm6,%xmm2
andpd  %xmm11,%xmm2
movapd %xmm5,%xmm3
subsd  %xmm12,%xmm3
mulsd  0xd40(%rip),%xmm3
addsd  0x30(%rsp),%xmm3
ucomisd %xmm2,%xmm3
movapd %xmm0,%xmm4
jae    1795 <minimize+0x685>
movapd %xmm7,%xmm0
andpd  %xmm11,%xmm0
ucomisd %xmm0,%xmm8
movapd %xmm5,0x60(%rsp)
movapd %xmm12,0x90(%rsp)
movsd  %xmm4,0xb8(%rsp)
movsd  %xmm1,0xb0(%rsp)
jae    14c6 <minimize+0x3b6>
movapd %xmm9,%xmm0
subsd  %xmm4,%xmm0
mulsd  0xd0(%rsp),%xmm0
movapd %xmm13,%xmm2
subsd  %xmm1,%xmm2
movsd  0xa0(%rsp),%xmm3
mulsd  %xmm2,%xmm3
mulsd  %xmm3,%xmm2
subsd  %xmm0,%xmm3
mulsd  0xc0(%rsp),%xmm0
addsd  %xmm0,%xmm2
addsd  %xmm3,%xmm3
movapd %xmm3,%xmm1
movapd 0xcb8(%rip),%xmm9
andpd  %xmm9,%xmm1
movapd %xmm2,%xmm0
andpd  %xmm9,%xmm0
movapd %xmm1,%xmm4
mulsd  0xc86(%rip),%xmm4
mulsd  %xmm4,%xmm7
andpd  %xmm9,%xmm7
ucomisd %xmm7,%xmm0
jae    14c0 <minimize+0x3b0>
movapd %xmm2,%xmm4
xorpd  0xc8f(%rip),%xmm4
xorpd  %xmm0,%xmm0
cmpltsd %xmm3,%xmm0
andpd  %xmm0,%xmm4
andnpd %xmm2,%xmm0
orpd   %xmm4,%xmm0
movapd %xmm12,%xmm2
subsd  %xmm13,%xmm2
mulsd  %xmm1,%xmm2
ucomisd %xmm0,%xmm2
jae    14c0 <minimize+0x3b0>
movapd %xmm5,%xmm2
subsd  %xmm13,%xmm2
mulsd  %xmm1,%xmm2
ucomisd %xmm2,%xmm0
jae    14c0 <minimize+0x3b0>
divsd  %xmm1,%xmm0
movapd %xmm13,%xmm10
addsd  %xmm0,%xmm10
movapd %xmm10,%xmm1
subsd  %xmm12,%xmm1
movapd 0x30(%rsp),%xmm2
ucomisd %xmm1,%xmm2
movapd %xmm10,(%rsp)
jbe    1464 <minimize+0x354>
movapd %xmm6,%xmm1
subsd  %xmm13,%xmm1
movapd %xmm8,%xmm0
movapd %xmm6,0x20(%rsp)
call   1030 <dsign@plt>
movapd 0x20(%rsp),%xmm6
movapd 0x60(%rsp),%xmm5
movapd 0x50(%rsp),%xmm13
movapd 0xbdc(%rip),%xmm11
movapd 0x80(%rsp),%xmm8
movapd (%rsp),%xmm10
movapd %xmm5,%xmm1
subsd  %xmm10,%xmm1
movapd 0x30(%rsp),%xmm2
ucomisd %xmm1,%xmm2
jbe    14ac <minimize+0x39c>
subsd  %xmm13,%xmm6
movapd %xmm8,%xmm0
movapd %xmm6,%xmm1
call   1030 <dsign@plt>
movapd 0x50(%rsp),%xmm13
movapd 0xb94(%rip),%xmm11
movapd 0x80(%rsp),%xmm8
movapd (%rsp),%xmm10
movapd 0x40(%rsp),%xmm2
movapd %xmm0,%xmm1
jmp    1511 <minimize+0x401>
nopl   0x0(%rax,%rax,1)
movapd 0x40(%rsp),%xmm7
movapd %xmm12,%xmm0
subsd  %xmm13,%xmm0
movapd %xmm13,%xmm1
cmpltsd %xmm6,%xmm1
cmpnlesd %xmm13,%xmm6
movapd %xmm6,%xmm2
andnpd %xmm0,%xmm2
andpd  %xmm7,%xmm6
orpd   %xmm2,%xmm6
movapd %xmm5,%xmm0
subsd  %xmm13,%xmm0
andpd  %xmm1,%xmm0
andnpd %xmm6,%xmm1
orpd   %xmm0,%xmm1
movapd %xmm1,%xmm2
mulsd  0xaef(%rip),%xmm1
movapd %xmm2,0x20(%rsp)
movapd %xmm1,%xmm0
andpd  %xmm11,%xmm0
ucomisd %xmm0,%xmm8
movapd %xmm1,0x40(%rsp)
jbe    1540 <minimize+0x430>
movapd %xmm8,%xmm0
call   1030 <dsign@plt>
addsd  0x50(%rsp),%xmm0
jmp    1567 <minimize+0x457>
nop
movapd %xmm13,%xmm3
addsd  %xmm1,%xmm3
cmpnlesd %xmm0,%xmm8
movapd %xmm8,%xmm0
andnpd %xmm3,%xmm0
andpd  %xmm10,%xmm8
orpd   %xmm0,%xmm8
movapd %xmm8,%xmm0
movapd %xmm0,(%rsp)
mov    %r14,%rdi
call   *%r15
movsd  0xa8(%rsp),%xmm9
ucomisd %xmm9,%xmm0
jbe    16c0 <minimize+0x5b0>
movapd (%rsp),%xmm10
movapd %xmm10,%xmm1
movapd 0x50(%rsp),%xmm13
cmpltsd %xmm13,%xmm1
movapd %xmm1,%xmm2
andpd  %xmm10,%xmm2
andnpd 0x90(%rsp),%xmm1
orpd   %xmm2,%xmm1
movapd %xmm1,%xmm12
movapd %xmm13,%xmm1
cmpnlesd %xmm10,%xmm1
movapd 0x60(%rsp),%xmm5
andpd  %xmm1,%xmm5
andnpd %xmm10,%xmm1
orpd   %xmm1,%xmm5
movsd  0x18(%rsp),%xmm1
ucomisd %xmm0,%xmm1
movapd 0xa45(%rip),%xmm11
movsd  0x78(%rsp),%xmm4
movapd 0x20(%rsp),%xmm7
jae    1660 <minimize+0x550>
ucomisd %xmm13,%xmm4
jne    1602 <minimize+0x4f2>
jnp    1660 <minimize+0x550>
movsd  0xb8(%rsp),%xmm2
ucomisd %xmm0,%xmm2
setae  %al
movsd  0xb0(%rsp),%xmm3
ucomisd %xmm13,%xmm3
setnp  %cl
sete   %dl
and    %cl,%dl
ucomisd %xmm4,%xmm3
setnp  %cl
sete   %bl
and    %cl,%bl
or     %dl,%bl
or     %al,%bl
movapd %xmm10,%xmm1
movapd 0x80(%rsp),%xmm8
jne    12b0 <minimize+0x1a0>
movapd %xmm3,%xmm1
movapd %xmm2,%xmm0
jmp    12b0 <minimize+0x1a0>
nopw   0x0(%rax,%rax,1)
movapd %xmm5,%xmm6
addsd  %xmm12,%xmm6
mulsd  0x9a7(%rip),%xmm6
movapd %xmm13,%xmm1
subsd  %xmm6,%xmm1
andpd  %xmm11,%xmm1
movapd %xmm5,%xmm2
subsd  %xmm12,%xmm2
mulsd  0x990(%rip),%xmm2
addsd  0x30(%rsp),%xmm2
ucomisd %xmm1,%xmm2
movapd %xmm10,%xmm14
movapd 0x80(%rsp),%xmm8
jb     124e <minimize+0x13e>
jmp    1795 <minimize+0x685>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movapd 0x50(%rsp),%xmm10
movapd %xmm10,%xmm12
movapd (%rsp),%xmm4
cmpnlesd %xmm4,%xmm12
movapd 0x90(%rsp),%xmm1
andpd  %xmm12,%xmm1
andnpd %xmm10,%xmm12
orpd   %xmm1,%xmm12
movapd %xmm4,%xmm5
cmpltsd %xmm10,%xmm5
movapd %xmm5,%xmm1
andpd  %xmm10,%xmm1
andnpd 0x60(%rsp),%xmm5
orpd   %xmm1,%xmm5
movapd %xmm4,%xmm8
movapd 0x917(%rip),%xmm2
andpd  %xmm2,%xmm8
mulsd  0x8e9(%rip),%xmm8
addsd  0x10(%rsp),%xmm8
movapd %xmm8,%xmm3
addsd  %xmm8,%xmm3
movapd %xmm5,%xmm6
addsd  %xmm12,%xmm6
mulsd  0x8cf(%rip),%xmm6
movapd %xmm4,%xmm1
subsd  %xmm6,%xmm1
andpd  %xmm2,%xmm1
movapd %xmm5,%xmm2
subsd  %xmm12,%xmm2
mulsd  0x8ba(%rip),%xmm2
movapd %xmm3,0x30(%rsp)
addsd  %xmm3,%xmm2
ucomisd %xmm1,%xmm2
movapd %xmm4,%xmm2
movapd 0x8af(%rip),%xmm11
movsd  0x78(%rsp),%xmm4
movapd 0x20(%rsp),%xmm7
jb     1217 <minimize+0x107>
jmp    179a <minimize+0x68a>
movapd %xmm13,%xmm2
movapd %xmm2,%xmm0
add    $0xe0,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

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

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