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


x86 assembly (clang, -O0):
<sumGTRCATPROTMULT>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%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,-0x54(%rbp)
test   %eax,%eax
je     1172 <sumGTRCATPROTMULT+0x62>
jmp    1150 <sumGTRCATPROTMULT+0x40>
mov    -0x54(%rbp),%eax
sub    $0x1,%eax
je     144c <sumGTRCATPROTMULT+0x33c>
jmp    1161 <sumGTRCATPROTMULT+0x51>
mov    -0x54(%rbp),%eax
sub    $0x2,%eax
je     1712 <sumGTRCATPROTMULT+0x602>
jmp    19b6 <sumGTRCATPROTMULT+0x8a6>
mov    0x20(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x28(%rbp),%eax
jge    1447 <sumGTRCATPROTMULT+0x337>
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
imul   $0x1cc,-0x38(%rbp),%ecx
mov    -0x30(%rbp),%rdx
movslq -0x34(%rbp),%rsi
movsbl (%rdx,%rsi,1),%edx
imul   $0x14,%edx,%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
imul   $0x1cc,-0x38(%rbp),%ecx
mov    0x10(%rbp),%rdx
movslq -0x34(%rbp),%rsi
movsbl (%rdx,%rsi,1),%edx
imul   $0x14,%edx,%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x10(%rbp),%rax
imul   $0x14,-0x34(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x48(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x48(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x48(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x48(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x20(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x48(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x48(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x48(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x38(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x48(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x40(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x48(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x48(%rbp),%rax
movsd  0x50(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x50(%rax)
mov    -0x48(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x58(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x48(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x60(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x48(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x48(%rbp),%rax
movsd  0x70(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x70(%rax)
mov    -0x48(%rbp),%rax
movsd  0x78(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x78(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x48(%rbp),%rax
movsd  0x80(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x80(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x80(%rax)
mov    -0x48(%rbp),%rax
movsd  0x88(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x88(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x88(%rax)
mov    -0x48(%rbp),%rax
movsd  0x90(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x90(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x90(%rax)
mov    -0x48(%rbp),%rax
movsd  0x98(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x98(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x98(%rax)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1178 <sumGTRCATPROTMULT+0x68>
jmp    19bf <sumGTRCATPROTMULT+0x8af>
mov    0x20(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x28(%rbp),%eax
jge    170d <sumGTRCATPROTMULT+0x5fd>
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
imul   $0x1cc,-0x38(%rbp),%ecx
mov    -0x30(%rbp),%rdx
movslq -0x34(%rbp),%rsi
movsbl (%rdx,%rsi,1),%edx
imul   $0x14,%edx,%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x20(%rbp),%rax
imul   $0x14,-0x34(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x10(%rbp),%rax
imul   $0x14,-0x34(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x48(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x48(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x48(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x48(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x20(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x48(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x48(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x48(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x38(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x48(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x40(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x48(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x48(%rbp),%rax
movsd  0x50(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x50(%rax)
mov    -0x48(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x58(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x48(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x60(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x48(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x48(%rbp),%rax
movsd  0x70(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x70(%rax)
mov    -0x48(%rbp),%rax
movsd  0x78(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x78(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x48(%rbp),%rax
movsd  0x80(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x80(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x80(%rax)
mov    -0x48(%rbp),%rax
movsd  0x88(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x88(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x88(%rax)
mov    -0x48(%rbp),%rax
movsd  0x90(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x90(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x90(%rax)
mov    -0x48(%rbp),%rax
movsd  0x98(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x98(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x98(%rax)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1452 <sumGTRCATPROTMULT+0x342>
jmp    19bf <sumGTRCATPROTMULT+0x8af>
mov    0x20(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x28(%rbp),%eax
jge    19b1 <sumGTRCATPROTMULT+0x8a1>
mov    -0x18(%rbp),%rax
imul   $0x14,-0x34(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x20(%rbp),%rax
imul   $0x14,-0x34(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x10(%rbp),%rax
imul   $0x14,-0x34(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x48(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x48(%rbp),%rax
movsd  0x8(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x8(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x48(%rbp),%rax
movsd  0x10(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x48(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x18(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x48(%rbp),%rax
movsd  0x20(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x20(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x48(%rbp),%rax
movsd  0x28(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x28(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x48(%rbp),%rax
movsd  0x30(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x30(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x48(%rbp),%rax
movsd  0x38(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x38(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x38(%rax)
mov    -0x48(%rbp),%rax
movsd  0x40(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x40(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x40(%rax)
mov    -0x48(%rbp),%rax
movsd  0x48(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x48(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x48(%rax)
mov    -0x48(%rbp),%rax
movsd  0x50(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x50(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x50(%rax)
mov    -0x48(%rbp),%rax
movsd  0x58(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x58(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x58(%rax)
mov    -0x48(%rbp),%rax
movsd  0x60(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x60(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x60(%rax)
mov    -0x48(%rbp),%rax
movsd  0x68(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x68(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x68(%rax)
mov    -0x48(%rbp),%rax
movsd  0x70(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x70(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x70(%rax)
mov    -0x48(%rbp),%rax
movsd  0x78(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x78(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x78(%rax)
mov    -0x48(%rbp),%rax
movsd  0x80(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x80(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x80(%rax)
mov    -0x48(%rbp),%rax
movsd  0x88(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x88(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x88(%rax)
mov    -0x48(%rbp),%rax
movsd  0x90(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x90(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x90(%rax)
mov    -0x48(%rbp),%rax
movsd  0x98(%rax),%xmm0
mov    -0x50(%rbp),%rax
mulsd  0x98(%rax),%xmm0
mov    -0x40(%rbp),%rax
movsd  %xmm0,0x98(%rax)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1718 <sumGTRCATPROTMULT+0x608>
jmp    19bf <sumGTRCATPROTMULT+0x8af>
xor    %edi,%edi
mov    $0x0,%al
call   1030 <assert@plt>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sumGTRCATPROTMULT>:
push   %r14
push   %rbx
mov    0x30(%rsp),%eax
mov    0x28(%rsp),%ebx
mov    0x20(%rsp),%r14
test   %edi,%edi
je     12f6 <sumGTRCATPROTMULT+0x1e6>
cmp    $0x1,%edi
je     14fa <sumGTRCATPROTMULT+0x3ea>
cmp    $0x2,%edi
jne    16e7 <sumGTRCATPROTMULT+0x5d7>
cmp    %eax,%ebx
jge    16e3 <sumGTRCATPROTMULT+0x5d3>
movslq %ebx,%rbx
cltq
lea    (%rbx,%rbx,4),%rdi
shl    $0x5,%rdi
add    $0x98,%rdi
sub    %rbx,%rax
nopl   0x0(%rax)
movsd  -0x98(%rdx,%rdi,1),%xmm0
ff ff
mulsd  -0x98(%rcx,%rdi,1),%xmm0
ff ff
movsd  %xmm0,-0x98(%rsi,%rdi,1)
ff ff
movsd  -0x90(%rdx,%rdi,1),%xmm0
ff ff
mulsd  -0x90(%rcx,%rdi,1),%xmm0
ff ff
movsd  %xmm0,-0x90(%rsi,%rdi,1)
ff ff
movsd  -0x88(%rdx,%rdi,1),%xmm0
ff ff
mulsd  -0x88(%rcx,%rdi,1),%xmm0
ff ff
movsd  %xmm0,-0x88(%rsi,%rdi,1)
ff ff
movsd  -0x80(%rdx,%rdi,1),%xmm0
mulsd  -0x80(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x80(%rsi,%rdi,1)
movsd  -0x78(%rdx,%rdi,1),%xmm0
mulsd  -0x78(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x78(%rsi,%rdi,1)
movsd  -0x70(%rdx,%rdi,1),%xmm0
mulsd  -0x70(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x70(%rsi,%rdi,1)
movsd  -0x68(%rdx,%rdi,1),%xmm0
mulsd  -0x68(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x68(%rsi,%rdi,1)
movsd  -0x60(%rdx,%rdi,1),%xmm0
mulsd  -0x60(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x60(%rsi,%rdi,1)
movsd  -0x58(%rdx,%rdi,1),%xmm0
mulsd  -0x58(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x58(%rsi,%rdi,1)
movsd  -0x50(%rdx,%rdi,1),%xmm0
mulsd  -0x50(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x50(%rsi,%rdi,1)
movsd  -0x48(%rdx,%rdi,1),%xmm0
mulsd  -0x48(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x48(%rsi,%rdi,1)
movsd  -0x40(%rdx,%rdi,1),%xmm0
mulsd  -0x40(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x40(%rsi,%rdi,1)
movsd  -0x38(%rdx,%rdi,1),%xmm0
mulsd  -0x38(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x38(%rsi,%rdi,1)
movsd  -0x30(%rdx,%rdi,1),%xmm0
mulsd  -0x30(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x30(%rsi,%rdi,1)
movsd  -0x28(%rdx,%rdi,1),%xmm0
mulsd  -0x28(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x28(%rsi,%rdi,1)
movsd  -0x20(%rdx,%rdi,1),%xmm0
mulsd  -0x20(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x20(%rsi,%rdi,1)
movsd  -0x18(%rdx,%rdi,1),%xmm0
mulsd  -0x18(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x18(%rsi,%rdi,1)
movsd  -0x10(%rdx,%rdi,1),%xmm0
mulsd  -0x10(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x10(%rsi,%rdi,1)
movsd  -0x8(%rdx,%rdi,1),%xmm0
mulsd  -0x8(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x8(%rsi,%rdi,1)
movsd  (%rdx,%rdi,1),%xmm0
mulsd  (%rcx,%rdi,1),%xmm0
movsd  %xmm0,(%rsi,%rdi,1)
add    $0xa0,%rdi
add    $0xffffffffffffffff,%rax
jne    1160 <sumGTRCATPROTMULT+0x50>
jmp    16e3 <sumGTRCATPROTMULT+0x5d3>
cmp    %eax,%ebx
jge    16e3 <sumGTRCATPROTMULT+0x5d3>
mov    0x18(%rsp),%r10
movslq %ebx,%rdx
movslq %eax,%r11
lea    (%rdx,%rdx,4),%rax
shl    $0x5,%rax
add    %rax,%rsi
add    $0x98,%rsi
nopl   0x0(%rax,%rax,1)
movslq (%r14,%rdx,4),%rax
imul   $0x1cc,%rax,%rax
movsbq (%r9,%rdx,1),%rcx
lea    (%rcx,%rcx,4),%rcx
lea    (%rax,%rcx,4),%rcx
movsbq (%r10,%rdx,1),%rdi
lea    (%rdi,%rdi,4),%rdi
cltq
lea    (%rax,%rdi,4),%rdi
movsd  (%r8,%rcx,8),%xmm0
mulsd  (%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x98(%rsi)
ff
movsd  0x8(%r8,%rcx,8),%xmm0
mulsd  0x8(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x90(%rsi)
ff
movsd  0x10(%r8,%rcx,8),%xmm0
mulsd  0x10(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x88(%rsi)
ff
movsd  0x18(%r8,%rcx,8),%xmm0
mulsd  0x18(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x80(%rsi)
movsd  0x20(%r8,%rcx,8),%xmm0
mulsd  0x20(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x78(%rsi)
movsd  0x28(%r8,%rcx,8),%xmm0
mulsd  0x28(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x70(%rsi)
movsd  0x30(%r8,%rcx,8),%xmm0
mulsd  0x30(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x68(%rsi)
movsd  0x38(%r8,%rcx,8),%xmm0
mulsd  0x38(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x60(%rsi)
movsd  0x40(%r8,%rcx,8),%xmm0
mulsd  0x40(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x58(%rsi)
movsd  0x48(%r8,%rcx,8),%xmm0
mulsd  0x48(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x50(%rsi)
movsd  0x50(%r8,%rcx,8),%xmm0
mulsd  0x50(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x48(%rsi)
movsd  0x58(%r8,%rcx,8),%xmm0
mulsd  0x58(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x40(%rsi)
movsd  0x60(%r8,%rcx,8),%xmm0
mulsd  0x60(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x38(%rsi)
movsd  0x68(%r8,%rcx,8),%xmm0
mulsd  0x68(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x30(%rsi)
movsd  0x70(%r8,%rcx,8),%xmm0
mulsd  0x70(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x28(%rsi)
movsd  0x78(%r8,%rcx,8),%xmm0
mulsd  0x78(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x20(%rsi)
movsd  0x80(%r8,%rcx,8),%xmm0
mulsd  0x80(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x18(%rsi)
movsd  0x88(%r8,%rcx,8),%xmm0
mulsd  0x88(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x10(%rsi)
movsd  0x90(%r8,%rcx,8),%xmm0
mulsd  0x90(%r8,%rdi,8),%xmm0
movsd  %xmm0,-0x8(%rsi)
movsd  0x98(%r8,%rcx,8),%xmm0
mulsd  0x98(%r8,%rdi,8),%xmm0
movsd  %xmm0,(%rsi)
add    $0x1,%rdx
add    $0xa0,%rsi
cmp    %rdx,%r11
jne    1320 <sumGTRCATPROTMULT+0x210>
jmp    16e3 <sumGTRCATPROTMULT+0x5d3>
cmp    %eax,%ebx
jge    16e3 <sumGTRCATPROTMULT+0x5d3>
movslq %ebx,%rdx
movslq %eax,%r10
lea    (%rdx,%rdx,4),%rdi
shl    $0x5,%rdi
add    $0x98,%rdi
nopw   0x0(%rax,%rax,1)
movslq (%r14,%rdx,4),%rax
imul   $0x1cc,%rax,%rax
movsbq (%r9,%rdx,1),%rbx
lea    (%rbx,%rbx,4),%rbx
lea    (%rax,%rbx,4),%rax
movsd  (%r8,%rax,8),%xmm0
mulsd  -0x98(%rcx,%rdi,1),%xmm0
ff ff
movsd  %xmm0,-0x98(%rsi,%rdi,1)
ff ff
movsd  0x8(%r8,%rax,8),%xmm0
mulsd  -0x90(%rcx,%rdi,1),%xmm0
ff ff
movsd  %xmm0,-0x90(%rsi,%rdi,1)
ff ff
movsd  0x10(%r8,%rax,8),%xmm0
mulsd  -0x88(%rcx,%rdi,1),%xmm0
ff ff
movsd  %xmm0,-0x88(%rsi,%rdi,1)
ff ff
movsd  0x18(%r8,%rax,8),%xmm0
mulsd  -0x80(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x80(%rsi,%rdi,1)
movsd  0x20(%r8,%rax,8),%xmm0
mulsd  -0x78(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x78(%rsi,%rdi,1)
movsd  0x28(%r8,%rax,8),%xmm0
mulsd  -0x70(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x70(%rsi,%rdi,1)
movsd  0x30(%r8,%rax,8),%xmm0
mulsd  -0x68(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x68(%rsi,%rdi,1)
movsd  0x38(%r8,%rax,8),%xmm0
mulsd  -0x60(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x60(%rsi,%rdi,1)
movsd  0x40(%r8,%rax,8),%xmm0
mulsd  -0x58(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x58(%rsi,%rdi,1)
movsd  0x48(%r8,%rax,8),%xmm0
mulsd  -0x50(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x50(%rsi,%rdi,1)
movsd  0x50(%r8,%rax,8),%xmm0
mulsd  -0x48(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x48(%rsi,%rdi,1)
movsd  0x58(%r8,%rax,8),%xmm0
mulsd  -0x40(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x40(%rsi,%rdi,1)
movsd  0x60(%r8,%rax,8),%xmm0
mulsd  -0x38(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x38(%rsi,%rdi,1)
movsd  0x68(%r8,%rax,8),%xmm0
mulsd  -0x30(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x30(%rsi,%rdi,1)
movsd  0x70(%r8,%rax,8),%xmm0
mulsd  -0x28(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x28(%rsi,%rdi,1)
movsd  0x78(%r8,%rax,8),%xmm0
mulsd  -0x20(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x20(%rsi,%rdi,1)
movsd  0x80(%r8,%rax,8),%xmm0
mulsd  -0x18(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x18(%rsi,%rdi,1)
movsd  0x88(%r8,%rax,8),%xmm0
mulsd  -0x10(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x10(%rsi,%rdi,1)
movsd  0x90(%r8,%rax,8),%xmm0
mulsd  -0x8(%rcx,%rdi,1),%xmm0
movsd  %xmm0,-0x8(%rsi,%rdi,1)
movsd  0x98(%r8,%rax,8),%xmm0
mulsd  (%rcx,%rdi,1),%xmm0
movsd  %xmm0,(%rsi,%rdi,1)
add    $0x1,%rdx
add    $0xa0,%rdi
cmp    %rdx,%r10
jne    1520 <sumGTRCATPROTMULT+0x410>
pop    %rbx
pop    %r14
ret
xor    %edi,%edi
xor    %eax,%eax
pop    %rbx
pop    %r14
jmp    1030 <assert@plt>

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

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