int syck_scan_scalar(int req_width, char *cursor, long len) {
  long i = 0, start = 0;
  int flags = 0;
  if (len < 1)
    return flags;
  if (cursor[0] == '[' || cursor[0] == ']' || cursor[0] == '{' ||
      cursor[0] == '}' || cursor[0] == '!' || cursor[0] == '*' ||
      cursor[0] == '&' || cursor[0] == '|' || cursor[0] == '>' ||
      cursor[0] == '\'' || cursor[0] == '"' || cursor[0] == '#' ||
      cursor[0] == '%' || cursor[0] == '@' || cursor[0] == '&' ||
      cursor[0] == '^') {
    flags |= 128;
  }
  if ((cursor[0] == '-' || cursor[0] == ':' || cursor[0] == '?' ||
       cursor[0] == ',') &&
      (cursor[1] == ' ' || cursor[1] == '\n' || len == 1)) {
    flags |= 128;
  }
  if (cursor[len - 1] != '\n') {
    flags |= 512;
  } else if (len > 1 && cursor[len - 2] == '\n') {
    flags |= 1024;
  }
  if ((len > 0 && (cursor[0] == ' ' || cursor[0] == '\t')) ||
      (len > 1 && (cursor[len - 1] == ' ' || cursor[len - 1] == '\t'))) {
    flags |= 8;
  }
  if (len >= 3 && strncmp(cursor, "---", 3) == 0)
    flags |= 8192;
  for (i = 0; i < len; i++) {
    if (!(cursor[i] == 0x9 || cursor[i] == 0xA || cursor[i] == 0xD ||
          (cursor[i] >= 0x20 && cursor[i] <= 0x7E))) {
      flags |= 1;
    } else if (cursor[i] == '\n') {
      flags |= 16;
      if (len - i >= 3 && strncmp(&cursor[i + 1], "---", 3) == 0)
        flags |= 8192;
      if (cursor[i + 1] == ' ' || cursor[i + 1] == '\t')
        flags |= 2;
      if (req_width > 0 && i - start > req_width)
        flags |= 4;
      start = i;
    } else if (cursor[i] == '\'') {
      flags |= 32;
    } else if (cursor[i] == '"') {
      flags |= 64;
    } else if (cursor[i] == ']') {
      flags |= 4096;
    } else if (cursor[i] == '}') {
      flags |= 2048;
    } else if ((cursor[i] == ' ' && cursor[i + 1] == '#') ||
               (cursor[i] == ':' && (cursor[i + 1] == ' ' ||
                                     cursor[i + 1] == '\n' || i == len - 1))) {
      flags |= 256;
    } else if (cursor[i] == ',' && (cursor[i + 1] == ' ' ||
                                    cursor[i + 1] == '\n' || i == len - 1)) {
      flags |= 2048;
      flags |= 4096;
    }
  }
  return flags;
}


