#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ assert(int /*<<< orphan*/);
void sumGAMMAPROT_LG4(int tipCase, double *sumtable, double *x1, double *x2,
                      double *tipVector[4], unsigned char *tipX1,
                      unsigned char *tipX2, int n) {
  int i, l, k;
  double *left, *right, *sum;
  switch (tipCase) {
  case 0:
    for (i = 0; i < n; i++) {
      for (l = 0; l < 4; l++) {
        left = &(tipVector[l][20 * tipX1[i]]);
        right = &(tipVector[l][20 * tipX2[i]]);
        sum = &sumtable[i * 80 + l * 20];
        for (k = 0; k < 20; k++)
          sum[k] = left[k] * right[k];
      }
    }
    break;
  case 1:
    for (i = 0; i < n; i++) {
      for (l = 0; l < 4; l++) {
        left = &(tipVector[l][20 * tipX1[i]]);
        right = &(x2[80 * i + l * 20]);
        sum = &sumtable[i * 80 + l * 20];
        for (k = 0; k < 20; k++)
          sum[k] = left[k] * right[k];
      }
    }
    break;
  case 2:
    for (i = 0; i < n; i++) {
      for (l = 0; l < 4; l++) {
        left = &(x1[80 * i + l * 20]);
        right = &(x2[80 * i + l * 20]);
        sum = &(sumtable[i * 80 + l * 20]);
        for (k = 0; k < 20; k++)
          sum[k] = left[k] * right[k];
      }
    }
    break;
  default:
    assert(0);
  }
}


