#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*/ exit(int);
double fabs(double);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, char *, int);
int /*<<< orphan*/ stderr;
int gauss_pivot(double **matrix, int num, double *vector, double *biggest_val,
                int row) {
  int i;
  int col, pivot_row;
  double big, other_big;
  if ((matrix != NULL) != 1) {
    fprintf(
        stderr, "assertion fails in file %s, line %d\n",
        "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
        "2022-01-22/02-19-57/repos/Starlink/match/refs/heads/master/atpmatch.c",
        6562);
    exit(1);
  };
  if ((vector != NULL) != 1) {
    fprintf(
        stderr, "assertion fails in file %s, line %d\n",
        "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
        "2022-01-22/02-19-57/repos/Starlink/match/refs/heads/master/atpmatch.c",
        6563);
    exit(1);
  };
  if ((row < num) != 1) {
    fprintf(
        stderr, "assertion fails in file %s, line %d\n",
        "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
        "2022-01-22/02-19-57/repos/Starlink/match/refs/heads/master/atpmatch.c",
        6564);
    exit(1);
  };
  pivot_row = row;
  big = fabs(matrix[row][row] / biggest_val[row]);
  for (i = row + 1; i < num; i++) {
    other_big = fabs(matrix[i][row] / biggest_val[i]);
    if (other_big > big) {
      big = other_big;
      pivot_row = i;
    }
  }
  if (pivot_row != row) {
    for (col = row; col < num; col++) {
      {
        double temp = (matrix[pivot_row][col]);
        (matrix[pivot_row][col]) = (matrix[row][col]);
        (matrix[row][col]) = temp;
      };
    }
    {
      double temp = (vector[pivot_row]);
      (vector[pivot_row]) = (vector[row]);
      (vector[row]) = temp;
    };
    {
      double temp = (biggest_val[pivot_row]);
      (biggest_val[pivot_row]) = (biggest_val[row]);
      (biggest_val[row]) = temp;
    };
  } else {
  }
  return (0);
}


