#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 DBL_EPSILON;
double fabs(double);
double rat_root(int, double, double, int);
int sqrt(int);
double sum_3(double const, double, double);
double sec_root(double *y, const double *d, const double *v, const int ri,
                const int n) {
  double dl = d[ri], dr = d[ri + 1], L = dr - dl;
  double x0l = L / 2, x0r = -L / 2;
  int i;
  double al, ar, bln, blp, brn, brp, cl, cr;
  double fn, fp, lambda0, lambda;
  double tol = L;
  if (fabs(dl) > tol)
    tol = fabs(dl);
  if (fabs(dr) > tol)
    tol = fabs(dr);
  tol *= (128 * DBL_EPSILON);
  for (;;) {
    if (fabs(x0l) == 0 || x0l < 0) {
      *y = 0;
      return dl;
    }
    if (fabs(x0r) == 0 || x0r > 0) {
      *y = 0;
      return dr;
    }
    lambda0 = fabs(x0l) < fabs(x0r) ? dl + x0l : dr + x0r;
    al = ar = cl = cr = bln = blp = brn = brp = 0;
    fn = fp = 0;
    for (i = 1; i <= ri; ++i) {
      double den = (d[i] - dl) - x0l;
      double fac = v[i] / den;
      double num = sum_3(d[i], -dr, -2 * x0r);
      fn += v[i] * fac;
      fac *= fac;
      ar += fac;
      if (num > 0)
        brp += fac * num;
      else
        brn += fac * num;
      bln += fac * (d[i] - dl);
      cl += fac * x0l * x0l;
    }
    for (i = ri + 1; i <= n; ++i) {
      double den = (d[i] - dr) - x0r;
      double fac = v[i] / den;
      double num = sum_3(d[i], -dl, -2 * x0l);
      fp += v[i] * fac;
      fac *= fac;
      al += fac;
      if (num > 0)
        blp += fac * num;
      else
        bln += fac * num;
      brp += fac * (d[i] - dr);
      cr += fac * x0r * x0r;
    }
    if (lambda0 > 0)
      fp += lambda0;
    else
      fn += lambda0;
    if (v[0] < 0)
      fp -= v[0], blp -= v[0], brp -= v[0];
    else
      fn -= v[0], bln -= v[0], brn -= v[0];
    if (fp + fn > 0) {
      x0l = rat_root(1 + al, sum_3(dl, blp, bln), cl, 1);
      lambda = dl + x0l;
      x0r = x0l - L;
    } else {
      x0r = rat_root(1 + ar, sum_3(dr, brp, brn), cr, -1);
      lambda = dr + x0r;
      x0l = x0r + L;
    }
    if (fabs(lambda - lambda0) < tol) {
      double ty = 0, fac;
      for (i = 1; i <= ri; ++i)
        fac = v[i] / ((d[i] - dl) - x0l), ty += fac * fac;
      for (i = ri + 1; i <= n; ++i)
        fac = v[i] / ((d[i] - dr) - x0r), ty += fac * fac;
      *y = 1 / sqrt(1 + ty);
      return lambda;
    }
  }
}


