void sumGAMMAMULT(int tipCase, double *sumtable, double *x1_start,
                  double *x2_start, double *tipVector, char *tipX1, char *tipX2,
                  int *modelptr, int lower, int n) {
  double *x1, *x2, *sum;
  int i;
  switch (tipCase) {
  case 0:
    for (i = lower; i < n; i++) {
      x1 = &(tipVector[64 * modelptr[i] + 4 * tipX1[i]]);
      x2 = &(tipVector[64 * modelptr[i] + 4 * tipX2[i]]);
      sum = &sumtable[i * 16];
      sum[0] = x1[0] * x2[0];
      sum[1] = x1[1] * x2[1];
      sum[2] = x1[2] * x2[2];
      sum[3] = x1[3] * x2[3];
      sum[4] = x1[0] * x2[0];
      sum[5] = x1[1] * x2[1];
      sum[6] = x1[2] * x2[2];
      sum[7] = x1[3] * x2[3];
      sum[8] = x1[0] * x2[0];
      sum[9] = x1[1] * x2[1];
      sum[10] = x1[2] * x2[2];
      sum[11] = x1[3] * x2[3];
      sum[12] = x1[0] * x2[0];
      sum[13] = x1[1] * x2[1];
      sum[14] = x1[2] * x2[2];
      sum[15] = x1[3] * x2[3];
    }
    break;
  case 1:
    for (i = lower; i < n; i++) {
      x1 = &(tipVector[64 * modelptr[i] + 4 * tipX1[i]]);
      x2 = &x2_start[16 * i];
      sum = &sumtable[16 * i];
      sum[0] = x1[0] * x2[0];
      sum[1] = x1[1] * x2[1];
      sum[2] = x1[2] * x2[2];
      sum[3] = x1[3] * x2[3];
      sum[4] = x1[0] * x2[4];
      sum[5] = x1[1] * x2[5];
      sum[6] = x1[2] * x2[6];
      sum[7] = x1[3] * x2[7];
      sum[8] = x1[0] * x2[8];
      sum[9] = x1[1] * x2[9];
      sum[10] = x1[2] * x2[10];
      sum[11] = x1[3] * x2[11];
      sum[12] = x1[0] * x2[12];
      sum[13] = x1[1] * x2[13];
      sum[14] = x1[2] * x2[14];
      sum[15] = x1[3] * x2[15];
    }
    break;
  case 2:
    for (i = lower; i < n; i++) {
      x1 = &x1_start[16 * i];
      x2 = &x2_start[16 * i];
      sum = &sumtable[16 * i];
      sum[0] = x1[0] * x2[0];
      sum[1] = x1[1] * x2[1];
      sum[2] = x1[2] * x2[2];
      sum[3] = x1[3] * x2[3];
      sum[4] = x1[4] * x2[4];
      sum[5] = x1[5] * x2[5];
      sum[6] = x1[6] * x2[6];
      sum[7] = x1[7] * x2[7];
      sum[8] = x1[8] * x2[8];
      sum[9] = x1[9] * x2[9];
      sum[10] = x1[10] * x2[10];
      sum[11] = x1[11] * x2[11];
      sum[12] = x1[12] * x2[12];
      sum[13] = x1[13] * x2[13];
      sum[14] = x1[14] * x2[14];
      sum[15] = x1[15] * x2[15];
    }
    break;
  default:
    assert(0);
  }
}


