void snip3d(double *data, int nx, int ny, int nz, int width) {
  int i, j, k;
  int p;
  int size;
  double *w;
  double P1, P2, P3, P4, P5, P6, P7, P8;
  double R1, R2, R3, R4, R5, R6;
  double S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12;
  double dhelp;
  long ioffset;
  long iplus;
  long imin;
  long joffset;
  long jplus;
  long jmin;
  size = nx * ny * nz;
  w = (double *)malloc(size * sizeof(double));
  for (p = width; p > 0; p--) {
    for (i = p; i < (nx - p); i++) {
      ioffset = i * ny * nz;
      iplus = (i + p) * ny * nz;
      imin = (i - p) * ny * nz;
      for (j = p; j < (ny - p); j++) {
        joffset = j * nz;
        jplus = (j + p) * nz;
        jmin = (j - p) * nz;
        for (k = p; k < (nz - p); k++) {
          P1 = data[iplus + jplus + k - p];
          P2 = data[imin + jplus + k - p];
          P3 = data[iplus + jmin + k - p];
          P4 = data[imin + jmin + k - p];
          P5 = data[iplus + jplus + k + p];
          P6 = data[imin + jplus + k + p];
          P7 = data[imin + jmin + k + p];
          P8 = data[iplus + jmin + k + p];
          S1 = data[iplus + joffset + k - p];
          S2 = data[ioffset + jmin + k - p];
          S3 = data[imin + joffset + k - p];
          S4 = data[ioffset + jmin + k - p];
          S5 = data[imin + joffset + k + p];
          S6 = data[ioffset + jplus + k + p];
          S7 = data[imin + joffset + k + p];
          S8 = data[ioffset + jmin + k + p];
          S9 = data[imin + jplus + k];
          S10 = data[imin + jmin + k];
          S11 = data[iplus + jmin + k];
          S12 = data[iplus + jplus + k];
          R1 = data[ioffset + joffset + k - p];
          R2 = data[ioffset + joffset + k + p];
          R3 = data[imin + joffset + k];
          R4 = data[iplus + joffset + k];
          R5 = data[ioffset + jplus + k];
          R6 = data[ioffset + jmin + k];
          dhelp = 0.5 * (P1 + P3);
          S1 = (((S1) > (dhelp)) ? (S1) : (dhelp)) - dhelp;
          dhelp = 0.5 * (P1 + P2);
          S2 = (((S2) > (dhelp)) ? (S2) : (dhelp)) - dhelp;
          dhelp = 0.5 * (P2 + P4);
          S3 = (((S3) > (dhelp)) ? (S3) : (dhelp)) - dhelp;
          dhelp = 0.5 * (P3 + P4);
          S4 = (((S4) > (dhelp)) ? (S4) : (dhelp)) - dhelp;
          dhelp = 0.5 * (P5 + P8);
          S5 = (((S5) > (dhelp)) ? (S5) : (dhelp)) - dhelp;
          dhelp = 0.5 * (P5 + P6);
          S6 = (((S6) > (dhelp)) ? (S6) : (dhelp)) - dhelp;
          dhelp = 0.5 * (P6 + P7);
          S7 = (((S7) > (dhelp)) ? (S7) : (dhelp)) - dhelp;
          dhelp = 0.5 * (P7 + P8);
          S8 = (((S8) > (dhelp)) ? (S8) : (dhelp)) - dhelp;
          dhelp = 0.5 * (P2 + P6);
          S9 = (((S9) > (dhelp)) ? (S9) : (dhelp)) - dhelp;
          dhelp = 0.5 * (P4 + P7);
          S10 = (((S10) > (dhelp)) ? (S10) : (dhelp)) - dhelp;
          dhelp = 0.5 * (P3 + P8);
          S11 = (((S11) > (dhelp)) ? (S11) : (dhelp)) - dhelp;
          dhelp = 0.5 * (P1 + P5);
          S12 = (((S12) > (dhelp)) ? (S12) : (dhelp)) - dhelp;
          dhelp = 0.5 * (S1 + S2 + S3 + S4) + 0.25 * (P1 + P2 + P3 + P4);
          R1 = (((R1) > (dhelp)) ? (R1) : (dhelp)) - dhelp;
          dhelp = 0.5 * (S5 + S6 + S7 + S8) + 0.25 * (P5 + P6 + P7 + P8);
          R2 = (((R2) > (dhelp)) ? (R2) : (dhelp)) - dhelp;
          dhelp = 0.5 * (S3 + S7 + S9 + S10) + 0.25 * (P2 + P4 + P6 + P7);
          R3 = (((R3) > (dhelp)) ? (R3) : (dhelp)) - dhelp;
          dhelp = 0.5 * (S1 + S5 + S11 + S12) + 0.25 * (P1 + P3 + P5 + P8);
          R4 = (((R4) > (dhelp)) ? (R4) : (dhelp)) - dhelp;
          dhelp = 0.5 * (S2 + S6 + S9 + S12) + 0.25 * (P1 + P2 + P5 + P6);
          R5 = (((R5) > (dhelp)) ? (R5) : (dhelp)) - dhelp;
          dhelp = 0.5 * (S4 + S8 + S10 + S11) + 0.25 * (P3 + P4 + P7 + P8);
          R6 = (((R6) > (dhelp)) ? (R6) : (dhelp)) - dhelp;
          dhelp = 0.5 * (R1 + R2 + R3 + R4 + R5 + R6) +
                  0.25 * (S1 + S2 + S3 + S4 + S5 + S6) +
                  0.25 * (S7 + S8 + S9 + S10 + S11 + S12) +
                  0.125 * (P1 + P2 + P3 + P4 + P5 + P6 + P7 + P8);
          w[ioffset + joffset + k] = (((data[ioffset + joffset + k]) < (dhelp))
                                          ? (data[ioffset + joffset + k])
                                          : (dhelp));
        }
      }
    }
    for (i = p; i < (nx - p); i++) {
      ioffset = i * ny * nz;
      for (j = p; j < (ny - p); j++) {
        joffset = j * nz;
        for (k = p; k < (nz - p); j++) {
          data[ioffset + joffset + k] = w[ioffset + joffset + k];
        }
      }
    }
  }
  free(w);
}


