#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 */
int /*<<< orphan*/ strcpy(char *, char const *);
int strlen(char const *);
scalar_t__ strncmp(char const *, char const *, int const);
int isExpressionKeyword(const char *c, char *value) {
  const char *start = c;
  const char *QUOTE = "quote";
  const int QUOTE_SZ = strlen(QUOTE);
  const char *LAMBDA = "lambda";
  const int LAMBDA_SZ = strlen(LAMBDA);
  const char *IF = "if";
  const int IF_SZ = strlen(IF);
  const char *SET_BANG = "set!";
  const int SET_BANG_SZ = strlen(SET_BANG);
  const char *BEGIN = "begin";
  const int BEGIN_SZ = strlen(BEGIN);
  const char *COND = "cond";
  const int COND_SZ = strlen(COND);
  const char *AND = "and";
  const int AND_SZ = strlen(AND);
  const char *OR = "or";
  const int OR_SZ = strlen(OR);
  const char *CASE = "case";
  const int CASE_SZ = strlen(CASE);
  const char *LET = "let";
  const int LET_SZ = strlen(LET);
  const char *LET_STAR = "let*";
  const int LET_STAR_SZ = strlen(LET_STAR);
  const char *LETREC = "letrec";
  const int LETREC_SZ = strlen(LETREC);
  const char *DO = "do";
  const int DO_SZ = strlen(DO);
  const char *DELAY = "delay";
  const int DELAY_SZ = strlen(DELAY);
  const char *QUASIQUOTE = "quasiquote";
  const int QUASIQUOTE_SZ = strlen(QUASIQUOTE);
  if (c == NULL)
    return 0;
  if (strncmp(c, QUOTE, QUOTE_SZ) == 0) {
    if (value != NULL)
      strcpy(value, QUOTE);
    c += QUOTE_SZ;
    return c - start;
  } else if (strncmp(c, LAMBDA, LAMBDA_SZ) == 0) {
    if (value != NULL)
      strcpy(value, LAMBDA);
    c += LAMBDA_SZ;
    return c - start;
  } else if (strncmp(c, IF, IF_SZ) == 0) {
    if (value != NULL)
      strcpy(value, IF);
    c += IF_SZ;
    return c - start;
  } else if (strncmp(c, SET_BANG, SET_BANG_SZ) == 0) {
    if (value != NULL)
      strcpy(value, SET_BANG);
    c += SET_BANG_SZ;
    return c - start;
  } else if (strncmp(c, BEGIN, BEGIN_SZ) == 0) {
    if (value != NULL)
      strcpy(value, BEGIN);
    c += BEGIN_SZ;
    return c - start;
  } else if (strncmp(c, COND, COND_SZ) == 0) {
    if (value != NULL)
      strcpy(value, COND);
    c += COND_SZ;
    return c - start;
  } else if (strncmp(c, AND, AND_SZ) == 0) {
    if (value != NULL)
      strcpy(value, AND);
    c += AND_SZ;
    return c - start;
  } else if (strncmp(c, OR, OR_SZ) == 0) {
    if (value != NULL)
      strcpy(value, OR);
    c += OR_SZ;
    return c - start;
  } else if (strncmp(c, CASE, CASE_SZ) == 0) {
    if (value != NULL)
      strcpy(value, CASE);
    c += CASE_SZ;
    return c - start;
  } else if (strncmp(c, LET, LET_SZ) == 0) {
    if (value != NULL)
      strcpy(value, LET);
    c += LET_SZ;
    return c - start;
  } else if (strncmp(c, LET_STAR, LET_STAR_SZ) == 0) {
    if (value != NULL)
      strcpy(value, LET_STAR);
    c += LET_STAR_SZ;
    return c - start;
  } else if (strncmp(c, LETREC, LETREC_SZ) == 0) {
    if (value != NULL)
      strcpy(value, LETREC);
    c += LETREC_SZ;
    return c - start;
  } else if (strncmp(c, DO, DO_SZ) == 0) {
    if (value != NULL)
      strcpy(value, DO);
    c += DO_SZ;
    return c - start;
  } else if (strncmp(c, DELAY, DELAY_SZ) == 0) {
    if (value != NULL)
      strcpy(value, DELAY);
    c += DELAY_SZ;
    return c - start;
  } else if (strncmp(c, QUASIQUOTE, QUASIQUOTE_SZ) == 0) {
    if (value != NULL)
      strcpy(value, QUASIQUOTE);
    c += QUASIQUOTE_SZ;
    return c - start;
  } else
    return 0;
}


