#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*/ passf(int *, int, int, int, int, double *, double *,
                         double *, double *, double *, double const *, int);
int /*<<< orphan*/ passf2(int, int, double *, double *, double const *, int);
int /*<<< orphan*/ passf3(int, int, double *, double *, double const *,
                          double const *, int);
int /*<<< orphan*/ passf4(int, int, double *, double *, double const *,
                          double const *, double const *, int);
int /*<<< orphan*/ passf5(int, int, double *, double *, double const *,
                          double const *, double const *, double const *, int);
void cfftf1(int n, double c[], double ch[], const double wa[], const int ifac[],
            int isign) {
  int idot, i;
  int k1, l1, l2;
  int na, nf, ip, iw, ix2, ix3, ix4, nac, ido, idl1;
  nf = ifac[1];
  na = 0;
  l1 = 1;
  iw = 0;
  for (k1 = 2; k1 <= nf + 1; k1++) {
    ip = ifac[k1];
    l2 = ip * l1;
    ido = n / l2;
    idot = ido + ido;
    idl1 = idot * l1;
    if (ip == 4) {
      ix2 = iw + idot;
      ix3 = ix2 + idot;
      if (na == 0)
        passf4(idot, l1, c, ch, &wa[iw], &wa[ix2], &wa[ix3], isign);
      else
        passf4(idot, l1, ch, c, &wa[iw], &wa[ix2], &wa[ix3], isign);
      na = 1 - na;
    } else if (ip == 2) {
      if (na == 0)
        passf2(idot, l1, c, ch, &wa[iw], isign);
      else
        passf2(idot, l1, ch, c, &wa[iw], isign);
      na = 1 - na;
    } else if (ip == 3) {
      ix2 = iw + idot;
      if (na == 0)
        passf3(idot, l1, c, ch, &wa[iw], &wa[ix2], isign);
      else
        passf3(idot, l1, ch, c, &wa[iw], &wa[ix2], isign);
      na = 1 - na;
    } else if (ip == 5) {
      ix2 = iw + idot;
      ix3 = ix2 + idot;
      ix4 = ix3 + idot;
      if (na == 0)
        passf5(idot, l1, c, ch, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign);
      else
        passf5(idot, l1, ch, c, &wa[iw], &wa[ix2], &wa[ix3], &wa[ix4], isign);
      na = 1 - na;
    } else {
      if (na == 0)
        passf(&nac, idot, ip, l1, idl1, c, c, c, ch, ch, &wa[iw], isign);
      else
        passf(&nac, idot, ip, l1, idl1, ch, ch, ch, c, c, &wa[iw], isign);
      if (nac != 0)
        na = 1 - na;
    }
    l1 = l2;
    iw += (ip - 1) * idot;
  }
  if (na == 0)
    return;
  for (i = 0; i < 2 * n; i++)
    c[i] = ch[i];
}


