#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 fabs(double);
double fifdmax1(double, double);
double fifdsign(double, double);
void E0001(int IENTRY, int *status, double *x, double *fx, double *xlo,
           double *xhi, unsigned long *qleft, unsigned long *qhi,
           double *zabstl, double *zreltl, double *zxhi, double *zxlo) {
  static double a, abstol, b, c, d, fa, fb, fc, fd, fda, fdb, m, mb, p, q,
      reltol, tol, w, xxhi, xxlo;
  static int ext, i99999;
  static unsigned long first, qrzero;
  switch (IENTRY) {
  case 0:
    goto DZROR;
  case 1:
    goto DSTZR;
  }
DZROR:
  if (*status > 0)
    goto S280;
  *xlo = xxlo;
  *xhi = xxhi;
  b = *x = *xlo;
  i99999 = 1;
  goto S270;
S10:
  fb = *fx;
  *xlo = *xhi;
  a = *x = *xlo;
  i99999 = 2;
  goto S270;
S20:
  if (!(fb < 0.0e0))
    goto S40;
  if (!(*fx < 0.0e0))
    goto S30;
  *status = -1;
  *qleft = *fx < fb;
  *qhi = 0;
  return;
S40:
S30:
  if (!(fb > 0.0e0))
    goto S60;
  if (!(*fx > 0.0e0))
    goto S50;
  *status = -1;
  *qleft = *fx > fb;
  *qhi = 1;
  return;
S60:
S50:
  fa = *fx;
  first = 1;
S70:
  c = a;
  fc = fa;
  ext = 0;
S80:
  if (!(fabs(fc) < fabs(fb)))
    goto S100;
  if (!(c != a))
    goto S90;
  d = a;
  fd = fa;
S90:
  a = b;
  fa = fb;
  *xlo = c;
  b = *xlo;
  fb = fc;
  c = a;
  fc = fa;
S100:
  tol = (0.5e0 * fifdmax1(abstol, reltol * fabs((*xlo))));
  m = (c + b) * .5e0;
  mb = m - b;
  if (!(fabs(mb) > tol))
    goto S240;
  if (!(ext > 3))
    goto S110;
  w = mb;
  goto S190;
S110:
  tol = fifdsign(tol, mb);
  p = (b - a) * fb;
  if (!first)
    goto S120;
  q = fa - fb;
  first = 0;
  goto S130;
S120:
  fdb = (fd - fb) / (d - b);
  fda = (fd - fa) / (d - a);
  p = fda * p;
  q = fdb * fa - fda * fb;
S130:
  if (!(p < 0.0e0))
    goto S140;
  p = -p;
  q = -q;
S140:
  if (ext == 3)
    p *= 2.0e0;
  if (!(p * 1.0e0 == 0.0e0 || p <= q * tol))
    goto S150;
  w = tol;
  goto S180;
S150:
  if (!(p < mb * q))
    goto S160;
  w = p / q;
  goto S170;
S160:
  w = mb;
S190:
S180:
S170:
  d = a;
  fd = fa;
  a = b;
  fa = fb;
  b += w;
  *xlo = b;
  *x = *xlo;
  i99999 = 3;
  goto S270;
S200:
  fb = *fx;
  if (!(fc * fb >= 0.0e0))
    goto S210;
  goto S70;
S210:
  if (!(w == mb))
    goto S220;
  ext = 0;
  goto S230;
S220:
  ext += 1;
S230:
  goto S80;
S240:
  *xhi = c;
  qrzero = fc >= 0.0e0 && fb <= 0.0e0 || fc < 0.0e0 && fb >= 0.0e0;
  if (!qrzero)
    goto S250;
  *status = 0;
  goto S260;
S250:
  *status = -1;
S260:
  return;
DSTZR:
  xxlo = *zxlo;
  xxhi = *zxhi;
  abstol = *zabstl;
  reltol = *zreltl;
  return;
S270:
  *status = 1;
  return;
S280:
  switch ((int)i99999) {
  case 1:
    goto S10;
  case 2:
    goto S20;
  case 3:
    goto S200;
  default:
    break;
  }
}


