void coreGTRGAMMA(int lower, const int upper, double *sumtable, double *d1,
                  double *d2, double *EIGN, double *gammaRates, double lz,
                  int *wrptr) {
  int i;
  double *diagptable, *diagptable_start, *sum, tmp_1, tmp_2, tmp_3, inv_Li,
      dlnLidlz, d2lnLidlz2, ki, kisqr, dlnLdlz = 0.0, d2lnLdlz2 = 0.0;
  diagptable = diagptable_start = (double *)malloc(sizeof(double) * 36);
  for (i = 0; i < 4; i++) {
    ki = gammaRates[i];
    kisqr = ki * ki;
    *diagptable++ = exp(EIGN[0] * ki * lz);
    *diagptable++ = exp(EIGN[1] * ki * lz);
    *diagptable++ = exp(EIGN[2] * ki * lz);
    *diagptable++ = EIGN[0] * ki;
    *diagptable++ = EIGN[0] * EIGN[0] * kisqr;
    *diagptable++ = EIGN[1] * ki;
    *diagptable++ = EIGN[1] * EIGN[1] * kisqr;
    *diagptable++ = EIGN[2] * ki;
    *diagptable++ = EIGN[2] * EIGN[2] * kisqr;
  }
  for (i = lower; i < upper; i++) {
    diagptable = diagptable_start;
    sum = &(sumtable[i * 16]);
    inv_Li = *sum++;
    inv_Li += (tmp_1 = *diagptable++ * *sum++);
    inv_Li += (tmp_2 = *diagptable++ * *sum++);
    inv_Li += (tmp_3 = *diagptable++ * *sum++);
    dlnLidlz = tmp_1 * *diagptable++;
    d2lnLidlz2 = tmp_1 * *diagptable++;
    dlnLidlz += tmp_2 * *diagptable++;
    d2lnLidlz2 += tmp_2 * *diagptable++;
    dlnLidlz += tmp_3 * *diagptable++;
    d2lnLidlz2 += tmp_3 * *diagptable++;
    inv_Li += *sum++;
    inv_Li += (tmp_1 = *sum++ * *diagptable++);
    inv_Li += (tmp_2 = *sum++ * *diagptable++);
    inv_Li += (tmp_3 = *sum++ * *diagptable++);
    dlnLidlz += tmp_1 * *diagptable++;
    d2lnLidlz2 += tmp_1 * *diagptable++;
    dlnLidlz += tmp_2 * *diagptable++;
    d2lnLidlz2 += tmp_2 * *diagptable++;
    dlnLidlz += tmp_3 * *diagptable++;
    d2lnLidlz2 += tmp_3 * *diagptable++;
    inv_Li += *sum++;
    inv_Li += (tmp_1 = *sum++ * *diagptable++);
    inv_Li += (tmp_2 = *sum++ * *diagptable++);
    inv_Li += (tmp_3 = *sum++ * *diagptable++);
    dlnLidlz += tmp_1 * *diagptable++;
    d2lnLidlz2 += tmp_1 * *diagptable++;
    dlnLidlz += tmp_2 * *diagptable++;
    d2lnLidlz2 += tmp_2 * *diagptable++;
    dlnLidlz += tmp_3 * *diagptable++;
    d2lnLidlz2 += tmp_3 * *diagptable++;
    inv_Li += *sum++;
    inv_Li += (tmp_1 = *sum++ * *diagptable++);
    inv_Li += (tmp_2 = *sum++ * *diagptable++);
    inv_Li += (tmp_3 = *sum++ * *diagptable++);
    dlnLidlz += tmp_1 * *diagptable++;
    d2lnLidlz2 += tmp_1 * *diagptable++;
    dlnLidlz += tmp_2 * *diagptable++;
    d2lnLidlz2 += tmp_2 * *diagptable++;
    dlnLidlz += tmp_3 * *diagptable++;
    d2lnLidlz2 += tmp_3 * *diagptable++;
    inv_Li = 1.0 / inv_Li;
    dlnLidlz *= inv_Li;
    d2lnLidlz2 *= inv_Li;
    dlnLdlz += wrptr[i] * dlnLidlz;
    d2lnLdlz2 += wrptr[i] * (d2lnLidlz2 - dlnLidlz * dlnLidlz);
  }
  *d1 = dlnLdlz;
  *d2 = d2lnLdlz2;
  free(diagptable_start);
}


