#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, ...);
int /*<<< orphan*/ stderr;
void ldl_dcmp_pm(double **A, int n, double *d, double *b, double *x, double *c,
                 int *q, int *r, int reduce, int solve, int *pd) {
  int i, j, k, m;
  *pd = 0;
  if (reduce) {
    for (j = 1; j <= n; j++) {
      d[j] = 0.0;
      if (q[j]) {
        for (m = 1, i = 1; i < j; i++)
          if (A[i][j] == 0.0)
            ++m;
          else
            break;
        for (i = m; i < j; i++) {
          if (q[i]) {
            A[j][i] = A[i][j];
            for (k = m; k < i; k++)
              if (q[k])
                A[j][i] -= A[j][k] * A[i][k];
          }
        }
        d[j] = A[j][j];
        for (i = m; i < j; i++)
          if (q[i])
            d[j] -= A[j][i] * A[j][i] / d[i];
        for (i = m; i < j; i++)
          if (q[i])
            A[j][i] /= d[i];
        if (d[j] == 0.0) {
          fprintf(stderr, " ldl_dcmp_pm(): zero found on diagonal ...\n");
          fprintf(stderr, " d[%d] = %11.4e\n", j, d[j]);
          return;
        }
        if (d[j] < 0.0)
          (*pd)--;
      }
    }
  }
  if (solve) {
    for (i = 1; i <= n; i++) {
      if (q[i]) {
        x[i] = b[i];
        for (j = 1; j <= n; j++)
          if (r[j])
            x[i] -= A[i][j] * x[j];
      }
    }
    for (i = 1; i <= n; i++)
      if (q[i])
        for (j = 1; j < i; j++)
          if (q[j])
            x[i] -= A[i][j] * x[j];
    for (i = 1; i <= n; i++)
      if (q[i])
        x[i] /= d[i];
    for (i = n; i > 1; i--)
      if (q[i])
        for (j = 1; j < i; j++)
          if (q[j])
            x[j] -= A[i][j] * x[i];
    for (i = 1; i <= n; i++) {
      c[i] = 0.0;
      if (r[i]) {
        c[i] = -b[i];
        for (j = 1; j <= n; j++)
          c[i] += A[i][j] * x[j];
      }
    }
  }
  return;
}


