int interp3d(int *n, int *nInterp, double *x, double *y, double *z, double ***f,
             double ***fi) {
  int i, j, k, m, mx, my, mz;
  unsigned int nx, ny, nz, nxi, nyi, nzi;
  double dx, dy, dz, dxi, dyi, dzi, factor, L1, L2, L3, L1m, L2m, L3m;
  double M[8], ftmp[8];
  double *xi, *yi, *zi;
  nx = n[0];
  ny = n[1];
  nz = n[2];
  nxi = nInterp[0];
  nyi = nInterp[1];
  nzi = nInterp[2];
  dx = 1.0 / (x[1] - x[0]);
  dy = 1.0 / (y[1] - y[0]);
  dz = 1.0 / (z[1] - z[0]);
  dxi = (x[nx - 1] - x[0]) / ((double)nxi - 1.0);
  dyi = (y[ny - 1] - y[0]) / ((double)nyi - 1.0);
  dzi = (z[nz - 1] - z[0]) / ((double)nzi - 1.0);
  xi = doubleVector(nxi, 0);
  yi = doubleVector(nyi, 0);
  zi = doubleVector(nzi, 0);
  for (i = 0; i < nxi; i++)
    xi[i] = x[0] + i * dxi;
  for (i = 0; i < nyi; i++)
    yi[i] = y[0] + i * dyi;
  for (i = 0; i < nzi; i++)
    zi[i] = z[0] + i * dzi;
  for (i = 0; i < nxi; i++) {
    for (m = 0; m < nx - 1; m++)
      if (xi[i] >= x[m] && xi[i] <= x[m + 1])
        mx = m;
    L1 = (xi[i] - x[mx]) * dx;
    L1m = 1.0 - L1;
    for (j = 0; j < nyi; j++) {
      for (m = 0; m < ny - 1; m++)
        if (yi[j] >= y[m] && yi[j] <= y[m + 1])
          my = m;
      L2 = (yi[j] - y[my]) * dy;
      L2m = 1.0 - L2;
      for (k = 0; k < nzi; k++) {
        for (m = 0; m < nz - 1; m++)
          if (zi[k] >= z[m] && zi[k] <= z[m + 1])
            mz = m;
        ftmp[0] = f[mx][my][mz];
        ftmp[1] = f[mx + 1][my][mz];
        ftmp[2] = f[mx][my + 1][mz];
        ftmp[3] = f[mx + 1][my + 1][mz];
        ftmp[4] = f[mx][my][mz + 1];
        ftmp[5] = f[mx + 1][my][mz + 1];
        ftmp[6] = f[mx][my + 1][mz + 1];
        ftmp[7] = f[mx + 1][my + 1][mz + 1];
        L3 = (zi[k] - z[mz]) * dz;
        L3m = 1.0 - L3;
        M[0] = L1m * L2m * L3m;
        M[1] = L1 * L2m * L3m;
        M[2] = L1m * L2 * L3m;
        M[3] = L1 * L2 * L3m;
        M[4] = L1m * L2m * L3;
        M[5] = L1 * L2m * L3;
        M[6] = L1m * L2 * L3;
        M[7] = L1 * L2 * L3;
        fi[i][j][k] = M[0] * ftmp[0] + M[1] * ftmp[1] + M[2] * ftmp[2] +
                      M[3] * ftmp[3] + M[4] * ftmp[4] + M[5] * ftmp[5] +
                      M[6] * ftmp[6] + M[7] * ftmp[7];
      }
    }
  }
  free(xi);
  free(yi);
  free(zi);
  return 0;
}


