int zrati_(double *zr, double *zi, double *fnu, int *n, double *cyr,
           double *cyi, double *tol) {
  static double czeror = 0.;
  static double czeroi = 0.;
  static double coner = 1.;
  static double conei = 0.;
  static double rt2 = 1.41421356237309505;
  int i__1;
  double d__1;
  int i__, k;
  double ak;
  int id, kk;
  double az, ap1, ap2, p1i, p2i, t1i, p1r, p2r, t1r, arg, rak, rho;
  int inu;
  double pti, tti, rzi, ptr, ttr, rzr, rap1, flam, dfnu, fdnu;
  int magz;
  int idnu;
  double fnup;
  double test, test1, amagz;
  int itime;
  double cdfnui, cdfnur;
  --cyi;
  --cyr;
  az = zabs_(zr, zi);
  inu = (int)((float)(*fnu));
  idnu = inu + *n - 1;
  magz = (int)((float)az);
  amagz = (double)((float)(magz + 1));
  fdnu = (double)((float)idnu);
  fnup = ((amagz) >= (fdnu) ? (amagz) : (fdnu));
  id = idnu - magz - 1;
  itime = 1;
  k = 1;
  ptr = 1. / az;
  rzr = ptr * (*zr + *zr) * ptr;
  rzi = -ptr * (*zi + *zi) * ptr;
  t1r = rzr * fnup;
  t1i = rzi * fnup;
  p2r = -t1r;
  p2i = -t1i;
  p1r = coner;
  p1i = conei;
  t1r += rzr;
  t1i += rzi;
  if (id > 0) {
    id = 0;
  }
  ap2 = zabs_(&p2r, &p2i);
  ap1 = zabs_(&p1r, &p1i);
  arg = (ap2 + ap2) / (ap1 * *tol);
  test1 = sqrt(arg);
  test = test1;
  rap1 = 1. / ap1;
  p1r *= rap1;
  p1i *= rap1;
  p2r *= rap1;
  p2i *= rap1;
  ap2 *= rap1;
L10:
  ++k;
  ap1 = ap2;
  ptr = p2r;
  pti = p2i;
  p2r = p1r - (t1r * ptr - t1i * pti);
  p2i = p1i - (t1r * pti + t1i * ptr);
  p1r = ptr;
  p1i = pti;
  t1r += rzr;
  t1i += rzi;
  ap2 = zabs_(&p2r, &p2i);
  if (ap1 <= test) {
    goto L10;
  }
  if (itime == 2) {
    goto L20;
  }
  ak = zabs_(&t1r, &t1i) * .5;
  flam = ak + sqrt(ak * ak - 1.);
  d__1 = ap2 / ap1;
  rho = ((d__1) <= (flam) ? (d__1) : (flam));
  test = test1 * sqrt(rho / (rho * rho - 1.));
  itime = 2;
  goto L10;
L20:
  kk = k + 1 - id;
  ak = (double)((float)kk);
  t1r = ak;
  t1i = czeroi;
  dfnu = *fnu + (double)((float)(*n - 1));
  p1r = 1. / ap2;
  p1i = czeroi;
  p2r = czeror;
  p2i = czeroi;
  i__1 = kk;
  for (i__ = 1; i__ <= i__1; ++i__) {
    ptr = p1r;
    pti = p1i;
    rap1 = dfnu + t1r;
    ttr = rzr * rap1;
    tti = rzi * rap1;
    p1r = ptr * ttr - pti * tti + p2r;
    p1i = ptr * tti + pti * ttr + p2i;
    p2r = ptr;
    p2i = pti;
    t1r -= coner;
  }
  if (p1r != czeror || p1i != czeroi) {
    goto L40;
  }
  p1r = *tol;
  p1i = *tol;
L40:
  zdiv_(&p2r, &p2i, &p1r, &p1i, &cyr[*n], &cyi[*n]);
  if (*n == 1) {
    return 0;
  }
  k = *n - 1;
  ak = (double)((float)k);
  t1r = ak;
  t1i = czeroi;
  cdfnur = *fnu * rzr;
  cdfnui = *fnu * rzi;
  i__1 = *n;
  for (i__ = 2; i__ <= i__1; ++i__) {
    ptr = cdfnur + (t1r * rzr - t1i * rzi) + cyr[k + 1];
    pti = cdfnui + (t1r * rzi + t1i * rzr) + cyi[k + 1];
    ak = zabs_(&ptr, &pti);
    if (ak != czeror) {
      goto L50;
    }
    ptr = *tol;
    pti = *tol;
    ak = *tol * rt2;
  L50:
    rak = coner / ak;
    cyr[k] = rak * ptr * rak;
    cyi[k] = -rak * pti * rak;
    t1r -= coner;
    --k;
  }
  return 0;
}


