float xor_english_char_score(unsigned char c) {
  if (c == 'A' || c == 'a' || c == 'E' || c == 'e' || c == 'I' || c == 'i' ||
      c == 'O' || c == 'o' || c == 'U' || c == 'u') {
    return 10.0f;
  } else if (c == ' ') {
    return 9.0f;
  } else if ((c >= 'a' && c <= 'z') || (c >= 'A' || c <= 'Z')) {
    return 6.0f;
  } else if (c == '.' || c == ',' || c == '\'' || c == ':') {
    return 3.0f;
  }
  return 0.0f;
}


x86 assembly (clang, -O0):
<xor_english_char_score>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x5(%rbp)
movzbl -0x5(%rbp),%eax
cmp    $0x41,%eax
je     118c <xor_english_char_score+0x8c>
movzbl -0x5(%rbp),%eax
cmp    $0x61,%eax
je     118c <xor_english_char_score+0x8c>
movzbl -0x5(%rbp),%eax
cmp    $0x45,%eax
je     118c <xor_english_char_score+0x8c>
movzbl -0x5(%rbp),%eax
cmp    $0x65,%eax
je     118c <xor_english_char_score+0x8c>
movzbl -0x5(%rbp),%eax
cmp    $0x49,%eax
je     118c <xor_english_char_score+0x8c>
movzbl -0x5(%rbp),%eax
cmp    $0x69,%eax
je     118c <xor_english_char_score+0x8c>
movzbl -0x5(%rbp),%eax
cmp    $0x4f,%eax
je     118c <xor_english_char_score+0x8c>
movzbl -0x5(%rbp),%eax
cmp    $0x6f,%eax
je     118c <xor_english_char_score+0x8c>
movzbl -0x5(%rbp),%eax
cmp    $0x55,%eax
je     118c <xor_english_char_score+0x8c>
movzbl -0x5(%rbp),%eax
cmp    $0x75,%eax
jne    119e <xor_english_char_score+0x9e>
movss  0xe78(%rip),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1260 <xor_english_char_score+0x160>
movzbl -0x5(%rbp),%eax
cmp    $0x20,%eax
jne    11bd <xor_english_char_score+0xbd>
movss  0xe55(%rip),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1260 <xor_english_char_score+0x160>
movzbl -0x5(%rbp),%eax
cmp    $0x61,%eax
jl     11d7 <xor_english_char_score+0xd7>
movzbl -0x5(%rbp),%eax
cmp    $0x7a,%eax
jle    11f1 <xor_english_char_score+0xf1>
movzbl -0x5(%rbp),%eax
cmp    $0x41,%eax
jge    11f1 <xor_english_char_score+0xf1>
movzbl -0x5(%rbp),%eax
cmp    $0x5a,%eax
jg     1203 <xor_english_char_score+0x103>
movss  0xe0b(%rip),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1260 <xor_english_char_score+0x160>
movzbl -0x5(%rbp),%eax
cmp    $0x2e,%eax
je     1237 <xor_english_char_score+0x137>
movzbl -0x5(%rbp),%eax
cmp    $0x2c,%eax
je     1237 <xor_english_char_score+0x137>
movzbl -0x5(%rbp),%eax
cmp    $0x27,%eax
je     1237 <xor_english_char_score+0x137>
movzbl -0x5(%rbp),%eax
cmp    $0x3a,%eax
jne    1249 <xor_english_char_score+0x149>
movss  0xdc1(%rip),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    1260 <xor_english_char_score+0x160>
jmp    124e <xor_english_char_score+0x14e>
jmp    1253 <xor_english_char_score+0x153>
jmp    1258 <xor_english_char_score+0x158>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<xor_english_char_score>:
add    $0xe0,%dil
cmp    $0x55,%dil
ja     1130 <xor_english_char_score+0x30>
movss  0xeee(%rip),%xmm0
movzbl %dil,%eax
lea    0xeef(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
ret
movss  0xed5(%rip),%xmm0
ret
movss  0xed0(%rip),%xmm0
ret

LLVM IR (-O0):
define float @xor_english_char_score(i8 zeroext %0) {
%2 = alloca float
%3 = alloca i8
store i8 %0, i8* %3
%4 = load i8, i8* %3
%5 = zext i8 %4 to i32
%6 = icmp eq i32 %5, 65
br i1 %6, label %43, label %7
7: ; preds = %1
%8 = load i8, i8* %3
%9 = zext i8 %8 to i32
%10 = icmp eq i32 %9, 97
br i1 %10, label %43, label %11
11: ; preds = %7
%12 = load i8, i8* %3
%13 = zext i8 %12 to i32
%14 = icmp eq i32 %13, 69
br i1 %14, label %43, label %15
15: ; preds = %11
%16 = load i8, i8* %3
%17 = zext i8 %16 to i32
%18 = icmp eq i32 %17, 101
br i1 %18, label %43, label %19
19: ; preds = %15
%20 = load i8, i8* %3
%21 = zext i8 %20 to i32
%22 = icmp eq i32 %21, 73
br i1 %22, label %43, label %23
23: ; preds = %19
%24 = load i8, i8* %3
%25 = zext i8 %24 to i32
%26 = icmp eq i32 %25, 105
br i1 %26, label %43, label %27
27: ; preds = %23
%28 = load i8, i8* %3
%29 = zext i8 %28 to i32
%30 = icmp eq i32 %29, 79
br i1 %30, label %43, label %31
31: ; preds = %27
%32 = load i8, i8* %3
%33 = zext i8 %32 to i32
%34 = icmp eq i32 %33, 111
br i1 %34, label %43, label %35
35: ; preds = %31
%36 = load i8, i8* %3
%37 = zext i8 %36 to i32
%38 = icmp eq i32 %37, 85
br i1 %38, label %43, label %39
39: ; preds = %35
%40 = load i8, i8* %3
%41 = zext i8 %40 to i32
%42 = icmp eq i32 %41, 117
br i1 %42, label %43, label %44
43: ; preds = %39, %35, %31, %27, %23, %19, %15, %11, %7, %1
store float 1.000000e+01, float* %2
br label %87
44: ; preds = %39
%45 = load i8, i8* %3
%46 = zext i8 %45 to i32
%47 = icmp eq i32 %46, 32
br i1 %47, label %48, label %49
48: ; preds = %44
store float 9.000000e+00, float* %2
br label %87
49: ; preds = %44
%50 = load i8, i8* %3
%51 = zext i8 %50 to i32
%52 = icmp sge i32 %51, 97
br i1 %52, label %53, label %57
53: ; preds = %49
%54 = load i8, i8* %3
%55 = zext i8 %54 to i32
%56 = icmp sle i32 %55, 122
br i1 %56, label %65, label %57
57: ; preds = %53, %49
%58 = load i8, i8* %3
%59 = zext i8 %58 to i32
%60 = icmp sge i32 %59, 65
br i1 %60, label %65, label %61
61: ; preds = %57
%62 = load i8, i8* %3
%63 = zext i8 %62 to i32
%64 = icmp sle i32 %63, 90
br i1 %64, label %65, label %66
65: ; preds = %61, %57, %53
store float 6.000000e+00, float* %2
br label %87
66: ; preds = %61
%67 = load i8, i8* %3
%68 = zext i8 %67 to i32
%69 = icmp eq i32 %68, 46
br i1 %69, label %82, label %70
70: ; preds = %66
%71 = load i8, i8* %3
%72 = zext i8 %71 to i32
%73 = icmp eq i32 %72, 44
br i1 %73, label %82, label %74
74: ; preds = %70
%75 = load i8, i8* %3
%76 = zext i8 %75 to i32
%77 = icmp eq i32 %76, 39
br i1 %77, label %82, label %78
78: ; preds = %74
%79 = load i8, i8* %3
%80 = zext i8 %79 to i32
%81 = icmp eq i32 %80, 58
br i1 %81, label %82, label %83
82: ; preds = %78, %74, %70, %66
store float 3.000000e+00, float* %2
br label %87
83: ; preds = %78
br label %84
84: ; preds = %83
br label %85
85: ; preds = %84
br label %86
86: ; preds = %85
store float 0.000000e+00, float* %2
br label %87
87: ; preds = %86, %82, %65, %48, %43
%88 = load float, float* %2
ret float %88
}

LLVM IR (-O2):
define float @xor_english_char_score(i8 zeroext %0) {
switch i8 %0, label %3 [
i8 117, label %4
i8 111, label %4
i8 105, label %4
i8 101, label %4
i8 97, label %4
i8 85, label %4
i8 79, label %4
i8 73, label %4
i8 69, label %4
i8 65, label %4
i8 32, label %2
]
2: ; preds = %1
br label %4
3: ; preds = %1
br label %4
4: ; preds = %1, %1, %1, %1, %1, %1, %1, %1, %1, %1, %3, %2
%5 = phi float [ 9.000000e+00, %2 ], [ 6.000000e+00, %3 ], [ 1.000000e+01, %1 ], [ 1.000000e+01, %1 ], [ 1.000000e+01, %1 ], [ 1.000000e+01, %1 ], [ 1.000000e+01, %1 ], [ 1.000000e+01, %1 ], [ 1.000000e+01, %1 ], [ 1.000000e+01, %1 ], [ 1.000000e+01, %1 ], [ 1.000000e+01, %1 ]
ret float %5
}