#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
scalar_t__ strchr(char *, char);
char IsConsonant(char *p) {
  return (
      strchr("bcdfghjklmnpqrstvwxz", *p) || (*p == '\xC5' && p[1] == '\x8B') ||
      (*p == '\xCA' && p[1] == '\x83') || (*p == '\xC3' && p[1] == '\xB0') ||
      (*p == '\xCE' && p[1] == '\xB8') || (*p == '\xCA' && p[1] == '\x92'));
}


x86 assembly (clang, -O0):
<IsConsonant>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x8(%rbp)
mov    -0x8(%rbp),%rax
lea    0xed9(%rip),%rdi
movsbl (%rax),%esi
call   1030 <strchr@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x9(%rbp)
jne    1205 <IsConsonant+0xf5>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffffc5,%eax
jne    1167 <IsConsonant+0x57>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%ecx
mov    $0x1,%al
cmp    $0xffffff8b,%ecx
mov    %al,-0x9(%rbp)
je     1205 <IsConsonant+0xf5>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffffca,%eax
jne    118d <IsConsonant+0x7d>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%ecx
mov    $0x1,%al
cmp    $0xffffff83,%ecx
mov    %al,-0x9(%rbp)
je     1205 <IsConsonant+0xf5>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffffc3,%eax
jne    11b3 <IsConsonant+0xa3>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%ecx
mov    $0x1,%al
cmp    $0xffffffb0,%ecx
mov    %al,-0x9(%rbp)
je     1205 <IsConsonant+0xf5>
mov    -0x8(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xffffffce,%eax
jne    11d9 <IsConsonant+0xc9>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%ecx
mov    $0x1,%al
cmp    $0xffffffb8,%ecx
mov    %al,-0x9(%rbp)
je     1205 <IsConsonant+0xf5>
mov    -0x8(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0xffffffca,%ecx
mov    %al,-0xa(%rbp)
jne    11ff <IsConsonant+0xef>
mov    -0x8(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0xffffff92,%eax
sete   %al
mov    %al,-0xa(%rbp)
mov    -0xa(%rbp),%al
mov    %al,-0x9(%rbp)
mov    -0x9(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
movsbl %al,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<IsConsonant>:
push   %rbx
mov    %rdi,%rbx
movsbl (%rdi),%esi
lea    0xf12(%rip),%rdi
call   1030 <strchr@plt>
mov    %rax,%rcx
mov    $0x1,%al
test   %rcx,%rcx
je     112f <IsConsonant+0x1f>
pop    %rbx
ret
mov    (%rbx),%cl
add    $0x3d,%cl
cmp    $0xb,%cl
ja     1172 <IsConsonant+0x62>
movzbl %cl,%ecx
lea    0xebd(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
cmpb   $0xb0,0x1(%rbx)
jmp    1156 <IsConsonant+0x46>
cmpb   $0x8b,0x1(%rbx)
sete   %al
pop    %rbx
ret
mov    0x1(%rbx),%al
cmp    $0x83,%al
sete   %cl
cmp    $0x92,%al
sete   %al
or     %cl,%al
pop    %rbx
ret
cmpb   $0xb8,0x1(%rbx)
je     112d <IsConsonant+0x1d>
xor    %eax,%eax
pop    %rbx
ret

LLVM IR (-O0):
@.str = [21 x i8] c"bcdfghjklmnpqrstvwxz\00"
define signext i8 @IsConsonant(i8* %0) {
%2 = alloca i8*
store i8* %0, i8** %2
%3 = load i8*, i8** %2
%4 = load i8, i8* %3
%5 = call i64 @strchr(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i8 signext %4)
%6 = icmp ne i64 %5, 0
br i1 %6, label %64, label %7
7: ; preds = %1
%8 = load i8*, i8** %2
%9 = load i8, i8* %8
%10 = sext i8 %9 to i32
%11 = icmp eq i32 %10, -59
br i1 %11, label %12, label %18
12: ; preds = %7
%13 = load i8*, i8** %2
%14 = getelementptr inbounds i8, i8* %13, i64 1
%15 = load i8, i8* %14
%16 = sext i8 %15 to i32
%17 = icmp eq i32 %16, -117
br i1 %17, label %64, label %18
18: ; preds = %12, %7
%19 = load i8*, i8** %2
%20 = load i8, i8* %19
%21 = sext i8 %20 to i32
%22 = icmp eq i32 %21, -54
br i1 %22, label %23, label %29
23: ; preds = %18
%24 = load i8*, i8** %2
%25 = getelementptr inbounds i8, i8* %24, i64 1
%26 = load i8, i8* %25
%27 = sext i8 %26 to i32
%28 = icmp eq i32 %27, -125
br i1 %28, label %64, label %29
29: ; preds = %23, %18
%30 = load i8*, i8** %2
%31 = load i8, i8* %30
%32 = sext i8 %31 to i32
%33 = icmp eq i32 %32, -61
br i1 %33, label %34, label %40
34: ; preds = %29
%35 = load i8*, i8** %2
%36 = getelementptr inbounds i8, i8* %35, i64 1
%37 = load i8, i8* %36
%38 = sext i8 %37 to i32
%39 = icmp eq i32 %38, -80
br i1 %39, label %64, label %40
40: ; preds = %34, %29
%41 = load i8*, i8** %2
%42 = load i8, i8* %41
%43 = sext i8 %42 to i32
%44 = icmp eq i32 %43, -50
br i1 %44, label %45, label %51
45: ; preds = %40
%46 = load i8*, i8** %2
%47 = getelementptr inbounds i8, i8* %46, i64 1
%48 = load i8, i8* %47
%49 = sext i8 %48 to i32
%50 = icmp eq i32 %49, -72
br i1 %50, label %64, label %51
51: ; preds = %45, %40
%52 = load i8*, i8** %2
%53 = load i8, i8* %52
%54 = sext i8 %53 to i32
%55 = icmp eq i32 %54, -54
br i1 %55, label %56, label %62
56: ; preds = %51
%57 = load i8*, i8** %2
%58 = getelementptr inbounds i8, i8* %57, i64 1
%59 = load i8, i8* %58
%60 = sext i8 %59 to i32
%61 = icmp eq i32 %60, -110
br label %62
62: ; preds = %56, %51
%63 = phi i1 [ false, %51 ], [ %61, %56 ]
br label %64
64: ; preds = %62, %45, %34, %23, %12, %1
%65 = phi i1 [ true, %45 ], [ true, %34 ], [ true, %23 ], [ true, %12 ], [ true, %1 ], [ %63, %62 ]
%66 = zext i1 %65 to i32
%67 = trunc i32 %66 to i8
ret i8 %67
}

LLVM IR (-O2):
@.str = [21 x i8] c"bcdfghjklmnpqrstvwxz\00"
define signext i8 @IsConsonant(i8* nocapture %0) {
%2 = load i8, i8* %0
%3 = tail call i64 @strchr(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i8 signext %2)
%4 = icmp eq i64 %3, 0
br i1 %4, label %5, label %26
5: ; preds = %1
%6 = load i8, i8* %0
switch i8 %6, label %25 [
i8 -59, label %7
i8 -54, label %11
i8 -61, label %17
i8 -50, label %21
]
7: ; preds = %5
%8 = getelementptr inbounds i8, i8* %0, i64 1
%9 = load i8, i8* %8
%10 = icmp eq i8 %9, -117
br label %26
11: ; preds = %5
%12 = getelementptr inbounds i8, i8* %0, i64 1
%13 = load i8, i8* %12
%14 = icmp eq i8 %13, -125
%15 = icmp eq i8 %13, -110
%16 = or i1 %14, %15
br label %26
17: ; preds = %5
%18 = getelementptr inbounds i8, i8* %0, i64 1
%19 = load i8, i8* %18
%20 = icmp eq i8 %19, -80
br label %26
21: ; preds = %5
%22 = getelementptr inbounds i8, i8* %0, i64 1
%23 = load i8, i8* %22
%24 = icmp eq i8 %23, -72
br i1 %24, label %26, label %25
25: ; preds = %5, %21
br label %26
26: ; preds = %11, %17, %7, %25, %21, %1
%27 = phi i1 [ true, %21 ], [ true, %1 ], [ false, %25 ], [ %20, %17 ], [ %10, %7 ], [ %16, %11 ]
%28 = zext i1 %27 to i8
ret i8 %28
}