#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);
int /*<<< orphan*/ free_dmatrix(double **, int, int, int, int);
int /*<<< orphan*/ pseudo_inv(double **, double **, int, int, int, int);
void modal_condensation(double **M, double **K, int N, int *R, int *p, int n,
                        double **Mc, double **Kc, double **V, double *f, int *m,
                        int verbose) {
  double **P, **invP, traceM = 0, traceMc = 0, Aij;
  int i, j, k;
  P = dmatrix(1, n, 1, n);
  invP = dmatrix(1, n, 1, n);
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
      P[i][j] = V[p[i]][m[j]];
  pseudo_inv(P, invP, n, n, 1e-9, verbose);
  for (i = 1; i <= N; i++)
    if (!R[i])
      traceM += M[i][i];
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= n; j++) {
      Aij = 0.0;
      for (k = 1; k <= n; k++)
        Aij += invP[k][i] * invP[k][j];
      Mc[i][j] = Aij;
    }
  }
  for (i = 1; i <= n; i++)
    traceMc += Mc[i][i];
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= n; j++) {
      Aij = 0.0;
      for (k = 1; k <= n; k++)
        Aij += invP[k][i] * 4.0 *
               3.14159265358979323846264338327950288419716939937510 *
               3.14159265358979323846264338327950288419716939937510 * f[m[k]] *
               f[m[k]] * invP[k][j];
      Kc[i][j] = Aij;
    }
  }
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
      Mc[i][j] *= (traceM / traceMc);
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
      Kc[i][j] *= (traceM / traceMc);
  free_dmatrix(P, 1, n, 1, n);
  free_dmatrix(invP, 1, n, 1, n);
}


