void rsfft(float *x, int n, int m) {
  int n1, n2, n4, n8, i0, i1, i2, i3, i4, i5, i6, i7, i8, is, id, i, j, k;
  float xt, t1, t2, t3, t4, t5, t6;
  double e, a, a3, r1, cc1, cc3, ss1, ss3;
  j = 0;
  n1 = n - 1;
  for (i = 0; i < n1; i++) {
    if (i < j) {
      xt = x[j];
      x[j] = x[i];
      x[i] = xt;
    }
    k = n / 2;
    while (k <= j) {
      j -= k;
      k /= 2;
    }
    j += k;
  }
  is = 0;
  id = 4;
  while (is < n - 1) {
    for (i0 = is; i0 < n; i0 += id) {
      i1 = i0 + 1;
      r1 = x[i0];
      x[i0] = r1 + x[i1];
      x[i1] = r1 - x[i1];
    }
    is = 2 * (id - 1);
    id = 4 * id;
  }
  n2 = 2;
  for (k = 1; k < m; k++) {
    n2 = n2 * 2;
    n4 = n2 / 4;
    n8 = n2 / 8;
    e = 6.283185307179586 / n2;
    is = 0;
    id = 2 * n2;
    while (is < n) {
      for (i = is; i < n; i += id) {
        i1 = i;
        i2 = i1 + n4;
        i3 = i2 + n4;
        i4 = i3 + n4;
        t1 = x[i4] + x[i3];
        x[i4] = x[i4] - x[i3];
        x[i3] = x[i1] - t1;
        x[i1] = x[i1] + t1;
        if (n4 > 1) {
          i1 = i1 + n8;
          i2 = i2 + n8;
          i3 = i3 + n8;
          i4 = i4 + n8;
          t1 = (x[i3] + x[i4]) / sqrt(2.0);
          t2 = (x[i3] - x[i4]) / sqrt(2.0);
          x[i4] = x[i2] - t1;
          x[i3] = -x[i2] - t1;
          x[i2] = x[i1] - t2;
          x[i1] = x[i1] + t2;
        }
      }
      is = 2 * id - n2;
      id = 4 * id;
    }
    a = e;
    for (j = 1; j < n8; j++) {
      a3 = 3 * a;
      cc1 = cos(a);
      ss1 = sin(a);
      cc3 = cos(a3);
      ss3 = sin(a3);
      a = (j + 1) * e;
      is = 0;
      id = 2 * n2;
      while (is < n) {
        for (i = is; i < n; i += id) {
          i1 = i + j;
          i2 = i1 + n4;
          i3 = i2 + n4;
          i4 = i3 + n4;
          i5 = i + n4 - j;
          i6 = i5 + n4;
          i7 = i6 + n4;
          i8 = i7 + n4;
          t1 = x[i3] * cc1 + x[i7] * ss1;
          t2 = x[i7] * cc1 - x[i3] * ss1;
          t3 = x[i4] * cc3 + x[i8] * ss3;
          t4 = x[i8] * cc3 - x[i4] * ss3;
          t5 = t1 + t3;
          t6 = t2 + t4;
          t3 = t1 - t3;
          t4 = t2 - t4;
          t2 = x[i6] + t6;
          x[i3] = t6 - x[i6];
          x[i8] = t2;
          t2 = x[i2] - t3;
          x[i7] = -x[i2] - t3;
          x[i4] = t2;
          t1 = x[i1] + t5;
          x[i6] = x[i1] - t5;
          x[i1] = t1;
          t1 = x[i5] + t4;
          x[i5] = x[i5] - t4;
          x[i2] = t1;
        }
        is = 2 * id - n2;
        id = 4 * id;
      }
    }
  }
}


