void mrqmin(double *x, double *y, double *sig, int ndata, double *a, int *ia,
            int ma, double **covar, double **alpha, double *chisq,
            double *alamda,
            void (*funcs)(double *, double *, double *, double **, int, int,
                          int, double *, double **, double *, double *, int *,
                          void *),
            int Nlin_coeff, double **Design_Matrix, double *lin_coeffs,
            int *varylin_coeffs, int mfit, double *ochisq, double *atry,
            double *beta, double *da, double **oneda, void *userparams) {
  void covsrt(double **covar, int ma, int *ia, int mfit);
  int gaussj(double **a, int n, double **b, int m);
  void mrqcof(double *x, double *y, double *sig, int ndata, double *a, int *ia,
              int ma, double **alpha, double *beta, double *chisq,
              void (*funcs)(double *, double *, double *, double **, int, int,
                            int, double *, double **, double *, double *, int *,
                            void *),
              int, double **, double *, int *, void *);
  int j, k, l;
  if (*alamda < 0.0) {
    *alamda = 0.001;
    mrqcof(x, y, sig, ndata, a, ia, ma, alpha, beta, chisq, funcs, Nlin_coeff,
           Design_Matrix, lin_coeffs, varylin_coeffs, userparams);
    ochisq[0] = (*chisq);
    for (j = 0; j < ma; j++)
      atry[j] = a[j];
  }
  for (j = 0; j < mfit; j++) {
    for (k = 0; k < mfit; k++)
      covar[j][k] = alpha[j][k];
    covar[j][j] = alpha[j][j] * (1.0 + (*alamda));
    oneda[j][0] = beta[j];
  }
  if (gaussj(covar, mfit, oneda, 1)) {
    *alamda = 0;
  }
  for (j = 0; j < mfit; j++)
    da[j] = oneda[j][0];
  if (*alamda == 0.0) {
    covsrt(covar, ma, ia, mfit);
    covsrt(alpha, ma, ia, mfit);
    return;
  }
  for (j = 0, l = 0; l < ma; l++)
    if (ia[l])
      atry[l] = a[l] + da[j++];
  mrqcof(x, y, sig, ndata, atry, ia, ma, covar, da, chisq, funcs, Nlin_coeff,
         Design_Matrix, lin_coeffs, varylin_coeffs, userparams);
  if (*chisq < ochisq[0]) {
    *alamda *= 0.1;
    ochisq[0] = (*chisq);
    for (j = 0; j < mfit; j++) {
      for (k = 0; k < mfit; k++)
        alpha[j][k] = covar[j][k];
      beta[j] = da[j];
    }
    for (l = 0; l < ma; l++)
      a[l] = atry[l];
  } else {
    *alamda *= 10.0;
    *chisq = ochisq[0];
  }
}