x86 assembly (clang, -O0):
<interp3d>:
push   %rbp
mov    %rsp,%rbp
sub    $0x170,%rsp
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    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x50(%rbp)
mov    -0x8(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x54(%rbp)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%eax
mov    %eax,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x10(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x60(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%eax
mov    %eax,-0x64(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x8(%rax),%xmm1
subsd  %xmm0,%xmm1
movsd  0xe66(%rip),%xmm2
movaps %xmm2,%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x8(%rax),%xmm1
subsd  %xmm0,%xmm1
movaps %xmm2,%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x8(%rax),%xmm1
subsd  %xmm0,%xmm1
movaps %xmm2,%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x50(%rbp),%ecx
add    $0xffffffff,%ecx
movsd  (%rax,%rcx,8),%xmm0
movsd  (%rax),%xmm1
subsd  %xmm1,%xmm0
mov    -0x5c(%rbp),%eax
cvtsi2sd %rax,%xmm1
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x20(%rbp),%rax
mov    -0x54(%rbp),%ecx
add    $0xffffffff,%ecx
movsd  (%rax,%rcx,8),%xmm0
movsd  (%rax),%xmm1
subsd  %xmm1,%xmm0
mov    -0x60(%rbp),%eax
cvtsi2sd %rax,%xmm1
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x28(%rbp),%rax
mov    -0x58(%rbp),%ecx
add    $0xffffffff,%ecx
movsd  (%rax,%rcx,8),%xmm0
movsd  (%rax),%xmm1
subsd  %xmm1,%xmm0
mov    -0x64(%rbp),%eax
cvtsi2sd %rax,%xmm1
movsd  0xd9b(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x5c(%rbp),%edi
xor    %esi,%esi
mov    $0x0,%al
call   1040 <doubleVector@plt>
cltq
mov    %rax,-0x158(%rbp)
mov    -0x60(%rbp),%edi
xor    %esi,%esi
mov    $0x0,%al
call   1040 <doubleVector@plt>
cltq
mov    %rax,-0x160(%rbp)
mov    -0x64(%rbp),%edi
xor    %esi,%esi
mov    $0x0,%al
call   1040 <doubleVector@plt>
cltq
mov    %rax,-0x168(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x5c(%rbp),%eax
jae    1302 <interp3d+0x1e2>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
cvtsi2sdl -0x34(%rbp),%xmm0
movsd  -0x88(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x158(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12bb <interp3d+0x19b>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x60(%rbp),%eax
jae    1350 <interp3d+0x230>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
cvtsi2sdl -0x34(%rbp),%xmm0
movsd  -0x90(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x160(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1309 <interp3d+0x1e9>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x64(%rbp),%eax
jae    139e <interp3d+0x27e>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
cvtsi2sdl -0x34(%rbp),%xmm0
movsd  -0x98(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x168(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1357 <interp3d+0x237>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x5c(%rbp),%eax
jae    198a <interp3d+0x86a>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x50(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jae    1431 <interp3d+0x311>
mov    -0x158(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jb     141e <interp3d+0x2fe>
mov    -0x158(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jb     141e <interp3d+0x2fe>
mov    -0x40(%rbp),%eax
mov    %eax,-0x44(%rbp)
jmp    1423 <interp3d+0x303>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    13b8 <interp3d+0x298>
mov    -0x158(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0xb9d(%rip),%xmm0
subsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x60(%rbp),%eax
jae    1977 <interp3d+0x857>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x54(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jae    1506 <interp3d+0x3e6>
mov    -0x160(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x40(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jb     14f3 <interp3d+0x3d3>
mov    -0x160(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jb     14f3 <interp3d+0x3d3>
mov    -0x40(%rbp),%eax
mov    %eax,-0x48(%rbp)
jmp    14f8 <interp3d+0x3d8>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    148d <interp3d+0x36d>
mov    -0x160(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x48(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  0xac8(%rip),%xmm0
subsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x64(%rbp),%eax
jae    1964 <interp3d+0x844>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x58(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jae    15db <interp3d+0x4bb>
mov    -0x168(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
ucomisd (%rax,%rcx,8),%xmm0
jb     15c8 <interp3d+0x4a8>
mov    -0x168(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x28(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jb     15c8 <interp3d+0x4a8>
mov    -0x40(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    15cd <interp3d+0x4ad>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1562 <interp3d+0x442>
mov    -0x30(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
mov    -0x30(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
mov    -0x30(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x48(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
mov    -0x30(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x48(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
mov    -0x30(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x4c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    -0x30(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x4c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
mov    -0x30(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x48(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x4c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
mov    -0x30(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x48(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x4c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    -0x168(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  0x88f(%rip),%xmm0
subsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0xc8(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
mulsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  -0xb0(%rbp),%xmm0
ff
mulsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
movsd  -0x150(%rbp),%xmm2
ff
movsd  -0x108(%rbp),%xmm1
ff
mulsd  -0x148(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x100(%rbp),%xmm1
ff
movsd  -0x140(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
movsd  -0x138(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xf0(%rbp),%xmm1
ff
movsd  -0x130(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x128(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xe0(%rbp),%xmm1
ff
movsd  -0x120(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0x118(%rbp),%xmm2
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    154f <interp3d+0x42f>
jmp    1969 <interp3d+0x849>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    147a <interp3d+0x35a>
jmp    197c <interp3d+0x85c>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    13a5 <interp3d+0x285>
mov    -0x158(%rbp),%rdi
call   1030 <free@plt>
mov    -0x160(%rbp),%rdi
call   1030 <free@plt>
mov    -0x168(%rbp),%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x170,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<interp3d>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xb8,%rsp
mov    %r9,0xb0(%rsp)
mov    %r8,%rbx
mov    %rcx,%r15
mov    %rdx,%rbp
mov    (%rdi),%eax
mov    0x4(%rdi),%ecx
mov    0x8(%rdi),%r12d
mov    (%rsi),%edi
mov    %rdi,0x50(%rsp)
mov    0x4(%rsi),%r13d
mov    0x8(%rsi),%r14d
movsd  (%rdx),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x8(%rdx),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  (%r15),%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0x8(%r15),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  (%r8),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x8(%r8),%xmm0
movsd  %xmm0,0x20(%rsp)
add    $0xffffffff,%eax
mov    %rax,0x58(%rsp)
movsd  (%rdx,%rax,8),%xmm0
movaps %xmm0,0x90(%rsp)
add    $0xffffffff,%ecx
mov    %rcx,0x68(%rsp)
movsd  (%r15,%rcx,8),%xmm0
movaps %xmm0,0x80(%rsp)
add    $0xffffffff,%r12d
movsd  (%r8,%r12,8),%xmm0
movaps %xmm0,0x70(%rsp)
xor    %esi,%esi
xor    %eax,%eax
call   1040 <doubleVector@plt>
mov    %eax,0x30(%rsp)
mov    %r13,0x60(%rsp)
mov    %r13d,%edi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <doubleVector@plt>
mov    %eax,0x40(%rsp)
mov    %r14,0x8(%rsp)
mov    %r14d,%edi
xor    %esi,%esi
xor    %eax,%eax
call   1040 <doubleVector@plt>
movapd 0x90(%rsp),%xmm0
movsd  0x38(%rsp),%xmm8
mov    0x50(%rsp),%r13
mov    %rbp,%r9
movsd  0xddd(%rip),%xmm11
movslq 0x30(%rsp),%rdi
test   %r13,%r13
je     1361 <interp3d+0x241>
cvtsi2sd %r13,%xmm1
subsd  %xmm8,%xmm0
addsd  %xmm11,%xmm1
divsd  %xmm1,%xmm0
cmp    $0x4,%r13d
jb     1268 <interp3d+0x148>
lea    0x8(%r9),%rcx
cmp    %rcx,%rdi
jae    12dc <interp3d+0x1bc>
lea    (%rdi,%r13,8),%rcx
cmp    %r9,%rcx
jbe    12dc <interp3d+0x1bc>
xor    %ecx,%ecx
mov    %rcx,%rdx
not    %rdx
test   $0x1,%r13b
je     128f <interp3d+0x16f>
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r9),%xmm1
movsd  %xmm1,(%rdi,%rcx,8)
or     $0x1,%rcx
add    %r13,%rdx
je     1361 <interp3d+0x241>
nopl   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r9),%xmm1
lea    0x1(%rcx),%edx
xorps  %xmm2,%xmm2
cvtsi2sd %edx,%xmm2
movsd  %xmm1,(%rdi,%rcx,8)
mulsd  %xmm0,%xmm2
addsd  (%r9),%xmm2
movsd  %xmm2,0x8(%rdi,%rcx,8)
add    $0x2,%rcx
cmp    %r13,%rcx
jne    12a0 <interp3d+0x180>
jmp    1361 <interp3d+0x241>
mov    %r13d,%ecx
and    $0xfffffffc,%ecx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
movsd  (%r9),%xmm2
unpcklpd %xmm2,%xmm2
lea    0x0(,%r13,8),%rdx
and    $0xffffffffffffffe0,%rdx
movdqa 0xd09(%rip),%xmm3
xor    %esi,%esi
movdqa 0xd0f(%rip),%xmm4
movdqa 0xd17(%rip),%xmm5
nopl   0x0(%rax)
movdqa %xmm3,%xmm6
cvtdq2pd %xmm3,%xmm7
paddd  %xmm4,%xmm6
cvtdq2pd %xmm6,%xmm6
mulpd  %xmm1,%xmm7
addpd  %xmm2,%xmm7
mulpd  %xmm1,%xmm6
addpd  %xmm2,%xmm6
movupd %xmm7,(%rdi,%rsi,1)
movupd %xmm6,0x10(%rdi,%rsi,1)
paddd  %xmm5,%xmm3
add    $0x20,%rsi
cmp    %rsi,%rdx
jne    1320 <interp3d+0x200>
cmp    %r13,%rcx
jne    126a <interp3d+0x14a>
movslq 0x40(%rsp),%rbp
mov    0x60(%rsp),%r10
test   %r10,%r10
mov    0x58(%rsp),%r8
mov    0x68(%rsp),%r11
movsd  0x48(%rsp),%xmm9
movsd  0x18(%rsp),%xmm10
movapd 0x70(%rsp),%xmm4
movapd 0x80(%rsp),%xmm0
je     14d3 <interp3d+0x3b3>
xorps  %xmm1,%xmm1
cvtsi2sd %r10,%xmm1
subsd  %xmm9,%xmm0
addsd  %xmm11,%xmm1
divsd  %xmm1,%xmm0
cmp    $0x4,%r10d
jb     13d4 <interp3d+0x2b4>
lea    0x8(%r15),%rcx
cmp    %rcx,%rbp
jae    144d <interp3d+0x32d>
lea    0x0(,%r10,8),%rcx
add    %rbp,%rcx
cmp    %r15,%rcx
jbe    144d <interp3d+0x32d>
xor    %ecx,%ecx
mov    %rcx,%rdx
not    %rdx
test   $0x1,%r10b
je     13fc <interp3d+0x2dc>
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r15),%xmm1
movsd  %xmm1,0x0(%rbp,%rcx,8)
or     $0x1,%rcx
add    %r10,%rdx
je     14d3 <interp3d+0x3b3>
cs nopw 0x0(%rax,%rax,1)
nop
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
mulsd  %xmm0,%xmm1
addsd  (%r15),%xmm1
lea    0x1(%rcx),%edx
xorps  %xmm2,%xmm2
cvtsi2sd %edx,%xmm2
movsd  %xmm1,0x0(%rbp,%rcx,8)
mulsd  %xmm0,%xmm2
addsd  (%r15),%xmm2
movsd  %xmm2,0x8(%rbp,%rcx,8)
add    $0x2,%rcx
cmp    %r10,%rcx
jne    1410 <interp3d+0x2f0>
jmp    14d3 <interp3d+0x3b3>
mov    %r10d,%ecx
and    $0xfffffffc,%ecx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
movsd  (%r15),%xmm2
unpcklpd %xmm2,%xmm2
lea    0x0(,%r10,8),%rdx
and    $0xffffffffffffffe0,%rdx
movdqa 0xb98(%rip),%xmm3
xor    %esi,%esi
movdqa 0xb9d(%rip),%xmm12
movdqa 0xba5(%rip),%xmm5
nopl   0x0(%rax,%rax,1)
movdqa %xmm3,%xmm6
cvtdq2pd %xmm3,%xmm7
paddd  %xmm12,%xmm6
cvtdq2pd %xmm6,%xmm6
mulpd  %xmm1,%xmm7
addpd  %xmm2,%xmm7
mulpd  %xmm1,%xmm6
addpd  %xmm2,%xmm6
movupd %xmm7,0x0(%rbp,%rsi,1)
movupd %xmm6,0x10(%rbp,%rsi,1)
paddd  %xmm5,%xmm3
add    $0x20,%rsi
cmp    %rsi,%rdx
jne    1490 <interp3d+0x370>
cmp    %r10,%rcx
jne    13d6 <interp3d+0x2b6>
mov    %rbp,0x80(%rsp)
movslq %eax,%r14
mov    0x8(%rsp),%rax
test   %rax,%rax
je     1628 <interp3d+0x508>
xorps  %xmm1,%xmm1
cvtsi2sd %rax,%xmm1
subsd  %xmm10,%xmm4
addsd  %xmm11,%xmm1
divsd  %xmm1,%xmm4
cmp    $0x4,%eax
jb     1522 <interp3d+0x402>
lea    0x8(%rbx),%rax
cmp    %rax,%r14
jae    159c <interp3d+0x47c>
mov    0x8(%rsp),%rax
lea    (%r14,%rax,8),%rax
cmp    %rbx,%rax
jbe    159c <interp3d+0x47c>
xor    %eax,%eax
mov    0x8(%rsp),%rdx
mov    %rax,%rcx
not    %rcx
test   $0x1,%dl
je     154d <interp3d+0x42d>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  %xmm4,%xmm0
addsd  (%rbx),%xmm0
movsd  %xmm0,(%r14,%rax,8)
or     $0x1,%rax
mov    0x8(%rsp),%rdx
add    %rdx,%rcx
je     1628 <interp3d+0x508>
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  %xmm4,%xmm0
addsd  (%rbx),%xmm0
lea    0x1(%rax),%ecx
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
movsd  %xmm0,(%r14,%rax,8)
mulsd  %xmm4,%xmm1
addsd  (%rbx),%xmm1
movsd  %xmm1,0x8(%r14,%rax,8)
add    $0x2,%rax
cmp    %rdx,%rax
jne    1560 <interp3d+0x440>
jmp    1628 <interp3d+0x508>
mov    0x8(%rsp),%rcx
mov    %ecx,%eax
and    $0xfffffffc,%eax
movapd %xmm4,%xmm0
unpcklpd %xmm4,%xmm0
movsd  (%rbx),%xmm1
unpcklpd %xmm1,%xmm1
lea    0x0(,%rcx,8),%rcx
and    $0xffffffffffffffe0,%rcx
movdqa 0xa46(%rip),%xmm2
xor    %edx,%edx
movdqa 0xa4c(%rip),%xmm3
movdqa 0xa54(%rip),%xmm7
nopl   0x0(%rax)
movdqa %xmm2,%xmm5
cvtdq2pd %xmm2,%xmm6
paddd  %xmm3,%xmm5
cvtdq2pd %xmm5,%xmm5
mulpd  %xmm0,%xmm6
addpd  %xmm1,%xmm6
mulpd  %xmm0,%xmm5
addpd  %xmm1,%xmm5
movupd %xmm6,(%r14,%rdx,1)
movupd %xmm5,0x10(%r14,%rdx,1)
paddd  %xmm7,%xmm2
add    $0x20,%rdx
cmp    %rdx,%rcx
jne    15e0 <interp3d+0x4c0>
mov    0x8(%rsp),%rdx
cmp    %rdx,%rax
jne    1529 <interp3d+0x409>
test   %r13,%r13
je     1a6c <interp3d+0x94c>
movsd  0x10(%rsp),%xmm0
subsd  %xmm8,%xmm0
movsd  0x9bb(%rip),%xmm8
movsd  0x28(%rsp),%xmm1
subsd  %xmm9,%xmm1
movsd  0x20(%rsp),%xmm2
subsd  %xmm10,%xmm2
movapd %xmm8,%xmm3
divsd  %xmm0,%xmm3
movsd  %xmm3,0xa0(%rsp)
movapd %xmm8,%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x90(%rsp)
movapd %xmm8,%xmm13
divsd  %xmm2,%xmm13
mov    %r8d,%ebp
and    $0xfffffffe,%ebp
mov    %r11d,%eax
and    $0xfffffffe,%eax
mov    %rax,0x30(%rsp)
mov    %r12d,%esi
and    $0xfffffffe,%esi
xor    %ecx,%ecx
mov    %r9,0x28(%rsp)
mov    %rdi,0xa8(%rsp)
mov    %rbp,0x20(%rsp)
jmp    16ee <interp3d+0x5ce>
cs nopw 0x0(%rax,%rax,1)
mov    0x70(%rsp),%rcx
add    $0x1,%rcx
mov    0x50(%rsp),%r13
cmp    %r13,%rcx
mov    0x28(%rsp),%r9
mov    0x58(%rsp),%r8
mov    0xa8(%rsp),%rdi
mov    0x20(%rsp),%rbp
je     1a6c <interp3d+0x94c>
movsd  (%rdi,%rcx,8),%xmm11
test   %r8,%r8
mov    %rcx,0x70(%rsp)
je     1730 <interp3d+0x610>
xor    %ecx,%ecx
cmp    $0x1,%r8d
jne    1a29 <interp3d+0x909>
test   $0x1,%r8b
je     1730 <interp3d+0x610>
ucomisd (%r9,%rcx,8),%xmm11
jb     1730 <interp3d+0x610>
movsd  0x8(%r9,%rcx,8),%xmm0
ucomisd %xmm11,%xmm0
jb     1730 <interp3d+0x610>
mov    %ecx,0x10(%rsp)
nopw   0x0(%rax,%rax,1)
test   %r10,%r10
je     16c0 <interp3d+0x5a0>
movslq 0x10(%rsp),%rcx
subsd  (%r9,%rcx,8),%xmm11
mulsd  0xa0(%rsp),%xmm11
movapd %xmm8,%xmm9
subsd  %xmm11,%xmm9
mov    %rcx,0x40(%rsp)
add    $0x1,%ecx
movslq %ecx,%rcx
mov    %rcx,0x38(%rsp)
xor    %r9d,%r9d
mov    0x8(%rsp),%rbp
jmp    178c <interp3d+0x66c>
xchg   %ax,%ax
mov    0x48(%rsp),%r9
add    $0x1,%r9
mov    0x60(%rsp),%r10
cmp    %r10,%r9
mov    0x68(%rsp),%r11
je     16c0 <interp3d+0x5a0>
mov    0x80(%rsp),%rcx
movsd  (%rcx,%r9,8),%xmm6
test   %r11,%r11
je     17d0 <interp3d+0x6b0>
xor    %ecx,%ecx
cmp    $0x1,%r11d
jne    19c0 <interp3d+0x8a0>
mov    0x18(%rsp),%r8d
test   $0x1,%r11b
je     17d5 <interp3d+0x6b5>
ucomisd (%r15,%rcx,8),%xmm6
jb     17d5 <interp3d+0x6b5>
movsd  0x8(%r15,%rcx,8),%xmm0
ucomisd %xmm6,%xmm0
jb     17d5 <interp3d+0x6b5>
mov    %ecx,%r8d
jmp    17d5 <interp3d+0x6b5>
mov    0x18(%rsp),%r8d
test   %rbp,%rbp
mov    %r8d,0x18(%rsp)
mov    %r9,0x48(%rsp)
je     1770 <interp3d+0x650>
movslq %r8d,%rcx
subsd  (%r15,%rcx,8),%xmm6
mulsd  0x90(%rsp),%xmm6
movapd %xmm8,%xmm12
subsd  %xmm6,%xmm12
mov    0xb0(%rsp),%rdi
mov    0x40(%rsp),%rdx
mov    (%rdi,%rdx,8),%rdx
mov    (%rdx,%rcx,8),%r10
mov    0x38(%rsp),%rbp
mov    (%rdi,%rbp,8),%rbp
mov    0x0(%rbp,%rcx,8),%rdi
mov    0x8(%rdx,%rcx,8),%r8
mov    0x8(%rbp,%rcx,8),%r11
movapd %xmm9,%xmm10
mulsd  %xmm12,%xmm10
mulsd  %xmm11,%xmm12
movapd %xmm9,%xmm3
mulsd  %xmm6,%xmm3
mulsd  %xmm11,%xmm6
mov    0xf0(%rsp),%rcx
mov    0x70(%rsp),%rdx
mov    (%rcx,%rdx,8),%rcx
mov    (%rcx,%r9,8),%r9
xor    %ecx,%ecx
jmp    192e <interp3d+0x80e>
cs nopw 0x0(%rax,%rax,1)
movslq %eax,%rdx
subsd  (%rbx,%rdx,8),%xmm2
mulsd  %xmm13,%xmm2
movapd %xmm8,%xmm0
subsd  %xmm2,%xmm0
movapd %xmm10,%xmm5
mulsd  %xmm0,%xmm5
movapd %xmm12,%xmm7
mulsd  %xmm0,%xmm7
movapd %xmm3,%xmm4
mulsd  %xmm0,%xmm4
mulsd  %xmm6,%xmm0
movapd %xmm10,%xmm14
mulsd  %xmm2,%xmm14
movapd %xmm12,%xmm15
mulsd  %xmm2,%xmm15
movapd %xmm3,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm6,%xmm2
mulsd  (%rdi,%rdx,8),%xmm7
mulsd  (%r10,%rdx,8),%xmm5
mulsd  (%r8,%rdx,8),%xmm4
addsd  %xmm7,%xmm5
addsd  %xmm5,%xmm4
mulsd  (%r11,%rdx,8),%xmm0
addsd  %xmm4,%xmm0
mulsd  0x8(%r10,%rdx,8),%xmm14
addsd  %xmm0,%xmm14
mulsd  0x8(%rdi,%rdx,8),%xmm15
mulsd  0x8(%r8,%rdx,8),%xmm1
addsd  %xmm14,%xmm15
addsd  %xmm15,%xmm1
mulsd  0x8(%r11,%rdx,8),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,(%r9,%rcx,8)
add    $0x1,%rcx
mov    0x8(%rsp),%rbp
cmp    %rbp,%rcx
je     1770 <interp3d+0x650>
movsd  (%r14,%rcx,8),%xmm2
test   %r12,%r12
je     1870 <interp3d+0x750>
xor    %r13d,%r13d
cmp    $0x1,%r12d
jne    1985 <interp3d+0x865>
test   $0x1,%r12b
je     1870 <interp3d+0x750>
ucomisd (%rbx,%r13,8),%xmm2
jb     1870 <interp3d+0x750>
movsd  0x8(%rbx,%r13,8),%xmm0
ucomisd %xmm2,%xmm0
jb     1870 <interp3d+0x750>
mov    %r13d,%eax
jmp    1870 <interp3d+0x750>
cs nopw 0x0(%rax,%rax,1)
nop
cmp    %r13,%rsi
je     1946 <interp3d+0x826>
mov    %r13,%rdx
ucomisd (%rbx,%r13,8),%xmm2
jb     199e <interp3d+0x87e>
movsd  0x8(%rbx,%rdx,8),%xmm0
ucomisd %xmm2,%xmm0
jb     199e <interp3d+0x87e>
mov    %edx,%eax
lea    0x2(%rdx),%r13
ucomisd 0x8(%rbx,%rdx,8),%xmm2
jb     1980 <interp3d+0x860>
movsd  0x10(%rbx,%rdx,8),%xmm0
ucomisd %xmm2,%xmm0
jb     1980 <interp3d+0x860>
add    $0x1,%edx
mov    %edx,%eax
jmp    1980 <interp3d+0x860>
nopl   (%rax)
mov    0x30(%rsp),%rdi
mov    0x18(%rsp),%r8d
jmp    19d9 <interp3d+0x8b9>
nopl   0x0(%rax)
cmp    %rcx,%rdi
je     17b0 <interp3d+0x690>
mov    %rcx,%rdx
ucomisd (%r15,%rcx,8),%xmm6
jb     19f4 <interp3d+0x8d4>
movsd  0x8(%r15,%rdx,8),%xmm0
ucomisd %xmm6,%xmm0
jb     19f4 <interp3d+0x8d4>
mov    %edx,%r8d
lea    0x2(%rdx),%rcx
ucomisd 0x8(%r15,%rdx,8),%xmm6
jb     19d0 <interp3d+0x8b0>
movsd  0x10(%r15,%rdx,8),%xmm0
ucomisd %xmm6,%xmm0
jb     19d0 <interp3d+0x8b0>
add    $0x1,%edx
mov    %edx,%r8d
jmp    19d0 <interp3d+0x8b0>
cs nopw 0x0(%rax,%rax,1)
cmp    %rcx,%rbp
je     170a <interp3d+0x5ea>
mov    %rcx,%rdx
ucomisd (%r9,%rcx,8),%xmm11
jb     1a48 <interp3d+0x928>
movsd  0x8(%r9,%rdx,8),%xmm0
ucomisd %xmm11,%xmm0
jb     1a48 <interp3d+0x928>
mov    %edx,%ecx
mov    %edx,0x10(%rsp)
lea    0x2(%rdx),%rcx
ucomisd 0x8(%r9,%rdx,8),%xmm11
jb     1a20 <interp3d+0x900>
movsd  0x10(%r9,%rdx,8),%xmm0
ucomisd %xmm11,%xmm0
jb     1a20 <interp3d+0x900>
add    $0x1,%edx
mov    %edx,0x10(%rsp)
jmp    1a20 <interp3d+0x900>
call   1030 <free@plt>
mov    0x80(%rsp),%rdi
call   1030 <free@plt>
mov    %r14,%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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