void sumGAMMA(int tipCase, double *sumtable, double *x1_start, double *x2_start,
              double *tipVector, char *tipX1, char *tipX2, int lower,
              const int n) {
  double *x1, *x2, *sum;
  int i;
  switch (tipCase) {
  case 0:
    for (i = lower; i < n; i++) {
      x1 = &(tipVector[4 * tipX1[i]]);
      x2 = &(tipVector[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[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):
<sumGAMMA>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
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     116e <sumGAMMA+0x5e>
jmp    114c <sumGAMMA+0x3c>
mov    -0x50(%rbp),%eax
sub    $0x1,%eax
je     1394 <sumGAMMA+0x284>
jmp    115d <sumGAMMA+0x4d>
mov    -0x50(%rbp),%eax
sub    $0x2,%eax
je     15b4 <sumGAMMA+0x4a4>
jmp    17ce <sumGAMMA+0x6be>
mov    0x18(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    0x20(%rbp),%eax
jge    138f <sumGAMMA+0x27f>
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rcx
movslq -0x4c(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
mov    0x10(%rbp),%rcx
movslq -0x4c(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
shl    $0x2,%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    1174 <sumGAMMA+0x64>
jmp    17d7 <sumGAMMA+0x6c7>
mov    0x18(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    0x20(%rbp),%eax
jge    15af <sumGAMMA+0x49f>
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rcx
movslq -0x4c(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
shl    $0x2,%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    139a <sumGAMMA+0x28a>
jmp    17d7 <sumGAMMA+0x6c7>
mov    0x18(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    0x20(%rbp),%eax
jge    17c9 <sumGAMMA+0x6b9>
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    15ba <sumGAMMA+0x4aa>
jmp    17d7 <sumGAMMA+0x6c7>
xor    %edi,%edi
mov    $0x0,%al
call   1030 <assert@plt>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sumGAMMA>:
mov    0x18(%rsp),%r11d
mov    0x10(%rsp),%eax
test   %edi,%edi
je     1281 <sumGAMMA+0x171>
cmp    $0x1,%edi
je     1400 <sumGAMMA+0x2f0>
cmp    $0x2,%edi
jne    1566 <sumGAMMA+0x456>
cmp    %r11d,%eax
jge    1565 <sumGAMMA+0x455>
movslq %eax,%r8
movslq %r11d,%rdi
sub    %r8,%rdi
shl    $0x4,%eax
nopl   0x0(%rax,%rax,1)
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 <sumGAMMA+0x40>
jmp    1565 <sumGAMMA+0x455>
cmp    %r11d,%eax
jge    1565 <sumGAMMA+0x455>
mov    0x8(%rsp),%r10
movslq %eax,%rdx
movslq %r11d,%r11
shl    $0x4,%eax
nopl   0x0(%rax,%rax,1)
movsbq (%r9,%rdx,1),%rcx
shl    $0x5,%rcx
movsbq (%r10,%rdx,1),%rdi
shl    $0x5,%rdi
cltq
movsd  (%r8,%rcx,1),%xmm0
mulsd  (%r8,%rdi,1),%xmm0
movsd  %xmm0,(%rsi,%rax,8)
movsd  0x8(%r8,%rcx,1),%xmm0
mulsd  0x8(%r8,%rdi,1),%xmm0
movsd  %xmm0,0x8(%rsi,%rax,8)
movsd  0x10(%r8,%rcx,1),%xmm0
mulsd  0x10(%r8,%rdi,1),%xmm0
movsd  %xmm0,0x10(%rsi,%rax,8)
movsd  0x18(%r8,%rcx,1),%xmm0
mulsd  0x18(%r8,%rdi,1),%xmm0
movsd  %xmm0,0x18(%rsi,%rax,8)
movsd  (%r8,%rcx,1),%xmm0
mulsd  (%r8,%rdi,1),%xmm0
movsd  %xmm0,0x20(%rsi,%rax,8)
movsd  0x8(%r8,%rcx,1),%xmm0
mulsd  0x8(%r8,%rdi,1),%xmm0
movsd  %xmm0,0x28(%rsi,%rax,8)
movsd  0x10(%r8,%rcx,1),%xmm0
mulsd  0x10(%r8,%rdi,1),%xmm0
movsd  %xmm0,0x30(%rsi,%rax,8)
movsd  0x18(%r8,%rcx,1),%xmm0
mulsd  0x18(%r8,%rdi,1),%xmm0
movsd  %xmm0,0x38(%rsi,%rax,8)
movsd  (%r8,%rcx,1),%xmm0
mulsd  (%r8,%rdi,1),%xmm0
movsd  %xmm0,0x40(%rsi,%rax,8)
movsd  0x8(%r8,%rcx,1),%xmm0
mulsd  0x8(%r8,%rdi,1),%xmm0
movsd  %xmm0,0x48(%rsi,%rax,8)
movsd  0x10(%r8,%rcx,1),%xmm0
mulsd  0x10(%r8,%rdi,1),%xmm0
movsd  %xmm0,0x50(%rsi,%rax,8)
movsd  0x18(%r8,%rcx,1),%xmm0
mulsd  0x18(%r8,%rdi,1),%xmm0
movsd  %xmm0,0x58(%rsi,%rax,8)
movsd  (%r8,%rcx,1),%xmm0
mulsd  (%r8,%rdi,1),%xmm0
movsd  %xmm0,0x60(%rsi,%rax,8)
movsd  0x8(%r8,%rcx,1),%xmm0
mulsd  0x8(%r8,%rdi,1),%xmm0
movsd  %xmm0,0x68(%rsi,%rax,8)
movsd  0x10(%r8,%rcx,1),%xmm0
mulsd  0x10(%r8,%rdi,1),%xmm0
movsd  %xmm0,0x70(%rsi,%rax,8)
movsd  0x18(%r8,%rcx,1),%xmm0
mulsd  0x18(%r8,%rdi,1),%xmm0
movsd  %xmm0,0x78(%rsi,%rax,8)
add    $0x1,%rdx
add    $0x10,%eax
cmp    %rdx,%r11
jne    12a0 <sumGAMMA+0x190>
jmp    1565 <sumGAMMA+0x455>
cmp    %r11d,%eax
jge    1565 <sumGAMMA+0x455>
movslq %eax,%rdx
movslq %r11d,%r10
shl    $0x4,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbq (%r9,%rdx,1),%rdi
shl    $0x5,%rdi
cltq
movsd  (%r8,%rdi,1),%xmm0
mulsd  (%rcx,%rax,8),%xmm0
movsd  %xmm0,(%rsi,%rax,8)
movsd  0x8(%r8,%rdi,1),%xmm0
mulsd  0x8(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x8(%rsi,%rax,8)
movsd  0x10(%r8,%rdi,1),%xmm0
mulsd  0x10(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x10(%rsi,%rax,8)
movsd  0x18(%r8,%rdi,1),%xmm0
mulsd  0x18(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x18(%rsi,%rax,8)
movsd  (%r8,%rdi,1),%xmm0
mulsd  0x20(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x20(%rsi,%rax,8)
movsd  0x8(%r8,%rdi,1),%xmm0
mulsd  0x28(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x28(%rsi,%rax,8)
movsd  0x10(%r8,%rdi,1),%xmm0
mulsd  0x30(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x30(%rsi,%rax,8)
movsd  0x18(%r8,%rdi,1),%xmm0
mulsd  0x38(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x38(%rsi,%rax,8)
movsd  (%r8,%rdi,1),%xmm0
mulsd  0x40(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x40(%rsi,%rax,8)
movsd  0x8(%r8,%rdi,1),%xmm0
mulsd  0x48(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x48(%rsi,%rax,8)
movsd  0x10(%r8,%rdi,1),%xmm0
mulsd  0x50(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x50(%rsi,%rax,8)
movsd  0x18(%r8,%rdi,1),%xmm0
mulsd  0x58(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x58(%rsi,%rax,8)
movsd  (%r8,%rdi,1),%xmm0
mulsd  0x60(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x60(%rsi,%rax,8)
movsd  0x8(%r8,%rdi,1),%xmm0
mulsd  0x68(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x68(%rsi,%rax,8)
movsd  0x10(%r8,%rdi,1),%xmm0
mulsd  0x70(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x70(%rsi,%rax,8)
movsd  0x18(%r8,%rdi,1),%xmm0
mulsd  0x78(%rcx,%rax,8),%xmm0
movsd  %xmm0,0x78(%rsi,%rax,8)
add    $0x1,%rdx
add    $0x10,%eax
cmp    %rdx,%r10
jne    1420 <sumGAMMA+0x310>
ret
xor    %edi,%edi
xor    %eax,%eax
jmp    1030 <assert@plt>

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

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