void cftbsub(int n, double *a, double *w) {
  int j, j1, j2, j3, j4, j5, j6, j7, l;
  double wn4r, x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i, y0r, y0i, y1r, y1i, y2r,
      y2i, y3r, y3i, y4r, y4i, y5r, y5i, y6r, y6i, y7r, y7i;
  l = 2;
  if (n > 16) {
    cft1st(n, a, w);
    l = 16;
    while ((l << 3) < n) {
      cftmdl(n, l, a, w);
      l <<= 3;
    }
  }
  if ((l << 2) < n) {
    wn4r = w[2];
    for (j = 0; j < l; j += 2) {
      j1 = j + l;
      j2 = j1 + l;
      j3 = j2 + l;
      j4 = j3 + l;
      j5 = j4 + l;
      j6 = j5 + l;
      j7 = j6 + l;
      x0r = a[j] + a[j1];
      x0i = -a[j + 1] - a[j1 + 1];
      x1r = a[j] - a[j1];
      x1i = -a[j + 1] + a[j1 + 1];
      x2r = a[j2] + a[j3];
      x2i = a[j2 + 1] + a[j3 + 1];
      x3r = a[j2] - a[j3];
      x3i = a[j2 + 1] - a[j3 + 1];
      y0r = x0r + x2r;
      y0i = x0i - x2i;
      y2r = x0r - x2r;
      y2i = x0i + x2i;
      y1r = x1r - x3i;
      y1i = x1i - x3r;
      y3r = x1r + x3i;
      y3i = x1i + x3r;
      x0r = a[j4] + a[j5];
      x0i = a[j4 + 1] + a[j5 + 1];
      x1r = a[j4] - a[j5];
      x1i = a[j4 + 1] - a[j5 + 1];
      x2r = a[j6] + a[j7];
      x2i = a[j6 + 1] + a[j7 + 1];
      x3r = a[j6] - a[j7];
      x3i = a[j6 + 1] - a[j7 + 1];
      y4r = x0r + x2r;
      y4i = x0i + x2i;
      y6r = x0r - x2r;
      y6i = x0i - x2i;
      x0r = x1r - x3i;
      x0i = x1i + x3r;
      x2r = x1r + x3i;
      x2i = x1i - x3r;
      y5r = wn4r * (x0r - x0i);
      y5i = wn4r * (x0r + x0i);
      y7r = wn4r * (x2r - x2i);
      y7i = wn4r * (x2r + x2i);
      a[j1] = y1r + y5r;
      a[j1 + 1] = y1i - y5i;
      a[j5] = y1r - y5r;
      a[j5 + 1] = y1i + y5i;
      a[j3] = y3r - y7i;
      a[j3 + 1] = y3i - y7r;
      a[j7] = y3r + y7i;
      a[j7 + 1] = y3i + y7r;
      a[j] = y0r + y4r;
      a[j + 1] = y0i - y4i;
      a[j4] = y0r - y4r;
      a[j4 + 1] = y0i + y4i;
      a[j2] = y2r - y6i;
      a[j2 + 1] = y2i - y6r;
      a[j6] = y2r + y6i;
      a[j6 + 1] = y2i + y6r;
    }
  } else if ((l << 2) == n) {
    for (j = 0; j < l; j += 2) {
      j1 = j + l;
      j2 = j1 + l;
      j3 = j2 + l;
      x0r = a[j] + a[j1];
      x0i = -a[j + 1] - a[j1 + 1];
      x1r = a[j] - a[j1];
      x1i = -a[j + 1] + a[j1 + 1];
      x2r = a[j2] + a[j3];
      x2i = a[j2 + 1] + a[j3 + 1];
      x3r = a[j2] - a[j3];
      x3i = a[j2 + 1] - a[j3 + 1];
      a[j] = x0r + x2r;
      a[j + 1] = x0i - x2i;
      a[j2] = x0r - x2r;
      a[j2 + 1] = x0i + x2i;
      a[j1] = x1r - x3i;
      a[j1 + 1] = x1i - x3r;
      a[j3] = x1r + x3i;
      a[j3 + 1] = x1i + x3r;
    }
  } else {
    for (j = 0; j < l; j += 2) {
      j1 = j + l;
      x0r = a[j] - a[j1];
      x0i = -a[j + 1] + a[j1 + 1];
      a[j] += a[j1];
      a[j + 1] = -a[j + 1] - a[j1 + 1];
      a[j1] = x0r;
      a[j1 + 1] = x0i;
    }
  }
}