x86 assembly (clang, -O0):
<syck_scan_scalar>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movq   $0x0,-0x20(%rbp)
movq   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
cmpq   $0x1,-0x18(%rbp)
jge    1150 <syck_scan_scalar+0x40>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    16fc <syck_scan_scalar+0x5ec>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5b,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7b,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7d,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x21,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x26,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7c,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3e,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x27,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x22,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x23,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x25,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x40,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x26,%eax
je     1250 <syck_scan_scalar+0x140>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5e,%eax
jne    125b <syck_scan_scalar+0x14b>
mov    -0x2c(%rbp),%eax
or     $0x80,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
je     129b <syck_scan_scalar+0x18b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
je     129b <syck_scan_scalar+0x18b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3f,%eax
je     129b <syck_scan_scalar+0x18b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2c,%eax
jne    12d3 <syck_scan_scalar+0x1c3>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x20,%eax
je     12c8 <syck_scan_scalar+0x1b8>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0xa,%eax
je     12c8 <syck_scan_scalar+0x1b8>
cmpq   $0x1,-0x18(%rbp)
jne    12d3 <syck_scan_scalar+0x1c3>
mov    -0x2c(%rbp),%eax
or     $0x80,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     12fc <syck_scan_scalar+0x1ec>
mov    -0x2c(%rbp),%eax
or     $0x200,%eax
mov    %eax,-0x2c(%rbp)
jmp    1330 <syck_scan_scalar+0x220>
cmpq   $0x1,-0x18(%rbp)
jle    132b <syck_scan_scalar+0x21b>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
jne    132b <syck_scan_scalar+0x21b>
mov    -0x2c(%rbp),%eax
or     $0x400,%eax
mov    %eax,-0x2c(%rbp)
jmp    1330 <syck_scan_scalar+0x220>
cmpq   $0x0,-0x18(%rbp)
jle    135b <syck_scan_scalar+0x24b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
je     1398 <syck_scan_scalar+0x288>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x9,%eax
je     1398 <syck_scan_scalar+0x288>
cmpq   $0x1,-0x18(%rbp)
jle    13a1 <syck_scan_scalar+0x291>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     1398 <syck_scan_scalar+0x288>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
jne    13a1 <syck_scan_scalar+0x291>
mov    -0x2c(%rbp),%eax
or     $0x8,%eax
mov    %eax,-0x2c(%rbp)
cmpq   $0x3,-0x18(%rbp)
jl     13d5 <syck_scan_scalar+0x2c5>
mov    -0x10(%rbp),%rdi
lea    0xc49(%rip),%rsi
mov    $0x3,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%eax
jne    13d5 <syck_scan_scalar+0x2c5>
mov    -0x2c(%rbp),%eax
or     $0x2000,%eax
mov    %eax,-0x2c(%rbp)
movq   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
jge    16f6 <syck_scan_scalar+0x5e6>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
je     1462 <syck_scan_scalar+0x352>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     1462 <syck_scan_scalar+0x352>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
je     1462 <syck_scan_scalar+0x352>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jl     1454 <syck_scan_scalar+0x344>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7e,%eax
jle    1462 <syck_scan_scalar+0x352>
mov    -0x2c(%rbp),%eax
or     $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    16e0 <syck_scan_scalar+0x5d0>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
jne    1530 <syck_scan_scalar+0x420>
mov    -0x2c(%rbp),%eax
or     $0x10,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
sub    -0x20(%rbp),%rax
cmp    $0x3,%rax
jl     14c6 <syck_scan_scalar+0x3b6>
mov    -0x10(%rbp),%rdi
mov    -0x20(%rbp),%rax
add    $0x1,%rax
add    %rax,%rdi
lea    0xb58(%rip),%rsi
mov    $0x3,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%eax
jne    14c6 <syck_scan_scalar+0x3b6>
mov    -0x2c(%rbp),%eax
or     $0x2000,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     14f2 <syck_scan_scalar+0x3e2>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x9,%eax
jne    14fb <syck_scan_scalar+0x3eb>
mov    -0x2c(%rbp),%eax
or     $0x2,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x8(%rbp)
jle    1523 <syck_scan_scalar+0x413>
mov    -0x20(%rbp),%rax
sub    -0x28(%rbp),%rax
movslq -0x8(%rbp),%rcx
cmp    %rcx,%rax
jle    1523 <syck_scan_scalar+0x413>
mov    -0x2c(%rbp),%eax
or     $0x4,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x28(%rbp)
jmp    16db <syck_scan_scalar+0x5cb>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x27,%eax
jne    1553 <syck_scan_scalar+0x443>
mov    -0x2c(%rbp),%eax
or     $0x20,%eax
mov    %eax,-0x2c(%rbp)
jmp    16d6 <syck_scan_scalar+0x5c6>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x22,%eax
jne    1576 <syck_scan_scalar+0x466>
mov    -0x2c(%rbp),%eax
or     $0x40,%eax
mov    %eax,-0x2c(%rbp)
jmp    16d1 <syck_scan_scalar+0x5c1>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5d,%eax
jne    159b <syck_scan_scalar+0x48b>
mov    -0x2c(%rbp),%eax
or     $0x1000,%eax
mov    %eax,-0x2c(%rbp)
jmp    16cc <syck_scan_scalar+0x5bc>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7d,%eax
jne    15c0 <syck_scan_scalar+0x4b0>
mov    -0x2c(%rbp),%eax
or     $0x800,%eax
mov    %eax,-0x2c(%rbp)
jmp    16c7 <syck_scan_scalar+0x5b7>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    15eb <syck_scan_scalar+0x4db>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x23,%eax
je     1641 <syck_scan_scalar+0x531>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3a,%eax
jne    1651 <syck_scan_scalar+0x541>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     1641 <syck_scan_scalar+0x531>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     1641 <syck_scan_scalar+0x531>
mov    -0x20(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jne    1651 <syck_scan_scalar+0x541>
mov    -0x2c(%rbp),%eax
or     $0x100,%eax
mov    %eax,-0x2c(%rbp)
jmp    16c2 <syck_scan_scalar+0x5b2>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2c,%eax
jne    16bd <syck_scan_scalar+0x5ad>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     16a7 <syck_scan_scalar+0x597>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     16a7 <syck_scan_scalar+0x597>
mov    -0x20(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jne    16bd <syck_scan_scalar+0x5ad>
mov    -0x2c(%rbp),%eax
or     $0x800,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
or     $0x1000,%eax
mov    %eax,-0x2c(%rbp)
jmp    16c2 <syck_scan_scalar+0x5b2>
jmp    16c7 <syck_scan_scalar+0x5b7>
jmp    16cc <syck_scan_scalar+0x5bc>
jmp    16d1 <syck_scan_scalar+0x5c1>
jmp    16d6 <syck_scan_scalar+0x5c6>
jmp    16db <syck_scan_scalar+0x5cb>
jmp    16e0 <syck_scan_scalar+0x5d0>
jmp    16e5 <syck_scan_scalar+0x5d5>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    13dd <syck_scan_scalar+0x2cd>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<syck_scan_scalar>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
test   %rdx,%rdx
jle    11aa <syck_scan_scalar+0x9a>
mov    %rdx,%r14
mov    %rsi,%rbx
mov    (%rsi),%r15b
xor    %r13d,%r13d
lea    -0x21(%r15),%eax
cmp    $0x5c,%al
ja     1154 <syck_scan_scalar+0x44>
movzbl %al,%eax
lea    0xebb(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    $0x80,%r13d
cmp    $0x3f,%r15b
ja     1185 <syck_scan_scalar+0x75>
movzbl %r15b,%eax
movabs $0x8400300000000000,%rcx
bt     %rax,%rcx
jae    1185 <syck_scan_scalar+0x75>
mov    0x1(%rbx),%al
cmp    $0x20,%al
je     117f <syck_scan_scalar+0x6f>
cmp    $0x1,%r14
je     117f <syck_scan_scalar+0x6f>
cmp    $0xa,%al
jne    1185 <syck_scan_scalar+0x75>
mov    $0x80,%r13d
mov    -0x1(%r14,%rbx,1),%al
cmp    $0xa,%al
jne    11bf <syck_scan_scalar+0xaf>
cmp    $0x2,%r14
jb     11c6 <syck_scan_scalar+0xb6>
lea    0x400(%r13),%ecx
cmpb   $0xa,-0x2(%r14,%rbx,1)
cmovne %r13d,%ecx
mov    %ecx,%r13d
jmp    11c6 <syck_scan_scalar+0xb6>
xor    %r13d,%r13d
mov    %r13d,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
or     $0x200,%r13d
cmp    $0x9,%r15b
mov    %edi,0xc(%rsp)
je     11d6 <syck_scan_scalar+0xc6>
cmp    $0x20,%r15b
jne    120a <syck_scan_scalar+0xfa>
or     $0x8,%r13d
cmp    $0x3,%r14
jb     121a <syck_scan_scalar+0x10a>
lea    0xff9(%rip),%rsi
mov    $0x3,%edx
mov    %rbx,%rdi
call   1030 <strncmp@plt>
mov    0xc(%rsp),%edi
lea    0x2000(%r13),%ecx
test   %eax,%eax
cmovne %r13d,%ecx
mov    %ecx,%r13d
jmp    121a <syck_scan_scalar+0x10a>
cmp    $0x2,%r14
jb     121a <syck_scan_scalar+0x10a>
cmp    $0x20,%al
je     11d6 <syck_scan_scalar+0xc6>
cmp    $0x9,%al
je     11d6 <syck_scan_scalar+0xc6>
jmp    11da <syck_scan_scalar+0xca>
mov    %edi,%eax
mov    %rax,0x10(%rsp)
add    $0x1,%rbx
xor    %edx,%edx
xor    %r12d,%r12d
cmp    $0x9,%r15b
je     1300 <syck_scan_scalar+0x1f0>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    $0xa,%r15b
je     1270 <syck_scan_scalar+0x160>
cmp    $0xd,%r15b
je     1300 <syck_scan_scalar+0x1f0>
lea    -0x7f(%r15),%eax
cmp    $0xa0,%al
ja     12d3 <syck_scan_scalar+0x1c3>
or     $0x1,%r13d
jmp    1300 <syck_scan_scalar+0x1f0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %r13d,%ebp
or     $0x10,%ebp
cmp    $0x3,%r14
jl     12a7 <syck_scan_scalar+0x197>
mov    %rdx,%r15
mov    $0x3,%edx
mov    %rbx,%rdi
lea    0xf52(%rip),%rsi
call   1030 <strncmp@plt>
mov    %r15,%rdx
mov    0xc(%rsp),%edi
or     $0x2010,%r13d
test   %eax,%eax
cmove  %r13d,%ebp
mov    (%rbx),%al
cmp    $0x20,%al
je     12b1 <syck_scan_scalar+0x1a1>
cmp    $0x9,%al
jne    12b4 <syck_scan_scalar+0x1a4>
or     $0x2,%ebp
test   %edi,%edi
jle    12f5 <syck_scan_scalar+0x1e5>
mov    %r12,%rax
sub    %rdx,%rax
mov    %ebp,%r13d
or     $0x4,%r13d
cmp    0x10(%rsp),%rax
cmovle %ebp,%r13d
mov    %r12,%rdx
jmp    1300 <syck_scan_scalar+0x1f0>
lea    -0x20(%r15),%eax
cmp    $0x1a,%al
ja     1326 <syck_scan_scalar+0x216>
movzbl %al,%eax
lea    0xe8f(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpb   $0x23,(%rbx)
jne    1300 <syck_scan_scalar+0x1f0>
jmp    1370 <syck_scan_scalar+0x260>
mov    %r12,%rdx
mov    %ebp,%r13d
nopl   0x0(%rax,%rax,1)
cmp    $0x1,%r14
je     11ad <syck_scan_scalar+0x9d>
movzbl (%rbx),%r15d
add    $0x1,%rbx
add    $0xffffffffffffffff,%r14
add    $0x1,%r12
cmp    $0x9,%r15b
jne    1240 <syck_scan_scalar+0x130>
jmp    1300 <syck_scan_scalar+0x1f0>
cmp    $0x5d,%r15b
je     1379 <syck_scan_scalar+0x269>
cmp    $0x7d,%r15b
jne    1300 <syck_scan_scalar+0x1f0>
or     $0x800,%r13d
jmp    1300 <syck_scan_scalar+0x1f0>
or     $0x40,%r13d
jmp    1300 <syck_scan_scalar+0x1f0>
or     $0x20,%r13d
jmp    1300 <syck_scan_scalar+0x1f0>
mov    (%rbx),%al
cmp    $0xa,%al
je     1357 <syck_scan_scalar+0x247>
cmp    $0x20,%al
je     1357 <syck_scan_scalar+0x247>
cmp    $0x1,%r14
jne    1300 <syck_scan_scalar+0x1f0>
or     $0x1800,%r13d
jmp    1300 <syck_scan_scalar+0x1f0>
mov    (%rbx),%al
cmp    $0xa,%al
je     1370 <syck_scan_scalar+0x260>
cmp    $0x20,%al
je     1370 <syck_scan_scalar+0x260>
cmp    $0x1,%r14
jne    1300 <syck_scan_scalar+0x1f0>
or     $0x100,%r13d
jmp    1300 <syck_scan_scalar+0x1f0>
or     $0x1000,%r13d
jmp    1300 <syck_scan_scalar+0x1f0>

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

LLVM IR (-O2):
@.str = [4 x i8] c"---\00"
define i32 @syck_scan_scalar(i32 %0, i8* nocapture %1, i64 %2) {
%4 = icmp slt i64 %2, 1
br i1 %4, label %127, label %5
5: ; preds = %3
%6 = load i8, i8* %1
switch i8 %6, label %8 [
i8 91, label %7
i8 93, label %7
i8 123, label %7
i8 125, label %7
i8 33, label %7
i8 42, label %7
i8 38, label %7
i8 124, label %7
i8 62, label %7
i8 39, label %7
i8 34, label %7
i8 35, label %7
i8 37, label %7
i8 64, label %7
i8 94, label %7
]
7: ; preds = %5, %5, %5, %5, %5, %5, %5, %5, %5, %5, %5, %5, %5, %5, %5
br label %8
8: ; preds = %5, %7
%9 = phi i32 [ 128, %7 ], [ 0, %5 ]
switch i8 %6, label %19 [
i8 45, label %10
i8 58, label %10
i8 63, label %10
i8 44, label %10
]
10: ; preds = %8, %8, %8, %8
%11 = getelementptr inbounds i8, i8* %1, i64 1
%12 = load i8, i8* %11
%13 = icmp eq i8 %12, 32
br i1 %13, label %18, label %14
14: ; preds = %10
%15 = icmp eq i8 %12, 10
%16 = icmp eq i64 %2, 1
%17 = or i1 %16, %15
br i1 %17, label %18, label %19
18: ; preds = %14, %10
br label %19
19: ; preds = %8, %14, %18
%20 = phi i32 [ 128, %18 ], [ %9, %14 ], [ %9, %8 ]
%21 = add nsw i64 %2, -1
%22 = getelementptr inbounds i8, i8* %1, i64 %21
%23 = load i8, i8* %22
%24 = icmp eq i8 %23, 10
br i1 %24, label %27, label %25
25: ; preds = %19
%26 = or i32 %20, 512
br label %36
27: ; preds = %19
%28 = icmp ugt i64 %2, 1
br i1 %28, label %29, label %36
29: ; preds = %27
%30 = add nsw i64 %2, -2
%31 = getelementptr inbounds i8, i8* %1, i64 %30
%32 = load i8, i8* %31
%33 = icmp eq i8 %32, 10
%34 = or i32 %20, 1024
%35 = select i1 %33, i32 %34, i32 %20
br label %36
36: ; preds = %29, %25, %27
%37 = phi i32 [ %26, %25 ], [ %20, %27 ], [ %35, %29 ]
switch i8 %6, label %38 [
i8 32, label %41
i8 9, label %41
]
38: ; preds = %36
%39 = icmp ugt i64 %2, 1
br i1 %39, label %40, label %51
40: ; preds = %38
switch i8 %23, label %43 [
i8 32, label %41
i8 9, label %41
]
41: ; preds = %40, %40, %36, %36
%42 = or i32 %37, 8
br label %43
43: ; preds = %40, %41
%44 = phi i32 [ %42, %41 ], [ %37, %40 ]
%45 = icmp ugt i64 %2, 2
br i1 %45, label %46, label %51
46: ; preds = %43
%47 = tail call i32 @strncmp(i8* %1, i8* dereferenceable(4) getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64 3)
%48 = icmp eq i32 %47, 0
%49 = or i32 %44, 8192
%50 = select i1 %48, i32 %49, i32 %44
br label %51
51: ; preds = %43, %46, %38
%52 = phi i32 [ %44, %43 ], [ %50, %46 ], [ %37, %38 ]
%53 = icmp sgt i32 %0, 0
%54 = zext i32 %0 to i64
br label %55
55: ; preds = %124, %51
%56 = phi i8 [ %6, %51 ], [ %126, %124 ]
%57 = phi i32 [ %52, %51 ], [ %121, %124 ]
%58 = phi i64 [ 0, %51 ], [ %120, %124 ]
%59 = phi i64 [ 0, %51 ], [ %122, %124 ]
switch i8 %56, label %60 [
i8 10, label %66
i8 9, label %119
i8 13, label %119
]
60: ; preds = %55
%61 = add i8 %56, -127
%62 = icmp ult i8 %61, -95
br i1 %62, label %63, label %65
63: ; preds = %60
%64 = or i32 %57, 1
br label %119
65: ; preds = %60
switch i8 %56, label %119 [
i8 44, label %111
i8 39, label %90
i8 34, label %92
i8 93, label %94
i8 125, label %96
i8 32, label %98
i8 58, label %103
]
66: ; preds = %55
%67 = or i32 %57, 16
%68 = sub nsw i64 %2, %59
%69 = icmp sgt i64 %68, 2
%70 = add nuw nsw i64 %59, 1
br i1 %69, label %71, label %77
71: ; preds = %66
%72 = getelementptr inbounds i8, i8* %1, i64 %70
%73 = tail call i32 @strncmp(i8* %72, i8* dereferenceable(4) getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i64 3)
%74 = icmp eq i32 %73, 0
%75 = or i32 %57, 8208
%76 = select i1 %74, i32 %75, i32 %67
br label %77
77: ; preds = %66, %71
%78 = phi i32 [ %76, %71 ], [ %67, %66 ]
%79 = getelementptr inbounds i8, i8* %1, i64 %70
%80 = load i8, i8* %79
switch i8 %80, label %83 [
i8 32, label %81
i8 9, label %81
]
81: ; preds = %77, %77
%82 = or i32 %78, 2
br label %83
83: ; preds = %77, %81
%84 = phi i32 [ %82, %81 ], [ %78, %77 ]
br i1 %53, label %85, label %119
85: ; preds = %83
%86 = sub nsw i64 %59, %58
%87 = icmp sgt i64 %86, %54
%88 = or i32 %84, 4
%89 = select i1 %87, i32 %88, i32 %84
br label %119
90: ; preds = %65
%91 = or i32 %57, 32
br label %119
92: ; preds = %65
%93 = or i32 %57, 64
br label %119
94: ; preds = %65
%95 = or i32 %57, 4096
br label %119
96: ; preds = %65
%97 = or i32 %57, 2048
br label %119
98: ; preds = %65
%99 = add nuw nsw i64 %59, 1
%100 = getelementptr inbounds i8, i8* %1, i64 %99
%101 = load i8, i8* %100
%102 = icmp eq i8 %101, 35
br i1 %102, label %109, label %119
103: ; preds = %65
%104 = add nuw nsw i64 %59, 1
%105 = getelementptr inbounds i8, i8* %1, i64 %104
%106 = load i8, i8* %105
switch i8 %106, label %107 [
i8 32, label %109
i8 10, label %109
]
107: ; preds = %103
%108 = icmp eq i64 %59, %21
br i1 %108, label %109, label %119
109: ; preds = %103, %103, %107, %98
%110 = or i32 %57, 256
br label %119
111: ; preds = %65
%112 = add nuw nsw i64 %59, 1
%113 = getelementptr inbounds i8, i8* %1, i64 %112
%114 = load i8, i8* %113
switch i8 %114, label %115 [
i8 32, label %117
i8 10, label %117
]
115: ; preds = %111
%116 = icmp eq i64 %59, %21
br i1 %116, label %117, label %119
117: ; preds = %111, %111, %115
%118 = or i32 %57, 6144
br label %119
119: ; preds = %55, %55, %65, %98, %107, %85, %83, %63, %90, %94, %109, %117, %115, %96, %92
%120 = phi i64 [ %58, %90 ], [ %58, %92 ], [ %58, %94 ], [ %58, %96 ], [ %58, %109 ], [ %58, %117 ], [ %58, %115 ], [ %58, %63 ], [ %59, %85 ], [ %59, %83 ], [ %58, %107 ], [ %58, %98 ], [ %58, %65 ], [ %58, %55 ], [ %58, %55 ]
%121 = phi i32 [ %91, %90 ], [ %93, %92 ], [ %95, %94 ], [ %97, %96 ], [ %110, %109 ], [ %118, %117 ], [ %57, %115 ], [ %64, %63 ], [ %89, %85 ], [ %84, %83 ], [ %57, %107 ], [ %57, %98 ], [ %57, %65 ], [ %57, %55 ], [ %57, %55 ]
%122 = add nuw nsw i64 %59, 1
%123 = icmp eq i64 %122, %2
br i1 %123, label %127, label %124
124: ; preds = %119
%125 = getelementptr inbounds i8, i8* %1, i64 %122
%126 = load i8, i8* %125
br label %55
127: ; preds = %119, %3
%128 = phi i32 [ 0, %3 ], [ %121, %119 ]
ret i32 %128
}