int eigenfit(x, y, ndata, a, chisq)
int ndata;
double **x, y[], a[], *chisq;
{
  int i;
  double sum_x, sum_y, sum_z, norm;
  double cen_x, cen_y, cen_z;
  double sum_xx, sum_xy, sum_xz, sum_yy, sum_yz, sum_zz;
  double xp, yp, zp;
  double **mcm;
  double *eigenvalue;
  double **eigenvector;
  int nrot;
  mcm = (double **)dmatrix(1, 3, 1, 3);
  eigenvector = (double **)dmatrix(1, 3, 1, 3);
  eigenvalue = (double *)dvector(1, 3);
  sum_x = sum_y = sum_z = 0.0;
  sum_xx = sum_xy = sum_xz = sum_yy = sum_yz = sum_zz = 0.0;
  for (i = 1; i <= ndata; i++) {
    xp = x[i][1];
    yp = x[i][2];
    zp = y[i];
    sum_x += xp;
    sum_y += yp;
    sum_z += zp;
    sum_xx += xp * xp;
    sum_xy += xp * yp;
    sum_xz += xp * zp;
    sum_yy += yp * yp;
    sum_yz += yp * zp;
    sum_zz += zp * zp;
  }
  cen_x = sum_x / ndata;
  cen_y = sum_y / ndata;
  cen_z = sum_z / ndata;
  mcm[1][1] = sum_xx - sum_x * sum_x / ndata;
  mcm[2][2] = sum_yy - sum_y * sum_y / ndata;
  mcm[3][3] = sum_zz - sum_z * sum_z / ndata;
  mcm[1][2] = mcm[2][1] = sum_xy - sum_x * sum_y / ndata;
  mcm[1][3] = mcm[3][1] = sum_xz - sum_x * sum_z / ndata;
  mcm[2][3] = mcm[3][2] = sum_yz - sum_y * sum_z / ndata;
  djacobi(mcm, 3, eigenvalue, eigenvector, &nrot);
  deigsrt(eigenvalue, eigenvector, 3);
  norm = sqrt(((eigenvector[1][3]) * (eigenvector[1][3])) +
              ((eigenvector[2][3]) * (eigenvector[2][3])) +
              ((eigenvector[3][3]) * (eigenvector[3][3])));
  eigenvector[1][3] /= norm;
  eigenvector[2][3] /= norm;
  eigenvector[3][3] /= norm;
  a[1] = eigenvector[1][3];
  a[2] = eigenvector[2][3];
  a[3] = eigenvector[3][3];
  if (a[3] < 0.0) {
    a[1] = -a[1];
    a[2] = -a[2];
    a[3] = -a[3];
  }
  a[4] = -(cen_x * a[1] + cen_y * a[2] + cen_z * a[3]);
  *chisq = eigenvalue[3];
  free_dmatrix(mcm, 1, 3, 1, 3);
  free_dmatrix(eigenvector, 1, 3, 1, 3);
  free_dvector(eigenvalue, 1, 3);
  return (1);
}


