void cov_dna(double *nrisk, double *nev, int *dd, double *cov) {
  const int d = *dd;
  const int D = pow(d, 2);
  double temp_cov[D][D];
  double t_cov[D * D];
  double sum_nev[d];
  int a, b, i, j, k, l, e, f;
  double nr = 0;
  double temp[d][d];
  for (a = 0; a < d; ++a) {
    sum_nev[a] = 0;
    for (b = 0; b < d; ++b) {
      temp[a][b] = 0.0;
    }
  }
  for (a = 0; a < D; ++a) {
    for (b = 0; b < D; ++b) {
      temp_cov[a][b] = 0.0;
      t_cov[a + D * b] = 0.0;
    }
  }
  for (a = 0; a < d; ++a) {
    for (b = 0; b < d; ++b) {
      sum_nev[a] += nev[a + d * b];
    }
  }
  for (i = 0; i < d; ++i) {
    for (j = 0; j < d; ++j) {
      for (k = 0; k < d; ++k) {
        for (l = 0; l < d; ++l) {
          if (nrisk[k] != 0) {
            nr = pow(nrisk[k], 3);
            if (k == l) {
              if (k == i) {
                if (l == j) {
                  temp[k][l] = ((nrisk[k] - sum_nev[k]) * sum_nev[k]) / nr;
                } else {
                  temp[k][l] =
                      -(((nrisk[k] - sum_nev[k]) * nev[k + j * d]) / nr);
                }
              } else {
                if (i != k && j != k) {
                  if (i == j) {
                    temp[k][l] =
                        ((nrisk[k] - nev[k + i * d]) * nev[k + i * d]) / nr;
                  } else {
                    temp[k][l] = (-nev[k + i * d] * nev[k + j * d]) / nr;
                  }
                }
              }
            }
          }
          temp_cov[i * d + k][j * d + l] = temp[k][l];
          for (e = 0; e < d; ++e) {
            for (f = 0; f < d; ++f) {
              temp[e][f] = 0.0;
            }
          }
        }
      }
    }
  }
  for (i = 0; i < D; ++i) {
    for (j = 0; j < D; ++j) {
      t_cov[i + j * D] = temp_cov[i][j];
    }
  }
  for (i = 0; i < D; ++i) {
    for (j = 0; j < D; ++j) {
      if (t_cov[j * D + i] != 0.0) {
        cov[j * D + i] = t_cov[j * D + i];
        cov[i * D + j] = t_cov[j * D + i];
        t_cov[j * D + i] = cov[j * D + i];
      }
    }
  }
}


