void dfct(int n, double *a, double *t, int *ip, double *w) {
  void makewt(int nw, int *ip, double *w);
  void makect(int nc, int *ip, double *c);
  void cftfsub(int n, double *a, int *ip, int nw, double *w);
  void rftfsub(int n, double *a, int nc, double *c);
  void dctsub(int n, double *a, int nc, double *c);
  int j, k, l, m, mh, nw, nc;
  double xr, xi, yr, yi;
  nw = ip[0];
  if (n > (nw << 3)) {
    nw = n >> 3;
    makewt(nw, ip, w);
  }
  nc = ip[1];
  if (n > (nc << 1)) {
    nc = n >> 1;
    makect(nc, ip, w + nw);
  }
  m = n >> 1;
  yi = a[m];
  xi = a[0] + a[n];
  a[0] -= a[n];
  t[0] = xi - yi;
  t[m] = xi + yi;
  if (n > 2) {
    mh = m >> 1;
    for (j = 1; j < mh; j++) {
      k = m - j;
      xr = a[j] - a[n - j];
      xi = a[j] + a[n - j];
      yr = a[k] - a[n - k];
      yi = a[k] + a[n - k];
      a[j] = xr;
      a[k] = yr;
      t[j] = xi - yi;
      t[k] = xi + yi;
    }
    t[mh] = a[mh] + a[n - mh];
    a[mh] -= a[n - mh];
    dctsub(m, a, nc, w + nw);
    if (m > 4) {
      cftfsub(m, a, ip + 2, nw, w);
      rftfsub(m, a, nc, w + nw);
    } else if (m == 4) {
      cftfsub(m, a, ip + 2, nw, w);
    }
    a[n - 1] = a[0] - a[1];
    a[1] = a[0] + a[1];
    for (j = m - 2; j >= 2; j -= 2) {
      a[2 * j + 1] = a[j] + a[j + 1];
      a[2 * j - 1] = a[j] - a[j + 1];
    }
    l = 2;
    m = mh;
    while (m >= 2) {
      dctsub(m, t, nc, w + nw);
      if (m > 4) {
        cftfsub(m, t, ip + 2, nw, w);
        rftfsub(m, t, nc, w + nw);
      } else if (m == 4) {
        cftfsub(m, t, ip + 2, nw, w);
      }
      a[n - l] = t[0] - t[1];
      a[l] = t[0] + t[1];
      k = 0;
      for (j = 2; j < m; j += 2) {
        k += l << 2;
        a[k - l] = t[j] - t[j + 1];
        a[k + l] = t[j] + t[j + 1];
      }
      l <<= 1;
      mh = m >> 1;
      for (j = 0; j < mh; j++) {
        k = m - j;
        t[j] = t[m + k] - t[m + j];
        t[k] = t[m + k] + t[m + j];
      }
      t[mh] = t[m + mh];
      m = mh;
    }
    a[l] = t[0];
    a[n] = t[2] - t[1];
    a[0] = t[2] + t[1];
  } else {
    a[1] = a[0];
    a[2] = t[0];
    a[0] = t[1];
  }
}


