void diptest(const double x[], const int n, double *dip, int *lo_hi,
             int *ifault, int *gcm, int *lcm, int *mn, int *mj) {
  int mnj, mnmnj, mjk, mjmjk, ig, ih, iv, ix, i, j, k;
  double dip_l, dip_u, dipnew;
  --mj;
  --mn;
  --lcm;
  --gcm;
  --x;
  *ifault = 1;
  if (n <= 0)
    return;
  *ifault = 0;
  *ifault = 2;
  for (k = 2; k <= n; ++k)
    if (x[k] < x[k - 1])
      return;
  *ifault = 0;
  lo_hi[0] = 1;
  lo_hi[1] = n;
  *dip = 0.;
  if (n < 2 || x[n] == x[1])
    goto L_END;
  mn[1] = 1;
  for (j = 2; j <= n; ++j) {
    mn[j] = j - 1;
    while (1) {
      mnj = mn[j];
      mnmnj = mn[mnj];
      if (mnj == 1 ||
          (x[j] - x[mnj]) * (mnj - mnmnj) < (x[mnj] - x[mnmnj]) * (j - mnj))
        break;
      mn[j] = mnmnj;
    }
  }
  mj[n] = n;
  for (k = n - 1; k >= 1; k--) {
    mj[k] = k + 1;
    while (1) {
      mjk = mj[k];
      mjmjk = mj[mjk];
      if (mjk == n ||
          (x[k] - x[mjk]) * (mjk - mjmjk) < (x[mjk] - x[mjmjk]) * (k - mjk))
        break;
      mj[k] = mjmjk;
    }
  }
LOOP_Start:
  gcm[1] = lo_hi[1];
  for (i = 1; gcm[i] > lo_hi[0]; i++)
    gcm[i + 1] = mn[gcm[i]];
  ig = lo_hi[2] = i;
  ix = ig - 1;
  lcm[1] = lo_hi[0];
  for (i = 1; lcm[i] < lo_hi[1]; i++)
    lcm[i + 1] = mj[lcm[i]];
  ih = lo_hi[3] = i;
  iv = 2;
  long double d = 0.;
  if (lo_hi[2] != 2 || lo_hi[3] != 2) {
    do {
      long double dx;
      int gcmix = gcm[ix], lcmiv = lcm[iv];
      if (gcmix > lcmiv) {
        int gcmi1 = gcm[ix + 1];
        dx = (lcmiv - gcmi1 + 1) - ((long double)x[lcmiv] - x[gcmi1]) *
                                       (gcmix - gcmi1) / (x[gcmix] - x[gcmi1]);
        ++iv;
        if (dx >= d) {
          d = dx;
          ig = ix + 1;
          ih = iv - 1;
        }
      } else {
        int lcmiv1 = lcm[iv - 1];
        dx = ((long double)x[gcmix] - x[lcmiv1]) * (lcmiv - lcmiv1) /
                 (x[lcmiv] - x[lcmiv1]) -
             (gcmix - lcmiv1 - 1);
        --ix;
        if (dx >= d) {
          d = dx;
          ig = ix + 1;
          ih = iv;
        }
      }
      if (ix < 1)
        ix = 1;
      if (iv > lo_hi[3])
        iv = lo_hi[3];
    } while (gcm[ix] != lcm[iv]);
  } else {
    d = 0.;
  }
  if (d < *dip)
    goto L_END;
  int j_best, j_l = -1, j_u = -1;
  dip_l = 0.;
  for (j = ig; j < lo_hi[2]; ++j) {
    double max_t = 1.;
    int j_ = -1, jb = gcm[j + 1], je = gcm[j];
    if (je - jb > 1 && x[je] != x[jb]) {
      double C = (je - jb) / (x[je] - x[jb]);
      int jj;
      for (jj = jb; jj <= je; ++jj) {
        double t = (jj - jb + 1) - (x[jj] - x[jb]) * C;
        if (max_t < t) {
          max_t = t;
          j_ = jj;
        }
      }
    }
    if (dip_l < max_t) {
      dip_l = max_t;
      j_l = j_;
    }
  }
  dip_u = 0.;
  for (j = ih; j < lo_hi[3]; ++j) {
    double max_t = 1.;
    int j_ = -1, jb = lcm[j], je = lcm[j + 1];
    if (je - jb > 1 && x[je] != x[jb]) {
      double C = (je - jb) / (x[je] - x[jb]);
      int jj;
      for (jj = jb; jj <= je; ++jj) {
        double t = (x[jj] - x[jb]) * C - (jj - jb - 1);
        if (max_t < t) {
          max_t = t;
          j_ = jj;
        }
      }
    }
    if (dip_u < max_t) {
      dip_u = max_t;
      j_u = j_;
    }
  }
  if (dip_u > dip_l) {
    dipnew = dip_u;
    j_best = j_u;
  } else {
    dipnew = dip_l;
    j_best = j_l;
  }
  if (*dip < dipnew) {
    *dip = dipnew;
  }
  if (lo_hi[0] == gcm[ig] && lo_hi[1] == lcm[ih]) {
  } else {
    lo_hi[0] = gcm[ig];
    lo_hi[1] = lcm[ih];
    goto LOOP_Start;
  }
L_END:
  *dip /= (2 * n);
  return;
}


