void dradf4(int ido, int l1, float *cc, float *ch, float *wa1, float *wa2,
            float *wa3) {
  static float hsqt2 = .70710678118654752f;
  int i, k, t0, t1, t2, t3, t4, t5, t6;
  float ci2, ci3, ci4, cr2, cr3, cr4, ti1, ti2, ti3, ti4, tr1, tr2, tr3, tr4;
  t0 = l1 * ido;
  t1 = t0;
  t4 = t1 << 1;
  t2 = t1 + (t1 << 1);
  t3 = 0;
  for (k = 0; k < l1; k++) {
    tr1 = cc[t1] + cc[t2];
    tr2 = cc[t3] + cc[t4];
    ch[t5 = t3 << 2] = tr1 + tr2;
    ch[(ido << 2) + t5 - 1] = tr2 - tr1;
    ch[(t5 += (ido << 1)) - 1] = cc[t3] - cc[t4];
    ch[t5] = cc[t2] - cc[t1];
    t1 += ido;
    t2 += ido;
    t3 += ido;
    t4 += ido;
  }
  if (ido < 2)
    return;
  if (ido == 2)
    goto L105;
  t1 = 0;
  for (k = 0; k < l1; k++) {
    t2 = t1;
    t4 = t1 << 2;
    t5 = (t6 = ido << 1) + t4;
    for (i = 2; i < ido; i += 2) {
      t3 = (t2 += 2);
      t4 += 2;
      t5 -= 2;
      t3 += t0;
      cr2 = wa1[i - 2] * cc[t3 - 1] + wa1[i - 1] * cc[t3];
      ci2 = wa1[i - 2] * cc[t3] - wa1[i - 1] * cc[t3 - 1];
      t3 += t0;
      cr3 = wa2[i - 2] * cc[t3 - 1] + wa2[i - 1] * cc[t3];
      ci3 = wa2[i - 2] * cc[t3] - wa2[i - 1] * cc[t3 - 1];
      t3 += t0;
      cr4 = wa3[i - 2] * cc[t3 - 1] + wa3[i - 1] * cc[t3];
      ci4 = wa3[i - 2] * cc[t3] - wa3[i - 1] * cc[t3 - 1];
      tr1 = cr2 + cr4;
      tr4 = cr4 - cr2;
      ti1 = ci2 + ci4;
      ti4 = ci2 - ci4;
      ti2 = cc[t2] + ci3;
      ti3 = cc[t2] - ci3;
      tr2 = cc[t2 - 1] + cr3;
      tr3 = cc[t2 - 1] - cr3;
      ch[t4 - 1] = tr1 + tr2;
      ch[t4] = ti1 + ti2;
      ch[t5 - 1] = tr3 - ti4;
      ch[t5] = tr4 - ti3;
      ch[t4 + t6 - 1] = ti4 + tr3;
      ch[t4 + t6] = tr4 + ti3;
      ch[t5 + t6 - 1] = tr2 - tr1;
      ch[t5 + t6] = ti1 - ti2;
    }
    t1 += ido;
  }
  if (ido & 1)
    return;
L105:
  t2 = (t1 = t0 + ido - 1) + (t0 << 1);
  t3 = ido << 2;
  t4 = ido;
  t5 = ido << 1;
  t6 = ido;
  for (k = 0; k < l1; k++) {
    ti1 = -hsqt2 * (cc[t1] + cc[t2]);
    tr1 = hsqt2 * (cc[t1] - cc[t2]);
    ch[t4 - 1] = tr1 + cc[t6 - 1];
    ch[t4 + t5 - 1] = cc[t6 - 1] - tr1;
    ch[t4] = ti1 - cc[t1 + t0];
    ch[t4 + t5] = ti1 + cc[t1 + t0];
    t1 += ido;
    t2 += ido;
    t4 += t3;
    t6 += ido;
  }
}