x86 assembly (clang, -O0):
<dfct>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x40(%rbp)
mov    -0x4(%rbp),%eax
mov    -0x40(%rbp),%ecx
shl    $0x3,%ecx
cmp    %ecx,%eax
jle    119e <dfct+0x4e>
mov    -0x4(%rbp),%eax
sar    $0x3,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%edi
mov    -0x20(%rbp),%rsi
mov    -0x28(%rbp),%rdx
call   1040 <makewt@plt>
mov    -0x20(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x44(%rbp)
mov    -0x4(%rbp),%eax
mov    -0x44(%rbp),%ecx
shl    $0x1,%ecx
cmp    %ecx,%eax
jle    11dd <dfct+0x8d>
mov    -0x4(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%edi
mov    -0x20(%rbp),%rsi
mov    -0x28(%rbp),%rdx
movslq -0x40(%rbp),%rax
shl    $0x3,%rax
add    %rax,%rdx
call   1060 <makect@plt>
mov    -0x4(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x4(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x4(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
subsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
cmpl   $0x2,-0x4(%rbp)
jle    17ba <dfct+0x66a>
mov    -0x38(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1377 <dfct+0x227>
mov    -0x38(%rbp),%eax
sub    -0x2c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    -0x30(%rbp),%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    -0x30(%rbp),%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x60(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
subsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1272 <dfct+0x122>
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x44(%rbp),%edx
mov    -0x28(%rbp),%rcx
movslq -0x40(%rbp),%rax
shl    $0x3,%rax
add    %rax,%rcx
call   1030 <dctsub@plt>
cmpl   $0x4,-0x38(%rbp)
jle    1431 <dfct+0x2e1>
mov    -0x38(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x20(%rbp),%rdx
add    $0x8,%rdx
mov    -0x40(%rbp),%ecx
mov    -0x28(%rbp),%r8
call   1070 <cftfsub@plt>
mov    -0x38(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x44(%rbp),%edx
mov    -0x28(%rbp),%rcx
movslq -0x40(%rbp),%rax
shl    $0x3,%rax
add    %rax,%rcx
call   1050 <rftfsub@plt>
jmp    145b <dfct+0x30b>
cmpl   $0x4,-0x38(%rbp)
jne    1456 <dfct+0x306>
mov    -0x38(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x20(%rbp),%rdx
add    $0x8,%rdx
mov    -0x40(%rbp),%ecx
mov    -0x28(%rbp),%r8
call   1070 <cftfsub@plt>
jmp    145b <dfct+0x30b>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
addsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x38(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x2,-0x2c(%rbp)
jl     1521 <dfct+0x3d1>
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    14a1 <dfct+0x351>
movl   $0x2,-0x34(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x2,-0x38(%rbp)
jl     1767 <dfct+0x617>
mov    -0x38(%rbp),%edi
mov    -0x18(%rbp),%rsi
mov    -0x44(%rbp),%edx
mov    -0x28(%rbp),%rcx
movslq -0x40(%rbp),%rax
shl    $0x3,%rax
add    %rax,%rcx
call   1030 <dctsub@plt>
cmpl   $0x4,-0x38(%rbp)
jle    159e <dfct+0x44e>
mov    -0x38(%rbp),%edi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
add    $0x8,%rdx
mov    -0x40(%rbp),%ecx
mov    -0x28(%rbp),%r8
call   1070 <cftfsub@plt>
mov    -0x38(%rbp),%edi
mov    -0x18(%rbp),%rsi
mov    -0x44(%rbp),%edx
mov    -0x28(%rbp),%rcx
movslq -0x40(%rbp),%rax
shl    $0x3,%rax
add    %rax,%rcx
call   1050 <rftfsub@plt>
jmp    15c8 <dfct+0x478>
cmpl   $0x4,-0x38(%rbp)
jne    15c3 <dfct+0x473>
mov    -0x38(%rbp),%edi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
add    $0x8,%rdx
mov    -0x40(%rbp),%ecx
mov    -0x28(%rbp),%r8
call   1070 <cftfsub@plt>
jmp    15c8 <dfct+0x478>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
subsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
addsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x30(%rbp)
movl   $0x2,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    169f <dfct+0x54f>
mov    -0x34(%rbp),%eax
shl    $0x2,%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
sub    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    1617 <dfct+0x4c7>
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    173d <dfct+0x5ed>
mov    -0x38(%rbp),%eax
sub    -0x2c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x30(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x30(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    16b8 <dfct+0x568>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    152e <dfct+0x3de>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x18(%rbp),%rax
subsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x4(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x18(%rbp),%rax
addsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    17ed <dfct+0x69d>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dfct>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %r8,%r13
mov    %rcx,%r12
mov    %rdx,%rbx
mov    %rsi,%r14
mov    %edi,%r15d
mov    (%rcx),%eax
mov    %rax,0x10(%rsp)
lea    0x0(,%rax,8),%eax
cmp    %edi,%eax
jge    1195 <dfct+0x45>
mov    %r15d,%edi
sar    $0x3,%edi
mov    %rdi,0x10(%rsp)
mov    %r12,%rsi
mov    %r13,%rdx
call   1040 <makewt@plt>
mov    0x4(%r12),%eax
mov    %rax,0x28(%rsp)
add    %eax,%eax
mov    %r15d,%ebp
sar    %ebp
cmp    %r15d,%eax
jge    11cc <dfct+0x7c>
movslq 0x10(%rsp),%rax
lea    0x0(,%rax,8),%rdx
add    %r13,%rdx
mov    %ebp,%edi
mov    %r12,%rsi
call   1060 <makect@plt>
mov    %ebp,%eax
mov    %rax,0x28(%rsp)
movslq %ebp,%rdi
movsd  (%r14,%rdi,8),%xmm0
movsd  (%r14),%xmm1
movslq %r15d,%r10
movsd  (%r14,%r10,8),%xmm2
movapd %xmm1,%xmm3
addsd  %xmm2,%xmm3
subsd  %xmm2,%xmm1
movsd  %xmm1,(%r14)
movapd %xmm3,%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rbx)
addsd  %xmm0,%xmm3
movsd  %xmm3,(%rbx,%rdi,8)
cmp    $0x3,%r15d
jl     1374 <dfct+0x224>
mov    %rbp,0x8(%rsp)
mov    %r12,0x30(%rsp)
mov    %r15d,%r12d
shr    $0x2,%r12d
mov    %r15,0x18(%rsp)
cmp    $0x8,%r15d
jb     12d4 <dfct+0x184>
cmp    $0x3,%r12d
mov    $0x2,%ebp
cmovae %r12d,%ebp
lea    (%r14,%r10,8),%rax
mov    $0x1,%ecx
mov    $0x1,%edx
sub    %rdi,%rdx
lea    (%r14,%rdi,8),%rsi
add    $0xfffffffffffffff8,%rsi
lea    (%rbx,%rdi,8),%r11
add    $0xfffffffffffffff8,%r11
lea    -0x8(,%rbp,8),%r9
ff
xor    %ebp,%ebp
nopl   0x0(%rax,%rax,1)
movsd  (%r14,%rcx,8),%xmm0
movsd  -0x8(%rax,%rbp,1),%xmm1
movapd %xmm0,%xmm2
subsd  %xmm1,%xmm2
addsd  %xmm1,%xmm0
movsd  (%rsi,%rbp,1),%xmm1
movsd  (%rax,%rdx,8),%xmm3
movapd %xmm1,%xmm4
subsd  %xmm3,%xmm4
addsd  %xmm3,%xmm1
movsd  %xmm2,(%r14,%rcx,8)
movsd  %xmm4,(%rsi,%rbp,1)
movapd %xmm0,%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,(%rbx,%rcx,8)
addsd  %xmm0,%xmm1
movsd  %xmm1,(%r11,%rbp,1)
add    $0x1,%rcx
add    $0xfffffffffffffff8,%rbp
add    $0x1,%rdx
mov    %r9,%rdi
add    %rbp,%rdi
jne    1270 <dfct+0x120>
mov    %r10,0x48(%rsp)
mov    %r12d,%eax
movsd  (%r14,%rax,8),%xmm0
mov    0x18(%rsp),%rcx
sub    %r12d,%ecx
movslq %ecx,%rcx
addsd  (%r14,%rcx,8),%xmm0
movsd  %xmm0,(%rbx,%rax,8)
movsd  (%r14,%rax,8),%xmm0
subsd  (%r14,%rcx,8),%xmm0
movsd  %xmm0,(%r14,%rax,8)
mov    0x10(%rsp),%r15
movslq %r15d,%rax
lea    0x0(%r13,%rax,8),%rbp
mov    0x8(%rsp),%rdi
mov    %r14,%rsi
mov    0x28(%rsp),%rdx
mov    %rbp,%rcx
call   1030 <dctsub@plt>
cmpl   $0xa,0x18(%rsp)
mov    %rbp,0x40(%rsp)
mov    %r13,0x38(%rsp)
jl     1393 <dfct+0x243>
mov    %r15,%rcx
mov    0x30(%rsp),%r15
lea    0x8(%r15),%rdx
mov    0x8(%rsp),%rbp
mov    %ebp,%edi
mov    %r14,%rsi
mov    %r13,%r8
call   1070 <cftfsub@plt>
mov    %ebp,%edi
mov    %r14,%rsi
mov    0x28(%rsp),%r13
mov    %r13d,%edx
mov    0x40(%rsp),%rcx
call   1050 <rftfsub@plt>
jmp    13bf <dfct+0x26f>
movsd  (%r14),%xmm0
movsd  %xmm0,0x8(%r14)
movsd  (%rbx),%xmm0
movsd  %xmm0,0x10(%r14)
movsd  0x8(%rbx),%xmm0
jmp    1845 <dfct+0x6f5>
cmpl   $0x4,0x8(%rsp)
mov    0x30(%rsp),%r15
mov    0x28(%rsp),%r13
jne    13bf <dfct+0x26f>
lea    0x8(%r15),%rdx
mov    $0x4,%edi
mov    %r14,%rsi
mov    0x10(%rsp),%rcx
mov    0x38(%rsp),%r8
call   1070 <cftfsub@plt>
movsd  (%r14),%xmm0
subsd  0x8(%r14),%xmm0
mov    0x18(%rsp),%rcx
lea    -0x1(%rcx),%eax
movsd  %xmm0,(%r14,%rax,8)
movsd  (%r14),%xmm0
addsd  0x8(%r14),%xmm0
movsd  %xmm0,0x8(%r14)
cmp    $0x8,%ecx
jl     1438 <dfct+0x2e8>
mov    0x8(%rsp),%rcx
mov    %ecx,%eax
add    $0x2,%eax
add    %ecx,%ecx
add    $0xfffffffb,%ecx
nopl   (%rax)
lea    -0x4(%rax),%edx
movsd  (%r14,%rdx,8),%xmm0
lea    -0x3(%rax),%edx
movsd  (%r14,%rdx,8),%xmm1
addsd  %xmm0,%xmm1
lea    0x2(%rcx),%esi
movsd  %xmm1,(%r14,%rsi,8)
subsd  (%r14,%rdx,8),%xmm0
mov    %ecx,%edx
movsd  %xmm0,(%r14,%rdx,8)
add    $0xfffffffe,%eax
add    $0xfffffffc,%ecx
cmp    $0x5,%eax
jg     1400 <dfct+0x2b0>
mov    $0x2,%eax
cmpl   $0x8,0x18(%rsp)
jb     181c <dfct+0x6cc>
add    $0x8,%r15
lea    0x8(%rbx),%rax
mov    %rax,0x50(%rsp)
movl   $0x2,0x8(%rsp)
mov    %r15,0x30(%rsp)
jmp    1495 <dfct+0x345>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    (%r12,%r9,1),%eax
movsd  (%rbx,%rax,8),%xmm0
mov    %r12d,%eax
movsd  %xmm0,(%rbx,%rax,8)
cmp    $0x3,%r9d
mov    0x30(%rsp),%r15
mov    0x28(%rsp),%r13
jbe    1817 <dfct+0x6c7>
mov    %r12d,%edi
mov    %rbx,%rsi
mov    %r13d,%edx
mov    0x40(%rsp),%rbp
mov    %rbp,%rcx
call   1030 <dctsub@plt>
cmp    $0x5,%r12d
jb     14f0 <dfct+0x3a0>
mov    %r12d,%edi
mov    %rbx,%rsi
mov    %r15,%rdx
mov    0x10(%rsp),%rcx
mov    0x38(%rsp),%r8
call   1070 <cftfsub@plt>
mov    %r12d,%edi
mov    %rbx,%rsi
mov    %r13d,%edx
mov    %rbp,%rcx
call   1050 <rftfsub@plt>
mov    0x18(%rsp),%rbp
mov    0x8(%rsp),%r13d
jmp    1520 <dfct+0x3d0>
cs nopw 0x0(%rax,%rax,1)
cmp    $0x4,%r12d
mov    0x18(%rsp),%rbp
mov    0x8(%rsp),%r13d
mov    %r12,%r9
jne    1523 <dfct+0x3d3>
mov    $0x4,%edi
mov    %rbx,%rsi
mov    %r15,%rdx
mov    0x10(%rsp),%rcx
mov    0x38(%rsp),%r8
mov    %r9,%r12
call   1070 <cftfsub@plt>
mov    %r12,%r9
movsd  (%rbx),%xmm0
subsd  0x8(%rbx),%xmm0
mov    %ebp,%eax
sub    %r13d,%eax
cltq
movsd  %xmm0,(%r14,%rax,8)
movsd  (%rbx),%xmm0
addsd  0x8(%rbx),%xmm0
movslq %r13d,%rax
movsd  %xmm0,(%r14,%rax,8)
mov    %r9d,%ecx
cmp    $0x3,%r9d
jb     15ac <dfct+0x45c>
lea    0x0(,%rax,4),%edx
movslq %edx,%rbp
lea    (%r14,%rax,8),%rdx
shl    $0x3,%rax
mov    %r14,%rsi
sub    %rax,%rsi
mov    $0x2,%edi
mov    %rbp,%rax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%rbx,%rdi,8),%xmm0
subsd  0x8(%rbx,%rdi,8),%xmm0
movsd  %xmm0,(%rsi,%rax,8)
movsd  (%rbx,%rdi,8),%xmm0
addsd  0x8(%rbx,%rdi,8),%xmm0
movsd  %xmm0,(%rdx,%rax,8)
add    $0x2,%rdi
add    %rbp,%rax
cmp    %rcx,%rdi
jb     1580 <dfct+0x430>
add    %r13d,%r13d
mov    %r13d,0x8(%rsp)
mov    %r9d,%r12d
shr    %r12d
cmp    $0x1,%r9d
jbe    1806 <dfct+0x6b6>
cmp    $0x2,%r12d
mov    $0x1,%esi
cmovae %r12d,%esi
cmp    $0x2,%esi
jae    16a0 <dfct+0x550>
xor    %eax,%eax
mov    %rax,%rdx
test   $0x1,%sil
je     1617 <dfct+0x4c7>
mov    %rcx,%rdx
sub    %rax,%rdx
lea    (%rdx,%rcx,1),%rdi
movsd  (%rbx,%rdi,8),%xmm0
lea    (%rax,%rcx,1),%rbp
movsd  (%rbx,%rbp,8),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rbx,%rax,8)
addsd  (%rbx,%rdi,8),%xmm1
movsd  %xmm1,(%rbx,%rdx,8)
mov    %rax,%rdx
or     $0x1,%rdx
not    %rax
add    %rsi,%rax
je     1470 <dfct+0x320>
lea    (%rdx,%rcx,1),%rax
add    $0x1,%rax
mov    %rcx,%rdi
sub    %rdx,%rdi
shl    $0x4,%rcx
lea    0x0(,%rdx,8),%rbp
sub    %rbp,%rcx
movsd  (%rbx,%rcx,1),%xmm0
movsd  -0x8(%rbx,%rax,8),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rbx,%rdx,8)
addsd  (%rbx,%rcx,1),%xmm1
movsd  %xmm1,(%rbx,%rdi,8)
movsd  -0x8(%rbx,%rcx,1),%xmm0
movsd  (%rbx,%rax,8),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rbx,%rdx,8)
addsd  -0x8(%rbx,%rcx,1),%xmm1
movsd  %xmm1,-0x8(%rbx,%rdi,8)
add    $0x2,%rdx
add    $0x2,%rax
add    $0xfffffffffffffffe,%rdi
add    $0xfffffffffffffff0,%rcx
cmp    %rdx,%rsi
jne    1640 <dfct+0x4f0>
jmp    1470 <dfct+0x320>
nopl   0x0(%rax)
lea    -0x1(%rsi),%rax
mov    $0x8,%edx
mul    %rdx
lea    (%rbx,%rcx,8),%r8
seto   %dl
mov    %r8,%rdi
sub    %rax,%rdi
cmp    %r8,%rdi
ja     15da <dfct+0x48a>
test   %dl,%dl
jne    15da <dfct+0x48a>
mov    %rcx,%rbp
shl    $0x4,%rbp
lea    (%rbx,%rbp,1),%r10
mov    %r10,%rdi
sub    %rax,%rdi
cmp    %r10,%rdi
ja     15da <dfct+0x48a>
mov    $0x0,%eax
test   %dl,%dl
jne    15dc <dfct+0x48c>
mov    %r9,0x20(%rsp)
mov    0x50(%rsp),%rdx
cmp    %rbx,%rdx
seta   0x4(%rsp)
lea    (%rbx,%rsi,8),%rdi
lea    (%rcx,%rsi,1),%rax
lea    (%rbx,%rax,8),%r15
mov    %rcx,%rax
sub    %rsi,%rax
lea    (%rdx,%rax,8),%r9
lea    (%rdx,%rcx,8),%r13
lea    (%rcx,%rcx,1),%rax
sub    %rsi,%rax
add    %rdx,%rbp
cmp    %rbx,%r15
seta   0x7(%rsp)
lea    (%rdx,%rax,8),%rdx
cmp    %rdi,%r8
setb   0x6(%rsp)
cmp    %rbx,%r13
seta   %al
cmp    %rdi,%r9
setb   0x5(%rsp)
cmp    %rbx,%rbp
seta   %r11b
cmp    %rdi,%rdx
setb   %dil
cmp    %r15,%r9
setb   %r15b
cmp    %rbp,%r9
setb   %r9b
cmp    %r13,%rdx
setb   %bpl
mov    0x6(%rsp),%dl
test   %dl,0x7(%rsp)
jne    17fa <dfct+0x6aa>
and    0x5(%rsp),%al
jne    17fa <dfct+0x6aa>
and    %dil,%r11b
jne    17fa <dfct+0x6aa>
and    %r15b,0x4(%rsp)
jne    17fa <dfct+0x6aa>
mov    $0x0,%eax
and    %bpl,%r9b
mov    0x20(%rsp),%r9
jne    15dc <dfct+0x48c>
mov    %esi,%eax
and    $0x1ffffffe,%eax
mov    $0xfffffffffffffff8,%rbp
xor    %edx,%edx
nop
movupd (%r10,%rbp,1),%xmm0
shufpd $0x1,%xmm0,%xmm0
movupd (%r8,%rdx,8),%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,(%rbx,%rdx,8)
movupd (%r10,%rbp,1),%xmm0
shufpd $0x1,%xmm1,%xmm1
addpd  %xmm0,%xmm1
movupd %xmm1,(%r8,%rbp,1)
add    $0x2,%rdx
add    $0xfffffffffffffff0,%rbp
cmp    %rdx,%rax
jne    17b0 <dfct+0x660>
cmp    %rsi,%rax
je     1470 <dfct+0x320>
jmp    15dc <dfct+0x48c>
xor    %eax,%eax
mov    0x20(%rsp),%r9
jmp    15dc <dfct+0x48c>
add    %r12d,%r9d
movsd  (%rbx,%r9,8),%xmm0
mov    %r12d,%eax
movsd  %xmm0,(%rbx,%rax,8)
movslq 0x8(%rsp),%rax
movsd  (%rbx),%xmm0
movsd  %xmm0,(%r14,%rax,8)
movsd  0x10(%rbx),%xmm0
subsd  0x8(%rbx),%xmm0
mov    0x48(%rsp),%rax
movsd  %xmm0,(%r14,%rax,8)
movsd  0x10(%rbx),%xmm0
addsd  0x8(%rbx),%xmm0
movsd  %xmm0,(%r14)
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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