#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 */
int /*<<< orphan*/ eppInf(double *, double *, int *, double *, int, double,
                          int /*<<< orphan*/);
int fabs(double);
int /*<<< orphan*/ free(int *);
double log(double);
scalar_t__ malloc(int);
double norm(double *, double, int);
double pow(double, int);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ zerofind(double *, int *, double, double, double, double);
void eppO(double *x, double *cc, int *iter_step, double *v, int n, double rho,
          double p) {
  int i, *flag, bisStep, newtonStep = 0, totoalStep = 0;
  double vq = 0, epsilon, vmax = 0, vmin = 1e10;
  double q = 1 / (1 - 1 / p), c, c1, c2, root, f, xp;
  double x_diff = 0;
  double temp;
  int p_n = 1;
  flag = (int *)malloc(sizeof(int) * n);
  for (i = 0; i < n; i++) {
    x[i] = 0;
    if (v[i] == 0)
      flag[i] = 0;
    else {
      if (v[i] > 0)
        flag[i] = 0;
      else {
        flag[i] = 1;
        v[i] = -v[i];
      }
      vq += pow(v[i], q);
      if (v[i] > vmax)
        vmax = v[i];
      if (v[i] < vmin)
        vmin = v[i];
    }
  }
  vq = pow(vq, 1 / q);
  if (rho >= vq) {
    *cc = 0;
    iter_step[0] = iter_step[1] = 0;
    for (i = 0; i < n; i++) {
      if (flag[i])
        v[i] = -v[i];
    }
    free(flag);
    return;
  }
  epsilon = (vq - rho) / vq;
  if (p > 2) {
    if (log((1 - epsilon) * vmin) - (p - 1) * log(epsilon * vmin) >= 709) {
      for (i = 0; i < n; i++) {
        if (flag[i])
          v[i] = -v[i];
      }
      eppInf(x, cc, iter_step, v, n, rho, 0);
      free(flag);
      return;
    }
    c1 = (1 - epsilon) * vmax / pow(epsilon * vmax, p - 1);
    c2 = (1 - epsilon) * vmin / pow(epsilon * vmin, p - 1);
  } else {
    c2 = (1 - epsilon) * vmax / pow(epsilon * vmax, p - 1);
    c1 = (1 - epsilon) * vmin / pow(epsilon * vmin, p - 1);
  }
  if (fabs(c1 - c2) <= 1e-8) {
    c = c1;
  } else
    c = (c1 + c2) / 2;
  bisStep = 0;
  while (1) {
    bisStep++;
    x_diff = 0;
    for (i = 0; i < n; i++) {
      zerofind(&root, &newtonStep, v[i], p, c, x[i]);
      temp = fabs(root - x[i]);
      if (x_diff < temp)
        x_diff = temp;
      x[i] = root;
      totoalStep += newtonStep;
    }
    xp = norm(x, p, n);
    f = rho * pow(xp, 1 - p) - c;
    if (fabs(f) <= 1e-8 || fabs(c1 - c2) <= 1e-8)
      break;
    else {
      if (f > 0) {
        if ((x_diff <= 1e-8) && (p_n == 0))
          break;
        c1 = c;
        p_n = 1;
      } else {
        if ((x_diff <= 1e-8) && (p_n == 1))
          break;
        c2 = c;
        p_n = 0;
      }
    }
    c = (c1 + c2) / 2;
    if (bisStep >= 1000) {
      if (fabs(c1 - c2) <= 1e-8 * c2)
        break;
      else {
        printf("\n The number of bisection steps exceed %d.", 1000);
        printf("\n c1=%e, c2=%e, x_diff=%e, f=%e", c1, c2, x_diff, f);
        printf("\n If you meet with this problem, please contact Jun Liu "
               "(j.liu@asu.edu). Thanks!");
        return;
      }
    }
  }
  for (i = 0; i < n; i++) {
    if (flag[i]) {
      x[i] = -x[i];
      v[i] = -v[i];
    }
  }
  free(flag);
  *cc = c;
  iter_step[0] = bisStep;
  iter_step[1] = totoalStep;
}


