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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ MAT3_inv3_swap(double **, int, int, int);
int MAT3_inv3_second_col(register double source[3][3],
                         register double inv[3][3], int row0) {
  register int row1, row2, i1, i2, i;
  double temp, a, b;
  if (row0 == 0)
    i1 = 1, i2 = 2;
  else if (row0 == 1)
    i1 = 0, i2 = 2;
  else
    i1 = 0, i2 = 1;
  a = source[i1][1];
  if (a < 0)
    a = -a;
  b = source[i2][1];
  if (b < 0)
    b = -b;
  if (a > b)
    row1 = i1;
  else
    row1 = i2;
  row2 = (row1 == i1 ? i2 : i1);
  if ((source[row1][1] < 1e-20) && (source[row1][1] > -1e-20))
    return 0;
  temp = 1.0 / source[row1][1];
  source[row1][1] = 1.0;
  source[row1][2] *= temp;
  inv[row1][row1] = temp;
  inv[row1][row0] *= temp;
  for (i = 0; i < 3; i++)
    if (i != row1) {
      temp = -source[i][1];
      source[i][1] = 0.0;
      source[i][2] += temp * source[row1][2];
      inv[i][row1] = temp * inv[row1][row1];
      inv[i][row0] += temp * inv[row1][row0];
    }
  if ((source[row2][2] < 1e-20) && (source[row2][2] > -1e-20))
    return (0);
  temp = 1.0 / source[row2][2];
  source[row2][2] = 1.0;
  inv[row2][row2] = temp;
  inv[row2][row0] *= temp;
  inv[row2][row1] *= temp;
  for (i = 0; i < 3; i++)
    if (i != row2) {
      temp = -source[i][2];
      source[i][2] = 0.0;
      inv[i][row0] += temp * inv[row2][row0];
      inv[i][row1] += temp * inv[row2][row1];
      inv[i][row2] += temp * inv[row2][row2];
    }
  MAT3_inv3_swap(inv, row0, row1, row2);
  return 1;
}


