#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ bitrv2(int, int *, double *);
int /*<<< orphan*/ cftfsub(int, double *, double *);
int /*<<< orphan*/ dstsub(int, double *, int, double *);
int /*<<< orphan*/ makect(int, int *, double *);
int /*<<< orphan*/ makewt(int, int *, double *);
int /*<<< orphan*/ rftfsub(int, double *, int, double *);
void lsx_dfst(int n, double *a, double *t, int *ip, double *w) {
  int j, k, l, m, mh, nw, nc;
  double xr, xi, yr, yi;
  if (n > 262144)
    return;
  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);
  }
  if (n > 2) {
    m = n >> 1;
    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[0] = a[mh] - a[n - mh];
    a[mh] += a[n - mh];
    a[0] = a[m];
    dstsub(m, a, nc, w + nw);
    if (m > 4) {
      bitrv2(m, ip + 2, a);
      cftfsub(m, a, w);
      rftfsub(m, a, nc, w + nw);
    } else if (m == 4) {
      cftfsub(m, a, w);
    }
    a[n - 1] = a[1] - a[0];
    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) {
      dstsub(m, t, nc, w + nw);
      if (m > 4) {
        bitrv2(m, ip + 2, t);
        cftfsub(m, t, w);
        rftfsub(m, t, nc, w + nw);
      } else if (m == 4) {
        cftfsub(m, t, w);
      }
      a[n - l] = t[1] - t[0];
      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 = 1; j < mh; j++) {
        k = m - j;
        t[j] = t[m + k] + t[m + j];
        t[k] = t[m + k] - t[m + j];
      }
      t[0] = t[m + mh];
      m = mh;
    }
    a[l] = t[0];
  }
  a[0] = 0;
}


