#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(int tipCase, double *sumtable, double *x1, double *x2,
                  double *tipVector, 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++) {
      left = &(tipVector[20 * tipX1[i]]);
      right = &(tipVector[20 * tipX2[i]]);
      for (l = 0; l < 4; l++) {
        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++) {
      left = &(tipVector[20 * tipX1[i]]);
      for (l = 0; l < 4; l++) {
        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>:
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+0x5b>
jmp    1149 <sumGAMMAPROT+0x39>
mov    -0x5c(%rbp),%eax
sub    $0x1,%eax
je     125e <sumGAMMAPROT+0x14e>
jmp    115a <sumGAMMAPROT+0x4a>
mov    -0x5c(%rbp),%eax
sub    $0x2,%eax
je     134c <sumGAMMAPROT+0x23c>
jmp    1435 <sumGAMMAPROT+0x325>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    1259 <sumGAMMAPROT+0x149>
mov    -0x28(%rbp),%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
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)
movl   $0x0,-0x38(%rbp)
cmpl   $0x4,-0x38(%rbp)
jge    1246 <sumGAMMAPROT+0x136>
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    1233 <sumGAMMAPROT+0x123>
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    11f4 <sumGAMMAPROT+0xe4>
jmp    1238 <sumGAMMAPROT+0x128>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    11c7 <sumGAMMAPROT+0xb7>
jmp    124b <sumGAMMAPROT+0x13b>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1172 <sumGAMMAPROT+0x62>
jmp    143c <sumGAMMAPROT+0x32c>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    1347 <sumGAMMAPROT+0x237>
mov    -0x28(%rbp),%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)
movl   $0x0,-0x38(%rbp)
cmpl   $0x4,-0x38(%rbp)
jge    1334 <sumGAMMAPROT+0x224>
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    1321 <sumGAMMAPROT+0x211>
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    12e2 <sumGAMMAPROT+0x1d2>
jmp    1326 <sumGAMMAPROT+0x216>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1299 <sumGAMMAPROT+0x189>
jmp    1339 <sumGAMMAPROT+0x229>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1265 <sumGAMMAPROT+0x155>
jmp    143c <sumGAMMAPROT+0x32c>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    1430 <sumGAMMAPROT+0x320>
movl   $0x0,-0x38(%rbp)
cmpl   $0x4,-0x38(%rbp)
jge    141d <sumGAMMAPROT+0x30d>
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    140a <sumGAMMAPROT+0x2fa>
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    13cb <sumGAMMAPROT+0x2bb>
jmp    140f <sumGAMMAPROT+0x2ff>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1366 <sumGAMMAPROT+0x256>
jmp    1422 <sumGAMMAPROT+0x312>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1353 <sumGAMMAPROT+0x243>
jmp    143c <sumGAMMAPROT+0x32c>
xor    %edi,%edi
call   1030 <assert@plt>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sumGAMMAPROT>:
mov    0x10(%rsp),%eax
test   %edi,%edi
je     1319 <sumGAMMAPROT+0x209>
cmp    $0x1,%edi
je     14eb <sumGAMMAPROT+0x3db>
cmp    $0x2,%edi
jne    16cd <sumGAMMAPROT+0x5bd>
test   %eax,%eax
jle    16cc <sumGAMMAPROT+0x5bc>
mov    %eax,%r8d
add    $0x98,%rsi
add    $0x98,%rcx
add    $0x98,%rdx
xor    %edi,%edi
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    1160 <sumGAMMAPROT+0x50>
add    $0x1,%rdi
add    $0x280,%rsi
add    $0x280,%rcx
add    $0x280,%rdx
cmp    %r8,%rdi
jne    1150 <sumGAMMAPROT+0x40>
jmp    16cc <sumGAMMAPROT+0x5bc>
test   %eax,%eax
jle    16cc <sumGAMMAPROT+0x5bc>
mov    0x8(%rsp),%r10
mov    %eax,%r11d
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
movzbl (%r9,%rdx,1),%eax
lea    (%rax,%rax,4),%rdi
shl    $0x5,%rdi
add    %r8,%rdi
movzbl (%r10,%rdx,1),%eax
lea    (%rax,%rax,4),%rax
shl    $0x5,%rax
add    %r8,%rax
mov    $0x98,%ecx
cs nopw 0x0(%rax,%rax,1)
nop
movsd  (%rdi),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,-0x98(%rsi,%rcx,1)
ff ff
movsd  0x8(%rdi),%xmm0
mulsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x90(%rsi,%rcx,1)
ff ff
movsd  0x10(%rdi),%xmm0
mulsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x88(%rsi,%rcx,1)
ff ff
movsd  0x18(%rdi),%xmm0
mulsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x80(%rsi,%rcx,1)
movsd  0x20(%rdi),%xmm0
mulsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x78(%rsi,%rcx,1)
movsd  0x28(%rdi),%xmm0
mulsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x70(%rsi,%rcx,1)
movsd  0x30(%rdi),%xmm0
mulsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x68(%rsi,%rcx,1)
movsd  0x38(%rdi),%xmm0
mulsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x60(%rsi,%rcx,1)
movsd  0x40(%rdi),%xmm0
mulsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x58(%rsi,%rcx,1)
movsd  0x48(%rdi),%xmm0
mulsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x50(%rsi,%rcx,1)
movsd  0x50(%rdi),%xmm0
mulsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x48(%rsi,%rcx,1)
movsd  0x58(%rdi),%xmm0
mulsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x40(%rsi,%rcx,1)
movsd  0x60(%rdi),%xmm0
mulsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x38(%rsi,%rcx,1)
movsd  0x68(%rdi),%xmm0
mulsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x30(%rsi,%rcx,1)
movsd  0x70(%rdi),%xmm0
mulsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x28(%rsi,%rcx,1)
movsd  0x78(%rdi),%xmm0
mulsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x20(%rsi,%rcx,1)
movsd  0x80(%rdi),%xmm0
mulsd  0x80(%rax),%xmm0
movsd  %xmm0,-0x18(%rsi,%rcx,1)
movsd  0x88(%rdi),%xmm0
mulsd  0x88(%rax),%xmm0
movsd  %xmm0,-0x10(%rsi,%rcx,1)
movsd  0x90(%rdi),%xmm0
mulsd  0x90(%rax),%xmm0
movsd  %xmm0,-0x8(%rsi,%rcx,1)
movsd  0x98(%rdi),%xmm0
mulsd  0x98(%rax),%xmm0
movsd  %xmm0,(%rsi,%rcx,1)
add    $0xa0,%rcx
cmp    $0x318,%rcx
jne    1360 <sumGAMMAPROT+0x250>
add    $0x1,%rdx
add    $0x280,%rsi
cmp    %r11,%rdx
jne    1330 <sumGAMMAPROT+0x220>
jmp    16cc <sumGAMMAPROT+0x5bc>
test   %eax,%eax
jle    16cc <sumGAMMAPROT+0x5bc>
mov    %eax,%r10d
add    $0x98,%rsi
add    $0x98,%rcx
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
movzbl (%r9,%rdx,1),%eax
lea    (%rax,%rax,4),%rdi
shl    $0x5,%rdi
add    %r8,%rdi
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%rdi),%xmm0
mulsd  -0x98(%rcx,%rax,1),%xmm0
ff ff
movsd  %xmm0,-0x98(%rsi,%rax,1)
ff ff
movsd  0x8(%rdi),%xmm0
mulsd  -0x90(%rcx,%rax,1),%xmm0
ff ff
movsd  %xmm0,-0x90(%rsi,%rax,1)
ff ff
movsd  0x10(%rdi),%xmm0
mulsd  -0x88(%rcx,%rax,1),%xmm0
ff ff
movsd  %xmm0,-0x88(%rsi,%rax,1)
ff ff
movsd  0x18(%rdi),%xmm0
mulsd  -0x80(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x80(%rsi,%rax,1)
movsd  0x20(%rdi),%xmm0
mulsd  -0x78(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x78(%rsi,%rax,1)
movsd  0x28(%rdi),%xmm0
mulsd  -0x70(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x70(%rsi,%rax,1)
movsd  0x30(%rdi),%xmm0
mulsd  -0x68(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x68(%rsi,%rax,1)
movsd  0x38(%rdi),%xmm0
mulsd  -0x60(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x60(%rsi,%rax,1)
movsd  0x40(%rdi),%xmm0
mulsd  -0x58(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x58(%rsi,%rax,1)
movsd  0x48(%rdi),%xmm0
mulsd  -0x50(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x50(%rsi,%rax,1)
movsd  0x50(%rdi),%xmm0
mulsd  -0x48(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x48(%rsi,%rax,1)
movsd  0x58(%rdi),%xmm0
mulsd  -0x40(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x40(%rsi,%rax,1)
movsd  0x60(%rdi),%xmm0
mulsd  -0x38(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x38(%rsi,%rax,1)
movsd  0x68(%rdi),%xmm0
mulsd  -0x30(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x30(%rsi,%rax,1)
movsd  0x70(%rdi),%xmm0
mulsd  -0x28(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x28(%rsi,%rax,1)
movsd  0x78(%rdi),%xmm0
mulsd  -0x20(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x20(%rsi,%rax,1)
movsd  0x80(%rdi),%xmm0
mulsd  -0x18(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x18(%rsi,%rax,1)
movsd  0x88(%rdi),%xmm0
mulsd  -0x10(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x10(%rsi,%rax,1)
movsd  0x90(%rdi),%xmm0
mulsd  -0x8(%rcx,%rax,1),%xmm0
movsd  %xmm0,-0x8(%rsi,%rax,1)
movsd  0x98(%rdi),%xmm0
mulsd  (%rcx,%rax,1),%xmm0
movsd  %xmm0,(%rsi,%rax,1)
add    $0xa0,%rax
cmp    $0x280,%rax
jne    1530 <sumGAMMAPROT+0x420>
add    $0x1,%rdx
add    $0x280,%rsi
add    $0x280,%rcx
cmp    %r10,%rdx
jne    1510 <sumGAMMAPROT+0x400>
ret
xor    %edi,%edi
jmp    1030 <assert@plt>

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

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