#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ Uppercase(char *);
int strlen(char *);
scalar_t__ strncmp(char *, char *, int);
int getModel_PROTEIN(char *c) {
  int ret = 0;
  Uppercase(c);
  if (strlen(c) == 1) {
    switch (c[0]) {
    case 'B':
      ret = 41;
      break;
    case 'C':
      ret = 37;
      break;
    case 'D':
      ret = 38;
      break;
    case 'F':
      ret = 30;
      break;
    case 'H':
      ret = 32;
      break;
    case 'I':
      ret = 42;
      break;
    case 'J':
      ret = 33;
      break;
    case 'L':
      ret = 40;
      break;
    case 'M':
      ret = 35;
      break;
    case 'P':
      ret = 11;
      break;
    case 'R':
      ret = 36;
      break;
    case 'U':
      ret = 43;
      break;
    case 'V':
      ret = 39;
      break;
    case 'W':
      ret = 31;
      break;
    default:
      break;
    }
  } else {
    if (strncmp(c, "LG", 2) == 0)
      ret = 40;
    else if (strncmp(c, "VT", 2) == 0)
      ret = 39;
    else if (strncmp(c, "JTT", 3) == 0)
      ret = 33;
    else if (strncmp(c, "WAG", 3) == 0)
      ret = 31;
    else if (strncmp(c, "FLU", 3) == 0)
      ret = 43;
    else if (strncmp(c, "F81", 3) == 0 || strncmp(c, "F81LIKE", 7) == 0 ||
             strncmp(c, "F81-LIKE", 8) == 0)
      ret = 30;
    else if (strncmp(c, "HIVB", 4) == 0)
      ret = 41;
    else if (strncmp(c, "HIVW", 4) == 0)
      ret = 42;
    else if (strncmp(c, "CPREV", 5) == 0)
      ret = 37;
    else if (strncmp(c, "DCMUT", 5) == 0)
      ret = 38;
    else if (strncmp(c, "MTREV", 5) == 0)
      ret = 35;
    else if (strncmp(c, "RTREV", 5) == 0)
      ret = 36;
    else if (strncmp(c, "PDIST", 5) == 0 || strncmp(c, "P-DIST", 6) == 0 ||
             strncmp(c, "PDISTANCE", 9) == 0 ||
             strncmp(c, "P-DISTANCE", 10) == 0)
      ret = 11;
    else if (strncmp(c, "DAYHOFF", 7) == 0)
      ret = 32;
  }
  return ret;
}


