void o_mrqmin(x, y, sig, ndata, a, ma, lista, mfit, covar, alpha, chisq, alamda,
              funcs) double **x,
    y[], sig[], a[], **covar, **alpha, *chisq, *alamda;
int ndata, ma, lista[], mfit;
void (*funcs)();
{
  int k, kk, j, ihit;
  static double *da, *atry, **oneda, *beta, ochisq;
  void o_mrqcof(), o_gaussj(), o_covsrt(), nrerror(), free_dmatrix(),
      free_dvector();
  if (*alamda < 0.0) {
    oneda = dmatrix(1, mfit, 1, 1);
    atry = dvector(1, ma);
    da = dvector(1, ma);
    beta = dvector(1, ma);
    kk = mfit + 1;
    for (j = 1; j <= ma; j++) {
      ihit = 0;
      for (k = 1; k <= mfit; k++)
        if (lista[k] == j)
          ihit++;
      if (ihit == 0)
        lista[kk++] = j;
      else if (ihit > 1)
        nrerror("Bad LISTA permutation in MRQMIN-1");
    }
    if (kk != ma + 1)
      nrerror("Bad LISTA permutation in MRQMIN-2");
    *alamda = 0.001;
    o_mrqcof(x, y, sig, ndata, a, ma, lista, mfit, alpha, beta, chisq, funcs);
    ochisq = (*chisq);
  }
  for (j = 1; j <= mfit; j++) {
    for (k = 1; k <= mfit; k++)
      covar[j][k] = alpha[j][k];
    covar[j][j] = alpha[j][j] * (1.0 + (*alamda));
    oneda[j][1] = beta[j];
  }
  o_gaussj(covar, mfit, oneda, 1);
  for (j = 1; j <= mfit; j++)
    da[j] = oneda[j][1];
  if (*alamda == 0.0) {
    o_covsrt(covar, ma, lista, mfit);
    free_dvector(beta, 1, ma);
    free_dvector(da, 1, ma);
    free_dvector(atry, 1, ma);
    free_dmatrix(oneda, 1, mfit, 1, 1);
    return;
  }
  for (j = 1; j <= ma; j++)
    atry[j] = a[j];
  for (j = 1; j <= mfit; j++)
    atry[lista[j]] = a[lista[j]] + da[j];
  o_mrqcof(x, y, sig, ndata, atry, ma, lista, mfit, covar, da, chisq, funcs);
  if (*chisq < ochisq) {
    *alamda *= 0.1;
    ochisq = (*chisq);
    for (j = 1; j <= mfit; j++) {
      for (k = 1; k <= mfit; k++)
        alpha[j][k] = covar[j][k];
      beta[j] = da[j];
      a[lista[j]] = atry[lista[j]];
    }
  } else {
    *alamda *= 10.0;
    *chisq = ochisq;
  }
  return;
}