x86 assembly (clang, -O0):
<eppO>:
push   %rbp
mov    %rsp,%rbp
sub    $0x100,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
movsd  %xmm0,-0x30(%rbp)
movsd  %xmm1,-0x38(%rbp)
movl   $0x0,-0x50(%rbp)
movl   $0x0,-0x54(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xe29(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  0xe14(%rip),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  0xe07(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0xdfb(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movl   $0x1,-0xc4(%rbp)
movslq -0x24(%rbp),%rax
shl    $0x2,%rax
mov    %eax,%edi
call   1070 <malloc@plt>
mov    %rax,-0x48(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    138c <eppO+0x1fc>
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    128d <eppO+0xfd>
jp     128d <eppO+0xfd>
mov    -0x48(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    1379 <eppO+0x1e9>
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    12bb <eppO+0x12b>
mov    -0x48(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    12fb <eppO+0x16b>
mov    -0x48(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movl   $0x1,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
cvttsd2si -0x80(%rbp),%edi
call   10b0 <pow@plt>
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd -0x70(%rbp),%xmm0
jbe    1346 <eppO+0x1b6>
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x78(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1374 <eppO+0x1e4>
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    1379 <eppO+0x1e9>
jmp    137e <eppO+0x1ee>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    123d <eppO+0xad>
movsd  -0x60(%rbp),%xmm0
movsd  0xc67(%rip),%xmm1
divsd  -0x80(%rbp),%xmm1
cvttsd2si %xmm1,%edi
call   10b0 <pow@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  -0x30(%rbp),%xmm0
ucomisd -0x60(%rbp),%xmm0
jb     1453 <eppO+0x2c3>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,0x4(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1445 <eppO+0x2b5>
mov    -0x48(%rbp),%rax
movslq -0x3c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1432 <eppO+0x2a2>
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1437 <eppO+0x2a7>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    13e3 <eppO+0x253>
mov    -0x48(%rbp),%rdi
call   1030 <free@plt>
jmp    1b3b <eppO+0x9ab>
movsd  -0x60(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
divsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  0xb9c(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1650 <eppO+0x4c0>
movsd  0xb7a(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
call   10a0 <log@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  0xb56(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
call   10a0 <log@plt>
movsd  -0xd8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xd0(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  0xb19(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     15a1 <eppO+0x411>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1572 <eppO+0x3e2>
mov    -0x48(%rbp),%rax
movslq -0x3c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     155f <eppO+0x3cf>
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1564 <eppO+0x3d4>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1510 <eppO+0x380>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
mov    -0x20(%rbp),%rcx
mov    -0x24(%rbp),%r8d
movsd  -0x30(%rbp),%xmm0
xor    %r9d,%r9d
call   1080 <eppInf@plt>
mov    -0x48(%rbp),%rdi
call   1030 <free@plt>
jmp    1b3b <eppO+0x9ab>
movsd  0xa57(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
movsd  0xa2e(%rip),%xmm2
subsd  %xmm2,%xmm1
cvttsd2si %xmm1,%edi
call   10b0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xe8(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0xa02(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
movsd  0x9d9(%rip),%xmm2
subsd  %xmm2,%xmm1
cvttsd2si %xmm1,%edi
call   10b0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xe0(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    16fa <eppO+0x56a>
movsd  0x9a8(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
movsd  0x97f(%rip),%xmm2
subsd  %xmm2,%xmm1
cvttsd2si %xmm1,%edi
call   10b0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0x953(%rip),%xmm0
subsd  -0x68(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
movsd  0x92a(%rip),%xmm2
subsd  %xmm2,%xmm1
cvttsd2si %xmm1,%edi
call   10b0 <pow@plt>
movaps %xmm0,%xmm1
movsd  -0xf0(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
subsd  -0x98(%rbp),%xmm0
ff
call   1050 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0x905(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     173a <eppO+0x5aa>
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
jmp    175e <eppO+0x5ce>
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x98(%rbp),%xmm0
ff
movsd  0x8be(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    183f <eppO+0x6af>
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x38(%rbp),%xmm1
movsd  -0x88(%rbp),%xmm2
ff
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm3
lea    -0xa0(%rbp),%rdi
lea    -0x50(%rbp),%rsi
call   1090 <zerofind@plt>
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
call   1050 <fabs@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0xc0(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1813 <eppO+0x683>
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x50(%rbp),%eax
add    -0x54(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1780 <eppO+0x5f0>
mov    -0x8(%rbp),%rdi
movsd  -0x38(%rbp),%xmm0
mov    -0x24(%rbp),%esi
call   1060 <norm@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  0x78b(%rip),%xmm1
subsd  -0x38(%rbp),%xmm1
cvttsd2si %xmm1,%edi
call   10b0 <pow@plt>
movaps %xmm0,%xmm2
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0x88(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
call   1050 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0x74a(%rip),%xmm0
ucomisd %xmm1,%xmm0
jae    190b <eppO+0x77b>
movsd  -0x90(%rbp),%xmm0
ff
subsd  -0x98(%rbp),%xmm0
ff
call   1050 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0x71f(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     1910 <eppO+0x780>
jmp    1a75 <eppO+0x8e5>
movsd  -0xa8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    196c <eppO+0x7dc>
movsd  0x6f3(%rip),%xmm0
ucomisd -0xb8(%rbp),%xmm0
ff
jb     194d <eppO+0x7bd>
cmpl   $0x0,-0xc4(%rbp)
jne    194d <eppO+0x7bd>
jmp    1a75 <eppO+0x8e5>
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movl   $0x1,-0xc4(%rbp)
jmp    19ae <eppO+0x81e>
movsd  0x6ac(%rip),%xmm0
ucomisd -0xb8(%rbp),%xmm0
ff
jb     1994 <eppO+0x804>
cmpl   $0x1,-0xc4(%rbp)
jne    1994 <eppO+0x804>
jmp    1a75 <eppO+0x8e5>
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movl   $0x0,-0xc4(%rbp)
jmp    19b3 <eppO+0x823>
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0x98(%rbp),%xmm0
ff
movsd  0x645(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
cmpl   $0x3e8,-0x4c(%rbp)
jl     1a70 <eppO+0x8e0>
movsd  -0x90(%rbp),%xmm0
ff
subsd  -0x98(%rbp),%xmm0
ff
call   1050 <fabs@plt>
cvtsi2sd %eax,%xmm1
movsd  0x61b(%rip),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jb     1a1c <eppO+0x88c>
jmp    1a75 <eppO+0x8e5>
lea    0x605(%rip),%rdi
mov    $0x3e8,%esi
mov    $0x0,%al
call   1040 <printf@plt>
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0xb8(%rbp),%xmm2
ff
movsd  -0xa8(%rbp),%xmm3
ff
lea    0x5fd(%rip),%rdi
mov    $0x4,%al
call   1040 <printf@plt>
lea    0x60f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1b3b <eppO+0x9ab>
jmp    1765 <eppO+0x5d5>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1b0f <eppO+0x97f>
mov    -0x48(%rbp),%rax
movslq -0x3c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1afc <eppO+0x96c>
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1b01 <eppO+0x971>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1a7c <eppO+0x8ec>
mov    -0x48(%rbp),%rdi
call   1030 <free@plt>
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x4c(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x54(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,0x4(%rax)
add    $0x100,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<eppO>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xb8,%rsp
movsd  %xmm0,0x88(%rsp)
mov    %r8d,%ebp
mov    %rcx,%r13
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,%rbx
movl   $0x0,0x5c(%rsp)
movsd  0xe37(%rip),%xmm2
movapd %xmm2,%xmm0
movsd  %xmm1,0x28(%rsp)
divsd  %xmm1,%xmm0
movapd %xmm2,%xmm1
subsd  %xmm0,%xmm1
divsd  %xmm1,%xmm2
movsd  %xmm2,0x40(%rsp)
lea    0x0(,%rbp,4),%edi
call   1070 <malloc@plt>
mov    %rax,%r12
test   %ebp,%ebp
mov    %rbp,0x50(%rsp)
mov    %r14,0x78(%rsp)
mov    %r15,0x70(%rsp)
jle    12f9 <eppO+0x169>
movsd  0x40(%rsp),%xmm2
cvttsd2si %xmm2,%r14d
mov    %ebp,%r15d
movsd  0xde3(%rip),%xmm3
xorpd  %xmm5,%xmm5
xor    %ebp,%ebp
xorpd  %xmm4,%xmm4
movsd  0xdc9(%rip),%xmm1
jmp    1255 <eppO+0xc5>
nopl   0x0(%rax)
movl   $0x0,(%r12,%rbp,4)
add    $0x1,%rbp
cmp    %rbp,%r15
je     1313 <eppO+0x183>
movq   $0x0,(%rbx,%rbp,8)
movsd  0x0(%r13,%rbp,8),%xmm0
ucomisd %xmm5,%xmm0
jne    126c <eppO+0xdc>
jnp    1240 <eppO+0xb0>
movsd  %xmm4,0x30(%rsp)
movapd %xmm3,0x10(%rsp)
xor    %eax,%eax
ucomisd %xmm5,%xmm0
ja     1294 <eppO+0x104>
xorpd  0xdb8(%rip),%xmm0
movlpd %xmm0,0x0(%r13,%rbp,8)
mov    $0x1,%eax
mov    %eax,(%r12,%rbp,4)
movsd  0x0(%r13,%rbp,8),%xmm0
mov    %r14d,%edi
call   10b0 <pow@plt>
movsd  0x30(%rsp),%xmm4
addsd  %xmm0,%xmm4
movsd  0x0(%r13,%rbp,8),%xmm0
movapd 0x10(%rsp),%xmm3
movapd %xmm3,%xmm2
unpckhpd %xmm3,%xmm2
movapd %xmm0,%xmm1
maxsd  %xmm2,%xmm1
ucomisd %xmm0,%xmm3
jbe    12de <eppO+0x14e>
unpcklpd %xmm1,%xmm0
movapd %xmm0,%xmm3
jmp    12e2 <eppO+0x152>
unpcklpd %xmm1,%xmm3
movsd  0xd16(%rip),%xmm1
movsd  0x40(%rsp),%xmm2
xorpd  %xmm5,%xmm5
jmp    1248 <eppO+0xb8>
movsd  0xd07(%rip),%xmm3
xorpd  %xmm4,%xmm4
movsd  0xcf3(%rip),%xmm1
movsd  0x40(%rsp),%xmm2
movapd %xmm3,0x10(%rsp)
movapd %xmm1,%xmm0
divsd  %xmm2,%xmm0
cvttsd2si %xmm0,%edi
movapd %xmm4,%xmm0
call   10b0 <pow@plt>
movsd  0x88(%rsp),%xmm1
ucomisd %xmm0,%xmm1
jae    1444 <eppO+0x2b4>
movapd %xmm0,%xmm3
subsd  %xmm1,%xmm3
divsd  %xmm0,%xmm3
movsd  0x28(%rsp),%xmm2
ucomisd 0xcb5(%rip),%xmm2
movsd  0xc9d(%rip),%xmm1
subsd  %xmm3,%xmm1
movapd %xmm1,(%rsp)
movsd  %xmm3,0x30(%rsp)
jbe    14a5 <eppO+0x315>
movapd 0x10(%rsp),%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm0,0xa0(%rsp)
call   10a0 <log@plt>
movsd  %xmm0,0x40(%rsp)
movsd  0xc7a(%rip),%xmm0
addsd  0x28(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movapd 0x10(%rsp),%xmm0
mulsd  0x30(%rsp),%xmm0
movapd %xmm0,0x60(%rsp)
call   10a0 <log@plt>
movsd  0x20(%rsp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x40(%rsp),%xmm2
subsd  %xmm0,%xmm2
ucomisd 0xc43(%rip),%xmm2
jae    17d2 <eppO+0x642>
movapd 0x10(%rsp),%xmm0
unpckhpd %xmm0,%xmm0
movapd (%rsp),%xmm2
mulsd  %xmm0,%xmm2
movapd %xmm2,(%rsp)
mulsd  0x30(%rsp),%xmm0
cvttsd2si %xmm1,%ebp
mov    %ebp,%edi
call   10b0 <pow@plt>
movapd %xmm0,0x10(%rsp)
movapd 0x60(%rsp),%xmm0
mov    %ebp,%edi
call   10b0 <pow@plt>
movapd (%rsp),%xmm1
unpcklpd 0xa0(%rsp),%xmm1
movapd 0x10(%rsp),%xmm2
unpcklpd %xmm0,%xmm2
divpd  %xmm2,%xmm1
movapd %xmm1,%xmm0
jmp    1519 <eppO+0x389>
mov    0x70(%rsp),%rax
movq   $0x0,(%rax)
mov    0x78(%rsp),%rax
movq   $0x0,(%rax)
mov    0x50(%rsp),%rax
test   %eax,%eax
jle    182e <eppO+0x69e>
mov    %eax,%ecx
cmp    $0x1,%eax
jne    177b <eppO+0x5eb>
xor    %eax,%eax
test   $0x1,%cl
je     182e <eppO+0x69e>
cmpl   $0x0,(%r12,%rax,4)
je     182e <eppO+0x69e>
movsd  0x0(%r13,%rax,8),%xmm0
xorpd  0xba7(%rip),%xmm0
movlpd %xmm0,0x0(%r13,%rax,8)
jmp    182e <eppO+0x69e>
movapd 0x10(%rsp),%xmm0
unpckhpd %xmm0,%xmm0
mulsd  %xmm3,%xmm0
movsd  0xb5d(%rip),%xmm1
addsd  %xmm2,%xmm1
cvttsd2si %xmm1,%ebp
mov    %ebp,%edi
call   10b0 <pow@plt>
movapd %xmm0,0x40(%rsp)
movaps (%rsp),%xmm0
movlhps %xmm0,%xmm0
movaps %xmm0,(%rsp)
movapd (%rsp),%xmm0
movapd 0x10(%rsp),%xmm1
mulpd  %xmm1,%xmm0
movapd %xmm0,(%rsp)
mulsd  0x30(%rsp),%xmm1
movapd %xmm1,%xmm0
mov    %ebp,%edi
call   10b0 <pow@plt>
unpcklpd 0x40(%rsp),%xmm0
movapd (%rsp),%xmm1
divpd  %xmm0,%xmm1
movapd %xmm1,(%rsp)
movapd (%rsp),%xmm0
mov    0x50(%rsp),%r15
mov    %r13,0x40(%rsp)
movapd %xmm0,(%rsp)
mov    %r12,0xb0(%rsp)
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
movapd (%rsp),%xmm0
movapd %xmm1,0x10(%rsp)
subsd  %xmm1,%xmm0
call   1050 <fabs@plt>
movapd (%rsp),%xmm0
movapd %xmm0,%xmm2
test   %eax,%eax
jle    156b <eppO+0x3db>
movapd 0x10(%rsp),%xmm2
addsd  %xmm0,%xmm2
mulsd  0xabd(%rip),%xmm2
movsd  0x28(%rsp),%xmm1
movsd  0xa87(%rip),%xmm3
subsd  %xmm1,%xmm3
cvttsd2si %xmm3,%eax
mov    %eax,0x94(%rsp)
mov    %r15d,%eax
mov    %rax,0x80(%rsp)
mov    $0x1,%eax
xor    %ebp,%ebp
lea    0x98(%rsp),%r12
lea    0x5c(%rsp),%r13
movl   $0x0,0x20(%rsp)
jmp    15e6 <eppO+0x456>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movapd %xmm0,%xmm3
unpckhpd %xmm0,%xmm3
movapd %xmm0,%xmm2
addsd  %xmm3,%xmm2
mulsd  0xa50(%rip),%xmm2
cmpl   $0x3e8,0x20(%rsp)
je     1847 <eppO+0x6b7>
test   %r15d,%r15d
movapd %xmm0,(%rsp)
movapd %xmm2,0x30(%rsp)
mov    %eax,0x60(%rsp)
jle    1690 <eppO+0x500>
xorpd  %xmm0,%xmm0
xor    %r15d,%r15d
mov    %rbx,%r14
mov    0x80(%rsp),%rbx
movsd  %xmm0,0x10(%rsp)
mov    0x40(%rsp),%rax
movsd  (%rax,%r15,8),%xmm0
movsd  (%r14,%r15,8),%xmm3
mov    %r12,%rdi
mov    %r13,%rsi
movapd 0x30(%rsp),%xmm2
call   1090 <zerofind@plt>
movsd  0x98(%rsp),%xmm0
subsd  (%r14,%r15,8),%xmm0
call   1050 <fabs@plt>
movsd  0x28(%rsp),%xmm1
xorps  %xmm3,%xmm3
cvtsi2sd %eax,%xmm3
maxsd  0x10(%rsp),%xmm3
movsd  0x98(%rsp),%xmm0
movsd  %xmm0,(%r14,%r15,8)
add    0x5c(%rsp),%ebp
add    $0x1,%r15
movapd %xmm3,%xmm0
cmp    %r15,%rbx
jne    1610 <eppO+0x480>
jmp    1697 <eppO+0x507>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorpd  %xmm3,%xmm3
mov    %rbx,%r14
movsd  %xmm3,0x10(%rsp)
addl   $0x1,0x20(%rsp)
mov    %r14,%rdi
movapd %xmm1,%xmm0
mov    0x50(%rsp),%r15
mov    %r15d,%esi
call   1060 <norm@plt>
mov    0x94(%rsp),%edi
call   10b0 <pow@plt>
mulsd  0x88(%rsp),%xmm0
subsd  0x30(%rsp),%xmm0
movsd  %xmm0,0xa0(%rsp)
call   1050 <fabs@plt>
test   %eax,%eax
mov    %r14,%rbx
jle    18d2 <eppO+0x742>
movapd (%rsp),%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
subsd  %xmm1,%xmm0
call   1050 <fabs@plt>
test   %eax,%eax
jle    18d2 <eppO+0x742>
movsd  0xa0(%rsp),%xmm0
ucomisd 0x91f(%rip),%xmm0
jbe    1740 <eppO+0x5b0>
movapd (%rsp),%xmm0
movlpd 0x30(%rsp),%xmm0
mov    $0x1,%eax
cmpl   $0x0,0x60(%rsp)
jmp    1752 <eppO+0x5c2>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xor    %eax,%eax
movapd (%rsp),%xmm0
unpcklpd 0x30(%rsp),%xmm0
cmpl   $0x1,0x60(%rsp)
movsd  0x28(%rsp),%xmm1
movsd  0x10(%rsp),%xmm3
jne    15c0 <eppO+0x430>
movsd  0x8c4(%rip),%xmm2
ucomisd %xmm3,%xmm2
jb     15c0 <eppO+0x430>
jmp    18d2 <eppO+0x742>
mov    %ecx,%edx
and    $0xfffffffe,%edx
xor    %eax,%eax
movapd 0x8b6(%rip),%xmm0
jmp    179d <eppO+0x60d>
nopl   0x0(%rax)
add    $0x2,%rax
cmp    %rax,%rdx
je     1476 <eppO+0x2e6>
cmpl   $0x0,(%r12,%rax,4)
je     17b6 <eppO+0x626>
movsd  0x0(%r13,%rax,8),%xmm1
xorpd  %xmm0,%xmm1
movlpd %xmm1,0x0(%r13,%rax,8)
cmpl   $0x0,0x4(%r12,%rax,4)
je     1790 <eppO+0x600>
movsd  0x8(%r13,%rax,8),%xmm1
xorpd  %xmm0,%xmm1
movlpd %xmm1,0x8(%r13,%rax,8)
jmp    1790 <eppO+0x600>
mov    0x50(%rsp),%r8
test   %r8d,%r8d
mov    0x78(%rsp),%rdx
mov    0x70(%rsp),%rsi
movsd  0x88(%rsp),%xmm0
jle    1820 <eppO+0x690>
mov    %r8d,%ecx
cmp    $0x1,%r8d
jne    19c8 <eppO+0x838>
xor    %eax,%eax
test   $0x1,%cl
je     1820 <eppO+0x690>
cmpl   $0x0,(%r12,%rax,4)
je     1820 <eppO+0x690>
movsd  0x0(%r13,%rax,8),%xmm1
xorpd  0x827(%rip),%xmm1
movlpd %xmm1,0x0(%r13,%rax,8)
mov    %rbx,%rdi
mov    %r13,%rcx
xor    %r9d,%r9d
call   1080 <eppInf@plt>
mov    %r12,%rdi
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <free@plt>
movapd %xmm2,0x30(%rsp)
movapd %xmm0,(%rsp)
subsd  %xmm3,%xmm0
movapd %xmm3,0x60(%rsp)
call   1050 <fabs@plt>
movapd 0x60(%rsp),%xmm2
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x7ba(%rip),%xmm1
mulsd  %xmm2,%xmm1
movl   $0x3e8,0x20(%rsp)
ucomisd %xmm0,%xmm1
jae    18d2 <eppO+0x742>
lea    0x7c1(%rip),%rdi
mov    $0x3e8,%esi
xor    %eax,%eax
call   1040 <printf@plt>
lea    0x7d9(%rip),%rdi
movaps (%rsp),%xmm0
movapd 0x60(%rsp),%xmm1
movsd  0x10(%rsp),%xmm2
movsd  0xa0(%rsp),%xmm3
mov    $0x4,%al
call   1040 <printf@plt>
lea    0x7d2(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
jmp    1945 <eppO+0x7b5>
test   %r15d,%r15d
mov    0xb0(%rsp),%rdi
mov    0x40(%rsp),%rdx
jle    1924 <eppO+0x794>
cmp    $0x1,%r15d
jne    1957 <eppO+0x7c7>
xor    %eax,%eax
mov    0x80(%rsp),%rsi
test   $0x1,%sil
je     1924 <eppO+0x794>
cmpl   $0x0,(%rdi,%rax,4)
je     1924 <eppO+0x794>
movsd  (%rbx,%rax,8),%xmm0
movapd 0x733(%rip),%xmm1
xorpd  %xmm1,%xmm0
movlpd %xmm0,(%rbx,%rax,8)
movsd  (%rdx,%rax,8),%xmm0
xorpd  %xmm1,%xmm0
movlpd %xmm0,(%rdx,%rax,8)
call   1030 <free@plt>
mov    0x70(%rsp),%rax
movaps 0x30(%rsp),%xmm0
movsd  %xmm0,(%rax)
mov    0x78(%rsp),%rax
mov    0x20(%rsp),%ecx
mov    %ecx,(%rax)
mov    %ebp,0x4(%rax)
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x80(%rsp),%rsi
mov    %esi,%ecx
and    $0xfffffffe,%ecx
xor    %eax,%eax
movapd 0x6d2(%rip),%xmm0
jmp    197d <eppO+0x7ed>
add    $0x2,%rax
cmp    %rax,%rcx
je     18f4 <eppO+0x764>
cmpl   $0x0,(%rdi,%rax,4)
je     199f <eppO+0x80f>
movsd  (%rbx,%rax,8),%xmm1
xorpd  %xmm0,%xmm1
movlpd %xmm1,(%rbx,%rax,8)
movsd  (%rdx,%rax,8),%xmm1
xorpd  %xmm0,%xmm1
movlpd %xmm1,(%rdx,%rax,8)
cmpl   $0x0,0x4(%rdi,%rax,4)
je     1970 <eppO+0x7e0>
movsd  0x8(%rbx,%rax,8),%xmm1
xorpd  %xmm0,%xmm1
movlpd %xmm1,0x8(%rbx,%rax,8)
movsd  0x8(%rdx,%rax,8),%xmm1
xorpd  %xmm0,%xmm1
movlpd %xmm1,0x8(%rdx,%rax,8)
jmp    1970 <eppO+0x7e0>
mov    %ecx,%edi
and    $0xfffffffe,%edi
xor    %eax,%eax
movapd 0x669(%rip),%xmm2
jmp    19ed <eppO+0x85d>
nopl   0x0(%rax)
add    $0x2,%rax
cmp    %rax,%rdi
je     17fe <eppO+0x66e>
cmpl   $0x0,(%r12,%rax,4)
je     1a06 <eppO+0x876>
movsd  0x0(%r13,%rax,8),%xmm1
xorpd  %xmm2,%xmm1
movlpd %xmm1,0x0(%r13,%rax,8)
cmpl   $0x0,0x4(%r12,%rax,4)
je     19e0 <eppO+0x850>
movsd  0x8(%r13,%rax,8),%xmm1
xorpd  %xmm2,%xmm1
movlpd %xmm1,0x8(%r13,%rax,8)
jmp    19e0 <eppO+0x850>

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

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