float *bubsort_Coord(float *Coord, int NumOfCoords) {
  static float extremum[6] = {1, 2, 3, 4, 5, 6};
  int i;
  extremum[0] = *(Coord);
  extremum[2] = *(Coord + 1);
  extremum[4] = *(Coord + 2);
  extremum[1] = *(Coord);
  extremum[3] = *(Coord + 1);
  extremum[5] = *(Coord + 2);
  for (i = 0; i < NumOfCoords; i++) {
    extremum[0] =
        *(Coord + 3 * i) > extremum[0] ? *(Coord + 3 * i) : extremum[0];
    extremum[2] =
        *(Coord + 3 * i + 1) > extremum[2] ? *(Coord + 3 * i + 1) : extremum[2];
    extremum[4] =
        *(Coord + 3 * i + 2) > extremum[4] ? *(Coord + 3 * i + 2) : extremum[4];
    extremum[1] =
        *(Coord + 3 * i) < extremum[1] ? *(Coord + 3 * i) : extremum[1];
    extremum[3] =
        *(Coord + 3 * i + 1) < extremum[3] ? *(Coord + 3 * i + 1) : extremum[3];
    extremum[5] =
        *(Coord + 3 * i + 2) < extremum[5] ? *(Coord + 3 * i + 2) : extremum[5];
  }
  return extremum;
}


