#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__ isalnum(char const);
scalar_t__ isspace(char const);
char *nseel_skip_space_and_comments(char const *, char const *);
const char *nseel_simple_tokenizer(const char **ptr, const char *endptr,
                                   int *lenOut, int *state) {
  const char *p = *ptr;
  const char *rv = p;
  char delim;
  if (state) {
    if (*state == 1)
      goto in_comment;
    if (*state == '\'' || *state == '\"') {
      delim = (char)*state;
      goto in_string;
    }
    while (p < endptr && isspace(p[0]))
      p++;
  } else {
    p = nseel_skip_space_and_comments(p, endptr);
  }
  if (p >= endptr) {
    *ptr = endptr;
    *lenOut = 0;
    return NULL;
  }
  rv = p;
  if (*p == '$' && p + 3 < endptr && p[1] == '\'' && p[3] == '\'') {
    p += 4;
  } else if (state && *p == '/' && p < endptr - 1 &&
             (p[1] == '/' || p[1] == '*')) {
    if (p[1] == '/') {
      while (p < endptr && *p != '\r' && *p != '\n')
        p++;
    } else {
      if (state)
        *state = 1;
      p += 2;
    in_comment:
      while (p < endptr) {
        const char c = *p++;
        if (c == '*' && p < endptr && *p == '/') {
          p++;
          if (state)
            *state = 0;
          break;
        }
      }
    }
  } else if (isalnum(*p) || *p == '_' || *p == '#' || *p == '$') {
    if (*p == '$' && p < endptr - 1 && p[1] == '~')
      p++;
    p++;
    while (p < endptr && (isalnum(*p) || *p == '_' || *p == '.'))
      p++;
  } else if (*p == '\'' || *p == '\"') {
    delim = *p++;
    if (state)
      *state = delim;
  in_string:
    while (p < endptr) {
      const char c = *p++;
      if (p < endptr && c == '\\')
        p++;
      else if (c == delim) {
        if (state)
          *state = 0;
        break;
      }
    }
  } else {
    p++;
  }
  *ptr = p;
  *lenOut = (int)(p - rv);
  return p > rv ? rv : NULL;
}


