void dExp2(int *Dim, double *Xv, int *nCol, int *simIdxV, int *len,
           double *result) {
  int N = *Dim;
  int nSim = *nCol;
  int iSim;
  int ii, jj;
  int i, j, k, l, m, n;
  double tmp;
  for (i = 0; i < *len; i++)
    result[i] = 0;
  for (i = 0; i < N - 1; i++) {
    for (j = i + 1; j < N; j++) {
      result[0] += Xv[i * N + j];
    }
  }
  result[0] = result[0] / (((double)N) * (N - 1) / 2);
  for (i = 0; i < N - 1; i++) {
    for (j = i + 1; j < N; j++) {
      Xv[i * N + j] -= result[0];
      Xv[j * N + i] -= result[0];
    }
  }
  for (jj = 0; jj < nSim; jj++) {
    for (ii = 0; ii < N - 3; ii = ii + 4) {
      iSim = jj * N + ii;
      i = simIdxV[iSim];
      j = simIdxV[iSim + 1];
      k = simIdxV[iSim + 2];
      l = simIdxV[iSim + 3];
      tmp = Xv[i * N + j] * Xv[j * N + k] * Xv[k * N + l];
      result[6] += tmp;
      result[12] += Xv[i * N + j] * tmp;
      result[13] += Xv[j * N + k] * tmp;
      result[16] += Xv[i * N + l] * tmp;
      tmp = Xv[i * N + j] * Xv[i * N + k] * Xv[i * N + l];
      result[7] += tmp;
      result[14] += Xv[i * N + j] * tmp;
      result[15] += Xv[j * N + k] * tmp;
      result[17] +=
          Xv[i * N + j] * Xv[i * N + j] * Xv[k * N + l] * Xv[k * N + l];
    }
  }
  tmp = (N / 4) * ((double)nSim);
  result[6] = result[6] / tmp;
  result[7] = result[7] / tmp;
  result[12] = result[12] / tmp;
  result[13] = result[13] / tmp;
  result[14] = result[14] / tmp;
  result[15] = result[15] / tmp;
  result[16] = result[16] / tmp;
  result[17] = result[17] / tmp;
  for (jj = 0; jj < nSim; jj++) {
    for (ii = 0; ii < N - 4; ii = ii + 5) {
      iSim = jj * N + ii;
      i = simIdxV[iSim];
      j = simIdxV[iSim + 1];
      k = simIdxV[iSim + 2];
      l = simIdxV[iSim + 3];
      m = simIdxV[iSim + 4];
      result[18] +=
          Xv[i * N + j] * Xv[j * N + k] * Xv[k * N + l] * Xv[l * N + m];
      tmp = Xv[i * N + j] * Xv[i * N + k] * Xv[i * N + l];
      result[19] += tmp * Xv[i * N + m];
      result[20] += tmp * Xv[l * N + m];
      result[21] +=
          Xv[i * N + j] * Xv[i * N + k] * Xv[l * N + m] * Xv[l * N + m];
    }
  }
  tmp = (N / 5) * ((double)nSim);
  result[18] = result[18] / tmp;
  result[19] = result[19] / tmp;
  result[20] = result[20] / tmp;
  result[21] = result[21] / tmp;
  for (jj = 0; jj < nSim; jj++) {
    for (ii = 0; ii < N - 5; ii = ii + 6) {
      iSim = jj * N + ii;
      i = simIdxV[iSim];
      j = simIdxV[iSim + 1];
      k = simIdxV[iSim + 2];
      l = simIdxV[iSim + 3];
      m = simIdxV[iSim + 4];
      n = simIdxV[iSim + 5];
      result[22] +=
          Xv[i * N + j] * Xv[i * N + k] * Xv[l * N + m] * Xv[l * N + n];
    }
  }
  tmp = (N / 6) * ((double)nSim);
  result[22] = result[22] / tmp;
}