x86 assembly (clang, -O0):
<snip3d>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1e0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    -0xc(%rbp),%eax
imul   -0x10(%rbp),%eax
imul   -0x14(%rbp),%eax
mov    %eax,-0x2c(%rbp)
movslq -0x2c(%rbp),%rdi
shl    $0x3,%rdi
call   1040 <malloc@plt>
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x28(%rbp)
jle    2256 <snip3d+0x1136>
mov    -0x28(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    -0x28(%rbp),%ecx
cmp    %ecx,%eax
jge    216a <snip3d+0x104a>
mov    -0x1c(%rbp),%eax
imul   -0x10(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x118(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x28(%rbp),%eax
imul   -0x10(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x120(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x28(%rbp),%eax
imul   -0x10(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x128(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x10(%rbp),%ecx
sub    -0x28(%rbp),%ecx
cmp    %ecx,%eax
jge    2157 <snip3d+0x1037>
mov    -0x20(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x130(%rbp)
mov    -0x20(%rbp),%eax
add    -0x28(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x138(%rbp)
mov    -0x20(%rbp),%eax
sub    -0x28(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x140(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    -0x28(%rbp),%ecx
cmp    %ecx,%eax
jge    2144 <snip3d+0x1024>
mov    -0x8(%rbp),%rax
mov    -0x120(%rbp),%rcx
add    -0x138(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
sub    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x128(%rbp),%rcx
add    -0x138(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
sub    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x120(%rbp),%rcx
add    -0x140(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
sub    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x128(%rbp),%rcx
add    -0x140(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
sub    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x120(%rbp),%rcx
add    -0x138(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x128(%rbp),%rcx
add    -0x138(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x128(%rbp),%rcx
add    -0x140(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x120(%rbp),%rcx
add    -0x140(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x120(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
sub    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x140(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
sub    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x128(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
sub    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x140(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
sub    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x128(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x138(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x128(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x140(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x128(%rbp),%rcx
add    -0x138(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x128(%rbp),%rcx
add    -0x140(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x120(%rbp),%rcx
add    -0x140(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x120(%rbp),%rcx
add    -0x138(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
sub    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movslq -0x28(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x128(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x120(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x138(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x140(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x40(%rbp),%xmm1
addsd  -0x50(%rbp),%xmm1
movsd  0x1987(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    16b0 <snip3d+0x590>
movsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x148(%rbp)
ff
jmp    16c0 <snip3d+0x5a0>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x40(%rbp),%xmm1
addsd  -0x48(%rbp),%xmm1
movsd  0x1916(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1721 <snip3d+0x601>
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0x150(%rbp)
ff
jmp    1731 <snip3d+0x611>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x150(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x48(%rbp),%xmm1
addsd  -0x58(%rbp),%xmm1
movsd  0x18a5(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1792 <snip3d+0x672>
movsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0x158(%rbp)
ff
jmp    17a2 <snip3d+0x682>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x158(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x50(%rbp),%xmm1
addsd  -0x58(%rbp),%xmm1
movsd  0x1834(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1803 <snip3d+0x6e3>
movsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x160(%rbp)
ff
jmp    1813 <snip3d+0x6f3>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x60(%rbp),%xmm1
addsd  -0x78(%rbp),%xmm1
movsd  0x17c3(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1874 <snip3d+0x754>
movsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x168(%rbp)
ff
jmp    1884 <snip3d+0x764>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x168(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x60(%rbp),%xmm1
addsd  -0x68(%rbp),%xmm1
movsd  0x1752(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xd8(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    18e5 <snip3d+0x7c5>
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x170(%rbp)
ff
jmp    18f5 <snip3d+0x7d5>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x170(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x68(%rbp),%xmm1
addsd  -0x70(%rbp),%xmm1
movsd  0x16e1(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xe0(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1956 <snip3d+0x836>
movsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0x178(%rbp)
ff
jmp    1966 <snip3d+0x846>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x178(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x70(%rbp),%xmm1
addsd  -0x78(%rbp),%xmm1
movsd  0x1670(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xe8(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    19c7 <snip3d+0x8a7>
movsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x180(%rbp)
ff
jmp    19d7 <snip3d+0x8b7>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x180(%rbp)
ff
movsd  -0x180(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x48(%rbp),%xmm1
addsd  -0x68(%rbp),%xmm1
movsd  0x15ff(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xf0(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1a38 <snip3d+0x918>
movsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x188(%rbp)
ff
jmp    1a48 <snip3d+0x928>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x188(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x58(%rbp),%xmm1
addsd  -0x70(%rbp),%xmm1
movsd  0x158e(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1aa9 <snip3d+0x989>
movsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x190(%rbp)
ff
jmp    1ab9 <snip3d+0x999>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x190(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x50(%rbp),%xmm1
addsd  -0x78(%rbp),%xmm1
movsd  0x151d(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1b1a <snip3d+0x9fa>
movsd  -0x100(%rbp),%xmm0
ff
movsd  %xmm0,-0x198(%rbp)
ff
jmp    1b2a <snip3d+0xa0a>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x198(%rbp)
ff
movsd  -0x198(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x40(%rbp),%xmm1
addsd  -0x60(%rbp),%xmm1
movsd  0x14ac(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1b8b <snip3d+0xa6b>
movsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a0(%rbp)
ff
jmp    1b9b <snip3d+0xa7b>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  -0x1a0(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
addsd  -0xb8(%rbp),%xmm0
ff
addsd  -0xc0(%rbp),%xmm0
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
addsd  -0x48(%rbp),%xmm2
addsd  -0x50(%rbp),%xmm2
addsd  -0x58(%rbp),%xmm2
movsd  0x1419(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  0x1405(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1c30 <snip3d+0xb10>
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
jmp    1c40 <snip3d+0xb20>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x1a8(%rbp)
ff
movsd  -0x1a8(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0xd0(%rbp),%xmm0
ff
addsd  -0xd8(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
addsd  -0xe8(%rbp),%xmm0
ff
movsd  -0x60(%rbp),%xmm2
addsd  -0x68(%rbp),%xmm2
addsd  -0x70(%rbp),%xmm2
addsd  -0x78(%rbp),%xmm2
movsd  0x1377(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  0x1363(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1cd8 <snip3d+0xbb8>
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x1b0(%rbp)
ff
jmp    1ce8 <snip3d+0xbc8>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x1b0(%rbp)
ff
movsd  -0x1b0(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
addsd  -0xf0(%rbp),%xmm0
ff
addsd  -0xf8(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm2
addsd  -0x58(%rbp),%xmm2
addsd  -0x68(%rbp),%xmm2
addsd  -0x70(%rbp),%xmm2
movsd  0x12cc(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  0x12b8(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1d83 <snip3d+0xc63>
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x1b8(%rbp)
ff
jmp    1d93 <snip3d+0xc73>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x1b8(%rbp)
ff
movsd  -0x1b8(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
addsd  -0xd0(%rbp),%xmm0
ff
addsd  -0x100(%rbp),%xmm0
ff
addsd  -0x108(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
addsd  -0x50(%rbp),%xmm2
addsd  -0x60(%rbp),%xmm2
addsd  -0x78(%rbp),%xmm2
movsd  0x1221(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  0x120d(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1e2e <snip3d+0xd0e>
movsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c0(%rbp)
ff
jmp    1e3e <snip3d+0xd1e>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c0(%rbp)
ff
movsd  -0x1c0(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
addsd  -0xd8(%rbp),%xmm0
ff
addsd  -0xf0(%rbp),%xmm0
ff
addsd  -0x108(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm2
addsd  -0x48(%rbp),%xmm2
addsd  -0x60(%rbp),%xmm2
addsd  -0x68(%rbp),%xmm2
movsd  0x1176(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  0x1162(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1ed9 <snip3d+0xdb9>
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c8(%rbp)
ff
jmp    1ee9 <snip3d+0xdc9>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x1c8(%rbp)
ff
movsd  -0x1c8(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
movsd  -0xc8(%rbp),%xmm0
ff
addsd  -0xe8(%rbp),%xmm0
ff
addsd  -0xf8(%rbp),%xmm0
ff
addsd  -0x100(%rbp),%xmm0
ff
movsd  -0x50(%rbp),%xmm2
addsd  -0x58(%rbp),%xmm2
addsd  -0x70(%rbp),%xmm2
addsd  -0x78(%rbp),%xmm2
movsd  0x10cb(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  0x10b7(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
ucomisd -0x110(%rbp),%xmm0
ff
jbe    1f84 <snip3d+0xe64>
movsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x1d0(%rbp)
ff
jmp    1f94 <snip3d+0xe74>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  -0x1d0(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
addsd  -0x90(%rbp),%xmm0
ff
addsd  -0x98(%rbp),%xmm0
ff
addsd  -0xa0(%rbp),%xmm0
ff
addsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
addsd  -0xb8(%rbp),%xmm2
ff
addsd  -0xc0(%rbp),%xmm2
ff
addsd  -0xc8(%rbp),%xmm2
ff
addsd  -0xd0(%rbp),%xmm2
addsd  -0xd8(%rbp),%xmm2
movsd  0xff7(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  0xfe3(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0xe0(%rbp),%xmm1
ff
addsd  -0xe8(%rbp),%xmm1
ff
addsd  -0xf0(%rbp),%xmm1
ff
addsd  -0xf8(%rbp),%xmm1
ff
addsd  -0x100(%rbp),%xmm1
ff
addsd  -0x108(%rbp),%xmm1
ff
movsd  0xfab(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
addsd  -0x50(%rbp),%xmm0
addsd  -0x58(%rbp),%xmm0
addsd  -0x60(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  0xf7b(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x8(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x110(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    2100 <snip3d+0xfe0>
mov    -0x8(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x1d8(%rbp)
ff
jmp    2110 <snip3d+0xff0>
movsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x1d8(%rbp)
ff
movsd  -0x1d8(%rbp),%xmm0
ff
mov    -0x38(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1217 <snip3d+0xf7>
jmp    2149 <snip3d+0x1029>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11ca <snip3d+0xaa>
jmp    215c <snip3d+0x103c>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1171 <snip3d+0x51>
mov    -0x28(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    -0x28(%rbp),%ecx
cmp    %ecx,%eax
jge    2243 <snip3d+0x1123>
mov    -0x1c(%rbp),%eax
imul   -0x10(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x118(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x10(%rbp),%ecx
sub    -0x28(%rbp),%ecx
cmp    %ecx,%eax
jge    2230 <snip3d+0x1110>
mov    -0x20(%rbp),%eax
imul   -0x14(%rbp),%eax
cltq
mov    %rax,-0x130(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    -0x28(%rbp),%ecx
cmp    %ecx,%eax
jge    221d <snip3d+0x10fd>
mov    -0x38(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x118(%rbp),%rcx
add    -0x130(%rbp),%rcx
movslq -0x24(%rbp),%rdx
add    %rdx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    21c2 <snip3d+0x10a2>
jmp    2222 <snip3d+0x1102>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    219b <snip3d+0x107b>
jmp    2235 <snip3d+0x1115>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    2170 <snip3d+0x1050>
jmp    2248 <snip3d+0x1128>
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    1161 <snip3d+0x41>
mov    -0x38(%rbp),%rdi
call   1030 <free@plt>
add    $0x1e0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<snip3d>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
test   %r8d,%r8d
jle    12bb <snip3d+0x1bb>
mov    %r8d,%r12d
movslq %ecx,%rcx
movslq %esi,%rbp
movslq %edx,%rax
mov    %rax,-0x30(%rsp)
lea    (%r12,%r12,1),%rax
mov    %rcx,%rdx
sub    %rax,%rdx
mov    %rdx,-0x38(%rsp)
neg    %rax
mov    %rcx,-0x20(%rsp)
lea    (%rcx,%rax,1),%r13
add    $0xfffffffffffffffe,%r13
add    $0x1,%r8d
xor    %edi,%edi
mov    %rbp,-0x28(%rsp)
jmp    116e <snip3d+0x6e>
lea    -0x1(%r12),%rax
add    $0x1,%rdi
add    $0x2,%r13
add    $0xffffffff,%r8d
cmp    $0x1,%r12
mov    %rax,%r12
jle    12bb <snip3d+0x1bb>
mov    %rbp,%rax
sub    %r12,%rax
mov    %rax,-0x40(%rsp)
cmp    %rax,%r12
jge    1150 <snip3d+0x50>
mov    %r8d,-0x44(%rsp)
movslq %r8d,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x18(%rsp)
mov    %r13,-0x8(%rsp)
shr    %r13
lea    0x1(%r13),%eax
movzbl %al,%ebx
and    $0x7,%ebx
add    $0x1,%r13
and    $0xfffffffffffffff8,%r13
mov    -0x38(%rsp),%rcx
lea    (%rcx,%rdi,2),%rax
add    $0xfffffffffffffffe,%rax
mov    %rax,%rbp
shr    %rbp
add    $0x1,%rbp
mov    %rdi,-0x10(%rsp)
lea    (%rcx,%rdi,2),%r9
mov    -0x30(%rsp),%rsi
sub    %r12,%rsi
mov    -0x20(%rsp),%r10
sub    %r12,%r10
mov    %r9,%r11
and    $0xfffffffffffffffe,%r11
lea    (%r12,%r11,1),%r14
mov    %r12,%rcx
mov    -0x40(%rsp),%r8
jmp    11f9 <snip3d+0xf9>
xchg   %ax,%ax
add    $0x1,%rcx
cmp    %r8,%rcx
jge    1260 <snip3d+0x160>
cmp    %rsi,%r12
jge    11f0 <snip3d+0xf0>
mov    %r12,%rdi
jmp    1219 <snip3d+0x119>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%rdi
cmp    %rsi,%rdi
jge    11f0 <snip3d+0xf0>
cmp    %r10,%r12
jge    1210 <snip3d+0x110>
mov    %r12,%r15
cmp    $0x2,%r9
jb     1250 <snip3d+0x150>
cmp    $0xe,%rax
jb     1236 <snip3d+0x136>
mov    %r13,%rdx
add    $0xfffffffffffffff8,%rdx
jne    1230 <snip3d+0x130>
test   $0x7,%bpl
je     1246 <snip3d+0x146>
mov    %rbx,%rdx
nop
add    $0xffffffffffffffff,%rdx
jne    1240 <snip3d+0x140>
mov    %r14,%r15
cmp    %r11,%r9
je     1210 <snip3d+0x110>
xchg   %ax,%ax
add    $0x1,%r15
cmp    %r10,%r15
jl     1250 <snip3d+0x150>
jmp    1210 <snip3d+0x110>
nopl   0x0(%rax,%rax,1)
cmp    %r8,%r12
mov    -0x44(%rsp),%r8d
mov    -0x28(%rsp),%rbp
mov    -0x8(%rsp),%r13
mov    -0x10(%rsp),%rdi
mov    -0x18(%rsp),%rcx
jge    1150 <snip3d+0x50>
mov    %r12,%rax
jmp    129f <snip3d+0x19f>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rax
cmp    -0x40(%rsp),%rax
jge    1150 <snip3d+0x50>
cmp    %rsi,%r12
jge    1290 <snip3d+0x190>
mov    %rcx,%rdx
nopw   0x0(%rax,%rax,1)
add    $0x1,%rdx
cmp    %rdx,%rsi
jg     12b0 <snip3d+0x1b0>
jmp    1290 <snip3d+0x190>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @snip3d(double* %0, i32 %1, i32 %2, i32 %3, i32 %4) {
%6 = icmp sgt i32 %4, 0
br i1 %6, label %7, label %92
7: ; preds = %5
%8 = zext i32 %4 to i64
%9 = sext i32 %3 to i64
%10 = sext i32 %1 to i64
%11 = sext i32 %2 to i64
%12 = mul nsw i64 %8, -2
%13 = add nsw i64 %12, %9
%14 = mul nsw i64 %8, -2
%15 = add nsw i64 %14, %9
br label %16
16: ; preds = %7, %88
%17 = phi i64 [ 0, %7 ], [ %91, %88 ]
%18 = phi i64 [ %8, %7 ], [ %89, %88 ]
%19 = shl i64 %17, 1
%20 = add i64 %15, %19
%21 = add i64 %20, -2
%22 = lshr i64 %21, 1
%23 = add nuw i64 %22, 1
%24 = shl nuw nsw i64 %17, 1
%25 = add i64 %13, %24
%26 = trunc i64 %18 to i32
%27 = sub nsw i64 %10, %18
%28 = icmp slt i64 %18, %27
br i1 %28, label %29, label %88
29: ; preds = %16
%30 = sub nsw i64 %11, %18
%31 = icmp slt i64 %18, %30
%32 = sub nsw i64 %9, %18
%33 = icmp slt i64 %18, %32
%34 = icmp ult i64 %25, 2
%35 = and i64 %25, -2
%36 = add i64 %18, %35
%37 = and i64 %23, 7
%38 = icmp ult i64 %21, 14
%39 = and i64 %23, -8
%40 = icmp eq i64 %37, 0
%41 = icmp eq i64 %25, %35
br label %49
42: ; preds = %74
br i1 %28, label %43, label %88
43: ; preds = %42
%44 = sub nsw i64 %11, %18
%45 = icmp slt i64 %18, %44
%46 = sub nsw i32 %3, %26
%47 = sext i32 %46 to i64
%48 = icmp sge i64 %18, %47
br label %77
49: ; preds = %29, %74
%50 = phi i64 [ %18, %29 ], [ %75, %74 ]
br i1 %31, label %51, label %74
51: ; preds = %49, %71
%52 = phi i64 [ %72, %71 ], [ %18, %49 ]
br i1 %33, label %53, label %71
53: ; preds = %51
br i1 %34, label %65, label %54
54: ; preds = %53
br i1 %38, label %59, label %55
55: ; preds = %54, %55
%56 = phi i64 [ %57, %55 ], [ 0, %54 ]
%57 = add i64 %56, 8
%58 = icmp eq i64 %57, %39
br i1 %58, label %59, label %55
59: ; preds = %55, %54
br i1 %40, label %64, label %60
60: ; preds = %59, %60
%61 = phi i64 [ %62, %60 ], [ 0, %59 ]
%62 = add i64 %61, 1
%63 = icmp eq i64 %62, %37
br i1 %63, label %64, label %60
64: ; preds = %60, %59
br i1 %41, label %71, label %65
65: ; preds = %53, %64
%66 = phi i64 [ %18, %53 ], [ %36, %64 ]
br label %67
67: ; preds = %65, %67
%68 = phi i64 [ %69, %67 ], [ %66, %65 ]
%69 = add nsw i64 %68, 1
%70 = icmp slt i64 %69, %32
br i1 %70, label %67, label %71
71: ; preds = %67, %64, %51
%72 = add nsw i64 %52, 1
%73 = icmp slt i64 %72, %30
br i1 %73, label %51, label %74
74: ; preds = %71, %49
%75 = add nsw i64 %50, 1
%76 = icmp slt i64 %75, %27
br i1 %76, label %49, label %42
77: ; preds = %43, %85
%78 = phi i64 [ %18, %43 ], [ %86, %85 ]
br i1 %45, label %79, label %85
79: ; preds = %77
br label %80
80: ; preds = %79, %80
%81 = phi i32 [ %82, %80 ], [ %26, %79 ]
%82 = add nsw i32 %81, 1
%83 = sext i32 %82 to i64
%84 = icmp sgt i64 %44, %83
br i1 %84, label %80, label %85
85: ; preds = %80, %77
%86 = add nsw i64 %78, 1
%87 = icmp slt i64 %86, %27
br i1 %87, label %77, label %88
88: ; preds = %85, %16, %42
%89 = add nsw i64 %18, -1
%90 = icmp sgt i64 %18, 1
%91 = add i64 %17, 1
br i1 %90, label %16, label %92
92: ; preds = %88, %5
ret void
}