#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 const mat_Dabs(int /*<<< orphan*/);
int /*<<< orphan*/ mat_copy_vector_d3(double *, double *);
int /*<<< orphan*/ mat_get_determinant_d3(double **);
scalar_t__ mat_norm_squared_d3(double *);
void get_delaunay_shortest_vectors(double basis[4][3], const double symprec) {
  int i, j;
  double tmpmat[3][3], b[7][3], tmpvec[3];
  for (i = 0; i < 4; i++) {
    for (j = 0; j < 3; j++) {
      b[i][j] = basis[i][j];
    }
  }
  for (i = 0; i < 3; i++) {
    b[4][i] = basis[0][i] + basis[1][i];
  }
  for (i = 0; i < 3; i++) {
    b[5][i] = basis[1][i] + basis[2][i];
  }
  for (i = 0; i < 3; i++) {
    b[6][i] = basis[2][i] + basis[0][i];
  }
  for (i = 0; i < 6; i++) {
    for (j = 0; j < 6; j++) {
      if (mat_norm_squared_d3(b[j]) > mat_norm_squared_d3(b[j + 1]) + 1e-10) {
        mat_copy_vector_d3(tmpvec, b[j]);
        mat_copy_vector_d3(b[j], b[j + 1]);
        mat_copy_vector_d3(b[j + 1], tmpvec);
      }
    }
  }
  for (i = 2; i < 7; i++) {
    for (j = 0; j < 3; j++) {
      tmpmat[j][0] = b[0][j];
      tmpmat[j][1] = b[1][j];
      tmpmat[j][2] = b[i][j];
    }
    if (mat_Dabs(mat_get_determinant_d3(tmpmat)) > symprec) {
      for (j = 0; j < 3; j++) {
        basis[0][j] = b[0][j];
        basis[1][j] = b[1][j];
        basis[2][j] = b[i][j];
      }
      break;
    }
  }
}


