void dist_4v_allt_v3(int **ovdi123, int *m4_t, int *m4_p, char *m4_s, int n123,
                     int n4, int **ovdi, int *n, int min_dist, int max_dist,
                     int n_transcripts, int *ml, int get_positions,
                     int order_constraint, int max_n_transcripts,
                     int max_n_ovdi, int pos_format) {
  int i123, i4;
  int **ovdi_single_transcript;
  int running_entries = 0;
  int errorcode = 0;
  int n1234_tr = 0;
  int transcript = 0;
  int curr_tr123, curr_tr4;
  int *m4p;
  char *m4s;
  int **ovdi123_p;
  int max_transcript_occurrences = 10000;
  int max_n_ovdi_single_transcript = 50000;
  int n1234;
  int n1234_stop;
  int i, j;
  int curr_n123, curr_n4;
  i123 = 1;
  curr_tr123 = ovdi123[i123][1];
  i4 = 1;
  curr_tr4 = m4_t[i4];
  ovdi123_p = imatrix(1, max_n_ovdi_single_transcript, 1, 9);
  m4p = ivector(1, max_transcript_occurrences);
  m4s = cvector(1, max_transcript_occurrences);
  ovdi_single_transcript = imatrix(1, max_n_ovdi_single_transcript, 1, 12);
  if (max_n_transcripts < 0)
    max_n_transcripts = n_transcripts + 1;
  while ((transcript < n_transcripts) & (n1234_tr <= max_n_transcripts)) {
    transcript++;
    if ((curr_tr123 < 0) | (curr_tr4 < 0))
      transcript = n_transcripts + 1;
    while ((curr_tr123 < transcript) & (curr_tr123 >= 0) & (i123 < n123)) {
      i123++;
      curr_tr123 = ovdi123[i123][1];
    }
    if (curr_tr123 == transcript) {
      curr_n123 = 0;
      while ((curr_tr123 == transcript) & (i123 <= n123)) {
        curr_n123++;
        ovdi123_p[curr_n123][1] = ovdi123[i123][2];
        ovdi123_p[curr_n123][2] = ovdi123[i123][3];
        ovdi123_p[curr_n123][3] = ovdi123[i123][4];
        ovdi123_p[curr_n123][4] = ovdi123[i123][5];
        ovdi123_p[curr_n123][5] = ovdi123[i123][6];
        ovdi123_p[curr_n123][6] = ovdi123[i123][7];
        ovdi123_p[curr_n123][7] = ovdi123[i123][8];
        ovdi123_p[curr_n123][8] = ovdi123[i123][9];
        ovdi123_p[curr_n123][9] = ovdi123[i123][10];
        i123++;
        if (i123 <= n123)
          curr_tr123 = ovdi123[i123][1];
      }
      i123--;
      curr_tr123 = transcript;
      while ((curr_tr4 < transcript) & (curr_tr4 >= 0) & (i4 < n4)) {
        i4++;
        curr_tr4 = m4_t[i4];
      }
      if (curr_tr4 == transcript) {
        curr_n4 = 0;
        while ((curr_tr4 == transcript) & (i4 <= n4)) {
          curr_n4++;
          m4p[curr_n4] = m4_p[i4];
          m4s[curr_n4] = m4_s[i4];
          i4++;
          if (i4 <= n4)
            curr_tr4 = m4_t[i4];
        }
        i4--;
        curr_tr4 = transcript;
        if (order_constraint == 0) {
          dist_4v_unordered_v3(ovdi123_p, m4p, m4s, curr_n123, curr_n4,
                               ovdi_single_transcript, n, min_dist, max_dist,
                               max_n_ovdi_single_transcript, ml, get_positions);
        } else {
          dist_4v_ordered_v3(ovdi123_p, m4p, m4s, curr_n123, curr_n4,
                             ovdi_single_transcript, n, min_dist, max_dist,
                             max_n_ovdi_single_transcript, ml, get_positions,
                             pos_format);
        }
        n1234 = n[0];
        errorcode += n[1];
        if (n1234 > 0)
          n1234_tr++;
        if (get_positions == 1) {
          if ((running_entries + n1234) > max_n_ovdi) {
            get_positions = 0;
            errorcode--;
            printf("running_entries=%d\n", running_entries);
            printf("n1234=%d\n", n1234);
            printf("setting get_positions to 0\n");
            n1234_stop = running_entries;
          }
          i = 0;
          while ((i < n1234) & (running_entries < max_n_ovdi)) {
            i++;
            running_entries++;
            ovdi[running_entries][1] = transcript;
            ovdi[running_entries][2] = ovdi_single_transcript[i][1];
            ovdi[running_entries][3] = ovdi_single_transcript[i][2];
            ovdi[running_entries][4] = ovdi_single_transcript[i][3];
            ovdi[running_entries][5] = ovdi_single_transcript[i][4];
            ovdi[running_entries][6] = ovdi_single_transcript[i][5];
            ovdi[running_entries][7] = ovdi_single_transcript[i][6];
            ovdi[running_entries][8] = ovdi_single_transcript[i][7];
            ovdi[running_entries][9] = ovdi_single_transcript[i][8];
            ovdi[running_entries][10] = ovdi_single_transcript[i][9];
            ovdi[running_entries][11] = ovdi_single_transcript[i][10];
            ovdi[running_entries][12] = ovdi_single_transcript[i][11];
            ovdi[running_entries][13] = ovdi_single_transcript[i][12];
          }
        } else {
          running_entries += n1234;
        }
      }
    }
  }
  n[0] = running_entries;
  n[1] = n1234_tr;
  n[2] = errorcode;
  if (errorcode < 0) {
    if (n1234_stop <= 0)
      n1234_stop = running_entries;
    n[3] = n1234_stop;
  } else {
    n[3] = running_entries;
  }
  free_imatrix(ovdi123_p, 1, max_n_ovdi_single_transcript, 1, 9);
  free_ivector(m4p, 1, max_transcript_occurrences);
  free_cvector(m4s, 1, max_transcript_occurrences);
  free_imatrix(ovdi_single_transcript, 1, max_n_ovdi_single_transcript, 1, 12);
}


