#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(double **A, int n, double *d, double *b, double *x, int reduce,
              int solve, int *pd) {
  int i, j, k, m;
  *pd = 0;
  if (reduce) {
    for (j = 1; j <= n; j++) {
      for (m = 1, i = 1; i < j; i++)
        if (A[i][j] == 0.0)
          ++m;
        else
          break;
      for (i = m; i < j; i++) {
        A[j][i] = A[i][j];
        for (k = m; k < i; k++)
          A[j][i] -= A[j][k] * A[i][k];
      }
      d[j] = A[j][j];
      for (i = m; i < j; i++)
        d[j] -= A[j][i] * A[j][i] / d[i];
      for (i = m; i < j; i++)
        A[j][i] /= d[i];
      if (d[j] == 0.0) {
        fprintf(stderr, " ldl_dcmp(): 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++) {
      x[i] = b[i];
      for (j = 1; j < i; j++)
        x[i] -= A[i][j] * x[j];
    }
    for (i = 1; i <= n; i++)
      x[i] /= d[i];
    for (i = n; i > 1; i--)
      for (j = 1; j < i; j++)
        x[j] -= A[i][j] * x[i];
  }
  return;
}


x86 assembly (clang, -O0):
<ldl_dcmp>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
mov    0x18(%rbp),%rax
movl   $0x0,(%rax)
cmpl   $0x0,-0x2c(%rbp)
je     140d <ldl_dcmp+0x2fd>
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     1408 <ldl_dcmp+0x2f8>
movl   $0x1,-0x3c(%rbp)
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    11c5 <ldl_dcmp+0xb5>
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11ad <ldl_dcmp+0x9d>
jp     11ad <ldl_dcmp+0x9d>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    11b2 <ldl_dcmp+0xa2>
jmp    11c5 <ldl_dcmp+0xb5>
jmp    11b7 <ldl_dcmp+0xa7>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    116b <ldl_dcmp+0x5b>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1297 <ldl_dcmp+0x187>
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1284 <ldl_dcmp+0x174>
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 -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x38(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%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)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1207 <ldl_dcmp+0xf7>
jmp    1289 <ldl_dcmp+0x179>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    11cb <ldl_dcmp+0xbb>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1326 <ldl_dcmp+0x216>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm1
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm1
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    12bf <ldl_dcmp+0x1af>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1371 <ldl_dcmp+0x261>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    132c <ldl_dcmp+0x21c>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    13d4 <ldl_dcmp+0x2c4>
jp     13d4 <ldl_dcmp+0x2c4>
mov    0x2c48(%rip),%rax
mov    (%rax),%edi
lea    0xc5f(%rip),%rsi
mov    $0x0,%al
call   1030 <fprintf@plt>
mov    0x2c31(%rip),%rax
mov    (%rax),%edi
mov    -0x34(%rbp),%edx
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xc61(%rip),%rsi
mov    $0x1,%al
call   1030 <fprintf@plt>
jmp    15b0 <ldl_dcmp+0x4a0>
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
xorps  %xmm0,%xmm0
ucomisd (%rax,%rcx,8),%xmm0
jbe    13f5 <ldl_dcmp+0x2e5>
mov    0x18(%rbp),%rax
mov    (%rax),%ecx
add    $0xffffffff,%ecx
mov    %ecx,(%rax)
jmp    13fa <ldl_dcmp+0x2ea>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1151 <ldl_dcmp+0x41>
jmp    140d <ldl_dcmp+0x2fd>
cmpl   $0x0,0x10(%rbp)
je     15ab <ldl_dcmp+0x49b>
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     14cb <ldl_dcmp+0x3bb>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    14b8 <ldl_dcmp+0x3a8>
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%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 -0x30(%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)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    144b <ldl_dcmp+0x33b>
jmp    14bd <ldl_dcmp+0x3ad>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    141e <ldl_dcmp+0x30e>
movl   $0x1,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jg     150f <ldl_dcmp+0x3ff>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x28(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    14d2 <ldl_dcmp+0x3c2>
mov    -0xc(%rbp),%eax
mov    %eax,-0x30(%rbp)
cmpl   $0x1,-0x30(%rbp)
jle    15a6 <ldl_dcmp+0x496>
movl   $0x1,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1593 <ldl_dcmp+0x483>
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x30(%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)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1526 <ldl_dcmp+0x416>
jmp    1598 <ldl_dcmp+0x488>
mov    -0x30(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x30(%rbp)
jmp    1515 <ldl_dcmp+0x405>
jmp    15ab <ldl_dcmp+0x49b>
jmp    15b0 <ldl_dcmp+0x4a0>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ldl_dcmp>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %rcx,0x30(%rsp)
mov    %rsi,0x10(%rsp)
mov    0x88(%rsp),%rcx
mov    0x80(%rsp),%eax
mov    %eax,0x1c(%rsp)
mov    %rcx,0x38(%rsp)
movl   $0x0,(%rcx)
test   %r9d,%r9d
je     14ee <ldl_dcmp+0x3de>
cmpl   $0x0,0x10(%rsp)
jle    14ee <ldl_dcmp+0x3de>
mov    0x10(%rsp),%rax
add    $0x1,%eax
mov    %rax,0x40(%rsp)
lea    0x10(%rdx),%rax
mov    %rax,0x28(%rsp)
mov    $0x1,%r12d
xor    %r13d,%r13d
xorpd  %xmm0,%xmm0
xor    %r15d,%r15d
movl   $0x0,0xc(%rsp)
jmp    11a7 <ldl_dcmp+0x97>
nopw   0x0(%rax,%rax,1)
add    $0x1,%r12
add    $0x1,%r15
add    $0xffffffffffffffff,%r13
cmp    0x40(%rsp),%r12
je     14ee <ldl_dcmp+0x3de>
mov    $0x1,%ebx
cmp    $0x2,%r12
jb     11e7 <ldl_dcmp+0xd7>
mov    $0x1,%ebx
nopw   0x0(%rax,%rax,1)
mov    (%rdi,%rbx,8),%rax
movsd  (%rax,%r12,8),%xmm1
ucomisd %xmm0,%xmm1
jne    11e7 <ldl_dcmp+0xd7>
jp     11e7 <ldl_dcmp+0xd7>
lea    (%rbx,%r13,1),%rax
add    $0x1,%rax
add    $0x1,%rbx
cmp    $0x1,%rax
jne    11c0 <ldl_dcmp+0xb0>
mov    %r12,%rbx
lea    (%rdx,%r12,8),%r14
mov    %ebx,%ecx
mov    (%rdi,%r12,8),%rbp
cmp    %rcx,%r12
jbe    12b0 <ldl_dcmp+0x1a0>
lea    0x1(%rcx),%r11
xor    %esi,%esi
mov    %rcx,%rax
jmp    1221 <ldl_dcmp+0x111>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rax
add    $0x1,%rsi
cmp    %r12,%rax
je     12d0 <ldl_dcmp+0x1c0>
mov    (%rdi,%rax,8),%r10
movsd  (%r10,%r12,8),%xmm1
movsd  %xmm1,0x0(%rbp,%rax,8)
cmp    %rax,%rcx
jae    1210 <ldl_dcmp+0x100>
test   $0x1,%sil
jne    1250 <ldl_dcmp+0x140>
mov    %rcx,%r9
cmp    $0x1,%rsi
jne    1270 <ldl_dcmp+0x160>
jmp    1210 <ldl_dcmp+0x100>
nopw   0x0(%rax,%rax,1)
movsd  0x0(%rbp,%rcx,8),%xmm2
mulsd  (%r10,%rcx,8),%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,0x0(%rbp,%rax,8)
mov    %r11,%r9
cmp    $0x1,%rsi
je     1210 <ldl_dcmp+0x100>
nop
movsd  0x0(%rbp,%r9,8),%xmm2
mulsd  (%r10,%r9,8),%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,0x0(%rbp,%rax,8)
movsd  0x8(%rbp,%r9,8),%xmm2
mulsd  0x8(%r10,%r9,8),%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,0x0(%rbp,%rax,8)
add    $0x2,%r9
cmp    %r9,%rax
jne    1270 <ldl_dcmp+0x160>
jmp    1210 <ldl_dcmp+0x100>
nopl   (%rax)
movsd  0x0(%rbp,%r12,8),%xmm1
movsd  %xmm1,(%rdx,%r12,8)
mov    %r14,%r10
jmp    14b0 <ldl_dcmp+0x3a0>
cs nopw 0x0(%rax,%rax,1)
nop
movsd  0x0(%rbp,%r12,8),%xmm1
lea    (%rdx,%r12,8),%r10
movsd  %xmm1,(%rdx,%r12,8)
cmp    %rcx,%r12
jbe    14b0 <ldl_dcmp+0x3a0>
mov    %r12d,%eax
sub    %ebx,%eax
test   $0x1,%al
jne    12fd <ldl_dcmp+0x1ed>
mov    %rcx,%rax
cmp    %rcx,%r15
jne    1320 <ldl_dcmp+0x210>
jmp    135c <ldl_dcmp+0x24c>
movsd  0x0(%rbp,%rcx,8),%xmm2
mulsd  %xmm2,%xmm2
divsd  (%rdx,%rcx,8),%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,(%r10)
lea    0x1(%rcx),%rax
cmp    %rcx,%r15
je     135c <ldl_dcmp+0x24c>
xchg   %ax,%ax
movsd  0x0(%rbp,%rax,8),%xmm2
mulsd  %xmm2,%xmm2
divsd  (%rdx,%rax,8),%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,(%rdx,%r12,8)
movsd  0x8(%rbp,%rax,8),%xmm2
mulsd  %xmm2,%xmm2
divsd  0x8(%rdx,%rax,8),%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,(%rdx,%r12,8)
add    $0x2,%rax
cmp    %rax,%r12
jne    1320 <ldl_dcmp+0x210>
cmp    %rcx,%r12
jbe    14b0 <ldl_dcmp+0x3a0>
mov    %r12,%r11
sub    %rbx,%r11
cmp    $0x2,%r11
jb     1440 <ldl_dcmp+0x330>
lea    0x0(,%rbx,8),%rax
add    %rbp,%rax
cmp    %r14,%rax
jae    139d <ldl_dcmp+0x28d>
lea    0x0(,%r12,8),%rax
add    %rbp,%rax
lea    (%rdx,%rbx,8),%rsi
cmp    %rax,%rsi
jb     1440 <ldl_dcmp+0x330>
mov    %r10,0x20(%rsp)
mov    %r11,%r9
and    $0xfffffffffffffffe,%r9
lea    -0x2(%r9),%rax
mov    %rax,%r10
shr    %r10
add    $0x1,%r10
test   %rax,%rax
je     14dd <ldl_dcmp+0x3cd>
lea    0x10(,%rbx,8),%rax
add    %rbp,%rax
mov    0x28(%rsp),%rsi
lea    (%rsi,%rbx,8),%r14
mov    %r10,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %ebx,%ebx
nopl   (%rax)
movupd -0x10(%r14,%rbx,8),%xmm1
movupd -0x10(%rax,%rbx,8),%xmm2
divpd  %xmm1,%xmm2
movupd (%rax,%rbx,8),%xmm1
movupd %xmm2,-0x10(%rax,%rbx,8)
movupd (%r14,%rbx,8),%xmm2
divpd  %xmm2,%xmm1
movupd %xmm1,(%rax,%rbx,8)
add    $0x4,%rbx
add    $0xfffffffffffffffe,%rsi
jne    13e0 <ldl_dcmp+0x2d0>
test   $0x1,%r10b
je     1433 <ldl_dcmp+0x323>
add    %rcx,%rbx
movupd (%rdx,%rbx,8),%xmm1
movupd 0x0(%rbp,%rbx,8),%xmm2
divpd  %xmm1,%xmm2
movupd %xmm2,0x0(%rbp,%rbx,8)
cmp    %r9,%r11
mov    0x20(%rsp),%r10
je     149c <ldl_dcmp+0x38c>
add    %r9,%rcx
mov    %r12d,%esi
sub    %ecx,%esi
mov    %rcx,%rax
test   $0x1,%sil
je     1463 <ldl_dcmp+0x353>
movsd  0x0(%rbp,%rcx,8),%xmm1
divsd  (%rdx,%rcx,8),%xmm1
movsd  %xmm1,0x0(%rbp,%rcx,8)
lea    0x1(%rcx),%rax
cmp    %rcx,%r15
je     149c <ldl_dcmp+0x38c>
nopl   0x0(%rax,%rax,1)
movsd  0x0(%rbp,%rax,8),%xmm1
divsd  (%rdx,%rax,8),%xmm1
movsd  0x8(%rbp,%rax,8),%xmm2
movsd  %xmm1,0x0(%rbp,%rax,8)
divsd  0x8(%rdx,%rax,8),%xmm2
movsd  %xmm2,0x8(%rbp,%rax,8)
add    $0x2,%rax
cmp    %rax,%r12
jne    1470 <ldl_dcmp+0x360>
movsd  (%r10),%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
ucomisd %xmm0,%xmm1
jne    14bc <ldl_dcmp+0x3ac>
jnp    1760 <ldl_dcmp+0x650>
ucomisd %xmm1,%xmm0
jbe    1190 <ldl_dcmp+0x80>
mov    0xc(%rsp),%ecx
add    $0xffffffff,%ecx
mov    0x38(%rsp),%rax
mov    %ecx,0xc(%rsp)
mov    %ecx,(%rax)
jmp    1190 <ldl_dcmp+0x80>
xor    %ebx,%ebx
test   $0x1,%r10b
jne    141b <ldl_dcmp+0x30b>
jmp    1433 <ldl_dcmp+0x323>
cmpl   $0x0,0x1c(%rsp)
mov    0x10(%rsp),%r11
je     1751 <ldl_dcmp+0x641>
test   %r11d,%r11d
jle    1751 <ldl_dcmp+0x641>
lea    0x1(%r11),%r9d
mov    $0x1,%ebp
xor    %r10d,%r10d
mov    0x30(%rsp),%r14
jmp    1531 <ldl_dcmp+0x421>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rbp
add    $0x1,%r10
cmp    %r9,%rbp
je     15d2 <ldl_dcmp+0x4c2>
movsd  (%r14,%rbp,8),%xmm0
movsd  %xmm0,(%r8,%rbp,8)
cmp    $0x2,%rbp
jb     1520 <ldl_dcmp+0x410>
mov    (%rdi,%rbp,8),%rcx
mov    $0x1,%esi
cmp    $0x1,%r10
je     15ae <ldl_dcmp+0x49e>
mov    %r10,%rbx
and    $0xfffffffffffffffe,%rbx
neg    %rbx
mov    $0x1,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movsd  (%rcx,%rsi,8),%xmm1
mulsd  (%r8,%rsi,8),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%r8,%rbp,8)
movsd  0x8(%rcx,%rsi,8),%xmm1
mulsd  0x8(%r8,%rsi,8),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%r8,%rbp,8)
lea    (%rbx,%rsi,1),%rax
add    $0x2,%rax
add    $0x2,%rsi
cmp    $0x1,%rax
jne    1570 <ldl_dcmp+0x460>
test   $0x1,%r10b
je     1520 <ldl_dcmp+0x410>
movsd  (%rcx,%rsi,8),%xmm1
mulsd  (%r8,%rsi,8),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,(%r8,%rbp,8)
jmp    1520 <ldl_dcmp+0x410>
test   %r11d,%r11d
jle    1751 <ldl_dcmp+0x641>
lea    -0x1(%r9),%rcx
mov    $0x1,%esi
cmp    $0x2,%rcx
jb     169e <ldl_dcmp+0x58e>
lea    0x8(%r8),%rax
lea    (%rdx,%r9,8),%rbp
cmp    %rbp,%rax
jae    160c <ldl_dcmp+0x4fc>
lea    (%r8,%r9,8),%rax
lea    0x8(%rdx),%rbp
cmp    %rax,%rbp
jb     169e <ldl_dcmp+0x58e>
mov    %rcx,%rsi
and    $0xfffffffffffffffe,%rsi
lea    -0x2(%rsi),%rax
mov    %rax,%rbp
shr    %rbp
add    $0x1,%rbp
test   %rax,%rax
je     17a0 <ldl_dcmp+0x690>
mov    %rbp,%rax
and    $0xfffffffffffffffe,%rax
mov    $0x1,%ebx
cs nopw 0x0(%rax,%rax,1)
movupd (%rdx,%rbx,8),%xmm0
movupd (%r8,%rbx,8),%xmm1
divpd  %xmm0,%xmm1
movupd 0x10(%r8,%rbx,8),%xmm0
movupd %xmm1,(%r8,%rbx,8)
movupd 0x10(%rdx,%rbx,8),%xmm1
divpd  %xmm1,%xmm0
movupd %xmm0,0x10(%r8,%rbx,8)
add    $0x4,%rbx
add    $0xfffffffffffffffe,%rax
jne    1640 <ldl_dcmp+0x530>
test   $0x1,%bpl
je     1692 <ldl_dcmp+0x582>
movupd (%rdx,%rbx,8),%xmm0
movupd (%r8,%rbx,8),%xmm1
divpd  %xmm0,%xmm1
movupd %xmm1,(%r8,%rbx,8)
cmp    %rsi,%rcx
je     16fe <ldl_dcmp+0x5ee>
or     $0x1,%rcx
mov    %rcx,%rsi
mov    %rsi,%rax
not    %rax
test   $0x1,%r9b
jne    16bf <ldl_dcmp+0x5af>
movsd  (%r8,%rsi,8),%xmm0
divsd  (%rdx,%rsi,8),%xmm0
movsd  %xmm0,(%r8,%rsi,8)
add    $0x1,%rsi
add    %r9,%rax
je     16fe <ldl_dcmp+0x5ee>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  (%r8,%rsi,8),%xmm0
divsd  (%rdx,%rsi,8),%xmm0
movsd  0x8(%r8,%rsi,8),%xmm1
movsd  %xmm0,(%r8,%rsi,8)
divsd  0x8(%rdx,%rsi,8),%xmm1
movsd  %xmm1,0x8(%r8,%rsi,8)
add    $0x2,%rsi
cmp    %rsi,%r9
jne    16d0 <ldl_dcmp+0x5c0>
cmp    $0x2,%r11d
jl     1751 <ldl_dcmp+0x641>
mov    %r11d,%eax
nopw   0x0(%rax,%rax,1)
mov    (%rdi,%rax,8),%rcx
mov    $0x1,%edx
nopl   0x0(%rax)
movsd  (%rcx,%rdx,8),%xmm0
movsd  (%r8,%rdx,8),%xmm1
mulsd  (%r8,%rax,8),%xmm0
subsd  %xmm0,%xmm1
movsd  %xmm1,(%r8,%rdx,8)
add    $0x1,%rdx
cmp    %rdx,%rax
jne    1720 <ldl_dcmp+0x610>
lea    -0x1(%rax),%rcx
cmp    $0x2,%rax
mov    %rcx,%rax
jg     1710 <ldl_dcmp+0x600>
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x2879(%rip),%rbx
mov    (%rbx),%edi
lea    0x890(%rip),%rsi
xor    %eax,%eax
mov    %r10,%rbp
call   1030 <fprintf@plt>
mov    (%rbx),%edi
movsd  0x0(%rbp),%xmm0
lea    0x8a1(%rip),%rsi
mov    %r12d,%edx
mov    $0x1,%al
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <fprintf@plt>
mov    $0x1,%ebx
test   $0x1,%bpl
jne    167d <ldl_dcmp+0x56d>
jmp    1692 <ldl_dcmp+0x582>

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

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