x86 assembly (clang, -O0):
<bubsort_Coord>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,0x2f15(%rip)
mov    -0x8(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,0x2f0c(%rip)
mov    -0x8(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,0x2f03(%rip)
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,0x2ee7(%rip)
mov    -0x8(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,0x2ede(%rip)
mov    -0x8(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,0x2ed5(%rip)
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    138a <bubsort_Coord+0x28a>
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
ucomiss 0x2e97(%rip),%xmm0
jbe    11b9 <bubsort_Coord+0xb9>
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x14(%rbp)
jmp    11c6 <bubsort_Coord+0xc6>
movss  0x2e6f(%rip),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm0
movss  %xmm0,0x2e5d(%rip)
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  0x4(%rax,%rcx,4),%xmm0
ucomiss 0x2e4d(%rip),%xmm0
jbe    120c <bubsort_Coord+0x10c>
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  0x4(%rax,%rcx,4),%xmm0
movss  %xmm0,-0x18(%rbp)
jmp    1219 <bubsort_Coord+0x119>
movss  0x2e24(%rip),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x18(%rbp),%xmm0
movss  %xmm0,0x2e12(%rip)
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  0x8(%rax,%rcx,4),%xmm0
ucomiss 0x2e02(%rip),%xmm0
jbe    125f <bubsort_Coord+0x15f>
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  0x8(%rax,%rcx,4),%xmm0
movss  %xmm0,-0x1c(%rbp)
jmp    126c <bubsort_Coord+0x16c>
movss  0x2dd9(%rip),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x1c(%rbp),%xmm0
movss  %xmm0,0x2dc7(%rip)
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
movss  0x2da3(%rip),%xmm0
ucomiss %xmm1,%xmm0
jbe    12b4 <bubsort_Coord+0x1b4>
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x20(%rbp)
jmp    12c1 <bubsort_Coord+0x1c1>
movss  0x2d78(%rip),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x20(%rbp),%xmm0
movss  %xmm0,0x2d66(%rip)
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  0x4(%rax,%rcx,4),%xmm1
movss  0x2d55(%rip),%xmm0
ucomiss %xmm1,%xmm0
jbe    130b <bubsort_Coord+0x20b>
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  0x4(%rax,%rcx,4),%xmm0
movss  %xmm0,-0x24(%rbp)
jmp    1318 <bubsort_Coord+0x218>
movss  0x2d29(%rip),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x24(%rbp),%xmm0
movss  %xmm0,0x2d17(%rip)
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  0x8(%rax,%rcx,4),%xmm1
movss  0x2d06(%rip),%xmm0
ucomiss %xmm1,%xmm0
jbe    1362 <bubsort_Coord+0x262>
mov    -0x8(%rbp),%rax
imul   $0x3,-0x10(%rbp),%ecx
movslq %ecx,%rcx
movss  0x8(%rax,%rcx,4),%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    136f <bubsort_Coord+0x26f>
movss  0x2cda(%rip),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x28(%rbp),%xmm0
movss  %xmm0,0x2cc8(%rip)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1176 <bubsort_Coord+0x76>
lea    0x2c9f(%rip),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<bubsort_Coord>:
movss  (%rdi),%xmm5
movss  %xmm5,0x2f24(%rip)
movss  0x4(%rdi),%xmm4
movss  %xmm4,0x2f1f(%rip)
movss  0x8(%rdi),%xmm3
movss  %xmm3,0x2f1a(%rip)
movss  (%rdi),%xmm2
movss  %xmm2,0x2f02(%rip)
movss  0x4(%rdi),%xmm1
movss  %xmm1,0x2efd(%rip)
movss  0x8(%rdi),%xmm0
movss  %xmm0,0x2ef8(%rip)
test   %esi,%esi
jle    11e9 <bubsort_Coord+0xe9>
mov    %esi,%eax
shl    $0x2,%rax
lea    (%rax,%rax,2),%rax
xor    %ecx,%ecx
movss  (%rdi,%rcx,1),%xmm6
maxss  %xmm5,%xmm6
movss  %xmm6,0x2ebf(%rip)
movss  0x4(%rdi,%rcx,1),%xmm5
maxss  %xmm4,%xmm5
movss  %xmm5,0x2eb5(%rip)
movss  0x8(%rdi,%rcx,1),%xmm4
maxss  %xmm3,%xmm4
movss  %xmm4,0x2eab(%rip)
movss  (%rdi,%rcx,1),%xmm3
minss  %xmm2,%xmm3
movss  %xmm3,0x2e8e(%rip)
movss  0x4(%rdi,%rcx,1),%xmm2
minss  %xmm1,%xmm2
movss  %xmm2,0x2e84(%rip)
movss  0x8(%rdi,%rcx,1),%xmm1
minss  %xmm0,%xmm1
movss  %xmm1,0x2e7a(%rip)
add    $0xc,%rcx
movaps %xmm1,%xmm0
movaps %xmm2,%xmm1
movaps %xmm3,%xmm2
movaps %xmm4,%xmm3
movaps %xmm5,%xmm4
movaps %xmm6,%xmm5
cmp    %rcx,%rax
jne    1160 <bubsort_Coord+0x60>
lea    0x2e40(%rip),%rax
ret

LLVM IR (-O0):
@bubsort_Coord.extremum = internal global [6 x float] [float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00, float 5.000000e+00, float 6.000000e+00]
define float* @bubsort_Coord(float* %0, i32 %1) {
%3 = alloca float*
%4 = alloca i32
%5 = alloca i32
store float* %0, float** %3
store i32 %1, i32* %4
%6 = load float*, float** %3
%7 = load float, float* %6
store float %7, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 0)
%8 = load float*, float** %3
%9 = getelementptr inbounds float, float* %8, i64 1
%10 = load float, float* %9
store float %10, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 2)
%11 = load float*, float** %3
%12 = getelementptr inbounds float, float* %11, i64 2
%13 = load float, float* %12
store float %13, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 4)
%14 = load float*, float** %3
%15 = load float, float* %14
store float %15, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 1)
%16 = load float*, float** %3
%17 = getelementptr inbounds float, float* %16, i64 1
%18 = load float, float* %17
store float %18, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 3)
%19 = load float*, float** %3
%20 = getelementptr inbounds float, float* %19, i64 2
%21 = load float, float* %20
store float %21, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 5)
store i32 0, i32* %5
br label %22
22: ; preds = %149, %2
%23 = load i32, i32* %5
%24 = load i32, i32* %4
%25 = icmp slt i32 %23, %24
br i1 %25, label %26, label %152
26: ; preds = %22
%27 = load float*, float** %3
%28 = load i32, i32* %5
%29 = mul nsw i32 3, %28
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds float, float* %27, i64 %30
%32 = load float, float* %31
%33 = load float, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 0)
%34 = fcmp ogt float %32, %33
br i1 %34, label %35, label %42
35: ; preds = %26
%36 = load float*, float** %3
%37 = load i32, i32* %5
%38 = mul nsw i32 3, %37
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds float, float* %36, i64 %39
%41 = load float, float* %40
br label %44
42: ; preds = %26
%43 = load float, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 0)
br label %44
44: ; preds = %42, %35
%45 = phi float [ %41, %35 ], [ %43, %42 ]
store float %45, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 0)
%46 = load float*, float** %3
%47 = load i32, i32* %5
%48 = mul nsw i32 3, %47
%49 = sext i32 %48 to i64
%50 = getelementptr inbounds float, float* %46, i64 %49
%51 = getelementptr inbounds float, float* %50, i64 1
%52 = load float, float* %51
%53 = load float, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 2)
%54 = fcmp ogt float %52, %53
br i1 %54, label %55, label %63
55: ; preds = %44
%56 = load float*, float** %3
%57 = load i32, i32* %5
%58 = mul nsw i32 3, %57
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds float, float* %56, i64 %59
%61 = getelementptr inbounds float, float* %60, i64 1
%62 = load float, float* %61
br label %65
63: ; preds = %44
%64 = load float, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 2)
br label %65
65: ; preds = %63, %55
%66 = phi float [ %62, %55 ], [ %64, %63 ]
store float %66, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 2)
%67 = load float*, float** %3
%68 = load i32, i32* %5
%69 = mul nsw i32 3, %68
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds float, float* %67, i64 %70
%72 = getelementptr inbounds float, float* %71, i64 2
%73 = load float, float* %72
%74 = load float, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 4)
%75 = fcmp ogt float %73, %74
br i1 %75, label %76, label %84
76: ; preds = %65
%77 = load float*, float** %3
%78 = load i32, i32* %5
%79 = mul nsw i32 3, %78
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds float, float* %77, i64 %80
%82 = getelementptr inbounds float, float* %81, i64 2
%83 = load float, float* %82
br label %86
84: ; preds = %65
%85 = load float, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 4)
br label %86
86: ; preds = %84, %76
%87 = phi float [ %83, %76 ], [ %85, %84 ]
store float %87, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 4)
%88 = load float*, float** %3
%89 = load i32, i32* %5
%90 = mul nsw i32 3, %89
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds float, float* %88, i64 %91
%93 = load float, float* %92
%94 = load float, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 1)
%95 = fcmp olt float %93, %94
br i1 %95, label %96, label %103
96: ; preds = %86
%97 = load float*, float** %3
%98 = load i32, i32* %5
%99 = mul nsw i32 3, %98
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds float, float* %97, i64 %100
%102 = load float, float* %101
br label %105
103: ; preds = %86
%104 = load float, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 1)
br label %105
105: ; preds = %103, %96
%106 = phi float [ %102, %96 ], [ %104, %103 ]
store float %106, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 1)
%107 = load float*, float** %3
%108 = load i32, i32* %5
%109 = mul nsw i32 3, %108
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds float, float* %107, i64 %110
%112 = getelementptr inbounds float, float* %111, i64 1
%113 = load float, float* %112
%114 = load float, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 3)
%115 = fcmp olt float %113, %114
br i1 %115, label %116, label %124
116: ; preds = %105
%117 = load float*, float** %3
%118 = load i32, i32* %5
%119 = mul nsw i32 3, %118
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds float, float* %117, i64 %120
%122 = getelementptr inbounds float, float* %121, i64 1
%123 = load float, float* %122
br label %126
124: ; preds = %105
%125 = load float, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 3)
br label %126
126: ; preds = %124, %116
%127 = phi float [ %123, %116 ], [ %125, %124 ]
store float %127, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 3)
%128 = load float*, float** %3
%129 = load i32, i32* %5
%130 = mul nsw i32 3, %129
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds float, float* %128, i64 %131
%133 = getelementptr inbounds float, float* %132, i64 2
%134 = load float, float* %133
%135 = load float, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 5)
%136 = fcmp olt float %134, %135
br i1 %136, label %137, label %145
137: ; preds = %126
%138 = load float*, float** %3
%139 = load i32, i32* %5
%140 = mul nsw i32 3, %139
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds float, float* %138, i64 %141
%143 = getelementptr inbounds float, float* %142, i64 2
%144 = load float, float* %143
br label %147
145: ; preds = %126
%146 = load float, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 5)
br label %147
147: ; preds = %145, %137
%148 = phi float [ %144, %137 ], [ %146, %145 ]
store float %148, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 5)
br label %149
149: ; preds = %147
%150 = load i32, i32* %5
%151 = add nsw i32 %150, 1
store i32 %151, i32* %5
br label %22
152: ; preds = %22
ret float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 0)
}

