void fftinv_hermitian_to_real(float *z, int n) {
  float *x, e, a, a3, sqrthalf = 1 / (float)sqrt(2.0);
  float cc1, ss1, cc3, ss3;
  int nn = n >> 1, is, id, i0, i1, i2, i3, i4, i5, i6, i7, i8;
  float t1, t2, t3, t4, t5;
  int n2, n4, n8, i, j;
  x = z - 1;
  n2 = n << 1;
  while (nn >>= 1) {
    is = 0;
    id = n2;
    n2 >>= 1;
    n4 = n2 >> 2;
    n8 = n4 >> 1;
    e = 6.28318530717958647692 / n2;
    do {
      for (i = is; i < n; i += id) {
        i1 = i + 1;
        i2 = i1 + n4;
        i3 = i2 + n4;
        i4 = i3 + n4;
        t1 = x[i1] - x[i3];
        x[i1] += x[i3];
        x[i2] += x[i2];
        x[i3] = t1 - 2.0 * x[i4];
        x[i4] = t1 + 2.0 * x[i4];
        if (n4 == 1)
          continue;
        i1 += n8;
        i2 += n8;
        i3 += n8;
        i4 += n8;
        t1 = (x[i2] - x[i1]) * sqrthalf;
        t2 = (x[i4] + x[i3]) * sqrthalf;
        x[i1] += x[i2];
        x[i2] = x[i4] - x[i3];
        x[i3] = -2.0 * (t2 + t1);
        x[i4] = 2.0 * (t1 - t2);
      }
      is = (id << 1) - n2;
      id <<= 2;
    } while (is < n - 1);
    a = e;
    for (j = 2; j <= n8; j++) {
      a3 = 3 * a;
      cc1 = (float)cos(a);
      ss1 = (float)sin(a);
      cc3 = (float)cos(a3);
      ss3 = (float)sin(a3);
      a = e * j;
      is = 0;
      id = n2 << 1;
      do {
        for (i = is; i < n; i += id) {
          i1 = i + j;
          i2 = i1 + n4;
          i3 = i2 + n4;
          i4 = i3 + n4;
          i5 = i + n4 - j + 2;
          i6 = i5 + n4;
          i7 = i6 + n4;
          i8 = i7 + n4;
          t1 = x[i1] - x[i6];
          x[i1] += x[i6];
          t2 = x[i5] - x[i2];
          x[i5] += x[i2];
          t3 = x[i8] + x[i3];
          x[i6] = x[i8] - x[i3];
          t4 = x[i4] + x[i7];
          x[i2] = x[i4] - x[i7];
          t5 = t1 - t4;
          t1 += t4;
          t4 = t2 - t3;
          t2 += t3;
          x[i3] = t5 * cc1 + t4 * ss1;
          x[i7] = -t4 * cc1 + t5 * ss1;
          x[i4] = t1 * cc3 - t2 * ss3;
          x[i8] = t2 * cc3 + t1 * ss3;
        }
        is = (id << 1) - n2;
        id <<= 2;
      } while (is < n - 1);
    }
  }
  is = 1;
  id = 4;
  do {
    for (i0 = is; i0 <= n; i0 += id) {
      i1 = i0 + 1;
      e = x[i0];
      x[i0] = e + x[i1];
      x[i1] = e - x[i1];
    }
    is = (id << 1) - 1;
    id <<= 2;
  } while (is < n);
  scramble_real(z, n);
  e = 1 / (float)n;
  for (i = 0; i < n; i++)
    z[i] *= e;
}


