double evaluateGTRGAMMAMULT(int *ex1, int *ex2, int *modelptr, int *wptr,
                            double *x1_start, double *x2_start, double *EIGN,
                            double *gammaRates, double *tipVector, double *pz,
                            char *tipX1, int lower, int n, int numberOfModels,
                            int multiBranch) {
  double sum = 0.0, z, lz = 0.0, term, ki;
  int i, model;
  double *diagptable, *diagptable_start, *x1, *x2;
  if (!multiBranch) {
    z = pz[0];
    if (z < 1.0E-15)
      z = 1.0E-15;
    lz = log(z);
  }
  diagptable = diagptable_start =
      (double *)malloc(sizeof(double) * 12 * numberOfModels);
  for (model = 0; model < numberOfModels; model++) {
    if (multiBranch) {
      z = pz[model];
      if (z < 1.0E-15)
        z = 1.0E-15;
      lz = log(z);
    }
    diagptable = &diagptable_start[12 * model];
    for (i = 0; i < 4; i++) {
      ki = gammaRates[model * 4 + i];
      *diagptable++ = exp(EIGN[model * 3] * ki * lz);
      *diagptable++ = exp(EIGN[model * 3 + 1] * ki * lz);
      *diagptable++ = exp(EIGN[model * 3 + 2] * ki * lz);
    }
  }
  if (tipX1) {
    for (i = lower; i < n; i++) {
      model = modelptr[i];
      x1 = &(tipVector[64 * model + 4 * tipX1[i]]);
      x2 = &x2_start[16 * i];
      diagptable = &diagptable_start[12 * model];
      term = x1[0] * x2[0];
      term += x1[1] * x2[1] * *diagptable++;
      term += x1[2] * x2[2] * *diagptable++;
      term += x1[3] * x2[3] * *diagptable++;
      term += x1[0] * x2[4];
      term += x1[1] * x2[5] * *diagptable++;
      term += x1[2] * x2[6] * *diagptable++;
      term += x1[3] * x2[7] * *diagptable++;
      term += x1[0] * x2[8];
      term += x1[1] * x2[9] * *diagptable++;
      term += x1[2] * x2[10] * *diagptable++;
      term += x1[3] * x2[11] * *diagptable++;
      term += x1[0] * x2[12];
      term += x1[1] * x2[13] * *diagptable++;
      term += x1[2] * x2[14] * *diagptable++;
      term += x1[3] * x2[15] * *diagptable++;
      term =
          log(0.25 * term) +
          (ex2[i] *
           log((
               1.0 /
               115792089237316195423570985008687907853269984665640564039457584007913129639936.0)));
      sum += wptr[i] * term;
    }
    free(diagptable_start);
    return sum;
  } else {
    for (i = lower; i < n; i++) {
      model = modelptr[i];
      diagptable = &diagptable_start[model * 12];
      x1 = &x1_start[16 * i];
      x2 = &x2_start[16 * i];
      term = x1[0] * x2[0];
      term += x1[1] * x2[1] * *diagptable++;
      term += x1[2] * x2[2] * *diagptable++;
      term += x1[3] * x2[3] * *diagptable++;
      term += x1[4] * x2[4];
      term += x1[5] * x2[5] * *diagptable++;
      term += x1[6] * x2[6] * *diagptable++;
      term += x1[7] * x2[7] * *diagptable++;
      term += x1[8] * x2[8];
      term += x1[9] * x2[9] * *diagptable++;
      term += x1[10] * x2[10] * *diagptable++;
      term += x1[11] * x2[11] * *diagptable++;
      term += x1[12] * x2[12];
      term += x1[13] * x2[13] * *diagptable++;
      term += x1[14] * x2[14] * *diagptable++;
      term += x1[15] * x2[15] * *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):
<evaluateGTRGAMMAMULT>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    0x50(%rbp),%eax
mov    0x48(%rbp),%eax
mov    0x40(%rbp),%eax
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
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)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
cmpl   $0x0,0x50(%rbp)
jne    11d9 <evaluateGTRGAMMAMULT+0x99>
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xe4e(%rip),%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    11ca <evaluateGTRGAMMAMULT+0x8a>
movsd  0xe3b(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0x50(%rbp)
movslq 0x48(%rbp),%rax
imul   $0x60,%rax,%rdi
call   1040 <malloc@plt>
mov    %rax,-0x78(%rbp)
mov    %rax,-0x70(%rbp)
movl   $0x0,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    0x48(%rbp),%eax
jge    134a <evaluateGTRGAMMAMULT+0x20a>
cmpl   $0x0,0x50(%rbp)
je     124c <evaluateGTRGAMMAMULT+0x10c>
mov    0x28(%rbp),%rax
movslq -0x68(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xddb(%rip),%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    123d <evaluateGTRGAMMAMULT+0xfd>
movsd  0xdc8(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0x50(%rbp)
mov    -0x78(%rbp),%rax
imul   $0xc,-0x68(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x70(%rbp)
movl   $0x0,-0x64(%rbp)
cmpl   $0x4,-0x64(%rbp)
jge    1337 <evaluateGTRGAMMAMULT+0x1f7>
mov    0x18(%rbp),%rax
mov    -0x68(%rbp),%ecx
shl    $0x2,%ecx
add    -0x64(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    0x10(%rbp),%rax
imul   $0x3,-0x68(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x60(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  %xmm0,(%rax)
mov    0x10(%rbp),%rax
imul   $0x3,-0x68(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x60(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  %xmm0,(%rax)
mov    0x10(%rbp),%rax
imul   $0x3,-0x68(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mulsd  -0x60(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  %xmm0,(%rax)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    1269 <evaluateGTRGAMMAMULT+0x129>
jmp    133c <evaluateGTRGAMMAMULT+0x1fc>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    11f5 <evaluateGTRGAMMAMULT+0xb5>
cmpq   $0x0,0x30(%rbp)
je     17b7 <evaluateGTRGAMMAMULT+0x677>
mov    0x38(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    0x40(%rbp),%eax
jge    179f <evaluateGTRGAMMAMULT+0x65f>
mov    -0x20(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x68(%rbp)
mov    0x20(%rbp),%rax
mov    -0x68(%rbp),%ecx
shl    $0x6,%ecx
mov    0x30(%rbp),%rdx
movslq -0x64(%rbp),%rsi
movsbl (%rdx,%rsi,1),%edx
shl    $0x2,%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x80(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0x4,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x88(%rbp)
mov    -0x78(%rbp),%rax
imul   $0xc,-0x68(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x70(%rbp)
mov    -0x80(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x88(%rbp),%rax
movsd  0x20(%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x38(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x88(%rbp),%rax
movsd  0x40(%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x58(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x88(%rbp),%rax
movsd  0x60(%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x78(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0x8f7(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x18(%rbp),%rax
movslq -0x64(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0x8c0(%rip),%xmm0
call   1060 <log@plt>
movsd  -0x98(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0x90(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x64(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    135b <evaluateGTRGAMMAMULT+0x21b>
mov    -0x78(%rbp),%rdi
call   1030 <free@plt>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1c13 <evaluateGTRGAMMAMULT+0xad3>
mov    0x38(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    0x40(%rbp),%eax
jge    1c00 <evaluateGTRGAMMAMULT+0xac0>
mov    -0x20(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x68(%rbp)
mov    -0x78(%rbp),%rax
imul   $0xc,-0x68(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x70(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0x4,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x80(%rbp)
mov    -0x38(%rbp),%rax
mov    -0x64(%rbp),%ecx
shl    $0x4,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x88(%rbp)
mov    -0x80(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x88(%rbp),%rax
movsd  0x20(%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x38(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x88(%rbp),%rax
movsd  0x40(%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x50(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x58(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x88(%rbp),%rax
movsd  0x60(%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x70(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x78(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x78(%rax),%xmm0
mov    -0x70(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x70(%rbp)
movsd  (%rax),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0x4a3(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x18(%rbp),%rcx
movslq -0x64(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  0x45f(%rip),%xmm0
call   1060 <log@plt>
movsd  -0xa8(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xa0(%rbp),%xmm0
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x64(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    17bd <evaluateGTRGAMMAMULT+0x67d>
mov    -0x78(%rbp),%rdi
call   1030 <free@plt>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<evaluateGTRGAMMAMULT>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r9,0x20(%rsp)
mov    %r8,0x38(%rsp)
mov    %rcx,0x30(%rsp)
mov    %rdx,0x18(%rsp)
mov    %rsi,0x28(%rsp)
mov    %rdi,0x40(%rsp)
mov    0xb8(%rsp),%r14d
xorpd  %xmm0,%xmm0
movsd  %xmm0,(%rsp)
cmpl   $0x0,0xc0(%rsp)
jne    11a5 <evaluateGTRGAMMAMULT+0x65>
movsd  0xe71(%rip),%xmm0
mov    0x98(%rsp),%rax
maxsd  (%rax),%xmm0
call   1060 <log@plt>
movsd  %xmm0,(%rsp)
movslq %r14d,%rbp
mov    %rbp,%rax
shl    $0x5,%rax
lea    (%rax,%rax,2),%rdi
call   1040 <malloc@plt>
mov    %rax,%r12
test   %ebp,%ebp
jle    13e5 <evaluateGTRGAMMAMULT+0x2a5>
mov    %r14d,%eax
mov    %rax,0x10(%rsp)
xor    %r14d,%r14d
jmp    13b2 <evaluateGTRGAMMAMULT+0x272>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    0x0(,%r14,4),%r13d
lea    0x0(%r13,%r13,2),%ebp
lea    (%r14,%r14,2),%r15d
mov    0x88(%rsp),%rax
movsd  (%rax,%r13,8),%xmm1
movsd  %xmm1,0x8(%rsp)
mov    0x80(%rsp),%rbx
movsd  (%rbx,%r15,8),%xmm0
mulsd  %xmm1,%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,(%r12,%rbp,8)
movsd  0x8(%rbx,%r15,8),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x8(%r12,%rbp,8)
movsd  0x8(%rsp),%xmm0
mulsd  0x10(%rbx,%r15,8),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x10(%r12,%rbp,8)
mov    0x88(%rsp),%rax
movsd  0x8(%rax,%r13,8),%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  (%rbx,%r15,8),%xmm0
mulsd  %xmm1,%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x18(%r12,%rbp,8)
movsd  0x8(%rbx,%r15,8),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x20(%r12,%rbp,8)
movsd  0x8(%rsp),%xmm0
mulsd  0x10(%rbx,%r15,8),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x28(%r12,%rbp,8)
mov    0x88(%rsp),%rax
movsd  0x10(%rax,%r13,8),%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  (%rbx,%r15,8),%xmm0
mulsd  %xmm1,%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x30(%r12,%rbp,8)
movsd  0x8(%rbx,%r15,8),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x38(%r12,%rbp,8)
movsd  0x8(%rsp),%xmm0
mulsd  0x10(%rbx,%r15,8),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x40(%r12,%rbp,8)
mov    0x88(%rsp),%rax
movsd  0x18(%rax,%r13,8),%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  (%rbx,%r15,8),%xmm0
mulsd  %xmm1,%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x48(%r12,%rbp,8)
movsd  0x8(%rbx,%r15,8),%xmm0
mulsd  0x8(%rsp),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x50(%r12,%rbp,8)
movsd  0x8(%rsp),%xmm0
mulsd  0x10(%rbx,%r15,8),%xmm0
mulsd  (%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x58(%r12,%rbp,8)
add    $0x1,%r14
cmp    0x10(%rsp),%r14
je     13e5 <evaluateGTRGAMMAMULT+0x2a5>
cmpl   $0x0,0xc0(%rsp)
je     11e0 <evaluateGTRGAMMAMULT+0xa0>
movsd  0xc38(%rip),%xmm0
mov    0x98(%rsp),%rax
maxsd  (%rax,%r14,8),%xmm0
call   1060 <log@plt>
movsd  %xmm0,(%rsp)
jmp    11e0 <evaluateGTRGAMMAMULT+0xa0>
mov    0xb0(%rsp),%eax
mov    0xa8(%rsp),%r14d
xorpd  %xmm0,%xmm0
cmpq   $0x0,0xa0(%rsp)
je     1616 <evaluateGTRGAMMAMULT+0x4d6>
cmp    %eax,%r14d
mov    0x20(%rsp),%rbp
mov    0x18(%rsp),%r15
mov    0x28(%rsp),%rbx
jge    1840 <evaluateGTRGAMMAMULT+0x700>
movslq %r14d,%r13
cltq
mov    %rax,0x8(%rsp)
shl    $0x4,%r14d
xorpd  %xmm0,%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  %xmm0,(%rsp)
movslq (%r15,%r13,4),%rcx
lea    (%rcx,%rcx,2),%rax
shl    $0x6,%rcx
mov    0xa0(%rsp),%rdx
movsbq (%rdx,%r13,1),%rdx
lea    (%rcx,%rdx,4),%rcx
movslq %r14d,%r14
shl    $0x5,%rax
mov    0x90(%rsp),%rdx
movsd  (%rdx,%rcx,8),%xmm2
movsd  0x8(%rdx,%rcx,8),%xmm1
movsd  0x0(%rbp,%r14,8),%xmm0
mulsd  %xmm2,%xmm0
movsd  0x8(%rbp,%r14,8),%xmm4
mulsd  %xmm1,%xmm4
mulsd  (%r12,%rax,1),%xmm4
addsd  %xmm0,%xmm4
movsd  0x10(%rdx,%rcx,8),%xmm3
movsd  0x10(%rbp,%r14,8),%xmm5
mulsd  %xmm3,%xmm5
mulsd  0x8(%r12,%rax,1),%xmm5
addsd  %xmm4,%xmm5
movsd  0x18(%rdx,%rcx,8),%xmm0
movsd  0x18(%rbp,%r14,8),%xmm4
mulsd  %xmm0,%xmm4
mulsd  0x10(%r12,%rax,1),%xmm4
addsd  %xmm5,%xmm4
movsd  0x20(%rbp,%r14,8),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x28(%rbp,%r14,8),%xmm4
mulsd  %xmm1,%xmm4
mulsd  0x18(%r12,%rax,1),%xmm4
movsd  0x30(%rbp,%r14,8),%xmm6
mulsd  %xmm3,%xmm6
mulsd  0x20(%r12,%rax,1),%xmm6
addsd  %xmm5,%xmm4
addsd  %xmm4,%xmm6
movsd  0x38(%rbp,%r14,8),%xmm4
mulsd  %xmm0,%xmm4
mulsd  0x28(%r12,%rax,1),%xmm4
addsd  %xmm6,%xmm4
movsd  0x40(%rbp,%r14,8),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x48(%rbp,%r14,8),%xmm4
mulsd  %xmm1,%xmm4
mulsd  0x30(%r12,%rax,1),%xmm4
addsd  %xmm5,%xmm4
movsd  0x50(%rbp,%r14,8),%xmm5
mulsd  %xmm3,%xmm5
mulsd  0x38(%r12,%rax,1),%xmm5
addsd  %xmm4,%xmm5
movsd  0x58(%rbp,%r14,8),%xmm4
mulsd  %xmm0,%xmm4
mulsd  0x40(%r12,%rax,1),%xmm4
addsd  %xmm5,%xmm4
mulsd  0x60(%rbp,%r14,8),%xmm2
addsd  %xmm4,%xmm2
mulsd  0x68(%rbp,%r14,8),%xmm1
mulsd  0x48(%r12,%rax,1),%xmm1
mulsd  0x70(%rbp,%r14,8),%xmm3
mulsd  0x50(%r12,%rax,1),%xmm3
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm3
mulsd  0x78(%rbp,%r14,8),%xmm0
mulsd  0x58(%r12,%rax,1),%xmm0
addsd  %xmm3,%xmm0
mulsd  0xa49(%rip),%xmm0
call   1060 <log@plt>
mov    0x30(%rsp),%rcx
xorps  %xmm1,%xmm1
cvtsi2sdl (%rbx,%r13,4),%xmm1
mulsd  0xa36(%rip),%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sdl (%rcx,%r13,4),%xmm0
mulsd  %xmm1,%xmm0
movsd  (%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movsd  (%rsp),%xmm0
add    $0x1,%r13
add    $0x10,%r14d
cmp    %r13,0x8(%rsp)
jne    1440 <evaluateGTRGAMMAMULT+0x300>
jmp    1840 <evaluateGTRGAMMAMULT+0x700>
cmp    %eax,%r14d
mov    0x20(%rsp),%rbp
mov    0x30(%rsp),%r13
mov    0x18(%rsp),%r15
mov    0x38(%rsp),%rbx
jge    1840 <evaluateGTRGAMMAMULT+0x700>
movslq %r14d,%rcx
cltq
mov    %rax,0x10(%rsp)
shl    $0x4,%r14d
xorpd  %xmm0,%xmm0
cs nopw 0x0(%rax,%rax,1)
nop
mov    %rcx,0x8(%rsp)
movsd  %xmm0,(%rsp)
movslq (%r15,%rcx,4),%rax
lea    (%rax,%rax,2),%rax
shl    $0x5,%rax
movslq %r14d,%r14
movsd  (%rbx,%r14,8),%xmm0
movsd  0x8(%rbx,%r14,8),%xmm1
mulsd  0x0(%rbp,%r14,8),%xmm0
mulsd  0x8(%rbp,%r14,8),%xmm1
mulsd  (%r12,%rax,1),%xmm1
addsd  %xmm0,%xmm1
movsd  0x10(%rbx,%r14,8),%xmm0
mulsd  0x10(%rbp,%r14,8),%xmm0
mulsd  0x8(%r12,%rax,1),%xmm0
addsd  %xmm1,%xmm0
movsd  0x18(%rbx,%r14,8),%xmm1
mulsd  0x18(%rbp,%r14,8),%xmm1
mulsd  0x10(%r12,%rax,1),%xmm1
addsd  %xmm0,%xmm1
movsd  0x20(%rbx,%r14,8),%xmm0
mulsd  0x20(%rbp,%r14,8),%xmm0
addsd  %xmm1,%xmm0
movsd  0x28(%rbx,%r14,8),%xmm1
mulsd  0x28(%rbp,%r14,8),%xmm1
mulsd  0x18(%r12,%rax,1),%xmm1
addsd  %xmm0,%xmm1
movsd  0x30(%rbx,%r14,8),%xmm0
mulsd  0x30(%rbp,%r14,8),%xmm0
mulsd  0x20(%r12,%rax,1),%xmm0
addsd  %xmm1,%xmm0
movsd  0x38(%rbx,%r14,8),%xmm1
mulsd  0x38(%rbp,%r14,8),%xmm1
mulsd  0x28(%r12,%rax,1),%xmm1
addsd  %xmm0,%xmm1
movsd  0x40(%rbx,%r14,8),%xmm0
mulsd  0x40(%rbp,%r14,8),%xmm0
addsd  %xmm1,%xmm0
movsd  0x48(%rbx,%r14,8),%xmm1
mulsd  0x48(%rbp,%r14,8),%xmm1
mulsd  0x30(%r12,%rax,1),%xmm1
addsd  %xmm0,%xmm1
movsd  0x50(%rbx,%r14,8),%xmm0
mulsd  0x50(%rbp,%r14,8),%xmm0
mulsd  0x38(%r12,%rax,1),%xmm0
addsd  %xmm1,%xmm0
movsd  0x58(%rbx,%r14,8),%xmm1
mulsd  0x58(%rbp,%r14,8),%xmm1
mulsd  0x40(%r12,%rax,1),%xmm1
addsd  %xmm0,%xmm1
movsd  0x60(%rbx,%r14,8),%xmm0
mulsd  0x60(%rbp,%r14,8),%xmm0
addsd  %xmm1,%xmm0
movsd  0x68(%rbx,%r14,8),%xmm1
mulsd  0x68(%rbp,%r14,8),%xmm1
mulsd  0x48(%r12,%rax,1),%xmm1
addsd  %xmm0,%xmm1
movsd  0x70(%rbx,%r14,8),%xmm2
mulsd  0x70(%rbp,%r14,8),%xmm2
mulsd  0x50(%r12,%rax,1),%xmm2
addsd  %xmm1,%xmm2
movsd  0x78(%rbx,%r14,8),%xmm0
mulsd  0x78(%rbp,%r14,8),%xmm0
mulsd  0x58(%r12,%rax,1),%xmm0
addsd  %xmm2,%xmm0
mulsd  0x829(%rip),%xmm0
call   1060 <log@plt>
mov    0x8(%rsp),%rcx
mov    0x40(%rsp),%rdi
mov    0x28(%rsp),%rsi
mov    (%rsi,%rcx,4),%eax
add    (%rdi,%rcx,4),%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  0x808(%rip),%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sdl 0x0(%r13,%rcx,4),%xmm0
mulsd  %xmm1,%xmm0
movsd  (%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movsd  (%rsp),%xmm0
add    $0x1,%rcx
add    $0x10,%r14d
cmp    %rcx,0x10(%rsp)
jne    1650 <evaluateGTRGAMMAMULT+0x510>
movsd  %xmm0,(%rsp)
mov    %r12,%rdi
call   1030 <free@plt>
movsd  (%rsp),%xmm0
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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