int month_to_i(char *month) {
  if (month[0] == 'J') {
    if (month[1] == 'A')
      return 1;
    if (month[1] == 'U') {
      if (month[2] == 'N')
        return 6;
      if (month[2] == 'L')
        return 7;
    }
  }
  if (month[0] == 'F')
    return 2;
  if (month[0] == 'M') {
    if (month[2] == 'R')
      return 3;
    if (month[2] == 'Y')
      return 5;
  }
  if (month[0] == 'A') {
    if (month[1] == 'P')
      return 4;
    if (month[1] == 'U')
      return 8;
  }
  if (month[0] == 'S')
    return 9;
  if (month[0] == 'O')
    return 10;
  if (month[0] == 'N')
    return 11;
  if (month[0] == 'D')
    return 12;
}


x86 assembly (clang, -O0):
<month_to_i>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x4a,%eax
jne    118a <month_to_i+0x8a>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x41,%eax
jne    1135 <month_to_i+0x35>
movl   $0x1,-0x4(%rbp)
jmp    12af <month_to_i+0x1af>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x55,%eax
jne    1185 <month_to_i+0x85>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x4e,%eax
jne    1163 <month_to_i+0x63>
movl   $0x6,-0x4(%rbp)
jmp    12af <month_to_i+0x1af>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x4c,%eax
jne    1180 <month_to_i+0x80>
movl   $0x7,-0x4(%rbp)
jmp    12af <month_to_i+0x1af>
jmp    1185 <month_to_i+0x85>
jmp    118a <month_to_i+0x8a>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x46,%eax
jne    11a6 <month_to_i+0xa6>
movl   $0x2,-0x4(%rbp)
jmp    12af <month_to_i+0x1af>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x4d,%eax
jne    11f5 <month_to_i+0xf5>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x52,%eax
jne    11d3 <month_to_i+0xd3>
movl   $0x3,-0x4(%rbp)
jmp    12af <month_to_i+0x1af>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x59,%eax
jne    11f0 <month_to_i+0xf0>
movl   $0x5,-0x4(%rbp)
jmp    12af <month_to_i+0x1af>
jmp    11f5 <month_to_i+0xf5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jne    1244 <month_to_i+0x144>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x50,%eax
jne    1222 <month_to_i+0x122>
movl   $0x4,-0x4(%rbp)
jmp    12af <month_to_i+0x1af>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x55,%eax
jne    123f <month_to_i+0x13f>
movl   $0x8,-0x4(%rbp)
jmp    12af <month_to_i+0x1af>
jmp    1244 <month_to_i+0x144>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x53,%eax
jne    1260 <month_to_i+0x160>
movl   $0x9,-0x4(%rbp)
jmp    12af <month_to_i+0x1af>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x4f,%eax
jne    127c <month_to_i+0x17c>
movl   $0xa,-0x4(%rbp)
jmp    12af <month_to_i+0x1af>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x4e,%eax
jne    1298 <month_to_i+0x198>
movl   $0xb,-0x4(%rbp)
jmp    12af <month_to_i+0x1af>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x44,%eax
jne    12af <month_to_i+0x1af>
movl   $0xc,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<month_to_i>:
mov    (%rdi),%cl
add    $0xbf,%cl
cmp    $0xe,%cl
ja     1171 <month_to_i+0x71>
mov    $0x2,%eax
movzbl %cl,%ecx
lea    0xee7(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
mov    0x1(%rdi),%al
xor    %ecx,%ecx
cmp    $0x55,%al
sete   %cl
xor    $0x9,%ecx
cmp    $0x50,%al
mov    $0x4,%eax
cmovne %ecx,%eax
ret
mov    $0xb,%eax
ret
mov    $0xa,%eax
ret
mov    $0xc,%eax
ret
mov    0x1(%rdi),%al
cmp    $0x41,%al
je     1193 <month_to_i+0x93>
cmp    $0x55,%al
jne    1171 <month_to_i+0x71>
mov    0x2(%rdi),%al
xor    %ecx,%ecx
cmp    $0x4c,%al
setne  %cl
add    %ecx,%ecx
add    $0x7,%ecx
cmp    $0x4e,%al
mov    $0x6,%eax
cmovne %ecx,%eax
ret
mov    $0x9,%eax
ret
mov    0x2(%rdi),%al
xor    %ecx,%ecx
cmp    $0x59,%al
setne  %cl
lea    0x5(,%rcx,4),%ecx
cmp    $0x52,%al
mov    $0x3,%eax
cmovne %ecx,%eax
ret
mov    $0x1,%eax
ret

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

LLVM IR (-O2):
define i32 @month_to_i(i8* nocapture %0) {
%2 = load i8, i8* %0
switch i8 %2, label %31 [
i8 74, label %3
i8 70, label %32
i8 77, label %13
i8 65, label %20
i8 68, label %30
i8 79, label %28
i8 78, label %29
]
3: ; preds = %1
%4 = getelementptr inbounds i8, i8* %0, i64 1
%5 = load i8, i8* %4
switch i8 %5, label %27 [
i8 65, label %32
i8 85, label %6
]
6: ; preds = %3
%7 = getelementptr inbounds i8, i8* %0, i64 2
%8 = load i8, i8* %7
%9 = icmp eq i8 %8, 76
%10 = select i1 %9, i32 7, i32 9
%11 = icmp eq i8 %8, 78
%12 = select i1 %11, i32 6, i32 %10
br label %32
13: ; preds = %1
%14 = getelementptr inbounds i8, i8* %0, i64 2
%15 = load i8, i8* %14
%16 = icmp eq i8 %15, 89
%17 = select i1 %16, i32 5, i32 9
%18 = icmp eq i8 %15, 82
%19 = select i1 %18, i32 3, i32 %17
br label %32
20: ; preds = %1
%21 = getelementptr inbounds i8, i8* %0, i64 1
%22 = load i8, i8* %21
%23 = icmp eq i8 %22, 85
%24 = select i1 %23, i32 8, i32 9
%25 = icmp eq i8 %22, 80
%26 = select i1 %25, i32 4, i32 %24
br label %32
27: ; preds = %3
br label %32
28: ; preds = %1
br label %32
29: ; preds = %1
br label %32
30: ; preds = %1
br label %32
31: ; preds = %1
br label %32
32: ; preds = %1, %31, %20, %13, %6, %27, %3, %28, %29, %30
%33 = phi i32 [ 10, %28 ], [ 11, %29 ], [ 12, %30 ], [ 1, %3 ], [ 9, %27 ], [ %12, %6 ], [ 2, %1 ], [ %19, %13 ], [ %26, %20 ], [ 9, %31 ]
ret i32 %33
}