x86 assembly (clang, -O0):
<sumGAMMAPROT_LG4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
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,-0x5c(%rbp)
test   %eax,%eax
je     116b <sumGAMMAPROT_LG4+0x5b>
jmp    1149 <sumGAMMAPROT_LG4+0x39>
mov    -0x5c(%rbp),%eax
sub    $0x1,%eax
je     126e <sumGAMMAPROT_LG4+0x15e>
jmp    115a <sumGAMMAPROT_LG4+0x4a>
mov    -0x5c(%rbp),%eax
sub    $0x2,%eax
je     1364 <sumGAMMAPROT_LG4+0x254>
jmp    144d <sumGAMMAPROT_LG4+0x33d>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    1269 <sumGAMMAPROT_LG4+0x159>
movl   $0x0,-0x38(%rbp)
cmpl   $0x4,-0x38(%rbp)
jge    1256 <sumGAMMAPROT_LG4+0x146>
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x30(%rbp),%rcx
movslq -0x34(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
imul   $0x14,%ecx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x10(%rbp),%rcx
movslq -0x34(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
imul   $0x14,%ecx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x10(%rbp),%rax
imul   $0x50,-0x34(%rbp),%ecx
imul   $0x14,-0x38(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x58(%rbp)
movl   $0x0,-0x3c(%rbp)
cmpl   $0x14,-0x3c(%rbp)
jge    1243 <sumGAMMAPROT_LG4+0x133>
mov    -0x48(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1204 <sumGAMMAPROT_LG4+0xf4>
jmp    1248 <sumGAMMAPROT_LG4+0x138>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1185 <sumGAMMAPROT_LG4+0x75>
jmp    125b <sumGAMMAPROT_LG4+0x14b>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1172 <sumGAMMAPROT_LG4+0x62>
jmp    1454 <sumGAMMAPROT_LG4+0x344>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    135f <sumGAMMAPROT_LG4+0x24f>
movl   $0x0,-0x38(%rbp)
cmpl   $0x4,-0x38(%rbp)
jge    134c <sumGAMMAPROT_LG4+0x23c>
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x30(%rbp),%rcx
movslq -0x34(%rbp),%rdx
movzbl (%rcx,%rdx,1),%ecx
imul   $0x14,%ecx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x20(%rbp),%rax
imul   $0x50,-0x34(%rbp),%ecx
imul   $0x14,-0x38(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x10(%rbp),%rax
imul   $0x50,-0x34(%rbp),%ecx
imul   $0x14,-0x38(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x58(%rbp)
movl   $0x0,-0x3c(%rbp)
cmpl   $0x14,-0x3c(%rbp)
jge    1339 <sumGAMMAPROT_LG4+0x229>
mov    -0x48(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    12fa <sumGAMMAPROT_LG4+0x1ea>
jmp    133e <sumGAMMAPROT_LG4+0x22e>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1288 <sumGAMMAPROT_LG4+0x178>
jmp    1351 <sumGAMMAPROT_LG4+0x241>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1275 <sumGAMMAPROT_LG4+0x165>
jmp    1454 <sumGAMMAPROT_LG4+0x344>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    1448 <sumGAMMAPROT_LG4+0x338>
movl   $0x0,-0x38(%rbp)
cmpl   $0x4,-0x38(%rbp)
jge    1435 <sumGAMMAPROT_LG4+0x325>
mov    -0x18(%rbp),%rax
imul   $0x50,-0x34(%rbp),%ecx
imul   $0x14,-0x38(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x48(%rbp)
mov    -0x20(%rbp),%rax
imul   $0x50,-0x34(%rbp),%ecx
imul   $0x14,-0x38(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x50(%rbp)
mov    -0x10(%rbp),%rax
imul   $0x50,-0x34(%rbp),%ecx
imul   $0x14,-0x38(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x58(%rbp)
movl   $0x0,-0x3c(%rbp)
cmpl   $0x14,-0x3c(%rbp)
jge    1422 <sumGAMMAPROT_LG4+0x312>
mov    -0x48(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x58(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    13e3 <sumGAMMAPROT_LG4+0x2d3>
jmp    1427 <sumGAMMAPROT_LG4+0x317>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    137e <sumGAMMAPROT_LG4+0x26e>
jmp    143a <sumGAMMAPROT_LG4+0x32a>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    136b <sumGAMMAPROT_LG4+0x25b>
jmp    1454 <sumGAMMAPROT_LG4+0x344>
xor    %edi,%edi
call   1030 <assert@plt>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sumGAMMAPROT_LG4>:
push   %r14
push   %rbx
mov    0x20(%rsp),%eax
test   %edi,%edi
je     1329 <sumGAMMAPROT_LG4+0x219>
cmp    $0x1,%edi
je     151e <sumGAMMAPROT_LG4+0x40e>
cmp    $0x2,%edi
jne    1714 <sumGAMMAPROT_LG4+0x604>
test   %eax,%eax
jle    1710 <sumGAMMAPROT_LG4+0x600>
mov    %eax,%r8d
add    $0x98,%rsi
add    $0x98,%rcx
add    $0x98,%rdx
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  -0x98(%rdx,%rax,1),%xmm0
ff ff
mulsd  -0x98(%rcx,%rax,1),%xmm0
ff ff
movsd  %xmm0,-0x98(%rsi,%rax,1)
ff ff
movsd  -0x90(%rdx,%rax,1),%xmm0
ff ff
mulsd  -0x90(%rcx,%rax,1),%xmm0
ff ff
movsd  %xmm0,-0x90(%rsi,%rax,1)
ff ff
movsd  -0x88(%rdx,%rax,1),%xmm0
ff ff
mulsd  -0x88(%rcx,%rax,1),%xmm0
ff ff
movsd  %xmm0,-0x88(%rsi,%rax,1)
ff ff
movsd  -0x80(%rdx,%rax,1),%xmm0
mulsd  -0x80(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x80(%rsi,%rax,1)
movsd  -0x78(%rdx,%rax,1),%xmm0
mulsd  -0x78(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x78(%rsi,%rax,1)
movsd  -0x70(%rdx,%rax,1),%xmm0
mulsd  -0x70(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x70(%rsi,%rax,1)
movsd  -0x68(%rdx,%rax,1),%xmm0
mulsd  -0x68(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x68(%rsi,%rax,1)
movsd  -0x60(%rdx,%rax,1),%xmm0
mulsd  -0x60(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x60(%rsi,%rax,1)
movsd  -0x58(%rdx,%rax,1),%xmm0
mulsd  -0x58(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x58(%rsi,%rax,1)
movsd  -0x50(%rdx,%rax,1),%xmm0
mulsd  -0x50(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x50(%rsi,%rax,1)
movsd  -0x48(%rdx,%rax,1),%xmm0
mulsd  -0x48(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x48(%rsi,%rax,1)
movsd  -0x40(%rdx,%rax,1),%xmm0
mulsd  -0x40(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x40(%rsi,%rax,1)
movsd  -0x38(%rdx,%rax,1),%xmm0
mulsd  -0x38(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x38(%rsi,%rax,1)
movsd  -0x30(%rdx,%rax,1),%xmm0
mulsd  -0x30(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x30(%rsi,%rax,1)
movsd  -0x28(%rdx,%rax,1),%xmm0
mulsd  -0x28(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x28(%rsi,%rax,1)
movsd  -0x20(%rdx,%rax,1),%xmm0
mulsd  -0x20(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x20(%rsi,%rax,1)
movsd  -0x18(%rdx,%rax,1),%xmm0
mulsd  -0x18(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x18(%rsi,%rax,1)
movsd  -0x10(%rdx,%rax,1),%xmm0
mulsd  -0x10(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x10(%rsi,%rax,1)
movsd  -0x8(%rdx,%rax,1),%xmm0
mulsd  -0x8(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x8(%rsi,%rax,1)
movsd  (%rdx,%rax,1),%xmm0
mulsd  (%rcx,%rax,1),%xmm0
movsd  %xmm0,(%rsi,%rax,1)
add    $0xa0,%rax
cmp    $0x280,%rax
jne    1170 <sumGAMMAPROT_LG4+0x60>
add    $0x1,%rdi
add    $0x280,%rsi
add    $0x280,%rcx
add    $0x280,%rdx
cmp    %r8,%rdi
jne    1160 <sumGAMMAPROT_LG4+0x50>
jmp    1710 <sumGAMMAPROT_LG4+0x600>
test   %eax,%eax
jle    1710 <sumGAMMAPROT_LG4+0x600>
mov    0x18(%rsp),%r11
mov    %eax,%r10d
add    $0x98,%rsi
xor    %r14d,%r14d
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %rsi,%rdi
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nop
mov    (%r8,%rcx,8),%rax
movzbl (%r9,%r14,1),%edx
lea    (%rdx,%rdx,4),%rbx
shl    $0x5,%rbx
movzbl (%r11,%r14,1),%edx
lea    (%rdx,%rdx,4),%rdx
shl    $0x5,%rdx
movsd  (%rax,%rbx,1),%xmm0
mulsd  (%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x98(%rdi)
ff
movsd  0x8(%rax,%rbx,1),%xmm0
mulsd  0x8(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x90(%rdi)
ff
movsd  0x10(%rax,%rbx,1),%xmm0
mulsd  0x10(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x88(%rdi)
ff
movsd  0x18(%rax,%rbx,1),%xmm0
mulsd  0x18(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x80(%rdi)
movsd  0x20(%rax,%rbx,1),%xmm0
mulsd  0x20(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x78(%rdi)
movsd  0x28(%rax,%rbx,1),%xmm0
mulsd  0x28(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x70(%rdi)
movsd  0x30(%rax,%rbx,1),%xmm0
mulsd  0x30(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x68(%rdi)
movsd  0x38(%rax,%rbx,1),%xmm0
mulsd  0x38(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x60(%rdi)
movsd  0x40(%rax,%rbx,1),%xmm0
mulsd  0x40(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x58(%rdi)
movsd  0x48(%rax,%rbx,1),%xmm0
mulsd  0x48(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x50(%rdi)
movsd  0x50(%rax,%rbx,1),%xmm0
mulsd  0x50(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x48(%rdi)
movsd  0x58(%rax,%rbx,1),%xmm0
mulsd  0x58(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x40(%rdi)
movsd  0x60(%rax,%rbx,1),%xmm0
mulsd  0x60(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x38(%rdi)
movsd  0x68(%rax,%rbx,1),%xmm0
mulsd  0x68(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x30(%rdi)
movsd  0x70(%rax,%rbx,1),%xmm0
mulsd  0x70(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x28(%rdi)
movsd  0x78(%rax,%rbx,1),%xmm0
mulsd  0x78(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x20(%rdi)
movsd  0x80(%rax,%rbx,1),%xmm0
mulsd  0x80(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x18(%rdi)
movsd  0x88(%rax,%rbx,1),%xmm0
mulsd  0x88(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x10(%rdi)
movsd  0x90(%rax,%rbx,1),%xmm0
mulsd  0x90(%rax,%rdx,1),%xmm0
movsd  %xmm0,-0x8(%rdi)
movsd  0x98(%rax,%rbx,1),%xmm0
mulsd  0x98(%rax,%rdx,1),%xmm0
movsd  %xmm0,(%rdi)
add    $0x1,%rcx
add    $0xa0,%rdi
cmp    $0x4,%rcx
jne    1360 <sumGAMMAPROT_LG4+0x250>
add    $0x1,%r14
add    $0x280,%rsi
cmp    %r10,%r14
jne    1350 <sumGAMMAPROT_LG4+0x240>
jmp    1710 <sumGAMMAPROT_LG4+0x600>
test   %eax,%eax
jle    1710 <sumGAMMAPROT_LG4+0x600>
mov    %eax,%r10d
add    $0x98,%rsi
add    $0x98,%rcx
xor    %r11d,%r11d
nopw   0x0(%rax,%rax,1)
mov    %r8,%rdi
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nop
mov    (%rdi),%rbx
movzbl (%r9,%r11,1),%edx
lea    (%rdx,%rdx,4),%rdx
shl    $0x5,%rdx
movsd  (%rbx,%rdx,1),%xmm0
mulsd  -0x98(%rcx,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0x98(%rsi,%rax,8)
ff ff
movsd  0x8(%rbx,%rdx,1),%xmm0
mulsd  -0x90(%rcx,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0x90(%rsi,%rax,8)
ff ff
movsd  0x10(%rbx,%rdx,1),%xmm0
mulsd  -0x88(%rcx,%rax,8),%xmm0
ff ff
movsd  %xmm0,-0x88(%rsi,%rax,8)
ff ff
movsd  0x18(%rbx,%rdx,1),%xmm0
mulsd  -0x80(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x80(%rsi,%rax,8)
movsd  0x20(%rbx,%rdx,1),%xmm0
mulsd  -0x78(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x78(%rsi,%rax,8)
movsd  0x28(%rbx,%rdx,1),%xmm0
mulsd  -0x70(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x70(%rsi,%rax,8)
movsd  0x30(%rbx,%rdx,1),%xmm0
mulsd  -0x68(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x68(%rsi,%rax,8)
movsd  0x38(%rbx,%rdx,1),%xmm0
mulsd  -0x60(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x60(%rsi,%rax,8)
movsd  0x40(%rbx,%rdx,1),%xmm0
mulsd  -0x58(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x58(%rsi,%rax,8)
movsd  0x48(%rbx,%rdx,1),%xmm0
mulsd  -0x50(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x50(%rsi,%rax,8)
movsd  0x50(%rbx,%rdx,1),%xmm0
mulsd  -0x48(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x48(%rsi,%rax,8)
movsd  0x58(%rbx,%rdx,1),%xmm0
mulsd  -0x40(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x40(%rsi,%rax,8)
movsd  0x60(%rbx,%rdx,1),%xmm0
mulsd  -0x38(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x38(%rsi,%rax,8)
movsd  0x68(%rbx,%rdx,1),%xmm0
mulsd  -0x30(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x30(%rsi,%rax,8)
movsd  0x70(%rbx,%rdx,1),%xmm0
mulsd  -0x28(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x28(%rsi,%rax,8)
movsd  0x78(%rbx,%rdx,1),%xmm0
mulsd  -0x20(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x20(%rsi,%rax,8)
movsd  0x80(%rbx,%rdx,1),%xmm0
mulsd  -0x18(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x18(%rsi,%rax,8)
movsd  0x88(%rbx,%rdx,1),%xmm0
mulsd  -0x10(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x10(%rsi,%rax,8)
movsd  0x90(%rbx,%rdx,1),%xmm0
mulsd  -0x8(%rcx,%rax,8),%xmm0
movsd  %xmm0,-0x8(%rsi,%rax,8)
movsd  0x98(%rbx,%rdx,1),%xmm0
mulsd  (%rcx,%rax,8),%xmm0
movsd  %xmm0,(%rsi,%rax,8)
add    $0x14,%rax
add    $0x8,%rdi
cmp    $0x50,%rax
jne    1550 <sumGAMMAPROT_LG4+0x440>
add    $0x1,%r11
add    $0x280,%rsi
add    $0x280,%rcx
cmp    %r10,%r11
jne    1540 <sumGAMMAPROT_LG4+0x430>
pop    %rbx
pop    %r14
ret
xor    %edi,%edi
pop    %rbx
pop    %r14
jmp    1030 <assert@plt>

LLVM IR (-O0):
define void @sumGAMMAPROT_LG4(i32 %0, double* %1, double* %2, double* %3, double** %4, i8* %5, i8* %6, i32 %7) {
%9 = alloca i32
%10 = alloca double*
%11 = alloca double*
%12 = alloca double*
%13 = alloca double**
%14 = alloca i8*
%15 = alloca i8*
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca double*
%21 = alloca double*
%22 = alloca double*
store i32 %0, i32* %9
store double* %1, double** %10
store double* %2, double** %11
store double* %3, double** %12
store double** %4, double*** %13
store i8* %5, i8** %14
store i8* %6, i8** %15
store i32 %7, i32* %16
%23 = load i32, i32* %9
switch i32 %23, label %237 [
i32 0, label %24
i32 1, label %101
i32 2, label %172
]
24: ; preds = %8
store i32 0, i32* %17
br label %25
25: ; preds = %97, %24
%26 = load i32, i32* %17
%27 = load i32, i32* %16
%28 = icmp slt i32 %26, %27
br i1 %28, label %29, label %100
29: ; preds = %25
store i32 0, i32* %18
br label %30
30: ; preds = %93, %29
%31 = load i32, i32* %18
%32 = icmp slt i32 %31, 4
br i1 %32, label %33, label %96
33: ; preds = %30
%34 = load double**, double*** %13
%35 = load i32, i32* %18
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds double*, double** %34, i64 %36
%38 = load double*, double** %37
%39 = load i8*, i8** %14
%40 = load i32, i32* %17
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %39, i64 %41
%43 = load i8, i8* %42
%44 = zext i8 %43 to i32
%45 = mul nsw i32 20, %44
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds double, double* %38, i64 %46
store double* %47, double** %20
%48 = load double**, double*** %13
%49 = load i32, i32* %18
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds double*, double** %48, i64 %50
%52 = load double*, double** %51
%53 = load i8*, i8** %15
%54 = load i32, i32* %17
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i8, i8* %53, i64 %55
%57 = load i8, i8* %56
%58 = zext i8 %57 to i32
%59 = mul nsw i32 20, %58
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds double, double* %52, i64 %60
store double* %61, double** %21
%62 = load double*, double** %10
%63 = load i32, i32* %17
%64 = mul nsw i32 %63, 80
%65 = load i32, i32* %18
%66 = mul nsw i32 %65, 20
%67 = add nsw i32 %64, %66
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds double, double* %62, i64 %68
store double* %69, double** %22
store i32 0, i32* %19
br label %70
70: ; preds = %89, %33
%71 = load i32, i32* %19
%72 = icmp slt i32 %71, 20
br i1 %72, label %73, label %92
73: ; preds = %70
%74 = load double*, double** %20
%75 = load i32, i32* %19
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds double, double* %74, i64 %76
%78 = load double, double* %77
%79 = load double*, double** %21
%80 = load i32, i32* %19
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds double, double* %79, i64 %81
%83 = load double, double* %82
%84 = fmul double %78, %83
%85 = load double*, double** %22
%86 = load i32, i32* %19
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds double, double* %85, i64 %87
store double %84, double* %88
br label %89
89: ; preds = %73
%90 = load i32, i32* %19
%91 = add nsw i32 %90, 1
store i32 %91, i32* %19
br label %70
92: ; preds = %70
br label %93
93: ; preds = %92
%94 = load i32, i32* %18
%95 = add nsw i32 %94, 1
store i32 %95, i32* %18
br label %30
96: ; preds = %30
br label %97
97: ; preds = %96
%98 = load i32, i32* %17
%99 = add nsw i32 %98, 1
store i32 %99, i32* %17
br label %25
100: ; preds = %25
br label %239
101: ; preds = %8
store i32 0, i32* %17
br label %102
102: ; preds = %168, %101
%103 = load i32, i32* %17
%104 = load i32, i32* %16
%105 = icmp slt i32 %103, %104
br i1 %105, label %106, label %171
106: ; preds = %102
store i32 0, i32* %18
br label %107
107: ; preds = %164, %106
%108 = load i32, i32* %18
%109 = icmp slt i32 %108, 4
br i1 %109, label %110, label %167
110: ; preds = %107
%111 = load double**, double*** %13
%112 = load i32, i32* %18
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds double*, double** %111, i64 %113
%115 = load double*, double** %114
%116 = load i8*, i8** %14
%117 = load i32, i32* %17
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds i8, i8* %116, i64 %118
%120 = load i8, i8* %119
%121 = zext i8 %120 to i32
%122 = mul nsw i32 20, %121
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds double, double* %115, i64 %123
store double* %124, double** %20
%125 = load double*, double** %12
%126 = load i32, i32* %17
%127 = mul nsw i32 80, %126
%128 = load i32, i32* %18
%129 = mul nsw i32 %128, 20
%130 = add nsw i32 %127, %129
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds double, double* %125, i64 %131
store double* %132, double** %21
%133 = load double*, double** %10
%134 = load i32, i32* %17
%135 = mul nsw i32 %134, 80
%136 = load i32, i32* %18
%137 = mul nsw i32 %136, 20
%138 = add nsw i32 %135, %137
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds double, double* %133, i64 %139
store double* %140, double** %22
store i32 0, i32* %19
br label %141
141: ; preds = %160, %110
%142 = load i32, i32* %19
%143 = icmp slt i32 %142, 20
br i1 %143, label %144, label %163
144: ; preds = %141
%145 = load double*, double** %20
%146 = load i32, i32* %19
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds double, double* %145, i64 %147
%149 = load double, double* %148
%150 = load double*, double** %21
%151 = load i32, i32* %19
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds double, double* %150, i64 %152
%154 = load double, double* %153
%155 = fmul double %149, %154
%156 = load double*, double** %22
%157 = load i32, i32* %19
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds double, double* %156, i64 %158
store double %155, double* %159
br label %160
160: ; preds = %144
%161 = load i32, i32* %19
%162 = add nsw i32 %161, 1
store i32 %162, i32* %19
br label %141
163: ; preds = %141
br label %164
164: ; preds = %163
%165 = load i32, i32* %18
%166 = add nsw i32 %165, 1
store i32 %166, i32* %18
br label %107
167: ; preds = %107
br label %168
168: ; preds = %167
%169 = load i32, i32* %17
%170 = add nsw i32 %169, 1
store i32 %170, i32* %17
br label %102
171: ; preds = %102
br label %239
172: ; preds = %8
store i32 0, i32* %17
br label %173
173: ; preds = %233, %172
%174 = load i32, i32* %17
%175 = load i32, i32* %16
%176 = icmp slt i32 %174, %175
br i1 %176, label %177, label %236
177: ; preds = %173
store i32 0, i32* %18
br label %178
178: ; preds = %229, %177
%179 = load i32, i32* %18
%180 = icmp slt i32 %179, 4
br i1 %180, label %181, label %232
181: ; preds = %178
%182 = load double*, double** %11
%183 = load i32, i32* %17
%184 = mul nsw i32 80, %183
%185 = load i32, i32* %18
%186 = mul nsw i32 %185, 20
%187 = add nsw i32 %184, %186
%188 = sext i32 %187 to i64
%189 = getelementptr inbounds double, double* %182, i64 %188
store double* %189, double** %20
%190 = load double*, double** %12
%191 = load i32, i32* %17
%192 = mul nsw i32 80, %191
%193 = load i32, i32* %18
%194 = mul nsw i32 %193, 20
%195 = add nsw i32 %192, %194
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds double, double* %190, i64 %196
store double* %197, double** %21
%198 = load double*, double** %10
%199 = load i32, i32* %17
%200 = mul nsw i32 %199, 80
%201 = load i32, i32* %18
%202 = mul nsw i32 %201, 20
%203 = add nsw i32 %200, %202
%204 = sext i32 %203 to i64
%205 = getelementptr inbounds double, double* %198, i64 %204
store double* %205, double** %22
store i32 0, i32* %19
br label %206
206: ; preds = %225, %181
%207 = load i32, i32* %19
%208 = icmp slt i32 %207, 20
br i1 %208, label %209, label %228
209: ; preds = %206
%210 = load double*, double** %20
%211 = load i32, i32* %19
%212 = sext i32 %211 to i64
%213 = getelementptr inbounds double, double* %210, i64 %212
%214 = load double, double* %213
%215 = load double*, double** %21
%216 = load i32, i32* %19
%217 = sext i32 %216 to i64
%218 = getelementptr inbounds double, double* %215, i64 %217
%219 = load double, double* %218
%220 = fmul double %214, %219
%221 = load double*, double** %22
%222 = load i32, i32* %19
%223 = sext i32 %222 to i64
%224 = getelementptr inbounds double, double* %221, i64 %223
store double %220, double* %224
br label %225
225: ; preds = %209
%226 = load i32, i32* %19
%227 = add nsw i32 %226, 1
store i32 %227, i32* %19
br label %206
228: ; preds = %206
br label %229
229: ; preds = %228
%230 = load i32, i32* %18
%231 = add nsw i32 %230, 1
store i32 %231, i32* %18
br label %178
232: ; preds = %178
br label %233
233: ; preds = %232
%234 = load i32, i32* %17
%235 = add nsw i32 %234, 1
store i32 %235, i32* %17
br label %173
236: ; preds = %173
br label %239
237: ; preds = %8
%238 = call i32 @assert(i32 0)
br label %239
239: ; preds = %237, %236, %171, %100
ret void
}

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