x86 assembly (clang, -O0):
<lsx_dfst>:
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)
cmpl   $0x40000,-0x4(%rbp)
jle    118d <lsx_dfst+0x2d>
jmp    1768 <lsx_dfst+0x608>
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    11c0 <lsx_dfst+0x60>
mov    -0x4(%rbp),%eax
sar    $0x3,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%edi
mov    -0x20(%rbp),%rsi
mov    -0x28(%rbp),%rdx
call   1030 <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    11ff <lsx_dfst+0x9f>
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   1070 <makect@plt>
cmpl   $0x2,-0x4(%rbp)
jle    175d <lsx_dfst+0x5fd>
mov    -0x4(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1327 <lsx_dfst+0x1c7>
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
addsd  (%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
subsd  (%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
addsd  (%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
subsd  (%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
addsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
subsd  -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    1222 <lsx_dfst+0xc2>
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
subsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
mov    -0x4(%rbp),%ecx
sub    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movsd  %xmm0,(%rax)
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   1060 <dstsub@plt>
cmpl   $0x4,-0x38(%rbp)
jle    13f6 <lsx_dfst+0x296>
mov    -0x38(%rbp),%edi
mov    -0x20(%rbp),%rsi
add    $0x8,%rsi
mov    -0x10(%rbp),%rdx
call   1050 <bitrv2@plt>
mov    -0x38(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x28(%rbp),%rdx
call   1080 <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   1040 <rftfsub@plt>
jmp    1415 <lsx_dfst+0x2b5>
cmpl   $0x4,-0x38(%rbp)
jne    1410 <lsx_dfst+0x2b0>
mov    -0x38(%rbp),%edi
mov    -0x10(%rbp),%rsi
mov    -0x28(%rbp),%rdx
call   1080 <cftfsub@plt>
jmp    1415 <lsx_dfst+0x2b5>
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  (%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     14f2 <lsx_dfst+0x392>
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
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%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    145b <lsx_dfst+0x2fb>
movl   $0x2,-0x34(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x2,-0x38(%rbp)
jl     1748 <lsx_dfst+0x5e8>
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   1060 <dstsub@plt>
cmpl   $0x4,-0x38(%rbp)
jle    1578 <lsx_dfst+0x418>
mov    -0x38(%rbp),%edi
mov    -0x20(%rbp),%rsi
add    $0x8,%rsi
mov    -0x18(%rbp),%rdx
call   1050 <bitrv2@plt>
mov    -0x38(%rbp),%edi
mov    -0x18(%rbp),%rsi
mov    -0x28(%rbp),%rdx
call   1080 <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   1040 <rftfsub@plt>
jmp    1597 <lsx_dfst+0x437>
cmpl   $0x4,-0x38(%rbp)
jne    1592 <lsx_dfst+0x432>
mov    -0x38(%rbp),%edi
mov    -0x18(%rbp),%rsi
mov    -0x28(%rbp),%rdx
call   1080 <cftfsub@plt>
jmp    1597 <lsx_dfst+0x437>
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x18(%rbp),%rax
subsd  (%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    1685 <lsx_dfst+0x525>
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
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%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
subsd  (%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    15e6 <lsx_dfst+0x486>
mov    -0x34(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jge    1723 <lsx_dfst+0x5c3>
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
addsd  (%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
subsd  (%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    169e <lsx_dfst+0x53e>
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x3c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    14ff <lsx_dfst+0x39f>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<lsx_dfst>:
cmp    $0x40000,%edi
jg     1880 <lsx_dfst+0x720>
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %r8,%r15
mov    %rcx,%r13
mov    %rdx,%rbx
mov    %rsi,%r14
mov    (%rcx),%ebp
lea    0x0(,%rbp,8),%eax
cmp    %edi,%eax
mov    %rdi,0x10(%rsp)
jge    11af <lsx_dfst+0x4f>
mov    %edi,%ebp
sar    $0x3,%ebp
mov    %ebp,%edi
mov    %r13,%rsi
mov    %r15,%rdx
call   1030 <makewt@plt>
mov    0x10(%rsp),%rdi
mov    0x4(%r13),%eax
mov    %rax,0x28(%rsp)
add    %eax,%eax
movslq %ebp,%r12
cmp    %edi,%eax
jge    11d9 <lsx_dfst+0x79>
sar    %edi
lea    (%r15,%r12,8),%rdx
mov    %rdi,0x28(%rsp)
mov    %r13,%rsi
call   1070 <makect@plt>
mov    0x10(%rsp),%rdi
cmp    $0x3,%edi
jl     186b <lsx_dfst+0x70b>
mov    %r13,0x38(%rsp)
mov    %r15,0x20(%rsp)
mov    %edi,%eax
shr    %eax
mov    %edi,%r15d
shr    $0x2,%r15d
mov    %rax,0x18(%rsp)
mov    %eax,%r8d
cmp    $0x8,%edi
jb     12b6 <lsx_dfst+0x156>
mov    %edi,%eax
cmp    $0x3,%r15d
mov    $0x2,%ebp
cmovae %r15d,%ebp
lea    (%r14,%rax,8),%r11
mov    $0x1,%edx
mov    $0x1,%esi
sub    %r8,%rsi
lea    (%r14,%r8,8),%rcx
add    $0xfffffffffffffff8,%rcx
lea    (%rbx,%r8,8),%r9
add    $0xfffffffffffffff8,%r9
lea    -0x8(,%rbp,8),%r10
ff
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%r14,%rdx,8),%xmm0
movsd  -0x8(%r11,%rax,1),%xmm1
movapd %xmm0,%xmm2
addsd  %xmm1,%xmm2
subsd  %xmm1,%xmm0
movsd  (%rcx,%rax,1),%xmm1
movsd  (%r11,%rsi,8),%xmm3
movapd %xmm1,%xmm4
addsd  %xmm3,%xmm4
subsd  %xmm3,%xmm1
movsd  %xmm2,(%r14,%rdx,8)
movsd  %xmm4,(%rcx,%rax,1)
movapd %xmm0,%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,(%rbx,%rdx,8)
subsd  %xmm1,%xmm0
movsd  %xmm0,(%r9,%rax,1)
add    $0x1,%rdx
add    $0xfffffffffffffff8,%rax
add    $0x1,%rsi
mov    %r10,%rbp
add    %rax,%rbp
jne    1250 <lsx_dfst+0xf0>
mov    %r15d,%eax
movsd  (%r14,%rax,8),%xmm0
mov    %edi,%ecx
sub    %r15d,%ecx
movslq %ecx,%rcx
subsd  (%r14,%rcx,8),%xmm0
movsd  %xmm0,(%rbx)
movsd  (%r14,%rcx,8),%xmm0
addsd  (%r14,%rax,8),%xmm0
movsd  %xmm0,(%r14,%rax,8)
movsd  (%r14,%r8,8),%xmm0
movsd  %xmm0,(%r14)
mov    0x20(%rsp),%rbp
lea    0x0(%rbp,%r12,8),%r13
mov    0x18(%rsp),%r12
mov    %r12d,%edi
mov    %r14,%rsi
mov    0x28(%rsp),%rdx
mov    %r13,%rcx
call   1060 <dstsub@plt>
mov    0x10(%rsp),%rdi
cmp    $0xa,%edi
mov    %r13,0x70(%rsp)
jl     1356 <lsx_dfst+0x1f6>
mov    0x38(%rsp),%rax
lea    0x8(%rax),%rsi
mov    %r12d,%edi
mov    %r14,%rdx
call   1050 <bitrv2@plt>
mov    %r12d,%edi
mov    %r14,%rsi
mov    %rbp,%rdx
call   1080 <cftfsub@plt>
mov    %r12d,%edi
mov    %r14,%rsi
mov    0x28(%rsp),%rdx
mov    %r13,%rcx
call   1040 <rftfsub@plt>
jmp    136e <lsx_dfst+0x20e>
cmp    $0x4,%r12d
jne    1373 <lsx_dfst+0x213>
mov    $0x4,%edi
mov    %r14,%rsi
mov    0x20(%rsp),%rdx
call   1080 <cftfsub@plt>
mov    0x10(%rsp),%rdi
lea    -0x1(%rdi),%eax
movsd  0x8(%r14),%xmm0
subsd  (%r14),%xmm0
movsd  %xmm0,(%r14,%rax,8)
movsd  (%r14),%xmm0
addsd  0x8(%r14),%xmm0
movsd  %xmm0,0x8(%r14)
cmp    $0x8,%edi
jb     1841 <lsx_dfst+0x6e1>
mov    %r12d,%eax
add    $0x2,%eax
lea    (%r12,%r12,1),%ecx
add    $0xfffffffb,%ecx
movapd 0xc4a(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
lea    -0x4(%rax),%edx
movsd  (%r14,%rdx,8),%xmm0
lea    -0x3(%rax),%edx
movapd %xmm0,%xmm1
subsd  (%r14,%rdx,8),%xmm1
lea    0x2(%rcx),%esi
movsd  %xmm1,(%r14,%rsi,8)
xorpd  %xmm2,%xmm0
subsd  (%r14,%rdx,8),%xmm0
mov    %ecx,%edx
movsd  %xmm0,(%r14,%rdx,8)
add    $0xfffffffe,%eax
add    $0xfffffffc,%ecx
cmp    $0x5,%eax
jg     13c0 <lsx_dfst+0x260>
cmp    $0x7,%edi
jbe    1841 <lsx_dfst+0x6e1>
addq   $0x8,0x38(%rsp)
lea    -0x8(%rbx),%rax
mov    %rax,0x18(%rsp)
lea    0x8(%rbx),%rax
mov    %rax,0x50(%rsp)
lea    -0x10(%rbx),%rax
mov    %rax,0x48(%rsp)
mov    $0x2,%r12d
jmp    1447 <lsx_dfst+0x2e7>
xchg   %ax,%ax
lea    (%r15,%r13,1),%eax
movsd  (%rbx,%rax,8),%xmm0
movsd  %xmm0,(%rbx)
cmp    $0x3,%r13d
jbe    1862 <lsx_dfst+0x702>
mov    %r15d,%r13d
mov    %r15d,%edi
mov    %rbx,%rsi
mov    0x28(%rsp),%rbp
mov    %ebp,%edx
mov    0x70(%rsp),%r15
mov    %r15,%rcx
call   1060 <dstsub@plt>
cmp    $0x5,%r13d
jb     14b0 <lsx_dfst+0x350>
mov    %r13d,%edi
mov    0x38(%rsp),%rsi
mov    %rbx,%rdx
call   1050 <bitrv2@plt>
mov    %r13d,%edi
mov    %rbx,%rsi
mov    0x20(%rsp),%rdx
call   1080 <cftfsub@plt>
mov    %r13d,%edi
mov    %rbx,%rsi
mov    %ebp,%edx
mov    %r15,%rcx
call   1040 <rftfsub@plt>
mov    0x10(%rsp),%rax
movapd 0xb59(%rip),%xmm1
jmp    14e2 <lsx_dfst+0x382>
nopl   0x0(%rax)
cmp    $0x4,%r13d
mov    0x10(%rsp),%rax
movapd 0xb3f(%rip),%xmm1
jne    14e2 <lsx_dfst+0x382>
mov    $0x4,%edi
mov    %rbx,%rsi
mov    0x20(%rsp),%rdx
call   1080 <cftfsub@plt>
movapd 0xb23(%rip),%xmm1
mov    0x10(%rsp),%rax
movsd  0x8(%rbx),%xmm0
subsd  (%rbx),%xmm0
sub    %r12d,%eax
cltq
movsd  %xmm0,(%r14,%rax,8)
movsd  (%rbx),%xmm0
addsd  0x8(%rbx),%xmm0
movslq %r12d,%rax
movsd  %xmm0,(%r14,%rax,8)
cmp    $0x2,%r13d
jbe    184c <lsx_dfst+0x6ec>
lea    0x0(,%r12,4),%edx
mov    %r13d,%ecx
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)
movsd  (%rbx,%rdi,8),%xmm0
xorpd  %xmm1,%xmm0
subsd  0x8(%rbx,%rdi,8),%xmm0
movsd  %xmm0,(%rsi,%rax,8)
movsd  (%rbx,%rdi,8),%xmm0
subsd  0x8(%rbx,%rdi,8),%xmm0
movsd  %xmm0,(%rdx,%rax,8)
add    $0x2,%rdi
add    %rbp,%rax
cmp    %rcx,%rdi
jb     1540 <lsx_dfst+0x3e0>
add    %r12d,%r12d
mov    %r13d,%r15d
shr    %r15d
cmp    $0x4,%r13d
jb     1855 <lsx_dfst+0x6f5>
cmp    $0x3,%r15d
mov    $0x2,%esi
cmovae %r15d,%esi
lea    -0x1(%rsi),%r8
mov    $0x1,%r11d
cmp    $0x2,%r8
jae    1680 <lsx_dfst+0x520>
mov    %r11,%rax
test   $0x1,%sil
jne    15e3 <lsx_dfst+0x483>
mov    %rcx,%rax
sub    %r11,%rax
lea    (%rax,%rcx,1),%rdx
mov    %rcx,%rdi
add    %r11,%rdi
movsd  (%rbx,%rdi,8),%xmm0
movsd  (%rbx,%rdx,8),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rbx,%r11,8)
movsd  (%rbx,%rdx,8),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rbx,%rax,8)
lea    0x1(%r11),%rax
not    %r11
add    %rsi,%r11
je     1430 <lsx_dfst+0x2d0>
lea    (%rax,%rcx,1),%rdx
add    $0x1,%rdx
mov    %rcx,%rdi
sub    %rax,%rdi
shl    $0x4,%rcx
lea    0x0(,%rax,8),%rbp
sub    %rbp,%rcx
nopl   0x0(%rax)
movsd  -0x8(%rbx,%rdx,8),%xmm0
movsd  (%rbx,%rcx,1),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rbx,%rax,8)
movsd  (%rbx,%rcx,1),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rbx,%rdi,8)
movsd  (%rbx,%rdx,8),%xmm0
movsd  -0x8(%rbx,%rcx,1),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rbx,%rax,8)
movsd  -0x8(%rbx,%rcx,1),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,-0x8(%rbx,%rdi,8)
add    $0x2,%rax
add    $0x2,%rdx
add    $0xfffffffffffffffe,%rdi
add    $0xfffffffffffffff0,%rcx
cmp    %rax,%rsi
jne    1610 <lsx_dfst+0x4b0>
jmp    1430 <lsx_dfst+0x2d0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    -0x2(%rsi),%rax
mov    $0x8,%edx
mul    %rdx
mov    0x18(%rsp),%rdx
lea    (%rdx,%rcx,8),%rbp
seto   %r9b
mov    %rbp,%rdx
sub    %rax,%rdx
cmp    %rbp,%rdx
ja     15a4 <lsx_dfst+0x444>
test   %r9b,%r9b
jne    15a4 <lsx_dfst+0x444>
mov    %rcx,%rdx
shl    $0x4,%rdx
mov    0x18(%rsp),%rdi
add    %rdx,%rdi
mov    %rdi,%rbp
sub    %rax,%rbp
cmp    %rdi,%rbp
ja     15a4 <lsx_dfst+0x444>
test   %r9b,%r9b
jne    15a4 <lsx_dfst+0x444>
mov    %r8,0x60(%rsp)
mov    %r12,0x40(%rsp)
lea    (%rcx,%rcx,1),%rdi
mov    0x50(%rsp),%r12
cmp    %rbx,%r12
setb   0xc(%rsp)
lea    (%rbx,%rsi,8),%r10
lea    (%r12,%rcx,8),%rax
mov    %rax,0x30(%rsp)
lea    (%rcx,%rsi,1),%rax
lea    (%rbx,%rax,8),%r9
mov    %r9,0x68(%rsp)
mov    %rcx,%rax
sub    %rsi,%rax
lea    (%r12,%rax,8),%r8
lea    (%rbx,%rcx,8),%rax
mov    %rdi,%rbp
mov    %rdi,0x58(%rsp)
sub    %rsi,%rdi
lea    (%r12,%rdi,8),%rbp
add    %rbx,%rdx
cmp    %r9,%r12
setb   0xf(%rsp)
cmp    %r10,0x30(%rsp)
setb   0x30(%rsp)
cmp    %rax,%r12
setb   %dil
cmp    %r10,%r8
setb   0xe(%rsp)
cmp    %rdx,%r12
setb   %r9b
cmp    %r10,%rbp
setb   0xd(%rsp)
cmp    0x68(%rsp),%r8
setb   %r12b
cmp    %rdx,%r8
setb   %r10b
cmp    %rax,%rbp
setb   %bpl
mov    0x30(%rsp),%dl
test   %dl,0xf(%rsp)
jne    1837 <lsx_dfst+0x6d7>
mov    %r12d,%r8d
and    0xe(%rsp),%dil
mov    0x40(%rsp),%r12
jne    15a4 <lsx_dfst+0x444>
and    0xd(%rsp),%r9b
jne    15a4 <lsx_dfst+0x444>
and    %r8b,0xc(%rsp)
jne    15a4 <lsx_dfst+0x444>
and    %bpl,%r10b
jne    15a4 <lsx_dfst+0x444>
mov    0x60(%rsp),%r10
mov    %r10,%r8
and    $0xfffffffffffffffe,%r8
mov    %r10,%r11
or     $0x1,%r11
mov    0x48(%rsp),%rdx
mov    0x58(%rsp),%rdi
lea    (%rdx,%rdi,8),%rdx
mov    %r8,%r9
neg    %r9
mov    $0x8,%edi
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movupd (%rdx,%rbp,8),%xmm0
shufpd $0x1,%xmm0,%xmm0
movupd (%rax,%rdi,1),%xmm1
addpd  %xmm1,%xmm0
movupd %xmm0,(%rbx,%rdi,1)
movupd (%rdx,%rbp,8),%xmm0
shufpd $0x1,%xmm1,%xmm1
subpd  %xmm1,%xmm0
movupd %xmm0,-0x10(%rax,%rbp,8)
add    $0xfffffffffffffffe,%rbp
add    $0x10,%rdi
cmp    %rbp,%r9
jne    17f0 <lsx_dfst+0x690>
cmp    %r8,%r10
je     1430 <lsx_dfst+0x2d0>
jmp    15a4 <lsx_dfst+0x444>
mov    0x40(%rsp),%r12
jmp    15a4 <lsx_dfst+0x444>
movsd  (%rbx),%xmm0
mov    $0x2,%eax
jmp    1865 <lsx_dfst+0x705>
add    %r12d,%r12d
mov    %r13d,%r15d
shr    %r15d
add    %r13d,%r15d
movsd  (%rbx,%r15,8),%xmm0
movsd  %xmm0,(%rbx)
movslq %r12d,%rax
movsd  %xmm0,(%r14,%rax,8)
movq   $0x0,(%r14)
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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