int amino_num(char aa) {
  if (aa == 'a' || aa == 'A')
    return 0;
  if (aa == 'c' || aa == 'C')
    return 1;
  if (aa == 'd' || aa == 'D')
    return 2;
  if (aa == 'e' || aa == 'E')
    return 3;
  if (aa == 'f' || aa == 'F')
    return 4;
  if (aa == 'g' || aa == 'G')
    return 5;
  if (aa == 'h' || aa == 'H')
    return 6;
  if (aa == 'i' || aa == 'I')
    return 7;
  if (aa == 'k' || aa == 'K')
    return 8;
  if (aa == 'l' || aa == 'L')
    return 9;
  if (aa == 'm' || aa == 'M')
    return 10;
  if (aa == 'n' || aa == 'N')
    return 11;
  if (aa == 'p' || aa == 'P')
    return 12;
  if (aa == 'q' || aa == 'Q')
    return 13;
  if (aa == 'r' || aa == 'R')
    return 14;
  if (aa == 's' || aa == 'S')
    return 15;
  if (aa == 't' || aa == 'T')
    return 16;
  if (aa == 'v' || aa == 'V')
    return 17;
  if (aa == 'w' || aa == 'W')
    return 18;
  if (aa == 'y' || aa == 'Y')
    return 19;
  return -1;
}


x86 assembly (clang, -O0):
<amino_num>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x5(%rbp)
movsbl -0x5(%rbp),%eax
cmp    $0x61,%eax
je     1124 <amino_num+0x24>
movsbl -0x5(%rbp),%eax
cmp    $0x41,%eax
jne    1130 <amino_num+0x30>
movl   $0x0,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x63,%eax
je     114a <amino_num+0x4a>
movsbl -0x5(%rbp),%eax
cmp    $0x43,%eax
jne    1156 <amino_num+0x56>
movl   $0x1,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x64,%eax
je     1170 <amino_num+0x70>
movsbl -0x5(%rbp),%eax
cmp    $0x44,%eax
jne    117c <amino_num+0x7c>
movl   $0x2,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x65,%eax
je     1196 <amino_num+0x96>
movsbl -0x5(%rbp),%eax
cmp    $0x45,%eax
jne    11a2 <amino_num+0xa2>
movl   $0x3,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x66,%eax
je     11bc <amino_num+0xbc>
movsbl -0x5(%rbp),%eax
cmp    $0x46,%eax
jne    11c8 <amino_num+0xc8>
movl   $0x4,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x67,%eax
je     11e2 <amino_num+0xe2>
movsbl -0x5(%rbp),%eax
cmp    $0x47,%eax
jne    11ee <amino_num+0xee>
movl   $0x5,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x68,%eax
je     1208 <amino_num+0x108>
movsbl -0x5(%rbp),%eax
cmp    $0x48,%eax
jne    1214 <amino_num+0x114>
movl   $0x6,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x69,%eax
je     122e <amino_num+0x12e>
movsbl -0x5(%rbp),%eax
cmp    $0x49,%eax
jne    123a <amino_num+0x13a>
movl   $0x7,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x6b,%eax
je     1254 <amino_num+0x154>
movsbl -0x5(%rbp),%eax
cmp    $0x4b,%eax
jne    1260 <amino_num+0x160>
movl   $0x8,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x6c,%eax
je     127a <amino_num+0x17a>
movsbl -0x5(%rbp),%eax
cmp    $0x4c,%eax
jne    1286 <amino_num+0x186>
movl   $0x9,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x6d,%eax
je     12a0 <amino_num+0x1a0>
movsbl -0x5(%rbp),%eax
cmp    $0x4d,%eax
jne    12ac <amino_num+0x1ac>
movl   $0xa,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x6e,%eax
je     12c6 <amino_num+0x1c6>
movsbl -0x5(%rbp),%eax
cmp    $0x4e,%eax
jne    12d2 <amino_num+0x1d2>
movl   $0xb,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x70,%eax
je     12ec <amino_num+0x1ec>
movsbl -0x5(%rbp),%eax
cmp    $0x50,%eax
jne    12f8 <amino_num+0x1f8>
movl   $0xc,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x71,%eax
je     1312 <amino_num+0x212>
movsbl -0x5(%rbp),%eax
cmp    $0x51,%eax
jne    131e <amino_num+0x21e>
movl   $0xd,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x72,%eax
je     1338 <amino_num+0x238>
movsbl -0x5(%rbp),%eax
cmp    $0x52,%eax
jne    1344 <amino_num+0x244>
movl   $0xe,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x73,%eax
je     135e <amino_num+0x25e>
movsbl -0x5(%rbp),%eax
cmp    $0x53,%eax
jne    136a <amino_num+0x26a>
movl   $0xf,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x74,%eax
je     1384 <amino_num+0x284>
movsbl -0x5(%rbp),%eax
cmp    $0x54,%eax
jne    1390 <amino_num+0x290>
movl   $0x10,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x76,%eax
je     13aa <amino_num+0x2aa>
movsbl -0x5(%rbp),%eax
cmp    $0x56,%eax
jne    13b6 <amino_num+0x2b6>
movl   $0x11,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x77,%eax
je     13d0 <amino_num+0x2d0>
movsbl -0x5(%rbp),%eax
cmp    $0x57,%eax
jne    13dc <amino_num+0x2dc>
movl   $0x12,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movsbl -0x5(%rbp),%eax
cmp    $0x79,%eax
je     13f6 <amino_num+0x2f6>
movsbl -0x5(%rbp),%eax
cmp    $0x59,%eax
jne    1402 <amino_num+0x302>
movl   $0x13,-0x4(%rbp)
jmp    1409 <amino_num+0x309>
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<amino_num>:
and    $0xdf,%dil
lea    -0x41(%rdi),%eax
cmp    $0x17,%al
jae    1118 <amino_num+0x18>
movzbl %al,%ecx
mov    $0x6fbdfd,%edx
bt     %ecx,%edx
jb     112a <amino_num+0x2a>
cmp    $0x59,%dil
mov    $0x13,%ecx
mov    $0xffffffff,%eax
cmove  %ecx,%eax
ret
movsbq %al,%rax
lea    0xecb(%rip),%rcx
mov    (%rcx,%rax,4),%eax
ret