x86 assembly (clang, -O0):
<getModel_PROTEIN>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0x8(%rbp),%rdi
call   1040 <Uppercase@plt>
mov    -0x8(%rbp),%rdi
call   1050 <strlen@plt>
cmp    $0x1,%eax
jne    123d <getModel_PROTEIN+0x10d>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
add    $0xffffffbe,%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0x15,%eax
ja     1233 <getModel_PROTEIN+0x103>
mov    -0x18(%rbp),%rax
lea    0xe7e(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x29,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0x25,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0x26,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0x1e,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0x20,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0x2a,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0x21,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0x28,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0x23,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0xb,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0x24,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0x2b,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0x27,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
movl   $0x1f,-0xc(%rbp)
jmp    1238 <getModel_PROTEIN+0x108>
jmp    1238 <getModel_PROTEIN+0x108>
jmp    1573 <getModel_PROTEIN+0x443>
mov    -0x8(%rbp),%rdi
lea    0xe10(%rip),%rsi
mov    $0x2,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1268 <getModel_PROTEIN+0x138>
movl   $0x28,-0xc(%rbp)
jmp    156e <getModel_PROTEIN+0x43e>
mov    -0x8(%rbp),%rdi
lea    0xde8(%rip),%rsi
mov    $0x2,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1293 <getModel_PROTEIN+0x163>
movl   $0x27,-0xc(%rbp)
jmp    1569 <getModel_PROTEIN+0x439>
mov    -0x8(%rbp),%rdi
lea    0xdc0(%rip),%rsi
mov    $0x3,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    12be <getModel_PROTEIN+0x18e>
movl   $0x21,-0xc(%rbp)
jmp    1564 <getModel_PROTEIN+0x434>
mov    -0x8(%rbp),%rdi
lea    0xd99(%rip),%rsi
mov    $0x3,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    12e9 <getModel_PROTEIN+0x1b9>
movl   $0x1f,-0xc(%rbp)
jmp    155f <getModel_PROTEIN+0x42f>
mov    -0x8(%rbp),%rdi
lea    0xd72(%rip),%rsi
mov    $0x3,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1314 <getModel_PROTEIN+0x1e4>
movl   $0x2b,-0xc(%rbp)
jmp    155a <getModel_PROTEIN+0x42a>
mov    -0x8(%rbp),%rdi
lea    0xd4b(%rip),%rsi
mov    $0x3,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
je     1371 <getModel_PROTEIN+0x241>
mov    -0x8(%rbp),%rdi
lea    0xd30(%rip),%rsi
mov    $0x7,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
je     1371 <getModel_PROTEIN+0x241>
mov    -0x8(%rbp),%rdi
lea    0xd19(%rip),%rsi
mov    $0x8,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    137d <getModel_PROTEIN+0x24d>
movl   $0x1e,-0xc(%rbp)
jmp    1555 <getModel_PROTEIN+0x425>
mov    -0x8(%rbp),%rdi
lea    0xcf7(%rip),%rsi
mov    $0x4,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    13a8 <getModel_PROTEIN+0x278>
movl   $0x29,-0xc(%rbp)
jmp    1550 <getModel_PROTEIN+0x420>
mov    -0x8(%rbp),%rdi
lea    0xcd1(%rip),%rsi
mov    $0x4,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    13d3 <getModel_PROTEIN+0x2a3>
movl   $0x2a,-0xc(%rbp)
jmp    154b <getModel_PROTEIN+0x41b>
mov    -0x8(%rbp),%rdi
lea    0xcab(%rip),%rsi
mov    $0x5,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    13fe <getModel_PROTEIN+0x2ce>
movl   $0x25,-0xc(%rbp)
jmp    1546 <getModel_PROTEIN+0x416>
mov    -0x8(%rbp),%rdi
lea    0xc86(%rip),%rsi
mov    $0x5,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1429 <getModel_PROTEIN+0x2f9>
movl   $0x26,-0xc(%rbp)
jmp    1541 <getModel_PROTEIN+0x411>
mov    -0x8(%rbp),%rdi
lea    0xc61(%rip),%rsi
mov    $0x5,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1454 <getModel_PROTEIN+0x324>
movl   $0x23,-0xc(%rbp)
jmp    153c <getModel_PROTEIN+0x40c>
mov    -0x8(%rbp),%rdi
lea    0xc3c(%rip),%rsi
mov    $0x5,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    147f <getModel_PROTEIN+0x34f>
movl   $0x24,-0xc(%rbp)
jmp    1537 <getModel_PROTEIN+0x407>
mov    -0x8(%rbp),%rdi
lea    0xc17(%rip),%rsi
mov    $0x5,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
je     14fb <getModel_PROTEIN+0x3cb>
mov    -0x8(%rbp),%rdi
lea    0xbfe(%rip),%rsi
mov    $0x6,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
je     14fb <getModel_PROTEIN+0x3cb>
mov    -0x8(%rbp),%rdi
lea    0xbe6(%rip),%rsi
mov    $0x9,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
je     14fb <getModel_PROTEIN+0x3cb>
mov    -0x8(%rbp),%rdi
lea    0xbd1(%rip),%rsi
mov    $0xa,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1507 <getModel_PROTEIN+0x3d7>
movl   $0xb,-0xc(%rbp)
jmp    1532 <getModel_PROTEIN+0x402>
mov    -0x8(%rbp),%rdi
lea    0xbb1(%rip),%rsi
mov    $0x7,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    152d <getModel_PROTEIN+0x3fd>
movl   $0x20,-0xc(%rbp)
jmp    1532 <getModel_PROTEIN+0x402>
jmp    1537 <getModel_PROTEIN+0x407>
jmp    153c <getModel_PROTEIN+0x40c>
jmp    1541 <getModel_PROTEIN+0x411>
jmp    1546 <getModel_PROTEIN+0x416>
jmp    154b <getModel_PROTEIN+0x41b>
jmp    1550 <getModel_PROTEIN+0x420>
jmp    1555 <getModel_PROTEIN+0x425>
jmp    155a <getModel_PROTEIN+0x42a>
jmp    155f <getModel_PROTEIN+0x42f>
jmp    1564 <getModel_PROTEIN+0x434>
jmp    1569 <getModel_PROTEIN+0x439>
jmp    156e <getModel_PROTEIN+0x43e>
jmp    1573 <getModel_PROTEIN+0x443>
mov    -0xc(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<getModel_PROTEIN>:
push   %rbp
push   %rbx
push   %rax
mov    %rdi,%rbx
call   1040 <Uppercase@plt>
mov    %rbx,%rdi
call   1050 <strlen@plt>
cmp    $0x1,%eax
jne    116e <getModel_PROTEIN+0x3e>
movsbl (%rbx),%eax
lea    -0x42(%rax),%ecx
xor    %ebp,%ebp
cmp    $0x16,%ecx
jae    13b9 <getModel_PROTEIN+0x289>
cltq
lea    0xf12(%rip),%rcx
mov    -0x108(%rcx,%rax,4),%ebp
jmp    13b9 <getModel_PROTEIN+0x289>
lea    0xe8b(%rip),%rsi
mov    %rbx,%rdi
mov    $0x2,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1398 <getModel_PROTEIN+0x268>
lea    0xe71(%rip),%rsi
mov    %rbx,%rdi
mov    $0x2,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     139f <getModel_PROTEIN+0x26f>
lea    0xe57(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13a6 <getModel_PROTEIN+0x276>
lea    0xe3e(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13ad <getModel_PROTEIN+0x27d>
lea    0xe25(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13b4 <getModel_PROTEIN+0x284>
lea    0xe0c(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
call   1030 <strncmp@plt>
mov    $0x1e,%ebp
test   %rax,%rax
je     13b9 <getModel_PROTEIN+0x289>
lea    0xdee(%rip),%rsi
mov    %rbx,%rdi
mov    $0x7,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13b9 <getModel_PROTEIN+0x289>
lea    0xdd9(%rip),%rsi
mov    %rbx,%rdi
mov    $0x8,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13b9 <getModel_PROTEIN+0x289>
lea    0xdc5(%rip),%rsi
mov    %rbx,%rdi
mov    $0x4,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13c2 <getModel_PROTEIN+0x292>
lea    0xdad(%rip),%rsi
mov    %rbx,%rdi
mov    $0x4,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13c9 <getModel_PROTEIN+0x299>
lea    0xd95(%rip),%rsi
mov    %rbx,%rdi
mov    $0x5,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13d0 <getModel_PROTEIN+0x2a0>
lea    0xd7e(%rip),%rsi
mov    %rbx,%rdi
mov    $0x5,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13d7 <getModel_PROTEIN+0x2a7>
lea    0xd67(%rip),%rsi
mov    %rbx,%rdi
mov    $0x5,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13de <getModel_PROTEIN+0x2ae>
lea    0xd50(%rip),%rsi
mov    %rbx,%rdi
mov    $0x5,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13e5 <getModel_PROTEIN+0x2b5>
lea    0xd39(%rip),%rsi
mov    %rbx,%rdi
mov    $0x5,%edx
call   1030 <strncmp@plt>
mov    $0xb,%ebp
test   %rax,%rax
je     13b9 <getModel_PROTEIN+0x289>
lea    0xd1d(%rip),%rsi
mov    %rbx,%rdi
mov    $0x6,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13b9 <getModel_PROTEIN+0x289>
lea    0xd0b(%rip),%rsi
mov    %rbx,%rdi
mov    $0x9,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13b9 <getModel_PROTEIN+0x289>
lea    0xcfc(%rip),%rsi
mov    %rbx,%rdi
mov    $0xa,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13b9 <getModel_PROTEIN+0x289>
lea    0xcee(%rip),%rsi
mov    %rbx,%rdi
mov    $0x7,%edx
call   1030 <strncmp@plt>
xor    %ebp,%ebp
test   %rax,%rax
sete   %bpl
shl    $0x5,%ebp
jmp    13b9 <getModel_PROTEIN+0x289>
mov    $0x28,%ebp
jmp    13b9 <getModel_PROTEIN+0x289>
mov    $0x27,%ebp
jmp    13b9 <getModel_PROTEIN+0x289>
mov    $0x21,%ebp
jmp    13b9 <getModel_PROTEIN+0x289>
mov    $0x1f,%ebp
jmp    13b9 <getModel_PROTEIN+0x289>
mov    $0x2b,%ebp
mov    %ebp,%eax
add    $0x8,%rsp
pop    %rbx
pop    %rbp
ret
mov    $0x29,%ebp
jmp    13b9 <getModel_PROTEIN+0x289>
mov    $0x2a,%ebp
jmp    13b9 <getModel_PROTEIN+0x289>
mov    $0x25,%ebp
jmp    13b9 <getModel_PROTEIN+0x289>
mov    $0x26,%ebp
jmp    13b9 <getModel_PROTEIN+0x289>
mov    $0x23,%ebp
jmp    13b9 <getModel_PROTEIN+0x289>
mov    $0x24,%ebp
jmp    13b9 <getModel_PROTEIN+0x289>

LLVM IR (-O0):
@.str = [3 x i8] c"LG\00"
@.str.1 = [3 x i8] c"VT\00"
@.str.2 = [4 x i8] c"JTT\00"
@.str.3 = [4 x i8] c"WAG\00"
@.str.4 = [4 x i8] c"FLU\00"
@.str.5 = [4 x i8] c"F81\00"
@.str.6 = [8 x i8] c"F81LIKE\00"
@.str.7 = [9 x i8] c"F81-LIKE\00"
@.str.8 = [5 x i8] c"HIVB\00"
@.str.9 = [5 x i8] c"HIVW\00"
@.str.10 = [6 x i8] c"CPREV\00"
@.str.11 = [6 x i8] c"DCMUT\00"
@.str.12 = [6 x i8] c"MTREV\00"
@.str.13 = [6 x i8] c"RTREV\00"
@.str.14 = [6 x i8] c"PDIST\00"
@.str.15 = [7 x i8] c"P-DIST\00"
@.str.16 = [10 x i8] c"PDISTANCE\00"
@.str.17 = [11 x i8] c"P-DISTANCE\00"
@.str.18 = [8 x i8] c"DAYHOFF\00"
define i32 @getModel_PROTEIN(i8* %0) {
%2 = alloca i8*
%3 = alloca i32
store i8* %0, i8** %2
store i32 0, i32* %3
%4 = load i8*, i8** %2
%5 = call i32 @Uppercase(i8* %4)
%6 = load i8*, i8** %2
%7 = call i32 @strlen(i8* %6)
%8 = icmp eq i32 %7, 1
br i1 %8, label %9, label %30
9: ; preds = %1
%10 = load i8*, i8** %2
%11 = getelementptr inbounds i8, i8* %10, i64 0
%12 = load i8, i8* %11
%13 = sext i8 %12 to i32
switch i32 %13, label %28 [
i32 66, label %14
i32 67, label %15
i32 68, label %16
i32 70, label %17
i32 72, label %18
i32 73, label %19
i32 74, label %20
i32 76, label %21
i32 77, label %22
i32 80, label %23
i32 82, label %24
i32 85, label %25
i32 86, label %26
i32 87, label %27
]
14: ; preds = %9
store i32 41, i32* %3
br label %29
15: ; preds = %9
store i32 37, i32* %3
br label %29
16: ; preds = %9
store i32 38, i32* %3
br label %29
17: ; preds = %9
store i32 30, i32* %3
br label %29
18: ; preds = %9
store i32 32, i32* %3
br label %29
19: ; preds = %9
store i32 42, i32* %3
br label %29
20: ; preds = %9
store i32 33, i32* %3
br label %29
21: ; preds = %9
store i32 40, i32* %3
br label %29
22: ; preds = %9
store i32 35, i32* %3
br label %29
23: ; preds = %9
store i32 11, i32* %3
br label %29
24: ; preds = %9
store i32 36, i32* %3
br label %29
25: ; preds = %9
store i32 43, i32* %3
br label %29
26: ; preds = %9
store i32 39, i32* %3
br label %29
27: ; preds = %9
store i32 31, i32* %3
br label %29
28: ; preds = %9
br label %29
29: ; preds = %28, %27, %26, %25, %24, %23, %22, %21, %20, %19, %18, %17, %16, %15, %14
br label %134
30: ; preds = %1
%31 = load i8*, i8** %2
%32 = call i64 @strncmp(i8* %31, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32 2)
%33 = icmp eq i64 %32, 0
br i1 %33, label %34, label %35
34: ; preds = %30
store i32 40, i32* %3
br label %133
35: ; preds = %30
%36 = load i8*, i8** %2
%37 = call i64 @strncmp(i8* %36, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 2)
%38 = icmp eq i64 %37, 0
br i1 %38, label %39, label %40
39: ; preds = %35
store i32 39, i32* %3
br label %132
40: ; preds = %35
%41 = load i8*, i8** %2
%42 = call i64 @strncmp(i8* %41, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), i32 3)
%43 = icmp eq i64 %42, 0
br i1 %43, label %44, label %45
44: ; preds = %40
store i32 33, i32* %3
br label %131
45: ; preds = %40
%46 = load i8*, i8** %2
%47 = call i64 @strncmp(i8* %46, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 3)
%48 = icmp eq i64 %47, 0
br i1 %48, label %49, label %50
49: ; preds = %45
store i32 31, i32* %3
br label %130
50: ; preds = %45
%51 = load i8*, i8** %2
%52 = call i64 @strncmp(i8* %51, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 3)
%53 = icmp eq i64 %52, 0
br i1 %53, label %54, label %55
54: ; preds = %50
store i32 43, i32* %3
br label %129
55: ; preds = %50
%56 = load i8*, i8** %2
%57 = call i64 @strncmp(i8* %56, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 3)
%58 = icmp eq i64 %57, 0
br i1 %58, label %67, label %59
59: ; preds = %55
%60 = load i8*, i8** %2
%61 = call i64 @strncmp(i8* %60, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.6, i64 0, i64 0), i32 7)
%62 = icmp eq i64 %61, 0
br i1 %62, label %67, label %63
63: ; preds = %59
%64 = load i8*, i8** %2
%65 = call i64 @strncmp(i8* %64, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.7, i64 0, i64 0), i32 8)
%66 = icmp eq i64 %65, 0
br i1 %66, label %67, label %68
67: ; preds = %63, %59, %55
store i32 30, i32* %3
br label %128
68: ; preds = %63
%69 = load i8*, i8** %2
%70 = call i64 @strncmp(i8* %69, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0), i32 4)
%71 = icmp eq i64 %70, 0
br i1 %71, label %72, label %73
72: ; preds = %68
store i32 41, i32* %3
br label %127
73: ; preds = %68
%74 = load i8*, i8** %2
%75 = call i64 @strncmp(i8* %74, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.9, i64 0, i64 0), i32 4)
%76 = icmp eq i64 %75, 0
br i1 %76, label %77, label %78
77: ; preds = %73
store i32 42, i32* %3
br label %126
78: ; preds = %73
%79 = load i8*, i8** %2
%80 = call i64 @strncmp(i8* %79, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0), i32 5)
%81 = icmp eq i64 %80, 0
br i1 %81, label %82, label %83
82: ; preds = %78
store i32 37, i32* %3
br label %125
83: ; preds = %78
%84 = load i8*, i8** %2
%85 = call i64 @strncmp(i8* %84, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0), i32 5)
%86 = icmp eq i64 %85, 0
br i1 %86, label %87, label %88
87: ; preds = %83
store i32 38, i32* %3
br label %124
88: ; preds = %83
%89 = load i8*, i8** %2
%90 = call i64 @strncmp(i8* %89, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0), i32 5)
%91 = icmp eq i64 %90, 0
br i1 %91, label %92, label %93
92: ; preds = %88
store i32 35, i32* %3
br label %123
93: ; preds = %88
%94 = load i8*, i8** %2
%95 = call i64 @strncmp(i8* %94, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i32 5)
%96 = icmp eq i64 %95, 0
br i1 %96, label %97, label %98
97: ; preds = %93
store i32 36, i32* %3
br label %122
98: ; preds = %93
%99 = load i8*, i8** %2
%100 = call i64 @strncmp(i8* %99, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.14, i64 0, i64 0), i32 5)
%101 = icmp eq i64 %100, 0
br i1 %101, label %114, label %102
102: ; preds = %98
%103 = load i8*, i8** %2
%104 = call i64 @strncmp(i8* %103, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.15, i64 0, i64 0), i32 6)
%105 = icmp eq i64 %104, 0
br i1 %105, label %114, label %106
106: ; preds = %102
%107 = load i8*, i8** %2
%108 = call i64 @strncmp(i8* %107, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), i32 9)
%109 = icmp eq i64 %108, 0
br i1 %109, label %114, label %110
110: ; preds = %106
%111 = load i8*, i8** %2
%112 = call i64 @strncmp(i8* %111, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.17, i64 0, i64 0), i32 10)
%113 = icmp eq i64 %112, 0
br i1 %113, label %114, label %115
114: ; preds = %110, %106, %102, %98
store i32 11, i32* %3
br label %121
115: ; preds = %110
%116 = load i8*, i8** %2
%117 = call i64 @strncmp(i8* %116, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.18, i64 0, i64 0), i32 7)
%118 = icmp eq i64 %117, 0
br i1 %118, label %119, label %120
119: ; preds = %115
store i32 32, i32* %3
br label %120
120: ; preds = %119, %115
br label %121
121: ; preds = %120, %114
br label %122
122: ; preds = %121, %97
br label %123
123: ; preds = %122, %92
br label %124
124: ; preds = %123, %87
br label %125
125: ; preds = %124, %82
br label %126
126: ; preds = %125, %77
br label %127
127: ; preds = %126, %72
br label %128
128: ; preds = %127, %67
br label %129
129: ; preds = %128, %54
br label %130
130: ; preds = %129, %49
br label %131
131: ; preds = %130, %44
br label %132
132: ; preds = %131, %39
br label %133
133: ; preds = %132, %34
br label %134
134: ; preds = %133, %29
%135 = load i32, i32* %3
ret i32 %135
}

