void passf3(int ido, int l1, const double cc[], double ch[], const double wa1[],
            const double wa2[], int isign) {
  static const double taur = -0.5;
  static const double taui = 0.866025403784439;
  int i, k, ac, ah;
  double ci2, ci3, di2, di3, cr2, cr3, dr2, dr3, ti2, tr2;
  if (ido == 2) {
    for (k = 1; k <= l1; k++) {
      ac = (3 * k - 2) * ido;
      tr2 = cc[ac] + cc[ac + ido];
      cr2 = cc[ac - ido] + taur * tr2;
      ah = (k - 1) * ido;
      ch[ah] = cc[ac - ido] + tr2;
      ti2 = cc[ac + 1] + cc[ac + ido + 1];
      ci2 = cc[ac - ido + 1] + taur * ti2;
      ch[ah + 1] = cc[ac - ido + 1] + ti2;
      cr3 = isign * taui * (cc[ac] - cc[ac + ido]);
      ci3 = isign * taui * (cc[ac + 1] - cc[ac + ido + 1]);
      ch[ah + l1 * ido] = cr2 - ci3;
      ch[ah + 2 * l1 * ido] = cr2 + ci3;
      ch[ah + l1 * ido + 1] = ci2 + cr3;
      ch[ah + 2 * l1 * ido + 1] = ci2 - cr3;
    }
  } else {
    for (k = 1; k <= l1; k++) {
      for (i = 0; i < ido - 1; i += 2) {
        ac = i + (3 * k - 2) * ido;
        tr2 = cc[ac] + cc[ac + ido];
        cr2 = cc[ac - ido] + taur * tr2;
        ah = i + (k - 1) * ido;
        ch[ah] = cc[ac - ido] + tr2;
        ti2 = cc[ac + 1] + cc[ac + ido + 1];
        ci2 = cc[ac - ido + 1] + taur * ti2;
        ch[ah + 1] = cc[ac - ido + 1] + ti2;
        cr3 = isign * taui * (cc[ac] - cc[ac + ido]);
        ci3 = isign * taui * (cc[ac + 1] - cc[ac + ido + 1]);
        dr2 = cr2 - ci3;
        dr3 = cr2 + ci3;
        di2 = ci2 + cr3;
        di3 = ci2 - cr3;
        ch[ah + l1 * ido + 1] = wa1[i] * di2 + isign * wa1[i + 1] * dr2;
        ch[ah + l1 * ido] = wa1[i] * dr2 - isign * wa1[i + 1] * di2;
        ch[ah + 2 * l1 * ido + 1] = wa2[i] * di3 + isign * wa2[i + 1] * dr3;
        ch[ah + 2 * l1 * ido] = wa2[i] * dr3 - isign * wa2[i + 1] * di3;
      }
    }
  }
}


