int path_fnmatch(const char *pattern, unsigned int plen, const char *string,
                 unsigned int slen, int flags) {
start:
  if (slen == 0) {
    while (plen && *pattern == '*') {
      pattern++;
      plen--;
    }
    return (plen ? 1 : 0);
  }
  if (plen == 0)
    return 1;
  if (*string == '.' && *pattern != '.' && (flags & (1 << 2))) {
    if (!(flags & 0x80))
      return 1;
    if ((flags & (1 << 0)) && string[-1] == '/')
      return 1;
  }
  flags |= 0x80;
  switch (*pattern) {
  case '[': {
    const char *start;
    int neg = 0;
    pattern++;
    plen--;
    if (*string == '/' && (flags & (1 << 0)))
      return 1;
    neg = (*pattern == '!');
    pattern += neg;
    plen -= neg;
    start = pattern;
    while (plen) {
      int res = 0;
      if (*pattern == ']' && pattern != start)
        break;
      if (*pattern == '[' && pattern[1] == ':') {
      } else {
        if (plen > 1 && pattern[1] == '-' && pattern[2] != ']') {
          res = (*string >= *pattern && *string <= pattern[2]);
          pattern += 3;
          plen -= 3;
        } else {
          res = (*pattern == *string);
          pattern++;
          plen--;
        }
      }
      if ((res && !neg) || ((!res && neg) && *pattern == ']')) {
        while (plen && *pattern != ']') {
          pattern++;
          plen--;
        }
        pattern += !!plen;
        plen -= !!plen;
        string++;
        slen--;
        goto start;
      } else if (res && neg)
        break;
    }
  } break;
  case '\\': {
    if (!(flags & (1 << 1))) {
      pattern++;
      plen--;
      if (plen)
        goto match;
    } else
      goto match;
  } break;
  case '*': {
    if ((*string == '/' && (flags & (1 << 0))) ||
        path_fnmatch(pattern, plen, string + 1, slen - 1, flags)) {
      pattern++;
      plen--;
      goto start;
    }
    return 0;
  }
  case '?': {
    if (*string == '/' && (flags & (1 << 0)))
      break;
    pattern++;
    plen--;
    string++;
    slen--;
  }
    goto start;
  default:
  match : {
    if (*pattern == *string) {
      pattern++;
      plen--;
      string++;
      slen--;
      goto start;
    }
  } break;
  }
  return 1;
}