x86 assembly (clang, -O0):
<ldl_dcmp_pm>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    0x30(%rbp),%rax
movl   $0x0,(%rax)
cmpl   $0x0,0x20(%rbp)
je     149b <ldl_dcmp_pm+0x38b>
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     1496 <ldl_dcmp_pm+0x386>
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1483 <ldl_dcmp_pm+0x373>
movl   $0x1,-0x40(%rbp)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    11f2 <ldl_dcmp_pm+0xe2>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11da <ldl_dcmp_pm+0xca>
jp     11da <ldl_dcmp_pm+0xca>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    11df <ldl_dcmp_pm+0xcf>
jmp    11f2 <ldl_dcmp_pm+0xe2>
jmp    11e4 <ldl_dcmp_pm+0xd4>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1198 <ldl_dcmp_pm+0x88>
mov    -0x40(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    12f2 <ldl_dcmp_pm+0x1e2>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     12df <ldl_dcmp_pm+0x1cf>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    12da <ldl_dcmp_pm+0x1ca>
mov    0x10(%rbp),%rax
movslq -0x3c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     12c7 <ldl_dcmp_pm+0x1b7>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x3c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm0,%rdx
movabs $0x8000000000000000,%rsi
xor    %rsi,%rdx
movq   %rdx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    12cc <ldl_dcmp_pm+0x1bc>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1246 <ldl_dcmp_pm+0x136>
jmp    12df <ldl_dcmp_pm+0x1cf>
jmp    12e4 <ldl_dcmp_pm+0x1d4>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    11f8 <ldl_dcmp_pm+0xe8>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x40(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    1398 <ldl_dcmp_pm+0x288>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1385 <ldl_dcmp_pm+0x275>
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm1
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm1
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    138a <ldl_dcmp_pm+0x27a>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    131a <ldl_dcmp_pm+0x20a>
mov    -0x40(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    13fa <ldl_dcmp_pm+0x2ea>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     13e7 <ldl_dcmp_pm+0x2d7>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    13ec <ldl_dcmp_pm+0x2dc>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    139e <ldl_dcmp_pm+0x28e>
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    145d <ldl_dcmp_pm+0x34d>
jp     145d <ldl_dcmp_pm+0x34d>
mov    0x2bbf(%rip),%rax
mov    (%rax),%edi
lea    0xbd6(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2ba8(%rip),%rax
mov    (%rax),%edi
mov    -0x38(%rbp),%edx
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xbdb(%rip),%rsi
mov    $0x1,%al
call   1030 <fprintf@plt>
jmp    1854 <ldl_dcmp_pm+0x744>
mov    -0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
xorps  %xmm0,%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    147e <ldl_dcmp_pm+0x36e>
mov    0x30(%rbp),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%rax)
jmp    1483 <ldl_dcmp_pm+0x373>
jmp    1488 <ldl_dcmp_pm+0x378>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    115c <ldl_dcmp_pm+0x4c>
jmp    149b <ldl_dcmp_pm+0x38b>
cmpl   $0x0,0x28(%rbp)
je     184f <ldl_dcmp_pm+0x73f>
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     1587 <ldl_dcmp_pm+0x477>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1574 <ldl_dcmp_pm+0x464>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     156f <ldl_dcmp_pm+0x45f>
mov    0x18(%rbp),%rax
movslq -0x38(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     155c <ldl_dcmp_pm+0x44c>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm0,%rdx
movabs $0x8000000000000000,%rsi
xor    %rsi,%rdx
movq   %rdx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1561 <ldl_dcmp_pm+0x451>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    14eb <ldl_dcmp_pm+0x3db>
jmp    1574 <ldl_dcmp_pm+0x464>
jmp    1579 <ldl_dcmp_pm+0x469>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    14ac <ldl_dcmp_pm+0x39c>
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     164f <ldl_dcmp_pm+0x53f>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     163c <ldl_dcmp_pm+0x52c>
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1637 <ldl_dcmp_pm+0x527>
mov    0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1624 <ldl_dcmp_pm+0x514>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm0,%rdx
movabs $0x8000000000000000,%rsi
xor    %rsi,%rdx
movq   %rdx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1629 <ldl_dcmp_pm+0x519>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    15b3 <ldl_dcmp_pm+0x4a3>
jmp    163c <ldl_dcmp_pm+0x52c>
jmp    1641 <ldl_dcmp_pm+0x531>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    158e <ldl_dcmp_pm+0x47e>
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     16aa <ldl_dcmp_pm+0x59a>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1697 <ldl_dcmp_pm+0x587>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    169c <ldl_dcmp_pm+0x58c>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1656 <ldl_dcmp_pm+0x546>
mov    -0xc(%rbp),%eax
mov    %eax,-0x34(%rbp)
cmpl   $0x1,-0x34(%rbp)
jle    176f <ldl_dcmp_pm+0x65f>
mov    0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     175c <ldl_dcmp_pm+0x64c>
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1757 <ldl_dcmp_pm+0x647>
mov    0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1744 <ldl_dcmp_pm+0x634>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movq   %xmm0,%rdx
movabs $0x8000000000000000,%rsi
xor    %rsi,%rdx
movq   %rdx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    1749 <ldl_dcmp_pm+0x639>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    16d3 <ldl_dcmp_pm+0x5c3>
jmp    175c <ldl_dcmp_pm+0x64c>
jmp    1761 <ldl_dcmp_pm+0x651>
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
jmp    16b0 <ldl_dcmp_pm+0x5a0>
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     184a <ldl_dcmp_pm+0x73a>
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1837 <ldl_dcmp_pm+0x727>
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x1,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     1832 <ldl_dcmp_pm+0x722>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    17dc <ldl_dcmp_pm+0x6cc>
jmp    1837 <ldl_dcmp_pm+0x727>
jmp    183c <ldl_dcmp_pm+0x72c>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1776 <ldl_dcmp_pm+0x666>
jmp    184f <ldl_dcmp_pm+0x73f>
jmp    1854 <ldl_dcmp_pm+0x744>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ldl_dcmp_pm>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %r9,0x20(%rsp)
mov    %rcx,0x18(%rsp)
mov    %rdx,%r14
mov    %rsi,(%rsp)
mov    0x90(%rsp),%rcx
mov    0x88(%rsp),%eax
mov    %eax,0x8(%rsp)
mov    0x78(%rsp),%rax
mov    0x70(%rsp),%rdx
mov    %rcx,0x30(%rsp)
movl   $0x0,(%rcx)
cmpl   $0x0,0x80(%rsp)
je     140b <ldl_dcmp_pm+0x2fb>
cmpl   $0x0,(%rsp)
jle    140b <ldl_dcmp_pm+0x2fb>
mov    (%rsp),%rcx
lea    0x1(%rcx),%r11d
mov    $0x1,%ebp
xor    %r12d,%r12d
xorpd  %xmm0,%xmm0
xor    %r13d,%r13d
xor    %r15d,%r15d
mov    %r11,0x28(%rsp)
jmp    11a5 <ldl_dcmp_pm+0x95>
add    $0x1,%rbp
add    $0x1,%r13
add    $0xffffffffffffffff,%r12
cmp    %r11,%rbp
je     140b <ldl_dcmp_pm+0x2fb>
movq   $0x0,(%r14,%rbp,8)
cmpl   $0x0,(%rdx,%rbp,4)
je     1190 <ldl_dcmp_pm+0x80>
mov    $0x1,%ebx
cmp    $0x2,%rbp
jb     11f6 <ldl_dcmp_pm+0xe6>
mov    $0x1,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    (%rdi,%rbx,8),%rcx
movsd  (%rcx,%rbp,8),%xmm1
ucomisd %xmm0,%xmm1
jne    11f6 <ldl_dcmp_pm+0xe6>
jp     11f6 <ldl_dcmp_pm+0xe6>
lea    (%r12,%rbx,1),%rcx
add    $0x1,%rcx
add    $0x1,%rbx
cmp    $0x1,%rcx
jne    11d0 <ldl_dcmp_pm+0xc0>
mov    %rbp,%rbx
mov    %ebx,%r9d
cmp    %r9,%rbp
jbe    12e0 <ldl_dcmp_pm+0x1d0>
mov    %r15d,0xc(%rsp)
lea    0x1(%r9),%rcx
mov    %rcx,0x10(%rsp)
xor    %r10d,%r10d
mov    %r9,%r11
jmp    1231 <ldl_dcmp_pm+0x121>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r11
add    $0x1,%r10
cmp    %rbp,%r11
je     1300 <ldl_dcmp_pm+0x1f0>
cmpl   $0x0,(%rdx,%r11,4)
je     1220 <ldl_dcmp_pm+0x110>
mov    (%rdi,%r11,8),%r15
movsd  (%r15,%rbp,8),%xmm1
mov    (%rdi,%rbp,8),%rsi
movsd  %xmm1,(%rsi,%r11,8)
cmp    %r11,%r9
jae    1220 <ldl_dcmp_pm+0x110>
test   $0x1,%r10b
jne    1262 <ldl_dcmp_pm+0x152>
mov    %r9,%rcx
cmp    $0x1,%r10
jne    1299 <ldl_dcmp_pm+0x189>
jmp    1220 <ldl_dcmp_pm+0x110>
cmpl   $0x0,(%rdx,%r9,4)
je     127f <ldl_dcmp_pm+0x16f>
movsd  (%rsi,%r9,8),%xmm2
mulsd  (%r15,%r9,8),%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,(%rsi,%r11,8)
mov    0x10(%rsp),%rcx
cmp    $0x1,%r10
jne    1299 <ldl_dcmp_pm+0x189>
jmp    1220 <ldl_dcmp_pm+0x110>
nopl   0x0(%rax)
add    $0x2,%rcx
cmp    %rcx,%r11
je     1220 <ldl_dcmp_pm+0x110>
cmpl   $0x0,(%rdx,%rcx,4)
je     12b4 <ldl_dcmp_pm+0x1a4>
movsd  (%rsi,%rcx,8),%xmm2
mulsd  (%r15,%rcx,8),%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,(%rsi,%r11,8)
cmpl   $0x0,0x4(%rdx,%rcx,4)
je     1290 <ldl_dcmp_pm+0x180>
movsd  0x8(%rsi,%rcx,8),%xmm2
mulsd  0x8(%r15,%rcx,8),%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,(%rsi,%r11,8)
jmp    1290 <ldl_dcmp_pm+0x180>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%rdi,%rbp,8),%rcx
movsd  (%rcx,%rbp,8),%xmm1
movsd  %xmm1,(%r14,%rbp,8)
jmp    13a0 <ldl_dcmp_pm+0x290>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%rdi,%rbp,8),%rsi
movsd  (%rsi,%rbp,8),%xmm1
movsd  %xmm1,(%r14,%rbp,8)
mov    %r9,%rcx
cmp    %r9,%rbp
mov    0x28(%rsp),%r11
mov    0xc(%rsp),%r15d
ja     1339 <ldl_dcmp_pm+0x229>
jmp    13a0 <ldl_dcmp_pm+0x290>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%rcx
cmp    %rcx,%rbp
je     135a <ldl_dcmp_pm+0x24a>
cmpl   $0x0,(%rdx,%rcx,4)
je     1330 <ldl_dcmp_pm+0x220>
movsd  (%rsi,%rcx,8),%xmm2
mulsd  %xmm2,%xmm2
divsd  (%r14,%rcx,8),%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,(%r14,%rbp,8)
jmp    1330 <ldl_dcmp_pm+0x220>
cmp    %r9,%rbp
jbe    13a0 <ldl_dcmp_pm+0x290>
mov    %ebp,%r10d
sub    %ebx,%r10d
mov    %r9,%rcx
test   $0x1,%r10b
je     138b <ldl_dcmp_pm+0x27b>
cmpl   $0x0,(%rdx,%r9,4)
je     1387 <ldl_dcmp_pm+0x277>
movsd  (%rsi,%r9,8),%xmm1
divsd  (%r14,%r9,8),%xmm1
movsd  %xmm1,(%rsi,%r9,8)
lea    0x1(%r9),%rcx
cmp    %r9,%r13
jne    13d9 <ldl_dcmp_pm+0x2c9>
movsd  (%r14,%rbp,8),%xmm1
cs nopw 0x0(%rax,%rax,1)
ucomisd %xmm0,%xmm1
jne    13ac <ldl_dcmp_pm+0x29c>
jnp    15d8 <ldl_dcmp_pm+0x4c8>
ucomisd %xmm1,%xmm0
jbe    1190 <ldl_dcmp_pm+0x80>
add    $0xffffffff,%r15d
mov    0x30(%rsp),%rcx
mov    %r15d,(%rcx)
jmp    1190 <ldl_dcmp_pm+0x80>
nopw   0x0(%rax,%rax,1)
add    $0x2,%rcx
cmp    %rcx,%rbp
je     1390 <ldl_dcmp_pm+0x280>
cmpl   $0x0,(%rdx,%rcx,4)
je     13ef <ldl_dcmp_pm+0x2df>
movsd  (%rsi,%rcx,8),%xmm1
divsd  (%r14,%rcx,8),%xmm1
movsd  %xmm1,(%rsi,%rcx,8)
cmpl   $0x0,0x4(%rdx,%rcx,4)
je     13d0 <ldl_dcmp_pm+0x2c0>
movsd  0x8(%rsi,%rcx,8),%xmm1
divsd  0x8(%r14,%rcx,8),%xmm1
movsd  %xmm1,0x8(%rsi,%rcx,8)
jmp    13d0 <ldl_dcmp_pm+0x2c0>
cmpl   $0x0,0x8(%rsp)
mov    0x20(%rsp),%r15
mov    0x18(%rsp),%r12
mov    (%rsp),%r13
je     1772 <ldl_dcmp_pm+0x662>
test   %r13d,%r13d
jle    1772 <ldl_dcmp_pm+0x662>
mov    %r13d,%r9d
lea    0x1(%r9),%r11
lea    -0x1(%r9),%r10
mov    %r9d,%ecx
and    $0xfffffffe,%ecx
neg    %rcx
mov    $0x1,%ebp
jmp    145d <ldl_dcmp_pm+0x34d>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rbp
cmp    %r11,%rbp
je     14f5 <ldl_dcmp_pm+0x3e5>
cmpl   $0x0,(%rdx,%rbp,4)
je     1450 <ldl_dcmp_pm+0x340>
movsd  (%r12,%rbp,8),%xmm0
movsd  %xmm0,(%r8,%rbp,8)
mov    $0x1,%ebx
test   %r10,%r10
jne    14b2 <ldl_dcmp_pm+0x3a2>
test   $0x1,%r9b
je     1450 <ldl_dcmp_pm+0x340>
cmpl   $0x0,(%rax,%rbx,4)
je     1450 <ldl_dcmp_pm+0x340>
mov    (%rdi,%rbp,8),%rsi
movsd  (%rsi,%rbx,8),%xmm1
mulsd  (%r8,%rbx,8),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%r8,%rbp,8)
jmp    1450 <ldl_dcmp_pm+0x340>
lea    (%rcx,%rbx,1),%rsi
add    $0x2,%rsi
add    $0x2,%rbx
cmp    $0x1,%rsi
je     1479 <ldl_dcmp_pm+0x369>
cmpl   $0x0,(%rax,%rbx,4)
je     14d1 <ldl_dcmp_pm+0x3c1>
mov    (%rdi,%rbp,8),%rsi
movsd  (%rsi,%rbx,8),%xmm1
mulsd  (%r8,%rbx,8),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%r8,%rbp,8)
cmpl   $0x0,0x4(%rax,%rbx,4)
je     14a0 <ldl_dcmp_pm+0x390>
mov    (%rdi,%rbp,8),%rsi
movsd  0x8(%rsi,%rbx,8),%xmm1
mulsd  0x8(%r8,%rbx,8),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%r8,%rbp,8)
jmp    14a0 <ldl_dcmp_pm+0x390>
test   %r13d,%r13d
jle    1772 <ldl_dcmp_pm+0x662>
lea    0x1(%r13),%r11d
mov    $0x1,%ecx
xor    %esi,%esi
jmp    151d <ldl_dcmp_pm+0x40d>
nopl   0x0(%rax,%rax,1)
add    $0x1,%rcx
add    $0x4,%rsi
cmp    %r11,%rcx
je     1563 <ldl_dcmp_pm+0x453>
cmpl   $0x0,(%rdx,%rcx,4)
je     1510 <ldl_dcmp_pm+0x400>
cmp    $0x2,%rcx
jb     1510 <ldl_dcmp_pm+0x400>
xor    %ebx,%ebx
jmp    1539 <ldl_dcmp_pm+0x429>
nopl   (%rax)
add    $0x4,%rbx
cmp    %rbx,%rsi
je     1510 <ldl_dcmp_pm+0x400>
cmpl   $0x0,0x4(%rdx,%rbx,1)
je     1530 <ldl_dcmp_pm+0x420>
mov    (%rdi,%rcx,8),%rbp
movsd  0x8(%rbp,%rbx,2),%xmm0
movsd  (%r8,%rcx,8),%xmm1
mulsd  0x8(%r8,%rbx,2),%xmm0
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r8,%rcx,8)
jmp    1530 <ldl_dcmp_pm+0x420>
test   %r13d,%r13d
jle    1772 <ldl_dcmp_pm+0x662>
test   %r10,%r10
je     1615 <ldl_dcmp_pm+0x505>
mov    %r9d,%esi
and    $0xfffffffe,%esi
neg    %rsi
mov    $0x1,%ecx
jmp    15a2 <ldl_dcmp_pm+0x492>
cs nopw 0x0(%rax,%rax,1)
nop
lea    (%rsi,%rcx,1),%rbx
add    $0x2,%rbx
add    $0x2,%rcx
cmp    $0x1,%rbx
je     161a <ldl_dcmp_pm+0x50a>
cmpl   $0x0,(%rdx,%rcx,4)
je     15ba <ldl_dcmp_pm+0x4aa>
movsd  (%r8,%rcx,8),%xmm0
divsd  (%r14,%rcx,8),%xmm0
movsd  %xmm0,(%r8,%rcx,8)
cmpl   $0x0,0x4(%rdx,%rcx,4)
je     1590 <ldl_dcmp_pm+0x480>
movsd  0x8(%r8,%rcx,8),%xmm0
divsd  0x8(%r14,%rcx,8),%xmm0
movsd  %xmm0,0x8(%r8,%rcx,8)
jmp    1590 <ldl_dcmp_pm+0x480>
mov    0x2a01(%rip),%rbx
mov    (%rbx),%edi
lea    0xa28(%rip),%rsi
xor    %eax,%eax
call   1030 <fprintf@plt>
mov    (%rbx),%edi
movsd  (%r14,%rbp,8),%xmm0
lea    0xa3e(%rip),%rsi
mov    %ebp,%edx
mov    $0x1,%al
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <fprintf@plt>
mov    $0x1,%ecx
test   $0x1,%r9b
je     1638 <ldl_dcmp_pm+0x528>
cmpl   $0x0,(%rdx,%rcx,4)
je     1638 <ldl_dcmp_pm+0x528>
movsd  (%r8,%rcx,8),%xmm0
divsd  (%r14,%rcx,8),%xmm0
movsd  %xmm0,(%r8,%rcx,8)
cmp    $0x2,%r13d
jl     16a0 <ldl_dcmp_pm+0x590>
mov    %r9,%rcx
jmp    165d <ldl_dcmp_pm+0x54d>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    -0x1(%rcx),%rsi
cmp    $0x2,%rcx
mov    %rsi,%rcx
jle    16a0 <ldl_dcmp_pm+0x590>
cmpl   $0x0,(%rdx,%rcx,4)
je     1650 <ldl_dcmp_pm+0x540>
mov    $0x1,%esi
jmp    1679 <ldl_dcmp_pm+0x569>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rsi
cmp    %rsi,%rcx
je     1650 <ldl_dcmp_pm+0x540>
cmpl   $0x0,(%rdx,%rsi,4)
je     1670 <ldl_dcmp_pm+0x560>
mov    (%rdi,%rcx,8),%rbx
movsd  (%rbx,%rsi,8),%xmm0
movsd  (%r8,%rsi,8),%xmm1
mulsd  (%r8,%rcx,8),%xmm0
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r8,%rsi,8)
jmp    1670 <ldl_dcmp_pm+0x560>
test   %r13d,%r13d
jle    1772 <ldl_dcmp_pm+0x662>
mov    %r9d,%ecx
and    $0xfffffffe,%ecx
neg    %rcx
mov    $0x1,%edx
movapd 0x941(%rip),%xmm0
jmp    16dd <ldl_dcmp_pm+0x5cd>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%rdx
cmp    %r11,%rdx
je     1772 <ldl_dcmp_pm+0x662>
movq   $0x0,(%r15,%rdx,8)
cmpl   $0x0,(%rax,%rdx,4)
je     16d0 <ldl_dcmp_pm+0x5c0>
movsd  (%r12,%rdx,8),%xmm1
xorpd  %xmm0,%xmm1
movlpd %xmm1,(%r15,%rdx,8)
mov    (%rdi,%rdx,8),%rsi
mov    $0x1,%ebx
test   %r10,%r10
je     174e <ldl_dcmp_pm+0x63e>
nopl   0x0(%rax)
movsd  (%rsi,%rbx,8),%xmm2
mulsd  (%r8,%rbx,8),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,(%r15,%rdx,8)
movsd  0x8(%rsi,%rbx,8),%xmm1
mulsd  0x8(%r8,%rbx,8),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,(%r15,%rdx,8)
lea    (%rcx,%rbx,1),%rbp
add    $0x2,%rbp
add    $0x2,%rbx
cmp    $0x1,%rbp
jne    1710 <ldl_dcmp_pm+0x600>
test   $0x1,%r9b
je     16d0 <ldl_dcmp_pm+0x5c0>
movsd  (%rsi,%rbx,8),%xmm2
mulsd  (%r8,%rbx,8),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,(%r15,%rdx,8)
jmp    16d0 <ldl_dcmp_pm+0x5c0>
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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