x86 assembly (clang, -O0):
<o_mrqmin>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %rbx
sub    $0x78,%rsp
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%rax
mov    %rdi,-0x20(%rbp)
mov    %rsi,-0x28(%rbp)
mov    %rdx,-0x30(%rbp)
mov    %ecx,-0x34(%rbp)
mov    %r8,-0x40(%rbp)
mov    %r9d,-0x44(%rbp)
mov    0x38(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
jbe    1386 <o_mrqmin+0x206>
mov    0x18(%rbp),%esi
mov    $0x1,%ecx
mov    %ecx,%edi
mov    %ecx,%edx
mov    $0x0,%al
call   1060 <dmatrix@plt>
cltq
mov    %rax,0x2e8c(%rip)
mov    -0x44(%rbp),%esi
mov    $0x1,%edi
mov    $0x0,%al
call   1070 <dvector@plt>
cltq
mov    %rax,0x2e6c(%rip)
mov    -0x44(%rbp),%esi
mov    $0x1,%edi
mov    $0x0,%al
call   1070 <dvector@plt>
cltq
mov    %rax,0x2e4c(%rip)
mov    -0x44(%rbp),%esi
mov    $0x1,%edi
mov    $0x0,%al
call   1070 <dvector@plt>
cltq
mov    %rax,0x2e4c(%rip)
mov    0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
movl   $0x1,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x44(%rbp),%eax
jg     12f1 <o_mrqmin+0x171>
movl   $0x0,-0x54(%rbp)
movl   $0x1,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    0x18(%rbp),%eax
jg     129a <o_mrqmin+0x11a>
mov    0x10(%rbp),%rax
movslq -0x48(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x50(%rbp),%eax
jne    1287 <o_mrqmin+0x107>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    128c <o_mrqmin+0x10c>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    125e <o_mrqmin+0xde>
cmpl   $0x0,-0x54(%rbp)
jne    12c1 <o_mrqmin+0x141>
mov    -0x50(%rbp),%edx
mov    0x10(%rbp),%rax
mov    -0x4c(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x4c(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    12de <o_mrqmin+0x15e>
cmpl   $0x1,-0x54(%rbp)
jle    12d9 <o_mrqmin+0x159>
lea    0xd4e(%rip),%rdi
mov    $0x0,%al
call   1030 <nrerror@plt>
jmp    12de <o_mrqmin+0x15e>
jmp    12e3 <o_mrqmin+0x163>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1244 <o_mrqmin+0xc4>
mov    -0x4c(%rbp),%eax
mov    -0x44(%rbp),%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
je     1310 <o_mrqmin+0x190>
lea    0xd39(%rip),%rdi
mov    $0x0,%al
call   1030 <nrerror@plt>
mov    0x38(%rbp),%rax
movsd  0xce4(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rdi
mov    -0x28(%rbp),%rsi
mov    -0x30(%rbp),%rdx
mov    -0x34(%rbp),%ecx
mov    -0x40(%rbp),%r8
mov    -0x44(%rbp),%r9d
mov    0x10(%rbp),%r15
mov    0x18(%rbp),%r14d
mov    0x28(%rbp),%rbx
mov    0x2d36(%rip),%r11
mov    0x30(%rbp),%r10
mov    0x40(%rbp),%rax
mov    %r15,(%rsp)
mov    %r14d,0x8(%rsp)
mov    %rbx,0x10(%rsp)
mov    %r11,0x18(%rsp)
mov    %r10,0x20(%rsp)
mov    %rax,0x28(%rsp)
mov    $0x0,%al
call   1040 <o_mrqcof@plt>
mov    0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x2d02(%rip)
movl   $0x1,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    0x18(%rbp),%eax
jg     1454 <o_mrqmin+0x2d4>
movl   $0x1,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    0x18(%rbp),%eax
jg     13e4 <o_mrqmin+0x264>
mov    0x28(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x20(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    13a0 <o_mrqmin+0x220>
mov    0x28(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x38(%rbp),%rax
movsd  0xc13(%rip),%xmm1
addsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
mov    0x20(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x50(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x2c57(%rip),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2c3f(%rip),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    138d <o_mrqmin+0x20d>
mov    0x20(%rbp),%rdi
mov    0x18(%rbp),%esi
mov    0x2c16(%rip),%rdx
mov    $0x1,%ecx
mov    $0x0,%al
call   1050 <o_gaussj@plt>
movl   $0x1,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    0x18(%rbp),%eax
jg     14b3 <o_mrqmin+0x333>
mov    0x2bf0(%rip),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  0x8(%rax),%xmm0
mov    0x2bcc(%rip),%rax
movslq -0x50(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1475 <o_mrqmin+0x2f5>
mov    0x38(%rbp),%rax
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1547 <o_mrqmin+0x3c7>
jp     1547 <o_mrqmin+0x3c7>
mov    0x20(%rbp),%rdi
mov    -0x44(%rbp),%esi
mov    0x10(%rbp),%rdx
mov    0x18(%rbp),%ecx
mov    $0x0,%al
call   10a0 <o_covsrt@plt>
mov    0x2b96(%rip),%rdi
mov    -0x44(%rbp),%edx
mov    $0x1,%esi
mov    $0x0,%al
call   1080 <free_dvector@plt>
mov    0x2b68(%rip),%rdi
mov    -0x44(%rbp),%edx
mov    $0x1,%esi
mov    $0x0,%al
call   1080 <free_dvector@plt>
mov    0x2b5a(%rip),%rdi
mov    -0x44(%rbp),%edx
mov    $0x1,%esi
mov    $0x0,%al
call   1080 <free_dvector@plt>
mov    0x2b4c(%rip),%rdi
mov    0x18(%rbp),%edx
mov    $0x1,%r8d
mov    %r8d,%esi
mov    %r8d,%ecx
mov    $0x0,%al
call   1090 <free_dmatrix@plt>
jmp    1761 <o_mrqmin+0x5e1>
movl   $0x1,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x44(%rbp),%eax
jg     1585 <o_mrqmin+0x405>
mov    -0x40(%rbp),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2b02(%rip),%rax
movslq -0x50(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    154e <o_mrqmin+0x3ce>
movl   $0x1,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    0x18(%rbp),%eax
jg     15e3 <o_mrqmin+0x463>
mov    -0x40(%rbp),%rax
mov    0x10(%rbp),%rcx
movslq -0x50(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2ab4(%rip),%rax
movslq -0x50(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
mov    0x2aac(%rip),%rax
mov    0x10(%rbp),%rcx
movslq -0x50(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    158c <o_mrqmin+0x40c>
mov    -0x20(%rbp),%rdi
mov    -0x28(%rbp),%rsi
mov    -0x30(%rbp),%rdx
mov    -0x34(%rbp),%ecx
mov    0x2a77(%rip),%r8
mov    -0x44(%rbp),%r9d
mov    0x10(%rbp),%r15
mov    0x18(%rbp),%r14d
mov    0x20(%rbp),%rbx
mov    0x2a58(%rip),%r11
mov    0x30(%rbp),%r10
mov    0x40(%rbp),%rax
mov    %r15,(%rsp)
mov    %r14d,0x8(%rsp)
mov    %rbx,0x10(%rsp)
mov    %r11,0x18(%rsp)
mov    %r10,0x20(%rsp)
mov    %rax,0x28(%rsp)
mov    $0x0,%al
call   1040 <o_mrqcof@plt>
mov    0x30(%rbp),%rax
movsd  (%rax),%xmm1
movsd  0x2a3c(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1738 <o_mrqmin+0x5b8>
mov    0x38(%rbp),%rax
movsd  0x9ae(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    0x30(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x2a0e(%rip)
movl   $0x1,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    0x18(%rbp),%eax
jg     1733 <o_mrqmin+0x5b3>
movl   $0x1,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    0x18(%rbp),%eax
jg     16d8 <o_mrqmin+0x558>
mov    0x20(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x48(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1694 <o_mrqmin+0x514>
mov    0x2989(%rip),%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    0x2991(%rip),%rax
movslq -0x50(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    0x2971(%rip),%rax
mov    0x10(%rbp),%rcx
movslq -0x50(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x40(%rbp),%rax
mov    0x10(%rbp),%rcx
movslq -0x50(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1681 <o_mrqmin+0x501>
jmp    175c <o_mrqmin+0x5dc>
mov    0x38(%rbp),%rax
movsd  0x8c4(%rip),%xmm0
mulsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movsd  0x2934(%rip),%xmm0
mov    0x30(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1761 <o_mrqmin+0x5e1>
add    $0x78,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<o_mrqmin>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %r9,0x8(%rsp)
mov    %r8,%r13
mov    %ecx,0x44(%rsp)
mov    %rdx,0x68(%rsp)
mov    %rsi,0x60(%rsp)
mov    %rdi,0x58(%rsp)
mov    0xf0(%rsp),%rax
mov    %rax,0x70(%rsp)
mov    0xe8(%rsp),%rbx
mov    0xe0(%rsp),%rbp
mov    0xd8(%rsp),%r10
mov    0xd0(%rsp),%rdi
mov    0xc8(%rsp),%esi
mov    0xc0(%rsp),%r14
xorpd  %xmm0,%xmm0
ucomisd (%rbx),%xmm0
mov    %rdi,0x20(%rsp)
mov    %r10,0x10(%rsp)
mov    %rsi,0x18(%rsp)
mov    %rbp,0x78(%rsp)
mov    %rbx,0x38(%rsp)
jbe    14c9 <o_mrqmin+0x349>
mov    $0x1,%ebp
mov    $0x1,%edi
mov    $0x1,%edx
mov    $0x1,%ecx
xor    %eax,%eax
call   1060 <dmatrix@plt>
cltq
mov    %rax,0x2e45(%rip)
mov    $0x1,%edi
mov    0x8(%rsp),%rsi
xor    %eax,%eax
call   1070 <dvector@plt>
cltq
mov    %rax,0x2e23(%rip)
mov    $0x1,%edi
mov    0x8(%rsp),%rsi
xor    %eax,%eax
call   1070 <dvector@plt>
cltq
mov    %rax,0x2e01(%rip)
mov    $0x1,%edi
mov    0x8(%rsp),%rsi
xor    %eax,%eax
call   1070 <dvector@plt>
mov    0x8(%rsp),%rsi
mov    0x18(%rsp),%r11
cltq
mov    %rax,0x2df5(%rip)
lea    0x1(%r11),%r12d
test   %esi,%esi
jle    1437 <o_mrqmin+0x2b7>
mov    %r12d,%r15d
lea    -0x1(%r15),%rbx
lea    -0x9(%r15),%rax
mov    %rax,0x30(%rsp)
mov    %rax,%rcx
shr    $0x3,%rcx
add    $0x1,%rcx
mov    %rbx,%rax
and    $0xfffffffffffffff8,%rax
mov    %rax,0x50(%rsp)
add    $0x1,%rax
mov    %rax,0x48(%rsp)
mov    %rcx,%rax
mov    %rcx,0x28(%rsp)
and    $0xfffffffffffffffe,%rcx
mov    %rcx,0x80(%rsp)
mov    0x10(%rsp),%r10
jmp    1308 <o_mrqmin+0x188>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movslq %r12d,%rax
add    $0x1,%r12d
mov    %ebp,(%r14,%rax,4)
lea    0x1(%rbp),%eax
cmp    %esi,%ebp
mov    %eax,%ebp
je     143c <o_mrqmin+0x2bc>
test   %r11d,%r11d
jle    12f0 <o_mrqmin+0x170>
cmp    $0x8,%rbx
jae    1320 <o_mrqmin+0x1a0>
xor    %eax,%eax
mov    $0x1,%ecx
jmp    13f0 <o_mrqmin+0x270>
nop
movd   %ebp,%xmm0
pshufd $0x0,%xmm0,%xmm1
cmpq   $0x8,0x30(%rsp)
jae    133d <o_mrqmin+0x1bd>
pxor   %xmm0,%xmm0
xor    %eax,%eax
pxor   %xmm2,%xmm2
jmp    1396 <o_mrqmin+0x216>
pxor   %xmm0,%xmm0
mov    0x80(%rsp),%rcx
xor    %eax,%eax
pxor   %xmm2,%xmm2
nop
movdqu 0x4(%r14,%rax,4),%xmm3
movdqu 0x14(%r14,%rax,4),%xmm4
movdqu 0x24(%r14,%rax,4),%xmm5
movdqu 0x34(%r14,%rax,4),%xmm6
pcmpeqd %xmm1,%xmm3
psubd  %xmm3,%xmm0
pcmpeqd %xmm1,%xmm4
psubd  %xmm4,%xmm2
pcmpeqd %xmm1,%xmm5
psubd  %xmm5,%xmm0
pcmpeqd %xmm1,%xmm6
psubd  %xmm6,%xmm2
add    $0x10,%rax
add    $0xfffffffffffffffe,%rcx
jne    1350 <o_mrqmin+0x1d0>
testb  $0x1,0x28(%rsp)
je     13c2 <o_mrqmin+0x242>
shl    $0x2,%rax
or     $0x4,%rax
movdqu (%r14,%rax,1),%xmm3
movdqu 0x10(%r14,%rax,1),%xmm4
pcmpeqd %xmm1,%xmm3
psubd  %xmm3,%xmm0
pcmpeqd %xmm1,%xmm4
psubd  %xmm4,%xmm2
paddd  %xmm2,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%eax
mov    0x48(%rsp),%rcx
cmp    0x50(%rsp),%rbx
je     1404 <o_mrqmin+0x284>
nopl   0x0(%rax,%rax,1)
xor    %edx,%edx
cmp    %ebp,(%r14,%rcx,4)
sete   %dl
add    %edx,%eax
add    $0x1,%rcx
cmp    %rcx,%r15
jne    13f0 <o_mrqmin+0x270>
cmp    $0x1,%eax
je     12fb <o_mrqmin+0x17b>
test   %eax,%eax
je     12f0 <o_mrqmin+0x170>
lea    0xbfc(%rip),%rdi
xor    %eax,%eax
call   1030 <nrerror@plt>
mov    0x8(%rsp),%rsi
mov    0x18(%rsp),%r11
mov    0x10(%rsp),%r10
jmp    12fb <o_mrqmin+0x17b>
mov    0x10(%rsp),%r10
lea    0x1(%rsi),%eax
cmp    %eax,%r12d
je     145c <o_mrqmin+0x2dc>
lea    0xbef(%rip),%rdi
xor    %eax,%eax
call   1030 <nrerror@plt>
mov    0x18(%rsp),%r11
mov    0x10(%rsp),%r10
movabs $0x3f50624dd2f1a9fc,%rax
62 50 3f
mov    0x38(%rsp),%rbx
mov    %rax,(%rbx)
mov    0x58(%rsp),%rdi
mov    0x60(%rsp),%rsi
mov    0x68(%rsp),%rdx
mov    0x44(%rsp),%ecx
mov    %r13,%r8
mov    0x8(%rsp),%r9
xor    %eax,%eax
push   0x70(%rsp)
mov    0x80(%rsp),%rbp
push   %rbp
push   0x2be2(%rip)
push   %r10
push   %r11
push   %r14
call   1040 <o_mrqcof@plt>
mov    0x48(%rsp),%rsi
mov    0x40(%rsp),%r10
add    $0x30,%rsp
movsd  0x0(%rbp),%xmm0
movsd  %xmm0,0x2bc4(%rip)
mov    0x20(%rsp),%rdi
test   %esi,%esi
mov    %r13,0x48(%rsp)
jle    17c9 <o_mrqmin+0x649>
mov    0x2ba3(%rip),%r13
mov    0x2b94(%rip),%rdx
mov    %esi,%r12d
lea    0x1(%r12),%r15
lea    -0x4(%r12),%rax
mov    %rax,0x30(%rsp)
shr    $0x2,%rax
add    $0x1,%rax
mov    %r12d,%r11d
and    $0xfffffffc,%r11d
lea    0x1(%r11),%rcx
mov    %rcx,0x28(%rsp)
mov    %eax,%r9d
and    $0x3,%r9d
and    $0xfffffffffffffffc,%rax
mov    %rax,0x50(%rsp)
mov    $0x1,%ecx
movsd  0xad5(%rip),%xmm0
jmp    1565 <o_mrqmin+0x3e5>
nopl   (%rax)
mov    0x38(%rsp),%rax
movsd  (%rax),%xmm1
addsd  %xmm0,%xmm1
mulsd  (%r8,%rcx,8),%xmm1
movsd  %xmm1,(%rsi,%rcx,8)
movq   0x0(%r13,%rcx,8),%xmm1
mov    (%rdx,%rcx,8),%rax
movq   %xmm1,0x8(%rax)
add    $0x1,%rcx
cmp    %r15,%rcx
je     1700 <o_mrqmin+0x580>
mov    (%r10,%rcx,8),%r8
mov    (%rdi,%rcx,8),%rsi
mov    $0x1,%eax
cmp    $0x4,%r12d
jb     1680 <o_mrqmin+0x500>
lea    0x8(%rsi),%rax
lea    (%r8,%r15,8),%rbp
cmp    %rbp,%rax
jae    159f <o_mrqmin+0x41f>
lea    (%rsi,%r15,8),%rbp
lea    0x8(%r8),%rbx
mov    $0x1,%eax
cmp    %rbp,%rbx
jb     1680 <o_mrqmin+0x500>
cmpq   $0xc,0x30(%rsp)
jae    15ab <o_mrqmin+0x42b>
xor    %eax,%eax
jmp    1626 <o_mrqmin+0x4a6>
mov    0x50(%rsp),%r10
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movups 0x8(%r8,%rax,8),%xmm1
movups 0x18(%r8,%rax,8),%xmm2
movups %xmm1,0x8(%rsi,%rax,8)
movups %xmm2,0x18(%rsi,%rax,8)
movups 0x28(%r8,%rax,8),%xmm1
movups 0x38(%r8,%rax,8),%xmm2
movups %xmm1,0x28(%rsi,%rax,8)
movups %xmm2,0x38(%rsi,%rax,8)
movups 0x48(%r8,%rax,8),%xmm1
movups 0x58(%r8,%rax,8),%xmm2
movups %xmm1,0x48(%rsi,%rax,8)
movups %xmm2,0x58(%rsi,%rax,8)
movdqu 0x68(%r8,%rax,8),%xmm1
movdqu 0x78(%r8,%rax,8),%xmm2
movdqu %xmm1,0x68(%rsi,%rax,8)
movdqu %xmm2,0x78(%rsi,%rax,8)
add    $0x10,%rax
add    $0xfffffffffffffffc,%r10
jne    15c0 <o_mrqmin+0x440>
test   %r9,%r9
mov    0x20(%rsp),%rdi
mov    0x10(%rsp),%r10
je     166e <o_mrqmin+0x4ee>
mov    %r9,%rbp
nopl   0x0(%rax,%rax,1)
lea    0x0(,%rax,8),%rbx
or     $0x8,%rbx
movdqu (%r8,%rbx,1),%xmm1
movdqu 0x10(%r8,%rbx,1),%xmm2
movdqu %xmm1,(%rsi,%rbx,1)
movdqu %xmm2,0x10(%rsi,%rbx,1)
add    $0x4,%rax
add    $0xffffffffffffffff,%rbp
jne    1640 <o_mrqmin+0x4c0>
mov    0x28(%rsp),%rax
cmp    %r11,%r12
je     1530 <o_mrqmin+0x3b0>
nopl   0x0(%rax)
mov    %r15d,%ebp
sub    %eax,%ebp
mov    %rax,%rbx
not    %rbx
add    %r15,%rbx
and    $0x3,%rbp
je     16b5 <o_mrqmin+0x535>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movq   (%r8,%rax,8),%xmm1
movq   %xmm1,(%rsi,%rax,8)
add    $0x1,%rax
add    $0xffffffffffffffff,%rbp
jne    16a0 <o_mrqmin+0x520>
cmp    $0x3,%rbx
jb     1530 <o_mrqmin+0x3b0>
nop
movsd  (%r8,%rax,8),%xmm1
movsd  %xmm1,(%rsi,%rax,8)
movsd  0x8(%r8,%rax,8),%xmm1
movsd  %xmm1,0x8(%rsi,%rax,8)
movsd  0x10(%r8,%rax,8),%xmm1
movsd  %xmm1,0x10(%rsi,%rax,8)
movq   0x18(%r8,%rax,8),%xmm1
movq   %xmm1,0x18(%rsi,%rax,8)
add    $0x4,%rax
cmp    %rax,%r15
jne    16c0 <o_mrqmin+0x540>
jmp    1530 <o_mrqmin+0x3b0>
mov    0x18(%rsp),%rbx
mov    %ebx,%esi
mov    $0x1,%ecx
xor    %eax,%eax
call   1050 <o_gaussj@plt>
test   %ebx,%ebx
mov    0x48(%rsp),%r13
mov    0x8(%rsp),%r9
jle    17e6 <o_mrqmin+0x666>
mov    0x294c(%rip),%rcx
mov    0x2935(%rip),%rdx
add    $0xfffffffffffffffe,%r15
mov    %r12d,%eax
and    $0x3,%eax
mov    $0x1,%esi
cmp    $0x3,%r15
jb     179d <o_mrqmin+0x61d>
and    $0xfffffffc,%r12d
xor    %esi,%esi
xchg   %ax,%ax
mov    0x8(%rcx,%rsi,8),%rdi
movsd  0x8(%rdi),%xmm0
movsd  %xmm0,0x8(%rdx,%rsi,8)
mov    0x10(%rcx,%rsi,8),%rdi
movsd  0x8(%rdi),%xmm0
movsd  %xmm0,0x10(%rdx,%rsi,8)
mov    0x18(%rcx,%rsi,8),%rdi
movsd  0x8(%rdi),%xmm0
movsd  %xmm0,0x18(%rdx,%rsi,8)
mov    0x20(%rcx,%rsi,8),%rdi
movsd  0x8(%rdi),%xmm0
movsd  %xmm0,0x20(%rdx,%rsi,8)
add    $0x4,%rsi
cmp    %rsi,%r12
jne    1750 <o_mrqmin+0x5d0>
add    $0x1,%rsi
test   %rax,%rax
je     17e6 <o_mrqmin+0x666>
lea    (%rdx,%rsi,8),%rdx
lea    (%rcx,%rsi,8),%rcx
xor    %esi,%esi
nopl   0x0(%rax)
mov    (%rcx,%rsi,8),%rdi
movsd  0x8(%rdi),%xmm0
movsd  %xmm0,(%rdx,%rsi,8)
add    $0x1,%rsi
cmp    %rsi,%rax
jne    17b0 <o_mrqmin+0x630>
jmp    17e6 <o_mrqmin+0x666>
mov    0x28a8(%rip),%rdx
mov    $0x1,%ecx
xor    %eax,%eax
call   1050 <o_gaussj@plt>
mov    0x8(%rsp),%r9
mov    0x18(%rsp),%rbx
mov    0x38(%rsp),%r12
movsd  (%r12),%xmm0
pxor   %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    188c <o_mrqmin+0x70c>
jp     188c <o_mrqmin+0x70c>
mov    0x20(%rsp),%rdi
mov    %r9d,%esi
mov    %r14,%rdx
mov    %ebx,%ecx
xor    %eax,%eax
mov    %r9,%rbp
call   10a0 <o_covsrt@plt>
mov    0x285d(%rip),%rdi
mov    $0x1,%esi
mov    %ebp,%edx
xor    %eax,%eax
call   1080 <free_dvector@plt>
mov    0x2830(%rip),%rdi
mov    $0x1,%esi
mov    %ebp,%edx
xor    %eax,%eax
call   1080 <free_dvector@plt>
mov    0x2823(%rip),%rdi
mov    $0x1,%esi
mov    %ebp,%edx
xor    %eax,%eax
call   1080 <free_dvector@plt>
mov    0x2816(%rip),%rdi
mov    $0x1,%esi
mov    %ebx,%edx
mov    $0x1,%ecx
mov    $0x1,%r8d
xor    %eax,%eax
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1090 <free_dmatrix@plt>
test   %r9d,%r9d
mov    0x78(%rsp),%r15
jle    1a2c <o_mrqmin+0x8ac>
mov    0x27cf(%rip),%rax
mov    %r9d,%r8d
lea    0x1(%r8),%rcx
mov    $0x1,%edx
cmp    $0x4,%r9d
jb     19b8 <o_mrqmin+0x838>
lea    0x8(%rax),%rsi
lea    0x0(,%rcx,8),%rdi
add    %r13,%rdi
cmp    %rdi,%rsi
jae    18dc <o_mrqmin+0x75c>
lea    (%rax,%rcx,8),%rsi
lea    0x8(%r13),%rdi
cmp    %rsi,%rdi
jb     19b8 <o_mrqmin+0x838>
mov    %r8d,%edx
and    $0xfffffffc,%edx
lea    -0x4(%rdx),%rbp
mov    %rbp,%rdi
shr    $0x2,%rdi
add    $0x1,%rdi
mov    %edi,%esi
and    $0x3,%esi
cmp    $0xc,%rbp
jae    1900 <o_mrqmin+0x780>
xor    %ebp,%ebp
jmp    1976 <o_mrqmin+0x7f6>
and    $0xfffffffffffffffc,%rdi
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
movups 0x8(%r13,%rbp,8),%xmm0
movups 0x18(%r13,%rbp,8),%xmm1
movups %xmm0,0x8(%rax,%rbp,8)
movups %xmm1,0x18(%rax,%rbp,8)
movups 0x28(%r13,%rbp,8),%xmm0
movups 0x38(%r13,%rbp,8),%xmm1
movups %xmm0,0x28(%rax,%rbp,8)
movups %xmm1,0x38(%rax,%rbp,8)
movups 0x48(%r13,%rbp,8),%xmm0
movups 0x58(%r13,%rbp,8),%xmm1
movups %xmm0,0x48(%rax,%rbp,8)
movups %xmm1,0x58(%rax,%rbp,8)
movupd 0x68(%r13,%rbp,8),%xmm0
movupd 0x78(%r13,%rbp,8),%xmm1
movupd %xmm0,0x68(%rax,%rbp,8)
movupd %xmm1,0x78(%rax,%rbp,8)
add    $0x10,%rbp
add    $0xfffffffffffffffc,%rdi
jne    1910 <o_mrqmin+0x790>
test   %rsi,%rsi
je     19af <o_mrqmin+0x82f>
nopl   0x0(%rax,%rax,1)
lea    0x0(,%rbp,8),%rdi
or     $0x8,%rdi
movupd 0x0(%r13,%rdi,1),%xmm0
movupd 0x10(%r13,%rdi,1),%xmm1
movupd %xmm0,(%rax,%rdi,1)
movupd %xmm1,0x10(%rax,%rdi,1)
add    $0x4,%rbp
add    $0xffffffffffffffff,%rsi
jne    1980 <o_mrqmin+0x800>
cmp    %rdx,%r8
je     1a2c <o_mrqmin+0x8ac>
or     $0x1,%rdx
mov    %ecx,%edi
sub    %edx,%edi
mov    %rdx,%rsi
not    %rsi
add    %rcx,%rsi
and    $0x3,%rdi
je     19e6 <o_mrqmin+0x866>
nopl   0x0(%rax,%rax,1)
movsd  0x0(%r13,%rdx,8),%xmm0
movsd  %xmm0,(%rax,%rdx,8)
add    $0x1,%rdx
add    $0xffffffffffffffff,%rdi
jne    19d0 <o_mrqmin+0x850>
cmp    $0x3,%rsi
jb     1a2c <o_mrqmin+0x8ac>
nopl   0x0(%rax)
movsd  0x0(%r13,%rdx,8),%xmm0
movsd  %xmm0,(%rax,%rdx,8)
movsd  0x8(%r13,%rdx,8),%xmm0
movsd  %xmm0,0x8(%rax,%rdx,8)
movsd  0x10(%r13,%rdx,8),%xmm0
movsd  %xmm0,0x10(%rax,%rdx,8)
movsd  0x18(%r13,%rdx,8),%xmm0
movsd  %xmm0,0x18(%rax,%rdx,8)
add    $0x4,%rdx
cmp    %rdx,%rcx
jne    19f0 <o_mrqmin+0x870>
test   %ebx,%ebx
jle    1ac3 <o_mrqmin+0x943>
mov    0x262d(%rip),%rbp
mov    0x262e(%rip),%r8
mov    %ebx,%eax
mov    $0x1,%ecx
cmp    $0x1,%ebx
je     1aa1 <o_mrqmin+0x921>
mov    %eax,%edx
and    $0xfffffffe,%edx
neg    %rdx
mov    $0x1,%ecx
nopl   0x0(%rax,%rax,1)
movslq (%r14,%rcx,4),%rsi
movsd  0x0(%r13,%rsi,8),%xmm0
addsd  0x0(%rbp,%rcx,8),%xmm0
movsd  %xmm0,(%r8,%rsi,8)
movslq 0x4(%r14,%rcx,4),%rsi
movsd  0x0(%r13,%rsi,8),%xmm0
addsd  0x8(%rbp,%rcx,8),%xmm0
movsd  %xmm0,(%r8,%rsi,8)
lea    (%rdx,%rcx,1),%rsi
add    $0x2,%rsi
add    $0x2,%rcx
cmp    $0x1,%rsi
jne    1a60 <o_mrqmin+0x8e0>
test   $0x1,%al
mov    0x20(%rsp),%r10
je     1ad6 <o_mrqmin+0x956>
movslq (%r14,%rcx,4),%rax
movsd  0x0(%r13,%rax,8),%xmm0
addsd  0x0(%rbp,%rcx,8),%xmm0
movsd  %xmm0,(%r8,%rax,8)
jmp    1ad6 <o_mrqmin+0x956>
mov    0x25a6(%rip),%r8
mov    0x2597(%rip),%rbp
mov    0x20(%rsp),%r10
mov    0x58(%rsp),%rdi
mov    0x60(%rsp),%rsi
mov    0x68(%rsp),%rdx
mov    0x44(%rsp),%ecx
xor    %eax,%eax
push   0x70(%rsp)
push   %r15
push   %rbp
push   %r10
push   %rbx
push   %r14
call   1040 <o_mrqcof@plt>
add    $0x30,%rsp
movsd  0x2580(%rip),%xmm1
ucomisd (%r15),%xmm1
movsd  (%r12),%xmm0
jbe    1d74 <o_mrqmin+0xbf4>
mulsd  0x4ef(%rip),%xmm0
movsd  %xmm0,(%r12)
movsd  (%r15),%xmm0
movsd  %xmm0,0x2554(%rip)
test   %ebx,%ebx
jle    1d87 <o_mrqmin+0xc07>
mov    0x2525(%rip),%r12
mov    0x2536(%rip),%r9
mov    0x251f(%rip),%r8
mov    %ebx,%r11d
lea    0x1(%r11),%rdi
lea    -0x4(%r11),%rax
mov    %rax,0x38(%rsp)
shr    $0x2,%rax
add    $0x1,%rax
mov    %r11d,%ecx
and    $0xfffffffc,%ecx
mov    %rcx,0x8(%rsp)
add    $0x1,%rcx
mov    %rcx,0x30(%rsp)
mov    %eax,%r15d
and    $0x3,%r15d
and    $0xfffffffffffffffc,%rax
mov    %rax,0x28(%rsp)
mov    $0x1,%ebp
jmp    1bca <o_mrqmin+0xa4a>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%r12,%rbp,8),%xmm0
movsd  %xmm0,(%r9,%rbp,8)
movslq (%r14,%rbp,4),%rax
movsd  (%r8,%rax,8),%xmm0
movsd  %xmm0,0x0(%r13,%rax,8)
add    $0x1,%rbp
cmp    %rdi,%rbp
je     1d87 <o_mrqmin+0xc07>
mov    0x20(%rsp),%rax
mov    (%rax,%rbp,8),%rax
mov    0x10(%rsp),%rcx
mov    (%rcx,%rbp,8),%rcx
mov    $0x1,%r10d
cmp    $0x4,%r11d
jb     1cf0 <o_mrqmin+0xb70>
lea    0x8(%rcx),%rdx
lea    (%rax,%rdi,8),%rsi
cmp    %rsi,%rdx
jae    1c10 <o_mrqmin+0xa90>
lea    (%rcx,%rdi,8),%rdx
lea    0x8(%rax),%rsi
mov    $0x1,%r10d
cmp    %rdx,%rsi
jb     1cf0 <o_mrqmin+0xb70>
cmpq   $0xc,0x38(%rsp)
jae    1c1c <o_mrqmin+0xa9c>
xor    %edx,%edx
jmp    1c8e <o_mrqmin+0xb0e>
mov    0x28(%rsp),%rsi
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movups 0x8(%rax,%rdx,8),%xmm0
movups 0x18(%rax,%rdx,8),%xmm1
movups %xmm0,0x8(%rcx,%rdx,8)
movups %xmm1,0x18(%rcx,%rdx,8)
movups 0x28(%rax,%rdx,8),%xmm0
movups 0x38(%rax,%rdx,8),%xmm1
movups %xmm0,0x28(%rcx,%rdx,8)
movups %xmm1,0x38(%rcx,%rdx,8)
movups 0x48(%rax,%rdx,8),%xmm0
movups 0x58(%rax,%rdx,8),%xmm1
movups %xmm0,0x48(%rcx,%rdx,8)
movups %xmm1,0x58(%rcx,%rdx,8)
movupd 0x68(%rax,%rdx,8),%xmm0
movupd 0x78(%rax,%rdx,8),%xmm1
movupd %xmm0,0x68(%rcx,%rdx,8)
movupd %xmm1,0x78(%rcx,%rdx,8)
add    $0x10,%rdx
add    $0xfffffffffffffffc,%rsi
jne    1c30 <o_mrqmin+0xab0>
test   %r15,%r15
je     1ccc <o_mrqmin+0xb4c>
mov    %r15,%rsi
cs nopw 0x0(%rax,%rax,1)
lea    0x0(,%rdx,8),%rbx
or     $0x8,%rbx
movupd (%rax,%rbx,1),%xmm0
movupd 0x10(%rax,%rbx,1),%xmm1
movupd %xmm0,(%rcx,%rbx,1)
movupd %xmm1,0x10(%rcx,%rbx,1)
add    $0x4,%rdx
add    $0xffffffffffffffff,%rsi
jne    1ca0 <o_mrqmin+0xb20>
mov    0x30(%rsp),%r10
cmp    0x8(%rsp),%r11
mov    0x48(%rsp),%r13
je     1ba0 <o_mrqmin+0xa20>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %edi,%esi
sub    %r10d,%esi
mov    %r10,%rdx
not    %rdx
add    %rdi,%rdx
and    $0x3,%rsi
je     1d26 <o_mrqmin+0xba6>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%rax,%r10,8),%xmm0
movsd  %xmm0,(%rcx,%r10,8)
add    $0x1,%r10
add    $0xffffffffffffffff,%rsi
jne    1d10 <o_mrqmin+0xb90>
cmp    $0x3,%rdx
jb     1ba0 <o_mrqmin+0xa20>
movsd  (%rax,%r10,8),%xmm0
movsd  %xmm0,(%rcx,%r10,8)
movsd  0x8(%rax,%r10,8),%xmm0
movsd  %xmm0,0x8(%rcx,%r10,8)
movsd  0x10(%rax,%r10,8),%xmm0
movsd  %xmm0,0x10(%rcx,%r10,8)
movsd  0x18(%rax,%r10,8),%xmm0
movsd  %xmm0,0x18(%rcx,%r10,8)
add    $0x4,%r10
cmp    %r10,%rdi
jne    1d30 <o_mrqmin+0xbb0>
jmp    1ba0 <o_mrqmin+0xa20>
mulsd  0x28c(%rip),%xmm0
movsd  %xmm0,(%r12)
movsd  %xmm1,(%r15)
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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