void FFT_5(int sofarRadix, int radix, int remainRadix, int groupOffset,
           double yRe[], double yIm[]) {
  int yIndx[5];
  int groupNo, blockNo, adr;
  double t1_re, t1_im, t2_re, t2_im, t3_re, t3_im;
  double t4_re, t4_im, t5_re, t5_im;
  double m2_re, m2_im, m3_re, m3_im, m4_re, m4_im;
  double m1_re, m1_im, m5_re, m5_im;
  double s1_re, s1_im, s2_re, s2_im, s3_re, s3_im;
  double s4_re, s4_im, s5_re, s5_im;
  double ar0, ar1, ar2, ar3, ar4;
  double ai0, ai1, ai2, ai3, ai4;
  adr = groupOffset;
  for (groupNo = 0; groupNo < remainRadix; groupNo++) {
    for (blockNo = 0; blockNo < radix; blockNo++) {
      yIndx[blockNo] = adr;
      adr = adr + sofarRadix;
    }
    ar0 = yRe[yIndx[0]];
    ai0 = yIm[yIndx[0]];
    ar1 = yRe[yIndx[1]];
    ai1 = yIm[yIndx[1]];
    ar2 = yRe[yIndx[2]];
    ai2 = yIm[yIndx[2]];
    ar3 = yRe[yIndx[3]];
    ai3 = yIm[yIndx[3]];
    ar4 = yRe[yIndx[4]];
    ai4 = yIm[yIndx[4]];
    t1_re = ar1 + ar4;
    t1_im = ai1 + ai4;
    t2_re = ar2 + ar3;
    t2_im = ai2 + ai3;
    t3_re = ar1 - ar4;
    t3_im = ai1 - ai4;
    t4_re = ar3 - ar2;
    t4_im = ai3 - ai2;
    t5_re = t1_re + t2_re;
    t5_im = t1_im + t2_im;
    ar0 = ar0 + t5_re;
    ai0 = ai0 + t5_im;
    m1_re = -1.25 * t5_re;
    m1_im = -1.25 * t5_im;
    m2_re = 0.5590169943749474241022934171 * (t1_re - t2_re);
    m2_im = 0.5590169943749474241022934171 * (t1_im - t2_im);
    m3_re = - -0.9510565162951535721164393334 * (t3_im + t4_im);
    m3_im = -0.9510565162951535721164393334 * (t3_re + t4_re);
    m4_re = - -1.538841768587626701285145288 * t4_im;
    m4_im = -1.538841768587626701285145288 * t4_re;
    m5_re = -0.3632712640026804429477333787 * t3_im;
    m5_im = 0.3632712640026804429477333787 * t3_re;
    s3_re = m3_re - m4_re;
    s3_im = m3_im - m4_im;
    s5_re = m3_re + m5_re;
    s5_im = m3_im + m5_im;
    s1_re = ar0 + m1_re;
    s1_im = ai0 + m1_im;
    s2_re = s1_re + m2_re;
    s2_im = s1_im + m2_im;
    s4_re = s1_re - m2_re;
    s4_im = s1_im - m2_im;
    yRe[yIndx[0]] = ar0;
    yIm[yIndx[0]] = ai0;
    yRe[yIndx[1]] = s2_re + s3_re;
    yIm[yIndx[1]] = s2_im + s3_im;
    yRe[yIndx[2]] = s4_re + s5_re;
    yIm[yIndx[2]] = s4_im + s5_im;
    yRe[yIndx[3]] = s4_re - s5_re;
    yIm[yIndx[3]] = s4_im - s5_im;
    yRe[yIndx[4]] = s2_re - s3_re;
    yIm[yIndx[4]] = s2_im - s3_im;
    groupOffset = groupOffset + sofarRadix * radix;
    adr = groupOffset;
  }
}


