int get_point(char c) {
  if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'l' ||
      c == 'n' || c == 'r' || c == 's' || c == 't')
    return 1;
  if (c == 'd' || c == 'g')
    return 2;
  if (c == 'b' || c == 'c' || c == 'm' || c == 'p')
    return 3;
  if (c == 'f' || c == 'h' || c == 'v' || c == 'w' || c == 'y')
    return 4;
  if (c == 'k')
    return 5;
  if (c == 'j' || c == 'x')
    return 8;
  if (c == 'q' || c == 'z')
    return 10;
  return 0;
}


x86 assembly (clang, -O0):
<get_point>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x5(%rbp)
movsbl -0x5(%rbp),%eax
cmp    $0x61,%eax
je     118c <get_point+0x8c>
movsbl -0x5(%rbp),%eax
cmp    $0x65,%eax
je     118c <get_point+0x8c>
movsbl -0x5(%rbp),%eax
cmp    $0x69,%eax
je     118c <get_point+0x8c>
movsbl -0x5(%rbp),%eax
cmp    $0x6f,%eax
je     118c <get_point+0x8c>
movsbl -0x5(%rbp),%eax
cmp    $0x75,%eax
je     118c <get_point+0x8c>
movsbl -0x5(%rbp),%eax
cmp    $0x6c,%eax
je     118c <get_point+0x8c>
movsbl -0x5(%rbp),%eax
cmp    $0x6e,%eax
je     118c <get_point+0x8c>
movsbl -0x5(%rbp),%eax
cmp    $0x72,%eax
je     118c <get_point+0x8c>
movsbl -0x5(%rbp),%eax
cmp    $0x73,%eax
je     118c <get_point+0x8c>
movsbl -0x5(%rbp),%eax
cmp    $0x74,%eax
jne    1198 <get_point+0x98>
movl   $0x1,-0x4(%rbp)
jmp    12b7 <get_point+0x1b7>
movsbl -0x5(%rbp),%eax
cmp    $0x64,%eax
je     11b2 <get_point+0xb2>
movsbl -0x5(%rbp),%eax
cmp    $0x67,%eax
jne    11be <get_point+0xbe>
movl   $0x2,-0x4(%rbp)
jmp    12b7 <get_point+0x1b7>
movsbl -0x5(%rbp),%eax
cmp    $0x62,%eax
je     11f2 <get_point+0xf2>
movsbl -0x5(%rbp),%eax
cmp    $0x63,%eax
je     11f2 <get_point+0xf2>
movsbl -0x5(%rbp),%eax
cmp    $0x6d,%eax
je     11f2 <get_point+0xf2>
movsbl -0x5(%rbp),%eax
cmp    $0x70,%eax
jne    11fe <get_point+0xfe>
movl   $0x3,-0x4(%rbp)
jmp    12b7 <get_point+0x1b7>
movsbl -0x5(%rbp),%eax
cmp    $0x66,%eax
je     123f <get_point+0x13f>
movsbl -0x5(%rbp),%eax
cmp    $0x68,%eax
je     123f <get_point+0x13f>
movsbl -0x5(%rbp),%eax
cmp    $0x76,%eax
je     123f <get_point+0x13f>
movsbl -0x5(%rbp),%eax
cmp    $0x77,%eax
je     123f <get_point+0x13f>
movsbl -0x5(%rbp),%eax
cmp    $0x79,%eax
jne    124b <get_point+0x14b>
movl   $0x4,-0x4(%rbp)
jmp    12b7 <get_point+0x1b7>
movsbl -0x5(%rbp),%eax
cmp    $0x6b,%eax
jne    1264 <get_point+0x164>
movl   $0x5,-0x4(%rbp)
jmp    12b7 <get_point+0x1b7>
movsbl -0x5(%rbp),%eax
cmp    $0x6a,%eax
je     127e <get_point+0x17e>
movsbl -0x5(%rbp),%eax
cmp    $0x78,%eax
jne    128a <get_point+0x18a>
movl   $0x8,-0x4(%rbp)
jmp    12b7 <get_point+0x1b7>
movsbl -0x5(%rbp),%eax
cmp    $0x71,%eax
je     12a4 <get_point+0x1a4>
movsbl -0x5(%rbp),%eax
cmp    $0x7a,%eax
jne    12b0 <get_point+0x1b0>
movl   $0xa,-0x4(%rbp)
jmp    12b7 <get_point+0x1b7>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_point>:
add    $0x9f,%dil
xor    %eax,%eax
cmp    $0x19,%dil
ja     111a <get_point+0x1a>
movsbq %dil,%rax
lea    0xee9(%rip),%rcx
mov    (%rcx,%rax,4),%eax
ret

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

LLVM IR (-O2):
@switch.table.get_point = [26 x i32] [i32 1, i32 3, i32 3, i32 2, i32 1, i32 4, i32 2, i32 4, i32 1, i32 8, i32 5, i32 1, i32 3, i32 1, i32 1, i32 3, i32 10, i32 1, i32 1, i32 1, i32 1, i32 4, i32 4, i32 8, i32 4, i32 10]
define i32 @get_point(i8 signext %0) {
%2 = add i8 %0, -97
%3 = icmp ult i8 %2, 26
br i1 %3, label %4, label %8
4: ; preds = %1
%5 = sext i8 %2 to i64
%6 = getelementptr inbounds [26 x i32], [26 x i32]* @switch.table.get_point, i64 0, i64 %5
%7 = load i32, i32* %6
br label %8
8: ; preds = %1, %4
%9 = phi i32 [ %7, %4 ], [ 0, %1 ]
ret i32 %9
}