void dv2uv(double *d, double *o, double *u, double *v, double *f, double *g,
           int nt, int nsp, int nlev) {
  int l, m, n;
  int i;
  for (l = 0; l < nlev; l++) {
    i = 0;
    for (m = 0; m < nt - 1; m++) {
      if (m == 0) {
        *u++ = -g[i + 1] * o[2 * (i + 1)];
        *u++ = -g[i + 1] * o[2 * (i + 1) + 1];
        *v++ = g[i + 1] * d[2 * (i + 1)];
        *v++ = g[i + 1] * d[2 * (i + 1) + 1];
      } else {
        *u++ = -f[i] * d[2 * i + 1] - g[i + 1] * o[2 * (i + 1)];
        *u++ = f[i] * d[2 * i] - g[i + 1] * o[2 * (i + 1) + 1];
        *v++ = -f[i] * o[2 * i + 1] + g[i + 1] * d[2 * (i + 1)];
        *v++ = f[i] * o[2 * i] + g[i + 1] * d[2 * (i + 1) + 1];
      }
      ++i;
      for (n = m + 1; n < nt - 1; n++) {
        *u++ = g[i] * o[2 * (i - 1)] - f[i] * d[2 * i + 1] -
               g[i + 1] * o[2 * (i + 1)];
        *u++ = g[i] * o[2 * (i - 1) + 1] + f[i] * d[2 * i] -
               g[i + 1] * o[2 * (i + 1) + 1];
        *v++ = -g[i] * d[2 * (i - 1)] - f[i] * o[2 * i + 1] +
               g[i + 1] * d[2 * (i + 1)];
        *v++ = -g[i] * d[2 * (i - 1) + 1] + f[i] * o[2 * i] +
               g[i + 1] * d[2 * (i + 1) + 1];
        ++i;
      }
      *u++ = g[i] * o[2 * (i - 1)] - f[i] * d[2 * i + 1];
      *u++ = g[i] * o[2 * (i - 1) + 1] + f[i] * d[2 * i];
      *v++ = -g[i] * d[2 * (i - 1)] - f[i] * o[2 * i + 1];
      *v++ = -g[i] * d[2 * (i - 1) + 1] + f[i] * o[2 * i];
      ++i;
      *u++ = g[i] * o[2 * (i - 1)];
      *u++ = g[i] * o[2 * (i - 1) + 1];
      *v++ = -g[i] * d[2 * (i - 1)];
      *v++ = -g[i] * d[2 * (i - 1) + 1];
      ++i;
    }
    *u++ = -f[i] * d[2 * i + 1];
    *u++ = f[i] * d[2 * i];
    *v++ = -f[i] * o[2 * i + 1];
    *v++ = f[i] * o[2 * i];
    ++i;
    *u++ = g[i] * o[2 * (i - 1)];
    *u++ = g[i] * o[2 * (i - 1) + 1];
    *v++ = -g[i] * d[2 * (i - 1)];
    *v++ = -g[i] * d[2 * (i - 1) + 1];
    ++i;
    *u++ = 0.0;
    *u++ = 0.0;
    *v++ = 0.0;
    *v++ = 0.0;
    d += nsp;
    o += nsp;
  }
}


