#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 */
double **dmatrix(int, int, int, int);
double *dvector(int, int);
int /*<<< orphan*/ gaussj(double **, int, double **, int);
int /*<<< orphan*/ printf(char *, ...);
main() {
  int i, j, k;
  double **a = dmatrix(1, 5, 1, 5);
  double **aa = dmatrix(1, 5, 1, 5);
  double **p = dmatrix(1, 5, 1, 5);
  double **b = dmatrix(1, 5, 1, 1);
  double *x = dvector(1, 5);
  for (i = 1; i <= 5; i++)
    for (j = 1; j <= 5; j++) {
      a[i][j] = 1.0 / (i + j);
      aa[i][j] = a[i][j];
    }
  for (i = 1; i <= 5; i++)
    b[i][1] = 1;
  printf("initial A and b:\n");
  for (i = 1; i <= 5; i++) {
    printf("    ");
    for (j = 1; j <= 5; j++)
      printf("%9.2e  ", a[i][j]);
    printf("    %9.2e\n", b[i][1]);
  }
  gaussj(a, 5, b, 1);
  printf("final A(inv) and b' (sol):\n");
  for (i = 1; i <= 5; i++) {
    printf("    ");
    for (j = 1; j <= 5; j++)
      printf("%9.2e  ", a[i][j]);
    printf("    %9.2e\n", b[i][1]);
  }
  for (i = 1; i <= 5; i++)
    for (j = 1; j <= 5; j++) {
      p[i][j] = 0;
      for (k = 1; k <= 5; k++)
        p[i][j] += a[i][k] * aa[k][j];
    }
  for (i = 1; i <= 5; i++) {
    x[i] = 0;
    for (j = 1; j <= 5; j++)
      x[i] += aa[i][j] * b[j][1];
  }
  printf("products A * Ainv, A * b':\n");
  for (i = 1; i <= 5; i++) {
    printf("    ");
    for (j = 1; j <= 5; j++)
      printf("%9.5f  ", p[i][j]);
    printf("    %9.2e\n", x[i]);
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x1,%edx
mov    $0x5,%ecx
mov    %edx,%edi
mov    %ecx,%esi
call   1050 <dmatrix@plt>
mov    %rax,-0x18(%rbp)
mov    $0x1,%edx
mov    $0x5,%ecx
mov    %edx,%edi
mov    %ecx,%esi
call   1050 <dmatrix@plt>
mov    %rax,-0x20(%rbp)
mov    $0x1,%edx
mov    $0x5,%ecx
mov    %edx,%edi
mov    %ecx,%esi
call   1050 <dmatrix@plt>
mov    %rax,-0x28(%rbp)
mov    $0x1,%ecx
mov    $0x5,%esi
mov    %ecx,%edi
mov    %ecx,%edx
call   1050 <dmatrix@plt>
mov    %rax,-0x30(%rbp)
mov    $0x1,%edi
mov    $0x5,%esi
call   1060 <dvector@plt>
mov    %rax,-0x38(%rbp)
movl   $0x1,-0x8(%rbp)
cmpl   $0x5,-0x8(%rbp)
jg     1256 <main+0x116>
movl   $0x1,-0xc(%rbp)
cmpl   $0x5,-0xc(%rbp)
jg     1243 <main+0x103>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
cvtsi2sd %eax,%xmm1
movsd  0xe0e(%rip),%xmm0
divsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0xc(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0xc(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    11d6 <main+0x96>
jmp    1248 <main+0x108>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    11c5 <main+0x85>
movl   $0x1,-0x8(%rbp)
cmpl   $0x5,-0x8(%rbp)
jg     128e <main+0x14e>
mov    -0x30(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  0xd85(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    125d <main+0x11d>
lea    0xd73(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cmpl   $0x5,-0x8(%rbp)
jg     132a <main+0x1ea>
lea    0xd66(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0xc(%rbp)
cmpl   $0x5,-0xc(%rbp)
jg     12fd <main+0x1bd>
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xd37(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    12c2 <main+0x182>
mov    -0x30(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  0x8(%rax),%xmm0
lea    0xd12(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12a3 <main+0x163>
mov    -0x18(%rbp),%rdi
mov    -0x30(%rbp),%rdx
mov    $0x5,%esi
mov    $0x1,%ecx
call   1040 <gaussj@plt>
lea    0xcea(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cmpl   $0x5,-0x8(%rbp)
jg     13dd <main+0x29d>
lea    0xcb3(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0xc(%rbp)
cmpl   $0x5,-0xc(%rbp)
jg     13b0 <main+0x270>
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xc84(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1375 <main+0x235>
mov    -0x30(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  0x8(%rax),%xmm0
lea    0xc5f(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1356 <main+0x216>
movl   $0x1,-0x8(%rbp)
cmpl   $0x5,-0x8(%rbp)
jg     14a8 <main+0x368>
movl   $0x1,-0xc(%rbp)
cmpl   $0x5,-0xc(%rbp)
jg     1495 <main+0x355>
mov    -0x28(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0xc(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x1,-0x10(%rbp)
cmpl   $0x5,-0x10(%rbp)
jg     1482 <main+0x342>
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x10(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x28(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    141e <main+0x2de>
jmp    1487 <main+0x347>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    13f5 <main+0x2b5>
jmp    149a <main+0x35a>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    13e4 <main+0x2a4>
movl   $0x1,-0x8(%rbp)
cmpl   $0x5,-0x8(%rbp)
jg     153b <main+0x3fb>
mov    -0x38(%rbp),%rax
movslq -0x8(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x1,-0xc(%rbp)
cmpl   $0x5,-0xc(%rbp)
jg     1528 <main+0x3e8>
mov    -0x20(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x30(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movsd  0x8(%rax),%xmm2
mov    -0x38(%rbp),%rax
movslq -0x8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    14d0 <main+0x390>
jmp    152d <main+0x3ed>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14af <main+0x36f>
lea    0xb0c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cmpl   $0x5,-0x8(%rbp)
jg     15d3 <main+0x493>
lea    0xab9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0xc(%rbp)
cmpl   $0x5,-0xc(%rbp)
jg     15aa <main+0x46a>
mov    -0x28(%rbp),%rax
movslq -0x8(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0xc(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xad5(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    156f <main+0x42f>
mov    -0x38(%rbp),%rax
movslq -0x8(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
lea    0xa69(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1550 <main+0x410>
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    $0x1,%edi
mov    $0x5,%esi
mov    $0x1,%edx
mov    $0x5,%ecx
call   1060 <dmatrix@plt>
mov    %rax,%r12
mov    $0x1,%edi
mov    $0x5,%esi
mov    $0x1,%edx
mov    $0x5,%ecx
call   1060 <dmatrix@plt>
mov    %rax,%r15
mov    $0x1,%edi
mov    $0x5,%esi
mov    $0x1,%edx
mov    $0x5,%ecx
call   1060 <dmatrix@plt>
mov    %rax,%r14
mov    $0x1,%edi
mov    $0x5,%esi
mov    $0x1,%edx
mov    $0x1,%ecx
call   1060 <dmatrix@plt>
mov    %rax,(%rsp)
mov    $0x1,%edi
mov    $0x5,%esi
call   1070 <dvector@plt>
mov    %rax,%r13
mov    0x8(%r12),%rdx
mov    0x8(%r15),%rsi
movabs $0x3fe0000000000000,%rax
mov    %rax,0x8(%rdx)
mov    %rax,0x8(%rsi)
movabs $0x3fd5555555555555,%rdi
mov    %rdi,0x10(%rdx)
mov    %rdi,0x10(%rsi)
movabs $0x3fd0000000000000,%rbp
mov    %rbp,0x18(%rdx)
mov    %rbp,0x18(%rsi)
movabs $0x3fc999999999999a,%rcx
99 c9 3f
mov    %rcx,0x20(%rdx)
mov    %rcx,0x20(%rsi)
movabs $0x3fc5555555555555,%rax
55 c5 3f
mov    %rax,0x28(%rdx)
mov    %rax,0x28(%rsi)
mov    0x10(%r12),%rsi
mov    0x10(%r15),%rbx
mov    %rdi,0x8(%rsi)
mov    %rdi,0x8(%rbx)
mov    %rbp,0x10(%rsi)
mov    %rbp,0x10(%rbx)
mov    %rcx,0x18(%rsi)
mov    %rcx,0x18(%rbx)
mov    %rax,0x20(%rsi)
mov    %rax,0x20(%rbx)
movabs $0x3fc2492492492492,%rdx
49 c2 3f
mov    %rdx,0x28(%rsi)
mov    %rdx,0x28(%rbx)
mov    0x18(%r12),%rsi
mov    0x18(%r15),%rdi
mov    %rbp,0x8(%rsi)
mov    %rbp,0x8(%rdi)
mov    %rcx,0x10(%rsi)
mov    %rcx,0x10(%rdi)
mov    %rax,0x18(%rsi)
mov    %rax,0x18(%rdi)
mov    %rdx,0x20(%rsi)
mov    %rdx,0x20(%rdi)
movabs $0x3fc0000000000000,%rbp
mov    %rbp,0x28(%rsi)
mov    %rbp,0x28(%rdi)
mov    0x20(%r12),%rsi
mov    0x20(%r15),%rdi
mov    %rcx,0x8(%rsi)
mov    %rcx,0x8(%rdi)
mov    %rax,0x10(%rsi)
mov    %rax,0x10(%rdi)
mov    %rdx,0x18(%rsi)
mov    %rdx,0x18(%rdi)
mov    %rbp,0x20(%rsi)
mov    %rbp,0x20(%rdi)
movabs $0x3fbc71c71c71c71c,%rcx
71 bc 3f
mov    %rcx,0x28(%rsi)
mov    %rcx,0x28(%rdi)
mov    0x28(%r12),%rsi
mov    0x28(%r15),%rdi
mov    %rax,0x8(%rsi)
mov    %rax,0x8(%rdi)
mov    %rdx,0x10(%rsi)
mov    %rdx,0x10(%rdi)
mov    %rbp,0x18(%rsi)
mov    %rbp,0x18(%rdi)
mov    %rcx,0x20(%rsi)
mov    %rcx,0x20(%rdi)
movabs $0x3fb999999999999a,%rax
99 b9 3f
mov    %rax,0x28(%rsi)
mov    %rax,0x28(%rdi)
mov    (%rsp),%rbx
mov    0x8(%rbx),%rax
movabs $0x3ff0000000000000,%rcx
mov    %rcx,0x8(%rax)
mov    0x10(%rbx),%rax
mov    %rcx,0x8(%rax)
mov    0x18(%rbx),%rax
mov    %rcx,0x8(%rax)
mov    0x20(%rbx),%rax
mov    %rcx,0x8(%rax)
mov    0x28(%rbx),%rax
mov    %rcx,0x8(%rax)
lea    0xcb6(%rip),%rdi
call   1030 <puts@plt>
lea    0xc8a(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%r12),%rax
movsd  0x8(%rax),%xmm0
lea    0xc77(%rip),%rbp
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r12),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r12),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r12),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r12),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%rbx),%rax
movsd  0x8(%rax),%xmm0
lea    0xc15(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xbfa(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x10(%r12),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%r12),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%r12),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%r12),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%r12),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%rbx),%rax
movsd  0x8(%rax),%xmm0
lea    0xb8c(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xb71(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x18(%r12),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%r12),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%r12),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%r12),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%r12),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%rbx),%rax
movsd  0x8(%rax),%xmm0
lea    0xb03(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xae8(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x20(%r12),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%r12),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%r12),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%r12),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%r12),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%rbx),%rax
movsd  0x8(%rax),%xmm0
lea    0xa7a(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0xa5f(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x28(%r12),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%r12),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%r12),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%r12),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%r12),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%rbx),%rax
movsd  0x8(%rax),%xmm0
lea    0x9f1(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    %r12,%rdi
mov    $0x5,%esi
mov    %rbx,%rdx
mov    $0x1,%ecx
call   1050 <gaussj@plt>
lea    0x9f2(%rip),%rdi
call   1030 <puts@plt>
lea    0x9b5(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%r12),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r12),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r12),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r12),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r12),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%rbx),%rax
movsd  0x8(%rax),%xmm0
lea    0x947(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x92c(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x10(%r12),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%r12),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%r12),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%r12),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%r12),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%rbx),%rax
movsd  0x8(%rax),%xmm0
lea    0x8be(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x8a3(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x18(%r12),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%r12),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%r12),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%r12),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%r12),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%rbx),%rax
movsd  0x8(%rax),%xmm0
lea    0x835(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x81a(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x20(%r12),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%r12),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%r12),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%r12),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%r12),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%rbx),%rax
movsd  0x8(%rax),%xmm0
lea    0x7ac(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
lea    0x791(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x28(%r12),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%r12),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%r12),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%r12),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%r12),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%rbx),%rax
movsd  0x8(%rax),%xmm0
lea    0x723(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r15),%rax
mov    0x10(%r15),%r8
mov    0x18(%r15),%rdx
mov    0x20(%r15),%rsi
mov    0x28(%r15),%rdi
mov    $0x1,%ebp
xorpd  %xmm0,%xmm0
xchg   %ax,%ax
mov    (%r14,%rbp,8),%rbx
mov    (%r12,%rbp,8),%rcx
movq   $0x0,0x8(%rbx)
movsd  0x8(%rcx),%xmm1
mulsd  0x8(%rax),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rbx)
movsd  0x10(%rcx),%xmm2
mulsd  0x8(%r8),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x8(%rbx)
movsd  0x18(%rcx),%xmm1
mulsd  0x8(%rdx),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x8(%rbx)
movsd  0x20(%rcx),%xmm2
mulsd  0x8(%rsi),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x8(%rbx)
movsd  0x28(%rcx),%xmm1
mulsd  0x8(%rdi),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x8(%rbx)
movq   $0x0,0x10(%rbx)
movsd  0x8(%rcx),%xmm1
mulsd  0x10(%rax),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x10(%rbx)
movsd  0x10(%rcx),%xmm2
mulsd  0x10(%r8),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x10(%rbx)
movsd  0x18(%rcx),%xmm1
mulsd  0x10(%rdx),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x10(%rbx)
movsd  0x20(%rcx),%xmm2
mulsd  0x10(%rsi),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x10(%rbx)
movsd  0x28(%rcx),%xmm1
mulsd  0x10(%rdi),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x10(%rbx)
movq   $0x0,0x18(%rbx)
movsd  0x8(%rcx),%xmm1
mulsd  0x18(%rax),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rbx)
movsd  0x10(%rcx),%xmm2
mulsd  0x18(%r8),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x18(%rbx)
movsd  0x18(%rcx),%xmm1
mulsd  0x18(%rdx),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x18(%rbx)
movsd  0x20(%rcx),%xmm2
mulsd  0x18(%rsi),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x18(%rbx)
movsd  0x28(%rcx),%xmm1
mulsd  0x18(%rdi),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x18(%rbx)
movq   $0x0,0x20(%rbx)
movsd  0x8(%rcx),%xmm1
mulsd  0x20(%rax),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x20(%rbx)
movsd  0x10(%rcx),%xmm2
mulsd  0x20(%r8),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x20(%rbx)
movsd  0x18(%rcx),%xmm1
mulsd  0x20(%rdx),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x20(%rbx)
movsd  0x20(%rcx),%xmm2
mulsd  0x20(%rsi),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x20(%rbx)
movsd  0x28(%rcx),%xmm1
mulsd  0x20(%rdi),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x20(%rbx)
movq   $0x0,0x28(%rbx)
movsd  0x8(%rcx),%xmm1
mulsd  0x28(%rax),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x28(%rbx)
movsd  0x10(%rcx),%xmm2
mulsd  0x28(%r8),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x28(%rbx)
movsd  0x18(%rcx),%xmm1
mulsd  0x28(%rdx),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x28(%rbx)
movsd  0x20(%rcx),%xmm2
mulsd  0x28(%rsi),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x28(%rbx)
movsd  0x28(%rcx),%xmm1
mulsd  0x28(%rdi),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x28(%rbx)
add    $0x1,%rbp
cmp    $0x6,%rbp
jne    1910 <main+0x7c0>
mov    (%rsp),%rbp
mov    0x8(%rbp),%rcx
mov    0x10(%rbp),%rdx
mov    0x18(%rbp),%rsi
mov    0x20(%rbp),%rdi
mov    0x28(%rbp),%rbp
xor    %ebx,%ebx
xorpd  %xmm0,%xmm0
nopl   0x0(%rax)
movq   $0x0,0x8(%r13,%rbx,8)
movsd  0x8(%rax),%xmm1
mulsd  0x8(%rcx),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%r13,%rbx,8)
movsd  0x10(%rax),%xmm2
mulsd  0x8(%rdx),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x8(%r13,%rbx,8)
movsd  0x18(%rax),%xmm1
mulsd  0x8(%rsi),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x8(%r13,%rbx,8)
movsd  0x20(%rax),%xmm2
mulsd  0x8(%rdi),%xmm2
addsd  %xmm1,%xmm2
movsd  %xmm2,0x8(%r13,%rbx,8)
movsd  0x28(%rax),%xmm1
mulsd  0x8(%rbp),%xmm1
addsd  %xmm2,%xmm1
movsd  %xmm1,0x8(%r13,%rbx,8)
cmp    $0x4,%rbx
je     1bd6 <main+0xa86>
mov    0x10(%r15,%rbx,8),%rax
add    $0x1,%rbx
jmp    1b50 <main+0xa00>
lea    0x46f(%rip),%rdi
call   1030 <puts@plt>
lea    0x417(%rip),%r15
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x8(%r14),%rax
movsd  0x8(%rax),%xmm0
lea    0x415(%rip),%rbp
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r14),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r14),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r14),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x8(%r14),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x8(%r13),%xmm0
lea    0x3a7(%rip),%r12
mov    %r12,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x10(%r14),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%r14),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%r14),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%r14),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x10(%r14),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x10(%r13),%xmm0
mov    %r12,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x18(%r14),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%r14),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%r14),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%r14),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x18(%r14),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x18(%r13),%xmm0
mov    %r12,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x20(%r14),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%r14),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%r14),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%r14),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x20(%r14),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x20(%r13),%xmm0
mov    %r12,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    %r15,%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x28(%r14),%rax
movsd  0x8(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%r14),%rax
movsd  0x10(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%r14),%rax
movsd  0x18(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%r14),%rax
movsd  0x20(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x28(%r14),%rax
movsd  0x28(%rax),%xmm0
mov    %rbp,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
movsd  0x28(%r13),%xmm0
mov    %r12,%rdi
mov    $0x1,%al
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [18 x i8] c"initial A and b:\0A\00"
@.str.1 = [5 x i8] c" \00"
@.str.2 = [8 x i8] c"%9.2e \00"
@.str.3 = [11 x i8] c" %9.2e\0A\00"
@.str.4 = [28 x i8] c"final A(inv) and b' (sol):\0A\00"
@.str.5 = [28 x i8] c"products A * Ainv, A * b':\0A\00"
@.str.6 = [8 x i8] c"%9.5f \00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca double**
%6 = alloca double**
%7 = alloca double**
%8 = alloca double**
%9 = alloca double*
store i32 0, i32* %1
%10 = call double** @dmatrix(i32 1, i32 5, i32 1, i32 5)
store double** %10, double*** %5
%11 = call double** @dmatrix(i32 1, i32 5, i32 1, i32 5)
store double** %11, double*** %6
%12 = call double** @dmatrix(i32 1, i32 5, i32 1, i32 5)
store double** %12, double*** %7
%13 = call double** @dmatrix(i32 1, i32 5, i32 1, i32 1)
store double** %13, double*** %8
%14 = call double* @dvector(i32 1, i32 5)
store double* %14, double** %9
store i32 1, i32* %2
br label %15
15: ; preds = %57, %0
%16 = load i32, i32* %2
%17 = icmp sle i32 %16, 5
br i1 %17, label %18, label %60
18: ; preds = %15
store i32 1, i32* %3
br label %19
19: ; preds = %53, %18
%20 = load i32, i32* %3
%21 = icmp sle i32 %20, 5
br i1 %21, label %22, label %56
22: ; preds = %19
%23 = load i32, i32* %2
%24 = load i32, i32* %3
%25 = add nsw i32 %23, %24
%26 = sitofp i32 %25 to double
%27 = fdiv double 1.000000e+00, %26
%28 = load double**, double*** %5
%29 = load i32, i32* %2
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds double*, double** %28, i64 %30
%32 = load double*, double** %31
%33 = load i32, i32* %3
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds double, double* %32, i64 %34
store double %27, double* %35
%36 = load double**, double*** %5
%37 = load i32, i32* %2
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds double*, double** %36, i64 %38
%40 = load double*, double** %39
%41 = load i32, i32* %3
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds double, double* %40, i64 %42
%44 = load double, double* %43
%45 = load double**, double*** %6
%46 = load i32, i32* %2
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds double*, double** %45, i64 %47
%49 = load double*, double** %48
%50 = load i32, i32* %3
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds double, double* %49, i64 %51
store double %44, double* %52
br label %53
53: ; preds = %22
%54 = load i32, i32* %3
%55 = add nsw i32 %54, 1
store i32 %55, i32* %3
br label %19
56: ; preds = %19
br label %57
57: ; preds = %56
%58 = load i32, i32* %2
%59 = add nsw i32 %58, 1
store i32 %59, i32* %2
br label %15
60: ; preds = %15
store i32 1, i32* %2
br label %61
61: ; preds = %71, %60
%62 = load i32, i32* %2
%63 = icmp sle i32 %62, 5
br i1 %63, label %64, label %74
64: ; preds = %61
%65 = load double**, double*** %8
%66 = load i32, i32* %2
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds double*, double** %65, i64 %67
%69 = load double*, double** %68
%70 = getelementptr inbounds double, double* %69, i64 1
store double 1.000000e+00, double* %70
br label %71
71: ; preds = %64
%72 = load i32, i32* %2
%73 = add nsw i32 %72, 1
store i32 %73, i32* %2
br label %61
74: ; preds = %61
%75 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str, i64 0, i64 0))
store i32 1, i32* %2
br label %76
76: ; preds = %107, %74
%77 = load i32, i32* %2
%78 = icmp sle i32 %77, 5
br i1 %78, label %79, label %110
79: ; preds = %76
%80 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
store i32 1, i32* %3
br label %81
81: ; preds = %95, %79
%82 = load i32, i32* %3
%83 = icmp sle i32 %82, 5
br i1 %83, label %84, label %98
84: ; preds = %81
%85 = load double**, double*** %5
%86 = load i32, i32* %2
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds double*, double** %85, i64 %87
%89 = load double*, double** %88
%90 = load i32, i32* %3
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds double, double* %89, i64 %91
%93 = load double, double* %92
%94 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %93)
br label %95
95: ; preds = %84
%96 = load i32, i32* %3
%97 = add nsw i32 %96, 1
store i32 %97, i32* %3
br label %81
98: ; preds = %81
%99 = load double**, double*** %8
%100 = load i32, i32* %2
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds double*, double** %99, i64 %101
%103 = load double*, double** %102
%104 = getelementptr inbounds double, double* %103, i64 1
%105 = load double, double* %104
%106 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.3, i64 0, i64 0), double %105)
br label %107
107: ; preds = %98
%108 = load i32, i32* %2
%109 = add nsw i32 %108, 1
store i32 %109, i32* %2
br label %76
110: ; preds = %76
%111 = load double**, double*** %5
%112 = load double**, double*** %8
%113 = call i32 @gaussj(double** %111, i32 5, double** %112, i32 1)
%114 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.4, i64 0, i64 0))
store i32 1, i32* %2
br label %115
115: ; preds = %146, %110
%116 = load i32, i32* %2
%117 = icmp sle i32 %116, 5
br i1 %117, label %118, label %149
118: ; preds = %115
%119 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
store i32 1, i32* %3
br label %120
120: ; preds = %134, %118
%121 = load i32, i32* %3
%122 = icmp sle i32 %121, 5
br i1 %122, label %123, label %137
123: ; preds = %120
%124 = load double**, double*** %5
%125 = load i32, i32* %2
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds double*, double** %124, i64 %126
%128 = load double*, double** %127
%129 = load i32, i32* %3
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds double, double* %128, i64 %130
%132 = load double, double* %131
%133 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), double %132)
br label %134
134: ; preds = %123
%135 = load i32, i32* %3
%136 = add nsw i32 %135, 1
store i32 %136, i32* %3
br label %120
137: ; preds = %120
%138 = load double**, double*** %8
%139 = load i32, i32* %2
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds double*, double** %138, i64 %140
%142 = load double*, double** %141
%143 = getelementptr inbounds double, double* %142, i64 1
%144 = load double, double* %143
%145 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.3, i64 0, i64 0), double %144)
br label %146
146: ; preds = %137
%147 = load i32, i32* %2
%148 = add nsw i32 %147, 1
store i32 %148, i32* %2
br label %115
149: ; preds = %115
store i32 1, i32* %2
br label %150
150: ; preds = %206, %149
%151 = load i32, i32* %2
%152 = icmp sle i32 %151, 5
br i1 %152, label %153, label %209
153: ; preds = %150
store i32 1, i32* %3
br label %154
154: ; preds = %202, %153
%155 = load i32, i32* %3
%156 = icmp sle i32 %155, 5
br i1 %156, label %157, label %205
157: ; preds = %154
%158 = load double**, double*** %7
%159 = load i32, i32* %2
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds double*, double** %158, i64 %160
%162 = load double*, double** %161
%163 = load i32, i32* %3
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds double, double* %162, i64 %164
store double 0.000000e+00, double* %165
store i32 1, i32* %4
br label %166
166: ; preds = %198, %157
%167 = load i32, i32* %4
%168 = icmp sle i32 %167, 5
br i1 %168, label %169, label %201
169: ; preds = %166
%170 = load double**, double*** %5
%171 = load i32, i32* %2
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds double*, double** %170, i64 %172
%174 = load double*, double** %173
%175 = load i32, i32* %4
%176 = sext i32 %175 to i64
%177 = getelementptr inbounds double, double* %174, i64 %176
%178 = load double, double* %177
%179 = load double**, double*** %6
%180 = load i32, i32* %4
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds double*, double** %179, i64 %181
%183 = load double*, double** %182
%184 = load i32, i32* %3
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds double, double* %183, i64 %185
%187 = load double, double* %186
%188 = load double**, double*** %7
%189 = load i32, i32* %2
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds double*, double** %188, i64 %190
%192 = load double*, double** %191
%193 = load i32, i32* %3
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds double, double* %192, i64 %194
%196 = load double, double* %195
%197 = call double @llvm.fmuladd.f64(double %178, double %187, double %196)
store double %197, double* %195
br label %198
198: ; preds = %169
%199 = load i32, i32* %4
%200 = add nsw i32 %199, 1
store i32 %200, i32* %4
br label %166
201: ; preds = %166
br label %202
202: ; preds = %201
%203 = load i32, i32* %3
%204 = add nsw i32 %203, 1
store i32 %204, i32* %3
br label %154
205: ; preds = %154
br label %206
206: ; preds = %205
%207 = load i32, i32* %2
%208 = add nsw i32 %207, 1
store i32 %208, i32* %2
br label %150
209: ; preds = %150
store i32 1, i32* %2
br label %210
210: ; preds = %248, %209
%211 = load i32, i32* %2
%212 = icmp sle i32 %211, 5
br i1 %212, label %213, label %251
213: ; preds = %210
%214 = load double*, double** %9
%215 = load i32, i32* %2
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds double, double* %214, i64 %216
store double 0.000000e+00, double* %217
store i32 1, i32* %3
br label %218
218: ; preds = %244, %213
%219 = load i32, i32* %3
%220 = icmp sle i32 %219, 5
br i1 %220, label %221, label %247
221: ; preds = %218
%222 = load double**, double*** %6
%223 = load i32, i32* %2
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds double*, double** %222, i64 %224
%226 = load double*, double** %225
%227 = load i32, i32* %3
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds double, double* %226, i64 %228
%230 = load double, double* %229
%231 = load double**, double*** %8
%232 = load i32, i32* %3
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds double*, double** %231, i64 %233
%235 = load double*, double** %234
%236 = getelementptr inbounds double, double* %235, i64 1
%237 = load double, double* %236
%238 = load double*, double** %9
%239 = load i32, i32* %2
%240 = sext i32 %239 to i64
%241 = getelementptr inbounds double, double* %238, i64 %240
%242 = load double, double* %241
%243 = call double @llvm.fmuladd.f64(double %230, double %237, double %242)
store double %243, double* %241
br label %244
244: ; preds = %221
%245 = load i32, i32* %3
%246 = add nsw i32 %245, 1
store i32 %246, i32* %3
br label %218
247: ; preds = %218
br label %248
248: ; preds = %247
%249 = load i32, i32* %2
%250 = add nsw i32 %249, 1
store i32 %250, i32* %2
br label %210
251: ; preds = %210
%252 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.5, i64 0, i64 0))
store i32 1, i32* %2
br label %253
253: ; preds = %282, %251
%254 = load i32, i32* %2
%255 = icmp sle i32 %254, 5
br i1 %255, label %256, label %285
256: ; preds = %253
%257 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
store i32 1, i32* %3
br label %258
258: ; preds = %272, %256
%259 = load i32, i32* %3
%260 = icmp sle i32 %259, 5
br i1 %260, label %261, label %275
261: ; preds = %258
%262 = load double**, double*** %7
%263 = load i32, i32* %2
%264 = sext i32 %263 to i64
%265 = getelementptr inbounds double*, double** %262, i64 %264
%266 = load double*, double** %265
%267 = load i32, i32* %3
%268 = sext i32 %267 to i64
%269 = getelementptr inbounds double, double* %266, i64 %268
%270 = load double, double* %269
%271 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.6, i64 0, i64 0), double %270)
br label %272
272: ; preds = %261
%273 = load i32, i32* %3
%274 = add nsw i32 %273, 1
store i32 %274, i32* %3
br label %258
275: ; preds = %258
%276 = load double*, double** %9
%277 = load i32, i32* %2
%278 = sext i32 %277 to i64
%279 = getelementptr inbounds double, double* %276, i64 %278
%280 = load double, double* %279
%281 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.3, i64 0, i64 0), double %280)
br label %282
282: ; preds = %275
%283 = load i32, i32* %2
%284 = add nsw i32 %283, 1
store i32 %284, i32* %2
br label %253
285: ; preds = %253
%286 = load i32, i32* %1
ret i32 %286
}

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