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


x86 assembly (clang, -O0):
<evaluateGTRGAMMA>:
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)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  0xe6c(%rip),%xmm0
ucomisd -0x50(%rbp),%xmm0
jbe    11ac <evaluateGTRGAMMA+0x6c>
movsd  0xe59(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0x58(%rbp)
mov    $0x80,%edi
call   1040 <malloc@plt>
mov    %rax,-0x78(%rbp)
movl   $0x0,-0x6c(%rbp)
cmpl   $0x4,-0x6c(%rbp)
jge    129a <evaluateGTRGAMMA+0x15a>
mov    0x10(%rbp),%rax
movslq -0x6c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x78(%rbp),%rax
mov    -0x6c(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
movsd  0xe17(%rip),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x68(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x78(%rbp),%rax
mov    -0x6c(%rbp),%ecx
shl    $0x2,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x68(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x78(%rbp),%rax
mov    -0x6c(%rbp),%ecx
shl    $0x2,%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
mulsd  -0x68(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x78(%rbp),%rax
mov    -0x6c(%rbp),%ecx
shl    $0x2,%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x6c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x6c(%rbp)
jmp    11d0 <evaluateGTRGAMMA+0x90>
cmpq   $0x0,0x20(%rbp)
je     1686 <evaluateGTRGAMMA+0x546>
mov    0x28(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cmp    0x30(%rbp),%eax
jge    166e <evaluateGTRGAMMA+0x52e>
mov    0x18(%rbp),%rax
mov    0x20(%rbp),%rcx
movslq -0x6c(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x80(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x6c(%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
mov    -0x78(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x8(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x10(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x18(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x20(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x20(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x28(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x30(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x38(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x38(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x40(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x40(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x48(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x50(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x58(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x58(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x60(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x60(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x68(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x70(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x78(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x78(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0xa28(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x18(%rbp),%rax
movslq -0x6c(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  0x9f1(%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,-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    12ab <evaluateGTRGAMMA+0x16b>
mov    -0x78(%rbp),%rdi
call   1030 <free@plt>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1a69 <evaluateGTRGAMMA+0x929>
mov    0x28(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cmp    0x30(%rbp),%eax
jge    1a56 <evaluateGTRGAMMA+0x916>
mov    -0x28(%rbp),%rax
mov    -0x6c(%rbp),%ecx
shl    $0x4,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x80(%rbp)
mov    -0x30(%rbp),%rax
mov    -0x6c(%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
mov    -0x78(%rbp),%rax
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x8(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x10(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x18(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x20(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x20(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x28(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x30(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x38(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x38(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x40(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x40(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x48(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x50(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x50(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x58(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x58(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x60(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x60(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x68(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x70(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x70(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x80(%rbp),%rax
movsd  0x78(%rax),%xmm0
mov    -0x88(%rbp),%rax
mulsd  0x78(%rax),%xmm0
mov    -0x78(%rbp),%rax
movsd  0x78(%rax),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0x64d(%rip),%xmm0
mulsd  -0x60(%rbp),%xmm0
call   1060 <log@plt>
movsd  %xmm0,-0xa8(%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,-0xa0(%rbp)
ff
movsd  0x609(%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,-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    168c <evaluateGTRGAMMA+0x54c>
mov    -0x78(%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):
<evaluateGTRGAMMA>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x98,%rsp
mov    %r9,%r12
mov    %r8,%rbx
mov    %rcx,%r13
mov    %rdx,0x88(%rsp)
mov    %rsi,0x80(%rsp)
mov    %rdi,0x40(%rsp)
mov    0xe8(%rsp),%r14d
mov    0xd0(%rsp),%r15
movsd  0xe79(%rip),%xmm1
maxsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
call   1060 <log@plt>
movsd  %xmm0,0x8(%rsp)
mov    $0x80,%edi
call   1040 <malloc@plt>
mov    %rax,%rbp
movsd  (%r15),%xmm1
movsd  %xmm1,0x28(%rsp)
movabs $0x3ff0000000000000,%r15
mov    %r15,(%rax)
movsd  (%r12),%xmm0
mulsd  %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x50(%rsp)
movsd  %xmm0,0x8(%rbp)
movsd  0x8(%r12),%xmm0
mulsd  0x28(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x48(%rsp)
movsd  %xmm0,0x10(%rbp)
movsd  0x28(%rsp),%xmm0
mulsd  0x10(%r12),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x90(%rsp)
movsd  %xmm0,0x18(%rbp)
mov    0xd0(%rsp),%rax
movsd  0x8(%rax),%xmm1
movsd  %xmm1,0x20(%rsp)
mov    %r15,0x20(%rbp)
movsd  (%r12),%xmm0
mulsd  %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x28(%rsp)
movsd  %xmm0,0x28(%rbp)
movsd  0x8(%r12),%xmm0
mulsd  0x20(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x78(%rsp)
movsd  %xmm0,0x30(%rbp)
movsd  0x20(%rsp),%xmm0
mulsd  0x10(%r12),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x20(%rsp)
movsd  %xmm0,0x38(%rbp)
mov    0xd0(%rsp),%rax
movsd  0x10(%rax),%xmm1
movsd  %xmm1,0x18(%rsp)
mov    %r15,0x40(%rbp)
movsd  (%r12),%xmm0
mulsd  %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x70(%rsp)
movsd  %xmm0,0x48(%rbp)
movsd  0x8(%r12),%xmm0
mulsd  0x18(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x68(%rsp)
movsd  %xmm0,0x50(%rbp)
movsd  0x18(%rsp),%xmm0
mulsd  0x10(%r12),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x18(%rsp)
movsd  %xmm0,0x58(%rbp)
mov    0xd0(%rsp),%rax
movsd  0x18(%rax),%xmm1
movsd  %xmm1,0x10(%rsp)
mov    %r15,0x60(%rbp)
movsd  (%r12),%xmm0
mulsd  %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x60(%rsp)
movsd  %xmm0,0x68(%rbp)
movsd  0x8(%r12),%xmm0
mulsd  0x10(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x58(%rsp)
movsd  %xmm0,0x70(%rbp)
movsd  0x10(%rsp),%xmm0
mulsd  0x10(%r12),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
mov    0xe0(%rsp),%rax
movsd  %xmm0,0x78(%rbp)
test   %rax,%rax
mov    %rbp,0x30(%rsp)
xorpd  %xmm4,%xmm4
je     1640 <evaluateGTRGAMMA+0x500>
mov    0xf0(%rsp),%ecx
cmp    %ecx,%r14d
mov    0x88(%rsp),%r12
mov    0x80(%rsp),%r15
movsd  0x28(%rsp),%xmm9
movsd  0x78(%rsp),%xmm10
movsd  0x20(%rsp),%xmm11
movsd  0x70(%rsp),%xmm12
movsd  0x68(%rsp),%xmm13
movsd  0x18(%rsp),%xmm14
movsd  0x60(%rsp),%xmm15
movsd  0x58(%rsp),%xmm6
movsd  0x50(%rsp),%xmm3
movsd  0x48(%rsp),%xmm7
jge    186d <evaluateGTRGAMMA+0x72d>
movapd %xmm0,%xmm8
movslq %r14d,%rbp
movslq %ecx,%rcx
mov    %rcx,0x40(%rsp)
mov    0x30(%rsp),%rcx
movsd  (%rcx),%xmm0
movsd  %xmm0,0x38(%rsp)
shl    $0x4,%r14d
xorpd  %xmm4,%xmm4
movsd  %xmm8,0x10(%rsp)
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  %xmm4,0x8(%rsp)
mov    %rax,%r13
movsbq (%rax,%rbp,1),%rax
shl    $0x5,%rax
movslq %r14d,%r14
mov    0xd8(%rsp),%rcx
movsd  (%rcx,%rax,1),%xmm2
movsd  0x8(%rcx,%rax,1),%xmm1
movsd  (%rbx,%r14,8),%xmm0
mulsd  %xmm2,%xmm0
mulsd  0x38(%rsp),%xmm0
movsd  0x8(%rbx,%r14,8),%xmm4
mulsd  %xmm1,%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm0,%xmm4
movsd  0x10(%rcx,%rax,1),%xmm3
movsd  0x10(%rbx,%r14,8),%xmm5
mulsd  %xmm3,%xmm5
mulsd  %xmm7,%xmm5
addsd  %xmm4,%xmm5
movsd  0x18(%rcx,%rax,1),%xmm0
movsd  0x18(%rbx,%r14,8),%xmm4
mulsd  %xmm0,%xmm4
mulsd  0x90(%rsp),%xmm4
addsd  %xmm5,%xmm4
movsd  0x20(%rbx,%r14,8),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x28(%rbx,%r14,8),%xmm4
mulsd  %xmm1,%xmm4
mulsd  %xmm9,%xmm4
addsd  %xmm5,%xmm4
movsd  0x30(%rbx,%r14,8),%xmm5
mulsd  %xmm3,%xmm5
mulsd  %xmm10,%xmm5
addsd  %xmm4,%xmm5
movsd  0x38(%rbx,%r14,8),%xmm4
mulsd  %xmm0,%xmm4
mulsd  %xmm11,%xmm4
addsd  %xmm5,%xmm4
movsd  0x40(%rbx,%r14,8),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x48(%rbx,%r14,8),%xmm4
mulsd  %xmm1,%xmm4
mulsd  %xmm12,%xmm4
addsd  %xmm5,%xmm4
movsd  0x50(%rbx,%r14,8),%xmm5
mulsd  %xmm3,%xmm5
mulsd  %xmm13,%xmm5
addsd  %xmm4,%xmm5
movsd  0x58(%rbx,%r14,8),%xmm4
mulsd  %xmm0,%xmm4
mulsd  %xmm14,%xmm4
addsd  %xmm5,%xmm4
mulsd  0x60(%rbx,%r14,8),%xmm2
mulsd  0x68(%rbx,%r14,8),%xmm1
addsd  %xmm4,%xmm2
mulsd  %xmm15,%xmm1
mulsd  0x70(%rbx,%r14,8),%xmm3
addsd  %xmm2,%xmm1
mulsd  %xmm6,%xmm3
mulsd  0x78(%rbx,%r14,8),%xmm0
addsd  %xmm1,%xmm3
mulsd  %xmm8,%xmm0
addsd  %xmm3,%xmm0
mulsd  0xa5e(%rip),%xmm0
call   1060 <log@plt>
movsd  0x48(%rsp),%xmm7
movsd  0x50(%rsp),%xmm3
movsd  0x58(%rsp),%xmm6
movsd  0x60(%rsp),%xmm15
movsd  0x18(%rsp),%xmm14
movsd  0x68(%rsp),%xmm13
movsd  0x70(%rsp),%xmm12
movsd  0x20(%rsp),%xmm11
movsd  0x78(%rsp),%xmm10
movsd  0x28(%rsp),%xmm9
movsd  0x10(%rsp),%xmm8
movsd  0x8(%rsp),%xmm4
mov    %r13,%rax
xorps  %xmm1,%xmm1
cvtsi2sdl (%r15,%rbp,4),%xmm1
mulsd  0x9fd(%rip),%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sdl (%r12,%rbp,4),%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm0,%xmm4
add    $0x1,%rbp
add    $0x10,%r14d
cmp    %rbp,0x40(%rsp)
jne    1450 <evaluateGTRGAMMA+0x310>
jmp    186d <evaluateGTRGAMMA+0x72d>
mov    0xf0(%rsp),%eax
cmp    %eax,%r14d
movsd  0x50(%rsp),%xmm1
movsd  0x48(%rsp),%xmm2
movsd  0x90(%rsp),%xmm3
jge    186d <evaluateGTRGAMMA+0x72d>
movslq %r14d,%rbp
movslq %eax,%r15
mov    0x30(%rsp),%r12
movsd  (%r12),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x78(%r12),%xmm0
movsd  %xmm0,0x38(%rsp)
shl    $0x4,%r14d
add    $0xffffffffffffffff,%r15
xorpd  %xmm4,%xmm4
cs nopw 0x0(%rax,%rax,1)
nop
movslq %r14d,%rax
movsd  0x8(%r13,%rax,8),%xmm0
mulsd  0x8(%rbx,%rax,8),%xmm0
mulsd  %xmm1,%xmm0
movsd  0x0(%r13,%rax,8),%xmm1
mulsd  (%rbx,%rax,8),%xmm1
mulsd  0x10(%rsp),%xmm1
addsd  %xmm1,%xmm0
movsd  0x10(%r13,%rax,8),%xmm1
mulsd  0x10(%rbx,%rax,8),%xmm1
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  0x18(%r13,%rax,8),%xmm0
mulsd  0x18(%rbx,%rax,8),%xmm0
mulsd  %xmm3,%xmm0
movsd  0x20(%r13,%rax,8),%xmm2
mulsd  0x20(%rbx,%rax,8),%xmm2
addsd  %xmm1,%xmm0
movsd  0x28(%r13,%rax,8),%xmm1
mulsd  0x28(%rbx,%rax,8),%xmm1
addsd  %xmm0,%xmm2
mulsd  0x28(%rsp),%xmm1
addsd  %xmm2,%xmm1
movsd  0x30(%r13,%rax,8),%xmm0
mulsd  0x30(%rbx,%rax,8),%xmm0
mulsd  0x78(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  0x38(%r13,%rax,8),%xmm1
mulsd  0x38(%rbx,%rax,8),%xmm1
mulsd  0x20(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  0x40(%r13,%rax,8),%xmm0
mulsd  0x40(%rbx,%rax,8),%xmm0
addsd  %xmm1,%xmm0
movsd  0x48(%r13,%rax,8),%xmm1
mulsd  0x48(%rbx,%rax,8),%xmm1
mulsd  0x70(%rsp),%xmm1
movsd  0x50(%r13,%rax,8),%xmm2
mulsd  0x50(%rbx,%rax,8),%xmm2
addsd  %xmm0,%xmm1
mulsd  0x68(%rsp),%xmm2
addsd  %xmm1,%xmm2
movsd  0x58(%r13,%rax,8),%xmm0
mulsd  0x58(%rbx,%rax,8),%xmm0
mulsd  0x18(%rsp),%xmm0
addsd  %xmm2,%xmm0
movsd  0x60(%r13,%rax,8),%xmm1
mulsd  0x60(%rbx,%rax,8),%xmm1
addsd  %xmm0,%xmm1
movsd  0x68(%r13,%rax,8),%xmm2
mulsd  0x68(%rbx,%rax,8),%xmm2
mulsd  0x60(%rsp),%xmm2
addsd  %xmm1,%xmm2
movsd  0x70(%r13,%rax,8),%xmm1
mulsd  0x70(%rbx,%rax,8),%xmm1
mulsd  0x58(%rsp),%xmm1
movsd  0x78(%r13,%rax,8),%xmm0
mulsd  0x78(%rbx,%rax,8),%xmm0
addsd  %xmm2,%xmm1
mulsd  0x38(%rsp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm4,0x8(%rsp)
mulsd  0x804(%rip),%xmm0
call   1060 <log@plt>
mov    0x80(%rsp),%rax
mov    (%rax,%rbp,4),%eax
mov    0x40(%rsp),%rcx
add    (%rcx,%rbp,4),%eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  0x7e5(%rip),%xmm1
mov    0x88(%rsp),%rax
cvtsi2sdl (%rax,%rbp,4),%xmm4
addsd  %xmm0,%xmm1
mulsd  %xmm1,%xmm4
addsd  0x8(%rsp),%xmm4
cmp    %rbp,%r15
je     186d <evaluateGTRGAMMA+0x72d>
movsd  0x8(%r12),%xmm1
movsd  0x10(%r12),%xmm2
movsd  0x18(%r12),%xmm3
add    $0x10,%r14d
add    $0x1,%rbp
jmp    16a0 <evaluateGTRGAMMA+0x560>
movsd  %xmm4,0x8(%rsp)
mov    0x30(%rsp),%rdi
call   1030 <free@plt>
movsd  0x8(%rsp),%xmm0
add    $0x98,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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