#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
double fabs(double);
double fmax(double, double);
int log(int);
int odrrj_(int *n, double *d__, double *e2, int *ifirst, int *ilast,
           double *rtol, int *offset, double *w, double *werr, double *work,
           int *iwork, double *pivmin, double *spdiam, int *info) {
  int i__1, i__2;
  double d__1, d__2;
  int i__, j, k, p;
  double s;
  int i1, i2, ii;
  double fac, mid;
  int cnt;
  double tmp, left;
  int iter, nint, prev, next, savi1;
  double right, width, dplus;
  int olnint, maxitr;
  --iwork;
  --work;
  --werr;
  --w;
  --e2;
  --d__;
  *info = 0;
  maxitr = (int)((log(*spdiam + *pivmin) - log(*pivmin)) / log(2.)) + 2;
  i1 = *ifirst;
  i2 = *ilast;
  nint = 0;
  prev = 0;
  i__1 = i2;
  for (i__ = i1; i__ <= i__1; ++i__) {
    k = i__ << 1;
    ii = i__ - *offset;
    left = w[ii] - werr[ii];
    mid = w[ii];
    right = w[ii] + werr[ii];
    width = right - mid;
    d__1 = fabs(left), d__2 = fabs(right);
    tmp = fmax(d__1, d__2);
    if (width < *rtol * tmp) {
      iwork[k - 1] = -1;
      if (i__ == i1 && i__ < i2) {
        i1 = i__ + 1;
      }
      if (prev >= i1 && i__ <= i2) {
        iwork[(prev << 1) - 1] = i__ + 1;
      }
    } else {
      prev = i__;
      fac = 1.;
    L20:
      cnt = 0;
      s = left;
      dplus = d__[1] - s;
      if (dplus < 0.) {
        ++cnt;
      }
      i__2 = *n;
      for (j = 2; j <= i__2; ++j) {
        dplus = d__[j] - s - e2[j - 1] / dplus;
        if (dplus < 0.) {
          ++cnt;
        }
      }
      if (cnt > i__ - 1) {
        left -= werr[ii] * fac;
        fac *= 2.;
        goto L20;
      }
      fac = 1.;
    L50:
      cnt = 0;
      s = right;
      dplus = d__[1] - s;
      if (dplus < 0.) {
        ++cnt;
      }
      i__2 = *n;
      for (j = 2; j <= i__2; ++j) {
        dplus = d__[j] - s - e2[j - 1] / dplus;
        if (dplus < 0.) {
          ++cnt;
        }
      }
      if (cnt < i__) {
        right += werr[ii] * fac;
        fac *= 2.;
        goto L50;
      }
      ++nint;
      iwork[k - 1] = i__ + 1;
      iwork[k] = cnt;
    }
    work[k - 1] = left;
    work[k] = right;
  }
  savi1 = i1;
  iter = 0;
L80:
  prev = i1 - 1;
  i__ = i1;
  olnint = nint;
  i__1 = olnint;
  for (p = 1; p <= i__1; ++p) {
    k = i__ << 1;
    ii = i__ - *offset;
    next = iwork[k - 1];
    left = work[k - 1];
    right = work[k];
    mid = (left + right) * .5;
    width = right - mid;
    d__1 = fabs(left), d__2 = fabs(right);
    tmp = fmax(d__1, d__2);
    if (width < *rtol * tmp || iter == maxitr) {
      --nint;
      iwork[k - 1] = 0;
      if (i1 == i__) {
        i1 = next;
      } else {
        if (prev >= i1) {
          iwork[(prev << 1) - 1] = next;
        }
      }
      i__ = next;
      goto L100;
    }
    prev = i__;
    cnt = 0;
    s = mid;
    dplus = d__[1] - s;
    if (dplus < 0.) {
      ++cnt;
    }
    i__2 = *n;
    for (j = 2; j <= i__2; ++j) {
      dplus = d__[j] - s - e2[j - 1] / dplus;
      if (dplus < 0.) {
        ++cnt;
      }
    }
    if (cnt <= i__ - 1) {
      work[k - 1] = mid;
    } else {
      work[k] = mid;
    }
    i__ = next;
  L100:;
  }
  ++iter;
  if (nint > 0 && iter <= maxitr) {
    goto L80;
  }
  i__1 = *ilast;
  for (i__ = savi1; i__ <= i__1; ++i__) {
    k = i__ << 1;
    ii = i__ - *offset;
    if (iwork[k - 1] == 0) {
      w[ii] = (work[k - 1] + work[k]) * .5;
      werr[ii] = work[k] - w[ii];
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<odrrj_>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    0x30(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,0x30(%rbp)
mov    0x28(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,0x28(%rbp)
mov    0x20(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,0x20(%rbp)
mov    0x18(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,0x18(%rbp)
mov    -0x18(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x10(%rbp)
mov    0x48(%rbp),%rax
movl   $0x0,(%rax)
mov    0x40(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x38(%rbp),%rax
addsd  (%rax),%xmm0
cvttsd2si %xmm0,%edi
call   1030 <log@plt>
mov    %eax,-0xd8(%rbp)
mov    0x38(%rbp),%rax
cvttsd2si (%rax),%edi
call   1030 <log@plt>
mov    %eax,%ecx
mov    -0xd8(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0xd4(%rbp)
mov    $0x2,%edi
call   1030 <log@plt>
mov    %eax,%ecx
mov    -0xd4(%rbp),%eax
cltd
idiv   %ecx
add    $0x2,%eax
mov    %eax,-0xd0(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x64(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x68(%rbp)
movl   $0x0,-0xa0(%rbp)
movl   $0x0,-0xa4(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     16aa <odrrj_+0x59a>
mov    -0x4c(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x4c(%rbp),%eax
mov    0x10(%rbp),%rcx
sub    (%rcx),%eax
mov    %eax,-0x6c(%rbp)
mov    0x18(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x18(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    0x18(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movaps 0xd54(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0xb8(%rbp),%xmm0
ff
movaps 0xd3c(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
maxsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0xc0(%rbp),%xmm1
ff
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    13b0 <odrrj_+0x2a0>
mov    0x30(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movl   $0xffffffff,(%rax,%rcx,4)
mov    -0x4c(%rbp),%eax
cmp    -0x64(%rbp),%eax
jne    1374 <odrrj_+0x264>
mov    -0x4c(%rbp),%eax
cmp    -0x68(%rbp),%eax
jge    1374 <odrrj_+0x264>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
mov    -0xa4(%rbp),%eax
cmp    -0x64(%rbp),%eax
jl     13ab <odrrj_+0x29b>
mov    -0x4c(%rbp),%eax
cmp    -0x68(%rbp),%eax
jg     13ab <odrrj_+0x29b>
mov    -0x4c(%rbp),%edx
add    $0x1,%edx
mov    0x30(%rbp),%rax
mov    -0xa4(%rbp),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    166d <odrrj_+0x55d>
mov    -0x4c(%rbp),%eax
mov    %eax,-0xa4(%rbp)
movsd  0xc47(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x0,-0x84(%rbp)
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xc8(%rbp),%xmm0
ff
jbe    1413 <odrrj_+0x303>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
movl   $0x2,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x38(%rbp),%eax
jg     149a <odrrj_+0x38a>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
divsd  -0xc8(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xc8(%rbp),%xmm0
ff
jbe    1487 <odrrj_+0x377>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    148c <odrrj_+0x37c>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1423 <odrrj_+0x313>
mov    -0x84(%rbp),%eax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jle    1506 <odrrj_+0x3f6>
mov    0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0xb19(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    13c6 <odrrj_+0x2b6>
movsd  0xafa(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x0,-0x84(%rbp)
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xc8(%rbp),%xmm0
ff
jbe    1560 <odrrj_+0x450>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
movl   $0x2,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x38(%rbp),%eax
jg     15e7 <odrrj_+0x4d7>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
divsd  -0xc8(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xc8(%rbp),%xmm0
ff
jbe    15d4 <odrrj_+0x4c4>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    15d9 <odrrj_+0x4c9>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1570 <odrrj_+0x460>
mov    -0x84(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jge    1637 <odrrj_+0x527>
mov    0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0x9e8(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    1513 <odrrj_+0x403>
mov    -0xa0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa0(%rbp)
mov    -0x4c(%rbp),%edx
add    $0x1,%edx
mov    0x30(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x84(%rbp),%edx
mov    0x30(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1231 <odrrj_+0x121>
mov    -0x64(%rbp),%eax
mov    %eax,-0xac(%rbp)
movl   $0x0,-0x9c(%rbp)
mov    -0x64(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0xa4(%rbp)
mov    -0x64(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0xa0(%rbp),%eax
mov    %eax,-0xcc(%rbp)
mov    -0xcc(%rbp),%eax
mov    %eax,-0x34(%rbp)
movl   $0x1,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     19ce <odrrj_+0x8be>
mov    -0x4c(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x4c(%rbp),%eax
mov    0x10(%rbp),%rcx
sub    (%rcx),%eax
mov    %eax,-0x6c(%rbp)
mov    0x30(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0xa8(%rbp)
mov    0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
addsd  -0xb8(%rbp),%xmm0
ff
movsd  0x897(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0xb8(%rbp),%xmm0
ff
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
movaps 0x88a(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0xb8(%rbp),%xmm0
ff
movaps 0x872(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm3
movsd  -0x48(%rbp),%xmm2
movaps %xmm2,%xmm4
movaps %xmm3,%xmm0
cmpunordsd %xmm0,%xmm0
movaps %xmm0,%xmm1
pand   %xmm4,%xmm1
maxsd  %xmm3,%xmm2
pandn  %xmm2,%xmm0
por    %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0xc0(%rbp),%xmm1
ff
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
ja     181b <odrrj_+0x70b>
mov    -0x9c(%rbp),%eax
cmp    -0xd0(%rbp),%eax
jne    1896 <odrrj_+0x786>
mov    -0xa0(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xa0(%rbp)
mov    0x30(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x64(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jne    1858 <odrrj_+0x748>
mov    -0xa8(%rbp),%eax
mov    %eax,-0x64(%rbp)
jmp    1888 <odrrj_+0x778>
mov    -0xa4(%rbp),%eax
cmp    -0x64(%rbp),%eax
jl     1883 <odrrj_+0x773>
mov    -0xa8(%rbp),%edx
mov    0x30(%rbp),%rax
mov    -0xa4(%rbp),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1888 <odrrj_+0x778>
mov    -0xa8(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    19bb <odrrj_+0x8ab>
mov    -0x4c(%rbp),%eax
mov    %eax,-0xa4(%rbp)
movl   $0x0,-0x84(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xc8(%rbp),%xmm0
ff
jbe    18e9 <odrrj_+0x7d9>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
movl   $0x2,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x38(%rbp),%eax
jg     1970 <odrrj_+0x860>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x60(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
divsd  -0xc8(%rbp),%xmm1
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
xorps  %xmm0,%xmm0
ucomisd -0xc8(%rbp),%xmm0
ff
jbe    195d <odrrj_+0x84d>
mov    -0x84(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
jmp    1962 <odrrj_+0x852>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    18f9 <odrrj_+0x7e9>
mov    -0x84(%rbp),%eax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jg     19a0 <odrrj_+0x890>
movsd  -0x80(%rbp),%xmm0
mov    0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    19b2 <odrrj_+0x8a2>
movsd  -0x80(%rbp),%xmm0
mov    0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xa8(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    19c0 <odrrj_+0x8b0>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    16eb <odrrj_+0x5db>
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
cmpl   $0x0,-0xa0(%rbp)
jle    1a01 <odrrj_+0x8f1>
mov    -0x9c(%rbp),%eax
cmp    -0xd0(%rbp),%eax
jg     1a01 <odrrj_+0x8f1>
jmp    16bd <odrrj_+0x5ad>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0xac(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x34(%rbp),%eax
jg     1abd <odrrj_+0x9ad>
mov    -0x4c(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x4c(%rbp),%eax
mov    0x10(%rbp),%rcx
sub    (%rcx),%eax
mov    %eax,-0x6c(%rbp)
mov    0x30(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    1aaa <odrrj_+0x99a>
mov    0x28(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  0x58e(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x18(%rbp),%rax
movslq -0x6c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1aaf <odrrj_+0x99f>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1a13 <odrrj_+0x903>
xor    %eax,%eax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<odrrj_>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r9,0x20(%rsp)
mov    %r8,%rbp
mov    %rcx,(%rsp)
mov    %rdx,%r12
mov    %rsi,%rbx
mov    %rdi,0x30(%rsp)
mov    0x98(%rsp),%r15
mov    0xa8(%rsp),%r13
mov    0xb0(%rsp),%rax
mov    0xb8(%rsp),%rcx
movl   $0x0,(%rcx)
movsd  (%rax),%xmm0
addsd  0x0(%r13),%xmm0
cvttsd2si %xmm0,%edi
call   1030 <log@plt>
mov    %eax,%r14d
cvttsd2si 0x0(%r13),%edi
call   1030 <log@plt>
sub    %eax,%r14d
mov    $0x2,%edi
call   1030 <log@plt>
mov    %eax,%ecx
mov    %r14d,%eax
cltd
idiv   %ecx
mov    %eax,0xc(%rsp)
mov    (%rsp),%rax
mov    (%rax),%r14d
mov    %rbp,0x38(%rsp)
movslq 0x0(%rbp),%r11
xor    %eax,%eax
mov    %rax,0x28(%rsp)
cmp    %r11d,%r14d
jle    144b <odrrj_+0x33b>
mov    %r14d,%r8d
xor    %r13d,%r13d
addl   $0x2,0xc(%rsp)
movsd  0xe5f(%rip),%xmm8
movapd 0xe2f(%rip),%xmm1
xorpd  %xmm2,%xmm2
mov    %r8,0x18(%rsp)
mov    %r8d,%r10d
mov    0x20(%rsp),%r14
mov    0xa0(%rsp),%rbp
nopw   0x0(%rax,%rax,1)
test   %r13d,%r13d
jle    141e <odrrj_+0x30e>
lea    -0x1(%r10),%r8d
mov    $0x1,%esi
mov    %r13d,%edi
mov    %r10d,%r9d
jmp    1230 <odrrj_+0x120>
nopw   0x0(%rax,%rax,1)
movsd  %xmm3,-0x8(%r15,%rdx,8)
mov    %ecx,%r8d
mov    0x10(%rsp),%r10
mov    (%rsp),%edi
lea    0x1(%rsi),%eax
cmp    %r13d,%esi
mov    %eax,%esi
je     1400 <odrrj_+0x2f0>
mov    %r9d,%ecx
lea    (%rcx,%rcx,1),%eax
movslq %eax,%rdx
lea    -0x1(%rdx),%r11
mov    -0x8(%rbp,%rdx,4),%r9d
movsd  -0x10(%r15,%rdx,8),%xmm4
movsd  -0x8(%r15,%rdx,8),%xmm5
movapd %xmm4,%xmm3
addsd  %xmm5,%xmm3
mulsd  %xmm8,%xmm3
movapd %xmm5,%xmm6
subsd  %xmm3,%xmm6
andpd  %xmm1,%xmm4
andpd  %xmm1,%xmm5
movapd %xmm4,%xmm7
cmpunordsd %xmm4,%xmm7
movapd %xmm7,%xmm0
andpd  %xmm5,%xmm0
maxsd  %xmm4,%xmm5
andnpd %xmm5,%xmm7
orpd   %xmm0,%xmm7
mulsd  (%r14),%xmm7
ucomisd %xmm6,%xmm7
ja     12f0 <odrrj_+0x1e0>
mov    0x28(%rsp),%rax
cmp    0xc(%rsp),%eax
je     12f0 <odrrj_+0x1e0>
mov    %edi,(%rsp)
mov    %r10,0x10(%rsp)
mov    %r13d,%r10d
movsd  (%rbx),%xmm5
subsd  %xmm3,%xmm5
xor    %r8d,%r8d
ucomisd %xmm5,%xmm2
seta   %r8b
mov    0x30(%rsp),%rax
mov    (%rax),%r13d
cmp    $0x2,%r13d
jl     13e3 <odrrj_+0x2d3>
add    $0x1,%r13
mov    $0x2,%eax
cmp    $0x3,%r13d
jne    1329 <odrrj_+0x219>
movapd %xmm5,%xmm4
jmp    13a3 <odrrj_+0x293>
nopl   0x0(%rax,%rax,1)
add    $0xffffffff,%edi
movl   $0x0,-0x4(%rbp,%r11,4)
cmp    %ecx,%r10d
jne    1310 <odrrj_+0x200>
mov    %r9d,%r10d
jmp    1222 <odrrj_+0x112>
nopl   0x0(%rax)
cmp    %r10d,%r8d
jl     1222 <odrrj_+0x112>
lea    (%r8,%r8,1),%eax
cltq
mov    %r9d,-0x8(%rbp,%rax,4)
jmp    1222 <odrrj_+0x112>
lea    -0x2(%r13),%r15
and    $0xfffffffffffffffe,%r15
neg    %r15
mov    $0x2,%eax
nopl   0x0(%rax)
movsd  -0x8(%rbx,%rax,8),%xmm0
movsd  (%rbx,%rax,8),%xmm4
subsd  %xmm3,%xmm0
movsd  -0x10(%r12,%rax,8),%xmm6
divsd  %xmm5,%xmm6
subsd  %xmm6,%xmm0
xor    %r14d,%r14d
ucomisd %xmm0,%xmm2
movsd  -0x8(%r12,%rax,8),%xmm5
seta   %r14b
add    %r8d,%r14d
subsd  %xmm3,%xmm4
divsd  %xmm0,%xmm5
subsd  %xmm5,%xmm4
xor    %r8d,%r8d
ucomisd %xmm4,%xmm2
seta   %r8b
add    %r14d,%r8d
lea    (%r15,%rax,1),%rdi
add    $0x2,%rdi
add    $0x2,%rax
movapd %xmm4,%xmm5
cmp    $0x2,%rdi
jne    1340 <odrrj_+0x230>
test   $0x1,%r13b
mov    0xa0(%rsp),%rbp
mov    0x98(%rsp),%r15
mov    0x20(%rsp),%r14
je     13e3 <odrrj_+0x2d3>
movsd  -0x8(%rbx,%rax,8),%xmm0
subsd  %xmm3,%xmm0
movsd  -0x10(%r12,%rax,8),%xmm5
divsd  %xmm4,%xmm5
subsd  %xmm5,%xmm0
xor    %eax,%eax
ucomisd %xmm0,%xmm2
seta   %al
add    %eax,%r8d
cmp    %ecx,%r8d
mov    %r10d,%r13d
jge    1210 <odrrj_+0x100>
movsd  %xmm3,-0x8(%r15,%r11,8)
jmp    1217 <odrrj_+0x107>
nopl   0x0(%rax,%rax,1)
test   %edi,%edi
jle    141e <odrrj_+0x30e>
mov    0x28(%rsp),%rcx
lea    0x1(%rcx),%eax
mov    %edi,%r13d
cmp    0xc(%rsp),%ecx
mov    %rax,0x28(%rsp)
jl     11f0 <odrrj_+0xe0>
mov    0x38(%rsp),%rax
mov    (%rax),%eax
mov    0x18(%rsp),%rdi
cmp    %eax,%edi
mov    0x80(%rsp),%r8
jle    180b <odrrj_+0x6fb>
xor    %eax,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movslq %r14d,%rdi
lea    0x1(%r11),%edx
xor    %r10d,%r10d
movapd 0xba2(%rip),%xmm10
movapd 0xba9(%rip),%xmm8
movsd  0xbb0(%rip),%xmm9
xorpd  %xmm3,%xmm3
xor    %r13d,%r13d
mov    0x80(%rsp),%r9
mov    %r11,0x40(%rsp)
jmp    1503 <odrrj_+0x3f3>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r13d
mov    %rdi,%rax
add    $0x1,%rax
mov    (%rsp),%rcx
lea    -0x1(%rcx),%rsi
mov    %rsi,0x18(%rsp)
mov    0xa0(%rsp),%rsi
mov    %eax,-0x8(%rsi,%rcx,4)
mov    %rax,%rcx
mov    %r14d,%r8d
mov    %edi,%r10d
mov    0x80(%rsp),%r14
mov    %edx,%r9d
mov    0x40(%rsp),%r11
movslq 0x10(%rsp),%rdx
mov    %ebp,-0x4(%rsi,%rdx,4)
mov    %eax,%ebp
mov    %rcx,%rdi
mov    (%rsp),%rax
mov    %r9d,%edx
mov    %r14,%r9
mov    0x18(%rsp),%rsi
movsd  %xmm5,-0x8(%r15,%rsi,8)
movsd  %xmm4,-0x8(%r15,%rax,8)
mov    %r8d,%r14d
cmp    %edx,%ebp
je     11bb <odrrj_+0xab>
movslq (%r9),%rax
mov    %rdi,%rcx
sub    %rax,%rcx
mov    0x88(%rsp),%rax
movsd  -0x8(%rax,%rcx,8),%xmm5
mov    0x90(%rsp),%rax
movsd  -0x8(%rax,%rcx,8),%xmm11
movapd %xmm5,%xmm4
addsd  %xmm11,%xmm4
movapd %xmm4,%xmm0
subsd  %xmm5,%xmm0
subsd  %xmm11,%xmm5
movapd %xmm5,%xmm1
andpd  %xmm10,%xmm1
movapd %xmm4,%xmm2
andpd  %xmm10,%xmm2
movapd %xmm1,%xmm6
cmpunordsd %xmm1,%xmm6
movapd %xmm6,%xmm7
andpd  %xmm2,%xmm7
maxsd  %xmm1,%xmm2
andnpd %xmm2,%xmm6
orpd   %xmm7,%xmm6
mov    0x20(%rsp),%rax
mulsd  (%rax),%xmm6
lea    (%rdi,%rdi,1),%ecx
ucomisd %xmm0,%xmm6
movslq %ecx,%rax
mov    %rax,(%rsp)
jbe    15d0 <odrrj_+0x4c0>
lea    -0x1(%rax),%rsi
mov    0xa0(%rsp),%rcx
movl   $0xffffffff,-0x8(%rcx,%rax,4)
ff
lea    0x1(%rdi),%rbp
cmp    %r11,%rdi
mov    %r14d,%eax
cmovl  %ebp,%eax
cmp    %edi,%r14d
cmovne %r14d,%eax
mov    %rax,%r8
cmp    %eax,%r10d
jge    17e0 <odrrj_+0x6d0>
mov    %rbp,%rdi
mov    (%rsp),%rax
jmp    14ea <odrrj_+0x3da>
nopw   0x0(%rax,%rax,1)
mov    %ecx,0x10(%rsp)
movsd  (%rbx),%xmm13
mov    0x30(%rsp),%rax
mov    (%rax),%esi
movapd %xmm11,%xmm12
xorpd  %xmm8,%xmm12
lea    0x1(%rsi),%r9d
lea    -0x2(%r9),%r8
lea    -0x3(%r9),%r10
and    $0xfffffffffffffffe,%r8
neg    %r8
movapd %xmm9,%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movapd %xmm13,%xmm7
subsd  %xmm5,%xmm7
xor    %ecx,%ecx
ucomisd %xmm7,%xmm3
seta   %cl
cmp    $0x2,%esi
jl     16c8 <odrrj_+0x5b8>
mov    $0x2,%eax
test   %r10,%r10
je     169e <odrrj_+0x58e>
movapd %xmm7,%xmm1
nopl   0x0(%rax)
movsd  -0x8(%rbx,%rax,8),%xmm6
movsd  (%rbx,%rax,8),%xmm7
subsd  %xmm5,%xmm6
movsd  -0x10(%r12,%rax,8),%xmm0
divsd  %xmm1,%xmm0
subsd  %xmm0,%xmm6
xor    %ebp,%ebp
ucomisd %xmm6,%xmm3
movsd  -0x8(%r12,%rax,8),%xmm0
seta   %bpl
add    %ecx,%ebp
subsd  %xmm5,%xmm7
divsd  %xmm6,%xmm0
subsd  %xmm0,%xmm7
xor    %ecx,%ecx
ucomisd %xmm7,%xmm3
seta   %cl
add    %ebp,%ecx
lea    (%r8,%rax,1),%rbp
add    $0x2,%rbp
add    $0x2,%rax
movapd %xmm7,%xmm1
cmp    $0x2,%rbp
jne    1640 <odrrj_+0x530>
test   $0x1,%r9b
je     16c8 <odrrj_+0x5b8>
movsd  -0x8(%rbx,%rax,8),%xmm0
subsd  %xmm5,%xmm0
movsd  -0x10(%r12,%rax,8),%xmm1
divsd  %xmm7,%xmm1
subsd  %xmm1,%xmm0
xor    %eax,%eax
ucomisd %xmm0,%xmm3
seta   %al
add    %eax,%ecx
movslq %ecx,%rax
cmp    %rax,%rdi
jg     16f0 <odrrj_+0x5e0>
movapd %xmm12,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm0,%xmm5
addsd  %xmm2,%xmm2
jmp    1610 <odrrj_+0x500>
cs nopw 0x0(%rax,%rax,1)
movapd %xmm9,%xmm2
cs nopw 0x0(%rax,%rax,1)
nop
movapd %xmm13,%xmm6
subsd  %xmm4,%xmm6
xor    %ebp,%ebp
ucomisd %xmm6,%xmm3
seta   %bpl
cmp    $0x2,%esi
jl     17b8 <odrrj_+0x6a8>
mov    $0x2,%eax
test   %r10,%r10
je     178e <odrrj_+0x67e>
movapd %xmm6,%xmm1
nopw   0x0(%rax,%rax,1)
movsd  -0x8(%rbx,%rax,8),%xmm0
movsd  (%rbx,%rax,8),%xmm6
subsd  %xmm4,%xmm0
movsd  -0x10(%r12,%rax,8),%xmm7
divsd  %xmm1,%xmm7
subsd  %xmm7,%xmm0
xor    %ecx,%ecx
ucomisd %xmm0,%xmm3
movsd  -0x8(%r12,%rax,8),%xmm1
seta   %cl
add    %ebp,%ecx
subsd  %xmm4,%xmm6
divsd  %xmm0,%xmm1
subsd  %xmm1,%xmm6
xor    %ebp,%ebp
ucomisd %xmm6,%xmm3
seta   %bpl
add    %ecx,%ebp
lea    (%r8,%rax,1),%rcx
add    $0x2,%rcx
add    $0x2,%rax
movapd %xmm6,%xmm1
cmp    $0x2,%rcx
jne    1730 <odrrj_+0x620>
test   $0x1,%r9b
je     17b8 <odrrj_+0x6a8>
movsd  -0x8(%rbx,%rax,8),%xmm0
subsd  %xmm4,%xmm0
movsd  -0x10(%r12,%rax,8),%xmm1
divsd  %xmm6,%xmm1
subsd  %xmm1,%xmm0
xor    %eax,%eax
ucomisd %xmm0,%xmm3
seta   %al
add    %eax,%ebp
movslq %ebp,%rax
cmp    %rax,%rdi
jle    1490 <odrrj_+0x380>
movapd %xmm11,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm0,%xmm4
addsd  %xmm2,%xmm2
jmp    1700 <odrrj_+0x5f0>
nopw   0x0(%rax,%rax,1)
mov    %rsi,0x18(%rsp)
mov    %r9,%r14
mov    %edx,%r9d
mov    %r10,%rax
lea    (%r10,%r10,1),%eax
add    $0xffffffff,%eax
mov    %eax,0x10(%rsp)
mov    %ebp,%eax
mov    %rbp,%rcx
mov    0xa0(%rsp),%rsi
jmp    14cd <odrrj_+0x3bd>
movslq %edi,%rdx
mov    0x88(%rsp),%rcx
lea    (%rcx,%rdx,8),%rbx
add    $0xfffffffffffffff8,%rbx
mov    0x90(%rsp),%rcx
lea    (%rcx,%rdx,8),%rdx
add    $0xfffffffffffffff8,%rdx
sub    %edi,%eax
add    %edi,%edi
add    $0x1,%eax
jmp    1854 <odrrj_+0x744>
nopw   0x0(%rax,%rax,1)
add    $0x8,%rbx
add    $0x8,%rdx
add    $0x2,%edi
add    $0xffffffff,%eax
je     143a <odrrj_+0x32a>
lea    -0x1(%rdi),%esi
movslq %esi,%rsi
cmpl   $0x0,-0x4(%rbp,%rsi,4)
jne    1840 <odrrj_+0x730>
movslq (%r8),%r9
movsd  -0x8(%r15,%rsi,8),%xmm0
movslq %edi,%rsi
addsd  -0x8(%r15,%rsi,8),%xmm0
mulsd  %xmm8,%xmm0
shl    $0x3,%r9
mov    %rbx,%rcx
sub    %r9,%rcx
movsd  %xmm0,(%rcx)
movsd  -0x8(%r15,%rsi,8),%xmm1
subsd  %xmm0,%xmm1
mov    %rdx,%rcx
sub    %r9,%rcx
movsd  %xmm1,(%rcx)
jmp    1840 <odrrj_+0x730>

LLVM IR (-O0):
define i32 @odrrj_(i32* %0, double* %1, double* %2, i32* %3, i32* %4, double* %5, i32* %6, double* %7, double* %8, double* %9, i32* %10, double* %11, double* %12, i32* %13) {
%15 = alloca i32*
%16 = alloca double*
%17 = alloca double*
%18 = alloca i32*
%19 = alloca i32*
%20 = alloca double*
%21 = alloca i32*
%22 = alloca double*
%23 = alloca double*
%24 = alloca double*
%25 = alloca i32*
%26 = alloca double*
%27 = alloca double*
%28 = alloca i32*
%29 = alloca i32
%30 = alloca i32
%31 = alloca double
%32 = alloca double
%33 = alloca i32
%34 = alloca i32
%35 = alloca i32
%36 = alloca i32
%37 = alloca double
%38 = alloca i32
%39 = alloca i32
%40 = alloca i32
%41 = alloca double
%42 = alloca double
%43 = alloca i32
%44 = alloca double
%45 = alloca double
%46 = alloca i32
%47 = alloca i32
%48 = alloca i32
%49 = alloca i32
%50 = alloca i32
%51 = alloca double
%52 = alloca double
%53 = alloca double
%54 = alloca i32
%55 = alloca i32
store i32* %0, i32** %15
store double* %1, double** %16
store double* %2, double** %17
store i32* %3, i32** %18
store i32* %4, i32** %19
store double* %5, double** %20
store i32* %6, i32** %21
store double* %7, double** %22
store double* %8, double** %23
store double* %9, double** %24
store i32* %10, i32** %25
store double* %11, double** %26
store double* %12, double** %27
store i32* %13, i32** %28
%56 = load i32*, i32** %25
%57 = getelementptr inbounds i32, i32* %56, i32 -1
store i32* %57, i32** %25
%58 = load double*, double** %24
%59 = getelementptr inbounds double, double* %58, i32 -1
store double* %59, double** %24
%60 = load double*, double** %23
%61 = getelementptr inbounds double, double* %60, i32 -1
store double* %61, double** %23
%62 = load double*, double** %22
%63 = getelementptr inbounds double, double* %62, i32 -1
store double* %63, double** %22
%64 = load double*, double** %17
%65 = getelementptr inbounds double, double* %64, i32 -1
store double* %65, double** %17
%66 = load double*, double** %16
%67 = getelementptr inbounds double, double* %66, i32 -1
store double* %67, double** %16
%68 = load i32*, i32** %28
store i32 0, i32* %68
%69 = load double*, double** %27
%70 = load double, double* %69
%71 = load double*, double** %26
%72 = load double, double* %71
%73 = fadd double %70, %72
%74 = fptosi double %73 to i32
%75 = call i32 @log(i32 %74)
%76 = load double*, double** %26
%77 = load double, double* %76
%78 = fptosi double %77 to i32
%79 = call i32 @log(i32 %78)
%80 = sub nsw i32 %75, %79
%81 = call i32 @log(i32 2)
%82 = sdiv i32 %80, %81
%83 = add nsw i32 %82, 2
store i32 %83, i32* %55
%84 = load i32*, i32** %18
%85 = load i32, i32* %84
store i32 %85, i32* %38
%86 = load i32*, i32** %19
%87 = load i32, i32* %86
store i32 %87, i32* %39
store i32 0, i32* %47
store i32 0, i32* %48
%88 = load i32, i32* %39
store i32 %88, i32* %29
%89 = load i32, i32* %38
store i32 %89, i32* %33
br label %90
90: ; preds = %330, %14
%91 = load i32, i32* %33
%92 = load i32, i32* %29
%93 = icmp sle i32 %91, %92
br i1 %93, label %94, label %333
94: ; preds = %90
%95 = load i32, i32* %33
%96 = shl i32 %95, 1
store i32 %96, i32* %35
%97 = load i32, i32* %33
%98 = load i32*, i32** %21
%99 = load i32, i32* %98
%100 = sub nsw i32 %97, %99
store i32 %100, i32* %40
%101 = load double*, double** %22
%102 = load i32, i32* %40
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds double, double* %101, i64 %103
%105 = load double, double* %104
%106 = load double*, double** %23
%107 = load i32, i32* %40
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds double, double* %106, i64 %108
%110 = load double, double* %109
%111 = fsub double %105, %110
store double %111, double* %45
%112 = load double*, double** %22
%113 = load i32, i32* %40
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds double, double* %112, i64 %114
%116 = load double, double* %115
store double %116, double* %42
%117 = load double*, double** %22
%118 = load i32, i32* %40
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds double, double* %117, i64 %119
%121 = load double, double* %120
%122 = load double*, double** %23
%123 = load i32, i32* %40
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds double, double* %122, i64 %124
%126 = load double, double* %125
%127 = fadd double %121, %126
store double %127, double* %51
%128 = load double, double* %51
%129 = load double, double* %42
%130 = fsub double %128, %129
store double %130, double* %52
%131 = load double, double* %45
%132 = call double @llvm.fabs.f64(double %131)
store double %132, double* %31
%133 = load double, double* %51
%134 = call double @llvm.fabs.f64(double %133)
store double %134, double* %32
%135 = load double, double* %31
%136 = load double, double* %32
%137 = call double @llvm.maxnum.f64(double %135, double %136)
store double %137, double* %44
%138 = load double, double* %52
%139 = load double*, double** %20
%140 = load double, double* %139
%141 = load double, double* %44
%142 = fmul double %140, %141
%143 = fcmp olt double %138, %142
br i1 %143, label %144, label %178
144: ; preds = %94
%145 = load i32*, i32** %25
%146 = load i32, i32* %35
%147 = sub nsw i32 %146, 1
%148 = sext i32 %147 to i64
%149 = getelementptr inbounds i32, i32* %145, i64 %148
store i32 -1, i32* %149
%150 = load i32, i32* %33
%151 = load i32, i32* %38
%152 = icmp eq i32 %150, %151
br i1 %152, label %153, label %160
153: ; preds = %144
%154 = load i32, i32* %33
%155 = load i32, i32* %39
%156 = icmp slt i32 %154, %155
br i1 %156, label %157, label %160
157: ; preds = %153
%158 = load i32, i32* %33
%159 = add nsw i32 %158, 1
store i32 %159, i32* %38
br label %160
160: ; preds = %157, %153, %144
%161 = load i32, i32* %48
%162 = load i32, i32* %38
%163 = icmp sge i32 %161, %162
br i1 %163, label %164, label %177
164: ; preds = %160
%165 = load i32, i32* %33
%166 = load i32, i32* %39
%167 = icmp sle i32 %165, %166
br i1 %167, label %168, label %177
168: ; preds = %164
%169 = load i32, i32* %33
%170 = add nsw i32 %169, 1
%171 = load i32*, i32** %25
%172 = load i32, i32* %48
%173 = shl i32 %172, 1
%174 = sub nsw i32 %173, 1
%175 = sext i32 %174 to i64
%176 = getelementptr inbounds i32, i32* %171, i64 %175
store i32 %170, i32* %176
br label %177
177: ; preds = %168, %164, %160
br label %318
178: ; preds = %94
%179 = load i32, i32* %33
store i32 %179, i32* %48
store double 1.000000e+00, double* %41
br label %180
180: ; preds = %230, %178
store i32 0, i32* %43
%181 = load double, double* %45
store double %181, double* %37
%182 = load double*, double** %16
%183 = getelementptr inbounds double, double* %182, i64 1
%184 = load double, double* %183
%185 = load double, double* %37
%186 = fsub double %184, %185
store double %186, double* %53
%187 = load double, double* %53
%188 = fcmp olt double %187, 0.000000e+00
br i1 %188, label %189, label %192
189: ; preds = %180
%190 = load i32, i32* %43
%191 = add nsw i32 %190, 1
store i32 %191, i32* %43
br label %192
192: ; preds = %189, %180
%193 = load i32*, i32** %15
%194 = load i32, i32* %193
store i32 %194, i32* %30
store i32 2, i32* %34
br label %195
195: ; preds = %222, %192
%196 = load i32, i32* %34
%197 = load i32, i32* %30
%198 = icmp sle i32 %196, %197
br i1 %198, label %199, label %225
199: ; preds = %195
%200 = load double*, double** %16
%201 = load i32, i32* %34
%202 = sext i32 %201 to i64
%203 = getelementptr inbounds double, double* %200, i64 %202
%204 = load double, double* %203
%205 = load double, double* %37
%206 = fsub double %204, %205
%207 = load double*, double** %17
%208 = load i32, i32* %34
%209 = sub nsw i32 %208, 1
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds double, double* %207, i64 %210
%212 = load double, double* %211
%213 = load double, double* %53
%214 = fdiv double %212, %213
%215 = fsub double %206, %214
store double %215, double* %53
%216 = load double, double* %53
%217 = fcmp olt double %216, 0.000000e+00
br i1 %217, label %218, label %221
218: ; preds = %199
%219 = load i32, i32* %43
%220 = add nsw i32 %219, 1
store i32 %220, i32* %43
br label %221
221: ; preds = %218, %199
br label %222
222: ; preds = %221
%223 = load i32, i32* %34
%224 = add nsw i32 %223, 1
store i32 %224, i32* %34
br label %195
225: ; preds = %195
%226 = load i32, i32* %43
%227 = load i32, i32* %33
%228 = sub nsw i32 %227, 1
%229 = icmp sgt i32 %226, %228
br i1 %229, label %230, label %242
230: ; preds = %225
%231 = load double*, double** %23
%232 = load i32, i32* %40
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds double, double* %231, i64 %233
%235 = load double, double* %234
%236 = load double, double* %41
%237 = load double, double* %45
%238 = fneg double %235
%239 = call double @llvm.fmuladd.f64(double %238, double %236, double %237)
store double %239, double* %45
%240 = load double, double* %41
%241 = fmul double %240, 2.000000e+00
store double %241, double* %41
br label %180
242: ; preds = %225
store double 1.000000e+00, double* %41
br label %243
243: ; preds = %292, %242
store i32 0, i32* %43
%244 = load double, double* %51
store double %244, double* %37
%245 = load double*, double** %16
%246 = getelementptr inbounds double, double* %245, i64 1
%247 = load double, double* %246
%248 = load double, double* %37
%249 = fsub double %247, %248
store double %249, double* %53
%250 = load double, double* %53
%251 = fcmp olt double %250, 0.000000e+00
br i1 %251, label %252, label %255
252: ; preds = %243
%253 = load i32, i32* %43
%254 = add nsw i32 %253, 1
store i32 %254, i32* %43
br label %255
255: ; preds = %252, %243
%256 = load i32*, i32** %15
%257 = load i32, i32* %256
store i32 %257, i32* %30
store i32 2, i32* %34
br label %258
258: ; preds = %285, %255
%259 = load i32, i32* %34
%260 = load i32, i32* %30
%261 = icmp sle i32 %259, %260
br i1 %261, label %262, label %288
262: ; preds = %258
%263 = load double*, double** %16
%264 = load i32, i32* %34
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds double, double* %263, i64 %265
%267 = load double, double* %266
%268 = load double, double* %37
%269 = fsub double %267, %268
%270 = load double*, double** %17
%271 = load i32, i32* %34
%272 = sub nsw i32 %271, 1
%273 = sext i32 %272 to i64
%274 = getelementptr inbounds double, double* %270, i64 %273
%275 = load double, double* %274
%276 = load double, double* %53
%277 = fdiv double %275, %276
%278 = fsub double %269, %277
store double %278, double* %53
%279 = load double, double* %53
%280 = fcmp olt double %279, 0.000000e+00
br i1 %280, label %281, label %284
281: ; preds = %262
%282 = load i32, i32* %43
%283 = add nsw i32 %282, 1
store i32 %283, i32* %43
br label %284
284: ; preds = %281, %262
br label %285
285: ; preds = %284
%286 = load i32, i32* %34
%287 = add nsw i32 %286, 1
store i32 %287, i32* %34
br label %258
288: ; preds = %258
%289 = load i32, i32* %43
%290 = load i32, i32* %33
%291 = icmp slt i32 %289, %290
br i1 %291, label %292, label %303
292: ; preds = %288
%293 = load double*, double** %23
%294 = load i32, i32* %40
%295 = sext i32 %294 to i64
%296 = getelementptr inbounds double, double* %293, i64 %295
%297 = load double, double* %296
%298 = load double, double* %41
%299 = load double, double* %51
%300 = call double @llvm.fmuladd.f64(double %297, double %298, double %299)
store double %300, double* %51
%301 = load double, double* %41
%302 = fmul double %301, 2.000000e+00
store double %302, double* %41
br label %243
303: ; preds = %288
%304 = load i32, i32* %47
%305 = add nsw i32 %304, 1
store i32 %305, i32* %47
%306 = load i32, i32* %33
%307 = add nsw i32 %306, 1
%308 = load i32*, i32** %25
%309 = load i32, i32* %35
%310 = sub nsw i32 %309, 1
%311 = sext i32 %310 to i64
%312 = getelementptr inbounds i32, i32* %308, i64 %311
store i32 %307, i32* %312
%313 = load i32, i32* %43
%314 = load i32*, i32** %25
%315 = load i32, i32* %35
%316 = sext i32 %315 to i64
%317 = getelementptr inbounds i32, i32* %314, i64 %316
store i32 %313, i32* %317
br label %318
318: ; preds = %303, %177
%319 = load double, double* %45
%320 = load double*, double** %24
%321 = load i32, i32* %35
%322 = sub nsw i32 %321, 1
%323 = sext i32 %322 to i64
%324 = getelementptr inbounds double, double* %320, i64 %323
store double %319, double* %324
%325 = load double, double* %51
%326 = load double*, double** %24
%327 = load i32, i32* %35
%328 = sext i32 %327 to i64
%329 = getelementptr inbounds double, double* %326, i64 %328
store double %325, double* %329
br label %330
330: ; preds = %318
%331 = load i32, i32* %33
%332 = add nsw i32 %331, 1
store i32 %332, i32* %33
br label %90
333: ; preds = %90
%334 = load i32, i32* %38
store i32 %334, i32* %50
store i32 0, i32* %46
br label %335
335: ; preds = %500, %333
%336 = load i32, i32* %38
%337 = sub nsw i32 %336, 1
store i32 %337, i32* %48
%338 = load i32, i32* %38
store i32 %338, i32* %33
%339 = load i32, i32* %47
store i32 %339, i32* %54
%340 = load i32, i32* %54
store i32 %340, i32* %29
store i32 1, i32* %36
br label %341
341: ; preds = %488, %335
%342 = load i32, i32* %36
%343 = load i32, i32* %29
%344 = icmp sle i32 %342, %343
br i1 %344, label %345, label %491
345: ; preds = %341
%346 = load i32, i32* %33
%347 = shl i32 %346, 1
store i32 %347, i32* %35
%348 = load i32, i32* %33
%349 = load i32*, i32** %21
%350 = load i32, i32* %349
%351 = sub nsw i32 %348, %350
store i32 %351, i32* %40
%352 = load i32*, i32** %25
%353 = load i32, i32* %35
%354 = sub nsw i32 %353, 1
%355 = sext i32 %354 to i64
%356 = getelementptr inbounds i32, i32* %352, i64 %355
%357 = load i32, i32* %356
store i32 %357, i32* %49
%358 = load double*, double** %24
%359 = load i32, i32* %35
%360 = sub nsw i32 %359, 1
%361 = sext i32 %360 to i64
%362 = getelementptr inbounds double, double* %358, i64 %361
%363 = load double, double* %362
store double %363, double* %45
%364 = load double*, double** %24
%365 = load i32, i32* %35
%366 = sext i32 %365 to i64
%367 = getelementptr inbounds double, double* %364, i64 %366
%368 = load double, double* %367
store double %368, double* %51
%369 = load double, double* %45
%370 = load double, double* %51
%371 = fadd double %369, %370
%372 = fmul double %371, 5.000000e-01
store double %372, double* %42
%373 = load double, double* %51
%374 = load double, double* %42
%375 = fsub double %373, %374
store double %375, double* %52
%376 = load double, double* %45
%377 = call double @llvm.fabs.f64(double %376)
store double %377, double* %31
%378 = load double, double* %51
%379 = call double @llvm.fabs.f64(double %378)
store double %379, double* %32
%380 = load double, double* %31
%381 = load double, double* %32
%382 = call double @llvm.maxnum.f64(double %380, double %381)
store double %382, double* %44
%383 = load double, double* %52
%384 = load double*, double** %20
%385 = load double, double* %384
%386 = load double, double* %44
%387 = fmul double %385, %386
%388 = fcmp olt double %383, %387
br i1 %388, label %393, label %389
389: ; preds = %345
%390 = load i32, i32* %46
%391 = load i32, i32* %55
%392 = icmp eq i32 %390, %391
br i1 %392, label %393, label %421
393: ; preds = %389, %345
%394 = load i32, i32* %47
%395 = add nsw i32 %394, -1
store i32 %395, i32* %47
%396 = load i32*, i32** %25
%397 = load i32, i32* %35
%398 = sub nsw i32 %397, 1
%399 = sext i32 %398 to i64
%400 = getelementptr inbounds i32, i32* %396, i64 %399
store i32 0, i32* %400
%401 = load i32, i32* %38
%402 = load i32, i32* %33
%403 = icmp eq i32 %401, %402
br i1 %403, label %404, label %406
404: ; preds = %393
%405 = load i32, i32* %49
store i32 %405, i32* %38
br label %419
406: ; preds = %393
%407 = load i32, i32* %48
%408 = load i32, i32* %38
%409 = icmp sge i32 %407, %408
br i1 %409, label %410, label %418
410: ; preds = %406
%411 = load i32, i32* %49
%412 = load i32*, i32** %25
%413 = load i32, i32* %48
%414 = shl i32 %413, 1
%415 = sub nsw i32 %414, 1
%416 = sext i32 %415 to i64
%417 = getelementptr inbounds i32, i32* %412, i64 %416
store i32 %411, i32* %417
br label %418
418: ; preds = %410, %406
br label %419
419: ; preds = %418, %404
%420 = load i32, i32* %49
store i32 %420, i32* %33
br label %487
421: ; preds = %389
%422 = load i32, i32* %33
store i32 %422, i32* %48
store i32 0, i32* %43
%423 = load double, double* %42
store double %423, double* %37
%424 = load double*, double** %16
%425 = getelementptr inbounds double, double* %424, i64 1
%426 = load double, double* %425
%427 = load double, double* %37
%428 = fsub double %426, %427
store double %428, double* %53
%429 = load double, double* %53
%430 = fcmp olt double %429, 0.000000e+00
br i1 %430, label %431, label %434
431: ; preds = %421
%432 = load i32, i32* %43
%433 = add nsw i32 %432, 1
store i32 %433, i32* %43
br label %434
434: ; preds = %431, %421
%435 = load i32*, i32** %15
%436 = load i32, i32* %435
store i32 %436, i32* %30
store i32 2, i32* %34
br label %437
437: ; preds = %464, %434
%438 = load i32, i32* %34
%439 = load i32, i32* %30
%440 = icmp sle i32 %438, %439
br i1 %440, label %441, label %467
441: ; preds = %437
%442 = load double*, double** %16
%443 = load i32, i32* %34
%444 = sext i32 %443 to i64
%445 = getelementptr inbounds double, double* %442, i64 %444
%446 = load double, double* %445
%447 = load double, double* %37
%448 = fsub double %446, %447
%449 = load double*, double** %17
%450 = load i32, i32* %34
%451 = sub nsw i32 %450, 1
%452 = sext i32 %451 to i64
%453 = getelementptr inbounds double, double* %449, i64 %452
%454 = load double, double* %453
%455 = load double, double* %53
%456 = fdiv double %454, %455
%457 = fsub double %448, %456
store double %457, double* %53
%458 = load double, double* %53
%459 = fcmp olt double %458, 0.000000e+00
br i1 %459, label %460, label %463
460: ; preds = %441
%461 = load i32, i32* %43
%462 = add nsw i32 %461, 1
store i32 %462, i32* %43
br label %463
463: ; preds = %460, %441
br label %464
464: ; preds = %463
%465 = load i32, i32* %34
%466 = add nsw i32 %465, 1
store i32 %466, i32* %34
br label %437
467: ; preds = %437
%468 = load i32, i32* %43
%469 = load i32, i32* %33
%470 = sub nsw i32 %469, 1
%471 = icmp sle i32 %468, %470
br i1 %471, label %472, label %479
472: ; preds = %467
%473 = load double, double* %42
%474 = load double*, double** %24
%475 = load i32, i32* %35
%476 = sub nsw i32 %475, 1
%477 = sext i32 %476 to i64
%478 = getelementptr inbounds double, double* %474, i64 %477
store double %473, double* %478
br label %485
479: ; preds = %467
%480 = load double, double* %42
%481 = load double*, double** %24
%482 = load i32, i32* %35
%483 = sext i32 %482 to i64
%484 = getelementptr inbounds double, double* %481, i64 %483
store double %480, double* %484
br label %485
485: ; preds = %479, %472
%486 = load i32, i32* %49
store i32 %486, i32* %33
br label %487
487: ; preds = %485, %419
br label %488
488: ; preds = %487
%489 = load i32, i32* %36
%490 = add nsw i32 %489, 1
store i32 %490, i32* %36
br label %341
491: ; preds = %341
%492 = load i32, i32* %46
%493 = add nsw i32 %492, 1
store i32 %493, i32* %46
%494 = load i32, i32* %47
%495 = icmp sgt i32 %494, 0
br i1 %495, label %496, label %501
496: ; preds = %491
%497 = load i32, i32* %46
%498 = load i32, i32* %55
%499 = icmp sle i32 %497, %498
br i1 %499, label %500, label %501
500: ; preds = %496
br label %335
501: ; preds = %496, %491
%502 = load i32*, i32** %19
%503 = load i32, i32* %502
store i32 %503, i32* %29
%504 = load i32, i32* %50
store i32 %504, i32* %33
br label %505
505: ; preds = %557, %501
%506 = load i32, i32* %33
%507 = load i32, i32* %29
%508 = icmp sle i32 %506, %507
br i1 %508, label %509, label %560
509: ; preds = %505
%510 = load i32, i32* %33
%511 = shl i32 %510, 1
store i32 %511, i32* %35
%512 = load i32, i32* %33
%513 = load i32*, i32** %21
%514 = load i32, i32* %513
%515 = sub nsw i32 %512, %514
store i32 %515, i32* %40
%516 = load i32*, i32** %25
%517 = load i32, i32* %35
%518 = sub nsw i32 %517, 1
%519 = sext i32 %518 to i64
%520 = getelementptr inbounds i32, i32* %516, i64 %519
%521 = load i32, i32* %520
%522 = icmp eq i32 %521, 0
br i1 %522, label %523, label %556
523: ; preds = %509
%524 = load double*, double** %24
%525 = load i32, i32* %35
%526 = sub nsw i32 %525, 1
%527 = sext i32 %526 to i64
%528 = getelementptr inbounds double, double* %524, i64 %527
%529 = load double, double* %528
%530 = load double*, double** %24
%531 = load i32, i32* %35
%532 = sext i32 %531 to i64
%533 = getelementptr inbounds double, double* %530, i64 %532
%534 = load double, double* %533
%535 = fadd double %529, %534
%536 = fmul double %535, 5.000000e-01
%537 = load double*, double** %22
%538 = load i32, i32* %40
%539 = sext i32 %538 to i64
%540 = getelementptr inbounds double, double* %537, i64 %539
store double %536, double* %540
%541 = load double*, double** %24
%542 = load i32, i32* %35
%543 = sext i32 %542 to i64
%544 = getelementptr inbounds double, double* %541, i64 %543
%545 = load double, double* %544
%546 = load double*, double** %22
%547 = load i32, i32* %40
%548 = sext i32 %547 to i64
%549 = getelementptr inbounds double, double* %546, i64 %548
%550 = load double, double* %549
%551 = fsub double %545, %550
%552 = load double*, double** %23
%553 = load i32, i32* %40
%554 = sext i32 %553 to i64
%555 = getelementptr inbounds double, double* %552, i64 %554
store double %551, double* %555
br label %556
556: ; preds = %523, %509
br label %557
557: ; preds = %556
%558 = load i32, i32* %33
%559 = add nsw i32 %558, 1
store i32 %559, i32* %33
br label %505
560: ; preds = %505
ret i32 0
}

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