x86 assembly (clang, -O0):
<sec_root>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    %r8d,-0x28(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
subsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  0xe7d(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xe50(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movaps 0xe1e(%rip),%xmm1
pand   %xmm1,%xmm0
ucomisd -0xc0(%rbp),%xmm0
ff
jbe    120c <sec_root+0xdc>
movsd  -0x30(%rbp),%xmm0
movaps 0xe00(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movaps 0xde8(%rip),%xmm1
pand   %xmm1,%xmm0
ucomisd -0xc0(%rbp),%xmm0
ff
jbe    1242 <sec_root+0x112>
movsd  -0x38(%rbp),%xmm0
movaps 0xdca(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    0x2d9f(%rip),%rax
mov    (%rax),%eax
shl    $0x7,%eax
cvtsi2sd %eax,%xmm0
mulsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movaps 0xd92(%rip),%xmm1
pand   %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    128a <sec_root+0x15a>
jp     128a <sec_root+0x15a>
jmp    1298 <sec_root+0x168>
xorps  %xmm0,%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    12b2 <sec_root+0x182>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1a8b <sec_root+0x95b>
movsd  -0x50(%rbp),%xmm0
movaps 0xd42(%rip),%xmm1
pand   %xmm1,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12da <sec_root+0x1aa>
jp     12da <sec_root+0x1aa>
jmp    12ec <sec_root+0x1bc>
movsd  -0x50(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1306 <sec_root+0x1d6>
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1a8b <sec_root+0x95b>
movsd  -0x48(%rbp),%xmm1
movaps 0xcee(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0x50(%rbp),%xmm0
movaps 0xcde(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1347 <sec_root+0x217>
movsd  -0x30(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
jmp    1359 <sec_root+0x229>
movsd  -0x38(%rbp),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x24(%rbp),%eax
jg     1579 <sec_root+0x449>
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x30(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x38(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xbd8(%rip),%xmm2
mulsd  -0x50(%rbp),%xmm2
call   1040 <sum_3@plt>
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0xd0(%rbp),%xmm2
ff
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0xd8(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14f3 <sec_root+0x3c3>
movsd  -0xd0(%rbp),%xmm0
ff
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1515 <sec_root+0x3e5>
movsd  -0xd0(%rbp),%xmm0
ff
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
subsd  -0x30(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0x48(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    13cf <sec_root+0x29f>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x28(%rbp),%eax
jg     172c <sec_root+0x5fc>
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x38(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    -0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x30(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xa25(%rip),%xmm2
mulsd  -0x48(%rbp),%xmm2
call   1040 <sum_3@plt>
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0xe8(%rbp),%xmm2
ff
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0xf0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    16a0 <sec_root+0x570>
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm2
ff
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    16c2 <sec_root+0x592>
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm2
ff
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0xe8(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
subsd  -0x38(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
mulsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1582 <sec_root+0x452>
movsd  -0xb0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    175e <sec_root+0x62e>
movsd  -0xb0(%rbp),%xmm0
ff
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
jmp    1776 <sec_root+0x646>
movsd  -0xb0(%rbp),%xmm0
ff
addsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x20(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
jbe    17da <sec_root+0x6aa>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x78(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x88(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    1822 <sec_root+0x6f2>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0xa0(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x70(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x80(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0xa8(%rbp),%xmm0
ff
addsd  -0xa0(%rbp),%xmm0
ff
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    18ad <sec_root+0x77d>
movsd  0x7d1(%rip),%xmm0
addsd  -0x60(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x10c(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm2
call   1040 <sum_3@plt>
mov    -0x10c(%rbp),%edi
movsd  -0x90(%rbp),%xmm1
ff
mov    $0x1,%esi
call   1030 <rat_root@plt>
movsd  %xmm0,-0x48(%rbp)
movsd  -0x30(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
subsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    1919 <sec_root+0x7e9>
movsd  0x763(%rip),%xmm0
addsd  -0x68(%rbp),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x110(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x80(%rbp),%xmm2
call   1040 <sum_3@plt>
mov    -0x110(%rbp),%edi
movsd  -0x98(%rbp),%xmm1
ff
mov    $0xffffffff,%esi
call   1030 <rat_root@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x38(%rbp),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0xb8(%rbp),%xmm1
ff
subsd  -0xb0(%rbp),%xmm1
ff
movaps 0x6d0(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1a86 <sec_root+0x956>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x24(%rbp),%eax
jg     19ca <sec_root+0x89a>
mov    -0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
subsd  -0x30(%rbp),%xmm1
subsd  -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0x100(%rbp),%xmm2
ff
movsd  -0xf8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1958 <sec_root+0x828>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x28(%rbp),%eax
jg     1a45 <sec_root+0x915>
mov    -0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
subsd  -0x38(%rbp),%xmm1
subsd  -0x50(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
movsd  -0x100(%rbp),%xmm2
ff
movsd  -0xf8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    19d3 <sec_root+0x8a3>
movsd  0x5cb(%rip),%xmm0
addsd  -0xf8(%rbp),%xmm0
ff
cvttsd2si %xmm0,%edi
call   1050 <sqrt@plt>
mov    %eax,%ecx
mov    $0x1,%eax
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
jmp    1a8b <sec_root+0x95b>
jmp    1262 <sec_root+0x132>
movsd  -0x8(%rbp),%xmm0
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sec_root>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x168,%rsp
mov    %r8d,%r12d
mov    %ecx,%ebp
mov    %rdx,%rbx
mov    %rsi,%r15
mov    %rdi,0x90(%rsp)
movslq %ecx,%rcx
movsd  (%rsi,%rcx,8),%xmm3
lea    0x1(%rcx),%eax
mov    %rax,0xc8(%rsp)
cltq
movsd  (%rsi,%rax,8),%xmm4
movapd %xmm4,%xmm2
subsd  %xmm3,%xmm2
movsd  0xe82(%rip),%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm0,0x50(%rsp)
movsd  0xe78(%rip),%xmm0
mulsd  %xmm2,%xmm0
movapd %xmm0,0x20(%rsp)
movapd 0xe8e(%rip),%xmm0
movapd %xmm3,%xmm1
andpd  %xmm0,%xmm1
movapd %xmm2,0x110(%rsp)
maxsd  %xmm2,%xmm1
andpd  %xmm4,%xmm0
maxsd  %xmm1,%xmm0
mov    0x2e22(%rip),%rax
mov    (%rax),%eax
shl    $0x7,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x100(%rsp)
movapd 0xe59(%rip),%xmm0
movapd %xmm4,%xmm1
xorpd  %xmm0,%xmm1
movapd %xmm1,0x150(%rsp)
xorpd  %xmm3,%xmm0
movapd %xmm0,0x130(%rsp)
lea    0x1(%rcx),%rax
mov    %rax,0xc0(%rsp)
lea    0x1(%r12),%eax
mov    %eax,0x9c(%rsp)
lea    0x8(%rsi,%rcx,8),%r13
lea    (%rdx,%rcx,8),%r14
add    $0x8,%r14
mov    %r8d,%eax
mov    %rcx,0xf8(%rsp)
sub    %ecx,%eax
mov    %rax,0x108(%rsp)
xorpd  %xmm8,%xmm8
movapd %xmm4,0x40(%rsp)
mov    %ebp,0x3c(%rsp)
movapd %xmm3,0x70(%rsp)
jmp    12fb <sec_root+0x1cb>
nopl   0x0(%rax)
movsd  0x68(%rsp),%xmm2
addsd  0xdb2(%rip),%xmm2
cvttsd2si %xmm2,%eax
mov    %eax,(%rsp)
movapd 0x80(%rsp),%xmm2
movapd %xmm6,0x80(%rsp)
call   1040 <sum_3@plt>
mov    (%rsp),%edi
movaps 0x80(%rsp),%xmm1
mov    $0xffffffff,%esi
call   1030 <rat_root@plt>
movapd 0xa0(%rsp),%xmm1
xorpd  %xmm8,%xmm8
movapd 0x40(%rsp),%xmm4
movapd %xmm4,%xmm5
addsd  %xmm0,%xmm5
movapd %xmm0,0x20(%rsp)
addsd  0x110(%rsp),%xmm0
movapd %xmm0,0x50(%rsp)
movapd 0x70(%rsp),%xmm3
movapd %xmm5,%xmm0
subsd  %xmm1,%xmm0
andpd  0xd48(%rip),%xmm0
movsd  0x100(%rsp),%xmm1
ucomisd %xmm0,%xmm1
ja     185e <sec_root+0x72e>
ucomisd 0x50(%rsp),%xmm8
jae    1837 <sec_root+0x707>
xorpd  %xmm0,%xmm0
movapd 0x20(%rsp),%xmm1
ucomisd %xmm0,%xmm1
jae    1848 <sec_root+0x718>
xorpd  %xmm6,%xmm6
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x18(%rsp)
xorpd  %xmm5,%xmm5
xorpd  %xmm0,%xmm0
movapd %xmm0,0x80(%rsp)
xorpd  %xmm0,%xmm0
movsd  %xmm0,(%rsp)
xorpd  %xmm0,%xmm0
movsd  %xmm0,0x30(%rsp)
xorpd  %xmm7,%xmm7
test   %ebp,%ebp
jle    1502 <sec_root+0x3d2>
movapd 0x20(%rsp),%xmm0
mulsd  0xca8(%rip),%xmm0
movapd %xmm0,0xe0(%rsp)
movapd 0x50(%rsp),%xmm2
unpcklpd %xmm2,%xmm0
movapd %xmm0,0xd0(%rsp)
xorpd  %xmm0,%xmm0
xorpd  %xmm1,%xmm1
movsd  %xmm1,0x30(%rsp)
mov    $0x1,%ebp
xorpd  %xmm1,%xmm1
movsd  %xmm1,(%rsp)
xorpd  %xmm1,%xmm1
movapd %xmm1,0x80(%rsp)
xorpd  %xmm5,%xmm5
jmp    1461 <sec_root+0x331>
cs nopw 0x0(%rax,%rax,1)
movapd 0x70(%rsp),%xmm3
movsd  0x68(%rsp),%xmm5
movsd  0x30(%rsp),%xmm2
movapd 0xb0(%rsp),%xmm4
mulsd  (%rbx,%rbp,8),%xmm6
addsd  %xmm6,%xmm2
movsd  %xmm2,0x30(%rsp)
addsd  %xmm7,%xmm5
movapd 0x80(%rsp),%xmm6
addsd  %xmm6,%xmm1
xorpd  %xmm2,%xmm2
cmpltsd %xmm0,%xmm2
movapd %xmm2,%xmm0
andnpd %xmm1,%xmm0
andpd  %xmm6,%xmm2
orpd   %xmm0,%xmm2
movapd %xmm2,0x80(%rsp)
movsd  (%r15,%rbp,8),%xmm0
subsd  %xmm3,%xmm0
shufpd $0x2,0xd0(%rsp),%xmm0
movapd 0x50(%rsp),%xmm2
movapd %xmm2,%xmm1
mulsd  %xmm7,%xmm1
unpcklpd %xmm1,%xmm7
mulpd  %xmm0,%xmm7
movapd %xmm7,%xmm0
addpd  %xmm4,%xmm0
add    $0x1,%rbp
cmp    %rbp,0xc8(%rsp)
je     14f0 <sec_root+0x3c0>
movsd  %xmm5,0x68(%rsp)
movapd %xmm0,0xb0(%rsp)
movsd  (%r15,%rbp,8),%xmm0
movapd %xmm0,%xmm1
subsd  %xmm3,%xmm1
subsd  %xmm2,%xmm1
movsd  (%rbx,%rbp,8),%xmm2
divsd  %xmm1,%xmm2
movsd  %xmm2,0xa0(%rsp)
movaps 0x150(%rsp),%xmm1
movapd 0xe0(%rsp),%xmm2
call   1040 <sum_3@plt>
movsd  0xa0(%rsp),%xmm6
xorpd  %xmm8,%xmm8
movapd %xmm6,%xmm7
mulsd  %xmm6,%xmm7
ucomisd %xmm8,%xmm0
movapd %xmm7,%xmm1
mulsd  %xmm0,%xmm1
jbe    13c0 <sec_root+0x290>
movsd  (%rsp),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,(%rsp)
jmp    13c0 <sec_root+0x290>
cs nopw 0x0(%rax,%rax,1)
addpd  %xmm4,%xmm7
movapd 0x40(%rsp),%xmm4
mov    0x3c(%rsp),%ebp
xorpd  %xmm6,%xmm6
movapd %xmm7,%xmm2
cmp    %ebp,%r12d
movsd  %xmm5,0x68(%rsp)
movapd %xmm7,0x120(%rsp)
jle    16a0 <sec_root+0x570>
mov    %r12,%rbp
movapd 0x50(%rsp),%xmm0
mulsd  0xae1(%rip),%xmm0
movapd %xmm0,0x140(%rsp)
xorpd  %xmm0,%xmm0
xorpd  %xmm5,%xmm5
xor    %r12d,%r12d
xorpd  %xmm1,%xmm1
movsd  %xmm1,0x18(%rsp)
movapd 0x20(%rsp),%xmm3
jmp    15fc <sec_root+0x4cc>
nopl   0x0(%rax,%rax,1)
movapd 0xb0(%rsp),%xmm4
movsd  0xe0(%rsp),%xmm5
movapd 0xd0(%rsp),%xmm8
addsd  %xmm1,%xmm5
addsd  %xmm4,%xmm2
xorpd  %xmm3,%xmm3
cmpltsd %xmm0,%xmm3
movapd %xmm3,%xmm0
andnpd %xmm2,%xmm0
andpd  %xmm4,%xmm3
orpd   %xmm0,%xmm3
movapd %xmm3,%xmm2
movsd  0x0(%r13,%r12,8),%xmm0
movapd 0x40(%rsp),%xmm4
subsd  %xmm4,%xmm0
mulsd  %xmm1,%xmm0
movsd  (%rsp),%xmm3
addsd  %xmm0,%xmm3
movsd  %xmm3,(%rsp)
movapd 0x20(%rsp),%xmm3
mulsd  %xmm3,%xmm1
movhpd (%r14,%r12,8),%xmm1
movapd %xmm3,%xmm6
unpcklpd %xmm9,%xmm6
mulpd  %xmm1,%xmm6
movapd %xmm6,%xmm0
addpd  %xmm8,%xmm0
add    $0x1,%r12
cmp    %r12d,0x108(%rsp)
je     16b0 <sec_root+0x580>
movsd  %xmm5,0xe0(%rsp)
movapd %xmm2,0xb0(%rsp)
movapd %xmm0,0xd0(%rsp)
movsd  0x0(%r13,%r12,8),%xmm0
movapd %xmm0,%xmm1
subsd  %xmm4,%xmm1
subsd  %xmm3,%xmm1
movsd  (%r14,%r12,8),%xmm2
divsd  %xmm1,%xmm2
movapd %xmm2,0xa0(%rsp)
movaps 0x130(%rsp),%xmm1
movapd 0x140(%rsp),%xmm2
call   1040 <sum_3@plt>
movapd 0xa0(%rsp),%xmm9
movapd %xmm9,%xmm1
mulsd  %xmm9,%xmm1
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
movapd %xmm1,%xmm2
mulsd  %xmm0,%xmm2
jbe    1560 <sec_root+0x430>
movsd  0x18(%rsp),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,0x18(%rsp)
jmp    1560 <sec_root+0x430>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xorpd  %xmm5,%xmm5
jmp    16c7 <sec_root+0x597>
cs nopw 0x0(%rax,%rax,1)
addpd  %xmm8,%xmm6
mov    %rbp,%r12
mov    0x3c(%rsp),%ebp
movapd 0x70(%rsp),%xmm3
xorpd  %xmm8,%xmm8
movapd %xmm3,%xmm0
movapd 0x50(%rsp),%xmm3
addsd  %xmm3,%xmm0
movapd 0x952(%rip),%xmm9
andpd  %xmm9,%xmm3
movapd %xmm4,%xmm1
movapd 0x20(%rsp),%xmm4
addsd  %xmm4,%xmm1
andpd  %xmm9,%xmm4
cmpltsd %xmm4,%xmm3
andpd  %xmm3,%xmm0
andnpd %xmm1,%xmm3
movapd %xmm3,%xmm10
orpd   %xmm0,%xmm10
xorpd  %xmm3,%xmm3
cmplesd %xmm10,%xmm3
movapd %xmm3,%xmm1
movsd  0x8f5(%rip),%xmm0
andpd  %xmm0,%xmm1
andnpd %xmm10,%xmm3
orpd   %xmm1,%xmm3
addsd  0x30(%rsp),%xmm3
movapd %xmm10,%xmm1
maxsd  %xmm0,%xmm1
movapd %xmm6,%xmm9
unpckhpd %xmm6,%xmm9
addsd  %xmm1,%xmm9
movsd  (%rbx),%xmm4
ucomisd %xmm4,%xmm8
jbe    1780 <sec_root+0x650>
subsd  %xmm4,%xmm9
movsd  0x18(%rsp),%xmm0
subsd  %xmm4,%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  (%rsp),%xmm1
subsd  %xmm4,%xmm1
movapd 0x40(%rsp),%xmm0
jmp    17a9 <sec_root+0x679>
nop
subsd  %xmm4,%xmm3
subsd  %xmm4,%xmm2
movapd 0x80(%rsp),%xmm0
subsd  %xmm4,%xmm0
movapd %xmm0,0x80(%rsp)
movapd 0x40(%rsp),%xmm0
movsd  (%rsp),%xmm1
addsd  %xmm9,%xmm3
ucomisd %xmm8,%xmm3
movapd %xmm10,0xa0(%rsp)
jbe    1260 <sec_root+0x130>
addsd  0x855(%rip),%xmm5
cvttsd2si %xmm5,%eax
mov    %eax,(%rsp)
movapd 0x70(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
call   1040 <sum_3@plt>
movaps 0x120(%rsp),%xmm1
movhlps %xmm1,%xmm1
mov    (%rsp),%edi
mov    $0x1,%esi
call   1030 <rat_root@plt>
movapd 0xa0(%rsp),%xmm1
xorpd  %xmm8,%xmm8
movapd 0x70(%rsp),%xmm3
movapd 0x40(%rsp),%xmm4
movapd %xmm3,%xmm5
addsd  %xmm0,%xmm5
movapd %xmm0,0x50(%rsp)
subsd  0x110(%rsp),%xmm0
movapd %xmm0,0x20(%rsp)
jmp    12d8 <sec_root+0x1a8>
movapd %xmm3,%xmm0
mov    0x90(%rsp),%rax
jmp    1a56 <sec_root+0x926>
xorpd  %xmm8,%xmm8
movapd %xmm4,%xmm0
mov    0x90(%rsp),%rax
jmp    1a56 <sec_root+0x926>
test   %ebp,%ebp
jle    1883 <sec_root+0x753>
mov    0xc8(%rsp),%rsi
mov    %esi,%eax
add    $0xffffffffffffffff,%rsi
cmp    $0x2,%eax
jne    188c <sec_root+0x75c>
xorpd  %xmm0,%xmm0
mov    $0x1,%eax
jmp    190e <sec_root+0x7de>
xorpd  %xmm0,%xmm0
jmp    1941 <sec_root+0x811>
mov    %rsi,%rcx
and    $0xfffffffffffffffe,%rcx
neg    %rcx
xorpd  %xmm1,%xmm1
mov    $0x1,%eax
movapd 0x50(%rsp),%xmm4
cs nopw 0x0(%rax,%rax,1)
nop
movsd  (%r15,%rax,8),%xmm0
movsd  0x8(%r15,%rax,8),%xmm2
subsd  %xmm3,%xmm0
subsd  %xmm4,%xmm0
movsd  (%rbx,%rax,8),%xmm3
divsd  %xmm0,%xmm3
movsd  0x8(%rbx,%rax,8),%xmm0
mulsd  %xmm3,%xmm3
addsd  %xmm1,%xmm3
subsd  0x70(%rsp),%xmm2
subsd  %xmm4,%xmm2
divsd  %xmm2,%xmm0
mulsd  %xmm0,%xmm0
addsd  %xmm3,%xmm0
movapd 0x70(%rsp),%xmm3
lea    (%rcx,%rax,1),%rdx
add    $0x2,%rdx
add    $0x2,%rax
movapd %xmm0,%xmm1
cmp    $0x1,%rdx
jne    18b0 <sec_root+0x780>
test   $0x1,%sil
movapd 0x40(%rsp),%xmm4
je     1941 <sec_root+0x811>
movsd  (%rbx,%rax,8),%xmm1
movsd  (%r15,%rax,8),%xmm2
subsd  %xmm3,%xmm2
subsd  0x50(%rsp),%xmm2
divsd  %xmm2,%xmm1
movapd 0x40(%rsp),%xmm4
mulsd  %xmm1,%xmm1
addsd  %xmm1,%xmm0
mov    %r12d,%eax
sub    %ebp,%eax
movapd %xmm5,(%rsp)
jle    195b <sec_root+0x82b>
not    %ebp
test   $0x1,%al
jne    1964 <sec_root+0x834>
movapd 0x20(%rsp),%xmm3
jmp    19a7 <sec_root+0x877>
movapd %xmm0,%xmm1
jmp    1a24 <sec_root+0x8f4>
mov    0xf8(%rsp),%rax
movsd  0x8(%rbx,%rax,8),%xmm1
movapd %xmm4,%xmm3
movsd  0x8(%r15,%rax,8),%xmm2
subsd  %xmm4,%xmm2
movapd 0x20(%rsp),%xmm3
subsd  %xmm3,%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
add    $0x2,%rax
mov    %rax,0xc0(%rsp)
movapd %xmm1,%xmm0
add    %r12d,%ebp
movapd 0x40(%rsp),%xmm4
mov    0xc0(%rsp),%rcx
je     1a24 <sec_root+0x8f4>
mov    0x9c(%rsp),%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  (%r15,%rcx,8),%xmm1
movsd  0x8(%r15,%rcx,8),%xmm2
subsd  %xmm4,%xmm1
subsd  %xmm3,%xmm1
movsd  (%rbx,%rcx,8),%xmm3
divsd  %xmm1,%xmm3
movsd  0x8(%rbx,%rcx,8),%xmm1
mulsd  %xmm3,%xmm3
addsd  %xmm0,%xmm3
subsd  %xmm4,%xmm2
subsd  0x20(%rsp),%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm1
addsd  %xmm3,%xmm1
movapd 0x20(%rsp),%xmm3
add    $0x2,%rcx
movapd %xmm1,%xmm0
cmp    %ecx,%eax
jne    19d0 <sec_root+0x8a0>
addsd  0x5f4(%rip),%xmm1
cvttsd2si %xmm1,%edi
call   1050 <sqrt@plt>
lea    0x1(%rax),%ecx
xor    %edx,%edx
cmp    $0x3,%ecx
cmovb  %eax,%edx
xorps  %xmm8,%xmm8
cvtsi2sd %edx,%xmm8
mov    0x90(%rsp),%rax
movapd (%rsp),%xmm0
movsd  %xmm8,(%rax)
add    $0x168,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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