int is_digitable(int c) {
  int dim = 32;
  int digitable_chars[] = {'\'', ' ',  ',', '.', '-', '_', '*', '?',
                           '!',  '"',  '+', '=', '@', '#', '$', '%',
                           '^',  '&',  '(', ')', '[', ']', ';', ':',
                           '{',  '\\', '}', '|', '/', '<', '>', '~'};
  if (((((c) >= '0' && (c) <= '9')) ||
       ((((c) >= 'a' && (c) <= 'z') || ((c) >= 'A' && (c) <= 'Z')))))
    return 1;
  {
    int i;
    for (i = 0; i < dim; i++) {
      if (c == digitable_chars[i])
        return 1;
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<is_digitable>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %edi,-0x8(%rbp)
movl   $0x20,-0xc(%rbp)
lea    -0x90(%rbp),%rdi
lea    0xecd(%rip),%rsi
mov    $0x80,%edx
call   1030 <memcpy@plt>
cmpl   $0x30,-0x8(%rbp)
jl     1151 <is_digitable+0x41>
cmpl   $0x39,-0x8(%rbp)
jle    1179 <is_digitable+0x69>
cmpl   $0x61,-0x8(%rbp)
jl     1165 <is_digitable+0x55>
cmpl   $0x7a,-0x8(%rbp)
jle    1179 <is_digitable+0x69>
cmpl   $0x41,-0x8(%rbp)
jl     1185 <is_digitable+0x75>
cmpl   $0x5a,-0x8(%rbp)
jg     1185 <is_digitable+0x75>
movl   $0x1,-0x4(%rbp)
jmp    11e1 <is_digitable+0xd1>
movl   $0x0,-0x94(%rbp)
mov    -0x94(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11da <is_digitable+0xca>
mov    -0x8(%rbp),%eax
movslq -0x94(%rbp),%rcx
cmp    -0x90(%rbp,%rcx,4),%eax
jne    11c1 <is_digitable+0xb1>
movl   $0x1,-0x4(%rbp)
jmp    11e1 <is_digitable+0xd1>
jmp    11c6 <is_digitable+0xb6>
mov    -0x94(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x94(%rbp)
jmp    118f <is_digitable+0x7f>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<is_digitable>:
lea    -0x30(%rdi),%ecx
mov    $0x1,%eax
cmp    $0xa,%ecx
jb     1169 <is_digitable+0x69>
mov    %edi,%ecx
and    $0xffffffdf,%ecx
add    $0xffffffbf,%ecx
cmp    $0x1a,%ecx
jb     1169 <is_digitable+0x69>
mov    $0x1,%al
cmp    $0x27,%edi
je     1166 <is_digitable+0x66>
mov    $0xffffffffffffffff,%rcx
lea    0xed1(%rip),%rdx
nop
cmp    %edi,0x8(%rdx,%rcx,4)
je     1166 <is_digitable+0x66>
cmp    %edi,0xc(%rdx,%rcx,4)
je     1166 <is_digitable+0x66>
cmp    %edi,0x10(%rdx,%rcx,4)
je     1166 <is_digitable+0x66>
cmp    $0x1b,%rcx
je     115b <is_digitable+0x5b>
lea    0x4(%rcx),%rsi
cmp    %edi,0x14(%rdx,%rcx,4)
mov    %rsi,%rcx
jne    1130 <is_digitable+0x30>
cmp    $0x1f,%rsi
jmp    1163 <is_digitable+0x63>
add    $0x4,%rcx
cmp    $0x1f,%rcx
setb   %al
movzbl %al,%eax
ret

LLVM IR (-O0):
@__const.is_digitable.digitable_chars = [32 x i32] [i32 39, i32 32, i32 44, i32 46, i32 45, i32 95, i32 42, i32 63, i32 33, i32 34, i32 43, i32 61, i32 64, i32 35, i32 36, i32 37, i32 94, i32 38, i32 40, i32 41, i32 91, i32 93, i32 59, i32 58, i32 123, i32 92, i32 125, i32 124, i32 47, i32 60, i32 62, i32 126]
define i32 @is_digitable(i32 %0) {
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca [32 x i32]
%6 = alloca i32
store i32 %0, i32* %3
store i32 32, i32* %4
%7 = bitcast [32 x i32]* %5 to i8*
%8 = load i32, i32* %3
%9 = icmp sge i32 %8, 48
br i1 %9, label %10, label %13
10: ; preds = %1
%11 = load i32, i32* %3
%12 = icmp sle i32 %11, 57
br i1 %12, label %25, label %13
13: ; preds = %10, %1
%14 = load i32, i32* %3
%15 = icmp sge i32 %14, 97
br i1 %15, label %16, label %19
16: ; preds = %13
%17 = load i32, i32* %3
%18 = icmp sle i32 %17, 122
br i1 %18, label %25, label %19
19: ; preds = %16, %13
%20 = load i32, i32* %3
%21 = icmp sge i32 %20, 65
br i1 %21, label %22, label %26
22: ; preds = %19
%23 = load i32, i32* %3
%24 = icmp sle i32 %23, 90
br i1 %24, label %25, label %26
25: ; preds = %22, %16, %10
store i32 1, i32* %2
br label %44
26: ; preds = %22, %19
store i32 0, i32* %6
br label %27
27: ; preds = %40, %26
%28 = load i32, i32* %6
%29 = load i32, i32* %4
%30 = icmp slt i32 %28, %29
br i1 %30, label %31, label %43
31: ; preds = %27
%32 = load i32, i32* %3
%33 = load i32, i32* %6
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds [32 x i32], [32 x i32]* %5, i64 0, i64 %34
%36 = load i32, i32* %35
%37 = icmp eq i32 %32, %36
br i1 %37, label %38, label %39
38: ; preds = %31
store i32 1, i32* %2
br label %44
39: ; preds = %31
br label %40
40: ; preds = %39
%41 = load i32, i32* %6
%42 = add nsw i32 %41, 1
store i32 %42, i32* %6
br label %27
43: ; preds = %27
store i32 0, i32* %2
br label %44
44: ; preds = %43, %38, %25
%45 = load i32, i32* %2
ret i32 %45
}

LLVM IR (-O2):
@__const.is_digitable.digitable_chars = [32 x i32] [i32 39, i32 32, i32 44, i32 46, i32 45, i32 95, i32 42, i32 63, i32 33, i32 34, i32 43, i32 61, i32 64, i32 35, i32 36, i32 37, i32 94, i32 38, i32 40, i32 41, i32 91, i32 93, i32 59, i32 58, i32 123, i32 92, i32 125, i32 124, i32 47, i32 60, i32 62, i32 126]
define i32 @is_digitable(i32 %0) {
%2 = add i32 %0, -48
%3 = icmp ult i32 %2, 10
%4 = and i32 %0, -33
%5 = add i32 %4, -65
%6 = icmp ult i32 %5, 26
%7 = or i1 %3, %6
br i1 %7, label %40, label %8
8: ; preds = %1
%9 = icmp eq i32 %0, 39
br i1 %9, label %37, label %10
10: ; preds = %8, %29
%11 = phi i64 [ %27, %29 ], [ 0, %8 ]
%12 = or i64 %11, 1
%13 = getelementptr inbounds [32 x i32], [32 x i32]* @__const.is_digitable.digitable_chars, i64 0, i64 %12
%14 = load i32, i32* %13
%15 = icmp eq i32 %14, %0
br i1 %15, label %37, label %16
16: ; preds = %10
%17 = or i64 %11, 2
%18 = getelementptr inbounds [32 x i32], [32 x i32]* @__const.is_digitable.digitable_chars, i64 0, i64 %17
%19 = load i32, i32* %18
%20 = icmp eq i32 %19, %0
br i1 %20, label %37, label %21
21: ; preds = %16
%22 = or i64 %11, 3
%23 = getelementptr inbounds [32 x i32], [32 x i32]* @__const.is_digitable.digitable_chars, i64 0, i64 %22
%24 = load i32, i32* %23
%25 = icmp eq i32 %24, %0
br i1 %25, label %37, label %26
26: ; preds = %21
%27 = add nuw nsw i64 %11, 4
%28 = icmp eq i64 %27, 32
br i1 %28, label %35, label %29
29: ; preds = %26
%30 = getelementptr inbounds [32 x i32], [32 x i32]* @__const.is_digitable.digitable_chars, i64 0, i64 %27
%31 = load i32, i32* %30
%32 = icmp eq i32 %31, %0
br i1 %32, label %33, label %10
33: ; preds = %29
%34 = icmp ult i64 %22, 31
br label %37
35: ; preds = %26
%36 = icmp ult i64 %22, 31
br label %37
37: ; preds = %33, %35, %21, %16, %10, %8
%38 = phi i1 [ true, %8 ], [ %34, %33 ], [ %36, %35 ], [ true, %21 ], [ true, %16 ], [ true, %10 ]
%39 = zext i1 %38 to i32
br label %40
40: ; preds = %37, %1
%41 = phi i32 [ 1, %1 ], [ %39, %37 ]
ret i32 %41
}