x86 assembly (clang, -O0):
<dv2uv>:
push   %rbp
mov    %rsp,%rbp
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x20(%rbp),%eax
jge    1d16 <dv2uv+0xc16>
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    0x10(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1a70 <dv2uv+0x970>
cmpl   $0x0,-0x38(%rbp)
jne    1282 <dv2uv+0x182>
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
jmp    146e <dv2uv+0x36e>
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
shl    $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
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
add    $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
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    0x10(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1770 <dv2uv+0x670>
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0x30(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1480 <dv2uv+0x380>
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
add    $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
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
add    $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
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1146 <dv2uv+0x46>
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
movslq -0x40(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x8(%rbp),%rax
mov    -0x40(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
movsd  %xmm0,(%rax)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x18(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x20(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    0x18(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    112c <dv2uv+0x2c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<dv2uv>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
cmpl   $0x0,0x48(%rsp)
jle    167a <dv2uv+0x57a>
mov    %rcx,%r12
mov    0x38(%rsp),%eax
lea    -0x1(%rax),%ecx
mov    %ecx,-0x68(%rsp)
movslq 0x40(%rsp),%rcx
mov    %rcx,-0x40(%rsp)
lea    0x8(%r9),%rcx
mov    %rcx,-0x38(%rsp)
mov    $0x2,%ecx
sub    %eax,%ecx
mov    %ecx,-0x54(%rsp)
xor    %ecx,%ecx
movapd 0xeb5(%rip),%xmm0
movapd 0xead(%rip),%xmm1
xorps  %xmm2,%xmm2
mov    %r9,-0x28(%rsp)
mov    %r8,-0x30(%rsp)
jmp    124f <dv2uv+0x14f>
cs nopw 0x0(%rax,%rax,1)
nop
xor    %r14d,%r14d
movslq %r14d,%rax
movsd  (%r8,%rax,8),%xmm3
xorpd  %xmm0,%xmm3
lea    (%rax,%rax,1),%ebp
lea    (%rax,%rax,1),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mulsd  (%rdi,%rcx,8),%xmm3
movsd  %xmm3,(%rdx)
movsd  (%r8,%rax,8),%xmm3
movslq %ebp,%rbp
mulsd  (%rdi,%rbp,8),%xmm3
movsd  %xmm3,0x8(%rdx)
movsd  (%r8,%rax,8),%xmm3
xorpd  %xmm0,%xmm3
mulsd  (%rsi,%rcx,8),%xmm3
movsd  %xmm3,(%r12)
movsd  (%r8,%rax,8),%xmm3
mulsd  (%rsi,%rbp,8),%xmm3
movsd  %xmm3,0x8(%r12)
movsd  0x8(%r9,%rax,8),%xmm3
mulsd  (%rsi,%rbp,8),%xmm3
movsd  %xmm3,0x10(%rdx)
movsd  0x8(%r9,%rax,8),%xmm3
mulsd  (%rsi,%rcx,8),%xmm3
movsd  %xmm3,0x18(%rdx)
movsd  0x8(%r9,%rax,8),%xmm3
xorpd  %xmm0,%xmm3
mulsd  (%rdi,%rbp,8),%xmm3
movsd  %xmm3,0x10(%r12)
movsd  0x8(%r9,%rax,8),%xmm3
xorpd  %xmm0,%xmm3
mulsd  (%rdi,%rcx,8),%xmm3
movsd  %xmm3,0x18(%r12)
movups %xmm2,0x20(%rdx)
add    $0x30,%rdx
mov    -0x40(%rsp),%rax
lea    (%rdi,%rax,8),%rdi
lea    (%rsi,%rax,8),%rsi
mov    -0x50(%rsp),%ecx
add    $0x1,%ecx
movups %xmm2,0x20(%r12)
add    $0x30,%r12
cmp    0x48(%rsp),%ecx
je     167a <dv2uv+0x57a>
mov    0x38(%rsp),%eax
cmp    $0x2,%eax
mov    %ecx,-0x50(%rsp)
jl     1170 <dv2uv+0x70>
xor    %r14d,%r14d
mov    -0x54(%rsp),%r11d
xor    %r13d,%r13d
jmp    1396 <dv2uv+0x296>
lea    0x10(%r12),%r13
lea    0x10(%rdx),%rbx
mov    -0x60(%rsp),%rax
lea    (%rax,%rax,1),%ebp
lea    (%rax,%rax,1),%ecx
add    $0x1,%ecx
movslq %ecx,%r15
movslq %ebp,%r10
movslq %eax,%r14
movsd  (%r9,%r14,8),%xmm3
lea    -0x2(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rdi,%r15,8),%xmm4
mulsd  (%r8,%r14,8),%xmm4
mulsd  (%rsi,%rcx,8),%xmm3
subsd  %xmm4,%xmm3
movsd  %xmm3,(%rbx)
movsd  (%r9,%r14,8),%xmm3
add    $0xffffffff,%ebp
movslq %ebp,%rbp
movsd  (%r8,%r14,8),%xmm4
mulsd  (%rdi,%r10,8),%xmm4
mulsd  (%rsi,%rbp,8),%xmm3
addsd  %xmm4,%xmm3
movsd  %xmm3,0x18(%rdx)
movsd  (%r9,%r14,8),%xmm3
xorpd  %xmm0,%xmm3
mulsd  (%rdi,%rcx,8),%xmm3
movsd  (%rsi,%r15,8),%xmm4
mulsd  (%r8,%r14,8),%xmm4
subsd  %xmm4,%xmm3
movsd  %xmm3,0x0(%r13)
movsd  (%r9,%r14,8),%xmm3
mulsd  (%rdi,%rbp,8),%xmm3
movsd  (%r8,%r14,8),%xmm4
mulsd  (%rsi,%r10,8),%xmm4
subsd  %xmm3,%xmm4
movsd  %xmm4,0x18(%r12)
movsd  0x8(%r9,%r14,8),%xmm3
mulsd  (%rsi,%r10,8),%xmm3
movsd  %xmm3,0x20(%rdx)
movsd  0x8(%r9,%r14,8),%xmm3
mulsd  (%rsi,%r15,8),%xmm3
movsd  %xmm3,0x28(%rdx)
movsd  0x8(%r9,%r14,8),%xmm3
xorpd  %xmm0,%xmm3
mulsd  (%rdi,%r10,8),%xmm3
movsd  %xmm3,0x20(%r12)
movsd  0x8(%r9,%r14,8),%xmm3
xorpd  %xmm0,%xmm3
mulsd  (%rdi,%r15,8),%xmm3
add    $0x30,%rdx
movsd  %xmm3,0x28(%r12)
add    $0x30,%r12
add    $0x2,%r14d
add    $0x1,%r11d
mov    -0x4c(%rsp),%r13d
cmp    -0x68(%rsp),%r13d
je     1173 <dv2uv+0x73>
test   %r13d,%r13d
mov    %r11d,-0x64(%rsp)
je     1460 <dv2uv+0x360>
movslq %r14d,%rax
movsd  (%r8,%rax,8),%xmm3
xorpd  %xmm1,%xmm3
lea    (%rax,%rax,1),%r15d
lea    (%rax,%rax,1),%ecx
add    $0x1,%ecx
movslq %ecx,%r10
lea    0x1(%rax),%ecx
mov    %rcx,-0x60(%rsp)
movslq %ecx,%rcx
lea    0x2(%rax,%rax,1),%ebx
movslq %ebx,%r14
movsd  (%rsi,%r14,8),%xmm4
mulsd  (%r9,%rcx,8),%xmm4
mulsd  (%rdi,%r10,8),%xmm3
subsd  %xmm4,%xmm3
movsd  %xmm3,(%rdx)
movsd  (%r8,%rax,8),%xmm3
lea    0x3(%rax,%rax,1),%ebp
movslq %ebp,%rbp
movsd  (%rsi,%rbp,8),%xmm4
mulsd  (%r9,%rcx,8),%xmm4
movslq %r15d,%r15
mulsd  (%rdi,%r15,8),%xmm3
subsd  %xmm4,%xmm3
movsd  %xmm3,0x8(%rdx)
movsd  (%r9,%rcx,8),%xmm3
mulsd  (%rdi,%r14,8),%xmm3
movsd  (%r8,%rax,8),%xmm4
mulsd  (%rsi,%r10,8),%xmm4
mov    -0x64(%rsp),%r11d
subsd  %xmm4,%xmm3
movsd  %xmm3,(%r12)
movsd  (%r9,%rcx,8),%xmm4
mulsd  (%rdi,%rbp,8),%xmm4
movsd  (%r8,%rax,8),%xmm3
mulsd  (%rsi,%r15,8),%xmm3
addsd  %xmm4,%xmm3
jmp    14be <dv2uv+0x3be>
nopl   0x0(%rax,%rax,1)
lea    0x1(%r14),%eax
mov    %rax,-0x60(%rsp)
cltq
movsd  (%r9,%rax,8),%xmm3
xorpd  %xmm0,%xmm3
lea    0x2(%r14,%r14,1),%ecx
movslq %ecx,%rcx
mulsd  (%rsi,%rcx,8),%xmm3
movsd  %xmm3,(%rdx)
movsd  (%r9,%rax,8),%xmm3
xorpd  %xmm0,%xmm3
lea    0x3(%r14,%r14,1),%ebp
movslq %ebp,%rbp
mulsd  (%rsi,%rbp,8),%xmm3
movsd  %xmm3,0x8(%rdx)
movsd  (%r9,%rax,8),%xmm3
mulsd  (%rdi,%rcx,8),%xmm3
movsd  %xmm3,(%r12)
movsd  (%r9,%rax,8),%xmm3
mulsd  (%rdi,%rbp,8),%xmm3
movsd  %xmm3,0x8(%r12)
add    $0x1,%r13d
cmp    -0x68(%rsp),%r13d
mov    %r13d,-0x4c(%rsp)
jge    1270 <dv2uv+0x170>
mov    -0x60(%rsp),%rbp
movslq %ebp,%rax
mov    -0x38(%rsp),%rcx
lea    (%rcx,%rax,8),%rbx
lea    (%r8,%rax,8),%r9
lea    0x0(%rbp,%rbp,1),%eax
mov    %rax,-0x10(%rsp)
lea    -0x2(%rbp,%rbp,1),%eax
mov    %rax,-0x18(%rsp)
add    $0x1,%rax
mov    %rax,-0x20(%rsp)
xor    %eax,%eax
mov    %rdx,-0x48(%rsp)
xor    %r13d,%r13d
xor    %r8d,%r8d
mov    %r12,-0x8(%rsp)
nopl   0x0(%rax,%rax,1)
mov    -0x10(%rsp),%rcx
lea    (%rcx,%r8,1),%rdx
mov    -0x18(%rsp),%rcx
add    %r8d,%ecx
movslq %ecx,%r12
lea    0x1(%rdx),%ecx
movslq %ecx,%r14
movsd  (%rdi,%r14,8),%xmm3
mulsd  (%r9,%r8,4),%xmm3
movsd  -0x8(%rbx,%r8,4),%xmm4
movsd  (%rbx,%r8,4),%xmm5
mulsd  (%rsi,%r12,8),%xmm4
subsd  %xmm3,%xmm4
lea    0x2(%rdx),%ecx
movslq %ecx,%r10
mulsd  (%rsi,%r10,8),%xmm5
subsd  %xmm5,%xmm4
mov    -0x48(%rsp),%r11
movsd  %xmm4,0x10(%r11,%r8,8)
mov    -0x20(%rsp),%rcx
lea    (%rcx,%r8,1),%ecx
movslq %ecx,%rcx
movsd  (%r9,%r8,4),%xmm3
movslq %edx,%rdx
mulsd  (%rdi,%rdx,8),%xmm3
movsd  -0x8(%rbx,%r8,4),%xmm4
movsd  (%rbx,%r8,4),%xmm5
mulsd  (%rsi,%rcx,8),%xmm4
lea    0x3(%rdx),%ebp
movslq %ebp,%r15
mulsd  (%rsi,%r15,8),%xmm5
addsd  %xmm3,%xmm4
subsd  %xmm5,%xmm4
movsd  %xmm4,0x18(%r11,%r8,8)
movsd  (%rsi,%r14,8),%xmm3
movsd  -0x8(%rbx,%r8,4),%xmm4
xorpd  %xmm1,%xmm4
mulsd  (%rdi,%r12,8),%xmm4
mov    -0x8(%rsp),%r12
mov    -0x64(%rsp),%r11d
mulsd  (%r9,%r8,4),%xmm3
subsd  %xmm3,%xmm4
movsd  (%rbx,%r8,4),%xmm3
mulsd  (%rdi,%r10,8),%xmm3
addsd  %xmm4,%xmm3
movsd  %xmm3,0x10(%r12,%r8,8)
movsd  (%r9,%r8,4),%xmm3
mulsd  (%rsi,%rdx,8),%xmm3
movsd  -0x8(%rbx,%r8,4),%xmm4
mulsd  (%rdi,%rcx,8),%xmm4
movsd  (%rbx,%r8,4),%xmm5
subsd  %xmm4,%xmm3
mulsd  (%rdi,%r15,8),%xmm5
addsd  %xmm3,%xmm5
movsd  %xmm5,0x18(%r12,%r8,8)
add    $0x2,%r8
add    $0xffffffff,%r13d
add    $0xfffffffffffffff0,%rax
cmp    %r13d,%r11d
jne    1520 <dv2uv+0x420>
mov    -0x60(%rsp),%rcx
lea    (%r8,%rcx,2),%ebp
sub    %r13d,%ecx
mov    -0x48(%rsp),%rdx
sub    %rax,%rdx
lea    0x10(%rdx),%rbx
sub    %rax,%r12
lea    0x10(%r12),%r13
mov    %ecx,%eax
mov    -0x28(%rsp),%r9
mov    -0x30(%rsp),%r8
jmp    128d <dv2uv+0x18d>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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