x86 assembly (clang, -O0):
<modal_condensation>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%rax
mov    0x28(%rbp),%rax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x2c(%rbp),%esi
mov    -0x2c(%rbp),%ecx
mov    $0x1,%edx
mov    %edx,%edi
call   1040 <dmatrix@plt>
mov    %rax,-0x38(%rbp)
mov    -0x2c(%rbp),%esi
mov    -0x2c(%rbp),%ecx
mov    $0x1,%edx
mov    %edx,%edi
call   1040 <dmatrix@plt>
mov    %rax,-0x40(%rbp)
movl   $0x1,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     1223 <modal_condensation+0xf3>
movl   $0x1,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     1210 <modal_condensation+0xe0>
mov    0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq -0x5c(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x30(%rbp),%rcx
movslq -0x60(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x38(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x60(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    11bc <modal_condensation+0x8c>
jmp    1215 <modal_condensation+0xe5>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    11a9 <modal_condensation+0x79>
mov    -0x38(%rbp),%rdi
mov    -0x40(%rbp),%rsi
mov    -0x2c(%rbp),%edx
mov    -0x2c(%rbp),%ecx
mov    0x38(%rbp),%r9d
xor    %r8d,%r8d
call   1030 <pseudo_inv@plt>
movl   $0x1,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jg     1294 <modal_condensation+0x164>
mov    -0x20(%rbp),%rax
movslq -0x5c(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    1281 <modal_condensation+0x151>
mov    -0x8(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1286 <modal_condensation+0x156>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    1244 <modal_condensation+0x114>
movl   $0x1,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     135a <modal_condensation+0x22a>
movl   $0x1,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     1347 <modal_condensation+0x217>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     131f <modal_condensation+0x1ef>
mov    -0x40(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x60(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    12c9 <modal_condensation+0x199>
movsd  -0x58(%rbp),%xmm0
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x60(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    12ae <modal_condensation+0x17e>
jmp    134c <modal_condensation+0x21c>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    129b <modal_condensation+0x16b>
movl   $0x1,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     139a <modal_condensation+0x26a>
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x5c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    1361 <modal_condensation+0x231>
movl   $0x1,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     14aa <modal_condensation+0x37a>
movl   $0x1,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     1497 <modal_condensation+0x367>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x1,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     146f <modal_condensation+0x33f>
mov    -0x40(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x5c(%rbp),%rcx
movsd  0xc15(%rip),%xmm0
mulsd  (%rax,%rcx,8),%xmm0
movsd  0xc00(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xbf4(%rip),%xmm1
mulsd  %xmm1,%xmm0
mov    0x28(%rbp),%rax
mov    0x30(%rbp),%rcx
movslq -0x64(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    0x28(%rbp),%rax
mov    0x30(%rbp),%rcx
movslq -0x64(%rbp),%rdx
movslq (%rcx,%rdx,4),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x40(%rbp),%rax
movslq -0x64(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x60(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    13cf <modal_condensation+0x29f>
movsd  -0x58(%rbp),%xmm0
mov    0x18(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x60(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    13b4 <modal_condensation+0x284>
jmp    149c <modal_condensation+0x36c>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    13a1 <modal_condensation+0x271>
movl   $0x1,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     1515 <modal_condensation+0x3e5>
movl   $0x1,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     1502 <modal_condensation+0x3d2>
movsd  -0x48(%rbp),%xmm0
divsd  -0x50(%rbp),%xmm0
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x60(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    14c4 <modal_condensation+0x394>
jmp    1507 <modal_condensation+0x3d7>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    14b1 <modal_condensation+0x381>
movl   $0x1,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     1580 <modal_condensation+0x450>
movl   $0x1,-0x60(%rbp)
mov    -0x60(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jg     156d <modal_condensation+0x43d>
movsd  -0x48(%rbp),%xmm0
divsd  -0x50(%rbp),%xmm0
mov    0x18(%rbp),%rax
movslq -0x5c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x60(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    152f <modal_condensation+0x3ff>
jmp    1572 <modal_condensation+0x442>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    151c <modal_condensation+0x3ec>
mov    -0x38(%rbp),%rdi
mov    -0x2c(%rbp),%edx
mov    -0x2c(%rbp),%r8d
mov    $0x1,%ecx
mov    %ecx,%esi
call   1050 <free_dmatrix@plt>
mov    -0x40(%rbp),%rdi
mov    -0x2c(%rbp),%edx
mov    -0x2c(%rbp),%r8d
mov    $0x1,%ecx
mov    %ecx,%esi
call   1050 <free_dmatrix@plt>
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<modal_condensation>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r9d,%ebp
mov    %r8,0x40(%rsp)
mov    %rcx,0x28(%rsp)
mov    %edx,0x24(%rsp)
mov    %rdi,0x30(%rsp)
mov    0xa8(%rsp),%eax
mov    %eax,0x20(%rsp)
mov    0xa0(%rsp),%r15
mov    0x98(%rsp),%r12
mov    0x90(%rsp),%rbx
mov    0x88(%rsp),%rax
mov    %rax,0x38(%rsp)
mov    0x80(%rsp),%rax
mov    %rax,0x10(%rsp)
mov    $0x1,%edi
mov    %r9d,%esi
mov    $0x1,%edx
mov    %r9d,%ecx
call   1040 <dmatrix@plt>
mov    %rax,0x18(%rsp)
mov    $0x1,%edi
mov    %ebp,%esi
mov    $0x1,%edx
mov    %ebp,%ecx
call   1040 <dmatrix@plt>
mov    %rax,%r14
mov    %ebp,%r13d
mov    %rbp,0x8(%rsp)
test   %ebp,%ebp
jle    12ad <modal_condensation+0x17d>
lea    0x1(%r13),%r8
lea    -0x1(%r13),%r9
mov    %r13d,%edx
and    $0x3,%edx
mov    %r13d,%r11d
and    $0xfffffffc,%r11d
mov    $0x1,%r10d
jmp    11fd <modal_condensation+0xcd>
xchg   %ax,%ax
add    $0x1,%r10
cmp    %r8,%r10
je     12ad <modal_condensation+0x17d>
mov    0x40(%rsp),%rax
movslq (%rax,%r10,4),%rax
mov    (%rbx,%rax,8),%rbp
mov    0x18(%rsp),%rax
mov    (%rax,%r10,8),%rax
mov    $0x1,%ecx
cmp    $0x3,%r9
jb     1271 <modal_condensation+0x141>
xor    %ecx,%ecx
movslq 0x4(%r15,%rcx,4),%rdi
movsd  0x0(%rbp,%rdi,8),%xmm0
movsd  %xmm0,0x8(%rax,%rcx,8)
movslq 0x8(%r15,%rcx,4),%rdi
movsd  0x0(%rbp,%rdi,8),%xmm0
movsd  %xmm0,0x10(%rax,%rcx,8)
movslq 0xc(%r15,%rcx,4),%rdi
movsd  0x0(%rbp,%rdi,8),%xmm0
movsd  %xmm0,0x18(%rax,%rcx,8)
movslq 0x10(%r15,%rcx,4),%rdi
movsd  0x0(%rbp,%rdi,8),%xmm0
movsd  %xmm0,0x20(%rax,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%r11
jne    1220 <modal_condensation+0xf0>
add    $0x1,%rcx
test   %rdx,%rdx
je     11f0 <modal_condensation+0xc0>
lea    (%rax,%rcx,8),%rax
lea    (%r15,%rcx,4),%rcx
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movslq (%rcx,%rdi,4),%rsi
movsd  0x0(%rbp,%rsi,8),%xmm0
movsd  %xmm0,(%rax,%rdi,8)
add    $0x1,%rdi
cmp    %rdi,%rdx
jne    1290 <modal_condensation+0x160>
jmp    11f0 <modal_condensation+0xc0>
mov    0x18(%rsp),%rdi
mov    %r14,%rsi
mov    0x8(%rsp),%rcx
mov    %ecx,%edx
xor    %r8d,%r8d
mov    0x20(%rsp),%r9d
call   1030 <pseudo_inv@plt>
mov    0x24(%rsp),%ecx
test   %ecx,%ecx
jle    130a <modal_condensation+0x1da>
mov    %ecx,%eax
cmp    $0x1,%ecx
mov    0x10(%rsp),%r10
jne    1462 <modal_condensation+0x332>
xorpd  %xmm0,%xmm0
mov    $0x1,%ecx
mov    0x30(%rsp),%rdi
mov    0x28(%rsp),%rbp
test   $0x1,%al
je     1313 <modal_condensation+0x1e3>
cmpl   $0x0,0x0(%rbp,%rcx,4)
jne    1313 <modal_condensation+0x1e3>
mov    (%rdi,%rcx,8),%rax
addsd  (%rax,%rcx,8),%xmm0
jmp    1313 <modal_condensation+0x1e3>
xorpd  %xmm0,%xmm0
mov    0x10(%rsp),%r10
cmpl   $0x0,0x8(%rsp)
jle    18ae <modal_condensation+0x77e>
lea    0x1(%r13),%r11
lea    -0x1(%r13),%r8
mov    %r13d,%ecx
and    $0x3,%ecx
mov    %r13d,%esi
and    $0xfffffffc,%esi
mov    $0x1,%edi
jmp    134d <modal_condensation+0x21d>
nopl   0x0(%rax)
add    $0x1,%rdi
cmp    %r11,%rdi
je     1430 <modal_condensation+0x300>
mov    (%r10,%rdi,8),%r9
mov    $0x1,%eax
jmp    136f <modal_condensation+0x23f>
nopl   0x0(%rax,%rax,1)
movsd  %xmm1,(%r9,%rax,8)
add    $0x1,%rax
cmp    %r11,%rax
je     1340 <modal_condensation+0x210>
xorpd  %xmm1,%xmm1
cmp    $0x3,%r8
jae    1390 <modal_condensation+0x260>
mov    $0x1,%edx
test   %rcx,%rcx
jne    1408 <modal_condensation+0x2d8>
jmp    1360 <modal_condensation+0x230>
nopl   0x0(%rax)
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0x8(%r14,%rdx,8),%rbp
mov    0x10(%r14,%rdx,8),%rbx
movsd  0x0(%rbp,%rdi,8),%xmm2
mulsd  0x0(%rbp,%rax,8),%xmm2
addsd  %xmm1,%xmm2
movsd  (%rbx,%rdi,8),%xmm3
mulsd  (%rbx,%rax,8),%xmm3
addsd  %xmm2,%xmm3
mov    0x18(%r14,%rdx,8),%rbp
movsd  0x0(%rbp,%rdi,8),%xmm2
mulsd  0x0(%rbp,%rax,8),%xmm2
mov    0x20(%r14,%rdx,8),%rbp
movsd  0x0(%rbp,%rdi,8),%xmm1
mulsd  0x0(%rbp,%rax,8),%xmm1
addsd  %xmm3,%xmm2
addsd  %xmm2,%xmm1
add    $0x4,%rdx
cmp    %rdx,%rsi
jne    13a0 <modal_condensation+0x270>
add    $0x1,%rdx
test   %rcx,%rcx
je     1360 <modal_condensation+0x230>
lea    (%r14,%rdx,8),%rdx
xor    %ebp,%ebp
xchg   %ax,%ax
mov    (%rdx,%rbp,8),%rbx
movsd  (%rbx,%rdi,8),%xmm2
mulsd  (%rbx,%rax,8),%xmm2
addsd  %xmm2,%xmm1
add    $0x1,%rbp
cmp    %rbp,%rcx
jne    1410 <modal_condensation+0x2e0>
jmp    1360 <modal_condensation+0x230>
cmpl   $0x0,0x8(%rsp)
jle    18ae <modal_condensation+0x77e>
mov    %r13d,%eax
and    $0x3,%eax
cmp    $0x3,%r8
jae    14cd <modal_condensation+0x39d>
xorpd  %xmm1,%xmm1
mov    $0x1,%ecx
test   %rax,%rax
jne    1520 <modal_condensation+0x3f0>
jmp    1533 <modal_condensation+0x403>
mov    %eax,%edx
and    $0xfffffffe,%edx
neg    %rdx
xorpd  %xmm0,%xmm0
mov    $0x1,%ecx
mov    0x30(%rsp),%rdi
mov    0x28(%rsp),%rbp
jmp    1496 <modal_condensation+0x366>
nop
lea    (%rdx,%rcx,1),%rsi
add    $0x2,%rsi
add    $0x2,%rcx
cmp    $0x1,%rsi
je     12f4 <modal_condensation+0x1c4>
cmpl   $0x0,0x0(%rbp,%rcx,4)
je     14b0 <modal_condensation+0x380>
cmpl   $0x0,0x4(%rbp,%rcx,4)
jne    1480 <modal_condensation+0x350>
jmp    14c0 <modal_condensation+0x390>
cs nopw 0x0(%rax,%rax,1)
mov    (%rdi,%rcx,8),%rsi
addsd  (%rsi,%rcx,8),%xmm0
cmpl   $0x0,0x4(%rbp,%rcx,4)
jne    1480 <modal_condensation+0x350>
mov    0x8(%rdi,%rcx,8),%rsi
addsd  0x8(%rsi,%rcx,8),%xmm0
jmp    1480 <modal_condensation+0x350>
mov    %r13d,%edx
and    $0xfffffffc,%edx
xorpd  %xmm1,%xmm1
xor    %ecx,%ecx
nopl   0x0(%rax)
mov    0x8(%r10,%rcx,8),%rsi
mov    0x10(%r10,%rcx,8),%rdi
addsd  0x8(%rsi,%rcx,8),%xmm1
addsd  0x10(%rdi,%rcx,8),%xmm1
mov    0x18(%r10,%rcx,8),%rsi
addsd  0x18(%rsi,%rcx,8),%xmm1
mov    0x20(%r10,%rcx,8),%rsi
addsd  0x20(%rsi,%rcx,8),%xmm1
add    $0x4,%rcx
cmp    %rcx,%rdx
jne    14e0 <modal_condensation+0x3b0>
add    $0x1,%rcx
test   %rax,%rax
je     1533 <modal_condensation+0x403>
xchg   %ax,%ax
mov    (%r10,%rcx,8),%rdx
addsd  (%rdx,%rcx,8),%xmm1
add    $0x1,%rcx
add    $0xffffffffffffffff,%rax
jne    1520 <modal_condensation+0x3f0>
cmpl   $0x0,0x8(%rsp)
jle    18ae <modal_condensation+0x77e>
mov    0x8(%rsp),%rax
lea    0x1(%rax),%r9d
mov    %r13d,%esi
and    $0xfffffffe,%esi
neg    %rsi
mov    $0x1,%edi
movsd  0xaa3(%rip),%xmm2
movsd  0xaa3(%rip),%xmm3
mov    0x38(%rsp),%r10
jmp    157d <modal_condensation+0x44d>
nopl   0x0(%rax)
add    $0x1,%rdi
cmp    %r9,%rdi
je     1663 <modal_condensation+0x533>
mov    (%r10,%rdi,8),%rbp
mov    $0x1,%ecx
jmp    159f <modal_condensation+0x46f>
nopl   0x0(%rax,%rax,1)
movsd  %xmm4,0x0(%rbp,%rcx,8)
add    $0x1,%rcx
cmp    %r9,%rcx
je     1570 <modal_condensation+0x440>
xorpd  %xmm4,%xmm4
mov    $0x1,%eax
test   %r8,%r8
je     1624 <modal_condensation+0x4f4>
nopl   (%rax)
mov    (%r14,%rax,8),%rdx
movsd  (%rdx,%rdi,8),%xmm5
mulsd  %xmm2,%xmm5
mulsd  %xmm3,%xmm5
mulsd  %xmm3,%xmm5
movslq (%r15,%rax,4),%rbx
movsd  (%r12,%rbx,8),%xmm6
mulsd  %xmm6,%xmm5
mulsd  %xmm6,%xmm5
mulsd  (%rdx,%rcx,8),%xmm5
mov    0x8(%r14,%rax,8),%rdx
addsd  %xmm4,%xmm5
movsd  (%rdx,%rdi,8),%xmm4
mulsd  %xmm2,%xmm4
mulsd  %xmm3,%xmm4
mulsd  %xmm3,%xmm4
movslq 0x4(%r15,%rax,4),%rbx
movsd  (%r12,%rbx,8),%xmm6
mulsd  %xmm6,%xmm4
mulsd  %xmm6,%xmm4
mulsd  (%rdx,%rcx,8),%xmm4
addsd  %xmm5,%xmm4
lea    (%rsi,%rax,1),%rdx
add    $0x2,%rdx
add    $0x2,%rax
cmp    $0x1,%rdx
jne    15b0 <modal_condensation+0x480>
test   $0x1,%r13b
je     1590 <modal_condensation+0x460>
mov    (%r14,%rax,8),%rdx
movsd  (%rdx,%rdi,8),%xmm5
mulsd  %xmm2,%xmm5
mulsd  %xmm3,%xmm5
mulsd  %xmm3,%xmm5
movslq (%r15,%rax,4),%rax
movsd  (%r12,%rax,8),%xmm6
mulsd  %xmm6,%xmm5
mulsd  %xmm6,%xmm5
mulsd  (%rdx,%rcx,8),%xmm5
addsd  %xmm5,%xmm4
jmp    1590 <modal_condensation+0x460>
cmpl   $0x0,0x8(%rsp)
jle    18ae <modal_condensation+0x77e>
movabs $0x7ffffffffffffffe,%r8
ff ff 7f
divsd  %xmm1,%xmm0
lea    -0x1(%r11),%rsi
lea    -0x5(%r11),%rbx
mov    %rbx,%rdi
shr    $0x2,%rdi
add    $0x1,%rdi
mov    %rsi,%r15
and    $0xfffffffffffffffc,%r15
lea    0x1(%r15),%r12
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
mov    %rdi,%r10
and    $0xfffffffffffffffe,%r10
mov    $0x1,%eax
jmp    16bd <modal_condensation+0x58d>
add    $0x1,%rax
cmp    %r9,%rax
je     179e <modal_condensation+0x66e>
mov    0x10(%rsp),%rcx
mov    (%rcx,%rax,8),%rbp
mov    $0x1,%ecx
cmp    $0x4,%rsi
jb     1780 <modal_condensation+0x650>
cmp    $0x4,%rbx
jae    16e0 <modal_condensation+0x5b0>
xor    %edx,%edx
jmp    173a <modal_condensation+0x60a>
nop
mov    %r10,%rcx
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nop
movupd 0x8(%rbp,%rdx,8),%xmm2
movupd 0x18(%rbp,%rdx,8),%xmm3
movupd 0x28(%rbp,%rdx,8),%xmm4
movupd 0x38(%rbp,%rdx,8),%xmm5
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,0x8(%rbp,%rdx,8)
movupd %xmm3,0x18(%rbp,%rdx,8)
mulpd  %xmm1,%xmm4
mulpd  %xmm1,%xmm5
movupd %xmm4,0x28(%rbp,%rdx,8)
movupd %xmm5,0x38(%rbp,%rdx,8)
add    $0x8,%rdx
add    $0xfffffffffffffffe,%rcx
jne    16f0 <modal_condensation+0x5c0>
test   $0x1,%dil
je     1768 <modal_condensation+0x638>
shl    $0x3,%rdx
or     $0x8,%rdx
movupd 0x0(%rbp,%rdx,1),%xmm2
movupd 0x10(%rbp,%rdx,1),%xmm3
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,0x0(%rbp,%rdx,1)
movupd %xmm3,0x10(%rbp,%rdx,1)
mov    %r12,%rcx
cmp    %r15,%rsi
je     16b0 <modal_condensation+0x580>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  0x0(%rbp,%rcx,8),%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,0x0(%rbp,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%r11
jne    1780 <modal_condensation+0x650>
jmp    16b0 <modal_condensation+0x580>
cmpl   $0x0,0x8(%rsp)
jle    18ae <modal_condensation+0x77e>
lea    0x1(%r15),%r10
and    %rdi,%r8
mov    $0x1,%eax
jmp    17cd <modal_condensation+0x69d>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rax
cmp    %r9,%rax
je     18ae <modal_condensation+0x77e>
mov    0x38(%rsp),%rcx
mov    (%rcx,%rax,8),%rbp
mov    $0x1,%ecx
cmp    $0x4,%rsi
jb     1890 <modal_condensation+0x760>
cmp    $0x4,%rbx
jae    17f0 <modal_condensation+0x6c0>
xor    %edx,%edx
jmp    184a <modal_condensation+0x71a>
nop
mov    %r8,%rcx
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nop
movupd 0x8(%rbp,%rdx,8),%xmm2
movupd 0x18(%rbp,%rdx,8),%xmm3
movupd 0x28(%rbp,%rdx,8),%xmm4
movupd 0x38(%rbp,%rdx,8),%xmm5
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,0x8(%rbp,%rdx,8)
movupd %xmm3,0x18(%rbp,%rdx,8)
mulpd  %xmm1,%xmm4
mulpd  %xmm1,%xmm5
movupd %xmm4,0x28(%rbp,%rdx,8)
movupd %xmm5,0x38(%rbp,%rdx,8)
add    $0x8,%rdx
add    $0xfffffffffffffffe,%rcx
jne    1800 <modal_condensation+0x6d0>
test   $0x1,%dil
je     1878 <modal_condensation+0x748>
shl    $0x3,%rdx
or     $0x8,%rdx
movupd 0x0(%rbp,%rdx,1),%xmm2
movupd 0x10(%rbp,%rdx,1),%xmm3
mulpd  %xmm1,%xmm2
mulpd  %xmm1,%xmm3
movupd %xmm2,0x0(%rbp,%rdx,1)
movupd %xmm3,0x10(%rbp,%rdx,1)
mov    %r10,%rcx
cmp    %r15,%rsi
je     17c0 <modal_condensation+0x690>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  0x0(%rbp,%rcx,8),%xmm2
mulsd  %xmm0,%xmm2
movsd  %xmm2,0x0(%rbp,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%r11
jne    1890 <modal_condensation+0x760>
jmp    17c0 <modal_condensation+0x690>
mov    0x18(%rsp),%rdi
mov    $0x1,%esi
mov    0x8(%rsp),%rbx
mov    %ebx,%edx
mov    $0x1,%ecx
mov    %ebx,%r8d
call   1050 <free_dmatrix@plt>
mov    %r14,%rdi
mov    $0x1,%esi
mov    %ebx,%edx
mov    $0x1,%ecx
mov    %ebx,%r8d
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1050 <free_dmatrix@plt>

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

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