x86 assembly (clang, -O0):
<zrati_>:
push   %rbp
mov    %rsp,%rbp
sub    $0x180,%rsp
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
mov    -0x38(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    $0x0,%al
call   1040 <zabs_@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
cvtsd2ss %xmm0,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0xc4(%rbp)
mov    -0xc4(%rbp),%eax
mov    -0x28(%rbp),%rcx
add    (%rcx),%eax
sub    $0x1,%eax
mov    %eax,-0x120(%rbp)
movsd  -0x68(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
cvttss2si %xmm0,%eax
mov    %eax,-0x11c(%rbp)
mov    -0x11c(%rbp),%eax
add    $0x1,%eax
cvtsi2ss %eax,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
cvtsi2ssl -0x120(%rbp),%xmm0
ff
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
ucomisd -0x118(%rbp),%xmm0
ff
jb     121d <zrati_+0xed>
movsd  -0x140(%rbp),%xmm0
ff
movsd  %xmm0,-0x160(%rbp)
ff
jmp    122d <zrati_+0xfd>
movsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
mov    -0x120(%rbp),%eax
sub    -0x11c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x5c(%rbp)
movl   $0x1,-0x144(%rbp)
movl   $0x1,-0x50(%rbp)
movsd  0xd98(%rip),%xmm0
divsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
addsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x18(%rbp),%rax
addsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
mulsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0x2cce(%rip),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0x2ce6(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0xf8(%rbp),%xmm0
ff
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
cmpl   $0x0,-0x5c(%rbp)
jle    13c0 <zrati_+0x290>
movl   $0x0,-0x5c(%rbp)
lea    -0xa0(%rbp),%rdi
lea    -0x88(%rbp),%rsi
mov    $0x0,%al
call   1040 <zabs_@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x78(%rbp)
lea    -0x98(%rbp),%rdi
lea    -0x80(%rbp),%rsi
mov    $0x0,%al
call   1040 <zabs_@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
mov    0x10(%rbp),%rax
mulsd  (%rax),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
call   1050 <sqrt@plt>
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x138(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
movsd  0xbb7(%rip),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x100(%rbp),%xmm0
ff
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm3
ff
movsd  -0x90(%rbp),%xmm2
ff
mulsd  -0xd0(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm1
ff
movsd  -0xd0(%rbp),%xmm3
ff
movsd  -0x90(%rbp),%xmm2
ff
mulsd  -0xe8(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0xf8(%rbp),%xmm0
ff
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
lea    -0xa0(%rbp),%rdi
lea    -0x88(%rbp),%rsi
mov    $0x0,%al
call   1040 <zabs_@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x70(%rbp),%xmm1
movsd  -0x130(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jb     1608 <zrati_+0x4d8>
jmp    14c2 <zrati_+0x392>
cmpl   $0x2,-0x144(%rbp)
jne    161a <zrati_+0x4ea>
jmp    1746 <zrati_+0x616>
lea    -0xa8(%rbp),%rdi
lea    -0x90(%rbp),%rsi
mov    $0x0,%al
call   1040 <zabs_@plt>
cvtsi2sd %eax,%xmm0
movsd  0x9d5(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9a1(%rip),%xmm1
addsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x168(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x108(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jb     16bf <zrati_+0x58f>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
jmp    16cf <zrati_+0x59f>
movsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x138(%rbp),%xmm0
ff
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0xc0(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
movsd  0x8f5(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0x178(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
movl   $0x2,-0x144(%rbp)
jmp    14c2 <zrati_+0x392>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
sub    -0x5c(%rbp),%eax
mov    %eax,-0x60(%rbp)
cvtsi2ssl -0x60(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0x28e3(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
cvtsi2ss %eax,%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  0x856(%rip),%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0x2899(%rip),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0x2884(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0x287c(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x60(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     1930 <zrati_+0x800>
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  -0x100(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
mulsd  -0x100(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xd8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0x272a(%rip),%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    17f1 <zrati_+0x6c1>
movsd  -0x98(%rbp),%xmm0
ff
ucomisd 0x2710(%rip),%xmm0
jne    196a <zrati_+0x83a>
jp     196a <zrati_+0x83a>
movsd  -0x80(%rbp),%xmm0
ucomisd 0x26ff(%rip),%xmm0
jne    196a <zrati_+0x83a>
jp     196a <zrati_+0x83a>
jmp    196f <zrati_+0x83f>
jmp    198c <zrati_+0x85c>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x30(%rbp),%r8
mov    -0x28(%rbp),%rax
movslq (%rax),%rax
shl    $0x3,%rax
add    %rax,%r8
mov    -0x38(%rbp),%r9
mov    -0x28(%rbp),%rax
movslq (%rax),%rax
shl    $0x3,%rax
add    %rax,%r9
lea    -0xa0(%rbp),%rdi
lea    -0x88(%rbp),%rsi
lea    -0x98(%rbp),%rdx
lea    -0x80(%rbp),%rcx
mov    $0x0,%al
call   1030 <zdiv_@plt>
mov    -0x28(%rbp),%rax
cmpl   $0x1,(%rax)
jne    19e9 <zrati_+0x8b9>
movl   $0x0,-0x4(%rbp)
jmp    1c45 <zrati_+0xb15>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
mov    %eax,-0x50(%rbp)
cvtsi2ssl -0x50(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0x2640(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x158(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0x150(%rbp)
ff
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x2,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     1c3e <zrati_+0xb0e>
movsd  -0x158(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm1
ff
movsd  -0xf8(%rbp),%xmm3
ff
movsd  -0x90(%rbp),%xmm2
ff
mulsd  -0xe0(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
mov    -0x50(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm1
ff
movsd  -0xe0(%rbp),%xmm3
ff
movsd  -0x90(%rbp),%xmm2
ff
mulsd  -0xf8(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
mov    -0x50(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
lea    -0xe8(%rbp),%rdi
lea    -0xd0(%rbp),%rsi
mov    $0x0,%al
call   1040 <zabs_@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
ucomisd 0x2506(%rip),%xmm0
jne    1b5b <zrati_+0xa2b>
jp     1b5b <zrati_+0xa2b>
jmp    1b60 <zrati_+0xa30>
jmp    1b95 <zrati_+0xa65>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  0x24b0(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0x249b(%rip),%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
mulsd  -0xe8(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  -0xd0(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  0x2425(%rip),%xmm1
movsd  -0xa8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x50(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x50(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1a60 <zrati_+0x930>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x180,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<zrati_>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xb8,%rsp
mov    %r9,0xa0(%rsp)
mov    %r8,%r13
mov    %rcx,%rbp
mov    %rdx,%rbx
mov    %rsi,%r14
mov    %rdi,%r15
xor    %eax,%eax
call   1040 <zabs_@plt>
cvtsi2sd %eax,%xmm1
mov    %rbx,0xb0(%rsp)
movsd  (%rbx),%xmm0
cvtsd2ss %xmm0,%xmm0
mov    %rbp,0xa8(%rsp)
mov    0x0(%rbp),%ecx
add    $0xffffffff,%ecx
cvtsi2ss %eax,%xmm2
unpcklps %xmm0,%xmm2
cvttps2dq %xmm2,%xmm2
movd   %ecx,%xmm0
movdqa 0xe68(%rip),%xmm3
punpckldq %xmm0,%xmm3
paddd  %xmm2,%xmm3
cvtdq2ps %xmm3,%xmm0
movaps %xmm0,%xmm4
shufps $0x55,%xmm0,%xmm4
movaps %xmm4,%xmm5
cmpless %xmm0,%xmm5
andps  %xmm5,%xmm0
andnps %xmm4,%xmm5
orps   %xmm0,%xmm5
xorps  %xmm0,%xmm0
cvtss2sd %xmm5,%xmm0
movd   %xmm2,%eax
not    %eax
pshufd $0x55,%xmm3,%xmm2
movd   %xmm2,%r12d
add    %eax,%r12d
movsd  0xe43(%rip),%xmm4
divsd  %xmm1,%xmm4
movsd  %xmm4,0x50(%rsp)
movapd 0xe21(%rip),%xmm1
movapd %xmm4,%xmm2
movsd  (%r14),%xmm3
movhpd (%r15),%xmm3
xorpd  %xmm1,%xmm2
addpd  %xmm3,%xmm3
unpcklpd %xmm4,%xmm2
mulpd  %xmm3,%xmm2
unpcklpd %xmm4,%xmm4
mulpd  %xmm2,%xmm4
movapd %xmm4,%xmm3
unpckhpd %xmm4,%xmm3
movapd %xmm3,%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm4,%xmm0
movapd %xmm3,0x80(%rsp)
addsd  %xmm2,%xmm3
xorpd  %xmm1,%xmm2
movlpd %xmm2,0x8(%rsp)
xorpd  %xmm0,%xmm1
movlpd %xmm1,0x10(%rsp)
movabs $0x3ff0000000000000,%rax
mov    %rax,0x28(%rsp)
movq   $0x0,0x30(%rsp)
movsd  %xmm3,0x20(%rsp)
movapd %xmm4,0x60(%rsp)
addsd  %xmm4,%xmm0
movsd  %xmm0,0x38(%rsp)
lea    0x8(%rsp),%rdi
lea    0x10(%rsp),%rsi
xor    %eax,%eax
call   1040 <zabs_@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x18(%rsp)
lea    0x28(%rsp),%rdi
lea    0x30(%rsp),%rsi
xor    %eax,%eax
call   1040 <zabs_@plt>
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
movsd  0x18(%rsp),%xmm0
addsd  %xmm0,%xmm0
mov    0xf0(%rsp),%rax
movsd  (%rax),%xmm1
mulsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     12dc <zrati_+0x1ac>
sqrtsd %xmm0,%xmm0
jmp    12ed <zrati_+0x1bd>
movsd  %xmm2,0x48(%rsp)
call   1050 <sqrt@plt>
movsd  0x48(%rsp),%xmm2
movsd  %xmm0,0x40(%rsp)
mov    0xa0(%rsp),%r14
lea    -0x8(%r14),%rax
mov    %rax,0x98(%rsp)
movsd  0xd11(%rip),%xmm4
divsd  %xmm2,%xmm4
movsd  0x28(%rsp),%xmm3
mulsd  %xmm4,%xmm3
movsd  0x30(%rsp),%xmm1
mulsd  %xmm4,%xmm1
movsd  0x8(%rsp),%xmm0
mulsd  %xmm4,%xmm0
movsd  0x10(%rsp),%xmm2
mulsd  %xmm4,%xmm2
mulsd  0x18(%rsp),%xmm4
movsd  %xmm4,0x18(%rsp)
movsd  0x20(%rsp),%xmm4
movsd  0x38(%rsp),%xmm7
test   %r12d,%r12d
mov    $0x0,%eax
cmovns %eax,%r12d
mov    $0x3,%r15d
sub    %r12d,%r15d
lea    0x8(%rsp),%rbx
lea    0x10(%rsp),%rbp
mov    0xf0(%rsp),%r12
movapd 0x60(%rsp),%xmm8
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movapd %xmm2,%xmm5
mulsd  %xmm7,%xmm5
movapd %xmm4,%xmm6
mulsd  %xmm0,%xmm6
subsd  %xmm5,%xmm6
subsd  %xmm6,%xmm3
movsd  %xmm3,0x8(%rsp)
movapd %xmm0,%xmm3
mulsd  %xmm7,%xmm3
movapd 0x80(%rsp),%xmm5
addsd  %xmm4,%xmm5
mulsd  %xmm2,%xmm4
addsd  %xmm3,%xmm4
subsd  %xmm4,%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  %xmm0,0x28(%rsp)
movsd  %xmm2,0x30(%rsp)
movsd  %xmm5,0x78(%rsp)
movsd  %xmm5,0x20(%rsp)
addsd  %xmm8,%xmm7
movsd  %xmm7,0x48(%rsp)
movsd  %xmm7,0x38(%rsp)
mov    %rbx,%rdi
mov    %rbp,%rsi
xor    %eax,%eax
call   1040 <zabs_@plt>
xorps  %xmm4,%xmm4
cvtsi2sd %eax,%xmm4
movsd  0x40(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
ucomisd %xmm1,%xmm0
jb     145e <zrati_+0x32e>
movsd  0x8(%rsp),%xmm0
movsd  0x10(%rsp),%xmm2
movsd  0x28(%rsp),%xmm3
movsd  0x30(%rsp),%xmm1
add    $0x1,%r15d
movsd  %xmm4,0x18(%rsp)
movapd 0x60(%rsp),%xmm8
movsd  0x48(%rsp),%xmm7
movsd  0x78(%rsp),%xmm4
jmp    1390 <zrati_+0x260>
movsd  %xmm4,0x48(%rsp)
lea    0x20(%rsp),%rdi
lea    0x38(%rsp),%rsi
xor    %eax,%eax
call   1040 <zabs_@plt>
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
mulsd  0xba4(%rip),%xmm2
movapd %xmm2,%xmm0
mulsd  %xmm2,%xmm0
addsd  0xb9c(%rip),%xmm0
xorpd  %xmm3,%xmm3
ucomisd %xmm3,%xmm0
jb     14a7 <zrati_+0x377>
xorps  %xmm1,%xmm1
sqrtsd %xmm0,%xmm1
jmp    14c0 <zrati_+0x390>
movsd  %xmm2,0x78(%rsp)
call   1050 <sqrt@plt>
movsd  0x78(%rsp),%xmm2
xorpd  %xmm3,%xmm3
movapd %xmm0,%xmm1
addsd  %xmm2,%xmm1
movsd  0x48(%rsp),%xmm4
movapd %xmm4,%xmm2
divsd  0x18(%rsp),%xmm2
movapd %xmm2,%xmm0
cmplesd %xmm1,%xmm0
andpd  %xmm0,%xmm2
andnpd %xmm1,%xmm0
orpd   %xmm2,%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
addsd  0xb37(%rip),%xmm1
divsd  %xmm1,%xmm0
ucomisd %xmm3,%xmm0
jb     1509 <zrati_+0x3d9>
sqrtsd %xmm0,%xmm0
jmp    1514 <zrati_+0x3e4>
call   1050 <sqrt@plt>
movsd  0x48(%rsp),%xmm4
movapd 0x60(%rsp),%xmm10
movsd  0x40(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
lea    0x8(%rsp),%rbx
lea    0x10(%rsp),%rbp
movsd  %xmm1,0x40(%rsp)
nopl   0x0(%rax)
movsd  %xmm4,0x18(%rsp)
movsd  0x8(%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  0x10(%rsp),%xmm1
movsd  %xmm1,0x58(%rsp)
movsd  0x20(%rsp),%xmm2
movsd  0x38(%rsp),%xmm3
movapd %xmm2,%xmm4
movsd  0x30(%rsp),%xmm5
movapd 0x80(%rsp),%xmm6
addsd  %xmm2,%xmm6
mulsd  %xmm1,%xmm2
movsd  %xmm1,0x30(%rsp)
mulsd  %xmm3,%xmm1
mulsd  %xmm0,%xmm4
subsd  %xmm1,%xmm4
movsd  0x28(%rsp),%xmm1
subsd  %xmm4,%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  %xmm0,0x28(%rsp)
mulsd  %xmm3,%xmm0
addsd  %xmm0,%xmm2
subsd  %xmm2,%xmm5
movsd  %xmm5,0x10(%rsp)
movsd  %xmm6,0x20(%rsp)
addsd  %xmm10,%xmm3
movsd  %xmm3,0x38(%rsp)
mov    %rbx,%rdi
mov    %rbp,%rsi
xor    %eax,%eax
call   1040 <zabs_@plt>
movsd  0x40(%rsp),%xmm0
movapd 0x60(%rsp),%xmm10
xorps  %xmm4,%xmm4
cvtsi2sd %eax,%xmm4
add    $0x1,%r15d
ucomisd 0x18(%rsp),%xmm0
jae    1540 <zrati_+0x410>
xorps  %xmm0,%xmm0
cvtsi2ss %r15d,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,0x20(%rsp)
movq   $0x0,0x38(%rsp)
mov    0xa8(%rsp),%rbp
movslq 0x0(%rbp),%rax
lea    -0x1(%rax),%ecx
xorps  %xmm1,%xmm1
cvtsi2ss %ecx,%xmm1
cvtss2sd %xmm1,%xmm1
mov    0xb0(%rsp),%rbx
addsd  (%rbx),%xmm1
movsd  0x9d6(%rip),%xmm3
divsd  %xmm4,%xmm3
movsd  %xmm3,0x28(%rsp)
movq   $0x0,0x30(%rsp)
movq   $0x0,0x8(%rsp)
movq   $0x0,0x10(%rsp)
test   %r15d,%r15d
jle    1727 <zrati_+0x5f7>
xorpd  %xmm4,%xmm4
xorpd  %xmm2,%xmm2
unpcklpd %xmm3,%xmm2
movapd 0x983(%rip),%xmm8
movsd  0x99a(%rip),%xmm9
cs nopw 0x0(%rax,%rax,1)
movapd %xmm4,%xmm5
movapd %xmm2,%xmm4
movapd %xmm1,%xmm7
addsd  %xmm0,%xmm7
unpcklpd %xmm7,%xmm7
mulpd  %xmm10,%xmm7
movapd %xmm2,%xmm3
xorpd  %xmm8,%xmm3
movapd %xmm2,%xmm6
unpcklpd %xmm7,%xmm6
unpckhpd %xmm2,%xmm2
mulpd  %xmm7,%xmm2
shufpd $0x1,%xmm3,%xmm7
mulpd  %xmm6,%xmm7
addpd  %xmm7,%xmm2
addpd  %xmm5,%xmm2
addsd  %xmm9,%xmm0
add    $0xffffffff,%r15d
jne    16a0 <zrati_+0x570>
movapd %xmm2,%xmm3
unpckhpd %xmm2,%xmm3
movhpd %xmm2,0x28(%rsp)
movlpd %xmm2,0x30(%rsp)
movhpd %xmm4,0x8(%rsp)
movlpd %xmm4,0x10(%rsp)
movsd  %xmm0,0x20(%rsp)
xorpd  %xmm0,%xmm0
cmpneqsd %xmm2,%xmm0
movq   %xmm0,%rcx
and    $0x1,%ecx
jmp    1729 <zrati_+0x5f9>
xor    %ecx,%ecx
add    $0xfffffffffffffff8,%r13
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm3
jne    174f <zrati_+0x61f>
jp     174f <zrati_+0x61f>
test   %cl,%cl
jne    174f <zrati_+0x61f>
movsd  (%r12),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  %xmm0,0x30(%rsp)
lea    0x0(,%rax,8),%r8
add    %r13,%r8
mov    0x98(%rsp),%rcx
lea    (%rcx,%rax,8),%r9
lea    0x8(%rsp),%rdi
lea    0x10(%rsp),%rsi
lea    0x28(%rsp),%rdx
lea    0x30(%rsp),%rcx
xor    %eax,%eax
call   1030 <zdiv_@plt>
mov    0x0(%rbp),%ebp
cmp    $0x1,%rbp
movapd 0x60(%rsp),%xmm5
movapd 0x80(%rsp),%xmm6
je     17bb <zrati_+0x68b>
lea    -0x1(%rbp),%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,0x20(%rsp)
movq   $0x0,0x38(%rsp)
cmp    $0x2,%ebp
jge    17cf <zrati_+0x69f>
xor    %eax,%eax
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movsd  (%rbx),%xmm1
movapd %xmm6,%xmm2
mulsd  %xmm1,%xmm2
movsd  %xmm2,0x18(%rsp)
mulsd  %xmm5,%xmm1
movsd  %xmm1,0x40(%rsp)
movsd  -0x8(%r14,%rbp,8),%xmm1
xorpd  %xmm2,%xmm2
lea    0x50(%rsp),%r15
lea    0x58(%rsp),%rbx
movapd %xmm5,%xmm3
mulsd  %xmm2,%xmm3
movaps %xmm0,%xmm4
mulsd  %xmm6,%xmm4
subsd  %xmm3,%xmm4
addsd  0x18(%rsp),%xmm4
addsd  0x0(%r13,%rbp,8),%xmm4
movsd  %xmm4,0x50(%rsp)
mulsd  %xmm6,%xmm2
mulsd  %xmm5,%xmm0
addsd  %xmm2,%xmm0
addsd  0x40(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x58(%rsp)
mov    %r15,%rdi
mov    %rbx,%rsi
xor    %eax,%eax
call   1040 <zabs_@plt>
test   %eax,%eax
je     1870 <zrati_+0x740>
xorps  %xmm2,%xmm2
cvtsi2sd %eax,%xmm2
movsd  0x50(%rsp),%xmm1
movsd  0x58(%rsp),%xmm0
jmp    1892 <zrati_+0x762>
nopl   0x0(%rax,%rax,1)
movsd  (%r12),%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  %xmm0,0x58(%rsp)
movapd %xmm0,%xmm2
mulsd  0x7aa(%rip),%xmm2
movapd %xmm0,%xmm1
movapd 0x60(%rsp),%xmm5
movapd 0x80(%rsp),%xmm6
movsd  0x777(%rip),%xmm3
divsd  %xmm2,%xmm3
mulsd  %xmm3,%xmm1
mulsd  %xmm3,%xmm1
movsd  %xmm1,-0x8(%r13,%rbp,8)
movapd %xmm3,%xmm1
xorpd  0x748(%rip),%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm3,%xmm1
movsd  %xmm1,-0x10(%r14,%rbp,8)
movsd  0x20(%rsp),%xmm0
addsd  0x74b(%rip),%xmm0
movsd  %xmm0,0x20(%rsp)
cmp    $0x2,%ebp
je     17bb <zrati_+0x68b>
movsd  0x38(%rsp),%xmm2
add    $0xffffffffffffffff,%rbp
jmp    1800 <zrati_+0x6d0>

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

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