x86 assembly (clang, -O0):
<eigenfit>:
push   %rbp
mov    %rsp,%rbp
sub    $0xd0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    $0x1,%edx
mov    $0x3,%ecx
mov    %edx,%edi
mov    %ecx,%esi
mov    $0x0,%al
call   1040 <dmatrix@plt>
cltq
mov    %rax,-0xb8(%rbp)
mov    $0x1,%edx
mov    $0x3,%ecx
mov    %edx,%edi
mov    %ecx,%esi
mov    $0x0,%al
call   1040 <dmatrix@plt>
cltq
mov    %rax,-0xc8(%rbp)
mov    $0x1,%edi
mov    $0x3,%esi
mov    $0x0,%al
call   1050 <dvector@plt>
cltq
mov    %rax,-0xc0(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     13b1 <eigenfit+0x241>
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x8(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0xa8(%rbp),%xmm0
ff
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0xb0(%rbp),%xmm0
ff
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0xa0(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    123c <eigenfit+0xcc>
movsd  -0x38(%rbp),%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x40(%rbp),%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x48(%rbp),%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
mulsd  -0x38(%rbp),%xmm1
cvtsi2sdl -0x14(%rbp),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    -0xb8(%rbp),%rax
mov    0x8(%rax),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm1
mulsd  -0x40(%rbp),%xmm1
cvtsi2sdl -0x14(%rbp),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    -0xb8(%rbp),%rax
mov    0x10(%rax),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x48(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
cvtsi2sdl -0x14(%rbp),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    -0xb8(%rbp),%rax
mov    0x18(%rax),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x78(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
mulsd  -0x40(%rbp),%xmm1
cvtsi2sdl -0x14(%rbp),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    -0xb8(%rbp),%rax
mov    0x10(%rax),%rax
movsd  %xmm0,0x8(%rax)
mov    -0xb8(%rbp),%rax
mov    0x8(%rax),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x80(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
cvtsi2sdl -0x14(%rbp),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    -0xb8(%rbp),%rax
mov    0x18(%rax),%rax
movsd  %xmm0,0x8(%rax)
mov    -0xb8(%rbp),%rax
mov    0x8(%rax),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x40(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
cvtsi2sdl -0x14(%rbp),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    -0xb8(%rbp),%rax
mov    0x18(%rax),%rax
movsd  %xmm0,0x10(%rax)
mov    -0xb8(%rbp),%rax
mov    0x10(%rax),%rax
movsd  %xmm0,0x18(%rax)
mov    -0xb8(%rbp),%rdi
mov    -0xc0(%rbp),%rdx
mov    -0xc8(%rbp),%rcx
mov    $0x3,%esi
lea    -0xcc(%rbp),%r8
mov    $0x0,%al
call   1030 <djacobi@plt>
mov    -0xc0(%rbp),%rdi
mov    -0xc8(%rbp),%rsi
mov    $0x3,%edx
mov    $0x0,%al
call   1090 <deigsrt@plt>
mov    -0xc8(%rbp),%rax
mov    0x8(%rax),%rax
movsd  0x18(%rax),%xmm1
mov    -0xc8(%rbp),%rax
mov    0x8(%rax),%rax
movsd  0x18(%rax),%xmm2
mov    -0xc8(%rbp),%rax
mov    0x10(%rax),%rax
movsd  0x18(%rax),%xmm0
mov    -0xc8(%rbp),%rax
mov    0x10(%rax),%rax
mulsd  0x18(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
mov    -0xc8(%rbp),%rax
mov    0x18(%rax),%rax
movsd  0x18(%rax),%xmm0
mov    -0xc8(%rbp),%rax
mov    0x18(%rax),%rax
movsd  0x18(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1080 <sqrt@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm1
mov    -0xc8(%rbp),%rax
mov    0x8(%rax),%rax
movsd  0x18(%rax),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rax)
movsd  -0x50(%rbp),%xmm1
mov    -0xc8(%rbp),%rax
mov    0x10(%rax),%rax
movsd  0x18(%rax),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rax)
movsd  -0x50(%rbp),%xmm1
mov    -0xc8(%rbp),%rax
mov    0x18(%rax),%rax
movsd  0x18(%rax),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rax)
mov    -0xc8(%rbp),%rax
mov    0x8(%rax),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0xc8(%rbp),%rax
mov    0x10(%rax),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0xc8(%rbp),%rax
mov    0x18(%rax),%rax
movsd  0x18(%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x20(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd 0x18(%rax),%xmm0
jbe    1719 <eigenfit+0x5a9>
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x58(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm2
movsd  -0x60(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mulsd  0x10(%rax),%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movsd  -0x68(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0xc0(%rbp),%rax
movsd  0x18(%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0xb8(%rbp),%rdi
mov    $0x1,%ecx
mov    $0x3,%r8d
mov    %ecx,%esi
mov    %r8d,%edx
mov    $0x0,%al
call   1070 <free_dmatrix@plt>
mov    -0xc8(%rbp),%rdi
mov    $0x1,%ecx
mov    $0x3,%r8d
mov    %ecx,%esi
mov    %r8d,%edx
mov    $0x0,%al
call   1070 <free_dmatrix@plt>
mov    -0xc0(%rbp),%rdi
mov    $0x1,%esi
mov    $0x3,%edx
mov    $0x0,%al
call   1060 <free_dvector@plt>
mov    $0x1,%eax
add    $0xd0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<eigenfit>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r8,0x10(%rsp)
mov    %rcx,%r15
mov    %edx,%ebp
mov    %rsi,%r14
mov    %rdi,%r12
mov    $0x1,%edi
mov    $0x3,%esi
mov    $0x1,%edx
mov    $0x3,%ecx
xor    %eax,%eax
call   1040 <dmatrix@plt>
movslq %eax,%r13
mov    $0x1,%edi
mov    $0x3,%esi
mov    $0x1,%edx
mov    $0x3,%ecx
xor    %eax,%eax
call   1040 <dmatrix@plt>
movslq %eax,%rbx
mov    $0x1,%edi
mov    $0x3,%esi
xor    %eax,%eax
call   1050 <dvector@plt>
movslq %eax,%r9
test   %ebp,%ebp
jle    1284 <eigenfit+0x114>
lea    0x1(%rbp),%eax
xorpd  %xmm7,%xmm7
xorpd  %xmm8,%xmm8
mov    $0x1,%ecx
xorpd  %xmm3,%xmm3
xorpd  %xmm6,%xmm6
xorpd  %xmm2,%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movapd %xmm6,%xmm4
movapd %xmm3,%xmm5
mov    (%r12,%rcx,8),%rdx
movupd 0x8(%rdx),%xmm3
movsd  (%r14,%rcx,8),%xmm0
addpd  %xmm3,%xmm7
addsd  %xmm0,%xmm8
movapd %xmm3,%xmm1
unpcklpd %xmm3,%xmm1
mulpd  %xmm3,%xmm1
addpd  %xmm1,%xmm2
movapd %xmm3,%xmm1
movsd  %xmm0,%xmm1
mulpd  %xmm3,%xmm1
shufpd $0x1,%xmm0,%xmm3
unpcklpd %xmm0,%xmm0
mulpd  %xmm3,%xmm0
movapd %xmm0,%xmm6
addpd  %xmm4,%xmm6
movapd %xmm1,%xmm3
addpd  %xmm5,%xmm3
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1210 <eigenfit+0xa0>
movapd %xmm2,%xmm3
unpckhpd %xmm2,%xmm3
addpd  %xmm5,%xmm1
addpd  %xmm4,%xmm0
jmp    129d <eigenfit+0x12d>
xorpd  %xmm7,%xmm7
xorpd  %xmm3,%xmm3
xorpd  %xmm2,%xmm2
xorpd  %xmm8,%xmm8
xorpd  %xmm1,%xmm1
xorpd  %xmm0,%xmm0
xorps  %xmm5,%xmm5
cvtsi2sd %ebp,%xmm5
movapd %xmm7,%xmm4
mulsd  %xmm7,%xmm4
divsd  %xmm5,%xmm4
subsd  %xmm4,%xmm2
mov    0x8(%r13),%rax
movsd  %xmm2,0x8(%rax)
movapd %xmm7,%xmm6
unpckhpd %xmm7,%xmm6
movapd %xmm6,%xmm2
mulsd  %xmm6,%xmm2
divsd  %xmm5,%xmm2
movapd %xmm1,%xmm4
unpckhpd %xmm1,%xmm4
subsd  %xmm2,%xmm4
mov    0x10(%r13),%rcx
movsd  %xmm4,0x10(%rcx)
movapd %xmm8,%xmm2
mulsd  %xmm8,%xmm2
divsd  %xmm5,%xmm2
movapd %xmm0,%xmm4
unpckhpd %xmm0,%xmm4
subsd  %xmm2,%xmm4
mov    0x18(%r13),%rdx
movsd  %xmm4,0x18(%rdx)
movapd %xmm6,%xmm2
mulsd  %xmm7,%xmm2
divsd  %xmm5,%xmm2
subsd  %xmm2,%xmm3
movsd  %xmm3,0x8(%rcx)
movsd  %xmm3,0x10(%rax)
movapd %xmm8,%xmm2
movapd %xmm7,0x30(%rsp)
mulsd  %xmm7,%xmm2
divsd  %xmm5,%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,0x8(%rdx)
movsd  %xmm1,0x18(%rax)
movsd  %xmm8,0x8(%rsp)
movapd %xmm8,%xmm1
movapd %xmm6,0x20(%rsp)
mulsd  %xmm6,%xmm1
movsd  %xmm5,(%rsp)
divsd  %xmm5,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rdx)
movsd  %xmm0,0x18(%rcx)
lea    0x1c(%rsp),%r8
mov    %r13,%rdi
mov    $0x3,%esi
mov    %r9,%rbp
mov    %r9,%rdx
mov    %rbx,%rcx
xor    %eax,%eax
call   1030 <djacobi@plt>
mov    %rbp,%rdi
mov    %rbx,%rsi
mov    $0x3,%edx
xor    %eax,%eax
call   1090 <deigsrt@plt>
mov    0x8(%rbx),%rax
mov    0x10(%rbx),%rcx
movsd  0x18(%rax),%xmm1
movsd  0x18(%rcx),%xmm0
mulsd  %xmm0,%xmm0
mulsd  %xmm1,%xmm1
addsd  %xmm0,%xmm1
mov    0x18(%rbx),%rax
movsd  0x18(%rax),%xmm0
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
ucomisd 0xc39(%rip),%xmm0
jb     13df <eigenfit+0x26f>
sqrtsd %xmm0,%xmm0
jmp    13e4 <eigenfit+0x274>
call   1080 <sqrt@plt>
mov    0x10(%rsp),%rsi
movapd 0x30(%rsp),%xmm5
movsd  0x8(%rsp),%xmm6
mov    0x8(%rbx),%rax
movsd  0x18(%rax),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rax)
mov    0x10(%rbx),%rcx
movsd  0x18(%rcx),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rcx)
mov    0x18(%rbx),%rdx
movsd  0x18(%rdx),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rdx)
movsd  0x18(%rax),%xmm0
movsd  %xmm0,0x8(%r15)
movsd  0x18(%rcx),%xmm1
movsd  %xmm1,0x10(%r15)
movsd  0x18(%rdx),%xmm2
movsd  %xmm2,0x18(%r15)
xorpd  %xmm3,%xmm3
ucomisd %xmm2,%xmm3
jbe    147e <eigenfit+0x30e>
movapd 0xba2(%rip),%xmm3
xorpd  %xmm3,%xmm0
xorpd  %xmm3,%xmm1
movapd %xmm0,%xmm4
unpcklpd %xmm1,%xmm4
movupd %xmm4,0x8(%r15)
xorpd  %xmm3,%xmm2
movlpd %xmm2,0x18(%r15)
movsd  (%rsp),%xmm3
movapd 0x20(%rsp),%xmm4
divsd  %xmm3,%xmm6
mulsd  %xmm2,%xmm6
divsd  %xmm3,%xmm4
mulsd  %xmm1,%xmm4
divsd  %xmm3,%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm4,%xmm5
addsd  %xmm6,%xmm5
xorpd  0xb4f(%rip),%xmm5
movlpd %xmm5,0x20(%r15)
movsd  0x18(%rbp),%xmm0
movsd  %xmm0,(%rsi)
mov    %r13,%rdi
mov    $0x1,%esi
mov    $0x3,%edx
mov    $0x1,%ecx
mov    $0x3,%r8d
xor    %eax,%eax
call   1070 <free_dmatrix@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
mov    $0x3,%edx
mov    $0x1,%ecx
mov    $0x3,%r8d
xor    %eax,%eax
call   1070 <free_dmatrix@plt>
mov    %rbp,%rdi
mov    $0x1,%esi
mov    $0x3,%edx
xor    %eax,%eax
call   1060 <free_dvector@plt>
mov    $0x1,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @eigenfit(double** %0, double* %1, i32 %2, double* %3, double* %4) {
%6 = alloca double**
%7 = alloca double*
%8 = alloca i32
%9 = alloca double*
%10 = alloca double*
%11 = alloca i32
%12 = alloca double
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
%28 = alloca double**
%29 = alloca double*
%30 = alloca double**
%31 = alloca i32
store double** %0, double*** %6
store double* %1, double** %7
store i32 %2, i32* %8
store double* %3, double** %9
store double* %4, double** %10
%32 = call i32 (i32, i32, i32, i32, ...) bitcast (i32 (...)* @dmatrix to i32 (i32, i32, i32, i32, ...)*)(i32 1, i32 3, i32 1, i32 3)
%33 = sext i32 %32 to i64
%34 = inttoptr i64 %33 to double**
store double** %34, double*** %28
%35 = call i32 (i32, i32, i32, i32, ...) bitcast (i32 (...)* @dmatrix to i32 (i32, i32, i32, i32, ...)*)(i32 1, i32 3, i32 1, i32 3)
%36 = sext i32 %35 to i64
%37 = inttoptr i64 %36 to double**
store double** %37, double*** %30
%38 = call i32 (i32, i32, ...) bitcast (i32 (...)* @dvector to i32 (i32, i32, ...)*)(i32 1, i32 3)
%39 = sext i32 %38 to i64
%40 = inttoptr i64 %39 to double*
store double* %40, double** %29
store double 0.000000e+00, double* %14
store double 0.000000e+00, double* %13
store double 0.000000e+00, double* %12
store double 0.000000e+00, double* %24
store double 0.000000e+00, double* %23
store double 0.000000e+00, double* %22
store double 0.000000e+00, double* %21
store double 0.000000e+00, double* %20
store double 0.000000e+00, double* %19
store i32 1, i32* %11
br label %41
41: ; preds = %98, %5
%42 = load i32, i32* %11
%43 = load i32, i32* %8
%44 = icmp sle i32 %42, %43
br i1 %44, label %45, label %101
45: ; preds = %41
%46 = load double**, double*** %6
%47 = load i32, i32* %11
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds double*, double** %46, i64 %48
%50 = load double*, double** %49
%51 = getelementptr inbounds double, double* %50, i64 1
%52 = load double, double* %51
store double %52, double* %25
%53 = load double**, double*** %6
%54 = load i32, i32* %11
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds double*, double** %53, i64 %55
%57 = load double*, double** %56
%58 = getelementptr inbounds double, double* %57, i64 2
%59 = load double, double* %58
store double %59, double* %26
%60 = load double*, double** %7
%61 = load i32, i32* %11
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds double, double* %60, i64 %62
%64 = load double, double* %63
store double %64, double* %27
%65 = load double, double* %25
%66 = load double, double* %12
%67 = fadd double %66, %65
store double %67, double* %12
%68 = load double, double* %26
%69 = load double, double* %13
%70 = fadd double %69, %68
store double %70, double* %13
%71 = load double, double* %27
%72 = load double, double* %14
%73 = fadd double %72, %71
store double %73, double* %14
%74 = load double, double* %25
%75 = load double, double* %25
%76 = load double, double* %19
%77 = call double @llvm.fmuladd.f64(double %74, double %75, double %76)
store double %77, double* %19
%78 = load double, double* %25
%79 = load double, double* %26
%80 = load double, double* %20
%81 = call double @llvm.fmuladd.f64(double %78, double %79, double %80)
store double %81, double* %20
%82 = load double, double* %25
%83 = load double, double* %27
%84 = load double, double* %21
%85 = call double @llvm.fmuladd.f64(double %82, double %83, double %84)
store double %85, double* %21
%86 = load double, double* %26
%87 = load double, double* %26
%88 = load double, double* %22
%89 = call double @llvm.fmuladd.f64(double %86, double %87, double %88)
store double %89, double* %22
%90 = load double, double* %26
%91 = load double, double* %27
%92 = load double, double* %23
%93 = call double @llvm.fmuladd.f64(double %90, double %91, double %92)
store double %93, double* %23
%94 = load double, double* %27
%95 = load double, double* %27
%96 = load double, double* %24
%97 = call double @llvm.fmuladd.f64(double %94, double %95, double %96)
store double %97, double* %24
br label %98
98: ; preds = %45
%99 = load i32, i32* %11
%100 = add nsw i32 %99, 1
store i32 %100, i32* %11
br label %41
101: ; preds = %41
%102 = load double, double* %12
%103 = load i32, i32* %8
%104 = sitofp i32 %103 to double
%105 = fdiv double %102, %104
store double %105, double* %16
%106 = load double, double* %13
%107 = load i32, i32* %8
%108 = sitofp i32 %107 to double
%109 = fdiv double %106, %108
store double %109, double* %17
%110 = load double, double* %14
%111 = load i32, i32* %8
%112 = sitofp i32 %111 to double
%113 = fdiv double %110, %112
store double %113, double* %18
%114 = load double, double* %19
%115 = load double, double* %12
%116 = load double, double* %12
%117 = fmul double %115, %116
%118 = load i32, i32* %8
%119 = sitofp i32 %118 to double
%120 = fdiv double %117, %119
%121 = fsub double %114, %120
%122 = load double**, double*** %28
%123 = getelementptr inbounds double*, double** %122, i64 1
%124 = load double*, double** %123
%125 = getelementptr inbounds double, double* %124, i64 1
store double %121, double* %125
%126 = load double, double* %22
%127 = load double, double* %13
%128 = load double, double* %13
%129 = fmul double %127, %128
%130 = load i32, i32* %8
%131 = sitofp i32 %130 to double
%132 = fdiv double %129, %131
%133 = fsub double %126, %132
%134 = load double**, double*** %28
%135 = getelementptr inbounds double*, double** %134, i64 2
%136 = load double*, double** %135
%137 = getelementptr inbounds double, double* %136, i64 2
store double %133, double* %137
%138 = load double, double* %24
%139 = load double, double* %14
%140 = load double, double* %14
%141 = fmul double %139, %140
%142 = load i32, i32* %8
%143 = sitofp i32 %142 to double
%144 = fdiv double %141, %143
%145 = fsub double %138, %144
%146 = load double**, double*** %28
%147 = getelementptr inbounds double*, double** %146, i64 3
%148 = load double*, double** %147
%149 = getelementptr inbounds double, double* %148, i64 3
store double %145, double* %149
%150 = load double, double* %20
%151 = load double, double* %12
%152 = load double, double* %13
%153 = fmul double %151, %152
%154 = load i32, i32* %8
%155 = sitofp i32 %154 to double
%156 = fdiv double %153, %155
%157 = fsub double %150, %156
%158 = load double**, double*** %28
%159 = getelementptr inbounds double*, double** %158, i64 2
%160 = load double*, double** %159
%161 = getelementptr inbounds double, double* %160, i64 1
store double %157, double* %161
%162 = load double**, double*** %28
%163 = getelementptr inbounds double*, double** %162, i64 1
%164 = load double*, double** %163
%165 = getelementptr inbounds double, double* %164, i64 2
store double %157, double* %165
%166 = load double, double* %21
%167 = load double, double* %12
%168 = load double, double* %14
%169 = fmul double %167, %168
%170 = load i32, i32* %8
%171 = sitofp i32 %170 to double
%172 = fdiv double %169, %171
%173 = fsub double %166, %172
%174 = load double**, double*** %28
%175 = getelementptr inbounds double*, double** %174, i64 3
%176 = load double*, double** %175
%177 = getelementptr inbounds double, double* %176, i64 1
store double %173, double* %177
%178 = load double**, double*** %28
%179 = getelementptr inbounds double*, double** %178, i64 1
%180 = load double*, double** %179
%181 = getelementptr inbounds double, double* %180, i64 3
store double %173, double* %181
%182 = load double, double* %23
%183 = load double, double* %13
%184 = load double, double* %14
%185 = fmul double %183, %184
%186 = load i32, i32* %8
%187 = sitofp i32 %186 to double
%188 = fdiv double %185, %187
%189 = fsub double %182, %188
%190 = load double**, double*** %28
%191 = getelementptr inbounds double*, double** %190, i64 3
%192 = load double*, double** %191
%193 = getelementptr inbounds double, double* %192, i64 2
store double %189, double* %193
%194 = load double**, double*** %28
%195 = getelementptr inbounds double*, double** %194, i64 2
%196 = load double*, double** %195
%197 = getelementptr inbounds double, double* %196, i64 3
store double %189, double* %197
%198 = load double**, double*** %28
%199 = load double*, double** %29
%200 = load double**, double*** %30
%201 = call i32 (double**, i32, double*, double**, i32*, ...) bitcast (i32 (...)* @djacobi to i32 (double**, i32, double*, double**, i32*, ...)*)(double** %198, i32 3, double* %199, double** %200, i32* %31)
%202 = load double*, double** %29
%203 = load double**, double*** %30
%204 = call i32 (double*, double**, i32, ...) bitcast (i32 (...)* @deigsrt to i32 (double*, double**, i32, ...)*)(double* %202, double** %203, i32 3)
%205 = load double**, double*** %30
%206 = getelementptr inbounds double*, double** %205, i64 1
%207 = load double*, double** %206
%208 = getelementptr inbounds double, double* %207, i64 3
%209 = load double, double* %208
%210 = load double**, double*** %30
%211 = getelementptr inbounds double*, double** %210, i64 1
%212 = load double*, double** %211
%213 = getelementptr inbounds double, double* %212, i64 3
%214 = load double, double* %213
%215 = load double**, double*** %30
%216 = getelementptr inbounds double*, double** %215, i64 2
%217 = load double*, double** %216
%218 = getelementptr inbounds double, double* %217, i64 3
%219 = load double, double* %218
%220 = load double**, double*** %30
%221 = getelementptr inbounds double*, double** %220, i64 2
%222 = load double*, double** %221
%223 = getelementptr inbounds double, double* %222, i64 3
%224 = load double, double* %223
%225 = fmul double %219, %224
%226 = call double @llvm.fmuladd.f64(double %209, double %214, double %225)
%227 = load double**, double*** %30
%228 = getelementptr inbounds double*, double** %227, i64 3
%229 = load double*, double** %228
%230 = getelementptr inbounds double, double* %229, i64 3
%231 = load double, double* %230
%232 = load double**, double*** %30
%233 = getelementptr inbounds double*, double** %232, i64 3
%234 = load double*, double** %233
%235 = getelementptr inbounds double, double* %234, i64 3
%236 = load double, double* %235
%237 = call double @llvm.fmuladd.f64(double %231, double %236, double %226)
%238 = call double @sqrt(double %237)
store double %238, double* %15
%239 = load double, double* %15
%240 = load double**, double*** %30
%241 = getelementptr inbounds double*, double** %240, i64 1
%242 = load double*, double** %241
%243 = getelementptr inbounds double, double* %242, i64 3
%244 = load double, double* %243
%245 = fdiv double %244, %239
store double %245, double* %243
%246 = load double, double* %15
%247 = load double**, double*** %30
%248 = getelementptr inbounds double*, double** %247, i64 2
%249 = load double*, double** %248
%250 = getelementptr inbounds double, double* %249, i64 3
%251 = load double, double* %250
%252 = fdiv double %251, %246
store double %252, double* %250
%253 = load double, double* %15
%254 = load double**, double*** %30
%255 = getelementptr inbounds double*, double** %254, i64 3
%256 = load double*, double** %255
%257 = getelementptr inbounds double, double* %256, i64 3
%258 = load double, double* %257
%259 = fdiv double %258, %253
store double %259, double* %257
%260 = load double**, double*** %30
%261 = getelementptr inbounds double*, double** %260, i64 1
%262 = load double*, double** %261
%263 = getelementptr inbounds double, double* %262, i64 3
%264 = load double, double* %263
%265 = load double*, double** %9
%266 = getelementptr inbounds double, double* %265, i64 1
store double %264, double* %266
%267 = load double**, double*** %30
%268 = getelementptr inbounds double*, double** %267, i64 2
%269 = load double*, double** %268
%270 = getelementptr inbounds double, double* %269, i64 3
%271 = load double, double* %270
%272 = load double*, double** %9
%273 = getelementptr inbounds double, double* %272, i64 2
store double %271, double* %273
%274 = load double**, double*** %30
%275 = getelementptr inbounds double*, double** %274, i64 3
%276 = load double*, double** %275
%277 = getelementptr inbounds double, double* %276, i64 3
%278 = load double, double* %277
%279 = load double*, double** %9
%280 = getelementptr inbounds double, double* %279, i64 3
store double %278, double* %280
%281 = load double*, double** %9
%282 = getelementptr inbounds double, double* %281, i64 3
%283 = load double, double* %282
%284 = fcmp olt double %283, 0.000000e+00
br i1 %284, label %285, label %304
285: ; preds = %101
%286 = load double*, double** %9
%287 = getelementptr inbounds double, double* %286, i64 1
%288 = load double, double* %287
%289 = fneg double %288
%290 = load double*, double** %9
%291 = getelementptr inbounds double, double* %290, i64 1
store double %289, double* %291
%292 = load double*, double** %9
%293 = getelementptr inbounds double, double* %292, i64 2
%294 = load double, double* %293
%295 = fneg double %294
%296 = load double*, double** %9
%297 = getelementptr inbounds double, double* %296, i64 2
store double %295, double* %297
%298 = load double*, double** %9
%299 = getelementptr inbounds double, double* %298, i64 3
%300 = load double, double* %299
%301 = fneg double %300
%302 = load double*, double** %9
%303 = getelementptr inbounds double, double* %302, i64 3
store double %301, double* %303
br label %304
304: ; preds = %285, %101
%305 = load double, double* %16
%306 = load double*, double** %9
%307 = getelementptr inbounds double, double* %306, i64 1
%308 = load double, double* %307
%309 = load double, double* %17
%310 = load double*, double** %9
%311 = getelementptr inbounds double, double* %310, i64 2
%312 = load double, double* %311
%313 = fmul double %309, %312
%314 = call double @llvm.fmuladd.f64(double %305, double %308, double %313)
%315 = load double, double* %18
%316 = load double*, double** %9
%317 = getelementptr inbounds double, double* %316, i64 3
%318 = load double, double* %317
%319 = call double @llvm.fmuladd.f64(double %315, double %318, double %314)
%320 = fneg double %319
%321 = load double*, double** %9
%322 = getelementptr inbounds double, double* %321, i64 4
store double %320, double* %322
%323 = load double*, double** %29
%324 = getelementptr inbounds double, double* %323, i64 3
%325 = load double, double* %324
%326 = load double*, double** %10
store double %325, double* %326
%327 = load double**, double*** %28
%328 = call i32 (double**, i32, i32, i32, i32, ...) bitcast (i32 (...)* @free_dmatrix to i32 (double**, i32, i32, i32, i32, ...)*)(double** %327, i32 1, i32 3, i32 1, i32 3)
%329 = load double**, double*** %30
%330 = call i32 (double**, i32, i32, i32, i32, ...) bitcast (i32 (...)* @free_dmatrix to i32 (double**, i32, i32, i32, i32, ...)*)(double** %329, i32 1, i32 3, i32 1, i32 3)
%331 = load double*, double** %29
%332 = call i32 (double*, i32, i32, ...) bitcast (i32 (...)* @free_dvector to i32 (double*, i32, i32, ...)*)(double* %331, i32 1, i32 3)
ret i32 1
}

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