x86 assembly (clang, -O0):
<cov_dna>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x24(%rbp)
cvtsi2sdl -0x24(%rbp),%xmm0
movsd  0xebf(%rip),%xmm1
call   1030 <pow@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    %rax,-0xb8(%rbp)
mov    %rsp,%rcx
mov    %rcx,-0x30(%rbp)
mov    %rax,%rcx
imul   %rcx,%rcx
lea    0xf(,%rcx,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xb0(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x38(%rbp)
mov    %rax,-0x40(%rbp)
mov    -0x28(%rbp),%eax
imul   %eax,%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xa8(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x48(%rbp)
mov    -0x24(%rbp),%eax
lea    0xf(,%rax,8),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0xa0(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x78(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
mov    %rcx,%rax
mov    %rax,-0x98(%rbp)
mov    %rcx,%rdx
imul   %rdx,%rdx
lea    0xf(,%rdx,8),%rsi
and    $0xfffffffffffffff0,%rsi
mov    %rsp,%rdx
sub    %rsi,%rdx
mov    %rdx,-0x90(%rbp)
mov    %rdx,%rsp
mov    %rcx,-0x80(%rbp)
mov    %rax,-0x88(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    129a <cov_dna+0x18a>
mov    -0xa0(%rbp),%rax
movslq -0x54(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1287 <cov_dna+0x177>
mov    -0x90(%rbp),%rax
mov    -0x98(%rbp),%rdx
movslq -0x54(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x58(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    1244 <cov_dna+0x134>
jmp    128c <cov_dna+0x17c>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    121e <cov_dna+0x10e>
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    1328 <cov_dna+0x218>
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    1315 <cov_dna+0x205>
mov    -0xa8(%rbp),%rax
mov    -0xb0(%rbp),%rcx
mov    -0xb8(%rbp),%rsi
movslq -0x54(%rbp),%rdx
imul   %rsi,%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
movslq -0x58(%rbp),%rdx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rcx,%rdx,8)
mov    -0x54(%rbp),%ecx
mov    -0x28(%rbp),%edx
imul   -0x58(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    12b4 <cov_dna+0x1a4>
jmp    131a <cov_dna+0x20a>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    12a1 <cov_dna+0x191>
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    139c <cov_dna+0x28c>
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1389 <cov_dna+0x279>
mov    -0xa0(%rbp),%rax
mov    -0x10(%rbp),%rcx
mov    -0x54(%rbp),%edx
mov    -0x24(%rbp),%esi
imul   -0x58(%rbp),%esi
add    %esi,%edx
movslq %edx,%rdx
movsd  (%rcx,%rdx,8),%xmm0
movslq -0x54(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    1342 <cov_dna+0x232>
jmp    138e <cov_dna+0x27e>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    132f <cov_dna+0x21f>
movl   $0x0,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1753 <cov_dna+0x643>
movl   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1740 <cov_dna+0x630>
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    172d <cov_dna+0x61d>
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    171a <cov_dna+0x60a>
mov    -0x8(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    140d <cov_dna+0x2fd>
jp     140d <cov_dna+0x2fd>
jmp    1639 <cov_dna+0x529>
mov    -0x8(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  0xbe6(%rip),%xmm1
call   1030 <pow@plt>
movsd  %xmm0,-0x78(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x68(%rbp),%eax
jne    1634 <cov_dna+0x524>
mov    -0x64(%rbp),%eax
cmp    -0x5c(%rbp),%eax
jne    1522 <cov_dna+0x412>
mov    -0x68(%rbp),%eax
cmp    -0x60(%rbp),%eax
jne    14a6 <cov_dna+0x396>
mov    -0x90(%rbp),%rax
mov    -0x98(%rbp),%rdx
mov    -0xa0(%rbp),%rcx
mov    -0x8(%rbp),%rsi
movslq -0x64(%rbp),%rdi
movsd  (%rsi,%rdi,8),%xmm0
movslq -0x64(%rbp),%rsi
subsd  (%rcx,%rsi,8),%xmm0
movslq -0x64(%rbp),%rsi
mulsd  (%rcx,%rsi,8),%xmm0
divsd  -0x78(%rbp),%xmm0
movslq -0x64(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x68(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    151d <cov_dna+0x40d>
mov    -0x90(%rbp),%rax
mov    -0x98(%rbp),%rdx
mov    -0xa0(%rbp),%rcx
mov    -0x8(%rbp),%rsi
movslq -0x64(%rbp),%rdi
movsd  (%rsi,%rdi,8),%xmm0
movslq -0x64(%rbp),%rsi
subsd  (%rcx,%rsi,8),%xmm0
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%esi
mov    -0x60(%rbp),%edi
imul   -0x24(%rbp),%edi
add    %edi,%esi
movslq %esi,%rsi
mulsd  (%rcx,%rsi,8),%xmm0
divsd  -0x78(%rbp),%xmm0
movq   %xmm0,%rcx
movabs $0x8000000000000000,%rsi
xor    %rsi,%rcx
movq   %rcx,%xmm0
movslq -0x64(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x68(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    162f <cov_dna+0x51f>
mov    -0x5c(%rbp),%eax
cmp    -0x64(%rbp),%eax
je     162a <cov_dna+0x51a>
mov    -0x60(%rbp),%eax
cmp    -0x64(%rbp),%eax
je     162a <cov_dna+0x51a>
mov    -0x5c(%rbp),%eax
cmp    -0x60(%rbp),%eax
jne    15b3 <cov_dna+0x4a3>
mov    -0x90(%rbp),%rax
mov    -0x98(%rbp),%rdx
mov    -0x8(%rbp),%rcx
movslq -0x64(%rbp),%rsi
movsd  (%rcx,%rsi,8),%xmm0
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%esi
mov    -0x5c(%rbp),%edi
imul   -0x24(%rbp),%edi
add    %edi,%esi
movslq %esi,%rsi
subsd  (%rcx,%rsi,8),%xmm0
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%esi
mov    -0x5c(%rbp),%edi
imul   -0x24(%rbp),%edi
add    %edi,%esi
movslq %esi,%rsi
mulsd  (%rcx,%rsi,8),%xmm0
divsd  -0x78(%rbp),%xmm0
movslq -0x64(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x68(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1625 <cov_dna+0x515>
mov    -0x90(%rbp),%rax
mov    -0x98(%rbp),%rdx
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%esi
mov    -0x5c(%rbp),%edi
imul   -0x24(%rbp),%edi
add    %edi,%esi
movslq %esi,%rsi
movsd  (%rcx,%rsi,8),%xmm0
movq   %xmm0,%rcx
movabs $0x8000000000000000,%rsi
xor    %rsi,%rcx
movq   %rcx,%xmm0
mov    -0x10(%rbp),%rcx
mov    -0x64(%rbp),%esi
mov    -0x60(%rbp),%edi
imul   -0x24(%rbp),%edi
add    %edi,%esi
movslq %esi,%rsi
mulsd  (%rcx,%rsi,8),%xmm0
divsd  -0x78(%rbp),%xmm0
movslq -0x64(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x68(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    162a <cov_dna+0x51a>
jmp    162f <cov_dna+0x51f>
jmp    1634 <cov_dna+0x524>
jmp    1639 <cov_dna+0x529>
mov    -0xb0(%rbp),%rax
mov    -0xb8(%rbp),%rdx
mov    -0x90(%rbp),%rcx
mov    -0x98(%rbp),%rdi
movslq -0x64(%rbp),%rsi
imul   %rdi,%rsi
shl    $0x3,%rsi
add    %rsi,%rcx
movslq -0x68(%rbp),%rsi
movsd  (%rcx,%rsi,8),%xmm0
mov    -0x5c(%rbp),%ecx
imul   -0x24(%rbp),%ecx
add    -0x64(%rbp),%ecx
movslq %ecx,%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    -0x60(%rbp),%ecx
imul   -0x24(%rbp),%ecx
add    -0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    1707 <cov_dna+0x5f7>
movl   $0x0,-0x70(%rbp)
mov    -0x70(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    16f4 <cov_dna+0x5e4>
mov    -0x90(%rbp),%rax
mov    -0x98(%rbp),%rdx
movslq -0x6c(%rbp),%rcx
imul   %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x70(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x70(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    16b1 <cov_dna+0x5a1>
jmp    16f9 <cov_dna+0x5e9>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    169e <cov_dna+0x58e>
jmp    170c <cov_dna+0x5fc>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    13dc <cov_dna+0x2cc>
jmp    171f <cov_dna+0x60f>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    13c9 <cov_dna+0x2b9>
jmp    1732 <cov_dna+0x622>
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    13b6 <cov_dna+0x2a6>
jmp    1745 <cov_dna+0x635>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    13a3 <cov_dna+0x293>
movl   $0x0,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    17db <cov_dna+0x6cb>
movl   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    17c8 <cov_dna+0x6b8>
mov    -0xa8(%rbp),%rax
mov    -0xb0(%rbp),%rcx
mov    -0xb8(%rbp),%rsi
movslq -0x5c(%rbp),%rdx
imul   %rsi,%rdx
shl    $0x3,%rdx
add    %rdx,%rcx
movslq -0x60(%rbp),%rdx
movsd  (%rcx,%rdx,8),%xmm0
mov    -0x5c(%rbp),%ecx
mov    -0x60(%rbp),%edx
imul   -0x28(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    176d <cov_dna+0x65d>
jmp    17cd <cov_dna+0x6bd>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    175a <cov_dna+0x64a>
movl   $0x0,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    18d7 <cov_dna+0x7c7>
movl   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    18c4 <cov_dna+0x7b4>
mov    -0xa8(%rbp),%rax
mov    -0x60(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x5c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1832 <cov_dna+0x722>
jp     1832 <cov_dna+0x722>
jmp    18b1 <cov_dna+0x7a1>
mov    -0xa8(%rbp),%rax
mov    -0x60(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x5c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rcx
mov    -0x60(%rbp),%edx
imul   -0x28(%rbp),%edx
add    -0x5c(%rbp),%edx
movslq %edx,%rdx
movsd  %xmm0,(%rcx,%rdx,8)
mov    -0x60(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x5c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rcx
mov    -0x5c(%rbp),%edx
imul   -0x28(%rbp),%edx
add    -0x60(%rbp),%edx
movslq %edx,%rdx
movsd  %xmm0,(%rcx,%rdx,8)
mov    -0x20(%rbp),%rcx
mov    -0x60(%rbp),%edx
imul   -0x28(%rbp),%edx
add    -0x5c(%rbp),%edx
movslq %edx,%rdx
movsd  (%rcx,%rdx,8),%xmm0
mov    -0x60(%rbp),%ecx
imul   -0x28(%rbp),%ecx
add    -0x5c(%rbp),%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    18b6 <cov_dna+0x7a6>
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    17f5 <cov_dna+0x6e5>
jmp    18c9 <cov_dna+0x7b9>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    17e2 <cov_dna+0x6d2>
mov    -0x30(%rbp),%rax
mov    %rax,%rsp
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cov_dna>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xc8,%rsp
mov    %rcx,-0xc8(%rbp)
mov    %rsi,-0x58(%rbp)
mov    %rdi,-0x98(%rbp)
mov    (%rdx),%r13d
cvtsi2sd %r13d,%xmm0
mulsd  %xmm0,%xmm0
cvttsd2si %xmm0,%r14d
mov    %r14,%rax
imul   %r14,%rax
mov    %rsp,%rcx
lea    0xf(,%rax,8),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rcx
mov    %rcx,-0x50(%rbp)
mov    %rcx,%rsp
mov    %r14d,%eax
imul   %eax,%eax
mov    %rsp,%rcx
lea    0xf(,%rax,8),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rcx
mov    %rcx,-0x48(%rbp)
mov    %rcx,%rsp
mov    %rsp,%rcx
lea    0xf(,%r13,8),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rcx
mov    %rcx,-0x90(%rbp)
mov    %rcx,%rsp
mov    %r13,%rax
imul   %r13,%rax
mov    %rsp,%rcx
lea    0xf(,%rax,8),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rcx
mov    %rcx,-0x60(%rbp)
mov    %rcx,%rsp
test   %r13d,%r13d
mov    %r14,-0x30(%rbp)
mov    %r13,-0x88(%rbp)
jle    12f6 <cov_dna+0x1d6>
lea    0x0(,%r13,8),%r12
xor    %ebx,%ebx
mov    -0x90(%rbp),%rdi
xor    %esi,%esi
mov    %r12,%rdx
call   1030 <memset@plt>
lea    -0x1(%r13),%rax
mov    %r13d,%r15d
and    $0x7,%r15d
cmp    $0x7,%rax
jb     12c0 <cov_dna+0x1a0>
mov    %r13d,%eax
and    $0xfffffff8,%eax
mov    %rax,-0x40(%rbp)
shl    $0x6,%r13
mov    %r13,-0x38(%rbp)
xor    %ebx,%ebx
mov    -0x60(%rbp),%r13
xchg   %ax,%ax
mov    %r13,%rdi
xor    %esi,%esi
mov    %r12,%rdx
call   1030 <memset@plt>
lea    (%r12,%r13,1),%r14
mov    %r14,%rdi
xor    %esi,%esi
mov    %r12,%rdx
call   1030 <memset@plt>
add    %r12,%r14
mov    %r14,%rdi
xor    %esi,%esi
mov    %r12,%rdx
call   1030 <memset@plt>
add    %r12,%r14
mov    %r14,%rdi
xor    %esi,%esi
mov    %r12,%rdx
call   1030 <memset@plt>
add    %r12,%r14
mov    %r14,%rdi
xor    %esi,%esi
mov    %r12,%rdx
call   1030 <memset@plt>
add    %r12,%r14
mov    %r14,%rdi
xor    %esi,%esi
mov    %r12,%rdx
call   1030 <memset@plt>
add    %r12,%r14
mov    %r14,%rdi
xor    %esi,%esi
mov    %r12,%rdx
call   1030 <memset@plt>
add    %r12,%r14
mov    %r14,%rdi
xor    %esi,%esi
mov    %r12,%rdx
call   1030 <memset@plt>
add    $0x8,%rbx
add    -0x38(%rbp),%r13
cmp    %rbx,-0x40(%rbp)
jne    1230 <cov_dna+0x110>
test   %r15,%r15
mov    -0x30(%rbp),%r14
mov    -0x88(%rbp),%rax
je     12f6 <cov_dna+0x1d6>
imul   %rax,%rbx
mov    -0x60(%rbp),%rax
lea    (%rax,%rbx,8),%rbx
nopl   0x0(%rax)
mov    %rbx,%rdi
xor    %esi,%esi
mov    %r12,%rdx
call   1030 <memset@plt>
add    %r12,%rbx
add    $0xffffffffffffffff,%r15
jne    12e0 <cov_dna+0x1c0>
test   %r14d,%r14d
jle    1415 <cov_dna+0x2f5>
mov    %r14,%rcx
lea    0x0(,%r14,8),%rbx
lea    -0x1(%r14),%rax
mov    %rax,-0x80(%rbp)
mov    %ecx,%eax
and    $0x3,%eax
mov    %rax,-0x68(%rbp)
mov    %ecx,%r12d
and    $0xfffffffc,%r12d
mov    %r14,%r13
shl    $0x4,%r13
shl    $0x5,%r14
lea    (%rbx,%rbx,2),%r15
xor    %esi,%esi
mov    -0x48(%rbp),%rdi
jmp    1355 <cov_dna+0x235>
nopl   0x0(%rax)
add    $0x1,%rsi
add    $0x8,%rdi
mov    -0x30(%rbp),%rcx
cmp    %rcx,%rsi
je     1415 <cov_dna+0x2f5>
mov    %rdi,-0x38(%rbp)
mov    %rsi,-0x40(%rbp)
mov    %rsi,%rax
imul   %rcx,%rax
mov    -0x50(%rbp),%rcx
lea    (%rcx,%rax,8),%rdi
xor    %esi,%esi
mov    %rbx,%rdx
call   1030 <memset@plt>
cmpq   $0x3,-0x80(%rbp)
jae    1390 <cov_dna+0x270>
xor    %eax,%eax
mov    -0x40(%rbp),%rsi
mov    -0x38(%rbp),%rdi
jmp    13db <cov_dna+0x2bb>
nopl   0x0(%rax)
mov    -0x38(%rbp),%rdi
mov    %rdi,%rcx
xor    %eax,%eax
mov    -0x30(%rbp),%rdx
mov    -0x40(%rbp),%rsi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movq   $0x0,(%rcx)
movq   $0x0,(%rcx,%rdx,8)
movq   $0x0,(%rcx,%r13,1)
movq   $0x0,(%rcx,%r15,1)
add    $0x4,%rax
add    %r14,%rcx
cmp    %rax,%r12
jne    13b0 <cov_dna+0x290>
cmpq   $0x0,-0x68(%rbp)
je     1340 <cov_dna+0x220>
imul   -0x30(%rbp),%rax
add    %rsi,%rax
mov    -0x48(%rbp),%rcx
lea    (%rcx,%rax,8),%rax
mov    -0x68(%rbp),%rcx
nopw   0x0(%rax,%rax,1)
movq   $0x0,(%rax)
add    %rbx,%rax
add    $0xffffffffffffffff,%rcx
jne    1400 <cov_dna+0x2e0>
jmp    1340 <cov_dna+0x220>
mov    -0x88(%rbp),%rcx
test   %ecx,%ecx
jle    183b <cov_dna+0x71b>
lea    -0x1(%rcx),%rax
mov    %rax,-0xc0(%rbp)
mov    %ecx,%r8d
and    $0x3,%r8d
mov    %ecx,%r11d
and    $0xfffffffc,%r11d
mov    %rcx,%rdx
shl    $0x4,%rdx
mov    %rcx,%rsi
shl    $0x5,%rsi
lea    0x0(,%rcx,8),%r14
lea    (%r14,%r14,2),%rdi
xor    %r10d,%r10d
mov    -0x58(%rbp),%r9
mov    -0x90(%rbp),%r15
jmp    1483 <cov_dna+0x363>
nopw   0x0(%rax,%rax,1)
movsd  %xmm0,(%r15,%r10,8)
add    $0x1,%r10
add    $0x8,%r9
cmp    %rcx,%r10
je     1502 <cov_dna+0x3e2>
movsd  (%r15,%r10,8),%xmm0
cmpq   $0x3,-0xc0(%rbp)
03
jae    14a0 <cov_dna+0x380>
xor    %eax,%eax
jmp    14cf <cov_dna+0x3af>
nopw   0x0(%rax,%rax,1)
mov    %r9,%rbx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nop
addsd  (%rbx),%xmm0
addsd  (%rbx,%rcx,8),%xmm0
addsd  (%rbx,%rdx,1),%xmm0
addsd  (%rbx,%rdi,1),%xmm0
add    $0x4,%rax
add    %rsi,%rbx
cmp    %rax,%r11
jne    14b0 <cov_dna+0x390>
test   %r8,%r8
je     1470 <cov_dna+0x350>
imul   %rcx,%rax
add    %r10,%rax
mov    -0x58(%rbp),%rbx
lea    (%rbx,%rax,8),%rax
mov    %r8,%rbx
cs nopw 0x0(%rax,%rax,1)
addsd  (%rax),%xmm0
add    %r14,%rax
add    $0xffffffffffffffff,%rbx
jne    14f0 <cov_dna+0x3d0>
jmp    1470 <cov_dna+0x350>
test   %ecx,%ecx
jle    183b <cov_dna+0x71b>
mov    %ecx,%eax
and    $0x7,%eax
mov    %rax,-0x68(%rbp)
mov    %ecx,%r15d
and    $0xfffffff8,%r15d
mov    %rcx,%r12
shl    $0x6,%r12
xor    %eax,%eax
mov    %r12,-0x40(%rbp)
jmp    1541 <cov_dna+0x421>
nopl   0x0(%rax)
mov    -0x78(%rbp),%rax
add    $0x1,%rax
cmp    %rcx,%rax
je     183b <cov_dna+0x71b>
mov    %rax,%rdx
mov    %rax,-0x78(%rbp)
imul   %rcx,%rax
mov    %rax,-0xd0(%rbp)
xor    %eax,%eax
jmp    156d <cov_dna+0x44d>
nopw   0x0(%rax,%rax,1)
mov    -0x70(%rbp),%rax
add    $0x1,%rax
cmp    %rcx,%rax
je     1530 <cov_dna+0x410>
mov    %rax,-0x70(%rbp)
imul   %rcx,%rax
mov    %rax,-0x80(%rbp)
xor    %r13d,%r13d
jmp    1589 <cov_dna+0x469>
xchg   %ax,%ax
add    $0x1,%r13
cmp    %rcx,%r13
je     1560 <cov_dna+0x440>
mov    -0xd0(%rbp),%rax
lea    (%rax,%r13,1),%rdx
mov    -0x80(%rbp),%rax
add    %r13,%rax
mov    %rax,-0xb0(%rbp)
mov    %r13,%rax
imul   %rcx,%rax
mov    -0x60(%rbp),%rcx
lea    (%rcx,%rax,8),%rsi
mov    %rdx,%rax
mov    %rdx,-0xa8(%rbp)
imul   -0x30(%rbp),%rax
mov    -0x50(%rbp),%rcx
lea    (%rcx,%rax,8),%rax
mov    %rax,-0xd8(%rbp)
lea    (%rsi,%r13,8),%rax
mov    %rax,-0xa0(%rbp)
mov    -0x78(%rbp),%rax
mov    %rsi,-0xe0(%rbp)
lea    (%rsi,%rax,8),%rax
mov    %rax,-0xb8(%rbp)
xor    %ebx,%ebx
mov    %r13,-0xe8(%rbp)
jmp    161f <cov_dna+0x4ff>
nopl   0x0(%rax,%rax,1)
mov    -0x38(%rbp),%rbx
add    $0x1,%rbx
mov    -0x88(%rbp),%rcx
cmp    %rcx,%rbx
mov    -0xe8(%rbp),%r13
je     1580 <cov_dna+0x460>
mov    -0x98(%rbp),%rax
movsd  (%rax,%r13,8),%xmm0
ucomisd 0x9d4(%rip),%xmm0
jne    163c <cov_dna+0x51c>
jnp    1722 <cov_dna+0x602>
movsd  0x9bc(%rip),%xmm1
call   1040 <pow@plt>
cmp    %rbx,%r13
jne    1722 <cov_dna+0x602>
mov    -0x78(%rbp),%rcx
cmp    %rcx,%r13
jne    168f <cov_dna+0x56f>
mov    -0x98(%rbp),%rax
movsd  (%rax,%r13,8),%xmm2
mov    -0x90(%rbp),%rax
movsd  (%rax,%r13,8),%xmm1
subsd  %xmm1,%xmm2
cmp    -0x70(%rbp),%rcx
jne    16ca <cov_dna+0x5aa>
mulsd  %xmm2,%xmm1
mov    -0xb8(%rbp),%rax
jmp    171a <cov_dna+0x5fa>
cmp    %r13,-0x70(%rbp)
je     1722 <cov_dna+0x602>
mov    -0x70(%rbp),%rax
cmp    %rax,-0x78(%rbp)
jne    16ef <cov_dna+0x5cf>
mov    -0x98(%rbp),%rax
movsd  (%rax,%r13,8),%xmm1
mov    -0x58(%rbp),%rax
mov    -0xa8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
subsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
jmp    1713 <cov_dna+0x5f3>
xorpd  0x93e(%rip),%xmm2
mov    -0x58(%rbp),%rax
mov    -0xb0(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm2
movapd %xmm2,%xmm1
mov    -0xb8(%rbp),%rax
jmp    171a <cov_dna+0x5fa>
mov    -0x58(%rbp),%rax
mov    -0xa8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
xorpd  0x909(%rip),%xmm1
mov    -0xb0(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm1
mov    -0xa0(%rbp),%rax
divsd  %xmm0,%xmm1
movsd  %xmm1,(%rax)
mov    -0x80(%rbp),%rax
add    %rbx,%rax
mov    -0xe0(%rbp),%rcx
movsd  (%rcx,%rbx,8),%xmm0
mov    -0xd8(%rbp),%rcx
movsd  %xmm0,(%rcx,%rax,8)
cmpq   $0x7,-0xc0(%rbp)
07
mov    %rbx,-0x38(%rbp)
jae    1760 <cov_dna+0x640>
xor    %r13d,%r13d
jmp    17ff <cov_dna+0x6df>
nopw   0x0(%rax,%rax,1)
mov    -0x60(%rbp),%rbx
xor    %r13d,%r13d
nopw   0x0(%rax,%rax,1)
mov    %rbx,%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1030 <memset@plt>
lea    (%rbx,%r14,1),%r12
mov    %r12,%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1030 <memset@plt>
add    %r14,%r12
mov    %r12,%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1030 <memset@plt>
add    %r14,%r12
mov    %r12,%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1030 <memset@plt>
add    %r14,%r12
mov    %r12,%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1030 <memset@plt>
add    %r14,%r12
mov    %r12,%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1030 <memset@plt>
add    %r14,%r12
mov    %r12,%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1030 <memset@plt>
add    %r14,%r12
mov    %r12,%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1030 <memset@plt>
add    $0x8,%r13
add    -0x40(%rbp),%rbx
cmp    %r13,%r15
jne    1770 <cov_dna+0x650>
cmpq   $0x0,-0x68(%rbp)
je     1600 <cov_dna+0x4e0>
imul   -0x88(%rbp),%r13
ff
mov    -0x60(%rbp),%rax
lea    (%rax,%r13,8),%rbx
mov    -0x68(%rbp),%r12
xchg   %ax,%ax
mov    %rbx,%rdi
xor    %esi,%esi
mov    %r14,%rdx
call   1030 <memset@plt>
add    %r14,%rbx
add    $0xffffffffffffffff,%r12
jne    1820 <cov_dna+0x700>
jmp    1600 <cov_dna+0x4e0>
mov    -0x30(%rbp),%r15
test   %r15d,%r15d
mov    -0x48(%rbp),%r11
jle    19bf <cov_dna+0x89f>
lea    -0x1(%r15),%r8
mov    %r15d,%edx
and    $0x3,%edx
mov    %r15d,%r9d
and    $0xfffffffc,%r9d
mov    -0x50(%rbp),%rax
lea    0x18(%rax),%rdi
lea    0x0(,%r15,8),%r13
mov    %r15,%r14
shl    $0x4,%r14
shl    $0x5,%r15
lea    0x0(,%r13,2),%r12
add    %r13,%r12
xor    %r10d,%r10d
jmp    18a9 <cov_dna+0x789>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r10
add    %r13,%rdi
add    $0x8,%r11
add    %r13,-0x50(%rbp)
cmp    -0x30(%rbp),%r10
je     194a <cov_dna+0x82a>
cmp    $0x3,%r8
jae    18c0 <cov_dna+0x7a0>
xor    %ebx,%ebx
jmp    1909 <cov_dna+0x7e9>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r11,%rcx
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nop
movsd  -0x18(%rdi,%rbx,8),%xmm0
movsd  %xmm0,(%rcx)
movsd  -0x10(%rdi,%rbx,8),%xmm0
movsd  %xmm0,(%rcx,%r13,1)
movsd  -0x8(%rdi,%rbx,8),%xmm0
movsd  %xmm0,(%rcx,%r14,1)
movsd  (%rdi,%rbx,8),%xmm0
movsd  %xmm0,(%rcx,%r12,1)
add    $0x4,%rbx
add    %r15,%rcx
cmp    %rbx,%r9
jne    18d0 <cov_dna+0x7b0>
test   %rdx,%rdx
je     1890 <cov_dna+0x770>
mov    -0x30(%rbp),%rcx
imul   %rbx,%rcx
add    %r10,%rcx
mov    -0x48(%rbp),%rax
lea    (%rax,%rcx,8),%rcx
mov    -0x50(%rbp),%rax
lea    (%rax,%rbx,8),%rbx
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
movsd  (%rbx,%rsi,8),%xmm0
movsd  %xmm0,(%rcx)
add    $0x1,%rsi
add    %r13,%rcx
cmp    %rsi,%rdx
jne    1930 <cov_dna+0x810>
jmp    1890 <cov_dna+0x770>
mov    -0x30(%rbp),%rcx
test   %ecx,%ecx
mov    -0xc8(%rbp),%rdx
mov    -0x48(%rbp),%rax
jle    19bf <cov_dna+0x89f>
xor    %r8d,%r8d
xorpd  %xmm0,%xmm0
mov    %rdx,%rbx
jmp    1984 <cov_dna+0x864>
nopl   0x0(%rax)
add    $0x1,%r8
add    %r13,%rbx
add    $0x8,%rax
add    $0x8,%rdx
cmp    %rcx,%r8
je     19bf <cov_dna+0x89f>
xor    %esi,%esi
xor    %edi,%edi
jmp    199c <cov_dna+0x87c>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rdi
add    %rcx,%rsi
cmp    %rdi,%rcx
je     1970 <cov_dna+0x850>
movsd  (%rax,%rsi,8),%xmm1
ucomisd %xmm0,%xmm1
jne    19a9 <cov_dna+0x889>
jnp    1990 <cov_dna+0x870>
movsd  %xmm1,(%rdx,%rsi,8)
movsd  %xmm1,(%rbx,%rdi,8)
movsd  (%rdx,%rsi,8),%xmm1
movsd  %xmm1,(%rax,%rsi,8)
jmp    1990 <cov_dna+0x870>
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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