x86 assembly (clang, -O0):
<FFT_5>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
mov    %r8,-0x18(%rbp)
mov    %r9,-0x20(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    166e <FFT_5+0x56e>
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    116d <FFT_5+0x6d>
mov    -0x4c(%rbp),%ecx
movslq -0x48(%rbp),%rax
mov    %ecx,-0x40(%rbp,%rax,4)
mov    -0x4c(%rbp),%eax
add    -0x4(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    113f <FFT_5+0x3f>
mov    -0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
mov    -0x20(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
addsd  -0x168(%rbp),%xmm0
ff
movsd  %xmm0,-0x58(%rbp)
movsd  -0x178(%rbp),%xmm0
ff
addsd  -0x190(%rbp),%xmm0
ff
movsd  %xmm0,-0x60(%rbp)
movsd  -0x158(%rbp),%xmm0
ff
addsd  -0x160(%rbp),%xmm0
ff
movsd  %xmm0,-0x68(%rbp)
movsd  -0x180(%rbp),%xmm0
ff
addsd  -0x188(%rbp),%xmm0
ff
movsd  %xmm0,-0x70(%rbp)
movsd  -0x150(%rbp),%xmm0
ff
subsd  -0x168(%rbp),%xmm0
ff
movsd  %xmm0,-0x78(%rbp)
movsd  -0x178(%rbp),%xmm0
ff
subsd  -0x190(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0x160(%rbp),%xmm0
ff
subsd  -0x158(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x188(%rbp),%xmm0
ff
subsd  -0x180(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x60(%rbp),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x148(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
addsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x170(%rbp)
ff
movsd  0xcef(%rip),%xmm0
mulsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  0xcd7(%rip),%xmm0
mulsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x58(%rbp),%xmm1
subsd  -0x68(%rbp),%xmm1
movsd  0xcad(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x60(%rbp),%xmm1
subsd  -0x70(%rbp),%xmm1
movsd  0xc8f(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x80(%rbp),%xmm1
addsd  -0x90(%rbp),%xmm1
ff
movsd  0xc66(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x78(%rbp),%xmm1
addsd  -0x88(%rbp),%xmm1
ff
movsd  0xc3d(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xc21(%rip),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0xc01(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  0xbe1(%rip),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  0xbc4(%rip),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
subsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
subsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
addsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x138(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
addsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x140(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
addsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
addsd  -0xb0(%rbp),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xf8(%rbp),%xmm0
ff
subsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
subsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x170(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x108(%rbp),%xmm0
ff
addsd  -0x118(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x110(%rbp),%xmm0
ff
addsd  -0x120(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x128(%rbp),%xmm0
ff
addsd  -0x138(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x130(%rbp),%xmm0
ff
addsd  -0x140(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x128(%rbp),%xmm0
ff
subsd  -0x138(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x130(%rbp),%xmm0
ff
subsd  -0x140(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x108(%rbp),%xmm0
ff
subsd  -0x118(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x110(%rbp),%xmm0
ff
subsd  -0x120(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%eax
mov    -0x4(%rbp),%ecx
imul   -0x8(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    112c <FFT_5+0x2c>
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<FFT_5>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %esi,-0x6c(%rsp)
mov    %edx,-0x4c(%rsp)
test   %edx,%edx
jle    14b4 <FFT_5+0x3b4>
mov    -0x6c(%rsp),%eax
mov    %eax,%edx
imul   %edi,%edx
mov    %edx,-0x50(%rsp)
mov    %eax,%eax
mov    %eax,%edx
and    $0xfffffff8,%edx
lea    -0x8(%rdx),%rsi
mov    %rsi,-0x20(%rsp)
shr    $0x3,%rsi
add    $0x1,%rsi
mov    %rdx,-0x40(%rsp)
imul   %edi,%edx
mov    %rdx,-0x38(%rsp)
movd   %edi,%xmm0
pshufd $0x0,%xmm0,%xmm0
movdqa 0xea3(%rip),%xmm1
pmuludq %xmm0,%xmm1
pshufd $0xe8,%xmm1,%xmm1
movdqa 0xea2(%rip),%xmm2
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm1,%xmm2
movdqa %xmm2,-0x18(%rsp)
pslld  $0x2,%xmm0
mov    %esi,%ebp
and    $0x3,%ebp
and    $0xfffffffffffffffc,%rsi
mov    %rsi,-0x30(%rsp)
mov    %rbp,-0x28(%rsp)
shl    $0x5,%rbp
xor    %r13d,%r13d
movsd  0xe77(%rip),%xmm11
movsd  0xe76(%rip),%xmm12
movsd  0xe85(%rip),%xmm13
movsd  0xe84(%rip),%xmm14
jmp    13a1 <FFT_5+0x2a1>
nopl   0x0(%rax)
mov    -0x68(%rsp),%edx
mov    %edx,-0x48(%rsp)
mov    -0x64(%rsp),%edx
mov    %edx,-0x44(%rsp)
mov    -0x60(%rsp),%r12d
mov    -0x5c(%rsp),%r14d
mov    -0x58(%rsp),%r15d
movslq -0x48(%rsp),%rbx
movslq -0x44(%rsp),%rsi
movsd  (%r8,%rsi,8),%xmm2
movsd  (%r9,%rsi,8),%xmm3
movslq %r12d,%r11
movsd  (%r8,%r11,8),%xmm10
movsd  (%r9,%r11,8),%xmm9
movslq %r14d,%rdx
movsd  (%r8,%rdx,8),%xmm1
movsd  (%r9,%rdx,8),%xmm8
movslq %r15d,%r10
movsd  (%r8,%r10,8),%xmm7
movsd  (%r9,%r10,8),%xmm6
movapd %xmm2,%xmm4
addsd  %xmm7,%xmm4
movapd %xmm3,%xmm5
addsd  %xmm6,%xmm5
subsd  %xmm7,%xmm2
movapd %xmm10,%xmm15
addsd  %xmm1,%xmm15
subsd  %xmm6,%xmm3
movapd %xmm9,%xmm6
addsd  %xmm8,%xmm6
subsd  %xmm10,%xmm1
subsd  %xmm9,%xmm8
movapd %xmm15,%xmm10
addsd  %xmm4,%xmm10
movapd %xmm6,%xmm7
addsd  %xmm5,%xmm7
subsd  %xmm15,%xmm4
subsd  %xmm6,%xmm5
movapd %xmm8,%xmm15
addsd  %xmm3,%xmm15
mulsd  0xd9a(%rip),%xmm15
mulsd  %xmm13,%xmm8
movapd %xmm15,%xmm9
subsd  %xmm8,%xmm9
movsd  (%r8,%rbx,8),%xmm8
addsd  %xmm10,%xmm8
mulsd  %xmm14,%xmm3
subsd  %xmm3,%xmm15
movapd %xmm1,%xmm3
addsd  %xmm2,%xmm3
mulsd  0xd6e(%rip),%xmm3
mulsd  %xmm13,%xmm1
mulsd  %xmm14,%xmm2
addsd  %xmm3,%xmm1
addsd  %xmm3,%xmm2
movsd  (%r9,%rbx,8),%xmm3
addsd  %xmm7,%xmm3
movsd  %xmm8,(%r8,%rbx,8)
movsd  %xmm3,(%r9,%rbx,8)
mulsd  %xmm11,%xmm10
mulsd  %xmm11,%xmm7
mulsd  %xmm12,%xmm4
mulsd  %xmm12,%xmm5
subsd  %xmm10,%xmm8
subsd  %xmm7,%xmm3
movapd %xmm4,%xmm7
addsd  %xmm8,%xmm7
movapd %xmm5,%xmm6
addsd  %xmm3,%xmm6
subsd  %xmm4,%xmm8
movapd %xmm7,%xmm4
addsd  %xmm9,%xmm4
movsd  %xmm4,(%r8,%rsi,8)
movapd %xmm1,%xmm4
addsd  %xmm6,%xmm4
movsd  %xmm4,(%r9,%rsi,8)
subsd  %xmm5,%xmm3
movapd %xmm8,%xmm4
addsd  %xmm15,%xmm4
movsd  %xmm4,(%r8,%r11,8)
movapd %xmm2,%xmm4
addsd  %xmm3,%xmm4
movsd  %xmm4,(%r9,%r11,8)
subsd  %xmm15,%xmm8
movsd  %xmm8,(%r8,%rdx,8)
subsd  %xmm2,%xmm3
movsd  %xmm3,(%r9,%rdx,8)
subsd  %xmm9,%xmm7
movsd  %xmm7,(%r8,%r10,8)
subsd  %xmm1,%xmm6
movsd  %xmm6,(%r9,%r10,8)
add    -0x50(%rsp),%ecx
add    $0x1,%r13d
cmp    -0x4c(%rsp),%r13d
je     14b4 <FFT_5+0x3b4>
cmpl   $0x0,-0x6c(%rsp)
jle    11ef <FFT_5+0xef>
cmpl   $0x8,-0x6c(%rsp)
jae    13c0 <FFT_5+0x2c0>
xor    %edx,%edx
mov    %ecx,%esi
jmp    14a0 <FFT_5+0x3a0>
nopl   0x0(%rax)
movd   %ecx,%xmm1
pshufd $0x0,%xmm1,%xmm1
paddd  -0x18(%rsp),%xmm1
cmpq   $0x18,-0x20(%rsp)
jae    13db <FFT_5+0x2db>
xor    %edx,%edx
jmp    144a <FFT_5+0x34a>
mov    -0x30(%rsp),%rsi
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqa %xmm1,-0x68(%rsp,%rdx,4)
paddd  %xmm0,%xmm1
movdqa %xmm1,-0x58(%rsp,%rdx,4)
paddd  %xmm0,%xmm1
movdqa %xmm1,-0x48(%rsp,%rdx,4)
paddd  %xmm0,%xmm1
movdqa %xmm1,-0x38(%rsp,%rdx,4)
paddd  %xmm0,%xmm1
movdqa %xmm1,-0x28(%rsp,%rdx,4)
paddd  %xmm0,%xmm1
movdqa %xmm1,-0x18(%rsp,%rdx,4)
paddd  %xmm0,%xmm1
movdqa %xmm1,-0x8(%rsp,%rdx,4)
paddd  %xmm0,%xmm1
movdqa %xmm1,0x8(%rsp,%rdx,4)
add    $0x20,%rdx
paddd  %xmm0,%xmm1
add    $0xfffffffffffffffc,%rsi
jne    13f0 <FFT_5+0x2f0>
cmpq   $0x0,-0x28(%rsp)
je     147c <FFT_5+0x37c>
lea    -0x58(%rsp),%rsi
lea    (%rsi,%rdx,4),%rdx
xor    %esi,%esi
nopl   (%rax)
movdqa %xmm1,-0x10(%rdx,%rsi,1)
paddd  %xmm0,%xmm1
movdqa %xmm1,(%rdx,%rsi,1)
paddd  %xmm0,%xmm1
add    $0x20,%rsi
cmp    %rsi,%rbp
jne    1460 <FFT_5+0x360>
cmp    %rax,-0x40(%rsp)
je     11d0 <FFT_5+0xd0>
mov    -0x38(%rsp),%rdx
lea    (%rcx,%rdx,1),%esi
mov    -0x40(%rsp),%rdx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %esi,-0x68(%rsp,%rdx,4)
add    %edi,%esi
add    $0x1,%rdx
cmp    %rdx,%rax
jne    14a0 <FFT_5+0x3a0>
jmp    11d0 <FFT_5+0xd0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @FFT_5(i32 %0, i32 %1, i32 %2, i32 %3, double* %4, double* %5) {
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca double*
%12 = alloca double*
%13 = alloca [5 x i32]
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double
%29 = alloca double
%30 = alloca double
%31 = alloca double
%32 = alloca double
%33 = alloca double
%34 = alloca double
%35 = alloca double
%36 = alloca double
%37 = alloca double
%38 = alloca double
%39 = alloca double
%40 = alloca double
%41 = alloca double
%42 = alloca double
%43 = alloca double
%44 = alloca double
%45 = alloca double
%46 = alloca double
%47 = alloca double
%48 = alloca double
%49 = alloca double
%50 = alloca double
%51 = alloca double
%52 = alloca double
%53 = alloca double
%54 = alloca double
%55 = alloca double
%56 = alloca double
store i32 %0, i32* %7
store i32 %1, i32* %8
store i32 %2, i32* %9
store i32 %3, i32* %10
store double* %4, double** %11
store double* %5, double** %12
%57 = load i32, i32* %10
store i32 %57, i32* %16
store i32 0, i32* %14
br label %58
58: ; preds = %315, %6
%59 = load i32, i32* %14
%60 = load i32, i32* %9
%61 = icmp slt i32 %59, %60
br i1 %61, label %62, label %318
62: ; preds = %58
store i32 0, i32* %15
br label %63
63: ; preds = %75, %62
%64 = load i32, i32* %15
%65 = load i32, i32* %8
%66 = icmp slt i32 %64, %65
br i1 %66, label %67, label %78
67: ; preds = %63
%68 = load i32, i32* %16
%69 = load i32, i32* %15
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 %70
store i32 %68, i32* %71
%72 = load i32, i32* %16
%73 = load i32, i32* %7
%74 = add nsw i32 %72, %73
store i32 %74, i32* %16
br label %75
75: ; preds = %67
%76 = load i32, i32* %15
%77 = add nsw i32 %76, 1
store i32 %77, i32* %15
br label %63
78: ; preds = %63
%79 = load double*, double** %11
%80 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 0
%81 = load i32, i32* %80
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds double, double* %79, i64 %82
%84 = load double, double* %83
store double %84, double* %47
%85 = load double*, double** %12
%86 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 0
%87 = load i32, i32* %86
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds double, double* %85, i64 %88
%90 = load double, double* %89
store double %90, double* %52
%91 = load double*, double** %11
%92 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 1
%93 = load i32, i32* %92
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds double, double* %91, i64 %94
%96 = load double, double* %95
store double %96, double* %48
%97 = load double*, double** %12
%98 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 1
%99 = load i32, i32* %98
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds double, double* %97, i64 %100
%102 = load double, double* %101
store double %102, double* %53
%103 = load double*, double** %11
%104 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 2
%105 = load i32, i32* %104
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds double, double* %103, i64 %106
%108 = load double, double* %107
store double %108, double* %49
%109 = load double*, double** %12
%110 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 2
%111 = load i32, i32* %110
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds double, double* %109, i64 %112
%114 = load double, double* %113
store double %114, double* %54
%115 = load double*, double** %11
%116 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 3
%117 = load i32, i32* %116
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds double, double* %115, i64 %118
%120 = load double, double* %119
store double %120, double* %50
%121 = load double*, double** %12
%122 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 3
%123 = load i32, i32* %122
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds double, double* %121, i64 %124
%126 = load double, double* %125
store double %126, double* %55
%127 = load double*, double** %11
%128 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 4
%129 = load i32, i32* %128
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds double, double* %127, i64 %130
%132 = load double, double* %131
store double %132, double* %51
%133 = load double*, double** %12
%134 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 4
%135 = load i32, i32* %134
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds double, double* %133, i64 %136
%138 = load double, double* %137
store double %138, double* %56
%139 = load double, double* %48
%140 = load double, double* %51
%141 = fadd double %139, %140
store double %141, double* %17
%142 = load double, double* %53
%143 = load double, double* %56
%144 = fadd double %142, %143
store double %144, double* %18
%145 = load double, double* %49
%146 = load double, double* %50
%147 = fadd double %145, %146
store double %147, double* %19
%148 = load double, double* %54
%149 = load double, double* %55
%150 = fadd double %148, %149
store double %150, double* %20
%151 = load double, double* %48
%152 = load double, double* %51
%153 = fsub double %151, %152
store double %153, double* %21
%154 = load double, double* %53
%155 = load double, double* %56
%156 = fsub double %154, %155
store double %156, double* %22
%157 = load double, double* %50
%158 = load double, double* %49
%159 = fsub double %157, %158
store double %159, double* %23
%160 = load double, double* %55
%161 = load double, double* %54
%162 = fsub double %160, %161
store double %162, double* %24
%163 = load double, double* %17
%164 = load double, double* %19
%165 = fadd double %163, %164
store double %165, double* %25
%166 = load double, double* %18
%167 = load double, double* %20
%168 = fadd double %166, %167
store double %168, double* %26
%169 = load double, double* %47
%170 = load double, double* %25
%171 = fadd double %169, %170
store double %171, double* %47
%172 = load double, double* %52
%173 = load double, double* %26
%174 = fadd double %172, %173
store double %174, double* %52
%175 = load double, double* %25
%176 = fmul double -1.250000e+00, %175
store double %176, double* %33
%177 = load double, double* %26
%178 = fmul double -1.250000e+00, %177
store double %178, double* %34
%179 = load double, double* %17
%180 = load double, double* %19
%181 = fsub double %179, %180
%182 = fmul double 0x3FE1E3779B97F4A8, %181
store double %182, double* %27
%183 = load double, double* %18
%184 = load double, double* %20
%185 = fsub double %183, %184
%186 = fmul double 0x3FE1E3779B97F4A8, %185
store double %186, double* %28
%187 = load double, double* %22
%188 = load double, double* %24
%189 = fadd double %187, %188
%190 = fmul double 0x3FEE6F0E134454FF, %189
store double %190, double* %29
%191 = load double, double* %21
%192 = load double, double* %23
%193 = fadd double %191, %192
%194 = fmul double 0xBFEE6F0E134454FF, %193
store double %194, double* %30
%195 = load double, double* %24
%196 = fmul double 0x3FF89F188BDCD7AF, %195
store double %196, double* %31
%197 = load double, double* %23
%198 = fmul double 0xBFF89F188BDCD7AF, %197
store double %198, double* %32
%199 = load double, double* %22
%200 = fmul double 0xBFD73FD61D9DF543, %199
store double %200, double* %35
%201 = load double, double* %21
%202 = fmul double 0x3FD73FD61D9DF543, %201
store double %202, double* %36
%203 = load double, double* %29
%204 = load double, double* %31
%205 = fsub double %203, %204
store double %205, double* %41
%206 = load double, double* %30
%207 = load double, double* %32
%208 = fsub double %206, %207
store double %208, double* %42
%209 = load double, double* %29
%210 = load double, double* %35
%211 = fadd double %209, %210
store double %211, double* %45
%212 = load double, double* %30
%213 = load double, double* %36
%214 = fadd double %212, %213
store double %214, double* %46
%215 = load double, double* %47
%216 = load double, double* %33
%217 = fadd double %215, %216
store double %217, double* %37
%218 = load double, double* %52
%219 = load double, double* %34
%220 = fadd double %218, %219
store double %220, double* %38
%221 = load double, double* %37
%222 = load double, double* %27
%223 = fadd double %221, %222
store double %223, double* %39
%224 = load double, double* %38
%225 = load double, double* %28
%226 = fadd double %224, %225
store double %226, double* %40
%227 = load double, double* %37
%228 = load double, double* %27
%229 = fsub double %227, %228
store double %229, double* %43
%230 = load double, double* %38
%231 = load double, double* %28
%232 = fsub double %230, %231
store double %232, double* %44
%233 = load double, double* %47
%234 = load double*, double** %11
%235 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 0
%236 = load i32, i32* %235
%237 = sext i32 %236 to i64
%238 = getelementptr inbounds double, double* %234, i64 %237
store double %233, double* %238
%239 = load double, double* %52
%240 = load double*, double** %12
%241 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 0
%242 = load i32, i32* %241
%243 = sext i32 %242 to i64
%244 = getelementptr inbounds double, double* %240, i64 %243
store double %239, double* %244
%245 = load double, double* %39
%246 = load double, double* %41
%247 = fadd double %245, %246
%248 = load double*, double** %11
%249 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 1
%250 = load i32, i32* %249
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds double, double* %248, i64 %251
store double %247, double* %252
%253 = load double, double* %40
%254 = load double, double* %42
%255 = fadd double %253, %254
%256 = load double*, double** %12
%257 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 1
%258 = load i32, i32* %257
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds double, double* %256, i64 %259
store double %255, double* %260
%261 = load double, double* %43
%262 = load double, double* %45
%263 = fadd double %261, %262
%264 = load double*, double** %11
%265 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 2
%266 = load i32, i32* %265
%267 = sext i32 %266 to i64
%268 = getelementptr inbounds double, double* %264, i64 %267
store double %263, double* %268
%269 = load double, double* %44
%270 = load double, double* %46
%271 = fadd double %269, %270
%272 = load double*, double** %12
%273 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 2
%274 = load i32, i32* %273
%275 = sext i32 %274 to i64
%276 = getelementptr inbounds double, double* %272, i64 %275
store double %271, double* %276
%277 = load double, double* %43
%278 = load double, double* %45
%279 = fsub double %277, %278
%280 = load double*, double** %11
%281 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 3
%282 = load i32, i32* %281
%283 = sext i32 %282 to i64
%284 = getelementptr inbounds double, double* %280, i64 %283
store double %279, double* %284
%285 = load double, double* %44
%286 = load double, double* %46
%287 = fsub double %285, %286
%288 = load double*, double** %12
%289 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 3
%290 = load i32, i32* %289
%291 = sext i32 %290 to i64
%292 = getelementptr inbounds double, double* %288, i64 %291
store double %287, double* %292
%293 = load double, double* %39
%294 = load double, double* %41
%295 = fsub double %293, %294
%296 = load double*, double** %11
%297 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 4
%298 = load i32, i32* %297
%299 = sext i32 %298 to i64
%300 = getelementptr inbounds double, double* %296, i64 %299
store double %295, double* %300
%301 = load double, double* %40
%302 = load double, double* %42
%303 = fsub double %301, %302
%304 = load double*, double** %12
%305 = getelementptr inbounds [5 x i32], [5 x i32]* %13, i64 0, i64 4
%306 = load i32, i32* %305
%307 = sext i32 %306 to i64
%308 = getelementptr inbounds double, double* %304, i64 %307
store double %303, double* %308
%309 = load i32, i32* %10
%310 = load i32, i32* %7
%311 = load i32, i32* %8
%312 = mul nsw i32 %310, %311
%313 = add nsw i32 %309, %312
store i32 %313, i32* %10
%314 = load i32, i32* %10
store i32 %314, i32* %16
br label %315
315: ; preds = %78
%316 = load i32, i32* %14
%317 = add nsw i32 %316, 1
store i32 %317, i32* %14
br label %58
318: ; preds = %58
ret void
}

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