int isValidDNACharacter(char input) {
  if (input == 'A')
    return 1;
  if (input == 'C')
    return 1;
  if (input == 'G')
    return 1;
  if (input == 'T')
    return 1;
  if (input == '-')
    return 1;
  if (input == 'N')
    return 1;
  if (input == 'X' || input == 'K' || input == 'M' || input == 'R' ||
      input == 'Y' || input == 'S' || input == 'W' || input == 'B' ||
      input == 'V' || input == 'H' || input == 'D' || input == '.')
    return 1;
  return 0;
}


x86 assembly (clang, -O0):
<isValidDNACharacter>:
push   %rbp
mov    %rsp,%rbp
mov    %dil,%al
mov    %al,-0x5(%rbp)
movsbl -0x5(%rbp),%eax
cmp    $0x41,%eax
jne    1123 <isValidDNACharacter+0x23>
movl   $0x1,-0x4(%rbp)
jmp    124f <isValidDNACharacter+0x14f>
movsbl -0x5(%rbp),%eax
cmp    $0x43,%eax
jne    113c <isValidDNACharacter+0x3c>
movl   $0x1,-0x4(%rbp)
jmp    124f <isValidDNACharacter+0x14f>
movsbl -0x5(%rbp),%eax
cmp    $0x47,%eax
jne    1155 <isValidDNACharacter+0x55>
movl   $0x1,-0x4(%rbp)
jmp    124f <isValidDNACharacter+0x14f>
movsbl -0x5(%rbp),%eax
cmp    $0x54,%eax
jne    116e <isValidDNACharacter+0x6e>
movl   $0x1,-0x4(%rbp)
jmp    124f <isValidDNACharacter+0x14f>
movsbl -0x5(%rbp),%eax
cmp    $0x2d,%eax
jne    1187 <isValidDNACharacter+0x87>
movl   $0x1,-0x4(%rbp)
jmp    124f <isValidDNACharacter+0x14f>
movsbl -0x5(%rbp),%eax
cmp    $0x4e,%eax
jne    11a0 <isValidDNACharacter+0xa0>
movl   $0x1,-0x4(%rbp)
jmp    124f <isValidDNACharacter+0x14f>
movsbl -0x5(%rbp),%eax
cmp    $0x58,%eax
je     123c <isValidDNACharacter+0x13c>
movsbl -0x5(%rbp),%eax
cmp    $0x4b,%eax
je     123c <isValidDNACharacter+0x13c>
movsbl -0x5(%rbp),%eax
cmp    $0x4d,%eax
je     123c <isValidDNACharacter+0x13c>
movsbl -0x5(%rbp),%eax
cmp    $0x52,%eax
je     123c <isValidDNACharacter+0x13c>
movsbl -0x5(%rbp),%eax
cmp    $0x59,%eax
je     123c <isValidDNACharacter+0x13c>
movsbl -0x5(%rbp),%eax
cmp    $0x53,%eax
je     123c <isValidDNACharacter+0x13c>
movsbl -0x5(%rbp),%eax
cmp    $0x57,%eax
je     123c <isValidDNACharacter+0x13c>
movsbl -0x5(%rbp),%eax
cmp    $0x42,%eax
je     123c <isValidDNACharacter+0x13c>
movsbl -0x5(%rbp),%eax
cmp    $0x56,%eax
je     123c <isValidDNACharacter+0x13c>
movsbl -0x5(%rbp),%eax
cmp    $0x48,%eax
je     123c <isValidDNACharacter+0x13c>
movsbl -0x5(%rbp),%eax
cmp    $0x44,%eax
je     123c <isValidDNACharacter+0x13c>
movsbl -0x5(%rbp),%eax
cmp    $0x2e,%eax
jne    1248 <isValidDNACharacter+0x148>
movl   $0x1,-0x4(%rbp)
jmp    124f <isValidDNACharacter+0x14f>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

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

