#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 */
double *smalloc(int);
void genvals3d(double **xvecs, double *vals[8][8], int nvtxs) {
  int nsets = 8;
  int nlists = 13;
  double *temp[13];
  int i, j;
  for (i = 0; i < nlists; i++) {
    temp[i] = smalloc(nvtxs * sizeof(double));
  }
  for (i = 1; i <= nvtxs; i++) {
    temp[0][i - 1] = 4 * xvecs[1][i];
    temp[1][i - 1] = 4 * xvecs[2][i];
    temp[2][i - 1] = 4 * xvecs[3][i];
    temp[3][i - 1] = 4 * (xvecs[1][i] + xvecs[2][i]);
    temp[4][i - 1] = 4 * (-xvecs[1][i] + xvecs[2][i]);
    temp[5][i - 1] = 4 * (xvecs[1][i] + xvecs[3][i]);
    temp[6][i - 1] = 4 * (-xvecs[1][i] + xvecs[3][i]);
    temp[7][i - 1] = 4 * (xvecs[2][i] + xvecs[3][i]);
    temp[8][i - 1] = 4 * (-xvecs[2][i] + xvecs[3][i]);
    temp[9][i - 1] = 4 * (xvecs[1][i] + xvecs[2][i] + xvecs[3][i]);
    temp[10][i - 1] = 4 * (-xvecs[1][i] + xvecs[2][i] + xvecs[3][i]);
    temp[11][i - 1] = 4 * (xvecs[1][i] - xvecs[2][i] + xvecs[3][i]);
    temp[12][i - 1] = 4 * (-xvecs[1][i] - xvecs[2][i] + xvecs[3][i]);
  }
  vals[0][1] = vals[2][3] = vals[4][5] = vals[6][7] = temp[0];
  vals[0][2] = vals[1][3] = vals[4][6] = vals[5][7] = temp[1];
  vals[0][4] = vals[1][5] = vals[2][6] = vals[3][7] = temp[2];
  vals[0][3] = vals[4][7] = temp[3];
  vals[1][2] = vals[5][6] = temp[4];
  vals[0][5] = vals[2][7] = temp[5];
  vals[1][4] = vals[3][6] = temp[6];
  vals[0][6] = vals[1][7] = temp[7];
  vals[2][4] = vals[3][5] = temp[8];
  vals[0][7] = temp[9];
  vals[1][6] = temp[10];
  vals[2][5] = temp[11];
  vals[3][4] = temp[12];
  for (i = 0; i < nsets; i++) {
    for (j = i + 1; j < nsets; j++) {
      vals[j][i] = vals[i][j];
    }
  }
}


