double Stewdent(int i) {
  if (i <= 1)
    return 0;
  else if (i == 2)
    return 12.71;
  else if (i == 3)
    return 4.30;
  else if (i == 4)
    return 3.188;
  else if (i == 5)
    return 2.77;
  else if (i == 6)
    return 2.57;
  else if (i == 7)
    return 2.45;
  else if (i == 8)
    return 2.36;
  else if (i == 9)
    return 2.31;
  else if (i == 10)
    return 2.26;
  else if (i <= 12 && i > 10)
    return 2.20;
  else if (i <= 14 && i > 12)
    return 2.16;
  else if (i <= 16 && i > 14)
    return 2.13;
  else if (i <= 18 && i > 16)
    return 2.11;
  else if (i <= 20 && i > 18)
    return 2.09;
  else if (i <= 30 && i > 20)
    return 2.04;
  else if (i <= 40 && i > 30)
    return 2.02;
  else if (i <= 50 && i > 40)
    return 2.01;
  else if (i <= 60 && i > 50)
    return 2.00;
  else
    return 1.96;
}


x86 assembly (clang, -O0):
<Stewdent>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0xc(%rbp)
cmpl   $0x1,-0xc(%rbp)
jg     111e <Stewdent+0x1e>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x2,-0xc(%rbp)
jne    113a <Stewdent+0x3a>
movsd  0xf60(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x3,-0xc(%rbp)
jne    1156 <Stewdent+0x56>
movsd  0xf3c(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x4,-0xc(%rbp)
jne    1172 <Stewdent+0x72>
movsd  0xf18(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x5,-0xc(%rbp)
jne    118e <Stewdent+0x8e>
movsd  0xef4(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x6,-0xc(%rbp)
jne    11aa <Stewdent+0xaa>
movsd  0xed0(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x7,-0xc(%rbp)
jne    11c6 <Stewdent+0xc6>
movsd  0xeac(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x8,-0xc(%rbp)
jne    11e2 <Stewdent+0xe2>
movsd  0xe88(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x9,-0xc(%rbp)
jne    11fe <Stewdent+0xfe>
movsd  0xe64(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0xa,-0xc(%rbp)
jne    121a <Stewdent+0x11a>
movsd  0xe40(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0xc,-0xc(%rbp)
jg     1240 <Stewdent+0x140>
cmpl   $0xa,-0xc(%rbp)
jle    1240 <Stewdent+0x140>
movsd  0xe12(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0xe,-0xc(%rbp)
jg     1266 <Stewdent+0x166>
cmpl   $0xc,-0xc(%rbp)
jle    1266 <Stewdent+0x166>
movsd  0xde4(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x10,-0xc(%rbp)
jg     128c <Stewdent+0x18c>
cmpl   $0xe,-0xc(%rbp)
jle    128c <Stewdent+0x18c>
movsd  0xdb6(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x12,-0xc(%rbp)
jg     12b2 <Stewdent+0x1b2>
cmpl   $0x10,-0xc(%rbp)
jle    12b2 <Stewdent+0x1b2>
movsd  0xd88(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x14,-0xc(%rbp)
jg     12d8 <Stewdent+0x1d8>
cmpl   $0x12,-0xc(%rbp)
jle    12d8 <Stewdent+0x1d8>
movsd  0xd5a(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x1e,-0xc(%rbp)
jg     12fe <Stewdent+0x1fe>
cmpl   $0x14,-0xc(%rbp)
jle    12fe <Stewdent+0x1fe>
movsd  0xd2c(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x28,-0xc(%rbp)
jg     1324 <Stewdent+0x224>
cmpl   $0x1e,-0xc(%rbp)
jle    1324 <Stewdent+0x224>
movsd  0xcfe(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x32,-0xc(%rbp)
jg     134a <Stewdent+0x24a>
cmpl   $0x28,-0xc(%rbp)
jle    134a <Stewdent+0x24a>
movsd  0xcd0(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
cmpl   $0x3c,-0xc(%rbp)
jg     1370 <Stewdent+0x270>
cmpl   $0x32,-0xc(%rbp)
jle    1370 <Stewdent+0x270>
movsd  0xca2(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    137d <Stewdent+0x27d>
movsd  0xc88(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<Stewdent>:
xorps  %xmm0,%xmm0
cmp    $0x2,%edi
jl     111e <Stewdent+0x1e>
lea    -0x2(%rdi),%eax
cmp    $0x9,%eax
jae    111f <Stewdent+0x1f>
cltq
lea    0xf37(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm0
ret
cmp    $0xd,%edi
jae    112d <Stewdent+0x2d>
movsd  0xed4(%rip),%xmm0
ret
cmp    $0xf,%edi
jae    113b <Stewdent+0x3b>
movsd  0xece(%rip),%xmm0
ret
cmp    $0x11,%edi
jae    1149 <Stewdent+0x49>
movsd  0xec8(%rip),%xmm0
ret
cmp    $0x13,%edi
jae    1157 <Stewdent+0x57>
movsd  0xec2(%rip),%xmm0
ret
cmp    $0x15,%edi
jae    1165 <Stewdent+0x65>
movsd  0xebc(%rip),%xmm0
ret
cmp    $0x1f,%edi
jae    1173 <Stewdent+0x73>
movsd  0xeb6(%rip),%xmm0
ret
cmp    $0x29,%edi
jae    1181 <Stewdent+0x81>
movsd  0xeb0(%rip),%xmm0
ret
cmp    $0x33,%edi
jae    118f <Stewdent+0x8f>
movsd  0xeaa(%rip),%xmm0
ret
xor    %eax,%eax
cmp    $0x3d,%edi
setb   %al
lea    0xea2(%rip),%rcx
jmp    1119 <Stewdent+0x19>

LLVM IR (-O0):
define double @Stewdent(i32 %0) {
%2 = alloca double
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
%5 = icmp sle i32 %4, 1
br i1 %5, label %6, label %7
6: ; preds = %1
store double 0.000000e+00, double* %2
br label %107
7: ; preds = %1
%8 = load i32, i32* %3
%9 = icmp eq i32 %8, 2
br i1 %9, label %10, label %11
10: ; preds = %7
store double 1.271000e+01, double* %2
br label %107
11: ; preds = %7
%12 = load i32, i32* %3
%13 = icmp eq i32 %12, 3
br i1 %13, label %14, label %15
14: ; preds = %11
store double 4.300000e+00, double* %2
br label %107
15: ; preds = %11
%16 = load i32, i32* %3
%17 = icmp eq i32 %16, 4
br i1 %17, label %18, label %19
18: ; preds = %15
store double 3.188000e+00, double* %2
br label %107
19: ; preds = %15
%20 = load i32, i32* %3
%21 = icmp eq i32 %20, 5
br i1 %21, label %22, label %23
22: ; preds = %19
store double 2.770000e+00, double* %2
br label %107
23: ; preds = %19
%24 = load i32, i32* %3
%25 = icmp eq i32 %24, 6
br i1 %25, label %26, label %27
26: ; preds = %23
store double 2.570000e+00, double* %2
br label %107
27: ; preds = %23
%28 = load i32, i32* %3
%29 = icmp eq i32 %28, 7
br i1 %29, label %30, label %31
30: ; preds = %27
store double 2.450000e+00, double* %2
br label %107
31: ; preds = %27
%32 = load i32, i32* %3
%33 = icmp eq i32 %32, 8
br i1 %33, label %34, label %35
34: ; preds = %31
store double 2.360000e+00, double* %2
br label %107
35: ; preds = %31
%36 = load i32, i32* %3
%37 = icmp eq i32 %36, 9
br i1 %37, label %38, label %39
38: ; preds = %35
store double 2.310000e+00, double* %2
br label %107
39: ; preds = %35
%40 = load i32, i32* %3
%41 = icmp eq i32 %40, 10
br i1 %41, label %42, label %43
42: ; preds = %39
store double 2.260000e+00, double* %2
br label %107
43: ; preds = %39
%44 = load i32, i32* %3
%45 = icmp sle i32 %44, 12
br i1 %45, label %46, label %50
46: ; preds = %43
%47 = load i32, i32* %3
%48 = icmp sgt i32 %47, 10
br i1 %48, label %49, label %50
49: ; preds = %46
store double 2.200000e+00, double* %2
br label %107
50: ; preds = %46, %43
%51 = load i32, i32* %3
%52 = icmp sle i32 %51, 14
br i1 %52, label %53, label %57
53: ; preds = %50
%54 = load i32, i32* %3
%55 = icmp sgt i32 %54, 12
br i1 %55, label %56, label %57
56: ; preds = %53
store double 2.160000e+00, double* %2
br label %107
57: ; preds = %53, %50
%58 = load i32, i32* %3
%59 = icmp sle i32 %58, 16
br i1 %59, label %60, label %64
60: ; preds = %57
%61 = load i32, i32* %3
%62 = icmp sgt i32 %61, 14
br i1 %62, label %63, label %64
63: ; preds = %60
store double 2.130000e+00, double* %2
br label %107
64: ; preds = %60, %57
%65 = load i32, i32* %3
%66 = icmp sle i32 %65, 18
br i1 %66, label %67, label %71
67: ; preds = %64
%68 = load i32, i32* %3
%69 = icmp sgt i32 %68, 16
br i1 %69, label %70, label %71
70: ; preds = %67
store double 2.110000e+00, double* %2
br label %107
71: ; preds = %67, %64
%72 = load i32, i32* %3
%73 = icmp sle i32 %72, 20
br i1 %73, label %74, label %78
74: ; preds = %71
%75 = load i32, i32* %3
%76 = icmp sgt i32 %75, 18
br i1 %76, label %77, label %78
77: ; preds = %74
store double 2.090000e+00, double* %2
br label %107
78: ; preds = %74, %71
%79 = load i32, i32* %3
%80 = icmp sle i32 %79, 30
br i1 %80, label %81, label %85
81: ; preds = %78
%82 = load i32, i32* %3
%83 = icmp sgt i32 %82, 20
br i1 %83, label %84, label %85
84: ; preds = %81
store double 2.040000e+00, double* %2
br label %107
85: ; preds = %81, %78
%86 = load i32, i32* %3
%87 = icmp sle i32 %86, 40
br i1 %87, label %88, label %92
88: ; preds = %85
%89 = load i32, i32* %3
%90 = icmp sgt i32 %89, 30
br i1 %90, label %91, label %92
91: ; preds = %88
store double 2.020000e+00, double* %2
br label %107
92: ; preds = %88, %85
%93 = load i32, i32* %3
%94 = icmp sle i32 %93, 50
br i1 %94, label %95, label %99
95: ; preds = %92
%96 = load i32, i32* %3
%97 = icmp sgt i32 %96, 40
br i1 %97, label %98, label %99
98: ; preds = %95
store double 2.010000e+00, double* %2
br label %107
99: ; preds = %95, %92
%100 = load i32, i32* %3
%101 = icmp sle i32 %100, 60
br i1 %101, label %102, label %106
102: ; preds = %99
%103 = load i32, i32* %3
%104 = icmp sgt i32 %103, 50
br i1 %104, label %105, label %106
105: ; preds = %102
store double 2.000000e+00, double* %2
br label %107
106: ; preds = %102, %99
store double 1.960000e+00, double* %2
br label %107
107: ; preds = %106, %105, %98, %91, %84, %77, %70, %63, %56, %49, %42, %38, %34, %30, %26, %22, %18, %14, %10, %6
%108 = load double, double* %2
ret double %108
}

LLVM IR (-O2):
@switch.table.Stewdent = [9 x double] [double 1.271000e+01, double 4.300000e+00, double 3.188000e+00, double 2.770000e+00, double 2.570000e+00, double 2.450000e+00, double 2.360000e+00, double 2.310000e+00, double 2.260000e+00]
define double @Stewdent(i32 %0) {
%2 = icmp slt i32 %0, 2
br i1 %2, label %29, label %3
3: ; preds = %1
%4 = add i32 %0, -2
%5 = icmp ult i32 %4, 9
br i1 %5, label %25, label %6
6: ; preds = %3
%7 = icmp ult i32 %0, 13
br i1 %7, label %29, label %8
8: ; preds = %6
%9 = icmp ult i32 %0, 15
br i1 %9, label %29, label %10
10: ; preds = %8
%11 = icmp ult i32 %0, 17
br i1 %11, label %29, label %12
12: ; preds = %10
%13 = icmp ult i32 %0, 19
br i1 %13, label %29, label %14
14: ; preds = %12
%15 = icmp ult i32 %0, 21
br i1 %15, label %29, label %16
16: ; preds = %14
%17 = icmp ult i32 %0, 31
br i1 %17, label %29, label %18
18: ; preds = %16
%19 = icmp ult i32 %0, 41
br i1 %19, label %29, label %20
20: ; preds = %18
%21 = icmp ult i32 %0, 51
br i1 %21, label %29, label %22
22: ; preds = %20
%23 = icmp ult i32 %0, 61
%24 = select i1 %23, double 2.000000e+00, double 1.960000e+00
br label %29
25: ; preds = %3
%26 = sext i32 %4 to i64
%27 = getelementptr inbounds [9 x double], [9 x double]* @switch.table.Stewdent, i64 0, i64 %26
%28 = load double, double* %27
br label %29
29: ; preds = %25, %22, %20, %18, %16, %14, %12, %10, %8, %6, %1
%30 = phi double [ 0.000000e+00, %1 ], [ 2.200000e+00, %6 ], [ 2.160000e+00, %8 ], [ 2.130000e+00, %10 ], [ 2.110000e+00, %12 ], [ 2.090000e+00, %14 ], [ 2.040000e+00, %16 ], [ 2.020000e+00, %18 ], [ 2.010000e+00, %20 ], [ %24, %22 ], [ %28, %25 ]
ret double %30
}