x86 assembly (clang, -O0):
<get_delaunay_shortest_vectors>:
push   %rbp
mov    %rsp,%rbp
sub    $0x140,%rsp
mov    %rdi,-0x8(%rbp)
movsd  %xmm0,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x4,-0x14(%rbp)
jge    11ca <get_delaunay_shortest_vectors+0x8a>
movl   $0x0,-0x18(%rbp)
cmpl   $0x3,-0x18(%rbp)
jge    11b7 <get_delaunay_shortest_vectors+0x77>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x14(%rbp),%rcx
lea    -0x110(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    116c <get_delaunay_shortest_vectors+0x2c>
jmp    11bc <get_delaunay_shortest_vectors+0x7c>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    115b <get_delaunay_shortest_vectors+0x1b>
movl   $0x0,-0x14(%rbp)
cmpl   $0x3,-0x14(%rbp)
jge    1211 <get_delaunay_shortest_vectors+0xd1>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
addsd  0x18(%rax,%rcx,8),%xmm0
movslq -0x14(%rbp),%rax
movsd  %xmm0,-0xb0(%rbp,%rax,8)
ff ff
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11d1 <get_delaunay_shortest_vectors+0x91>
movl   $0x0,-0x14(%rbp)
cmpl   $0x3,-0x14(%rbp)
jge    1259 <get_delaunay_shortest_vectors+0x119>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsd  0x18(%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
addsd  0x30(%rax,%rcx,8),%xmm0
movslq -0x14(%rbp),%rax
movsd  %xmm0,-0x98(%rbp,%rax,8)
ff ff
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1218 <get_delaunay_shortest_vectors+0xd8>
movl   $0x0,-0x14(%rbp)
cmpl   $0x3,-0x14(%rbp)
jge    129d <get_delaunay_shortest_vectors+0x15d>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movsd  0x30(%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movslq -0x14(%rbp),%rax
movsd  %xmm0,-0x80(%rbp,%rax,8)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1260 <get_delaunay_shortest_vectors+0x120>
movl   $0x0,-0x14(%rbp)
cmpl   $0x6,-0x14(%rbp)
jge    13b4 <get_delaunay_shortest_vectors+0x274>
movl   $0x0,-0x18(%rbp)
cmpl   $0x6,-0x18(%rbp)
jge    13a1 <get_delaunay_shortest_vectors+0x261>
movslq -0x18(%rbp),%rax
lea    -0x110(%rbp),%rdi
imul   $0x18,%rax,%rax
add    %rax,%rdi
call   1040 <mat_norm_squared_d3@plt>
cvtsi2sd %rax,%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
mov    -0x18(%rbp),%eax
add    $0x1,%eax
cltq
lea    -0x110(%rbp),%rdi
imul   $0x18,%rax,%rax
add    %rax,%rdi
call   1040 <mat_norm_squared_d3@plt>
movsd  -0x138(%rbp),%xmm0
ff
cvtsi2sd %rax,%xmm1
movsd  0xced(%rip),%xmm2
addsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    138e <get_delaunay_shortest_vectors+0x24e>
lea    -0x130(%rbp),%rdi
movslq -0x18(%rbp),%rax
lea    -0x110(%rbp),%rsi
imul   $0x18,%rax,%rax
add    %rax,%rsi
call   1050 <mat_copy_vector_d3@plt>
movslq -0x18(%rbp),%rax
lea    -0x110(%rbp),%rdi
imul   $0x18,%rax,%rax
add    %rax,%rdi
mov    -0x18(%rbp),%eax
add    $0x1,%eax
cltq
lea    -0x110(%rbp),%rsi
imul   $0x18,%rax,%rax
add    %rax,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
cltq
lea    -0x110(%rbp),%rdi
imul   $0x18,%rax,%rax
add    %rax,%rdi
lea    -0x130(%rbp),%rsi
call   1050 <mat_copy_vector_d3@plt>
jmp    1393 <get_delaunay_shortest_vectors+0x253>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    12b5 <get_delaunay_shortest_vectors+0x175>
jmp    13a6 <get_delaunay_shortest_vectors+0x266>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    12a4 <get_delaunay_shortest_vectors+0x164>
movl   $0x2,-0x14(%rbp)
cmpl   $0x7,-0x14(%rbp)
jge    1504 <get_delaunay_shortest_vectors+0x3c4>
movl   $0x0,-0x18(%rbp)
cmpl   $0x3,-0x18(%rbp)
jge    1454 <get_delaunay_shortest_vectors+0x314>
movslq -0x18(%rbp),%rax
movsd  -0x110(%rbp,%rax,8),%xmm0
ff ff
movslq -0x18(%rbp),%rcx
lea    -0x60(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  %xmm0,(%rax)
movslq -0x18(%rbp),%rax
movsd  -0xf8(%rbp,%rax,8),%xmm0
ff ff
movslq -0x18(%rbp),%rcx
lea    -0x60(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  %xmm0,0x8(%rax)
movslq -0x14(%rbp),%rcx
lea    -0x110(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movslq -0x18(%rbp),%rcx
lea    -0x60(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movsd  %xmm0,0x10(%rax)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    13cc <get_delaunay_shortest_vectors+0x28c>
lea    -0x60(%rbp),%rdi
call   1030 <mat_get_determinant_d3@plt>
mov    %eax,%edi
call   1060 <mat_Dabs@plt>
ucomisd -0x10(%rbp),%xmm0
jbe    14f1 <get_delaunay_shortest_vectors+0x3b1>
movl   $0x0,-0x18(%rbp)
cmpl   $0x3,-0x18(%rbp)
jge    14ec <get_delaunay_shortest_vectors+0x3ac>
movslq -0x18(%rbp),%rax
movsd  -0x110(%rbp,%rax,8),%xmm0
ff ff
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movslq -0x18(%rbp),%rax
movsd  -0xf8(%rbp,%rax,8),%xmm0
ff ff
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsd  %xmm0,0x18(%rax,%rcx,8)
movslq -0x14(%rbp),%rcx
lea    -0x110(%rbp),%rax
imul   $0x18,%rcx,%rcx
add    %rcx,%rax
movslq -0x18(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x18(%rbp),%rcx
movsd  %xmm0,0x30(%rax,%rcx,8)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1476 <get_delaunay_shortest_vectors+0x336>
jmp    1504 <get_delaunay_shortest_vectors+0x3c4>
jmp    14f6 <get_delaunay_shortest_vectors+0x3b6>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    13bb <get_delaunay_shortest_vectors+0x27b>
add    $0x140,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_delaunay_shortest_vectors>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x148,%rsp
movsd  %xmm0,0x8(%rsp)
movups (%rdi),%xmm0
movups 0x10(%rdi),%xmm1
movups 0x20(%rdi),%xmm2
movups 0x30(%rdi),%xmm3
movaps %xmm0,0x60(%rsp)
movaps %xmm1,0x70(%rsp)
movaps %xmm2,0x80(%rsp)
movaps %xmm3,0x90(%rsp)
movups 0x40(%rdi),%xmm0
movaps %xmm0,0xa0(%rsp)
movups 0x50(%rdi),%xmm0
movaps %xmm0,0xb0(%rsp)
lea    0x30(%rdi),%rax
mov    %rax,0x138(%rsp)
lea    0x18(%rdi),%rax
mov    %rax,0x130(%rsp)
lea    0xc0(%rsp),%r13
movupd (%rdi),%xmm0
movupd 0x18(%rdi),%xmm1
movapd %xmm0,%xmm2
addpd  %xmm1,%xmm2
movapd %xmm2,0xc0(%rsp)
movsd  0x10(%rdi),%xmm2
movupd 0x28(%rdi),%xmm3
movapd %xmm2,%xmm4
unpcklpd %xmm1,%xmm4
addpd  %xmm3,%xmm4
movapd %xmm4,0xd0(%rsp)
mov    %rdi,0x140(%rsp)
movupd 0x38(%rdi),%xmm4
shufpd $0x1,%xmm3,%xmm1
addpd  %xmm4,%xmm1
movapd %xmm1,0xe0(%rsp)
shufpd $0x1,%xmm4,%xmm3
addpd  %xmm0,%xmm3
movapd %xmm3,0xf0(%rsp)
unpckhpd %xmm4,%xmm4
addsd  %xmm2,%xmm4
movsd  %xmm4,0x100(%rsp)
mov    $0x6,%r15d
lea    0xa8(%rsp),%rbp
jmp    125a <get_delaunay_shortest_vectors+0x11a>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0xffffffff,%r15d
je     14fd <get_delaunay_shortest_vectors+0x3bd>
lea    0x60(%rsp),%rdi
call   1040 <mat_norm_squared_d3@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  %xmm0,(%rsp)
lea    0x78(%rsp),%r12
mov    %r12,%rdi
call   1040 <mat_norm_squared_d3@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  0xd72(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  (%rsp),%xmm1
ucomisd %xmm0,%xmm1
jbe    12cb <get_delaunay_shortest_vectors+0x18b>
lea    0x110(%rsp),%r14
mov    %r14,%rdi
lea    0x60(%rsp),%rbx
mov    %rbx,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %r12,%rdi
mov    %r14,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %r12,%rdi
call   1040 <mat_norm_squared_d3@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  %xmm0,(%rsp)
lea    0x90(%rsp),%rdi
call   1040 <mat_norm_squared_d3@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  0xd03(%rip),%xmm0
movsd  (%rsp),%xmm1
ucomisd %xmm0,%xmm1
jbe    1346 <get_delaunay_shortest_vectors+0x206>
lea    0x110(%rsp),%r14
mov    %r14,%rdi
lea    0x78(%rsp),%rbx
mov    %rbx,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbx,%rdi
lea    0x90(%rsp),%rbx
lea    0xa8(%rsp),%rbp
mov    %rbx,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1050 <mat_copy_vector_d3@plt>
lea    0x90(%rsp),%rdi
call   1040 <mat_norm_squared_d3@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  %xmm0,(%rsp)
mov    %rbp,%rdi
call   1040 <mat_norm_squared_d3@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  0xc88(%rip),%xmm0
movsd  (%rsp),%xmm1
ucomisd %xmm0,%xmm1
jbe    13b4 <get_delaunay_shortest_vectors+0x274>
lea    0x110(%rsp),%r14
mov    %r14,%rdi
lea    0x90(%rsp),%rbx
mov    %rbx,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbx,%rdi
mov    %rbp,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbp,%rdi
mov    %r14,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbp,%rdi
call   1040 <mat_norm_squared_d3@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  %xmm0,(%rsp)
mov    %r13,%rdi
call   1040 <mat_norm_squared_d3@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  0xc1f(%rip),%xmm0
movsd  (%rsp),%xmm1
ucomisd %xmm0,%xmm1
lea    0xd8(%rsp),%rbx
jbe    141d <get_delaunay_shortest_vectors+0x2dd>
lea    0x110(%rsp),%r14
mov    %r14,%rdi
mov    %rbp,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbp,%rdi
mov    %r13,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %r13,%rdi
mov    %r14,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %r13,%rdi
call   1040 <mat_norm_squared_d3@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  %xmm0,(%rsp)
mov    %rbx,%rdi
call   1040 <mat_norm_squared_d3@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  0xbb6(%rip),%xmm0
movsd  (%rsp),%xmm1
ucomisd %xmm0,%xmm1
jbe    147e <get_delaunay_shortest_vectors+0x33e>
lea    0x110(%rsp),%r14
mov    %r14,%rdi
mov    %r13,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %r13,%rdi
mov    %rbx,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbx,%rdi
call   1040 <mat_norm_squared_d3@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
movsd  %xmm0,(%rsp)
lea    0xf0(%rsp),%rdi
call   1040 <mat_norm_squared_d3@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  0xb50(%rip),%xmm0
movsd  (%rsp),%xmm1
ucomisd %xmm0,%xmm1
jbe    1250 <get_delaunay_shortest_vectors+0x110>
lea    0x110(%rsp),%r14
mov    %r14,%rdi
mov    %rbx,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbx,%rdi
lea    0xf0(%rsp),%rbp
mov    %rbp,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbp,%rdi
lea    0xa8(%rsp),%rbp
mov    %r14,%rsi
call   1050 <mat_copy_vector_d3@plt>
jmp    1250 <get_delaunay_shortest_vectors+0x110>
movsd  0x60(%rsp),%xmm0
movsd  0x68(%rsp),%xmm1
movsd  %xmm0,0x10(%rsp)
movsd  0x78(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x90(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  %xmm1,0x28(%rsp)
movsd  0x80(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0x98(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x70(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x88(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0xa0(%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
lea    0x10(%rsp),%rdi
call   1030 <mat_get_determinant_d3@plt>
mov    %eax,%edi
call   1060 <mat_Dabs@plt>
mov    $0x2,%eax
ucomisd 0x8(%rsp),%xmm0
ja     180a <get_delaunay_shortest_vectors+0x6ca>
movsd  0x60(%rsp),%xmm0
movsd  0x68(%rsp),%xmm1
movsd  %xmm0,0x10(%rsp)
movsd  0x78(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0xa8(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  %xmm1,0x28(%rsp)
movsd  0x80(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0xb0(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x70(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x88(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0xb8(%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
lea    0x10(%rsp),%rdi
call   1030 <mat_get_determinant_d3@plt>
mov    %eax,%edi
call   1060 <mat_Dabs@plt>
mov    $0x3,%eax
ucomisd 0x8(%rsp),%xmm0
ja     180a <get_delaunay_shortest_vectors+0x6ca>
movsd  0x60(%rsp),%xmm0
movsd  0x68(%rsp),%xmm1
movsd  %xmm0,0x10(%rsp)
movsd  0x78(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0xc0(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  %xmm1,0x28(%rsp)
movsd  0x80(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0xc8(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x70(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x88(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0xd0(%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
lea    0x10(%rsp),%rdi
call   1030 <mat_get_determinant_d3@plt>
mov    %eax,%edi
call   1060 <mat_Dabs@plt>
mov    $0x4,%eax
ucomisd 0x8(%rsp),%xmm0
ja     180a <get_delaunay_shortest_vectors+0x6ca>
movsd  0x60(%rsp),%xmm0
movsd  0x68(%rsp),%xmm1
movsd  %xmm0,0x10(%rsp)
movsd  0x78(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0xd8(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  %xmm1,0x28(%rsp)
movsd  0x80(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0xe0(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x70(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x88(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0xe8(%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
lea    0x10(%rsp),%rdi
call   1030 <mat_get_determinant_d3@plt>
mov    %eax,%edi
call   1060 <mat_Dabs@plt>
mov    $0x5,%eax
ucomisd 0x8(%rsp),%xmm0
ja     180a <get_delaunay_shortest_vectors+0x6ca>
movsd  0x60(%rsp),%xmm0
movsd  0x68(%rsp),%xmm1
movsd  %xmm0,0x10(%rsp)
movsd  0x78(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0xf0(%rsp),%xmm0
movsd  %xmm0,0x20(%rsp)
movsd  %xmm1,0x28(%rsp)
movsd  0x80(%rsp),%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  0xf8(%rsp),%xmm0
movsd  %xmm0,0x38(%rsp)
movsd  0x70(%rsp),%xmm0
movsd  %xmm0,0x40(%rsp)
movsd  0x88(%rsp),%xmm0
movsd  %xmm0,0x48(%rsp)
movsd  0x100(%rsp),%xmm0
movsd  %xmm0,0x50(%rsp)
lea    0x10(%rsp),%rdi
call   1030 <mat_get_determinant_d3@plt>
mov    %eax,%edi
call   1060 <mat_Dabs@plt>
mov    $0x6,%eax
ucomisd 0x8(%rsp),%xmm0
jbe    185d <get_delaunay_shortest_vectors+0x71d>
mov    0x70(%rsp),%rcx
mov    0x140(%rsp),%rdx
mov    %rcx,0x10(%rdx)
movaps 0x60(%rsp),%xmm0
movups %xmm0,(%rdx)
lea    0x78(%rsp),%rsi
mov    0x10(%rsi),%rcx
mov    0x130(%rsp),%rdx
mov    %rcx,0x10(%rdx)
movups (%rsi),%xmm0
movups %xmm0,(%rdx)
lea    (%rax,%rax,2),%rax
mov    0x70(%rsp,%rax,8),%rcx
mov    0x138(%rsp),%rdx
mov    %rcx,0x10(%rdx)
movupd 0x60(%rsp,%rax,8),%xmm0
movupd %xmm0,(%rdx)
add    $0x148,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define void @get_delaunay_shortest_vectors([3 x double]* nocapture %0, double %1) {
%3 = bitcast [3 x double]* %0 to i8*
%4 = alloca [3 x [3 x double]]
%5 = alloca [7 x [3 x double]]
%6 = bitcast [7 x [3 x double]]* %5 to i8*
%7 = alloca [3 x double]
%8 = bitcast [3 x [3 x double]]* %4 to i8*
%9 = bitcast [3 x double]* %7 to i8*
%10 = getelementptr [3 x double], [3 x double]* %0, i64 1, i64 0
%11 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 4, i64 0
%12 = bitcast [3 x double]* %0 to <2 x double>*
%13 = load <2 x double>, <2 x double>* %12
%14 = bitcast double* %10 to <2 x double>*
%15 = load <2 x double>, <2 x double>* %14
%16 = fadd <2 x double> %13, %15
%17 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 4, i64 1
%18 = bitcast double* %11 to <2 x double>*
store <2 x double> %16, <2 x double>* %18
%19 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 0, i64 2
%20 = load double, double* %19
%21 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 1, i64 2
%22 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 4, i64 2
%23 = getelementptr [3 x double], [3 x double]* %0, i64 2, i64 0
%24 = bitcast double* %21 to <2 x double>*
%25 = load <2 x double>, <2 x double>* %24
%26 = insertelement <2 x double> poison, double %20, i64 0
%27 = shufflevector <2 x double> %26, <2 x double> %15, <2 x i32> <i32 0, i32 2>
%28 = fadd <2 x double> %27, %25
%29 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 5, i64 0
%30 = bitcast double* %22 to <2 x double>*
store <2 x double> %28, <2 x double>* %30
%31 = getelementptr inbounds [3 x double], [3 x double]* %0, i64 2, i64 1
%32 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 5, i64 1
%33 = bitcast double* %31 to <2 x double>*
%34 = load <2 x double>, <2 x double>* %33
%35 = shufflevector <2 x double> %15, <2 x double> %25, <2 x i32> <i32 1, i32 2>
%36 = fadd <2 x double> %35, %34
%37 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 5, i64 2
%38 = bitcast double* %32 to <2 x double>*
store <2 x double> %36, <2 x double>* %38
%39 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 6, i64 0
%40 = shufflevector <2 x double> %25, <2 x double> %34, <2 x i32> <i32 1, i32 2>
%41 = fadd <2 x double> %40, %13
%42 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 6, i64 1
%43 = bitcast double* %39 to <2 x double>*
store <2 x double> %41, <2 x double>* %43
%44 = extractelement <2 x double> %34, i64 1
%45 = fadd double %44, %20
%46 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 6, i64 2
store double %45, double* %46
%47 = getelementptr inbounds [3 x double], [3 x double]* %7, i64 0, i64 0
%48 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 0, i64 0
%49 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 1, i64 0
%50 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 2, i64 0
%51 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 3, i64 0
br label %52
52: ; preds = %2, %148
%53 = phi i32 [ 0, %2 ], [ %149, %148 ]
%54 = call i64 @mat_norm_squared_d3(double* %48)
%55 = sitofp i64 %54 to double
%56 = call i64 @mat_norm_squared_d3(double* %49)
%57 = sitofp i64 %56 to double
%58 = fadd double %57, 1.000000e-10
%59 = fcmp olt double %58, %55
br i1 %59, label %89, label %93
60: ; preds = %148
%61 = bitcast [3 x [3 x double]]* %4 to double**
%62 = load double, double* %48
%63 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 0, i64 0
store double %62, double* %63
%64 = load double, double* %49
%65 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 0, i64 1
store double %64, double* %65
%66 = load double, double* %50
%67 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 0, i64 2
store double %66, double* %67
%68 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 0, i64 1
%69 = load double, double* %68
%70 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 1, i64 0
store double %69, double* %70
%71 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 1, i64 1
%72 = load double, double* %71
%73 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 1, i64 1
store double %72, double* %73
%74 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 2, i64 1
%75 = load double, double* %74
%76 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 1, i64 2
store double %75, double* %76
%77 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 0, i64 2
%78 = load double, double* %77
%79 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 2, i64 0
store double %78, double* %79
%80 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 1, i64 2
%81 = load double, double* %80
%82 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 2, i64 1
store double %81, double* %82
%83 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 2, i64 2
%84 = load double, double* %83
%85 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 2, i64 2
store double %84, double* %85
%86 = call i32 @mat_get_determinant_d3(double** %61)
%87 = call double @mat_Dabs(i32 %86)
%88 = fcmp ogt double %87, %1
br i1 %88, label %151, label %158
89: ; preds = %52
%90 = call i32 @mat_copy_vector_d3(double* %47, double* %48)
%91 = call i32 @mat_copy_vector_d3(double* %48, double* %49)
%92 = call i32 @mat_copy_vector_d3(double* %49, double* %47)
br label %93
93: ; preds = %52, %89
%94 = call i64 @mat_norm_squared_d3(double* %49)
%95 = sitofp i64 %94 to double
%96 = call i64 @mat_norm_squared_d3(double* %50)
%97 = sitofp i64 %96 to double
%98 = fadd double %97, 1.000000e-10
%99 = fcmp olt double %98, %95
br i1 %99, label %100, label %104
100: ; preds = %93
%101 = call i32 @mat_copy_vector_d3(double* %47, double* %49)
%102 = call i32 @mat_copy_vector_d3(double* %49, double* %50)
%103 = call i32 @mat_copy_vector_d3(double* %50, double* %47)
br label %104
104: ; preds = %100, %93
%105 = call i64 @mat_norm_squared_d3(double* %50)
%106 = sitofp i64 %105 to double
%107 = call i64 @mat_norm_squared_d3(double* %51)
%108 = sitofp i64 %107 to double
%109 = fadd double %108, 1.000000e-10
%110 = fcmp olt double %109, %106
br i1 %110, label %111, label %115
111: ; preds = %104
%112 = call i32 @mat_copy_vector_d3(double* %47, double* %50)
%113 = call i32 @mat_copy_vector_d3(double* %50, double* %51)
%114 = call i32 @mat_copy_vector_d3(double* %51, double* %47)
br label %115
115: ; preds = %111, %104
%116 = call i64 @mat_norm_squared_d3(double* %51)
%117 = sitofp i64 %116 to double
%118 = call i64 @mat_norm_squared_d3(double* %11)
%119 = sitofp i64 %118 to double
%120 = fadd double %119, 1.000000e-10
%121 = fcmp olt double %120, %117
br i1 %121, label %122, label %126
122: ; preds = %115
%123 = call i32 @mat_copy_vector_d3(double* %47, double* %51)
%124 = call i32 @mat_copy_vector_d3(double* %51, double* %11)
%125 = call i32 @mat_copy_vector_d3(double* %11, double* %47)
br label %126
126: ; preds = %122, %115
%127 = call i64 @mat_norm_squared_d3(double* %11)
%128 = sitofp i64 %127 to double
%129 = call i64 @mat_norm_squared_d3(double* %29)
%130 = sitofp i64 %129 to double
%131 = fadd double %130, 1.000000e-10
%132 = fcmp olt double %131, %128
br i1 %132, label %133, label %137
133: ; preds = %126
%134 = call i32 @mat_copy_vector_d3(double* %47, double* %11)
%135 = call i32 @mat_copy_vector_d3(double* %11, double* %29)
%136 = call i32 @mat_copy_vector_d3(double* %29, double* %47)
br label %137
137: ; preds = %133, %126
%138 = call i64 @mat_norm_squared_d3(double* %29)
%139 = sitofp i64 %138 to double
%140 = call i64 @mat_norm_squared_d3(double* %39)
%141 = sitofp i64 %140 to double
%142 = fadd double %141, 1.000000e-10
%143 = fcmp olt double %142, %139
br i1 %143, label %144, label %148
144: ; preds = %137
%145 = call i32 @mat_copy_vector_d3(double* %47, double* %29)
%146 = call i32 @mat_copy_vector_d3(double* %29, double* %39)
%147 = call i32 @mat_copy_vector_d3(double* %39, double* %47)
br label %148
148: ; preds = %144, %137
%149 = add nuw nsw i32 %53, 1
%150 = icmp eq i32 %149, 6
br i1 %150, label %60, label %52
151: ; preds = %199, %186, %173, %158, %60
%152 = phi i64 [ 2, %60 ], [ 3, %158 ], [ 4, %173 ], [ 5, %186 ], [ 6, %199 ]
%153 = bitcast double* %10 to i8*
%154 = bitcast double* %49 to i8*
%155 = bitcast double* %23 to i8*
%156 = getelementptr [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 %152, i64 0
%157 = bitcast double* %156 to i8*
br label %212
158: ; preds = %60
%159 = load double, double* %48
store double %159, double* %63
%160 = load double, double* %49
store double %160, double* %65
%161 = load double, double* %51
store double %161, double* %67
%162 = load double, double* %68
store double %162, double* %70
%163 = load double, double* %71
store double %163, double* %73
%164 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 3, i64 1
%165 = load double, double* %164
store double %165, double* %76
%166 = load double, double* %77
store double %166, double* %79
%167 = load double, double* %80
store double %167, double* %82
%168 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 3, i64 2
%169 = load double, double* %168
store double %169, double* %85
%170 = call i32 @mat_get_determinant_d3(double** %61)
%171 = call double @mat_Dabs(i32 %170)
%172 = fcmp ogt double %171, %1
br i1 %172, label %151, label %173
173: ; preds = %158
%174 = load double, double* %48
store double %174, double* %63
%175 = load double, double* %49
store double %175, double* %65
%176 = load double, double* %11
store double %176, double* %67
%177 = load double, double* %68
store double %177, double* %70
%178 = load double, double* %71
store double %178, double* %73
%179 = load double, double* %17
store double %179, double* %76
%180 = load double, double* %77
store double %180, double* %79
%181 = load double, double* %80
store double %181, double* %82
%182 = load double, double* %22
store double %182, double* %85
%183 = call i32 @mat_get_determinant_d3(double** %61)
%184 = call double @mat_Dabs(i32 %183)
%185 = fcmp ogt double %184, %1
br i1 %185, label %151, label %186
186: ; preds = %173
%187 = load double, double* %48
store double %187, double* %63
%188 = load double, double* %49
store double %188, double* %65
%189 = load double, double* %29
store double %189, double* %67
%190 = load double, double* %68
store double %190, double* %70
%191 = load double, double* %71
store double %191, double* %73
%192 = load double, double* %32
store double %192, double* %76
%193 = load double, double* %77
store double %193, double* %79
%194 = load double, double* %80
store double %194, double* %82
%195 = load double, double* %37
store double %195, double* %85
%196 = call i32 @mat_get_determinant_d3(double** %61)
%197 = call double @mat_Dabs(i32 %196)
%198 = fcmp ogt double %197, %1
br i1 %198, label %151, label %199
199: ; preds = %186
%200 = load double, double* %48
store double %200, double* %63
%201 = load double, double* %49
store double %201, double* %65
%202 = load double, double* %39
store double %202, double* %67
%203 = load double, double* %68
store double %203, double* %70
%204 = load double, double* %71
store double %204, double* %73
%205 = load double, double* %42
store double %205, double* %76
%206 = load double, double* %77
store double %206, double* %79
%207 = load double, double* %80
store double %207, double* %82
%208 = load double, double* %46
store double %208, double* %85
%209 = call i32 @mat_get_determinant_d3(double** %61)
%210 = call double @mat_Dabs(i32 %209)
%211 = fcmp ogt double %210, %1
br i1 %211, label %151, label %212
212: ; preds = %199, %151
ret void
}