x86 assembly (clang, -O0):
<rsfft>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x14(%rbp)
movl   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1201 <rsfft+0xd1>
mov    -0x50(%rbp),%eax
cmp    -0x54(%rbp),%eax
jge    11b2 <rsfft+0x82>
mov    -0x8(%rbp),%rax
movslq -0x54(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x5c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x54(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x5c(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x50(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x54(%rbp),%eax
jg     11ea <rsfft+0xba>
mov    -0x58(%rbp),%ecx
mov    -0x54(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x54(%rbp)
mov    -0x58(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x58(%rbp)
jmp    11c0 <rsfft+0x90>
mov    -0x58(%rbp),%eax
add    -0x54(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    115c <rsfft+0x2c>
movl   $0x0,-0x48(%rbp)
movl   $0x4,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12d8 <rsfft+0x1a8>
mov    -0x48(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    12be <rsfft+0x18e>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x4c(%rbp),%eax
add    -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
jmp    1226 <rsfft+0xf6>
mov    -0x4c(%rbp),%eax
sub    $0x1,%eax
shl    $0x1,%eax
mov    %eax,-0x48(%rbp)
mov    -0x4c(%rbp),%eax
shl    $0x2,%eax
mov    %eax,-0x4c(%rbp)
jmp    120f <rsfft+0xdf>
movl   $0x2,-0x18(%rbp)
movl   $0x1,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1987 <rsfft+0x857>
mov    -0x18(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
mov    %eax,-0x20(%rbp)
cvtsi2sdl -0x18(%rbp),%xmm1
movsd  0xcdc(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x18(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    157a <rsfft+0x44a>
mov    -0x48(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1560 <rsfft+0x430>
mov    -0x50(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
cmpl   $0x1,-0x1c(%rbp)
jle    154d <rsfft+0x41d>
mov    -0x28(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  0xbb4(%rip),%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xc8(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  0xb69(%rip),%xmm0
call   1050 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  -0xc0(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
subss  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x64(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x64(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    1552 <rsfft+0x422>
mov    -0x4c(%rbp),%eax
add    -0x50(%rbp),%eax
mov    %eax,-0x50(%rbp)
jmp    134f <rsfft+0x21f>
mov    -0x4c(%rbp),%eax
shl    $0x1,%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x4c(%rbp),%eax
shl    $0x2,%eax
mov    %eax,-0x4c(%rbp)
jmp    133d <rsfft+0x20d>
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movl   $0x1,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    1974 <rsfft+0x844>
movsd  0xa66(%rip),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1040 <cos@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
call   1030 <sin@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
call   1040 <cos@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
call   1030 <sin@plt>
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x54(%rbp),%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movl   $0x0,-0x48(%rbp)
mov    -0x18(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1961 <rsfft+0x831>
mov    -0x48(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1947 <rsfft+0x817>
mov    -0x50(%rbp),%eax
add    -0x54(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x50(%rbp),%eax
add    -0x1c(%rbp),%eax
sub    -0x54(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  -0xb0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x68(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  -0xb8(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x60(%rbp),%xmm0
addss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x64(%rbp),%xmm0
addss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x60(%rbp),%xmm0
subss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x64(%rbp),%xmm0
subss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x74(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x74(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x64(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x68(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
subss  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x64(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x70(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x6c(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x60(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x4c(%rbp),%eax
add    -0x50(%rbp),%eax
mov    %eax,-0x50(%rbp)
jmp    163f <rsfft+0x50f>
mov    -0x4c(%rbp),%eax
shl    $0x1,%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x4c(%rbp),%eax
shl    $0x2,%eax
mov    %eax,-0x4c(%rbp)
jmp    162d <rsfft+0x4fd>
jmp    1966 <rsfft+0x836>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    158e <rsfft+0x45e>
jmp    1979 <rsfft+0x849>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    12e6 <rsfft+0x1b6>
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rsfft>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %edx,(%rsp)
mov    %rdi,%rbp
cmp    $0x2,%esi
jl     11fd <rsfft+0xdd>
lea    -0x1(%rsi),%r8d
mov    %r8d,%r9d
xor    %edx,%edx
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
movslq %edi,%rax
cmp    %rax,%rdx
jge    1170 <rsfft+0x50>
movss  0x0(%rbp,%rax,4),%xmm0
movss  0x0(%rbp,%rdx,4),%xmm1
movss  %xmm1,0x0(%rbp,%rax,4)
movss  %xmm0,0x0(%rbp,%rdx,4)
mov    %esi,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %edi,%ecx
mov    %eax,%ebx
shr    $0x1f,%ebx
add    %ebx,%eax
sar    %eax
sub    %eax,%edi
jge    1180 <rsfft+0x60>
add    %eax,%ecx
add    $0x1,%rdx
mov    %ecx,%edi
cmp    %r9,%rdx
jne    1150 <rsfft+0x30>
cmp    $0x2,%esi
jl     11fd <rsfft+0xdd>
mov    %esi,%ecx
mov    $0x4,%edx
xor    %eax,%eax
jmp    11be <rsfft+0x9e>
nopl   0x0(%rax)
lea    (%rdx,%rdx,1),%eax
add    $0xfffffffe,%eax
shl    $0x2,%edx
cmp    %r8d,%eax
jge    11fd <rsfft+0xdd>
cmp    %esi,%eax
jge    11b0 <rsfft+0x90>
cltq
movslq %edx,%rdi
nopw   0x0(%rax,%rax,1)
movss  0x0(%rbp,%rax,4),%xmm0
movss  0x4(%rbp,%rax,4),%xmm1
movaps %xmm0,%xmm2
addss  %xmm1,%xmm2
movss  %xmm2,0x0(%rbp,%rax,4)
subss  %xmm1,%xmm0
movss  %xmm0,0x4(%rbp,%rax,4)
add    %rdi,%rax
cmp    %rcx,%rax
jl     11d0 <rsfft+0xb0>
jmp    11b0 <rsfft+0x90>
cmpl   $0x2,(%rsp)
jl     170e <rsfft+0x5ee>
movslq %esi,%rax
mov    %rax,0x38(%rsp)
lea    0x4(%rbp),%rax
mov    %rax,0x50(%rsp)
mov    $0x1,%eax
movsd  0xde3(%rip),%xmm3
movaps 0xdf3(%rip),%xmm9
mov    $0x2,%r14d
mov    %rsi,0x18(%rsp)
jmp    1264 <rsfft+0x144>
nopw   0x0(%rax,%rax,1)
mov    0x34(%rsp),%eax
add    $0x1,%eax
mov    0x4(%rsp),%ecx
mov    %ecx,%r14d
cmp    (%rsp),%eax
mov    0x18(%rsp),%rsi
movsd  0xdaa(%rip),%xmm3
je     170e <rsfft+0x5ee>
mov    %eax,0x34(%rsp)
mov    %r14d,%eax
shr    $0x1f,%eax
add    %r14d,%eax
sar    %eax
lea    0x3(%r14),%r15d
test   %r14d,%r14d
cmovns %r14d,%r15d
sar    $0x2,%r15d
lea    0x0(,%r14,4),%ecx
mov    %ecx,0x8(%rsp)
movslq %eax,%r8
test   %esi,%esi
jle    13f0 <rsfft+0x2d0>
mov    %rsi,%rbx
movslq %r15d,%rax
lea    0x0(,%rax,4),%rcx
add    %rbp,%rcx
lea    (%rax,%r8,1),%rdx
lea    0x0(%rbp,%rdx,4),%rdx
lea    (%rax,%r8,2),%rsi
lea    0x0(,%rsi,4),%r10
add    %rbp,%r10
lea    0x0(,%r8,8),%rdi
add    %rbp,%rdi
lea    (%r8,%r8,2),%rsi
add    %rsi,%rax
lea    0x0(,%rax,4),%r11
add    %rbp,%r11
lea    0x0(,%rsi,4),%rax
add    %rbp,%rax
xor    %esi,%esi
mov    0x8(%rsp),%r9d
jmp    1319 <rsfft+0x1f9>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r9d,%esi
sub    %r14d,%esi
add    %esi,%esi
shl    $0x2,%r9d
mov    0x18(%rsp),%rbx
cmp    %ebx,%esi
jge    13f0 <rsfft+0x2d0>
cmp    %ebx,%esi
jge    1300 <rsfft+0x1e0>
movslq %esi,%rsi
movslq %r9d,%rbx
jmp    133a <rsfft+0x21a>
cs nopw 0x0(%rax,%rax,1)
nop
add    %rbx,%rsi
cmp    0x38(%rsp),%rsi
jge    1300 <rsfft+0x1e0>
movss  (%rax,%rsi,4),%xmm0
movss  (%rdi,%rsi,4),%xmm1
movaps %xmm0,%xmm2
addss  %xmm1,%xmm2
subss  %xmm1,%xmm0
movss  %xmm0,(%rax,%rsi,4)
movss  0x0(%rbp,%rsi,4),%xmm0
subss  %xmm2,%xmm0
movss  %xmm0,(%rdi,%rsi,4)
addss  0x0(%rbp,%rsi,4),%xmm2
movss  %xmm2,0x0(%rbp,%rsi,4)
cmp    $0x4,%r14d
jl     1330 <rsfft+0x210>
movss  (%r10,%rsi,4),%xmm0
movss  (%r11,%rsi,4),%xmm1
movaps %xmm0,%xmm2
addss  %xmm1,%xmm2
cvtss2sd %xmm2,%xmm2
divsd  %xmm3,%xmm2
cvtsd2ss %xmm2,%xmm2
subss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
divsd  %xmm3,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  (%rdx,%rsi,4),%xmm1
subss  %xmm2,%xmm1
movss  %xmm1,(%r11,%rsi,4)
movss  (%rdx,%rsi,4),%xmm1
xorps  %xmm9,%xmm1
subss  %xmm2,%xmm1
movss  %xmm1,(%r10,%rsi,4)
movss  (%rcx,%rsi,4),%xmm1
subss  %xmm0,%xmm1
movss  %xmm1,(%rdx,%rsi,4)
addss  (%rcx,%rsi,4),%xmm0
movss  %xmm0,(%rcx,%rsi,4)
jmp    1330 <rsfft+0x210>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    (%r14,%r14,1),%eax
mov    %eax,0x4(%rsp)
mov    %r14,0x80(%rsp)
cmp    $0x8,%r14d
jl     1240 <rsfft+0x120>
xorps  %xmm0,%xmm0
cvtsi2sdl 0x4(%rsp),%xmm0
movsd  0xbe5(%rip),%xmm1
divsd  %xmm0,%xmm1
cmp    $0x3,%r15d
mov    $0x2,%eax
cmovl  %eax,%r15d
mov    %r15,0x60(%rsp)
mov    0x50(%rsp),%r14
lea    (%r14,%r8,4),%r13
lea    (%r14,%r8,8),%r12
lea    (%r8,%r8,2),%rax
lea    (%r14,%rax,4),%r15
mov    %r8d,%r11d
add    $0xffffffff,%r11d
lea    -0x1(,%r8,4),%eax
ff
mov    %rax,0x28(%rsp)
lea    (%r8,%r8,2),%eax
add    $0xffffffff,%eax
mov    %rax,0x20(%rsp)
lea    -0x1(%r8,%r8,1),%eax
mov    %eax,0xc(%rsp)
mov    $0x1,%ebx
movsd  %xmm1,0x58(%rsp)
jmp    14d0 <rsfft+0x3b0>
nopl   0x0(%rax)
mov    0x10(%rsp),%rbx
xorps  %xmm1,%xmm1
cvtsi2sd %ebx,%xmm1
mulsd  0x58(%rsp),%xmm1
add    $0x4,%r14
add    $0x4,%r13
add    $0x4,%r12
add    $0x4,%r15
add    $0xffffffff,%r11d
mov    0x28(%rsp),%rax
add    $0xffffffff,%eax
mov    %rax,0x28(%rsp)
mov    0x20(%rsp),%rax
add    $0xffffffff,%eax
mov    %rax,0x20(%rsp)
addl   $0xffffffff,0xc(%rsp)
cmp    0x60(%rsp),%rbx
je     1240 <rsfft+0x120>
mov    %r11,0x78(%rsp)
movapd %xmm1,%xmm0
mulsd  0xb2f(%rip),%xmm0
movsd  %xmm0,0x10(%rsp)
movapd %xmm1,%xmm0
movsd  %xmm1,0x40(%rsp)
call   1040 <cos@plt>
movsd  %xmm0,0x70(%rsp)
movsd  0x40(%rsp),%xmm0
call   1030 <sin@plt>
movaps %xmm0,0x40(%rsp)
movsd  0x10(%rsp),%xmm0
call   1040 <cos@plt>
movsd  %xmm0,0x68(%rsp)
movsd  0x10(%rsp),%xmm0
call   1030 <sin@plt>
movsd  0x68(%rsp),%xmm12
movapd 0x40(%rsp),%xmm11
movsd  0x70(%rsp),%xmm10
mov    0x78(%rsp),%r11
movaps 0xad6(%rip),%xmm9
add    $0x1,%rbx
mov    %rbx,0x10(%rsp)
mov    0x18(%rsp),%r9
test   %r9d,%r9d
mov    0x38(%rsp),%r10
jle    1480 <rsfft+0x360>
movapd %xmm11,%xmm8
movapd 0xabd(%rip),%xmm2
xorpd  %xmm2,%xmm8
movapd %xmm0,%xmm1
xorpd  %xmm2,%xmm1
xor    %eax,%eax
mov    0x8(%rsp),%ecx
jmp    15a7 <rsfft+0x487>
nopl   0x0(%rax,%rax,1)
mov    %ecx,%eax
sub    0x80(%rsp),%eax
add    %eax,%eax
shl    $0x2,%ecx
cmp    %r9d,%eax
jge    1480 <rsfft+0x360>
cmp    %r9d,%eax
jge    1590 <rsfft+0x470>
movslq %eax,%rdx
movslq %ecx,%r8
lea    (%r11,%rax,1),%edi
mov    0x28(%rsp),%rsi
lea    (%rsi,%rax,1),%ebx
mov    0x20(%rsp),%rsi
add    %eax,%esi
add    0xc(%rsp),%eax
nopl   0x0(%rax)
movss  (%r12,%rdx,4),%xmm3
cvtss2sd %xmm3,%xmm3
movslq %esi,%rsi
movss  0x0(%rbp,%rsi,4),%xmm4
xorps  %xmm5,%xmm5
cvtss2sd %xmm4,%xmm5
movapd %xmm11,%xmm4
mulsd  %xmm5,%xmm4
movapd %xmm8,%xmm6
mulsd  %xmm3,%xmm6
mulsd  %xmm10,%xmm3
addsd  %xmm4,%xmm3
xorps  %xmm4,%xmm4
cvtsd2ss %xmm3,%xmm4
mulsd  %xmm10,%xmm5
addsd  %xmm6,%xmm5
xorps  %xmm3,%xmm3
cvtsd2ss %xmm5,%xmm3
movss  (%r15,%rdx,4),%xmm5
cvtss2sd %xmm5,%xmm5
movslq %ebx,%rbx
movss  0x0(%rbp,%rbx,4),%xmm6
cvtss2sd %xmm6,%xmm6
movapd %xmm0,%xmm7
mulsd  %xmm6,%xmm7
movapd %xmm1,%xmm2
mulsd  %xmm5,%xmm2
mulsd  %xmm12,%xmm5
addsd  %xmm7,%xmm5
cvtsd2ss %xmm5,%xmm5
mulsd  %xmm12,%xmm6
addsd  %xmm2,%xmm6
xorps  %xmm2,%xmm2
cvtsd2ss %xmm6,%xmm2
movaps %xmm4,%xmm6
addss  %xmm5,%xmm6
movaps %xmm3,%xmm7
addss  %xmm2,%xmm7
subss  %xmm5,%xmm4
subss  %xmm2,%xmm3
cltq
movss  0x0(%rbp,%rax,4),%xmm2
movaps %xmm2,%xmm5
addss  %xmm7,%xmm5
subss  %xmm2,%xmm7
movss  %xmm7,(%r12,%rdx,4)
movss  %xmm5,0x0(%rbp,%rbx,4)
movss  0x0(%r13,%rdx,4),%xmm2
movaps %xmm2,%xmm5
subss  %xmm4,%xmm5
xorps  %xmm9,%xmm2
subss  %xmm4,%xmm2
movss  %xmm2,0x0(%rbp,%rsi,4)
movss  %xmm5,(%r15,%rdx,4)
movss  (%r14,%rdx,4),%xmm2
movaps %xmm6,%xmm4
addss  %xmm2,%xmm4
subss  %xmm6,%xmm2
movss  %xmm2,0x0(%rbp,%rax,4)
movss  %xmm4,(%r14,%rdx,4)
movslq %edi,%rdi
movss  0x0(%rbp,%rdi,4),%xmm2
movaps %xmm3,%xmm4
addss  %xmm2,%xmm4
subss  %xmm3,%xmm2
movss  %xmm2,0x0(%rbp,%rdi,4)
movss  %xmm4,0x0(%r13,%rdx,4)
add    %r8,%rdx
add    %ecx,%edi
add    %ecx,%ebx
add    %ecx,%esi
add    %ecx,%eax
cmp    %r10,%rdx
jl     15d0 <rsfft+0x4b0>
jmp    1590 <rsfft+0x470>
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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