x86 assembly (clang, -O0):
<coreGTRGAMMA>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    $0x120,%edi
call   1040 <malloc@plt>
mov    %rax,-0x48(%rbp)
mov    %rax,-0x40(%rbp)
movl   $0x0,-0x34(%rbp)
cmpl   $0x4,-0x34(%rbp)
jge    134b <coreGTRGAMMA+0x21b>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mulsd  -0x30(%rbp),%xmm0
call   1050 <exp@plt>
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
mulsd  (%rax),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x28(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
mulsd  -0x88(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x28(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mulsd  -0x90(%rbp),%xmm0
ff
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  %xmm0,(%rax)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    118d <coreGTRGAMMA+0x5d>
mov    -0x4(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1af9 <coreGTRGAMMA+0x9c9>
mov    -0x48(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x34(%rbp),%ecx
shl    $0x4,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm0
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x50(%rbp)
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
addsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x58(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x60(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x40(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x40(%rbp)
movsd  (%rax),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0x5ba(%rip),%xmm0
divsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
mulsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x70(%rbp),%xmm0
mulsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  -0x80(%rbp),%xmm1
movsd  -0x78(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm3
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm1,%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1351 <coreGTRGAMMA+0x221>
movsd  -0x98(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x48(%rbp),%rdi
call   1030 <free@plt>
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<coreGTRGAMMA>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x138,%rsp
movsd  %xmm0,0x8(%rsp)
mov    %r9,%r14
mov    %r8,0x48(%rsp)
mov    %rcx,0x40(%rsp)
mov    %rdx,%r13
mov    %esi,0x38(%rsp)
mov    %edi,%ebx
mov    0x178(%rsp),%r15
mov    0x170(%rsp),%rbp
mov    $0x120,%edi
call   1040 <malloc@plt>
mov    %rax,%r12
movsd  0x0(%rbp),%xmm1
movapd %xmm1,0x10(%rsp)
movapd %xmm1,%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm0,0x20(%rsp)
movsd  (%r14),%xmm0
mulsd  %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,(%r12)
movsd  0x8(%r14),%xmm0
mulsd  0x10(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x8(%r12)
movsd  0x10(%r14),%xmm0
mulsd  0x10(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x10(%r12)
movsd  (%r14),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movapd 0x10(%rsp),%xmm3
unpcklpd 0x20(%rsp),%xmm3
movapd %xmm0,%xmm2
unpcklpd %xmm1,%xmm2
mulpd  %xmm3,%xmm2
movupd %xmm2,0x18(%r12)
movsd  0x8(%r14),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm1
mulpd  %xmm3,%xmm1
movupd %xmm1,0x28(%r12)
movsd  0x10(%r14),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm1
mulpd  %xmm3,%xmm1
movupd %xmm1,0x38(%r12)
movsd  0x8(%rbp),%xmm1
movapd %xmm1,0x10(%rsp)
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm2,0x20(%rsp)
mulsd  %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x48(%r12)
movsd  0x8(%r14),%xmm0
mulsd  0x10(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x50(%r12)
movsd  0x10(%r14),%xmm0
mulsd  0x10(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x58(%r12)
movsd  (%r14),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movapd 0x10(%rsp),%xmm3
unpcklpd 0x20(%rsp),%xmm3
movapd %xmm0,%xmm2
unpcklpd %xmm1,%xmm2
mulpd  %xmm3,%xmm2
movupd %xmm2,0x60(%r12)
movsd  0x8(%r14),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm1
mulpd  %xmm3,%xmm1
movupd %xmm1,0x70(%r12)
movsd  0x10(%r14),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm1
mulpd  %xmm3,%xmm1
movupd %xmm1,0x80(%r12)
movsd  0x10(%rbp),%xmm1
movapd %xmm1,0x10(%rsp)
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm2,0x20(%rsp)
mulsd  %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x90(%r12)
movsd  0x8(%r14),%xmm0
mulsd  0x10(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0x98(%r12)
movsd  0x10(%r14),%xmm0
mulsd  0x10(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0xa0(%r12)
movsd  (%r14),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movapd 0x10(%rsp),%xmm3
unpcklpd 0x20(%rsp),%xmm3
movapd %xmm0,%xmm2
unpcklpd %xmm1,%xmm2
mulpd  %xmm3,%xmm2
movupd %xmm2,0xa8(%r12)
movsd  0x8(%r14),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm1
mulpd  %xmm3,%xmm1
movupd %xmm1,0xb8(%r12)
movsd  0x10(%r14),%xmm1
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm1
mulpd  %xmm3,%xmm1
movupd %xmm1,0xc8(%r12)
movsd  0x18(%rbp),%xmm1
movapd %xmm1,0x10(%rsp)
movapd %xmm1,%xmm2
mulsd  %xmm1,%xmm2
movapd %xmm2,0x20(%rsp)
mulsd  %xmm1,%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0xd8(%r12)
movsd  0x8(%r14),%xmm0
mulsd  0x10(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
movsd  %xmm0,0xe0(%r12)
movsd  0x10(%r14),%xmm0
mulsd  0x10(%rsp),%xmm0
mulsd  0x8(%rsp),%xmm0
call   1050 <exp@plt>
mov    0x38(%rsp),%ecx
movsd  %xmm0,0xe8(%r12)
movsd  (%r14),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
movapd 0x10(%rsp),%xmm2
unpcklpd 0x20(%rsp),%xmm2
unpcklpd %xmm1,%xmm0
mulpd  %xmm2,%xmm0
movupd %xmm0,0xf0(%r12)
movsd  0x8(%r14),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
unpcklpd %xmm1,%xmm0
mulpd  %xmm2,%xmm0
movupd %xmm0,0x100(%r12)
movsd  0x10(%r14),%xmm0
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
unpcklpd %xmm1,%xmm0
mulpd  %xmm2,%xmm0
movupd %xmm0,0x110(%r12)
xorpd  %xmm0,%xmm0
cmp    %ecx,%ebx
jge    19c8 <coreGTRGAMMA+0x898>
movsd  (%r12),%xmm0
movsd  %xmm0,0x8(%rsp)
movsd  0x8(%r12),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x10(%r12),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  0x18(%r12),%xmm0
movsd  %xmm0,0x108(%rsp)
movsd  0x20(%r12),%xmm0
movsd  %xmm0,0x100(%rsp)
movsd  0x28(%r12),%xmm0
movsd  %xmm0,0xf8(%rsp)
movsd  0x30(%r12),%xmm0
movsd  %xmm0,0xf0(%rsp)
movsd  0x38(%r12),%xmm0
movsd  %xmm0,0xe8(%rsp)
movsd  0x40(%r12),%xmm0
movsd  %xmm0,0xe0(%rsp)
movsd  0x48(%r12),%xmm0
movsd  %xmm0,0xd8(%rsp)
movsd  0x50(%r12),%xmm0
movsd  %xmm0,0xd0(%rsp)
movsd  0x58(%r12),%xmm0
movsd  %xmm0,0xc8(%rsp)
movsd  0x60(%r12),%xmm0
movsd  %xmm0,0xc0(%rsp)
movsd  0x68(%r12),%xmm0
movsd  %xmm0,0xb8(%rsp)
movsd  0x70(%r12),%xmm0
movsd  %xmm0,0xb0(%rsp)
movsd  0x78(%r12),%xmm0
movsd  %xmm0,0xa8(%rsp)
movslq %ebx,%rax
movslq %ecx,%rcx
shl    $0x4,%ebx
movsd  0x80(%r12),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x88(%r12),%xmm0
movsd  %xmm0,0xa0(%rsp)
movsd  0x90(%r12),%xmm0
movsd  %xmm0,0x98(%rsp)
movups 0x98(%r12),%xmm0
movaps %xmm0,0x120(%rsp)
movsd  0xa8(%r12),%xmm0
movsd  %xmm0,0x90(%rsp)
movsd  0xb0(%r12),%xmm0
movsd  %xmm0,0x88(%rsp)
movsd  0xb8(%r12),%xmm0
movsd  %xmm0,0x80(%rsp)
movsd  0xc0(%r12),%xmm0
movsd  %xmm0,0x78(%rsp)
movsd  0xc8(%r12),%xmm0
movsd  %xmm0,0x70(%rsp)
movsd  0xd0(%r12),%xmm0
movsd  %xmm0,0x68(%rsp)
movsd  0xd8(%r12),%xmm0
movsd  %xmm0,0x60(%rsp)
movups 0xe0(%r12),%xmm0
movaps %xmm0,0x110(%rsp)
movsd  0xf0(%r12),%xmm0
movsd  %xmm0,0x58(%rsp)
movsd  0xf8(%r12),%xmm0
movsd  %xmm0,0x50(%rsp)
movsd  0x100(%r12),%xmm6
movsd  0x108(%r12),%xmm7
movsd  0x110(%r12),%xmm8
movsd  0x118(%r12),%xmm9
xorpd  %xmm10,%xmm10
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movslq %ebx,%rbx
movsd  0x8(%r13,%rbx,8),%xmm1
mulsd  0x8(%rsp),%xmm1
movsd  0x0(%r13,%rbx,8),%xmm11
movsd  0x10(%r13,%rbx,8),%xmm2
addsd  %xmm1,%xmm11
mulsd  0x10(%rsp),%xmm2
movsd  0x18(%r13,%rbx,8),%xmm0
mulsd  0x20(%rsp),%xmm0
addsd  %xmm2,%xmm11
movapd %xmm1,%xmm3
mulsd  0x108(%rsp),%xmm3
mulsd  0x100(%rsp),%xmm1
movapd %xmm2,%xmm4
mulsd  0xf8(%rsp),%xmm4
addsd  %xmm0,%xmm11
addsd  %xmm3,%xmm4
mulsd  0xf0(%rsp),%xmm2
movapd %xmm0,%xmm3
mulsd  0xe8(%rsp),%xmm3
addsd  %xmm1,%xmm2
mulsd  0xe0(%rsp),%xmm0
addsd  0x20(%r13,%rbx,8),%xmm11
addsd  %xmm4,%xmm3
addsd  %xmm2,%xmm0
movsd  0x28(%r13,%rbx,8),%xmm1
mulsd  0xd8(%rsp),%xmm1
addsd  %xmm1,%xmm11
movsd  0x30(%r13,%rbx,8),%xmm14
mulsd  0xd0(%rsp),%xmm14
movsd  0x38(%r13,%rbx,8),%xmm13
addsd  %xmm14,%xmm11
mulsd  0xc8(%rsp),%xmm13
movapd %xmm1,%xmm2
mulsd  0xc0(%rsp),%xmm2
addsd  %xmm3,%xmm2
mulsd  0xb8(%rsp),%xmm1
addsd  %xmm0,%xmm1
movapd %xmm14,%xmm0
mulsd  0xb0(%rsp),%xmm0
addsd  %xmm2,%xmm0
addsd  %xmm13,%xmm11
mulsd  0xa8(%rsp),%xmm14
movapd %xmm13,%xmm2
mulsd  0x38(%rsp),%xmm2
addsd  0x40(%r13,%rbx,8),%xmm11
addsd  %xmm0,%xmm2
movsd  0x48(%r13,%rbx,8),%xmm15
mulsd  0x98(%rsp),%xmm15
mulsd  0xa0(%rsp),%xmm13
addsd  %xmm15,%xmm11
movupd 0x50(%r13,%rbx,8),%xmm0
mulpd  0x120(%rsp),%xmm0
addsd  %xmm1,%xmm14
movupd 0x70(%r13,%rbx,8),%xmm12
mulpd  0x110(%rsp),%xmm12
addsd  %xmm0,%xmm11
addsd  %xmm14,%xmm13
movapd %xmm15,%xmm3
mulsd  0x90(%rsp),%xmm3
addsd  %xmm2,%xmm3
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
mulsd  0x88(%rsp),%xmm15
addsd  %xmm13,%xmm15
movapd %xmm0,%xmm2
mulsd  0x80(%rsp),%xmm2
addsd  %xmm3,%xmm2
addsd  %xmm1,%xmm11
mulsd  0x78(%rsp),%xmm0
movapd %xmm1,%xmm3
mulsd  0x70(%rsp),%xmm3
addsd  %xmm2,%xmm3
mulsd  0x68(%rsp),%xmm1
addsd  0x60(%r13,%rbx,8),%xmm11
movsd  0x68(%r13,%rbx,8),%xmm4
addsd  %xmm15,%xmm0
mulsd  0x60(%rsp),%xmm4
addsd  %xmm4,%xmm11
addsd  %xmm12,%xmm11
movapd %xmm12,%xmm2
addsd  %xmm0,%xmm1
unpckhpd %xmm12,%xmm2
addsd  %xmm2,%xmm11
movsd  0x6cf(%rip),%xmm5
divsd  %xmm11,%xmm5
movapd %xmm4,%xmm0
mulsd  0x58(%rsp),%xmm0
addsd  %xmm3,%xmm0
mulsd  0x50(%rsp),%xmm4
addsd  %xmm1,%xmm4
movapd %xmm12,%xmm1
mulsd  %xmm6,%xmm1
addsd  %xmm0,%xmm1
mulsd  %xmm7,%xmm12
addsd  %xmm4,%xmm12
movapd %xmm2,%xmm0
mulsd  %xmm8,%xmm0
addsd  %xmm1,%xmm0
mulsd  %xmm9,%xmm2
addsd  %xmm12,%xmm2
mulsd  %xmm5,%xmm0
mulsd  %xmm5,%xmm2
movapd %xmm0,%xmm1
mulsd  %xmm0,%xmm1
subsd  %xmm1,%xmm2
unpcklpd %xmm2,%xmm0
xorps  %xmm1,%xmm1
cvtsi2sdl (%r15,%rax,4),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm0
movapd %xmm10,%xmm1
movapd %xmm0,%xmm10
addpd  %xmm1,%xmm10
add    $0x1,%rax
add    $0x10,%ebx
cmp    %rax,%rcx
jne    1720 <coreGTRGAMMA+0x5f0>
addpd  %xmm1,%xmm0
mov    0x40(%rsp),%rax
movlpd %xmm0,(%rax)
mov    0x48(%rsp),%rax
movhpd %xmm0,(%rax)
mov    %r12,%rdi
add    $0x138,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <free@plt>

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

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