#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 sumGTRCATPROT(int tipCase, double *sumtable, double *x1, double *x2,
                   double *tipVector, unsigned char *tipX1,
                   unsigned char *tipX2, int n) {
  int i, l;
  double *sum, *left, *right;
  switch (tipCase) {
  case 0:
    for (i = 0; i < n; i++) {
      left = &(tipVector[20 * tipX1[i]]);
      right = &(tipVector[20 * tipX2[i]]);
      sum = &sumtable[20 * i];
      for (l = 0; l < 20; l++)
        sum[l] = left[l] * right[l];
    }
    break;
  case 1:
    for (i = 0; i < n; i++) {
      left = &(tipVector[20 * tipX1[i]]);
      right = &x2[20 * i];
      sum = &sumtable[20 * i];
      for (l = 0; l < 20; l++)
        sum[l] = left[l] * right[l];
    }
    break;
  case 2:
    for (i = 0; i < n; i++) {
      left = &x1[20 * i];
      right = &x2[20 * i];
      sum = &sumtable[20 * i];
      for (l = 0; l < 20; l++)
        sum[l] = left[l] * right[l];
    }
    break;
  default:
    assert(0);
  }
}


x86 assembly (clang, -O0):
<sumGTRCATPROT>:
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,-0x54(%rbp)
test   %eax,%eax
je     116b <sumGTRCATPROT+0x5b>
jmp    1149 <sumGTRCATPROT+0x39>
mov    -0x54(%rbp),%eax
sub    $0x1,%eax
je     1234 <sumGTRCATPROT+0x124>
jmp    115a <sumGTRCATPROT+0x4a>
mov    -0x54(%rbp),%eax
sub    $0x2,%eax
je     12f2 <sumGTRCATPROT+0x1e2>
jmp    13a5 <sumGTRCATPROT+0x295>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    122f <sumGTRCATPROT+0x11f>
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)
mov    -0x10(%rbp),%rax
imul   $0x14,-0x34(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
movl   $0x0,-0x38(%rbp)
cmpl   $0x14,-0x38(%rbp)
jge    121c <sumGTRCATPROT+0x10c>
mov    -0x48(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
movslq -0x38(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    11dd <sumGTRCATPROT+0xcd>
jmp    1221 <sumGTRCATPROT+0x111>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1172 <sumGTRCATPROT+0x62>
jmp    13ac <sumGTRCATPROT+0x29c>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    12ed <sumGTRCATPROT+0x1dd>
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    -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)
movl   $0x0,-0x38(%rbp)
cmpl   $0x14,-0x38(%rbp)
jge    12da <sumGTRCATPROT+0x1ca>
mov    -0x48(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
movslq -0x38(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    129b <sumGTRCATPROT+0x18b>
jmp    12df <sumGTRCATPROT+0x1cf>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    123b <sumGTRCATPROT+0x12b>
jmp    13ac <sumGTRCATPROT+0x29c>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    13a0 <sumGTRCATPROT+0x290>
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)
movl   $0x0,-0x38(%rbp)
cmpl   $0x14,-0x38(%rbp)
jge    138d <sumGTRCATPROT+0x27d>
mov    -0x48(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
movslq -0x38(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    134e <sumGTRCATPROT+0x23e>
jmp    1392 <sumGTRCATPROT+0x282>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    12f9 <sumGTRCATPROT+0x1e9>
jmp    13ac <sumGTRCATPROT+0x29c>
xor    %edi,%edi
call   1030 <assert@plt>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<sumGTRCATPROT>:
mov    0x10(%rsp),%eax
test   %edi,%edi
je     12f5 <sumGTRCATPROT+0x1e5>
cmp    $0x1,%edi
je     14dd <sumGTRCATPROT+0x3cd>
cmp    $0x2,%edi
jne    16b8 <sumGTRCATPROT+0x5a8>
test   %eax,%eax
jle    16b7 <sumGTRCATPROT+0x5a7>
mov    %eax,%eax
add    $0x98,%rsi
add    $0x98,%rcx
add    $0x98,%rdx
shl    $0x5,%rax
lea    (%rax,%rax,4),%rax
xor    %edi,%edi
nopw   0x0(%rax,%rax,1)
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
cmp    %rdi,%rax
jne    1160 <sumGTRCATPROT+0x50>
jmp    16b7 <sumGTRCATPROT+0x5a7>
test   %eax,%eax
jle    16b7 <sumGTRCATPROT+0x5a7>
mov    0x8(%rsp),%r10
mov    %eax,%ecx
add    $0x98,%rsi
xor    %edx,%edx
nopl   (%rax)
movzbl (%r9,%rdx,1),%eax
lea    (%rax,%rax,4),%rdi
shl    $0x5,%rdi
movzbl (%r10,%rdx,1),%eax
lea    (%rax,%rax,4),%rax
shl    $0x5,%rax
movsd  (%r8,%rdi,1),%xmm0
mulsd  (%r8,%rax,1),%xmm0
movsd  %xmm0,-0x98(%rsi)
ff
movsd  0x8(%r8,%rdi,1),%xmm0
mulsd  0x8(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x90(%rsi)
ff
movsd  0x10(%r8,%rdi,1),%xmm0
mulsd  0x10(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x88(%rsi)
ff
movsd  0x18(%r8,%rdi,1),%xmm0
mulsd  0x18(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x80(%rsi)
movsd  0x20(%r8,%rdi,1),%xmm0
mulsd  0x20(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x78(%rsi)
movsd  0x28(%r8,%rdi,1),%xmm0
mulsd  0x28(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x70(%rsi)
movsd  0x30(%r8,%rdi,1),%xmm0
mulsd  0x30(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x68(%rsi)
movsd  0x38(%r8,%rdi,1),%xmm0
mulsd  0x38(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x60(%rsi)
movsd  0x40(%r8,%rdi,1),%xmm0
mulsd  0x40(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x58(%rsi)
movsd  0x48(%r8,%rdi,1),%xmm0
mulsd  0x48(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x50(%rsi)
movsd  0x50(%r8,%rdi,1),%xmm0
mulsd  0x50(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x48(%rsi)
movsd  0x58(%r8,%rdi,1),%xmm0
mulsd  0x58(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x40(%rsi)
movsd  0x60(%r8,%rdi,1),%xmm0
mulsd  0x60(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x38(%rsi)
movsd  0x68(%r8,%rdi,1),%xmm0
mulsd  0x68(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x30(%rsi)
movsd  0x70(%r8,%rdi,1),%xmm0
mulsd  0x70(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x28(%rsi)
movsd  0x78(%r8,%rdi,1),%xmm0
mulsd  0x78(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x20(%rsi)
movsd  0x80(%r8,%rdi,1),%xmm0
mulsd  0x80(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x18(%rsi)
movsd  0x88(%r8,%rdi,1),%xmm0
mulsd  0x88(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x10(%rsi)
movsd  0x90(%r8,%rdi,1),%xmm0
mulsd  0x90(%r8,%rax,1),%xmm0
movsd  %xmm0,-0x8(%rsi)
movsd  0x98(%r8,%rdi,1),%xmm0
mulsd  0x98(%r8,%rax,1),%xmm0
movsd  %xmm0,(%rsi)
add    $0x1,%rdx
add    $0xa0,%rsi
cmp    %rdx,%rcx
jne    1310 <sumGTRCATPROT+0x200>
jmp    16b7 <sumGTRCATPROT+0x5a7>
test   %eax,%eax
jle    16b7 <sumGTRCATPROT+0x5a7>
mov    %eax,%eax
add    $0x98,%rsi
add    $0x98,%rcx
shl    $0x5,%rax
lea    (%rax,%rax,4),%rax
xor    %edx,%edx
nop
movzbl (%r9),%edi
lea    (%rdi,%rdi,4),%rdi
shl    $0x5,%rdi
movsd  (%r8,%rdi,1),%xmm0
mulsd  -0x98(%rcx,%rdx,1),%xmm0
ff ff
movsd  %xmm0,-0x98(%rsi,%rdx,1)
ff ff
movsd  0x8(%r8,%rdi,1),%xmm0
mulsd  -0x90(%rcx,%rdx,1),%xmm0
ff ff
movsd  %xmm0,-0x90(%rsi,%rdx,1)
ff ff
movsd  0x10(%r8,%rdi,1),%xmm0
mulsd  -0x88(%rcx,%rdx,1),%xmm0
ff ff
movsd  %xmm0,-0x88(%rsi,%rdx,1)
ff ff
movsd  0x18(%r8,%rdi,1),%xmm0
mulsd  -0x80(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x80(%rsi,%rdx,1)
movsd  0x20(%r8,%rdi,1),%xmm0
mulsd  -0x78(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x78(%rsi,%rdx,1)
movsd  0x28(%r8,%rdi,1),%xmm0
mulsd  -0x70(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x70(%rsi,%rdx,1)
movsd  0x30(%r8,%rdi,1),%xmm0
mulsd  -0x68(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x68(%rsi,%rdx,1)
movsd  0x38(%r8,%rdi,1),%xmm0
mulsd  -0x60(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x60(%rsi,%rdx,1)
movsd  0x40(%r8,%rdi,1),%xmm0
mulsd  -0x58(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x58(%rsi,%rdx,1)
movsd  0x48(%r8,%rdi,1),%xmm0
mulsd  -0x50(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x50(%rsi,%rdx,1)
movsd  0x50(%r8,%rdi,1),%xmm0
mulsd  -0x48(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x48(%rsi,%rdx,1)
movsd  0x58(%r8,%rdi,1),%xmm0
mulsd  -0x40(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x40(%rsi,%rdx,1)
movsd  0x60(%r8,%rdi,1),%xmm0
mulsd  -0x38(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x38(%rsi,%rdx,1)
movsd  0x68(%r8,%rdi,1),%xmm0
mulsd  -0x30(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x30(%rsi,%rdx,1)
movsd  0x70(%r8,%rdi,1),%xmm0
mulsd  -0x28(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x28(%rsi,%rdx,1)
movsd  0x78(%r8,%rdi,1),%xmm0
mulsd  -0x20(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x20(%rsi,%rdx,1)
movsd  0x80(%r8,%rdi,1),%xmm0
mulsd  -0x18(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x18(%rsi,%rdx,1)
movsd  0x88(%r8,%rdi,1),%xmm0
mulsd  -0x10(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x10(%rsi,%rdx,1)
movsd  0x90(%r8,%rdi,1),%xmm0
mulsd  -0x8(%rcx,%rdx,1),%xmm0
movsd  %xmm0,-0x8(%rsi,%rdx,1)
movsd  0x98(%r8,%rdi,1),%xmm0
mulsd  (%rcx,%rdx,1),%xmm0
movsd  %xmm0,(%rsi,%rdx,1)
add    $0xa0,%rdx
add    $0x1,%r9
cmp    %rdx,%rax
jne    1500 <sumGTRCATPROT+0x3f0>
ret
xor    %edi,%edi
jmp    1030 <assert@plt>

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

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