LLVM IR (-O0):
define i32 @amino_num(i8 signext %0) {
%2 = alloca i32
%3 = alloca i8
store i8 %0, i8* %3
%4 = load i8, i8* %3
%5 = sext i8 %4 to i32
%6 = icmp eq i32 %5, 97
br i1 %6, label %11, label %7
7: ; preds = %1
%8 = load i8, i8* %3
%9 = sext i8 %8 to i32
%10 = icmp eq i32 %9, 65
br i1 %10, label %11, label %12
11: ; preds = %7, %1
store i32 0, i32* %2
br label %184
12: ; preds = %7
%13 = load i8, i8* %3
%14 = sext i8 %13 to i32
%15 = icmp eq i32 %14, 99
br i1 %15, label %20, label %16
16: ; preds = %12
%17 = load i8, i8* %3
%18 = sext i8 %17 to i32
%19 = icmp eq i32 %18, 67
br i1 %19, label %20, label %21
20: ; preds = %16, %12
store i32 1, i32* %2
br label %184
21: ; preds = %16
%22 = load i8, i8* %3
%23 = sext i8 %22 to i32
%24 = icmp eq i32 %23, 100
br i1 %24, label %29, label %25
25: ; preds = %21
%26 = load i8, i8* %3
%27 = sext i8 %26 to i32
%28 = icmp eq i32 %27, 68
br i1 %28, label %29, label %30
29: ; preds = %25, %21
store i32 2, i32* %2
br label %184
30: ; preds = %25
%31 = load i8, i8* %3
%32 = sext i8 %31 to i32
%33 = icmp eq i32 %32, 101
br i1 %33, label %38, label %34
34: ; preds = %30
%35 = load i8, i8* %3
%36 = sext i8 %35 to i32
%37 = icmp eq i32 %36, 69
br i1 %37, label %38, label %39
38: ; preds = %34, %30
store i32 3, i32* %2
br label %184
39: ; preds = %34
%40 = load i8, i8* %3
%41 = sext i8 %40 to i32
%42 = icmp eq i32 %41, 102
br i1 %42, label %47, label %43
43: ; preds = %39
%44 = load i8, i8* %3
%45 = sext i8 %44 to i32
%46 = icmp eq i32 %45, 70
br i1 %46, label %47, label %48
47: ; preds = %43, %39
store i32 4, i32* %2
br label %184
48: ; preds = %43
%49 = load i8, i8* %3
%50 = sext i8 %49 to i32
%51 = icmp eq i32 %50, 103
br i1 %51, label %56, label %52
52: ; preds = %48
%53 = load i8, i8* %3
%54 = sext i8 %53 to i32
%55 = icmp eq i32 %54, 71
br i1 %55, label %56, label %57
56: ; preds = %52, %48
store i32 5, i32* %2
br label %184
57: ; preds = %52
%58 = load i8, i8* %3
%59 = sext i8 %58 to i32
%60 = icmp eq i32 %59, 104
br i1 %60, label %65, label %61
61: ; preds = %57
%62 = load i8, i8* %3
%63 = sext i8 %62 to i32
%64 = icmp eq i32 %63, 72
br i1 %64, label %65, label %66
65: ; preds = %61, %57
store i32 6, i32* %2
br label %184
66: ; preds = %61
%67 = load i8, i8* %3
%68 = sext i8 %67 to i32
%69 = icmp eq i32 %68, 105
br i1 %69, label %74, label %70
70: ; preds = %66
%71 = load i8, i8* %3
%72 = sext i8 %71 to i32
%73 = icmp eq i32 %72, 73
br i1 %73, label %74, label %75
74: ; preds = %70, %66
store i32 7, i32* %2
br label %184
75: ; preds = %70
%76 = load i8, i8* %3
%77 = sext i8 %76 to i32
%78 = icmp eq i32 %77, 107
br i1 %78, label %83, label %79
79: ; preds = %75
%80 = load i8, i8* %3
%81 = sext i8 %80 to i32
%82 = icmp eq i32 %81, 75
br i1 %82, label %83, label %84
83: ; preds = %79, %75
store i32 8, i32* %2
br label %184
84: ; preds = %79
%85 = load i8, i8* %3
%86 = sext i8 %85 to i32
%87 = icmp eq i32 %86, 108
br i1 %87, label %92, label %88
88: ; preds = %84
%89 = load i8, i8* %3
%90 = sext i8 %89 to i32
%91 = icmp eq i32 %90, 76
br i1 %91, label %92, label %93
92: ; preds = %88, %84
store i32 9, i32* %2
br label %184
93: ; preds = %88
%94 = load i8, i8* %3
%95 = sext i8 %94 to i32
%96 = icmp eq i32 %95, 109
br i1 %96, label %101, label %97
97: ; preds = %93
%98 = load i8, i8* %3
%99 = sext i8 %98 to i32
%100 = icmp eq i32 %99, 77
br i1 %100, label %101, label %102
101: ; preds = %97, %93
store i32 10, i32* %2
br label %184
102: ; preds = %97
%103 = load i8, i8* %3
%104 = sext i8 %103 to i32
%105 = icmp eq i32 %104, 110
br i1 %105, label %110, label %106
106: ; preds = %102
%107 = load i8, i8* %3
%108 = sext i8 %107 to i32
%109 = icmp eq i32 %108, 78
br i1 %109, label %110, label %111
110: ; preds = %106, %102
store i32 11, i32* %2
br label %184
111: ; preds = %106
%112 = load i8, i8* %3
%113 = sext i8 %112 to i32
%114 = icmp eq i32 %113, 112
br i1 %114, label %119, label %115
115: ; preds = %111
%116 = load i8, i8* %3
%117 = sext i8 %116 to i32
%118 = icmp eq i32 %117, 80
br i1 %118, label %119, label %120
119: ; preds = %115, %111
store i32 12, i32* %2
br label %184
120: ; preds = %115
%121 = load i8, i8* %3
%122 = sext i8 %121 to i32
%123 = icmp eq i32 %122, 113
br i1 %123, label %128, label %124
124: ; preds = %120
%125 = load i8, i8* %3
%126 = sext i8 %125 to i32
%127 = icmp eq i32 %126, 81
br i1 %127, label %128, label %129
128: ; preds = %124, %120
store i32 13, i32* %2
br label %184
129: ; preds = %124
%130 = load i8, i8* %3
%131 = sext i8 %130 to i32
%132 = icmp eq i32 %131, 114
br i1 %132, label %137, label %133
133: ; preds = %129
%134 = load i8, i8* %3
%135 = sext i8 %134 to i32
%136 = icmp eq i32 %135, 82
br i1 %136, label %137, label %138
137: ; preds = %133, %129
store i32 14, i32* %2
br label %184
138: ; preds = %133
%139 = load i8, i8* %3
%140 = sext i8 %139 to i32
%141 = icmp eq i32 %140, 115
br i1 %141, label %146, label %142
142: ; preds = %138
%143 = load i8, i8* %3
%144 = sext i8 %143 to i32
%145 = icmp eq i32 %144, 83
br i1 %145, label %146, label %147
146: ; preds = %142, %138
store i32 15, i32* %2
br label %184
147: ; preds = %142
%148 = load i8, i8* %3
%149 = sext i8 %148 to i32
%150 = icmp eq i32 %149, 116
br i1 %150, label %155, label %151
151: ; preds = %147
%152 = load i8, i8* %3
%153 = sext i8 %152 to i32
%154 = icmp eq i32 %153, 84
br i1 %154, label %155, label %156
155: ; preds = %151, %147
store i32 16, i32* %2
br label %184
156: ; preds = %151
%157 = load i8, i8* %3
%158 = sext i8 %157 to i32
%159 = icmp eq i32 %158, 118
br i1 %159, label %164, label %160
160: ; preds = %156
%161 = load i8, i8* %3
%162 = sext i8 %161 to i32
%163 = icmp eq i32 %162, 86
br i1 %163, label %164, label %165
164: ; preds = %160, %156
store i32 17, i32* %2
br label %184
165: ; preds = %160
%166 = load i8, i8* %3
%167 = sext i8 %166 to i32
%168 = icmp eq i32 %167, 119
br i1 %168, label %173, label %169
169: ; preds = %165
%170 = load i8, i8* %3
%171 = sext i8 %170 to i32
%172 = icmp eq i32 %171, 87
br i1 %172, label %173, label %174
173: ; preds = %169, %165
store i32 18, i32* %2
br label %184
174: ; preds = %169
%175 = load i8, i8* %3
%176 = sext i8 %175 to i32
%177 = icmp eq i32 %176, 121
br i1 %177, label %182, label %178
178: ; preds = %174
%179 = load i8, i8* %3
%180 = sext i8 %179 to i32
%181 = icmp eq i32 %180, 89
br i1 %181, label %182, label %183
182: ; preds = %178, %174
store i32 19, i32* %2
br label %184
183: ; preds = %178
store i32 -1, i32* %2
br label %184
184: ; preds = %183, %182, %173, %164, %155, %146, %137, %128, %119, %110, %101, %92, %83, %74, %65, %56, %47, %38, %29, %20, %11
%185 = load i32, i32* %2
ret i32 %185
}

LLVM IR (-O2):
@switch.table.amino_num = [23 x i32] [i32 0, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 0, i32 8, i32 9, i32 10, i32 11, i32 0, i32 12, i32 13, i32 14, i32 15, i32 16, i32 0, i32 17, i32 18]
define i32 @amino_num(i8 signext %0) {
%2 = and i8 %0, -33
%3 = add i8 %2, -65
%4 = icmp ult i8 %3, 23
br i1 %4, label %8, label %5
5: ; preds = %8, %1
%6 = icmp eq i8 %2, 89
%7 = select i1 %6, i32 19, i32 -1
br label %17
8: ; preds = %1
%9 = zext i8 %3 to i32
%10 = lshr i32 7323133, %9
%11 = and i32 %10, 1
%12 = icmp eq i32 %11, 0
br i1 %12, label %5, label %13
13: ; preds = %8
%14 = sext i8 %3 to i64
%15 = getelementptr inbounds [23 x i32], [23 x i32]* @switch.table.amino_num, i64 0, i64 %14
%16 = load i32, i32* %15
br label %17
17: ; preds = %13, %5
%18 = phi i32 [ %7, %5 ], [ %16, %13 ]
ret i32 %18
}