x86 assembly (clang, -O0):
<dist_4v_allt_v3>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0xc0,%rsp
mov    0x60(%rbp),%eax
mov    0x58(%rbp),%eax
mov    0x50(%rbp),%eax
mov    0x48(%rbp),%eax
mov    0x40(%rbp),%eax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x28(%rbp)
mov    %rsi,-0x30(%rbp)
mov    %rdx,-0x38(%rbp)
mov    %rcx,-0x40(%rbp)
mov    %r8d,-0x44(%rbp)
mov    %r9d,-0x48(%rbp)
movl   $0x0,-0x5c(%rbp)
movl   $0x0,-0x60(%rbp)
movl   $0x0,-0x64(%rbp)
movl   $0x0,-0x68(%rbp)
movl   $0x2710,-0x8c(%rbp)
movl   $0xc350,-0x90(%rbp)
movl   $0x1,-0x4c(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x6c(%rbp)
movl   $0x1,-0x50(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x70(%rbp)
mov    -0x90(%rbp),%esi
mov    $0x1,%edx
mov    $0x9,%ecx
mov    %edx,%edi
mov    $0x0,%al
call   1030 <imatrix@plt>
cltq
mov    %rax,-0x88(%rbp)
mov    -0x8c(%rbp),%esi
mov    $0x1,%edi
mov    $0x0,%al
call   10b0 <ivector@plt>
cltq
mov    %rax,-0x78(%rbp)
mov    -0x8c(%rbp),%esi
mov    $0x1,%edi
mov    $0x0,%al
call   1060 <cvector@plt>
cltq
mov    %rax,-0x80(%rbp)
mov    -0x90(%rbp),%esi
mov    $0x1,%edx
mov    $0xc,%ecx
mov    %edx,%edi
mov    $0x0,%al
call   1030 <imatrix@plt>
cltq
mov    %rax,-0x58(%rbp)
cmpl   $0x0,0x50(%rbp)
jge    12c0 <dist_4v_allt_v3+0x130>
mov    0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,0x50(%rbp)
jmp    12c5 <dist_4v_allt_v3+0x135>
mov    -0x68(%rbp),%eax
cmp    0x30(%rbp),%eax
setl   %al
and    $0x1,%al
movzbl %al,%eax
mov    -0x64(%rbp),%ecx
cmp    0x50(%rbp),%ecx
setle  %cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     19cc <dist_4v_allt_v3+0x83c>
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
cmpl   $0x0,-0x6c(%rbp)
setl   %al
and    $0x1,%al
movzbl %al,%eax
cmpl   $0x0,-0x70(%rbp)
setl   %cl
and    $0x1,%cl
movzbl %cl,%ecx
or     %ecx,%eax
cmp    $0x0,%eax
je     1323 <dist_4v_allt_v3+0x193>
mov    0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    1328 <dist_4v_allt_v3+0x198>
mov    -0x6c(%rbp),%eax
cmp    -0x68(%rbp),%eax
setl   %al
and    $0x1,%al
movzbl %al,%eax
cmpl   $0x0,-0x6c(%rbp)
setge  %cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
mov    -0x4c(%rbp),%ecx
cmp    -0x44(%rbp),%ecx
setl   %cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     137f <dist_4v_allt_v3+0x1ef>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x6c(%rbp)
jmp    1328 <dist_4v_allt_v3+0x198>
mov    -0x6c(%rbp),%eax
cmp    -0x68(%rbp),%eax
jne    19c7 <dist_4v_allt_v3+0x837>
movl   $0x0,-0xa4(%rbp)
mov    -0x6c(%rbp),%eax
cmp    -0x68(%rbp),%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    -0x4c(%rbp),%ecx
cmp    -0x44(%rbp),%ecx
setle  %cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     153c <dist_4v_allt_v3+0x3ac>
mov    -0xa4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x8(%rax),%ecx
mov    -0x88(%rbp),%rax
movslq -0xa4(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x4(%rax)
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0xc(%rax),%ecx
mov    -0x88(%rbp),%rax
movslq -0xa4(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x8(%rax)
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x10(%rax),%ecx
mov    -0x88(%rbp),%rax
movslq -0xa4(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0xc(%rax)
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x14(%rax),%ecx
mov    -0x88(%rbp),%rax
movslq -0xa4(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x10(%rax)
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x18(%rax),%ecx
mov    -0x88(%rbp),%rax
movslq -0xa4(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x14(%rax)
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x1c(%rax),%ecx
mov    -0x88(%rbp),%rax
movslq -0xa4(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x18(%rax)
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x20(%rax),%ecx
mov    -0x88(%rbp),%rax
movslq -0xa4(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x1c(%rax)
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x24(%rax),%ecx
mov    -0x88(%rbp),%rax
movslq -0xa4(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x20(%rax)
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x28(%rax),%ecx
mov    -0x88(%rbp),%rax
movslq -0xa4(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x24(%rax)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x44(%rbp),%eax
jg     1537 <dist_4v_allt_v3+0x3a7>
mov    -0x28(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x4(%rax),%eax
mov    %eax,-0x6c(%rbp)
jmp    1395 <dist_4v_allt_v3+0x205>
mov    -0x4c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x4c(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x70(%rbp),%eax
cmp    -0x68(%rbp),%eax
setl   %al
and    $0x1,%al
movzbl %al,%eax
cmpl   $0x0,-0x70(%rbp)
setge  %cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
mov    -0x50(%rbp),%ecx
cmp    -0x48(%rbp),%ecx
setl   %cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     159e <dist_4v_allt_v3+0x40e>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x30(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x70(%rbp)
jmp    154b <dist_4v_allt_v3+0x3bb>
mov    -0x70(%rbp),%eax
cmp    -0x68(%rbp),%eax
jne    19c2 <dist_4v_allt_v3+0x832>
movl   $0x0,-0xa8(%rbp)
mov    -0x70(%rbp),%eax
cmp    -0x68(%rbp),%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    -0x50(%rbp),%ecx
cmp    -0x48(%rbp),%ecx
setle  %cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     1645 <dist_4v_allt_v3+0x4b5>
mov    -0xa8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xa8(%rbp)
mov    -0x38(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x78(%rbp),%rax
movslq -0xa8(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x40(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x80(%rbp),%rax
movslq -0xa8(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x48(%rbp),%eax
jg     1640 <dist_4v_allt_v3+0x4b0>
mov    -0x30(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x70(%rbp)
jmp    15b4 <dist_4v_allt_v3+0x424>
mov    -0x50(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x50(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0x70(%rbp)
cmpl   $0x0,0x48(%rbp)
jne    16be <dist_4v_allt_v3+0x52e>
mov    -0x88(%rbp),%rdi
mov    -0x78(%rbp),%rsi
mov    -0x80(%rbp),%rdx
mov    -0xa4(%rbp),%ecx
mov    -0xa8(%rbp),%r8d
mov    -0x58(%rbp),%r9
mov    0x18(%rbp),%r15
mov    0x20(%rbp),%r14d
mov    0x28(%rbp),%ebx
mov    -0x90(%rbp),%r11d
mov    0x38(%rbp),%r10
mov    0x40(%rbp),%eax
mov    %r15,(%rsp)
mov    %r14d,0x8(%rsp)
mov    %ebx,0x10(%rsp)
mov    %r11d,0x18(%rsp)
mov    %r10,0x20(%rsp)
mov    %eax,0x28(%rsp)
mov    $0x0,%al
call   1040 <dist_4v_unordered_v3@plt>
jmp    1722 <dist_4v_allt_v3+0x592>
mov    -0x88(%rbp),%rdi
mov    -0x78(%rbp),%rsi
mov    -0x80(%rbp),%rdx
mov    -0xa4(%rbp),%ecx
mov    -0xa8(%rbp),%r8d
mov    -0x58(%rbp),%r9
mov    0x18(%rbp),%r12
mov    0x20(%rbp),%r15d
mov    0x28(%rbp),%r14d
mov    -0x90(%rbp),%ebx
mov    0x38(%rbp),%r11
mov    0x40(%rbp),%r10d
mov    0x60(%rbp),%eax
mov    %r12,(%rsp)
mov    %r15d,0x8(%rsp)
mov    %r14d,0x10(%rsp)
mov    %ebx,0x18(%rsp)
mov    %r11,0x20(%rsp)
mov    %r10d,0x28(%rsp)
mov    %eax,0x30(%rsp)
mov    $0x0,%al
call   1090 <dist_4v_ordered_v3@plt>
mov    0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x94(%rbp)
mov    0x18(%rbp),%rax
mov    0x4(%rax),%eax
add    -0x60(%rbp),%eax
mov    %eax,-0x60(%rbp)
cmpl   $0x0,-0x94(%rbp)
jle    1751 <dist_4v_allt_v3+0x5c1>
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
cmpl   $0x1,0x40(%rbp)
jne    19b1 <dist_4v_allt_v3+0x821>
mov    -0x5c(%rbp),%eax
add    -0x94(%rbp),%eax
cmp    0x58(%rbp),%eax
jle    17b9 <dist_4v_allt_v3+0x629>
movl   $0x0,0x40(%rbp)
mov    -0x60(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x60(%rbp)
mov    -0x5c(%rbp),%esi
lea    0x879(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x94(%rbp),%esi
lea    0x879(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0x875(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x5c(%rbp),%eax
mov    %eax,-0x98(%rbp)
movl   $0x0,-0x9c(%rbp)
mov    -0x9c(%rbp),%eax
cmp    -0x94(%rbp),%eax
setl   %al
and    $0x1,%al
movzbl %al,%eax
mov    -0x5c(%rbp),%ecx
cmp    0x58(%rbp),%ecx
setl   %cl
and    $0x1,%cl
movzbl %cl,%ecx
and    %ecx,%eax
cmp    $0x0,%eax
je     19ac <dist_4v_allt_v3+0x81c>
mov    -0x9c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x9c(%rbp)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x68(%rbp),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x4(%rax)
mov    -0x58(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x4(%rax),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x8(%rax)
mov    -0x58(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x8(%rax),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0xc(%rax)
mov    -0x58(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0xc(%rax),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x10(%rax)
mov    -0x58(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x10(%rax),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x14(%rax)
mov    -0x58(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x14(%rax),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x18(%rax)
mov    -0x58(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x18(%rax),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x1c(%rax)
mov    -0x58(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x1c(%rax),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x20(%rax)
mov    -0x58(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x20(%rax),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x24(%rax)
mov    -0x58(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x24(%rax),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x28(%rax)
mov    -0x58(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x28(%rax),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x2c(%rax)
mov    -0x58(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x2c(%rax),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x30(%rax)
mov    -0x58(%rbp),%rax
movslq -0x9c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    0x30(%rax),%ecx
mov    0x10(%rbp),%rax
movslq -0x5c(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
mov    %ecx,0x34(%rax)
jmp    17c3 <dist_4v_allt_v3+0x633>
jmp    19bd <dist_4v_allt_v3+0x82d>
mov    -0x94(%rbp),%eax
add    -0x5c(%rbp),%eax
mov    %eax,-0x5c(%rbp)
jmp    19c2 <dist_4v_allt_v3+0x832>
jmp    19c7 <dist_4v_allt_v3+0x837>
jmp    12c5 <dist_4v_allt_v3+0x135>
mov    -0x5c(%rbp),%ecx
mov    0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x64(%rbp),%ecx
mov    0x18(%rbp),%rax
mov    %ecx,0x4(%rax)
mov    -0x60(%rbp),%ecx
mov    0x18(%rbp),%rax
mov    %ecx,0x8(%rax)
cmpl   $0x0,-0x60(%rbp)
jge    1a1b <dist_4v_allt_v3+0x88b>
cmpl   $0x0,-0x98(%rbp)
jg     1a09 <dist_4v_allt_v3+0x879>
mov    -0x5c(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    -0x98(%rbp),%ecx
mov    0x18(%rbp),%rax
mov    %ecx,0xc(%rax)
jmp    1a25 <dist_4v_allt_v3+0x895>
mov    -0x5c(%rbp),%ecx
mov    0x18(%rbp),%rax
mov    %ecx,0xc(%rax)
mov    -0x88(%rbp),%rdi
mov    -0x90(%rbp),%edx
mov    $0x1,%ecx
mov    $0x9,%r8d
mov    %ecx,%esi
mov    $0x0,%al
call   1070 <free_imatrix@plt>
mov    -0x78(%rbp),%rdi
mov    -0x8c(%rbp),%edx
mov    $0x1,%esi
mov    $0x0,%al
call   10a0 <free_ivector@plt>
mov    -0x80(%rbp),%rdi
mov    -0x8c(%rbp),%edx
mov    $0x1,%esi
mov    $0x0,%al
call   1080 <free_cvector@plt>
mov    -0x58(%rbp),%rdi
mov    -0x90(%rbp),%edx
mov    $0x1,%ecx
mov    $0xc,%r8d
mov    %ecx,%esi
mov    $0x0,%al
call   1070 <free_imatrix@plt>
add    $0xc0,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<dist_4v_allt_v3>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xd8,%rsp
mov    %r9d,0x34(%rsp)
mov    %r8d,0x30(%rsp)
mov    %rcx,0xc0(%rsp)
mov    %rdx,0xb8(%rsp)
mov    0x160(%rsp),%eax
mov    %rax,0xc8(%rsp)
mov    0x158(%rsp),%eax
mov    %eax,0x2c(%rsp)
mov    0x148(%rsp),%eax
mov    %eax,0x7c(%rsp)
mov    0x140(%rsp),%eax
mov    %rax,0x48(%rsp)
mov    0x138(%rsp),%rax
mov    %rax,0x90(%rsp)
mov    0x130(%rsp),%ebp
mov    0x128(%rsp),%eax
mov    %rax,0x88(%rsp)
mov    0x120(%rsp),%eax
mov    %rax,0x80(%rsp)
mov    %rdi,0x38(%rsp)
mov    0x8(%rdi),%rax
mov    0x4(%rax),%r15d
mov    0x118(%rsp),%rax
mov    %rax,0x58(%rsp)
mov    0x110(%rsp),%rax
mov    %rax,0xa8(%rsp)
mov    0x150(%rsp),%ebx
mov    %rsi,0x70(%rsp)
mov    0x4(%rsi),%r14d
mov    $0x1,%edi
mov    $0xc350,%esi
mov    $0x1,%edx
mov    $0x9,%ecx
xor    %eax,%eax
call   1030 <imatrix@plt>
cltq
mov    %rax,0x40(%rsp)
mov    $0x1,%edi
mov    $0x2710,%esi
xor    %eax,%eax
call   10c0 <ivector@plt>
cltq
mov    %rax,0x68(%rsp)
mov    $0x1,%edi
mov    $0x2710,%esi
xor    %eax,%eax
call   1070 <cvector@plt>
cltq
mov    %rax,0x60(%rsp)
mov    $0x1,%edi
mov    $0xc350,%esi
mov    $0x1,%edx
mov    $0xc,%ecx
xor    %eax,%eax
call   1030 <imatrix@plt>
mov    %rbp,%rcx
cltq
mov    %rax,0x50(%rsp)
add    $0x1,%ebp
test   %ebx,%ebx
cmovns %ebx,%ebp
test   %ecx,%ecx
jle    1801 <dist_4v_allt_v3+0x661>
test   %ebp,%ebp
js     1801 <dist_4v_allt_v3+0x661>
mov    0x30(%rsp),%r10d
movslq %r10d,%r12
movslq 0x34(%rsp),%rax
mov    %rax,0xa0(%rsp)
movslq 0x2c(%rsp),%r9
mov    0x70(%rsp),%r11
lea    0x4(%r11),%rax
mov    %rax,0xb0(%rsp)
mov    $0x1,%ebx
mov    $0x1,%r13d
xor    %eax,%eax
mov    %rax,0x18(%rsp)
movl   $0x0,0x10(%rsp)
xor    %edi,%edi
xor    %edx,%edx
mov    0x38(%rsp),%r8
mov    %rcx,0x20(%rsp)
mov    %ebp,0xc(%rsp)
mov    %r9,0x98(%rsp)
nopl   0x0(%rax)
mov    %r14d,%eax
or     %r15d,%eax
mov    %edx,%eax
cmovs  %ecx,%eax
lea    0x1(%rax),%ecx
mov    %ecx,0x8(%rsp)
xor    %ecx,%ecx
cmp    %eax,%r15d
setle  %cl
mov    %r15d,%edx
not    %edx
shr    $0x1f,%edx
and    %ecx,%edx
xor    %ecx,%ecx
cmp    %r10d,%ebx
setl   %cl
test   %ecx,%edx
je     13cd <dist_4v_allt_v3+0x22d>
movslq %ebx,%rcx
add    $0x1,%rcx
nopw   0x0(%rax,%rax,1)
mov    (%r8,%rcx,8),%rdx
mov    0x4(%rdx),%r15d
xor    %edx,%edx
cmp    %eax,%r15d
setle  %dl
mov    %r15d,%esi
not    %esi
shr    $0x1f,%esi
and    %edx,%esi
xor    %edx,%edx
cmp    %r12,%rcx
setl   %dl
add    $0x1,%ebx
add    $0x1,%rcx
test   %edx,%esi
jne    13a0 <dist_4v_allt_v3+0x200>
mov    0x8(%rsp),%edx
cmp    %edx,%r15d
jne    17c1 <dist_4v_allt_v3+0x621>
xor    %ecx,%ecx
cmp    %r10d,%ebx
mov    %edi,0x14(%rsp)
jle    13f0 <dist_4v_allt_v3+0x250>
mov    0x40(%rsp),%r15
jmp    146a <dist_4v_allt_v3+0x2ca>
nop
movslq %ebx,%rdx
mov    $0x1,%esi
mov    0x40(%rsp),%r15
nopl   (%rax)
mov    %rsi,%rcx
mov    (%r8,%rdx,8),%rsi
mov    0x8(%rsi),%edi
mov    (%r15,%rcx,8),%rbp
mov    %edi,0x4(%rbp)
mov    0xc(%rsi),%edi
mov    %edi,0x8(%rbp)
mov    0x10(%rsi),%edi
mov    %edi,0xc(%rbp)
mov    0x14(%rsi),%edi
mov    %edi,0x10(%rbp)
mov    0x18(%rsi),%edi
mov    %edi,0x14(%rbp)
mov    0x1c(%rsi),%edi
mov    %edi,0x18(%rbp)
mov    0x20(%rsi),%edi
mov    %edi,0x1c(%rbp)
mov    0x24(%rsi),%edi
mov    %edi,0x20(%rbp)
mov    0x28(%rsi),%esi
mov    %esi,0x24(%rbp)
cmp    %r12,%rdx
jge    1464 <dist_4v_allt_v3+0x2c4>
mov    0x8(%r8,%rdx,8),%rsi
mov    0x8(%rsp),%edi
cmp    %edi,0x4(%rsi)
jne    1464 <dist_4v_allt_v3+0x2c4>
lea    0x1(%rcx),%rsi
lea    0x1(%rdx),%rdi
cmp    %r12,%rdx
mov    %rdi,%rdx
jl     1400 <dist_4v_allt_v3+0x260>
add    %ecx,%ebx
mov    0xc(%rsp),%ebp
xor    %edx,%edx
cmp    %eax,%r14d
setle  %dl
mov    %r14d,%esi
not    %esi
shr    $0x1f,%esi
and    %edx,%esi
xor    %edx,%edx
cmp    0x34(%rsp),%r13d
setl   %dl
test   %edx,%esi
je     14cc <dist_4v_allt_v3+0x32c>
movslq %r13d,%rdx
add    $0x1,%rdx
mov    0xa0(%rsp),%r9
nopl   0x0(%rax)
mov    (%r11,%rdx,4),%r14d
xor    %esi,%esi
cmp    %eax,%r14d
setle  %sil
mov    %r14d,%edi
not    %edi
shr    $0x1f,%edi
and    %esi,%edi
xor    %esi,%esi
cmp    %r9,%rdx
setl   %sil
add    $0x1,%r13d
add    $0x1,%rdx
test   %esi,%edi
jne    14a0 <dist_4v_allt_v3+0x300>
add    $0xffffffff,%ebx
mov    0x8(%rsp),%edx
cmp    %edx,%r14d
jne    1500 <dist_4v_allt_v3+0x360>
xor    %r8d,%r8d
cmp    0x34(%rsp),%r13d
jle    150c <dist_4v_allt_v3+0x36c>
mov    0x58(%rsp),%rbp
mov    0x68(%rsp),%rsi
mov    0x60(%rsp),%rdx
jmp    158a <dist_4v_allt_v3+0x3ea>
cs nopw 0x0(%rax,%rax,1)
mov    %edx,%r15d
mov    0x14(%rsp),%edi
jmp    17c1 <dist_4v_allt_v3+0x621>
movslq %r13d,%r14
mov    0xb8(%rsp),%rdx
lea    (%rdx,%r14,4),%r9
mov    0xc0(%rsp),%rdx
lea    (%rdx,%r14,1),%r11
mov    0xb0(%rsp),%rax
lea    (%rax,%r14,4),%r10
xor    %edi,%edi
mov    0x68(%rsp),%rsi
mov    0x60(%rsp),%rdx
nop
mov    %rdi,%r8
lea    (%r14,%rdi,1),%rbp
mov    (%r9,%rdi,4),%edi
mov    %edi,0x4(%rsi,%r8,4)
movzbl (%r11,%r8,1),%eax
mov    %al,0x1(%rdx,%r8,1)
mov    0xa0(%rsp),%rax
cmp    %rax,%rbp
jge    157a <dist_4v_allt_v3+0x3da>
mov    0x8(%rsp),%edi
cmp    %edi,(%r10,%r8,4)
jne    157a <dist_4v_allt_v3+0x3da>
lea    0x1(%r8),%rdi
cmp    %rax,%rbp
jl     1540 <dist_4v_allt_v3+0x3a0>
add    %r8d,%r13d
add    $0x1,%r13d
add    $0x1,%r8d
mov    0x58(%rsp),%rbp
cmpl   $0x0,0x7c(%rsp)
mov    0x50(%rsp),%r14
je     15d3 <dist_4v_allt_v3+0x433>
sub    $0x8,%rsp
mov    %r15,%rdi
mov    %r14,%r9
xor    %eax,%eax
push   0xd0(%rsp)
push   0x58(%rsp)
push   0xa8(%rsp)
push   $0xc350
push   0xb0(%rsp)
push   0xb0(%rsp)
push   %rbp
call   10a0 <dist_4v_ordered_v3@plt>
add    $0x40,%rsp
jmp    1603 <dist_4v_allt_v3+0x463>
mov    %r15,%rdi
mov    %r14,%r9
xor    %eax,%eax
push   0x48(%rsp)
push   0x98(%rsp)
push   $0xc350
push   0xa0(%rsp)
push   0xa0(%rsp)
push   %rbp
call   1050 <dist_4v_unordered_v3@plt>
add    $0x30,%rsp
add    $0xffffffff,%r13d
mov    0x0(%rbp),%r15d
mov    0x10(%rsp),%ecx
add    0x4(%rbp),%ecx
xor    %eax,%eax
test   %r15d,%r15d
setg   %al
mov    0x14(%rsp),%edi
add    %eax,%edi
mov    0x18(%rsp),%rax
add    %r15d,%eax
cmpl   $0x1,0x48(%rsp)
mov    0x30(%rsp),%r10d
mov    0x70(%rsp),%r11
mov    0x38(%rsp),%r8
mov    0x98(%rsp),%r9
mov    0x8(%rsp),%edx
jne    16c7 <dist_4v_allt_v3+0x527>
cmp    0x2c(%rsp),%eax
mov    %edi,0x14(%rsp)
mov    %r15,0xd0(%rsp)
jle    16db <dist_4v_allt_v3+0x53b>
add    $0xffffffff,%ecx
mov    %ecx,0x10(%rsp)
xor    %eax,%eax
mov    %rax,0x48(%rsp)
lea    0x98f(%rip),%rdi
mov    0x18(%rsp),%rbp
mov    %ebp,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0x98e(%rip),%rdi
mov    %r15d,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0x987(%rip),%rdi
call   1040 <puts@plt>
mov    0x8(%rsp),%edx
mov    0x14(%rsp),%edi
mov    0x10(%rsp),%ecx
mov    0x98(%rsp),%r9
mov    0x38(%rsp),%r8
mov    0x70(%rsp),%r11
mov    0x30(%rsp),%r10d
mov    %ebp,%eax
mov    %ebp,0x78(%rsp)
jmp    16ea <dist_4v_allt_v3+0x54a>
mov    %ecx,0x10(%rsp)
mov    %edx,%r15d
mov    %edx,%r14d
mov    %rax,0x18(%rsp)
jmp    17bd <dist_4v_allt_v3+0x61d>
mov    $0x1,%eax
mov    %rax,0x48(%rsp)
mov    0x18(%rsp),%rbp
cmp    0x2c(%rsp),%ebp
mov    %ecx,0x10(%rsp)
jge    17b7 <dist_4v_allt_v3+0x617>
mov    0xd0(%rsp),%r15
test   %r15d,%r15d
jle    17b7 <dist_4v_allt_v3+0x617>
movslq 0x18(%rsp),%rax
mov    0xa8(%rsp),%rcx
lea    (%rcx,%rax,8),%r8
mov    $0x1,%edx
nop
lea    (%rax,%rdx,1),%rsi
mov    (%r8,%rdx,8),%rdi
mov    0x8(%rsp),%ecx
mov    %ecx,0x4(%rdi)
mov    (%r14,%rdx,8),%rbp
mov    0x4(%rbp),%ecx
mov    %ecx,0x8(%rdi)
mov    0x8(%rbp),%ecx
mov    %ecx,0xc(%rdi)
mov    0xc(%rbp),%ecx
mov    %ecx,0x10(%rdi)
mov    0x10(%rbp),%ecx
mov    %ecx,0x14(%rdi)
mov    0x14(%rbp),%ecx
mov    %ecx,0x18(%rdi)
mov    0x18(%rbp),%ecx
mov    %ecx,0x1c(%rdi)
mov    0x1c(%rbp),%ecx
mov    %ecx,0x20(%rdi)
mov    0x20(%rbp),%ecx
mov    %ecx,0x24(%rdi)
mov    0x24(%rbp),%ecx
mov    %ecx,0x28(%rdi)
mov    0x28(%rbp),%ecx
mov    %ecx,0x2c(%rdi)
mov    0x2c(%rbp),%ecx
mov    %ecx,0x30(%rdi)
mov    0x30(%rbp),%ecx
mov    %ecx,0x34(%rdi)
mov    0x18(%rsp),%rcx
add    $0x1,%ecx
mov    %rcx,0x18(%rsp)
cmp    %r9,%rsi
jge    1799 <dist_4v_allt_v3+0x5f9>
lea    0x1(%rdx),%rcx
cmp    %r15,%rdx
mov    %rcx,%rdx
jb     1720 <dist_4v_allt_v3+0x580>
mov    0x8(%rsp),%edx
mov    %edx,%r15d
mov    %edx,%r14d
mov    0x38(%rsp),%r8
mov    0x20(%rsp),%rcx
mov    0xc(%rsp),%ebp
mov    0x14(%rsp),%edi
jmp    17c6 <dist_4v_allt_v3+0x626>
mov    %edx,%r15d
mov    %edx,%r14d
mov    0xc(%rsp),%ebp
mov    0x20(%rsp),%rcx
cmp    %ecx,%edx
jge    17d2 <dist_4v_allt_v3+0x632>
cmp    %ebp,%edi
jle    1360 <dist_4v_allt_v3+0x1c0>
mov    0x58(%rsp),%rax
mov    0x18(%rsp),%rcx
mov    %ecx,(%rax)
mov    %edi,0x4(%rax)
mov    0x10(%rsp),%edx
mov    %edx,0x8(%rax)
test   %edx,%edx
jns    17f5 <dist_4v_allt_v3+0x655>
mov    0x78(%rsp),%edx
test   %edx,%edx
cmovg  %edx,%ecx
mov    0x40(%rsp),%rdi
mov    0x50(%rsp),%rbx
jmp    1820 <dist_4v_allt_v3+0x680>
mov    0x58(%rsp),%rax
movq   $0x0,(%rax)
movl   $0x0,0x8(%rax)
mov    0x40(%rsp),%rdi
mov    0x50(%rsp),%rbx
xor    %ecx,%ecx
mov    %ecx,0xc(%rax)
mov    $0x1,%esi
mov    $0xc350,%edx
mov    $0x1,%ecx
mov    $0x9,%r8d
xor    %eax,%eax
call   1080 <free_imatrix@plt>
mov    0x68(%rsp),%rdi
mov    $0x1,%esi
mov    $0x2710,%edx
xor    %eax,%eax
call   10b0 <free_ivector@plt>
mov    0x60(%rsp),%rdi
mov    $0x1,%esi
mov    $0x2710,%edx
xor    %eax,%eax
call   1090 <free_cvector@plt>
mov    %rbx,%rdi
mov    $0x1,%esi
mov    $0xc350,%edx
mov    $0x1,%ecx
mov    $0xc,%r8d
xor    %eax,%eax
add    $0xd8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1080 <free_imatrix@plt>

LLVM IR (-O0):
@.str = [20 x i8] c"running_entries=%d\0A\00"
@.str.1 = [10 x i8] c"n1234=%d\0A\00"
@.str.2 = [28 x i8] c"setting get_positions to 0\0A\00"
define void @dist_4v_allt_v3(i32** %0, i32* %1, i32* %2, i8* %3, i32 %4, i32 %5, i32** %6, i32* %7, i32 %8, i32 %9, i32 %10, i32* %11, i32 %12, i32 %13, i32 %14, i32 %15, i32 %16) {
%18 = alloca i32**
%19 = alloca i32*
%20 = alloca i32*
%21 = alloca i8*
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32**
%25 = alloca i32*
%26 = alloca i32
%27 = alloca i32
%28 = alloca i32
%29 = alloca i32*
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%33 = alloca i32
%34 = alloca i32
%35 = alloca i32
%36 = alloca i32
%37 = alloca i32**
%38 = alloca i32
%39 = alloca i32
%40 = alloca i32
%41 = alloca i32
%42 = alloca i32
%43 = alloca i32
%44 = alloca i32*
%45 = alloca i8*
%46 = alloca i32**
%47 = alloca i32
%48 = alloca i32
%49 = alloca i32
%50 = alloca i32
%51 = alloca i32
%52 = alloca i32
%53 = alloca i32
%54 = alloca i32
store i32** %0, i32*** %18
store i32* %1, i32** %19
store i32* %2, i32** %20
store i8* %3, i8** %21
store i32 %4, i32* %22
store i32 %5, i32* %23
store i32** %6, i32*** %24
store i32* %7, i32** %25
store i32 %8, i32* %26
store i32 %9, i32* %27
store i32 %10, i32* %28
store i32* %11, i32** %29
store i32 %12, i32* %30
store i32 %13, i32* %31
store i32 %14, i32* %32
store i32 %15, i32* %33
store i32 %16, i32* %34
store i32 0, i32* %38
store i32 0, i32* %39
store i32 0, i32* %40
store i32 0, i32* %41
store i32 10000, i32* %47
store i32 50000, i32* %48
store i32 1, i32* %35
%55 = load i32**, i32*** %18
%56 = load i32, i32* %35
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds i32*, i32** %55, i64 %57
%59 = load i32*, i32** %58
%60 = getelementptr inbounds i32, i32* %59, i64 1
%61 = load i32, i32* %60
store i32 %61, i32* %42
store i32 1, i32* %36
%62 = load i32*, i32** %19
%63 = load i32, i32* %36
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds i32, i32* %62, i64 %64
%66 = load i32, i32* %65
store i32 %66, i32* %43
%67 = load i32, i32* %48
%68 = call i32 (i32, i32, i32, i32, ...) bitcast (i32 (...)* @imatrix to i32 (i32, i32, i32, i32, ...)*)(i32 1, i32 %67, i32 1, i32 9)
%69 = sext i32 %68 to i64
%70 = inttoptr i64 %69 to i32**
store i32** %70, i32*** %46
%71 = load i32, i32* %47
%72 = call i32 (i32, i32, ...) bitcast (i32 (...)* @ivector to i32 (i32, i32, ...)*)(i32 1, i32 %71)
%73 = sext i32 %72 to i64
%74 = inttoptr i64 %73 to i32*
store i32* %74, i32** %44
%75 = load i32, i32* %47
%76 = call i32 (i32, i32, ...) bitcast (i32 (...)* @cvector to i32 (i32, i32, ...)*)(i32 1, i32 %75)
%77 = sext i32 %76 to i64
%78 = inttoptr i64 %77 to i8*
store i8* %78, i8** %45
%79 = load i32, i32* %48
%80 = call i32 (i32, i32, i32, i32, ...) bitcast (i32 (...)* @imatrix to i32 (i32, i32, i32, i32, ...)*)(i32 1, i32 %79, i32 1, i32 12)
%81 = sext i32 %80 to i64
%82 = inttoptr i64 %81 to i32**
store i32** %82, i32*** %37
%83 = load i32, i32* %32
%84 = icmp slt i32 %83, 0
br i1 %84, label %85, label %88
85: ; preds = %17
%86 = load i32, i32* %28
%87 = add nsw i32 %86, 1
store i32 %87, i32* %32
br label %88
88: ; preds = %85, %17
br label %89
89: ; preds = %620, %88
%90 = load i32, i32* %41
%91 = load i32, i32* %28
%92 = icmp slt i32 %90, %91
%93 = zext i1 %92 to i32
%94 = load i32, i32* %40
%95 = load i32, i32* %32
%96 = icmp sle i32 %94, %95
%97 = zext i1 %96 to i32
%98 = and i32 %93, %97
%99 = icmp ne i32 %98, 0
br i1 %99, label %100, label %621
100: ; preds = %89
%101 = load i32, i32* %41
%102 = add nsw i32 %101, 1
store i32 %102, i32* %41
%103 = load i32, i32* %42
%104 = icmp slt i32 %103, 0
%105 = zext i1 %104 to i32
%106 = load i32, i32* %43
%107 = icmp slt i32 %106, 0
%108 = zext i1 %107 to i32
%109 = or i32 %105, %108
%110 = icmp ne i32 %109, 0
br i1 %110, label %111, label %114
111: ; preds = %100
%112 = load i32, i32* %28
%113 = add nsw i32 %112, 1
store i32 %113, i32* %41
br label %114
114: ; preds = %111, %100
br label %115
115: ; preds = %130, %114
%116 = load i32, i32* %42
%117 = load i32, i32* %41
%118 = icmp slt i32 %116, %117
%119 = zext i1 %118 to i32
%120 = load i32, i32* %42
%121 = icmp sge i32 %120, 0
%122 = zext i1 %121 to i32
%123 = and i32 %119, %122
%124 = load i32, i32* %35
%125 = load i32, i32* %22
%126 = icmp slt i32 %124, %125
%127 = zext i1 %126 to i32
%128 = and i32 %123, %127
%129 = icmp ne i32 %128, 0
br i1 %129, label %130, label %140
130: ; preds = %115
%131 = load i32, i32* %35
%132 = add nsw i32 %131, 1
store i32 %132, i32* %35
%133 = load i32**, i32*** %18
%134 = load i32, i32* %35
%135 = sext i32 %134 to i64
%136 = getelementptr inbounds i32*, i32** %133, i64 %135
%137 = load i32*, i32** %136
%138 = getelementptr inbounds i32, i32* %137, i64 1
%139 = load i32, i32* %138
store i32 %139, i32* %42
br label %115
140: ; preds = %115
%141 = load i32, i32* %42
%142 = load i32, i32* %41
%143 = icmp eq i32 %141, %142
br i1 %143, label %144, label %620
144: ; preds = %140
store i32 0, i32* %53
br label %145
145: ; preds = %289, %144
%146 = load i32, i32* %42
%147 = load i32, i32* %41
%148 = icmp eq i32 %146, %147
%149 = zext i1 %148 to i32
%150 = load i32, i32* %35
%151 = load i32, i32* %22
%152 = icmp sle i32 %150, %151
%153 = zext i1 %152 to i32
%154 = and i32 %149, %153
%155 = icmp ne i32 %154, 0
br i1 %155, label %156, label %290
156: ; preds = %145
%157 = load i32, i32* %53
%158 = add nsw i32 %157, 1
store i32 %158, i32* %53
%159 = load i32**, i32*** %18
%160 = load i32, i32* %35
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds i32*, i32** %159, i64 %161
%163 = load i32*, i32** %162
%164 = getelementptr inbounds i32, i32* %163, i64 2
%165 = load i32, i32* %164
%166 = load i32**, i32*** %46
%167 = load i32, i32* %53
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds i32*, i32** %166, i64 %168
%170 = load i32*, i32** %169
%171 = getelementptr inbounds i32, i32* %170, i64 1
store i32 %165, i32* %171
%172 = load i32**, i32*** %18
%173 = load i32, i32* %35
%174 = sext i32 %173 to i64
%175 = getelementptr inbounds i32*, i32** %172, i64 %174
%176 = load i32*, i32** %175
%177 = getelementptr inbounds i32, i32* %176, i64 3
%178 = load i32, i32* %177
%179 = load i32**, i32*** %46
%180 = load i32, i32* %53
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds i32*, i32** %179, i64 %181
%183 = load i32*, i32** %182
%184 = getelementptr inbounds i32, i32* %183, i64 2
store i32 %178, i32* %184
%185 = load i32**, i32*** %18
%186 = load i32, i32* %35
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds i32*, i32** %185, i64 %187
%189 = load i32*, i32** %188
%190 = getelementptr inbounds i32, i32* %189, i64 4
%191 = load i32, i32* %190
%192 = load i32**, i32*** %46
%193 = load i32, i32* %53
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds i32*, i32** %192, i64 %194
%196 = load i32*, i32** %195
%197 = getelementptr inbounds i32, i32* %196, i64 3
store i32 %191, i32* %197
%198 = load i32**, i32*** %18
%199 = load i32, i32* %35
%200 = sext i32 %199 to i64
%201 = getelementptr inbounds i32*, i32** %198, i64 %200
%202 = load i32*, i32** %201
%203 = getelementptr inbounds i32, i32* %202, i64 5
%204 = load i32, i32* %203
%205 = load i32**, i32*** %46
%206 = load i32, i32* %53
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds i32*, i32** %205, i64 %207
%209 = load i32*, i32** %208
%210 = getelementptr inbounds i32, i32* %209, i64 4
store i32 %204, i32* %210
%211 = load i32**, i32*** %18
%212 = load i32, i32* %35
%213 = sext i32 %212 to i64
%214 = getelementptr inbounds i32*, i32** %211, i64 %213
%215 = load i32*, i32** %214
%216 = getelementptr inbounds i32, i32* %215, i64 6
%217 = load i32, i32* %216
%218 = load i32**, i32*** %46
%219 = load i32, i32* %53
%220 = sext i32 %219 to i64
%221 = getelementptr inbounds i32*, i32** %218, i64 %220
%222 = load i32*, i32** %221
%223 = getelementptr inbounds i32, i32* %222, i64 5
store i32 %217, i32* %223
%224 = load i32**, i32*** %18
%225 = load i32, i32* %35
%226 = sext i32 %225 to i64
%227 = getelementptr inbounds i32*, i32** %224, i64 %226
%228 = load i32*, i32** %227
%229 = getelementptr inbounds i32, i32* %228, i64 7
%230 = load i32, i32* %229
%231 = load i32**, i32*** %46
%232 = load i32, i32* %53
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds i32*, i32** %231, i64 %233
%235 = load i32*, i32** %234
%236 = getelementptr inbounds i32, i32* %235, i64 6
store i32 %230, i32* %236
%237 = load i32**, i32*** %18
%238 = load i32, i32* %35
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds i32*, i32** %237, i64 %239
%241 = load i32*, i32** %240
%242 = getelementptr inbounds i32, i32* %241, i64 8
%243 = load i32, i32* %242
%244 = load i32**, i32*** %46
%245 = load i32, i32* %53
%246 = sext i32 %245 to i64
%247 = getelementptr inbounds i32*, i32** %244, i64 %246
%248 = load i32*, i32** %247
%249 = getelementptr inbounds i32, i32* %248, i64 7
store i32 %243, i32* %249
%250 = load i32**, i32*** %18
%251 = load i32, i32* %35
%252 = sext i32 %251 to i64
%253 = getelementptr inbounds i32*, i32** %250, i64 %252
%254 = load i32*, i32** %253
%255 = getelementptr inbounds i32, i32* %254, i64 9
%256 = load i32, i32* %255
%257 = load i32**, i32*** %46
%258 = load i32, i32* %53
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds i32*, i32** %257, i64 %259
%261 = load i32*, i32** %260
%262 = getelementptr inbounds i32, i32* %261, i64 8
store i32 %256, i32* %262
%263 = load i32**, i32*** %18
%264 = load i32, i32* %35
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds i32*, i32** %263, i64 %265
%267 = load i32*, i32** %266
%268 = getelementptr inbounds i32, i32* %267, i64 10
%269 = load i32, i32* %268
%270 = load i32**, i32*** %46
%271 = load i32, i32* %53
%272 = sext i32 %271 to i64
%273 = getelementptr inbounds i32*, i32** %270, i64 %272
%274 = load i32*, i32** %273
%275 = getelementptr inbounds i32, i32* %274, i64 9
store i32 %269, i32* %275
%276 = load i32, i32* %35
%277 = add nsw i32 %276, 1
store i32 %277, i32* %35
%278 = load i32, i32* %35
%279 = load i32, i32* %22
%280 = icmp sle i32 %278, %279
br i1 %280, label %281, label %289
281: ; preds = %156
%282 = load i32**, i32*** %18
%283 = load i32, i32* %35
%284 = sext i32 %283 to i64
%285 = getelementptr inbounds i32*, i32** %282, i64 %284
%286 = load i32*, i32** %285
%287 = getelementptr inbounds i32, i32* %286, i64 1
%288 = load i32, i32* %287
store i32 %288, i32* %42
br label %289
289: ; preds = %281, %156
br label %145
290: ; preds = %145
%291 = load i32, i32* %35
%292 = add nsw i32 %291, -1
store i32 %292, i32* %35
%293 = load i32, i32* %41
store i32 %293, i32* %42
br label %294
294: ; preds = %309, %290
%295 = load i32, i32* %43
%296 = load i32, i32* %41
%297 = icmp slt i32 %295, %296
%298 = zext i1 %297 to i32
%299 = load i32, i32* %43
%300 = icmp sge i32 %299, 0
%301 = zext i1 %300 to i32
%302 = and i32 %298, %301
%303 = load i32, i32* %36
%304 = load i32, i32* %23
%305 = icmp slt i32 %303, %304
%306 = zext i1 %305 to i32
%307 = and i32 %302, %306
%308 = icmp ne i32 %307, 0
br i1 %308, label %309, label %317
309: ; preds = %294
%310 = load i32, i32* %36
%311 = add nsw i32 %310, 1
store i32 %311, i32* %36
%312 = load i32*, i32** %19
%313 = load i32, i32* %36
%314 = sext i32 %313 to i64
%315 = getelementptr inbounds i32, i32* %312, i64 %314
%316 = load i32, i32* %315
store i32 %316, i32* %43
br label %294
317: ; preds = %294
%318 = load i32, i32* %43
%319 = load i32, i32* %41
%320 = icmp eq i32 %318, %319
br i1 %320, label %321, label %619
321: ; preds = %317
store i32 0, i32* %54
br label %322
322: ; preds = %365, %321
%323 = load i32, i32* %43
%324 = load i32, i32* %41
%325 = icmp eq i32 %323, %324
%326 = zext i1 %325 to i32
%327 = load i32, i32* %36
%328 = load i32, i32* %23
%329 = icmp sle i32 %327, %328
%330 = zext i1 %329 to i32
%331 = and i32 %326, %330
%332 = icmp ne i32 %331, 0
br i1 %332, label %333, label %366
333: ; preds = %322
%334 = load i32, i32* %54
%335 = add nsw i32 %334, 1
store i32 %335, i32* %54
%336 = load i32*, i32** %20
%337 = load i32, i32* %36
%338 = sext i32 %337 to i64
%339 = getelementptr inbounds i32, i32* %336, i64 %338
%340 = load i32, i32* %339
%341 = load i32*, i32** %44
%342 = load i32, i32* %54
%343 = sext i32 %342 to i64
%344 = getelementptr inbounds i32, i32* %341, i64 %343
store i32 %340, i32* %344
%345 = load i8*, i8** %21
%346 = load i32, i32* %36
%347 = sext i32 %346 to i64
%348 = getelementptr inbounds i8, i8* %345, i64 %347
%349 = load i8, i8* %348
%350 = load i8*, i8** %45
%351 = load i32, i32* %54
%352 = sext i32 %351 to i64
%353 = getelementptr inbounds i8, i8* %350, i64 %352
store i8 %349, i8* %353
%354 = load i32, i32* %36
%355 = add nsw i32 %354, 1
store i32 %355, i32* %36
%356 = load i32, i32* %36
%357 = load i32, i32* %23
%358 = icmp sle i32 %356, %357
br i1 %358, label %359, label %365
359: ; preds = %333
%360 = load i32*, i32** %19
%361 = load i32, i32* %36
%362 = sext i32 %361 to i64
%363 = getelementptr inbounds i32, i32* %360, i64 %362
%364 = load i32, i32* %363
store i32 %364, i32* %43
br label %365
365: ; preds = %359, %333
br label %322
366: ; preds = %322
%367 = load i32, i32* %36
%368 = add nsw i32 %367, -1
store i32 %368, i32* %36
%369 = load i32, i32* %41
store i32 %369, i32* %43
%370 = load i32, i32* %31
%371 = icmp eq i32 %370, 0
br i1 %371, label %372, label %386
372: ; preds = %366
%373 = load i32**, i32*** %46
%374 = load i32*, i32** %44
%375 = load i8*, i8** %45
%376 = load i32, i32* %53
%377 = load i32, i32* %54
%378 = load i32**, i32*** %37
%379 = load i32*, i32** %25
%380 = load i32, i32* %26
%381 = load i32, i32* %27
%382 = load i32, i32* %48
%383 = load i32*, i32** %29
%384 = load i32, i32* %30
%385 = call i32 (i32**, i32*, i8*, i32, i32, i32**, i32*, i32, i32, i32, i32*, i32, ...) bitcast (i32 (...)* @dist_4v_unordered_v3 to i32 (i32**, i32*, i8*, i32, i32, i32**, i32*, i32, i32, i32, i32*, i32, ...)*)(i32** %373, i32* %374, i8* %375, i32 %376, i32 %377, i32** %378, i32* %379, i32 %380, i32 %381, i32 %382, i32* %383, i32 %384)
br label %401
386: ; preds = %366
%387 = load i32**, i32*** %46
%388 = load i32*, i32** %44
%389 = load i8*, i8** %45
%390 = load i32, i32* %53
%391 = load i32, i32* %54
%392 = load i32**, i32*** %37
%393 = load i32*, i32** %25
%394 = load i32, i32* %26
%395 = load i32, i32* %27
%396 = load i32, i32* %48
%397 = load i32*, i32** %29
%398 = load i32, i32* %30
%399 = load i32, i32* %34
%400 = call i32 (i32**, i32*, i8*, i32, i32, i32**, i32*, i32, i32, i32, i32*, i32, i32, ...) bitcast (i32 (...)* @dist_4v_ordered_v3 to i32 (i32**, i32*, i8*, i32, i32, i32**, i32*, i32, i32, i32, i32*, i32, i32, ...)*)(i32** %387, i32* %388, i8* %389, i32 %390, i32 %391, i32** %392, i32* %393, i32 %394, i32 %395, i32 %396, i32* %397, i32 %398, i32 %399)
br label %401
401: ; preds = %386, %372
%402 = load i32*, i32** %25
%403 = getelementptr inbounds i32, i32* %402, i64 0
%404 = load i32, i32* %403
store i32 %404, i32* %49
%405 = load i32*, i32** %25
%406 = getelementptr inbounds i32, i32* %405, i64 1
%407 = load i32, i32* %406
%408 = load i32, i32* %39
%409 = add nsw i32 %408, %407
store i32 %409, i32* %39
%410 = load i32, i32* %49
%411 = icmp sgt i32 %410, 0
br i1 %411, label %412, label %415
412: ; preds = %401
%413 = load i32, i32* %40
%414 = add nsw i32 %413, 1
store i32 %414, i32* %40
br label %415
415: ; preds = %412, %401
%416 = load i32, i32* %30
%417 = icmp eq i32 %416, 1
br i1 %417, label %418, label %614
418: ; preds = %415
%419 = load i32, i32* %38
%420 = load i32, i32* %49
%421 = add nsw i32 %419, %420
%422 = load i32, i32* %33
%423 = icmp sgt i32 %421, %422
br i1 %423, label %424, label %433
424: ; preds = %418
store i32 0, i32* %30
%425 = load i32, i32* %39
%426 = add nsw i32 %425, -1
store i32 %426, i32* %39
%427 = load i32, i32* %38
%428 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0), i32 %427)
%429 = load i32, i32* %49
%430 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.1, i64 0, i64 0), i32 %429)
%431 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.2, i64 0, i64 0))
%432 = load i32, i32* %38
store i32 %432, i32* %50
br label %433
433: ; preds = %424, %418
store i32 0, i32* %51
br label %434
434: ; preds = %445, %433
%435 = load i32, i32* %51
%436 = load i32, i32* %49
%437 = icmp slt i32 %435, %436
%438 = zext i1 %437 to i32
%439 = load i32, i32* %38
%440 = load i32, i32* %33
%441 = icmp slt i32 %439, %440
%442 = zext i1 %441 to i32
%443 = and i32 %438, %442
%444 = icmp ne i32 %443, 0
br i1 %444, label %445, label %613
445: ; preds = %434
%446 = load i32, i32* %51
%447 = add nsw i32 %446, 1
store i32 %447, i32* %51
%448 = load i32, i32* %38
%449 = add nsw i32 %448, 1
store i32 %449, i32* %38
%450 = load i32, i32* %41
%451 = load i32**, i32*** %24
%452 = load i32, i32* %38
%453 = sext i32 %452 to i64
%454 = getelementptr inbounds i32*, i32** %451, i64 %453
%455 = load i32*, i32** %454
%456 = getelementptr inbounds i32, i32* %455, i64 1
store i32 %450, i32* %456
%457 = load i32**, i32*** %37
%458 = load i32, i32* %51
%459 = sext i32 %458 to i64
%460 = getelementptr inbounds i32*, i32** %457, i64 %459
%461 = load i32*, i32** %460
%462 = getelementptr inbounds i32, i32* %461, i64 1
%463 = load i32, i32* %462
%464 = load i32**, i32*** %24
%465 = load i32, i32* %38
%466 = sext i32 %465 to i64
%467 = getelementptr inbounds i32*, i32** %464, i64 %466
%468 = load i32*, i32** %467
%469 = getelementptr inbounds i32, i32* %468, i64 2
store i32 %463, i32* %469
%470 = load i32**, i32*** %37
%471 = load i32, i32* %51
%472 = sext i32 %471 to i64
%473 = getelementptr inbounds i32*, i32** %470, i64 %472
%474 = load i32*, i32** %473
%475 = getelementptr inbounds i32, i32* %474, i64 2
%476 = load i32, i32* %475
%477 = load i32**, i32*** %24
%478 = load i32, i32* %38
%479 = sext i32 %478 to i64
%480 = getelementptr inbounds i32*, i32** %477, i64 %479
%481 = load i32*, i32** %480
%482 = getelementptr inbounds i32, i32* %481, i64 3
store i32 %476, i32* %482
%483 = load i32**, i32*** %37
%484 = load i32, i32* %51
%485 = sext i32 %484 to i64
%486 = getelementptr inbounds i32*, i32** %483, i64 %485
%487 = load i32*, i32** %486
%488 = getelementptr inbounds i32, i32* %487, i64 3
%489 = load i32, i32* %488
%490 = load i32**, i32*** %24
%491 = load i32, i32* %38
%492 = sext i32 %491 to i64
%493 = getelementptr inbounds i32*, i32** %490, i64 %492
%494 = load i32*, i32** %493
%495 = getelementptr inbounds i32, i32* %494, i64 4
store i32 %489, i32* %495
%496 = load i32**, i32*** %37
%497 = load i32, i32* %51
%498 = sext i32 %497 to i64
%499 = getelementptr inbounds i32*, i32** %496, i64 %498
%500 = load i32*, i32** %499
%501 = getelementptr inbounds i32, i32* %500, i64 4
%502 = load i32, i32* %501
%503 = load i32**, i32*** %24
%504 = load i32, i32* %38
%505 = sext i32 %504 to i64
%506 = getelementptr inbounds i32*, i32** %503, i64 %505
%507 = load i32*, i32** %506
%508 = getelementptr inbounds i32, i32* %507, i64 5
store i32 %502, i32* %508
%509 = load i32**, i32*** %37
%510 = load i32, i32* %51
%511 = sext i32 %510 to i64
%512 = getelementptr inbounds i32*, i32** %509, i64 %511
%513 = load i32*, i32** %512
%514 = getelementptr inbounds i32, i32* %513, i64 5
%515 = load i32, i32* %514
%516 = load i32**, i32*** %24
%517 = load i32, i32* %38
%518 = sext i32 %517 to i64
%519 = getelementptr inbounds i32*, i32** %516, i64 %518
%520 = load i32*, i32** %519
%521 = getelementptr inbounds i32, i32* %520, i64 6
store i32 %515, i32* %521
%522 = load i32**, i32*** %37
%523 = load i32, i32* %51
%524 = sext i32 %523 to i64
%525 = getelementptr inbounds i32*, i32** %522, i64 %524
%526 = load i32*, i32** %525
%527 = getelementptr inbounds i32, i32* %526, i64 6
%528 = load i32, i32* %527
%529 = load i32**, i32*** %24
%530 = load i32, i32* %38
%531 = sext i32 %530 to i64
%532 = getelementptr inbounds i32*, i32** %529, i64 %531
%533 = load i32*, i32** %532
%534 = getelementptr inbounds i32, i32* %533, i64 7
store i32 %528, i32* %534
%535 = load i32**, i32*** %37
%536 = load i32, i32* %51
%537 = sext i32 %536 to i64
%538 = getelementptr inbounds i32*, i32** %535, i64 %537
%539 = load i32*, i32** %538
%540 = getelementptr inbounds i32, i32* %539, i64 7
%541 = load i32, i32* %540
%542 = load i32**, i32*** %24
%543 = load i32, i32* %38
%544 = sext i32 %543 to i64
%545 = getelementptr inbounds i32*, i32** %542, i64 %544
%546 = load i32*, i32** %545
%547 = getelementptr inbounds i32, i32* %546, i64 8
store i32 %541, i32* %547
%548 = load i32**, i32*** %37
%549 = load i32, i32* %51
%550 = sext i32 %549 to i64
%551 = getelementptr inbounds i32*, i32** %548, i64 %550
%552 = load i32*, i32** %551
%553 = getelementptr inbounds i32, i32* %552, i64 8
%554 = load i32, i32* %553
%555 = load i32**, i32*** %24
%556 = load i32, i32* %38
%557 = sext i32 %556 to i64
%558 = getelementptr inbounds i32*, i32** %555, i64 %557
%559 = load i32*, i32** %558
%560 = getelementptr inbounds i32, i32* %559, i64 9
store i32 %554, i32* %560
%561 = load i32**, i32*** %37
%562 = load i32, i32* %51
%563 = sext i32 %562 to i64
%564 = getelementptr inbounds i32*, i32** %561, i64 %563
%565 = load i32*, i32** %564
%566 = getelementptr inbounds i32, i32* %565, i64 9
%567 = load i32, i32* %566
%568 = load i32**, i32*** %24
%569 = load i32, i32* %38
%570 = sext i32 %569 to i64
%571 = getelementptr inbounds i32*, i32** %568, i64 %570
%572 = load i32*, i32** %571
%573 = getelementptr inbounds i32, i32* %572, i64 10
store i32 %567, i32* %573
%574 = load i32**, i32*** %37
%575 = load i32, i32* %51
%576 = sext i32 %575 to i64
%577 = getelementptr inbounds i32*, i32** %574, i64 %576
%578 = load i32*, i32** %577
%579 = getelementptr inbounds i32, i32* %578, i64 10
%580 = load i32, i32* %579
%581 = load i32**, i32*** %24
%582 = load i32, i32* %38
%583 = sext i32 %582 to i64
%584 = getelementptr inbounds i32*, i32** %581, i64 %583
%585 = load i32*, i32** %584
%586 = getelementptr inbounds i32, i32* %585, i64 11
store i32 %580, i32* %586
%587 = load i32**, i32*** %37
%588 = load i32, i32* %51
%589 = sext i32 %588 to i64
%590 = getelementptr inbounds i32*, i32** %587, i64 %589
%591 = load i32*, i32** %590
%592 = getelementptr inbounds i32, i32* %591, i64 11
%593 = load i32, i32* %592
%594 = load i32**, i32*** %24
%595 = load i32, i32* %38
%596 = sext i32 %595 to i64
%597 = getelementptr inbounds i32*, i32** %594, i64 %596
%598 = load i32*, i32** %597
%599 = getelementptr inbounds i32, i32* %598, i64 12
store i32 %593, i32* %599
%600 = load i32**, i32*** %37
%601 = load i32, i32* %51
%602 = sext i32 %601 to i64
%603 = getelementptr inbounds i32*, i32** %600, i64 %602
%604 = load i32*, i32** %603
%605 = getelementptr inbounds i32, i32* %604, i64 12
%606 = load i32, i32* %605
%607 = load i32**, i32*** %24
%608 = load i32, i32* %38
%609 = sext i32 %608 to i64
%610 = getelementptr inbounds i32*, i32** %607, i64 %609
%611 = load i32*, i32** %610
%612 = getelementptr inbounds i32, i32* %611, i64 13
store i32 %606, i32* %612
br label %434
613: ; preds = %434
br label %618
614: ; preds = %415
%615 = load i32, i32* %49
%616 = load i32, i32* %38
%617 = add nsw i32 %616, %615
store i32 %617, i32* %38
br label %618
618: ; preds = %614, %613
br label %619
619: ; preds = %618, %317
br label %620
620: ; preds = %619, %140
br label %89
621: ; preds = %89
%622 = load i32, i32* %38
%623 = load i32*, i32** %25
%624 = getelementptr inbounds i32, i32* %623, i64 0
store i32 %622, i32* %624
%625 = load i32, i32* %40
%626 = load i32*, i32** %25
%627 = getelementptr inbounds i32, i32* %626, i64 1
store i32 %625, i32* %627
%628 = load i32, i32* %39
%629 = load i32*, i32** %25
%630 = getelementptr inbounds i32, i32* %629, i64 2
store i32 %628, i32* %630
%631 = load i32, i32* %39
%632 = icmp slt i32 %631, 0
br i1 %632, label %633, label %642
633: ; preds = %621
%634 = load i32, i32* %50
%635 = icmp sle i32 %634, 0
br i1 %635, label %636, label %638
636: ; preds = %633
%637 = load i32, i32* %38
store i32 %637, i32* %50
br label %638
638: ; preds = %636, %633
%639 = load i32, i32* %50
%640 = load i32*, i32** %25
%641 = getelementptr inbounds i32, i32* %640, i64 3
store i32 %639, i32* %641
br label %646
642: ; preds = %621
%643 = load i32, i32* %38
%644 = load i32*, i32** %25
%645 = getelementptr inbounds i32, i32* %644, i64 3
store i32 %643, i32* %645
br label %646
646: ; preds = %642, %638
%647 = load i32**, i32*** %46
%648 = load i32, i32* %48
%649 = call i32 (i32**, i32, i32, i32, i32, ...) bitcast (i32 (...)* @free_imatrix to i32 (i32**, i32, i32, i32, i32, ...)*)(i32** %647, i32 1, i32 %648, i32 1, i32 9)
%650 = load i32*, i32** %44
%651 = load i32, i32* %47
%652 = call i32 (i32*, i32, i32, ...) bitcast (i32 (...)* @free_ivector to i32 (i32*, i32, i32, ...)*)(i32* %650, i32 1, i32 %651)
%653 = load i8*, i8** %45
%654 = load i32, i32* %47
%655 = call i32 (i8*, i32, i32, ...) bitcast (i32 (...)* @free_cvector to i32 (i8*, i32, i32, ...)*)(i8* %653, i32 1, i32 %654)
%656 = load i32**, i32*** %37
%657 = load i32, i32* %48
%658 = call i32 (i32**, i32, i32, i32, i32, ...) bitcast (i32 (...)* @free_imatrix to i32 (i32**, i32, i32, i32, i32, ...)*)(i32** %656, i32 1, i32 %657, i32 1, i32 12)
ret void
}

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