x86 assembly (clang, -O0):
<sumGAMMAMULT>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x50(%rbp)
test   %eax,%eax
je     1172 <sumGAMMAMULT+0x62>
jmp    1150 <sumGAMMAMULT+0x40>
mov    -0x50(%rbp),%eax
sub    $0x1,%eax
je     13b8 <sumGAMMAMULT+0x2a8>
jmp    1161 <sumGAMMAMULT+0x51>
mov    -0x50(%rbp),%eax
sub    $0x2,%eax
je     15e8 <sumGAMMAMULT+0x4d8>
jmp    1802 <sumGAMMAMULT+0x6f2>
mov    0x20(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    0x28(%rbp),%eax
jge    13b3 <sumGAMMAMULT+0x2a3>
mov    -0x28(%rbp),%rax
mov    0x18(%rbp),%rcx
movslq -0x4c(%rbp),%rdx
mov    (%rcx,%rdx,4),%ecx
shl    $0x6,%ecx
mov    -0x30(%rbp),%rdx
movslq -0x4c(%rbp),%rsi
movsbl (%rdx,%rsi,1),%edx
shl    $0x2,%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
mov    0x18(%rbp),%rcx
movslq -0x4c(%rbp),%rdx
mov    (%rcx,%rdx,4),%ecx
shl    $0x6,%ecx
mov    0x10(%rbp),%rdx
movslq -0x4c(%rbp),%rsi
movsbl (%rdx,%rsi,1),%edx
shl    $0x2,%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
shl    $0x4,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x50(%rax)
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x70(%rax)
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1178 <sumGAMMAMULT+0x68>
jmp    180b <sumGAMMAMULT+0x6fb>
mov    0x20(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    0x28(%rbp),%eax
jge    15e3 <sumGAMMAMULT+0x4d3>
mov    -0x28(%rbp),%rax
mov    0x18(%rbp),%rcx
movslq -0x4c(%rbp),%rdx
mov    (%rcx,%rdx,4),%ecx
shl    $0x6,%ecx
mov    -0x30(%rbp),%rdx
movslq -0x4c(%rbp),%rsi
movsbl (%rdx,%rsi,1),%edx
shl    $0x2,%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x4c(%rbp),%ecx
shl    $0x4,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
shl    $0x4,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x20(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x38(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x40(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x50(%rax)
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x58(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x60(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x70(%rax)
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x78(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    13be <sumGAMMAMULT+0x2ae>
jmp    180b <sumGAMMAMULT+0x6fb>
mov    0x20(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    0x28(%rbp),%eax
jge    17fd <sumGAMMAMULT+0x6ed>
mov    -0x18(%rbp),%rax
mov    -0x4c(%rbp),%ecx
shl    $0x4,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x4c(%rbp),%ecx
shl    $0x4,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
shl    $0x4,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x38(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x20(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x38(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x38(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x38(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x38(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x38(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x40(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x38(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x38(%rbp),%rax
movsd  0x50(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x50(%rax)
mov    -0x38(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x58(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x38(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x60(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x38(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x38(%rbp),%rax
movsd  0x70(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x70(%rax)
mov    -0x38(%rbp),%rax
movsd  0x78(%rax),%xmm0
mov    -0x40(%rbp),%rax
mulsd  0x78(%rax),%xmm0
mov    -0x48(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    15ee <sumGAMMAMULT+0x4de>
jmp    180b <sumGAMMAMULT+0x6fb>
xor    %edi,%edi
mov    $0x0,%al
call   1030 <assert@plt>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sumGAMMAMULT>:
push   %r14
push   %rbx
mov    0x30(%rsp),%ebx
mov    0x28(%rsp),%eax
mov    0x20(%rsp),%r10
test   %edi,%edi
je     1281 <sumGAMMAMULT+0x171>
cmp    $0x1,%edi
je     140b <sumGAMMAMULT+0x2fb>
cmp    $0x2,%edi
jne    1571 <sumGAMMAMULT+0x461>
cmp    %ebx,%eax
jge    156d <sumGAMMAMULT+0x45d>
movslq %eax,%r8
movslq %ebx,%rdi
sub    %r8,%rdi
shl    $0x4,%eax
xchg   %ax,%ax
cltq
movsd  (%rdx,%rax,8),%xmm0
mulsd  (%rcx,%rax,8),%xmm0
movsd  %xmm0,(%rsi,%rax,8)
movsd  0x8(%rdx,%rax,8),%xmm0
mulsd  0x8(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x8(%rsi,%rax,8)
movsd  0x10(%rdx,%rax,8),%xmm0
mulsd  0x10(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x10(%rsi,%rax,8)
movsd  0x18(%rdx,%rax,8),%xmm0
mulsd  0x18(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x18(%rsi,%rax,8)
movsd  0x20(%rdx,%rax,8),%xmm0
mulsd  0x20(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x20(%rsi,%rax,8)
movsd  0x28(%rdx,%rax,8),%xmm0
mulsd  0x28(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x28(%rsi,%rax,8)
movsd  0x30(%rdx,%rax,8),%xmm0
mulsd  0x30(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x30(%rsi,%rax,8)
movsd  0x38(%rdx,%rax,8),%xmm0
mulsd  0x38(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x38(%rsi,%rax,8)
movsd  0x40(%rdx,%rax,8),%xmm0
mulsd  0x40(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x40(%rsi,%rax,8)
movsd  0x48(%rdx,%rax,8),%xmm0
mulsd  0x48(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x48(%rsi,%rax,8)
movsd  0x50(%rdx,%rax,8),%xmm0
mulsd  0x50(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x50(%rsi,%rax,8)
movsd  0x58(%rdx,%rax,8),%xmm0
mulsd  0x58(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x58(%rsi,%rax,8)
movsd  0x60(%rdx,%rax,8),%xmm0
mulsd  0x60(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x60(%rsi,%rax,8)
movsd  0x68(%rdx,%rax,8),%xmm0
mulsd  0x68(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x68(%rsi,%rax,8)
movsd  0x70(%rdx,%rax,8),%xmm0
mulsd  0x70(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x70(%rsi,%rax,8)
movsd  0x78(%rdx,%rax,8),%xmm0
mulsd  0x78(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x78(%rsi,%rax,8)
add    $0x10,%eax
add    $0xffffffffffffffff,%rdi
jne    1150 <sumGAMMAMULT+0x40>
jmp    156d <sumGAMMAMULT+0x45d>
cmp    %ebx,%eax
jge    156d <sumGAMMAMULT+0x45d>
mov    0x18(%rsp),%r11
movslq %eax,%rdx
movslq %ebx,%r14
shl    $0x4,%eax
nopw   0x0(%rax,%rax,1)
movslq (%r10,%rdx,4),%rbx
shl    $0x6,%rbx
movsbq (%r9,%rdx,1),%rcx
lea    (%rbx,%rcx,4),%rcx
movsbq (%r11,%rdx,1),%rdi
movslq %ebx,%rbx
lea    (%rbx,%rdi,4),%rbx
cltq
movsd  (%r8,%rcx,8),%xmm0
mulsd  (%r8,%rbx,8),%xmm0
movsd  %xmm0,(%rsi,%rax,8)
movsd  0x8(%r8,%rcx,8),%xmm0
mulsd  0x8(%r8,%rbx,8),%xmm0
movsd  %xmm0,0x8(%rsi,%rax,8)
movsd  0x10(%r8,%rcx,8),%xmm0
mulsd  0x10(%r8,%rbx,8),%xmm0
movsd  %xmm0,0x10(%rsi,%rax,8)
movsd  0x18(%r8,%rcx,8),%xmm0
mulsd  0x18(%r8,%rbx,8),%xmm0
movsd  %xmm0,0x18(%rsi,%rax,8)
movsd  (%r8,%rcx,8),%xmm0
mulsd  (%r8,%rbx,8),%xmm0
movsd  %xmm0,0x20(%rsi,%rax,8)
movsd  0x8(%r8,%rcx,8),%xmm0
mulsd  0x8(%r8,%rbx,8),%xmm0
movsd  %xmm0,0x28(%rsi,%rax,8)
movsd  0x10(%r8,%rcx,8),%xmm0
mulsd  0x10(%r8,%rbx,8),%xmm0
movsd  %xmm0,0x30(%rsi,%rax,8)
movsd  0x18(%r8,%rcx,8),%xmm0
mulsd  0x18(%r8,%rbx,8),%xmm0
movsd  %xmm0,0x38(%rsi,%rax,8)
movsd  (%r8,%rcx,8),%xmm0
mulsd  (%r8,%rbx,8),%xmm0
movsd  %xmm0,0x40(%rsi,%rax,8)
movsd  0x8(%r8,%rcx,8),%xmm0
mulsd  0x8(%r8,%rbx,8),%xmm0
movsd  %xmm0,0x48(%rsi,%rax,8)
movsd  0x10(%r8,%rcx,8),%xmm0
mulsd  0x10(%r8,%rbx,8),%xmm0
movsd  %xmm0,0x50(%rsi,%rax,8)
movsd  0x18(%r8,%rcx,8),%xmm0
mulsd  0x18(%r8,%rbx,8),%xmm0
movsd  %xmm0,0x58(%rsi,%rax,8)
movsd  (%r8,%rcx,8),%xmm0
mulsd  (%r8,%rbx,8),%xmm0
movsd  %xmm0,0x60(%rsi,%rax,8)
movsd  0x8(%r8,%rcx,8),%xmm0
mulsd  0x8(%r8,%rbx,8),%xmm0
movsd  %xmm0,0x68(%rsi,%rax,8)
movsd  0x10(%r8,%rcx,8),%xmm0
mulsd  0x10(%r8,%rbx,8),%xmm0
movsd  %xmm0,0x70(%rsi,%rax,8)
movsd  0x18(%r8,%rcx,8),%xmm0
mulsd  0x18(%r8,%rbx,8),%xmm0
movsd  %xmm0,0x78(%rsi,%rax,8)
add    $0x1,%rdx
add    $0x10,%eax
cmp    %rdx,%r14
jne    12a0 <sumGAMMAMULT+0x190>
jmp    156d <sumGAMMAMULT+0x45d>
cmp    %ebx,%eax
jge    156d <sumGAMMAMULT+0x45d>
movslq %eax,%rdx
movslq %ebx,%r11
shl    $0x4,%eax
nopl   0x0(%rax)
movslq (%r10,%rdx,4),%rbx
shl    $0x6,%rbx
movsbq (%r9,%rdx,1),%rdi
lea    (%rbx,%rdi,4),%rbx
cltq
movsd  (%r8,%rbx,8),%xmm0
mulsd  (%rcx,%rax,8),%xmm0
movsd  %xmm0,(%rsi,%rax,8)
movsd  0x8(%r8,%rbx,8),%xmm0
mulsd  0x8(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x8(%rsi,%rax,8)
movsd  0x10(%r8,%rbx,8),%xmm0
mulsd  0x10(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x10(%rsi,%rax,8)
movsd  0x18(%r8,%rbx,8),%xmm0
mulsd  0x18(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x18(%rsi,%rax,8)
movsd  (%r8,%rbx,8),%xmm0
mulsd  0x20(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x20(%rsi,%rax,8)
movsd  0x8(%r8,%rbx,8),%xmm0
mulsd  0x28(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x28(%rsi,%rax,8)
movsd  0x10(%r8,%rbx,8),%xmm0
mulsd  0x30(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x30(%rsi,%rax,8)
movsd  0x18(%r8,%rbx,8),%xmm0
mulsd  0x38(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x38(%rsi,%rax,8)
movsd  (%r8,%rbx,8),%xmm0
mulsd  0x40(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x40(%rsi,%rax,8)
movsd  0x8(%r8,%rbx,8),%xmm0
mulsd  0x48(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x48(%rsi,%rax,8)
movsd  0x10(%r8,%rbx,8),%xmm0
mulsd  0x50(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x50(%rsi,%rax,8)
movsd  0x18(%r8,%rbx,8),%xmm0
mulsd  0x58(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x58(%rsi,%rax,8)
movsd  (%r8,%rbx,8),%xmm0
mulsd  0x60(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x60(%rsi,%rax,8)
movsd  0x8(%r8,%rbx,8),%xmm0
mulsd  0x68(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x68(%rsi,%rax,8)
movsd  0x10(%r8,%rbx,8),%xmm0
mulsd  0x70(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x70(%rsi,%rax,8)
movsd  0x18(%r8,%rbx,8),%xmm0
mulsd  0x78(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x78(%rsi,%rax,8)
add    $0x1,%rdx
add    $0x10,%eax
cmp    %rdx,%r11
jne    1420 <sumGAMMAMULT+0x310>
pop    %rbx
pop    %r14
ret
xor    %edi,%edi
xor    %eax,%eax
pop    %rbx
pop    %r14
jmp    1030 <assert@plt>

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

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