void dradf4(int ido, int l1, double *cc, double *ch, double *wa1, double *wa2,
            double *wa3) {
  static double hsqt2 = .70710678118654752440084436210485;
  int i, k, t0, t1, t2, t3, t4, t5, t6;
  double 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 % 2 == 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
sub    $0x40,%rsp
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    1282 <dradf4+0x182>
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
addsd  -0xb0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x2,%ecx
mov    %ecx,-0x48(%rbp)
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb0(%rbp),%xmm0
ff
subsd  -0xa8(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x4(%rbp),%ecx
shl    $0x2,%ecx
add    -0x48(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x44(%rbp),%rcx
subsd  (%rax,%rcx,8),%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
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
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    1157 <dradf4+0x57>
cmpl   $0x2,-0x4(%rbp)
jge    1291 <dradf4+0x191>
jmp    18ed <dradf4+0x7ed>
cmpl   $0x2,-0x4(%rbp)
jne    12a0 <dradf4+0x1a0>
jmp    1752 <dradf4+0x652>
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1734 <dradf4+0x634>
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    171d <dradf4+0x61d>
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
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%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
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%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
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    0x10(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
subsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
subsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
mov    -0x3c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x10(%rbp),%rax
mov    -0x3c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
addsd  -0xb0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x88(%rbp),%xmm0
ff
addsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb8(%rbp),%xmm0
ff
subsd  -0xa0(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xc0(%rbp),%xmm0
ff
subsd  -0x98(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
movslq -0x48(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0xb8(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xc0(%rbp),%xmm0
ff
addsd  -0x98(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0xb0(%rbp),%xmm0
ff
subsd  -0xa8(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x88(%rbp),%xmm0
ff
subsd  -0x90(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x2c(%rbp)
jmp    12df <dradf4+0x1df>
mov    -0x4(%rbp),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    12ae <dradf4+0x1ae>
mov    -0x4(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x1,%edx
jne    174d <dradf4+0x64d>
jmp    18ed <dradf4+0x7ed>
jmp    1752 <dradf4+0x652>
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    18ed <dradf4+0x7ed>
movsd  0x287e(%rip),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0x2839(%rip),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0xa8(%rbp),%xmm0
ff
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x48(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
subsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x44(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%ecx
add    -0x34(%rbp),%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
add    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
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    178e <dradf4+0x68e>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dradf4>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rdx,%r10
mov    %esi,%eax
mov    %rdi,%rdx
mov    %rdi,-0x60(%rsp)
imul   %edi,%eax
mov    %rax,-0x28(%rsp)
add    %eax,%eax
mov    %eax,-0x3c(%rsp)
mov    %rsi,-0x30(%rsp)
test   %esi,%esi
mov    %r10,-0x70(%rsp)
jle    14ad <dradf4+0x3ad>
mov    -0x28(%rsp),%rdx
lea    (%rdx,%rdx,2),%eax
mov    -0x60(%rsp),%rdi
lea    (%rdi,%rdi,1),%esi
mov    %rsi,-0x48(%rsp)
movslq %edx,%rdx
movslq %edi,%rbx
movslq %eax,%r11
movslq -0x3c(%rsp),%r15
xor    %r14d,%r14d
mov    -0x30(%rsp),%r12
mov    %r12d,%ebp
add    $0xffffffff,%ebp
mov    %rbx,-0x50(%rsp)
je     13d7 <dradf4+0x2d7>
mov    %rdi,%rsi
mov    %rdx,-0x68(%rsp)
mov    $0x4,%edx
mov    %ebp,%eax
mul    %edx
seto   %dl
cmp    $0x1,%esi
jne    13dc <dradf4+0x2dc>
test   %eax,%eax
js     13dc <dradf4+0x2dc>
test   %dl,%dl
jne    13dc <dradf4+0x2dc>
lea    0x8(%rcx),%rdx
mov    %rbp,%rax
shl    $0x5,%rax
lea    (%rcx,%rax,1),%rsi
add    $0x8,%rsi
cmp    %rdx,%rsi
jb     13dc <dradf4+0x2dc>
lea    0x10(%rcx),%rdx
lea    (%rcx,%rax,1),%rsi
add    $0x10,%rsi
cmp    %rdx,%rsi
jb     13dc <dradf4+0x2dc>
lea    0x18(%rcx),%rdx
lea    (%rcx,%rax,1),%rsi
add    $0x18,%rsi
cmp    %rdx,%rsi
jb     13dc <dradf4+0x2dc>
add    %rcx,%rax
cmp    %rcx,%rax
jb     13dc <dradf4+0x2dc>
mov    %r11,-0x38(%rsp)
lea    (%r12,%r12,1),%eax
cltq
mov    -0x70(%rsp),%rbx
lea    (%rbx,%rax,8),%r10
add    %rbp,%rax
lea    (%rbx,%rax,8),%rax
add    $0x8,%rax
mov    %rbp,%rsi
shl    $0x5,%rsi
add    %rcx,%rsi
add    $0x20,%rsi
lea    (%r12,%r12,2),%edi
movslq %edi,%rdi
lea    (%rbx,%rdi,8),%r11
add    %rbp,%rdi
movslq %r12d,%rdx
lea    (%rbx,%rdx,8),%r13
add    %rbp,%rdx
cmp    %rsi,%r10
setb   %r14b
cmp    %rcx,%rax
seta   %r12b
mov    %rbp,-0x58(%rsp)
lea    (%rbx,%rbp,8),%rbp
add    $0x8,%rbp
cmp    %rbx,%rsi
seta   %al
lea    (%rbx,%rdi,8),%rdi
add    $0x8,%rdi
cmp    %rcx,%rbp
seta   %bpl
lea    (%rbx,%rdx,8),%r10
add    $0x8,%r10
cmp    %rsi,%r11
setb   %dl
cmp    %rcx,%rdi
seta   %dil
cmp    %rsi,%r13
setb   %sil
cmp    %rcx,%r10
seta   %r11b
test   %r12b,%r14b
jne    1807 <dradf4+0x707>
and    %bpl,%al
mov    -0x68(%rsp),%r12
mov    -0x38(%rsp),%rbp
jne    17ef <dradf4+0x6ef>
and    %dil,%dl
jne    17ef <dradf4+0x6ef>
and    %r11b,%sil
jne    17ef <dradf4+0x6ef>
mov    -0x58(%rsp),%r11
add    $0x1,%r11
mov    %r11,-0x58(%rsp)
and    $0xfffffffffffffffe,%r11
mov    %r11,%rdx
mov    -0x50(%rsp),%rbx
imul   %rbx,%rdx
lea    (%rdx,%r15,1),%rax
mov    %rax,-0x18(%rsp)
lea    (%rdx,%rbp,1),%rax
mov    %rax,-0x20(%rsp)
add    %r12,%rdx
mov    %rdx,-0x8(%rsp)
mov    %r11d,%edi
mov    -0x60(%rsp),%rax
imul   %eax,%edi
lea    0x0(,%rax,8),%r13d
shl    $0x4,%rbx
xor    %esi,%esi
mov    %rbp,%rdx
mov    -0x70(%rsp),%r10
mov    %r10,%rbp
mov    -0x48(%rsp),%rax
mov    %eax,%r14d
mov    %r11,-0x10(%rsp)
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movupd 0x0(%rbp,%r12,8),%xmm0
movupd 0x0(%rbp,%rdx,8),%xmm1
movapd %xmm0,%xmm2
addpd  %xmm1,%xmm2
movslq %esi,%rsi
movupd (%r10,%rsi,8),%xmm3
movupd 0x0(%rbp,%r15,8),%xmm4
movapd %xmm3,%xmm5
addpd  %xmm4,%xmm5
movapd %xmm2,%xmm6
addpd  %xmm5,%xmm6
subpd  %xmm2,%xmm5
subpd  %xmm4,%xmm3
subpd  %xmm0,%xmm1
movslq %r14d,%r14
movapd %xmm6,%xmm0
unpcklpd %xmm3,%xmm0
movapd %xmm1,%xmm2
unpcklpd %xmm5,%xmm2
movhlps %xmm6,%xmm3
unpckhpd %xmm5,%xmm1
movupd %xmm1,0x20(%rcx,%r14,8)
movups %xmm3,0x10(%rcx,%r14,8)
movupd %xmm2,(%rcx,%r14,8)
movupd %xmm0,-0x10(%rcx,%r14,8)
add    %eax,%esi
add    %r13d,%r14d
add    %rbx,%rbp
add    $0xfffffffffffffffe,%r11
jne    1330 <dradf4+0x230>
mov    -0x10(%rsp),%r14
cmp    %r14,-0x58(%rsp)
mov    -0x18(%rsp),%r13
mov    -0x20(%rsp),%r11
mov    -0x8(%rsp),%rdx
jne    13eb <dradf4+0x2eb>
jmp    14ad <dradf4+0x3ad>
mov    %r15,%r13
jmp    13e4 <dradf4+0x2e4>
mov    %r15,%r13
mov    -0x68(%rsp),%rdx
xor    %edi,%edi
mov    -0x70(%rsp),%r10
shlq   $0x3,-0x50(%rsp)
mov    -0x30(%rsp),%rax
mov    %eax,%esi
sub    %r14d,%esi
mov    -0x48(%rsp),%rax
lea    -0x1(%rax),%r12d
lea    0x0(,%rdi,4),%ebp
mov    -0x60(%rsp),%rax
lea    0x0(,%rax,4),%r14d
lea    -0x1(,%rax,4),%r15d
ff
mov    %r10,%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  (%rbx,%rdx,8),%xmm0
addsd  (%rbx,%r11,8),%xmm0
movslq %edi,%rdi
movsd  (%r10,%rdi,8),%xmm1
addsd  (%rbx,%r13,8),%xmm1
movapd %xmm0,%xmm2
addsd  %xmm1,%xmm2
movslq %ebp,%rbp
movsd  %xmm2,(%rcx,%rbp,8)
subsd  %xmm0,%xmm1
lea    (%r15,%rbp,1),%eax
cltq
movsd  %xmm1,(%rcx,%rax,8)
movsd  (%r10,%rdi,8),%xmm0
subsd  (%rbx,%r13,8),%xmm0
lea    (%r12,%rbp,1),%eax
cltq
movsd  %xmm0,(%rcx,%rax,8)
mov    -0x48(%rsp),%rax
add    %ebp,%eax
movsd  (%rbx,%r11,8),%xmm0
subsd  (%rbx,%rdx,8),%xmm0
cltq
movsd  %xmm0,(%rcx,%rax,8)
mov    -0x60(%rsp),%rax
add    %eax,%edi
add    -0x50(%rsp),%rbx
add    %r14d,%ebp
add    $0xffffffff,%esi
jne    1430 <dradf4+0x330>
mov    -0x60(%rsp),%rdi
cmp    $0x2,%edi
mov    -0x30(%rsp),%r15
jl     17e4 <dradf4+0x6e4>
mov    %r10,%rax
mov    %rdi,%rsi
je     171c <dradf4+0x61c>
test   %r15d,%r15d
jle    16fb <dradf4+0x5fb>
mov    0x38(%rsp),%rax
mov    -0x60(%rsp),%rsi
lea    (%rsi,%rsi,1),%r11d
mov    %esi,%ebp
movslq -0x28(%rsp),%rdx
lea    0x0(,%rsi,4),%esi
mov    %esi,-0x58(%rsp)
movslq %r11d,%rsi
mov    %rsi,-0x38(%rsp)
lea    -0x18(%rcx),%rsi
mov    %rsi,-0x18(%rsp)
lea    0x0(,%rbp,8),%rsi
mov    %rsi,-0x20(%rsp)
mov    -0x70(%rsp),%r10
lea    (%r10,%rdx,8),%rbx
lea    (%rdx,%rdx,2),%rsi
shl    $0x4,%rdx
add    %r10,%rdx
lea    (%r10,%rsi,8),%r14
xor    %edi,%edi
movapd 0xaca(%rip),%xmm8
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
mov    %esi,-0x68(%rsp)
mov    %r11d,-0x48(%rsp)
movslq %r11d,%r12
mov    -0x38(%rsp),%r11
lea    (%r11,%r12,1),%rsi
mov    %edi,-0x50(%rsp)
movslq %edi,%rdi
lea    (%rcx,%rdi,8),%r13
add    %r11,%rdi
lea    (%rcx,%rdi,8),%r15
mov    $0x2,%r11d
mov    -0x18(%rsp),%rdi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  -0x10(%r8,%r11,8),%xmm3
movsd  -0x8(%r8,%r11,8),%xmm4
movapd %xmm4,%xmm0
xorpd  %xmm8,%xmm0
movsd  -0x10(%r9,%r11,8),%xmm9
movsd  -0x8(%r9,%r11,8),%xmm7
movsd  -0x8(%rbx,%r11,8),%xmm1
movsd  (%rbx,%r11,8),%xmm6
movapd %xmm7,%xmm5
unpcklpd %xmm1,%xmm5
movsd  -0x8(%rdx,%r11,8),%xmm2
movsd  (%rdx,%r11,8),%xmm10
unpcklpd %xmm10,%xmm1
unpcklpd %xmm0,%xmm10
mulpd  %xmm5,%xmm10
movapd %xmm9,%xmm0
unpcklpd %xmm3,%xmm0
unpcklpd %xmm2,%xmm4
unpcklpd %xmm6,%xmm2
mulpd  %xmm0,%xmm2
addpd  %xmm10,%xmm2
xorpd  %xmm8,%xmm7
unpcklpd %xmm7,%xmm6
mulpd  %xmm4,%xmm6
unpcklpd %xmm9,%xmm3
mulpd  %xmm3,%xmm1
addpd  %xmm6,%xmm1
movsd  -0x10(%rax,%r11,8),%xmm3
movsd  -0x8(%rax,%r11,8),%xmm0
movsd  -0x8(%r14,%r11,8),%xmm4
movsd  (%r14,%r11,8),%xmm5
movapd %xmm3,%xmm6
mulsd  %xmm4,%xmm6
mulsd  %xmm0,%xmm4
mulsd  %xmm5,%xmm0
addsd  %xmm0,%xmm6
mulsd  %xmm5,%xmm3
subsd  %xmm4,%xmm3
movsd  -0x8(%r10,%r11,8),%xmm0
movsd  (%r10,%r11,8),%xmm4
movapd %xmm0,%xmm5
unpcklpd %xmm6,%xmm0
unpcklpd %xmm4,%xmm6
addpd  %xmm1,%xmm6
movapd %xmm2,%xmm7
shufpd $0x1,%xmm4,%xmm7
unpcklpd %xmm3,%xmm5
addpd  %xmm2,%xmm5
unpcklpd %xmm1,%xmm2
movsd  %xmm3,%xmm1
subpd  %xmm1,%xmm7
subpd  %xmm2,%xmm0
movapd %xmm5,%xmm1
addpd  %xmm6,%xmm1
movupd %xmm1,-0x8(%r13,%r11,8)
movapd %xmm0,%xmm1
subpd  %xmm7,%xmm1
movupd %xmm1,(%rdi,%r12,8)
addpd  %xmm7,%xmm0
movupd %xmm0,-0x8(%r15,%r11,8)
subpd  %xmm6,%xmm5
movupd %xmm5,(%rdi,%rsi,8)
add    $0x2,%r11
add    $0xfffffffffffffff0,%rdi
cmp    %rbp,%r11
jb     1580 <dradf4+0x480>
mov    -0x68(%rsp),%esi
add    $0x1,%esi
mov    -0x58(%rsp),%r15d
mov    -0x50(%rsp),%edi
add    %r15d,%edi
mov    -0x48(%rsp),%r11d
add    %r15d,%r11d
mov    -0x20(%rsp),%r15
add    %r15,%r10
add    %r15,%rbx
add    %r15,%rdx
add    %r15,%r14
mov    -0x30(%rsp),%r15
cmp    %r15d,%esi
jne    1540 <dradf4+0x440>
mov    -0x60(%rsp),%rsi
mov    %esi,%eax
shr    $0x1f,%eax
add    %esi,%eax
and    $0xfffffffe,%eax
mov    %esi,%edx
sub    %eax,%edx
cmp    $0x1,%edx
mov    -0x70(%rsp),%rax
je     17e4 <dradf4+0x6e4>
test   %r15d,%r15d
jle    17e4 <dradf4+0x6e4>
mov    -0x28(%rsp),%rbx
lea    (%rsi,%rbx,1),%edx
add    $0xffffffff,%edx
lea    (%rsi,%rsi,1),%r11d
mov    -0x3c(%rsp),%ebp
add    %edx,%ebp
movslq %edx,%r9
movslq %esi,%r8
shl    $0x2,%esi
movslq %ebx,%rdx
movslq %ebp,%r10
movslq %esi,%rdi
movslq %r11d,%rbp
lea    0x0(,%r8,8),%rbx
add    %r8,%rbp
shl    $0x3,%rdi
add    %r9,%rdx
movsd  0x8a7(%rip),%xmm0
movsd  0x8a7(%rip),%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  (%rax,%r9,8),%xmm2
movsd  (%rax,%r10,8),%xmm3
movapd %xmm2,%xmm4
addsd  %xmm3,%xmm4
mulsd  %xmm0,%xmm4
subsd  %xmm3,%xmm2
mulsd  %xmm1,%xmm2
movsd  -0x8(%rax,%rbx,1),%xmm3
addsd  %xmm2,%xmm3
movsd  %xmm3,-0x8(%rcx,%rbx,1)
movsd  -0x8(%rax,%rbx,1),%xmm3
subsd  %xmm2,%xmm3
movsd  %xmm3,-0x8(%rcx,%rbp,8)
movapd %xmm4,%xmm2
subsd  (%rax,%rdx,8),%xmm2
movsd  %xmm2,(%rcx,%rbx,1)
addsd  (%rax,%rdx,8),%xmm4
add    %rbx,%rax
movsd  %xmm4,(%rcx,%rbp,8)
add    %rdi,%rcx
add    $0xffffffff,%r15d
jne    1780 <dradf4+0x680>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r15,%r13
mov    %rbp,%r11
mov    %r12,%rdx
xor    %edi,%edi
mov    -0x70(%rsp),%r10
xor    %r14d,%r14d
jmp    13eb <dradf4+0x2eb>
mov    %r15,%r13
mov    -0x38(%rsp),%r11
mov    -0x68(%rsp),%rdx
jmp    17f8 <dradf4+0x6f8>

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