void fft8(_Complex double *Y, _Complex double *X) {
  _Complex double a122, a123, t92, t93, a124, a125, t94, t95, t96, a126, t97,
      t98, a127, a128, t99, s9, a129, a130, t100, s10, t101, s11, t102, s12;
  a122 = *(X);
  a123 = *((X + 4));
  t92 = (a122 + a123);
  t93 = (a122 - a123);
  a124 = *((X + 2));
  a125 = *((X + 6));
  t94 = (a124 + a125);
  t95 = (t92 + t94);
  t96 = (t92 - t94);
  a126 = (1.0if * (a124 - a125));
  t97 = (t93 + a126);
  t98 = (t93 - a126);
  a127 = *((X + 1));
  a128 = *((X + 5));
  t99 = (a127 + a128);
  s9 = ((0.70710678118654757 + 1.0if * 0.70710678118654757) * (a127 - a128));
  a129 = *((X + 3));
  a130 = *((X + 7));
  t100 = (a129 + a130);
  s10 = ((-0.70710678118654757 + 1.0if * 0.70710678118654757) * (a129 - a130));
  t101 = (t99 + t100);
  s11 = (1.0if * (t99 - t100));
  t102 = (s9 + s10);
  s12 = (1.0if * (s9 - s10));
  *(Y) = (t95 + t101);
  *((Y + 4)) = (t95 - t101);
  *((Y + 1)) = (t97 + t102);
  *((Y + 5)) = (t97 - t102);
  *((Y + 2)) = (t96 + s11);
  *((Y + 6)) = (t96 - s11);
  *((Y + 3)) = (t98 + s12);
  *((Y + 7)) = (t98 - s12);
}


