void getResults(int judgeNo, double scores[], double *min, double *max,
                double *avg) {
  double sum = 0;
  *min = scores[0];
  *max = scores[0];
  for (int n = 0; n < judgeNo; n++) {
    sum = sum + scores[n];
    if (scores[n] > *max) {
      *max = scores[n];
    }
    if (scores[n] < *min) {
      *min = scores[n];
    }
  }
  *avg = (sum - (*min + *max)) / (judgeNo - 2);
}


x86 assembly (clang, -O0):
<getResults>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    11e0 <getResults+0xe0>
movsd  -0x30(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
ucomisd (%rax),%xmm0
jbe    1199 <getResults+0x99>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    11cd <getResults+0xcd>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    11d2 <getResults+0xd2>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1146 <getResults+0x46>
movsd  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm1
subsd  %xmm1,%xmm0
mov    -0x4(%rbp),%eax
sub    $0x2,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<getResults>:
movsd  (%rsi),%xmm0
movsd  %xmm0,(%rdx)
movsd  (%rsi),%xmm1
movsd  %xmm1,(%rcx)
test   %edi,%edi
jle    1161 <getResults+0x61>
mov    %edi,%r9d
xorpd  %xmm0,%xmm0
xor    %eax,%eax
jmp    112d <getResults+0x2d>
nop
addsd  %xmm3,%xmm0
add    $0x1,%rax
cmp    %rax,%r9
je     1169 <getResults+0x69>
movsd  (%rsi,%rax,8),%xmm3
ucomisd %xmm1,%xmm3
movapd %xmm3,%xmm4
jbe    1149 <getResults+0x49>
movsd  %xmm3,(%rcx)
movsd  (%rsi,%rax,8),%xmm4
movapd %xmm3,%xmm1
movsd  (%rdx),%xmm2
ucomisd %xmm4,%xmm2
jbe    1120 <getResults+0x20>
movsd  %xmm4,(%rdx)
movsd  (%rcx),%xmm1
movapd %xmm4,%xmm2
jmp    1120 <getResults+0x20>
movsd  (%rdx),%xmm2
xorpd  %xmm0,%xmm0
addsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
add    $0xfffffffe,%edi
xorps  %xmm1,%xmm1
cvtsi2sd %edi,%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,(%r8)
ret

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

LLVM IR (-O2):
define void @getResults(i32 %0, double* nocapture %1, double* nocapture %2, double* nocapture %3, double* nocapture writeonly %4) {
%6 = load double, double* %1
store double %6, double* %2
%7 = load double, double* %1
store double %7, double* %3
%8 = icmp sgt i32 %0, 0
br i1 %8, label %11, label %9
9: ; preds = %5
%10 = load double, double* %2
br label %13
11: ; preds = %5
%12 = zext i32 %0 to i64
br label %22
13: ; preds = %39, %9
%14 = phi double [ %7, %9 ], [ %41, %39 ]
%15 = phi double [ %10, %9 ], [ %40, %39 ]
%16 = phi double [ 0.000000e+00, %9 ], [ %28, %39 ]
%17 = fadd double %15, %14
%18 = fsub double %16, %17
%19 = add nsw i32 %0, -2
%20 = sitofp i32 %19 to double
%21 = fdiv double %18, %20
store double %21, double* %4
ret void
22: ; preds = %11, %39
%23 = phi double [ %7, %11 ], [ %41, %39 ]
%24 = phi i64 [ 0, %11 ], [ %42, %39 ]
%25 = phi double [ 0.000000e+00, %11 ], [ %28, %39 ]
%26 = getelementptr inbounds double, double* %1, i64 %24
%27 = load double, double* %26
%28 = fadd double %25, %27
%29 = fcmp ogt double %27, %23
br i1 %29, label %30, label %32
30: ; preds = %22
store double %27, double* %3
%31 = load double, double* %26
br label %32
32: ; preds = %30, %22
%33 = phi double [ %31, %30 ], [ %27, %22 ]
%34 = phi double [ %27, %30 ], [ %23, %22 ]
%35 = load double, double* %2
%36 = fcmp olt double %33, %35
br i1 %36, label %37, label %39
37: ; preds = %32
store double %33, double* %2
%38 = load double, double* %3
br label %39
39: ; preds = %32, %37
%40 = phi double [ %35, %32 ], [ %33, %37 ]
%41 = phi double [ %34, %32 ], [ %38, %37 ]
%42 = add nuw nsw i64 %24, 1
%43 = icmp eq i64 %42, %12
br i1 %43, label %13, label %22
}