LLVM IR (-O2):
@bubsort_Coord.extremum = internal global [6 x float] [float 1.000000e+00, float 2.000000e+00, float 3.000000e+00, float 4.000000e+00, float 5.000000e+00, float 6.000000e+00]
define float* @bubsort_Coord(float* nocapture %0, i32 %1) {
%3 = load float, float* %0
store float %3, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 0)
%4 = getelementptr inbounds float, float* %0, i64 1
%5 = load float, float* %4
store float %5, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 2)
%6 = getelementptr inbounds float, float* %0, i64 2
%7 = load float, float* %6
store float %7, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 4)
%8 = load float, float* %0
store float %8, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 1)
%9 = load float, float* %4
store float %9, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 3)
%10 = load float, float* %6
store float %10, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 5)
%11 = icmp sgt i32 %1, 0
br i1 %11, label %12, label %46
12: ; preds = %2
%13 = zext i32 %1 to i64
br label %14
14: ; preds = %12, %14
%15 = phi float [ %10, %12 ], [ %43, %14 ]
%16 = phi float [ %9, %12 ], [ %40, %14 ]
%17 = phi float [ %8, %12 ], [ %37, %14 ]
%18 = phi float [ %7, %12 ], [ %34, %14 ]
%19 = phi float [ %5, %12 ], [ %30, %14 ]
%20 = phi float [ %3, %12 ], [ %26, %14 ]
%21 = phi i64 [ 0, %12 ], [ %44, %14 ]
%22 = mul nuw nsw i64 %21, 3
%23 = getelementptr inbounds float, float* %0, i64 %22
%24 = load float, float* %23
%25 = fcmp ogt float %24, %20
%26 = select i1 %25, float %24, float %20
store float %26, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 0)
%27 = getelementptr inbounds float, float* %23, i64 1
%28 = load float, float* %27
%29 = fcmp ogt float %28, %19
%30 = select i1 %29, float %28, float %19
store float %30, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 2)
%31 = getelementptr inbounds float, float* %23, i64 2
%32 = load float, float* %31
%33 = fcmp ogt float %32, %18
%34 = select i1 %33, float %32, float %18
store float %34, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 4)
%35 = load float, float* %23
%36 = fcmp olt float %35, %17
%37 = select i1 %36, float %35, float %17
store float %37, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 1)
%38 = load float, float* %27
%39 = fcmp olt float %38, %16
%40 = select i1 %39, float %38, float %16
store float %40, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 3)
%41 = load float, float* %31
%42 = fcmp olt float %41, %15
%43 = select i1 %42, float %41, float %15
store float %43, float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 5)
%44 = add nuw nsw i64 %21, 1
%45 = icmp eq i64 %44, %13
br i1 %45, label %46, label %14
46: ; preds = %14, %2
ret float* getelementptr inbounds ([6 x float], [6 x float]* @bubsort_Coord.extremum, i64 0, i64 0)
}