void insertInOrder(double currDist[16], int currList[16], int j,
                   double distIJ) {
  int dist, pos, currList_t;
  double currMax, currDist_t;
  pos = 16 - 1;
  currMax = currDist[pos];
  if (distIJ > currMax) {
    return;
  }
  for (dist = pos; dist > 0; dist--) {
    if (distIJ < currDist[dist]) {
      currDist[dist] = currDist[dist - 1];
      currList[dist] = currList[pos - 1];
    } else {
      break;
    }
    pos--;
  }
  currDist[dist] = distIJ;
  currList[dist] = j;
}


x86 assembly (clang, -O0):
<insertInOrder>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movsd  %xmm0,-0x20(%rbp)
movl   $0xf,-0x28(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x20(%rbp),%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    1142 <insertInOrder+0x42>
jmp    11e9 <insertInOrder+0xe9>
mov    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
jle    11c9 <insertInOrder+0xc9>
movsd  -0x20(%rbp),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
ucomisd %xmm1,%xmm0
jbe    11ad <insertInOrder+0xad>
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    11b2 <insertInOrder+0xb2>
jmp    11c9 <insertInOrder+0xc9>
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1148 <insertInOrder+0x48>
movsd  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x14(%rbp),%edx
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
pop    %rbp
ret

x86 assembly (clang, -O2):
<insertInOrder>:
movsd  0x78(%rdi),%xmm1
ucomisd %xmm1,%xmm0
ja     12d4 <insertInOrder+0x1d4>
mov    $0xf,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x70(%rdi),%xmm1
movsd  %xmm1,0x78(%rdi)
mov    0x38(%rsi),%eax
mov    %eax,0x3c(%rsi)
mov    $0xe,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x68(%rdi),%xmm1
movsd  %xmm1,0x70(%rdi)
mov    0x34(%rsi),%eax
mov    %eax,0x38(%rsi)
mov    $0xd,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x60(%rdi),%xmm1
movsd  %xmm1,0x68(%rdi)
mov    0x30(%rsi),%eax
mov    %eax,0x34(%rsi)
mov    $0xc,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x58(%rdi),%xmm1
movsd  %xmm1,0x60(%rdi)
mov    0x2c(%rsi),%eax
mov    %eax,0x30(%rsi)
mov    $0xb,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x50(%rdi),%xmm1
movsd  %xmm1,0x58(%rdi)
mov    0x28(%rsi),%eax
mov    %eax,0x2c(%rsi)
mov    $0xa,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x48(%rdi),%xmm1
movsd  %xmm1,0x50(%rdi)
mov    0x24(%rsi),%eax
mov    %eax,0x28(%rsi)
mov    $0x9,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x40(%rdi),%xmm1
movsd  %xmm1,0x48(%rdi)
mov    0x20(%rsi),%eax
mov    %eax,0x24(%rsi)
mov    $0x8,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x38(%rdi),%xmm1
movsd  %xmm1,0x40(%rdi)
mov    0x1c(%rsi),%eax
mov    %eax,0x20(%rsi)
mov    $0x7,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x30(%rdi),%xmm1
movsd  %xmm1,0x38(%rdi)
mov    0x18(%rsi),%eax
mov    %eax,0x1c(%rsi)
mov    $0x6,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x28(%rdi),%xmm1
movsd  %xmm1,0x30(%rdi)
mov    0x14(%rsi),%eax
mov    %eax,0x18(%rsi)
mov    $0x5,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x20(%rdi),%xmm1
movsd  %xmm1,0x28(%rdi)
mov    0x10(%rsi),%eax
mov    %eax,0x14(%rsi)
mov    $0x4,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x18(%rdi),%xmm1
movsd  %xmm1,0x20(%rdi)
mov    0xc(%rsi),%eax
mov    %eax,0x10(%rsi)
mov    $0x3,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x10(%rdi),%xmm1
movsd  %xmm1,0x18(%rdi)
mov    0x8(%rsi),%eax
mov    %eax,0xc(%rsi)
mov    $0x2,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  0x8(%rdi),%xmm1
movsd  %xmm1,0x10(%rdi)
mov    0x4(%rsi),%eax
mov    %eax,0x8(%rsi)
mov    $0x1,%eax
ucomisd %xmm0,%xmm1
jbe    12cc <insertInOrder+0x1cc>
movsd  (%rdi),%xmm1
movsd  %xmm1,0x8(%rdi)
mov    (%rsi),%eax
mov    %eax,0x4(%rsi)
xor    %eax,%eax
movsd  %xmm0,(%rdi,%rax,8)
mov    %edx,(%rsi,%rax,4)
ret

LLVM IR (-O0):
define void @insertInOrder(double* %0, i32* %1, i32 %2, double %3) {
%5 = alloca double*
%6 = alloca i32*
%7 = alloca i32
%8 = alloca double
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca double
%13 = alloca double
store double* %0, double** %5
store i32* %1, i32** %6
store i32 %2, i32* %7
store double %3, double* %8
store i32 15, i32* %10
%14 = load double*, double** %5
%15 = load i32, i32* %10
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds double, double* %14, i64 %16
%18 = load double, double* %17
store double %18, double* %12
%19 = load double, double* %8
%20 = load double, double* %12
%21 = fcmp ogt double %19, %20
br i1 %21, label %22, label %23
22: ; preds = %4
br label %75
23: ; preds = %4
%24 = load i32, i32* %10
store i32 %24, i32* %9
br label %25
25: ; preds = %61, %23
%26 = load i32, i32* %9
%27 = icmp sgt i32 %26, 0
br i1 %27, label %28, label %64
28: ; preds = %25
%29 = load double, double* %8
%30 = load double*, double** %5
%31 = load i32, i32* %9
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds double, double* %30, i64 %32
%34 = load double, double* %33
%35 = fcmp olt double %29, %34
br i1 %35, label %36, label %57
36: ; preds = %28
%37 = load double*, double** %5
%38 = load i32, i32* %9
%39 = sub nsw i32 %38, 1
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds double, double* %37, i64 %40
%42 = load double, double* %41
%43 = load double*, double** %5
%44 = load i32, i32* %9
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds double, double* %43, i64 %45
store double %42, double* %46
%47 = load i32*, i32** %6
%48 = load i32, i32* %10
%49 = sub nsw i32 %48, 1
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds i32, i32* %47, i64 %50
%52 = load i32, i32* %51
%53 = load i32*, i32** %6
%54 = load i32, i32* %9
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i32, i32* %53, i64 %55
store i32 %52, i32* %56
br label %58
57: ; preds = %28
br label %64
58: ; preds = %36
%59 = load i32, i32* %10
%60 = add nsw i32 %59, -1
store i32 %60, i32* %10
br label %61
61: ; preds = %58
%62 = load i32, i32* %9
%63 = add nsw i32 %62, -1
store i32 %63, i32* %9
br label %25
64: ; preds = %57, %25
%65 = load double, double* %8
%66 = load double*, double** %5
%67 = load i32, i32* %9
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds double, double* %66, i64 %68
store double %65, double* %69
%70 = load i32, i32* %7
%71 = load i32*, i32** %6
%72 = load i32, i32* %9
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i32, i32* %71, i64 %73
store i32 %70, i32* %74
br label %75
75: ; preds = %64, %22
ret void
}

LLVM IR (-O2):
define void @insertInOrder(double* nocapture %0, i32* nocapture %1, i32 %2, double %3) {
%5 = getelementptr inbounds double, double* %0, i64 15
%6 = load double, double* %5
%7 = fcmp olt double %6, %3
br i1 %7, label %131, label %8
8: ; preds = %4
%9 = fcmp ogt double %6, %3
br i1 %9, label %10, label %127
10: ; preds = %8
%11 = getelementptr inbounds double, double* %0, i64 15
%12 = getelementptr inbounds double, double* %0, i64 14
%13 = load double, double* %12
store double %13, double* %11
%14 = getelementptr inbounds i32, i32* %1, i64 14
%15 = load i32, i32* %14
%16 = getelementptr inbounds i32, i32* %1, i64 15
store i32 %15, i32* %16
%17 = fcmp ogt double %13, %3
br i1 %17, label %18, label %127
18: ; preds = %10
%19 = getelementptr inbounds double, double* %0, i64 14
%20 = getelementptr inbounds double, double* %0, i64 13
%21 = load double, double* %20
store double %21, double* %19
%22 = getelementptr inbounds i32, i32* %1, i64 13
%23 = load i32, i32* %22
%24 = getelementptr inbounds i32, i32* %1, i64 14
store i32 %23, i32* %24
%25 = fcmp ogt double %21, %3
br i1 %25, label %26, label %127
26: ; preds = %18
%27 = getelementptr inbounds double, double* %0, i64 13
%28 = getelementptr inbounds double, double* %0, i64 12
%29 = load double, double* %28
store double %29, double* %27
%30 = getelementptr inbounds i32, i32* %1, i64 12
%31 = load i32, i32* %30
%32 = getelementptr inbounds i32, i32* %1, i64 13
store i32 %31, i32* %32
%33 = fcmp ogt double %29, %3
br i1 %33, label %34, label %127
34: ; preds = %26
%35 = getelementptr inbounds double, double* %0, i64 12
%36 = getelementptr inbounds double, double* %0, i64 11
%37 = load double, double* %36
store double %37, double* %35
%38 = getelementptr inbounds i32, i32* %1, i64 11
%39 = load i32, i32* %38
%40 = getelementptr inbounds i32, i32* %1, i64 12
store i32 %39, i32* %40
%41 = fcmp ogt double %37, %3
br i1 %41, label %42, label %127
42: ; preds = %34
%43 = getelementptr inbounds double, double* %0, i64 11
%44 = getelementptr inbounds double, double* %0, i64 10
%45 = load double, double* %44
store double %45, double* %43
%46 = getelementptr inbounds i32, i32* %1, i64 10
%47 = load i32, i32* %46
%48 = getelementptr inbounds i32, i32* %1, i64 11
store i32 %47, i32* %48
%49 = fcmp ogt double %45, %3
br i1 %49, label %50, label %127
50: ; preds = %42
%51 = getelementptr inbounds double, double* %0, i64 10
%52 = getelementptr inbounds double, double* %0, i64 9
%53 = load double, double* %52
store double %53, double* %51
%54 = getelementptr inbounds i32, i32* %1, i64 9
%55 = load i32, i32* %54
%56 = getelementptr inbounds i32, i32* %1, i64 10
store i32 %55, i32* %56
%57 = fcmp ogt double %53, %3
br i1 %57, label %58, label %127
58: ; preds = %50
%59 = getelementptr inbounds double, double* %0, i64 9
%60 = getelementptr inbounds double, double* %0, i64 8
%61 = load double, double* %60
store double %61, double* %59
%62 = getelementptr inbounds i32, i32* %1, i64 8
%63 = load i32, i32* %62
%64 = getelementptr inbounds i32, i32* %1, i64 9
store i32 %63, i32* %64
%65 = fcmp ogt double %61, %3
br i1 %65, label %66, label %127
66: ; preds = %58
%67 = getelementptr inbounds double, double* %0, i64 8
%68 = getelementptr inbounds double, double* %0, i64 7
%69 = load double, double* %68
store double %69, double* %67
%70 = getelementptr inbounds i32, i32* %1, i64 7
%71 = load i32, i32* %70
%72 = getelementptr inbounds i32, i32* %1, i64 8
store i32 %71, i32* %72
%73 = fcmp ogt double %69, %3
br i1 %73, label %74, label %127
74: ; preds = %66
%75 = getelementptr inbounds double, double* %0, i64 7
%76 = getelementptr inbounds double, double* %0, i64 6
%77 = load double, double* %76
store double %77, double* %75
%78 = getelementptr inbounds i32, i32* %1, i64 6
%79 = load i32, i32* %78
%80 = getelementptr inbounds i32, i32* %1, i64 7
store i32 %79, i32* %80
%81 = fcmp ogt double %77, %3
br i1 %81, label %82, label %127
82: ; preds = %74
%83 = getelementptr inbounds double, double* %0, i64 6
%84 = getelementptr inbounds double, double* %0, i64 5
%85 = load double, double* %84
store double %85, double* %83
%86 = getelementptr inbounds i32, i32* %1, i64 5
%87 = load i32, i32* %86
%88 = getelementptr inbounds i32, i32* %1, i64 6
store i32 %87, i32* %88
%89 = fcmp ogt double %85, %3
br i1 %89, label %90, label %127
90: ; preds = %82
%91 = getelementptr inbounds double, double* %0, i64 5
%92 = getelementptr inbounds double, double* %0, i64 4
%93 = load double, double* %92
store double %93, double* %91
%94 = getelementptr inbounds i32, i32* %1, i64 4
%95 = load i32, i32* %94
%96 = getelementptr inbounds i32, i32* %1, i64 5
store i32 %95, i32* %96
%97 = fcmp ogt double %93, %3
br i1 %97, label %98, label %127
98: ; preds = %90
%99 = getelementptr inbounds double, double* %0, i64 4
%100 = getelementptr inbounds double, double* %0, i64 3
%101 = load double, double* %100
store double %101, double* %99
%102 = getelementptr inbounds i32, i32* %1, i64 3
%103 = load i32, i32* %102
%104 = getelementptr inbounds i32, i32* %1, i64 4
store i32 %103, i32* %104
%105 = fcmp ogt double %101, %3
br i1 %105, label %106, label %127
106: ; preds = %98
%107 = getelementptr inbounds double, double* %0, i64 3
%108 = getelementptr inbounds double, double* %0, i64 2
%109 = load double, double* %108
store double %109, double* %107
%110 = getelementptr inbounds i32, i32* %1, i64 2
%111 = load i32, i32* %110
%112 = getelementptr inbounds i32, i32* %1, i64 3
store i32 %111, i32* %112
%113 = fcmp ogt double %109, %3
br i1 %113, label %114, label %127
114: ; preds = %106
%115 = getelementptr inbounds double, double* %0, i64 2
%116 = getelementptr inbounds double, double* %0, i64 1
%117 = load double, double* %116
store double %117, double* %115
%118 = getelementptr inbounds i32, i32* %1, i64 1
%119 = load i32, i32* %118
%120 = getelementptr inbounds i32, i32* %1, i64 2
store i32 %119, i32* %120
%121 = fcmp ogt double %117, %3
br i1 %121, label %122, label %127
122: ; preds = %114
%123 = getelementptr inbounds double, double* %0, i64 1
%124 = load double, double* %0
store double %124, double* %123
%125 = load i32, i32* %1
%126 = getelementptr inbounds i32, i32* %1, i64 1
store i32 %125, i32* %126
br label %127
127: ; preds = %122, %114, %106, %98, %90, %82, %74, %66, %58, %50, %42, %34, %26, %18, %10, %8
%128 = phi i64 [ 15, %8 ], [ 14, %10 ], [ 13, %18 ], [ 12, %26 ], [ 11, %34 ], [ 10, %42 ], [ 9, %50 ], [ 8, %58 ], [ 7, %66 ], [ 6, %74 ], [ 5, %82 ], [ 4, %90 ], [ 3, %98 ], [ 2, %106 ], [ 1, %114 ], [ 0, %122 ]
%129 = getelementptr inbounds double, double* %0, i64 %128
store double %3, double* %129
%130 = getelementptr inbounds i32, i32* %1, i64 %128
store i32 %2, i32* %130
br label %131
131: ; preds = %4, %127
ret void
}