int ishex(unsigned char c) {
  int result;
  result = 0;
  if (c == '0')
    result = 1;
  else if (c == '1')
    result = 1;
  else if (c == '2')
    result = 1;
  else if (c == '3')
    result = 1;
  else if (c == '4')
    result = 1;
  else if (c == '5')
    result = 1;
  else if (c == '6')
    result = 1;
  else if (c == '7')
    result = 1;
  else if (c == '8')
    result = 1;
  else if (c == '9')
    result = 1;
  else if (c == 'a')
    result = 1;
  else if (c == 'b')
    result = 1;
  else if (c == 'c')
    result = 1;
  else if (c == 'd')
    result = 1;
  else if (c == 'e')
    result = 1;
  else if (c == 'f')
    result = 1;
  else if (c == 'A')
    result = 1;
  else if (c == 'B')
    result = 1;
  else if (c == 'C')
    result = 1;
  else if (c == 'D')
    result = 1;
  else if (c == 'E')
    result = 1;
  else if (c == 'F')
    result = 1;
  return result;
}


x86 assembly (clang, -O0):
<ishex>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x1(%rbp)
movl   $0x0,-0x8(%rbp)
movzbl -0x1(%rbp),%eax
cmp    $0x30,%eax
jne    112a <ishex+0x2a>
movl   $0x1,-0x8(%rbp)
jmp    139b <ishex+0x29b>
movzbl -0x1(%rbp),%eax
cmp    $0x31,%eax
jne    1143 <ishex+0x43>
movl   $0x1,-0x8(%rbp)
jmp    1396 <ishex+0x296>
movzbl -0x1(%rbp),%eax
cmp    $0x32,%eax
jne    115c <ishex+0x5c>
movl   $0x1,-0x8(%rbp)
jmp    1391 <ishex+0x291>
movzbl -0x1(%rbp),%eax
cmp    $0x33,%eax
jne    1175 <ishex+0x75>
movl   $0x1,-0x8(%rbp)
jmp    138c <ishex+0x28c>
movzbl -0x1(%rbp),%eax
cmp    $0x34,%eax
jne    118e <ishex+0x8e>
movl   $0x1,-0x8(%rbp)
jmp    1387 <ishex+0x287>
movzbl -0x1(%rbp),%eax
cmp    $0x35,%eax
jne    11a7 <ishex+0xa7>
movl   $0x1,-0x8(%rbp)
jmp    1382 <ishex+0x282>
movzbl -0x1(%rbp),%eax
cmp    $0x36,%eax
jne    11c0 <ishex+0xc0>
movl   $0x1,-0x8(%rbp)
jmp    137d <ishex+0x27d>
movzbl -0x1(%rbp),%eax
cmp    $0x37,%eax
jne    11d9 <ishex+0xd9>
movl   $0x1,-0x8(%rbp)
jmp    1378 <ishex+0x278>
movzbl -0x1(%rbp),%eax
cmp    $0x38,%eax
jne    11f2 <ishex+0xf2>
movl   $0x1,-0x8(%rbp)
jmp    1373 <ishex+0x273>
movzbl -0x1(%rbp),%eax
cmp    $0x39,%eax
jne    120b <ishex+0x10b>
movl   $0x1,-0x8(%rbp)
jmp    136e <ishex+0x26e>
movzbl -0x1(%rbp),%eax
cmp    $0x61,%eax
jne    1224 <ishex+0x124>
movl   $0x1,-0x8(%rbp)
jmp    1369 <ishex+0x269>
movzbl -0x1(%rbp),%eax
cmp    $0x62,%eax
jne    123d <ishex+0x13d>
movl   $0x1,-0x8(%rbp)
jmp    1364 <ishex+0x264>
movzbl -0x1(%rbp),%eax
cmp    $0x63,%eax
jne    1256 <ishex+0x156>
movl   $0x1,-0x8(%rbp)
jmp    135f <ishex+0x25f>
movzbl -0x1(%rbp),%eax
cmp    $0x64,%eax
jne    126f <ishex+0x16f>
movl   $0x1,-0x8(%rbp)
jmp    135a <ishex+0x25a>
movzbl -0x1(%rbp),%eax
cmp    $0x65,%eax
jne    1288 <ishex+0x188>
movl   $0x1,-0x8(%rbp)
jmp    1355 <ishex+0x255>
movzbl -0x1(%rbp),%eax
cmp    $0x66,%eax
jne    12a1 <ishex+0x1a1>
movl   $0x1,-0x8(%rbp)
jmp    1350 <ishex+0x250>
movzbl -0x1(%rbp),%eax
cmp    $0x41,%eax
jne    12ba <ishex+0x1ba>
movl   $0x1,-0x8(%rbp)
jmp    134b <ishex+0x24b>
movzbl -0x1(%rbp),%eax
cmp    $0x42,%eax
jne    12d3 <ishex+0x1d3>
movl   $0x1,-0x8(%rbp)
jmp    1346 <ishex+0x246>
movzbl -0x1(%rbp),%eax
cmp    $0x43,%eax
jne    12ec <ishex+0x1ec>
movl   $0x1,-0x8(%rbp)
jmp    1341 <ishex+0x241>
movzbl -0x1(%rbp),%eax
cmp    $0x44,%eax
jne    1305 <ishex+0x205>
movl   $0x1,-0x8(%rbp)
jmp    133c <ishex+0x23c>
movzbl -0x1(%rbp),%eax
cmp    $0x45,%eax
jne    131e <ishex+0x21e>
movl   $0x1,-0x8(%rbp)
jmp    1337 <ishex+0x237>
movzbl -0x1(%rbp),%eax
cmp    $0x46,%eax
jne    1332 <ishex+0x232>
movl   $0x1,-0x8(%rbp)
jmp    1337 <ishex+0x237>
jmp    133c <ishex+0x23c>
jmp    1341 <ishex+0x241>
jmp    1346 <ishex+0x246>
jmp    134b <ishex+0x24b>
jmp    1350 <ishex+0x250>
jmp    1355 <ishex+0x255>
jmp    135a <ishex+0x25a>
jmp    135f <ishex+0x25f>
jmp    1364 <ishex+0x264>
jmp    1369 <ishex+0x269>
jmp    136e <ishex+0x26e>
jmp    1373 <ishex+0x273>
jmp    1378 <ishex+0x278>
jmp    137d <ishex+0x27d>
jmp    1382 <ishex+0x282>
jmp    1387 <ishex+0x287>
jmp    138c <ishex+0x28c>
jmp    1391 <ishex+0x291>
jmp    1396 <ishex+0x296>
jmp    139b <ishex+0x29b>
mov    -0x8(%rbp),%eax
pop    %rbp
ret

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

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

LLVM IR (-O2):
@switch.table.ishex = [55 x i32] [i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1]
define i32 @ishex(i8 zeroext %0) {
%2 = add i8 %0, -48
%3 = icmp ult i8 %2, 55
br i1 %3, label %4, label %8
4: ; preds = %1
%5 = sext i8 %2 to i64
%6 = getelementptr inbounds [55 x i32], [55 x i32]* @switch.table.ishex, 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
}