x86 assembly (clang, -O0):
<MAT3_inv3_second_col>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jne    1140 <MAT3_inv3_second_col+0x30>
movl   $0x1,-0x28(%rbp)
movl   $0x2,-0x2c(%rbp)
jmp    1170 <MAT3_inv3_second_col+0x60>
cmpl   $0x1,-0x1c(%rbp)
jne    115d <MAT3_inv3_second_col+0x4d>
movl   $0x0,-0x28(%rbp)
movl   $0x2,-0x2c(%rbp)
jmp    116b <MAT3_inv3_second_col+0x5b>
movl   $0x0,-0x28(%rbp)
movl   $0x1,-0x2c(%rbp)
jmp    1170 <MAT3_inv3_second_col+0x60>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x40(%rbp),%xmm0
jbe    11b8 <MAT3_inv3_second_col+0xa8>
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x2c(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    1200 <MAT3_inv3_second_col+0xf0>
movsd  -0x48(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm0
ucomisd -0x48(%rbp),%xmm0
jbe    121b <MAT3_inv3_second_col+0x10b>
mov    -0x28(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    1221 <MAT3_inv3_second_col+0x111>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x28(%rbp),%eax
jne    1238 <MAT3_inv3_second_col+0x128>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    123e <MAT3_inv3_second_col+0x12e>
mov    -0x28(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0xda5(%rip),%xmm0
ucomisd 0x8(%rax),%xmm0
jbe    1298 <MAT3_inv3_second_col+0x188>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0x8(%rax),%xmm0
movsd  0xd86(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1298 <MAT3_inv3_second_col+0x188>
movl   $0x0,-0x4(%rbp)
jmp    16a2 <MAT3_inv3_second_col+0x592>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0xd61(%rip),%xmm0
divsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0xd40(%rip),%xmm0
movsd  %xmm0,0x8(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
mulsd  0x10(%rax),%xmm0
movsd  %xmm0,0x10(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x30(%rbp)
cmpl   $0x3,-0x30(%rbp)
jge    145a <MAT3_inv3_second_col+0x34a>
mov    -0x30(%rbp),%eax
cmp    -0x20(%rbp),%eax
je     1447 <MAT3_inv3_second_col+0x337>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x8(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0x10(%rax),%xmm2
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0x10(%rax),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    144c <MAT3_inv3_second_col+0x33c>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1339 <MAT3_inv3_second_col+0x229>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0xb8f(%rip),%xmm0
ucomisd 0x10(%rax),%xmm0
jbe    14ae <MAT3_inv3_second_col+0x39e>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0x10(%rax),%xmm0
movsd  0xb70(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    14ae <MAT3_inv3_second_col+0x39e>
movl   $0x0,-0x4(%rbp)
jmp    16a2 <MAT3_inv3_second_col+0x592>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0xb4b(%rip),%xmm0
divsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0xb2a(%rip),%xmm0
movsd  %xmm0,0x10(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x30(%rbp)
cmpl   $0x3,-0x30(%rbp)
jge    1689 <MAT3_inv3_second_col+0x579>
mov    -0x30(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     1676 <MAT3_inv3_second_col+0x566>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  0x10(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,0x10(%rax)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
jmp    167b <MAT3_inv3_second_col+0x56b>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1553 <MAT3_inv3_second_col+0x443>
mov    -0x18(%rbp),%rdi
mov    -0x1c(%rbp),%esi
mov    -0x20(%rbp),%edx
mov    -0x24(%rbp),%ecx
call   1030 <MAT3_inv3_swap@plt>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<MAT3_inv3_second_col>:
mov    $0x2,%eax
test   %edx,%edx
je     1127 <MAT3_inv3_second_col+0x17>
cmp    $0x1,%edx
je     1123 <MAT3_inv3_second_col+0x13>
mov    $0x1,%eax
xor    %ecx,%ecx
jmp    112c <MAT3_inv3_second_col+0x1c>
mov    $0x1,%ecx
push   %r15
push   %r14
push   %rbx
mov    %ecx,%ebx
lea    (%rbx,%rbx,2),%rbx
movsd  0x8(%rdi,%rbx,8),%xmm0
movapd 0xebb(%rip),%xmm1
movapd %xmm0,%xmm2
xorpd  %xmm1,%xmm2
xorpd  %xmm3,%xmm3
movapd %xmm0,%xmm4
cmpltsd %xmm3,%xmm4
andpd  %xmm4,%xmm2
andnpd %xmm0,%xmm4
orpd   %xmm2,%xmm4
mov    %eax,%ebx
lea    (%rbx,%rbx,2),%rbx
movsd  0x8(%rdi,%rbx,8),%xmm0
xorpd  %xmm0,%xmm1
movapd %xmm0,%xmm2
cmpltsd %xmm3,%xmm2
andpd  %xmm2,%xmm1
andnpd %xmm0,%xmm2
orpd   %xmm1,%xmm2
ucomisd %xmm2,%xmm4
mov    %eax,%r8d
cmova  %ecx,%r8d
cmova  %eax,%ecx
lea    (%r8,%r8,2),%rbx
movsd  0x8(%rdi,%rbx,8),%xmm2
xor    %eax,%eax
movsd  0xe63(%rip),%xmm1
ucomisd %xmm2,%xmm1
jbe    11c1 <MAT3_inv3_second_col+0xb1>
ucomisd 0xe5d(%rip),%xmm2
ja     14b5 <MAT3_inv3_second_col+0x3a5>
lea    (%rdi,%rbx,8),%rbx
add    $0x8,%rbx
movsd  0xe4f(%rip),%xmm0
movapd %xmm0,%xmm3
divsd  %xmm2,%xmm3
movabs $0x3ff0000000000000,%r10
mov    %r10,(%rbx)
lea    0x0(,%r8,8),%rbx
lea    (%rbx,%rbx,2),%rbx
lea    0x10(%rdi,%rbx,1),%r15
movsd  0x10(%rdi,%rbx,1),%xmm2
mulsd  %xmm3,%xmm2
movsd  %xmm2,0x10(%rdi,%rbx,1)
add    %rsi,%rbx
lea    (%rbx,%r8,8),%r14
movsd  %xmm3,(%rbx,%r8,8)
movslq %edx,%r9
lea    (%rbx,%r9,8),%r11
mulsd  (%rbx,%r9,8),%xmm3
movsd  %xmm3,(%rbx,%r9,8)
test   %r8,%r8
je     1282 <MAT3_inv3_second_col+0x172>
movsd  0x8(%rdi),%xmm2
movsd  0x10(%rdi),%xmm3
movapd 0xdc2(%rip),%xmm4
xorpd  %xmm2,%xmm4
movq   $0x0,0x8(%rdi)
movsd  (%r15),%xmm5
mulsd  %xmm2,%xmm5
subsd  %xmm5,%xmm3
movsd  %xmm3,0x10(%rdi)
mulsd  (%r14),%xmm4
movsd  %xmm4,(%rsi,%r8,8)
mulsd  (%r11),%xmm2
movsd  (%rsi,%r9,8),%xmm3
subsd  %xmm2,%xmm3
movsd  %xmm3,(%rsi,%r9,8)
cmp    $0x1,%r8d
je     12db <MAT3_inv3_second_col+0x1cb>
movsd  0x20(%rdi),%xmm2
movsd  0x28(%rdi),%xmm3
movapd 0xd6c(%rip),%xmm4
xorpd  %xmm2,%xmm4
movq   $0x0,0x20(%rdi)
movsd  (%r15),%xmm5
mulsd  %xmm2,%xmm5
subsd  %xmm5,%xmm3
movsd  %xmm3,0x28(%rdi)
mulsd  (%r14),%xmm4
movsd  %xmm4,0x18(%rsi,%r8,8)
mulsd  (%r11),%xmm2
movsd  0x18(%rsi,%r9,8),%xmm3
subsd  %xmm2,%xmm3
movsd  %xmm3,0x18(%rsi,%r9,8)
cmp    $0x2,%r8d
je     132e <MAT3_inv3_second_col+0x21e>
movsd  0x38(%rdi),%xmm2
movsd  0x40(%rdi),%xmm3
movapd 0xd13(%rip),%xmm4
xorpd  %xmm2,%xmm4
movq   $0x0,0x38(%rdi)
movsd  (%r15),%xmm5
mulsd  %xmm2,%xmm5
subsd  %xmm5,%xmm3
movsd  %xmm3,0x40(%rdi)
mulsd  (%r14),%xmm4
movsd  %xmm4,0x30(%rsi,%r8,8)
movsd  0x30(%rsi,%r9,8),%xmm3
mulsd  (%r11),%xmm2
subsd  %xmm2,%xmm3
movsd  %xmm3,0x30(%rsi,%r9,8)
mov    %ecx,%r11d
lea    (%r11,%r11,2),%rbx
movsd  0x10(%rdi,%rbx,8),%xmm2
ucomisd %xmm2,%xmm1
jbe    134f <MAT3_inv3_second_col+0x23f>
ucomisd 0xccf(%rip),%xmm2
ja     14b5 <MAT3_inv3_second_col+0x3a5>
lea    (%rdi,%rbx,8),%rax
add    $0x10,%rax
divsd  %xmm2,%xmm0
mov    %r10,(%rax)
lea    (%rsi,%rbx,8),%rbx
lea    (%rbx,%r11,8),%r10
movsd  %xmm0,(%rbx,%r11,8)
lea    (%rbx,%r9,8),%rax
movsd  (%rbx,%r9,8),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rbx,%r9,8)
lea    (%rbx,%r8,8),%r14
mulsd  (%rbx,%r8,8),%xmm0
movsd  %xmm0,(%rbx,%r8,8)
test   %ecx,%ecx
je     13ec <MAT3_inv3_second_col+0x2dc>
movsd  0x10(%rdi),%xmm0
movq   $0x0,0x10(%rdi)
movsd  (%rsi,%r9,8),%xmm1
movsd  (%rax),%xmm2
mulsd  %xmm0,%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,(%rsi,%r9,8)
movsd  (%rsi,%r8,8),%xmm1
movsd  (%r14),%xmm2
mulsd  %xmm0,%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,(%rsi,%r8,8)
mulsd  (%r10),%xmm0
movsd  (%rsi,%r11,8),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rsi,%r11,8)
cmp    $0x1,%ecx
je     144a <MAT3_inv3_second_col+0x33a>
movsd  0x28(%rdi),%xmm0
movq   $0x0,0x28(%rdi)
movsd  0x18(%rsi,%r9,8),%xmm1
movsd  (%rax),%xmm2
mulsd  %xmm0,%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,0x18(%rsi,%r9,8)
movsd  0x18(%rsi,%r8,8),%xmm1
movsd  (%r14),%xmm2
mulsd  %xmm0,%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,0x18(%rsi,%r8,8)
mulsd  (%r10),%xmm0
movsd  0x18(%rsi,%r11,8),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x18(%rsi,%r11,8)
cmp    $0x2,%ecx
je     14a3 <MAT3_inv3_second_col+0x393>
movsd  0x40(%rdi),%xmm0
movq   $0x0,0x40(%rdi)
movsd  0x30(%rsi,%r9,8),%xmm1
movsd  (%rax),%xmm2
mulsd  %xmm0,%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,0x30(%rsi,%r9,8)
movsd  0x30(%rsi,%r8,8),%xmm1
movsd  (%r14),%xmm2
mulsd  %xmm0,%xmm2
subsd  %xmm2,%xmm1
movsd  %xmm1,0x30(%rsi,%r8,8)
movsd  0x30(%rsi,%r11,8),%xmm1
mulsd  (%r10),%xmm0
subsd  %xmm0,%xmm1
movsd  %xmm1,0x30(%rsi,%r11,8)
mov    %rsi,%rdi
mov    %edx,%esi
mov    %r8d,%edx
call   1030 <MAT3_inv3_swap@plt>
mov    $0x1,%eax
pop    %rbx
pop    %r14
pop    %r15
ret

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

LLVM IR (-O2):
define i32 @MAT3_inv3_second_col([3 x double]* nocapture %0, [3 x double]* %1, i32 %2) {
switch i32 %2, label %5 [
i32 0, label %6
i32 1, label %4
]
4: ; preds = %3
br label %6
5: ; preds = %3
br label %6
6: ; preds = %3, %4, %5
%7 = phi i32 [ 0, %4 ], [ 0, %5 ], [ 1, %3 ]
%8 = phi i32 [ 2, %4 ], [ 1, %5 ], [ 2, %3 ]
%9 = zext i32 %7 to i64
%10 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 %9, i64 1
%11 = load double, double* %10
%12 = fcmp olt double %11, 0.000000e+00
%13 = fneg double %11
%14 = select i1 %12, double %13, double %11
%15 = zext i32 %8 to i64
%16 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 %15, i64 1
%17 = load double, double* %16
%18 = fcmp olt double %17, 0.000000e+00
%19 = fneg double %17
%20 = select i1 %18, double %19, double %17
%21 = fcmp ogt double %14, %20
%22 = select i1 %21, i32 %7, i32 %8
%23 = select i1 %21, i32 %8, i32 %7
%24 = zext i32 %22 to i64
%25 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 %24, i64 1
%26 = load double, double* %25
%27 = fcmp olt double %26, 0x3BC79CA10C924223
%28 = fcmp ogt double %26, 0xBBC79CA10C924223
%29 = and i1 %27, %28
br i1 %29, label %158, label %30
30: ; preds = %6
%31 = fdiv double 1.000000e+00, %26
store double 1.000000e+00, double* %25
%32 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 %24, i64 2
%33 = load double, double* %32
%34 = fmul double %31, %33
store double %34, double* %32
%35 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 %24, i64 %24
store double %31, double* %35
%36 = sext i32 %2 to i64
%37 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 %24, i64 %36
%38 = load double, double* %37
%39 = fmul double %31, %38
store double %39, double* %37
%40 = icmp eq i32 %22, 0
br i1 %40, label %57, label %41
41: ; preds = %30
%42 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 0, i64 1
%43 = load double, double* %42
%44 = fneg double %43
store double 0.000000e+00, double* %42
%45 = load double, double* %32
%46 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 0, i64 2
%47 = load double, double* %46
%48 = tail call double @llvm.fmuladd.f64(double %44, double %45, double %47)
store double %48, double* %46
%49 = load double, double* %35
%50 = fmul double %49, %44
%51 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 0, i64 %24
store double %50, double* %51
%52 = load double, double* %37
%53 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 0, i64 %36
%54 = load double, double* %53
%55 = tail call double @llvm.fmuladd.f64(double %44, double %52, double %54)
store double %55, double* %53
%56 = icmp eq i32 %22, 1
br i1 %56, label %73, label %57
57: ; preds = %30, %41
%58 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 1, i64 1
%59 = load double, double* %58
%60 = fneg double %59
store double 0.000000e+00, double* %58
%61 = load double, double* %32
%62 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 1, i64 2
%63 = load double, double* %62
%64 = tail call double @llvm.fmuladd.f64(double %60, double %61, double %63)
store double %64, double* %62
%65 = load double, double* %35
%66 = fmul double %65, %60
%67 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 1, i64 %24
store double %66, double* %67
%68 = load double, double* %37
%69 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 1, i64 %36
%70 = load double, double* %69
%71 = tail call double @llvm.fmuladd.f64(double %60, double %68, double %70)
store double %71, double* %69
%72 = icmp eq i32 %22, 2
br i1 %72, label %88, label %73
73: ; preds = %41, %57
%74 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 2, i64 1
%75 = load double, double* %74
%76 = fneg double %75
store double 0.000000e+00, double* %74
%77 = load double, double* %32
%78 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 2, i64 2
%79 = load double, double* %78
%80 = tail call double @llvm.fmuladd.f64(double %76, double %77, double %79)
store double %80, double* %78
%81 = load double, double* %35
%82 = fmul double %81, %76
%83 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 2, i64 %24
store double %82, double* %83
%84 = load double, double* %37
%85 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 2, i64 %36
%86 = load double, double* %85
%87 = tail call double @llvm.fmuladd.f64(double %76, double %84, double %86)
store double %87, double* %85
br label %88
88: ; preds = %73, %57
%89 = zext i32 %23 to i64
%90 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 %89, i64 2
%91 = load double, double* %90
%92 = fcmp olt double %91, 0x3BC79CA10C924223
%93 = fcmp ogt double %91, 0xBBC79CA10C924223
%94 = and i1 %92, %93
br i1 %94, label %158, label %95
95: ; preds = %88
%96 = fdiv double 1.000000e+00, %91
store double 1.000000e+00, double* %90
%97 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 %89, i64 %89
store double %96, double* %97
%98 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 %89, i64 %36
%99 = load double, double* %98
%100 = fmul double %96, %99
store double %100, double* %98
%101 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 %89, i64 %24
%102 = load double, double* %101
%103 = fmul double %96, %102
store double %103, double* %101
%104 = icmp eq i32 %23, 0
br i1 %104, label %122, label %105
105: ; preds = %95
%106 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 0, i64 2
%107 = load double, double* %106
%108 = fneg double %107
store double 0.000000e+00, double* %106
%109 = load double, double* %98
%110 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 0, i64 %36
%111 = load double, double* %110
%112 = tail call double @llvm.fmuladd.f64(double %108, double %109, double %111)
store double %112, double* %110
%113 = load double, double* %101
%114 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 0, i64 %24
%115 = load double, double* %114
%116 = tail call double @llvm.fmuladd.f64(double %108, double %113, double %115)
store double %116, double* %114
%117 = load double, double* %97
%118 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 0, i64 %89
%119 = load double, double* %118
%120 = tail call double @llvm.fmuladd.f64(double %108, double %117, double %119)
store double %120, double* %118
%121 = icmp eq i32 %23, 1
br i1 %121, label %139, label %122
122: ; preds = %95, %105
%123 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 1, i64 2
%124 = load double, double* %123
%125 = fneg double %124
store double 0.000000e+00, double* %123
%126 = load double, double* %98
%127 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 1, i64 %36
%128 = load double, double* %127
%129 = tail call double @llvm.fmuladd.f64(double %125, double %126, double %128)
store double %129, double* %127
%130 = load double, double* %101
%131 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 1, i64 %24
%132 = load double, double* %131
%133 = tail call double @llvm.fmuladd.f64(double %125, double %130, double %132)
store double %133, double* %131
%134 = load double, double* %97
%135 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 1, i64 %89
%136 = load double, double* %135
%137 = tail call double @llvm.fmuladd.f64(double %125, double %134, double %136)
store double %137, double* %135
%138 = icmp eq i32 %23, 2
br i1 %138, label %155, label %139
139: ; preds = %105, %122
%140 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 2, i64 2
%141 = load double, double* %140
%142 = fneg double %141
store double 0.000000e+00, double* %140
%143 = load double, double* %98
%144 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 2, i64 %36
%145 = load double, double* %144
%146 = tail call double @llvm.fmuladd.f64(double %142, double %143, double %145)
store double %146, double* %144
%147 = load double, double* %101
%148 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 2, i64 %24
%149 = load double, double* %148
%150 = tail call double @llvm.fmuladd.f64(double %142, double %147, double %149)
store double %150, double* %148
%151 = load double, double* %97
%152 = getelementptr inbounds [3 x double], [3 x double]* %1, i64 2, i64 %89
%153 = load double, double* %152
%154 = tail call double @llvm.fmuladd.f64(double %142, double %151, double %153)
store double %154, double* %152
br label %155
155: ; preds = %139, %122
%156 = bitcast [3 x double]* %1 to double**
%157 = tail call i32 @MAT3_inv3_swap(double** %156, i32 %2, i32 %22, i32 %23)
br label %158
158: ; preds = %88, %6, %155
%159 = phi i32 [ 1, %155 ], [ 0, %6 ], [ 0, %88 ]
ret i32 %159
}