x86 assembly (clang, -O0):
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x34(%rbp)
test   %eax,%eax
je     117b <E0001+0x5b>
jmp    116a <E0001+0x4a>
mov    -0x34(%rbp),%eax
sub    $0x1,%eax
je     1180 <E0001+0x60>
jmp    1185 <E0001+0x65>
jmp    118a <E0001+0x6a>
jmp    1936 <E0001+0x816>
jmp    118a <E0001+0x6a>
mov    -0x10(%rbp),%rax
cmpl   $0x0,(%rax)
jle    119c <E0001+0x7c>
jmp    198a <E0001+0x86a>
movsd  0x2f2c(%rip),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0x2f14(%rip),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  %xmm0,0x2e74(%rip)
movl   $0x1,0x2efe(%rip)
jmp    197b <E0001+0x85b>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x2e75(%rip)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  %xmm0,0x2e1d(%rip)
movl   $0x2,0x2eb7(%rip)
jmp    197b <E0001+0x85b>
xorps  %xmm0,%xmm0
ucomisd 0x2e33(%rip),%xmm0
ja     1240 <E0001+0x120>
jmp    1296 <E0001+0x176>
mov    -0x20(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
ja     1256 <E0001+0x136>
jmp    129b <E0001+0x17b>
mov    -0x10(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movsd  0x2df8(%rip),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
movslq %eax,%rcx
mov    0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    0x18(%rbp),%rax
movq   $0x0,(%rax)
jmp    19d7 <E0001+0x8b7>
jmp    129b <E0001+0x17b>
movsd  0x2dc5(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
ja     12b5 <E0001+0x195>
jmp    130b <E0001+0x1eb>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
ja     12cf <E0001+0x1af>
jmp    1310 <E0001+0x1f0>
mov    -0x10(%rbp),%rax
movl   $0xffffffff,(%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd 0x2d7f(%rip),%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
movslq %eax,%rcx
mov    0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    0x18(%rbp),%rax
movq   $0x1,(%rax)
jmp    19d7 <E0001+0x8b7>
jmp    1310 <E0001+0x1f0>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x2d40(%rip)
movq   $0x1,0x2db5(%rip)
movsd  0x2d05(%rip),%xmm0
movsd  %xmm0,0x2d15(%rip)
movsd  0x2d1d(%rip),%xmm0
movsd  %xmm0,0x2d25(%rip)
movl   $0x0,0x2d83(%rip)
movsd  0x2d13(%rip),%xmm1
movaps 0xc9c(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0x2cf8(%rip),%xmm0
movaps 0xc89(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
ja     138a <E0001+0x26a>
jmp    143b <E0001+0x31b>
movsd  0x2cbe(%rip),%xmm0
ucomisd 0x2c9e(%rip),%xmm0
jne    13ab <E0001+0x28b>
jp     13ab <E0001+0x28b>
jmp    13cb <E0001+0x2ab>
movsd  0x2c85(%rip),%xmm0
movsd  %xmm0,0x2c9d(%rip)
movsd  0x2c9d(%rip),%xmm0
movsd  %xmm0,0x2cad(%rip)
movsd  0x2c75(%rip),%xmm0
movsd  %xmm0,0x2c5d(%rip)
movsd  0x2c85(%rip),%xmm0
movsd  %xmm0,0x2c75(%rip)
movsd  0x2c5d(%rip),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x2c3d(%rip)
movsd  0x2c5d(%rip),%xmm0
movsd  %xmm0,0x2c4d(%rip)
movsd  0x2c15(%rip),%xmm0
movsd  %xmm0,0x2c25(%rip)
movsd  0x2c2d(%rip),%xmm0
movsd  %xmm0,0x2c35(%rip)
movsd  0x2bfd(%rip),%xmm0
movsd  0x2c65(%rip),%xmm1
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
movaps 0xba6(%rip),%xmm3
pand   %xmm3,%xmm2
mulsd  %xmm2,%xmm1
call   1030 <fifdmax1@plt>
movaps %xmm0,%xmm1
movsd  0xb9e(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x2c3a(%rip)
movsd  0x2bca(%rip),%xmm0
addsd  0x2bba(%rip),%xmm0
movsd  0xb7a(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x2bee(%rip)
movsd  0x2be6(%rip),%xmm0
subsd  0x2b96(%rip),%xmm0
movsd  %xmm0,0x2bde(%rip)
movsd  0x2bd6(%rip),%xmm0
movaps 0xb37(%rip),%xmm1
pand   %xmm1,%xmm0
ucomisd 0x2be3(%rip),%xmm0
ja     14e0 <E0001+0x3c0>
jmp    1888 <E0001+0x768>
cmpl   $0x3,0x2bf1(%rip)
jg     14f2 <E0001+0x3d2>
jmp    1507 <E0001+0x3e7>
movsd  0x2b9e(%rip),%xmm0
movsd  %xmm0,0x2bbe(%rip)
jmp    1777 <E0001+0x657>
movsd  0x2ba9(%rip),%xmm0
movsd  0x2b81(%rip),%xmm1
call   1040 <fifdsign@plt>
movsd  %xmm0,0x2b94(%rip)
movsd  0x2b1c(%rip),%xmm0
subsd  0x2b04(%rip),%xmm0
mulsd  0x2b2c(%rip),%xmm0
movsd  %xmm0,0x2b5c(%rip)
cmpq   $0x0,0x2b94(%rip)
jne    1557 <E0001+0x437>
jmp    157f <E0001+0x45f>
movsd  0x2b01(%rip),%xmm0
subsd  0x2b01(%rip),%xmm0
movsd  %xmm0,0x2b39(%rip)
movq   $0x0,0x2b66(%rip)
jmp    1636 <E0001+0x516>
movsd  0x2af1(%rip),%xmm0
subsd  0x2ad9(%rip),%xmm0
movsd  0x2ac1(%rip),%xmm1
subsd  0x2aa9(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x2add(%rip)
movsd  0x2ac5(%rip),%xmm0
subsd  0x2aa5(%rip),%xmm0
movsd  0x2a95(%rip),%xmm1
subsd  0x2a6d(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x2aa9(%rip)
movsd  0x2aa1(%rip),%xmm0
mulsd  0x2ab9(%rip),%xmm0
movsd  %xmm0,0x2ab1(%rip)
movsd  0x2a91(%rip),%xmm0
movsd  0x2a61(%rip),%xmm2
movsd  0x2a79(%rip),%xmm1
mulsd  0x2a59(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2a72(%rip)
xorps  %xmm0,%xmm0
ucomisd 0x2a5f(%rip),%xmm0
ja     164c <E0001+0x52c>
jmp    169a <E0001+0x57a>
movsd  0x2a4c(%rip),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,0x2a2d(%rip)
movsd  0x2a2d(%rip),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,0x2a0e(%rip)
cmpl   $0x3,0x2a37(%rip)
jne    16bf <E0001+0x59f>
movsd  0x969(%rip),%xmm0
mulsd  0x29e9(%rip),%xmm0
movsd  %xmm0,0x29e1(%rip)
movsd  0x959(%rip),%xmm0
mulsd  0x29d1(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    16e7 <E0001+0x5c7>
jp     16e7 <E0001+0x5c7>
jmp    170e <E0001+0x5ee>
movsd  0x29b1(%rip),%xmm1
movsd  0x29b1(%rip),%xmm0
mulsd  0x29b9(%rip),%xmm0
ucomisd %xmm1,%xmm0
jae    170e <E0001+0x5ee>
jmp    1723 <E0001+0x603>
movsd  0x29a2(%rip),%xmm0
movsd  %xmm0,0x29a2(%rip)
jmp    177c <E0001+0x65c>
movsd  0x2975(%rip),%xmm1
movsd  0x2965(%rip),%xmm0
mulsd  0x296d(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     174a <E0001+0x62a>
jmp    1767 <E0001+0x647>
movsd  0x294e(%rip),%xmm0
divsd  0x294e(%rip),%xmm0
movsd  %xmm0,0x295e(%rip)
jmp    1781 <E0001+0x661>
movsd  0x2929(%rip),%xmm0
movsd  %xmm0,0x2949(%rip)
jmp    177c <E0001+0x65c>
jmp    1781 <E0001+0x661>
movsd  0x28af(%rip),%xmm0
movsd  %xmm0,0x28c7(%rip)
movsd  0x28c7(%rip),%xmm0
movsd  %xmm0,0x28d7(%rip)
movsd  0x289f(%rip),%xmm0
movsd  %xmm0,0x2887(%rip)
movsd  0x28af(%rip),%xmm0
movsd  %xmm0,0x289f(%rip)
movsd  0x28f7(%rip),%xmm0
addsd  0x2877(%rip),%xmm0
movsd  %xmm0,0x286f(%rip)
movsd  0x2867(%rip),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x3,0x28d9(%rip)
jmp    197b <E0001+0x85b>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x2850(%rip)
movsd  0x2850(%rip),%xmm0
mulsd  0x2840(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jae    183a <E0001+0x71a>
jmp    183f <E0001+0x71f>
jmp    132b <E0001+0x20b>
movsd  0x2879(%rip),%xmm0
ucomisd 0x2849(%rip),%xmm0
jne    1860 <E0001+0x740>
jp     1860 <E0001+0x740>
jmp    1865 <E0001+0x745>
jmp    1874 <E0001+0x754>
movl   $0x0,0x2869(%rip)
jmp    1883 <E0001+0x763>
mov    0x285e(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2855(%rip)
jmp    1355 <E0001+0x235>
movsd  0x27c0(%rip),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0x27d0(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     18c3 <E0001+0x7a3>
mov    $0x1,%al
xorps  %xmm0,%xmm0
ucomisd 0x27ae(%rip),%xmm0
mov    %al,-0x35(%rbp)
jae    18f4 <E0001+0x7d4>
xor    %eax,%eax
xorps  %xmm0,%xmm0
ucomisd 0x27a0(%rip),%xmm0
mov    %al,-0x36(%rbp)
jbe    18ee <E0001+0x7ce>
movsd  0x2787(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
setae  %al
mov    %al,-0x36(%rbp)
mov    -0x36(%rbp),%al
mov    %al,-0x35(%rbp)
mov    -0x35(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
cltq
mov    %rax,0x27e3(%rip)
cmpq   $0x0,0x27db(%rip)
jne    1918 <E0001+0x7f8>
jmp    1927 <E0001+0x807>
mov    -0x10(%rbp),%rax
movl   $0x0,(%rax)
jmp    1931 <E0001+0x811>
mov    -0x10(%rbp),%rax
movl   $0xffffffff,(%rax)
jmp    19d7 <E0001+0x8b7>
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x278a(%rip)
mov    0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x2772(%rip)
mov    0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x26da(%rip)
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x273a(%rip)
jmp    19d7 <E0001+0x8b7>
mov    -0x10(%rbp),%rax
movl   $0x1,(%rax)
jmp    19d7 <E0001+0x8b7>
mov    0x274c(%rip),%eax
mov    %eax,-0x3c(%rbp)
sub    $0x1,%eax
je     19c3 <E0001+0x8a3>
jmp    19a1 <E0001+0x881>
mov    -0x3c(%rbp),%eax
sub    $0x2,%eax
je     19c8 <E0001+0x8a8>
jmp    19b2 <E0001+0x892>
mov    -0x3c(%rbp),%eax
sub    $0x3,%eax
je     19cd <E0001+0x8ad>
jmp    19d2 <E0001+0x8b2>
jmp    11e3 <E0001+0xc3>
jmp    122a <E0001+0x10a>
jmp    1808 <E0001+0x6e8>
jmp    19d7 <E0001+0x8b7>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
push   %r15
push   %r14
push   %r12
push   %rbx
push   %rax
cmp    $0x1,%edi
jne    1176 <E0001+0x56>
mov    0x58(%rsp),%rax
mov    0x50(%rsp),%rcx
mov    0x48(%rsp),%rdx
mov    0x40(%rsp),%rsi
movsd  (%rax),%xmm0
movsd  %xmm0,0x2f53(%rip)
movsd  (%rcx),%xmm0
movsd  %xmm0,0x2f3f(%rip)
movsd  (%rsi),%xmm0
movsd  %xmm0,0x2edb(%rip)
movsd  (%rdx),%xmm0
movsd  %xmm0,0x2f17(%rip)
jmp    15e6 <E0001+0x4c6>
mov    %r9,%rbx
mov    %r8,%r15
mov    %rdx,%r14
mov    %rsi,%r12
cmpl   $0x0,(%rsi)
jle    11d0 <E0001+0xb0>
mov    0x2f1f(%rip),%eax
cmp    $0x3,%eax
je     1205 <E0001+0xe5>
cmp    $0x2,%eax
je     1257 <E0001+0x137>
cmp    $0x1,%eax
jne    15e6 <E0001+0x4c6>
movsd  (%rcx),%xmm0
movsd  %xmm0,0x2eb8(%rip)
movsd  (%rbx),%xmm0
movsd  %xmm0,(%r15)
movsd  %xmm0,(%r14)
movsd  %xmm0,0x2e72(%rip)
mov    $0x2,%eax
jmp    15d8 <E0001+0x4b8>
movsd  0x2ec8(%rip),%xmm0
movsd  %xmm0,(%r15)
movsd  0x2eb3(%rip),%xmm0
movsd  %xmm0,(%rbx)
movsd  (%r15),%xmm0
movsd  %xmm0,(%r14)
movsd  %xmm0,0x2e4d(%rip)
mov    $0x1,%eax
jmp    15d8 <E0001+0x4b8>
movsd  (%rcx),%xmm0
movsd  %xmm0,0x2e57(%rip)
movsd  0x2e57(%rip),%xmm2
movapd %xmm0,%xmm1
mulsd  %xmm2,%xmm1
xorpd  %xmm3,%xmm3
ucomisd %xmm3,%xmm1
jae    12d1 <E0001+0x1b1>
movsd  0x2e59(%rip),%xmm1
xor    %eax,%eax
ucomisd 0x2e3f(%rip),%xmm1
jne    1249 <E0001+0x129>
jnp    1304 <E0001+0x1e4>
mov    0x2e59(%rip),%eax
add    $0x1,%eax
jmp    1304 <E0001+0x1e4>
mov    0x38(%rsp),%rax
mov    0x30(%rsp),%rdx
movsd  0x2dff(%rip),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jbe    129d <E0001+0x17d>
movsd  (%rcx),%xmm2
ucomisd %xmm2,%xmm1
jbe    129d <E0001+0x17d>
movl   $0xffffffff,(%r12)
ff
xor    %ecx,%ecx
ucomisd %xmm2,%xmm0
seta   %cl
mov    %rcx,(%rdx)
movq   $0x0,(%rax)
jmp    15e6 <E0001+0x4c6>
ucomisd %xmm1,%xmm0
movsd  (%rcx),%xmm2
jbe    12db <E0001+0x1bb>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm2
jbe    12db <E0001+0x1bb>
movl   $0xffffffff,(%r12)
ff
xor    %ecx,%ecx
ucomisd %xmm0,%xmm2
seta   %cl
mov    %rcx,(%rdx)
movq   $0x1,(%rax)
jmp    15e6 <E0001+0x4c6>
movsd  0x2d87(%rip),%xmm2
jmp    12ea <E0001+0x1ca>
movsd  %xmm2,0x2d7d(%rip)
movb   $0x1,0x2dc6(%rip)
movsd  0x2d46(%rip),%xmm1
movsd  %xmm1,0x2d56(%rip)
movsd  %xmm2,0x2d6e(%rip)
xor    %eax,%eax
mov    %eax,0x2d9e(%rip)
movapd 0xcee(%rip),%xmm4
movapd %xmm2,%xmm1
andpd  %xmm4,%xmm1
movapd %xmm0,%xmm3
andpd  %xmm4,%xmm3
ucomisd %xmm1,%xmm3
jbe    1397 <E0001+0x277>
movsd  0x2d20(%rip),%xmm1
movsd  0x2d00(%rip),%xmm3
ucomisd %xmm3,%xmm1
jne    1340 <E0001+0x220>
jnp    1358 <E0001+0x238>
movsd  %xmm3,0x2d10(%rip)
movsd  0x2d10(%rip),%xmm3
movsd  %xmm3,0x2d20(%rip)
movsd  0x2ce8(%rip),%xmm3
movsd  %xmm3,0x2cd0(%rip)
movsd  %xmm0,0x2cf0(%rip)
movsd  %xmm1,(%r15)
movsd  %xmm1,0x2ccb(%rip)
movsd  %xmm2,0x2ce3(%rip)
movsd  %xmm3,0x2cc3(%rip)
movsd  %xmm0,0x2cdb(%rip)
jmp    139c <E0001+0x27c>
movsd  (%r15),%xmm1
movsd  0x2c9c(%rip),%xmm0
andpd  %xmm4,%xmm1
mulsd  0x2cd8(%rip),%xmm1
call   1030 <fifdmax1@plt>
movsd  0xc63(%rip),%xmm3
mulsd  %xmm3,%xmm0
movsd  0x2c87(%rip),%xmm2
movsd  0x2c77(%rip),%xmm4
movapd %xmm2,%xmm1
addsd  %xmm4,%xmm1
mulsd  %xmm3,%xmm1
subsd  %xmm4,%xmm1
movsd  %xmm1,0x2c97(%rip)
movapd 0xc0f(%rip),%xmm3
andpd  %xmm1,%xmm3
ucomisd %xmm0,%xmm3
jbe    142a <E0001+0x30a>
cmpl   $0x4,0x2ca6(%rip)
jl     146b <E0001+0x34b>
movsd  %xmm1,0x2c84(%rip)
movsd  0x2c23(%rip),%xmm8
movsd  0x2c43(%rip),%xmm0
movsd  0x2c43(%rip),%xmm3
jmp    159c <E0001+0x47c>
movsd  %xmm2,(%rbx)
movsd  0x2c3a(%rip),%xmm1
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm1
movsd  0x2c22(%rip),%xmm0
jb     144e <E0001+0x32e>
ucomisd %xmm0,%xmm2
jae    145e <E0001+0x33e>
ucomisd %xmm1,%xmm2
jbe    14bc <E0001+0x39c>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     14bc <E0001+0x39c>
movl   $0x0,(%r12)
jmp    15e6 <E0001+0x4c6>
call   1040 <fifdsign@plt>
movapd %xmm0,%xmm1
movsd  0x2bcc(%rip),%xmm4
movsd  0x2bb3(%rip),%xmm8
movapd %xmm4,%xmm2
subsd  %xmm8,%xmm2
movsd  0x2bd2(%rip),%xmm3
mulsd  %xmm3,%xmm2
cmpb   $0x1,0x2c0f(%rip)
jne    14c9 <E0001+0x3a9>
movsd  0x2bb5(%rip),%xmm0
movapd %xmm0,%xmm5
subsd  %xmm3,%xmm5
movb   $0x0,0x2bf6(%rip)
jmp    1512 <E0001+0x3f2>
movl   $0xffffffff,(%r12)
ff
jmp    15e6 <E0001+0x4c6>
movsd  0x2ba7(%rip),%xmm6
movapd %xmm6,%xmm5
subsd  %xmm3,%xmm5
movsd  0x2b77(%rip),%xmm7
movapd %xmm7,%xmm0
subsd  %xmm4,%xmm0
divsd  %xmm0,%xmm5
movsd  0x2b6b(%rip),%xmm0
subsd  %xmm0,%xmm6
subsd  %xmm8,%xmm7
divsd  %xmm7,%xmm6
mulsd  %xmm6,%xmm2
mulsd  %xmm3,%xmm6
mulsd  %xmm0,%xmm5
subsd  %xmm6,%xmm5
xorpd  %xmm9,%xmm9
ucomisd %xmm2,%xmm9
movapd 0xaec(%rip),%xmm7
movapd %xmm2,%xmm6
xorpd  %xmm7,%xmm6
jbe    1532 <E0001+0x412>
xorpd  %xmm7,%xmm5
movapd %xmm2,%xmm7
cmpltsd %xmm9,%xmm7
andpd  %xmm7,%xmm6
andnpd %xmm2,%xmm7
orpd   %xmm6,%xmm7
cmpl   $0x3,0x2b59(%rip)
jne    1555 <E0001+0x435>
addsd  %xmm7,%xmm7
ucomisd %xmm9,%xmm7
jne    155e <E0001+0x43e>
jnp    1594 <E0001+0x474>
movapd %xmm1,%xmm2
mulsd  %xmm5,%xmm2
ucomisd %xmm7,%xmm2
jae    1594 <E0001+0x474>
movsd  0x2b0c(%rip),%xmm1
movapd %xmm5,%xmm2
mulsd  %xmm1,%xmm2
ucomisd %xmm7,%xmm2
jbe    1594 <E0001+0x474>
divsd  %xmm5,%xmm7
movsd  %xmm7,0x2b02(%rip)
movapd %xmm7,%xmm1
jmp    159c <E0001+0x47c>
movsd  %xmm1,0x2af4(%rip)
movsd  %xmm8,0x2ab3(%rip)
movsd  %xmm0,0x2acb(%rip)
movsd  %xmm4,0x2a83(%rip)
movsd  %xmm3,0x2aa3(%rip)
addsd  %xmm4,%xmm1
movsd  %xmm1,0x2a7f(%rip)
movsd  %xmm1,(%r15)
movsd  %xmm1,(%r14)
mov    $0x3,%eax
mov    %eax,0x2ace(%rip)
movl   $0x1,(%r12)
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

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

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