LLVM IR (-O2):
@.str = [3 x i8] c"LG\00"
@.str.1 = [3 x i8] c"VT\00"
@.str.2 = [4 x i8] c"JTT\00"
@.str.3 = [4 x i8] c"WAG\00"
@.str.4 = [4 x i8] c"FLU\00"
@.str.5 = [4 x i8] c"F81\00"
@.str.6 = [8 x i8] c"F81LIKE\00"
@.str.7 = [9 x i8] c"F81-LIKE\00"
@.str.8 = [5 x i8] c"HIVB\00"
@.str.9 = [5 x i8] c"HIVW\00"
@.str.10 = [6 x i8] c"CPREV\00"
@.str.11 = [6 x i8] c"DCMUT\00"
@.str.12 = [6 x i8] c"MTREV\00"
@.str.13 = [6 x i8] c"RTREV\00"
@.str.14 = [6 x i8] c"PDIST\00"
@.str.15 = [7 x i8] c"P-DIST\00"
@.str.16 = [10 x i8] c"PDISTANCE\00"
@.str.17 = [11 x i8] c"P-DISTANCE\00"
@.str.18 = [8 x i8] c"DAYHOFF\00"
@switch.table.getModel_PROTEIN = [22 x i32] [i32 41, i32 37, i32 38, i32 0, i32 30, i32 0, i32 32, i32 42, i32 33, i32 0, i32 40, i32 35, i32 0, i32 0, i32 11, i32 0, i32 36, i32 0, i32 0, i32 43, i32 39, i32 31]
define i32 @getModel_PROTEIN(i8* %0) {
%2 = tail call i32 @Uppercase(i8* %0)
%3 = tail call i32 @strlen(i8* %0)
%4 = icmp eq i32 %3, 1
br i1 %4, label %5, label %10
5: ; preds = %1
%6 = load i8, i8* %0
%7 = sext i8 %6 to i32
%8 = add nsw i32 %7, -66
%9 = icmp ult i32 %8, 22
br i1 %9, label %68, label %72
10: ; preds = %1
%11 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str, i64 0, i64 0), i32 2)
%12 = icmp eq i64 %11, 0
br i1 %12, label %72, label %13
13: ; preds = %10
%14 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 2)
%15 = icmp eq i64 %14, 0
br i1 %15, label %72, label %16
16: ; preds = %13
%17 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), i32 3)
%18 = icmp eq i64 %17, 0
br i1 %18, label %72, label %19
19: ; preds = %16
%20 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 3)
%21 = icmp eq i64 %20, 0
br i1 %21, label %72, label %22
22: ; preds = %19
%23 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0), i32 3)
%24 = icmp eq i64 %23, 0
br i1 %24, label %72, label %25
25: ; preds = %22
%26 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0), i32 3)
%27 = icmp eq i64 %26, 0
br i1 %27, label %72, label %28
28: ; preds = %25
%29 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.6, i64 0, i64 0), i32 7)
%30 = icmp eq i64 %29, 0
br i1 %30, label %72, label %31
31: ; preds = %28
%32 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.7, i64 0, i64 0), i32 8)
%33 = icmp eq i64 %32, 0
br i1 %33, label %72, label %34
34: ; preds = %31
%35 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0), i32 4)
%36 = icmp eq i64 %35, 0
br i1 %36, label %72, label %37
37: ; preds = %34
%38 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.9, i64 0, i64 0), i32 4)
%39 = icmp eq i64 %38, 0
br i1 %39, label %72, label %40
40: ; preds = %37
%41 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0), i32 5)
%42 = icmp eq i64 %41, 0
br i1 %42, label %72, label %43
43: ; preds = %40
%44 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.11, i64 0, i64 0), i32 5)
%45 = icmp eq i64 %44, 0
br i1 %45, label %72, label %46
46: ; preds = %43
%47 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0), i32 5)
%48 = icmp eq i64 %47, 0
br i1 %48, label %72, label %49
49: ; preds = %46
%50 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i32 5)
%51 = icmp eq i64 %50, 0
br i1 %51, label %72, label %52
52: ; preds = %49
%53 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.14, i64 0, i64 0), i32 5)
%54 = icmp eq i64 %53, 0
br i1 %54, label %72, label %55
55: ; preds = %52
%56 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.15, i64 0, i64 0), i32 6)
%57 = icmp eq i64 %56, 0
br i1 %57, label %72, label %58
58: ; preds = %55
%59 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), i32 9)
%60 = icmp eq i64 %59, 0
br i1 %60, label %72, label %61
61: ; preds = %58
%62 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.17, i64 0, i64 0), i32 10)
%63 = icmp eq i64 %62, 0
br i1 %63, label %72, label %64
64: ; preds = %61
%65 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.18, i64 0, i64 0), i32 7)
%66 = icmp eq i64 %65, 0
%67 = select i1 %66, i32 32, i32 0
br label %72
68: ; preds = %5
%69 = sext i32 %8 to i64
%70 = getelementptr inbounds [22 x i32], [22 x i32]* @switch.table.getModel_PROTEIN, i64 0, i64 %69
%71 = load i32, i32* %70
br label %72
72: ; preds = %68, %5, %64, %52, %55, %58, %61, %49, %46, %43, %40, %37, %34, %25, %28, %31, %22, %19, %16, %13, %10
%73 = phi i32 [ 0, %5 ], [ 40, %10 ], [ 39, %13 ], [ 33, %16 ], [ 31, %19 ], [ 43, %22 ], [ 30, %31 ], [ 30, %28 ], [ 30, %25 ], [ 41, %34 ], [ 42, %37 ], [ 37, %40 ], [ 38, %43 ], [ 35, %46 ], [ 36, %49 ], [ 11, %61 ], [ 11, %58 ], [ 11, %55 ], [ 11, %52 ], [ %67, %64 ], [ %71, %68 ]
ret i32 %73
}