#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 */
typedef int /*<<< orphan*/ targets;

/* Variables and functions */
int /*<<< orphan*/ memset(unsigned char *, unsigned char, unsigned char);
int glob(const char *pat, const char *str, int isdotspecial) {
  char c, cnext;
  const char *str0;
  if (!pat || !str)
    return (0);
  str0 = str;
  while ((c = *pat++)) {
    switch (c) {
    case '\\':
      c = *pat++;
    default:
      if (c != *str++)
        return (0);
      break;
    case '?':
      if (!(*str) || (isdotspecial && str == str0 && *str == '.'))
        return (0);
      str++;
      break;
    case '*':
      if (isdotspecial && str == str0 && *str == '.')
        return (0);
      while ((c = *pat++) == '*' || c == '?')
        if (c == '?' && !(*str++))
          return (0);
      if (c == '\0')
        return (1);
      cnext = (c == '\\') ? *pat : c;
      while (1) {
        if ((c == '[' || *str == cnext) && glob(--pat, str, 0))
          return (1);
        if (!(*str++))
          return (0);
      }
      break;
    case '[':
      if (!(*str))
        return (0);
      else {
        unsigned char c_endpoints[2], mark, targets[256], uc, us;
        int flip_flop, isliteral;
        us = (unsigned char)(*str++);
        if (*pat != '!') {
          mark = 0xff;
          memset(targets, 0x00, sizeof(targets));
        } else {
          mark = 0x00;
          memset(targets, 0xff, sizeof(targets));
          targets[0] = 0x00;
          pat++;
        }
        flip_flop = 0;
        isliteral = 0;
        while ((uc = *pat++) && uc != ']') {
          if (isliteral) {
            isliteral = 0;
            if (mark && uc == us)
              goto hyperspace_bypass;
            c_endpoints[flip_flop] = uc;
            targets[uc] = mark;
            if (flip_flop == 1)
              flip_flop = 2;
          } else {
            switch (uc) {
            default:
              if (mark && uc == us)
                goto hyperspace_bypass;
              c_endpoints[flip_flop] = uc;
              targets[uc] = mark;
              if (flip_flop == 1)
                flip_flop = 2;
              break;
            case '\\':
              isliteral = 1;
              break;
            case '-':
              if (flip_flop == 1)
                return (-1);
              flip_flop = 1;
              break;
            }
            if (flip_flop == 2 && !isliteral) {
              unsigned char c1, c2;
              flip_flop = 0;
              c1 = c_endpoints[0];
              c2 = c_endpoints[1];
              if (c1 > c2) {
                c1 = c2;
                c2 = c_endpoints[0];
              }
              if (mark && (c1 <= us && us <= c2))
                goto hyperspace_bypass;
              if ((c2 - c1) > 1)
                memset(targets + c1 + 1, mark, (c2 - c1) - 1);
            }
          }
        }
        if (!(*pat))
          return (-1);
        if (!targets[us])
          return (0);
        break;
      hyperspace_bypass:
        isliteral = 0;
        while ((uc = *pat++) && uc != ']') {
          if (isliteral)
            isliteral = 0;
          else if (uc == '\\')
            isliteral = 1;
          else if (uc == '-' && *pat == '-')
            return (-1);
        }
        break;
      }
      break;
    }
  }
  return (!(*str) ? 1 : 0);
}


