void passf4(int ido, int l1, const float cc[], float ch[], const float wa1[],
            const float wa2[], const float wa3[], int isign) {
  int i, k, ac, ah;
  float ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4;
  if (ido == 2) {
    for (k = 0; k < l1; k++) {
      ac = 4 * k * ido + 1;
      ti1 = cc[ac] - cc[ac + 2 * ido];
      ti2 = cc[ac] + cc[ac + 2 * ido];
      tr4 = cc[ac + 3 * ido] - cc[ac + ido];
      ti3 = cc[ac + ido] + cc[ac + 3 * ido];
      tr1 = cc[ac - 1] - cc[ac + 2 * ido - 1];
      tr2 = cc[ac - 1] + cc[ac + 2 * ido - 1];
      ti4 = cc[ac + ido - 1] - cc[ac + 3 * ido - 1];
      tr3 = cc[ac + ido - 1] + cc[ac + 3 * ido - 1];
      ah = k * ido;
      ch[ah] = tr2 + tr3;
      ch[ah + 2 * l1 * ido] = tr2 - tr3;
      ch[ah + 1] = ti2 + ti3;
      ch[ah + 2 * l1 * ido + 1] = ti2 - ti3;
      ch[ah + l1 * ido] = tr1 + isign * tr4;
      ch[ah + 3 * l1 * ido] = tr1 - isign * tr4;
      ch[ah + l1 * ido + 1] = ti1 + isign * ti4;
      ch[ah + 3 * l1 * ido + 1] = ti1 - isign * ti4;
    }
  } else {
    for (k = 0; k < l1; k++) {
      for (i = 0; i < ido - 1; i += 2) {
        ac = i + 1 + 4 * k * ido;
        ti1 = cc[ac] - cc[ac + 2 * ido];
        ti2 = cc[ac] + cc[ac + 2 * ido];
        ti3 = cc[ac + ido] + cc[ac + 3 * ido];
        tr4 = cc[ac + 3 * ido] - cc[ac + ido];
        tr1 = cc[ac - 1] - cc[ac + 2 * ido - 1];
        tr2 = cc[ac - 1] + cc[ac + 2 * ido - 1];
        ti4 = cc[ac + ido - 1] - cc[ac + 3 * ido - 1];
        tr3 = cc[ac + ido - 1] + cc[ac + 3 * ido - 1];
        ah = i + k * ido;
        ch[ah] = tr2 + tr3;
        cr3 = tr2 - tr3;
        ch[ah + 1] = ti2 + ti3;
        ci3 = ti2 - ti3;
        cr2 = tr1 + isign * tr4;
        cr4 = tr1 - isign * tr4;
        ci2 = ti1 + isign * ti4;
        ci4 = ti1 - isign * ti4;
        ch[ah + l1 * ido] = wa1[i] * cr2 - isign * wa1[i + 1] * ci2;
        ch[ah + l1 * ido + 1] = wa1[i] * ci2 + isign * wa1[i + 1] * cr2;
        ch[ah + 2 * l1 * ido] = wa2[i] * cr3 - isign * wa2[i + 1] * ci3;
        ch[ah + 2 * l1 * ido + 1] = wa2[i] * ci3 + isign * wa2[i + 1] * cr3;
        ch[ah + 3 * l1 * ido] = wa3[i] * cr4 - isign * wa3[i + 1] * ci4;
        ch[ah + 3 * l1 * ido + 1] = wa3[i] * ci4 + isign * wa3[i + 1] * cr4;
      }
    }
  }
}