x86 assembly (clang, -O0):
<nseel_simple_tokenizer>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x28(%rbp)
je     11f4 <nseel_simple_tokenizer+0xc4>
mov    -0x28(%rbp),%rax
cmpl   $0x1,(%rax)
jne    1178 <nseel_simple_tokenizer+0x48>
jmp    1379 <nseel_simple_tokenizer+0x249>
mov    -0x28(%rbp),%rax
cmpl   $0x27,(%rax)
je     1192 <nseel_simple_tokenizer+0x62>
mov    -0x28(%rbp),%rax
cmpl   $0x22,(%rax)
jne    11a0 <nseel_simple_tokenizer+0x70>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %al,-0x39(%rbp)
jmp    1564 <nseel_simple_tokenizer+0x434>
jmp    11a5 <nseel_simple_tokenizer+0x75>
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x3c(%rbp)
jae    11ce <nseel_simple_tokenizer+0x9e>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1040 <isspace@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x3c(%rbp)
mov    -0x3c(%rbp),%al
test   $0x1,%al
jne    11de <nseel_simple_tokenizer+0xae>
jmp    11ef <nseel_simple_tokenizer+0xbf>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    11a5 <nseel_simple_tokenizer+0x75>
jmp    1205 <nseel_simple_tokenizer+0xd5>
mov    -0x30(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1050 <nseel_skip_space_and_comments@plt>
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jb     1235 <nseel_simple_tokenizer+0x105>
mov    -0x18(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x20(%rbp),%rax
movl   $0x0,(%rax)
movq   $0x0,-0x8(%rbp)
jmp    1657 <nseel_simple_tokenizer+0x527>
mov    -0x30(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x24,%eax
jne    1292 <nseel_simple_tokenizer+0x162>
mov    -0x30(%rbp),%rax
add    $0x3,%rax
cmp    -0x18(%rbp),%rax
jae    1292 <nseel_simple_tokenizer+0x162>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x27,%eax
jne    1292 <nseel_simple_tokenizer+0x162>
mov    -0x30(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x27,%eax
jne    1292 <nseel_simple_tokenizer+0x162>
mov    -0x30(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x30(%rbp)
jmp    160b <nseel_simple_tokenizer+0x4db>
cmpq   $0x0,-0x28(%rbp)
je     1400 <nseel_simple_tokenizer+0x2d0>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1400 <nseel_simple_tokenizer+0x2d0>
mov    -0x30(%rbp),%rax
mov    -0x18(%rbp),%rcx
add    $0xffffffffffffffff,%rcx
cmp    %rcx,%rax
jae    1400 <nseel_simple_tokenizer+0x2d0>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
je     12e4 <nseel_simple_tokenizer+0x1b4>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2a,%eax
jne    1400 <nseel_simple_tokenizer+0x2d0>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
jne    1358 <nseel_simple_tokenizer+0x228>
jmp    12fa <nseel_simple_tokenizer+0x1ca>
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x3d(%rbp)
jae    1332 <nseel_simple_tokenizer+0x202>
mov    -0x30(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0xd,%ecx
mov    %al,-0x3d(%rbp)
je     1332 <nseel_simple_tokenizer+0x202>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x3d(%rbp)
mov    -0x3d(%rbp),%al
test   $0x1,%al
jne    1342 <nseel_simple_tokenizer+0x212>
jmp    1353 <nseel_simple_tokenizer+0x223>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    12fa <nseel_simple_tokenizer+0x1ca>
jmp    13fb <nseel_simple_tokenizer+0x2cb>
cmpq   $0x0,-0x28(%rbp)
je     136d <nseel_simple_tokenizer+0x23d>
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
mov    -0x30(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x30(%rbp)
jmp    137e <nseel_simple_tokenizer+0x24e>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    13f6 <nseel_simple_tokenizer+0x2c6>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x3a(%rbp)
movsbl -0x3a(%rbp),%eax
cmp    $0x2a,%eax
jne    13f1 <nseel_simple_tokenizer+0x2c1>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    13f1 <nseel_simple_tokenizer+0x2c1>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    13f1 <nseel_simple_tokenizer+0x2c1>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x28(%rbp)
je     13ec <nseel_simple_tokenizer+0x2bc>
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
jmp    13f6 <nseel_simple_tokenizer+0x2c6>
jmp    137e <nseel_simple_tokenizer+0x24e>
jmp    13fb <nseel_simple_tokenizer+0x2cb>
jmp    1606 <nseel_simple_tokenizer+0x4d6>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isalnum@plt>
cmp    $0x0,%rax
jne    1446 <nseel_simple_tokenizer+0x316>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5f,%eax
je     1446 <nseel_simple_tokenizer+0x316>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x23,%eax
je     1446 <nseel_simple_tokenizer+0x316>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x24,%eax
jne    1516 <nseel_simple_tokenizer+0x3e6>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x24,%eax
jne    1488 <nseel_simple_tokenizer+0x358>
mov    -0x30(%rbp),%rax
mov    -0x18(%rbp),%rcx
add    $0xffffffffffffffff,%rcx
cmp    %rcx,%rax
jae    1488 <nseel_simple_tokenizer+0x358>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x7e,%eax
jne    1488 <nseel_simple_tokenizer+0x358>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x3e(%rbp)
jae    14f0 <nseel_simple_tokenizer+0x3c0>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isalnum@plt>
mov    %rax,%rcx
mov    $0x1,%al
cmp    $0x0,%rcx
mov    %al,-0x3f(%rbp)
jne    14ea <nseel_simple_tokenizer+0x3ba>
mov    -0x30(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x5f,%ecx
mov    %al,-0x3f(%rbp)
je     14ea <nseel_simple_tokenizer+0x3ba>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
sete   %al
mov    %al,-0x3f(%rbp)
mov    -0x3f(%rbp),%al
mov    %al,-0x3e(%rbp)
mov    -0x3e(%rbp),%al
test   $0x1,%al
jne    1500 <nseel_simple_tokenizer+0x3d0>
jmp    1511 <nseel_simple_tokenizer+0x3e1>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1494 <nseel_simple_tokenizer+0x364>
jmp    1601 <nseel_simple_tokenizer+0x4d1>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x27,%eax
je     1536 <nseel_simple_tokenizer+0x406>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
jne    15f0 <nseel_simple_tokenizer+0x4c0>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x39(%rbp)
cmpq   $0x0,-0x28(%rbp)
je     155f <nseel_simple_tokenizer+0x42f>
movsbl -0x39(%rbp),%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
jmp    1564 <nseel_simple_tokenizer+0x434>
jmp    1569 <nseel_simple_tokenizer+0x439>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    15eb <nseel_simple_tokenizer+0x4bb>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x3b(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    15b7 <nseel_simple_tokenizer+0x487>
movsbl -0x3b(%rbp),%eax
cmp    $0x5c,%eax
jne    15b7 <nseel_simple_tokenizer+0x487>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    15e6 <nseel_simple_tokenizer+0x4b6>
movsbl -0x3b(%rbp),%eax
movsbl -0x39(%rbp),%ecx
cmp    %ecx,%eax
jne    15e1 <nseel_simple_tokenizer+0x4b1>
cmpq   $0x0,-0x28(%rbp)
je     15dc <nseel_simple_tokenizer+0x4ac>
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
jmp    15eb <nseel_simple_tokenizer+0x4bb>
jmp    15e6 <nseel_simple_tokenizer+0x4b6>
jmp    1569 <nseel_simple_tokenizer+0x439>
jmp    15fc <nseel_simple_tokenizer+0x4cc>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1601 <nseel_simple_tokenizer+0x4d1>
jmp    1606 <nseel_simple_tokenizer+0x4d6>
jmp    160b <nseel_simple_tokenizer+0x4db>
mov    -0x30(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x30(%rbp),%rax
mov    -0x38(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x30(%rbp),%rax
cmp    -0x38(%rbp),%rax
jbe    1644 <nseel_simple_tokenizer+0x514>
mov    -0x38(%rbp),%rax
mov    %rax,-0x48(%rbp)
jmp    164f <nseel_simple_tokenizer+0x51f>
xor    %eax,%eax
mov    %rax,-0x48(%rbp)
jmp    164f <nseel_simple_tokenizer+0x51f>
mov    -0x48(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<nseel_simple_tokenizer>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rcx,%r13
mov    %rdx,%r14
mov    %rsi,%rbx
mov    %rdi,%r15
mov    (%rdi),%r12
test   %rcx,%rcx
je     11c6 <nseel_simple_tokenizer+0x96>
mov    0x0(%r13),%ecx
cmp    $0x1,%ecx
je     12d5 <nseel_simple_tokenizer+0x1a5>
cmp    $0x22,%ecx
je     116a <nseel_simple_tokenizer+0x3a>
cmp    $0x27,%ecx
jne    133a <nseel_simple_tokenizer+0x20a>
mov    %r12,%rax
xor    %edi,%edi
jmp    118a <nseel_simple_tokenizer+0x5a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x2,%rax
xor    %esi,%esi
test   %esi,%esi
jne    11be <nseel_simple_tokenizer+0x8e>
cmp    %rbx,%rax
jae    11be <nseel_simple_tokenizer+0x8e>
lea    0x1(%rax),%rbp
movzbl (%rax),%edx
cmp    %rbx,%rbp
jae    11a0 <nseel_simple_tokenizer+0x70>
cmp    $0x5c,%dl
je     1180 <nseel_simple_tokenizer+0x50>
cmp    %cl,%dl
mov    $0xd,%esi
cmovne %edi,%esi
test   %r13,%r13
je     11b7 <nseel_simple_tokenizer+0x87>
cmp    %cl,%dl
je     132d <nseel_simple_tokenizer+0x1fd>
mov    %rbp,%rax
test   %esi,%esi
je     118a <nseel_simple_tokenizer+0x5a>
mov    %rax,%rbp
jmp    13c9 <nseel_simple_tokenizer+0x299>
mov    %r12,%rdi
mov    %rbx,%rsi
call   1050 <nseel_skip_space_and_comments@plt>
mov    %rax,%r12
cmp    %rbx,%r12
jae    1202 <nseel_simple_tokenizer+0xd2>
mov    (%r12),%al
cmp    $0x24,%al
jne    1213 <nseel_simple_tokenizer+0xe3>
lea    0x3(%r12),%rcx
cmp    %rbx,%rcx
jae    1213 <nseel_simple_tokenizer+0xe3>
cmpb   $0x27,0x1(%r12)
jne    1213 <nseel_simple_tokenizer+0xe3>
cmpb   $0x27,(%rcx)
jne    1213 <nseel_simple_tokenizer+0xe3>
lea    0x4(%r12),%rbp
jmp    13c9 <nseel_simple_tokenizer+0x299>
mov    %rbx,(%r15)
movl   $0x0,(%r14)
xor    %eax,%eax
jmp    13dd <nseel_simple_tokenizer+0x2ad>
test   %r13,%r13
je     1275 <nseel_simple_tokenizer+0x145>
cmp    $0x2f,%al
jne    1275 <nseel_simple_tokenizer+0x145>
lea    -0x1(%rbx),%rcx
cmp    %rcx,%r12
jae    1275 <nseel_simple_tokenizer+0x145>
mov    0x1(%r12),%cl
cmp    $0x2a,%cl
je     1411 <nseel_simple_tokenizer+0x2e1>
cmp    $0x2f,%cl
jne    1275 <nseel_simple_tokenizer+0x145>
mov    %r12,%rax
not    %rax
add    %rbx,%rax
mov    $0x2f,%cl
xor    %ebp,%ebp
cmp    $0xa,%cl
je     126d <nseel_simple_tokenizer+0x13d>
nopw   0x0(%rax,%rax,1)
cmp    $0xd,%cl
je     126d <nseel_simple_tokenizer+0x13d>
cmp    %rbp,%rax
je     1433 <nseel_simple_tokenizer+0x303>
movzbl 0x1(%r12,%rbp,1),%ecx
add    $0x1,%rbp
cmp    $0xa,%cl
jne    1250 <nseel_simple_tokenizer+0x120>
add    %r12,%rbp
jmp    13c9 <nseel_simple_tokenizer+0x299>
movsbl %al,%edi
call   1030 <isalnum@plt>
mov    (%r12),%cl
test   %rax,%rax
jne    12a8 <nseel_simple_tokenizer+0x178>
lea    -0x22(%rcx),%eax
cmp    $0x3d,%al
ja     142c <nseel_simple_tokenizer+0x2fc>
movzbl %al,%eax
movabs $0x2000000000000006,%rdx
bt     %rax,%rdx
jae    13ec <nseel_simple_tokenizer+0x2bc>
cmp    $0x24,%cl
jne    137a <nseel_simple_tokenizer+0x24a>
lea    -0x1(%rbx),%rax
mov    %r12,%r13
cmp    %rax,%r12
jae    137d <nseel_simple_tokenizer+0x24d>
lea    0x1(%r12),%r13
cmpb   $0x7e,0x1(%r12)
cmovne %r12,%r13
jmp    137d <nseel_simple_tokenizer+0x24d>
mov    %r12,%rax
mov    %r12,%rbp
cmp    %rbx,%rbp
jae    13c9 <nseel_simple_tokenizer+0x299>
mov    %rbx,%rcx
sub    %rax,%rcx
add    %rbp,%rcx
lea    0x1(%rbp),%rdx
sub    %rbx,%rax
xor    %esi,%esi
jmp    130d <nseel_simple_tokenizer+0x1dd>
nopl   0x0(%rax,%rax,1)
add    $0xffffffffffffffff,%rsi
add    $0x1,%rdx
cmp    %rsi,%rax
je     1375 <nseel_simple_tokenizer+0x245>
cmpb   $0x2a,-0x1(%rdx)
jne    1300 <nseel_simple_tokenizer+0x1d0>
cmp    %rbx,%rdx
jae    1300 <nseel_simple_tokenizer+0x1d0>
cmpb   $0x2f,(%rdx)
jne    1300 <nseel_simple_tokenizer+0x1d0>
sub    %rsi,%rbp
add    $0x2,%rbp
test   %r13,%r13
je     13c9 <nseel_simple_tokenizer+0x299>
movl   $0x0,0x0(%r13)
jmp    13c9 <nseel_simple_tokenizer+0x299>
cmp    %rbx,%r12
jae    11d4 <nseel_simple_tokenizer+0xa4>
mov    %rbx,%rbp
sub    %r12,%rbp
nopl   0x0(%rax)
movsbl (%r12),%edi
call   1040 <isspace@plt>
test   %rax,%rax
je     11d4 <nseel_simple_tokenizer+0xa4>
add    $0x1,%r12
add    $0xffffffffffffffff,%rbp
jne    1350 <nseel_simple_tokenizer+0x220>
mov    %rbx,%r12
jmp    11d4 <nseel_simple_tokenizer+0xa4>
mov    %rcx,%rbp
jmp    13c9 <nseel_simple_tokenizer+0x299>
mov    %r12,%r13
lea    0x1(%r13),%rbp
cmp    %rbx,%rbp
jae    13c9 <nseel_simple_tokenizer+0x299>
sub    %r13,%rbx
add    %rbx,%r13
add    $0xffffffffffffffff,%rbx
jmp    13aa <nseel_simple_tokenizer+0x27a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x1,%rbp
add    $0xffffffffffffffff,%rbx
je     13c6 <nseel_simple_tokenizer+0x296>
movsbl 0x0(%rbp),%edi
call   1030 <isalnum@plt>
test   %rax,%rax
jne    13a0 <nseel_simple_tokenizer+0x270>
movzbl 0x0(%rbp),%eax
cmp    $0x5f,%al
je     13a0 <nseel_simple_tokenizer+0x270>
cmp    $0x2e,%al
je     13a0 <nseel_simple_tokenizer+0x270>
jmp    13c9 <nseel_simple_tokenizer+0x299>
mov    %r13,%rbp
mov    %rbp,(%r15)
mov    %ebp,%eax
sub    %r12d,%eax
mov    %eax,(%r14)
xor    %eax,%eax
cmp    %r12,%rbp
cmova  %r12,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0x21,%edx
bt     %rax,%rdx
jae    142c <nseel_simple_tokenizer+0x2fc>
lea    0x1(%r12),%rax
test   %r13,%r13
je     116d <nseel_simple_tokenizer+0x3d>
movzbl %cl,%edx
mov    %edx,0x0(%r13)
jmp    116d <nseel_simple_tokenizer+0x3d>
movl   $0x1,0x0(%r13)
lea    0x2(%r12),%rax
mov    %rax,%rbp
cmp    %rbx,%rbp
jb     12e4 <nseel_simple_tokenizer+0x1b4>
jmp    13c9 <nseel_simple_tokenizer+0x299>
lea    0x1(%r12),%rbp
jmp    13c9 <nseel_simple_tokenizer+0x299>
mov    %rbx,%rbp
jmp    13c9 <nseel_simple_tokenizer+0x299>

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

LLVM IR (-O2):
define i8* @nseel_simple_tokenizer(i8** nocapture %0, i8* %1, i32* nocapture writeonly %2, i32* %3) {
%5 = ptrtoint i8* %1 to i64
%6 = load i8*, i8** %0
%7 = ptrtoint i8* %6 to i64
%8 = icmp eq i32* %3, null
br i1 %8, label %26, label %9
9: ; preds = %4
%10 = load i32, i32* %3
switch i32 %10, label %11 [
i32 1, label %71
i32 39, label %16
i32 34, label %16
]
11: ; preds = %9
%12 = icmp ult i8* %6, %1
br i1 %12, label %13, label %28
13: ; preds = %11
%14 = sub i64 %5, %7
%15 = getelementptr i8, i8* %6, i64 %14
br label %18
16: ; preds = %9, %9
%17 = trunc i32 %10 to i8
br label %132
18: ; preds = %13, %23
%19 = phi i8* [ %24, %23 ], [ %6, %13 ]
%20 = load i8, i8* %19
%21 = tail call i64 @isspace(i8 signext %20)
%22 = icmp eq i64 %21, 0
br i1 %22, label %28, label %23
23: ; preds = %18
%24 = getelementptr inbounds i8, i8* %19, i64 1
%25 = icmp eq i8* %24, %15
br i1 %25, label %28, label %18
26: ; preds = %4
%27 = tail call i8* @nseel_skip_space_and_comments(i8* %6, i8* %1)
br label %28
28: ; preds = %23, %18, %11, %26
%29 = phi i8* [ %27, %26 ], [ %6, %11 ], [ %15, %23 ], [ %19, %18 ]
%30 = ptrtoint i8* %29 to i64
%31 = icmp ult i8* %29, %1
br i1 %31, label %33, label %32
32: ; preds = %28
store i8* %1, i8** %0
store i32 0, i32* %2
br label %167
33: ; preds = %28
%34 = load i8, i8* %29
%35 = icmp eq i8 %34, 36
br i1 %35, label %36, label %48
36: ; preds = %33
%37 = getelementptr inbounds i8, i8* %29, i64 3
%38 = icmp ult i8* %37, %1
br i1 %38, label %39, label %48
39: ; preds = %36
%40 = getelementptr inbounds i8, i8* %29, i64 1
%41 = load i8, i8* %40
%42 = icmp eq i8 %41, 39
br i1 %42, label %43, label %48
43: ; preds = %39
%44 = load i8, i8* %37
%45 = icmp eq i8 %44, 39
br i1 %45, label %46, label %48
46: ; preds = %43
%47 = getelementptr inbounds i8, i8* %29, i64 4
br label %158
48: ; preds = %43, %39, %36, %33
br i1 %8, label %94, label %49
49: ; preds = %48
%50 = icmp eq i8 %34, 47
%51 = getelementptr inbounds i8, i8* %1, i64 -1
%52 = icmp ult i8* %29, %51
%53 = select i1 %50, i1 %52, i1 false
br i1 %53, label %54, label %94
54: ; preds = %49
%55 = getelementptr inbounds i8, i8* %29, i64 1
%56 = load i8, i8* %55
switch i8 %56, label %94 [
i8 47, label %57
i8 42, label %68
]
57: ; preds = %54
%58 = sub i64 %5, %30
%59 = getelementptr i8, i8* %29, i64 %58
br label %60
60: ; preds = %66, %57
%61 = phi i8 [ %67, %66 ], [ 47, %57 ]
%62 = phi i8* [ %64, %66 ], [ %29, %57 ]
switch i8 %61, label %63 [
i8 13, label %158
i8 10, label %158
]
63: ; preds = %60
%64 = getelementptr inbounds i8, i8* %62, i64 1
%65 = icmp eq i8* %64, %59
br i1 %65, label %158, label %66
66: ; preds = %63
%67 = load i8, i8* %64
br label %60
68: ; preds = %54
store i32 1, i32* %3
%69 = getelementptr inbounds i8, i8* %29, i64 2
%70 = ptrtoint i8* %69 to i64
br label %71
71: ; preds = %9, %68
%72 = phi i64 [ %7, %9 ], [ %70, %68 ]
%73 = phi i8* [ %6, %9 ], [ %29, %68 ]
%74 = phi i8* [ %6, %9 ], [ %69, %68 ]
%75 = icmp ult i8* %74, %1
br i1 %75, label %76, label %158
76: ; preds = %71
%77 = sub i64 %5, %72
%78 = getelementptr i8, i8* %74, i64 %77
br label %79
79: ; preds = %76, %92
%80 = phi i8* [ %81, %92 ], [ %74, %76 ]
%81 = getelementptr inbounds i8, i8* %80, i64 1
%82 = load i8, i8* %80
%83 = icmp eq i8 %82, 42
%84 = icmp ult i8* %81, %1
%85 = select i1 %83, i1 %84, i1 false
br i1 %85, label %86, label %92
86: ; preds = %79
%87 = load i8, i8* %81
%88 = icmp eq i8 %87, 47
br i1 %88, label %89, label %92
89: ; preds = %86
%90 = getelementptr inbounds i8, i8* %80, i64 2
br i1 %8, label %158, label %91
91: ; preds = %89
store i32 0, i32* %3
br label %158
92: ; preds = %79, %86
%93 = icmp eq i8* %81, %78
br i1 %93, label %158, label %79
94: ; preds = %54, %49, %48
%95 = tail call i64 @isalnum(i8 signext %34)
%96 = icmp eq i64 %95, 0
%97 = load i8, i8* %29
br i1 %96, label %98, label %99
98: ; preds = %94
switch i8 %97, label %156 [
i8 95, label %99
i8 35, label %99
i8 36, label %99
i8 39, label %128
i8 34, label %128
]
99: ; preds = %94, %98, %98, %98
%100 = icmp eq i8 %97, 36
%101 = getelementptr inbounds i8, i8* %1, i64 -1
%102 = icmp ult i8* %29, %101
%103 = select i1 %100, i1 %102, i1 false
br i1 %103, label %104, label %110
104: ; preds = %99
%105 = getelementptr inbounds i8, i8* %29, i64 1
%106 = load i8, i8* %105
%107 = icmp eq i8 %106, 126
%108 = select i1 %107, i8* %105, i8* %29
%109 = ptrtoint i8* %108 to i64
br label %110
110: ; preds = %104, %99
%111 = phi i64 [ %109, %104 ], [ %30, %99 ]
%112 = phi i8* [ %108, %104 ], [ %29, %99 ]
%113 = getelementptr inbounds i8, i8* %112, i64 1
%114 = icmp ult i8* %113, %1
br i1 %114, label %115, label %158
115: ; preds = %110
%116 = sub i64 %5, %111
%117 = getelementptr i8, i8* %112, i64 %116
br label %118
118: ; preds = %115, %125
%119 = phi i8* [ %126, %125 ], [ %113, %115 ]
%120 = load i8, i8* %119
%121 = tail call i64 @isalnum(i8 signext %120)
%122 = icmp eq i64 %121, 0
br i1 %122, label %123, label %125
123: ; preds = %118
%124 = load i8, i8* %119
switch i8 %124, label %158 [
i8 95, label %125
i8 46, label %125
]
125: ; preds = %123, %123, %118
%126 = getelementptr inbounds i8, i8* %119, i64 1
%127 = icmp eq i8* %126, %117
br i1 %127, label %158, label %118
128: ; preds = %98, %98
%129 = getelementptr inbounds i8, i8* %29, i64 1
br i1 %8, label %132, label %130
130: ; preds = %128
%131 = zext i8 %97 to i32
store i32 %131, i32* %3
br label %132
132: ; preds = %128, %130, %16
%133 = phi i8* [ %6, %16 ], [ %29, %130 ], [ %29, %128 ]
%134 = phi i8 [ %17, %16 ], [ %97, %130 ], [ %97, %128 ]
%135 = phi i8* [ %6, %16 ], [ %129, %130 ], [ %129, %128 ]
br label %136
136: ; preds = %152, %132
%137 = phi i8* [ %135, %132 ], [ %154, %152 ]
%138 = icmp ult i8* %137, %1
br i1 %138, label %139, label %158
139: ; preds = %136
%140 = getelementptr inbounds i8, i8* %137, i64 1
%141 = load i8, i8* %137
%142 = icmp ult i8* %140, %1
%143 = icmp eq i8 %141, 92
%144 = select i1 %142, i1 %143, i1 false
br i1 %144, label %145, label %147
145: ; preds = %139
%146 = getelementptr inbounds i8, i8* %137, i64 2
br label %152
147: ; preds = %139
%148 = icmp ne i8 %141, %134
%149 = or i1 %8, %148
%150 = select i1 %148, i32 0, i32 13
br i1 %149, label %152, label %151
151: ; preds = %147
store i32 0, i32* %3
br label %158
152: ; preds = %147, %145
%153 = phi i32 [ %150, %147 ], [ 0, %145 ]
%154 = phi i8* [ %140, %147 ], [ %146, %145 ]
%155 = icmp eq i32 %153, 0
br i1 %155, label %136, label %158
156: ; preds = %98
%157 = getelementptr inbounds i8, i8* %29, i64 1
br label %158
158: ; preds = %92, %63, %60, %60, %152, %136, %125, %123, %71, %110, %89, %91, %151, %156, %46
%159 = phi i8* [ %29, %46 ], [ %29, %156 ], [ %133, %151 ], [ %73, %91 ], [ %73, %89 ], [ %29, %110 ], [ %73, %71 ], [ %29, %123 ], [ %29, %125 ], [ %133, %136 ], [ %133, %152 ], [ %29, %60 ], [ %29, %60 ], [ %29, %63 ], [ %73, %92 ]
%160 = phi i8* [ %47, %46 ], [ %157, %156 ], [ %140, %151 ], [ %90, %91 ], [ %90, %89 ], [ %113, %110 ], [ %74, %71 ], [ %117, %125 ], [ %119, %123 ], [ %154, %152 ], [ %137, %136 ], [ %59, %63 ], [ %62, %60 ], [ %62, %60 ], [ %78, %92 ]
store i8* %160, i8** %0
%161 = ptrtoint i8* %160 to i64
%162 = ptrtoint i8* %159 to i64
%163 = sub i64 %161, %162
%164 = trunc i64 %163 to i32
store i32 %164, i32* %2
%165 = icmp ugt i8* %160, %159
%166 = select i1 %165, i8* %159, i8* null
br label %167
167: ; preds = %158, %32
%168 = phi i8* [ %166, %158 ], [ null, %32 ]
ret i8* %168
}