LLVM IR (-O0):
define i32 @isValidDNACharacter(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, 65
br i1 %6, label %7, label %8
7: ; preds = %1
store i32 1, i32* %2
br label %83
8: ; preds = %1
%9 = load i8, i8* %3
%10 = sext i8 %9 to i32
%11 = icmp eq i32 %10, 67
br i1 %11, label %12, label %13
12: ; preds = %8
store i32 1, i32* %2
br label %83
13: ; preds = %8
%14 = load i8, i8* %3
%15 = sext i8 %14 to i32
%16 = icmp eq i32 %15, 71
br i1 %16, label %17, label %18
17: ; preds = %13
store i32 1, i32* %2
br label %83
18: ; preds = %13
%19 = load i8, i8* %3
%20 = sext i8 %19 to i32
%21 = icmp eq i32 %20, 84
br i1 %21, label %22, label %23
22: ; preds = %18
store i32 1, i32* %2
br label %83
23: ; preds = %18
%24 = load i8, i8* %3
%25 = sext i8 %24 to i32
%26 = icmp eq i32 %25, 45
br i1 %26, label %27, label %28
27: ; preds = %23
store i32 1, i32* %2
br label %83
28: ; preds = %23
%29 = load i8, i8* %3
%30 = sext i8 %29 to i32
%31 = icmp eq i32 %30, 78
br i1 %31, label %32, label %33
32: ; preds = %28
store i32 1, i32* %2
br label %83
33: ; preds = %28
%34 = load i8, i8* %3
%35 = sext i8 %34 to i32
%36 = icmp eq i32 %35, 88
br i1 %36, label %81, label %37
37: ; preds = %33
%38 = load i8, i8* %3
%39 = sext i8 %38 to i32
%40 = icmp eq i32 %39, 75
br i1 %40, label %81, label %41
41: ; preds = %37
%42 = load i8, i8* %3
%43 = sext i8 %42 to i32
%44 = icmp eq i32 %43, 77
br i1 %44, label %81, label %45
45: ; preds = %41
%46 = load i8, i8* %3
%47 = sext i8 %46 to i32
%48 = icmp eq i32 %47, 82
br i1 %48, label %81, label %49
49: ; preds = %45
%50 = load i8, i8* %3
%51 = sext i8 %50 to i32
%52 = icmp eq i32 %51, 89
br i1 %52, label %81, label %53
53: ; preds = %49
%54 = load i8, i8* %3
%55 = sext i8 %54 to i32
%56 = icmp eq i32 %55, 83
br i1 %56, label %81, label %57
57: ; preds = %53
%58 = load i8, i8* %3
%59 = sext i8 %58 to i32
%60 = icmp eq i32 %59, 87
br i1 %60, label %81, label %61
61: ; preds = %57
%62 = load i8, i8* %3
%63 = sext i8 %62 to i32
%64 = icmp eq i32 %63, 66
br i1 %64, label %81, label %65
65: ; preds = %61
%66 = load i8, i8* %3
%67 = sext i8 %66 to i32
%68 = icmp eq i32 %67, 86
br i1 %68, label %81, label %69
69: ; preds = %65
%70 = load i8, i8* %3
%71 = sext i8 %70 to i32
%72 = icmp eq i32 %71, 72
br i1 %72, label %81, label %73
73: ; preds = %69
%74 = load i8, i8* %3
%75 = sext i8 %74 to i32
%76 = icmp eq i32 %75, 68
br i1 %76, label %81, label %77
77: ; preds = %73
%78 = load i8, i8* %3
%79 = sext i8 %78 to i32
%80 = icmp eq i32 %79, 46
br i1 %80, label %81, label %82
81: ; preds = %77, %73, %69, %65, %61, %57, %53, %49, %45, %41, %37, %33
store i32 1, i32* %2
br label %83
82: ; preds = %77
store i32 0, i32* %2
br label %83
83: ; preds = %82, %81, %32, %27, %22, %17, %12, %7
%84 = load i32, i32* %2
ret i32 %84
}

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