x86 assembly (clang, -O0):
<path_fnmatch>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    %r8d,-0x28(%rbp)
cmpl   $0x0,-0x24(%rbp)
jne    119a <path_fnmatch+0x8a>
jmp    1139 <path_fnmatch+0x29>
xor    %eax,%eax
cmpl   $0x0,-0x14(%rbp)
mov    %al,-0x39(%rbp)
je     1158 <path_fnmatch+0x48>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
sete   %al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
test   $0x1,%al
jne    1168 <path_fnmatch+0x58>
jmp    1182 <path_fnmatch+0x72>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1139 <path_fnmatch+0x29>
mov    -0x14(%rbp),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    1667 <path_fnmatch+0x557>
cmpl   $0x0,-0x14(%rbp)
jne    11b0 <path_fnmatch+0xa0>
movl   $0x1,-0x4(%rbp)
jmp    1667 <path_fnmatch+0x557>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    122d <path_fnmatch+0x11d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
je     122d <path_fnmatch+0x11d>
mov    -0x28(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     122d <path_fnmatch+0x11d>
mov    -0x28(%rbp),%eax
and    $0x80,%eax
cmp    $0x0,%eax
jne    11fc <path_fnmatch+0xec>
movl   $0x1,-0x4(%rbp)
jmp    1667 <path_fnmatch+0x557>
mov    -0x28(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1228 <path_fnmatch+0x118>
mov    -0x20(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    1228 <path_fnmatch+0x118>
movl   $0x1,-0x4(%rbp)
jmp    1667 <path_fnmatch+0x557>
jmp    122d <path_fnmatch+0x11d>
mov    -0x28(%rbp),%al
or     $0x80,%al
mov    %al,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x40(%rbp)
sub    $0x2a,%eax
je     1552 <path_fnmatch+0x442>
jmp    124d <path_fnmatch+0x13d>
mov    -0x40(%rbp),%eax
sub    $0x3f,%eax
je     15be <path_fnmatch+0x4ae>
jmp    125e <path_fnmatch+0x14e>
mov    -0x40(%rbp),%eax
sub    $0x5b,%eax
je     1280 <path_fnmatch+0x170>
jmp    126f <path_fnmatch+0x15f>
mov    -0x40(%rbp),%eax
sub    $0x5c,%eax
je     1510 <path_fnmatch+0x400>
jmp    1611 <path_fnmatch+0x501>
movl   $0x0,-0x34(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    12c7 <path_fnmatch+0x1b7>
mov    -0x28(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     12c7 <path_fnmatch+0x1b7>
movl   $0x1,-0x4(%rbp)
jmp    1667 <path_fnmatch+0x557>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x21,%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x34(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
cmpl   $0x0,-0x14(%rbp)
je     150b <path_fnmatch+0x3fb>
movl   $0x0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
jne    1334 <path_fnmatch+0x224>
mov    -0x10(%rbp),%rax
cmp    -0x30(%rbp),%rax
je     1334 <path_fnmatch+0x224>
jmp    150b <path_fnmatch+0x3fb>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5b,%eax
jne    135a <path_fnmatch+0x24a>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3a,%eax
jne    135a <path_fnmatch+0x24a>
jmp    1412 <path_fnmatch+0x302>
cmpl   $0x1,-0x14(%rbp)
jbe    13dd <path_fnmatch+0x2cd>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2d,%eax
jne    13dd <path_fnmatch+0x2cd>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x5d,%eax
je     13dd <path_fnmatch+0x2cd>
mov    -0x20(%rbp),%rax
movsbl (%rax),%ecx
mov    -0x10(%rbp),%rax
movsbl (%rax),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x41(%rbp)
jl     13b8 <path_fnmatch+0x2a8>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
cmp    %ecx,%eax
setle  %al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
sub    $0x3,%eax
mov    %eax,-0x14(%rbp)
jmp    140d <path_fnmatch+0x2fd>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1412 <path_fnmatch+0x302>
cmpl   $0x0,-0x38(%rbp)
je     1426 <path_fnmatch+0x316>
cmpl   $0x0,-0x34(%rbp)
je     144a <path_fnmatch+0x33a>
cmpl   $0x0,-0x38(%rbp)
jne    14e8 <path_fnmatch+0x3d8>
cmpl   $0x0,-0x34(%rbp)
je     14e8 <path_fnmatch+0x3d8>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
jne    14e8 <path_fnmatch+0x3d8>
jmp    144f <path_fnmatch+0x33f>
xor    %eax,%eax
cmpl   $0x0,-0x14(%rbp)
mov    %al,-0x42(%rbp)
je     146e <path_fnmatch+0x35e>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
setne  %al
mov    %al,-0x42(%rbp)
mov    -0x42(%rbp),%al
test   $0x1,%al
jne    147e <path_fnmatch+0x36e>
jmp    1498 <path_fnmatch+0x388>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    144f <path_fnmatch+0x33f>
cmpl   $0x0,-0x14(%rbp)
setne  %al
xor    $0xff,%al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
cmpl   $0x0,-0x14(%rbp)
setne  %al
xor    $0xff,%al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    112a <path_fnmatch+0x1a>
cmpl   $0x0,-0x38(%rbp)
je     1501 <path_fnmatch+0x3f1>
cmpl   $0x0,-0x34(%rbp)
je     1501 <path_fnmatch+0x3f1>
jmp    150b <path_fnmatch+0x3fb>
jmp    1506 <path_fnmatch+0x3f6>
jmp    1300 <path_fnmatch+0x1f0>
jmp    1660 <path_fnmatch+0x550>
mov    -0x28(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    1548 <path_fnmatch+0x438>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
je     1543 <path_fnmatch+0x433>
jmp    1616 <path_fnmatch+0x506>
jmp    154d <path_fnmatch+0x43d>
jmp    1616 <path_fnmatch+0x506>
jmp    1660 <path_fnmatch+0x550>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1571 <path_fnmatch+0x461>
mov    -0x28(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
jne    1598 <path_fnmatch+0x488>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x20(%rbp),%rdx
add    $0x1,%rdx
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x28(%rbp),%r8d
call   1030 <path_fnmatch@plt>
cmp    $0x0,%eax
je     15b2 <path_fnmatch+0x4a2>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    112a <path_fnmatch+0x1a>
movl   $0x0,-0x4(%rbp)
jmp    1667 <path_fnmatch+0x557>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    15e2 <path_fnmatch+0x4d2>
mov    -0x28(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     15e2 <path_fnmatch+0x4d2>
jmp    1660 <path_fnmatch+0x550>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    112a <path_fnmatch+0x1a>
jmp    1616 <path_fnmatch+0x506>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    165b <path_fnmatch+0x54b>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    112a <path_fnmatch+0x1a>
jmp    1660 <path_fnmatch+0x550>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<path_fnmatch>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rdi,%rbp
test   %ecx,%ecx
je     13fe <path_fnmatch+0x2ee>
mov    %rdx,%r12
mov    %r8d,%r13d
or     $0x80,%r13d
mov    $0x1,%eax
test   %esi,%esi
je     1434 <path_fnmatch+0x324>
mov    %r12,%rdi
add    $0x1,%r12
add    $0xffffffff,%ecx
mov    %rdi,0x18(%rsp)
mov    (%rdi),%r15b
mov    %esi,%r9d
xor    %ebx,%ebx
mov    %rsi,0x10(%rsp)
mov    %esi,%r14d
mov    %rbp,0x20(%rsp)
mov    %r15b,0xf(%rsp)
jmp    11b1 <path_fnmatch+0xa1>
xchg   %ax,%ax
mov    %r14d,%esi
mov    %r12,%rdx
mov    %r13d,%r8d
mov    %ecx,%r15d
mov    %r9,%rbp
call   1030 <path_fnmatch@plt>
mov    %rbp,%r9
mov    %r15d,%ecx
movzbl 0xf(%rsp),%r15d
mov    0x20(%rsp),%rbp
test   %eax,%eax
je     1432 <path_fnmatch+0x322>
add    $0xffffffff,%r14d
add    $0x1,%rbx
mov    %r13d,%r8d
cmp    %ebx,%r9d
je     13f7 <path_fnmatch+0x2e7>
movzbl 0x0(%rbp,%rbx,1),%eax
cmp    $0x2e,%r15b
jne    11f0 <path_fnmatch+0xe0>
cmp    $0x2e,%al
je     11f0 <path_fnmatch+0xe0>
mov    %r8d,%esi
and    $0x4,%esi
je     11f0 <path_fnmatch+0xe0>
test   $0x80,%r8b
je     13f7 <path_fnmatch+0x2e7>
test   $0x1,%r8b
je     11f0 <path_fnmatch+0xe0>
mov    0x18(%rsp),%rsi
cmpb   $0x2f,-0x1(%rsi)
je     13f7 <path_fnmatch+0x2e7>
nopw   0x0(%rax,%rax,1)
lea    (%rbx,%rbp,1),%rdi
movsbl %al,%esi
cmp    $0x2a,%esi
jne    1220 <path_fnmatch+0x110>
cmp    $0x2f,%r15b
jne    1170 <path_fnmatch+0x60>
and    $0x1,%r8d
jne    119d <path_fnmatch+0x8d>
jmp    1170 <path_fnmatch+0x60>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cmp    $0x3f,%esi
je     1342 <path_fnmatch+0x232>
cmp    $0x5c,%esi
je     1368 <path_fnmatch+0x258>
cmp    $0x5b,%esi
jne    138a <path_fnmatch+0x27a>
cmp    $0x2f,%r15b
jne    124b <path_fnmatch+0x13b>
and    $0x1,%r8d
jne    13f7 <path_fnmatch+0x2e7>
mov    0x1(%rbp,%rbx,1),%r9b
xor    %r10d,%r10d
cmp    $0x21,%r9b
sete   %r10b
add    %r10,%rbp
lea    (%rbx,%rbp,1),%r8
add    $0x1,%r8
mov    %r10d,%ebp
not    %ebp
add    0x10(%rsp),%ebp
sub    %ebx,%ebp
mov    %r8,%rax
jmp    1290 <path_fnmatch+0x180>
cs nopw 0x0(%rax,%rax,1)
cmp    $0x21,%r9b
sete   %bl
test   %bl,%sil
jne    13f7 <path_fnmatch+0x2e7>
test   %ebp,%ebp
je     13f7 <path_fnmatch+0x2e7>
movzbl (%rax),%ebx
cmp    $0x5d,%bl
jne    12a9 <path_fnmatch+0x199>
cmp    %rax,%r8
jne    13f7 <path_fnmatch+0x2e7>
cmp    $0x5b,%bl
jne    12c0 <path_fnmatch+0x1b0>
cmpb   $0x3a,0x1(%rax)
jne    12c0 <path_fnmatch+0x1b0>
mov    $0x1,%bl
xor    %esi,%esi
jmp    1306 <path_fnmatch+0x1f6>
nopw   0x0(%rax,%rax,1)
cmp    $0x2,%ebp
jb     12e0 <path_fnmatch+0x1d0>
cmpb   $0x2d,0x1(%rax)
jne    12e0 <path_fnmatch+0x1d0>
movzbl 0x2(%rax),%edi
cmp    $0x5d,%dil
jne    1326 <path_fnmatch+0x216>
cs nopw 0x0(%rax,%rax,1)
nop
cmp    %r15b,%bl
sete   %sil
mov    $0xffffffff,%ebx
mov    $0x1,%edi
add    %rdi,%rax
add    %ebx,%ebp
mov    %esi,%ebx
xor    $0x1,%bl
jne    1306 <path_fnmatch+0x1f6>
test   %r10b,%r10b
je     13b3 <path_fnmatch+0x2a3>
test   %bl,%bl
je     1280 <path_fnmatch+0x170>
cmp    $0x21,%r9b
jne    1280 <path_fnmatch+0x170>
cmpb   $0x5d,(%rax)
jne    1280 <path_fnmatch+0x170>
jmp    13b3 <path_fnmatch+0x2a3>
cmp    %bl,%r15b
setge  %bl
cmp    %dil,%r15b
setle  %sil
and    %bl,%sil
mov    $0xfffffffd,%ebx
mov    $0x3,%edi
jmp    12f1 <path_fnmatch+0x1e1>
cmp    $0x2f,%r15b
mov    $0x1,%eax
jne    1357 <path_fnmatch+0x247>
and    $0x1,%r8d
jne    1434 <path_fnmatch+0x324>
add    %rbx,%rbp
add    $0x1,%rbp
not    %ebx
add    0x10(%rsp),%ebx
mov    %ebx,%esi
jmp    13a6 <path_fnmatch+0x296>
test   $0x2,%r8b
jne    138a <path_fnmatch+0x27a>
mov    0x10(%rsp),%rsi
add    $0xffffffff,%esi
cmp    %ebx,%esi
je     13f7 <path_fnmatch+0x2e7>
lea    (%rbx,%rbp,1),%rdi
add    $0x1,%rdi
sub    %rbx,%rsi
mov    (%rdi),%al
mov    %esi,%r14d
cmp    %r15b,%al
mov    $0x1,%eax
jne    1434 <path_fnmatch+0x324>
add    $0x1,%rdi
add    $0xffffffff,%r14d
mov    %rdi,%rbp
mov    %r14d,%esi
mov    %r13d,%r8d
test   %ecx,%ecx
jne    1136 <path_fnmatch+0x26>
jmp    13fe <path_fnmatch+0x2ee>
xor    %esi,%esi
test   %ebp,%ebp
je     13e6 <path_fnmatch+0x2d6>
lea    -0x1(%rbp),%edi
add    %rax,%rdi
add    $0x1,%rdi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmpb   $0x5d,(%rax)
sete   %bl
je     13ea <path_fnmatch+0x2da>
add    $0x1,%rax
add    $0xffffffff,%ebp
jne    13d0 <path_fnmatch+0x2c0>
mov    %rdi,%rax
jmp    13ec <path_fnmatch+0x2dc>
xor    %ebx,%ebx
jmp    13ec <path_fnmatch+0x2dc>
mov    %ebp,%esi
movzbl %bl,%edi
lea    (%rdi,%rax,1),%rbp
sub    %edi,%esi
jmp    13a6 <path_fnmatch+0x296>
mov    $0x1,%eax
jmp    1434 <path_fnmatch+0x324>
test   %esi,%esi
je     1432 <path_fnmatch+0x322>
add    $0xffffffff,%esi
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
movzbl 0x0(%rbp,%rax,1),%ecx
cmp    $0x2a,%cl
jne    1428 <path_fnmatch+0x318>
mov    %rax,%rdx
add    $0x1,%rdx
cmp    %eax,%esi
mov    %rdx,%rax
jne    1410 <path_fnmatch+0x300>
xor    %eax,%eax
cmp    $0x2a,%cl
setne  %al
jmp    1434 <path_fnmatch+0x324>
xor    %eax,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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