x86 assembly (clang, -O0):
<passf3>:
push   %rbp
mov    %rsp,%rbp
push   %rax
mov    0x10(%rbp),%eax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
cmpl   $0x2,-0x4(%rbp)
jne    137b <passf3+0x27b>
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x8(%rbp),%eax
jg     1376 <passf3+0x276>
imul   $0x3,-0x30(%rbp),%eax
sub    $0x2,%eax
imul   -0x4(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    -0x4(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x88(%rbp),%xmm0
ff
movsd  0xe76(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x30(%rbp),%eax
sub    $0x1,%eax
imul   -0x4(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    -0x4(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x80(%rbp),%xmm0
movsd  0xde7(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x80(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
cvtsi2sdl 0x10(%rbp),%xmm0
movsd  0xd99(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
cvtsi2sdl 0x10(%rbp),%xmm0
movsd  0xd60(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x60(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    -0x8(%rbp),%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x60(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    -0x8(%rbp),%edx
shl    $0x1,%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    -0x8(%rbp),%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x40(%rbp),%xmm0
subsd  -0x68(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    -0x8(%rbp),%edx
shl    $0x1,%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    112f <passf3+0x2f>
jmp    171d <passf3+0x61d>
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x8(%rbp),%eax
jg     1718 <passf3+0x618>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1705 <passf3+0x605>
mov    -0x2c(%rbp),%eax
imul   $0x3,-0x30(%rbp),%ecx
sub    $0x2,%ecx
imul   -0x4(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    -0x4(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x88(%rbp),%xmm0
ff
movsd  0xc06(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x30(%rbp),%ecx
sub    $0x1,%ecx
imul   -0x4(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    -0x4(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x80(%rbp),%xmm0
movsd  0xb72(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x80(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
cvtsi2sdl 0x10(%rbp),%xmm0
movsd  0xb24(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
cvtsi2sdl 0x10(%rbp),%xmm0
movsd  0xaeb(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x60(%rbp),%xmm0
subsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x60(%rbp),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x50(%rbp),%xmm2
cvtsi2sdl 0x10(%rbp),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    -0x8(%rbp),%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x70(%rbp),%xmm2
cvtsi2sdl 0x10(%rbp),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  -0x50(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    -0x8(%rbp),%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x58(%rbp),%xmm2
cvtsi2sdl 0x10(%rbp),%xmm1
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    -0x8(%rbp),%edx
shl    $0x1,%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x78(%rbp),%xmm2
cvtsi2sdl 0x10(%rbp),%xmm1
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  -0x58(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    -0x8(%rbp),%edx
shl    $0x1,%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    1395 <passf3+0x295>
jmp    170a <passf3+0x60a>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1382 <passf3+0x282>
jmp    171d <passf3+0x61d>
add    $0x8,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<passf3>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x38(%rsp),%eax
cmp    $0x2,%edi
jne    126a <passf3+0x16a>
test   %esi,%esi
jle    143c <passf3+0x33c>
cvtsi2sd %eax,%xmm0
mulsd  0xed5(%rip),%xmm0
lea    (%rsi,%rsi,1),%r9d
mov    %esi,%eax
shl    $0x2,%esi
add    %rax,%rax
lea    (%rax,%rax,2),%r8
add    $0x6,%r8
xor    %ebx,%ebx
movabs $0x100000000,%r15
mov    $0x6,%eax
movsd  0xeb0(%rip),%xmm1
movabs $0x200000000,%r10
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    -0x4(%rax),%ebp
movslq %ebp,%r11
movsd  (%rdx,%r11,8),%xmm3
lea    -0x2(%rax),%ebp
movslq %ebp,%r14
addsd  (%rdx,%r14,8),%xmm3
lea    -0x6(%rax),%ebp
movslq %ebp,%rbp
movsd  (%rdx,%rbp,8),%xmm4
movapd %xmm3,%xmm2
mulsd  %xmm1,%xmm2
addsd  %xmm4,%xmm3
movslq %ebx,%rbx
movsd  %xmm3,(%rcx,%rbx,8)
lea    -0x3(%rax),%ebp
movslq %ebp,%r12
lea    -0x1(%rax),%edi
movsd  (%rdx,%r12,8),%xmm5
movslq %edi,%rdi
addsd  (%rdx,%rdi,8),%xmm5
addsd  %xmm4,%xmm2
lea    -0x5(%rax),%ebp
movslq %ebp,%rbp
movsd  (%rdx,%rbp,8),%xmm4
movapd %xmm5,%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm4,%xmm5
mov    %r15,%rbp
sar    $0x1d,%rbp
movsd  %xmm5,(%rcx,%rbp,1)
movsd  (%rdx,%r11,8),%xmm5
subsd  (%rdx,%r14,8),%xmm5
movsd  (%rdx,%r12,8),%xmm6
mulsd  %xmm0,%xmm5
subsd  (%rdx,%rdi,8),%xmm6
mulsd  %xmm0,%xmm6
addsd  %xmm4,%xmm3
movapd %xmm2,%xmm4
subsd  %xmm6,%xmm4
lea    (%r9,%rbx,1),%edi
movslq %edi,%rdi
movsd  %xmm4,(%rcx,%rdi,8)
addsd  %xmm2,%xmm6
lea    (%rsi,%rbx,1),%edi
movslq %edi,%rdi
movapd %xmm3,%xmm2
movsd  %xmm6,(%rcx,%rdi,8)
addsd  %xmm5,%xmm2
lea    0x1(%r9,%rbx,1),%edi
movslq %edi,%rdi
movsd  %xmm2,(%rcx,%rdi,8)
subsd  %xmm5,%xmm3
lea    (%rsi,%rbx,1),%edi
add    $0x1,%edi
movslq %edi,%rdi
movsd  %xmm3,(%rcx,%rdi,8)
add    $0x2,%ebx
add    %r10,%r15
add    $0x6,%rax
cmp    %rax,%r8
jne    1170 <passf3+0x70>
jmp    143c <passf3+0x33c>
test   %esi,%esi
jle    143c <passf3+0x33c>
lea    -0x1(%rdi),%r10d
cvtsi2sd %eax,%xmm0
movsd  0xd7e(%rip),%xmm1
mulsd  %xmm0,%xmm1
mov    %esi,%eax
imul   %edi,%eax
movslq %edi,%rbx
movslq %eax,%rbp
add    %eax,%eax
cltq
movslq %r10d,%r10
add    $0x1,%esi
lea    (%rcx,%rax,8),%r14
add    $0x8,%r14
lea    0x0(,%rbx,8),%r11
lea    (%rcx,%rbp,8),%r12
add    $0x8,%r12
add    $0x8,%rcx
lea    (%rdx,%rbx,8),%rax
add    $0x8,%rax
lea    (%r11,%r11,2),%r15
shl    $0x4,%rbx
add    %rdx,%rbx
add    $0x8,%rbx
add    $0x8,%rdx
mov    $0x1,%r13d
movsd  0xd27(%rip),%xmm8
jmp    130f <passf3+0x20f>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r13
add    %r11,%r14
add    %r11,%r12
add    %r11,%rcx
add    %r15,%rax
add    %r15,%rdx
add    %r15,%rbx
cmp    %rsi,%r13
je     143c <passf3+0x33c>
cmp    $0x2,%edi
jl     12f0 <passf3+0x1f0>
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
movsd  -0x8(%rax,%rbp,8),%xmm3
addsd  -0x8(%rbx,%rbp,8),%xmm3
movsd  -0x8(%rdx,%rbp,8),%xmm4
movapd %xmm3,%xmm5
mulsd  %xmm8,%xmm5
addsd  %xmm4,%xmm3
movsd  %xmm3,-0x8(%rcx,%rbp,8)
movsd  (%rax,%rbp,8),%xmm6
addsd  (%rbx,%rbp,8),%xmm6
addsd  %xmm4,%xmm5
movsd  (%rdx,%rbp,8),%xmm4
movapd %xmm6,%xmm3
mulsd  %xmm8,%xmm3
addsd  %xmm4,%xmm3
addsd  %xmm4,%xmm6
movsd  %xmm6,(%rcx,%rbp,8)
movsd  -0x8(%rax,%rbp,8),%xmm6
movsd  (%rax,%rbp,8),%xmm4
subsd  -0x8(%rbx,%rbp,8),%xmm6
subsd  (%rbx,%rbp,8),%xmm4
mulsd  %xmm1,%xmm6
mulsd  %xmm1,%xmm4
movapd %xmm5,%xmm7
subsd  %xmm4,%xmm7
addsd  %xmm5,%xmm4
movapd %xmm3,%xmm5
addsd  %xmm6,%xmm5
subsd  %xmm6,%xmm3
movsd  0x8(%r8,%rbp,8),%xmm6
mulsd  %xmm0,%xmm6
mulsd  %xmm7,%xmm6
movsd  (%r8,%rbp,8),%xmm2
mulsd  %xmm5,%xmm2
addsd  %xmm6,%xmm2
movsd  %xmm2,(%r12,%rbp,8)
movsd  0x8(%r8,%rbp,8),%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm5,%xmm2
mulsd  (%r8,%rbp,8),%xmm7
subsd  %xmm2,%xmm7
movsd  %xmm7,-0x8(%r12,%rbp,8)
movsd  0x8(%r9,%rbp,8),%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm4,%xmm2
movsd  (%r9,%rbp,8),%xmm5
mulsd  %xmm3,%xmm5
addsd  %xmm2,%xmm5
movsd  %xmm5,(%r14,%rbp,8)
movsd  0x8(%r9,%rbp,8),%xmm2
mulsd  %xmm0,%xmm2
mulsd  %xmm3,%xmm2
mulsd  (%r9,%rbp,8),%xmm4
subsd  %xmm2,%xmm4
movsd  %xmm4,-0x8(%r14,%rbp,8)
add    $0x2,%rbp
cmp    %r10,%rbp
jl     1320 <passf3+0x220>
jmp    12f0 <passf3+0x1f0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @passf3(i32 %0, i32 %1, double* nocapture %2, double* nocapture writeonly %3, double* nocapture %4, double* nocapture %5, i32 %6) {
%8 = icmp eq i32 %0, 2
%9 = icmp slt i32 %1, 1
br i1 %8, label %25, label %10
10: ; preds = %7
br i1 %9, label %192, label %11
11: ; preds = %10
%12 = add nsw i32 %0, -1
%13 = icmp sgt i32 %0, 1
%14 = sitofp i32 %6 to double
%15 = fmul double %14, 0x3FEBB67AE8584CAE
%16 = mul nsw i32 %1, %0
%17 = shl i32 %0, 1
%18 = mul i32 %17, %1
%19 = sext i32 %0 to i64
%20 = sext i32 %16 to i64
%21 = sext i32 %18 to i64
%22 = sext i32 %12 to i64
%23 = add nuw i32 %1, 1
%24 = zext i32 %23 to i64
br label %102
25: ; preds = %7
br i1 %9, label %192, label %26
26: ; preds = %25
%27 = sitofp i32 %6 to double
%28 = fmul double %27, 0x3FEBB67AE8584CAE
%29 = shl nuw nsw i32 %1, 1
%30 = shl nsw i32 %1, 2
%31 = add nuw i32 %1, 1
%32 = zext i32 %31 to i64
br label %33
33: ; preds = %26, %33
%34 = phi i64 [ 1, %26 ], [ %100, %33 ]
%35 = trunc i64 %34 to i32
%36 = mul i32 %35, 6
%37 = add i32 %36, -4
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds double, double* %2, i64 %38
%40 = load double, double* %39
%41 = add i32 %36, -2
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds double, double* %2, i64 %42
%44 = load double, double* %43
%45 = fadd double %40, %44
%46 = add i32 %36, -6
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds double, double* %2, i64 %47
%49 = load double, double* %48
%50 = tail call double @llvm.fmuladd.f64(double %45, double -5.000000e-01, double %49)
%51 = fadd double %49, %45
%52 = trunc i64 %34 to i32
%53 = shl i32 %52, 1
%54 = add i32 %53, -2
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds double, double* %3, i64 %55
store double %51, double* %56
%57 = add i32 %36, -3
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds double, double* %2, i64 %58
%60 = load double, double* %59
%61 = add i32 %36, -1
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds double, double* %2, i64 %62
%64 = load double, double* %63
%65 = fadd double %60, %64
%66 = add i32 %36, -5
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds double, double* %2, i64 %67
%69 = load double, double* %68
%70 = tail call double @llvm.fmuladd.f64(double %65, double -5.000000e-01, double %69)
%71 = fadd double %69, %65
%72 = shl i64 %34, 33
%73 = add i64 %72, -4294967296
%74 = ashr exact i64 %73, 32
%75 = getelementptr inbounds double, double* %3, i64 %74
store double %71, double* %75
%76 = load double, double* %39
%77 = load double, double* %43
%78 = fsub double %76, %77
%79 = fmul double %28, %78
%80 = load double, double* %59
%81 = load double, double* %63
%82 = fsub double %80, %81
%83 = fmul double %28, %82
%84 = fsub double %50, %83
%85 = add nsw i32 %54, %29
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds double, double* %3, i64 %86
store double %84, double* %87
%88 = fadd double %50, %83
%89 = add nsw i32 %54, %30
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds double, double* %3, i64 %90
store double %88, double* %91
%92 = fadd double %70, %79
%93 = or i32 %85, 1
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds double, double* %3, i64 %94
store double %92, double* %95
%96 = fsub double %70, %79
%97 = or i32 %89, 1
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds double, double* %3, i64 %98
store double %96, double* %99
%100 = add nuw nsw i64 %34, 1
%101 = icmp eq i64 %100, %32
br i1 %101, label %192, label %33
102: ; preds = %11, %189
%103 = phi i64 [ 1, %11 ], [ %190, %189 ]
br i1 %13, label %104, label %189
104: ; preds = %102
%105 = mul nuw nsw i64 %103, 3
%106 = add nsw i64 %105, -2
%107 = mul nsw i64 %106, %19
%108 = add nsw i64 %103, -1
%109 = mul nsw i64 %108, %19
br label %110
110: ; preds = %104, %110
%111 = phi i64 [ 0, %104 ], [ %187, %110 ]
%112 = add nsw i64 %111, %107
%113 = getelementptr inbounds double, double* %2, i64 %112
%114 = load double, double* %113
%115 = add nsw i64 %112, %19
%116 = getelementptr inbounds double, double* %2, i64 %115
%117 = load double, double* %116
%118 = fadd double %114, %117
%119 = sub nsw i64 %112, %19
%120 = getelementptr inbounds double, double* %2, i64 %119
%121 = load double, double* %120
%122 = tail call double @llvm.fmuladd.f64(double %118, double -5.000000e-01, double %121)
%123 = add nsw i64 %111, %109
%124 = fadd double %121, %118
%125 = getelementptr inbounds double, double* %3, i64 %123
store double %124, double* %125
%126 = add nsw i64 %112, 1
%127 = getelementptr inbounds double, double* %2, i64 %126
%128 = load double, double* %127
%129 = add nsw i64 %115, 1
%130 = getelementptr inbounds double, double* %2, i64 %129
%131 = load double, double* %130
%132 = fadd double %128, %131
%133 = add nsw i64 %119, 1
%134 = getelementptr inbounds double, double* %2, i64 %133
%135 = load double, double* %134
%136 = tail call double @llvm.fmuladd.f64(double %132, double -5.000000e-01, double %135)
%137 = fadd double %135, %132
%138 = add nsw i64 %123, 1
%139 = getelementptr inbounds double, double* %3, i64 %138
store double %137, double* %139
%140 = load double, double* %113
%141 = load double, double* %116
%142 = fsub double %140, %141
%143 = fmul double %15, %142
%144 = load double, double* %127
%145 = load double, double* %130
%146 = fsub double %144, %145
%147 = fmul double %15, %146
%148 = fsub double %122, %147
%149 = fadd double %122, %147
%150 = fadd double %136, %143
%151 = fsub double %136, %143
%152 = getelementptr inbounds double, double* %4, i64 %111
%153 = load double, double* %152
%154 = or i64 %111, 1
%155 = getelementptr inbounds double, double* %4, i64 %154
%156 = load double, double* %155
%157 = fmul double %156, %14
%158 = fmul double %157, %148
%159 = tail call double @llvm.fmuladd.f64(double %153, double %150, double %158)
%160 = add nsw i64 %123, %20
%161 = add nsw i64 %160, 1
%162 = getelementptr inbounds double, double* %3, i64 %161
store double %159, double* %162
%163 = load double, double* %152
%164 = load double, double* %155
%165 = fneg double %164
%166 = fmul double %14, %165
%167 = fmul double %150, %166
%168 = tail call double @llvm.fmuladd.f64(double %163, double %148, double %167)
%169 = getelementptr inbounds double, double* %3, i64 %160
store double %168, double* %169
%170 = getelementptr inbounds double, double* %5, i64 %111
%171 = load double, double* %170
%172 = getelementptr inbounds double, double* %5, i64 %154
%173 = load double, double* %172
%174 = fmul double %173, %14
%175 = fmul double %149, %174
%176 = tail call double @llvm.fmuladd.f64(double %171, double %151, double %175)
%177 = add nsw i64 %123, %21
%178 = add nsw i64 %177, 1
%179 = getelementptr inbounds double, double* %3, i64 %178
store double %176, double* %179
%180 = load double, double* %170
%181 = load double, double* %172
%182 = fneg double %181
%183 = fmul double %14, %182
%184 = fmul double %151, %183
%185 = tail call double @llvm.fmuladd.f64(double %180, double %149, double %184)
%186 = getelementptr inbounds double, double* %3, i64 %177
store double %185, double* %186
%187 = add nuw nsw i64 %111, 2
%188 = icmp slt i64 %187, %22
br i1 %188, label %110, label %189
189: ; preds = %110, %102
%190 = add nuw nsw i64 %103, 1
%191 = icmp eq i64 %190, %24
br i1 %191, label %192, label %102
192: ; preds = %189, %33, %10, %25
ret void
}