x86 assembly (clang, -O0):
<fft8>:
push   %rbp
mov    %rsp,%rbp
sub    $0x280,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
movsd  0x8(%rax),%xmm0
movsd  %xmm1,-0x20(%rbp)
movsd  %xmm0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm1
movsd  0x48(%rax),%xmm0
movsd  %xmm1,-0x30(%rbp)
movsd  %xmm0,-0x28(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm3
movsd  -0x28(%rbp),%xmm2
addsd  %xmm3,%xmm1
addsd  %xmm2,%xmm0
movsd  %xmm1,-0x40(%rbp)
movsd  %xmm0,-0x38(%rbp)
movsd  -0x20(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm3
movsd  -0x28(%rbp),%xmm2
subsd  %xmm3,%xmm1
subsd  %xmm2,%xmm0
movsd  %xmm1,-0x50(%rbp)
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm1
movsd  0x28(%rax),%xmm0
movsd  %xmm1,-0x60(%rbp)
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm1
movsd  0x68(%rax),%xmm0
movsd  %xmm1,-0x70(%rbp)
movsd  %xmm0,-0x68(%rbp)
movsd  -0x60(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm3
movsd  -0x68(%rbp),%xmm2
addsd  %xmm3,%xmm1
addsd  %xmm2,%xmm0
movsd  %xmm1,-0x80(%rbp)
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm3
movsd  -0x78(%rbp),%xmm2
addsd  %xmm3,%xmm1
addsd  %xmm2,%xmm0
movsd  %xmm1,-0x90(%rbp)
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
movsd  -0x80(%rbp),%xmm3
movsd  -0x78(%rbp),%xmm2
subsd  %xmm3,%xmm1
subsd  %xmm2,%xmm0
movsd  %xmm1,-0xa0(%rbp)
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x60(%rbp),%xmm4
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
movsd  -0x68(%rbp),%xmm0
subsd  %xmm1,%xmm4
movsd  %xmm4,-0x1c0(%rbp)
ff
subsd  %xmm0,%xmm2
movsd  %xmm2,-0x1b8(%rbp)
ff
xorps  %xmm0,%xmm0
mulsd  %xmm4,%xmm0
movsd  0xd89(%rip),%xmm3
mulsd  %xmm2,%xmm3
xorps  %xmm1,%xmm1
mulsd  %xmm2,%xmm1
movsd  0xd76(%rip),%xmm2
mulsd  %xmm4,%xmm2
subsd  %xmm3,%xmm0
movsd  %xmm0,-0x1b0(%rbp)
ff
addsd  %xmm2,%xmm1
movsd  %xmm1,-0x1a8(%rbp)
ff
ucomisd %xmm0,%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  %xmm1,-0x198(%rbp)
ff
jnp    131a <fft8+0x21a>
movsd  -0x1a8(%rbp),%xmm1
ff
movsd  -0x1b0(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm1
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  %xmm1,-0x198(%rbp)
ff
jnp    131a <fft8+0x21a>
movsd  -0x1b8(%rbp),%xmm3
ff
movsd  -0x1c0(%rbp),%xmm2
ff
xorps  %xmm0,%xmm0
movsd  0xcfb(%rip),%xmm1
call   1af0 <__muldc3>
movsd  %xmm0,-0x1a0(%rbp)
ff
movsd  %xmm1,-0x198(%rbp)
ff
movsd  -0x1a0(%rbp),%xmm1
ff
movsd  -0x198(%rbp),%xmm0
ff
movsd  %xmm1,-0xb0(%rbp)
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x50(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0xb0(%rbp),%xmm3
ff
movsd  -0xa8(%rbp),%xmm2
ff
addsd  %xmm3,%xmm1
addsd  %xmm2,%xmm0
movsd  %xmm1,-0xc0(%rbp)
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm0
movsd  -0xb0(%rbp),%xmm3
ff
movsd  -0xa8(%rbp),%xmm2
ff
subsd  %xmm3,%xmm1
subsd  %xmm2,%xmm0
movsd  %xmm1,-0xd0(%rbp)
ff
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm1
movsd  0x18(%rax),%xmm0
movsd  %xmm1,-0xe0(%rbp)
ff
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm1
movsd  0x58(%rax),%xmm0
movsd  %xmm1,-0xf0(%rbp)
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xe0(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm0
ff
movsd  -0xf0(%rbp),%xmm3
ff
movsd  -0xe8(%rbp),%xmm2
ff
addsd  %xmm3,%xmm1
addsd  %xmm2,%xmm0
movsd  %xmm1,-0x100(%rbp)
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xe0(%rbp),%xmm4
ff
movsd  -0xd8(%rbp),%xmm2
ff
movsd  -0xf0(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm4
movsd  %xmm4,-0x1f0(%rbp)
ff
subsd  %xmm0,%xmm2
movsd  %xmm2,-0x1e8(%rbp)
ff
movsd  0xbb6(%rip),%xmm0
mulsd  %xmm4,%xmm0
movsd  0xbaa(%rip),%xmm3
mulsd  %xmm2,%xmm3
movsd  0xb9e(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  0xb92(%rip),%xmm2
mulsd  %xmm4,%xmm2
subsd  %xmm3,%xmm0
movsd  %xmm0,-0x1e0(%rbp)
ff
addsd  %xmm2,%xmm1
movsd  %xmm1,-0x1d8(%rbp)
ff
ucomisd %xmm0,%xmm0
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  %xmm1,-0x1c8(%rbp)
ff
jnp    1506 <fft8+0x406>
movsd  -0x1d8(%rbp),%xmm1
ff
movsd  -0x1e0(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm1
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  %xmm1,-0x1c8(%rbp)
ff
jnp    1506 <fft8+0x406>
movsd  -0x1e8(%rbp),%xmm3
ff
movsd  -0x1f0(%rbp),%xmm2
ff
movsd  0xb1a(%rip),%xmm1
movaps %xmm1,%xmm0
call   1af0 <__muldc3>
movsd  %xmm0,-0x1d0(%rbp)
ff
movsd  %xmm1,-0x1c8(%rbp)
ff
movsd  -0x1d0(%rbp),%xmm1
ff
movsd  -0x1c8(%rbp),%xmm0
ff
movsd  %xmm1,-0x110(%rbp)
ff
movsd  %xmm0,-0x108(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm1
movsd  0x38(%rax),%xmm0
movsd  %xmm1,-0x120(%rbp)
ff
movsd  %xmm0,-0x118(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm1
movsd  0x78(%rax),%xmm0
movsd  %xmm1,-0x130(%rbp)
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x120(%rbp),%xmm1
ff
movsd  -0x118(%rbp),%xmm0
ff
movsd  -0x130(%rbp),%xmm3
ff
movsd  -0x128(%rbp),%xmm2
ff
addsd  %xmm3,%xmm1
addsd  %xmm2,%xmm0
movsd  %xmm1,-0x140(%rbp)
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0x120(%rbp),%xmm4
ff
movsd  -0x118(%rbp),%xmm2
ff
movsd  -0x130(%rbp),%xmm1
ff
movsd  -0x128(%rbp),%xmm0
ff
subsd  %xmm1,%xmm4
movsd  %xmm4,-0x220(%rbp)
ff
subsd  %xmm0,%xmm2
movsd  %xmm2,-0x218(%rbp)
ff
movsd  0xa36(%rip),%xmm0
mulsd  %xmm4,%xmm0
movsd  0xa22(%rip),%xmm3
mulsd  %xmm2,%xmm3
movsd  0xa1e(%rip),%xmm1
mulsd  %xmm2,%xmm1
movsd  0xa0a(%rip),%xmm2
mulsd  %xmm4,%xmm2
subsd  %xmm3,%xmm0
movsd  %xmm0,-0x210(%rbp)
ff
addsd  %xmm2,%xmm1
movsd  %xmm1,-0x208(%rbp)
ff
ucomisd %xmm0,%xmm0
movsd  %xmm0,-0x200(%rbp)
ff
movsd  %xmm1,-0x1f8(%rbp)
ff
jnp    1693 <fft8+0x593>
movsd  -0x208(%rbp),%xmm1
ff
movsd  -0x210(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm1
movsd  %xmm0,-0x200(%rbp)
ff
movsd  %xmm1,-0x1f8(%rbp)
ff
jnp    1693 <fft8+0x593>
movsd  -0x218(%rbp),%xmm3
ff
movsd  -0x220(%rbp),%xmm2
ff
movsd  0x99a(%rip),%xmm0
movsd  0x98a(%rip),%xmm1
call   1af0 <__muldc3>
movsd  %xmm0,-0x200(%rbp)
ff
movsd  %xmm1,-0x1f8(%rbp)
ff
movsd  -0x200(%rbp),%xmm1
ff
movsd  -0x1f8(%rbp),%xmm0
ff
movsd  %xmm1,-0x150(%rbp)
ff
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x100(%rbp),%xmm1
ff
movsd  -0xf8(%rbp),%xmm0
ff
movsd  -0x140(%rbp),%xmm3
ff
movsd  -0x138(%rbp),%xmm2
ff
addsd  %xmm3,%xmm1
addsd  %xmm2,%xmm0
movsd  %xmm1,-0x160(%rbp)
ff
movsd  %xmm0,-0x158(%rbp)
ff
movsd  -0x100(%rbp),%xmm4
ff
movsd  -0xf8(%rbp),%xmm2
ff
movsd  -0x140(%rbp),%xmm1
ff
movsd  -0x138(%rbp),%xmm0
ff
subsd  %xmm1,%xmm4
movsd  %xmm4,-0x250(%rbp)
ff
subsd  %xmm0,%xmm2
movsd  %xmm2,-0x248(%rbp)
ff
xorps  %xmm0,%xmm0
mulsd  %xmm4,%xmm0
movsd  0x8ce(%rip),%xmm3
mulsd  %xmm2,%xmm3
xorps  %xmm1,%xmm1
mulsd  %xmm2,%xmm1
movsd  0x8bb(%rip),%xmm2
mulsd  %xmm4,%xmm2
subsd  %xmm3,%xmm0
movsd  %xmm0,-0x240(%rbp)
ff
addsd  %xmm2,%xmm1
movsd  %xmm1,-0x238(%rbp)
ff
ucomisd %xmm0,%xmm0
movsd  %xmm0,-0x230(%rbp)
ff
movsd  %xmm1,-0x228(%rbp)
ff
jnp    17d5 <fft8+0x6d5>
movsd  -0x238(%rbp),%xmm1
ff
movsd  -0x240(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm1
movsd  %xmm0,-0x230(%rbp)
ff
movsd  %xmm1,-0x228(%rbp)
ff
jnp    17d5 <fft8+0x6d5>
movsd  -0x248(%rbp),%xmm3
ff
movsd  -0x250(%rbp),%xmm2
ff
xorps  %xmm0,%xmm0
movsd  0x840(%rip),%xmm1
call   1af0 <__muldc3>
movsd  %xmm0,-0x230(%rbp)
ff
movsd  %xmm1,-0x228(%rbp)
ff
movsd  -0x230(%rbp),%xmm1
ff
movsd  -0x228(%rbp),%xmm0
ff
movsd  %xmm1,-0x170(%rbp)
ff
movsd  %xmm0,-0x168(%rbp)
ff
movsd  -0x110(%rbp),%xmm1
ff
movsd  -0x108(%rbp),%xmm0
ff
movsd  -0x150(%rbp),%xmm3
ff
movsd  -0x148(%rbp),%xmm2
ff
addsd  %xmm3,%xmm1
addsd  %xmm2,%xmm0
movsd  %xmm1,-0x180(%rbp)
ff
movsd  %xmm0,-0x178(%rbp)
ff
movsd  -0x110(%rbp),%xmm4
ff
movsd  -0x108(%rbp),%xmm2
ff
movsd  -0x150(%rbp),%xmm1
ff
movsd  -0x148(%rbp),%xmm0
ff
subsd  %xmm1,%xmm4
movsd  %xmm4,-0x280(%rbp)
ff
subsd  %xmm0,%xmm2
movsd  %xmm2,-0x278(%rbp)
ff
xorps  %xmm0,%xmm0
mulsd  %xmm4,%xmm0
movsd  0x78c(%rip),%xmm3
mulsd  %xmm2,%xmm3
xorps  %xmm1,%xmm1
mulsd  %xmm2,%xmm1
movsd  0x779(%rip),%xmm2
mulsd  %xmm4,%xmm2
subsd  %xmm3,%xmm0
movsd  %xmm0,-0x270(%rbp)
ff
addsd  %xmm2,%xmm1
movsd  %xmm1,-0x268(%rbp)
ff
ucomisd %xmm0,%xmm0
movsd  %xmm0,-0x260(%rbp)
ff
movsd  %xmm1,-0x258(%rbp)
ff
jnp    1917 <fft8+0x817>
movsd  -0x268(%rbp),%xmm1
ff
movsd  -0x270(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm1
movsd  %xmm0,-0x260(%rbp)
ff
movsd  %xmm1,-0x258(%rbp)
ff
jnp    1917 <fft8+0x817>
movsd  -0x278(%rbp),%xmm3
ff
movsd  -0x280(%rbp),%xmm2
ff
xorps  %xmm0,%xmm0
movsd  0x6fe(%rip),%xmm1
call   1af0 <__muldc3>
movsd  %xmm0,-0x260(%rbp)
ff
movsd  %xmm1,-0x258(%rbp)
ff
movsd  -0x260(%rbp),%xmm1
ff
movsd  -0x258(%rbp),%xmm0
ff
movsd  %xmm1,-0x190(%rbp)
ff
movsd  %xmm0,-0x188(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x160(%rbp),%xmm3
ff
movsd  -0x158(%rbp),%xmm2
ff
addsd  %xmm3,%xmm1
addsd  %xmm2,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,(%rax)
movsd  %xmm0,0x8(%rax)
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x160(%rbp),%xmm3
ff
movsd  -0x158(%rbp),%xmm2
ff
subsd  %xmm3,%xmm1
subsd  %xmm2,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x40(%rax)
movsd  %xmm0,0x48(%rax)
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  -0x180(%rbp),%xmm3
ff
movsd  -0x178(%rbp),%xmm2
ff
addsd  %xmm3,%xmm1
addsd  %xmm2,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x10(%rax)
movsd  %xmm0,0x18(%rax)
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  -0x180(%rbp),%xmm3
ff
movsd  -0x178(%rbp),%xmm2
ff
subsd  %xmm3,%xmm1
subsd  %xmm2,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x50(%rax)
movsd  %xmm0,0x58(%rax)
movsd  -0xa0(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x170(%rbp),%xmm3
ff
movsd  -0x168(%rbp),%xmm2
ff
addsd  %xmm3,%xmm1
addsd  %xmm2,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x20(%rax)
movsd  %xmm0,0x28(%rax)
movsd  -0xa0(%rbp),%xmm1
ff
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x170(%rbp),%xmm3
ff
movsd  -0x168(%rbp),%xmm2
ff
subsd  %xmm3,%xmm1
subsd  %xmm2,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x60(%rax)
movsd  %xmm0,0x68(%rax)
movsd  -0xd0(%rbp),%xmm1
ff
movsd  -0xc8(%rbp),%xmm0
ff
movsd  -0x190(%rbp),%xmm3
ff
movsd  -0x188(%rbp),%xmm2
ff
addsd  %xmm3,%xmm1
addsd  %xmm2,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x30(%rax)
movsd  %xmm0,0x38(%rax)
movsd  -0xd0(%rbp),%xmm1
ff
movsd  -0xc8(%rbp),%xmm0
ff
movsd  -0x190(%rbp),%xmm3
ff
movsd  -0x188(%rbp),%xmm2
ff
subsd  %xmm3,%xmm1
subsd  %xmm2,%xmm0
mov    -0x8(%rbp),%rax
movsd  %xmm1,0x70(%rax)
movsd  %xmm0,0x78(%rax)
add    $0x280,%rsp
pop    %rbp
ret
nop

x86 assembly (clang, -O2):
<fft8>:
push   %r14
push   %rbx
sub    $0x88,%rsp
mov    %rsi,%rbx
mov    %rdi,%r14
movupd (%rsi),%xmm12
movupd 0x20(%rsi),%xmm11
movupd 0x40(%rsi),%xmm10
movupd 0x60(%rsi),%xmm9
movapd %xmm11,%xmm2
subpd  %xmm9,%xmm2
xorpd  %xmm1,%xmm1
mulpd  %xmm2,%xmm1
movapd %xmm2,%xmm0
shufpd $0x1,%xmm2,%xmm0
movapd %xmm1,%xmm3
subpd  %xmm0,%xmm3
addpd  %xmm1,%xmm0
movapd %xmm0,%xmm8
movsd  %xmm3,%xmm8
ucomisd %xmm3,%xmm3
jp     1321 <fft8+0x221>
movupd 0x10(%rbx),%xmm14
movupd 0x50(%rbx),%xmm5
movapd %xmm14,%xmm2
subpd  %xmm5,%xmm2
movapd %xmm2,%xmm3
unpckhpd %xmm2,%xmm3
movsd  0xe82(%rip),%xmm0
movapd %xmm2,%xmm1
mulsd  %xmm0,%xmm1
mulsd  %xmm3,%xmm0
movapd %xmm1,%xmm4
subsd  %xmm0,%xmm4
addsd  %xmm1,%xmm0
ucomisd %xmm4,%xmm4
unpcklpd %xmm0,%xmm4
jp     138d <fft8+0x28d>
addpd  %xmm5,%xmm14
movupd 0x30(%rbx),%xmm2
movupd 0x70(%rbx),%xmm0
movapd %xmm2,%xmm13
addpd  %xmm0,%xmm13
subpd  %xmm0,%xmm2
movapd %xmm2,%xmm3
unpckhpd %xmm2,%xmm3
movsd  0xe2f(%rip),%xmm0
mulsd  %xmm3,%xmm0
movapd %xmm2,%xmm6
unpcklpd %xmm2,%xmm6
mulpd  0xe33(%rip),%xmm6
unpcklpd %xmm0,%xmm0
subpd  %xmm0,%xmm6
ucomisd %xmm6,%xmm6
jp     141b <fft8+0x31b>
movapd %xmm12,%xmm15
addpd  %xmm10,%xmm15
subpd  %xmm10,%xmm12
addpd  %xmm9,%xmm11
movapd %xmm14,%xmm2
subpd  %xmm13,%xmm2
xorpd  %xmm7,%xmm7
movapd %xmm2,%xmm1
mulpd  %xmm7,%xmm1
movapd %xmm2,%xmm0
shufpd $0x1,%xmm2,%xmm0
movapd %xmm1,%xmm3
subpd  %xmm0,%xmm3
addpd  %xmm1,%xmm0
movapd %xmm0,%xmm9
movsd  %xmm3,%xmm9
ucomisd %xmm3,%xmm3
jp     14bb <fft8+0x3bb>
movapd %xmm15,%xmm5
addpd  %xmm11,%xmm5
subpd  %xmm11,%xmm15
movapd %xmm12,%xmm3
addpd  %xmm8,%xmm3
subpd  %xmm8,%xmm12
addpd  %xmm13,%xmm14
movapd %xmm4,%xmm8
addpd  %xmm6,%xmm8
subpd  %xmm6,%xmm4
mulpd  %xmm4,%xmm7
movapd %xmm4,%xmm1
shufpd $0x1,%xmm4,%xmm1
movapd %xmm7,%xmm2
subpd  %xmm1,%xmm2
addpd  %xmm7,%xmm1
movapd %xmm1,%xmm0
movsd  %xmm2,%xmm0
ucomisd %xmm2,%xmm2
jp     155f <fft8+0x45f>
movapd %xmm5,%xmm1
addpd  %xmm14,%xmm1
movupd %xmm1,(%r14)
subpd  %xmm14,%xmm5
movupd %xmm5,0x40(%r14)
movapd %xmm3,%xmm1
addpd  %xmm8,%xmm1
movupd %xmm1,0x10(%r14)
subpd  %xmm8,%xmm3
movupd %xmm3,0x50(%r14)
movapd %xmm15,%xmm1
addpd  %xmm9,%xmm1
movupd %xmm1,0x20(%r14)
subpd  %xmm9,%xmm15
movupd %xmm15,0x60(%r14)
movapd %xmm12,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm1,0x30(%r14)
subpd  %xmm0,%xmm12
movupd %xmm12,0x70(%r14)
add    $0x88,%rsp
pop    %rbx
pop    %r14
ret
unpckhpd %xmm0,%xmm0
ucomisd %xmm0,%xmm0
jnp    1162 <fft8+0x62>
movapd %xmm2,%xmm3
unpckhpd %xmm2,%xmm3
movsd  0xcc1(%rip),%xmm1
xorpd  %xmm0,%xmm0
movapd %xmm12,0x30(%rsp)
movapd %xmm11,0x20(%rsp)
movapd %xmm9,0x10(%rsp)
movapd %xmm10,(%rsp)
call   15f0 <__muldc3>
movapd (%rsp),%xmm10
movapd 0x10(%rsp),%xmm9
movapd 0x20(%rsp),%xmm11
movapd 0x30(%rsp),%xmm12
movapd %xmm0,%xmm8
unpcklpd %xmm1,%xmm8
jmp    1162 <fft8+0x62>
unpcklpd %xmm0,%xmm0
unpckhpd %xmm0,%xmm0
ucomisd %xmm0,%xmm0
jnp    11ac <fft8+0xac>
movsd  0xc61(%rip),%xmm0
movapd %xmm0,%xmm1
movapd %xmm12,0x30(%rsp)
movapd %xmm14,0x60(%rsp)
movapd %xmm11,0x20(%rsp)
movapd %xmm8,0x50(%rsp)
movapd %xmm9,0x10(%rsp)
movapd %xmm10,(%rsp)
movapd %xmm5,0x40(%rsp)
call   15f0 <__muldc3>
movapd 0x40(%rsp),%xmm5
movapd (%rsp),%xmm10
movapd 0x10(%rsp),%xmm9
movapd 0x50(%rsp),%xmm8
movapd 0x20(%rsp),%xmm11
movapd 0x60(%rsp),%xmm14
movapd 0x30(%rsp),%xmm12
movapd %xmm0,%xmm4
unpcklpd %xmm1,%xmm4
jmp    11ac <fft8+0xac>
movapd %xmm6,%xmm0
unpckhpd %xmm6,%xmm0
ucomisd %xmm0,%xmm0
jnp    11ff <fft8+0xff>
movsd  0xbdb(%rip),%xmm0
movsd  0xbcb(%rip),%xmm1
movapd %xmm12,0x30(%rsp)
movapd %xmm14,0x60(%rsp)
movapd %xmm11,0x20(%rsp)
movapd %xmm8,0x50(%rsp)
movapd %xmm4,0x40(%rsp)
movapd %xmm9,0x10(%rsp)
movapd %xmm10,(%rsp)
movapd %xmm13,0x70(%rsp)
call   15f0 <__muldc3>
movapd 0x70(%rsp),%xmm13
movapd (%rsp),%xmm10
movapd 0x10(%rsp),%xmm9
movapd 0x40(%rsp),%xmm4
movapd 0x50(%rsp),%xmm8
movapd 0x20(%rsp),%xmm11
movapd 0x60(%rsp),%xmm14
movapd 0x30(%rsp),%xmm12
movapd %xmm0,%xmm6
unpcklpd %xmm1,%xmm6
jmp    11ff <fft8+0xff>
unpckhpd %xmm0,%xmm0
ucomisd %xmm0,%xmm0
jnp    1252 <fft8+0x152>
movapd %xmm2,%xmm3
unpckhpd %xmm2,%xmm3
movsd  0xb27(%rip),%xmm1
xorpd  %xmm0,%xmm0
movapd %xmm12,0x30(%rsp)
movapd %xmm14,0x60(%rsp)
movapd %xmm11,0x20(%rsp)
movapd %xmm8,0x50(%rsp)
movapd %xmm4,0x40(%rsp)
movapd %xmm15,0x10(%rsp)
movapd %xmm13,0x70(%rsp)
movapd %xmm6,(%rsp)
call   15f0 <__muldc3>
xorpd  %xmm7,%xmm7
movapd (%rsp),%xmm6
movapd 0x70(%rsp),%xmm13
movapd 0x10(%rsp),%xmm15
movapd 0x40(%rsp),%xmm4
movapd 0x50(%rsp),%xmm8
movapd 0x20(%rsp),%xmm11
movapd 0x60(%rsp),%xmm14
movapd 0x30(%rsp),%xmm12
movapd %xmm0,%xmm9
unpcklpd %xmm1,%xmm9
jmp    1252 <fft8+0x152>
unpckhpd %xmm1,%xmm1
ucomisd %xmm1,%xmm1
jnp    12ae <fft8+0x1ae>
movapd %xmm4,%xmm2
movapd %xmm3,0x50(%rsp)
movapd %xmm4,%xmm3
unpckhpd %xmm4,%xmm3
movsd  0xa79(%rip),%xmm1
xorpd  %xmm0,%xmm0
movapd %xmm12,0x30(%rsp)
movapd %xmm14,0x60(%rsp)
movapd %xmm15,0x10(%rsp)
movapd %xmm9,0x20(%rsp)
movapd %xmm5,(%rsp)
movapd %xmm8,0x40(%rsp)
call   15f0 <__muldc3>
movapd 0x40(%rsp),%xmm8
movapd (%rsp),%xmm5
movapd 0x50(%rsp),%xmm3
movapd 0x20(%rsp),%xmm9
movapd 0x10(%rsp),%xmm15
movapd 0x60(%rsp),%xmm14
movapd 0x30(%rsp),%xmm12
unpcklpd %xmm1,%xmm0
jmp    12ae <fft8+0x1ae>
nop

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

LLVM IR (-O2):
define void @fft8({ double, double }* nocapture writeonly %0, { double, double }* nocapture %1) {
%3 = bitcast { double, double }* %1 to <2 x double>*
%4 = load <2 x double>, <2 x double>* %3
%5 = getelementptr inbounds { double, double }, { double, double }* %1, i64 4, i32 0
%6 = bitcast double* %5 to <2 x double>*
%7 = load <2 x double>, <2 x double>* %6
%8 = fadd <2 x double> %4, %7
%9 = fsub <2 x double> %4, %7
%10 = getelementptr inbounds { double, double }, { double, double }* %1, i64 2, i32 0
%11 = bitcast double* %10 to <2 x double>*
%12 = load <2 x double>, <2 x double>* %11
%13 = getelementptr inbounds { double, double }, { double, double }* %1, i64 6, i32 0
%14 = bitcast double* %13 to <2 x double>*
%15 = load <2 x double>, <2 x double>* %14
%16 = fadd <2 x double> %12, %15
%17 = fadd <2 x double> %8, %16
%18 = fsub <2 x double> %8, %16
%19 = fsub <2 x double> %12, %15
%20 = fmul <2 x double> %19, zeroinitializer
%21 = extractelement <2 x double> %19, i64 1
%22 = extractelement <2 x double> %19, i64 0
%23 = shufflevector <2 x double> %19, <2 x double> undef, <2 x i32> <i32 1, i32 0>
%24 = fsub <2 x double> %20, %23
%25 = fadd <2 x double> %20, %23
%26 = shufflevector <2 x double> %24, <2 x double> %25, <2 x i32> <i32 0, i32 3>
%27 = extractelement <2 x double> %24, i64 0
%28 = fcmp uno double %27, 0.000000e+00
br i1 %28, label %29, label %38
29: ; preds = %2
%30 = extractelement <2 x double> %25, i64 1
%31 = fcmp uno double %30, 0.000000e+00
br i1 %31, label %32, label %38
32: ; preds = %29
%33 = tail call { double, double } @__muldc3(double 0.000000e+00, double 1.000000e+00, double %22, double %21)
%34 = extractvalue { double, double } %33, 0
%35 = extractvalue { double, double } %33, 1
%36 = insertelement <2 x double> poison, double %34, i64 0
%37 = insertelement <2 x double> %36, double %35, i64 1
br label %38
38: ; preds = %32, %29, %2
%39 = phi <2 x double> [ %26, %2 ], [ %26, %29 ], [ %37, %32 ]
%40 = fadd <2 x double> %9, %39
%41 = fsub <2 x double> %9, %39
%42 = getelementptr inbounds { double, double }, { double, double }* %1, i64 1, i32 0
%43 = bitcast double* %42 to <2 x double>*
%44 = load <2 x double>, <2 x double>* %43
%45 = getelementptr inbounds { double, double }, { double, double }* %1, i64 5, i32 0
%46 = bitcast double* %45 to <2 x double>*
%47 = load <2 x double>, <2 x double>* %46
%48 = fadd <2 x double> %44, %47
%49 = fsub <2 x double> %44, %47
%50 = extractelement <2 x double> %49, i64 0
%51 = fsub <2 x double> %44, %47
%52 = extractelement <2 x double> %51, i64 1
%53 = fmul double %50, 0x3FE6A09E667F3BCD
%54 = fmul double %52, 0x3FE6A09E667F3BCD
%55 = insertelement <2 x double> poison, double %53, i64 0
%56 = shufflevector <2 x double> %55, <2 x double> poison, <2 x i32> zeroinitializer
%57 = insertelement <2 x double> poison, double %54, i64 0
%58 = shufflevector <2 x double> %57, <2 x double> poison, <2 x i32> zeroinitializer
%59 = fsub <2 x double> %56, %58
%60 = fadd <2 x double> %56, %58
%61 = shufflevector <2 x double> %59, <2 x double> %60, <2 x i32> <i32 0, i32 3>
%62 = extractelement <2 x double> %59, i64 0
%63 = fcmp uno double %62, 0.000000e+00
br i1 %63, label %64, label %73
64: ; preds = %38
%65 = extractelement <2 x double> %60, i64 1
%66 = fcmp uno double %65, 0.000000e+00
br i1 %66, label %67, label %73
67: ; preds = %64
%68 = tail call { double, double } @__muldc3(double 0x3FE6A09E667F3BCD, double 0x3FE6A09E667F3BCD, double %50, double %52)
%69 = extractvalue { double, double } %68, 0
%70 = extractvalue { double, double } %68, 1
%71 = insertelement <2 x double> poison, double %69, i64 0
%72 = insertelement <2 x double> %71, double %70, i64 1
br label %73
73: ; preds = %67, %64, %38
%74 = phi <2 x double> [ %61, %38 ], [ %61, %64 ], [ %72, %67 ]
%75 = getelementptr inbounds { double, double }, { double, double }* %1, i64 3, i32 0
%76 = bitcast double* %75 to <2 x double>*
%77 = load <2 x double>, <2 x double>* %76
%78 = getelementptr inbounds { double, double }, { double, double }* %1, i64 7, i32 0
%79 = bitcast double* %78 to <2 x double>*
%80 = load <2 x double>, <2 x double>* %79
%81 = fadd <2 x double> %77, %80
%82 = fsub <2 x double> %77, %80
%83 = extractelement <2 x double> %82, i64 0
%84 = fsub <2 x double> %77, %80
%85 = extractelement <2 x double> %84, i64 1
%86 = fmul double %85, 0x3FE6A09E667F3BCD
%87 = shufflevector <2 x double> %82, <2 x double> undef, <2 x i32> zeroinitializer
%88 = fmul <2 x double> %87, <double 0xBFE6A09E667F3BCD, double 0x3FE6A09E667F3BCD>
%89 = insertelement <2 x double> poison, double %86, i64 0
%90 = shufflevector <2 x double> %89, <2 x double> poison, <2 x i32> zeroinitializer
%91 = fsub <2 x double> %88, %90
%92 = extractelement <2 x double> %91, i64 0
%93 = fcmp uno double %92, 0.000000e+00
br i1 %93, label %94, label %103
94: ; preds = %73
%95 = extractelement <2 x double> %91, i64 1
%96 = fcmp uno double %95, 0.000000e+00
br i1 %96, label %97, label %103
97: ; preds = %94
%98 = tail call { double, double } @__muldc3(double 0xBFE6A09E667F3BCD, double 0x3FE6A09E667F3BCD, double %83, double %85)
%99 = extractvalue { double, double } %98, 0
%100 = extractvalue { double, double } %98, 1
%101 = insertelement <2 x double> poison, double %99, i64 0
%102 = insertelement <2 x double> %101, double %100, i64 1
br label %103
103: ; preds = %97, %94, %73
%104 = phi <2 x double> [ %91, %73 ], [ %91, %94 ], [ %102, %97 ]
%105 = fadd <2 x double> %48, %81
%106 = fsub <2 x double> %48, %81
%107 = fmul <2 x double> %106, zeroinitializer
%108 = extractelement <2 x double> %106, i64 1
%109 = extractelement <2 x double> %106, i64 0
%110 = shufflevector <2 x double> %106, <2 x double> undef, <2 x i32> <i32 1, i32 0>
%111 = fsub <2 x double> %107, %110
%112 = fadd <2 x double> %107, %110
%113 = shufflevector <2 x double> %111, <2 x double> %112, <2 x i32> <i32 0, i32 3>
%114 = extractelement <2 x double> %111, i64 0
%115 = fcmp uno double %114, 0.000000e+00
br i1 %115, label %116, label %125
116: ; preds = %103
%117 = extractelement <2 x double> %112, i64 1
%118 = fcmp uno double %117, 0.000000e+00
br i1 %118, label %119, label %125
119: ; preds = %116
%120 = tail call { double, double } @__muldc3(double 0.000000e+00, double 1.000000e+00, double %109, double %108)
%121 = extractvalue { double, double } %120, 0
%122 = extractvalue { double, double } %120, 1
%123 = insertelement <2 x double> poison, double %121, i64 0
%124 = insertelement <2 x double> %123, double %122, i64 1
br label %125
125: ; preds = %119, %116, %103
%126 = phi <2 x double> [ %113, %103 ], [ %113, %116 ], [ %124, %119 ]
%127 = fadd <2 x double> %74, %104
%128 = fsub <2 x double> %74, %104
%129 = fmul <2 x double> %128, zeroinitializer
%130 = extractelement <2 x double> %128, i64 1
%131 = extractelement <2 x double> %128, i64 0
%132 = shufflevector <2 x double> %128, <2 x double> undef, <2 x i32> <i32 1, i32 0>
%133 = fsub <2 x double> %129, %132
%134 = fadd <2 x double> %129, %132
%135 = shufflevector <2 x double> %133, <2 x double> %134, <2 x i32> <i32 0, i32 3>
%136 = extractelement <2 x double> %133, i64 0
%137 = fcmp uno double %136, 0.000000e+00
br i1 %137, label %138, label %147
138: ; preds = %125
%139 = extractelement <2 x double> %134, i64 1
%140 = fcmp uno double %139, 0.000000e+00
br i1 %140, label %141, label %147
141: ; preds = %138
%142 = tail call { double, double } @__muldc3(double 0.000000e+00, double 1.000000e+00, double %131, double %130)
%143 = extractvalue { double, double } %142, 0
%144 = extractvalue { double, double } %142, 1
%145 = insertelement <2 x double> poison, double %143, i64 0
%146 = insertelement <2 x double> %145, double %144, i64 1
br label %147
147: ; preds = %141, %138, %125
%148 = phi <2 x double> [ %135, %125 ], [ %135, %138 ], [ %146, %141 ]
%149 = fadd <2 x double> %17, %105
%150 = bitcast { double, double }* %0 to <2 x double>*
store <2 x double> %149, <2 x double>* %150
%151 = fsub <2 x double> %17, %105
%152 = getelementptr inbounds { double, double }, { double, double }* %0, i64 4, i32 0
%153 = bitcast double* %152 to <2 x double>*
store <2 x double> %151, <2 x double>* %153
%154 = fadd <2 x double> %40, %127
%155 = getelementptr inbounds { double, double }, { double, double }* %0, i64 1, i32 0
%156 = bitcast double* %155 to <2 x double>*
store <2 x double> %154, <2 x double>* %156
%157 = fsub <2 x double> %40, %127
%158 = getelementptr inbounds { double, double }, { double, double }* %0, i64 5, i32 0
%159 = bitcast double* %158 to <2 x double>*
store <2 x double> %157, <2 x double>* %159
%160 = fadd <2 x double> %18, %126
%161 = getelementptr inbounds { double, double }, { double, double }* %0, i64 2, i32 0
%162 = bitcast double* %161 to <2 x double>*
store <2 x double> %160, <2 x double>* %162
%163 = fsub <2 x double> %18, %126
%164 = getelementptr inbounds { double, double }, { double, double }* %0, i64 6, i32 0
%165 = bitcast double* %164 to <2 x double>*
store <2 x double> %163, <2 x double>* %165
%166 = fadd <2 x double> %41, %148
%167 = getelementptr inbounds { double, double }, { double, double }* %0, i64 3, i32 0
%168 = bitcast double* %167 to <2 x double>*
store <2 x double> %166, <2 x double>* %168
%169 = fsub <2 x double> %41, %148
%170 = getelementptr inbounds { double, double }, { double, double }* %0, i64 7, i32 0
%171 = bitcast double* %170 to <2 x double>*
store <2 x double> %169, <2 x double>* %171
ret void
}