x86 assembly (clang, -O0):
<gauss_pivot>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
cmpq   $0x0,-0x8(%rbp)
setne  %al
and    $0x1,%al
movzbl %al,%eax
cmp    $0x1,%eax
je     117c <gauss_pivot+0x5c>
mov    0x2e88(%rip),%rax
mov    (%rax),%edi
lea    0xeaf(%rip),%rsi
lea    0xecd(%rip),%rdx
mov    $0x19a2,%ecx
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>
cmpq   $0x0,-0x18(%rbp)
setne  %al
and    $0x1,%al
movzbl %al,%eax
cmp    $0x1,%eax
je     11bd <gauss_pivot+0x9d>
mov    0x2e47(%rip),%rax
mov    (%rax),%edi
lea    0xe6e(%rip),%rsi
lea    0xe8c(%rip),%rdx
mov    $0x19a3,%ecx
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
setl   %al
and    $0x1,%al
movzbl %al,%eax
cmp    $0x1,%eax
je     11ff <gauss_pivot+0xdf>
mov    0x2e05(%rip),%rax
mov    (%rax),%edi
lea    0xe2c(%rip),%rsi
lea    0xe4a(%rip),%rdx
mov    $0x19a4,%ecx
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>
mov    -0x24(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm0
movaps 0xdd2(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    12b1 <gauss_pivot+0x191>
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
divsd  (%rax,%rcx,8),%xmm0
movaps 0xd8b(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    129e <gauss_pivot+0x17e>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    12a3 <gauss_pivot+0x183>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1240 <gauss_pivot+0x120>
mov    -0x30(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     13bc <gauss_pivot+0x29c>
mov    -0x24(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    133b <gauss_pivot+0x21b>
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x2c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x48(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x2c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    12c3 <gauss_pivot+0x1a3>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x58(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
jmp    13c1 <gauss_pivot+0x2a1>
jmp    13c1 <gauss_pivot+0x2a1>
xor    %eax,%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<gauss_pivot>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
test   %rdi,%rdi
je     142e <gauss_pivot+0x30e>
test   %rdx,%rdx
je     144c <gauss_pivot+0x32c>
cmp    %esi,%r8d
jge    146a <gauss_pivot+0x34a>
lea    0x1(%r8),%eax
cmp    %esi,%eax
jge    141d <gauss_pivot+0x2fd>
movslq %r8d,%r12
mov    (%rdi,%r12,8),%r9
movsd  (%r9,%r12,8),%xmm0
movapd %xmm0,%xmm1
divsd  (%rcx,%r12,8),%xmm1
andpd  0xe8f(%rip),%xmm1
lea    0x1(%r12),%r15
mov    %r8d,%eax
not    %eax
add    %esi,%eax
lea    -0x2(%rsi),%r10d
test   $0x1,%al
jne    1195 <gauss_pivot+0x75>
mov    %r15,%rax
mov    %r8d,%ebx
cmp    %r8d,%r10d
jne    11cc <gauss_pivot+0xac>
jmp    122b <gauss_pivot+0x10b>
mov    0x8(%rdi,%r12,8),%rax
movsd  (%rax,%r12,8),%xmm2
divsd  0x8(%rcx,%r12,8),%xmm2
andpd  0xe51(%rip),%xmm2
ucomisd %xmm1,%xmm2
maxsd  %xmm1,%xmm2
mov    %r8d,%ebx
cmova  %r15d,%ebx
lea    0x2(%r12),%rax
movapd %xmm2,%xmm1
cmp    %r8d,%r10d
je     122b <gauss_pivot+0x10b>
movapd 0xe2c(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%rdi,%rax,8),%rbp
movsd  0x0(%rbp,%r12,8),%xmm3
divsd  (%rcx,%rax,8),%xmm3
andpd  %xmm2,%xmm3
ucomisd %xmm1,%xmm3
mov    0x8(%rdi,%rax,8),%rbp
cmova  %eax,%ebx
maxsd  %xmm1,%xmm3
movsd  0x0(%rbp,%r12,8),%xmm1
divsd  0x8(%rcx,%rax,8),%xmm1
andpd  %xmm2,%xmm1
ucomisd %xmm3,%xmm1
lea    0x1(%rax),%ebp
cmova  %ebp,%ebx
maxsd  %xmm3,%xmm1
add    $0x2,%rax
cmp    %esi,%eax
jne    11e0 <gauss_pivot+0xc0>
cmp    %r8d,%ebx
je     141d <gauss_pivot+0x2fd>
movslq %ebx,%r8
mov    (%rdi,%r8,8),%r11
movslq %esi,%r10
movsd  (%r11,%r12,8),%xmm1
movsd  %xmm0,(%r11,%r12,8)
movsd  %xmm1,(%r9,%r12,8)
lea    0x1(%r12),%rdi
cmp    %r10,%rdi
je     13ed <gauss_pivot+0x2cd>
mov    %r12,%r14
not    %r14
add    %r10,%r14
cmp    $0x4,%r14
jb     1381 <gauss_pivot+0x261>
lea    (%r11,%r15,8),%rax
lea    (%r9,%r10,8),%rbx
cmp    %rbx,%rax
jae    128f <gauss_pivot+0x16f>
lea    (%r11,%r10,8),%rax
lea    (%r9,%r15,8),%rbx
cmp    %rax,%rbx
jb     1381 <gauss_pivot+0x261>
mov    %r14,%rax
and    $0xfffffffffffffffc,%rax
mov    %rax,(%rsp)
add    $0xfffffffffffffffc,%rax
mov    %rax,%r13
shr    $0x2,%r13
add    $0x1,%r13
test   %rax,%rax
je     1338 <gauss_pivot+0x218>
mov    %r13,%rbx
and    $0xfffffffffffffffe,%rbx
lea    (%r11,%r12,8),%rbp
add    $0x38,%rbp
lea    (%r9,%r12,8),%r15
add    $0x38,%r15
xor    %eax,%eax
nopl   0x0(%rax,%rax,1)
movups -0x30(%r15,%rax,8),%xmm0
movups -0x20(%r15,%rax,8),%xmm1
movups -0x30(%rbp,%rax,8),%xmm2
movups -0x20(%rbp,%rax,8),%xmm3
movups %xmm0,-0x30(%rbp,%rax,8)
movups %xmm1,-0x20(%rbp,%rax,8)
movups %xmm2,-0x30(%r15,%rax,8)
movups %xmm3,-0x20(%r15,%rax,8)
movupd -0x10(%r15,%rax,8),%xmm0
movups (%r15,%rax,8),%xmm1
movupd -0x10(%rbp,%rax,8),%xmm2
movupd 0x0(%rbp,%rax,8),%xmm3
movupd %xmm0,-0x10(%rbp,%rax,8)
movups %xmm1,0x0(%rbp,%rax,8)
movupd %xmm2,-0x10(%r15,%rax,8)
movupd %xmm3,(%r15,%rax,8)
add    $0x8,%rax
add    $0xfffffffffffffffe,%rbx
jne    12d0 <gauss_pivot+0x1b0>
jmp    133a <gauss_pivot+0x21a>
xor    %eax,%eax
test   $0x1,%r13b
je     1375 <gauss_pivot+0x255>
add    %rdi,%rax
movupd (%r9,%rax,8),%xmm0
movups 0x10(%r9,%rax,8),%xmm1
movupd (%r11,%rax,8),%xmm2
movupd 0x10(%r11,%rax,8),%xmm3
movupd %xmm0,(%r11,%rax,8)
movups %xmm1,0x10(%r11,%rax,8)
movupd %xmm2,(%r9,%rax,8)
movupd %xmm3,0x10(%r9,%rax,8)
mov    (%rsp),%rax
cmp    %rax,%r14
je     13ed <gauss_pivot+0x2cd>
add    %rax,%rdi
sub    %edi,%esi
mov    %rdi,%rax
not    %rax
test   $0x1,%sil
je     13ab <gauss_pivot+0x28b>
movsd  (%r9,%rdi,8),%xmm0
movsd  (%r11,%rdi,8),%xmm1
movsd  %xmm0,(%r11,%rdi,8)
movsd  %xmm1,(%r9,%rdi,8)
add    $0x1,%rdi
add    %r10,%rax
je     13ed <gauss_pivot+0x2cd>
movsd  (%r9,%rdi,8),%xmm0
movsd  (%r11,%rdi,8),%xmm1
movsd  %xmm0,(%r11,%rdi,8)
movsd  %xmm1,(%r9,%rdi,8)
movsd  0x8(%r9,%rdi,8),%xmm0
movsd  0x8(%r11,%rdi,8),%xmm1
movsd  %xmm0,0x8(%r11,%rdi,8)
movsd  %xmm1,0x8(%r9,%rdi,8)
add    $0x2,%rdi
cmp    %rdi,%r10
jne    13b0 <gauss_pivot+0x290>
movsd  (%rdx,%r8,8),%xmm0
movsd  (%rdx,%r12,8),%xmm1
movsd  %xmm1,(%rdx,%r8,8)
movsd  %xmm0,(%rdx,%r12,8)
movsd  (%rcx,%r8,8),%xmm0
movsd  (%rcx,%r12,8),%xmm1
movsd  %xmm1,(%rcx,%r8,8)
movsd  %xmm0,(%rcx,%r12,8)
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x2bab(%rip),%rax
mov    (%rax),%edi
lea    0xbd2(%rip),%rsi
lea    0xbf0(%rip),%rdx
mov    $0x19a2,%ecx
jmp    1486 <gauss_pivot+0x366>
mov    0x2b8d(%rip),%rax
mov    (%rax),%edi
lea    0xbb4(%rip),%rsi
lea    0xbd2(%rip),%rdx
mov    $0x19a3,%ecx
jmp    1486 <gauss_pivot+0x366>
mov    0x2b6f(%rip),%rax
mov    (%rax),%edi
lea    0xb96(%rip),%rsi
lea    0xbb4(%rip),%rdx
mov    $0x19a4,%ecx
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [37 x i8] c"assertion fails in file %s, line %d\0A\00"
@.str.1 = [134 x i8] c"/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/Starlink/match/refs/heads/master/atpmatch.c\00"
define i32 @gauss_pivot(double** %0, i32 %1, double* %2, double* %3, i32 %4) {
%6 = alloca double**
%7 = alloca i32
%8 = alloca double*
%9 = alloca double*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
store double** %0, double*** %6
store i32 %1, i32* %7
store double* %2, double** %8
store double* %3, double** %9
store i32 %4, i32* %10
%19 = load double**, double*** %6
%20 = icmp ne double** %19, null
%21 = zext i1 %20 to i32
%22 = icmp ne i32 %21, 1
br i1 %22, label %23, label %27
23: ; preds = %5
%24 = load i32, i32* @stderr
%25 = call i32 @fprintf(i32 %24, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str.1, i64 0, i64 0), i32 6562)
%26 = call i32 @exit(i32 1)
unreachable
27: ; preds = %5
%28 = load double*, double** %8
%29 = icmp ne double* %28, null
%30 = zext i1 %29 to i32
%31 = icmp ne i32 %30, 1
br i1 %31, label %32, label %36
32: ; preds = %27
%33 = load i32, i32* @stderr
%34 = call i32 @fprintf(i32 %33, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str.1, i64 0, i64 0), i32 6563)
%35 = call i32 @exit(i32 1)
unreachable
36: ; preds = %27
%37 = load i32, i32* %10
%38 = load i32, i32* %7
%39 = icmp slt i32 %37, %38
%40 = zext i1 %39 to i32
%41 = icmp ne i32 %40, 1
br i1 %41, label %42, label %46
42: ; preds = %36
%43 = load i32, i32* @stderr
%44 = call i32 @fprintf(i32 %43, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str.1, i64 0, i64 0), i32 6564)
%45 = call i32 @exit(i32 1)
unreachable
46: ; preds = %36
%47 = load i32, i32* %10
store i32 %47, i32* %13
%48 = load double**, double*** %6
%49 = load i32, i32* %10
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds double*, double** %48, i64 %50
%52 = load double*, double** %51
%53 = load i32, i32* %10
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds double, double* %52, i64 %54
%56 = load double, double* %55
%57 = load double*, double** %9
%58 = load i32, i32* %10
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds double, double* %57, i64 %59
%61 = load double, double* %60
%62 = fdiv double %56, %61
%63 = call double @llvm.fabs.f64(double %62)
store double %63, double* %14
%64 = load i32, i32* %10
%65 = add nsw i32 %64, 1
store i32 %65, i32* %11
br label %66
66: ; preds = %94, %46
%67 = load i32, i32* %11
%68 = load i32, i32* %7
%69 = icmp slt i32 %67, %68
br i1 %69, label %70, label %97
70: ; preds = %66
%71 = load double**, double*** %6
%72 = load i32, i32* %11
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds double*, double** %71, i64 %73
%75 = load double*, double** %74
%76 = load i32, i32* %10
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds double, double* %75, i64 %77
%79 = load double, double* %78
%80 = load double*, double** %9
%81 = load i32, i32* %11
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds double, double* %80, i64 %82
%84 = load double, double* %83
%85 = fdiv double %79, %84
%86 = call double @llvm.fabs.f64(double %85)
store double %86, double* %15
%87 = load double, double* %15
%88 = load double, double* %14
%89 = fcmp ogt double %87, %88
br i1 %89, label %90, label %93
90: ; preds = %70
%91 = load double, double* %15
store double %91, double* %14
%92 = load i32, i32* %11
store i32 %92, i32* %13
br label %93
93: ; preds = %90, %70
br label %94
94: ; preds = %93
%95 = load i32, i32* %11
%96 = add nsw i32 %95, 1
store i32 %96, i32* %11
br label %66
97: ; preds = %66
%98 = load i32, i32* %13
%99 = load i32, i32* %10
%100 = icmp ne i32 %98, %99
br i1 %100, label %101, label %185
101: ; preds = %97
%102 = load i32, i32* %10
store i32 %102, i32* %12
br label %103
103: ; preds = %143, %101
%104 = load i32, i32* %12
%105 = load i32, i32* %7
%106 = icmp slt i32 %104, %105
br i1 %106, label %107, label %146
107: ; preds = %103
%108 = load double**, double*** %6
%109 = load i32, i32* %13
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds double*, double** %108, i64 %110
%112 = load double*, double** %111
%113 = load i32, i32* %12
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds double, double* %112, i64 %114
%116 = load double, double* %115
store double %116, double* %16
%117 = load double**, double*** %6
%118 = load i32, i32* %10
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds double*, double** %117, i64 %119
%121 = load double*, double** %120
%122 = load i32, i32* %12
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds double, double* %121, i64 %123
%125 = load double, double* %124
%126 = load double**, double*** %6
%127 = load i32, i32* %13
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds double*, double** %126, i64 %128
%130 = load double*, double** %129
%131 = load i32, i32* %12
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds double, double* %130, i64 %132
store double %125, double* %133
%134 = load double, double* %16
%135 = load double**, double*** %6
%136 = load i32, i32* %10
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds double*, double** %135, i64 %137
%139 = load double*, double** %138
%140 = load i32, i32* %12
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds double, double* %139, i64 %141
store double %134, double* %142
br label %143
143: ; preds = %107
%144 = load i32, i32* %12
%145 = add nsw i32 %144, 1
store i32 %145, i32* %12
br label %103
146: ; preds = %103
%147 = load double*, double** %8
%148 = load i32, i32* %13
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds double, double* %147, i64 %149
%151 = load double, double* %150
store double %151, double* %17
%152 = load double*, double** %8
%153 = load i32, i32* %10
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds double, double* %152, i64 %154
%156 = load double, double* %155
%157 = load double*, double** %8
%158 = load i32, i32* %13
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds double, double* %157, i64 %159
store double %156, double* %160
%161 = load double, double* %17
%162 = load double*, double** %8
%163 = load i32, i32* %10
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds double, double* %162, i64 %164
store double %161, double* %165
%166 = load double*, double** %9
%167 = load i32, i32* %13
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds double, double* %166, i64 %168
%170 = load double, double* %169
store double %170, double* %18
%171 = load double*, double** %9
%172 = load i32, i32* %10
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds double, double* %171, i64 %173
%175 = load double, double* %174
%176 = load double*, double** %9
%177 = load i32, i32* %13
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds double, double* %176, i64 %178
store double %175, double* %179
%180 = load double, double* %18
%181 = load double*, double** %9
%182 = load i32, i32* %10
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds double, double* %181, i64 %183
store double %180, double* %184
br label %186
185: ; preds = %97
br label %186
186: ; preds = %185, %146
ret i32 0
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [37 x i8] c"assertion fails in file %s, line %d\0A\00"
@.str.1 = [134 x i8] c"/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/Starlink/match/refs/heads/master/atpmatch.c\00"
define i32 @gauss_pivot(double** %0, i32 %1, double* %2, double* nocapture %3, i32 %4) {
%6 = icmp eq double** %0, null
br i1 %6, label %7, label %11
7: ; preds = %5
%8 = load i32, i32* @stderr
%9 = tail call i32 @fprintf(i32 %8, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str.1, i64 0, i64 0), i32 6562)
%10 = tail call i32 @exit(i32 1)
unreachable
11: ; preds = %5
%12 = icmp eq double* %2, null
br i1 %12, label %13, label %17
13: ; preds = %11
%14 = load i32, i32* @stderr
%15 = tail call i32 @fprintf(i32 %14, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str.1, i64 0, i64 0), i32 6563)
%16 = tail call i32 @exit(i32 1)
unreachable
17: ; preds = %11
%18 = icmp slt i32 %4, %1
br i1 %18, label %23, label %19
19: ; preds = %17
%20 = load i32, i32* @stderr
%21 = tail call i32 @fprintf(i32 %20, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([134 x i8], [134 x i8]* @.str.1, i64 0, i64 0), i32 6564)
%22 = tail call i32 @exit(i32 1)
unreachable
23: ; preds = %17
%24 = sext i32 %4 to i64
%25 = getelementptr inbounds double*, double** %0, i64 %24
%26 = load double*, double** %25
%27 = getelementptr inbounds double, double* %26, i64 %24
%28 = load double, double* %27
%29 = getelementptr inbounds double, double* %3, i64 %24
%30 = add nsw i32 %4, 1
%31 = icmp slt i32 %30, %1
br i1 %31, label %32, label %234
32: ; preds = %23
%33 = load double, double* %29
%34 = fdiv double %28, %33
%35 = tail call double @llvm.fabs.f64(double %34)
%36 = add nsw i64 %24, 1
%37 = xor i32 %4, -1
%38 = add i32 %37, %1
%39 = add i32 %1, -2
%40 = and i32 %38, 1
%41 = icmp eq i32 %40, 0
br i1 %41, label %56, label %42
42: ; preds = %32
%43 = getelementptr inbounds double*, double** %0, i64 %36
%44 = load double*, double** %43
%45 = getelementptr inbounds double, double* %44, i64 %24
%46 = load double, double* %45
%47 = getelementptr inbounds double, double* %3, i64 %36
%48 = load double, double* %47
%49 = fdiv double %46, %48
%50 = tail call double @llvm.fabs.f64(double %49)
%51 = fcmp ogt double %50, %35
%52 = select i1 %51, double %50, double %35
%53 = trunc i64 %36 to i32
%54 = select i1 %51, i32 %53, i32 %4
%55 = add nsw i64 %24, 2
br label %56
56: ; preds = %42, %32
%57 = phi i32 [ undef, %32 ], [ %54, %42 ]
%58 = phi i64 [ %36, %32 ], [ %55, %42 ]
%59 = phi i32 [ %4, %32 ], [ %54, %42 ]
%60 = phi double [ %35, %32 ], [ %52, %42 ]
%61 = icmp eq i32 %39, %4
br i1 %61, label %94, label %62
62: ; preds = %56, %62
%63 = phi i64 [ %91, %62 ], [ %58, %56 ]
%64 = phi i32 [ %90, %62 ], [ %59, %56 ]
%65 = phi double [ %88, %62 ], [ %60, %56 ]
%66 = getelementptr inbounds double*, double** %0, i64 %63
%67 = load double*, double** %66
%68 = getelementptr inbounds double, double* %67, i64 %24
%69 = load double, double* %68
%70 = getelementptr inbounds double, double* %3, i64 %63
%71 = load double, double* %70
%72 = fdiv double %69, %71
%73 = tail call double @llvm.fabs.f64(double %72)
%74 = fcmp ogt double %73, %65
%75 = select i1 %74, double %73, double %65
%76 = trunc i64 %63 to i32
%77 = select i1 %74, i32 %76, i32 %64
%78 = add nsw i64 %63, 1
%79 = getelementptr inbounds double*, double** %0, i64 %78
%80 = load double*, double** %79
%81 = getelementptr inbounds double, double* %80, i64 %24
%82 = load double, double* %81
%83 = getelementptr inbounds double, double* %3, i64 %78
%84 = load double, double* %83
%85 = fdiv double %82, %84
%86 = tail call double @llvm.fabs.f64(double %85)
%87 = fcmp ogt double %86, %75
%88 = select i1 %87, double %86, double %75
%89 = trunc i64 %78 to i32
%90 = select i1 %87, i32 %89, i32 %77
%91 = add nsw i64 %63, 2
%92 = trunc i64 %91 to i32
%93 = icmp eq i32 %92, %1
br i1 %93, label %94, label %62
94: ; preds = %62, %56
%95 = phi i32 [ %57, %56 ], [ %90, %62 ]
%96 = icmp eq i32 %95, %4
br i1 %96, label %234, label %97
97: ; preds = %94
%98 = sext i32 %95 to i64
%99 = getelementptr inbounds double*, double** %0, i64 %98
%100 = load double*, double** %99
%101 = sext i32 %1 to i64
%102 = getelementptr inbounds double, double* %100, i64 %24
%103 = load double, double* %102
%104 = getelementptr inbounds double, double* %26, i64 %24
store double %28, double* %102
store double %103, double* %104
%105 = add nsw i64 %24, 1
%106 = icmp eq i64 %105, %101
br i1 %106, label %225, label %107
107: ; preds = %97
%108 = xor i64 %24, -1
%109 = add nsw i64 %108, %101
%110 = icmp ult i64 %109, 4
br i1 %110, label %193, label %111
111: ; preds = %107
%112 = getelementptr double, double* %100, i64 %36
%113 = getelementptr double, double* %100, i64 %101
%114 = getelementptr double, double* %26, i64 %36
%115 = getelementptr double, double* %26, i64 %101
%116 = icmp ult double* %112, %115
%117 = icmp ult double* %114, %113
%118 = and i1 %116, %117
br i1 %118, label %193, label %119
119: ; preds = %111
%120 = and i64 %109, -4
%121 = add nsw i64 %105, %120
%122 = add nsw i64 %120, -4
%123 = lshr exact i64 %122, 2
%124 = add nuw nsw i64 %123, 1
%125 = and i64 %124, 1
%126 = icmp eq i64 %122, 0
br i1 %126, label %170, label %127
127: ; preds = %119
%128 = and i64 %124, 9223372036854775806
br label %129
129: ; preds = %129, %127
%130 = phi i64 [ 0, %127 ], [ %167, %129 ]
%131 = phi i64 [ 0, %127 ], [ %168, %129 ]
%132 = add i64 %105, %130
%133 = getelementptr inbounds double, double* %26, i64 %132
%134 = bitcast double* %133 to <2 x double>*
%135 = load <2 x double>, <2 x double>* %134
%136 = getelementptr inbounds double, double* %133, i64 2
%137 = bitcast double* %136 to <2 x double>*
%138 = load <2 x double>, <2 x double>* %137
%139 = getelementptr inbounds double, double* %100, i64 %132
%140 = bitcast double* %139 to <2 x double>*
%141 = load <2 x double>, <2 x double>* %140
%142 = getelementptr inbounds double, double* %139, i64 2
%143 = bitcast double* %142 to <2 x double>*
%144 = load <2 x double>, <2 x double>* %143
%145 = bitcast double* %139 to <2 x double>*
store <2 x double> %135, <2 x double>* %145
%146 = bitcast double* %142 to <2 x double>*
store <2 x double> %138, <2 x double>* %146
%147 = bitcast double* %133 to <2 x double>*
store <2 x double> %141, <2 x double>* %147
%148 = bitcast double* %136 to <2 x double>*
store <2 x double> %144, <2 x double>* %148
%149 = or i64 %130, 4
%150 = add i64 %105, %149
%151 = getelementptr inbounds double, double* %26, i64 %150
%152 = bitcast double* %151 to <2 x double>*
%153 = load <2 x double>, <2 x double>* %152
%154 = getelementptr inbounds double, double* %151, i64 2
%155 = bitcast double* %154 to <2 x double>*
%156 = load <2 x double>, <2 x double>* %155
%157 = getelementptr inbounds double, double* %100, i64 %150
%158 = bitcast double* %157 to <2 x double>*
%159 = load <2 x double>, <2 x double>* %158
%160 = getelementptr inbounds double, double* %157, i64 2
%161 = bitcast double* %160 to <2 x double>*
%162 = load <2 x double>, <2 x double>* %161
%163 = bitcast double* %157 to <2 x double>*
store <2 x double> %153, <2 x double>* %163
%164 = bitcast double* %160 to <2 x double>*
store <2 x double> %156, <2 x double>* %164
%165 = bitcast double* %151 to <2 x double>*
store <2 x double> %159, <2 x double>* %165
%166 = bitcast double* %154 to <2 x double>*
store <2 x double> %162, <2 x double>* %166
%167 = add nuw i64 %130, 8
%168 = add i64 %131, 2
%169 = icmp eq i64 %168, %128
br i1 %169, label %170, label %129
170: ; preds = %129, %119
%171 = phi i64 [ 0, %119 ], [ %167, %129 ]
%172 = icmp eq i64 %125, 0
br i1 %172, label %191, label %173
173: ; preds = %170
%174 = add i64 %105, %171
%175 = getelementptr inbounds double, double* %26, i64 %174
%176 = bitcast double* %175 to <2 x double>*
%177 = load <2 x double>, <2 x double>* %176
%178 = getelementptr inbounds double, double* %175, i64 2
%179 = bitcast double* %178 to <2 x double>*
%180 = load <2 x double>, <2 x double>* %179
%181 = getelementptr inbounds double, double* %100, i64 %174
%182 = bitcast double* %181 to <2 x double>*
%183 = load <2 x double>, <2 x double>* %182
%184 = getelementptr inbounds double, double* %181, i64 2
%185 = bitcast double* %184 to <2 x double>*
%186 = load <2 x double>, <2 x double>* %185
%187 = bitcast double* %181 to <2 x double>*
store <2 x double> %177, <2 x double>* %187
%188 = bitcast double* %184 to <2 x double>*
store <2 x double> %180, <2 x double>* %188
%189 = bitcast double* %175 to <2 x double>*
store <2 x double> %183, <2 x double>* %189
%190 = bitcast double* %178 to <2 x double>*
store <2 x double> %186, <2 x double>* %190
br label %191
191: ; preds = %170, %173
%192 = icmp eq i64 %109, %120
br i1 %192, label %225, label %193
193: ; preds = %111, %107, %191
%194 = phi i64 [ %105, %111 ], [ %105, %107 ], [ %121, %191 ]
%195 = sub nsw i64 %101, %194
%196 = xor i64 %194, -1
%197 = and i64 %195, 1
%198 = icmp eq i64 %197, 0
br i1 %198, label %206, label %199
199: ; preds = %193
%200 = getelementptr inbounds double, double* %26, i64 %194
%201 = load double, double* %200
%202 = getelementptr inbounds double, double* %100, i64 %194
%203 = load double, double* %202
%204 = getelementptr inbounds double, double* %26, i64 %194
store double %201, double* %202
store double %203, double* %204
%205 = add nsw i64 %194, 1
br label %206
206: ; preds = %199, %193
%207 = phi i64 [ %194, %193 ], [ %205, %199 ]
%208 = sub nsw i64 0, %101
%209 = icmp eq i64 %196, %208
br i1 %209, label %225, label %210
210: ; preds = %206, %210
%211 = phi i64 [ %223, %210 ], [ %207, %206 ]
%212 = getelementptr inbounds double, double* %26, i64 %211
%213 = load double, double* %212
%214 = getelementptr inbounds double, double* %100, i64 %211
%215 = load double, double* %214
%216 = getelementptr inbounds double, double* %26, i64 %211
store double %213, double* %214
store double %215, double* %216
%217 = add nsw i64 %211, 1
%218 = getelementptr inbounds double, double* %26, i64 %217
%219 = load double, double* %218
%220 = getelementptr inbounds double, double* %100, i64 %217
%221 = load double, double* %220
%222 = getelementptr inbounds double, double* %26, i64 %217
store double %219, double* %220
store double %221, double* %222
%223 = add nsw i64 %211, 2
%224 = icmp eq i64 %223, %101
br i1 %224, label %225, label %210
225: ; preds = %206, %210, %191, %97
%226 = getelementptr inbounds double, double* %2, i64 %98
%227 = load double, double* %226
%228 = getelementptr inbounds double, double* %2, i64 %98
%229 = getelementptr inbounds double, double* %2, i64 %24
%230 = load double, double* %229
store double %230, double* %228
store double %227, double* %229
%231 = getelementptr inbounds double, double* %3, i64 %98
%232 = load double, double* %231
%233 = load double, double* %29
store double %233, double* %231
store double %232, double* %29
br label %234
234: ; preds = %23, %94, %225
ret i32 0
}