int get_token_bool(buffer, len, ptr, tokenbuf, tokenlen)
unsigned char *buffer, *tokenbuf;
int len, *ptr, *tokenlen;
{
  if ((*ptr >= len) || (buffer[*ptr] == '\n') || (buffer[*ptr] == '\0'))
    return 'e';
  while ((*ptr < len) && (buffer[*ptr] != '\n') && (buffer[*ptr] != '\0') &&
         ((buffer[*ptr] == ' ') || (buffer[*ptr] == '\t')))
    (*ptr)++;
  if ((*ptr >= len) || (buffer[*ptr] == '\n') || (buffer[*ptr] == '\0'))
    return 'e';
  if ((buffer[*ptr] == ',') || (buffer[*ptr] == ';') || (buffer[*ptr] == '~') ||
      (buffer[*ptr] == '{') || (buffer[*ptr] == '}')) {
    tokenbuf[0] = buffer[*ptr];
    *tokenlen = 1;
    return buffer[(*ptr)++];
  }
  *tokenlen = 0;
  if (buffer[*ptr] == '\\') {
    tokenbuf[(*tokenlen)++] = buffer[(*ptr)++];
    tokenbuf[(*tokenlen)++] = buffer[(*ptr)++];
  } else
    tokenbuf[(*tokenlen)++] = buffer[(*ptr)++];
  while ((*ptr < len) && (buffer[*ptr] != '\n') && (buffer[*ptr] != '\0') &&
         (buffer[*ptr] != ',') && (buffer[*ptr] != ';') &&
         (buffer[*ptr] != '~') && (buffer[*ptr] != '{') &&
         (buffer[*ptr] != '}')) {
    if (buffer[*ptr] == '\\') {
      tokenbuf[(*tokenlen)++] = buffer[(*ptr)++];
      tokenbuf[(*tokenlen)++] = buffer[(*ptr)++];
    } else
      tokenbuf[(*tokenlen)++] = buffer[(*ptr)++];
  }
  tokenbuf[*tokenlen] = '\0';
  return 'a';
}


