void cft1st(int n, double *a, double const *w) {
  int j, k1, k2;
  double wk1r, wk1i, wk2r, wk2i, wk3r, wk3i;
  double x0r, x0i, x1r, x1i, x2r, x2i, x3r, x3i;
  x0r = a[0] + a[2];
  x0i = a[1] + a[3];
  x1r = a[0] - a[2];
  x1i = a[1] - a[3];
  x2r = a[4] + a[6];
  x2i = a[5] + a[7];
  x3r = a[4] - a[6];
  x3i = a[5] - a[7];
  a[0] = x0r + x2r;
  a[1] = x0i + x2i;
  a[4] = x0r - x2r;
  a[5] = x0i - x2i;
  a[2] = x1r - x3i;
  a[3] = x1i + x3r;
  a[6] = x1r + x3i;
  a[7] = x1i - x3r;
  wk1r = w[2];
  x0r = a[8] + a[10];
  x0i = a[9] + a[11];
  x1r = a[8] - a[10];
  x1i = a[9] - a[11];
  x2r = a[12] + a[14];
  x2i = a[13] + a[15];
  x3r = a[12] - a[14];
  x3i = a[13] - a[15];
  a[8] = x0r + x2r;
  a[9] = x0i + x2i;
  a[12] = x2i - x0i;
  a[13] = x0r - x2r;
  x0r = x1r - x3i;
  x0i = x1i + x3r;
  a[10] = wk1r * (x0r - x0i);
  a[11] = wk1r * (x0r + x0i);
  x0r = x3i + x1r;
  x0i = x3r - x1i;
  a[14] = wk1r * (x0i - x0r);
  a[15] = wk1r * (x0i + x0r);
  k1 = 0;
  for (j = 16; j < n; j += 16) {
    k1 += 2;
    k2 = 2 * k1;
    wk2r = w[k1];
    wk2i = w[k1 + 1];
    wk1r = w[k2];
    wk1i = w[k2 + 1];
    wk3r = wk1r - 2 * wk2i * wk1i;
    wk3i = 2 * wk2i * wk1r - wk1i;
    x0r = a[j] + a[j + 2];
    x0i = a[j + 1] + a[j + 3];
    x1r = a[j] - a[j + 2];
    x1i = a[j + 1] - a[j + 3];
    x2r = a[j + 4] + a[j + 6];
    x2i = a[j + 5] + a[j + 7];
    x3r = a[j + 4] - a[j + 6];
    x3i = a[j + 5] - a[j + 7];
    a[j] = x0r + x2r;
    a[j + 1] = x0i + x2i;
    x0r -= x2r;
    x0i -= x2i;
    a[j + 4] = wk2r * x0r - wk2i * x0i;
    a[j + 5] = wk2r * x0i + wk2i * x0r;
    x0r = x1r - x3i;
    x0i = x1i + x3r;
    a[j + 2] = wk1r * x0r - wk1i * x0i;
    a[j + 3] = wk1r * x0i + wk1i * x0r;
    x0r = x1r + x3i;
    x0i = x1i - x3r;
    a[j + 6] = wk3r * x0r - wk3i * x0i;
    a[j + 7] = wk3r * x0i + wk3i * x0r;
    wk1r = w[k2 + 2];
    wk1i = w[k2 + 3];
    wk3r = wk1r - 2 * wk2r * wk1i;
    wk3i = 2 * wk2r * wk1r - wk1i;
    x0r = a[j + 8] + a[j + 10];
    x0i = a[j + 9] + a[j + 11];
    x1r = a[j + 8] - a[j + 10];
    x1i = a[j + 9] - a[j + 11];
    x2r = a[j + 12] + a[j + 14];
    x2i = a[j + 13] + a[j + 15];
    x3r = a[j + 12] - a[j + 14];
    x3i = a[j + 13] - a[j + 15];
    a[j + 8] = x0r + x2r;
    a[j + 9] = x0i + x2i;
    x0r -= x2r;
    x0i -= x2i;
    a[j + 12] = -wk2i * x0r - wk2r * x0i;
    a[j + 13] = -wk2i * x0i + wk2r * x0r;
    x0r = x1r - x3i;
    x0i = x1i + x3r;
    a[j + 10] = wk1r * x0r - wk1i * x0i;
    a[j + 11] = wk1r * x0i + wk1i * x0r;
    x0r = x1r + x3i;
    x0i = x1i - x3r;
    a[j + 14] = wk3r * x0r - wk3i * x0i;
    a[j + 15] = wk3r * x0i + wk3i * x0r;
  }
}