x86 assembly (clang, -O0):
<isExpressionKeyword>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
lea    0xef2(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x2c(%rbp)
lea    0xe97(%rip),%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x3c(%rbp)
lea    0xe87(%rip),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x4c(%rbp)
lea    0xe73(%rip),%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x5c(%rbp)
lea    0xe61(%rip),%rax
mov    %rax,-0x68(%rbp)
mov    -0x68(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x6c(%rbp)
lea    0xe50(%rip),%rax
mov    %rax,-0x78(%rbp)
mov    -0x78(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x7c(%rbp)
lea    0xe3e(%rip),%rax
mov    %rax,-0x88(%rbp)
mov    -0x88(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x8c(%rbp)
lea    0xe22(%rip),%rax
mov    %rax,-0x98(%rbp)
mov    -0x98(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x9c(%rbp)
lea    0xe05(%rip),%rax
mov    %rax,-0xa8(%rbp)
mov    -0xa8(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0xac(%rbp)
lea    0xdea(%rip),%rax
mov    %rax,-0xb8(%rbp)
mov    -0xb8(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0xbc(%rbp)
lea    0xdce(%rip),%rax
mov    %rax,-0xc8(%rbp)
mov    -0xc8(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0xcc(%rbp)
lea    0xdb3(%rip),%rax
mov    %rax,-0xd8(%rbp)
mov    -0xd8(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0xdc(%rbp)
lea    0xd9a(%rip),%rax
mov    %rax,-0xe8(%rbp)
mov    -0xe8(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0xec(%rbp)
lea    0xd7d(%rip),%rax
mov    %rax,-0xf8(%rbp)
mov    -0xf8(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0xfc(%rbp)
lea    0xd63(%rip),%rax
mov    %rax,-0x108(%rbp)
mov    -0x108(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x10c(%rbp)
cmpq   $0x0,-0x10(%rbp)
jne    130c <isExpressionKeyword+0x1dc>
movl   $0x0,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0x28(%rbp),%rsi
mov    -0x2c(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1362 <isExpressionKeyword+0x232>
cmpq   $0x0,-0x18(%rbp)
je     133e <isExpressionKeyword+0x20e>
mov    -0x18(%rbp),%rdi
mov    -0x28(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0x2c(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0x38(%rbp),%rsi
mov    -0x3c(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    13b8 <isExpressionKeyword+0x288>
cmpq   $0x0,-0x18(%rbp)
je     1394 <isExpressionKeyword+0x264>
mov    -0x18(%rbp),%rdi
mov    -0x38(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0x3c(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0x48(%rbp),%rsi
mov    -0x4c(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    140e <isExpressionKeyword+0x2de>
cmpq   $0x0,-0x18(%rbp)
je     13ea <isExpressionKeyword+0x2ba>
mov    -0x18(%rbp),%rdi
mov    -0x48(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0x4c(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0x58(%rbp),%rsi
mov    -0x5c(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1464 <isExpressionKeyword+0x334>
cmpq   $0x0,-0x18(%rbp)
je     1440 <isExpressionKeyword+0x310>
mov    -0x18(%rbp),%rdi
mov    -0x58(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0x5c(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0x68(%rbp),%rsi
mov    -0x6c(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    14ba <isExpressionKeyword+0x38a>
cmpq   $0x0,-0x18(%rbp)
je     1496 <isExpressionKeyword+0x366>
mov    -0x18(%rbp),%rdi
mov    -0x68(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0x6c(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0x78(%rbp),%rsi
mov    -0x7c(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1510 <isExpressionKeyword+0x3e0>
cmpq   $0x0,-0x18(%rbp)
je     14ec <isExpressionKeyword+0x3bc>
mov    -0x18(%rbp),%rdi
mov    -0x78(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0x7c(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0x88(%rbp),%rsi
mov    -0x8c(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1572 <isExpressionKeyword+0x442>
cmpq   $0x0,-0x18(%rbp)
je     154b <isExpressionKeyword+0x41b>
mov    -0x18(%rbp),%rdi
mov    -0x88(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0x8c(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0x98(%rbp),%rsi
mov    -0x9c(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    15d4 <isExpressionKeyword+0x4a4>
cmpq   $0x0,-0x18(%rbp)
je     15ad <isExpressionKeyword+0x47d>
mov    -0x18(%rbp),%rdi
mov    -0x98(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0x9c(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0xa8(%rbp),%rsi
mov    -0xac(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1636 <isExpressionKeyword+0x506>
cmpq   $0x0,-0x18(%rbp)
je     160f <isExpressionKeyword+0x4df>
mov    -0x18(%rbp),%rdi
mov    -0xa8(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0xac(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0xb8(%rbp),%rsi
mov    -0xbc(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1698 <isExpressionKeyword+0x568>
cmpq   $0x0,-0x18(%rbp)
je     1671 <isExpressionKeyword+0x541>
mov    -0x18(%rbp),%rdi
mov    -0xb8(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0xbc(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0xc8(%rbp),%rsi
mov    -0xcc(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    16fa <isExpressionKeyword+0x5ca>
cmpq   $0x0,-0x18(%rbp)
je     16d3 <isExpressionKeyword+0x5a3>
mov    -0x18(%rbp),%rdi
mov    -0xc8(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0xcc(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0xd8(%rbp),%rsi
mov    -0xdc(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    175c <isExpressionKeyword+0x62c>
cmpq   $0x0,-0x18(%rbp)
je     1735 <isExpressionKeyword+0x605>
mov    -0x18(%rbp),%rdi
mov    -0xd8(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0xdc(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0xe8(%rbp),%rsi
mov    -0xec(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    17be <isExpressionKeyword+0x68e>
cmpq   $0x0,-0x18(%rbp)
je     1797 <isExpressionKeyword+0x667>
mov    -0x18(%rbp),%rdi
mov    -0xe8(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0xec(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0xf8(%rbp),%rsi
mov    -0xfc(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1820 <isExpressionKeyword+0x6f0>
cmpq   $0x0,-0x18(%rbp)
je     17f9 <isExpressionKeyword+0x6c9>
mov    -0x18(%rbp),%rdi
mov    -0xf8(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0xfc(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
mov    -0x10(%rbp),%rdi
mov    -0x108(%rbp),%rsi
mov    -0x10c(%rbp),%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1882 <isExpressionKeyword+0x752>
cmpq   $0x0,-0x18(%rbp)
je     185b <isExpressionKeyword+0x72b>
mov    -0x18(%rbp),%rdi
mov    -0x108(%rbp),%rsi
call   1040 <strcpy@plt>
mov    -0x10c(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
jmp    1889 <isExpressionKeyword+0x759>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<isExpressionKeyword>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %rsi,(%rsp)
mov    %rdi,%r15
lea    0xef8(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%r12d
lea    0xea5(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ebp
lea    0xe9e(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%r13d
lea    0xe92(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%r14d
lea    0xe88(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,0x34(%rsp)
lea    0xe7e(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,0x30(%rsp)
lea    0xe73(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,0x2c(%rsp)
lea    0xe67(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,0x28(%rsp)
lea    0xe5a(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,0x24(%rsp)
lea    0xe4f(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,0x20(%rsp)
lea    0xe43(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,0x1c(%rsp)
lea    0xe38(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,0x18(%rsp)
lea    0xe2f(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,0x14(%rsp)
lea    0xe22(%rip),%rdi
call   1050 <strlen@plt>
mov    %eax,%ebx
lea    0xe1a(%rip),%rdi
call   1050 <strlen@plt>
test   %r15,%r15
je     1439 <isExpressionKeyword+0x309>
mov    %ebx,0x10(%rsp)
mov    %eax,0xc(%rsp)
lea    0xe02(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    %r12d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     144b <isExpressionKeyword+0x31b>
lea    0xda0(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    %ebp,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     143e <isExpressionKeyword+0x30e>
lea    0xd8a(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    %r13d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1443 <isExpressionKeyword+0x313>
lea    0xd6f(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    %r14d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1448 <isExpressionKeyword+0x318>
lea    0xd56(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    0x34(%rsp),%r12d
mov    %r12d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     144b <isExpressionKeyword+0x31b>
lea    0xd39(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    0x30(%rsp),%r12d
mov    %r12d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     144b <isExpressionKeyword+0x31b>
lea    0xd1b(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    0x2c(%rsp),%r12d
mov    %r12d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     144b <isExpressionKeyword+0x31b>
lea    0xcfc(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    0x28(%rsp),%r12d
mov    %r12d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     144b <isExpressionKeyword+0x31b>
lea    0xcdc(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    0x24(%rsp),%r12d
mov    %r12d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     144b <isExpressionKeyword+0x31b>
lea    0xcbe(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    0x20(%rsp),%r12d
mov    %r12d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     144b <isExpressionKeyword+0x31b>
lea    0xc9f(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    0x1c(%rsp),%r12d
mov    %r12d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     144b <isExpressionKeyword+0x31b>
lea    0xc81(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    0x18(%rsp),%r12d
mov    %r12d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     144b <isExpressionKeyword+0x31b>
lea    0xc65(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    0x14(%rsp),%r12d
mov    %r12d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     144b <isExpressionKeyword+0x31b>
lea    0xc49(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    0x10(%rsp),%r12d
mov    %r12d,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     144b <isExpressionKeyword+0x31b>
lea    0xc30(%rip),%rbx
mov    %r15,%rdi
mov    %rbx,%rsi
mov    0xc(%rsp),%ebp
mov    %ebp,%edx
call   1030 <strncmp@plt>
mov    $0x0,%r12d
test   %rax,%rax
mov    (%rsp),%rdi
jne    145c <isExpressionKeyword+0x32c>
mov    %ebp,%r12d
test   %rdi,%rdi
jne    1454 <isExpressionKeyword+0x324>
jmp    145c <isExpressionKeyword+0x32c>
xor    %r12d,%r12d
jmp    145c <isExpressionKeyword+0x32c>
mov    %ebp,%r12d
jmp    144b <isExpressionKeyword+0x31b>
mov    %r13d,%r12d
jmp    144b <isExpressionKeyword+0x31b>
mov    %r14d,%r12d
mov    (%rsp),%rdi
test   %rdi,%rdi
je     145c <isExpressionKeyword+0x32c>
mov    %rbx,%rsi
call   1040 <strcpy@plt>
mov    %r12d,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [6 x i8] c"quote\00"
@.str.1 = [7 x i8] c"lambda\00"
@.str.2 = [3 x i8] c"if\00"
@.str.3 = [5 x i8] c"set!\00"
@.str.4 = [6 x i8] c"begin\00"
@.str.5 = [5 x i8] c"cond\00"
@.str.6 = [4 x i8] c"and\00"
@.str.7 = [3 x i8] c"or\00"
@.str.8 = [5 x i8] c"case\00"
@.str.9 = [4 x i8] c"let\00"
@.str.10 = [5 x i8] c"let*\00"
@.str.11 = [7 x i8] c"letrec\00"
@.str.12 = [3 x i8] c"do\00"
@.str.13 = [6 x i8] c"delay\00"
@.str.14 = [11 x i8] c"quasiquote\00"
define i32 @isExpressionKeyword(i8* %0, i8* %1) {
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i8*
%10 = alloca i32
%11 = alloca i8*
%12 = alloca i32
%13 = alloca i8*
%14 = alloca i32
%15 = alloca i8*
%16 = alloca i32
%17 = alloca i8*
%18 = alloca i32
%19 = alloca i8*
%20 = alloca i32
%21 = alloca i8*
%22 = alloca i32
%23 = alloca i8*
%24 = alloca i32
%25 = alloca i8*
%26 = alloca i32
%27 = alloca i8*
%28 = alloca i32
%29 = alloca i8*
%30 = alloca i32
%31 = alloca i8*
%32 = alloca i32
%33 = alloca i8*
%34 = alloca i32
%35 = alloca i8*
%36 = alloca i32
store i8* %0, i8** %4
store i8* %1, i8** %5
%37 = load i8*, i8** %4
store i8* %37, i8** %6
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0), i8** %7
%38 = load i8*, i8** %7
%39 = call i32 @strlen(i8* %38)
store i32 %39, i32* %8
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i8** %9
%40 = load i8*, i8** %9
%41 = call i32 @strlen(i8* %40)
store i32 %41, i32* %10
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i8** %11
%42 = load i8*, i8** %11
%43 = call i32 @strlen(i8* %42)
store i32 %43, i32* %12
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i8** %13
%44 = load i8*, i8** %13
%45 = call i32 @strlen(i8* %44)
store i32 %45, i32* %14
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0), i8** %15
%46 = load i8*, i8** %15
%47 = call i32 @strlen(i8* %46)
store i32 %47, i32* %16
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0), i8** %17
%48 = load i8*, i8** %17
%49 = call i32 @strlen(i8* %48)
store i32 %49, i32* %18
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0), i8** %19
%50 = load i8*, i8** %19
%51 = call i32 @strlen(i8* %50)
store i32 %51, i32* %20
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i8** %21
%52 = load i8*, i8** %21
%53 = call i32 @strlen(i8* %52)
store i32 %53, i32* %22
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0), i8** %23
%54 = load i8*, i8** %23
%55 = call i32 @strlen(i8* %54)
store i32 %55, i32* %24
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i64 0, i64 0), i8** %25
%56 = load i8*, i8** %25
%57 = call i32 @strlen(i8* %56)
store i32 %57, i32* %26
store i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0), i8** %27
%58 = load i8*, i8** %27
%59 = call i32 @strlen(i8* %58)
store i32 %59, i32* %28
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i64 0, i64 0), i8** %29
%60 = load i8*, i8** %29
%61 = call i32 @strlen(i8* %60)
store i32 %61, i32* %30
store i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0), i8** %31
%62 = load i8*, i8** %31
%63 = call i32 @strlen(i8* %62)
store i32 %63, i32* %32
store i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i8** %33
%64 = load i8*, i8** %33
%65 = call i32 @strlen(i8* %64)
store i32 %65, i32* %34
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.14, i64 0, i64 0), i8** %35
%66 = load i8*, i8** %35
%67 = call i32 @strlen(i8* %66)
store i32 %67, i32* %36
%68 = load i8*, i8** %4
%69 = icmp eq i8* %68, null
br i1 %69, label %70, label %71
70: ; preds = %2
store i32 0, i32* %3
br label %432
71: ; preds = %2
%72 = load i8*, i8** %4
%73 = load i8*, i8** %7
%74 = load i32, i32* %8
%75 = call i64 @strncmp(i8* %72, i8* %73, i32 %74)
%76 = icmp eq i64 %75, 0
br i1 %76, label %77, label %95
77: ; preds = %71
%78 = load i8*, i8** %5
%79 = icmp ne i8* %78, null
br i1 %79, label %80, label %84
80: ; preds = %77
%81 = load i8*, i8** %5
%82 = load i8*, i8** %7
%83 = call i32 @strcpy(i8* %81, i8* %82)
br label %84
84: ; preds = %80, %77
%85 = load i32, i32* %8
%86 = load i8*, i8** %4
%87 = sext i32 %85 to i64
%88 = getelementptr inbounds i8, i8* %86, i64 %87
store i8* %88, i8** %4
%89 = load i8*, i8** %4
%90 = load i8*, i8** %6
%91 = ptrtoint i8* %89 to i64
%92 = ptrtoint i8* %90 to i64
%93 = sub i64 %91, %92
%94 = trunc i64 %93 to i32
store i32 %94, i32* %3
br label %432
95: ; preds = %71
%96 = load i8*, i8** %4
%97 = load i8*, i8** %9
%98 = load i32, i32* %10
%99 = call i64 @strncmp(i8* %96, i8* %97, i32 %98)
%100 = icmp eq i64 %99, 0
br i1 %100, label %101, label %119
101: ; preds = %95
%102 = load i8*, i8** %5
%103 = icmp ne i8* %102, null
br i1 %103, label %104, label %108
104: ; preds = %101
%105 = load i8*, i8** %5
%106 = load i8*, i8** %9
%107 = call i32 @strcpy(i8* %105, i8* %106)
br label %108
108: ; preds = %104, %101
%109 = load i32, i32* %10
%110 = load i8*, i8** %4
%111 = sext i32 %109 to i64
%112 = getelementptr inbounds i8, i8* %110, i64 %111
store i8* %112, i8** %4
%113 = load i8*, i8** %4
%114 = load i8*, i8** %6
%115 = ptrtoint i8* %113 to i64
%116 = ptrtoint i8* %114 to i64
%117 = sub i64 %115, %116
%118 = trunc i64 %117 to i32
store i32 %118, i32* %3
br label %432
119: ; preds = %95
%120 = load i8*, i8** %4
%121 = load i8*, i8** %11
%122 = load i32, i32* %12
%123 = call i64 @strncmp(i8* %120, i8* %121, i32 %122)
%124 = icmp eq i64 %123, 0
br i1 %124, label %125, label %143
125: ; preds = %119
%126 = load i8*, i8** %5
%127 = icmp ne i8* %126, null
br i1 %127, label %128, label %132
128: ; preds = %125
%129 = load i8*, i8** %5
%130 = load i8*, i8** %11
%131 = call i32 @strcpy(i8* %129, i8* %130)
br label %132
132: ; preds = %128, %125
%133 = load i32, i32* %12
%134 = load i8*, i8** %4
%135 = sext i32 %133 to i64
%136 = getelementptr inbounds i8, i8* %134, i64 %135
store i8* %136, i8** %4
%137 = load i8*, i8** %4
%138 = load i8*, i8** %6
%139 = ptrtoint i8* %137 to i64
%140 = ptrtoint i8* %138 to i64
%141 = sub i64 %139, %140
%142 = trunc i64 %141 to i32
store i32 %142, i32* %3
br label %432
143: ; preds = %119
%144 = load i8*, i8** %4
%145 = load i8*, i8** %13
%146 = load i32, i32* %14
%147 = call i64 @strncmp(i8* %144, i8* %145, i32 %146)
%148 = icmp eq i64 %147, 0
br i1 %148, label %149, label %167
149: ; preds = %143
%150 = load i8*, i8** %5
%151 = icmp ne i8* %150, null
br i1 %151, label %152, label %156
152: ; preds = %149
%153 = load i8*, i8** %5
%154 = load i8*, i8** %13
%155 = call i32 @strcpy(i8* %153, i8* %154)
br label %156
156: ; preds = %152, %149
%157 = load i32, i32* %14
%158 = load i8*, i8** %4
%159 = sext i32 %157 to i64
%160 = getelementptr inbounds i8, i8* %158, i64 %159
store i8* %160, i8** %4
%161 = load i8*, i8** %4
%162 = load i8*, i8** %6
%163 = ptrtoint i8* %161 to i64
%164 = ptrtoint i8* %162 to i64
%165 = sub i64 %163, %164
%166 = trunc i64 %165 to i32
store i32 %166, i32* %3
br label %432
167: ; preds = %143
%168 = load i8*, i8** %4
%169 = load i8*, i8** %15
%170 = load i32, i32* %16
%171 = call i64 @strncmp(i8* %168, i8* %169, i32 %170)
%172 = icmp eq i64 %171, 0
br i1 %172, label %173, label %191
173: ; preds = %167
%174 = load i8*, i8** %5
%175 = icmp ne i8* %174, null
br i1 %175, label %176, label %180
176: ; preds = %173
%177 = load i8*, i8** %5
%178 = load i8*, i8** %15
%179 = call i32 @strcpy(i8* %177, i8* %178)
br label %180
180: ; preds = %176, %173
%181 = load i32, i32* %16
%182 = load i8*, i8** %4
%183 = sext i32 %181 to i64
%184 = getelementptr inbounds i8, i8* %182, i64 %183
store i8* %184, i8** %4
%185 = load i8*, i8** %4
%186 = load i8*, i8** %6
%187 = ptrtoint i8* %185 to i64
%188 = ptrtoint i8* %186 to i64
%189 = sub i64 %187, %188
%190 = trunc i64 %189 to i32
store i32 %190, i32* %3
br label %432
191: ; preds = %167
%192 = load i8*, i8** %4
%193 = load i8*, i8** %17
%194 = load i32, i32* %18
%195 = call i64 @strncmp(i8* %192, i8* %193, i32 %194)
%196 = icmp eq i64 %195, 0
br i1 %196, label %197, label %215
197: ; preds = %191
%198 = load i8*, i8** %5
%199 = icmp ne i8* %198, null
br i1 %199, label %200, label %204
200: ; preds = %197
%201 = load i8*, i8** %5
%202 = load i8*, i8** %17
%203 = call i32 @strcpy(i8* %201, i8* %202)
br label %204
204: ; preds = %200, %197
%205 = load i32, i32* %18
%206 = load i8*, i8** %4
%207 = sext i32 %205 to i64
%208 = getelementptr inbounds i8, i8* %206, i64 %207
store i8* %208, i8** %4
%209 = load i8*, i8** %4
%210 = load i8*, i8** %6
%211 = ptrtoint i8* %209 to i64
%212 = ptrtoint i8* %210 to i64
%213 = sub i64 %211, %212
%214 = trunc i64 %213 to i32
store i32 %214, i32* %3
br label %432
215: ; preds = %191
%216 = load i8*, i8** %4
%217 = load i8*, i8** %19
%218 = load i32, i32* %20
%219 = call i64 @strncmp(i8* %216, i8* %217, i32 %218)
%220 = icmp eq i64 %219, 0
br i1 %220, label %221, label %239
221: ; preds = %215
%222 = load i8*, i8** %5
%223 = icmp ne i8* %222, null
br i1 %223, label %224, label %228
224: ; preds = %221
%225 = load i8*, i8** %5
%226 = load i8*, i8** %19
%227 = call i32 @strcpy(i8* %225, i8* %226)
br label %228
228: ; preds = %224, %221
%229 = load i32, i32* %20
%230 = load i8*, i8** %4
%231 = sext i32 %229 to i64
%232 = getelementptr inbounds i8, i8* %230, i64 %231
store i8* %232, i8** %4
%233 = load i8*, i8** %4
%234 = load i8*, i8** %6
%235 = ptrtoint i8* %233 to i64
%236 = ptrtoint i8* %234 to i64
%237 = sub i64 %235, %236
%238 = trunc i64 %237 to i32
store i32 %238, i32* %3
br label %432
239: ; preds = %215
%240 = load i8*, i8** %4
%241 = load i8*, i8** %21
%242 = load i32, i32* %22
%243 = call i64 @strncmp(i8* %240, i8* %241, i32 %242)
%244 = icmp eq i64 %243, 0
br i1 %244, label %245, label %263
245: ; preds = %239
%246 = load i8*, i8** %5
%247 = icmp ne i8* %246, null
br i1 %247, label %248, label %252
248: ; preds = %245
%249 = load i8*, i8** %5
%250 = load i8*, i8** %21
%251 = call i32 @strcpy(i8* %249, i8* %250)
br label %252
252: ; preds = %248, %245
%253 = load i32, i32* %22
%254 = load i8*, i8** %4
%255 = sext i32 %253 to i64
%256 = getelementptr inbounds i8, i8* %254, i64 %255
store i8* %256, i8** %4
%257 = load i8*, i8** %4
%258 = load i8*, i8** %6
%259 = ptrtoint i8* %257 to i64
%260 = ptrtoint i8* %258 to i64
%261 = sub i64 %259, %260
%262 = trunc i64 %261 to i32
store i32 %262, i32* %3
br label %432
263: ; preds = %239
%264 = load i8*, i8** %4
%265 = load i8*, i8** %23
%266 = load i32, i32* %24
%267 = call i64 @strncmp(i8* %264, i8* %265, i32 %266)
%268 = icmp eq i64 %267, 0
br i1 %268, label %269, label %287
269: ; preds = %263
%270 = load i8*, i8** %5
%271 = icmp ne i8* %270, null
br i1 %271, label %272, label %276
272: ; preds = %269
%273 = load i8*, i8** %5
%274 = load i8*, i8** %23
%275 = call i32 @strcpy(i8* %273, i8* %274)
br label %276
276: ; preds = %272, %269
%277 = load i32, i32* %24
%278 = load i8*, i8** %4
%279 = sext i32 %277 to i64
%280 = getelementptr inbounds i8, i8* %278, i64 %279
store i8* %280, i8** %4
%281 = load i8*, i8** %4
%282 = load i8*, i8** %6
%283 = ptrtoint i8* %281 to i64
%284 = ptrtoint i8* %282 to i64
%285 = sub i64 %283, %284
%286 = trunc i64 %285 to i32
store i32 %286, i32* %3
br label %432
287: ; preds = %263
%288 = load i8*, i8** %4
%289 = load i8*, i8** %25
%290 = load i32, i32* %26
%291 = call i64 @strncmp(i8* %288, i8* %289, i32 %290)
%292 = icmp eq i64 %291, 0
br i1 %292, label %293, label %311
293: ; preds = %287
%294 = load i8*, i8** %5
%295 = icmp ne i8* %294, null
br i1 %295, label %296, label %300
296: ; preds = %293
%297 = load i8*, i8** %5
%298 = load i8*, i8** %25
%299 = call i32 @strcpy(i8* %297, i8* %298)
br label %300
300: ; preds = %296, %293
%301 = load i32, i32* %26
%302 = load i8*, i8** %4
%303 = sext i32 %301 to i64
%304 = getelementptr inbounds i8, i8* %302, i64 %303
store i8* %304, i8** %4
%305 = load i8*, i8** %4
%306 = load i8*, i8** %6
%307 = ptrtoint i8* %305 to i64
%308 = ptrtoint i8* %306 to i64
%309 = sub i64 %307, %308
%310 = trunc i64 %309 to i32
store i32 %310, i32* %3
br label %432
311: ; preds = %287
%312 = load i8*, i8** %4
%313 = load i8*, i8** %27
%314 = load i32, i32* %28
%315 = call i64 @strncmp(i8* %312, i8* %313, i32 %314)
%316 = icmp eq i64 %315, 0
br i1 %316, label %317, label %335
317: ; preds = %311
%318 = load i8*, i8** %5
%319 = icmp ne i8* %318, null
br i1 %319, label %320, label %324
320: ; preds = %317
%321 = load i8*, i8** %5
%322 = load i8*, i8** %27
%323 = call i32 @strcpy(i8* %321, i8* %322)
br label %324
324: ; preds = %320, %317
%325 = load i32, i32* %28
%326 = load i8*, i8** %4
%327 = sext i32 %325 to i64
%328 = getelementptr inbounds i8, i8* %326, i64 %327
store i8* %328, i8** %4
%329 = load i8*, i8** %4
%330 = load i8*, i8** %6
%331 = ptrtoint i8* %329 to i64
%332 = ptrtoint i8* %330 to i64
%333 = sub i64 %331, %332
%334 = trunc i64 %333 to i32
store i32 %334, i32* %3
br label %432
335: ; preds = %311
%336 = load i8*, i8** %4
%337 = load i8*, i8** %29
%338 = load i32, i32* %30
%339 = call i64 @strncmp(i8* %336, i8* %337, i32 %338)
%340 = icmp eq i64 %339, 0
br i1 %340, label %341, label %359
341: ; preds = %335
%342 = load i8*, i8** %5
%343 = icmp ne i8* %342, null
br i1 %343, label %344, label %348
344: ; preds = %341
%345 = load i8*, i8** %5
%346 = load i8*, i8** %29
%347 = call i32 @strcpy(i8* %345, i8* %346)
br label %348
348: ; preds = %344, %341
%349 = load i32, i32* %30
%350 = load i8*, i8** %4
%351 = sext i32 %349 to i64
%352 = getelementptr inbounds i8, i8* %350, i64 %351
store i8* %352, i8** %4
%353 = load i8*, i8** %4
%354 = load i8*, i8** %6
%355 = ptrtoint i8* %353 to i64
%356 = ptrtoint i8* %354 to i64
%357 = sub i64 %355, %356
%358 = trunc i64 %357 to i32
store i32 %358, i32* %3
br label %432
359: ; preds = %335
%360 = load i8*, i8** %4
%361 = load i8*, i8** %31
%362 = load i32, i32* %32
%363 = call i64 @strncmp(i8* %360, i8* %361, i32 %362)
%364 = icmp eq i64 %363, 0
br i1 %364, label %365, label %383
365: ; preds = %359
%366 = load i8*, i8** %5
%367 = icmp ne i8* %366, null
br i1 %367, label %368, label %372
368: ; preds = %365
%369 = load i8*, i8** %5
%370 = load i8*, i8** %31
%371 = call i32 @strcpy(i8* %369, i8* %370)
br label %372
372: ; preds = %368, %365
%373 = load i32, i32* %32
%374 = load i8*, i8** %4
%375 = sext i32 %373 to i64
%376 = getelementptr inbounds i8, i8* %374, i64 %375
store i8* %376, i8** %4
%377 = load i8*, i8** %4
%378 = load i8*, i8** %6
%379 = ptrtoint i8* %377 to i64
%380 = ptrtoint i8* %378 to i64
%381 = sub i64 %379, %380
%382 = trunc i64 %381 to i32
store i32 %382, i32* %3
br label %432
383: ; preds = %359
%384 = load i8*, i8** %4
%385 = load i8*, i8** %33
%386 = load i32, i32* %34
%387 = call i64 @strncmp(i8* %384, i8* %385, i32 %386)
%388 = icmp eq i64 %387, 0
br i1 %388, label %389, label %407
389: ; preds = %383
%390 = load i8*, i8** %5
%391 = icmp ne i8* %390, null
br i1 %391, label %392, label %396
392: ; preds = %389
%393 = load i8*, i8** %5
%394 = load i8*, i8** %33
%395 = call i32 @strcpy(i8* %393, i8* %394)
br label %396
396: ; preds = %392, %389
%397 = load i32, i32* %34
%398 = load i8*, i8** %4
%399 = sext i32 %397 to i64
%400 = getelementptr inbounds i8, i8* %398, i64 %399
store i8* %400, i8** %4
%401 = load i8*, i8** %4
%402 = load i8*, i8** %6
%403 = ptrtoint i8* %401 to i64
%404 = ptrtoint i8* %402 to i64
%405 = sub i64 %403, %404
%406 = trunc i64 %405 to i32
store i32 %406, i32* %3
br label %432
407: ; preds = %383
%408 = load i8*, i8** %4
%409 = load i8*, i8** %35
%410 = load i32, i32* %36
%411 = call i64 @strncmp(i8* %408, i8* %409, i32 %410)
%412 = icmp eq i64 %411, 0
br i1 %412, label %413, label %431
413: ; preds = %407
%414 = load i8*, i8** %5
%415 = icmp ne i8* %414, null
br i1 %415, label %416, label %420
416: ; preds = %413
%417 = load i8*, i8** %5
%418 = load i8*, i8** %35
%419 = call i32 @strcpy(i8* %417, i8* %418)
br label %420
420: ; preds = %416, %413
%421 = load i32, i32* %36
%422 = load i8*, i8** %4
%423 = sext i32 %421 to i64
%424 = getelementptr inbounds i8, i8* %422, i64 %423
store i8* %424, i8** %4
%425 = load i8*, i8** %4
%426 = load i8*, i8** %6
%427 = ptrtoint i8* %425 to i64
%428 = ptrtoint i8* %426 to i64
%429 = sub i64 %427, %428
%430 = trunc i64 %429 to i32
store i32 %430, i32* %3
br label %432
431: ; preds = %407
store i32 0, i32* %3
br label %432
432: ; preds = %431, %420, %396, %372, %348, %324, %300, %276, %252, %228, %204, %180, %156, %132, %108, %84, %70
%433 = load i32, i32* %3
ret i32 %433
}

LLVM IR (-O2):
@.str = [6 x i8] c"quote\00"
@.str.1 = [7 x i8] c"lambda\00"
@.str.2 = [3 x i8] c"if\00"
@.str.3 = [5 x i8] c"set!\00"
@.str.4 = [6 x i8] c"begin\00"
@.str.5 = [5 x i8] c"cond\00"
@.str.6 = [4 x i8] c"and\00"
@.str.7 = [3 x i8] c"or\00"
@.str.8 = [5 x i8] c"case\00"
@.str.9 = [4 x i8] c"let\00"
@.str.10 = [5 x i8] c"let*\00"
@.str.11 = [7 x i8] c"letrec\00"
@.str.12 = [3 x i8] c"do\00"
@.str.13 = [6 x i8] c"delay\00"
@.str.14 = [11 x i8] c"quasiquote\00"
define i32 @isExpressionKeyword(i8* %0, i8* %1) {
%3 = tail call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0))
%4 = tail call i32 @strlen(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0))
%5 = tail call i32 @strlen(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
%6 = tail call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%7 = tail call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0))
%8 = tail call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
%9 = tail call i32 @strlen(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%10 = tail call i32 @strlen(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0))
%11 = tail call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0))
%12 = tail call i32 @strlen(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i64 0, i64 0))
%13 = tail call i32 @strlen(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
%14 = tail call i32 @strlen(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i64 0, i64 0))
%15 = tail call i32 @strlen(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0))
%16 = tail call i32 @strlen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0))
%17 = tail call i32 @strlen(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.14, i64 0, i64 0))
%18 = icmp eq i8* %0, null
br i1 %18, label %98, label %19
19: ; preds = %2
%20 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0), i32 %3)
%21 = icmp eq i64 %20, 0
br i1 %21, label %22, label %24
22: ; preds = %19
%23 = icmp eq i8* %1, null
br i1 %23, label %98, label %94
24: ; preds = %19
%25 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i32 %4)
%26 = icmp eq i64 %25, 0
br i1 %26, label %27, label %29
27: ; preds = %24
%28 = icmp eq i8* %1, null
br i1 %28, label %98, label %94
29: ; preds = %24
%30 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 %5)
%31 = icmp eq i64 %30, 0
br i1 %31, label %32, label %34
32: ; preds = %29
%33 = icmp eq i8* %1, null
br i1 %33, label %98, label %94
34: ; preds = %29
%35 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i32 %6)
%36 = icmp eq i64 %35, 0
br i1 %36, label %37, label %39
37: ; preds = %34
%38 = icmp eq i8* %1, null
br i1 %38, label %98, label %94
39: ; preds = %34
%40 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0), i32 %7)
%41 = icmp eq i64 %40, 0
br i1 %41, label %42, label %44
42: ; preds = %39
%43 = icmp eq i8* %1, null
br i1 %43, label %98, label %94
44: ; preds = %39
%45 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0), i32 %8)
%46 = icmp eq i64 %45, 0
br i1 %46, label %47, label %49
47: ; preds = %44
%48 = icmp eq i8* %1, null
br i1 %48, label %98, label %94
49: ; preds = %44
%50 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0), i32 %9)
%51 = icmp eq i64 %50, 0
br i1 %51, label %52, label %54
52: ; preds = %49
%53 = icmp eq i8* %1, null
br i1 %53, label %98, label %94
54: ; preds = %49
%55 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), i32 %10)
%56 = icmp eq i64 %55, 0
br i1 %56, label %57, label %59
57: ; preds = %54
%58 = icmp eq i8* %1, null
br i1 %58, label %98, label %94
59: ; preds = %54
%60 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0), i32 %11)
%61 = icmp eq i64 %60, 0
br i1 %61, label %62, label %64
62: ; preds = %59
%63 = icmp eq i8* %1, null
br i1 %63, label %98, label %94
64: ; preds = %59
%65 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i64 0, i64 0), i32 %12)
%66 = icmp eq i64 %65, 0
br i1 %66, label %67, label %69
67: ; preds = %64
%68 = icmp eq i8* %1, null
br i1 %68, label %98, label %94
69: ; preds = %64
%70 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0), i32 %13)
%71 = icmp eq i64 %70, 0
br i1 %71, label %72, label %74
72: ; preds = %69
%73 = icmp eq i8* %1, null
br i1 %73, label %98, label %94
74: ; preds = %69
%75 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i64 0, i64 0), i32 %14)
%76 = icmp eq i64 %75, 0
br i1 %76, label %77, label %79
77: ; preds = %74
%78 = icmp eq i8* %1, null
br i1 %78, label %98, label %94
79: ; preds = %74
%80 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0), i32 %15)
%81 = icmp eq i64 %80, 0
br i1 %81, label %82, label %84
82: ; preds = %79
%83 = icmp eq i8* %1, null
br i1 %83, label %98, label %94
84: ; preds = %79
%85 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i32 %16)
%86 = icmp eq i64 %85, 0
br i1 %86, label %87, label %89
87: ; preds = %84
%88 = icmp eq i8* %1, null
br i1 %88, label %98, label %94
89: ; preds = %84
%90 = tail call i64 @strncmp(i8* %0, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.14, i64 0, i64 0), i32 %17)
%91 = icmp eq i64 %90, 0
br i1 %91, label %92, label %98
92: ; preds = %89
%93 = icmp eq i8* %1, null
br i1 %93, label %98, label %94
94: ; preds = %92, %87, %82, %77, %72, %67, %62, %57, %52, %47, %42, %37, %32, %27, %22
%95 = phi i8* [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0), %22 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), %27 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), %32 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), %37 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0), %42 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0), %47 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0), %52 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.7, i64 0, i64 0), %57 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0), %62 ], [ getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i64 0, i64 0), %67 ], [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0), %72 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i64 0, i64 0), %77 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0), %82 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), %87 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.14, i64 0, i64 0), %92 ]
%96 = phi i32 [ %3, %22 ], [ %4, %27 ], [ %5, %32 ], [ %6, %37 ], [ %7, %42 ], [ %8, %47 ], [ %9, %52 ], [ %10, %57 ], [ %11, %62 ], [ %12, %67 ], [ %13, %72 ], [ %14, %77 ], [ %15, %82 ], [ %16, %87 ], [ %17, %92 ]
%97 = tail call i32 @strcpy(i8* %1, i8* %95)
br label %98
98: ; preds = %94, %89, %92, %87, %82, %77, %72, %67, %62, %57, %52, %47, %42, %37, %32, %27, %22, %2
%99 = phi i32 [ 0, %2 ], [ %3, %22 ], [ %4, %27 ], [ %5, %32 ], [ %6, %37 ], [ %7, %42 ], [ %8, %47 ], [ %9, %52 ], [ %10, %57 ], [ %11, %62 ], [ %12, %67 ], [ %13, %72 ], [ %14, %77 ], [ %15, %82 ], [ %16, %87 ], [ %17, %92 ], [ 0, %89 ], [ %96, %94 ]
ret i32 %99
}