x86 assembly (clang, -O0):
<dradf4>:
push   %rbp
mov    %rsp,%rbp
push   %rax
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)
mov    -0x8(%rbp),%eax
imul   -0x4(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x38(%rbp),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    126d <dradf4+0x16d>
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x7c(%rbp)
movss  -0x78(%rbp),%xmm0
addss  -0x7c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x2,%ecx
mov    %ecx,-0x48(%rbp)
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x7c(%rbp),%xmm0
subss  -0x78(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    -0x48(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x1,%ecx
add    -0x48(%rbp),%ecx
mov    %ecx,-0x48(%rbp)
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x4(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x4(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x4(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x4(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1154 <dradf4+0x54>
cmpl   $0x2,-0x4(%rbp)
jge    127c <dradf4+0x17c>
jmp    185a <dradf4+0x75a>
cmpl   $0x2,-0x4(%rbp)
jne    128b <dradf4+0x18b>
jmp    16db <dradf4+0x5db>
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    16c2 <dradf4+0x5c2>
mov    -0x38(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x38(%rbp),%eax
shl    $0x2,%eax
mov    %eax,-0x44(%rbp)
mov    -0x4(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x4c(%rbp)
add    -0x44(%rbp),%eax
mov    %eax,-0x48(%rbp)
movl   $0x2,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    16ab <dradf4+0x5ab>
mov    -0x3c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x3c(%rbp)
mov    %eax,-0x40(%rbp)
mov    -0x44(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x44(%rbp)
mov    -0x48(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x48(%rbp)
mov    -0x34(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x5c(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x34(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm2
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x60(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x34(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm2
mov    0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x64(%rbp)
mov    0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
mov    0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mulss  (%rax,%rcx,4),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x5c(%rbp),%xmm0
addss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x64(%rbp),%xmm0
subss  -0x5c(%rbp),%xmm0
movss  %xmm0,-0x84(%rbp)
ff
movss  -0x50(%rbp),%xmm0
addss  -0x58(%rbp),%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x50(%rbp),%xmm0
subss  -0x58(%rbp),%xmm0
movss  %xmm0,-0x74(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x3c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
addss  -0x60(%rbp),%xmm0
movss  %xmm0,-0x7c(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x3c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x60(%rbp),%xmm0
movss  %xmm0,-0x80(%rbp)
movss  -0x78(%rbp),%xmm0
addss  -0x7c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x68(%rbp),%xmm0
addss  -0x6c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x80(%rbp),%xmm0
subss  -0x74(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x84(%rbp),%xmm0
ff
subss  -0x70(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x74(%rbp),%xmm0
addss  -0x80(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x84(%rbp),%xmm0
ff
addss  -0x70(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x7c(%rbp),%xmm0
subss  -0x78(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x68(%rbp),%xmm0
subss  -0x6c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    12ca <dradf4+0x1ca>
mov    -0x4(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1299 <dradf4+0x199>
mov    -0x4(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     16d6 <dradf4+0x5d6>
jmp    185a <dradf4+0x75a>
jmp    16db <dradf4+0x5db>
mov    -0x34(%rbp),%eax
add    -0x4(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%ecx
shl    $0x1,%ecx
add    %ecx,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x4(%rbp),%eax
shl    $0x2,%eax
mov    %eax,-0x40(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x4(%rbp),%eax
shl    $0x1,%eax
mov    %eax,-0x48(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    185a <dradf4+0x75a>
movss  0x28f5(%rip),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
movss  0x28bd(%rip),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x78(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
subss  -0x78(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x48(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
subss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
movss  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x4(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x4(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x40(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x4(%rbp),%eax
add    -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1717 <dradf4+0x617>
add    $0x8,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dradf4>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rdx,%r13
mov    %esi,%eax
imul   %edi,%eax
mov    %rax,-0x20(%rsp)
add    %eax,%eax
mov    %eax,-0x34(%rsp)
mov    %rsi,-0x28(%rsp)
test   %esi,%esi
mov    %rdi,-0x78(%rsp)
jle    14ca <dradf4+0x3ca>
mov    -0x20(%rsp),%rdx
lea    (%rdx,%rdx,2),%eax
lea    (%rdi,%rdi,1),%ebp
movslq %edx,%r15
movslq %edi,%r11
movslq %eax,%rbx
movslq -0x34(%rsp),%r14
mov    -0x28(%rsp),%r10
lea    -0x1(%r10),%esi
xor    %r12d,%r12d
cmp    $0x3,%esi
mov    %rbp,-0x40(%rsp)
jae    1168 <dradf4+0x68>
mov    %rbx,%rsi
xor    %edx,%edx
jmp    1400 <dradf4+0x300>
mov    $0x4,%edx
mov    %esi,%eax
mul    %edx
seto   %dl
cmp    $0x1,%edi
jne    13c7 <dradf4+0x2c7>
test   %eax,%eax
js     13c7 <dradf4+0x2c7>
test   %dl,%dl
jne    13c7 <dradf4+0x2c7>
mov    %r14,-0x68(%rsp)
mov    %rbx,-0x60(%rsp)
mov    %r15,-0x58(%rsp)
mov    %r11,-0x50(%rsp)
lea    (%r10,%r10,1),%eax
cltq
lea    0x0(,%rax,4),%rdx
add    %r13,%rdx
add    %rsi,%rax
lea    0x4(,%rax,4),%rax
add    %r13,%rax
mov    %rsi,%rdi
shl    $0x4,%rdi
lea    (%rdi,%rcx,1),%rbp
add    $0x10,%rbp
lea    (%r10,%r10,2),%edi
movslq %edi,%rdi
lea    0x0(,%rdi,4),%r15
add    %r13,%r15
add    %rsi,%rdi
movslq %r10d,%rbx
lea    0x0(,%rbx,4),%r10
add    %r13,%r10
add    %rsi,%rbx
cmp    %rbp,%rdx
setb   %r11b
cmp    %rcx,%rax
seta   %r14b
mov    %rsi,-0x70(%rsp)
lea    0x4(,%rsi,4),%rdx
add    %r13,%rdx
cmp    %r13,%rbp
seta   %al
lea    0x4(,%rdi,4),%rdi
add    %r13,%rdi
cmp    %rcx,%rdx
seta   %r12b
lea    0x4(,%rbx,4),%rbx
add    %r13,%rbx
cmp    %rbp,%r15
setb   %dl
cmp    %rcx,%rdi
seta   %dil
cmp    %rbp,%r10
setb   %bpl
cmp    %rcx,%rbx
seta   %r10b
test   %r14b,%r11b
jne    13e2 <dradf4+0x2e2>
and    %r12b,%al
jne    13e2 <dradf4+0x2e2>
and    %dil,%dl
mov    -0x50(%rsp),%r11
mov    -0x58(%rsp),%rbx
mov    -0x60(%rsp),%rdi
mov    -0x68(%rsp),%r14
jne    13d3 <dradf4+0x2d3>
and    %r10b,%bpl
jne    13d3 <dradf4+0x2d3>
mov    -0x70(%rsp),%r15
add    $0x1,%r15
mov    %r15,-0x70(%rsp)
and    $0xfffffffffffffffc,%r15
mov    %r15,%rdx
imul   %r11,%rdx
lea    (%rdx,%r14,1),%rax
mov    %rax,-0x30(%rsp)
lea    (%rdx,%rdi,1),%rax
mov    %rax,-0x8(%rsp)
add    %rbx,%rdx
mov    %rdx,-0x10(%rsp)
mov    %r15d,%edx
mov    -0x78(%rsp),%rsi
imul   %esi,%edx
lea    0x0(,%rsi,4),%eax
mov    %eax,-0x48(%rsp)
shl    $0x4,%esi
mov    %rbx,%rax
mov    %rdi,%rbp
mov    %r11,%rbx
shl    $0x4,%rbx
mov    %r14,%r10
xor    %r14d,%r14d
mov    %r13,%r12
mov    %r13,%rdi
mov    -0x40(%rsp),%r13
mov    %r15,-0x18(%rsp)
nopl   0x0(%rax,%rax,1)
movups (%r12,%rax,4),%xmm2
movups (%r12,%rbp,4),%xmm0
movaps %xmm2,%xmm3
addps  %xmm0,%xmm3
movslq %r14d,%r14
movups (%rdi,%r14,4),%xmm1
movups (%r12,%r10,4),%xmm4
movaps %xmm1,%xmm5
addps  %xmm4,%xmm5
movaps %xmm3,%xmm6
addps  %xmm5,%xmm6
subps  %xmm3,%xmm5
subps  %xmm4,%xmm1
subps  %xmm2,%xmm0
movslq %r13d,%r13
movaps %xmm5,%xmm2
movlhps %xmm0,%xmm2
movaps %xmm6,%xmm3
unpcklps %xmm1,%xmm3
shufps $0x24,%xmm2,%xmm3
movaps %xmm0,%xmm2
unpcklps %xmm5,%xmm2
movaps %xmm1,%xmm4
shufps $0x11,%xmm6,%xmm4
shufps $0xe2,%xmm2,%xmm4
movaps %xmm5,%xmm2
unpckhpd %xmm0,%xmm2
movaps %xmm6,%xmm7
unpckhps %xmm1,%xmm7
shufps $0x24,%xmm2,%xmm7
unpckhps %xmm5,%xmm0
shufps $0x33,%xmm6,%xmm1
shufps $0xe2,%xmm0,%xmm1
movups %xmm1,0x28(%rcx,%r13,4)
movups %xmm7,0x18(%rcx,%r13,4)
movups %xmm4,0x8(%rcx,%r13,4)
movups %xmm3,-0x8(%rcx,%r13,4)
add    -0x48(%rsp),%r14d
add    %esi,%r13d
add    %rbx,%r12
add    $0xfffffffffffffffc,%r15
jne    1300 <dradf4+0x200>
mov    -0x18(%rsp),%r12
cmp    %r12,-0x70(%rsp)
mov    %rdi,%r13
mov    -0x78(%rsp),%rdi
mov    -0x30(%rsp),%r14
mov    -0x8(%rsp),%rsi
mov    -0x10(%rsp),%r15
jne    1400 <dradf4+0x300>
jmp    14ca <dradf4+0x3ca>
mov    %rbx,%rsi
xor    %edx,%edx
mov    -0x78(%rsp),%rdi
jmp    1400 <dradf4+0x300>
mov    %rdi,%rsi
mov    %rbx,%r15
xor    %edx,%edx
mov    -0x78(%rsp),%rdi
jmp    13fd <dradf4+0x2fd>
mov    -0x68(%rsp),%r14
mov    -0x60(%rsp),%rsi
mov    -0x58(%rsp),%r15
xor    %edx,%edx
mov    -0x78(%rsp),%rdi
mov    -0x50(%rsp),%r11
xor    %r12d,%r12d
shl    $0x2,%r11
mov    -0x28(%rsp),%rax
mov    %eax,%ebp
sub    %r12d,%ebp
mov    -0x40(%rsp),%rax
add    $0xffffffff,%eax
mov    %rax,-0x48(%rsp)
lea    0x0(,%rdx,4),%eax
lea    0x0(,%rdi,4),%ebx
mov    %ebx,-0x70(%rsp)
lea    -0x1(,%rdi,4),%r12d
ff
mov    %r13,%rbx
mov    -0x78(%rsp),%rdi
nopl   (%rax)
movss  (%rbx,%r15,4),%xmm0
addss  (%rbx,%rsi,4),%xmm0
mov    %r11,%r10
movslq %edx,%r11
movss  0x0(%r13,%r11,4),%xmm1
addss  (%rbx,%r14,4),%xmm1
movaps %xmm0,%xmm2
addss  %xmm1,%xmm2
cltq
movss  %xmm2,(%rcx,%rax,4)
subss  %xmm0,%xmm1
lea    (%r12,%rax,1),%edx
movslq %edx,%rdx
movss  %xmm1,(%rcx,%rdx,4)
movss  0x0(%r13,%r11,4),%xmm0
subss  (%rbx,%r14,4),%xmm0
mov    -0x48(%rsp),%rdx
lea    (%rdx,%rax,1),%edx
movslq %edx,%rdx
movss  %xmm0,(%rcx,%rdx,4)
mov    -0x40(%rsp),%rdx
add    %eax,%edx
movss  (%rbx,%rsi,4),%xmm0
subss  (%rbx,%r15,4),%xmm0
movslq %edx,%rdx
movss  %xmm0,(%rcx,%rdx,4)
lea    (%r11,%rdi,1),%edx
mov    %r10,%r11
add    %r10,%rbx
add    -0x70(%rsp),%eax
add    $0xffffffff,%ebp
jne    1440 <dradf4+0x340>
cmp    $0x2,%edi
mov    -0x28(%rsp),%r11
jl     17fa <dradf4+0x6fa>
je     172f <dradf4+0x62f>
mov    %r13,-0x30(%rsp)
test   %r11d,%r11d
jle    171b <dradf4+0x61b>
mov    0x38(%rsp),%rax
mov    -0x78(%rsp),%rdx
lea    (%rdx,%rdx,1),%r15d
mov    %edx,%ebp
movslq -0x20(%rsp),%rdi
lea    0x0(,%rdx,4),%edx
mov    %edx,-0x50(%rsp)
movslq %r15d,%rdx
mov    %rdx,-0x58(%rsp)
lea    -0x8(%rcx),%rdx
mov    %rdx,-0x60(%rsp)
lea    0x0(,%rbp,4),%rdx
mov    %rdx,-0x68(%rsp)
mov    -0x30(%rsp),%r10
lea    (%r10,%rdi,4),%rbx
lea    (%r10,%rdi,8),%rdx
lea    (%rdi,%rdi,2),%rdi
lea    (%r10,%rdi,4),%r14
xor    %edi,%edi
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %esi,-0x70(%rsp)
mov    %r15d,-0x40(%rsp)
movslq %r15d,%r12
mov    -0x58(%rsp),%r11
lea    (%r11,%r12,1),%rsi
mov    %edi,-0x48(%rsp)
movslq %edi,%rdi
lea    (%rcx,%rdi,4),%r13
add    %r11,%rdi
lea    (%rcx,%rdi,4),%r11
mov    $0x2,%r15d
mov    -0x60(%rsp),%rdi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movss  -0x8(%r8,%r15,4),%xmm0
movss  -0x4(%r8,%r15,4),%xmm2
movss  -0x4(%rbx,%r15,4),%xmm3
movss  (%rbx,%r15,4),%xmm4
movaps %xmm0,%xmm1
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm3
mulss  %xmm4,%xmm2
addss  %xmm2,%xmm1
mulss  %xmm4,%xmm0
subss  %xmm3,%xmm0
movss  -0x8(%r9,%r15,4),%xmm2
movss  -0x4(%r9,%r15,4),%xmm3
movss  -0x4(%rdx,%r15,4),%xmm5
movss  (%rdx,%r15,4),%xmm6
movaps %xmm2,%xmm4
mulss  %xmm5,%xmm4
mulss  %xmm3,%xmm5
mulss  %xmm6,%xmm3
addss  %xmm3,%xmm4
mulss  %xmm6,%xmm2
subss  %xmm5,%xmm2
movss  -0x8(%rax,%r15,4),%xmm6
movss  -0x4(%rax,%r15,4),%xmm5
movss  -0x4(%r14,%r15,4),%xmm7
movss  (%r14,%r15,4),%xmm8
movaps %xmm6,%xmm3
mulss  %xmm7,%xmm3
mulss  %xmm5,%xmm7
mulss  %xmm8,%xmm5
addss  %xmm5,%xmm3
mulss  %xmm8,%xmm6
subss  %xmm7,%xmm6
movaps %xmm1,%xmm8
addss  %xmm3,%xmm8
subss  %xmm1,%xmm3
movaps %xmm0,%xmm1
addss  %xmm6,%xmm1
subss  %xmm6,%xmm0
movss  -0x4(%r10,%r15,4),%xmm6
movss  (%r10,%r15,4),%xmm7
movaps %xmm2,%xmm5
addss  %xmm7,%xmm5
subss  %xmm2,%xmm7
movaps %xmm4,%xmm2
addss  %xmm6,%xmm2
subss  %xmm4,%xmm6
movaps %xmm8,%xmm4
addss  %xmm2,%xmm4
movss  %xmm4,-0x4(%r13,%r15,4)
movaps %xmm1,%xmm4
addss  %xmm5,%xmm4
movss  %xmm4,0x0(%r13,%r15,4)
movaps %xmm6,%xmm4
subss  %xmm0,%xmm4
movss  %xmm4,-0x4(%rdi,%r12,4)
movaps %xmm3,%xmm4
subss  %xmm7,%xmm4
movss  %xmm4,(%rdi,%r12,4)
addss  %xmm0,%xmm6
movss  %xmm6,-0x4(%r11,%r15,4)
addss  %xmm3,%xmm7
movss  %xmm7,(%r11,%r15,4)
subss  %xmm8,%xmm2
movss  %xmm2,-0x4(%rdi,%rsi,4)
subss  %xmm5,%xmm1
movss  %xmm1,(%rdi,%rsi,4)
add    $0x2,%r15
add    $0xfffffffffffffff8,%rdi
cmp    %rbp,%r15
jb     1590 <dradf4+0x490>
mov    -0x70(%rsp),%esi
add    $0x1,%esi
mov    -0x50(%rsp),%r11d
mov    -0x48(%rsp),%edi
add    %r11d,%edi
mov    -0x40(%rsp),%r15d
add    %r11d,%r15d
mov    -0x68(%rsp),%r11
add    %r11,%r10
add    %r11,%rbx
add    %r11,%rdx
add    %r11,%r14
mov    -0x28(%rsp),%r11
cmp    %r11d,%esi
jne    1550 <dradf4+0x450>
mov    -0x78(%rsp),%rdi
test   $0x1,%dil
mov    -0x30(%rsp),%r13
jne    17fa <dradf4+0x6fa>
test   %r11d,%r11d
jle    17fa <dradf4+0x6fa>
mov    -0x20(%rsp),%rdx
lea    (%rdi,%rdx,1),%eax
add    $0xffffffff,%eax
lea    (%rdi,%rdi,1),%ebp
mov    -0x34(%rsp),%ebx
add    %eax,%ebx
movslq %eax,%r9
movslq %edi,%r8
shl    $0x2,%edi
movslq %edx,%rdx
movslq %ebx,%r10
movslq %edi,%rdi
movslq %ebp,%rbp
lea    0x0(,%r8,4),%rbx
add    %r8,%rbp
shl    $0x2,%rdi
add    %r9,%rdx
movss  0x885(%rip),%xmm0
movss  0x881(%rip),%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movss  0x0(%r13,%r9,4),%xmm2
movss  0x0(%r13,%r10,4),%xmm3
movaps %xmm2,%xmm4
addss  %xmm3,%xmm4
mulss  %xmm0,%xmm4
subss  %xmm3,%xmm2
mulss  %xmm1,%xmm2
movss  -0x4(%r13,%rbx,1),%xmm3
addss  %xmm2,%xmm3
movss  %xmm3,-0x4(%rcx,%rbx,1)
movss  -0x4(%r13,%rbx,1),%xmm3
subss  %xmm2,%xmm3
movss  %xmm3,-0x4(%rcx,%rbp,4)
movaps %xmm4,%xmm2
subss  0x0(%r13,%rdx,4),%xmm2
movss  %xmm2,(%rcx,%rbx,1)
addss  0x0(%r13,%rdx,4),%xmm4
add    %rbx,%r13
movss  %xmm4,(%rcx,%rbp,4)
add    %rdi,%rcx
add    $0xffffffff,%r11d
jne    1790 <dradf4+0x690>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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