x86 assembly (clang, -O0):
<diptest>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    0x20(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,0x20(%rbp)
mov    0x18(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,0x18(%rbp)
mov    0x10(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,0x10(%rbp)
mov    -0x30(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x8(%rbp)
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
cmpl   $0x0,-0xc(%rbp)
jg     1183 <diptest+0x83>
jmp    1c49 <diptest+0xb49>
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x28(%rbp),%rax
movl   $0x2,(%rax)
movl   $0x2,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     11eb <diptest+0xeb>
mov    -0x8(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x5c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    11d8 <diptest+0xd8>
jmp    1c49 <diptest+0xb49>
jmp    11dd <diptest+0xdd>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    119e <diptest+0x9e>
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x20(%rbp),%rax
movl   $0x1,(%rax)
mov    -0xc(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
cmpl   $0x2,-0xc(%rbp)
jl     1240 <diptest+0x140>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
ucomisd 0x8(%rax),%xmm0
jne    1245 <diptest+0x145>
jp     1245 <diptest+0x145>
jmp    1c2f <diptest+0xb2f>
mov    0x18(%rbp),%rax
movl   $0x1,0x4(%rax)
movl   $0x2,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     131f <diptest+0x21f>
mov    -0x58(%rbp),%edx
sub    $0x1,%edx
mov    0x18(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    0x18(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x34(%rbp)
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x1,-0x34(%rbp)
je     12f4 <diptest+0x1f4>
mov    -0x8(%rbp),%rax
movslq -0x58(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
mov    -0x34(%rbp),%eax
sub    -0x38(%rbp),%eax
cvtsi2sd %eax,%xmm0
mulsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%eax
sub    -0x34(%rbp),%eax
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    12f9 <diptest+0x1f9>
jmp    130c <diptest+0x20c>
mov    -0x38(%rbp),%edx
mov    0x18(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1274 <diptest+0x174>
jmp    1311 <diptest+0x211>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    1257 <diptest+0x157>
mov    -0xc(%rbp),%edx
mov    0x20(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x5c(%rbp)
cmpl   $0x1,-0x5c(%rbp)
jl     13fe <diptest+0x2fe>
mov    -0x5c(%rbp),%edx
add    $0x1,%edx
mov    0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x3c(%rbp)
mov    0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x40(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0xc(%rbp),%eax
je     13d3 <diptest+0x2d3>
mov    -0x8(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
mov    -0x3c(%rbp),%eax
sub    -0x40(%rbp),%eax
cvtsi2sd %eax,%xmm0
mulsd  %xmm0,%xmm1
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x5c(%rbp),%eax
sub    -0x3c(%rbp),%eax
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    13d8 <diptest+0x2d8>
jmp    13eb <diptest+0x2eb>
mov    -0x40(%rbp),%edx
mov    0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1351 <diptest+0x251>
jmp    13f0 <diptest+0x2f0>
mov    -0x5c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x5c(%rbp)
jmp    1336 <diptest+0x236>
jmp    1403 <diptest+0x303>
mov    -0x20(%rbp),%rax
mov    0x4(%rax),%ecx
mov    -0x30(%rbp),%rax
mov    %ecx,0x4(%rax)
movl   $0x1,-0x54(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
cmp    (%rcx),%eax
jle    1460 <diptest+0x360>
mov    0x18(%rbp),%rax
mov    -0x30(%rbp),%rcx
movslq -0x54(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x30(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1418 <diptest+0x318>
mov    -0x54(%rbp),%eax
mov    -0x20(%rbp),%rcx
mov    %eax,0x8(%rcx)
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
mov    0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
movl   $0x1,-0x54(%rbp)
mov    0x10(%rbp),%rax
movslq -0x54(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x20(%rbp),%rcx
cmp    0x4(%rcx),%eax
jge    14d3 <diptest+0x3d3>
mov    0x20(%rbp),%rax
mov    0x10(%rbp),%rcx
movslq -0x54(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,4),%edx
mov    0x10(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    148a <diptest+0x38a>
mov    -0x54(%rbp),%eax
mov    -0x20(%rbp),%rcx
mov    %eax,0xc(%rcx)
mov    %eax,-0x48(%rbp)
movl   $0x2,-0x4c(%rbp)
fldz
fstpt  -0x90(%rbp)
mov    -0x20(%rbp),%rax
cmpl   $0x2,0x8(%rax)
jne    150b <diptest+0x40b>
mov    -0x20(%rbp),%rax
cmpl   $0x2,0xc(%rax)
je     173d <diptest+0x63d>
jmp    1510 <diptest+0x410>
mov    -0x30(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0xa4(%rbp)
mov    0x10(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0xa8(%rbp)
mov    -0xa4(%rbp),%eax
cmp    -0xa8(%rbp),%eax
jle    1618 <diptest+0x518>
mov    -0x30(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    0x4(%rax,%rcx,4),%eax
mov    %eax,-0xac(%rbp)
movslq -0xa8(%rbp),%rdx
mov    %edx,%eax
movslq -0xac(%rbp),%rcx
mov    %ecx,%esi
sub    %esi,%eax
add    $0x1,%eax
mov    %eax,-0x13c(%rbp)
fildl  -0x13c(%rbp)
mov    -0x8(%rbp),%rax
fldl   (%rax,%rdx,8)
movsd  (%rax,%rcx,8),%xmm1
movsd  %xmm1,-0x148(%rbp)
ff
fldl   -0x148(%rbp)
fsubrp %st,%st(1)
movslq -0xa4(%rbp),%rcx
mov    %ecx,%edx
sub    %esi,%edx
mov    %edx,-0x140(%rbp)
fildl  -0x140(%rbp)
fmulp  %st,%st(1)
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
fldl   -0x150(%rbp)
fdivrp %st,%st(1)
fsubrp %st,%st(1)
fstpt  -0xa0(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
fldt   -0xa0(%rbp)
fldt   -0x90(%rbp)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jb     1613 <diptest+0x513>
jmp    15f5 <diptest+0x4f5>
fldt   -0xa0(%rbp)
fstpt  -0x90(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x4c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    16ec <diptest+0x5ec>
mov    0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
add    $0xffffffff,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0xb0(%rbp)
mov    -0x8(%rbp),%rdx
movslq -0xa4(%rbp),%rax
mov    %eax,%ecx
fldl   (%rdx,%rax,8)
movslq -0xb0(%rbp),%rsi
mov    %esi,%eax
movsd  (%rdx,%rsi,8),%xmm1
movsd  %xmm1,-0x130(%rbp)
ff
fldl   -0x130(%rbp)
fsubrp %st,%st(1)
movslq -0xa8(%rbp),%rsi
mov    %esi,%edi
sub    %eax,%edi
mov    %edi,-0x128(%rbp)
fildl  -0x128(%rbp)
fmulp  %st,%st(1)
movsd  (%rdx,%rsi,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
fldl   -0x138(%rbp)
fdivrp %st,%st(1)
not    %eax
add    %ecx,%eax
mov    %eax,-0x124(%rbp)
fildl  -0x124(%rbp)
fsubrp %st,%st(1)
fstpt  -0xa0(%rbp)
mov    -0x50(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x50(%rbp)
fldt   -0xa0(%rbp)
fldt   -0x90(%rbp)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jb     16e7 <diptest+0x5e7>
jmp    16cc <diptest+0x5cc>
fldt   -0xa0(%rbp)
fstpt  -0x90(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x4c(%rbp),%eax
mov    %eax,-0x48(%rbp)
jmp    16ec <diptest+0x5ec>
cmpl   $0x1,-0x50(%rbp)
jge    16fd <diptest+0x5fd>
movl   $0x1,-0x50(%rbp)
mov    -0x4c(%rbp),%eax
mov    -0x20(%rbp),%rcx
cmp    0xc(%rcx),%eax
jle    1717 <diptest+0x617>
mov    -0x20(%rbp),%rax
mov    0xc(%rax),%eax
mov    %eax,-0x4c(%rbp)
jmp    171c <diptest+0x61c>
mov    -0x30(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    0x10(%rbp),%rcx
movslq -0x4c(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jne    1510 <diptest+0x410>
jmp    1745 <diptest+0x645>
fldz
fstpt  -0x90(%rbp)
fldt   -0x90(%rbp)
mov    -0x18(%rbp),%rax
fldl   (%rax)
fucomip %st(1),%st
fstp   %st(0)
jbe    1765 <diptest+0x665>
jmp    1760 <diptest+0x660>
jmp    1c2f <diptest+0xb2f>
movl   $0xffffffff,-0xb8(%rbp)
ff ff ff
movl   $0xffffffff,-0xbc(%rbp)
ff ff ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    -0x20(%rbp),%rcx
cmp    0x8(%rcx),%eax
jge    1971 <diptest+0x871>
movsd  0x861(%rip),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movl   $0xffffffff,-0xcc(%rbp)
ff ff ff
mov    -0x30(%rbp),%rax
mov    -0x58(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0xd0(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0xd4(%rbp)
mov    -0xd4(%rbp),%eax
sub    -0xd0(%rbp),%eax
cmp    $0x1,%eax
jle    192e <diptest+0x82e>
mov    -0x8(%rbp),%rax
movslq -0xd4(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0xd0(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jne    181e <diptest+0x71e>
jp     181e <diptest+0x71e>
jmp    192e <diptest+0x82e>
mov    -0xd4(%rbp),%eax
sub    -0xd0(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x8(%rbp),%rax
movslq -0xd4(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0xd0(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    -0xd0(%rbp),%eax
mov    %eax,-0xe4(%rbp)
mov    -0xe4(%rbp),%eax
cmp    -0xd4(%rbp),%eax
jg     1929 <diptest+0x829>
mov    -0xe4(%rbp),%eax
sub    -0xd0(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
mov    -0x8(%rbp),%rax
movslq -0xe4(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0xd0(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  -0xe0(%rbp),%xmm2
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0xf0(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1910 <diptest+0x810>
movsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0xe4(%rbp),%eax
mov    %eax,-0xcc(%rbp)
jmp    1915 <diptest+0x815>
mov    -0xe4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xe4(%rbp)
jmp    1866 <diptest+0x766>
jmp    192e <diptest+0x82e>
movsd  -0x68(%rbp),%xmm1
movsd  -0xc8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    195e <diptest+0x85e>
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
mov    -0xcc(%rbp),%eax
mov    %eax,-0xb8(%rbp)
jmp    1963 <diptest+0x863>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    1787 <diptest+0x687>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x48(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    -0x20(%rbp),%rcx
cmp    0xc(%rcx),%eax
jge    1b69 <diptest+0xa69>
movsd  0x669(%rip),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movl   $0xffffffff,-0xfc(%rbp)
ff ff ff
mov    0x10(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x100(%rbp)
mov    0x10(%rbp),%rax
mov    -0x58(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x104(%rbp)
mov    -0x104(%rbp),%eax
sub    -0x100(%rbp),%eax
cmp    $0x1,%eax
jle    1b26 <diptest+0xa26>
mov    -0x8(%rbp),%rax
movslq -0x104(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x100(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jne    1a16 <diptest+0x916>
jp     1a16 <diptest+0x916>
jmp    1b26 <diptest+0xa26>
mov    -0x104(%rbp),%eax
sub    -0x100(%rbp),%eax
cvtsi2sd %eax,%xmm0
mov    -0x8(%rbp),%rax
movslq -0x104(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x100(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x100(%rbp),%eax
mov    %eax,-0x114(%rbp)
mov    -0x114(%rbp),%eax
cmp    -0x104(%rbp),%eax
jg     1b21 <diptest+0xa21>
mov    -0x8(%rbp),%rax
movslq -0x114(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x100(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  -0x110(%rbp),%xmm2
ff
mov    -0x114(%rbp),%eax
sub    -0x100(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0xf8(%rbp),%xmm1
ff
movsd  -0x120(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1b08 <diptest+0xa08>
movsd  -0x120(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x114(%rbp),%eax
mov    %eax,-0xfc(%rbp)
jmp    1b0d <diptest+0xa0d>
mov    -0x114(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x114(%rbp)
jmp    1a5e <diptest+0x95e>
jmp    1b26 <diptest+0xa26>
movsd  -0x70(%rbp),%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    1b56 <diptest+0xa56>
movsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x70(%rbp)
mov    -0xfc(%rbp),%eax
mov    %eax,-0xbc(%rbp)
jmp    1b5b <diptest+0xa5b>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    197f <diptest+0x87f>
movsd  -0x70(%rbp),%xmm0
ucomisd -0x68(%rbp),%xmm0
jbe    1b94 <diptest+0xa94>
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0xbc(%rbp),%eax
mov    %eax,-0xb4(%rbp)
jmp    1baa <diptest+0xaaa>
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0xb8(%rbp),%eax
mov    %eax,-0xb4(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
movsd  -0x78(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1bce <diptest+0xace>
movsd  -0x78(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    -0x30(%rbp),%rcx
movslq -0x44(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jne    1c02 <diptest+0xb02>
mov    -0x20(%rbp),%rax
mov    0x4(%rax),%eax
mov    0x10(%rbp),%rcx
movslq -0x48(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
jne    1c02 <diptest+0xb02>
jmp    1c2a <diptest+0xb2a>
mov    -0x30(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    0x10(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,0x4(%rax)
jmp    1403 <diptest+0x303>
jmp    1c2f <diptest+0xb2f>
mov    -0xc(%rbp),%eax
shl    $0x1,%eax
cvtsi2sd %eax,%xmm1
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<diptest>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
movl   $0x1,(%r8)
test   %esi,%esi
jle    1149 <diptest+0x49>
movl   $0x2,(%r8)
cmp    $0x1,%esi
jne    1154 <diptest+0x54>
movl   $0x0,(%r8)
movl   $0x1,(%rcx)
mov    %esi,0x4(%rcx)
xorpd  %xmm8,%xmm8
add    %esi,%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
divsd  %xmm0,%xmm8
movsd  %xmm8,(%rdx)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x48(%rsp),%r15
mov    0x40(%rsp),%r12
mov    0x38(%rsp),%r13
lea    0x1(%rsi),%r10d
movsd  (%rdi),%xmm0
mov    $0x2,%eax
movapd %xmm0,%xmm1
movsd  -0x8(%rdi,%rax,8),%xmm0
ucomisd %xmm0,%xmm1
ja     1149 <diptest+0x49>
add    $0x1,%rax
cmp    %rax,%r10
jne    1170 <diptest+0x70>
movl   $0x0,(%r8)
movl   $0x1,(%rcx)
mov    %esi,0x4(%rcx)
movq   $0x0,(%rdx)
xorpd  %xmm8,%xmm8
cmp    $0x2,%esi
jl     1136 <diptest+0x36>
mov    %esi,%r8d
movsd  -0x8(%rdi,%r8,8),%xmm1
ucomisd (%rdi),%xmm1
jne    11c0 <diptest+0xc0>
jnp    1136 <diptest+0x36>
movl   $0x1,(%r12)
mov    $0x2,%r11d
jmp    11d9 <diptest+0xd9>
add    $0x1,%r11
cmp    %r10,%r11
je     1234 <diptest+0x134>
lea    -0x1(%r11),%ebp
nopl   (%rax)
mov    %ebp,-0x4(%r12,%r11,4)
cmp    $0x1,%ebp
je     11d0 <diptest+0xd0>
movslq %ebp,%rbx
mov    -0x4(%r12,%rbx,4),%r14d
movslq %r14d,%rax
movsd  -0x8(%rdi,%r11,8),%xmm0
movsd  -0x8(%rdi,%rbx,8),%xmm1
subsd  %xmm1,%xmm0
mov    %r11d,%ebx
sub    %ebp,%ebx
sub    %eax,%ebp
xorps  %xmm2,%xmm2
cvtsi2sd %ebp,%xmm2
subsd  -0x8(%rdi,%rax,8),%xmm1
xorps  %xmm3,%xmm3
cvtsi2sd %ebx,%xmm3
mulsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm3
ucomisd %xmm2,%xmm3
mov    %r14d,%ebp
jbe    11e0 <diptest+0xe0>
jmp    11d0 <diptest+0xd0>
mov    %esi,-0x4(%r15,%r8,4)
cmp    $0x2,%esi
jge    17ca <diptest+0x6ca>
mov    %rdx,-0x48(%rsp)
mov    0x4(%rcx),%edx
xorpd  %xmm8,%xmm8
fldz
movsd  0xda7(%rip),%xmm1
mov    %rsi,-0x30(%rsp)
jmp    126f <diptest+0x16f>
mov    %eax,(%rcx)
mov    -0x4(%r13,%r11,4),%edx
mov    %edx,0x4(%rcx)
mov    0x40(%rsp),%r12
mov    %edx,(%r9)
mov    (%rcx),%eax
mov    $0x1,%r10d
cmp    %eax,%edx
jle    12a6 <diptest+0x1a6>
mov    $0x1,%r10d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movslq %edx,%rax
mov    -0x4(%r12,%rax,4),%edx
mov    %edx,(%r9,%r10,4)
add    $0x1,%r10
mov    (%rcx),%eax
cmp    %eax,%edx
jg     1290 <diptest+0x190>
mov    %r10d,0x8(%rcx)
mov    %eax,0x0(%r13)
mov    0x4(%rcx),%r12d
cmp    %r12d,%eax
jge    1310 <diptest+0x210>
xor    %edx,%edx
nopl   0x0(%rax)
cltq
mov    -0x4(%r15,%rax,4),%eax
mov    %eax,0x4(%r13,%rdx,4)
mov    0x4(%rcx),%r12d
add    $0x1,%rdx
cmp    %r12d,%eax
jl     12c0 <diptest+0x1c0>
lea    0x1(%rdx),%rax
mov    %eax,0xc(%rcx)
mov    0x8(%rcx),%ebp
cmp    $0x2,%ebp
jne    1326 <diptest+0x226>
mov    $0x2,%r15d
cmp    $0x1,%edx
jne    1326 <diptest+0x226>
mov    $0x2,%edx
fld    %st(0)
mov    $0x2,%r8d
jmp    1464 <diptest+0x364>
cs nopw 0x0(%rax,%rax,1)
nop
movl   $0x1,0xc(%rcx)
mov    0x8(%rcx),%eax
mov    %eax,-0x50(%rsp)
mov    $0x1,%r15d
jmp    132d <diptest+0x22d>
mov    %ebp,-0x50(%rsp)
mov    %eax,%r15d
lea    -0x1(%r10),%edx
mov    0x4(%r13),%ebp
mov    $0x2,%eax
fld    %st(0)
mov    %r15d,%r8d
jmp    13d1 <diptest+0x2d1>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movslq %eax,%rbx
movslq -0x8(%r13,%rbx,4),%rbx
fldl   -0x8(%rdi,%r11,8)
movsd  -0x8(%rdi,%rbx,8),%xmm2
movsd  %xmm2,-0x8(%rsp)
fsubl  -0x8(%rsp)
mov    %r14d,%ebp
sub    %ebx,%ebp
mov    %ebp,-0x38(%rsp)
fimull -0x38(%rsp)
movsd  -0x8(%rdi,%r14,8),%xmm3
subsd  %xmm2,%xmm3
movsd  %xmm3,-0x10(%rsp)
fdivl  -0x10(%rsp)
not    %ebx
add    %r11d,%ebx
mov    %ebx,-0x34(%rsp)
fisubl -0x34(%rsp)
fucomi %st(1),%st
fcmovb %st(1),%st
fstp   %st(1)
cmovae %edx,%r10d
lea    -0x1(%rdx),%edx
cmovae %eax,%r8d
test   %edx,%edx
mov    $0x1,%ebp
cmovle %ebp,%edx
cmp    %r15d,%eax
cmovg  %r15d,%eax
movslq %eax,%rbp
mov    -0x4(%r13,%rbp,4),%ebp
cmp    %ebp,-0x4(%r9,%rdx,4)
je     1460 <diptest+0x360>
movslq %edx,%rbx
movslq -0x4(%r9,%rbx,4),%r11
movslq %ebp,%r14
cmp    %ebp,%r11d
jle    1350 <diptest+0x250>
movslq (%r9,%rbx,4),%r13
mov    %r14d,%ebp
sub    %r13d,%ebp
add    $0x1,%ebp
mov    %ebp,-0x3c(%rsp)
fldl   -0x8(%rdi,%r14,8)
movsd  -0x8(%rdi,%r13,8),%xmm2
movsd  %xmm2,-0x18(%rsp)
fsubl  -0x18(%rsp)
mov    %r11d,%ebx
sub    %r13d,%ebx
mov    0x38(%rsp),%r13
mov    %ebx,-0x40(%rsp)
fimull -0x40(%rsp)
movsd  -0x8(%rdi,%r11,8),%xmm3
subsd  %xmm2,%xmm3
movsd  %xmm3,-0x20(%rsp)
fdivl  -0x20(%rsp)
fisubrl -0x3c(%rsp)
fucomi %st(1),%st
fcmovb %st(1),%st
fstp   %st(1)
cmovae %eax,%r8d
lea    0x1(%rdx),%ebp
lea    0x1(%rax),%eax
cmovae %ebp,%r10d
jmp    13ad <diptest+0x2ad>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    -0x50(%rsp),%edx
movsd  %xmm8,-0x28(%rsp)
fldl   -0x28(%rsp)
fucomip %st(1),%st
fstp   %st(0)
ja     17b0 <diptest+0x6b0>
xorpd  %xmm2,%xmm2
movslq %r10d,%rax
mov    %rax,-0x50(%rsp)
xorpd  %xmm3,%xmm3
cmp    %edx,%r10d
jge    1600 <diptest+0x500>
movslq %edx,%r13
mov    -0x50(%rsp),%r14
mov    -0x4(%r9,%r14,4),%ebx
xorpd  %xmm4,%xmm4
jmp    14c1 <diptest+0x3c1>
movapd %xmm7,%xmm3
nopl   0x0(%rax)
maxsd  %xmm4,%xmm3
movapd %xmm3,%xmm4
cmp    %r13,%r14
je     1600 <diptest+0x500>
mov    %ebx,%edx
mov    (%r9,%r14,4),%ebx
add    $0x1,%r14
mov    %edx,%esi
sub    %ebx,%esi
movapd %xmm1,%xmm3
cmp    $0x2,%esi
jl     14b0 <diptest+0x3b0>
movslq %ebx,%r11
movslq %edx,%rax
movsd  -0x8(%rdi,%rax,8),%xmm7
movsd  -0x8(%rdi,%r11,8),%xmm5
ucomisd %xmm5,%xmm7
movapd %xmm1,%xmm3
jne    14f7 <diptest+0x3f7>
jnp    14b0 <diptest+0x3b0>
movapd %xmm1,%xmm3
cmp    %ebx,%edx
jl     14b0 <diptest+0x3b0>
xorps  %xmm6,%xmm6
cvtsi2sd %esi,%xmm6
subsd  %xmm5,%xmm7
divsd  %xmm7,%xmm6
lea    0x1(%rdx),%eax
movapd %xmm5,%xmm3
subsd  %xmm5,%xmm3
mulsd  %xmm6,%xmm3
movapd %xmm1,%xmm7
subsd  %xmm3,%xmm7
maxsd  %xmm1,%xmm7
lea    0x1(%r11),%r10
cmp    %r10d,%eax
je     14a5 <diptest+0x3a5>
lea    0x1(%rbx),%ebp
test   $0x1,%sil
jne    154f <diptest+0x44f>
mov    %r10,%rax
mov    %r11,%r10
cmp    %ebp,%edx
je     14b0 <diptest+0x3b0>
jmp    1589 <diptest+0x489>
mov    $0x1,%eax
sub    %ebx,%eax
movsd  (%rdi,%r11,8),%xmm0
add    %r10d,%eax
xorps  %xmm3,%xmm3
cvtsi2sd %eax,%xmm3
subsd  %xmm5,%xmm0
mulsd  %xmm6,%xmm0
subsd  %xmm0,%xmm3
maxsd  %xmm7,%xmm3
add    $0x2,%r11
mov    %r11,%rax
movapd %xmm3,%xmm7
cmp    %ebp,%edx
je     14b0 <diptest+0x3b0>
not    %edx
add    $0x1,%rax
mov    %ebx,%esi
neg    %esi
movapd %xmm7,%xmm3
nopw   0x0(%rax,%rax,1)
lea    (%rsi,%rax,1),%ebp
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
movsd  (%rdi,%r10,8),%xmm7
subsd  %xmm5,%xmm7
mulsd  %xmm6,%xmm7
subsd  %xmm7,%xmm0
maxsd  %xmm3,%xmm0
lea    0x1(%rsi,%rax,1),%ebp
xorps  %xmm3,%xmm3
cvtsi2sd %ebp,%xmm3
movsd  -0x8(%rdi,%rax,8),%xmm7
subsd  %xmm5,%xmm7
mulsd  %xmm6,%xmm7
subsd  %xmm7,%xmm3
maxsd  %xmm0,%xmm3
mov    %rax,%r10
add    $0x2,%rax
lea    (%rax,%rdx,1),%ebp
cmp    $0x1,%ebp
jne    15a0 <diptest+0x4a0>
jmp    14b0 <diptest+0x3b0>
cs nopw 0x0(%rax,%rax,1)
nop
movslq %r8d,%r11
cmp    %r15d,%r8d
mov    0x38(%rsp),%r13
jge    1770 <diptest+0x670>
movslq %r15d,%r8
mov    -0x4(%r13,%r11,4),%ebp
xorpd  %xmm4,%xmm4
mov    %r11,%rbx
jmp    1646 <diptest+0x546>
movapd %xmm7,%xmm2
cs nopw 0x0(%rax,%rax,1)
maxsd  %xmm4,%xmm2
movapd %xmm2,%xmm4
cmp    %r8,%rbx
mov    0x38(%rsp),%r13
je     1770 <diptest+0x670>
mov    %ebp,%edx
mov    0x0(%r13,%rbx,4),%ebp
add    $0x1,%rbx
mov    %ebp,%esi
sub    %edx,%esi
movapd %xmm1,%xmm2
cmp    $0x2,%esi
jl     1630 <diptest+0x530>
movslq %ebp,%rax
movsd  -0x8(%rdi,%rax,8),%xmm7
movslq %edx,%r10
movsd  -0x8(%rdi,%r10,8),%xmm5
ucomisd %xmm5,%xmm7
movapd %xmm1,%xmm2
jne    167d <diptest+0x57d>
jnp    1630 <diptest+0x530>
movapd %xmm1,%xmm2
cmp    %edx,%ebp
jl     1630 <diptest+0x530>
xorps  %xmm6,%xmm6
cvtsi2sd %esi,%xmm6
subsd  %xmm5,%xmm7
divsd  %xmm7,%xmm6
lea    0x1(%rbp),%r13d
movapd %xmm5,%xmm7
subsd  %xmm5,%xmm7
mulsd  %xmm6,%xmm7
addsd  %xmm1,%xmm7
maxsd  %xmm1,%xmm7
lea    0x1(%r10),%r14
cmp    %r14d,%r13d
je     1622 <diptest+0x522>
mov    %edx,%eax
not    %eax
add    $0x1,%edx
test   $0x1,%sil
jne    16d6 <diptest+0x5d6>
mov    %r14,%rsi
mov    %r10,%r14
cmp    %edx,%ebp
je     1630 <diptest+0x530>
jmp    170a <diptest+0x60a>
movsd  (%rdi,%r10,8),%xmm2
subsd  %xmm5,%xmm2
lea    (%r14,%rax,1),%esi
xorps  %xmm0,%xmm0
cvtsi2sd %esi,%xmm0
mulsd  %xmm6,%xmm2
subsd  %xmm0,%xmm2
maxsd  %xmm7,%xmm2
add    $0x2,%r10
mov    %r10,%rsi
movapd %xmm2,%xmm7
cmp    %edx,%ebp
je     1630 <diptest+0x530>
movapd %xmm7,%xmm2
xchg   %ax,%ax
movsd  (%rdi,%r14,8),%xmm0
subsd  %xmm5,%xmm0
lea    (%rsi,%rax,1),%edx
xorps  %xmm7,%xmm7
cvtsi2sd %edx,%xmm7
mulsd  %xmm6,%xmm0
subsd  %xmm7,%xmm0
maxsd  %xmm2,%xmm0
lea    0x1(%rsi),%r14
movsd  (%rdi,%rsi,8),%xmm2
subsd  %xmm5,%xmm2
lea    (%r14,%rax,1),%edx
xorps  %xmm7,%xmm7
cvtsi2sd %edx,%xmm7
mulsd  %xmm6,%xmm2
subsd  %xmm7,%xmm2
maxsd  %xmm0,%xmm2
add    $0x2,%rsi
cmp    %r13d,%esi
jne    1710 <diptest+0x610>
jmp    1630 <diptest+0x530>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
maxsd  %xmm3,%xmm2
ucomisd %xmm8,%xmm2
mov    -0x30(%rsp),%rsi
jbe    178e <diptest+0x68e>
mov    -0x48(%rsp),%rax
movsd  %xmm2,(%rax)
movapd %xmm2,%xmm8
mov    -0x50(%rsp),%rax
mov    -0x4(%r9,%rax,4),%eax
cmp    %eax,(%rcx)
mov    0x48(%rsp),%r15
jne    1260 <diptest+0x160>
cmp    -0x4(%r13,%r11,4),%r12d
jne    1260 <diptest+0x160>
fstp   %st(0)
mov    -0x48(%rsp),%rdx
jmp    1136 <diptest+0x36>
nopl   0x0(%rax)
cmp    $0x2,%r10
jle    1242 <diptest+0x142>
mov    %r8,%r10
add    $0xffffffffffffffff,%r8
mov    %r8d,%r11d
mov    %r10d,%ebp
nopw   0x0(%rax,%rax,1)
mov    %ebp,-0x4(%r15,%r11,4)
cmp    %esi,%ebp
je     17c0 <diptest+0x6c0>
movslq %ebp,%rax
mov    -0x4(%r15,%rax,4),%r14d
movslq %r14d,%rbx
movsd  -0x8(%rdi,%r11,8),%xmm0
movsd  -0x8(%rdi,%rax,8),%xmm1
subsd  %xmm1,%xmm0
mov    %r8d,%eax
sub    %ebp,%eax
sub    %ebx,%ebp
xorps  %xmm2,%xmm2
cvtsi2sd %ebp,%xmm2
subsd  -0x8(%rdi,%rbx,8),%xmm1
xorps  %xmm3,%xmm3
cvtsi2sd %eax,%xmm3
mulsd  %xmm0,%xmm2
mulsd  %xmm1,%xmm3
ucomisd %xmm2,%xmm3
mov    %r14d,%ebp
jbe    17e0 <diptest+0x6e0>
jmp    17c0 <diptest+0x6c0>

LLVM IR (-O0):
define void @diptest(double* %0, i32 %1, double* %2, i32* %3, i32* %4, i32* %5, i32* %6, i32* %7, i32* %8) {
%10 = alloca double*
%11 = alloca i32
%12 = alloca double*
%13 = alloca i32*
%14 = alloca i32*
%15 = alloca i32*
%16 = alloca i32*
%17 = alloca i32*
%18 = alloca i32*
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca i32
%28 = alloca i32
%29 = alloca i32
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca x86_fp80
%34 = alloca x86_fp80
%35 = alloca i32
%36 = alloca i32
%37 = alloca i32
%38 = alloca i32
%39 = alloca i32
%40 = alloca i32
%41 = alloca i32
%42 = alloca double
%43 = alloca i32
%44 = alloca i32
%45 = alloca i32
%46 = alloca double
%47 = alloca i32
%48 = alloca double
%49 = alloca double
%50 = alloca i32
%51 = alloca i32
%52 = alloca i32
%53 = alloca double
%54 = alloca i32
%55 = alloca double
store double* %0, double** %10
store i32 %1, i32* %11
store double* %2, double** %12
store i32* %3, i32** %13
store i32* %4, i32** %14
store i32* %5, i32** %15
store i32* %6, i32** %16
store i32* %7, i32** %17
store i32* %8, i32** %18
%56 = load i32*, i32** %18
%57 = getelementptr inbounds i32, i32* %56, i32 -1
store i32* %57, i32** %18
%58 = load i32*, i32** %17
%59 = getelementptr inbounds i32, i32* %58, i32 -1
store i32* %59, i32** %17
%60 = load i32*, i32** %16
%61 = getelementptr inbounds i32, i32* %60, i32 -1
store i32* %61, i32** %16
%62 = load i32*, i32** %15
%63 = getelementptr inbounds i32, i32* %62, i32 -1
store i32* %63, i32** %15
%64 = load double*, double** %10
%65 = getelementptr inbounds double, double* %64, i32 -1
store double* %65, double** %10
%66 = load i32*, i32** %14
store i32 1, i32* %66
%67 = load i32, i32* %11
%68 = icmp sle i32 %67, 0
br i1 %68, label %69, label %70
69: ; preds = %9
br label %776
70: ; preds = %9
%71 = load i32*, i32** %14
store i32 0, i32* %71
%72 = load i32*, i32** %14
store i32 2, i32* %72
store i32 2, i32* %29
br label %73
73: ; preds = %92, %70
%74 = load i32, i32* %29
%75 = load i32, i32* %11
%76 = icmp sle i32 %74, %75
br i1 %76, label %77, label %95
77: ; preds = %73
%78 = load double*, double** %10
%79 = load i32, i32* %29
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds double, double* %78, i64 %80
%82 = load double, double* %81
%83 = load double*, double** %10
%84 = load i32, i32* %29
%85 = sub nsw i32 %84, 1
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds double, double* %83, i64 %86
%88 = load double, double* %87
%89 = fcmp olt double %82, %88
br i1 %89, label %90, label %91
90: ; preds = %77
br label %776
91: ; preds = %77
br label %92
92: ; preds = %91
%93 = load i32, i32* %29
%94 = add nsw i32 %93, 1
store i32 %94, i32* %29
br label %73
95: ; preds = %73
%96 = load i32*, i32** %14
store i32 0, i32* %96
%97 = load i32*, i32** %13
%98 = getelementptr inbounds i32, i32* %97, i64 0
store i32 1, i32* %98
%99 = load i32, i32* %11
%100 = load i32*, i32** %13
%101 = getelementptr inbounds i32, i32* %100, i64 1
store i32 %99, i32* %101
%102 = load double*, double** %12
store double 0.000000e+00, double* %102
%103 = load i32, i32* %11
%104 = icmp slt i32 %103, 2
br i1 %104, label %115, label %105
105: ; preds = %95
%106 = load double*, double** %10
%107 = load i32, i32* %11
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds double, double* %106, i64 %108
%110 = load double, double* %109
%111 = load double*, double** %10
%112 = getelementptr inbounds double, double* %111, i64 1
%113 = load double, double* %112
%114 = fcmp oeq double %110, %113
br i1 %114, label %115, label %116
115: ; preds = %105, %95
br label %769
116: ; preds = %105
%117 = load i32*, i32** %17
%118 = getelementptr inbounds i32, i32* %117, i64 1
store i32 1, i32* %118
store i32 2, i32* %28
br label %119
119: ; preds = %185, %116
%120 = load i32, i32* %28
%121 = load i32, i32* %11
%122 = icmp sle i32 %120, %121
br i1 %122, label %123, label %188
123: ; preds = %119
%124 = load i32, i32* %28
%125 = sub nsw i32 %124, 1
%126 = load i32*, i32** %17
%127 = load i32, i32* %28
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds i32, i32* %126, i64 %128
store i32 %125, i32* %129
br label %130
130: ; preds = %123, %178
%131 = load i32*, i32** %17
%132 = load i32, i32* %28
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds i32, i32* %131, i64 %133
%135 = load i32, i32* %134
store i32 %135, i32* %19
%136 = load i32*, i32** %17
%137 = load i32, i32* %19
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds i32, i32* %136, i64 %138
%140 = load i32, i32* %139
store i32 %140, i32* %20
%141 = load i32, i32* %19
%142 = icmp eq i32 %141, 1
br i1 %142, label %177, label %143
143: ; preds = %130
%144 = load double*, double** %10
%145 = load i32, i32* %28
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds double, double* %144, i64 %146
%148 = load double, double* %147
%149 = load double*, double** %10
%150 = load i32, i32* %19
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds double, double* %149, i64 %151
%153 = load double, double* %152
%154 = fsub double %148, %153
%155 = load i32, i32* %19
%156 = load i32, i32* %20
%157 = sub nsw i32 %155, %156
%158 = sitofp i32 %157 to double
%159 = fmul double %154, %158
%160 = load double*, double** %10
%161 = load i32, i32* %19
%162 = sext i32 %161 to i64
%163 = getelementptr inbounds double, double* %160, i64 %162
%164 = load double, double* %163
%165 = load double*, double** %10
%166 = load i32, i32* %20
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds double, double* %165, i64 %167
%169 = load double, double* %168
%170 = fsub double %164, %169
%171 = load i32, i32* %28
%172 = load i32, i32* %19
%173 = sub nsw i32 %171, %172
%174 = sitofp i32 %173 to double
%175 = fmul double %170, %174
%176 = fcmp olt double %159, %175
br i1 %176, label %177, label %178
177: ; preds = %143, %130
br label %184
178: ; preds = %143
%179 = load i32, i32* %20
%180 = load i32*, i32** %17
%181 = load i32, i32* %28
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i32, i32* %180, i64 %182
store i32 %179, i32* %183
br label %130
184: ; preds = %177
br label %185
185: ; preds = %184
%186 = load i32, i32* %28
%187 = add nsw i32 %186, 1
store i32 %187, i32* %28
br label %119
188: ; preds = %119
%189 = load i32, i32* %11
%190 = load i32*, i32** %18
%191 = load i32, i32* %11
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds i32, i32* %190, i64 %192
store i32 %189, i32* %193
%194 = load i32, i32* %11
%195 = sub nsw i32 %194, 1
store i32 %195, i32* %29
br label %196
196: ; preds = %262, %188
%197 = load i32, i32* %29
%198 = icmp sge i32 %197, 1
br i1 %198, label %199, label %265
199: ; preds = %196
%200 = load i32, i32* %29
%201 = add nsw i32 %200, 1
%202 = load i32*, i32** %18
%203 = load i32, i32* %29
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds i32, i32* %202, i64 %204
store i32 %201, i32* %205
br label %206
206: ; preds = %199, %255
%207 = load i32*, i32** %18
%208 = load i32, i32* %29
%209 = sext i32 %208 to i64
%210 = getelementptr inbounds i32, i32* %207, i64 %209
%211 = load i32, i32* %210
store i32 %211, i32* %21
%212 = load i32*, i32** %18
%213 = load i32, i32* %21
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds i32, i32* %212, i64 %214
%216 = load i32, i32* %215
store i32 %216, i32* %22
%217 = load i32, i32* %21
%218 = load i32, i32* %11
%219 = icmp eq i32 %217, %218
br i1 %219, label %254, label %220
220: ; preds = %206
%221 = load double*, double** %10
%222 = load i32, i32* %29
%223 = sext i32 %222 to i64
%224 = getelementptr inbounds double, double* %221, i64 %223
%225 = load double, double* %224
%226 = load double*, double** %10
%227 = load i32, i32* %21
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds double, double* %226, i64 %228
%230 = load double, double* %229
%231 = fsub double %225, %230
%232 = load i32, i32* %21
%233 = load i32, i32* %22
%234 = sub nsw i32 %232, %233
%235 = sitofp i32 %234 to double
%236 = fmul double %231, %235
%237 = load double*, double** %10
%238 = load i32, i32* %21
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds double, double* %237, i64 %239
%241 = load double, double* %240
%242 = load double*, double** %10
%243 = load i32, i32* %22
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds double, double* %242, i64 %244
%246 = load double, double* %245
%247 = fsub double %241, %246
%248 = load i32, i32* %29
%249 = load i32, i32* %21
%250 = sub nsw i32 %248, %249
%251 = sitofp i32 %250 to double
%252 = fmul double %247, %251
%253 = fcmp olt double %236, %252
br i1 %253, label %254, label %255
254: ; preds = %220, %206
br label %261
255: ; preds = %220
%256 = load i32, i32* %22
%257 = load i32*, i32** %18
%258 = load i32, i32* %29
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds i32, i32* %257, i64 %259
store i32 %256, i32* %260
br label %206
261: ; preds = %254
br label %262
262: ; preds = %261
%263 = load i32, i32* %29
%264 = add nsw i32 %263, -1
store i32 %264, i32* %29
br label %196
265: ; preds = %196
br label %266
266: ; preds = %753, %265
%267 = load i32*, i32** %13
%268 = getelementptr inbounds i32, i32* %267, i64 1
%269 = load i32, i32* %268
%270 = load i32*, i32** %15
%271 = getelementptr inbounds i32, i32* %270, i64 1
store i32 %269, i32* %271
store i32 1, i32* %27
br label %272
272: ; preds = %297, %266
%273 = load i32*, i32** %15
%274 = load i32, i32* %27
%275 = sext i32 %274 to i64
%276 = getelementptr inbounds i32, i32* %273, i64 %275
%277 = load i32, i32* %276
%278 = load i32*, i32** %13
%279 = getelementptr inbounds i32, i32* %278, i64 0
%280 = load i32, i32* %279
%281 = icmp sgt i32 %277, %280
br i1 %281, label %282, label %300
282: ; preds = %272
%283 = load i32*, i32** %17
%284 = load i32*, i32** %15
%285 = load i32, i32* %27
%286 = sext i32 %285 to i64
%287 = getelementptr inbounds i32, i32* %284, i64 %286
%288 = load i32, i32* %287
%289 = sext i32 %288 to i64
%290 = getelementptr inbounds i32, i32* %283, i64 %289
%291 = load i32, i32* %290
%292 = load i32*, i32** %15
%293 = load i32, i32* %27
%294 = add nsw i32 %293, 1
%295 = sext i32 %294 to i64
%296 = getelementptr inbounds i32, i32* %292, i64 %295
store i32 %291, i32* %296
br label %297
297: ; preds = %282
%298 = load i32, i32* %27
%299 = add nsw i32 %298, 1
store i32 %299, i32* %27
br label %272
300: ; preds = %272
%301 = load i32, i32* %27
%302 = load i32*, i32** %13
%303 = getelementptr inbounds i32, i32* %302, i64 2
store i32 %301, i32* %303
store i32 %301, i32* %23
%304 = load i32, i32* %23
%305 = sub nsw i32 %304, 1
store i32 %305, i32* %26
%306 = load i32*, i32** %13
%307 = getelementptr inbounds i32, i32* %306, i64 0
%308 = load i32, i32* %307
%309 = load i32*, i32** %16
%310 = getelementptr inbounds i32, i32* %309, i64 1
store i32 %308, i32* %310
store i32 1, i32* %27
br label %311
311: ; preds = %336, %300
%312 = load i32*, i32** %16
%313 = load i32, i32* %27
%314 = sext i32 %313 to i64
%315 = getelementptr inbounds i32, i32* %312, i64 %314
%316 = load i32, i32* %315
%317 = load i32*, i32** %13
%318 = getelementptr inbounds i32, i32* %317, i64 1
%319 = load i32, i32* %318
%320 = icmp slt i32 %316, %319
br i1 %320, label %321, label %339
321: ; preds = %311
%322 = load i32*, i32** %18
%323 = load i32*, i32** %16
%324 = load i32, i32* %27
%325 = sext i32 %324 to i64
%326 = getelementptr inbounds i32, i32* %323, i64 %325
%327 = load i32, i32* %326
%328 = sext i32 %327 to i64
%329 = getelementptr inbounds i32, i32* %322, i64 %328
%330 = load i32, i32* %329
%331 = load i32*, i32** %16
%332 = load i32, i32* %27
%333 = add nsw i32 %332, 1
%334 = sext i32 %333 to i64
%335 = getelementptr inbounds i32, i32* %331, i64 %334
store i32 %330, i32* %335
br label %336
336: ; preds = %321
%337 = load i32, i32* %27
%338 = add nsw i32 %337, 1
store i32 %338, i32* %27
br label %311
339: ; preds = %311
%340 = load i32, i32* %27
%341 = load i32*, i32** %13
%342 = getelementptr inbounds i32, i32* %341, i64 3
store i32 %340, i32* %342
store i32 %340, i32* %24
store i32 2, i32* %25
store x86_fp80 0xK00000000000000000000, x86_fp80* %33
%343 = load i32*, i32** %13
%344 = getelementptr inbounds i32, i32* %343, i64 2
%345 = load i32, i32* %344
%346 = icmp ne i32 %345, 2
br i1 %346, label %352, label %347
347: ; preds = %339
%348 = load i32*, i32** %13
%349 = getelementptr inbounds i32, i32* %348, i64 3
%350 = load i32, i32* %349
%351 = icmp ne i32 %350, 2
br i1 %351, label %352, label %506
352: ; preds = %347, %339
br label %353
353: ; preds = %493, %352
%354 = load i32*, i32** %15
%355 = load i32, i32* %26
%356 = sext i32 %355 to i64
%357 = getelementptr inbounds i32, i32* %354, i64 %356
%358 = load i32, i32* %357
store i32 %358, i32* %35
%359 = load i32*, i32** %16
%360 = load i32, i32* %25
%361 = sext i32 %360 to i64
%362 = getelementptr inbounds i32, i32* %359, i64 %361
%363 = load i32, i32* %362
store i32 %363, i32* %36
%364 = load i32, i32* %35
%365 = load i32, i32* %36
%366 = icmp sgt i32 %364, %365
br i1 %366, label %367, label %423
367: ; preds = %353
%368 = load i32*, i32** %15
%369 = load i32, i32* %26
%370 = add nsw i32 %369, 1
%371 = sext i32 %370 to i64
%372 = getelementptr inbounds i32, i32* %368, i64 %371
%373 = load i32, i32* %372
store i32 %373, i32* %37
%374 = load i32, i32* %36
%375 = load i32, i32* %37
%376 = sub nsw i32 %374, %375
%377 = add nsw i32 %376, 1
%378 = sitofp i32 %377 to x86_fp80
%379 = load double*, double** %10
%380 = load i32, i32* %36
%381 = sext i32 %380 to i64
%382 = getelementptr inbounds double, double* %379, i64 %381
%383 = load double, double* %382
%384 = fpext double %383 to x86_fp80
%385 = load double*, double** %10
%386 = load i32, i32* %37
%387 = sext i32 %386 to i64
%388 = getelementptr inbounds double, double* %385, i64 %387
%389 = load double, double* %388
%390 = fpext double %389 to x86_fp80
%391 = fsub x86_fp80 %384, %390
%392 = load i32, i32* %35
%393 = load i32, i32* %37
%394 = sub nsw i32 %392, %393
%395 = sitofp i32 %394 to x86_fp80
%396 = fmul x86_fp80 %391, %395
%397 = load double*, double** %10
%398 = load i32, i32* %35
%399 = sext i32 %398 to i64
%400 = getelementptr inbounds double, double* %397, i64 %399
%401 = load double, double* %400
%402 = load double*, double** %10
%403 = load i32, i32* %37
%404 = sext i32 %403 to i64
%405 = getelementptr inbounds double, double* %402, i64 %404
%406 = load double, double* %405
%407 = fsub double %401, %406
%408 = fpext double %407 to x86_fp80
%409 = fdiv x86_fp80 %396, %408
%410 = fsub x86_fp80 %378, %409
store x86_fp80 %410, x86_fp80* %34
%411 = load i32, i32* %25
%412 = add nsw i32 %411, 1
store i32 %412, i32* %25
%413 = load x86_fp80, x86_fp80* %34
%414 = load x86_fp80, x86_fp80* %33
%415 = fcmp oge x86_fp80 %413, %414
br i1 %415, label %416, label %422
416: ; preds = %367
%417 = load x86_fp80, x86_fp80* %34
store x86_fp80 %417, x86_fp80* %33
%418 = load i32, i32* %26
%419 = add nsw i32 %418, 1
store i32 %419, i32* %23
%420 = load i32, i32* %25
%421 = sub nsw i32 %420, 1
store i32 %421, i32* %24
br label %422
422: ; preds = %416, %367
br label %478
423: ; preds = %353
%424 = load i32*, i32** %16
%425 = load i32, i32* %25
%426 = sub nsw i32 %425, 1
%427 = sext i32 %426 to i64
%428 = getelementptr inbounds i32, i32* %424, i64 %427
%429 = load i32, i32* %428
store i32 %429, i32* %38
%430 = load double*, double** %10
%431 = load i32, i32* %35
%432 = sext i32 %431 to i64
%433 = getelementptr inbounds double, double* %430, i64 %432
%434 = load double, double* %433
%435 = fpext double %434 to x86_fp80
%436 = load double*, double** %10
%437 = load i32, i32* %38
%438 = sext i32 %437 to i64
%439 = getelementptr inbounds double, double* %436, i64 %438
%440 = load double, double* %439
%441 = fpext double %440 to x86_fp80
%442 = fsub x86_fp80 %435, %441
%443 = load i32, i32* %36
%444 = load i32, i32* %38
%445 = sub nsw i32 %443, %444
%446 = sitofp i32 %445 to x86_fp80
%447 = fmul x86_fp80 %442, %446
%448 = load double*, double** %10
%449 = load i32, i32* %36
%450 = sext i32 %449 to i64
%451 = getelementptr inbounds double, double* %448, i64 %450
%452 = load double, double* %451
%453 = load double*, double** %10
%454 = load i32, i32* %38
%455 = sext i32 %454 to i64
%456 = getelementptr inbounds double, double* %453, i64 %455
%457 = load double, double* %456
%458 = fsub double %452, %457
%459 = fpext double %458 to x86_fp80
%460 = fdiv x86_fp80 %447, %459
%461 = load i32, i32* %35
%462 = load i32, i32* %38
%463 = sub nsw i32 %461, %462
%464 = sub nsw i32 %463, 1
%465 = sitofp i32 %464 to x86_fp80
%466 = fsub x86_fp80 %460, %465
store x86_fp80 %466, x86_fp80* %34
%467 = load i32, i32* %26
%468 = add nsw i32 %467, -1
store i32 %468, i32* %26
%469 = load x86_fp80, x86_fp80* %34
%470 = load x86_fp80, x86_fp80* %33
%471 = fcmp oge x86_fp80 %469, %470
br i1 %471, label %472, label %477
472: ; preds = %423
%473 = load x86_fp80, x86_fp80* %34
store x86_fp80 %473, x86_fp80* %33
%474 = load i32, i32* %26
%475 = add nsw i32 %474, 1
store i32 %475, i32* %23
%476 = load i32, i32* %25
store i32 %476, i32* %24
br label %477
477: ; preds = %472, %423
br label %478
478: ; preds = %477, %422
%479 = load i32, i32* %26
%480 = icmp slt i32 %479, 1
br i1 %480, label %481, label %482
481: ; preds = %478
store i32 1, i32* %26
br label %482
482: ; preds = %481, %478
%483 = load i32, i32* %25
%484 = load i32*, i32** %13
%485 = getelementptr inbounds i32, i32* %484, i64 3
%486 = load i32, i32* %485
%487 = icmp sgt i32 %483, %486
br i1 %487, label %488, label %492
488: ; preds = %482
%489 = load i32*, i32** %13
%490 = getelementptr inbounds i32, i32* %489, i64 3
%491 = load i32, i32* %490
store i32 %491, i32* %25
br label %492
492: ; preds = %488, %482
br label %493
493: ; preds = %492
%494 = load i32*, i32** %15
%495 = load i32, i32* %26
%496 = sext i32 %495 to i64
%497 = getelementptr inbounds i32, i32* %494, i64 %496
%498 = load i32, i32* %497
%499 = load i32*, i32** %16
%500 = load i32, i32* %25
%501 = sext i32 %500 to i64
%502 = getelementptr inbounds i32, i32* %499, i64 %501
%503 = load i32, i32* %502
%504 = icmp ne i32 %498, %503
br i1 %504, label %353, label %505
505: ; preds = %493
br label %507
506: ; preds = %347
store x86_fp80 0xK00000000000000000000, x86_fp80* %33
br label %507
507: ; preds = %506, %505
%508 = load x86_fp80, x86_fp80* %33
%509 = load double*, double** %12
%510 = load double, double* %509
%511 = fpext double %510 to x86_fp80
%512 = fcmp olt x86_fp80 %508, %511
br i1 %512, label %513, label %514
513: ; preds = %507
br label %769
514: ; preds = %507
store i32 -1, i32* %40
store i32 -1, i32* %41
store double 0.000000e+00, double* %30
%515 = load i32, i32* %23
store i32 %515, i32* %28
br label %516
516: ; preds = %611, %514
%517 = load i32, i32* %28
%518 = load i32*, i32** %13
%519 = getelementptr inbounds i32, i32* %518, i64 2
%520 = load i32, i32* %519
%521 = icmp slt i32 %517, %520
br i1 %521, label %522, label %614
522: ; preds = %516
store double 1.000000e+00, double* %42
store i32 -1, i32* %43
%523 = load i32*, i32** %15
%524 = load i32, i32* %28
%525 = add nsw i32 %524, 1
%526 = sext i32 %525 to i64
%527 = getelementptr inbounds i32, i32* %523, i64 %526
%528 = load i32, i32* %527
store i32 %528, i32* %44
%529 = load i32*, i32** %15
%530 = load i32, i32* %28
%531 = sext i32 %530 to i64
%532 = getelementptr inbounds i32, i32* %529, i64 %531
%533 = load i32, i32* %532
store i32 %533, i32* %45
%534 = load i32, i32* %45
%535 = load i32, i32* %44
%536 = sub nsw i32 %534, %535
%537 = icmp sgt i32 %536, 1
br i1 %537, label %538, label %603
538: ; preds = %522
%539 = load double*, double** %10
%540 = load i32, i32* %45
%541 = sext i32 %540 to i64
%542 = getelementptr inbounds double, double* %539, i64 %541
%543 = load double, double* %542
%544 = load double*, double** %10
%545 = load i32, i32* %44
%546 = sext i32 %545 to i64
%547 = getelementptr inbounds double, double* %544, i64 %546
%548 = load double, double* %547
%549 = fcmp une double %543, %548
br i1 %549, label %550, label %603
550: ; preds = %538
%551 = load i32, i32* %45
%552 = load i32, i32* %44
%553 = sub nsw i32 %551, %552
%554 = sitofp i32 %553 to double
%555 = load double*, double** %10
%556 = load i32, i32* %45
%557 = sext i32 %556 to i64
%558 = getelementptr inbounds double, double* %555, i64 %557
%559 = load double, double* %558
%560 = load double*, double** %10
%561 = load i32, i32* %44
%562 = sext i32 %561 to i64
%563 = getelementptr inbounds double, double* %560, i64 %562
%564 = load double, double* %563
%565 = fsub double %559, %564
%566 = fdiv double %554, %565
store double %566, double* %46
%567 = load i32, i32* %44
store i32 %567, i32* %47
br label %568
568: ; preds = %599, %550
%569 = load i32, i32* %47
%570 = load i32, i32* %45
%571 = icmp sle i32 %569, %570
br i1 %571, label %572, label %602
572: ; preds = %568
%573 = load i32, i32* %47
%574 = load i32, i32* %44
%575 = sub nsw i32 %573, %574
%576 = add nsw i32 %575, 1
%577 = sitofp i32 %576 to double
%578 = load double*, double** %10
%579 = load i32, i32* %47
%580 = sext i32 %579 to i64
%581 = getelementptr inbounds double, double* %578, i64 %580
%582 = load double, double* %581
%583 = load double*, double** %10
%584 = load i32, i32* %44
%585 = sext i32 %584 to i64
%586 = getelementptr inbounds double, double* %583, i64 %585
%587 = load double, double* %586
%588 = fsub double %582, %587
%589 = load double, double* %46
%590 = fneg double %588
%591 = call double @llvm.fmuladd.f64(double %590, double %589, double %577)
store double %591, double* %48
%592 = load double, double* %42
%593 = load double, double* %48
%594 = fcmp olt double %592, %593
br i1 %594, label %595, label %598
595: ; preds = %572
%596 = load double, double* %48
store double %596, double* %42
%597 = load i32, i32* %47
store i32 %597, i32* %43
br label %598
598: ; preds = %595, %572
br label %599
599: ; preds = %598
%600 = load i32, i32* %47
%601 = add nsw i32 %600, 1
store i32 %601, i32* %47
br label %568
602: ; preds = %568
br label %603
603: ; preds = %602, %538, %522
%604 = load double, double* %30
%605 = load double, double* %42
%606 = fcmp olt double %604, %605
br i1 %606, label %607, label %610
607: ; preds = %603
%608 = load double, double* %42
store double %608, double* %30
%609 = load i32, i32* %43
store i32 %609, i32* %40
br label %610
610: ; preds = %607, %603
br label %611
611: ; preds = %610
%612 = load i32, i32* %28
%613 = add nsw i32 %612, 1
store i32 %613, i32* %28
br label %516
614: ; preds = %516
store double 0.000000e+00, double* %31
%615 = load i32, i32* %24
store i32 %615, i32* %28
br label %616
616: ; preds = %711, %614
%617 = load i32, i32* %28
%618 = load i32*, i32** %13
%619 = getelementptr inbounds i32, i32* %618, i64 3
%620 = load i32, i32* %619
%621 = icmp slt i32 %617, %620
br i1 %621, label %622, label %714
622: ; preds = %616
store double 1.000000e+00, double* %49
store i32 -1, i32* %50
%623 = load i32*, i32** %16
%624 = load i32, i32* %28
%625 = sext i32 %624 to i64
%626 = getelementptr inbounds i32, i32* %623, i64 %625
%627 = load i32, i32* %626
store i32 %627, i32* %51
%628 = load i32*, i32** %16
%629 = load i32, i32* %28
%630 = add nsw i32 %629, 1
%631 = sext i32 %630 to i64
%632 = getelementptr inbounds i32, i32* %628, i64 %631
%633 = load i32, i32* %632
store i32 %633, i32* %52
%634 = load i32, i32* %52
%635 = load i32, i32* %51
%636 = sub nsw i32 %634, %635
%637 = icmp sgt i32 %636, 1
br i1 %637, label %638, label %703
638: ; preds = %622
%639 = load double*, double** %10
%640 = load i32, i32* %52
%641 = sext i32 %640 to i64
%642 = getelementptr inbounds double, double* %639, i64 %641
%643 = load double, double* %642
%644 = load double*, double** %10
%645 = load i32, i32* %51
%646 = sext i32 %645 to i64
%647 = getelementptr inbounds double, double* %644, i64 %646
%648 = load double, double* %647
%649 = fcmp une double %643, %648
br i1 %649, label %650, label %703
650: ; preds = %638
%651 = load i32, i32* %52
%652 = load i32, i32* %51
%653 = sub nsw i32 %651, %652
%654 = sitofp i32 %653 to double
%655 = load double*, double** %10
%656 = load i32, i32* %52
%657 = sext i32 %656 to i64
%658 = getelementptr inbounds double, double* %655, i64 %657
%659 = load double, double* %658
%660 = load double*, double** %10
%661 = load i32, i32* %51
%662 = sext i32 %661 to i64
%663 = getelementptr inbounds double, double* %660, i64 %662
%664 = load double, double* %663
%665 = fsub double %659, %664
%666 = fdiv double %654, %665
store double %666, double* %53
%667 = load i32, i32* %51
store i32 %667, i32* %54
br label %668
668: ; preds = %699, %650
%669 = load i32, i32* %54
%670 = load i32, i32* %52
%671 = icmp sle i32 %669, %670
br i1 %671, label %672, label %702
672: ; preds = %668
%673 = load double*, double** %10
%674 = load i32, i32* %54
%675 = sext i32 %674 to i64
%676 = getelementptr inbounds double, double* %673, i64 %675
%677 = load double, double* %676
%678 = load double*, double** %10
%679 = load i32, i32* %51
%680 = sext i32 %679 to i64
%681 = getelementptr inbounds double, double* %678, i64 %680
%682 = load double, double* %681
%683 = fsub double %677, %682
%684 = load double, double* %53
%685 = load i32, i32* %54
%686 = load i32, i32* %51
%687 = sub nsw i32 %685, %686
%688 = sub nsw i32 %687, 1
%689 = sitofp i32 %688 to double
%690 = fneg double %689
%691 = call double @llvm.fmuladd.f64(double %683, double %684, double %690)
store double %691, double* %55
%692 = load double, double* %49
%693 = load double, double* %55
%694 = fcmp olt double %692, %693
br i1 %694, label %695, label %698
695: ; preds = %672
%696 = load double, double* %55
store double %696, double* %49
%697 = load i32, i32* %54
store i32 %697, i32* %50
br label %698
698: ; preds = %695, %672
br label %699
699: ; preds = %698
%700 = load i32, i32* %54
%701 = add nsw i32 %700, 1
store i32 %701, i32* %54
br label %668
702: ; preds = %668
br label %703
703: ; preds = %702, %638, %622
%704 = load double, double* %31
%705 = load double, double* %49
%706 = fcmp olt double %704, %705
br i1 %706, label %707, label %710
707: ; preds = %703
%708 = load double, double* %49
store double %708, double* %31
%709 = load i32, i32* %50
store i32 %709, i32* %41
br label %710
710: ; preds = %707, %703
br label %711
711: ; preds = %710
%712 = load i32, i32* %28
%713 = add nsw i32 %712, 1
store i32 %713, i32* %28
br label %616
714: ; preds = %616
%715 = load double, double* %31
%716 = load double, double* %30
%717 = fcmp ogt double %715, %716
br i1 %717, label %718, label %721
718: ; preds = %714
%719 = load double, double* %31
store double %719, double* %32
%720 = load i32, i32* %41
store i32 %720, i32* %39
br label %724
721: ; preds = %714
%722 = load double, double* %30
store double %722, double* %32
%723 = load i32, i32* %40
store i32 %723, i32* %39
br label %724
724: ; preds = %721, %718
%725 = load double*, double** %12
%726 = load double, double* %725
%727 = load double, double* %32
%728 = fcmp olt double %726, %727
br i1 %728, label %729, label %732
729: ; preds = %724
%730 = load double, double* %32
%731 = load double*, double** %12
store double %730, double* %731
br label %732
732: ; preds = %729, %724
%733 = load i32*, i32** %13
%734 = getelementptr inbounds i32, i32* %733, i64 0
%735 = load i32, i32* %734
%736 = load i32*, i32** %15
%737 = load i32, i32* %23
%738 = sext i32 %737 to i64
%739 = getelementptr inbounds i32, i32* %736, i64 %738
%740 = load i32, i32* %739
%741 = icmp eq i32 %735, %740
br i1 %741, label %742, label %753
742: ; preds = %732
%743 = load i32*, i32** %13
%744 = getelementptr inbounds i32, i32* %743, i64 1
%745 = load i32, i32* %744
%746 = load i32*, i32** %16
%747 = load i32, i32* %24
%748 = sext i32 %747 to i64
%749 = getelementptr inbounds i32, i32* %746, i64 %748
%750 = load i32, i32* %749
%751 = icmp eq i32 %745, %750
br i1 %751, label %752, label %753
752: ; preds = %742
br label %768
753: ; preds = %742, %732
%754 = load i32*, i32** %15
%755 = load i32, i32* %23
%756 = sext i32 %755 to i64
%757 = getelementptr inbounds i32, i32* %754, i64 %756
%758 = load i32, i32* %757
%759 = load i32*, i32** %13
%760 = getelementptr inbounds i32, i32* %759, i64 0
store i32 %758, i32* %760
%761 = load i32*, i32** %16
%762 = load i32, i32* %24
%763 = sext i32 %762 to i64
%764 = getelementptr inbounds i32, i32* %761, i64 %763
%765 = load i32, i32* %764
%766 = load i32*, i32** %13
%767 = getelementptr inbounds i32, i32* %766, i64 1
store i32 %765, i32* %767
br label %266
768: ; preds = %752
br label %769
769: ; preds = %768, %513, %115
%770 = load i32, i32* %11
%771 = mul nsw i32 2, %770
%772 = sitofp i32 %771 to double
%773 = load double*, double** %12
%774 = load double, double* %773
%775 = fdiv double %774, %772
store double %775, double* %773
br label %776
776: ; preds = %769, %90, %69
ret void
}

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