x86 assembly (clang, -O0):
<cft1st>:
push   %rbp
mov    %rsp,%rbp
sub    $0x18,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
addsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
addsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x10(%rbp),%rax
addsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x10(%rbp),%rax
addsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x68(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x60(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x68(%rbp),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x70(%rbp),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x78(%rbp),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x70(%rbp),%xmm0
addsd  -0x98(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x78(%rbp),%xmm0
subsd  -0x90(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x10(%rbp),%rax
addsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x10(%rbp),%rax
addsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x10(%rbp),%rax
addsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x10(%rbp),%rax
addsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x68(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x88(%rbp),%xmm0
ff
subsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x60(%rbp),%xmm0
subsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x70(%rbp),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
subsd  -0x68(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x30(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
addsd  -0x68(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x58(%rax)
movsd  -0x98(%rbp),%xmm0
ff
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x90(%rbp),%xmm0
ff
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
subsd  -0x60(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0x30(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm1
addsd  -0x60(%rbp),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x78(%rax)
movl   $0x0,-0x20(%rbp)
movl   $0x10,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1cc5 <cft1st+0xbc5>
mov    -0x20(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm1
movsd  0xb21(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xaeb(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
addsd  (%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
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x7,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x7,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x80(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x68(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x70(%rbp),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x30(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x70(%rbp),%xmm0
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x78(%rbp),%xmm0
subsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x7,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm1
movsd  0x736(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0x700(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x8,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xa,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x9,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xb,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x8,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xa,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x9,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xb,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xc,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xe,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xd,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xf,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xc,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xe,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xd,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xf,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x8,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x9,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x80(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0x68(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x48(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xc,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xd,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x70(%rbp),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xa,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x30(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x38(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xb,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x70(%rbp),%xmm0
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x78(%rbp),%xmm0
subsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  -0x68(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xe,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0xf,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x1c(%rbp),%eax
add    $0x10,%eax
mov    %eax,-0x1c(%rbp)
jmp    1462 <cft1st+0x362>
add    $0x18,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cft1st>:
movupd (%rsi),%xmm0
movupd 0x10(%rsi),%xmm1
movupd 0x20(%rsi),%xmm2
movupd 0x30(%rsi),%xmm3
movapd %xmm0,%xmm4
addpd  %xmm1,%xmm4
subpd  %xmm1,%xmm0
movapd %xmm2,%xmm1
addpd  %xmm3,%xmm1
subpd  %xmm3,%xmm2
shufpd $0x1,%xmm2,%xmm2
movapd %xmm4,%xmm3
addpd  %xmm1,%xmm3
movupd %xmm3,(%rsi)
subpd  %xmm1,%xmm4
movupd %xmm4,0x20(%rsi)
movapd %xmm0,%xmm1
subpd  %xmm2,%xmm1
addpd  %xmm0,%xmm2
movapd %xmm2,%xmm0
movsd  %xmm1,%xmm0
movupd %xmm0,0x10(%rsi)
shufpd $0x2,%xmm1,%xmm2
movupd %xmm2,0x30(%rsi)
movsd  0x10(%rdx),%xmm0
movupd 0x40(%rsi),%xmm3
movupd 0x50(%rsi),%xmm1
movapd %xmm3,%xmm2
addpd  %xmm1,%xmm2
subpd  %xmm1,%xmm3
movupd 0x60(%rsi),%xmm1
movupd 0x70(%rsi),%xmm6
movapd %xmm1,%xmm5
subpd  %xmm6,%xmm1
movapd %xmm1,%xmm4
unpckhpd %xmm1,%xmm4
movapd %xmm3,%xmm7
subsd  %xmm4,%xmm7
addsd  %xmm3,%xmm4
unpckhpd %xmm3,%xmm3
addpd  %xmm6,%xmm5
movapd %xmm2,%xmm6
addpd  %xmm5,%xmm6
movupd %xmm6,0x40(%rsi)
movapd %xmm5,%xmm6
shufpd $0x1,%xmm2,%xmm6
shufpd $0x1,%xmm5,%xmm2
subpd  %xmm2,%xmm6
movupd %xmm6,0x60(%rsi)
movapd %xmm3,%xmm2
addsd  %xmm1,%xmm2
movapd %xmm7,%xmm5
subsd  %xmm2,%xmm5
mulsd  %xmm0,%xmm5
movsd  %xmm5,0x50(%rsi)
addsd  %xmm7,%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,0x58(%rsi)
subsd  %xmm3,%xmm1
movapd %xmm1,%xmm2
subsd  %xmm4,%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,0x70(%rsi)
addsd  %xmm4,%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x78(%rsi)
cmp    $0x11,%edi
jl     1490 <cft1st+0x390>
mov    %edi,%eax
mov    $0x10,%ecx
movapd 0xdca(%rip),%xmm8
cs nopw 0x0(%rax,%rax,1)
movsd  (%rdx,%rcx,1),%xmm12
movsd  0x8(%rdx,%rcx,1),%xmm10
movsd  (%rdx,%rcx,2),%xmm5
movsd  0x8(%rdx,%rcx,2),%xmm11
movapd %xmm10,%xmm3
addsd  %xmm10,%xmm3
movapd %xmm3,%xmm0
mulsd  %xmm11,%xmm0
movapd %xmm5,%xmm14
subsd  %xmm0,%xmm14
mulsd  %xmm5,%xmm3
subsd  %xmm11,%xmm3
movupd (%rsi,%rcx,8),%xmm0
movupd 0x10(%rsi,%rcx,8),%xmm7
movupd 0x20(%rsi,%rcx,8),%xmm6
movupd 0x30(%rsi,%rcx,8),%xmm9
movapd %xmm0,%xmm1
addpd  %xmm7,%xmm1
subpd  %xmm7,%xmm0
movapd %xmm6,%xmm13
subpd  %xmm9,%xmm6
shufpd $0x1,%xmm6,%xmm6
movapd %xmm0,%xmm2
subpd  %xmm6,%xmm2
addpd  %xmm0,%xmm6
movapd %xmm6,%xmm7
shufpd $0x1,%xmm11,%xmm7
xorpd  %xmm8,%xmm11
addpd  %xmm9,%xmm13
movapd %xmm1,%xmm0
addpd  %xmm13,%xmm0
movupd %xmm0,(%rsi,%rcx,8)
subpd  %xmm13,%xmm1
movapd %xmm10,%xmm0
xorpd  %xmm8,%xmm0
unpcklpd %xmm1,%xmm0
movapd %xmm12,%xmm4
unpcklpd %xmm12,%xmm4
mulpd  %xmm1,%xmm4
shufpd $0x1,%xmm10,%xmm1
mulpd  %xmm1,%xmm0
addpd  %xmm0,%xmm4
movupd %xmm4,0x20(%rsi,%rcx,8)
movapd %xmm6,%xmm0
movsd  %xmm2,%xmm0
unpcklpd %xmm2,%xmm11
mulpd  %xmm7,%xmm11
unpcklpd %xmm5,%xmm5
mulpd  %xmm0,%xmm5
addpd  %xmm11,%xmm5
movupd %xmm5,0x10(%rsi,%rcx,8)
movapd %xmm2,%xmm0
movsd  %xmm6,%xmm0
shufpd $0x1,%xmm3,%xmm2
xorpd  %xmm8,%xmm3
unpcklpd %xmm6,%xmm3
mulpd  %xmm2,%xmm3
unpcklpd %xmm14,%xmm14
mulpd  %xmm0,%xmm14
addpd  %xmm3,%xmm14
movupd %xmm14,0x30(%rsi,%rcx,8)
movsd  0x10(%rdx,%rcx,2),%xmm5
movsd  0x18(%rdx,%rcx,2),%xmm9
movapd %xmm12,%xmm3
addsd  %xmm12,%xmm3
movapd %xmm3,%xmm0
mulsd  %xmm9,%xmm0
movapd %xmm5,%xmm4
subsd  %xmm0,%xmm4
mulsd  %xmm5,%xmm3
subsd  %xmm9,%xmm3
movupd 0x40(%rsi,%rcx,8),%xmm0
movupd 0x50(%rsi,%rcx,8),%xmm1
movapd %xmm0,%xmm2
addpd  %xmm1,%xmm2
subpd  %xmm1,%xmm0
movupd 0x60(%rsi,%rcx,8),%xmm7
movupd 0x70(%rsi,%rcx,8),%xmm11
movapd %xmm7,%xmm13
subpd  %xmm11,%xmm7
shufpd $0x1,%xmm7,%xmm7
movapd %xmm0,%xmm1
subpd  %xmm7,%xmm1
addpd  %xmm0,%xmm7
movapd %xmm7,%xmm6
shufpd $0x1,%xmm9,%xmm6
xorpd  %xmm8,%xmm9
addpd  %xmm11,%xmm13
movapd %xmm2,%xmm0
addpd  %xmm13,%xmm0
movupd %xmm0,0x40(%rsi,%rcx,8)
subpd  %xmm13,%xmm2
movapd %xmm2,%xmm0
shufpd $0x1,%xmm12,%xmm0
xorpd  %xmm8,%xmm12
unpcklpd %xmm2,%xmm12
mulpd  %xmm0,%xmm12
unpcklpd %xmm10,%xmm10
mulpd  %xmm2,%xmm10
subpd  %xmm10,%xmm12
movupd %xmm12,0x60(%rsi,%rcx,8)
movapd %xmm7,%xmm0
movsd  %xmm1,%xmm0
unpcklpd %xmm1,%xmm9
mulpd  %xmm6,%xmm9
unpcklpd %xmm5,%xmm5
mulpd  %xmm0,%xmm5
addpd  %xmm9,%xmm5
movupd %xmm5,0x50(%rsi,%rcx,8)
movapd %xmm1,%xmm0
movsd  %xmm7,%xmm0
shufpd $0x1,%xmm3,%xmm1
xorpd  %xmm8,%xmm3
unpcklpd %xmm7,%xmm3
mulpd  %xmm1,%xmm3
unpcklpd %xmm4,%xmm4
mulpd  %xmm0,%xmm4
addpd  %xmm3,%xmm4
movupd %xmm4,0x70(%rsi,%rcx,8)
add    $0x10,%rcx
cmp    %rax,%rcx
jb     1240 <cft1st+0x140>
ret

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

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