x86 assembly (clang, -O0):
<fftinv_hermitian_to_real>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movsd  0xeae(%rip),%xmm0
call   1060 <sqrt@plt>
cvtsd2ss %xmm0,%xmm1
movss  0xe95(%rip),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
mov    -0xc(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x8(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x18(%rbp)
mov    -0xc(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x80(%rbp)
mov    -0x3c(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x3c(%rbp)
cmp    $0x0,%eax
je     17f5 <fftinv_hermitian_to_real+0x6b5>
movl   $0x0,-0x40(%rbp)
mov    -0x80(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x80(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x80(%rbp)
mov    -0x80(%rbp),%eax
sar    $0x2,%eax
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x88(%rbp)
cvtsi2sdl -0x80(%rbp),%xmm1
movsd  0xe2e(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x1c(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1434 <fftinv_hermitian_to_real+0x2f4>
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
add    -0x84(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
add    -0x84(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
add    -0x84(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
movslq -0x50(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x50(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x58(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
mov    -0x18(%rbp),%rax
movslq -0x58(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x58(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
cmpl   $0x1,-0x84(%rbp)
jne    130c <fftinv_hermitian_to_real+0x1cc>
jmp    1420 <fftinv_hermitian_to_real+0x2e0>
mov    -0x88(%rbp),%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x88(%rbp),%eax
add    -0x50(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x88(%rbp),%eax
add    -0x54(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x88(%rbp),%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x50(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
mulss  -0x28(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x58(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
mulss  -0x28(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x50(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
movslq -0x58(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x50(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x70(%rbp),%xmm0
addss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc38(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x6c(%rbp),%xmm0
subss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xbfd(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x58(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x44(%rbp),%eax
add    -0x8c(%rbp),%eax
mov    %eax,-0x8c(%rbp)
jmp    11f8 <fftinv_hermitian_to_real+0xb8>
mov    -0x44(%rbp),%eax
shl    $0x1,%eax
sub    -0x80(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x44(%rbp),%eax
shl    $0x2,%eax
mov    %eax,-0x44(%rbp)
mov    -0x40(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jl     11ef <fftinv_hermitian_to_real+0xaf>
movss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x2,-0x90(%rbp)
mov    -0x90(%rbp),%eax
cmp    -0x88(%rbp),%eax
jg     17f0 <fftinv_hermitian_to_real+0x6b0>
movss  0xb7c(%rip),%xmm0
mulss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1040 <sin@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1040 <sin@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x1c(%rbp),%xmm0
cvtsi2ssl -0x90(%rbp),%xmm1
ff
mulss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x80(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    17b1 <fftinv_hermitian_to_real+0x671>
mov    -0x8c(%rbp),%eax
add    -0x90(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
add    -0x84(%rbp),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
add    -0x84(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
add    -0x84(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x8c(%rbp),%eax
add    -0x84(%rbp),%eax
sub    -0x90(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
add    -0x84(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%eax
add    -0x84(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
add    -0x84(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x50(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x50(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x5c(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x74(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x60(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x18(%rbp),%rax
movslq -0x58(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x64(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x58(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x64(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x50(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x6c(%rbp),%xmm0
subss  -0x78(%rbp),%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  -0x78(%rbp),%xmm0
addss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x70(%rbp),%xmm0
subss  -0x74(%rbp),%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x74(%rbp),%xmm0
addss  -0x70(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x7c(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm2
movss  -0x78(%rbp),%xmm1
mulss  -0x30(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x78(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  -0x2c(%rbp),%xmm2
movss  -0x7c(%rbp),%xmm1
mulss  -0x30(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x64(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x6c(%rbp),%xmm0
movss  -0x34(%rbp),%xmm2
movss  -0x70(%rbp),%xmm1
mulss  -0x38(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x58(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x70(%rbp),%xmm0
movss  -0x34(%rbp),%xmm2
movss  -0x6c(%rbp),%xmm1
mulss  -0x38(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x68(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x44(%rbp),%eax
add    -0x8c(%rbp),%eax
mov    %eax,-0x8c(%rbp)
jmp    151d <fftinv_hermitian_to_real+0x3dd>
mov    -0x44(%rbp),%eax
shl    $0x1,%eax
sub    -0x80(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x44(%rbp),%eax
shl    $0x2,%eax
mov    %eax,-0x44(%rbp)
mov    -0x40(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jl     1514 <fftinv_hermitian_to_real+0x3d4>
jmp    17dc <fftinv_hermitian_to_real+0x69c>
mov    -0x90(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x90(%rbp)
jmp    146e <fftinv_hermitian_to_real+0x32e>
jmp    1192 <fftinv_hermitian_to_real+0x52>
movl   $0x1,-0x40(%rbp)
movl   $0x4,-0x44(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     187c <fftinv_hermitian_to_real+0x73c>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x1c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x1c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x44(%rbp),%eax
add    -0x48(%rbp),%eax
mov    %eax,-0x48(%rbp)
jmp    1809 <fftinv_hermitian_to_real+0x6c9>
mov    -0x44(%rbp),%eax
shl    $0x1,%eax
sub    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x44(%rbp),%eax
shl    $0x2,%eax
mov    %eax,-0x44(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0xc(%rbp),%eax
jl     1803 <fftinv_hermitian_to_real+0x6c3>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    $0x0,%al
call   1030 <scramble_real@plt>
cvtsi2ssl -0xc(%rbp),%xmm1
movss  0x748(%rip),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,-0x1c(%rbp)
movl   $0x0,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1908 <fftinv_hermitian_to_real+0x7c8>
movss  -0x1c(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x8c(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    18cb <fftinv_hermitian_to_real+0x78b>
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fftinv_hermitian_to_real>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %rdi,%rbx
mov    %esi,%ebp
cmp    $0x3,%esi
mov    %rsi,0x18(%rsp)
ja     1155 <fftinv_hermitian_to_real+0x25>
mov    %rbp,%rdi
jmp    1608 <fftinv_hermitian_to_real+0x4d8>
mov    %rbp,0x60(%rsp)
lea    (%rsi,%rsi,1),%ecx
lea    -0x1(%rsi),%eax
mov    %eax,0x14(%rsp)
movslq %esi,%rax
mov    %rax,0x48(%rsp)
lea    0x4(%rbx),%rax
mov    %rax,0x68(%rsp)
movss  0xe8b(%rip),%xmm5
movss  0xe87(%rip),%xmm6
mov    %esi,%eax
jmp    11b5 <fftinv_hermitian_to_real+0x85>
nopl   0x0(%rax)
mov    0x50(%rsp),%ecx
mov    %ecx,%eax
sar    %eax
cmp    $0x7,%ecx
mov    0x4(%rsp),%ecx
movss  0xe61(%rip),%xmm5
movss  0xe5d(%rip),%xmm6
jbe    15f9 <fftinv_hermitian_to_real+0x4c9>
mov    %eax,0x50(%rsp)
mov    %ecx,%r11d
sar    %ecx
mov    %r11d,%r12d
sar    $0x3,%r12d
mov    %r11d,%eax
mov    %ecx,0x4(%rsp)
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
sar    $0x4,%eax
movsd  0xe22(%rip),%xmm0
divsd  %xmm1,%xmm0
movslq %r12d,%r9
mov    %rax,%r13
cltq
lea    (%rbx,%rax,4),%r10
lea    (%rax,%r9,1),%rcx
lea    (%rbx,%rcx,4),%r14
lea    (%rbx,%r9,4),%rdi
lea    (%rax,%r9,2),%rcx
lea    (%rbx,%rcx,4),%rbp
lea    (%rbx,%r9,8),%rcx
lea    (%r9,%r9,2),%r8
add    %r8,%rax
lea    (%rbx,%rax,4),%rax
lea    (%rbx,%r8,4),%rdx
xor    %esi,%esi
mov    %r11d,(%rsp)
jmp    1236 <fftinv_hermitian_to_real+0x106>
nopl   (%rax)
lea    (%r11,%r11,1),%esi
sub    0x4(%rsp),%esi
shl    $0x2,%r11d
cmp    0x14(%rsp),%esi
jge    1330 <fftinv_hermitian_to_real+0x200>
cmp    0x18(%rsp),%esi
jge    1220 <fftinv_hermitian_to_real+0xf0>
movslq %esi,%rsi
movslq %r11d,%r15
jmp    125a <fftinv_hermitian_to_real+0x12a>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    %r15,%rsi
cmp    0x48(%rsp),%rsi
jge    1220 <fftinv_hermitian_to_real+0xf0>
movss  (%rbx,%rsi,4),%xmm1
movss  (%rcx,%rsi,4),%xmm2
movaps %xmm1,%xmm3
subss  %xmm2,%xmm3
addss  %xmm2,%xmm1
movss  %xmm1,(%rbx,%rsi,4)
movss  (%rdi,%rsi,4),%xmm1
addss  %xmm1,%xmm1
movss  %xmm1,(%rdi,%rsi,4)
xorps  %xmm1,%xmm1
cvtss2sd %xmm3,%xmm1
movss  (%rdx,%rsi,4),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm2,%xmm2
movaps %xmm1,%xmm3
subsd  %xmm2,%xmm3
xorps  %xmm2,%xmm2
cvtsd2ss %xmm3,%xmm2
movss  %xmm2,(%rcx,%rsi,4)
movss  (%rdx,%rsi,4),%xmm2
cvtss2sd %xmm2,%xmm2
addsd  %xmm2,%xmm2
addsd  %xmm1,%xmm2
xorps  %xmm1,%xmm1
cvtsd2ss %xmm2,%xmm1
movss  %xmm1,(%rdx,%rsi,4)
cmp    $0x1,%r12d
je     1250 <fftinv_hermitian_to_real+0x120>
movss  (%r14,%rsi,4),%xmm1
movss  (%r10,%rsi,4),%xmm2
movaps %xmm1,%xmm3
subss  %xmm2,%xmm3
mulss  %xmm5,%xmm3
movss  (%rax,%rsi,4),%xmm4
addss  0x0(%rbp,%rsi,4),%xmm4
addss  %xmm2,%xmm1
movss  %xmm1,(%r10,%rsi,4)
movss  (%rax,%rsi,4),%xmm1
subss  0x0(%rbp,%rsi,4),%xmm1
mulss  %xmm5,%xmm4
movss  %xmm1,(%r14,%rsi,4)
movaps %xmm3,%xmm1
addss  %xmm4,%xmm1
mulss  %xmm6,%xmm1
movss  %xmm1,0x0(%rbp,%rsi,4)
subss  %xmm4,%xmm3
addss  %xmm3,%xmm3
movss  %xmm3,(%rax,%rsi,4)
jmp    1250 <fftinv_hermitian_to_real+0x120>
mov    %r12,0x20(%rsp)
cmpl   $0x20,(%rsp)
jl     1190 <fftinv_hermitian_to_real+0x60>
cvtsd2ss %xmm0,%xmm0
andl   $0xfffffffe,(%rsp)
cmp    $0x3,%r13d
mov    $0x2,%eax
cmovl  %eax,%r13d
add    $0x1,%r13d
mov    %r13,0x70(%rsp)
mov    0x68(%rsp),%r15
lea    (%r15,%r9,4),%r14
lea    (%r15,%r9,8),%r13
lea    (%r15,%r8,4),%r12
mov    0x20(%rsp),%rax
lea    0x0(,%rax,4),%ecx
mov    %rcx,0x40(%rsp)
lea    (%rax,%rax,2),%ecx
mov    %rcx,0x38(%rsp)
add    %eax,%eax
mov    %rax,0x30(%rsp)
mov    $0x2,%ebp
movss  %xmm0,0x54(%rsp)
movaps %xmm0,%xmm8
jmp    13ff <fftinv_hermitian_to_real+0x2cf>
nop
mulss  0x54(%rsp),%xmm8
mov    0x8(%rsp),%rbp
add    $0x1,%rbp
add    $0x4,%r15
add    $0x4,%r14
add    $0x4,%r13
add    $0x4,%r12
mov    0x40(%rsp),%rax
add    $0xffffffff,%eax
mov    %rax,0x40(%rsp)
mov    0x38(%rsp),%rax
add    $0xffffffff,%eax
mov    %rax,0x38(%rsp)
mov    0x30(%rsp),%rax
add    $0xffffffff,%eax
mov    %rax,0x30(%rsp)
mov    0x20(%rsp),%rax
add    $0xffffffff,%eax
mov    %rax,0x20(%rsp)
cmp    0x70(%rsp),%rbp
je     1190 <fftinv_hermitian_to_real+0x60>
xorps  %xmm0,%xmm0
cvtss2sd %xmm8,%xmm0
movsd  %xmm0,0x28(%rsp)
mulss  0xbfa(%rip),%xmm8
movss  %xmm8,0x8(%rsp)
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x5c(%rsp)
movsd  0x28(%rsp),%xmm0
call   1040 <sin@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x28(%rsp)
movss  0x8(%rsp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  %xmm0,0x8(%rsp)
call   1050 <cos@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x58(%rsp)
movsd  0x8(%rsp),%xmm0
call   1040 <sin@plt>
movss  0x58(%rsp),%xmm10
movss  0x28(%rsp),%xmm9
movss  0x5c(%rsp),%xmm7
cvtsd2ss %xmm0,%xmm0
mov    %rbp,0x8(%rsp)
xorps  %xmm8,%xmm8
cvtsi2ss %ebp,%xmm8
xor    %ecx,%ecx
mov    (%rsp),%eax
mov    0x18(%rsp),%r9
mov    0x48(%rsp),%r10
mov    0x4(%rsp),%r11d
jmp    14c3 <fftinv_hermitian_to_real+0x393>
nopw   0x0(%rax,%rax,1)
lea    (%rax,%rax,1),%ecx
sub    %r11d,%ecx
shl    $0x2,%eax
cmp    0x14(%rsp),%ecx
jge    13a0 <fftinv_hermitian_to_real+0x270>
cmp    %r9d,%ecx
jge    14b0 <fftinv_hermitian_to_real+0x380>
movslq %ecx,%rdx
movslq %eax,%r8
mov    0x40(%rsp),%rsi
lea    (%rsi,%rcx,1),%edi
mov    0x38(%rsp),%rsi
add    %ecx,%esi
mov    0x30(%rsp),%rbp
add    %ecx,%ebp
add    0x20(%rsp),%ecx
nopl   0x0(%rax,%rax,1)
movss  (%r15,%rdx,4),%xmm1
movslq %ebp,%rbp
movss  -0x4(%rbx,%rbp,4),%xmm2
movaps %xmm1,%xmm3
subss  %xmm2,%xmm3
addss  %xmm2,%xmm1
movss  %xmm1,(%r15,%rdx,4)
movslq %ecx,%rcx
movss  -0x4(%rbx,%rcx,4),%xmm1
movss  (%r14,%rdx,4),%xmm2
movaps %xmm1,%xmm4
subss  %xmm2,%xmm4
addss  %xmm2,%xmm1
movss  %xmm1,-0x4(%rbx,%rcx,4)
movslq %edi,%rdi
movss  -0x4(%rbx,%rdi,4),%xmm2
movss  0x0(%r13,%rdx,4),%xmm5
movaps %xmm2,%xmm1
addss  %xmm5,%xmm1
subss  %xmm5,%xmm2
movss  %xmm2,-0x4(%rbx,%rbp,4)
movss  (%r12,%rdx,4),%xmm5
movslq %esi,%rsi
movss  -0x4(%rbx,%rsi,4),%xmm6
movaps %xmm5,%xmm2
addss  %xmm6,%xmm2
subss  %xmm6,%xmm5
movss  %xmm5,(%r14,%rdx,4)
movaps %xmm3,%xmm5
subss  %xmm2,%xmm5
addss  %xmm3,%xmm2
movaps %xmm4,%xmm3
subss  %xmm1,%xmm3
addss  %xmm4,%xmm1
movaps %xmm3,%xmm4
mulss  %xmm9,%xmm4
movaps %xmm5,%xmm6
mulss  %xmm7,%xmm6
addss  %xmm4,%xmm6
movss  %xmm6,0x0(%r13,%rdx,4)
mulss  %xmm9,%xmm5
mulss  %xmm7,%xmm3
subss  %xmm3,%xmm5
movss  %xmm5,-0x4(%rbx,%rsi,4)
movaps %xmm0,%xmm3
mulss  %xmm1,%xmm3
movaps %xmm2,%xmm4
mulss  %xmm10,%xmm4
subss  %xmm3,%xmm4
movss  %xmm4,(%r12,%rdx,4)
mulss  %xmm0,%xmm2
mulss  %xmm10,%xmm1
addss  %xmm2,%xmm1
movss  %xmm1,-0x4(%rbx,%rdi,4)
add    %r8,%rdx
add    %eax,%edi
add    %eax,%esi
add    %eax,%ebp
add    %eax,%ecx
cmp    %r10,%rdx
jl     14f0 <fftinv_hermitian_to_real+0x3c0>
jmp    14b0 <fftinv_hermitian_to_real+0x380>
mov    0x60(%rsp),%rbp
mov    0x18(%rsp),%rsi
mov    0x48(%rsp),%rdi
mov    $0x1,%ecx
mov    $0x4,%eax
jmp    1630 <fftinv_hermitian_to_real+0x500>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    (%rax,%rax,1),%edx
lea    (%rax,%rax,1),%ecx
add    $0xffffffff,%ecx
shl    $0x2,%eax
cmp    %esi,%edx
jg     166b <fftinv_hermitian_to_real+0x53b>
cmp    %esi,%ecx
jg     1620 <fftinv_hermitian_to_real+0x4f0>
movslq %ecx,%rcx
movslq %eax,%rdx
nopw   0x0(%rax,%rax,1)
movss  -0x4(%rbx,%rcx,4),%xmm0
movss  (%rbx,%rcx,4),%xmm1
movaps %xmm0,%xmm2
addss  %xmm1,%xmm2
movss  %xmm2,-0x4(%rbx,%rcx,4)
subss  %xmm1,%xmm0
movss  %xmm0,(%rbx,%rcx,4)
add    %rdx,%rcx
cmp    %rdi,%rcx
jle    1640 <fftinv_hermitian_to_real+0x510>
jmp    1620 <fftinv_hermitian_to_real+0x4f0>
mov    %rbx,%rdi
xor    %eax,%eax
call   1030 <scramble_real@plt>
mov    0x18(%rsp),%rax
test   %eax,%eax
jle    1747 <fftinv_hermitian_to_real+0x617>
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
movss  0x983(%rip),%xmm0
divss  %xmm1,%xmm0
cmp    $0x8,%eax
jae    16a1 <fftinv_hermitian_to_real+0x571>
xor    %eax,%eax
jmp    1730 <fftinv_hermitian_to_real+0x600>
mov    %ebp,%eax
and    $0xfffffff8,%eax
movaps %xmm0,%xmm1
shufps $0x0,%xmm0,%xmm1
lea    -0x8(%rax),%rcx
mov    %rcx,%rdx
shr    $0x3,%rdx
add    $0x1,%rdx
test   %rcx,%rcx
je     1756 <fftinv_hermitian_to_real+0x626>
mov    %rdx,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %ecx,%ecx
xchg   %ax,%ax
movups (%rbx,%rcx,4),%xmm2
movups 0x10(%rbx,%rcx,4),%xmm3
movups 0x20(%rbx,%rcx,4),%xmm4
movups 0x30(%rbx,%rcx,4),%xmm5
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
movups %xmm2,(%rbx,%rcx,4)
movups %xmm3,0x10(%rbx,%rcx,4)
mulps  %xmm1,%xmm4
mulps  %xmm1,%xmm5
movups %xmm4,0x20(%rbx,%rcx,4)
movups %xmm5,0x30(%rbx,%rcx,4)
add    $0x10,%rcx
add    $0xfffffffffffffffe,%rsi
jne    16d0 <fftinv_hermitian_to_real+0x5a0>
test   $0x1,%dl
je     1729 <fftinv_hermitian_to_real+0x5f9>
movups (%rbx,%rcx,4),%xmm2
movups 0x10(%rbx,%rcx,4),%xmm3
mulps  %xmm1,%xmm2
mulps  %xmm1,%xmm3
movups %xmm2,(%rbx,%rcx,4)
movups %xmm3,0x10(%rbx,%rcx,4)
cmp    %rbp,%rax
je     1747 <fftinv_hermitian_to_real+0x617>
xchg   %ax,%ax
movss  (%rbx,%rax,4),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,(%rbx,%rax,4)
add    $0x1,%rax
cmp    %rax,%rbp
jne    1730 <fftinv_hermitian_to_real+0x600>
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %ecx,%ecx
test   $0x1,%dl
jne    1711 <fftinv_hermitian_to_real+0x5e1>
jmp    1729 <fftinv_hermitian_to_real+0x5f9>

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

LLVM IR (-O2):
define void @fftinv_hermitian_to_real(float* %0, i32 %1) {
%3 = getelementptr inbounds float, float* %0, i64 -1
%4 = icmp ult i32 %1, 4
br i1 %4, label %5, label %7
5: ; preds = %2
%6 = zext i32 %1 to i64
br label %13
7: ; preds = %2
%8 = shl i32 %1, 1
%9 = add nsw i32 %1, -1
%10 = sext i32 %1 to i64
br label %15
11: ; preds = %186, %91
%12 = icmp ult i32 %16, 8
br i1 %12, label %13, label %15
13: ; preds = %11, %5
%14 = phi i64 [ %6, %5 ], [ %10, %11 ]
br label %190
15: ; preds = %7, %11
%16 = phi i32 [ %1, %7 ], [ %92, %11 ]
%17 = phi i32 [ %8, %7 ], [ %18, %11 ]
%18 = ashr i32 %17, 1
%19 = ashr i32 %17, 3
%20 = ashr i32 %17, 4
%21 = sitofp i32 %18 to double
%22 = fdiv double 0x401921FB54442D18, %21
%23 = icmp eq i32 %19, 1
%24 = sext i32 %19 to i64
%25 = sext i32 %20 to i64
br label %26
26: ; preds = %86, %15
%27 = phi i32 [ %17, %15 ], [ %89, %86 ]
%28 = phi i32 [ 0, %15 ], [ %88, %86 ]
%29 = icmp slt i32 %28, %1
br i1 %29, label %30, label %86
30: ; preds = %26
%31 = sext i32 %28 to i64
%32 = sext i32 %27 to i64
br label %33
33: ; preds = %30, %83
%34 = phi i64 [ %31, %30 ], [ %84, %83 ]
%35 = add nsw i64 %34, 1
%36 = add nsw i64 %35, %24
%37 = add nsw i64 %36, %24
%38 = add nsw i64 %37, %24
%39 = getelementptr inbounds float, float* %0, i64 %34
%40 = load float, float* %39
%41 = getelementptr inbounds float, float* %3, i64 %37
%42 = load float, float* %41
%43 = fsub float %40, %42
%44 = fadd float %40, %42
store float %44, float* %39
%45 = getelementptr inbounds float, float* %3, i64 %36
%46 = load float, float* %45
%47 = fadd float %46, %46
store float %47, float* %45
%48 = fpext float %43 to double
%49 = getelementptr inbounds float, float* %3, i64 %38
%50 = load float, float* %49
%51 = fpext float %50 to double
%52 = tail call double @llvm.fmuladd.f64(double %51, double -2.000000e+00, double %48)
%53 = fptrunc double %52 to float
store float %53, float* %41
%54 = load float, float* %49
%55 = fpext float %54 to double
%56 = tail call double @llvm.fmuladd.f64(double %55, double 2.000000e+00, double %48)
%57 = fptrunc double %56 to float
store float %57, float* %49
br i1 %23, label %83, label %58
58: ; preds = %33
%59 = add nsw i64 %35, %25
%60 = add nsw i64 %36, %25
%61 = add nsw i64 %37, %25
%62 = add nsw i64 %38, %25
%63 = getelementptr inbounds float, float* %3, i64 %60
%64 = load float, float* %63
%65 = getelementptr inbounds float, float* %3, i64 %59
%66 = load float, float* %65
%67 = fsub float %64, %66
%68 = fmul float %67, 0x3FE6A09E60000000
%69 = getelementptr inbounds float, float* %3, i64 %62
%70 = load float, float* %69
%71 = getelementptr inbounds float, float* %3, i64 %61
%72 = load float, float* %71
%73 = fadd float %70, %72
%74 = fmul float %73, 0x3FE6A09E60000000
%75 = fadd float %64, %66
store float %75, float* %65
%76 = load float, float* %69
%77 = load float, float* %71
%78 = fsub float %76, %77
store float %78, float* %63
%79 = fadd float %68, %74
%80 = fmul float %79, -2.000000e+00
store float %80, float* %71
%81 = fsub float %68, %74
%82 = fmul float %81, 2.000000e+00
store float %82, float* %69
br label %83
83: ; preds = %33, %58
%84 = add i64 %34, %32
%85 = icmp slt i64 %84, %10
br i1 %85, label %33, label %86
86: ; preds = %83, %26
%87 = shl i32 %27, 1
%88 = sub nsw i32 %87, %18
%89 = shl i32 %27, 2
%90 = icmp slt i32 %88, %9
br i1 %90, label %26, label %91
91: ; preds = %86
%92 = ashr i32 %16, 1
%93 = fptrunc double %22 to float
%94 = icmp slt i32 %17, 32
br i1 %94, label %11, label %95
95: ; preds = %91
%96 = and i32 %17, -2
%97 = add nsw i32 %19, 2
%98 = call i32 @llvm.smax.i32(i32 %20, i32 2)
%99 = add nuw nsw i32 %98, 1
%100 = zext i32 %99 to i64
br label %101
101: ; preds = %95, %186
%102 = phi i64 [ 2, %95 ], [ %188, %186 ]
%103 = phi float [ %93, %95 ], [ %187, %186 ]
%104 = fmul float %103, 3.000000e+00
%105 = fpext float %103 to double
%106 = tail call double @cos(double %105)
%107 = fptrunc double %106 to float
%108 = tail call double @sin(double %105)
%109 = fptrunc double %108 to float
%110 = fpext float %104 to double
%111 = tail call double @cos(double %110)
%112 = fptrunc double %111 to float
%113 = tail call double @sin(double %110)
%114 = fptrunc double %113 to float
%115 = trunc i64 %102 to i32
%116 = sitofp i32 %115 to float
%117 = trunc i64 %102 to i32
%118 = sub i32 %97, %117
br label %119
119: ; preds = %181, %101
%120 = phi i32 [ %96, %101 ], [ %184, %181 ]
%121 = phi i32 [ 0, %101 ], [ %183, %181 ]
%122 = icmp slt i32 %121, %1
br i1 %122, label %123, label %181
123: ; preds = %119
%124 = sext i32 %121 to i64
%125 = sext i32 %120 to i64
br label %126
126: ; preds = %123, %126
%127 = phi i64 [ %124, %123 ], [ %179, %126 ]
%128 = add nsw i64 %127, %102
%129 = add nsw i64 %128, %24
%130 = add nsw i64 %129, %24
%131 = add nsw i64 %130, %24
%132 = trunc i64 %127 to i32
%133 = add i32 %118, %132
%134 = add nsw i32 %133, %19
%135 = add nsw i32 %134, %19
%136 = add nsw i32 %135, %19
%137 = getelementptr inbounds float, float* %3, i64 %128
%138 = load float, float* %137
%139 = sext i32 %134 to i64
%140 = getelementptr inbounds float, float* %3, i64 %139
%141 = load float, float* %140
%142 = fsub float %138, %141
%143 = fadd float %138, %141
store float %143, float* %137
%144 = sext i32 %133 to i64
%145 = getelementptr inbounds float, float* %3, i64 %144
%146 = load float, float* %145
%147 = getelementptr inbounds float, float* %3, i64 %129
%148 = load float, float* %147
%149 = fsub float %146, %148
%150 = fadd float %146, %148
store float %150, float* %145
%151 = sext i32 %136 to i64
%152 = getelementptr inbounds float, float* %3, i64 %151
%153 = load float, float* %152
%154 = getelementptr inbounds float, float* %3, i64 %130
%155 = load float, float* %154
%156 = fadd float %153, %155
%157 = fsub float %153, %155
store float %157, float* %140
%158 = getelementptr inbounds float, float* %3, i64 %131
%159 = load float, float* %158
%160 = sext i32 %135 to i64
%161 = getelementptr inbounds float, float* %3, i64 %160
%162 = load float, float* %161
%163 = fadd float %159, %162
%164 = fsub float %159, %162
store float %164, float* %147
%165 = fsub float %142, %163
%166 = fadd float %142, %163
%167 = fsub float %149, %156
%168 = fadd float %149, %156
%169 = fmul float %167, %109
%170 = tail call float @llvm.fmuladd.f32(float %165, float %107, float %169)
store float %170, float* %154
%171 = fneg float %167
%172 = fmul float %165, %109
%173 = tail call float @llvm.fmuladd.f32(float %171, float %107, float %172)
store float %173, float* %161
%174 = fneg float %168
%175 = fmul float %114, %174
%176 = tail call float @llvm.fmuladd.f32(float %166, float %112, float %175)
store float %176, float* %158
%177 = fmul float %166, %114
%178 = tail call float @llvm.fmuladd.f32(float %168, float %112, float %177)
store float %178, float* %152
%179 = add i64 %127, %125
%180 = icmp slt i64 %179, %10
br i1 %180, label %126, label %181
181: ; preds = %126, %119
%182 = shl i32 %120, 1
%183 = sub nsw i32 %182, %18
%184 = shl i32 %120, 2
%185 = icmp slt i32 %183, %9
br i1 %185, label %119, label %186
186: ; preds = %181
%187 = fmul float %93, %116
%188 = add nuw nsw i64 %102, 1
%189 = icmp eq i64 %188, %100
br i1 %189, label %11, label %101
190: ; preds = %13, %207
%191 = phi i32 [ %210, %207 ], [ 4, %13 ]
%192 = phi i32 [ %209, %207 ], [ 1, %13 ]
%193 = icmp sgt i32 %192, %1
br i1 %193, label %207, label %194
194: ; preds = %190
%195 = sext i32 %192 to i64
%196 = sext i32 %191 to i64
br label %197
197: ; preds = %194, %197
%198 = phi i64 [ %195, %194 ], [ %205, %197 ]
%199 = getelementptr inbounds float, float* %3, i64 %198
%200 = load float, float* %199
%201 = getelementptr inbounds float, float* %0, i64 %198
%202 = load float, float* %201
%203 = fadd float %200, %202
store float %203, float* %199
%204 = fsub float %200, %202
store float %204, float* %201
%205 = add i64 %198, %196
%206 = icmp sgt i64 %205, %14
br i1 %206, label %207, label %197
207: ; preds = %197, %190
%208 = shl i32 %191, 1
%209 = add nsw i32 %208, -1
%210 = shl i32 %191, 2
%211 = icmp sgt i32 %208, %1
br i1 %211, label %212, label %190
212: ; preds = %207
%213 = tail call i32 (float*, i32, ...) bitcast (i32 (...)* @scramble_real to i32 (float*, i32, ...)*)(float* %0, i32 %1)
%214 = sitofp i32 %1 to float
%215 = fdiv float 1.000000e+00, %214
%216 = icmp sgt i32 %1, 0
br i1 %216, label %217, label %285
217: ; preds = %212
%218 = zext i32 %1 to i64
%219 = icmp ult i32 %1, 8
br i1 %219, label %276, label %220
220: ; preds = %217
%221 = and i64 %218, 4294967288
%222 = insertelement <4 x float> poison, float %215, i64 0
%223 = shufflevector <4 x float> %222, <4 x float> poison, <4 x i32> zeroinitializer
%224 = insertelement <4 x float> poison, float %215, i64 0
%225 = shufflevector <4 x float> %224, <4 x float> poison, <4 x i32> zeroinitializer
%226 = add nsw i64 %221, -8
%227 = lshr exact i64 %226, 3
%228 = add nuw nsw i64 %227, 1
%229 = and i64 %228, 1
%230 = icmp eq i64 %226, 0
br i1 %230, label %260, label %231
231: ; preds = %220
%232 = and i64 %228, 4611686018427387902
br label %233
233: ; preds = %233, %231
%234 = phi i64 [ 0, %231 ], [ %257, %233 ]
%235 = phi i64 [ 0, %231 ], [ %258, %233 ]
%236 = getelementptr inbounds float, float* %0, i64 %234
%237 = bitcast float* %236 to <4 x float>*
%238 = load <4 x float>, <4 x float>* %237
%239 = getelementptr inbounds float, float* %236, i64 4
%240 = bitcast float* %239 to <4 x float>*
%241 = load <4 x float>, <4 x float>* %240
%242 = fmul <4 x float> %223, %238
%243 = fmul <4 x float> %225, %241
%244 = bitcast float* %236 to <4 x float>*
store <4 x float> %242, <4 x float>* %244
%245 = bitcast float* %239 to <4 x float>*
store <4 x float> %243, <4 x float>* %245
%246 = or i64 %234, 8
%247 = getelementptr inbounds float, float* %0, i64 %246
%248 = bitcast float* %247 to <4 x float>*
%249 = load <4 x float>, <4 x float>* %248
%250 = getelementptr inbounds float, float* %247, i64 4
%251 = bitcast float* %250 to <4 x float>*
%252 = load <4 x float>, <4 x float>* %251
%253 = fmul <4 x float> %223, %249
%254 = fmul <4 x float> %225, %252
%255 = bitcast float* %247 to <4 x float>*
store <4 x float> %253, <4 x float>* %255
%256 = bitcast float* %250 to <4 x float>*
store <4 x float> %254, <4 x float>* %256
%257 = add nuw i64 %234, 16
%258 = add i64 %235, 2
%259 = icmp eq i64 %258, %232
br i1 %259, label %260, label %233
260: ; preds = %233, %220
%261 = phi i64 [ 0, %220 ], [ %257, %233 ]
%262 = icmp eq i64 %229, 0
br i1 %262, label %274, label %263
263: ; preds = %260
%264 = getelementptr inbounds float, float* %0, i64 %261
%265 = bitcast float* %264 to <4 x float>*
%266 = load <4 x float>, <4 x float>* %265
%267 = getelementptr inbounds float, float* %264, i64 4
%268 = bitcast float* %267 to <4 x float>*
%269 = load <4 x float>, <4 x float>* %268
%270 = fmul <4 x float> %223, %266
%271 = fmul <4 x float> %225, %269
%272 = bitcast float* %264 to <4 x float>*
store <4 x float> %270, <4 x float>* %272
%273 = bitcast float* %267 to <4 x float>*
store <4 x float> %271, <4 x float>* %273
br label %274
274: ; preds = %260, %263
%275 = icmp eq i64 %221, %218
br i1 %275, label %285, label %276
276: ; preds = %217, %274
%277 = phi i64 [ 0, %217 ], [ %221, %274 ]
br label %278
278: ; preds = %276, %278
%279 = phi i64 [ %283, %278 ], [ %277, %276 ]
%280 = getelementptr inbounds float, float* %0, i64 %279
%281 = load float, float* %280
%282 = fmul float %215, %281
store float %282, float* %280
%283 = add nuw nsw i64 %279, 1
%284 = icmp eq i64 %283, %218
br i1 %284, label %285, label %278
285: ; preds = %278, %274, %212
ret void
}