x86 assembly (clang, -O0):
<dExp2>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x34(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    -0x28(%rbp),%rcx
cmp    (%rcx),%eax
jge    1162 <dExp2+0x62>
mov    -0x30(%rbp),%rax
movslq -0x48(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1135 <dExp2+0x35>
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    11d2 <dExp2+0xd2>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    11bf <dExp2+0xbf>
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1183 <dExp2+0x83>
jmp    11c4 <dExp2+0xc4>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1169 <dExp2+0x69>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
cvtsi2sdl -0x34(%rbp),%xmm1
mov    -0x34(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm2
mulsd  %xmm2,%xmm1
movsd  0xe0b(%rip),%xmm2
divsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12a1 <dExp2+0x1a1>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    128e <dExp2+0x18e>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1226 <dExp2+0x126>
jmp    1293 <dExp2+0x193>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    120c <dExp2+0x10c>
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    1564 <dExp2+0x464>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x34(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1551 <dExp2+0x451>
mov    -0x44(%rbp),%eax
imul   -0x34(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x48(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x50(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x54(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x50(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x50(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x54(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
addsd  0x30(%rax),%xmm0
movsd  %xmm0,0x30(%rax)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x68(%rbp),%xmm2
mov    -0x30(%rbp),%rax
movsd  0x60(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x60(%rax)
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x50(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x68(%rbp),%xmm2
mov    -0x30(%rbp),%rax
movsd  0x68(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x68(%rax)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x54(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x68(%rbp),%xmm2
mov    -0x30(%rbp),%rax
movsd  0x80(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x80(%rax)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x50(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x54(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
addsd  0x38(%rax),%xmm0
movsd  %xmm0,0x38(%rax)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x68(%rbp),%xmm2
mov    -0x30(%rbp),%rax
movsd  0x70(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x70(%rax)
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x50(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  -0x68(%rbp),%xmm2
mov    -0x30(%rbp),%rax
movsd  0x78(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x78(%rax)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x50(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x54(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x50(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x54(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movsd  0x88(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x88(%rax)
mov    -0x40(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x40(%rbp)
jmp    12bb <dExp2+0x1bb>
jmp    1556 <dExp2+0x456>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    12a8 <dExp2+0x1a8>
mov    -0x34(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x30(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x30(%rbp),%rax
movsd  0x38(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x30(%rbp),%rax
movsd  0x60(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x30(%rbp),%rax
movsd  0x68(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x30(%rbp),%rax
movsd  0x70(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x70(%rax)
mov    -0x30(%rbp),%rax
movsd  0x78(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x30(%rbp),%rax
movsd  0x80(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x80(%rax)
mov    -0x30(%rbp),%rax
movsd  0x88(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x88(%rax)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    1895 <dExp2+0x795>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x34(%rbp),%ecx
sub    $0x4,%ecx
cmp    %ecx,%eax
jge    1882 <dExp2+0x782>
mov    -0x44(%rbp),%eax
imul   -0x34(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x48(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x50(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x54(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x50(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x50(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x54(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x54(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movsd  0x90(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x90(%rax)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x50(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x54(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movsd  0x98(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x98(%rax)
movsd  -0x68(%rbp),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x54(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movsd  0xa0(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0xa0(%rax)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x50(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x54(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x58(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x54(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x58(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movsd  0xa8(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0xa8(%rax)
mov    -0x40(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x40(%rbp)
jmp    165f <dExp2+0x55f>
jmp    1887 <dExp2+0x787>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    164c <dExp2+0x54c>
mov    -0x34(%rbp),%eax
mov    $0x5,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x90(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x90(%rax)
mov    -0x30(%rbp),%rax
movsd  0x98(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x98(%rax)
mov    -0x30(%rbp),%rax
movsd  0xa0(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0xa0(%rax)
mov    -0x30(%rbp),%rax
movsd  0xa8(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0xa8(%rax)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    1a60 <dExp2+0x960>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x34(%rbp),%ecx
sub    $0x5,%ecx
cmp    %ecx,%eax
jge    1a4d <dExp2+0x94d>
mov    -0x44(%rbp),%eax
imul   -0x34(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x48(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x50(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x54(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x58(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x50(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x54(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x58(%rbp),%ecx
movslq %ecx,%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
mov    -0x54(%rbp),%ecx
imul   -0x34(%rbp),%ecx
add    -0x5c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movsd  0xb0(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0xb0(%rax)
mov    -0x40(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x40(%rbp)
jmp    1940 <dExp2+0x840>
jmp    1a52 <dExp2+0x952>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    192d <dExp2+0x82d>
mov    -0x34(%rbp),%eax
mov    $0x6,%ecx
cltd
idiv   %ecx
cvtsi2sd %eax,%xmm0
cvtsi2sdl -0x38(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  0xb0(%rax),%xmm0
divsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0xb0(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<dExp2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r9,%r15
mov    %rcx,%r14
mov    %rsi,%r12
mov    (%rdi),%ebx
movslq %ebx,%r13
mov    (%rdx),%eax
mov    %rax,0x8(%rsp)
mov    (%r8),%edx
test   %edx,%edx
mov    %rbx,0x10(%rsp)
jle    1152 <dExp2+0x42>
shl    $0x3,%rdx
mov    %r15,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
mov    0x10(%rsp),%rbx
lea    -0x1(%r13),%edx
cmp    $0x2,%r13d
jl     11b5 <dExp2+0xa5>
mov    %edx,%r8d
lea    0x8(,%rbx,8),%r9
xor    %eax,%eax
mov    %rbx,%rsi
mov    %r12,%rdi
jmp    118c <dExp2+0x7c>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    %r9,%rdi
add    $0xffffffffffffffff,%rsi
cmp    %r8,%rax
je     11dc <dExp2+0xcc>
add    $0x1,%rax
cmp    %rbx,%rax
jae    1180 <dExp2+0x70>
movsd  (%r15),%xmm0
mov    $0x1,%ecx
nop
addsd  (%rdi,%rcx,8),%xmm0
movsd  %xmm0,(%r15)
add    $0x1,%rcx
cmp    %rcx,%rsi
jne    11a0 <dExp2+0x90>
jmp    1180 <dExp2+0x70>
cvtsi2sd %ebx,%xmm0
movsd  (%r15),%xmm1
cvtsi2sd %edx,%xmm2
mulsd  %xmm0,%xmm2
mulsd  0xe32(%rip),%xmm2
divsd  %xmm2,%xmm1
movsd  %xmm1,(%r15)
jmp    126a <dExp2+0x15a>
xorps  %xmm0,%xmm0
cvtsi2sd %r13d,%xmm0
cvtsi2sd %edx,%xmm1
mulsd  %xmm0,%xmm1
mulsd  0xe0c(%rip),%xmm1
movsd  (%r15),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%r15)
cmp    $0x2,%ebx
jl     126a <dExp2+0x15a>
lea    (%r12,%rbx,8),%rdi
lea    0x0(,%rbx,8),%rsi
xor    %r10d,%r10d
mov    %rbx,%rbp
mov    %r12,%rax
jmp    122f <dExp2+0x11f>
xchg   %ax,%ax
add    %r9,%rdi
add    %r9,%rax
add    $0xffffffffffffffff,%rbp
cmp    %r8,%r10
je     126a <dExp2+0x15a>
add    $0x1,%r10
cmp    %rbx,%r10
jae    1220 <dExp2+0x110>
mov    $0x1,%ecx
mov    %rdi,%rdx
movsd  (%rax,%rcx,8),%xmm0
subsd  (%r15),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  (%rdx),%xmm0
subsd  (%r15),%xmm0
movsd  %xmm0,(%rdx)
add    %rsi,%rdx
add    $0x1,%rcx
cmp    %rcx,%rbp
jne    1240 <dExp2+0x130>
jmp    1220 <dExp2+0x110>
cmpl   $0x0,0x8(%rsp)
jle    140d <dExp2+0x2fd>
lea    -0x3(%r13),%r10
lea    0xc(%r14),%r11
lea    0x0(,%r13,4),%rax
mov    %rax,0x20(%rsp)
xor    %eax,%eax
mov    0x10(%rsp),%r9
jmp    12b9 <dExp2+0x1a9>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x18(%rsp),%rax
add    $0x1,%rax
add    0x20(%rsp),%r11
cmp    0x8(%rsp),%rax
je     140d <dExp2+0x2fd>
mov    %rax,0x18(%rsp)
cmp    $0x4,%r13d
jl     12a0 <dExp2+0x190>
movsd  0x30(%r15),%xmm8
movsd  0x38(%r15),%xmm9
movsd  0x60(%r15),%xmm2
movsd  0x68(%r15),%xmm3
movsd  0x80(%r15),%xmm4
movsd  0x70(%r15),%xmm5
movsd  0x78(%r15),%xmm6
movsd  0x88(%r15),%xmm7
xor    %edi,%edi
nopl   0x0(%rax)
mov    -0x8(%r11,%rdi,4),%edx
mov    -0x4(%r11,%rdi,4),%eax
mov    (%r11,%rdi,4),%r8d
mov    -0xc(%r11,%rdi,4),%ecx
imul   %r13d,%ecx
lea    (%rcx,%rdx,1),%esi
movslq %esi,%rbp
imul   %r9d,%edx
add    %eax,%edx
movsd  (%r12,%rbp,8),%xmm0
movslq %edx,%rdx
mulsd  (%r12,%rdx,8),%xmm0
mov    %r9d,%esi
imul   %eax,%esi
add    %r8d,%esi
movslq %esi,%rsi
mulsd  (%r12,%rsi,8),%xmm0
addsd  %xmm0,%xmm8
movsd  %xmm8,0x30(%r15)
movsd  (%r12,%rbp,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  %xmm1,%xmm2
movsd  %xmm2,0x60(%r15)
movsd  (%r12,%rdx,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  %xmm1,%xmm3
add    %ecx,%r8d
movsd  %xmm3,0x68(%r15)
movslq %r8d,%rbx
mulsd  (%r12,%rbx,8),%xmm0
addsd  %xmm0,%xmm4
movsd  %xmm4,0x80(%r15)
add    %eax,%ecx
movslq %ecx,%rax
movsd  (%r12,%rbp,8),%xmm0
mulsd  (%r12,%rax,8),%xmm0
mulsd  (%r12,%rbx,8),%xmm0
addsd  %xmm0,%xmm9
movsd  %xmm9,0x38(%r15)
movsd  (%r12,%rbp,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  %xmm1,%xmm5
movsd  %xmm5,0x70(%r15)
mulsd  (%r12,%rdx,8),%xmm0
addsd  %xmm0,%xmm6
movsd  %xmm6,0x78(%r15)
movsd  (%r12,%rbp,8),%xmm0
mulsd  %xmm0,%xmm0
movsd  (%r12,%rsi,8),%xmm1
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm0,%xmm7
movsd  %xmm7,0x88(%r15)
add    $0x4,%rdi
cmp    %r10,%rdi
jl     1300 <dExp2+0x1f0>
jmp    12a0 <dExp2+0x190>
lea    0x3(%r13),%eax
test   %r13d,%r13d
cmovns %r13d,%eax
sar    $0x2,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mov    0x8(%rsp),%rax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mulsd  %xmm0,%xmm1
unpcklpd %xmm1,%xmm1
movupd 0x30(%r15),%xmm2
movupd 0x60(%r15),%xmm3
movupd 0x70(%r15),%xmm4
movupd 0x80(%r15),%xmm5
divpd  %xmm1,%xmm2
movupd %xmm2,0x30(%r15)
divpd  %xmm1,%xmm3
movupd %xmm3,0x60(%r15)
divpd  %xmm1,%xmm4
movupd %xmm4,0x70(%r15)
divpd  %xmm1,%xmm5
movupd %xmm5,0x80(%r15)
test   %eax,%eax
jle    15da <dExp2+0x4ca>
lea    -0x4(%r13),%r10
lea    0x10(%r14),%r11
lea    0x0(,%r13,4),%rax
mov    %rax,0x18(%rsp)
xor    %r9d,%r9d
mov    0x10(%rsp),%r8
jmp    14c4 <dExp2+0x3b4>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r9
add    0x18(%rsp),%r11
cmp    0x8(%rsp),%r9
je     15da <dExp2+0x4ca>
cmp    $0x5,%r13d
jl     14b0 <dExp2+0x3a0>
movsd  0x90(%r15),%xmm1
movsd  0x98(%r15),%xmm2
movsd  0xa0(%r15),%xmm3
movsd  0xa8(%r15),%xmm4
xor    %edi,%edi
mov    -0xc(%r11,%rdi,4),%eax
mov    -0x8(%r11,%rdi,4),%esi
mov    -0x10(%r11,%rdi,4),%edx
imul   %r13d,%edx
lea    (%rdx,%rax,1),%ebp
movslq %ebp,%rbp
mov    %r8d,%ebx
imul   %eax,%ebx
movsd  (%r12,%rbp,8),%xmm5
add    %esi,%ebx
movslq %ebx,%rax
mulsd  (%r12,%rax,8),%xmm5
mov    -0x4(%r11,%rdi,4),%ebx
mov    %r13d,%eax
imul   %esi,%eax
add    %ebx,%eax
mov    (%r11,%rdi,4),%ecx
cltq
mulsd  (%r12,%rax,8),%xmm5
mov    %r13d,%eax
imul   %ebx,%eax
add    %ecx,%eax
cltq
mulsd  (%r12,%rax,8),%xmm5
addsd  %xmm5,%xmm1
movsd  %xmm1,0x90(%r15)
add    %edx,%esi
movsd  (%r12,%rbp,8),%xmm5
movslq %esi,%rsi
mulsd  (%r12,%rsi,8),%xmm5
add    %edx,%ebx
movslq %ebx,%rbx
mulsd  (%r12,%rbx,8),%xmm5
add    %ecx,%edx
movslq %edx,%rcx
movsd  (%r12,%rcx,8),%xmm6
mulsd  %xmm5,%xmm6
addsd  %xmm6,%xmm2
movsd  %xmm2,0x98(%r15)
mulsd  (%r12,%rax,8),%xmm5
addsd  %xmm5,%xmm3
movsd  %xmm3,0xa0(%r15)
movsd  (%r12,%rbp,8),%xmm5
mulsd  (%r12,%rsi,8),%xmm5
movsd  (%r12,%rax,8),%xmm6
mulsd  %xmm6,%xmm5
mulsd  %xmm6,%xmm5
addsd  %xmm5,%xmm4
movsd  %xmm4,0xa8(%r15)
add    $0x5,%rdi
cmp    %r10,%rdi
jl     14f0 <dExp2+0x3e0>
jmp    14b0 <dExp2+0x3a0>
mov    0x10(%rsp),%r11
movslq %r11d,%rax
imul   $0x66666667,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
sar    $0x21,%rax
add    %ecx,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  %xmm0,%xmm1
unpcklpd %xmm1,%xmm1
movupd 0x90(%r15),%xmm2
movupd 0xa0(%r15),%xmm3
divpd  %xmm1,%xmm2
movupd %xmm2,0x90(%r15)
divpd  %xmm1,%xmm3
movupd %xmm3,0xa0(%r15)
cmpl   $0x0,0x8(%rsp)
jle    16ea <dExp2+0x5da>
lea    -0x5(%r13),%r10
add    $0x14,%r14
lea    0x0(,%r13,4),%r8
xor    %r9d,%r9d
jmp    166e <dExp2+0x55e>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%r9
add    %r8,%r14
cmp    0x8(%rsp),%r9
je     16ea <dExp2+0x5da>
cmp    $0x6,%r11d
jl     1660 <dExp2+0x550>
movsd  0xb0(%r15),%xmm1
xor    %esi,%esi
nop
movslq -0x14(%r14,%rsi,4),%rdi
movslq -0x10(%r14,%rsi,4),%rbp
movslq -0xc(%r14,%rsi,4),%rbx
movslq -0x8(%r14,%rsi,4),%rcx
movslq -0x4(%r14,%rsi,4),%rdx
movslq (%r14,%rsi,4),%rax
imul   %r13,%rdi
add    %rdi,%rbp
movsd  (%r12,%rbp,8),%xmm2
movslq %edi,%rdi
add    %rbx,%rdi
mulsd  (%r12,%rdi,8),%xmm2
imul   %r13,%rcx
add    %rcx,%rdx
mulsd  (%r12,%rdx,8),%xmm2
movslq %ecx,%rcx
add    %rax,%rcx
mulsd  (%r12,%rcx,8),%xmm2
addsd  %xmm2,%xmm1
movsd  %xmm1,0xb0(%r15)
add    $0x6,%rsi
cmp    %r10,%rsi
jl     1680 <dExp2+0x570>
jmp    1660 <dExp2+0x550>
movslq %r11d,%rax
imul   $0x2aaaaaab,%rax,%rax
mov    %rax,%rcx
shr    $0x3f,%rcx
shr    $0x20,%rax
add    %ecx,%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  %xmm0,%xmm1
movsd  0xb0(%r15),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0xb0(%r15)
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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