x86 assembly (clang, -O0):
<mrqmin>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xc8,%rsp
mov    0x90(%rbp),%rax
mov    0x88(%rbp),%rax
mov    0x80(%rbp),%rax
mov    0x78(%rbp),%rax
mov    0x70(%rbp),%rax
mov    0x68(%rbp),%rax
mov    0x60(%rbp),%eax
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%eax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%eax
mov    %rdi,-0x30(%rbp)
mov    %rsi,-0x38(%rbp)
mov    %rdx,-0x40(%rbp)
mov    %ecx,-0x44(%rbp)
mov    %r8,-0x50(%rbp)
mov    %r9,-0x58(%rbp)
mov    0x30(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
jbe    12a2 <mrqmin+0x172>
mov    0x30(%rbp),%rax
movsd  0xe3e(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rdi
mov    -0x38(%rbp),%rsi
mov    -0x40(%rbp),%rdx
mov    -0x44(%rbp),%ecx
mov    -0x50(%rbp),%r8
mov    -0x58(%rbp),%r9
mov    0x10(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    0x20(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    0x78(%rbp),%r13
mov    0x28(%rbp),%r12
mov    0x38(%rbp),%r15
mov    0x40(%rbp),%r14d
mov    0x48(%rbp),%rbx
mov    0x50(%rbp),%r11
mov    0x58(%rbp),%r10
mov    0x90(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x7c(%rbp),%eax
mov    %eax,(%rsp)
mov    -0x78(%rbp),%rax
mov    %rax,0x8(%rsp)
mov    -0x70(%rbp),%rax
mov    %r13,0x10(%rsp)
mov    %r12,0x18(%rsp)
mov    %r15,0x20(%rsp)
mov    %r14d,0x28(%rsp)
mov    %rbx,0x30(%rsp)
mov    %r11,0x38(%rsp)
mov    %r10,0x40(%rsp)
mov    %rax,0x48(%rsp)
call   1050 <mrqcof@plt>
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x68(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    129d <mrqmin+0x16d>
mov    -0x50(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x70(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    1269 <mrqmin+0x139>
jmp    12a2 <mrqmin+0x172>
movl   $0x0,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    0x60(%rbp),%eax
jge    136c <mrqmin+0x23c>
movl   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    0x60(%rbp),%eax
jge    1300 <mrqmin+0x1d0>
mov    0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x60(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x18(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x60(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    12bc <mrqmin+0x18c>
mov    0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x30(%rbp),%rax
movsd  0xcf7(%rip),%xmm1
addsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
mov    0x18(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x5c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x78(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x88(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  %xmm0,(%rax)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    12a9 <mrqmin+0x179>
mov    0x18(%rbp),%rdi
mov    0x60(%rbp),%esi
mov    0x88(%rbp),%rdx
mov    $0x1,%ecx
call   1030 <gaussj@plt>
cmp    $0x0,%eax
je     1398 <mrqmin+0x268>
mov    0x30(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movl   $0x0,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    0x60(%rbp),%eax
jge    13dc <mrqmin+0x2ac>
mov    0x88(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  (%rax),%xmm0
mov    0x80(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    139f <mrqmin+0x26f>
mov    0x30(%rbp),%rax
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1422 <mrqmin+0x2f2>
jp     1422 <mrqmin+0x2f2>
mov    0x18(%rbp),%rdi
mov    0x10(%rbp),%esi
mov    -0x58(%rbp),%rdx
mov    0x60(%rbp),%ecx
call   1040 <covsrt@plt>
mov    0x20(%rbp),%rdi
mov    0x10(%rbp),%esi
mov    -0x58(%rbp),%rdx
mov    0x60(%rbp),%ecx
call   1040 <covsrt@plt>
jmp    1661 <mrqmin+0x531>
movl   $0x0,-0x5c(%rbp)
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    1495 <mrqmin+0x365>
mov    -0x58(%rbp),%rax
movslq -0x64(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1482 <mrqmin+0x352>
mov    -0x50(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x80(%rbp),%rax
mov    -0x5c(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x5c(%rbp)
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    0x70(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    1487 <mrqmin+0x357>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    1430 <mrqmin+0x300>
mov    -0x30(%rbp),%rdi
mov    -0x38(%rbp),%rsi
mov    -0x40(%rbp),%rdx
mov    -0x44(%rbp),%ecx
mov    0x70(%rbp),%r8
mov    -0x58(%rbp),%r9
mov    0x10(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    0x18(%rbp),%rax
mov    %rax,-0x90(%rbp)
mov    0x80(%rbp),%r13
mov    0x28(%rbp),%r12
mov    0x38(%rbp),%r15
mov    0x40(%rbp),%r14d
mov    0x48(%rbp),%rbx
mov    0x50(%rbp),%r11
mov    0x58(%rbp),%r10
mov    0x90(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    -0x94(%rbp),%eax
mov    %eax,(%rsp)
mov    -0x90(%rbp),%rax
mov    %rax,0x8(%rsp)
mov    -0x88(%rbp),%rax
mov    %r13,0x10(%rsp)
mov    %r12,0x18(%rsp)
mov    %r15,0x20(%rsp)
mov    %r14d,0x28(%rsp)
mov    %rbx,0x30(%rsp)
mov    %r11,0x38(%rsp)
mov    %r10,0x40(%rsp)
mov    %rax,0x48(%rsp)
call   1050 <mrqcof@plt>
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm1
mov    0x68(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    163d <mrqmin+0x50d>
mov    0x30(%rbp),%rax
movsd  0xab4(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x68(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    0x60(%rbp),%eax
jge    15fd <mrqmin+0x4cd>
movl   $0x0,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    0x60(%rbp),%eax
jge    15d2 <mrqmin+0x4a2>
mov    0x18(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x60(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x60(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    158e <mrqmin+0x45e>
mov    0x80(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x78(%rbp),%rax
movslq -0x5c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    157b <mrqmin+0x44b>
movl   $0x0,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    1638 <mrqmin+0x508>
mov    0x70(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x50(%rbp),%rax
movslq -0x64(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    1604 <mrqmin+0x4d4>
jmp    1661 <mrqmin+0x531>
mov    0x30(%rbp),%rax
movsd  0x9bf(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    0x68(%rbp),%rax
movsd  (%rax),%xmm0
mov    0x28(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0xc8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<mrqmin>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xb8,%rsp
mov    %r9,0x38(%rsp)
mov    %r8,%rbx
mov    %ecx,0x24(%rsp)
mov    %rdx,0x80(%rsp)
mov    %rsi,0x78(%rsp)
mov    %rdi,0x70(%rsp)
mov    0x170(%rsp),%rax
mov    %rax,0x88(%rsp)
mov    0x168(%rsp),%r15
mov    0x160(%rsp),%r12
mov    0x158(%rsp),%r9
mov    0x150(%rsp),%r13
mov    0x148(%rsp),%r10
mov    0x140(%rsp),%esi
mov    0x138(%rsp),%rax
mov    %rax,0x68(%rsp)
mov    0x110(%rsp),%rax
xorpd  %xmm0,%xmm0
mov    %rax,0x8(%rsp)
ucomisd (%rax),%xmm0
mov    0x130(%rsp),%rax
mov    %rax,0x48(%rsp)
mov    0x128(%rsp),%rax
mov    %rax,0x50(%rsp)
mov    0x120(%rsp),%eax
mov    %rax,0x58(%rsp)
mov    0x118(%rsp),%rax
mov    %rax,0x60(%rsp)
mov    0x108(%rsp),%rax
mov    %rax,0x90(%rsp)
mov    0x100(%rsp),%rax
mov    %rax,0x30(%rsp)
mov    0xf8(%rsp),%rax
mov    %rax,0x18(%rsp)
mov    0xf0(%rsp),%r14d
mov    %esi,0x4(%rsp)
mov    %r9,0x28(%rsp)
mov    %r10,0x98(%rsp)
jbe    1458 <mrqmin+0x328>
movabs $0x3f50624dd2f1a9fc,%rax
62 50 3f
mov    0x8(%rsp),%rcx
mov    %rax,(%rcx)
mov    0x70(%rsp),%rdi
mov    0x78(%rsp),%rsi
mov    0x80(%rsp),%rdx
mov    0x24(%rsp),%ecx
mov    %rbx,%r8
mov    0x38(%rsp),%r9
push   0x88(%rsp)
push   0x70(%rsp)
push   0x58(%rsp)
push   0x68(%rsp)
push   0x78(%rsp)
push   0x88(%rsp)
mov    0xc0(%rsp),%rbp
push   %rbp
push   0x60(%rsp)
push   0x70(%rsp)
push   %r14
call   1050 <mrqcof@plt>
mov    0xe8(%rsp),%r10
mov    0x78(%rsp),%r9
mov    0x54(%rsp),%esi
add    $0x50,%rsp
movsd  0x0(%rbp),%xmm0
movsd  %xmm0,(%r10)
test   %r14d,%r14d
jle    1458 <mrqmin+0x328>
mov    %r14d,%eax
cmp    $0x4,%r14d
jb     12f4 <mrqmin+0x1c4>
lea    (%rbx,%rax,8),%rcx
cmp    %r13,%rcx
jbe    1371 <mrqmin+0x241>
lea    0x0(,%rax,8),%rcx
add    %r13,%rcx
cmp    %rbx,%rcx
jbe    1371 <mrqmin+0x241>
xor    %ecx,%ecx
mov    %rcx,%rdx
not    %rdx
add    %rax,%rdx
mov    %rax,%rdi
and    $0x3,%rdi
je     1326 <mrqmin+0x1f6>
nopl   0x0(%rax,%rax,1)
movsd  (%rbx,%rcx,8),%xmm0
movsd  %xmm0,0x0(%r13,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rdi
jne    1310 <mrqmin+0x1e0>
cmp    $0x3,%rdx
jb     1458 <mrqmin+0x328>
movsd  (%rbx,%rcx,8),%xmm0
movsd  %xmm0,0x0(%r13,%rcx,8)
movsd  0x8(%rbx,%rcx,8),%xmm0
movsd  %xmm0,0x8(%r13,%rcx,8)
movsd  0x10(%rbx,%rcx,8),%xmm0
movsd  %xmm0,0x10(%r13,%rcx,8)
movsd  0x18(%rbx,%rcx,8),%xmm0
movsd  %xmm0,0x18(%r13,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%rax
jne    1330 <mrqmin+0x200>
jmp    1458 <mrqmin+0x328>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
lea    -0x4(%rcx),%rdi
mov    %rdi,%rdx
shr    $0x2,%rdx
add    $0x1,%rdx
mov    %edx,%r8d
and    $0x3,%r8d
cmp    $0xc,%rdi
jae    1396 <mrqmin+0x266>
xor    %edi,%edi
jmp    1405 <mrqmin+0x2d5>
and    $0xfffffffffffffffc,%rdx
xor    %edi,%edi
nopl   0x0(%rax)
movups (%rbx,%rdi,8),%xmm0
movups 0x10(%rbx,%rdi,8),%xmm1
movups %xmm0,0x0(%r13,%rdi,8)
movups %xmm1,0x10(%r13,%rdi,8)
movups 0x20(%rbx,%rdi,8),%xmm0
movups 0x30(%rbx,%rdi,8),%xmm1
movups %xmm0,0x20(%r13,%rdi,8)
movups %xmm1,0x30(%r13,%rdi,8)
movups 0x40(%rbx,%rdi,8),%xmm0
movups 0x50(%rbx,%rdi,8),%xmm1
movups %xmm0,0x40(%r13,%rdi,8)
movups %xmm1,0x50(%r13,%rdi,8)
movupd 0x60(%rbx,%rdi,8),%xmm0
movupd 0x70(%rbx,%rdi,8),%xmm1
movupd %xmm0,0x60(%r13,%rdi,8)
movupd %xmm1,0x70(%r13,%rdi,8)
add    $0x10,%rdi
add    $0xfffffffffffffffc,%rdx
jne    13a0 <mrqmin+0x270>
test   %r8,%r8
je     144f <mrqmin+0x31f>
lea    0x10(,%rdi,8),%rdx
add    %r13,%rdx
lea    (%rbx,%rdi,8),%rdi
add    $0x10,%rdi
shl    $0x5,%r8
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movupd -0x10(%rdi,%rbp,1),%xmm0
movupd (%rdi,%rbp,1),%xmm1
movupd %xmm0,-0x10(%rdx,%rbp,1)
movupd %xmm1,(%rdx,%rbp,1)
add    $0x20,%rbp
cmp    %rbp,%r8
jne    1430 <mrqmin+0x300>
cmp    %rax,%rcx
jne    12f6 <mrqmin+0x1c6>
mov    %r14,0x10(%rsp)
mov    %rbx,0xa0(%rsp)
test   %esi,%esi
jle    1683 <mrqmin+0x553>
mov    %esi,%eax
mov    %eax,%r11d
and    $0xfffffffc,%r11d
lea    -0x4(%r11),%rcx
mov    %rcx,0x40(%rsp)
shr    $0x2,%rcx
add    $0x1,%rcx
mov    %ecx,%r10d
and    $0x3,%r10d
and    $0xfffffffffffffffc,%rcx
mov    %rcx,0xa8(%rsp)
mov    %eax,%r8d
and    $0x3,%r8d
mov    %r10,0xb0(%rsp)
shl    $0x5,%r10
xor    %ebp,%ebp
movsd  0xb49(%rip),%xmm0
jmp    14f3 <mrqmin+0x3c3>
nopl   0x0(%rax)
mov    0x8(%rsp),%rcx
movsd  (%rcx),%xmm1
addsd  %xmm0,%xmm1
mulsd  (%r14,%rbp,8),%xmm1
movsd  %xmm1,(%rbx,%rbp,8)
movsd  (%r9,%rbp,8),%xmm1
mov    (%r15,%rbp,8),%rcx
movsd  %xmm1,(%rcx)
add    $0x1,%rbp
cmp    %rax,%rbp
je     1683 <mrqmin+0x553>
mov    0x30(%rsp),%rcx
mov    (%rcx,%rbp,8),%r14
mov    0x18(%rsp),%rcx
mov    (%rcx,%rbp,8),%rbx
cmp    $0x4,%esi
jb     1524 <mrqmin+0x3f4>
lea    (%r14,%rax,8),%rcx
cmp    %rcx,%rbx
jae    15a0 <mrqmin+0x470>
lea    (%rbx,%rax,8),%rcx
cmp    %rcx,%r14
jae    15a0 <mrqmin+0x470>
xor    %ecx,%ecx
mov    %rcx,%rdx
not    %rdx
add    %rax,%rdx
test   %r8,%r8
je     1555 <mrqmin+0x425>
mov    %r8,%rdi
nopw   0x0(%rax,%rax,1)
movsd  (%r14,%rcx,8),%xmm1
movsd  %xmm1,(%rbx,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rdi
jne    1540 <mrqmin+0x410>
cmp    $0x3,%rdx
jb     14c0 <mrqmin+0x390>
nop
movsd  (%r14,%rcx,8),%xmm1
movsd  %xmm1,(%rbx,%rcx,8)
movsd  0x8(%r14,%rcx,8),%xmm1
movsd  %xmm1,0x8(%rbx,%rcx,8)
movsd  0x10(%r14,%rcx,8),%xmm1
movsd  %xmm1,0x10(%rbx,%rcx,8)
movsd  0x18(%r14,%rcx,8),%xmm1
movsd  %xmm1,0x18(%rbx,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%rax
jne    1560 <mrqmin+0x430>
jmp    14c0 <mrqmin+0x390>
cmpq   $0xc,0x40(%rsp)
jae    15ac <mrqmin+0x47c>
xor    %ecx,%ecx
jmp    1622 <mrqmin+0x4f2>
mov    0xa8(%rsp),%r9
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
movups (%r14,%rcx,8),%xmm1
movups 0x10(%r14,%rcx,8),%xmm2
movups %xmm1,(%rbx,%rcx,8)
movups %xmm2,0x10(%rbx,%rcx,8)
movups 0x20(%r14,%rcx,8),%xmm1
movups 0x30(%r14,%rcx,8),%xmm2
movups %xmm1,0x20(%rbx,%rcx,8)
movups %xmm2,0x30(%rbx,%rcx,8)
movups 0x40(%r14,%rcx,8),%xmm1
movups 0x50(%r14,%rcx,8),%xmm2
movups %xmm1,0x40(%rbx,%rcx,8)
movups %xmm2,0x50(%rbx,%rcx,8)
movupd 0x60(%r14,%rcx,8),%xmm1
movups 0x70(%r14,%rcx,8),%xmm2
movupd %xmm1,0x60(%rbx,%rcx,8)
movups %xmm2,0x70(%rbx,%rcx,8)
add    $0x10,%rcx
add    $0xfffffffffffffffc,%r9
jne    15c0 <mrqmin+0x490>
cmpq   $0x0,0xb0(%rsp)
mov    0x4(%rsp),%esi
je     166d <mrqmin+0x53d>
lea    (%rbx,%rcx,8),%rdx
add    $0x10,%rdx
lea    (%r14,%rcx,8),%rcx
add    $0x10,%rcx
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movupd -0x10(%rcx,%rdi,1),%xmm1
movups (%rcx,%rdi,1),%xmm2
movupd %xmm1,-0x10(%rdx,%rdi,1)
movups %xmm2,(%rdx,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%r10
jne    1650 <mrqmin+0x520>
mov    %r11,%rcx
cmp    %rax,%r11
mov    0x28(%rsp),%r9
je     14c0 <mrqmin+0x390>
jmp    1526 <mrqmin+0x3f6>
mov    0x18(%rsp),%rdi
mov    %r15,%rdx
mov    $0x1,%ecx
call   1030 <gaussj@plt>
test   %eax,%eax
mov    0x8(%rsp),%rbx
je     16a5 <mrqmin+0x575>
movq   $0x0,(%rbx)
mov    0x4(%rsp),%ecx
test   %ecx,%ecx
mov    0xa0(%rsp),%r14
jle    1757 <mrqmin+0x627>
mov    %ecx,%edi
lea    -0x1(%rdi),%rdx
mov    %edi,%eax
and    $0x3,%eax
cmp    $0x3,%rdx
jae    16ce <mrqmin+0x59e>
xor    %edx,%edx
jmp    1727 <mrqmin+0x5f7>
and    $0xfffffffc,%edi
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    (%r15,%rdx,8),%rsi
movsd  (%rsi),%xmm0
movsd  %xmm0,(%r12,%rdx,8)
mov    0x8(%r15,%rdx,8),%rsi
movsd  (%rsi),%xmm0
movsd  %xmm0,0x8(%r12,%rdx,8)
mov    0x10(%r15,%rdx,8),%rsi
movsd  (%rsi),%xmm0
movsd  %xmm0,0x10(%r12,%rdx,8)
mov    0x18(%r15,%rdx,8),%rsi
movsd  (%rsi),%xmm0
movsd  %xmm0,0x18(%r12,%rdx,8)
add    $0x4,%rdx
cmp    %rdx,%rdi
jne    16e0 <mrqmin+0x5b0>
test   %rax,%rax
je     1757 <mrqmin+0x627>
lea    (%r12,%rdx,8),%rbp
lea    (%r15,%rdx,8),%rdx
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
mov    (%rdx,%rsi,8),%rdi
movsd  (%rdi),%xmm0
movsd  %xmm0,0x0(%rbp,%rsi,8)
add    $0x1,%rsi
cmp    %rsi,%rax
jne    1740 <mrqmin+0x610>
movsd  (%rbx),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    17a6 <mrqmin+0x676>
jp     17a6 <mrqmin+0x676>
mov    0x18(%rsp),%rdi
mov    0x10(%rsp),%rbp
mov    %ebp,%esi
mov    0x38(%rsp),%rbx
mov    %rbx,%rdx
mov    %ecx,%r14d
call   1040 <covsrt@plt>
mov    0x30(%rsp),%rdi
mov    %ebp,%esi
mov    %rbx,%rdx
mov    %r14d,%ecx
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1040 <covsrt@plt>
cmpl   $0x0,0x10(%rsp)
mov    0x98(%rsp),%rbx
mov    0x90(%rsp),%rbp
mov    0x38(%rsp),%r9
jle    17f8 <mrqmin+0x6c8>
mov    0x10(%rsp),%rax
mov    %eax,%ecx
cmp    $0x1,%eax
jne    1b35 <mrqmin+0xa05>
xor    %eax,%eax
xor    %edx,%edx
test   $0x1,%cl
je     17f8 <mrqmin+0x6c8>
cmpl   $0x0,(%r9,%rax,4)
je     17f8 <mrqmin+0x6c8>
movsd  (%r14,%rax,8),%xmm0
movslq %edx,%rcx
addsd  (%r12,%rcx,8),%xmm0
movsd  %xmm0,0x0(%r13,%rax,8)
mov    0x70(%rsp),%rdi
mov    0x78(%rsp),%rsi
mov    0x80(%rsp),%rdx
mov    0x24(%rsp),%ecx
mov    %r13,%r8
push   0x88(%rsp)
push   0x70(%rsp)
push   0x58(%rsp)
push   0x68(%rsp)
push   0x78(%rsp)
push   0x88(%rsp)
push   %rbp
push   %r12
push   0x58(%rsp)
push   0x58(%rsp)
call   1050 <mrqcof@plt>
add    $0x50,%rsp
movsd  (%rbx),%xmm0
ucomisd 0x0(%rbp),%xmm0
mov    0x8(%rsp),%rax
movsd  (%rax),%xmm0
jbe    1a4f <mrqmin+0x91f>
mulsd  0x7ad(%rip),%xmm0
movsd  %xmm0,(%rax)
movsd  0x0(%rbp),%xmm0
movsd  %xmm0,(%rbx)
cmpl   $0x0,0x4(%rsp)
jle    1a69 <mrqmin+0x939>
mov    0x4(%rsp),%eax
mov    %eax,%r11d
and    $0xfffffffc,%r11d
lea    -0x4(%r11),%rcx
mov    %rcx,0x8(%rsp)
shr    $0x2,%rcx
add    $0x1,%rcx
mov    %ecx,%r9d
and    $0x3,%r9d
and    $0xfffffffffffffffc,%rcx
mov    %rcx,0x40(%rsp)
mov    %eax,%r8d
and    $0x3,%r8d
mov    %r9,%r10
shl    $0x5,%r10
xor    %edx,%edx
jmp    18dd <mrqmin+0x7ad>
nopl   0x0(%rax)
movsd  (%r12,%rdx,8),%xmm0
mov    0x28(%rsp),%rcx
movsd  %xmm0,(%rcx,%rdx,8)
add    $0x1,%rdx
cmp    %rax,%rdx
je     1a69 <mrqmin+0x939>
mov    0x18(%rsp),%rcx
mov    (%rcx,%rdx,8),%rbx
mov    0x30(%rsp),%rcx
mov    (%rcx,%rdx,8),%rsi
cmpl   $0x4,0x4(%rsp)
jb     190c <mrqmin+0x7dc>
lea    (%rbx,%rax,8),%rcx
cmp    %rcx,%rsi
jae    1980 <mrqmin+0x850>
lea    (%rsi,%rax,8),%rcx
cmp    %rcx,%rbx
jae    1980 <mrqmin+0x850>
xor    %ecx,%ecx
mov    %rcx,%rbp
not    %rbp
add    %rax,%rbp
test   %r8,%r8
je     1934 <mrqmin+0x804>
mov    %r8,%r15
nop
movsd  (%rbx,%rcx,8),%xmm0
movsd  %xmm0,(%rsi,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%r15
jne    1920 <mrqmin+0x7f0>
cmp    $0x3,%rbp
jb     18c0 <mrqmin+0x790>
nopw   0x0(%rax,%rax,1)
movsd  (%rbx,%rcx,8),%xmm0
movsd  %xmm0,(%rsi,%rcx,8)
movsd  0x8(%rbx,%rcx,8),%xmm0
movsd  %xmm0,0x8(%rsi,%rcx,8)
movsd  0x10(%rbx,%rcx,8),%xmm0
movsd  %xmm0,0x10(%rsi,%rcx,8)
movsd  0x18(%rbx,%rcx,8),%xmm0
movsd  %xmm0,0x18(%rsi,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%rax
jne    1940 <mrqmin+0x810>
jmp    18c0 <mrqmin+0x790>
nopl   0x0(%rax)
cmpq   $0xc,0x8(%rsp)
jae    198c <mrqmin+0x85c>
xor    %ecx,%ecx
jmp    19fa <mrqmin+0x8ca>
mov    0x40(%rsp),%rbp
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movups (%rbx,%rcx,8),%xmm0
movups 0x10(%rbx,%rcx,8),%xmm1
movups %xmm0,(%rsi,%rcx,8)
movups %xmm1,0x10(%rsi,%rcx,8)
movups 0x20(%rbx,%rcx,8),%xmm0
movups 0x30(%rbx,%rcx,8),%xmm1
movups %xmm0,0x20(%rsi,%rcx,8)
movups %xmm1,0x30(%rsi,%rcx,8)
movups 0x40(%rbx,%rcx,8),%xmm0
movups 0x50(%rbx,%rcx,8),%xmm1
movups %xmm0,0x40(%rsi,%rcx,8)
movups %xmm1,0x50(%rsi,%rcx,8)
movups 0x60(%rbx,%rcx,8),%xmm0
movupd 0x70(%rbx,%rcx,8),%xmm1
movups %xmm0,0x60(%rsi,%rcx,8)
movupd %xmm1,0x70(%rsi,%rcx,8)
add    $0x10,%rcx
add    $0xfffffffffffffffc,%rbp
jne    19a0 <mrqmin+0x870>
test   %r9,%r9
je     1a3e <mrqmin+0x90e>
lea    (%rsi,%rcx,8),%rbp
add    $0x10,%rbp
lea    (%rbx,%rcx,8),%rcx
add    $0x10,%rcx
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movups -0x10(%rcx,%rdi,1),%xmm0
movupd (%rcx,%rdi,1),%xmm1
movups %xmm0,-0x10(%rbp,%rdi,1)
movupd %xmm1,0x0(%rbp,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%r10
jne    1a20 <mrqmin+0x8f0>
mov    %r11,%rcx
cmp    %rax,%r11
je     18c0 <mrqmin+0x790>
jmp    190e <mrqmin+0x7de>
mulsd  0x5b1(%rip),%xmm0
movsd  %xmm0,(%rax)
movsd  (%rbx),%xmm0
movsd  %xmm0,0x0(%rbp)
jmp    1c76 <mrqmin+0xb46>
mov    0x10(%rsp),%rcx
test   %ecx,%ecx
jle    1c76 <mrqmin+0xb46>
mov    %ecx,%eax
cmp    $0x4,%ecx
jb     1a9e <mrqmin+0x96e>
lea    0x0(,%rax,8),%rcx
add    %r13,%rcx
cmp    %r14,%rcx
jbe    1b91 <mrqmin+0xa61>
lea    (%r14,%rax,8),%rcx
cmp    %r13,%rcx
jbe    1b91 <mrqmin+0xa61>
xor    %ecx,%ecx
mov    %rcx,%rdx
not    %rdx
add    %rax,%rdx
mov    %rax,%rsi
and    $0x3,%rsi
je     1ad7 <mrqmin+0x9a7>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  0x0(%r13,%rcx,8),%xmm0
movsd  %xmm0,(%r14,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rsi
jne    1ac0 <mrqmin+0x990>
cmp    $0x3,%rdx
jb     1c76 <mrqmin+0xb46>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  0x0(%r13,%rcx,8),%xmm0
movsd  %xmm0,(%r14,%rcx,8)
movsd  0x8(%r13,%rcx,8),%xmm0
movsd  %xmm0,0x8(%r14,%rcx,8)
movsd  0x10(%r13,%rcx,8),%xmm0
movsd  %xmm0,0x10(%r14,%rcx,8)
movsd  0x18(%r13,%rcx,8),%xmm0
movsd  %xmm0,0x18(%r14,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%rax
jne    1af0 <mrqmin+0x9c0>
jmp    1c76 <mrqmin+0xb46>
mov    %ecx,%esi
and    $0xfffffffe,%esi
xor    %eax,%eax
xor    %edx,%edx
jmp    1b4d <mrqmin+0xa1d>
add    $0x2,%rax
cmp    %rax,%rsi
je     17d6 <mrqmin+0x6a6>
cmpl   $0x0,(%r9,%rax,4)
je     1b6d <mrqmin+0xa3d>
movsd  (%r14,%rax,8),%xmm0
movslq %edx,%rdi
add    $0x1,%edx
addsd  (%r12,%rdi,8),%xmm0
movsd  %xmm0,0x0(%r13,%rax,8)
cmpl   $0x0,0x4(%r9,%rax,4)
je     1b40 <mrqmin+0xa10>
movsd  0x8(%r14,%rax,8),%xmm0
movslq %edx,%rdi
add    $0x1,%edx
addsd  (%r12,%rdi,8),%xmm0
movsd  %xmm0,0x8(%r13,%rax,8)
jmp    1b40 <mrqmin+0xa10>
mov    %eax,%ecx
and    $0xfffffffc,%ecx
lea    -0x4(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x2,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x3,%edx
cmp    $0xc,%rdi
jae    1bb4 <mrqmin+0xa84>
xor    %edi,%edi
jmp    1c2b <mrqmin+0xafb>
and    $0xfffffffffffffffc,%rsi
xor    %edi,%edi
nopw   0x0(%rax,%rax,1)
movups 0x0(%r13,%rdi,8),%xmm0
movups 0x10(%r13,%rdi,8),%xmm1
movups %xmm0,(%r14,%rdi,8)
movups %xmm1,0x10(%r14,%rdi,8)
movups 0x20(%r13,%rdi,8),%xmm0
movups 0x30(%r13,%rdi,8),%xmm1
movups %xmm0,0x20(%r14,%rdi,8)
movups %xmm1,0x30(%r14,%rdi,8)
movups 0x40(%r13,%rdi,8),%xmm0
movups 0x50(%r13,%rdi,8),%xmm1
movups %xmm0,0x40(%r14,%rdi,8)
movups %xmm1,0x50(%r14,%rdi,8)
movups 0x60(%r13,%rdi,8),%xmm0
movupd 0x70(%r13,%rdi,8),%xmm1
movups %xmm0,0x60(%r14,%rdi,8)
movupd %xmm1,0x70(%r14,%rdi,8)
add    $0x10,%rdi
add    $0xfffffffffffffffc,%rsi
jne    1bc0 <mrqmin+0xa90>
test   %rdx,%rdx
je     1c6d <mrqmin+0xb3d>
lea    (%r14,%rdi,8),%rsi
add    $0x10,%rsi
lea    0x10(,%rdi,8),%rdi
add    %r13,%rdi
shl    $0x5,%rdx
xor    %ebp,%ebp
nopl   0x0(%rax)
movups -0x10(%rdi,%rbp,1),%xmm0
movupd (%rdi,%rbp,1),%xmm1
movups %xmm0,-0x10(%rsi,%rbp,1)
movupd %xmm1,(%rsi,%rbp,1)
add    $0x20,%rbp
cmp    %rbp,%rdx
jne    1c50 <mrqmin+0xb20>
cmp    %rax,%rcx
jne    1aa0 <mrqmin+0x970>
add    $0xb8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @mrqmin(double* %0, double* %1, double* %2, i32 %3, double* %4, i32* %5, i32 %6, double** %7, double** %8, double* %9, double* nocapture %10, void (double*, double*, double*, double**, i32, i32, i32, double*, double**, double*, double*, i32*, i8*)* %11, i32 %12, double** %13, double* %14, i32* %15, i32 %16, double* nocapture %17, double* %18, double* %19, double* %20, double** %21, i8* %22) {
%24 = load double, double* %10
%25 = fcmp olt double %24, 0.000000e+00
br i1 %25, label %26, label %154
26: ; preds = %23
store double 1.000000e-03, double* %10
tail call void @mrqcof(double* %0, double* %1, double* %2, i32 %3, double* %4, i32* %5, i32 %6, double** %8, double* %19, double* %9, void (double*, double*, double*, double**, i32, i32, i32, double*, double**, double*, double*, i32*, i8*)* %11, i32 %12, double** %13, double* %14, i32* %15, i8* %22)
%27 = load double, double* %9
store double %27, double* %17
%28 = icmp sgt i32 %6, 0
br i1 %28, label %29, label %154
29: ; preds = %26
%30 = zext i32 %6 to i64
%31 = icmp ult i32 %6, 4
br i1 %31, label %117, label %32
32: ; preds = %29
%33 = getelementptr double, double* %18, i64 %30
%34 = getelementptr double, double* %4, i64 %30
%35 = icmp ugt double* %34, %18
%36 = icmp ugt double* %33, %4
%37 = and i1 %35, %36
br i1 %37, label %117, label %38
38: ; preds = %32
%39 = and i64 %30, 4294967292
%40 = add nsw i64 %39, -4
%41 = lshr exact i64 %40, 2
%42 = add nuw nsw i64 %41, 1
%43 = and i64 %42, 3
%44 = icmp ult i64 %40, 12
br i1 %44, label %96, label %45
45: ; preds = %38
%46 = and i64 %42, 9223372036854775804
br label %47
47: ; preds = %47, %45
%48 = phi i64 [ 0, %45 ], [ %93, %47 ]
%49 = phi i64 [ 0, %45 ], [ %94, %47 ]
%50 = getelementptr inbounds double, double* %4, i64 %48
%51 = bitcast double* %50 to <2 x double>*
%52 = load <2 x double>, <2 x double>* %51
%53 = getelementptr inbounds double, double* %50, i64 2
%54 = bitcast double* %53 to <2 x double>*
%55 = load <2 x double>, <2 x double>* %54
%56 = getelementptr inbounds double, double* %18, i64 %48
%57 = bitcast double* %56 to <2 x double>*
store <2 x double> %52, <2 x double>* %57
%58 = getelementptr inbounds double, double* %56, i64 2
%59 = bitcast double* %58 to <2 x double>*
store <2 x double> %55, <2 x double>* %59
%60 = or i64 %48, 4
%61 = getelementptr inbounds double, double* %4, i64 %60
%62 = bitcast double* %61 to <2 x double>*
%63 = load <2 x double>, <2 x double>* %62
%64 = getelementptr inbounds double, double* %61, i64 2
%65 = bitcast double* %64 to <2 x double>*
%66 = load <2 x double>, <2 x double>* %65
%67 = getelementptr inbounds double, double* %18, i64 %60
%68 = bitcast double* %67 to <2 x double>*
store <2 x double> %63, <2 x double>* %68
%69 = getelementptr inbounds double, double* %67, i64 2
%70 = bitcast double* %69 to <2 x double>*
store <2 x double> %66, <2 x double>* %70
%71 = or i64 %48, 8
%72 = getelementptr inbounds double, double* %4, i64 %71
%73 = bitcast double* %72 to <2 x double>*
%74 = load <2 x double>, <2 x double>* %73
%75 = getelementptr inbounds double, double* %72, i64 2
%76 = bitcast double* %75 to <2 x double>*
%77 = load <2 x double>, <2 x double>* %76
%78 = getelementptr inbounds double, double* %18, i64 %71
%79 = bitcast double* %78 to <2 x double>*
store <2 x double> %74, <2 x double>* %79
%80 = getelementptr inbounds double, double* %78, i64 2
%81 = bitcast double* %80 to <2 x double>*
store <2 x double> %77, <2 x double>* %81
%82 = or i64 %48, 12
%83 = getelementptr inbounds double, double* %4, i64 %82
%84 = bitcast double* %83 to <2 x double>*
%85 = load <2 x double>, <2 x double>* %84
%86 = getelementptr inbounds double, double* %83, i64 2
%87 = bitcast double* %86 to <2 x double>*
%88 = load <2 x double>, <2 x double>* %87
%89 = getelementptr inbounds double, double* %18, i64 %82
%90 = bitcast double* %89 to <2 x double>*
store <2 x double> %85, <2 x double>* %90
%91 = getelementptr inbounds double, double* %89, i64 2
%92 = bitcast double* %91 to <2 x double>*
store <2 x double> %88, <2 x double>* %92
%93 = add nuw i64 %48, 16
%94 = add nuw i64 %49, 4
%95 = icmp eq i64 %94, %46
br i1 %95, label %96, label %47
96: ; preds = %47, %38
%97 = phi i64 [ 0, %38 ], [ %93, %47 ]
%98 = icmp eq i64 %43, 0
br i1 %98, label %115, label %99
99: ; preds = %96, %99
%100 = phi i64 [ %112, %99 ], [ %97, %96 ]
%101 = phi i64 [ %113, %99 ], [ 0, %96 ]
%102 = getelementptr inbounds double, double* %4, i64 %100
%103 = bitcast double* %102 to <2 x double>*
%104 = load <2 x double>, <2 x double>* %103
%105 = getelementptr inbounds double, double* %102, i64 2
%106 = bitcast double* %105 to <2 x double>*
%107 = load <2 x double>, <2 x double>* %106
%108 = getelementptr inbounds double, double* %18, i64 %100
%109 = bitcast double* %108 to <2 x double>*
store <2 x double> %104, <2 x double>* %109
%110 = getelementptr inbounds double, double* %108, i64 2
%111 = bitcast double* %110 to <2 x double>*
store <2 x double> %107, <2 x double>* %111
%112 = add nuw i64 %100, 4
%113 = add i64 %101, 1
%114 = icmp eq i64 %113, %43
br i1 %114, label %115, label %99
115: ; preds = %99, %96
%116 = icmp eq i64 %39, %30
br i1 %116, label %154, label %117
117: ; preds = %32, %29, %115
%118 = phi i64 [ 0, %32 ], [ 0, %29 ], [ %39, %115 ]
%119 = xor i64 %118, -1
%120 = add nsw i64 %119, %30
%121 = and i64 %30, 3
%122 = icmp eq i64 %121, 0
br i1 %122, label %132, label %123
123: ; preds = %117, %123
%124 = phi i64 [ %129, %123 ], [ %118, %117 ]
%125 = phi i64 [ %130, %123 ], [ 0, %117 ]
%126 = getelementptr inbounds double, double* %4, i64 %124
%127 = load double, double* %126
%128 = getelementptr inbounds double, double* %18, i64 %124
store double %127, double* %128
%129 = add nuw nsw i64 %124, 1
%130 = add i64 %125, 1
%131 = icmp eq i64 %130, %121
br i1 %131, label %132, label %123
132: ; preds = %123, %117
%133 = phi i64 [ %118, %117 ], [ %129, %123 ]
%134 = icmp ult i64 %120, 3
br i1 %134, label %154, label %135
135: ; preds = %132, %135
%136 = phi i64 [ %152, %135 ], [ %133, %132 ]
%137 = getelementptr inbounds double, double* %4, i64 %136
%138 = load double, double* %137
%139 = getelementptr inbounds double, double* %18, i64 %136
store double %138, double* %139
%140 = add nuw nsw i64 %136, 1
%141 = getelementptr inbounds double, double* %4, i64 %140
%142 = load double, double* %141
%143 = getelementptr inbounds double, double* %18, i64 %140
store double %142, double* %143
%144 = add nuw nsw i64 %136, 2
%145 = getelementptr inbounds double, double* %4, i64 %144
%146 = load double, double* %145
%147 = getelementptr inbounds double, double* %18, i64 %144
store double %146, double* %147
%148 = add nuw nsw i64 %136, 3
%149 = getelementptr inbounds double, double* %4, i64 %148
%150 = load double, double* %149
%151 = getelementptr inbounds double, double* %18, i64 %148
store double %150, double* %151
%152 = add nuw nsw i64 %136, 4
%153 = icmp eq i64 %152, %30
br i1 %153, label %154, label %135
154: ; preds = %132, %135, %115, %26, %23
%155 = icmp sgt i32 %16, 0
br i1 %155, label %156, label %300
156: ; preds = %154
%157 = zext i32 %16 to i64
%158 = and i64 %157, 4294967292
%159 = add nsw i64 %158, -4
%160 = lshr exact i64 %159, 2
%161 = add nuw nsw i64 %160, 1
%162 = icmp ult i32 %16, 4
%163 = and i64 %157, 4294967292
%164 = and i64 %161, 3
%165 = icmp ult i64 %159, 12
%166 = and i64 %161, 9223372036854775804
%167 = icmp eq i64 %164, 0
%168 = icmp eq i64 %163, %157
%169 = and i64 %157, 3
%170 = icmp eq i64 %169, 0
br label %171
171: ; preds = %287, %156
%172 = phi i64 [ 0, %156 ], [ %298, %287 ]
%173 = getelementptr inbounds double*, double** %8, i64 %172
%174 = load double*, double** %173
%175 = getelementptr inbounds double*, double** %7, i64 %172
%176 = load double*, double** %175
br i1 %162, label %252, label %177
177: ; preds = %171
%178 = getelementptr double, double* %176, i64 %157
%179 = getelementptr double, double* %174, i64 %157
%180 = icmp ult double* %176, %179
%181 = icmp ult double* %174, %178
%182 = and i1 %180, %181
br i1 %182, label %252, label %183
183: ; preds = %177
br i1 %165, label %233, label %184
184: ; preds = %183, %184
%185 = phi i64 [ %230, %184 ], [ 0, %183 ]
%186 = phi i64 [ %231, %184 ], [ 0, %183 ]
%187 = getelementptr inbounds double, double* %174, i64 %185
%188 = bitcast double* %187 to <2 x double>*
%189 = load <2 x double>, <2 x double>* %188
%190 = getelementptr inbounds double, double* %187, i64 2
%191 = bitcast double* %190 to <2 x double>*
%192 = load <2 x double>, <2 x double>* %191
%193 = getelementptr inbounds double, double* %176, i64 %185
%194 = bitcast double* %193 to <2 x double>*
store <2 x double> %189, <2 x double>* %194
%195 = getelementptr inbounds double, double* %193, i64 2
%196 = bitcast double* %195 to <2 x double>*
store <2 x double> %192, <2 x double>* %196
%197 = or i64 %185, 4
%198 = getelementptr inbounds double, double* %174, i64 %197
%199 = bitcast double* %198 to <2 x double>*
%200 = load <2 x double>, <2 x double>* %199
%201 = getelementptr inbounds double, double* %198, i64 2
%202 = bitcast double* %201 to <2 x double>*
%203 = load <2 x double>, <2 x double>* %202
%204 = getelementptr inbounds double, double* %176, i64 %197
%205 = bitcast double* %204 to <2 x double>*
store <2 x double> %200, <2 x double>* %205
%206 = getelementptr inbounds double, double* %204, i64 2
%207 = bitcast double* %206 to <2 x double>*
store <2 x double> %203, <2 x double>* %207
%208 = or i64 %185, 8
%209 = getelementptr inbounds double, double* %174, i64 %208
%210 = bitcast double* %209 to <2 x double>*
%211 = load <2 x double>, <2 x double>* %210
%212 = getelementptr inbounds double, double* %209, i64 2
%213 = bitcast double* %212 to <2 x double>*
%214 = load <2 x double>, <2 x double>* %213
%215 = getelementptr inbounds double, double* %176, i64 %208
%216 = bitcast double* %215 to <2 x double>*
store <2 x double> %211, <2 x double>* %216
%217 = getelementptr inbounds double, double* %215, i64 2
%218 = bitcast double* %217 to <2 x double>*
store <2 x double> %214, <2 x double>* %218
%219 = or i64 %185, 12
%220 = getelementptr inbounds double, double* %174, i64 %219
%221 = bitcast double* %220 to <2 x double>*
%222 = load <2 x double>, <2 x double>* %221
%223 = getelementptr inbounds double, double* %220, i64 2
%224 = bitcast double* %223 to <2 x double>*
%225 = load <2 x double>, <2 x double>* %224
%226 = getelementptr inbounds double, double* %176, i64 %219
%227 = bitcast double* %226 to <2 x double>*
store <2 x double> %222, <2 x double>* %227
%228 = getelementptr inbounds double, double* %226, i64 2
%229 = bitcast double* %228 to <2 x double>*
store <2 x double> %225, <2 x double>* %229
%230 = add nuw i64 %185, 16
%231 = add nuw i64 %186, 4
%232 = icmp eq i64 %231, %166
br i1 %232, label %233, label %184
233: ; preds = %184, %183
%234 = phi i64 [ 0, %183 ], [ %230, %184 ]
br i1 %167, label %251, label %235
235: ; preds = %233, %235
%236 = phi i64 [ %248, %235 ], [ %234, %233 ]
%237 = phi i64 [ %249, %235 ], [ 0, %233 ]
%238 = getelementptr inbounds double, double* %174, i64 %236
%239 = bitcast double* %238 to <2 x double>*
%240 = load <2 x double>, <2 x double>* %239
%241 = getelementptr inbounds double, double* %238, i64 2
%242 = bitcast double* %241 to <2 x double>*
%243 = load <2 x double>, <2 x double>* %242
%244 = getelementptr inbounds double, double* %176, i64 %236
%245 = bitcast double* %244 to <2 x double>*
store <2 x double> %240, <2 x double>* %245
%246 = getelementptr inbounds double, double* %244, i64 2
%247 = bitcast double* %246 to <2 x double>*
store <2 x double> %243, <2 x double>* %247
%248 = add nuw i64 %236, 4
%249 = add i64 %237, 1
%250 = icmp eq i64 %249, %164
br i1 %250, label %251, label %235
251: ; preds = %235, %233
br i1 %168, label %287, label %252
252: ; preds = %177, %171, %251
%253 = phi i64 [ 0, %177 ], [ 0, %171 ], [ %163, %251 ]
%254 = xor i64 %253, -1
%255 = add nsw i64 %254, %157
br i1 %170, label %265, label %256
256: ; preds = %252, %256
%257 = phi i64 [ %262, %256 ], [ %253, %252 ]
%258 = phi i64 [ %263, %256 ], [ 0, %252 ]
%259 = getelementptr inbounds double, double* %174, i64 %257
%260 = load double, double* %259
%261 = getelementptr inbounds double, double* %176, i64 %257
store double %260, double* %261
%262 = add nuw nsw i64 %257, 1
%263 = add i64 %258, 1
%264 = icmp eq i64 %263, %169
br i1 %264, label %265, label %256
265: ; preds = %256, %252
%266 = phi i64 [ %253, %252 ], [ %262, %256 ]
%267 = icmp ult i64 %255, 3
br i1 %267, label %287, label %268
268: ; preds = %265, %268
%269 = phi i64 [ %285, %268 ], [ %266, %265 ]
%270 = getelementptr inbounds double, double* %174, i64 %269
%271 = load double, double* %270
%272 = getelementptr inbounds double, double* %176, i64 %269
store double %271, double* %272
%273 = add nuw nsw i64 %269, 1
%274 = getelementptr inbounds double, double* %174, i64 %273
%275 = load double, double* %274
%276 = getelementptr inbounds double, double* %176, i64 %273
store double %275, double* %276
%277 = add nuw nsw i64 %269, 2
%278 = getelementptr inbounds double, double* %174, i64 %277
%279 = load double, double* %278
%280 = getelementptr inbounds double, double* %176, i64 %277
store double %279, double* %280
%281 = add nuw nsw i64 %269, 3
%282 = getelementptr inbounds double, double* %174, i64 %281
%283 = load double, double* %282
%284 = getelementptr inbounds double, double* %176, i64 %281
store double %283, double* %284
%285 = add nuw nsw i64 %269, 4
%286 = icmp eq i64 %285, %157
br i1 %286, label %287, label %268
287: ; preds = %265, %268, %251
%288 = getelementptr inbounds double, double* %174, i64 %172
%289 = load double, double* %288
%290 = load double, double* %10
%291 = fadd double %290, 1.000000e+00
%292 = fmul double %289, %291
%293 = getelementptr inbounds double, double* %176, i64 %172
store double %292, double* %293
%294 = getelementptr inbounds double, double* %19, i64 %172
%295 = load double, double* %294
%296 = getelementptr inbounds double*, double** %21, i64 %172
%297 = load double*, double** %296
store double %295, double* %297
%298 = add nuw nsw i64 %172, 1
%299 = icmp eq i64 %298, %157
br i1 %299, label %300, label %171
300: ; preds = %287, %154
%301 = tail call i32 @gaussj(double** %7, i32 %16, double** %21, i32 1)
%302 = icmp eq i32 %301, 0
br i1 %302, label %304, label %303
303: ; preds = %300
store double 0.000000e+00, double* %10
br label %304
304: ; preds = %303, %300
br i1 %155, label %305, label %350
305: ; preds = %304
%306 = zext i32 %16 to i64
%307 = add nsw i64 %306, -1
%308 = and i64 %306, 3
%309 = icmp ult i64 %307, 3
br i1 %309, label %337, label %310
310: ; preds = %305
%311 = and i64 %306, 4294967292
br label %312
312: ; preds = %312, %310
%313 = phi i64 [ 0, %310 ], [ %334, %312 ]
%314 = phi i64 [ 0, %310 ], [ %335, %312 ]
%315 = getelementptr inbounds double*, double** %21, i64 %313
%316 = load double*, double** %315
%317 = load double, double* %316
%318 = getelementptr inbounds double, double* %20, i64 %313
store double %317, double* %318
%319 = or i64 %313, 1
%320 = getelementptr inbounds double*, double** %21, i64 %319
%321 = load double*, double** %320
%322 = load double, double* %321
%323 = getelementptr inbounds double, double* %20, i64 %319
store double %322, double* %323
%324 = or i64 %313, 2
%325 = getelementptr inbounds double*, double** %21, i64 %324
%326 = load double*, double** %325
%327 = load double, double* %326
%328 = getelementptr inbounds double, double* %20, i64 %324
store double %327, double* %328
%329 = or i64 %313, 3
%330 = getelementptr inbounds double*, double** %21, i64 %329
%331 = load double*, double** %330
%332 = load double, double* %331
%333 = getelementptr inbounds double, double* %20, i64 %329
store double %332, double* %333
%334 = add nuw nsw i64 %313, 4
%335 = add i64 %314, 4
%336 = icmp eq i64 %335, %311
br i1 %336, label %337, label %312
337: ; preds = %312, %305
%338 = phi i64 [ 0, %305 ], [ %334, %312 ]
%339 = icmp eq i64 %308, 0
br i1 %339, label %350, label %340
340: ; preds = %337, %340
%341 = phi i64 [ %347, %340 ], [ %338, %337 ]
%342 = phi i64 [ %348, %340 ], [ 0, %337 ]
%343 = getelementptr inbounds double*, double** %21, i64 %341
%344 = load double*, double** %343
%345 = load double, double* %344
%346 = getelementptr inbounds double, double* %20, i64 %341
store double %345, double* %346
%347 = add nuw nsw i64 %341, 1
%348 = add i64 %342, 1
%349 = icmp eq i64 %348, %308
br i1 %349, label %350, label %340
350: ; preds = %337, %340, %304
%351 = load double, double* %10
%352 = fcmp oeq double %351, 0.000000e+00
br i1 %352, label %361, label %353
353: ; preds = %350
%354 = icmp sgt i32 %6, 0
br i1 %354, label %355, label %414
355: ; preds = %353
%356 = zext i32 %6 to i64
%357 = and i64 %356, 1
%358 = icmp eq i32 %6, 1
br i1 %358, label %398, label %359
359: ; preds = %355
%360 = and i64 %356, 4294967294
br label %362
361: ; preds = %350
tail call void @covsrt(double** %7, i32 %6, i32* %5, i32 %16)
tail call void @covsrt(double** %8, i32 %6, i32* %5, i32 %16)
br label %688
362: ; preds = %393, %359
%363 = phi i64 [ 0, %359 ], [ %395, %393 ]
%364 = phi i32 [ 0, %359 ], [ %394, %393 ]
%365 = phi i64 [ 0, %359 ], [ %396, %393 ]
%366 = getelementptr inbounds i32, i32* %5, i64 %363
%367 = load i32, i32* %366
%368 = icmp eq i32 %367, 0
br i1 %368, label %378, label %369
369: ; preds = %362
%370 = getelementptr inbounds double, double* %4, i64 %363
%371 = load double, double* %370
%372 = add nsw i32 %364, 1
%373 = sext i32 %364 to i64
%374 = getelementptr inbounds double, double* %20, i64 %373
%375 = load double, double* %374
%376 = fadd double %371, %375
%377 = getelementptr inbounds double, double* %18, i64 %363
store double %376, double* %377
br label %378
378: ; preds = %362, %369
%379 = phi i32 [ %372, %369 ], [ %364, %362 ]
%380 = or i64 %363, 1
%381 = getelementptr inbounds i32, i32* %5, i64 %380
%382 = load i32, i32* %381
%383 = icmp eq i32 %382, 0
br i1 %383, label %393, label %384
384: ; preds = %378
%385 = getelementptr inbounds double, double* %4, i64 %380
%386 = load double, double* %385
%387 = add nsw i32 %379, 1
%388 = sext i32 %379 to i64
%389 = getelementptr inbounds double, double* %20, i64 %388
%390 = load double, double* %389
%391 = fadd double %386, %390
%392 = getelementptr inbounds double, double* %18, i64 %380
store double %391, double* %392
br label %393
393: ; preds = %384, %378
%394 = phi i32 [ %387, %384 ], [ %379, %378 ]
%395 = add nuw nsw i64 %363, 2
%396 = add i64 %365, 2
%397 = icmp eq i64 %396, %360
br i1 %397, label %398, label %362
398: ; preds = %393, %355
%399 = phi i64 [ 0, %355 ], [ %395, %393 ]
%400 = phi i32 [ 0, %355 ], [ %394, %393 ]
%401 = icmp eq i64 %357, 0
br i1 %401, label %414, label %402
402: ; preds = %398
%403 = getelementptr inbounds i32, i32* %5, i64 %399
%404 = load i32, i32* %403
%405 = icmp eq i32 %404, 0
br i1 %405, label %414, label %406
406: ; preds = %402
%407 = getelementptr inbounds double, double* %4, i64 %399
%408 = load double, double* %407
%409 = sext i32 %400 to i64
%410 = getelementptr inbounds double, double* %20, i64 %409
%411 = load double, double* %410
%412 = fadd double %408, %411
%413 = getelementptr inbounds double, double* %18, i64 %399
store double %412, double* %413
br label %414
414: ; preds = %398, %406, %402, %353
tail call void @mrqcof(double* %0, double* %1, double* %2, i32 %3, double* %18, i32* %5, i32 %6, double** %7, double* %20, double* %9, void (double*, double*, double*, double**, i32, i32, i32, double*, double**, double*, double*, i32*, i8*)* %11, i32 %12, double** %13, double* %14, i32* %15, i8* %22)
%415 = load double, double* %9
%416 = load double, double* %17
%417 = fcmp olt double %415, %416
%418 = load double, double* %10
br i1 %417, label %419, label %685
419: ; preds = %414
%420 = fmul double %418, 1.000000e-01
store double %420, double* %10
%421 = load double, double* %9
store double %421, double* %17
br i1 %155, label %422, label %534
422: ; preds = %419
%423 = zext i32 %16 to i64
%424 = and i64 %423, 4294967292
%425 = add nsw i64 %424, -4
%426 = lshr exact i64 %425, 2
%427 = add nuw nsw i64 %426, 1
%428 = icmp ult i32 %16, 4
%429 = and i64 %423, 4294967292
%430 = and i64 %427, 3
%431 = icmp ult i64 %425, 12
%432 = and i64 %427, 9223372036854775804
%433 = icmp eq i64 %430, 0
%434 = icmp eq i64 %429, %423
%435 = and i64 %423, 3
%436 = icmp eq i64 %435, 0
br label %437
437: ; preds = %660, %422
%438 = phi i64 [ 0, %422 ], [ %664, %660 ]
%439 = getelementptr inbounds double*, double** %7, i64 %438
%440 = load double*, double** %439
%441 = getelementptr inbounds double*, double** %8, i64 %438
%442 = load double*, double** %441
br i1 %428, label %518, label %443
443: ; preds = %437
%444 = getelementptr double, double* %442, i64 %423
%445 = getelementptr double, double* %440, i64 %423
%446 = icmp ult double* %442, %445
%447 = icmp ult double* %440, %444
%448 = and i1 %446, %447
br i1 %448, label %518, label %449
449: ; preds = %443
br i1 %431, label %499, label %450
450: ; preds = %449, %450
%451 = phi i64 [ %496, %450 ], [ 0, %449 ]
%452 = phi i64 [ %497, %450 ], [ 0, %449 ]
%453 = getelementptr inbounds double, double* %440, i64 %451
%454 = bitcast double* %453 to <2 x double>*
%455 = load <2 x double>, <2 x double>* %454
%456 = getelementptr inbounds double, double* %453, i64 2
%457 = bitcast double* %456 to <2 x double>*
%458 = load <2 x double>, <2 x double>* %457
%459 = getelementptr inbounds double, double* %442, i64 %451
%460 = bitcast double* %459 to <2 x double>*
store <2 x double> %455, <2 x double>* %460
%461 = getelementptr inbounds double, double* %459, i64 2
%462 = bitcast double* %461 to <2 x double>*
store <2 x double> %458, <2 x double>* %462
%463 = or i64 %451, 4
%464 = getelementptr inbounds double, double* %440, i64 %463
%465 = bitcast double* %464 to <2 x double>*
%466 = load <2 x double>, <2 x double>* %465
%467 = getelementptr inbounds double, double* %464, i64 2
%468 = bitcast double* %467 to <2 x double>*
%469 = load <2 x double>, <2 x double>* %468
%470 = getelementptr inbounds double, double* %442, i64 %463
%471 = bitcast double* %470 to <2 x double>*
store <2 x double> %466, <2 x double>* %471
%472 = getelementptr inbounds double, double* %470, i64 2
%473 = bitcast double* %472 to <2 x double>*
store <2 x double> %469, <2 x double>* %473
%474 = or i64 %451, 8
%475 = getelementptr inbounds double, double* %440, i64 %474
%476 = bitcast double* %475 to <2 x double>*
%477 = load <2 x double>, <2 x double>* %476
%478 = getelementptr inbounds double, double* %475, i64 2
%479 = bitcast double* %478 to <2 x double>*
%480 = load <2 x double>, <2 x double>* %479
%481 = getelementptr inbounds double, double* %442, i64 %474
%482 = bitcast double* %481 to <2 x double>*
store <2 x double> %477, <2 x double>* %482
%483 = getelementptr inbounds double, double* %481, i64 2
%484 = bitcast double* %483 to <2 x double>*
store <2 x double> %480, <2 x double>* %484
%485 = or i64 %451, 12
%486 = getelementptr inbounds double, double* %440, i64 %485
%487 = bitcast double* %486 to <2 x double>*
%488 = load <2 x double>, <2 x double>* %487
%489 = getelementptr inbounds double, double* %486, i64 2
%490 = bitcast double* %489 to <2 x double>*
%491 = load <2 x double>, <2 x double>* %490
%492 = getelementptr inbounds double, double* %442, i64 %485
%493 = bitcast double* %492 to <2 x double>*
store <2 x double> %488, <2 x double>* %493
%494 = getelementptr inbounds double, double* %492, i64 2
%495 = bitcast double* %494 to <2 x double>*
store <2 x double> %491, <2 x double>* %495
%496 = add nuw i64 %451, 16
%497 = add nuw i64 %452, 4
%498 = icmp eq i64 %497, %432
br i1 %498, label %499, label %450
499: ; preds = %450, %449
%500 = phi i64 [ 0, %449 ], [ %496, %450 ]
br i1 %433, label %517, label %501
501: ; preds = %499, %501
%502 = phi i64 [ %514, %501 ], [ %500, %499 ]
%503 = phi i64 [ %515, %501 ], [ 0, %499 ]
%504 = getelementptr inbounds double, double* %440, i64 %502
%505 = bitcast double* %504 to <2 x double>*
%506 = load <2 x double>, <2 x double>* %505
%507 = getelementptr inbounds double, double* %504, i64 2
%508 = bitcast double* %507 to <2 x double>*
%509 = load <2 x double>, <2 x double>* %508
%510 = getelementptr inbounds double, double* %442, i64 %502
%511 = bitcast double* %510 to <2 x double>*
store <2 x double> %506, <2 x double>* %511
%512 = getelementptr inbounds double, double* %510, i64 2
%513 = bitcast double* %512 to <2 x double>*
store <2 x double> %509, <2 x double>* %513
%514 = add nuw i64 %502, 4
%515 = add i64 %503, 1
%516 = icmp eq i64 %515, %430
br i1 %516, label %517, label %501
517: ; preds = %501, %499
br i1 %434, label %660, label %518
518: ; preds = %443, %437, %517
%519 = phi i64 [ 0, %443 ], [ 0, %437 ], [ %429, %517 ]
%520 = xor i64 %519, -1
%521 = add nsw i64 %520, %423
br i1 %436, label %531, label %522
522: ; preds = %518, %522
%523 = phi i64 [ %528, %522 ], [ %519, %518 ]
%524 = phi i64 [ %529, %522 ], [ 0, %518 ]
%525 = getelementptr inbounds double, double* %440, i64 %523
%526 = load double, double* %525
%527 = getelementptr inbounds double, double* %442, i64 %523
store double %526, double* %527
%528 = add nuw nsw i64 %523, 1
%529 = add i64 %524, 1
%530 = icmp eq i64 %529, %435
br i1 %530, label %531, label %522
531: ; preds = %522, %518
%532 = phi i64 [ %519, %518 ], [ %528, %522 ]
%533 = icmp ult i64 %521, 3
br i1 %533, label %660, label %641
534: ; preds = %660, %419
br i1 %354, label %535, label %688
535: ; preds = %534
%536 = zext i32 %6 to i64
%537 = icmp ult i32 %6, 4
br i1 %537, label %623, label %538
538: ; preds = %535
%539 = getelementptr double, double* %4, i64 %536
%540 = getelementptr double, double* %18, i64 %536
%541 = icmp ugt double* %540, %4
%542 = icmp ugt double* %539, %18
%543 = and i1 %541, %542
br i1 %543, label %623, label %544
544: ; preds = %538
%545 = and i64 %536, 4294967292
%546 = add nsw i64 %545, -4
%547 = lshr exact i64 %546, 2
%548 = add nuw nsw i64 %547, 1
%549 = and i64 %548, 3
%550 = icmp ult i64 %546, 12
br i1 %550, label %602, label %551
551: ; preds = %544
%552 = and i64 %548, 9223372036854775804
br label %553
553: ; preds = %553, %551
%554 = phi i64 [ 0, %551 ], [ %599, %553 ]
%555 = phi i64 [ 0, %551 ], [ %600, %553 ]
%556 = getelementptr inbounds double, double* %18, i64 %554
%557 = bitcast double* %556 to <2 x double>*
%558 = load <2 x double>, <2 x double>* %557
%559 = getelementptr inbounds double, double* %556, i64 2
%560 = bitcast double* %559 to <2 x double>*
%561 = load <2 x double>, <2 x double>* %560
%562 = getelementptr inbounds double, double* %4, i64 %554
%563 = bitcast double* %562 to <2 x double>*
store <2 x double> %558, <2 x double>* %563
%564 = getelementptr inbounds double, double* %562, i64 2
%565 = bitcast double* %564 to <2 x double>*
store <2 x double> %561, <2 x double>* %565
%566 = or i64 %554, 4
%567 = getelementptr inbounds double, double* %18, i64 %566
%568 = bitcast double* %567 to <2 x double>*
%569 = load <2 x double>, <2 x double>* %568
%570 = getelementptr inbounds double, double* %567, i64 2
%571 = bitcast double* %570 to <2 x double>*
%572 = load <2 x double>, <2 x double>* %571
%573 = getelementptr inbounds double, double* %4, i64 %566
%574 = bitcast double* %573 to <2 x double>*
store <2 x double> %569, <2 x double>* %574
%575 = getelementptr inbounds double, double* %573, i64 2
%576 = bitcast double* %575 to <2 x double>*
store <2 x double> %572, <2 x double>* %576
%577 = or i64 %554, 8
%578 = getelementptr inbounds double, double* %18, i64 %577
%579 = bitcast double* %578 to <2 x double>*
%580 = load <2 x double>, <2 x double>* %579
%581 = getelementptr inbounds double, double* %578, i64 2
%582 = bitcast double* %581 to <2 x double>*
%583 = load <2 x double>, <2 x double>* %582
%584 = getelementptr inbounds double, double* %4, i64 %577
%585 = bitcast double* %584 to <2 x double>*
store <2 x double> %580, <2 x double>* %585
%586 = getelementptr inbounds double, double* %584, i64 2
%587 = bitcast double* %586 to <2 x double>*
store <2 x double> %583, <2 x double>* %587
%588 = or i64 %554, 12
%589 = getelementptr inbounds double, double* %18, i64 %588
%590 = bitcast double* %589 to <2 x double>*
%591 = load <2 x double>, <2 x double>* %590
%592 = getelementptr inbounds double, double* %589, i64 2
%593 = bitcast double* %592 to <2 x double>*
%594 = load <2 x double>, <2 x double>* %593
%595 = getelementptr inbounds double, double* %4, i64 %588
%596 = bitcast double* %595 to <2 x double>*
store <2 x double> %591, <2 x double>* %596
%597 = getelementptr inbounds double, double* %595, i64 2
%598 = bitcast double* %597 to <2 x double>*
store <2 x double> %594, <2 x double>* %598
%599 = add nuw i64 %554, 16
%600 = add nuw i64 %555, 4
%601 = icmp eq i64 %600, %552
br i1 %601, label %602, label %553
602: ; preds = %553, %544
%603 = phi i64 [ 0, %544 ], [ %599, %553 ]
%604 = icmp eq i64 %549, 0
br i1 %604, label %621, label %605
605: ; preds = %602, %605
%606 = phi i64 [ %618, %605 ], [ %603, %602 ]
%607 = phi i64 [ %619, %605 ], [ 0, %602 ]
%608 = getelementptr inbounds double, double* %18, i64 %606
%609 = bitcast double* %608 to <2 x double>*
%610 = load <2 x double>, <2 x double>* %609
%611 = getelementptr inbounds double, double* %608, i64 2
%612 = bitcast double* %611 to <2 x double>*
%613 = load <2 x double>, <2 x double>* %612
%614 = getelementptr inbounds double, double* %4, i64 %606
%615 = bitcast double* %614 to <2 x double>*
store <2 x double> %610, <2 x double>* %615
%616 = getelementptr inbounds double, double* %614, i64 2
%617 = bitcast double* %616 to <2 x double>*
store <2 x double> %613, <2 x double>* %617
%618 = add nuw i64 %606, 4
%619 = add i64 %607, 1
%620 = icmp eq i64 %619, %549
br i1 %620, label %621, label %605
621: ; preds = %605, %602
%622 = icmp eq i64 %545, %536
br i1 %622, label %688, label %623
623: ; preds = %538, %535, %621
%624 = phi i64 [ 0, %538 ], [ 0, %535 ], [ %545, %621 ]
%625 = xor i64 %624, -1
%626 = add nsw i64 %625, %536
%627 = and i64 %536, 3
%628 = icmp eq i64 %627, 0
br i1 %628, label %638, label %629
629: ; preds = %623, %629
%630 = phi i64 [ %635, %629 ], [ %624, %623 ]
%631 = phi i64 [ %636, %629 ], [ 0, %623 ]
%632 = getelementptr inbounds double, double* %18, i64 %630
%633 = load double, double* %632
%634 = getelementptr inbounds double, double* %4, i64 %630
store double %633, double* %634
%635 = add nuw nsw i64 %630, 1
%636 = add i64 %631, 1
%637 = icmp eq i64 %636, %627
br i1 %637, label %638, label %629
638: ; preds = %629, %623
%639 = phi i64 [ %624, %623 ], [ %635, %629 ]
%640 = icmp ult i64 %626, 3
br i1 %640, label %688, label %666
641: ; preds = %531, %641
%642 = phi i64 [ %658, %641 ], [ %532, %531 ]
%643 = getelementptr inbounds double, double* %440, i64 %642
%644 = load double, double* %643
%645 = getelementptr inbounds double, double* %442, i64 %642
store double %644, double* %645
%646 = add nuw nsw i64 %642, 1
%647 = getelementptr inbounds double, double* %440, i64 %646
%648 = load double, double* %647
%649 = getelementptr inbounds double, double* %442, i64 %646
store double %648, double* %649
%650 = add nuw nsw i64 %642, 2
%651 = getelementptr inbounds double, double* %440, i64 %650
%652 = load double, double* %651
%653 = getelementptr inbounds double, double* %442, i64 %650
store double %652, double* %653
%654 = add nuw nsw i64 %642, 3
%655 = getelementptr inbounds double, double* %440, i64 %654
%656 = load double, double* %655
%657 = getelementptr inbounds double, double* %442, i64 %654
store double %656, double* %657
%658 = add nuw nsw i64 %642, 4
%659 = icmp eq i64 %658, %423
br i1 %659, label %660, label %641
660: ; preds = %531, %641, %517
%661 = getelementptr inbounds double, double* %20, i64 %438
%662 = load double, double* %661
%663 = getelementptr inbounds double, double* %19, i64 %438
store double %662, double* %663
%664 = add nuw nsw i64 %438, 1
%665 = icmp eq i64 %664, %423
br i1 %665, label %534, label %437
666: ; preds = %638, %666
%667 = phi i64 [ %683, %666 ], [ %639, %638 ]
%668 = getelementptr inbounds double, double* %18, i64 %667
%669 = load double, double* %668
%670 = getelementptr inbounds double, double* %4, i64 %667
store double %669, double* %670
%671 = add nuw nsw i64 %667, 1
%672 = getelementptr inbounds double, double* %18, i64 %671
%673 = load double, double* %672
%674 = getelementptr inbounds double, double* %4, i64 %671
store double %673, double* %674
%675 = add nuw nsw i64 %667, 2
%676 = getelementptr inbounds double, double* %18, i64 %675
%677 = load double, double* %676
%678 = getelementptr inbounds double, double* %4, i64 %675
store double %677, double* %678
%679 = add nuw nsw i64 %667, 3
%680 = getelementptr inbounds double, double* %18, i64 %679
%681 = load double, double* %680
%682 = getelementptr inbounds double, double* %4, i64 %679
store double %681, double* %682
%683 = add nuw nsw i64 %667, 4
%684 = icmp eq i64 %683, %536
br i1 %684, label %688, label %666
685: ; preds = %414
%686 = fmul double %418, 1.000000e+01
store double %686, double* %10
%687 = load double, double* %17
store double %687, double* %9
br label %688
688: ; preds = %638, %666, %621, %534, %685, %361
ret void
}