x86 assembly (clang, -O0):
<genvals3d>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movl   $0x8,-0x18(%rbp)
movl   $0xd,-0x1c(%rbp)
movl   $0x0,-0x94(%rbp)
mov    -0x94(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1182 <genvals3d+0x72>
movslq -0x14(%rbp),%rax
shl    $0x3,%rax
mov    %eax,%edi
call   1030 <smalloc@plt>
mov    %rax,%rcx
movslq -0x94(%rbp),%rax
mov    %rcx,-0x90(%rbp,%rax,8)
ff
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    113e <genvals3d+0x2e>
movl   $0x1,-0x94(%rbp)
mov    -0x94(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     15e5 <genvals3d+0x4d5>
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  0xe4e(%rip),%xmm0
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x90(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  0xe1a(%rip),%xmm0
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x88(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  0xde6(%rip),%xmm0
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x80(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xd9c(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x78(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mov    -0x8(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xd3c(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x70(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xcf3(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x68(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xc93(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x60(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xc4a(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x58(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xbea(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x50(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xb8d(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x48(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mov    -0x8(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xb19(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x40(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0x94(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xabc(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x38(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x8(%rbp),%rax
mov    0x8(%rax),%rax
movslq -0x94(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mov    -0x8(%rbp),%rax
mov    0x10(%rax),%rax
movslq -0x94(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
mov    0x18(%rax),%rax
movslq -0x94(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm1
movsd  0xa48(%rip),%xmm0
mulsd  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
mov    -0x94(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    118c <genvals3d+0x7c>
mov    -0x90(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0x1b8(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x128(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x98(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x8(%rax)
mov    -0x88(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0x178(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x130(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x58(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x10(%rax)
mov    -0x80(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0xf8(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0xb0(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x68(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x20(%rax)
mov    -0x78(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0x138(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x18(%rax)
mov    -0x70(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0x170(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x50(%rax)
mov    -0x68(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0xb8(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x28(%rax)
mov    -0x60(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0xf0(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x60(%rax)
mov    -0x58(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0x78(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0x30(%rax)
mov    -0x50(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0xe8(%rax)
mov    -0x10(%rbp),%rax
mov    %rcx,0xa0(%rax)
mov    -0x48(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0x38(%rax)
mov    -0x40(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0x70(%rax)
mov    -0x38(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0xa8(%rax)
mov    -0x30(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,0xe0(%rax)
movl   $0x0,-0x94(%rbp)
mov    -0x94(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    17ca <genvals3d+0x6ba>
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
mov    -0x98(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    17b1 <genvals3d+0x6a1>
mov    -0x10(%rbp),%rax
movslq -0x94(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movslq -0x98(%rbp),%rcx
mov    (%rax,%rcx,8),%rdx
mov    -0x10(%rbp),%rax
movslq -0x98(%rbp),%rcx
shl    $0x6,%rcx
add    %rcx,%rax
movslq -0x94(%rbp),%rcx
mov    %rdx,(%rax,%rcx,8)
mov    -0x98(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x98(%rbp)
jmp    1754 <genvals3d+0x644>
jmp    17b6 <genvals3d+0x6a6>
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    1736 <genvals3d+0x626>
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<genvals3d>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x58,%rsp
mov    %edx,%ebp
mov    %rsi,%r13
mov    %rdi,0x38(%rsp)
lea    0x0(,%rbp,8),%r14d
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    %rax,0x50(%rsp)
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    %rax,0x48(%rsp)
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    %rax,0x40(%rsp)
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    %rax,0x20(%rsp)
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    %rax,0x28(%rsp)
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    %rax,0x30(%rsp)
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    %rax,%rbx
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    %rax,%r12
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    %rax,%r15
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    %rax,0x18(%rsp)
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    %rax,0x10(%rsp)
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    %rax,0x8(%rsp)
mov    %r14d,%edi
call   1030 <smalloc@plt>
mov    0x40(%rsp),%r10
mov    0x48(%rsp),%r9
mov    0x50(%rsp),%r8
test   %ebp,%ebp
jle    1368 <genvals3d+0x258>
mov    0x38(%rsp),%rsi
mov    0x8(%rsi),%rcx
mov    0x10(%rsi),%rdx
mov    0x18(%rsi),%rsi
mov    %ebp,%r11d
shl    $0x3,%r11
xor    %ebp,%ebp
movsd  0xdf9(%rip),%xmm0
movapd 0xe01(%rip),%xmm1
nop
movsd  0x8(%rcx,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,(%r8,%rbp,1)
movsd  0x8(%rdx,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,(%r9,%rbp,1)
movsd  0x8(%rsi,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,(%r10,%rbp,1)
movsd  0x8(%rcx,%rbp,1),%xmm2
addsd  0x8(%rdx,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
mov    0x20(%rsp),%rdi
movsd  %xmm2,(%rdi,%rbp,1)
movsd  0x8(%rdx,%rbp,1),%xmm2
subsd  0x8(%rcx,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
mov    0x28(%rsp),%rdi
movsd  %xmm2,(%rdi,%rbp,1)
movsd  0x8(%rcx,%rbp,1),%xmm2
addsd  0x8(%rsi,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
mov    %r12,%r14
mov    %r15,%r12
mov    0x30(%rsp),%r15
movsd  %xmm2,(%r15,%rbp,1)
mov    %r12,%r15
mov    %r14,%r12
movsd  0x8(%rsi,%rbp,1),%xmm2
subsd  0x8(%rcx,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,(%rbx,%rbp,1)
movsd  0x8(%rdx,%rbp,1),%xmm2
addsd  0x8(%rsi,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,(%r14,%rbp,1)
movsd  0x8(%rsi,%rbp,1),%xmm2
subsd  0x8(%rdx,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,(%r15,%rbp,1)
movsd  0x8(%rcx,%rbp,1),%xmm2
addsd  0x8(%rdx,%rbp,1),%xmm2
addsd  0x8(%rsi,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
mov    0x18(%rsp),%rdi
movsd  %xmm2,(%rdi,%rbp,1)
movsd  0x8(%rdx,%rbp,1),%xmm2
subsd  0x8(%rcx,%rbp,1),%xmm2
addsd  0x8(%rsi,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
mov    0x10(%rsp),%rdi
movsd  %xmm2,(%rdi,%rbp,1)
movsd  0x8(%rcx,%rbp,1),%xmm2
subsd  0x8(%rdx,%rbp,1),%xmm2
addsd  0x8(%rsi,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
mov    0x8(%rsp),%rdi
movsd  %xmm2,(%rdi,%rbp,1)
movsd  0x8(%rcx,%rbp,1),%xmm2
xorpd  %xmm1,%xmm2
subsd  0x8(%rdx,%rbp,1),%xmm2
addsd  0x8(%rsi,%rbp,1),%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,(%rax,%rbp,1)
add    $0x8,%rbp
cmp    %rbp,%r11
jne    1210 <genvals3d+0x100>
mov    %r8,0x1b8(%r13)
mov    %r8,0x128(%r13)
mov    %r8,0x98(%r13)
mov    %r8,0x8(%r13)
mov    %r9,0x178(%r13)
mov    %r9,0x130(%r13)
mov    %r9,0x58(%r13)
mov    %r9,0x10(%r13)
mov    %r10,0xf8(%r13)
mov    %r10,0xb0(%r13)
mov    %r10,0x68(%r13)
mov    %r10,0x20(%r13)
mov    0x20(%rsp),%rsi
mov    %rsi,0x138(%r13)
mov    %rsi,0x18(%r13)
mov    0x28(%rsp),%rdx
mov    %rdx,0x170(%r13)
mov    %rdx,0x50(%r13)
mov    0x30(%rsp),%rcx
mov    %rcx,0xb8(%r13)
mov    %rcx,0x28(%r13)
mov    %rbx,0xf0(%r13)
mov    %rbx,0x60(%r13)
mov    %r12,0x78(%r13)
mov    %r12,0x30(%r13)
mov    %r15,0xe8(%r13)
mov    %r15,0xa0(%r13)
mov    0x18(%rsp),%rdi
mov    %rdi,0x38(%r13)
mov    0x10(%rsp),%rbp
mov    %rbp,0x70(%r13)
mov    0x8(%rsp),%r11
mov    %r11,0xa8(%r13)
mov    %rax,0xe0(%r13)
mov    %r8,0x40(%r13)
mov    %r9,0x80(%r13)
mov    %rsi,0xc0(%r13)
mov    %r10,0x100(%r13)
mov    %rcx,0x140(%r13)
mov    %r12,0x180(%r13)
mov    %rdi,0x1c0(%r13)
mov    %rdx,0x88(%r13)
mov    %r9,0xc8(%r13)
mov    %rbx,0x108(%r13)
mov    %r10,0x148(%r13)
mov    %rbp,0x188(%r13)
mov    %r12,0x1c8(%r13)
mov    %r8,0xd0(%r13)
mov    %r15,0x110(%r13)
mov    %r11,0x150(%r13)
mov    %r10,0x190(%r13)
mov    %rcx,0x1d0(%r13)
mov    %rax,0x118(%r13)
mov    %r15,0x158(%r13)
mov    %rbx,0x198(%r13)
mov    %r10,0x1d8(%r13)
mov    %r8,0x160(%r13)
mov    %r9,0x1a0(%r13)
mov    %rsi,0x1e0(%r13)
mov    %rdx,0x1a8(%r13)
mov    %r9,0x1e8(%r13)
mov    %r8,0x1f0(%r13)
add    $0x58,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @genvals3d(double** nocapture %0, [8 x double*]* %1, i32 %2) {
%4 = shl i32 %2, 3
%5 = tail call double* @smalloc(i32 %4)
%6 = tail call double* @smalloc(i32 %4)
%7 = tail call double* @smalloc(i32 %4)
%8 = tail call double* @smalloc(i32 %4)
%9 = tail call double* @smalloc(i32 %4)
%10 = tail call double* @smalloc(i32 %4)
%11 = tail call double* @smalloc(i32 %4)
%12 = tail call double* @smalloc(i32 %4)
%13 = tail call double* @smalloc(i32 %4)
%14 = tail call double* @smalloc(i32 %4)
%15 = tail call double* @smalloc(i32 %4)
%16 = tail call double* @smalloc(i32 %4)
%17 = tail call double* @smalloc(i32 %4)
%18 = icmp slt i32 %2, 1
br i1 %18, label %104, label %19
19: ; preds = %3
%20 = getelementptr inbounds double*, double** %0, i64 1
%21 = load double*, double** %20
%22 = getelementptr inbounds double*, double** %0, i64 2
%23 = load double*, double** %22
%24 = getelementptr inbounds double*, double** %0, i64 3
%25 = load double*, double** %24
%26 = add nuw i32 %2, 1
%27 = zext i32 %26 to i64
br label %28
28: ; preds = %19, %28
%29 = phi i64 [ 1, %19 ], [ %102, %28 ]
%30 = getelementptr inbounds double, double* %21, i64 %29
%31 = load double, double* %30
%32 = fmul double %31, 4.000000e+00
%33 = add nsw i64 %29, -1
%34 = getelementptr inbounds double, double* %5, i64 %33
store double %32, double* %34
%35 = getelementptr inbounds double, double* %23, i64 %29
%36 = load double, double* %35
%37 = fmul double %36, 4.000000e+00
%38 = getelementptr inbounds double, double* %6, i64 %33
store double %37, double* %38
%39 = getelementptr inbounds double, double* %25, i64 %29
%40 = load double, double* %39
%41 = fmul double %40, 4.000000e+00
%42 = getelementptr inbounds double, double* %7, i64 %33
store double %41, double* %42
%43 = load double, double* %30
%44 = load double, double* %35
%45 = fadd double %43, %44
%46 = fmul double %45, 4.000000e+00
%47 = getelementptr inbounds double, double* %8, i64 %33
store double %46, double* %47
%48 = load double, double* %30
%49 = load double, double* %35
%50 = fsub double %49, %48
%51 = fmul double %50, 4.000000e+00
%52 = getelementptr inbounds double, double* %9, i64 %33
store double %51, double* %52
%53 = load double, double* %30
%54 = load double, double* %39
%55 = fadd double %53, %54
%56 = fmul double %55, 4.000000e+00
%57 = getelementptr inbounds double, double* %10, i64 %33
store double %56, double* %57
%58 = load double, double* %30
%59 = load double, double* %39
%60 = fsub double %59, %58
%61 = fmul double %60, 4.000000e+00
%62 = getelementptr inbounds double, double* %11, i64 %33
store double %61, double* %62
%63 = load double, double* %35
%64 = load double, double* %39
%65 = fadd double %63, %64
%66 = fmul double %65, 4.000000e+00
%67 = getelementptr inbounds double, double* %12, i64 %33
store double %66, double* %67
%68 = load double, double* %35
%69 = load double, double* %39
%70 = fsub double %69, %68
%71 = fmul double %70, 4.000000e+00
%72 = getelementptr inbounds double, double* %13, i64 %33
store double %71, double* %72
%73 = load double, double* %30
%74 = load double, double* %35
%75 = fadd double %73, %74
%76 = load double, double* %39
%77 = fadd double %75, %76
%78 = fmul double %77, 4.000000e+00
%79 = getelementptr inbounds double, double* %14, i64 %33
store double %78, double* %79
%80 = load double, double* %30
%81 = load double, double* %35
%82 = fsub double %81, %80
%83 = load double, double* %39
%84 = fadd double %82, %83
%85 = fmul double %84, 4.000000e+00
%86 = getelementptr inbounds double, double* %15, i64 %33
store double %85, double* %86
%87 = load double, double* %30
%88 = load double, double* %35
%89 = fsub double %87, %88
%90 = load double, double* %39
%91 = fadd double %89, %90
%92 = fmul double %91, 4.000000e+00
%93 = getelementptr inbounds double, double* %16, i64 %33
store double %92, double* %93
%94 = load double, double* %30
%95 = fneg double %94
%96 = load double, double* %35
%97 = fsub double %95, %96
%98 = load double, double* %39
%99 = fadd double %97, %98
%100 = fmul double %99, 4.000000e+00
%101 = getelementptr inbounds double, double* %17, i64 %33
store double %100, double* %101
%102 = add nuw nsw i64 %29, 1
%103 = icmp eq i64 %102, %27
br i1 %103, label %104, label %28
104: ; preds = %28, %3
%105 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 6, i64 7
store double* %5, double** %105
%106 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 4, i64 5
store double* %5, double** %106
%107 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 2, i64 3
store double* %5, double** %107
%108 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 0, i64 1
store double* %5, double** %108
%109 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 5, i64 7
store double* %6, double** %109
%110 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 4, i64 6
store double* %6, double** %110
%111 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 1, i64 3
store double* %6, double** %111
%112 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 0, i64 2
store double* %6, double** %112
%113 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 3, i64 7
store double* %7, double** %113
%114 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 2, i64 6
store double* %7, double** %114
%115 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 1, i64 5
store double* %7, double** %115
%116 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 0, i64 4
store double* %7, double** %116
%117 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 4, i64 7
store double* %8, double** %117
%118 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 0, i64 3
store double* %8, double** %118
%119 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 5, i64 6
store double* %9, double** %119
%120 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 1, i64 2
store double* %9, double** %120
%121 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 2, i64 7
store double* %10, double** %121
%122 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 0, i64 5
store double* %10, double** %122
%123 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 3, i64 6
store double* %11, double** %123
%124 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 1, i64 4
store double* %11, double** %124
%125 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 1, i64 7
store double* %12, double** %125
%126 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 0, i64 6
store double* %12, double** %126
%127 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 3, i64 5
store double* %13, double** %127
%128 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 2, i64 4
store double* %13, double** %128
%129 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 0, i64 7
store double* %14, double** %129
%130 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 1, i64 6
store double* %15, double** %130
%131 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 2, i64 5
store double* %16, double** %131
%132 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 3, i64 4
store double* %17, double** %132
%133 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 1, i64 0
store double* %5, double** %133
%134 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 2, i64 0
store double* %6, double** %134
%135 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 3, i64 0
store double* %8, double** %135
%136 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 4, i64 0
store double* %7, double** %136
%137 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 5, i64 0
store double* %10, double** %137
%138 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 6, i64 0
store double* %12, double** %138
%139 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 7, i64 0
store double* %14, double** %139
%140 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 2, i64 1
store double* %9, double** %140
%141 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 3, i64 1
store double* %6, double** %141
%142 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 4, i64 1
store double* %11, double** %142
%143 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 5, i64 1
store double* %7, double** %143
%144 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 6, i64 1
store double* %15, double** %144
%145 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 7, i64 1
store double* %12, double** %145
%146 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 3, i64 2
store double* %5, double** %146
%147 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 4, i64 2
store double* %13, double** %147
%148 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 5, i64 2
store double* %16, double** %148
%149 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 6, i64 2
store double* %7, double** %149
%150 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 7, i64 2
store double* %10, double** %150
%151 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 4, i64 3
store double* %17, double** %151
%152 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 5, i64 3
store double* %13, double** %152
%153 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 6, i64 3
store double* %11, double** %153
%154 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 7, i64 3
store double* %7, double** %154
%155 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 5, i64 4
store double* %5, double** %155
%156 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 6, i64 4
store double* %6, double** %156
%157 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 7, i64 4
store double* %8, double** %157
%158 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 6, i64 5
store double* %9, double** %158
%159 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 7, i64 5
store double* %6, double** %159
%160 = getelementptr inbounds [8 x double*], [8 x double*]* %1, i64 7, i64 6
store double* %5, double** %160
ret void
}