double evaluateGTRGAMMAPROT(int *ex1, int *ex2, int *wptr, double *x1,
                            double *x2, double *EIGN, double *gammaRates,
                            double *tipVector, double pz, char *tipX1,
                            int lower, int n) {
  double sum, z, lz, term, ki;
  int i, j;
  double *diagptable, *diagptable_start, *left, *right;
  z = pz;
  if (z < 1.0E-15)
    z = 1.0E-15;
  lz = log(z);
  diagptable = diagptable_start = (double *)malloc(sizeof(double) * 4 * 19);
  for (i = 0; i < 4; i++) {
    ki = gammaRates[i];
    for (j = 0; j < 19; j++)
      *diagptable++ = exp(EIGN[j] * ki * lz);
  }
  sum = 0.0;
  if (tipX1) {
    for (i = lower; i < n; i++) {
      left = &(tipVector[20 * tipX1[i]]);
      diagptable = diagptable_start;
      term = 0;
      for (j = 0; j < 4; j++) {
        right = &(x2[80 * i + 20 * j]);
        term += left[0] * right[0];
        term += left[1] * right[1] * *diagptable++;
        term += left[2] * right[2] * *diagptable++;
        term += left[3] * right[3] * *diagptable++;
        term += left[4] * right[4] * *diagptable++;
        term += left[5] * right[5] * *diagptable++;
        term += left[6] * right[6] * *diagptable++;
        term += left[7] * right[7] * *diagptable++;
        term += left[8] * right[8] * *diagptable++;
        term += left[9] * right[9] * *diagptable++;
        term += left[10] * right[10] * *diagptable++;
        term += left[11] * right[11] * *diagptable++;
        term += left[12] * right[12] * *diagptable++;
        term += left[13] * right[13] * *diagptable++;
        term += left[14] * right[14] * *diagptable++;
        term += left[15] * right[15] * *diagptable++;
        term += left[16] * right[16] * *diagptable++;
        term += left[17] * right[17] * *diagptable++;
        term += left[18] * right[18] * *diagptable++;
        term += left[19] * right[19] * *diagptable++;
      }
      term =
          log(0.25 * term) +
          (ex2[i] *
           log((
               1.0 /
               115792089237316195423570985008687907853269984665640564039457584007913129639936.0)));
      sum += wptr[i] * term;
    }
    free(diagptable_start);
    return sum;
  }
  for (i = lower; i < n; i++) {
    diagptable = diagptable_start;
    term = 0;
    for (j = 0; j < 4; j++) {
      left = &(x1[80 * i + 20 * j]);
      right = &(x2[80 * i + 20 * j]);
      term += left[0] * right[0];
      term += left[1] * right[1] * *diagptable++;
      term += left[2] * right[2] * *diagptable++;
      term += left[3] * right[3] * *diagptable++;
      term += left[4] * right[4] * *diagptable++;
      term += left[5] * right[5] * *diagptable++;
      term += left[6] * right[6] * *diagptable++;
      term += left[7] * right[7] * *diagptable++;
      term += left[8] * right[8] * *diagptable++;
      term += left[9] * right[9] * *diagptable++;
      term += left[10] * right[10] * *diagptable++;
      term += left[11] * right[11] * *diagptable++;
      term += left[12] * right[12] * *diagptable++;
      term += left[13] * right[13] * *diagptable++;
      term += left[14] * right[14] * *diagptable++;
      term += left[15] * right[15] * *diagptable++;
      term += left[16] * right[16] * *diagptable++;
      term += left[17] * right[17] * *diagptable++;
      term += left[18] * right[18] * *diagptable++;
      term += left[19] * right[19] * *diagptable++;
    }
    term =
        log(0.25 * term) +
        ((ex1[i] + ex2[i]) *
         log((
             1.0 /
             115792089237316195423570985008687907853269984665640564039457584007913129639936.0)));
    sum += wptr[i] * term;
  }
  free(diagptable_start);
  return sum;
}


