unsigned getIndex(char data) {
  if (data >= '0' && data <= '9') {
    return data - 48;
  }
  if (data >= 'A' && data <= 'Z') {
    return data - 45;
  }
  if (data >= 'a' && data <= 'z') {
    return data - 51;
  }
  switch (data) {
  case '!':
    return 10;
    break;
  case '@':
    return 11;
    break;
  case '#':
    return 12;
    break;
  case '$':
    return 13;
    break;
  case '%':
    return 14;
    break;
  case '^':
    return 15;
    break;
  case '&':
    return 16;
    break;
  case '*':
    return 80;
    break;
  case '(':
    return 18;
    break;
  case ')':
    return 19;
    break;
  case ' ':
  case '_':
    return 72;
    break;
  case ':':
    return 73;
    break;
  case '+':
    return 74;
    break;
  case '/':
    return 75;
    break;
  case '-':
    return 76;
    break;
  case '{':
    return 77;
    break;
  case '|':
    return 78;
    break;
  default:
    return 20 + 26 + 26 + 1 + 1;
  }
}


x86 assembly (clang, -O0):
<getIndex>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x5(%rbp)
movsbl -0x5(%rbp),%eax
cmp    $0x30,%eax
jl     1133 <getIndex+0x33>
movsbl -0x5(%rbp),%eax
cmp    $0x39,%eax
jg     1133 <getIndex+0x33>
movsbl -0x5(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movsbl -0x5(%rbp),%eax
cmp    $0x41,%eax
jl     115c <getIndex+0x5c>
movsbl -0x5(%rbp),%eax
cmp    $0x5a,%eax
jg     115c <getIndex+0x5c>
movsbl -0x5(%rbp),%eax
sub    $0x2d,%eax
mov    %eax,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movsbl -0x5(%rbp),%eax
cmp    $0x61,%eax
jl     1185 <getIndex+0x85>
movsbl -0x5(%rbp),%eax
cmp    $0x7a,%eax
jg     1185 <getIndex+0x85>
movsbl -0x5(%rbp),%eax
sub    $0x33,%eax
mov    %eax,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movsbl -0x5(%rbp),%eax
add    $0xffffffe0,%eax
mov    %eax,%ecx
mov    %rcx,-0x10(%rbp)
sub    $0x5c,%eax
ja     127b <getIndex+0x17b>
mov    -0x10(%rbp),%rax
lea    0xe5a(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0xa,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0xb,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0xc,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0xd,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0xe,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0xf,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0x10,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0x50,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0x12,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0x13,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0x48,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0x49,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0x4a,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0x4b,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0x4c,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0x4d,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0x4e,-0x4(%rbp)
jmp    1282 <getIndex+0x182>
movl   $0x4a,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<getIndex>:
lea    -0x30(%rdi),%eax
cmp    $0x9,%al
ja     110d <getIndex+0xd>
add    $0xffffffd0,%edi
mov    %edi,%eax
ret
lea    -0x41(%rdi),%eax
cmp    $0x19,%al
ja     111a <getIndex+0x1a>
add    $0xffffffd3,%edi
mov    %edi,%eax
ret
lea    -0x61(%rdi),%eax
cmp    $0x19,%al
ja     1127 <getIndex+0x27>
add    $0xffffffcd,%edi
mov    %edi,%eax
ret
add    $0xffffffe0,%edi
cmp    $0x5c,%edi
ja     114a <getIndex+0x4a>
mov    $0xa,%eax
lea    0xec5(%rip),%rcx
movslq (%rcx,%rdi,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
mov    $0x48,%eax
ret
mov    $0x4a,%eax
ret
mov    $0xc,%eax
ret
mov    $0xd,%eax
ret
mov    $0xe,%eax
ret
mov    $0x10,%eax
ret
mov    $0x12,%eax
ret
mov    $0x13,%eax
ret
mov    $0x50,%eax
ret
mov    $0x4c,%eax
ret
mov    $0x4b,%eax
ret
mov    $0x49,%eax
ret
mov    $0xb,%eax
ret
mov    $0xf,%eax
ret
mov    $0x4d,%eax
ret
mov    $0x4e,%eax
ret

LLVM IR (-O0):
define i32 @getIndex(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 sge i32 %5, 48
br i1 %6, label %7, label %15
7: ; preds = %1
%8 = load i8, i8* %3
%9 = sext i8 %8 to i32
%10 = icmp sle i32 %9, 57
br i1 %10, label %11, label %15
11: ; preds = %7
%12 = load i8, i8* %3
%13 = sext i8 %12 to i32
%14 = sub nsw i32 %13, 48
store i32 %14, i32* %2
br label %60
15: ; preds = %7, %1
%16 = load i8, i8* %3
%17 = sext i8 %16 to i32
%18 = icmp sge i32 %17, 65
br i1 %18, label %19, label %27
19: ; preds = %15
%20 = load i8, i8* %3
%21 = sext i8 %20 to i32
%22 = icmp sle i32 %21, 90
br i1 %22, label %23, label %27
23: ; preds = %19
%24 = load i8, i8* %3
%25 = sext i8 %24 to i32
%26 = sub nsw i32 %25, 45
store i32 %26, i32* %2
br label %60
27: ; preds = %19, %15
%28 = load i8, i8* %3
%29 = sext i8 %28 to i32
%30 = icmp sge i32 %29, 97
br i1 %30, label %31, label %39
31: ; preds = %27
%32 = load i8, i8* %3
%33 = sext i8 %32 to i32
%34 = icmp sle i32 %33, 122
br i1 %34, label %35, label %39
35: ; preds = %31
%36 = load i8, i8* %3
%37 = sext i8 %36 to i32
%38 = sub nsw i32 %37, 51
store i32 %38, i32* %2
br label %60
39: ; preds = %31, %27
%40 = load i8, i8* %3
%41 = sext i8 %40 to i32
switch i32 %41, label %59 [
i32 33, label %42
i32 64, label %43
i32 35, label %44
i32 36, label %45
i32 37, label %46
i32 94, label %47
i32 38, label %48
i32 42, label %49
i32 40, label %50
i32 41, label %51
i32 32, label %52
i32 95, label %52
i32 58, label %53
i32 43, label %54
i32 47, label %55
i32 45, label %56
i32 123, label %57
i32 124, label %58
]
42: ; preds = %39
store i32 10, i32* %2
br label %60
43: ; preds = %39
store i32 11, i32* %2
br label %60
44: ; preds = %39
store i32 12, i32* %2
br label %60
45: ; preds = %39
store i32 13, i32* %2
br label %60
46: ; preds = %39
store i32 14, i32* %2
br label %60
47: ; preds = %39
store i32 15, i32* %2
br label %60
48: ; preds = %39
store i32 16, i32* %2
br label %60
49: ; preds = %39
store i32 80, i32* %2
br label %60
50: ; preds = %39
store i32 18, i32* %2
br label %60
51: ; preds = %39
store i32 19, i32* %2
br label %60
52: ; preds = %39, %39
store i32 72, i32* %2
br label %60
53: ; preds = %39
store i32 73, i32* %2
br label %60
54: ; preds = %39
store i32 74, i32* %2
br label %60
55: ; preds = %39
store i32 75, i32* %2
br label %60
56: ; preds = %39
store i32 76, i32* %2
br label %60
57: ; preds = %39
store i32 77, i32* %2
br label %60
58: ; preds = %39
store i32 78, i32* %2
br label %60
59: ; preds = %39
store i32 74, i32* %2
br label %60
60: ; preds = %59, %58, %57, %56, %55, %54, %53, %52, %51, %50, %49, %48, %47, %46, %45, %44, %43, %42, %35, %23, %11
%61 = load i32, i32* %2
ret i32 %61
}

LLVM IR (-O2):
define i32 @getIndex(i8 signext %0) {
%2 = sext i8 %0 to i32
%3 = add i8 %0, -48
%4 = icmp ult i8 %3, 10
br i1 %4, label %5, label %7
5: ; preds = %1
%6 = add nsw i32 %2, -48
br label %35
7: ; preds = %1
%8 = add i8 %0, -65
%9 = icmp ult i8 %8, 26
br i1 %9, label %10, label %12
10: ; preds = %7
%11 = add nsw i32 %2, -45
br label %35
12: ; preds = %7
%13 = add i8 %0, -97
%14 = icmp ult i8 %13, 26
br i1 %14, label %15, label %17
15: ; preds = %12
%16 = add nsw i32 %2, -51
br label %35
17: ; preds = %12
switch i32 %2, label %34 [
i32 33, label %35
i32 64, label %18
i32 35, label %19
i32 36, label %20
i32 37, label %21
i32 94, label %22
i32 38, label %23
i32 42, label %24
i32 40, label %25
i32 41, label %26
i32 32, label %27
i32 95, label %27
i32 58, label %28
i32 43, label %29
i32 47, label %30
i32 45, label %31
i32 123, label %32
i32 124, label %33
]
18: ; preds = %17
br label %35
19: ; preds = %17
br label %35
20: ; preds = %17
br label %35
21: ; preds = %17
br label %35
22: ; preds = %17
br label %35
23: ; preds = %17
br label %35
24: ; preds = %17
br label %35
25: ; preds = %17
br label %35
26: ; preds = %17
br label %35
27: ; preds = %17, %17
br label %35
28: ; preds = %17
br label %35
29: ; preds = %17
br label %35
30: ; preds = %17
br label %35
31: ; preds = %17
br label %35
32: ; preds = %17
br label %35
33: ; preds = %17
br label %35
34: ; preds = %17
br label %35
35: ; preds = %17, %34, %33, %32, %31, %30, %29, %28, %27, %26, %25, %24, %23, %22, %21, %20, %19, %18, %15, %10, %5
%36 = phi i32 [ %6, %5 ], [ %11, %10 ], [ %16, %15 ], [ 74, %34 ], [ 78, %33 ], [ 77, %32 ], [ 76, %31 ], [ 75, %30 ], [ 74, %29 ], [ 73, %28 ], [ 72, %27 ], [ 19, %26 ], [ 18, %25 ], [ 80, %24 ], [ 16, %23 ], [ 15, %22 ], [ 14, %21 ], [ 13, %20 ], [ 12, %19 ], [ 11, %18 ], [ 10, %17 ]
ret i32 %36
}