x86 assembly (clang, -O0):
<glob>:
push   %rbp
mov    %rsp,%rbp
sub    $0x160,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     114c <glob+0x2c>
cmpq   $0x0,-0x18(%rbp)
jne    1158 <glob+0x38>
movl   $0x0,-0x4(%rbp)
jmp    1841 <glob+0x721>
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x1d(%rbp)
cmp    $0x0,%al
je     1824 <glob+0x704>
movsbl -0x1d(%rbp),%eax
mov    %eax,-0x144(%rbp)
sub    $0x2a,%eax
je     1265 <glob+0x145>
jmp    1194 <glob+0x74>
mov    -0x144(%rbp),%eax
sub    $0x3f,%eax
je     1213 <glob+0xf3>
jmp    11a8 <glob+0x88>
mov    -0x144(%rbp),%eax
sub    $0x5b,%eax
je     13df <glob+0x2bf>
jmp    11bc <glob+0x9c>
mov    -0x144(%rbp),%eax
sub    $0x5c,%eax
jne    11e4 <glob+0xc4>
jmp    11d0 <glob+0xb0>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x1d(%rbp)
movsbl -0x1d(%rbp),%eax
mov    -0x18(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     120e <glob+0xee>
movl   $0x0,-0x4(%rbp)
jmp    1841 <glob+0x721>
jmp    181f <glob+0x6ff>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
je     1248 <glob+0x128>
cmpl   $0x0,-0x1c(%rbp)
je     1254 <glob+0x134>
mov    -0x18(%rbp),%rax
cmp    -0x28(%rbp),%rax
jne    1254 <glob+0x134>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1254 <glob+0x134>
movl   $0x0,-0x4(%rbp)
jmp    1841 <glob+0x721>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    181f <glob+0x6ff>
cmpl   $0x0,-0x1c(%rbp)
je     1299 <glob+0x179>
mov    -0x18(%rbp),%rax
cmp    -0x28(%rbp),%rax
jne    1299 <glob+0x179>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1299 <glob+0x179>
movl   $0x0,-0x4(%rbp)
jmp    1841 <glob+0x721>
jmp    129e <glob+0x17e>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x1d(%rbp)
movsbl %al,%ecx
mov    $0x1,%al
cmp    $0x2a,%ecx
mov    %al,-0x145(%rbp)
je     12d6 <glob+0x1b6>
movsbl -0x1d(%rbp),%eax
cmp    $0x3f,%eax
sete   %al
mov    %al,-0x145(%rbp)
mov    -0x145(%rbp),%al
test   $0x1,%al
jne    12e9 <glob+0x1c9>
jmp    131f <glob+0x1ff>
movsbl -0x1d(%rbp),%eax
cmp    $0x3f,%eax
jne    131a <glob+0x1fa>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
cmpb   $0x0,(%rax)
jne    131a <glob+0x1fa>
movl   $0x0,-0x4(%rbp)
jmp    1841 <glob+0x721>
jmp    129e <glob+0x17e>
movsbl -0x1d(%rbp),%eax
cmp    $0x0,%eax
jne    1338 <glob+0x218>
movl   $0x1,-0x4(%rbp)
jmp    1841 <glob+0x721>
movsbl -0x1d(%rbp),%eax
cmp    $0x5c,%eax
jne    1357 <glob+0x237>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x14c(%rbp)
jmp    1361 <glob+0x241>
movsbl -0x1d(%rbp),%eax
mov    %eax,-0x14c(%rbp)
mov    -0x14c(%rbp),%eax
mov    %al,-0x1e(%rbp)
movsbl -0x1d(%rbp),%eax
cmp    $0x5b,%eax
je     138a <glob+0x26a>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
movsbl -0x1e(%rbp),%ecx
cmp    %ecx,%eax
jne    13b6 <glob+0x296>
mov    -0x10(%rbp),%rdi
add    $0xffffffffffffffff,%rdi
mov    %rdi,-0x10(%rbp)
mov    -0x18(%rbp),%rsi
xor    %edx,%edx
call   1040 <glob@plt>
cmp    $0x0,%eax
je     13b6 <glob+0x296>
movl   $0x1,-0x4(%rbp)
jmp    1841 <glob+0x721>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
cmpb   $0x0,(%rax)
jne    13da <glob+0x2ba>
movl   $0x0,-0x4(%rbp)
jmp    1841 <glob+0x721>
jmp    136a <glob+0x24a>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
jne    13f8 <glob+0x2d8>
movl   $0x0,-0x4(%rbp)
jmp    1841 <glob+0x721>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
mov    (%rax),%al
mov    %al,-0x132(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x21,%eax
je     1438 <glob+0x318>
movb   $0xff,-0x2b(%rbp)
lea    -0x130(%rbp),%rdi
xor    %edx,%edx
mov    %edx,%esi
call   1030 <memset@plt>
jmp    1462 <glob+0x342>
movb   $0x0,-0x2b(%rbp)
lea    -0x130(%rbp),%rdi
mov    $0xff,%esi
xor    %edx,%edx
call   1030 <memset@plt>
movb   $0x0,-0x130(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x138(%rbp)
movl   $0x0,-0x13c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x131(%rbp)
movzbl %al,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x14d(%rbp)
je     14b4 <glob+0x394>
movzbl -0x131(%rbp),%eax
cmp    $0x5d,%eax
setne  %al
mov    %al,-0x14d(%rbp)
mov    -0x14d(%rbp),%al
test   $0x1,%al
jne    14c7 <glob+0x3a7>
jmp    170a <glob+0x5ea>
cmpl   $0x0,-0x13c(%rbp)
je     1544 <glob+0x424>
movl   $0x0,-0x13c(%rbp)
movzbl -0x2b(%rbp),%eax
cmp    $0x0,%eax
je     1506 <glob+0x3e6>
movzbl -0x131(%rbp),%eax
movzbl -0x132(%rbp),%ecx
cmp    %ecx,%eax
jne    1506 <glob+0x3e6>
jmp    1749 <glob+0x629>
mov    -0x131(%rbp),%cl
movslq -0x138(%rbp),%rax
mov    %cl,-0x2a(%rbp,%rax,1)
mov    -0x2b(%rbp),%cl
movzbl -0x131(%rbp),%eax
mov    %cl,-0x130(%rbp,%rax,1)
cmpl   $0x1,-0x138(%rbp)
jne    153f <glob+0x41f>
movl   $0x2,-0x138(%rbp)
jmp    1705 <glob+0x5e5>
movzbl -0x131(%rbp),%eax
mov    %eax,-0x154(%rbp)
sub    $0x2d,%eax
je     15e8 <glob+0x4c8>
jmp    155f <glob+0x43f>
mov    -0x154(%rbp),%eax
sub    $0x5c,%eax
je     15d9 <glob+0x4b9>
jmp    1573 <glob+0x453>
movzbl -0x2b(%rbp),%eax
cmp    $0x0,%eax
je     159b <glob+0x47b>
movzbl -0x131(%rbp),%eax
movzbl -0x132(%rbp),%ecx
cmp    %ecx,%eax
jne    159b <glob+0x47b>
jmp    1749 <glob+0x629>
mov    -0x131(%rbp),%cl
movslq -0x138(%rbp),%rax
mov    %cl,-0x2a(%rbp,%rax,1)
mov    -0x2b(%rbp),%cl
movzbl -0x131(%rbp),%eax
mov    %cl,-0x130(%rbp,%rax,1)
cmpl   $0x1,-0x138(%rbp)
jne    15d4 <glob+0x4b4>
movl   $0x2,-0x138(%rbp)
jmp    160b <glob+0x4eb>
movl   $0x1,-0x13c(%rbp)
jmp    160b <glob+0x4eb>
cmpl   $0x1,-0x138(%rbp)
jne    1601 <glob+0x4e1>
movl   $0xffffffff,-0x4(%rbp)
jmp    1841 <glob+0x721>
movl   $0x1,-0x138(%rbp)
cmpl   $0x2,-0x138(%rbp)
jne    1700 <glob+0x5e0>
cmpl   $0x0,-0x13c(%rbp)
jne    1700 <glob+0x5e0>
movl   $0x0,-0x138(%rbp)
mov    -0x2a(%rbp),%al
mov    %al,-0x13d(%rbp)
mov    -0x29(%rbp),%al
mov    %al,-0x13e(%rbp)
movzbl -0x13d(%rbp),%eax
movzbl -0x13e(%rbp),%ecx
cmp    %ecx,%eax
jle    166c <glob+0x54c>
mov    -0x13e(%rbp),%al
mov    %al,-0x13d(%rbp)
mov    -0x2a(%rbp),%al
mov    %al,-0x13e(%rbp)
movzbl -0x2b(%rbp),%eax
cmp    $0x0,%eax
je     16aa <glob+0x58a>
movzbl -0x13d(%rbp),%eax
movzbl -0x132(%rbp),%ecx
cmp    %ecx,%eax
jg     16aa <glob+0x58a>
movzbl -0x132(%rbp),%eax
movzbl -0x13e(%rbp),%ecx
cmp    %ecx,%eax
jg     16aa <glob+0x58a>
jmp    1749 <glob+0x629>
movzbl -0x13e(%rbp),%eax
movzbl -0x13d(%rbp),%ecx
sub    %ecx,%eax
cmp    $0x1,%eax
jle    16fb <glob+0x5db>
lea    -0x130(%rbp),%rdi
movzbl -0x13d(%rbp),%eax
cltq
add    %rax,%rdi
add    $0x1,%rdi
mov    -0x2b(%rbp),%cl
movzbl -0x13e(%rbp),%eax
movzbl -0x13d(%rbp),%edx
sub    %edx,%eax
sub    $0x1,%eax
movzbl %cl,%esi
movzbl %al,%edx
call   1030 <memset@plt>
jmp    1700 <glob+0x5e0>
jmp    1705 <glob+0x5e5>
jmp    1476 <glob+0x356>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
jne    1723 <glob+0x603>
movl   $0xffffffff,-0x4(%rbp)
jmp    1841 <glob+0x721>
movzbl -0x132(%rbp),%eax
cmpb   $0x0,-0x130(%rbp,%rax,1)
jne    1744 <glob+0x624>
movl   $0x0,-0x4(%rbp)
jmp    1841 <glob+0x721>
jmp    181f <glob+0x6ff>
movl   $0x0,-0x13c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x131(%rbp)
movzbl %al,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x155(%rbp)
je     1791 <glob+0x671>
movzbl -0x131(%rbp),%eax
cmp    $0x5d,%eax
setne  %al
mov    %al,-0x155(%rbp)
mov    -0x155(%rbp),%al
test   $0x1,%al
jne    17a4 <glob+0x684>
jmp    181a <glob+0x6fa>
cmpl   $0x0,-0x13c(%rbp)
je     17c0 <glob+0x6a0>
movl   $0x0,-0x13c(%rbp)
jmp    1815 <glob+0x6f5>
movzbl -0x131(%rbp),%eax
cmp    $0x5c,%eax
jne    17df <glob+0x6bf>
movl   $0x1,-0x13c(%rbp)
jmp    1810 <glob+0x6f0>
movzbl -0x131(%rbp),%eax
cmp    $0x2d,%eax
jne    180b <glob+0x6eb>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    180b <glob+0x6eb>
movl   $0xffffffff,-0x4(%rbp)
jmp    1841 <glob+0x721>
jmp    1810 <glob+0x6f0>
jmp    1815 <glob+0x6f5>
jmp    1753 <glob+0x633>
jmp    181f <glob+0x6ff>
jmp    1160 <glob+0x40>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
setne  %dl
xor    $0xff,%dl
xor    %eax,%eax
mov    $0x1,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x160,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<glob>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x128,%rsp
xor    %eax,%eax
test   %rdi,%rdi
je     1464 <glob+0x344>
test   %rsi,%rsi
je     1464 <glob+0x344>
mov    %rdi,%rbp
mov    (%rdi),%al
test   %al,%al
je     13ad <glob+0x28d>
mov    %rsi,%r15
mov    %rsi,0x18(%rsp)
mov    %edx,0x14(%rsp)
jmp    1183 <glob+0x63>
cmp    $0x2a,%ecx
je     13cf <glob+0x2af>
cmp    (%r15),%al
jne    13be <glob+0x29e>
add    $0x1,%r15
mov    (%rbx),%al
mov    %rbx,%rbp
test   %al,%al
je     13b0 <glob+0x290>
lea    0x1(%rbp),%rbx
movsbl %al,%ecx
cmp    $0x5a,%ecx
jle    11b0 <glob+0x90>
cmp    $0x5b,%ecx
je     11e0 <glob+0xc0>
cmp    $0x5c,%ecx
jne    1169 <glob+0x49>
mov    0x1(%rbp),%al
add    $0x2,%rbp
mov    %rbp,%rbx
jmp    1169 <glob+0x49>
cs nopw 0x0(%rax,%rax,1)
nop
cmp    $0x3f,%ecx
jne    1160 <glob+0x40>
mov    (%r15),%cl
xor    %eax,%eax
test   %cl,%cl
je     1464 <glob+0x344>
test   %edx,%edx
je     1172 <glob+0x52>
cmp    %rsi,%r15
jne    1172 <glob+0x52>
cmp    $0x2e,%cl
jne    1172 <glob+0x52>
jmp    1464 <glob+0x344>
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%r15),%r12d
test   %r12,%r12
je     13be <glob+0x29e>
mov    (%rbx),%r13b
lea    0x20(%rsp),%rdi
cmp    $0x21,%r13b
jne    1218 <glob+0xf8>
mov    $0xff,%esi
xor    %edx,%edx
call   1030 <memset@plt>
xor    %r8d,%r8d
movb   $0x0,0x20(%rsp)
add    $0x2,%rbp
mov    %rbp,%rbx
jmp    1224 <glob+0x104>
xor    %esi,%esi
xor    %edx,%edx
call   1030 <memset@plt>
mov    $0xff,%r8b
cmp    $0x21,%r13b
setne  %bpl
xor    %r14d,%r14d
lea    0x1(%rbx),%rsi
add    $0x2,%rbx
mov    $0x1,%dl
mov    %rbx,%rdi
nopl   0x0(%rax)
mov    %rsi,%rbx
movzbl -0x1(%rsi),%ecx
test   %rcx,%rcx
je     1350 <glob+0x230>
cmp    $0x5d,%cl
je     1350 <glob+0x230>
mov    %rdi,%rax
test   $0x1,%dl
je     1290 <glob+0x170>
lea    0x1(%rbx),%rsi
lea    0x1(%rax),%rdi
xor    %edx,%edx
cmp    $0x5c,%cl
je     1240 <glob+0x120>
cmp    $0x2d,%cl
jne    12c0 <glob+0x1a0>
cmp    $0x1,%r14d
mov    $0x1,%r14d
jne    122f <glob+0x10f>
jmp    13c5 <glob+0x2a5>
cs nopw 0x0(%rax,%rax,1)
cmp    %r12b,%cl
sete   %dl
and    %bpl,%dl
cmp    $0x1,%dl
je     136b <glob+0x24b>
mov    %r14d,%eax
mov    %cl,0xe(%rsp,%rax,1)
mov    %r8b,0x20(%rsp,%rcx,1)
cmp    $0x1,%r14d
mov    $0x2,%eax
cmove  %eax,%r14d
jmp    122f <glob+0x10f>
cmp    %r12b,%cl
sete   %dl
test   %dl,%bpl
jne    136b <glob+0x24b>
mov    %r14d,%edx
mov    %cl,0xe(%rsp,%rdx,1)
mov    %r8b,0x20(%rsp,%rcx,1)
cmp    $0x1,%r14d
mov    $0x2,%ecx
cmove  %ecx,%r14d
cmp    $0x2,%r14d
jne    122f <glob+0x10f>
movzbl 0xe(%rsp),%esi
movzbl 0xf(%rsp),%ecx
cmp    %cl,%sil
mov    %esi,%edx
cmova  %ecx,%edx
cmova  %esi,%ecx
cmp    $0x21,%r13b
je     1317 <glob+0x1f7>
cmp    %r12b,%dl
ja     1317 <glob+0x1f7>
cmp    %cl,%r12b
jbe    136b <glob+0x24b>
movzbl %cl,%eax
movzbl %dl,%ecx
sub    %ecx,%eax
xor    %r14d,%r14d
cmp    $0x2,%eax
jl     122f <glob+0x10f>
lea    (%rsp,%rcx,1),%rdi
add    $0x21,%rdi
add    $0xff,%al
movzbl %r8b,%esi
movzbl %al,%edx
mov    %r8d,0x10(%rsp)
call   1030 <memset@plt>
mov    0x10(%rsp),%r8d
jmp    122f <glob+0x10f>
cmpb   $0x0,(%rbx)
je     13c5 <glob+0x2a5>
cmpb   $0x0,0x20(%rsp,%r12,1)
je     13be <glob+0x29e>
mov    0x18(%rsp),%rsi
mov    0x14(%rsp),%edx
jmp    1172 <glob+0x52>
mov    $0x1,%dl
jmp    1386 <glob+0x266>
cmpb   $0x2d,(%rax)
je     13c5 <glob+0x2a5>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%rax
mov    %ecx,%edx
movzbl -0x1(%rax),%ebx
test   %bl,%bl
je     13a8 <glob+0x288>
cmp    $0x5d,%bl
je     13a8 <glob+0x288>
mov    $0x1,%cl
test   $0x1,%dl
je     1380 <glob+0x260>
cmp    $0x2d,%bl
je     136f <glob+0x24f>
cmp    $0x5c,%bl
jne    1380 <glob+0x260>
xor    %ecx,%ecx
jmp    1380 <glob+0x260>
mov    %rax,%rbx
jmp    135d <glob+0x23d>
mov    %rsi,%r15
xor    %eax,%eax
cmpb   $0x0,(%r15)
sete   %al
jmp    1464 <glob+0x344>
xor    %eax,%eax
jmp    1464 <glob+0x344>
mov    $0xffffffff,%eax
jmp    1464 <glob+0x344>
test   %edx,%edx
je     13e3 <glob+0x2c3>
cmp    %rsi,%r15
jne    13e3 <glob+0x2c3>
xor    %eax,%eax
cmpb   $0x2e,(%rsi)
je     1464 <glob+0x344>
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%rbx),%ebp
add    $0x1,%rbx
cmp    $0x2a,%bpl
je     13f0 <glob+0x2d0>
test   %bpl,%bpl
je     145f <glob+0x33f>
cmp    $0x5c,%bpl
je     141a <glob+0x2fa>
cmp    $0x3f,%bpl
jne    1422 <glob+0x302>
cmpb   $0x0,(%r15)
lea    0x1(%r15),%r15
jne    13f0 <glob+0x2d0>
jmp    1464 <glob+0x344>
mov    (%rbx),%bpl
xor    %r14d,%r14d
jmp    144f <glob+0x32f>
cmp    $0x5b,%bpl
sete   %r14b
jmp    144f <glob+0x32f>
add    $0xffffffffffffffff,%rbx
mov    %rbx,%rdi
mov    %r15,%rsi
xor    %edx,%edx
call   1040 <glob@plt>
test   %eax,%eax
jne    145f <glob+0x33f>
movzbl (%r15),%ecx
add    $0x1,%r15
xor    %eax,%eax
test   %cl,%cl
je     1464 <glob+0x344>
test   %r14b,%r14b
jne    142c <glob+0x30c>
movzbl (%r15),%ecx
cmp    %bpl,%cl
je     142c <glob+0x30c>
jmp    1445 <glob+0x325>
mov    $0x1,%eax
add    $0x128,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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