x86 assembly (clang, -O0):
<cftbsub>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x2,-0x3c(%rbp)
cmpl   $0x10,-0x4(%rbp)
jle    1197 <cftbsub+0x77>
mov    -0x4(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
mov    $0x0,%al
call   1030 <cft1st@plt>
movl   $0x10,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
shl    $0x3,%eax
cmp    -0x4(%rbp),%eax
jge    1192 <cftbsub+0x72>
mov    -0x4(%rbp),%edi
mov    -0x3c(%rbp),%esi
mov    -0x10(%rbp),%rdx
mov    -0x18(%rbp),%rcx
mov    $0x0,%al
call   1040 <cftmdl@plt>
mov    -0x3c(%rbp),%eax
shl    $0x3,%eax
mov    %eax,-0x3c(%rbp)
jmp    1160 <cftbsub+0x40>
jmp    1197 <cftbsub+0x77>
mov    -0x3c(%rbp),%eax
shl    $0x2,%eax
cmp    -0x4(%rbp),%eax
jge    1811 <cftbsub+0x6f1>
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    180c <cftbsub+0x6ec>
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x68(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x50(%rbp)
movsd  -0x68(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x60(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x70(%rbp)
movsd  -0x68(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
subsd  -0x58(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm1
addsd  -0x58(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
subsd  -0x78(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm1
addsd  -0x78(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa8(%rbp),%xmm0
ff
subsd  -0xe8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa0(%rbp),%xmm0
ff
subsd  -0xe0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa8(%rbp),%xmm0
ff
addsd  -0xe8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xc0(%rbp),%xmm0
ff
subsd  -0x108(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xc8(%rbp),%xmm0
ff
subsd  -0x100(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xc0(%rbp),%xmm0
ff
addsd  -0x108(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xc8(%rbp),%xmm0
ff
addsd  -0x100(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0xd0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x98(%rbp),%xmm0
ff
subsd  -0xd8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x90(%rbp),%xmm0
ff
subsd  -0xd0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x98(%rbp),%xmm0
ff
addsd  -0xd8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb0(%rbp),%xmm0
ff
subsd  -0xf8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb8(%rbp),%xmm0
ff
subsd  -0xf0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb0(%rbp),%xmm0
ff
addsd  -0xf8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb8(%rbp),%xmm0
ff
addsd  -0xf0(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    11bb <cftbsub+0x9b>
jmp    1bac <cftbsub+0xa8c>
mov    -0x3c(%rbp),%eax
shl    $0x2,%eax
cmp    -0x4(%rbp),%eax
jne    1a84 <cftbsub+0x964>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1a7f <cftbsub+0x95f>
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
subsd  -0x78(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
addsd  -0x78(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x60(%rbp),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x60(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    1827 <cftbsub+0x707>
jmp    1ba7 <cftbsub+0xa87>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1ba2 <cftbsub+0xa82>
mov    -0x1c(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    1a8b <cftbsub+0x96b>
jmp    1ba7 <cftbsub+0xa87>
jmp    1bac <cftbsub+0xa8c>
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cftbsub>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %rdx,%r14
mov    %rsi,%rbx
mov    %edi,%ebp
mov    $0x2,%r15d
cmp    $0x11,%edi
jl     1191 <cftbsub+0x71>
mov    %ebp,%edi
mov    %rbx,%rsi
mov    %r14,%rdx
xor    %eax,%eax
call   1030 <cft1st@plt>
mov    $0x10,%r15d
cmp    $0x81,%ebp
jb     1191 <cftbsub+0x71>
mov    $0x10,%esi
mov    $0x80,%eax
nopl   0x0(%rax,%rax,1)
mov    %eax,%r15d
mov    %ebp,%edi
mov    %rbx,%rdx
mov    %r14,%rcx
xor    %eax,%eax
call   1040 <cftmdl@plt>
lea    0x0(,%r15,8),%eax
mov    %r15d,%esi
cmp    %ebp,%eax
jl     1170 <cftbsub+0x50>
lea    0x0(,%r15,4),%eax
cmp    %ebp,%eax
jge    1514 <cftbsub+0x3f4>
test   %r15d,%r15d
jle    16fd <cftbsub+0x5dd>
movsd  0x10(%r14),%xmm0
movsd  %xmm0,0x50(%rsp)
mov    %r15d,%r12d
add    %r15d,%r15d
or     $0x1,%r15
mov    %r15,0x30(%rsp)
mov    %r12,%r8
shl    $0x20,%r8
lea    (%rbx,%r12,8),%rax
mov    %rax,0x40(%rsp)
mov    %r12,%rax
shl    $0x4,%rax
add    %rbx,%rax
mov    %rax,0x8(%rsp)
lea    (%r8,%r8,2),%r10
lea    (%r12,%r12,2),%rax
lea    (%rbx,%rax,8),%rcx
mov    %rcx,0x38(%rsp)
mov    %r12,%r11
shl    $0x22,%r11
imul   $0x38,%r12,%rcx
add    %rbx,%rcx
add    $0x8,%rcx
mov    %rcx,0x20(%rsp)
shl    $0x4,%rax
add    %rbx,%rax
add    $0x8,%rax
mov    %rax,0x18(%rsp)
lea    (%r12,%r12,4),%rax
lea    (%rbx,%rax,8),%rax
add    $0x8,%rax
mov    %rax,0x10(%rsp)
mov    %r12,0x48(%rsp)
shl    $0x5,%r12
add    %rbx,%r12
mov    %r12,0x28(%rsp)
xor    %esi,%esi
mov    0x40(%rsp),%r14
mov    0x38(%rsp),%r15
mov    0x28(%rsp),%r13
mov    0x10(%rsp),%r9
mov    0x18(%rsp),%rdi
mov    0x20(%rsp),%rcx
xchg   %ax,%ax
movsd  (%r14,%rsi,8),%xmm3
movsd  (%rbx,%rsi,8),%xmm0
movsd  0x8(%rbx,%rsi,8),%xmm4
movapd %xmm0,%xmm7
addsd  %xmm3,%xmm7
movapd %xmm4,%xmm2
xorpd  0xd7b(%rip),%xmm2
mov    %r8,%rdx
sar    $0x1d,%rdx
or     $0x8,%rdx
movsd  (%rbx,%rdx,1),%xmm1
subsd  %xmm1,%xmm2
subsd  %xmm3,%xmm0
subsd  %xmm4,%xmm1
mov    0x8(%rsp),%rax
movsd  (%rax,%rsi,8),%xmm10
movsd  (%r15,%rsi,8),%xmm3
movapd %xmm10,%xmm5
addsd  %xmm3,%xmm5
mov    0x30(%rsp),%rax
add    %esi,%eax
movslq %eax,%r12
movsd  (%rbx,%r12,8),%xmm13
mov    %r10,%rbp
sar    $0x1d,%rbp
or     $0x8,%rbp
movsd  (%rbx,%rbp,1),%xmm6
movapd %xmm13,%xmm11
addsd  %xmm6,%xmm11
subsd  %xmm3,%xmm10
subsd  %xmm6,%xmm13
movapd %xmm7,%xmm14
addsd  %xmm5,%xmm14
movapd %xmm2,%xmm3
subsd  %xmm11,%xmm3
movapd %xmm3,0x60(%rsp)
subsd  %xmm5,%xmm7
movsd  %xmm7,0x58(%rsp)
addsd  %xmm2,%xmm11
movapd %xmm0,%xmm7
subsd  %xmm13,%xmm7
movapd %xmm1,%xmm12
subsd  %xmm10,%xmm12
addsd  %xmm0,%xmm13
addsd  %xmm1,%xmm10
movsd  0x0(%r13,%rsi,8),%xmm6
movsd  -0x8(%r9,%rsi,8),%xmm3
movsd  (%r9,%rsi,8),%xmm8
movapd %xmm6,%xmm2
addsd  %xmm3,%xmm2
mov    %r11,%rax
sar    $0x1d,%rax
or     $0x8,%rax
movsd  (%rbx,%rax,1),%xmm0
movapd %xmm0,%xmm5
addsd  %xmm8,%xmm5
subsd  %xmm3,%xmm6
subsd  %xmm8,%xmm0
movsd  -0x8(%rdi,%rsi,8),%xmm1
movsd  (%rdi,%rsi,8),%xmm15
movsd  -0x8(%rcx,%rsi,8),%xmm3
movapd %xmm1,%xmm9
addsd  %xmm3,%xmm9
subsd  %xmm3,%xmm1
movsd  (%rcx,%rsi,8),%xmm3
movapd %xmm15,%xmm8
addsd  %xmm3,%xmm8
subsd  %xmm3,%xmm15
movapd %xmm2,%xmm3
addsd  %xmm9,%xmm3
subsd  %xmm9,%xmm2
movapd %xmm6,%xmm9
subsd  %xmm15,%xmm9
addsd  %xmm6,%xmm15
movapd %xmm0,%xmm6
addsd  %xmm1,%xmm6
subsd  %xmm1,%xmm0
movapd %xmm9,%xmm1
subsd  %xmm6,%xmm1
addsd  %xmm9,%xmm6
movapd %xmm15,%xmm9
subsd  %xmm0,%xmm9
addsd  %xmm15,%xmm0
movsd  0x50(%rsp),%xmm15
mulsd  %xmm15,%xmm1
movapd %xmm7,%xmm4
addsd  %xmm1,%xmm4
movsd  %xmm4,(%r14,%rsi,8)
mulsd  %xmm15,%xmm6
movapd %xmm12,%xmm4
subsd  %xmm6,%xmm4
movsd  %xmm4,(%rbx,%rdx,1)
subsd  %xmm1,%xmm7
movsd  %xmm7,-0x8(%r9,%rsi,8)
addsd  %xmm12,%xmm6
mulsd  %xmm15,%xmm9
mulsd  %xmm15,%xmm0
movsd  %xmm6,(%r9,%rsi,8)
movapd %xmm13,%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r15,%rsi,8)
movapd %xmm10,%xmm1
subsd  %xmm9,%xmm1
movsd  %xmm1,(%rbx,%rbp,1)
addsd  %xmm13,%xmm0
movsd  %xmm0,-0x8(%rcx,%rsi,8)
addsd  %xmm10,%xmm9
movapd %xmm5,%xmm0
addsd  %xmm8,%xmm0
movsd  %xmm9,(%rcx,%rsi,8)
movapd %xmm14,%xmm1
addsd  %xmm3,%xmm1
movsd  %xmm1,(%rbx,%rsi,8)
movapd 0x60(%rsp),%xmm4
movapd %xmm4,%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rbx,%rsi,8)
subsd  %xmm3,%xmm14
movsd  %xmm14,0x0(%r13,%rsi,8)
addsd  %xmm4,%xmm0
movsd  %xmm0,(%rbx,%rax,1)
subsd  %xmm8,%xmm5
movsd  0x58(%rsp),%xmm1
movapd %xmm1,%xmm0
subsd  %xmm5,%xmm0
mov    0x8(%rsp),%rax
movsd  %xmm0,(%rax,%rsi,8)
movapd %xmm11,%xmm0
subsd  %xmm2,%xmm0
movsd  %xmm0,(%rbx,%r12,8)
addsd  %xmm1,%xmm5
movsd  %xmm5,-0x8(%rdi,%rsi,8)
addsd  %xmm11,%xmm2
movsd  %xmm2,(%rdi,%rsi,8)
add    $0x2,%rsi
movabs $0x200000000,%rax
add    %rax,%r8
add    %rax,%r10
add    %rax,%r11
cmp    0x48(%rsp),%rsi
jb     1260 <cftbsub+0x140>
jmp    16fd <cftbsub+0x5dd>
jne    1669 <cftbsub+0x549>
test   %r15d,%r15d
jle    16fd <cftbsub+0x5dd>
movabs $0x200000000,%r8
mov    %r15d,%r9d
add    %r15d,%r15d
or     $0x1,%r15
mov    %r9,%rsi
shl    $0x20,%rsi
lea    (%rbx,%r9,8),%r10
mov    %r9,%r14
shl    $0x4,%r14
add    %rbx,%r14
lea    (%rsi,%rsi,2),%rax
lea    (%r9,%r9,2),%rcx
lea    (%rbx,%rcx,8),%r11
xor    %ecx,%ecx
movapd 0xa9d(%rip),%xmm8
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  (%r10,%rcx,8),%xmm5
movsd  (%rbx,%rcx,8),%xmm10
movsd  0x8(%rbx,%rcx,8),%xmm6
movapd %xmm10,%xmm4
addsd  %xmm5,%xmm4
movapd %xmm6,%xmm3
xorpd  %xmm8,%xmm3
mov    %rsi,%rdx
sar    $0x1d,%rdx
or     $0x8,%rdx
movsd  (%rbx,%rdx,1),%xmm2
subsd  %xmm2,%xmm3
subsd  %xmm5,%xmm10
subsd  %xmm6,%xmm2
movsd  (%r14,%rcx,8),%xmm5
movsd  (%r11,%rcx,8),%xmm9
movapd %xmm5,%xmm7
addsd  %xmm9,%xmm7
lea    (%r15,%rcx,1),%ebp
movslq %ebp,%rdi
movsd  (%rbx,%rdi,8),%xmm1
mov    %rax,%rbp
sar    $0x1d,%rbp
or     $0x8,%rbp
movsd  (%rbx,%rbp,1),%xmm6
movapd %xmm1,%xmm0
addsd  %xmm6,%xmm0
subsd  %xmm9,%xmm5
subsd  %xmm6,%xmm1
movapd %xmm4,%xmm6
addsd  %xmm7,%xmm6
movsd  %xmm6,(%rbx,%rcx,8)
movapd %xmm3,%xmm6
subsd  %xmm0,%xmm6
movsd  %xmm6,0x8(%rbx,%rcx,8)
subsd  %xmm7,%xmm4
movsd  %xmm4,(%r14,%rcx,8)
addsd  %xmm3,%xmm0
movsd  %xmm0,(%rbx,%rdi,8)
movapd %xmm10,%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%r10,%rcx,8)
movapd %xmm2,%xmm0
subsd  %xmm5,%xmm0
movsd  %xmm0,(%rbx,%rdx,1)
addsd  %xmm10,%xmm1
movsd  %xmm1,(%r11,%rcx,8)
addsd  %xmm2,%xmm5
movsd  %xmm5,(%rbx,%rbp,1)
add    $0x2,%rcx
add    %r8,%rsi
add    %r8,%rax
cmp    %r9,%rcx
jb     1570 <cftbsub+0x450>
jmp    16fd <cftbsub+0x5dd>
test   %r15d,%r15d
jle    16fd <cftbsub+0x5dd>
movabs $0x200000000,%rax
mov    %r15d,%ebp
mov    %rbp,%rcx
shl    $0x20,%rcx
lea    (%rbx,%rbp,8),%rsi
xor    %edi,%edi
movapd 0x96c(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%rsi,%rdi,8),%xmm1
movsd  (%rbx,%rdi,8),%xmm2
movsd  0x8(%rbx,%rdi,8),%xmm3
movapd %xmm2,%xmm4
subsd  %xmm1,%xmm4
mov    %rcx,%rdx
sar    $0x1d,%rdx
or     $0x8,%rdx
movsd  (%rbx,%rdx,1),%xmm5
movapd %xmm5,%xmm6
subsd  %xmm3,%xmm6
addsd  %xmm1,%xmm2
movsd  %xmm2,(%rbx,%rdi,8)
xorpd  %xmm0,%xmm3
subsd  %xmm5,%xmm3
movsd  %xmm3,0x8(%rbx,%rdi,8)
movsd  %xmm4,(%rsi,%rdi,8)
movsd  %xmm6,(%rbx,%rdx,1)
add    $0x2,%rdi
add    %rax,%rcx
cmp    %rbp,%rdi
jb     16a0 <cftbsub+0x580>
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @cftbsub(i32 %0, double* %1, double* %2) {
%4 = icmp sgt i32 %0, 16
br i1 %4, label %5, label %14
5: ; preds = %3
%6 = tail call i32 (i32, double*, double*, ...) bitcast (i32 (...)* @cft1st to i32 (i32, double*, double*, ...)*)(i32 %0, double* %1, double* %2)
%7 = icmp ugt i32 %0, 128
br i1 %7, label %8, label %14
8: ; preds = %5, %8
%9 = phi i32 [ %12, %8 ], [ 128, %5 ]
%10 = phi i32 [ %9, %8 ], [ 16, %5 ]
%11 = tail call i32 (i32, i32, double*, double*, ...) bitcast (i32 (...)* @cftmdl to i32 (i32, i32, double*, double*, ...)*)(i32 %0, i32 %10, double* %1, double* %2)
%12 = shl i32 %9, 3
%13 = icmp slt i32 %12, %0
br i1 %13, label %8, label %14
14: ; preds = %8, %5, %3
%15 = phi i32 [ 2, %3 ], [ 16, %5 ], [ %9, %8 ]
%16 = shl i32 %15, 2
%17 = icmp slt i32 %16, %0
br i1 %17, label %18, label %142
18: ; preds = %14
%19 = getelementptr inbounds double, double* %2, i64 2
%20 = load double, double* %19
%21 = icmp sgt i32 %15, 0
br i1 %21, label %22, label %225
22: ; preds = %18
%23 = zext i32 %15 to i64
%24 = shl i32 %15, 1
br label %25
25: ; preds = %22, %25
%26 = phi i64 [ 0, %22 ], [ %140, %25 ]
%27 = trunc i64 %26 to i32
%28 = add nuw nsw i64 %26, %23
%29 = add nuw nsw i64 %28, %23
%30 = add i32 %24, %27
%31 = add nuw nsw i64 %29, %23
%32 = add nuw nsw i64 %31, %23
%33 = add nuw nsw i64 %32, %23
%34 = add nuw nsw i64 %33, %23
%35 = add nsw i64 %34, %23
%36 = getelementptr inbounds double, double* %1, i64 %26
%37 = load double, double* %36
%38 = getelementptr inbounds double, double* %1, i64 %28
%39 = load double, double* %38
%40 = fadd double %37, %39
%41 = or i64 %26, 1
%42 = getelementptr inbounds double, double* %1, i64 %41
%43 = load double, double* %42
%44 = fneg double %43
%45 = shl i64 %28, 32
%46 = ashr exact i64 %45, 32
%47 = or i64 %46, 1
%48 = getelementptr inbounds double, double* %1, i64 %47
%49 = load double, double* %48
%50 = fsub double %44, %49
%51 = fsub double %37, %39
%52 = fsub double %49, %43
%53 = getelementptr inbounds double, double* %1, i64 %29
%54 = load double, double* %53
%55 = getelementptr inbounds double, double* %1, i64 %31
%56 = load double, double* %55
%57 = fadd double %54, %56
%58 = or i32 %30, 1
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds double, double* %1, i64 %59
%61 = load double, double* %60
%62 = shl i64 %31, 32
%63 = ashr exact i64 %62, 32
%64 = or i64 %63, 1
%65 = getelementptr inbounds double, double* %1, i64 %64
%66 = load double, double* %65
%67 = fadd double %61, %66
%68 = fsub double %54, %56
%69 = fsub double %61, %66
%70 = fadd double %40, %57
%71 = fsub double %50, %67
%72 = fsub double %40, %57
%73 = fadd double %50, %67
%74 = fsub double %51, %69
%75 = fsub double %52, %68
%76 = fadd double %51, %69
%77 = fadd double %52, %68
%78 = getelementptr inbounds double, double* %1, i64 %32
%79 = load double, double* %78
%80 = getelementptr inbounds double, double* %1, i64 %33
%81 = load double, double* %80
%82 = fadd double %79, %81
%83 = shl i64 %32, 32
%84 = ashr exact i64 %83, 32
%85 = or i64 %84, 1
%86 = getelementptr inbounds double, double* %1, i64 %85
%87 = load double, double* %86
%88 = add nuw nsw i64 %33, 1
%89 = getelementptr inbounds double, double* %1, i64 %88
%90 = load double, double* %89
%91 = fadd double %87, %90
%92 = fsub double %79, %81
%93 = fsub double %87, %90
%94 = getelementptr inbounds double, double* %1, i64 %34
%95 = load double, double* %94
%96 = getelementptr inbounds double, double* %1, i64 %35
%97 = load double, double* %96
%98 = fadd double %95, %97
%99 = add nsw i64 %34, 1
%100 = getelementptr inbounds double, double* %1, i64 %99
%101 = load double, double* %100
%102 = add nsw i64 %35, 1
%103 = getelementptr inbounds double, double* %1, i64 %102
%104 = load double, double* %103
%105 = fadd double %101, %104
%106 = fsub double %95, %97
%107 = fsub double %101, %104
%108 = fadd double %82, %98
%109 = fadd double %91, %105
%110 = fsub double %82, %98
%111 = fsub double %91, %105
%112 = fsub double %92, %107
%113 = fadd double %93, %106
%114 = fadd double %92, %107
%115 = fsub double %93, %106
%116 = fsub double %112, %113
%117 = fmul double %20, %116
%118 = fadd double %113, %112
%119 = fmul double %20, %118
%120 = fsub double %114, %115
%121 = fmul double %20, %120
%122 = fadd double %115, %114
%123 = fmul double %20, %122
%124 = fadd double %74, %117
store double %124, double* %38
%125 = fsub double %75, %119
store double %125, double* %48
%126 = fsub double %74, %117
store double %126, double* %80
%127 = fadd double %75, %119
store double %127, double* %89
%128 = fsub double %76, %123
store double %128, double* %55
%129 = fsub double %77, %121
store double %129, double* %65
%130 = fadd double %76, %123
store double %130, double* %96
%131 = fadd double %77, %121
store double %131, double* %103
%132 = fadd double %70, %108
store double %132, double* %36
%133 = fsub double %71, %109
store double %133, double* %42
%134 = fsub double %70, %108
store double %134, double* %78
%135 = fadd double %71, %109
store double %135, double* %86
%136 = fsub double %72, %111
store double %136, double* %53
%137 = fsub double %73, %110
store double %137, double* %60
%138 = fadd double %72, %111
store double %138, double* %94
%139 = fadd double %73, %110
store double %139, double* %100
%140 = add nuw nsw i64 %26, 2
%141 = icmp ult i64 %140, %23
br i1 %141, label %25, label %225
142: ; preds = %14
%143 = icmp eq i32 %16, %0
%144 = icmp sgt i32 %15, 0
br i1 %143, label %148, label %145
145: ; preds = %142
br i1 %144, label %146, label %225
146: ; preds = %145
%147 = zext i32 %15 to i64
br label %203
148: ; preds = %142
br i1 %144, label %149, label %225
149: ; preds = %148
%150 = zext i32 %15 to i64
%151 = shl i32 %15, 1
br label %152
152: ; preds = %149, %152
%153 = phi i64 [ 0, %149 ], [ %201, %152 ]
%154 = trunc i64 %153 to i32
%155 = add nuw nsw i64 %153, %150
%156 = add nuw nsw i64 %155, %150
%157 = add i32 %151, %154
%158 = add nuw nsw i64 %156, %150
%159 = getelementptr inbounds double, double* %1, i64 %153
%160 = load double, double* %159
%161 = getelementptr inbounds double, double* %1, i64 %155
%162 = load double, double* %161
%163 = fadd double %160, %162
%164 = or i64 %153, 1
%165 = getelementptr inbounds double, double* %1, i64 %164
%166 = load double, double* %165
%167 = fneg double %166
%168 = shl i64 %155, 32
%169 = ashr exact i64 %168, 32
%170 = or i64 %169, 1
%171 = getelementptr inbounds double, double* %1, i64 %170
%172 = load double, double* %171
%173 = fsub double %167, %172
%174 = fsub double %160, %162
%175 = fsub double %172, %166
%176 = getelementptr inbounds double, double* %1, i64 %156
%177 = load double, double* %176
%178 = getelementptr inbounds double, double* %1, i64 %158
%179 = load double, double* %178
%180 = fadd double %177, %179
%181 = or i32 %157, 1
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds double, double* %1, i64 %182
%184 = load double, double* %183
%185 = shl i64 %158, 32
%186 = ashr exact i64 %185, 32
%187 = or i64 %186, 1
%188 = getelementptr inbounds double, double* %1, i64 %187
%189 = load double, double* %188
%190 = fadd double %184, %189
%191 = fsub double %177, %179
%192 = fsub double %184, %189
%193 = fadd double %163, %180
store double %193, double* %159
%194 = fsub double %173, %190
store double %194, double* %165
%195 = fsub double %163, %180
store double %195, double* %176
%196 = fadd double %173, %190
store double %196, double* %183
%197 = fsub double %174, %192
store double %197, double* %161
%198 = fsub double %175, %191
store double %198, double* %171
%199 = fadd double %174, %192
store double %199, double* %178
%200 = fadd double %175, %191
store double %200, double* %188
%201 = add nuw nsw i64 %153, 2
%202 = icmp ult i64 %201, %150
br i1 %202, label %152, label %225
203: ; preds = %146, %203
%204 = phi i64 [ 0, %146 ], [ %223, %203 ]
%205 = add nuw nsw i64 %204, %147
%206 = getelementptr inbounds double, double* %1, i64 %204
%207 = load double, double* %206
%208 = getelementptr inbounds double, double* %1, i64 %205
%209 = load double, double* %208
%210 = fsub double %207, %209
%211 = or i64 %204, 1
%212 = getelementptr inbounds double, double* %1, i64 %211
%213 = load double, double* %212
%214 = shl i64 %205, 32
%215 = ashr exact i64 %214, 32
%216 = or i64 %215, 1
%217 = getelementptr inbounds double, double* %1, i64 %216
%218 = load double, double* %217
%219 = fsub double %218, %213
%220 = fadd double %207, %209
store double %220, double* %206
%221 = fneg double %213
%222 = fsub double %221, %218
store double %222, double* %212
store double %210, double* %208
store double %219, double* %217
%223 = add nuw nsw i64 %204, 2
%224 = icmp ult i64 %223, %147
br i1 %224, label %203, label %225
225: ; preds = %203, %152, %25, %145, %148, %18
ret void
}