#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])) {
        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    139e <get_Delaunay_shortest_vectors+0x25e>
movl   $0x0,-0x18(%rbp)
cmpl   $0x6,-0x18(%rbp)
jge    138b <get_Delaunay_shortest_vectors+0x24b>
movslq -0x18(%rbp),%rax
lea    -0x110(%rbp),%rdi
imul   $0x18,%rax,%rax
add    %rax,%rdi
call   1040 <mat_norm_squared_d3@plt>
mov    %rax,-0x138(%rbp)
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>
mov    %rax,%rcx
mov    -0x138(%rbp),%rax
cmp    %rcx,%rax
jle    1378 <get_Delaunay_shortest_vectors+0x238>
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    137d <get_Delaunay_shortest_vectors+0x23d>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    12b5 <get_Delaunay_shortest_vectors+0x175>
jmp    1390 <get_Delaunay_shortest_vectors+0x250>
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    14ee <get_Delaunay_shortest_vectors+0x3ae>
movl   $0x0,-0x18(%rbp)
cmpl   $0x3,-0x18(%rbp)
jge    143e <get_Delaunay_shortest_vectors+0x2fe>
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    13b6 <get_Delaunay_shortest_vectors+0x276>
lea    -0x60(%rbp),%rdi
call   1030 <mat_get_determinant_d3@plt>
mov    %eax,%edi
call   1060 <mat_Dabs@plt>
ucomisd -0x10(%rbp),%xmm0
jbe    14db <get_Delaunay_shortest_vectors+0x39b>
movl   $0x0,-0x18(%rbp)
cmpl   $0x3,-0x18(%rbp)
jge    14d6 <get_Delaunay_shortest_vectors+0x396>
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    1460 <get_Delaunay_shortest_vectors+0x320>
jmp    14ee <get_Delaunay_shortest_vectors+0x3ae>
jmp    14e0 <get_Delaunay_shortest_vectors+0x3a0>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    13a5 <get_Delaunay_shortest_vectors+0x265>
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    0x90(%rsp),%r15
lea    0x18(%rdi),%rax
mov    %rax,0x130(%rsp)
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
lea    0xd8(%rsp),%r14
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)
lea    0x78(%rsp),%rbx
mov    $0x6,%r13d
jmp    125f <get_Delaunay_shortest_vectors+0x11f>
nopl   0x0(%rax,%rax,1)
add    $0xffffffff,%r13d
lea    0x78(%rsp),%rbx
je     1436 <get_Delaunay_shortest_vectors+0x2f6>
mov    %r15,%rbp
lea    0x60(%rsp),%rdi
call   1040 <mat_norm_squared_d3@plt>
mov    %rax,%r15
mov    %rbx,%rdi
call   1040 <mat_norm_squared_d3@plt>
cmp    %rax,%r15
jle    12aa <get_Delaunay_shortest_vectors+0x16a>
lea    0x110(%rsp),%r12
mov    %r12,%rdi
lea    0x60(%rsp),%r15
mov    %r15,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbx,%rdi
mov    %r12,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbx,%rdi
call   1040 <mat_norm_squared_d3@plt>
mov    %rax,%rbx
mov    %rbp,%r15
mov    %rbp,%rdi
call   1040 <mat_norm_squared_d3@plt>
cmp    %rax,%rbx
jle    12f3 <get_Delaunay_shortest_vectors+0x1b3>
lea    0x110(%rsp),%rbp
mov    %rbp,%rdi
lea    0x78(%rsp),%rbx
mov    %rbx,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbx,%rdi
mov    %r15,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %r15,%rdi
mov    %rbp,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %r14,%r12
mov    %r15,%rdi
call   1040 <mat_norm_squared_d3@plt>
mov    %rax,%rbx
lea    0xa8(%rsp),%rbp
mov    %rbp,%rdi
call   1040 <mat_norm_squared_d3@plt>
cmp    %rax,%rbx
jle    133f <get_Delaunay_shortest_vectors+0x1ff>
lea    0x110(%rsp),%rbx
mov    %rbx,%rdi
mov    %r15,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %r15,%rdi
mov    %rbp,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbp,%rdi
mov    %rbx,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbp,%rdi
call   1040 <mat_norm_squared_d3@plt>
mov    %rax,%rbx
lea    0xc0(%rsp),%r14
mov    %r14,%rdi
call   1040 <mat_norm_squared_d3@plt>
cmp    %rax,%rbx
mov    %r14,%rbx
jle    1393 <get_Delaunay_shortest_vectors+0x253>
lea    0x110(%rsp),%r14
mov    %r14,%rdi
lea    0xa8(%rsp),%rbp
mov    %rbp,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbp,%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>
mov    %rax,%rbx
mov    %r12,%r14
mov    %r12,%rdi
call   1040 <mat_norm_squared_d3@plt>
cmp    %rax,%rbx
jle    13df <get_Delaunay_shortest_vectors+0x29f>
lea    0x110(%rsp),%rbp
mov    %rbp,%rdi
lea    0xc0(%rsp),%rbx
mov    %rbx,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %rbx,%rdi
mov    %r14,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %r14,%rdi
mov    %rbp,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %r14,%rdi
call   1040 <mat_norm_squared_d3@plt>
mov    %rax,%rbx
lea    0xf0(%rsp),%rdi
call   1040 <mat_norm_squared_d3@plt>
cmp    %rax,%rbx
jle    1250 <get_Delaunay_shortest_vectors+0x110>
lea    0x110(%rsp),%rbp
mov    %rbp,%rdi
mov    %r14,%rsi
call   1050 <mat_copy_vector_d3@plt>
mov    %r14,%rdi
lea    0xf0(%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>
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     1743 <get_Delaunay_shortest_vectors+0x603>
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     1743 <get_Delaunay_shortest_vectors+0x603>
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     1743 <get_Delaunay_shortest_vectors+0x603>
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     1743 <get_Delaunay_shortest_vectors+0x603>
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    1791 <get_Delaunay_shortest_vectors+0x651>
mov    0x70(%rsp),%rcx
mov    0x140(%rsp),%rdx
mov    %rcx,0x10(%rdx)
movaps 0x60(%rsp),%xmm0
movups %xmm0,(%rdx)
mov    0x10(%rbx),%rcx
mov    0x130(%rsp),%rdx
mov    %rcx,0x10(%rdx)
movups (%rbx),%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 = %164, %114
%116 = load i32, i32* %5
%117 = icmp slt i32 %116, 6
br i1 %117, label %118, label %167
118: ; preds = %115
store i32 0, i32* %6
br label %119
119: ; preds = %160, %118
%120 = load i32, i32* %6
%121 = icmp slt i32 %120, 6
br i1 %121, label %122, label %163
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 = load i32, i32* %6
%129 = add nsw i32 %128, 1
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %8, i64 0, i64 %130
%132 = getelementptr inbounds [3 x double], [3 x double]* %131, i64 0, i64 0
%133 = call i64 @mat_norm_squared_d3(double* %132)
%134 = icmp sgt i64 %127, %133
br i1 %134, label %135, label %159
135: ; preds = %122
%136 = getelementptr inbounds [3 x double], [3 x double]* %9, i64 0, i64 0
%137 = load i32, i32* %6
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %8, i64 0, i64 %138
%140 = getelementptr inbounds [3 x double], [3 x double]* %139, i64 0, i64 0
%141 = call i32 @mat_copy_vector_d3(double* %136, double* %140)
%142 = load i32, i32* %6
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %8, i64 0, i64 %143
%145 = getelementptr inbounds [3 x double], [3 x double]* %144, i64 0, i64 0
%146 = load i32, i32* %6
%147 = add nsw i32 %146, 1
%148 = sext i32 %147 to i64
%149 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %8, i64 0, i64 %148
%150 = getelementptr inbounds [3 x double], [3 x double]* %149, i64 0, i64 0
%151 = call i32 @mat_copy_vector_d3(double* %145, double* %150)
%152 = load i32, i32* %6
%153 = add nsw i32 %152, 1
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %8, i64 0, i64 %154
%156 = getelementptr inbounds [3 x double], [3 x double]* %155, i64 0, i64 0
%157 = getelementptr inbounds [3 x double], [3 x double]* %9, i64 0, i64 0
%158 = call i32 @mat_copy_vector_d3(double* %156, double* %157)
br label %159
159: ; preds = %135, %122
br label %160
160: ; preds = %159
%161 = load i32, i32* %6
%162 = add nsw i32 %161, 1
store i32 %162, i32* %6
br label %119
163: ; preds = %119
br label %164
164: ; preds = %163
%165 = load i32, i32* %5
%166 = add nsw i32 %165, 1
store i32 %166, i32* %5
br label %115
167: ; preds = %115
store i32 2, i32* %5
br label %168
168: ; preds = %257, %167
%169 = load i32, i32* %5
%170 = icmp slt i32 %169, 7
br i1 %170, label %171, label %260
171: ; preds = %168
store i32 0, i32* %6
br label %172
172: ; preds = %205, %171
%173 = load i32, i32* %6
%174 = icmp slt i32 %173, 3
br i1 %174, label %175, label %208
175: ; preds = %172
%176 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %8, i64 0, i64 0
%177 = load i32, i32* %6
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds [3 x double], [3 x double]* %176, i64 0, i64 %178
%180 = load double, double* %179
%181 = load i32, i32* %6
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %7, i64 0, i64 %182
%184 = getelementptr inbounds [3 x double], [3 x double]* %183, i64 0, i64 0
store double %180, double* %184
%185 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %8, i64 0, i64 1
%186 = load i32, i32* %6
%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 = load i32, i32* %6
%191 = sext i32 %190 to i64
%192 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %7, i64 0, i64 %191
%193 = getelementptr inbounds [3 x double], [3 x double]* %192, i64 0, i64 1
store double %189, double* %193
%194 = load i32, i32* %5
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %8, i64 0, i64 %195
%197 = load i32, i32* %6
%198 = sext i32 %197 to i64
%199 = getelementptr inbounds [3 x double], [3 x double]* %196, i64 0, i64 %198
%200 = load double, double* %199
%201 = load i32, i32* %6
%202 = sext i32 %201 to i64
%203 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %7, i64 0, i64 %202
%204 = getelementptr inbounds [3 x double], [3 x double]* %203, i64 0, i64 2
store double %200, double* %204
br label %205
205: ; preds = %175
%206 = load i32, i32* %6
%207 = add nsw i32 %206, 1
store i32 %207, i32* %6
br label %172
208: ; preds = %172
%209 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %7, i64 0, i64 0
%210 = bitcast [3 x double]* %209 to double**
%211 = call i32 @mat_get_determinant_d3(double** %210)
%212 = call double @mat_Dabs(i32 %211)
%213 = load double, double* %4
%214 = fcmp ogt double %212, %213
br i1 %214, label %215, label %256
215: ; preds = %208
store i32 0, i32* %6
br label %216
216: ; preds = %252, %215
%217 = load i32, i32* %6
%218 = icmp slt i32 %217, 3
br i1 %218, label %219, label %255
219: ; preds = %216
%220 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %8, i64 0, i64 0
%221 = load i32, i32* %6
%222 = sext i32 %221 to i64
%223 = getelementptr inbounds [3 x double], [3 x double]* %220, i64 0, i64 %222
%224 = load double, double* %223
%225 = load [3 x double]*, [3 x double]** %3
%226 = getelementptr inbounds [3 x double], [3 x double]* %225, i64 0
%227 = load i32, i32* %6
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds [3 x double], [3 x double]* %226, i64 0, i64 %228
store double %224, double* %229
%230 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %8, i64 0, i64 1
%231 = load i32, i32* %6
%232 = sext i32 %231 to i64
%233 = getelementptr inbounds [3 x double], [3 x double]* %230, i64 0, i64 %232
%234 = load double, double* %233
%235 = load [3 x double]*, [3 x double]** %3
%236 = getelementptr inbounds [3 x double], [3 x double]* %235, i64 1
%237 = load i32, i32* %6
%238 = sext i32 %237 to i64
%239 = getelementptr inbounds [3 x double], [3 x double]* %236, i64 0, i64 %238
store double %234, double* %239
%240 = load i32, i32* %5
%241 = sext i32 %240 to i64
%242 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %8, i64 0, i64 %241
%243 = load i32, i32* %6
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds [3 x double], [3 x double]* %242, i64 0, i64 %244
%246 = load double, double* %245
%247 = load [3 x double]*, [3 x double]** %3
%248 = getelementptr inbounds [3 x double], [3 x double]* %247, i64 2
%249 = load i32, i32* %6
%250 = sext i32 %249 to i64
%251 = getelementptr inbounds [3 x double], [3 x double]* %248, i64 0, i64 %250
store double %246, double* %251
br label %252
252: ; preds = %219
%253 = load i32, i32* %6
%254 = add nsw i32 %253, 1
store i32 %254, i32* %6
br label %216
255: ; preds = %216
br label %260
256: ; preds = %208
br label %257
257: ; preds = %256
%258 = load i32, i32* %5
%259 = add nsw i32 %258, 1
store i32 %259, i32* %5
br label %168
260: ; preds = %255, %168
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, %130
%53 = phi i32 [ 0, %2 ], [ %131, %130 ]
%54 = call i64 @mat_norm_squared_d3(double* %48)
%55 = call i64 @mat_norm_squared_d3(double* %49)
%56 = icmp sgt i64 %54, %55
br i1 %56, label %86, label %90
57: ; preds = %130
%58 = bitcast [3 x [3 x double]]* %4 to double**
%59 = load double, double* %48
%60 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 0, i64 0
store double %59, double* %60
%61 = load double, double* %49
%62 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 0, i64 1
store double %61, double* %62
%63 = load double, double* %50
%64 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 0, i64 2
store double %63, double* %64
%65 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 0, i64 1
%66 = load double, double* %65
%67 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 1, i64 0
store double %66, double* %67
%68 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 1, 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 1
store double %69, double* %70
%71 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 2, 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 2
store double %72, double* %73
%74 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 0, i64 2
%75 = load double, double* %74
%76 = getelementptr inbounds [3 x [3 x double]], [3 x [3 x double]]* %4, i64 0, i64 2, i64 0
store double %75, double* %76
%77 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 1, 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 1
store double %78, double* %79
%80 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 2, 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 2
store double %81, double* %82
%83 = call i32 @mat_get_determinant_d3(double** %58)
%84 = call double @mat_Dabs(i32 %83)
%85 = fcmp ogt double %84, %1
br i1 %85, label %133, label %140
86: ; preds = %52
%87 = call i32 @mat_copy_vector_d3(double* %47, double* %48)
%88 = call i32 @mat_copy_vector_d3(double* %48, double* %49)
%89 = call i32 @mat_copy_vector_d3(double* %49, double* %47)
br label %90
90: ; preds = %52, %86
%91 = call i64 @mat_norm_squared_d3(double* %49)
%92 = call i64 @mat_norm_squared_d3(double* %50)
%93 = icmp sgt i64 %91, %92
br i1 %93, label %94, label %98
94: ; preds = %90
%95 = call i32 @mat_copy_vector_d3(double* %47, double* %49)
%96 = call i32 @mat_copy_vector_d3(double* %49, double* %50)
%97 = call i32 @mat_copy_vector_d3(double* %50, double* %47)
br label %98
98: ; preds = %94, %90
%99 = call i64 @mat_norm_squared_d3(double* %50)
%100 = call i64 @mat_norm_squared_d3(double* %51)
%101 = icmp sgt i64 %99, %100
br i1 %101, label %102, label %106
102: ; preds = %98
%103 = call i32 @mat_copy_vector_d3(double* %47, double* %50)
%104 = call i32 @mat_copy_vector_d3(double* %50, double* %51)
%105 = call i32 @mat_copy_vector_d3(double* %51, double* %47)
br label %106
106: ; preds = %102, %98
%107 = call i64 @mat_norm_squared_d3(double* %51)
%108 = call i64 @mat_norm_squared_d3(double* %11)
%109 = icmp sgt i64 %107, %108
br i1 %109, label %110, label %114
110: ; preds = %106
%111 = call i32 @mat_copy_vector_d3(double* %47, double* %51)
%112 = call i32 @mat_copy_vector_d3(double* %51, double* %11)
%113 = call i32 @mat_copy_vector_d3(double* %11, double* %47)
br label %114
114: ; preds = %110, %106
%115 = call i64 @mat_norm_squared_d3(double* %11)
%116 = call i64 @mat_norm_squared_d3(double* %29)
%117 = icmp sgt i64 %115, %116
br i1 %117, label %118, label %122
118: ; preds = %114
%119 = call i32 @mat_copy_vector_d3(double* %47, double* %11)
%120 = call i32 @mat_copy_vector_d3(double* %11, double* %29)
%121 = call i32 @mat_copy_vector_d3(double* %29, double* %47)
br label %122
122: ; preds = %118, %114
%123 = call i64 @mat_norm_squared_d3(double* %29)
%124 = call i64 @mat_norm_squared_d3(double* %39)
%125 = icmp sgt i64 %123, %124
br i1 %125, label %126, label %130
126: ; preds = %122
%127 = call i32 @mat_copy_vector_d3(double* %47, double* %29)
%128 = call i32 @mat_copy_vector_d3(double* %29, double* %39)
%129 = call i32 @mat_copy_vector_d3(double* %39, double* %47)
br label %130
130: ; preds = %126, %122
%131 = add nuw nsw i32 %53, 1
%132 = icmp eq i32 %131, 6
br i1 %132, label %57, label %52
133: ; preds = %181, %168, %155, %140, %57
%134 = phi i64 [ 2, %57 ], [ 3, %140 ], [ 4, %155 ], [ 5, %168 ], [ 6, %181 ]
%135 = bitcast double* %10 to i8*
%136 = bitcast double* %49 to i8*
%137 = bitcast double* %23 to i8*
%138 = getelementptr [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 %134, i64 0
%139 = bitcast double* %138 to i8*
br label %194
140: ; preds = %57
%141 = load double, double* %48
store double %141, double* %60
%142 = load double, double* %49
store double %142, double* %62
%143 = load double, double* %51
store double %143, double* %64
%144 = load double, double* %65
store double %144, double* %67
%145 = load double, double* %68
store double %145, double* %70
%146 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 3, i64 1
%147 = load double, double* %146
store double %147, double* %73
%148 = load double, double* %74
store double %148, double* %76
%149 = load double, double* %77
store double %149, double* %79
%150 = getelementptr inbounds [7 x [3 x double]], [7 x [3 x double]]* %5, i64 0, i64 3, i64 2
%151 = load double, double* %150
store double %151, double* %82
%152 = call i32 @mat_get_determinant_d3(double** %58)
%153 = call double @mat_Dabs(i32 %152)
%154 = fcmp ogt double %153, %1
br i1 %154, label %133, label %155
155: ; preds = %140
%156 = load double, double* %48
store double %156, double* %60
%157 = load double, double* %49
store double %157, double* %62
%158 = load double, double* %11
store double %158, double* %64
%159 = load double, double* %65
store double %159, double* %67
%160 = load double, double* %68
store double %160, double* %70
%161 = load double, double* %17
store double %161, double* %73
%162 = load double, double* %74
store double %162, double* %76
%163 = load double, double* %77
store double %163, double* %79
%164 = load double, double* %22
store double %164, double* %82
%165 = call i32 @mat_get_determinant_d3(double** %58)
%166 = call double @mat_Dabs(i32 %165)
%167 = fcmp ogt double %166, %1
br i1 %167, label %133, label %168
168: ; preds = %155
%169 = load double, double* %48
store double %169, double* %60
%170 = load double, double* %49
store double %170, double* %62
%171 = load double, double* %29
store double %171, double* %64
%172 = load double, double* %65
store double %172, double* %67
%173 = load double, double* %68
store double %173, double* %70
%174 = load double, double* %32
store double %174, double* %73
%175 = load double, double* %74
store double %175, double* %76
%176 = load double, double* %77
store double %176, double* %79
%177 = load double, double* %37
store double %177, double* %82
%178 = call i32 @mat_get_determinant_d3(double** %58)
%179 = call double @mat_Dabs(i32 %178)
%180 = fcmp ogt double %179, %1
br i1 %180, label %133, label %181
181: ; preds = %168
%182 = load double, double* %48
store double %182, double* %60
%183 = load double, double* %49
store double %183, double* %62
%184 = load double, double* %39
store double %184, double* %64
%185 = load double, double* %65
store double %185, double* %67
%186 = load double, double* %68
store double %186, double* %70
%187 = load double, double* %42
store double %187, double* %73
%188 = load double, double* %74
store double %188, double* %76
%189 = load double, double* %77
store double %189, double* %79
%190 = load double, double* %46
store double %190, double* %82
%191 = call i32 @mat_get_determinant_d3(double** %58)
%192 = call double @mat_Dabs(i32 %191)
%193 = fcmp ogt double %192, %1
br i1 %193, label %133, label %194
194: ; preds = %181, %133
ret void
}