x86 assembly (clang, -O0):
<evaluateGTRGAMMAPROT>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xe74(%rip),%xmm0
ucomisd -0x50(%rbp),%xmm0
jbe    11a4 <evaluateGTRGAMMAPROT+0x64>
movsd  0xe61(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0x58(%rbp)
mov    $0x260,%edi
call   1040 <malloc@plt>
mov    %rax,-0x80(%rbp)
mov    %rax,-0x78(%rbp)
movl   $0x0,-0x6c(%rbp)
cmpl   $0x4,-0x6c(%rbp)
jge    1249 <evaluateGTRGAMMAPROT+0x109>
mov    0x10(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
movl   $0x0,-0x70(%rbp)
cmpl   $0x13,-0x70(%rbp)
jge    1236 <evaluateGTRGAMMAPROT+0xf6>
mov    -0x38(%rbp),%rax
movslq -0x70(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x68(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  %xmm0,(%rax)
mov    -0x70(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    11ef <evaluateGTRGAMMAPROT+0xaf>
jmp    123b <evaluateGTRGAMMAPROT+0xfb>
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    11cc <evaluateGTRGAMMAPROT+0x8c>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
cmpq   $0x0,0x20(%rbp)
je     184d <evaluateGTRGAMMAPROT+0x70d>
mov    0x28(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cmp    0x30(%rbp),%eax
jge    1835 <evaluateGTRGAMMAPROT+0x6f5>
mov    0x18(%rbp),%rax
mov    0x20(%rbp),%rcx
movslq -0x6c(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
imul   $0x14,%ecx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x88(%rbp)
mov    -0x80(%rbp),%rax
mov    %rax,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x0,-0x70(%rbp)
cmpl   $0x4,-0x70(%rbp)
jge    17a7 <evaluateGTRGAMMAPROT+0x667>
mov    -0x30(%rbp),%rax
imul   $0x50,-0x6c(%rbp),%ecx
imul   $0x14,-0x70(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x90(%rbp)
mov    -0x88(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x90(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x20(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x38(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x40(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x50(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x58(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x60(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x70(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x78(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x78(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x80(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x80(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x88(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x88(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x90(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x90(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x98(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x98(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x70(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    12a9 <evaluateGTRGAMMAPROT+0x169>
movsd  0x861(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x18(%rbp),%rax
movslq -0x6c(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  0x82a(%rip),%xmm0
call   1060 <log@plt>
movsd  -0xa0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x98(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1262 <evaluateGTRGAMMAPROT+0x122>
mov    -0x80(%rbp),%rdi
call   1030 <free@plt>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1e41 <evaluateGTRGAMMAPROT+0xd01>
mov    0x28(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cmp    0x30(%rbp),%eax
jge    1e2e <evaluateGTRGAMMAPROT+0xcee>
mov    -0x80(%rbp),%rax
mov    %rax,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x0,-0x70(%rbp)
cmpl   $0x4,-0x70(%rbp)
jge    1d93 <evaluateGTRGAMMAPROT+0xc53>
mov    -0x28(%rbp),%rax
imul   $0x50,-0x6c(%rbp),%ecx
imul   $0x14,-0x70(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x88(%rbp)
mov    -0x30(%rbp),%rax
imul   $0x50,-0x6c(%rbp),%ecx
imul   $0x14,-0x70(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x90(%rbp)
mov    -0x88(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x90(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x20(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x38(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x40(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x50(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x58(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x60(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x70(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x78(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x78(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x80(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x80(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x88(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x88(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x90(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x90(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x88(%rbp),%rax
movsd  0x98(%rax),%xmm0
mov    -0x90(%rbp),%rax
mulsd  0x98(%rax),%xmm0
mov    -0x78(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x78(%rbp)
movsd  (%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x70(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    1876 <evaluateGTRGAMMAPROT+0x736>
movsd  0x275(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x6c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x18(%rbp),%rcx
movslq -0x6c(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  0x231(%rip),%xmm0
call   1060 <log@plt>
movsd  -0xb0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xa8(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x6c(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    1853 <evaluateGTRGAMMAPROT+0x713>
mov    -0x80(%rbp),%rdi
call   1030 <free@plt>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<evaluateGTRGAMMAPROT>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %r9,%rbp
mov    %r8,%rbx
mov    %rcx,0x18(%rsp)
mov    %rdx,0x30(%rsp)
mov    %rsi,0x28(%rsp)
mov    %rdi,0x20(%rsp)
mov    0x98(%rsp),%r13
mov    0x90(%rsp),%r14
movsd  0xe80(%rip),%xmm1
maxsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
call   1060 <log@plt>
movsd  %xmm0,(%rsp)
mov    $0x260,%edi
call   1040 <malloc@plt>
mov    %rax,%r12
xor    %r15d,%r15d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%r14),%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  0x0(%rbp),%xmm0
mulsd  %xmm1,%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,(%r12,%r15,8)
movsd  0x8(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x8(%r12,%r15,8)
movsd  0x10(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x10(%r12,%r15,8)
movsd  0x18(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x18(%r12,%r15,8)
movsd  0x20(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x20(%r12,%r15,8)
movsd  0x28(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x28(%r12,%r15,8)
movsd  0x30(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x30(%r12,%r15,8)
movsd  0x38(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x38(%r12,%r15,8)
movsd  0x40(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x40(%r12,%r15,8)
movsd  0x48(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x48(%r12,%r15,8)
movsd  0x50(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x50(%r12,%r15,8)
movsd  0x58(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x58(%r12,%r15,8)
movsd  0x60(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x60(%r12,%r15,8)
movsd  0x68(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x68(%r12,%r15,8)
movsd  0x70(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x70(%r12,%r15,8)
movsd  0x78(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x78(%r12,%r15,8)
movsd  0x80(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x80(%r12,%r15,8)
movsd  0x88(%rbp),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x88(%r12,%r15,8)
movsd  0x8(%rsp),%xmm0
mulsd  0x90(%rbp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x90(%r12,%r15,8)
add    $0x8,%r14
add    $0x13,%r15
cmp    $0x4c,%r15
jne    11b0 <evaluateGTRGAMMAPROT+0x70>
mov    0xa0(%rsp),%r15
xorpd  %xmm1,%xmm1
mov    0xb0(%rsp),%eax
mov    0xa8(%rsp),%ecx
test   %r15,%r15
je     1741 <evaluateGTRGAMMAPROT+0x601>
cmp    %eax,%ecx
jge    19c6 <evaluateGTRGAMMAPROT+0x886>
movslq %ecx,%rbp
movslq %eax,%r14
lea    0x0(,%rbp,4),%rax
add    %rbp,%rax
shl    $0x7,%rax
add    %rax,%rbx
xorpd  %xmm1,%xmm1
nopw   0x0(%rax,%rax,1)
movsd  %xmm1,0x10(%rsp)
movsbq (%r15,%rbp,1),%rax
lea    (%rax,%rax,4),%rdx
shl    $0x5,%rdx
movsd  0x0(%r13,%rdx,1),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x8(%r13,%rdx,1),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x10(%r13,%rdx,1),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x18(%r13,%rdx,1),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x20(%r13,%rdx,1),%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  0x28(%r13,%rdx,1),%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0x30(%r13,%rdx,1),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x38(%r13,%rdx,1),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x40(%r13,%rdx,1),%xmm14
movsd  0x48(%r13,%rdx,1),%xmm15
movsd  0x50(%r13,%rdx,1),%xmm4
movsd  0x58(%r13,%rdx,1),%xmm5
movsd  0x60(%r13,%rdx,1),%xmm6
movsd  0x68(%r13,%rdx,1),%xmm7
movsd  0x70(%r13,%rdx,1),%xmm1
movsd  0x78(%r13,%rdx,1),%xmm8
mov    $0x98,%eax
mov    %r12,%rcx
movsd  0x80(%r13,%rdx,1),%xmm9
movsd  0x88(%r13,%rdx,1),%xmm10
movsd  0x90(%r13,%rdx,1),%xmm11
movsd  0x98(%r13,%rdx,1),%xmm12
xorpd  %xmm0,%xmm0
cs nopw 0x0(%rax,%rax,1)
movsd  -0x98(%rbx,%rax,1),%xmm13
ff ff ff
mulsd  (%rsp),%xmm13
addsd  %xmm0,%xmm13
movsd  -0x90(%rbx,%rax,1),%xmm0
ff ff
mulsd  0x8(%rsp),%xmm0
mulsd  (%rcx),%xmm0
addsd  %xmm13,%xmm0
movsd  -0x88(%rbx,%rax,1),%xmm2
ff ff
mulsd  0x20(%rsp),%xmm2
mulsd  0x8(%rcx),%xmm2
addsd  %xmm0,%xmm2
movsd  -0x80(%rbx,%rax,1),%xmm0
mulsd  0x18(%rsp),%xmm0
mulsd  0x10(%rcx),%xmm0
movsd  -0x78(%rbx,%rax,1),%xmm3
mulsd  0x50(%rsp),%xmm3
mulsd  0x18(%rcx),%xmm3
addsd  %xmm2,%xmm0
addsd  %xmm0,%xmm3
movsd  -0x70(%rbx,%rax,1),%xmm0
mulsd  0x48(%rsp),%xmm0
mulsd  0x20(%rcx),%xmm0
addsd  %xmm3,%xmm0
movsd  -0x68(%rbx,%rax,1),%xmm2
mulsd  0x40(%rsp),%xmm2
mulsd  0x28(%rcx),%xmm2
addsd  %xmm0,%xmm2
movsd  -0x60(%rbx,%rax,1),%xmm0
mulsd  0x38(%rsp),%xmm0
mulsd  0x30(%rcx),%xmm0
movsd  -0x58(%rbx,%rax,1),%xmm3
mulsd  %xmm14,%xmm3
mulsd  0x38(%rcx),%xmm3
addsd  %xmm2,%xmm0
addsd  %xmm0,%xmm3
movsd  -0x50(%rbx,%rax,1),%xmm0
mulsd  %xmm15,%xmm0
mulsd  0x40(%rcx),%xmm0
addsd  %xmm3,%xmm0
movsd  -0x48(%rbx,%rax,1),%xmm2
mulsd  %xmm4,%xmm2
mulsd  0x48(%rcx),%xmm2
addsd  %xmm0,%xmm2
movsd  -0x40(%rbx,%rax,1),%xmm0
mulsd  %xmm5,%xmm0
mulsd  0x50(%rcx),%xmm0
movsd  -0x38(%rbx,%rax,1),%xmm3
mulsd  %xmm6,%xmm3
mulsd  0x58(%rcx),%xmm3
addsd  %xmm2,%xmm0
addsd  %xmm0,%xmm3
movsd  -0x30(%rbx,%rax,1),%xmm0
mulsd  %xmm7,%xmm0
mulsd  0x60(%rcx),%xmm0
addsd  %xmm3,%xmm0
movsd  -0x28(%rbx,%rax,1),%xmm2
mulsd  %xmm1,%xmm2
mulsd  0x68(%rcx),%xmm2
addsd  %xmm0,%xmm2
movsd  -0x20(%rbx,%rax,1),%xmm0
mulsd  %xmm8,%xmm0
mulsd  0x70(%rcx),%xmm0
movsd  -0x18(%rbx,%rax,1),%xmm3
mulsd  %xmm9,%xmm3
mulsd  0x78(%rcx),%xmm3
addsd  %xmm2,%xmm0
addsd  %xmm0,%xmm3
movsd  -0x10(%rbx,%rax,1),%xmm0
mulsd  %xmm10,%xmm0
mulsd  0x80(%rcx),%xmm0
addsd  %xmm3,%xmm0
movsd  -0x8(%rbx,%rax,1),%xmm2
mulsd  %xmm11,%xmm2
mulsd  0x88(%rcx),%xmm2
addsd  %xmm0,%xmm2
movsd  (%rbx,%rax,1),%xmm0
mulsd  %xmm12,%xmm0
mulsd  0x90(%rcx),%xmm0
addsd  %xmm2,%xmm0
add    $0xa0,%rax
add    $0x98,%rcx
cmp    $0x318,%rax
jne    1530 <evaluateGTRGAMMAPROT+0x3f0>
mulsd  0x916(%rip),%xmm0
call   1060 <log@plt>
mov    0x28(%rsp),%rax
cvtsi2sdl (%rax,%rbp,4),%xmm1
mulsd  0x907(%rip),%xmm1
addsd  %xmm0,%xmm1
mov    0x30(%rsp),%rax
xorps  %xmm0,%xmm0
cvtsi2sdl (%rax,%rbp,4),%xmm0
mulsd  %xmm1,%xmm0
movsd  0x10(%rsp),%xmm1
addsd  %xmm0,%xmm1
add    $0x1,%rbp
add    $0x280,%rbx
cmp    %r14,%rbp
jne    1440 <evaluateGTRGAMMAPROT+0x300>
jmp    19c6 <evaluateGTRGAMMAPROT+0x886>
cmp    %eax,%ecx
mov    0x20(%rsp),%r13
jge    19c6 <evaluateGTRGAMMAPROT+0x886>
movslq %ecx,%r15
movslq %eax,%r14
lea    (%r15,%r15,4),%rax
shl    $0x7,%rax
mov    0x18(%rsp),%rcx
lea    (%rcx,%rax,1),%rbp
add    $0x98,%rbp
add    %rax,%rbx
add    $0x98,%rbx
xorpd  %xmm1,%xmm1
nopw   0x0(%rax,%rax,1)
movsd  %xmm1,0x10(%rsp)
xor    %eax,%eax
mov    %r12,%rcx
xorpd  %xmm0,%xmm0
nop
movsd  -0x98(%rbp,%rax,1),%xmm1
ff ff
movsd  -0x90(%rbp,%rax,1),%xmm2
ff ff
mulsd  -0x98(%rbx,%rax,1),%xmm1
ff ff
addsd  %xmm0,%xmm1
mulsd  -0x90(%rbx,%rax,1),%xmm2
ff ff
mulsd  (%rcx),%xmm2
addsd  %xmm1,%xmm2
movsd  -0x88(%rbp,%rax,1),%xmm0
ff ff
mulsd  -0x88(%rbx,%rax,1),%xmm0
ff ff
mulsd  0x8(%rcx),%xmm0
addsd  %xmm2,%xmm0
movsd  -0x80(%rbp,%rax,1),%xmm1
mulsd  -0x80(%rbx,%rax,1),%xmm1
mulsd  0x10(%rcx),%xmm1
addsd  %xmm0,%xmm1
movsd  -0x78(%rbp,%rax,1),%xmm0
mulsd  -0x78(%rbx,%rax,1),%xmm0
mulsd  0x18(%rcx),%xmm0
addsd  %xmm1,%xmm0
movsd  -0x70(%rbp,%rax,1),%xmm1
mulsd  -0x70(%rbx,%rax,1),%xmm1
mulsd  0x20(%rcx),%xmm1
addsd  %xmm0,%xmm1
movsd  -0x68(%rbp,%rax,1),%xmm0
mulsd  -0x68(%rbx,%rax,1),%xmm0
mulsd  0x28(%rcx),%xmm0
addsd  %xmm1,%xmm0
movsd  -0x60(%rbp,%rax,1),%xmm1
mulsd  -0x60(%rbx,%rax,1),%xmm1
mulsd  0x30(%rcx),%xmm1
addsd  %xmm0,%xmm1
movsd  -0x58(%rbp,%rax,1),%xmm0
mulsd  -0x58(%rbx,%rax,1),%xmm0
mulsd  0x38(%rcx),%xmm0
addsd  %xmm1,%xmm0
movsd  -0x50(%rbp,%rax,1),%xmm1
mulsd  -0x50(%rbx,%rax,1),%xmm1
mulsd  0x40(%rcx),%xmm1
addsd  %xmm0,%xmm1
movsd  -0x48(%rbp,%rax,1),%xmm0
mulsd  -0x48(%rbx,%rax,1),%xmm0
mulsd  0x48(%rcx),%xmm0
addsd  %xmm1,%xmm0
movsd  -0x40(%rbp,%rax,1),%xmm1
mulsd  -0x40(%rbx,%rax,1),%xmm1
mulsd  0x50(%rcx),%xmm1
addsd  %xmm0,%xmm1
movsd  -0x38(%rbp,%rax,1),%xmm0
mulsd  -0x38(%rbx,%rax,1),%xmm0
mulsd  0x58(%rcx),%xmm0
addsd  %xmm1,%xmm0
movsd  -0x30(%rbp,%rax,1),%xmm1
mulsd  -0x30(%rbx,%rax,1),%xmm1
mulsd  0x60(%rcx),%xmm1
addsd  %xmm0,%xmm1
movsd  -0x28(%rbp,%rax,1),%xmm0
mulsd  -0x28(%rbx,%rax,1),%xmm0
mulsd  0x68(%rcx),%xmm0
addsd  %xmm1,%xmm0
movsd  -0x20(%rbp,%rax,1),%xmm1
mulsd  -0x20(%rbx,%rax,1),%xmm1
mulsd  0x70(%rcx),%xmm1
addsd  %xmm0,%xmm1
movsd  -0x18(%rbp,%rax,1),%xmm0
mulsd  -0x18(%rbx,%rax,1),%xmm0
mulsd  0x78(%rcx),%xmm0
addsd  %xmm1,%xmm0
movsd  -0x10(%rbp,%rax,1),%xmm1
mulsd  -0x10(%rbx,%rax,1),%xmm1
mulsd  0x80(%rcx),%xmm1
addsd  %xmm0,%xmm1
movsd  -0x8(%rbp,%rax,1),%xmm2
mulsd  -0x8(%rbx,%rax,1),%xmm2
mulsd  0x88(%rcx),%xmm2
addsd  %xmm1,%xmm2
movsd  0x0(%rbp,%rax,1),%xmm0
mulsd  (%rbx,%rax,1),%xmm0
mulsd  0x90(%rcx),%xmm0
addsd  %xmm2,%xmm0
add    $0xa0,%rax
add    $0x98,%rcx
cmp    $0x280,%rax
jne    1790 <evaluateGTRGAMMAPROT+0x650>
mulsd  0x69f(%rip),%xmm0
call   1060 <log@plt>
mov    0x28(%rsp),%rax
mov    (%rax,%r15,4),%eax
add    0x0(%r13,%r15,4),%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  0x685(%rip),%xmm1
addsd  %xmm0,%xmm1
mov    0x30(%rsp),%rax
xorps  %xmm0,%xmm0
cvtsi2sdl (%rax,%r15,4),%xmm0
mulsd  %xmm1,%xmm0
movsd  0x10(%rsp),%xmm1
addsd  %xmm0,%xmm1
add    $0x1,%r15
add    $0x280,%rbp
add    $0x280,%rbx
cmp    %r14,%r15
jne    1780 <evaluateGTRGAMMAPROT+0x640>
movsd  %xmm1,0x10(%rsp)
mov    %r12,%rdi
call   1030 <free@plt>
movsd  0x10(%rsp),%xmm0
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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