int will2edo(int edo) {
  if (edo == 1)
    return 7;
  else if (edo == 2)
    return 0;
  else if (edo == 3)
    return 19;
  else if (edo == 4)
    return 10;
  else if (edo == 5)
    return 9;
  else if (edo == 6)
    return 15;
  else if (edo == 7)
    return 16;
  else if (edo == 8)
    return 3;
  else if (edo == 9)
    return 6;
  else if (edo == 10)
    return 2;
  else if (edo == 11)
    return 5;
  else if (edo == 12)
    return 11;
  else if (edo == 13)
    return 1;
  else if (edo == 14)
    return 4;
  else if (edo == 15)
    return 12;
  else if (edo == 16)
    return 8;
  else if (edo == 17)
    return 13;
  else if (edo == 18)
    return 18;
  else if (edo == 19)
    return 17;
  else if (edo == 20)
    return 14;
  else
    return 0;
}


x86 assembly (clang, -O0):
<will2edo>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
cmpl   $0x1,-0x8(%rbp)
jne    111d <will2edo+0x1d>
movl   $0x7,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x2,-0x8(%rbp)
jne    1133 <will2edo+0x33>
movl   $0x0,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x3,-0x8(%rbp)
jne    1149 <will2edo+0x49>
movl   $0x13,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x4,-0x8(%rbp)
jne    115f <will2edo+0x5f>
movl   $0xa,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x5,-0x8(%rbp)
jne    1175 <will2edo+0x75>
movl   $0x9,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x6,-0x8(%rbp)
jne    118b <will2edo+0x8b>
movl   $0xf,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x7,-0x8(%rbp)
jne    11a1 <will2edo+0xa1>
movl   $0x10,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x8,-0x8(%rbp)
jne    11b7 <will2edo+0xb7>
movl   $0x3,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x9,-0x8(%rbp)
jne    11cd <will2edo+0xcd>
movl   $0x6,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0xa,-0x8(%rbp)
jne    11e3 <will2edo+0xe3>
movl   $0x2,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0xb,-0x8(%rbp)
jne    11f9 <will2edo+0xf9>
movl   $0x5,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0xc,-0x8(%rbp)
jne    120f <will2edo+0x10f>
movl   $0xb,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0xd,-0x8(%rbp)
jne    1225 <will2edo+0x125>
movl   $0x1,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0xe,-0x8(%rbp)
jne    123b <will2edo+0x13b>
movl   $0x4,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0xf,-0x8(%rbp)
jne    1251 <will2edo+0x151>
movl   $0xc,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x10,-0x8(%rbp)
jne    1267 <will2edo+0x167>
movl   $0x8,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x11,-0x8(%rbp)
jne    127d <will2edo+0x17d>
movl   $0xd,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x12,-0x8(%rbp)
jne    1293 <will2edo+0x193>
movl   $0x12,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x13,-0x8(%rbp)
jne    12a9 <will2edo+0x1a9>
movl   $0x11,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
cmpl   $0x14,-0x8(%rbp)
jne    12bf <will2edo+0x1bf>
movl   $0xe,-0x4(%rbp)
jmp    12c6 <will2edo+0x1c6>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<will2edo>:
add    $0xffffffff,%edi
xor    %eax,%eax
cmp    $0x13,%edi
ja     1117 <will2edo+0x17>
movslq %edi,%rax
lea    0xeec(%rip),%rcx
mov    (%rcx,%rax,4),%eax
ret

LLVM IR (-O0):
define i32 @will2edo(i32 %0) {
%2 = alloca i32
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
%5 = icmp eq i32 %4, 1
br i1 %5, label %6, label %7
6: ; preds = %1
store i32 7, i32* %2
br label %84
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 i32 0, i32* %2
br label %84
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 i32 19, i32* %2
br label %84
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 i32 10, i32* %2
br label %84
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 i32 9, i32* %2
br label %84
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 i32 15, i32* %2
br label %84
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 i32 16, i32* %2
br label %84
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 i32 3, i32* %2
br label %84
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 i32 6, i32* %2
br label %84
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 i32 2, i32* %2
br label %84
43: ; preds = %39
%44 = load i32, i32* %3
%45 = icmp eq i32 %44, 11
br i1 %45, label %46, label %47
46: ; preds = %43
store i32 5, i32* %2
br label %84
47: ; preds = %43
%48 = load i32, i32* %3
%49 = icmp eq i32 %48, 12
br i1 %49, label %50, label %51
50: ; preds = %47
store i32 11, i32* %2
br label %84
51: ; preds = %47
%52 = load i32, i32* %3
%53 = icmp eq i32 %52, 13
br i1 %53, label %54, label %55
54: ; preds = %51
store i32 1, i32* %2
br label %84
55: ; preds = %51
%56 = load i32, i32* %3
%57 = icmp eq i32 %56, 14
br i1 %57, label %58, label %59
58: ; preds = %55
store i32 4, i32* %2
br label %84
59: ; preds = %55
%60 = load i32, i32* %3
%61 = icmp eq i32 %60, 15
br i1 %61, label %62, label %63
62: ; preds = %59
store i32 12, i32* %2
br label %84
63: ; preds = %59
%64 = load i32, i32* %3
%65 = icmp eq i32 %64, 16
br i1 %65, label %66, label %67
66: ; preds = %63
store i32 8, i32* %2
br label %84
67: ; preds = %63
%68 = load i32, i32* %3
%69 = icmp eq i32 %68, 17
br i1 %69, label %70, label %71
70: ; preds = %67
store i32 13, i32* %2
br label %84
71: ; preds = %67
%72 = load i32, i32* %3
%73 = icmp eq i32 %72, 18
br i1 %73, label %74, label %75
74: ; preds = %71
store i32 18, i32* %2
br label %84
75: ; preds = %71
%76 = load i32, i32* %3
%77 = icmp eq i32 %76, 19
br i1 %77, label %78, label %79
78: ; preds = %75
store i32 17, i32* %2
br label %84
79: ; preds = %75
%80 = load i32, i32* %3
%81 = icmp eq i32 %80, 20
br i1 %81, label %82, label %83
82: ; preds = %79
store i32 14, i32* %2
br label %84
83: ; preds = %79
store i32 0, i32* %2
br label %84
84: ; preds = %83, %82, %78, %74, %70, %66, %62, %58, %54, %50, %46, %42, %38, %34, %30, %26, %22, %18, %14, %10, %6
%85 = load i32, i32* %2
ret i32 %85
}

LLVM IR (-O2):
@switch.table.will2edo = [20 x i32] [i32 7, i32 0, i32 19, i32 10, i32 9, i32 15, i32 16, i32 3, i32 6, i32 2, i32 5, i32 11, i32 1, i32 4, i32 12, i32 8, i32 13, i32 18, i32 17, i32 14]
define i32 @will2edo(i32 %0) {
%2 = add i32 %0, -1
%3 = icmp ult i32 %2, 20
br i1 %3, label %4, label %8
4: ; preds = %1
%5 = sext i32 %2 to i64
%6 = getelementptr inbounds [20 x i32], [20 x i32]* @switch.table.will2edo, i64 0, i64 %5
%7 = load i32, i32* %6
br label %8
8: ; preds = %1, %4
%9 = phi i32 [ %7, %4 ], [ 0, %1 ]
ret i32 %9
}