x86 assembly (clang, -O0):
<cfftf1>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %rbx
sub    $0x98,%rsp
mov    %edi,-0x1c(%rbp)
mov    %rsi,-0x28(%rbp)
mov    %rdx,-0x30(%rbp)
mov    %rcx,-0x38(%rbp)
mov    %r8,-0x40(%rbp)
mov    %r9d,-0x44(%rbp)
mov    -0x40(%rbp),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x60(%rbp)
movl   $0x0,-0x5c(%rbp)
movl   $0x1,-0x54(%rbp)
movl   $0x0,-0x68(%rbp)
movl   $0x2,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    -0x60(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jg     15d7 <cfftf1+0x487>
mov    -0x40(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
imul   -0x54(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x1c(%rbp),%eax
cltd
idivl  -0x58(%rbp)
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
add    -0x7c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
imul   -0x54(%rbp),%eax
mov    %eax,-0x80(%rbp)
cmpl   $0x4,-0x64(%rbp)
jne    12b4 <cfftf1+0x164>
mov    -0x68(%rbp),%eax
add    -0x48(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
add    -0x48(%rbp),%eax
mov    %eax,-0x70(%rbp)
cmpl   $0x0,-0x5c(%rbp)
jne    1259 <cfftf1+0x109>
mov    -0x48(%rbp),%edi
mov    -0x54(%rbp),%esi
mov    -0x28(%rbp),%rdx
mov    -0x30(%rbp),%rcx
mov    -0x38(%rbp),%r8
movslq -0x68(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r8
mov    -0x38(%rbp),%r9
movslq -0x6c(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r9
mov    -0x38(%rbp),%r10
movslq -0x70(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r10
mov    -0x44(%rbp),%eax
mov    %r10,(%rsp)
mov    %eax,0x8(%rsp)
call   1040 <passf4@plt>
jmp    12a4 <cfftf1+0x154>
mov    -0x48(%rbp),%edi
mov    -0x54(%rbp),%esi
mov    -0x30(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x38(%rbp),%r8
movslq -0x68(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r8
mov    -0x38(%rbp),%r9
movslq -0x6c(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r9
mov    -0x38(%rbp),%r10
movslq -0x70(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r10
mov    -0x44(%rbp),%eax
mov    %r10,(%rsp)
mov    %eax,0x8(%rsp)
call   1040 <passf4@plt>
mov    $0x1,%eax
sub    -0x5c(%rbp),%eax
mov    %eax,-0x5c(%rbp)
jmp    15b3 <cfftf1+0x463>
cmpl   $0x2,-0x64(%rbp)
jne    1329 <cfftf1+0x1d9>
cmpl   $0x0,-0x5c(%rbp)
jne    12f3 <cfftf1+0x1a3>
mov    -0x48(%rbp),%edi
mov    -0x54(%rbp),%esi
mov    -0x28(%rbp),%rdx
mov    -0x30(%rbp),%rcx
mov    -0x38(%rbp),%r8
movslq -0x68(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r8
mov    -0x44(%rbp),%r9d
call   1050 <passf2@plt>
jmp    1319 <cfftf1+0x1c9>
mov    -0x48(%rbp),%edi
mov    -0x54(%rbp),%esi
mov    -0x30(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x38(%rbp),%r8
movslq -0x68(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r8
mov    -0x44(%rbp),%r9d
call   1050 <passf2@plt>
mov    $0x1,%eax
sub    -0x5c(%rbp),%eax
mov    %eax,-0x5c(%rbp)
jmp    15ae <cfftf1+0x45e>
cmpl   $0x3,-0x64(%rbp)
jne    13c9 <cfftf1+0x279>
mov    -0x68(%rbp),%eax
add    -0x48(%rbp),%eax
mov    %eax,-0x6c(%rbp)
cmpl   $0x0,-0x5c(%rbp)
jne    1382 <cfftf1+0x232>
mov    -0x48(%rbp),%edi
mov    -0x54(%rbp),%esi
mov    -0x28(%rbp),%rdx
mov    -0x30(%rbp),%rcx
mov    -0x38(%rbp),%r8
movslq -0x68(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r8
mov    -0x38(%rbp),%r9
movslq -0x6c(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r9
mov    -0x44(%rbp),%eax
mov    %eax,(%rsp)
call   1060 <passf3@plt>
jmp    13b9 <cfftf1+0x269>
mov    -0x48(%rbp),%edi
mov    -0x54(%rbp),%esi
mov    -0x30(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x38(%rbp),%r8
movslq -0x68(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r8
mov    -0x38(%rbp),%r9
movslq -0x6c(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r9
mov    -0x44(%rbp),%eax
mov    %eax,(%rsp)
call   1060 <passf3@plt>
mov    $0x1,%eax
sub    -0x5c(%rbp),%eax
mov    %eax,-0x5c(%rbp)
jmp    15a9 <cfftf1+0x459>
cmpl   $0x5,-0x64(%rbp)
jne    14cb <cfftf1+0x37b>
mov    -0x68(%rbp),%eax
add    -0x48(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
add    -0x48(%rbp),%eax
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
add    -0x48(%rbp),%eax
mov    %eax,-0x74(%rbp)
cmpl   $0x0,-0x5c(%rbp)
jne    145c <cfftf1+0x30c>
mov    -0x48(%rbp),%edi
mov    -0x54(%rbp),%esi
mov    -0x28(%rbp),%rdx
mov    -0x30(%rbp),%rcx
mov    -0x38(%rbp),%r8
movslq -0x68(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r8
mov    -0x38(%rbp),%r9
movslq -0x6c(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r9
mov    -0x38(%rbp),%r11
movslq -0x70(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r11
mov    -0x38(%rbp),%r10
movslq -0x74(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r10
mov    -0x44(%rbp),%eax
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %eax,0x10(%rsp)
call   1070 <passf5@plt>
jmp    14bb <cfftf1+0x36b>
mov    -0x48(%rbp),%edi
mov    -0x54(%rbp),%esi
mov    -0x30(%rbp),%rdx
mov    -0x28(%rbp),%rcx
mov    -0x38(%rbp),%r8
movslq -0x68(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r8
mov    -0x38(%rbp),%r9
movslq -0x6c(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r9
mov    -0x38(%rbp),%r11
movslq -0x70(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r11
mov    -0x38(%rbp),%r10
movslq -0x74(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r10
mov    -0x44(%rbp),%eax
mov    %r11,(%rsp)
mov    %r10,0x8(%rsp)
mov    %eax,0x10(%rsp)
call   1070 <passf5@plt>
mov    $0x1,%eax
sub    -0x5c(%rbp),%eax
mov    %eax,-0x5c(%rbp)
jmp    15a4 <cfftf1+0x454>
cmpl   $0x0,-0x5c(%rbp)
jne    1532 <cfftf1+0x3e2>
mov    -0x48(%rbp),%esi
mov    -0x64(%rbp),%edx
mov    -0x54(%rbp),%ecx
mov    -0x80(%rbp),%r8d
mov    -0x28(%rbp),%r9
mov    -0x28(%rbp),%r15
mov    -0x28(%rbp),%r14
mov    -0x30(%rbp),%rbx
mov    -0x30(%rbp),%r11
mov    -0x38(%rbp),%r10
movslq -0x68(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r10
mov    -0x44(%rbp),%eax
lea    -0x78(%rbp),%rdi
mov    %r15,(%rsp)
mov    %r14,0x8(%rsp)
mov    %rbx,0x10(%rsp)
mov    %r11,0x18(%rsp)
mov    %r10,0x20(%rsp)
mov    %eax,0x28(%rsp)
call   1030 <passf@plt>
jmp    158a <cfftf1+0x43a>
mov    -0x48(%rbp),%esi
mov    -0x64(%rbp),%edx
mov    -0x54(%rbp),%ecx
mov    -0x80(%rbp),%r8d
mov    -0x30(%rbp),%r9
mov    -0x30(%rbp),%r15
mov    -0x30(%rbp),%r14
mov    -0x28(%rbp),%rbx
mov    -0x28(%rbp),%r11
mov    -0x38(%rbp),%r10
movslq -0x68(%rbp),%rax
shl    $0x3,%rax
add    %rax,%r10
mov    -0x44(%rbp),%eax
lea    -0x78(%rbp),%rdi
mov    %r15,(%rsp)
mov    %r14,0x8(%rsp)
mov    %rbx,0x10(%rsp)
mov    %r11,0x18(%rsp)
mov    %r10,0x20(%rsp)
mov    %eax,0x28(%rsp)
call   1030 <passf@plt>
cmpl   $0x0,-0x78(%rbp)
je     159f <cfftf1+0x44f>
mov    $0x1,%eax
sub    -0x5c(%rbp),%eax
mov    %eax,-0x5c(%rbp)
jmp    15a4 <cfftf1+0x454>
jmp    15a9 <cfftf1+0x459>
jmp    15ae <cfftf1+0x45e>
jmp    15b3 <cfftf1+0x463>
mov    -0x58(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x64(%rbp),%eax
sub    $0x1,%eax
imul   -0x48(%rbp),%eax
add    -0x68(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    119d <cfftf1+0x4d>
cmpl   $0x0,-0x5c(%rbp)
jne    15e6 <cfftf1+0x496>
jmp    1626 <cfftf1+0x4d6>
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    -0x1c(%rbp),%ecx
shl    $0x1,%ecx
cmp    %ecx,%eax
jge    1626 <cfftf1+0x4d6>
mov    -0x30(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    15ed <cfftf1+0x49d>
add    $0x98,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<cfftf1>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r9,0x8(%rsp)
mov    %rcx,0x28(%rsp)
mov    %edi,0x14(%rsp)
mov    %r8,0x40(%rsp)
mov    0x4(%r8),%eax
test   %eax,%eax
jle    1584 <cfftf1+0x434>
mov    %rdx,%r11
mov    %rsi,(%rsp)
add    $0x2,%rax
mov    %rax,0x18(%rsp)
xor    %r13d,%r13d
mov    $0x1,%ebx
mov    $0x2,%r14d
xor    %ebp,%ebp
mov    %rdx,0x20(%rsp)
jmp    121e <cfftf1+0xce>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    (%r12,%r13,1),%eax
lea    (%rax,%r12,1),%edx
movslq %r13d,%rsi
mov    0x28(%rsp),%rdi
lea    (%rdi,%rsi,8),%r8
cltq
lea    (%rdi,%rax,8),%r9
movslq %edx,%rax
lea    (%rdi,%rax,8),%rax
mov    %r12d,%edi
mov    %ecx,%esi
test   %ebp,%ebp
je     134f <cfftf1+0x1ff>
mov    %r11,%rdx
mov    (%rsp),%rcx
push   0x8(%rsp)
push   %rax
call   1040 <passf4@plt>
add    $0x10,%rsp
mov    $0x1,%eax
sub    %ebp,%eax
mov    %eax,%ebp
mov    0x20(%rsp),%r11
mov    0x18(%rsp),%rcx
add    $0xffffffff,%r15d
imul   %r15d,%r12d
add    %r12d,%r13d
add    $0x1,%r14
cmp    %r14,%rcx
je     13e8 <cfftf1+0x298>
mov    %ebx,%ecx
mov    0x40(%rsp),%rax
mov    (%rax,%r14,4),%r15d
mov    %r15d,%ebx
imul   %ecx,%ebx
mov    0x14(%rsp),%eax
cltd
idiv   %ebx
mov    %eax,%r12d
add    %r12d,%r12d
lea    -0x2(%r15),%eax
cmp    $0x3,%eax
ja     1280 <cfftf1+0x130>
lea    0xdb4(%rip),%rdx
movslq (%rdx,%rax,4),%rax
add    %rdx,%rax
jmp    *%rax
movslq %r13d,%rax
mov    0x28(%rsp),%rdx
lea    (%rdx,%rax,8),%r8
mov    %r12d,%edi
mov    %ecx,%esi
test   %ebp,%ebp
je     135b <cfftf1+0x20b>
mov    %r11,%rdx
mov    (%rsp),%rcx
jmp    1362 <cfftf1+0x212>
nopw   0x0(%rax,%rax,1)
mov    %r12d,%r8d
imul   %ecx,%r8d
movslq %r13d,%rax
mov    0x28(%rsp),%rdx
lea    (%rdx,%rax,8),%rax
lea    0x34(%rsp),%rdi
mov    %r12d,%esi
mov    %r15d,%edx
test   %ebp,%ebp
je     1371 <cfftf1+0x221>
mov    %r11,%r9
push   0x8(%rsp)
push   %rax
mov    0x10(%rsp),%rax
push   %rax
push   %rax
push   %r11
push   %r11
jmp    1382 <cfftf1+0x232>
xchg   %ax,%ax
lea    (%r12,%r13,1),%eax
movslq %r13d,%rdx
mov    0x28(%rsp),%rsi
lea    (%rsi,%rdx,8),%r8
cltq
lea    (%rsi,%rax,8),%r9
sub    $0x8,%rsp
test   %ebp,%ebp
je     13a9 <cfftf1+0x259>
mov    %r12d,%edi
mov    %ecx,%esi
mov    %r11,%rdx
mov    0x8(%rsp),%rcx
jmp    13b6 <cfftf1+0x266>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    (%r12,%r13,1),%eax
lea    (%rax,%r12,1),%edx
lea    (%rdx,%r12,1),%esi
movslq %r13d,%rdi
mov    0x28(%rsp),%r10
lea    (%r10,%rdi,8),%r8
cltq
lea    (%r10,%rax,8),%r9
movslq %edx,%rax
lea    (%r10,%rax,8),%rax
mov    %rax,0x38(%rsp)
movslq %esi,%rax
lea    (%r10,%rax,8),%rax
sub    $0x8,%rsp
test   %ebp,%ebp
je     13c4 <cfftf1+0x274>
mov    %r12d,%edi
mov    %ecx,%esi
mov    %r11,%rdx
mov    0x8(%rsp),%rcx
jmp    13d1 <cfftf1+0x281>
mov    (%rsp),%rdx
mov    %r11,%rcx
jmp    11e5 <cfftf1+0x95>
mov    (%rsp),%rdx
mov    %r11,%rcx
mov    0x8(%rsp),%r9
call   1050 <passf2@plt>
jmp    11f3 <cfftf1+0xa3>
mov    (%rsp),%r9
push   0x8(%rsp)
push   %rax
push   %r11
push   %r11
push   %r9
push   %r9
call   1030 <passf@plt>
mov    0x48(%rsp),%rcx
mov    0x50(%rsp),%r11
add    $0x30,%rsp
mov    $0x1,%eax
sub    %ebp,%eax
cmpl   $0x0,0x34(%rsp)
cmovne %eax,%ebp
jmp    1206 <cfftf1+0xb6>
mov    %r12d,%edi
mov    %ecx,%esi
mov    0x8(%rsp),%rdx
mov    %r11,%rcx
push   0x10(%rsp)
call   1060 <passf3@plt>
jmp    11ef <cfftf1+0x9f>
mov    %r12d,%edi
mov    %ecx,%esi
mov    0x8(%rsp),%rdx
mov    %r11,%rcx
push   0x10(%rsp)
push   %rax
push   0x50(%rsp)
call   1070 <passf5@plt>
add    $0x20,%rsp
jmp    11f3 <cfftf1+0xa3>
test   %ebp,%ebp
mov    (%rsp),%rbx
je     1584 <cfftf1+0x434>
cmpl   $0x0,0x14(%rsp)
jle    1584 <cfftf1+0x434>
mov    0x14(%rsp),%ecx
add    %ecx,%ecx
cmp    $0x2,%ecx
mov    $0x1,%eax
cmovge %ecx,%eax
cmp    $0x4,%eax
jb     142f <cfftf1+0x2df>
lea    (%r11,%rax,8),%rcx
cmp    %rbx,%rcx
jbe    14b0 <cfftf1+0x360>
lea    (%rbx,%rax,8),%rcx
cmp    %r11,%rcx
jbe    14b0 <cfftf1+0x360>
xor    %ecx,%ecx
mov    %rcx,%rdx
not    %rdx
add    %rax,%rdx
mov    %rax,%rsi
and    $0x3,%rsi
je     1465 <cfftf1+0x315>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  (%r11,%rcx,8),%xmm0
movsd  %xmm0,(%rbx,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rsi
jne    1450 <cfftf1+0x300>
cmp    $0x3,%rdx
jb     1584 <cfftf1+0x434>
nop
movsd  (%r11,%rcx,8),%xmm0
movsd  %xmm0,(%rbx,%rcx,8)
movsd  0x8(%r11,%rcx,8),%xmm0
movsd  %xmm0,0x8(%rbx,%rcx,8)
movsd  0x10(%r11,%rcx,8),%xmm0
movsd  %xmm0,0x10(%rbx,%rcx,8)
movsd  0x18(%r11,%rcx,8),%xmm0
movsd  %xmm0,0x18(%rbx,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%rax
jne    1470 <cfftf1+0x320>
jmp    1584 <cfftf1+0x434>
mov    %eax,%ecx
and    $0x7ffffffc,%ecx
lea    -0x4(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x3,%edx
cmp    $0xc,%rdi
jae    14d6 <cfftf1+0x386>
xor    %edi,%edi
jmp    1540 <cfftf1+0x3f0>
and    $0xfffffffffffffffc,%rsi
xor    %edi,%edi
nopl   0x0(%rax)
movups (%r11,%rdi,8),%xmm0
movups 0x10(%r11,%rdi,8),%xmm1
movups %xmm0,(%rbx,%rdi,8)
movups %xmm1,0x10(%rbx,%rdi,8)
movups 0x20(%r11,%rdi,8),%xmm0
movups 0x30(%r11,%rdi,8),%xmm1
movups %xmm0,0x20(%rbx,%rdi,8)
movups %xmm1,0x30(%rbx,%rdi,8)
movups 0x40(%r11,%rdi,8),%xmm0
movups 0x50(%r11,%rdi,8),%xmm1
movups %xmm0,0x40(%rbx,%rdi,8)
movups %xmm1,0x50(%rbx,%rdi,8)
movups 0x60(%r11,%rdi,8),%xmm0
movups 0x70(%r11,%rdi,8),%xmm1
movups %xmm0,0x60(%rbx,%rdi,8)
movups %xmm1,0x70(%rbx,%rdi,8)
add    $0x10,%rdi
add    $0xfffffffffffffffc,%rsi
jne    14e0 <cfftf1+0x390>
test   %rdx,%rdx
je     157b <cfftf1+0x42b>
lea    (%rbx,%rdi,8),%rsi
add    $0x10,%rsi
lea    (%r11,%rdi,8),%rdi
add    $0x10,%rdi
shl    $0x5,%rdx
xor    %ebp,%ebp
nopl   0x0(%rax,%rax,1)
movups -0x10(%rdi,%rbp,1),%xmm0
movups (%rdi,%rbp,1),%xmm1
movups %xmm0,-0x10(%rsi,%rbp,1)
movups %xmm1,(%rsi,%rbp,1)
add    $0x20,%rbp
cmp    %rbp,%rdx
jne    1560 <cfftf1+0x410>
cmp    %rax,%rcx
jne    1431 <cfftf1+0x2e1>
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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