char get_char_key(int telephoneKey, int place) {
  switch (telephoneKey) {
  case 2:
    if (place == 1)
      return 'A';
    if (place == 2)
      return 'B';
    if (place == 3)
      return 'C';
  case 3:
    if (place == 1)
      return 'D';
    if (place == 2)
      return 'E';
    if (place == 3)
      return 'F';
  case 4:
    if (place == 1)
      return 'G';
    if (place == 2)
      return 'H';
    if (place == 3)
      return 'I';
  case 5:
    if (place == 1)
      return 'J';
    if (place == 2)
      return 'K';
    if (place == 3)
      return 'L';
  case 6:
    if (place == 1)
      return 'M';
    if (place == 2)
      return 'N';
    if (place == 3)
      return 'O';
  case 7:
    if (place == 1)
      return 'P';
    if (place == 2)
      return 'R';
    if (place == 3)
      return 'S';
  case 8:
    if (place == 1)
      return 'T';
    if (place == 2)
      return 'U';
    if (place == 3)
      return 'V';
  case 9:
    if (place == 1)
      return 'W';
    if (place == 2)
      return 'X';
    if (place == 3)
      return 'Y';
  default:
    return ' ';
  }
}


x86 assembly (clang, -O0):
<get_char_key>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0x8(%rbp),%eax
add    $0xfffffffe,%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0x7,%eax
ja     1323 <get_char_key+0x223>
mov    -0x18(%rbp),%rax
lea    0xed6(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpl   $0x1,-0xc(%rbp)
jne    1146 <get_char_key+0x46>
movb   $0x41,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x2,-0xc(%rbp)
jne    1159 <get_char_key+0x59>
movb   $0x42,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x3,-0xc(%rbp)
jne    116c <get_char_key+0x6c>
movb   $0x43,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
jmp    1171 <get_char_key+0x71>
cmpl   $0x1,-0xc(%rbp)
jne    1184 <get_char_key+0x84>
movb   $0x44,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x2,-0xc(%rbp)
jne    1197 <get_char_key+0x97>
movb   $0x45,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x3,-0xc(%rbp)
jne    11aa <get_char_key+0xaa>
movb   $0x46,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
jmp    11af <get_char_key+0xaf>
cmpl   $0x1,-0xc(%rbp)
jne    11c2 <get_char_key+0xc2>
movb   $0x47,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x2,-0xc(%rbp)
jne    11d5 <get_char_key+0xd5>
movb   $0x48,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x3,-0xc(%rbp)
jne    11e8 <get_char_key+0xe8>
movb   $0x49,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
jmp    11ed <get_char_key+0xed>
cmpl   $0x1,-0xc(%rbp)
jne    1200 <get_char_key+0x100>
movb   $0x4a,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x2,-0xc(%rbp)
jne    1213 <get_char_key+0x113>
movb   $0x4b,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x3,-0xc(%rbp)
jne    1226 <get_char_key+0x126>
movb   $0x4c,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
jmp    122b <get_char_key+0x12b>
cmpl   $0x1,-0xc(%rbp)
jne    123e <get_char_key+0x13e>
movb   $0x4d,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x2,-0xc(%rbp)
jne    1251 <get_char_key+0x151>
movb   $0x4e,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x3,-0xc(%rbp)
jne    1264 <get_char_key+0x164>
movb   $0x4f,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
jmp    1269 <get_char_key+0x169>
cmpl   $0x1,-0xc(%rbp)
jne    127c <get_char_key+0x17c>
movb   $0x50,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x2,-0xc(%rbp)
jne    128f <get_char_key+0x18f>
movb   $0x52,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x3,-0xc(%rbp)
jne    12a2 <get_char_key+0x1a2>
movb   $0x53,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
jmp    12a7 <get_char_key+0x1a7>
cmpl   $0x1,-0xc(%rbp)
jne    12ba <get_char_key+0x1ba>
movb   $0x54,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x2,-0xc(%rbp)
jne    12cd <get_char_key+0x1cd>
movb   $0x55,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x3,-0xc(%rbp)
jne    12e0 <get_char_key+0x1e0>
movb   $0x56,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
jmp    12e5 <get_char_key+0x1e5>
cmpl   $0x1,-0xc(%rbp)
jne    12f8 <get_char_key+0x1f8>
movb   $0x57,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x2,-0xc(%rbp)
jne    130b <get_char_key+0x20b>
movb   $0x58,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
cmpl   $0x3,-0xc(%rbp)
jne    131e <get_char_key+0x21e>
movb   $0x59,-0x1(%rbp)
jmp    1327 <get_char_key+0x227>
jmp    1323 <get_char_key+0x223>
movb   $0x20,-0x1(%rbp)
movsbl -0x1(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_char_key>:
mov    $0x20,%al
add    $0xfffffffe,%edi
cmp    $0x7,%edi
ja     1195 <get_char_key+0x95>
lea    0xeeb(%rip),%rcx
movslq (%rcx,%rdi,4),%rdx
add    %rcx,%rdx
jmp    *%rdx
add    $0xffffffff,%esi
cmp    $0x3,%esi
jae    1195 <get_char_key+0x95>
add    $0x41,%sil
jmp    1193 <get_char_key+0x93>
add    $0xffffffff,%esi
cmp    $0x3,%esi
jae    1195 <get_char_key+0x95>
add    $0x44,%sil
jmp    1193 <get_char_key+0x93>
add    $0xffffffff,%esi
cmp    $0x3,%esi
jae    1195 <get_char_key+0x95>
add    $0x47,%sil
jmp    1193 <get_char_key+0x93>
add    $0xffffffff,%esi
cmp    $0x3,%esi
jae    1195 <get_char_key+0x95>
add    $0x4a,%sil
jmp    1193 <get_char_key+0x93>
add    $0xffffffff,%esi
cmp    $0x3,%esi
jae    1195 <get_char_key+0x95>
add    $0x4d,%sil
jmp    1193 <get_char_key+0x93>
add    $0xffffffff,%esi
cmp    $0x3,%esi
jae    1195 <get_char_key+0x95>
shl    $0x3,%esi
mov    $0x535250,%eax
mov    %esi,%ecx
shr    %cl,%eax
ret
add    $0xffffffff,%esi
cmp    $0x3,%esi
jae    1195 <get_char_key+0x95>
add    $0x57,%sil
jmp    1193 <get_char_key+0x93>
add    $0xffffffff,%esi
cmp    $0x3,%esi
jae    1195 <get_char_key+0x95>
add    $0x54,%sil
mov    %esi,%eax
ret

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

LLVM IR (-O2):
define signext i8 @get_char_key(i32 %0, i32 %1) {
switch i32 %0, label %53 [
i32 2, label %3
i32 3, label %6
i32 4, label %9
i32 5, label %12
i32 6, label %15
i32 7, label %18
i32 8, label %21
i32 9, label %24
]
3: ; preds = %2
%4 = add i32 %1, -1
%5 = icmp ult i32 %4, 3
br i1 %5, label %27, label %53
6: ; preds = %2
%7 = add i32 %1, -1
%8 = icmp ult i32 %7, 3
br i1 %8, label %30, label %53
9: ; preds = %2
%10 = add i32 %1, -1
%11 = icmp ult i32 %10, 3
br i1 %11, label %33, label %53
12: ; preds = %2
%13 = add i32 %1, -1
%14 = icmp ult i32 %13, 3
br i1 %14, label %36, label %53
15: ; preds = %2
%16 = add i32 %1, -1
%17 = icmp ult i32 %16, 3
br i1 %17, label %39, label %53
18: ; preds = %2
%19 = add i32 %1, -1
%20 = icmp ult i32 %19, 3
br i1 %20, label %42, label %53
21: ; preds = %2
%22 = add i32 %1, -1
%23 = icmp ult i32 %22, 3
br i1 %23, label %47, label %53
24: ; preds = %2
%25 = add i32 %1, -1
%26 = icmp ult i32 %25, 3
br i1 %26, label %50, label %53
27: ; preds = %3
%28 = trunc i32 %4 to i8
%29 = add i8 %28, 65
br label %53
30: ; preds = %6
%31 = trunc i32 %7 to i8
%32 = add i8 %31, 68
br label %53
33: ; preds = %9
%34 = trunc i32 %10 to i8
%35 = add i8 %34, 71
br label %53
36: ; preds = %12
%37 = trunc i32 %13 to i8
%38 = add i8 %37, 74
br label %53
39: ; preds = %15
%40 = trunc i32 %16 to i8
%41 = add i8 %40, 77
br label %53
42: ; preds = %18
%43 = trunc i32 %19 to i24
%44 = shl i24 %43, 3
%45 = lshr i24 5460560, %44
%46 = trunc i24 %45 to i8
br label %53
47: ; preds = %21
%48 = trunc i32 %22 to i8
%49 = add i8 %48, 84
br label %53
50: ; preds = %24
%51 = trunc i32 %25 to i8
%52 = add i8 %51, 87
br label %53
53: ; preds = %2, %3, %6, %9, %12, %15, %18, %21, %24, %50, %47, %42, %39, %36, %33, %30, %27
%54 = phi i8 [ %29, %27 ], [ %32, %30 ], [ %35, %33 ], [ %38, %36 ], [ %41, %39 ], [ %46, %42 ], [ %49, %47 ], [ %52, %50 ], [ 32, %24 ], [ 32, %21 ], [ 32, %18 ], [ 32, %15 ], [ 32, %12 ], [ 32, %9 ], [ 32, %6 ], [ 32, %3 ], [ 32, %2 ]
ret i8 %54
}