x86 assembly (clang, -O0):
<passf4>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%rax
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    1439 <passf4+0x339>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1434 <passf4+0x334>
mov    -0x30(%rbp),%eax
shl    $0x2,%eax
imul   -0x4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x4(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x4(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
imul   $0x3,-0x4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
movslq %ecx,%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
imul   $0x3,-0x4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x5c(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x4(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x4(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
imul   $0x3,-0x4(%rbp),%edx
add    %edx,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
imul   $0x3,-0x4(%rbp),%edx
add    %edx,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x30(%rbp),%eax
imul   -0x4(%rbp),%eax
mov    %eax,-0x38(%rbp)
movss  -0x68(%rbp),%xmm0
addss  -0x6c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x68(%rbp),%xmm0
subss  -0x6c(%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
movss  %xmm0,(%rax,%rcx,4)
movss  -0x58(%rbp),%xmm0
addss  -0x5c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x58(%rbp),%xmm0
subss  -0x5c(%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
movss  %xmm0,(%rax,%rcx,4)
movss  -0x64(%rbp),%xmm1
cvtsi2ssl 0x18(%rbp),%xmm0
movss  -0x70(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    -0x8(%rbp),%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x64(%rbp),%xmm1
cvtsi2ssl 0x18(%rbp),%xmm0
movss  -0x70(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   $0x3,-0x8(%rbp),%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x54(%rbp),%xmm1
cvtsi2ssl 0x18(%rbp),%xmm0
movss  -0x60(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %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
movss  %xmm0,(%rax,%rcx,4)
movss  -0x54(%rbp),%xmm1
cvtsi2ssl 0x18(%rbp),%xmm0
movss  -0x60(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   $0x3,-0x8(%rbp),%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1132 <passf4+0x32>
jmp    1905 <passf4+0x805>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1900 <passf4+0x800>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    18ed <passf4+0x7ed>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    -0x30(%rbp),%ecx
shl    $0x2,%ecx
imul   -0x4(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x4(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x4(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
imul   $0x3,-0x4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x5c(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
imul   $0x3,-0x4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
movslq %ecx,%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x4(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x64(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x4(%rbp),%edx
shl    $0x1,%edx
add    %edx,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
imul   $0x3,-0x4(%rbp),%edx
add    %edx,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
add    -0x4(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
imul   $0x3,-0x4(%rbp),%edx
add    %edx,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x30(%rbp),%ecx
imul   -0x4(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x38(%rbp)
movss  -0x68(%rbp),%xmm0
addss  -0x6c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x68(%rbp),%xmm0
subss  -0x6c(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x58(%rbp),%xmm0
addss  -0x5c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x58(%rbp),%xmm0
subss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x64(%rbp),%xmm1
cvtsi2ssl 0x18(%rbp),%xmm0
movss  -0x70(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x64(%rbp),%xmm1
cvtsi2ssl 0x18(%rbp),%xmm0
movss  -0x70(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x54(%rbp),%xmm1
cvtsi2ssl 0x18(%rbp),%xmm0
movss  -0x60(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x54(%rbp),%xmm1
cvtsi2ssl 0x18(%rbp),%xmm0
movss  -0x60(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  -0x48(%rbp),%xmm2
cvtsi2ssl 0x18(%rbp),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
mulss  -0x3c(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
mov    -0x8(%rbp),%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  -0x3c(%rbp),%xmm2
cvtsi2ssl 0x18(%rbp),%xmm1
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
mulss  -0x48(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %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
movss  %xmm0,(%rax,%rcx,4)
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  -0x4c(%rbp),%xmm2
cvtsi2ssl 0x18(%rbp),%xmm1
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
mulss  -0x40(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %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
movss  %xmm0,(%rax,%rcx,4)
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  -0x40(%rbp),%xmm2
cvtsi2ssl 0x18(%rbp),%xmm1
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
mulss  -0x4c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %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
movss  %xmm0,(%rax,%rcx,4)
mov    0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  -0x50(%rbp),%xmm2
cvtsi2ssl 0x18(%rbp),%xmm1
mov    0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
mulss  -0x44(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   $0x3,-0x8(%rbp),%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  -0x44(%rbp),%xmm2
cvtsi2ssl 0x18(%rbp),%xmm1
mov    0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
mulss  -0x50(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0x38(%rbp),%ecx
imul   $0x3,-0x8(%rbp),%edx
imul   -0x4(%rbp),%edx
add    %edx,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    1453 <passf4+0x353>
jmp    18f2 <passf4+0x7f2>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1440 <passf4+0x340>
jmp    1905 <passf4+0x805>
pop    %rbp
ret

x86 assembly (clang, -O2):
<passf4>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x40(%rsp),%r11d
cmp    $0x2,%edi
jne    1249 <passf4+0x149>
test   %esi,%esi
jle    1506 <passf4+0x406>
lea    0x0(,%rsi,4),%r8d
cvtsi2ss %r11d,%xmm8
movaps 0xecb(%rip),%xmm9
xorps  %xmm8,%xmm9
lea    (%rsi,%rsi,1),%edi
lea    (%rdi,%rdi,2),%r9d
mov    %esi,%esi
add    $0x1c,%rdx
add    %rsi,%rsi
xor    %ebx,%ebx
nopl   0x0(%rax,%rax,1)
movss  -0x1c(%rdx),%xmm7
movss  -0x18(%rdx),%xmm5
movss  -0x8(%rdx),%xmm3
movaps %xmm5,%xmm10
subss  %xmm3,%xmm10
addss  %xmm3,%xmm5
movss  (%rdx),%xmm0
movss  -0x10(%rdx),%xmm3
movaps %xmm0,%xmm4
subss  %xmm3,%xmm4
addss  %xmm3,%xmm0
movss  -0xc(%rdx),%xmm3
movaps %xmm7,%xmm6
subss  %xmm3,%xmm6
addss  %xmm3,%xmm7
movss  -0x14(%rdx),%xmm3
movss  -0x4(%rdx),%xmm2
movaps %xmm3,%xmm1
subss  %xmm2,%xmm1
addss  %xmm2,%xmm3
movaps %xmm7,%xmm2
addss  %xmm3,%xmm2
movss  %xmm2,(%rcx,%rbx,4)
subss  %xmm3,%xmm7
lea    (%r8,%rbx,1),%rax
cltq
movss  %xmm7,(%rcx,%rax,4)
movaps %xmm5,%xmm2
addss  %xmm0,%xmm2
movss  %xmm2,0x4(%rcx,%rbx,4)
subss  %xmm0,%xmm5
add    $0x1,%eax
cltq
movss  %xmm5,(%rcx,%rax,4)
movaps %xmm8,%xmm0
mulss  %xmm4,%xmm0
addss  %xmm6,%xmm0
lea    (%rdi,%rbx,1),%rax
cltq
movss  %xmm0,(%rcx,%rax,4)
mulss  %xmm9,%xmm4
addss  %xmm6,%xmm4
lea    (%r9,%rbx,1),%rbp
movslq %ebp,%rbp
movss  %xmm4,(%rcx,%rbp,4)
movaps %xmm8,%xmm0
mulss  %xmm1,%xmm0
addss  %xmm10,%xmm0
add    $0x1,%eax
cltq
movss  %xmm0,(%rcx,%rax,4)
mulss  %xmm9,%xmm1
addss  %xmm10,%xmm1
add    $0x1,%ebp
movslq %ebp,%rax
movss  %xmm1,(%rcx,%rax,4)
add    $0x2,%rbx
add    $0x20,%rdx
cmp    %rbx,%rsi
jne    1150 <passf4+0x50>
jmp    1506 <passf4+0x406>
test   %esi,%esi
jle    1506 <passf4+0x406>
mov    0x38(%rsp),%rax
lea    -0x1(%rdi),%r10d
lea    0x0(,%rdi,4),%ebx
mov    %ebx,-0x3c(%rsp)
lea    (%rdi,%rdi,1),%r14d
lea    (%rdi,%rdi,2),%r15d
cvtsi2ss %r11d,%xmm9
movaps 0xd86(%rip),%xmm8
xorps  %xmm9,%xmm8
mov    %esi,%ebx
imul   %edi,%ebx
movslq %r14d,%rbp
mov    %rbp,-0x28(%rsp)
movslq %edi,%r12
movslq %r15d,%rbp
mov    %rbp,-0x38(%rsp)
imul   %esi,%r15d
movslq %ebx,%r11
add    %ebx,%ebx
movslq %ebx,%r14
movslq %r15d,%rbx
movslq %r10d,%r15
mov    %esi,%esi
mov    %rsi,-0x10(%rsp)
lea    0x4(%rcx,%rbx,4),%rsi
mov    %r12,-0x30(%rsp)
lea    0x0(,%r12,4),%rbp
mov    %rbp,-0x18(%rsp)
lea    (%rcx,%r14,4),%rbp
add    $0x4,%rbp
lea    (%rcx,%r11,4),%r11
add    $0x4,%r11
add    $0x4,%rcx
add    $0x4,%rdx
xor    %ebx,%ebx
mov    %rbx,-0x48(%rsp)
xor    %ebx,%ebx
mov    %rdi,-0x8(%rsp)
jmp    1323 <passf4+0x223>
xchg   %ax,%ax
add    $0x1,%rbx
mov    -0x18(%rsp),%rdi
add    %rdi,%rsi
add    %rdi,%rbp
add    %rdi,%r11
add    %rdi,%rcx
mov    -0x48(%rsp),%rdi
add    -0x3c(%rsp),%edi
mov    %rdi,-0x48(%rsp)
cmp    -0x10(%rsp),%rbx
mov    -0x8(%rsp),%rdi
je     1506 <passf4+0x406>
cmp    $0x2,%edi
jl     12f0 <passf4+0x1f0>
movslq -0x48(%rsp),%rdi
mov    %rbx,%r10
mov    -0x38(%rsp),%rbx
lea    (%rbx,%rdi,1),%r14
mov    -0x30(%rsp),%rbx
lea    (%rbx,%rdi,1),%r13
mov    -0x28(%rsp),%rbx
add    %rdi,%rbx
mov    %rbx,-0x20(%rsp)
mov    %r10,%rbx
lea    (%rdx,%rdi,4),%r10
lea    (%rdx,%r14,4),%r12
lea    (%rdx,%r13,4),%r13
mov    -0x20(%rsp),%rdi
lea    (%rdx,%rdi,4),%rdi
xor    %r14d,%r14d
nopw   0x0(%rax,%rax,1)
movss  -0x4(%r10,%r14,4),%xmm6
movss  (%r10,%r14,4),%xmm4
movss  -0x4(%rdi,%r14,4),%xmm10
movss  (%rdi,%r14,4),%xmm2
movaps %xmm4,%xmm11
subss  %xmm2,%xmm11
addss  %xmm2,%xmm4
movss  -0x4(%r13,%r14,4),%xmm7
movss  0x0(%r13,%r14,4),%xmm3
movss  -0x4(%r12,%r14,4),%xmm0
movss  (%r12,%r14,4),%xmm2
movaps %xmm3,%xmm1
addss  %xmm2,%xmm1
subss  %xmm3,%xmm2
movaps %xmm6,%xmm5
subss  %xmm10,%xmm5
addss  %xmm10,%xmm6
movaps %xmm7,%xmm3
subss  %xmm0,%xmm3
addss  %xmm0,%xmm7
movaps %xmm6,%xmm0
addss  %xmm7,%xmm0
movss  %xmm0,-0x4(%rcx,%r14,4)
subss  %xmm7,%xmm6
movaps %xmm4,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,(%rcx,%r14,4)
subss  %xmm1,%xmm4
movaps %xmm9,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm5,%xmm0
mulss  %xmm8,%xmm2
addss  %xmm5,%xmm2
movaps %xmm9,%xmm1
mulss  %xmm3,%xmm1
addss  %xmm11,%xmm1
mulss  %xmm8,%xmm3
addss  %xmm11,%xmm3
movss  0x4(%r8,%r14,4),%xmm5
mulss  %xmm9,%xmm5
mulss  %xmm1,%xmm5
movss  (%r8,%r14,4),%xmm7
mulss  %xmm0,%xmm7
subss  %xmm5,%xmm7
movss  %xmm7,-0x4(%r11,%r14,4)
movss  0x4(%r8,%r14,4),%xmm5
mulss  %xmm9,%xmm5
mulss  %xmm0,%xmm5
mulss  (%r8,%r14,4),%xmm1
addss  %xmm5,%xmm1
movss  %xmm1,(%r11,%r14,4)
movss  0x4(%r9,%r14,4),%xmm0
mulss  %xmm9,%xmm0
mulss  %xmm4,%xmm0
movss  (%r9,%r14,4),%xmm1
mulss  %xmm6,%xmm1
subss  %xmm0,%xmm1
movss  %xmm1,-0x4(%rbp,%r14,4)
movss  0x4(%r9,%r14,4),%xmm0
mulss  %xmm9,%xmm0
mulss  %xmm6,%xmm0
mulss  (%r9,%r14,4),%xmm4
addss  %xmm0,%xmm4
movss  %xmm4,0x0(%rbp,%r14,4)
movss  0x4(%rax,%r14,4),%xmm0
mulss  %xmm9,%xmm0
mulss  %xmm3,%xmm0
movss  (%rax,%r14,4),%xmm1
mulss  %xmm2,%xmm1
subss  %xmm0,%xmm1
movss  %xmm1,-0x4(%rsi,%r14,4)
movss  0x4(%rax,%r14,4),%xmm0
mulss  %xmm9,%xmm0
mulss  %xmm2,%xmm0
mulss  (%rax,%r14,4),%xmm3
addss  %xmm0,%xmm3
movss  %xmm3,(%rsi,%r14,4)
add    $0x2,%r14
cmp    %r15,%r14
jl     1370 <passf4+0x270>
jmp    12f0 <passf4+0x1f0>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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