x86 assembly (clang, -O0):
<get_token_bool>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
cmp    -0x14(%rbp),%eax
jge    1156 <get_token_bool+0x56>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     1156 <get_token_bool+0x56>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    1162 <get_token_bool+0x62>
movl   $0x65,-0x4(%rbp)
jmp    1573 <get_token_bool+0x473>
jmp    1167 <get_token_bool+0x67>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
xor    %eax,%eax
cmp    -0x14(%rbp),%ecx
mov    %al,-0x31(%rbp)
jge    11f0 <get_token_bool+0xf0>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xa,%ecx
mov    %al,-0x31(%rbp)
je     11f0 <get_token_bool+0xf0>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x31(%rbp)
je     11f0 <get_token_bool+0xf0>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%ecx
mov    $0x1,%al
cmp    $0x20,%ecx
mov    %al,-0x32(%rbp)
je     11ea <get_token_bool+0xea>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
sete   %al
mov    %al,-0x32(%rbp)
mov    -0x32(%rbp),%al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
test   $0x1,%al
jne    1200 <get_token_bool+0x100>
jmp    1210 <get_token_bool+0x110>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    1167 <get_token_bool+0x67>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
cmp    -0x14(%rbp),%eax
jge    124f <get_token_bool+0x14f>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     124f <get_token_bool+0x14f>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    125b <get_token_bool+0x15b>
movl   $0x65,-0x4(%rbp)
jmp    1573 <get_token_bool+0x473>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x2c,%eax
je     12d3 <get_token_bool+0x1d3>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x3b,%eax
je     12d3 <get_token_bool+0x1d3>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7e,%eax
je     12d3 <get_token_bool+0x1d3>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7b,%eax
je     12d3 <get_token_bool+0x1d3>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7d,%eax
jne    1311 <get_token_bool+0x211>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
mov    (%rax,%rcx,1),%cl
mov    -0x28(%rbp),%rax
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
movl   $0x1,(%rax)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rdx
mov    (%rdx),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,(%rdx)
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    %eax,-0x4(%rbp)
jmp    1573 <get_token_bool+0x473>
mov    -0x30(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x5c,%eax
jne    1394 <get_token_bool+0x294>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rdx
mov    (%rdx),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,(%rdx)
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rsi
mov    (%rsi),%ecx
mov    %ecx,%edi
add    $0x1,%edi
mov    %edi,(%rsi)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rdx
mov    (%rdx),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,(%rdx)
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rsi
mov    (%rsi),%ecx
mov    %ecx,%edi
add    $0x1,%edi
mov    %edi,(%rsi)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    13c2 <get_token_bool+0x2c2>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rdx
mov    (%rdx),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,(%rdx)
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rsi
mov    (%rsi),%ecx
mov    %ecx,%edi
add    $0x1,%edi
mov    %edi,(%rsi)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    13c7 <get_token_bool+0x2c7>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
xor    %eax,%eax
cmp    -0x14(%rbp),%ecx
mov    %al,-0x33(%rbp)
jge    14a1 <get_token_bool+0x3a1>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xa,%ecx
mov    %al,-0x33(%rbp)
je     14a1 <get_token_bool+0x3a1>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x33(%rbp)
je     14a1 <get_token_bool+0x3a1>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x2c,%ecx
mov    %al,-0x33(%rbp)
je     14a1 <get_token_bool+0x3a1>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x3b,%ecx
mov    %al,-0x33(%rbp)
je     14a1 <get_token_bool+0x3a1>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x7e,%ecx
mov    %al,-0x33(%rbp)
je     14a1 <get_token_bool+0x3a1>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x7b,%ecx
mov    %al,-0x33(%rbp)
je     14a1 <get_token_bool+0x3a1>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x7d,%eax
setne  %al
mov    %al,-0x33(%rbp)
mov    -0x33(%rbp),%al
test   $0x1,%al
jne    14b1 <get_token_bool+0x3b1>
jmp    155d <get_token_bool+0x45d>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movslq (%rcx),%rcx
movzbl (%rax,%rcx,1),%eax
cmp    $0x5c,%eax
jne    152a <get_token_bool+0x42a>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rdx
mov    (%rdx),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,(%rdx)
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rsi
mov    (%rsi),%ecx
mov    %ecx,%edi
add    $0x1,%edi
mov    %edi,(%rsi)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rdx
mov    (%rdx),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,(%rdx)
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rsi
mov    (%rsi),%ecx
mov    %ecx,%edi
add    $0x1,%edi
mov    %edi,(%rsi)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1558 <get_token_bool+0x458>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rdx
mov    (%rdx),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,(%rdx)
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rsi
mov    (%rsi),%ecx
mov    %ecx,%edi
add    $0x1,%edi
mov    %edi,(%rsi)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
jmp    13c7 <get_token_bool+0x2c7>
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%rcx
movslq (%rcx),%rcx
movb   $0x0,(%rax,%rcx,1)
movl   $0x61,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_token_bool>:
push   %r14
push   %rbx
movslq (%rdx),%rbx
mov    $0x65,%eax
cmp    %esi,%ebx
jge    111e <get_token_bool+0x1e>
mov    (%rdi,%rbx,1),%r11b
test   %r11b,%r11b
je     111e <get_token_bool+0x1e>
cmp    $0xa,%r11b
jne    1122 <get_token_bool+0x22>
pop    %rbx
pop    %r14
ret
lea    (%rbx,%rdi,1),%r10
add    $0x1,%r10
mov    %rbx,%r9
shl    $0x20,%r9
add    $0x1,%ebx
movabs $0x100000000,%r14
cmp    $0x20,%r11b
je     1156 <get_token_bool+0x56>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    $0x9,%r11b
jne    1172 <get_token_bool+0x72>
mov    %ebx,(%rdx)
cmp    %ebx,%esi
je     111e <get_token_bool+0x1e>
movzbl (%r10),%r11d
add    %r14,%r9
add    $0x1,%r10
add    $0x1,%ebx
cmp    $0x20,%r11b
jne    1150 <get_token_bool+0x50>
jmp    1156 <get_token_bool+0x56>
sar    $0x20,%r9
mov    (%rdi,%r9,1),%bl
cmp    $0x3a,%bl
jle    11a9 <get_token_bool+0xa9>
lea    -0x7b(%rbx),%eax
cmp    $0x3,%al
ja     118a <get_token_bool+0x8a>
cmp    $0x1,%al
jne    118f <get_token_bool+0x8f>
cmp    $0x3b,%bl
jne    11bf <get_token_bool+0xbf>
mov    %bl,(%rcx)
movl   $0x1,(%r8)
movslq (%rdx),%rax
lea    0x1(%rax),%ecx
mov    %ecx,(%rdx)
movzbl (%rdi,%rax,1),%eax
jmp    111e <get_token_bool+0x1e>
test   %bl,%bl
je     111e <get_token_bool+0x1e>
cmp    $0xa,%bl
je     111e <get_token_bool+0x1e>
cmp    $0x2c,%bl
je     118f <get_token_bool+0x8f>
movl   $0x0,(%r8)
movslq (%rdx),%rax
mov    (%rdi,%rax,1),%r9b
lea    0x1(%rax),%ebx
mov    %ebx,(%rdx)
movslq (%r8),%rbx
lea    0x1(%rbx),%r10d
mov    (%rdi,%rax,1),%al
mov    %r10d,(%r8)
mov    %al,(%rcx,%rbx,1)
cmp    $0x5c,%r9b
jne    1201 <get_token_bool+0x101>
movslq (%rdx),%rax
lea    0x1(%rax),%ebx
mov    %ebx,(%rdx)
mov    (%rdi,%rax,1),%r9b
movslq (%r8),%rbx
lea    0x1(%rbx),%eax
mov    %eax,(%r8)
mov    %r9b,(%rcx,%rbx,1)
mov    (%rdx),%eax
cmp    %esi,%eax
jge    1290 <get_token_bool+0x190>
movabs $0x800100000000401,%r9
jmp    1250 <get_token_bool+0x150>
add    $0x1,%eax
mov    %eax,(%rdx)
movzbl (%r10),%r10d
movslq (%r8),%rbx
lea    0x1(%rbx),%eax
mov    %eax,(%r8)
mov    %r10b,(%rcx,%rbx,1)
movslq (%rdx),%r10
lea    0x1(%r10),%eax
mov    %eax,(%rdx)
add    %rdi,%r10
movzbl (%r10),%r10d
movslq (%r8),%rbx
lea    0x1(%rbx),%eax
mov    %eax,(%r8)
mov    %r10b,(%rcx,%rbx,1)
mov    (%rdx),%eax
cmp    %esi,%eax
jge    1290 <get_token_bool+0x190>
movslq %eax,%rbx
lea    (%rdi,%rbx,1),%r10
movzbl (%rdi,%rbx,1),%r11d
cmp    $0x5b,%r11b
jle    1279 <get_token_bool+0x179>
cmp    $0x5c,%r11b
je     1217 <get_token_bool+0x117>
lea    -0x7d(%r11),%ebx
cmp    $0x2,%bl
jb     1290 <get_token_bool+0x190>
cmp    $0x7b,%r11b
jne    1289 <get_token_bool+0x189>
jmp    1290 <get_token_bool+0x190>
cmp    $0x3b,%r11b
ja     1289 <get_token_bool+0x189>
movzbl %r11b,%ebx
bt     %rbx,%r9
jb     1290 <get_token_bool+0x190>
add    $0x1,%eax
mov    %eax,(%rdx)
jmp    1239 <get_token_bool+0x139>
movslq (%r8),%rax
movb   $0x0,(%rcx,%rax,1)
mov    $0x61,%eax
jmp    111e <get_token_bool+0x1e>

LLVM IR (-O0):
define i32 @get_token_bool(i8* %0, i32 %1, i32* %2, i8* %3, i32* %4) {
%6 = alloca i32
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i32*
%10 = alloca i8*
%11 = alloca i32*
store i8* %0, i8** %7
store i32 %1, i32* %8
store i32* %2, i32** %9
store i8* %3, i8** %10
store i32* %4, i32** %11
%12 = load i32*, i32** %9
%13 = load i32, i32* %12
%14 = load i32, i32* %8
%15 = icmp sge i32 %13, %14
br i1 %15, label %34, label %16
16: ; preds = %5
%17 = load i8*, i8** %7
%18 = load i32*, i32** %9
%19 = load i32, i32* %18
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds i8, i8* %17, i64 %20
%22 = load i8, i8* %21
%23 = zext i8 %22 to i32
%24 = icmp eq i32 %23, 10
br i1 %24, label %34, label %25
25: ; preds = %16
%26 = load i8*, i8** %7
%27 = load i32*, i32** %9
%28 = load i32, i32* %27
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds i8, i8* %26, i64 %29
%31 = load i8, i8* %30
%32 = zext i8 %31 to i32
%33 = icmp eq i32 %32, 0
br i1 %33, label %34, label %35
34: ; preds = %25, %16, %5
store i32 101, i32* %6
br label %351
35: ; preds = %25
br label %36
36: ; preds = %81, %35
%37 = load i32*, i32** %9
%38 = load i32, i32* %37
%39 = load i32, i32* %8
%40 = icmp slt i32 %38, %39
br i1 %40, label %41, label %79
41: ; preds = %36
%42 = load i8*, i8** %7
%43 = load i32*, i32** %9
%44 = load i32, i32* %43
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i8, i8* %42, i64 %45
%47 = load i8, i8* %46
%48 = zext i8 %47 to i32
%49 = icmp ne i32 %48, 10
br i1 %49, label %50, label %79
50: ; preds = %41
%51 = load i8*, i8** %7
%52 = load i32*, i32** %9
%53 = load i32, i32* %52
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds i8, i8* %51, i64 %54
%56 = load i8, i8* %55
%57 = zext i8 %56 to i32
%58 = icmp ne i32 %57, 0
br i1 %58, label %59, label %79
59: ; preds = %50
%60 = load i8*, i8** %7
%61 = load i32*, i32** %9
%62 = load i32, i32* %61
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds i8, i8* %60, i64 %63
%65 = load i8, i8* %64
%66 = zext i8 %65 to i32
%67 = icmp eq i32 %66, 32
br i1 %67, label %77, label %68
68: ; preds = %59
%69 = load i8*, i8** %7
%70 = load i32*, i32** %9
%71 = load i32, i32* %70
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds i8, i8* %69, i64 %72
%74 = load i8, i8* %73
%75 = zext i8 %74 to i32
%76 = icmp eq i32 %75, 9
br label %77
77: ; preds = %68, %59
%78 = phi i1 [ true, %59 ], [ %76, %68 ]
br label %79
79: ; preds = %77, %50, %41, %36
%80 = phi i1 [ false, %50 ], [ false, %41 ], [ false, %36 ], [ %78, %77 ]
br i1 %80, label %81, label %85
81: ; preds = %79
%82 = load i32*, i32** %9
%83 = load i32, i32* %82
%84 = add nsw i32 %83, 1
store i32 %84, i32* %82
br label %36
85: ; preds = %79
%86 = load i32*, i32** %9
%87 = load i32, i32* %86
%88 = load i32, i32* %8
%89 = icmp sge i32 %87, %88
br i1 %89, label %108, label %90
90: ; preds = %85
%91 = load i8*, i8** %7
%92 = load i32*, i32** %9
%93 = load i32, i32* %92
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds i8, i8* %91, i64 %94
%96 = load i8, i8* %95
%97 = zext i8 %96 to i32
%98 = icmp eq i32 %97, 10
br i1 %98, label %108, label %99
99: ; preds = %90
%100 = load i8*, i8** %7
%101 = load i32*, i32** %9
%102 = load i32, i32* %101
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds i8, i8* %100, i64 %103
%105 = load i8, i8* %104
%106 = zext i8 %105 to i32
%107 = icmp eq i32 %106, 0
br i1 %107, label %108, label %109
108: ; preds = %99, %90, %85
store i32 101, i32* %6
br label %351
109: ; preds = %99
%110 = load i8*, i8** %7
%111 = load i32*, i32** %9
%112 = load i32, i32* %111
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i8, i8* %110, i64 %113
%115 = load i8, i8* %114
%116 = zext i8 %115 to i32
%117 = icmp eq i32 %116, 44
br i1 %117, label %154, label %118
118: ; preds = %109
%119 = load i8*, i8** %7
%120 = load i32*, i32** %9
%121 = load i32, i32* %120
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds i8, i8* %119, i64 %122
%124 = load i8, i8* %123
%125 = zext i8 %124 to i32
%126 = icmp eq i32 %125, 59
br i1 %126, label %154, label %127
127: ; preds = %118
%128 = load i8*, i8** %7
%129 = load i32*, i32** %9
%130 = load i32, i32* %129
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds i8, i8* %128, i64 %131
%133 = load i8, i8* %132
%134 = zext i8 %133 to i32
%135 = icmp eq i32 %134, 126
br i1 %135, label %154, label %136
136: ; preds = %127
%137 = load i8*, i8** %7
%138 = load i32*, i32** %9
%139 = load i32, i32* %138
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds i8, i8* %137, i64 %140
%142 = load i8, i8* %141
%143 = zext i8 %142 to i32
%144 = icmp eq i32 %143, 123
br i1 %144, label %154, label %145
145: ; preds = %136
%146 = load i8*, i8** %7
%147 = load i32*, i32** %9
%148 = load i32, i32* %147
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds i8, i8* %146, i64 %149
%151 = load i8, i8* %150
%152 = zext i8 %151 to i32
%153 = icmp eq i32 %152, 125
br i1 %153, label %154, label %172
154: ; preds = %145, %136, %127, %118, %109
%155 = load i8*, i8** %7
%156 = load i32*, i32** %9
%157 = load i32, i32* %156
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds i8, i8* %155, i64 %158
%160 = load i8, i8* %159
%161 = load i8*, i8** %10
%162 = getelementptr inbounds i8, i8* %161, i64 0
store i8 %160, i8* %162
%163 = load i32*, i32** %11
store i32 1, i32* %163
%164 = load i8*, i8** %7
%165 = load i32*, i32** %9
%166 = load i32, i32* %165
%167 = add nsw i32 %166, 1
store i32 %167, i32* %165
%168 = sext i32 %166 to i64
%169 = getelementptr inbounds i8, i8* %164, i64 %168
%170 = load i8, i8* %169
%171 = zext i8 %170 to i32
store i32 %171, i32* %6
br label %351
172: ; preds = %145
%173 = load i32*, i32** %11
store i32 0, i32* %173
%174 = load i8*, i8** %7
%175 = load i32*, i32** %9
%176 = load i32, i32* %175
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds i8, i8* %174, i64 %177
%179 = load i8, i8* %178
%180 = zext i8 %179 to i32
%181 = icmp eq i32 %180, 92
br i1 %181, label %182, label %209
182: ; preds = %172
%183 = load i8*, i8** %7
%184 = load i32*, i32** %9
%185 = load i32, i32* %184
%186 = add nsw i32 %185, 1
store i32 %186, i32* %184
%187 = sext i32 %185 to i64
%188 = getelementptr inbounds i8, i8* %183, i64 %187
%189 = load i8, i8* %188
%190 = load i8*, i8** %10
%191 = load i32*, i32** %11
%192 = load i32, i32* %191
%193 = add nsw i32 %192, 1
store i32 %193, i32* %191
%194 = sext i32 %192 to i64
%195 = getelementptr inbounds i8, i8* %190, i64 %194
store i8 %189, i8* %195
%196 = load i8*, i8** %7
%197 = load i32*, i32** %9
%198 = load i32, i32* %197
%199 = add nsw i32 %198, 1
store i32 %199, i32* %197
%200 = sext i32 %198 to i64
%201 = getelementptr inbounds i8, i8* %196, i64 %200
%202 = load i8, i8* %201
%203 = load i8*, i8** %10
%204 = load i32*, i32** %11
%205 = load i32, i32* %204
%206 = add nsw i32 %205, 1
store i32 %206, i32* %204
%207 = sext i32 %205 to i64
%208 = getelementptr inbounds i8, i8* %203, i64 %207
store i8 %202, i8* %208
br label %223
209: ; preds = %172
%210 = load i8*, i8** %7
%211 = load i32*, i32** %9
%212 = load i32, i32* %211
%213 = add nsw i32 %212, 1
store i32 %213, i32* %211
%214 = sext i32 %212 to i64
%215 = getelementptr inbounds i8, i8* %210, i64 %214
%216 = load i8, i8* %215
%217 = load i8*, i8** %10
%218 = load i32*, i32** %11
%219 = load i32, i32* %218
%220 = add nsw i32 %219, 1
store i32 %220, i32* %218
%221 = sext i32 %219 to i64
%222 = getelementptr inbounds i8, i8* %217, i64 %221
store i8 %216, i8* %222
br label %223
223: ; preds = %209, %182
br label %224
224: ; preds = %344, %223
%225 = load i32*, i32** %9
%226 = load i32, i32* %225
%227 = load i32, i32* %8
%228 = icmp slt i32 %226, %227
br i1 %228, label %229, label %292
229: ; preds = %224
%230 = load i8*, i8** %7
%231 = load i32*, i32** %9
%232 = load i32, i32* %231
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds i8, i8* %230, i64 %233
%235 = load i8, i8* %234
%236 = zext i8 %235 to i32
%237 = icmp ne i32 %236, 10
br i1 %237, label %238, label %292
238: ; preds = %229
%239 = load i8*, i8** %7
%240 = load i32*, i32** %9
%241 = load i32, i32* %240
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds i8, i8* %239, i64 %242
%244 = load i8, i8* %243
%245 = zext i8 %244 to i32
%246 = icmp ne i32 %245, 0
br i1 %246, label %247, label %292
247: ; preds = %238
%248 = load i8*, i8** %7
%249 = load i32*, i32** %9
%250 = load i32, i32* %249
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds i8, i8* %248, i64 %251
%253 = load i8, i8* %252
%254 = zext i8 %253 to i32
%255 = icmp ne i32 %254, 44
br i1 %255, label %256, label %292
256: ; preds = %247
%257 = load i8*, i8** %7
%258 = load i32*, i32** %9
%259 = load i32, i32* %258
%260 = sext i32 %259 to i64
%261 = getelementptr inbounds i8, i8* %257, i64 %260
%262 = load i8, i8* %261
%263 = zext i8 %262 to i32
%264 = icmp ne i32 %263, 59
br i1 %264, label %265, label %292
265: ; preds = %256
%266 = load i8*, i8** %7
%267 = load i32*, i32** %9
%268 = load i32, i32* %267
%269 = sext i32 %268 to i64
%270 = getelementptr inbounds i8, i8* %266, i64 %269
%271 = load i8, i8* %270
%272 = zext i8 %271 to i32
%273 = icmp ne i32 %272, 126
br i1 %273, label %274, label %292
274: ; preds = %265
%275 = load i8*, i8** %7
%276 = load i32*, i32** %9
%277 = load i32, i32* %276
%278 = sext i32 %277 to i64
%279 = getelementptr inbounds i8, i8* %275, i64 %278
%280 = load i8, i8* %279
%281 = zext i8 %280 to i32
%282 = icmp ne i32 %281, 123
br i1 %282, label %283, label %292
283: ; preds = %274
%284 = load i8*, i8** %7
%285 = load i32*, i32** %9
%286 = load i32, i32* %285
%287 = sext i32 %286 to i64
%288 = getelementptr inbounds i8, i8* %284, i64 %287
%289 = load i8, i8* %288
%290 = zext i8 %289 to i32
%291 = icmp ne i32 %290, 125
br label %292
292: ; preds = %283, %274, %265, %256, %247, %238, %229, %224
%293 = phi i1 [ false, %274 ], [ false, %265 ], [ false, %256 ], [ false, %247 ], [ false, %238 ], [ false, %229 ], [ false, %224 ], [ %291, %283 ]
br i1 %293, label %294, label %345
294: ; preds = %292
%295 = load i8*, i8** %7
%296 = load i32*, i32** %9
%297 = load i32, i32* %296
%298 = sext i32 %297 to i64
%299 = getelementptr inbounds i8, i8* %295, i64 %298
%300 = load i8, i8* %299
%301 = zext i8 %300 to i32
%302 = icmp eq i32 %301, 92
br i1 %302, label %303, label %330
303: ; preds = %294
%304 = load i8*, i8** %7
%305 = load i32*, i32** %9
%306 = load i32, i32* %305
%307 = add nsw i32 %306, 1
store i32 %307, i32* %305
%308 = sext i32 %306 to i64
%309 = getelementptr inbounds i8, i8* %304, i64 %308
%310 = load i8, i8* %309
%311 = load i8*, i8** %10
%312 = load i32*, i32** %11
%313 = load i32, i32* %312
%314 = add nsw i32 %313, 1
store i32 %314, i32* %312
%315 = sext i32 %313 to i64
%316 = getelementptr inbounds i8, i8* %311, i64 %315
store i8 %310, i8* %316
%317 = load i8*, i8** %7
%318 = load i32*, i32** %9
%319 = load i32, i32* %318
%320 = add nsw i32 %319, 1
store i32 %320, i32* %318
%321 = sext i32 %319 to i64
%322 = getelementptr inbounds i8, i8* %317, i64 %321
%323 = load i8, i8* %322
%324 = load i8*, i8** %10
%325 = load i32*, i32** %11
%326 = load i32, i32* %325
%327 = add nsw i32 %326, 1
store i32 %327, i32* %325
%328 = sext i32 %326 to i64
%329 = getelementptr inbounds i8, i8* %324, i64 %328
store i8 %323, i8* %329
br label %344
330: ; preds = %294
%331 = load i8*, i8** %7
%332 = load i32*, i32** %9
%333 = load i32, i32* %332
%334 = add nsw i32 %333, 1
store i32 %334, i32* %332
%335 = sext i32 %333 to i64
%336 = getelementptr inbounds i8, i8* %331, i64 %335
%337 = load i8, i8* %336
%338 = load i8*, i8** %10
%339 = load i32*, i32** %11
%340 = load i32, i32* %339
%341 = add nsw i32 %340, 1
store i32 %341, i32* %339
%342 = sext i32 %340 to i64
%343 = getelementptr inbounds i8, i8* %338, i64 %342
store i8 %337, i8* %343
br label %344
344: ; preds = %330, %303
br label %224
345: ; preds = %292
%346 = load i8*, i8** %10
%347 = load i32*, i32** %11
%348 = load i32, i32* %347
%349 = sext i32 %348 to i64
%350 = getelementptr inbounds i8, i8* %346, i64 %349
store i8 0, i8* %350
store i32 97, i32* %6
br label %351
351: ; preds = %345, %154, %108, %34
%352 = load i32, i32* %6
ret i32 %352
}

LLVM IR (-O2):
define i32 @get_token_bool(i8* nocapture %0, i32 %1, i32* nocapture %2, i8* nocapture writeonly %3, i32* nocapture %4) {
%6 = load i32, i32* %2
%7 = icmp slt i32 %6, %1
br i1 %7, label %8, label %90
8: ; preds = %5
%9 = sext i32 %6 to i64
%10 = getelementptr inbounds i8, i8* %0, i64 %9
%11 = load i8, i8* %10
switch i8 %11, label %12 [
i8 10, label %90
i8 0, label %90
]
12: ; preds = %8, %19
%13 = phi i8 [ %21, %19 ], [ %11, %8 ]
%14 = phi i64 [ %16, %19 ], [ %9, %8 ]
switch i8 %13, label %22 [
i8 9, label %15
i8 32, label %15
]
15: ; preds = %12, %12
%16 = add nsw i64 %14, 1
%17 = trunc i64 %16 to i32
store i32 %17, i32* %2
%18 = icmp eq i32 %17, %1
br i1 %18, label %90, label %19
19: ; preds = %15
%20 = getelementptr inbounds i8, i8* %0, i64 %16
%21 = load i8, i8* %20
br label %12
22: ; preds = %12
%23 = shl i64 %14, 32
%24 = ashr exact i64 %23, 32
%25 = getelementptr inbounds i8, i8* %0, i64 %24
%26 = load i8, i8* %25
switch i8 %26, label %34 [
i8 10, label %90
i8 0, label %90
i8 44, label %27
i8 59, label %27
i8 126, label %27
i8 123, label %27
i8 125, label %27
]
27: ; preds = %22, %22, %22, %22, %22
store i8 %26, i8* %3
store i32 1, i32* %4
%28 = load i32, i32* %2
%29 = add nsw i32 %28, 1
store i32 %29, i32* %2
%30 = sext i32 %28 to i64
%31 = getelementptr inbounds i8, i8* %0, i64 %30
%32 = load i8, i8* %31
%33 = zext i8 %32 to i32
br label %90
34: ; preds = %22
store i32 0, i32* %4
%35 = load i32, i32* %2
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds i8, i8* %0, i64 %36
%38 = load i8, i8* %37
%39 = icmp eq i8 %38, 92
%40 = add nsw i32 %35, 1
store i32 %40, i32* %2
%41 = load i8, i8* %37
%42 = load i32, i32* %4
%43 = add nsw i32 %42, 1
store i32 %43, i32* %4
%44 = sext i32 %42 to i64
%45 = getelementptr inbounds i8, i8* %3, i64 %44
store i8 %41, i8* %45
br i1 %39, label %46, label %56
46: ; preds = %34
%47 = load i32, i32* %2
%48 = add nsw i32 %47, 1
store i32 %48, i32* %2
%49 = sext i32 %47 to i64
%50 = getelementptr inbounds i8, i8* %0, i64 %49
%51 = load i8, i8* %50
%52 = load i32, i32* %4
%53 = add nsw i32 %52, 1
store i32 %53, i32* %4
%54 = sext i32 %52 to i64
%55 = getelementptr inbounds i8, i8* %3, i64 %54
store i8 %51, i8* %55
br label %56
56: ; preds = %34, %46
%57 = load i32, i32* %2
%58 = icmp slt i32 %57, %1
br i1 %58, label %59, label %86
59: ; preds = %56, %77
%60 = phi i32 [ %84, %77 ], [ %57, %56 ]
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i8, i8* %0, i64 %61
%63 = load i8, i8* %62
switch i8 %63, label %75 [
i8 10, label %86
i8 0, label %86
i8 44, label %86
i8 59, label %86
i8 126, label %86
i8 123, label %86
i8 125, label %86
i8 92, label %64
]
64: ; preds = %59
%65 = add nsw i32 %60, 1
store i32 %65, i32* %2
%66 = load i8, i8* %62
%67 = load i32, i32* %4
%68 = add nsw i32 %67, 1
store i32 %68, i32* %4
%69 = sext i32 %67 to i64
%70 = getelementptr inbounds i8, i8* %3, i64 %69
store i8 %66, i8* %70
%71 = load i32, i32* %2
%72 = add nsw i32 %71, 1
store i32 %72, i32* %2
%73 = sext i32 %71 to i64
%74 = getelementptr inbounds i8, i8* %0, i64 %73
br label %77
75: ; preds = %59
%76 = add nsw i32 %60, 1
store i32 %76, i32* %2
br label %77
77: ; preds = %75, %64
%78 = phi i8* [ %62, %75 ], [ %74, %64 ]
%79 = load i8, i8* %78
%80 = load i32, i32* %4
%81 = add nsw i32 %80, 1
store i32 %81, i32* %4
%82 = sext i32 %80 to i64
%83 = getelementptr inbounds i8, i8* %3, i64 %82
store i8 %79, i8* %83
%84 = load i32, i32* %2
%85 = icmp slt i32 %84, %1
br i1 %85, label %59, label %86
86: ; preds = %77, %59, %59, %59, %59, %59, %59, %59, %56
%87 = load i32, i32* %4
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds i8, i8* %3, i64 %88
store i8 0, i8* %89
br label %90
90: ; preds = %15, %22, %22, %5, %8, %8, %86, %27
%91 = phi i32 [ %33, %27 ], [ 97, %86 ], [ 101, %8 ], [ 101, %8 ], [ 101, %5 ], [ 101, %22 ], [ 101, %22 ], [ 101, %15 ]
ret i32 %91
}