int fnmatch(pattern, string, flags) const char *pattern;
const char *string;
int flags;
{
  register const char *p = pattern, *n = string;
  register char c;
  while ((c = *p++) != '\0') {
    c = ((flags & (1 << 4)) && isupper(c) ? tolower(c) : (c));
    switch (c) {
    case '?':
      if (*n == '\0')
        return 1;
      else if ((flags & (1 << 0)) && *n == '/')
        return 1;
      else if ((flags & (1 << 2)) && *n == '.' &&
               (n == string || ((flags & (1 << 0)) && n[-1] == '/')))
        return 1;
      break;
    case '\\':
      if (!(flags & (1 << 1))) {
        c = *p++;
        c = ((flags & (1 << 4)) && isupper(c) ? tolower(c) : (c));
      }
      if (((flags & (1 << 4)) && isupper(*n) ? tolower(*n) : (*n)) != c)
        return 1;
      break;
    case '*':
      if ((flags & (1 << 2)) && *n == '.' &&
          (n == string || ((flags & (1 << 0)) && n[-1] == '/')))
        return 1;
      for (c = *p++; c == '?' || c == '*'; c = *p++, ++n)
        if (((flags & (1 << 0)) && *n == '/') || (c == '?' && *n == '\0'))
          return 1;
      if (c == '\0')
        return 0;
      {
        char c1 = (!(flags & (1 << 1)) && c == '\\') ? *p : c;
        c1 = ((flags & (1 << 4)) && isupper(c1) ? tolower(c1) : (c1));
        for (--p; *n != '\0'; ++n)
          if ((c == '[' || ((flags & (1 << 4)) && isupper(*n) ? tolower(*n)
                                                              : (*n)) == c1) &&
              fnmatch(p, n, flags & ~(1 << 2)) == 0)
            return 0;
        return 1;
      }
    case '[': {
      register int not ;
      if (*n == '\0')
        return 1;
      if ((flags & (1 << 2)) && *n == '.' &&
          (n == string || ((flags & (1 << 0)) && n[-1] == '/')))
        return 1;
      not = (*p == '!' || *p == '^');
      if (not )
        ++p;
      c = *p++;
      for (;;) {
        register char cstart = c, cend = c;
        if (!(flags & (1 << 1)) && c == '\\')
          cstart = cend = *p++;
        cstart = cend = ((flags & (1 << 4)) && isupper(cstart) ? tolower(cstart)
                                                               : (cstart));
        if (c == '\0')
          return 1;
        c = *p++;
        c = ((flags & (1 << 4)) && isupper(c) ? tolower(c) : (c));
        if ((flags & (1 << 0)) && c == '/')
          return 1;
        if (c == '-' && *p != ']') {
          cend = *p++;
          if (!(flags & (1 << 1)) && cend == '\\')
            cend = *p++;
          if (cend == '\0')
            return 1;
          cend = ((flags & (1 << 4)) && isupper(cend) ? tolower(cend) : (cend));
          c = *p++;
        }
        if (((flags & (1 << 4)) && isupper(*n) ? tolower(*n) : (*n)) >=
                cstart &&
            ((flags & (1 << 4)) && isupper(*n) ? tolower(*n) : (*n)) <= cend)
          goto matched;
        if (c == ']')
          break;
      }
      if (!not )
        return 1;
      break;
    matched:;
      while (c != ']') {
        if (c == '\0')
          return 1;
        c = *p++;
        if (!(flags & (1 << 1)) && c == '\\')
          ++p;
      }
      if (not )
        return 1;
    } break;
    default:
      if (c != ((flags & (1 << 4)) && isupper(*n) ? tolower(*n) : (*n)))
        return 1;
    }
    ++n;
  }
  if (*n == '\0')
    return 0;
  if ((flags & (1 << 3)) && *n == '/')
    return 0;
  return 1;
}


x86 assembly (clang, -O0):
<fnmatch>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
je     1a5c <fnmatch+0x92c>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     11a8 <fnmatch+0x78>
movsbl -0x31(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     11a8 <fnmatch+0x78>
movsbl -0x31(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x40(%rbp)
jmp    11af <fnmatch+0x7f>
movsbl -0x31(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%eax
mov    %eax,-0x44(%rbp)
sub    $0x2a,%eax
je     1370 <fnmatch+0x240>
jmp    11ca <fnmatch+0x9a>
mov    -0x44(%rbp),%eax
sub    $0x3f,%eax
je     11fd <fnmatch+0xcd>
jmp    11db <fnmatch+0xab>
mov    -0x44(%rbp),%eax
sub    $0x5b,%eax
je     15d2 <fnmatch+0x4a2>
jmp    11ec <fnmatch+0xbc>
mov    -0x44(%rbp),%eax
sub    $0x5c,%eax
je     12ac <fnmatch+0x17c>
jmp    19e3 <fnmatch+0x8b3>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1219 <fnmatch+0xe9>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1244 <fnmatch+0x114>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1244 <fnmatch+0x114>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     129d <fnmatch+0x16d>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    129d <fnmatch+0x16d>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
je     1291 <fnmatch+0x161>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     129d <fnmatch+0x16d>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    129d <fnmatch+0x16d>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    12a2 <fnmatch+0x172>
jmp    12a7 <fnmatch+0x177>
jmp    1a4b <fnmatch+0x91b>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    130e <fnmatch+0x1de>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1301 <fnmatch+0x1d1>
movsbl -0x31(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1301 <fnmatch+0x1d1>
movsbl -0x31(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x48(%rbp)
jmp    1308 <fnmatch+0x1d8>
movsbl -0x31(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    %al,-0x31(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1346 <fnmatch+0x216>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1346 <fnmatch+0x216>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x4c(%rbp)
jmp    1350 <fnmatch+0x220>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
movsbl -0x31(%rbp),%ecx
cmp    %ecx,%eax
je     136b <fnmatch+0x23b>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    1a4b <fnmatch+0x91b>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     13c9 <fnmatch+0x299>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    13c9 <fnmatch+0x299>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
je     13bd <fnmatch+0x28d>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     13c9 <fnmatch+0x299>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    13c9 <fnmatch+0x299>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%ecx
mov    $0x1,%al
cmp    $0x3f,%ecx
mov    %al,-0x4d(%rbp)
je     13fc <fnmatch+0x2cc>
movsbl -0x31(%rbp),%eax
cmp    $0x2a,%eax
sete   %al
mov    %al,-0x4d(%rbp)
mov    -0x4d(%rbp),%al
test   $0x1,%al
jne    140c <fnmatch+0x2dc>
jmp    147e <fnmatch+0x34e>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     142b <fnmatch+0x2fb>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     1448 <fnmatch+0x318>
movsbl -0x31(%rbp),%eax
cmp    $0x3f,%eax
jne    1454 <fnmatch+0x324>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1454 <fnmatch+0x324>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    1459 <fnmatch+0x329>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    13dd <fnmatch+0x2ad>
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    1497 <fnmatch+0x367>
movl   $0x0,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    14c2 <fnmatch+0x392>
movsbl -0x31(%rbp),%eax
cmp    $0x5c,%eax
jne    14c2 <fnmatch+0x392>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x54(%rbp)
jmp    14c9 <fnmatch+0x399>
movsbl -0x31(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    %al,-0x32(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1501 <fnmatch+0x3d1>
movsbl -0x32(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1501 <fnmatch+0x3d1>
movsbl -0x32(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x58(%rbp)
jmp    1508 <fnmatch+0x3d8>
movsbl -0x32(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    %al,-0x32(%rbp)
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     15c6 <fnmatch+0x496>
movsbl -0x31(%rbp),%eax
cmp    $0x5b,%eax
je     1588 <fnmatch+0x458>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     156f <fnmatch+0x43f>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     156f <fnmatch+0x43f>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x5c(%rbp)
jmp    1579 <fnmatch+0x449>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
movsbl -0x32(%rbp),%ecx
cmp    %ecx,%eax
jne    15b0 <fnmatch+0x480>
mov    -0x28(%rbp),%rdi
mov    -0x30(%rbp),%rsi
mov    -0x1c(%rbp),%edx
and    $0xfffffffb,%edx
call   1030 <fnmatch@plt>
cmp    $0x0,%eax
jne    15b0 <fnmatch+0x480>
movl   $0x0,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    15b5 <fnmatch+0x485>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    151a <fnmatch+0x3ea>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    15ee <fnmatch+0x4be>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     1647 <fnmatch+0x517>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1647 <fnmatch+0x517>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
je     163b <fnmatch+0x50b>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1647 <fnmatch+0x517>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    1647 <fnmatch+0x517>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x28(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x21,%ecx
mov    %al,-0x5d(%rbp)
je     166c <fnmatch+0x53c>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5e,%eax
sete   %al
mov    %al,-0x5d(%rbp)
mov    -0x5d(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x0,-0x38(%rbp)
je     168d <fnmatch+0x55d>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
mov    %al,-0x39(%rbp)
mov    -0x31(%rbp),%al
mov    %al,-0x3a(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    16e0 <fnmatch+0x5b0>
movsbl -0x31(%rbp),%eax
cmp    $0x5c,%eax
jne    16e0 <fnmatch+0x5b0>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x3a(%rbp)
mov    %al,-0x39(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1712 <fnmatch+0x5e2>
movsbl -0x39(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1712 <fnmatch+0x5e2>
movsbl -0x39(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x64(%rbp)
jmp    1719 <fnmatch+0x5e9>
movsbl -0x39(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
mov    %al,-0x3a(%rbp)
mov    %al,-0x39(%rbp)
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    173b <fnmatch+0x60b>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1781 <fnmatch+0x651>
movsbl -0x31(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1781 <fnmatch+0x651>
movsbl -0x31(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x68(%rbp)
jmp    1788 <fnmatch+0x658>
movsbl -0x31(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    %al,-0x31(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     17b6 <fnmatch+0x686>
movsbl -0x31(%rbp),%eax
cmp    $0x2f,%eax
jne    17b6 <fnmatch+0x686>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
movsbl -0x31(%rbp),%eax
cmp    $0x2d,%eax
jne    1883 <fnmatch+0x753>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
je     1883 <fnmatch+0x753>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x3a(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    1817 <fnmatch+0x6e7>
movsbl -0x3a(%rbp),%eax
cmp    $0x5c,%eax
jne    1817 <fnmatch+0x6e7>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x3a(%rbp)
movsbl -0x3a(%rbp),%eax
cmp    $0x0,%eax
jne    1830 <fnmatch+0x700>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1862 <fnmatch+0x732>
movsbl -0x3a(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1862 <fnmatch+0x732>
movsbl -0x3a(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x6c(%rbp)
jmp    1869 <fnmatch+0x739>
movsbl -0x3a(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    %al,-0x3a(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     18bb <fnmatch+0x78b>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     18bb <fnmatch+0x78b>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x70(%rbp)
jmp    18c5 <fnmatch+0x795>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
movsbl -0x39(%rbp),%ecx
cmp    %ecx,%eax
jl     192a <fnmatch+0x7fa>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     190c <fnmatch+0x7dc>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     190c <fnmatch+0x7dc>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x74(%rbp)
jmp    1916 <fnmatch+0x7e6>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
movsbl -0x3a(%rbp),%ecx
cmp    %ecx,%eax
jg     192a <fnmatch+0x7fa>
jmp    195c <fnmatch+0x82c>
movsbl -0x31(%rbp),%eax
cmp    $0x5d,%eax
jne    193c <fnmatch+0x80c>
jmp    1941 <fnmatch+0x811>
jmp    16a1 <fnmatch+0x571>
cmpl   $0x0,-0x38(%rbp)
jne    1957 <fnmatch+0x827>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    1a4b <fnmatch+0x91b>
jmp    1961 <fnmatch+0x831>
movsbl -0x31(%rbp),%eax
cmp    $0x5d,%eax
je     19c8 <fnmatch+0x898>
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    1987 <fnmatch+0x857>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    19c3 <fnmatch+0x893>
movsbl -0x31(%rbp),%eax
cmp    $0x5c,%eax
jne    19c3 <fnmatch+0x893>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1961 <fnmatch+0x831>
cmpl   $0x0,-0x38(%rbp)
je     19de <fnmatch+0x8ae>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    1a4b <fnmatch+0x91b>
movsbl -0x31(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1a22 <fnmatch+0x8f2>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1a22 <fnmatch+0x8f2>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x7c(%rbp)
jmp    1a2c <fnmatch+0x8fc>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x78(%rbp),%eax
mov    -0x7c(%rbp),%ecx
cmp    %ecx,%eax
je     1a46 <fnmatch+0x916>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    1a4b <fnmatch+0x91b>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1156 <fnmatch+0x26>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1a78 <fnmatch+0x948>
movl   $0x0,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x1c(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     1aa3 <fnmatch+0x973>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1aa3 <fnmatch+0x973>
movl   $0x0,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fnmatch>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rsi,%r12
mov    (%rdi),%al
test   %al,%al
je     155d <fnmatch+0x42d>
mov    %rdi,%r13
mov    %edx,%ecx
and    $0x1,%cl
mov    %cl,0x17(%rsp)
mov    %r12,0x20(%rsp)
mov    %edx,0xc(%rsp)
jmp    1184 <fnmatch+0x54>
movsbl (%r12),%ebp
movsbl %bl,%eax
cmp    %eax,%ebp
jne    16a4 <fnmatch+0x574>
add    $0x1,%r12
mov    (%r15),%al
mov    %r15,%r13
test   %al,%al
je     155d <fnmatch+0x42d>
movsbl %al,%ebx
test   $0x10,%dl
je     11a4 <fnmatch+0x74>
mov    %ebx,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     11a0 <fnmatch+0x70>
mov    %ebx,%edi
call   1040 <tolower@plt>
mov    %eax,%ebx
mov    0xc(%rsp),%edx
lea    0x1(%r13),%r15
movsbl %bl,%ebp
cmp    $0x5a,%ebp
jle    1200 <fnmatch+0xd0>
cmp    $0x5b,%ebp
je     1270 <fnmatch+0x140>
cmp    $0x5c,%ebp
jne    148f <fnmatch+0x35f>
test   $0x2,%dl
jne    14be <fnmatch+0x38e>
lea    0x2(%r13),%r15
movzbl 0x1(%r13),%ebx
test   $0x10,%dl
je     1162 <fnmatch+0x32>
movsbl %bl,%ebx
mov    %ebx,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     14c7 <fnmatch+0x397>
mov    %ebx,%edi
call   1040 <tolower@plt>
mov    %eax,%ebx
jmp    14c7 <fnmatch+0x397>
nopl   0x0(%rax)
cmp    $0x3f,%ebp
jne    1486 <fnmatch+0x356>
mov    (%r12),%al
test   %al,%al
je     16a4 <fnmatch+0x574>
cmp    $0x2f,%al
sete   %cl
test   %cl,0x17(%rsp)
jne    16a4 <fnmatch+0x574>
test   $0x4,%dl
je     1172 <fnmatch+0x42>
cmp    $0x2e,%al
jne    1172 <fnmatch+0x42>
cmp    0x20(%rsp),%r12
je     16a4 <fnmatch+0x574>
test   $0x1,%dl
je     1172 <fnmatch+0x42>
movl   $0x1,0x10(%rsp)
cmpb   $0x2f,-0x1(%r12)
jne    1172 <fnmatch+0x42>
jmp    16ac <fnmatch+0x57c>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r12,0x18(%rsp)
movsbl (%r12),%r12d
movl   $0x1,0x10(%rsp)
test   %r12d,%r12d
je     16ac <fnmatch+0x57c>
test   $0x4,%dl
je     12ba <fnmatch+0x18a>
cmp    $0x2e,%r12b
jne    12ba <fnmatch+0x18a>
mov    0x20(%rsp),%rax
cmp    %rax,0x18(%rsp)
je     16ac <fnmatch+0x57c>
test   $0x1,%dl
je     12ba <fnmatch+0x18a>
mov    0x18(%rsp),%rax
cmpb   $0x2f,-0x1(%rax)
je     16ac <fnmatch+0x57c>
mov    0x1(%r13),%cl
cmp    $0x21,%cl
sete   %al
mov    %cl,0x16(%rsp)
cmp    $0x5e,%cl
sete   %cl
or     %al,%cl
lea    0x2(%r13),%rax
movzbl %cl,%ecx
test   %cl,%cl
cmovne %rax,%r15
add    $0x1,%r15
mov    0x1(%rcx,%r13,1),%bl
jmp    1305 <fnmatch+0x1d5>
nopl   0x0(%rax,%rax,1)
movsbl %r13b,%ecx
cmp    %ecx,%eax
jle    1503 <fnmatch+0x3d3>
cmp    $0x5d,%bl
je     14e9 <fnmatch+0x3b9>
test   $0x2,%dl
jne    1330 <fnmatch+0x200>
cmp    $0x5c,%bl
jne    1330 <fnmatch+0x200>
lea    0x1(%r15),%r14
movzbl (%r15),%eax
mov    %r14,%r15
test   $0x10,%dl
je     133f <fnmatch+0x20f>
jmp    1353 <fnmatch+0x223>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %ebx,%eax
test   $0x10,%dl
jne    1350 <fnmatch+0x220>
test   %bl,%bl
je     16ac <fnmatch+0x57c>
movzbl %al,%ebp
movzbl (%r15),%ebx
mov    %r15,%r14
jmp    1398 <fnmatch+0x268>
nopl   0x0(%rax,%rax,1)
mov    %r15,%r14
movsbl %al,%ebp
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1374 <fnmatch+0x244>
test   %bl,%bl
je     16ac <fnmatch+0x57c>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
jmp    137c <fnmatch+0x24c>
test   %bl,%bl
je     16ac <fnmatch+0x57c>
movsbl (%r14),%ebx
mov    %ebx,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1394 <fnmatch+0x264>
mov    %ebx,%edi
call   1040 <tolower@plt>
mov    %eax,%ebx
mov    0xc(%rsp),%edx
mov    %ebx,%eax
shl    $0x18,%eax
test   $0x1,%dl
je     13ad <fnmatch+0x27d>
cmp    $0x2f000000,%eax
je     16ac <fnmatch+0x57c>
lea    0x1(%r14),%r15
cmp    $0x2d000000,%eax
jne    1430 <fnmatch+0x300>
movzbl (%r15),%eax
mov    %ebp,%r13d
cmp    $0x5d,%al
je     1410 <fnmatch+0x2e0>
lea    0x2(%r14),%r15
test   $0x2,%dl
jne    13dc <fnmatch+0x2ac>
cmp    $0x5c,%al
jne    13dc <fnmatch+0x2ac>
movzbl 0x2(%r14),%eax
add    $0x3,%r14
mov    %r14,%r15
test   %al,%al
je     16ac <fnmatch+0x57c>
movsbl %al,%r13d
test   $0x10,%dl
je     1408 <fnmatch+0x2d8>
mov    %r13d,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1404 <fnmatch+0x2d4>
mov    %r13d,%edi
call   1040 <tolower@plt>
mov    %eax,%r13d
mov    0xc(%rsp),%edx
movzbl (%r15),%ebx
add    $0x1,%r15
test   $0x10,%dl
jne    1438 <fnmatch+0x308>
movsbl %bpl,%ecx
mov    %r12d,%eax
cmp    %r12d,%ecx
jle    12f0 <fnmatch+0x1c0>
jmp    12fc <fnmatch+0x1cc>
nopw   0x0(%rax,%rax,1)
mov    %ebp,%r13d
test   $0x10,%dl
je     1415 <fnmatch+0x2e5>
mov    %r12d,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     146d <fnmatch+0x33d>
mov    %r12d,%edi
call   1040 <tolower@plt>
movsbl %bpl,%ecx
cmp    %ecx,%eax
mov    0xc(%rsp),%edx
jl     12fc <fnmatch+0x1cc>
mov    %r12d,%edi
call   1040 <tolower@plt>
mov    0xc(%rsp),%edx
jmp    12f0 <fnmatch+0x1c0>
movsbl %bpl,%ecx
mov    %r12d,%eax
cmp    %r12d,%ecx
mov    0xc(%rsp),%edx
jg     12fc <fnmatch+0x1cc>
jmp    12f0 <fnmatch+0x1c0>
cmp    $0x2a,%ebp
je     158b <fnmatch+0x45b>
movsbl (%r12),%ebx
test   $0x10,%dl
je     14b1 <fnmatch+0x381>
mov    %ebx,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     14ad <fnmatch+0x37d>
mov    %ebx,%edi
call   1040 <tolower@plt>
mov    %eax,%ebx
mov    0xc(%rsp),%edx
cmp    %ebx,%ebp
je     1172 <fnmatch+0x42>
jmp    16a4 <fnmatch+0x574>
test   $0x10,%dl
je     1162 <fnmatch+0x32>
movsbl (%r12),%ebp
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     14e0 <fnmatch+0x3b0>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
mov    0xc(%rsp),%edx
jmp    1167 <fnmatch+0x37>
mov    0x16(%rsp),%al
cmp    $0x21,%al
je     153a <fnmatch+0x40a>
cmp    $0x5e,%al
mov    0x18(%rsp),%r12
je     1172 <fnmatch+0x42>
jmp    16ac <fnmatch+0x57c>
mov    0x18(%rsp),%r12
test   %bl,%bl
je     16ac <fnmatch+0x57c>
cmp    $0x5d,%bl
je     1544 <fnmatch+0x414>
test   $0x2,%dl
sete   %al
movzbl (%r15),%ebx
cmp    $0x5c,%bl
sete   %cl
and    %al,%cl
movzbl %cl,%eax
add    %rax,%r15
add    $0x1,%r15
test   %bl,%bl
jne    1510 <fnmatch+0x3e0>
jmp    16ac <fnmatch+0x57c>
mov    0x18(%rsp),%r12
jmp    1172 <fnmatch+0x42>
mov    0x16(%rsp),%al
cmp    $0x21,%al
je     16ac <fnmatch+0x57c>
cmp    $0x5e,%al
jne    1172 <fnmatch+0x42>
jmp    16ac <fnmatch+0x57c>
mov    (%r12),%al
test   %al,%al
je     157e <fnmatch+0x44e>
test   $0x8,%dl
sete   %cl
cmp    $0x2f,%al
setne  %al
or     %cl,%al
movzbl %al,%eax
mov    %eax,0x10(%rsp)
jmp    16ac <fnmatch+0x57c>
movl   $0x0,0x10(%rsp)
jmp    16ac <fnmatch+0x57c>
test   $0x4,%dl
je     15c4 <fnmatch+0x494>
cmpb   $0x2e,(%r12)
jne    15c4 <fnmatch+0x494>
movl   $0x1,0x10(%rsp)
cmp    0x20(%rsp),%r12
je     16ac <fnmatch+0x57c>
test   $0x1,%dl
je     15c4 <fnmatch+0x494>
cmpb   $0x2f,-0x1(%r12)
jne    15c4 <fnmatch+0x494>
jmp    16ac <fnmatch+0x57c>
nopl   0x0(%rax)
add    $0x1,%r12
add    $0x1,%r13
movzbl 0x0(%r13),%ebx
cmp    $0x2a,%bl
je     15d7 <fnmatch+0x4a7>
cmp    $0x3f,%bl
jne    15f8 <fnmatch+0x4c8>
test   $0x1,%dl
je     15e7 <fnmatch+0x4b7>
cmpb   $0x2f,(%r12)
je     16a4 <fnmatch+0x574>
cmp    $0x3f,%bl
jne    15c0 <fnmatch+0x490>
cmpb   $0x0,(%r12)
jne    15c0 <fnmatch+0x490>
jmp    16a4 <fnmatch+0x574>
movl   $0x0,0x10(%rsp)
test   %bl,%bl
je     16ac <fnmatch+0x57c>
mov    %ebx,%eax
test   $0x2,%dl
jne    161a <fnmatch+0x4ea>
mov    %ebx,%eax
cmp    $0x5c,%bl
jne    161a <fnmatch+0x4ea>
mov    0x1(%r13),%al
test   $0x10,%dl
jne    1624 <fnmatch+0x4f4>
movzbl %al,%ebp
jmp    163f <fnmatch+0x50f>
movsbl %al,%ebp
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     163b <fnmatch+0x50b>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
mov    0xc(%rsp),%edx
mov    (%r12),%al
test   %al,%al
je     16a4 <fnmatch+0x574>
movsbl %bpl,%r15d
mov    %edx,%r14d
and    $0xfffffffb,%r14d
jmp    1678 <fnmatch+0x548>
mov    %r13,%rdi
mov    %r12,%rsi
mov    %r14d,%edx
call   1030 <fnmatch@plt>
mov    0xc(%rsp),%edx
test   %eax,%eax
je     16ac <fnmatch+0x57c>
movzbl 0x1(%r12),%eax
add    $0x1,%r12
test   %al,%al
je     16a4 <fnmatch+0x574>
cmp    $0x5b,%bl
je     1654 <fnmatch+0x524>
movsbl %al,%ebp
test   $0x10,%dl
je     169d <fnmatch+0x56d>
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1699 <fnmatch+0x569>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
mov    0xc(%rsp),%edx
cmp    %r15d,%ebp
je     1654 <fnmatch+0x524>
jmp    166a <fnmatch+0x53a>
movl   $0x1,0x10(%rsp)
mov    0x10(%rsp),%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @fnmatch(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 i8
%12 = alloca i32
%13 = alloca i8
%14 = alloca i8
store i8* %0, i8** %5
store i8* %1, i8** %6
store i32 %2, i32* %7
%15 = load i8*, i8** %5
store i8* %15, i8** %8
%16 = load i8*, i8** %6
store i8* %16, i8** %9
br label %17
17: ; preds = %578, %3
%18 = load i8*, i8** %8
%19 = getelementptr inbounds i8, i8* %18, i32 1
store i8* %19, i8** %8
%20 = load i8, i8* %18
store i8 %20, i8* %10
%21 = sext i8 %20 to i32
%22 = icmp ne i32 %21, 0
br i1 %22, label %23, label %581
23: ; preds = %17
%24 = load i32, i32* %7
%25 = and i32 %24, 16
%26 = icmp ne i32 %25, 0
br i1 %26, label %27, label %36
27: ; preds = %23
%28 = load i8, i8* %10
%29 = sext i8 %28 to i32
%30 = call i32 @isupper(i32 %29)
%31 = icmp ne i32 %30, 0
br i1 %31, label %32, label %36
32: ; preds = %27
%33 = load i8, i8* %10
%34 = sext i8 %33 to i32
%35 = call i32 @tolower(i32 %34)
br label %39
36: ; preds = %27, %23
%37 = load i8, i8* %10
%38 = sext i8 %37 to i32
br label %39
39: ; preds = %36, %32
%40 = phi i32 [ %35, %32 ], [ %38, %36 ]
%41 = trunc i32 %40 to i8
store i8 %41, i8* %10
%42 = load i8, i8* %10
%43 = sext i8 %42 to i32
switch i32 %43, label %552 [
i32 63, label %44
i32 92, label %87
i32 42, label %139
i32 91, label %292
]
44: ; preds = %39
%45 = load i8*, i8** %9
%46 = load i8, i8* %45
%47 = sext i8 %46 to i32
%48 = icmp eq i32 %47, 0
br i1 %48, label %49, label %50
49: ; preds = %44
store i32 1, i32* %4
br label %598
50: ; preds = %44
%51 = load i32, i32* %7
%52 = and i32 %51, 1
%53 = icmp ne i32 %52, 0
br i1 %53, label %54, label %60
54: ; preds = %50
%55 = load i8*, i8** %9
%56 = load i8, i8* %55
%57 = sext i8 %56 to i32
%58 = icmp eq i32 %57, 47
br i1 %58, label %59, label %60
59: ; preds = %54
store i32 1, i32* %4
br label %598
60: ; preds = %54, %50
%61 = load i32, i32* %7
%62 = and i32 %61, 4
%63 = icmp ne i32 %62, 0
br i1 %63, label %64, label %84
64: ; preds = %60
%65 = load i8*, i8** %9
%66 = load i8, i8* %65
%67 = sext i8 %66 to i32
%68 = icmp eq i32 %67, 46
br i1 %68, label %69, label %84
69: ; preds = %64
%70 = load i8*, i8** %9
%71 = load i8*, i8** %6
%72 = icmp eq i8* %70, %71
br i1 %72, label %83, label %73
73: ; preds = %69
%74 = load i32, i32* %7
%75 = and i32 %74, 1
%76 = icmp ne i32 %75, 0
br i1 %76, label %77, label %84
77: ; preds = %73
%78 = load i8*, i8** %9
%79 = getelementptr inbounds i8, i8* %78, i64 -1
%80 = load i8, i8* %79
%81 = sext i8 %80 to i32
%82 = icmp eq i32 %81, 47
br i1 %82, label %83, label %84
83: ; preds = %77, %69
store i32 1, i32* %4
br label %598
84: ; preds = %77, %73, %64, %60
br label %85
85: ; preds = %84
br label %86
86: ; preds = %85
br label %578
87: ; preds = %39
%88 = load i32, i32* %7
%89 = and i32 %88, 2
%90 = icmp ne i32 %89, 0
br i1 %90, label %113, label %91
91: ; preds = %87
%92 = load i8*, i8** %8
%93 = getelementptr inbounds i8, i8* %92, i32 1
store i8* %93, i8** %8
%94 = load i8, i8* %92
store i8 %94, i8* %10
%95 = load i32, i32* %7
%96 = and i32 %95, 16
%97 = icmp ne i32 %96, 0
br i1 %97, label %98, label %107
98: ; preds = %91
%99 = load i8, i8* %10
%100 = sext i8 %99 to i32
%101 = call i32 @isupper(i32 %100)
%102 = icmp ne i32 %101, 0
br i1 %102, label %103, label %107
103: ; preds = %98
%104 = load i8, i8* %10
%105 = sext i8 %104 to i32
%106 = call i32 @tolower(i32 %105)
br label %110
107: ; preds = %98, %91
%108 = load i8, i8* %10
%109 = sext i8 %108 to i32
br label %110
110: ; preds = %107, %103
%111 = phi i32 [ %106, %103 ], [ %109, %107 ]
%112 = trunc i32 %111 to i8
store i8 %112, i8* %10
br label %113
113: ; preds = %110, %87
%114 = load i32, i32* %7
%115 = and i32 %114, 16
%116 = icmp ne i32 %115, 0
br i1 %116, label %117, label %128
117: ; preds = %113
%118 = load i8*, i8** %9
%119 = load i8, i8* %118
%120 = sext i8 %119 to i32
%121 = call i32 @isupper(i32 %120)
%122 = icmp ne i32 %121, 0
br i1 %122, label %123, label %128
123: ; preds = %117
%124 = load i8*, i8** %9
%125 = load i8, i8* %124
%126 = sext i8 %125 to i32
%127 = call i32 @tolower(i32 %126)
br label %132
128: ; preds = %117, %113
%129 = load i8*, i8** %9
%130 = load i8, i8* %129
%131 = sext i8 %130 to i32
br label %132
132: ; preds = %128, %123
%133 = phi i32 [ %127, %123 ], [ %131, %128 ]
%134 = load i8, i8* %10
%135 = sext i8 %134 to i32
%136 = icmp ne i32 %133, %135
br i1 %136, label %137, label %138
137: ; preds = %132
store i32 1, i32* %4
br label %598
138: ; preds = %132
br label %578
139: ; preds = %39
%140 = load i32, i32* %7
%141 = and i32 %140, 4
%142 = icmp ne i32 %141, 0
br i1 %142, label %143, label %163
143: ; preds = %139
%144 = load i8*, i8** %9
%145 = load i8, i8* %144
%146 = sext i8 %145 to i32
%147 = icmp eq i32 %146, 46
br i1 %147, label %148, label %163
148: ; preds = %143
%149 = load i8*, i8** %9
%150 = load i8*, i8** %6
%151 = icmp eq i8* %149, %150
br i1 %151, label %162, label %152
152: ; preds = %148
%153 = load i32, i32* %7
%154 = and i32 %153, 1
%155 = icmp ne i32 %154, 0
br i1 %155, label %156, label %163
156: ; preds = %152
%157 = load i8*, i8** %9
%158 = getelementptr inbounds i8, i8* %157, i64 -1
%159 = load i8, i8* %158
%160 = sext i8 %159 to i32
%161 = icmp eq i32 %160, 47
br i1 %161, label %162, label %163
162: ; preds = %156, %148
store i32 1, i32* %4
br label %598
163: ; preds = %156, %152, %143, %139
%164 = load i8*, i8** %8
%165 = getelementptr inbounds i8, i8* %164, i32 1
store i8* %165, i8** %8
%166 = load i8, i8* %164
store i8 %166, i8* %10
br label %167
167: ; preds = %197, %163
%168 = load i8, i8* %10
%169 = sext i8 %168 to i32
%170 = icmp eq i32 %169, 63
br i1 %170, label %175, label %171
171: ; preds = %167
%172 = load i8, i8* %10
%173 = sext i8 %172 to i32
%174 = icmp eq i32 %173, 42
br label %175
175: ; preds = %171, %167
%176 = phi i1 [ true, %167 ], [ %174, %171 ]
br i1 %176, label %177, label %203
177: ; preds = %175
%178 = load i32, i32* %7
%179 = and i32 %178, 1
%180 = icmp ne i32 %179, 0
br i1 %180, label %181, label %186
181: ; preds = %177
%182 = load i8*, i8** %9
%183 = load i8, i8* %182
%184 = sext i8 %183 to i32
%185 = icmp eq i32 %184, 47
br i1 %185, label %195, label %186
186: ; preds = %181, %177
%187 = load i8, i8* %10
%188 = sext i8 %187 to i32
%189 = icmp eq i32 %188, 63
br i1 %189, label %190, label %196
190: ; preds = %186
%191 = load i8*, i8** %9
%192 = load i8, i8* %191
%193 = sext i8 %192 to i32
%194 = icmp eq i32 %193, 0
br i1 %194, label %195, label %196
195: ; preds = %190, %181
store i32 1, i32* %4
br label %598
196: ; preds = %190, %186
br label %197
197: ; preds = %196
%198 = load i8*, i8** %8
%199 = getelementptr inbounds i8, i8* %198, i32 1
store i8* %199, i8** %8
%200 = load i8, i8* %198
store i8 %200, i8* %10
%201 = load i8*, i8** %9
%202 = getelementptr inbounds i8, i8* %201, i32 1
store i8* %202, i8** %9
br label %167
203: ; preds = %175
%204 = load i8, i8* %10
%205 = sext i8 %204 to i32
%206 = icmp eq i32 %205, 0
br i1 %206, label %207, label %208
207: ; preds = %203
store i32 0, i32* %4
br label %598
208: ; preds = %203
%209 = load i32, i32* %7
%210 = and i32 %209, 2
%211 = icmp ne i32 %210, 0
br i1 %211, label %220, label %212
212: ; preds = %208
%213 = load i8, i8* %10
%214 = sext i8 %213 to i32
%215 = icmp eq i32 %214, 92
br i1 %215, label %216, label %220
216: ; preds = %212
%217 = load i8*, i8** %8
%218 = load i8, i8* %217
%219 = sext i8 %218 to i32
br label %223
220: ; preds = %212, %208
%221 = load i8, i8* %10
%222 = sext i8 %221 to i32
br label %223
223: ; preds = %220, %216
%224 = phi i32 [ %219, %216 ], [ %222, %220 ]
%225 = trunc i32 %224 to i8
store i8 %225, i8* %11
%226 = load i32, i32* %7
%227 = and i32 %226, 16
%228 = icmp ne i32 %227, 0
br i1 %228, label %229, label %238
229: ; preds = %223
%230 = load i8, i8* %11
%231 = sext i8 %230 to i32
%232 = call i32 @isupper(i32 %231)
%233 = icmp ne i32 %232, 0
br i1 %233, label %234, label %238
234: ; preds = %229
%235 = load i8, i8* %11
%236 = sext i8 %235 to i32
%237 = call i32 @tolower(i32 %236)
br label %241
238: ; preds = %229, %223
%239 = load i8, i8* %11
%240 = sext i8 %239 to i32
br label %241
241: ; preds = %238, %234
%242 = phi i32 [ %237, %234 ], [ %240, %238 ]
%243 = trunc i32 %242 to i8
store i8 %243, i8* %11
%244 = load i8*, i8** %8
%245 = getelementptr inbounds i8, i8* %244, i32 -1
store i8* %245, i8** %8
br label %246
246: ; preds = %288, %241
%247 = load i8*, i8** %9
%248 = load i8, i8* %247
%249 = sext i8 %248 to i32
%250 = icmp ne i32 %249, 0
br i1 %250, label %251, label %291
251: ; preds = %246
%252 = load i8, i8* %10
%253 = sext i8 %252 to i32
%254 = icmp eq i32 %253, 91
br i1 %254, label %279, label %255
255: ; preds = %251
%256 = load i32, i32* %7
%257 = and i32 %256, 16
%258 = icmp ne i32 %257, 0
br i1 %258, label %259, label %270
259: ; preds = %255
%260 = load i8*, i8** %9
%261 = load i8, i8* %260
%262 = sext i8 %261 to i32
%263 = call i32 @isupper(i32 %262)
%264 = icmp ne i32 %263, 0
br i1 %264, label %265, label %270
265: ; preds = %259
%266 = load i8*, i8** %9
%267 = load i8, i8* %266
%268 = sext i8 %267 to i32
%269 = call i32 @tolower(i32 %268)
br label %274
270: ; preds = %259, %255
%271 = load i8*, i8** %9
%272 = load i8, i8* %271
%273 = sext i8 %272 to i32
br label %274
274: ; preds = %270, %265
%275 = phi i32 [ %269, %265 ], [ %273, %270 ]
%276 = load i8, i8* %11
%277 = sext i8 %276 to i32
%278 = icmp eq i32 %275, %277
br i1 %278, label %279, label %287
279: ; preds = %274, %251
%280 = load i8*, i8** %8
%281 = load i8*, i8** %9
%282 = load i32, i32* %7
%283 = and i32 %282, -5
%284 = call i32 @fnmatch(i8* %280, i8* %281, i32 %283)
%285 = icmp eq i32 %284, 0
br i1 %285, label %286, label %287
286: ; preds = %279
store i32 0, i32* %4
br label %598
287: ; preds = %279, %274
br label %288
288: ; preds = %287
%289 = load i8*, i8** %9
%290 = getelementptr inbounds i8, i8* %289, i32 1
store i8* %290, i8** %9
br label %246
291: ; preds = %246
store i32 1, i32* %4
br label %598
292: ; preds = %39
%293 = load i8*, i8** %9
%294 = load i8, i8* %293
%295 = sext i8 %294 to i32
%296 = icmp eq i32 %295, 0
br i1 %296, label %297, label %298
297: ; preds = %292
store i32 1, i32* %4
br label %598
298: ; preds = %292
%299 = load i32, i32* %7
%300 = and i32 %299, 4
%301 = icmp ne i32 %300, 0
br i1 %301, label %302, label %322
302: ; preds = %298
%303 = load i8*, i8** %9
%304 = load i8, i8* %303
%305 = sext i8 %304 to i32
%306 = icmp eq i32 %305, 46
br i1 %306, label %307, label %322
307: ; preds = %302
%308 = load i8*, i8** %9
%309 = load i8*, i8** %6
%310 = icmp eq i8* %308, %309
br i1 %310, label %321, label %311
311: ; preds = %307
%312 = load i32, i32* %7
%313 = and i32 %312, 1
%314 = icmp ne i32 %313, 0
br i1 %314, label %315, label %322
315: ; preds = %311
%316 = load i8*, i8** %9
%317 = getelementptr inbounds i8, i8* %316, i64 -1
%318 = load i8, i8* %317
%319 = sext i8 %318 to i32
%320 = icmp eq i32 %319, 47
br i1 %320, label %321, label %322
321: ; preds = %315, %307
store i32 1, i32* %4
br label %598
322: ; preds = %315, %311, %302, %298
%323 = load i8*, i8** %8
%324 = load i8, i8* %323
%325 = sext i8 %324 to i32
%326 = icmp eq i32 %325, 33
br i1 %326, label %332, label %327
327: ; preds = %322
%328 = load i8*, i8** %8
%329 = load i8, i8* %328
%330 = sext i8 %329 to i32
%331 = icmp eq i32 %330, 94
br label %332
332: ; preds = %327, %322
%333 = phi i1 [ true, %322 ], [ %331, %327 ]
%334 = zext i1 %333 to i32
store i32 %334, i32* %12
%335 = load i32, i32* %12
%336 = icmp ne i32 %335, 0
br i1 %336, label %337, label %340
337: ; preds = %332
%338 = load i8*, i8** %8
%339 = getelementptr inbounds i8, i8* %338, i32 1
store i8* %339, i8** %8
br label %340
340: ; preds = %337, %332
%341 = load i8*, i8** %8
%342 = getelementptr inbounds i8, i8* %341, i32 1
store i8* %342, i8** %8
%343 = load i8, i8* %341
store i8 %343, i8* %10
br label %344
344: ; preds = %516, %340
%345 = load i8, i8* %10
store i8 %345, i8* %13
%346 = load i8, i8* %10
store i8 %346, i8* %14
%347 = load i32, i32* %7
%348 = and i32 %347, 2
%349 = icmp ne i32 %348, 0
br i1 %349, label %358, label %350
350: ; preds = %344
%351 = load i8, i8* %10
%352 = sext i8 %351 to i32
%353 = icmp eq i32 %352, 92
br i1 %353, label %354, label %358
354: ; preds = %350
%355 = load i8*, i8** %8
%356 = getelementptr inbounds i8, i8* %355, i32 1
store i8* %356, i8** %8
%357 = load i8, i8* %355
store i8 %357, i8* %14
store i8 %357, i8* %13
br label %358
358: ; preds = %354, %350, %344
%359 = load i32, i32* %7
%360 = and i32 %359, 16
%361 = icmp ne i32 %360, 0
br i1 %361, label %362, label %371
362: ; preds = %358
%363 = load i8, i8* %13
%364 = sext i8 %363 to i32
%365 = call i32 @isupper(i32 %364)
%366 = icmp ne i32 %365, 0
br i1 %366, label %367, label %371
367: ; preds = %362
%368 = load i8, i8* %13
%369 = sext i8 %368 to i32
%370 = call i32 @tolower(i32 %369)
br label %374
371: ; preds = %362, %358
%372 = load i8, i8* %13
%373 = sext i8 %372 to i32
br label %374
374: ; preds = %371, %367
%375 = phi i32 [ %370, %367 ], [ %373, %371 ]
%376 = trunc i32 %375 to i8
store i8 %376, i8* %14
store i8 %376, i8* %13
%377 = load i8, i8* %10
%378 = sext i8 %377 to i32
%379 = icmp eq i32 %378, 0
br i1 %379, label %380, label %381
380: ; preds = %374
store i32 1, i32* %4
br label %598
381: ; preds = %374
%382 = load i8*, i8** %8
%383 = getelementptr inbounds i8, i8* %382, i32 1
store i8* %383, i8** %8
%384 = load i8, i8* %382
store i8 %384, i8* %10
%385 = load i32, i32* %7
%386 = and i32 %385, 16
%387 = icmp ne i32 %386, 0
br i1 %387, label %388, label %397
388: ; preds = %381
%389 = load i8, i8* %10
%390 = sext i8 %389 to i32
%391 = call i32 @isupper(i32 %390)
%392 = icmp ne i32 %391, 0
br i1 %392, label %393, label %397
393: ; preds = %388
%394 = load i8, i8* %10
%395 = sext i8 %394 to i32
%396 = call i32 @tolower(i32 %395)
br label %400
397: ; preds = %388, %381
%398 = load i8, i8* %10
%399 = sext i8 %398 to i32
br label %400
400: ; preds = %397, %393
%401 = phi i32 [ %396, %393 ], [ %399, %397 ]
%402 = trunc i32 %401 to i8
store i8 %402, i8* %10
%403 = load i32, i32* %7
%404 = and i32 %403, 1
%405 = icmp ne i32 %404, 0
br i1 %405, label %406, label %411
406: ; preds = %400
%407 = load i8, i8* %10
%408 = sext i8 %407 to i32
%409 = icmp eq i32 %408, 47
br i1 %409, label %410, label %411
410: ; preds = %406
store i32 1, i32* %4
br label %598
411: ; preds = %406, %400
%412 = load i8, i8* %10
%413 = sext i8 %412 to i32
%414 = icmp eq i32 %413, 45
br i1 %414, label %415, label %462
415: ; preds = %411
%416 = load i8*, i8** %8
%417 = load i8, i8* %416
%418 = sext i8 %417 to i32
%419 = icmp ne i32 %418, 93
br i1 %419, label %420, label %462
420: ; preds = %415
%421 = load i8*, i8** %8
%422 = getelementptr inbounds i8, i8* %421, i32 1
store i8* %422, i8** %8
%423 = load i8, i8* %421
store i8 %423, i8* %14
%424 = load i32, i32* %7
%425 = and i32 %424, 2
%426 = icmp ne i32 %425, 0
br i1 %426, label %435, label %427
427: ; preds = %420
%428 = load i8, i8* %14
%429 = sext i8 %428 to i32
%430 = icmp eq i32 %429, 92
br i1 %430, label %431, label %435
431: ; preds = %427
%432 = load i8*, i8** %8
%433 = getelementptr inbounds i8, i8* %432, i32 1
store i8* %433, i8** %8
%434 = load i8, i8* %432
store i8 %434, i8* %14
br label %435
435: ; preds = %431, %427, %420
%436 = load i8, i8* %14
%437 = sext i8 %436 to i32
%438 = icmp eq i32 %437, 0
br i1 %438, label %439, label %440
439: ; preds = %435
store i32 1, i32* %4
br label %598
440: ; preds = %435
%441 = load i32, i32* %7
%442 = and i32 %441, 16
%443 = icmp ne i32 %442, 0
br i1 %443, label %444, label %453
444: ; preds = %440
%445 = load i8, i8* %14
%446 = sext i8 %445 to i32
%447 = call i32 @isupper(i32 %446)
%448 = icmp ne i32 %447, 0
br i1 %448, label %449, label %453
449: ; preds = %444
%450 = load i8, i8* %14
%451 = sext i8 %450 to i32
%452 = call i32 @tolower(i32 %451)
br label %456
453: ; preds = %444, %440
%454 = load i8, i8* %14
%455 = sext i8 %454 to i32
br label %456
456: ; preds = %453, %449
%457 = phi i32 [ %452, %449 ], [ %455, %453 ]
%458 = trunc i32 %457 to i8
store i8 %458, i8* %14
%459 = load i8*, i8** %8
%460 = getelementptr inbounds i8, i8* %459, i32 1
store i8* %460, i8** %8
%461 = load i8, i8* %459
store i8 %461, i8* %10
br label %462
462: ; preds = %456, %415, %411
%463 = load i32, i32* %7
%464 = and i32 %463, 16
%465 = icmp ne i32 %464, 0
br i1 %465, label %466, label %477
466: ; preds = %462
%467 = load i8*, i8** %9
%468 = load i8, i8* %467
%469 = sext i8 %468 to i32
%470 = call i32 @isupper(i32 %469)
%471 = icmp ne i32 %470, 0
br i1 %471, label %472, label %477
472: ; preds = %466
%473 = load i8*, i8** %9
%474 = load i8, i8* %473
%475 = sext i8 %474 to i32
%476 = call i32 @tolower(i32 %475)
br label %481
477: ; preds = %466, %462
%478 = load i8*, i8** %9
%479 = load i8, i8* %478
%480 = sext i8 %479 to i32
br label %481
481: ; preds = %477, %472
%482 = phi i32 [ %476, %472 ], [ %480, %477 ]
%483 = load i8, i8* %13
%484 = sext i8 %483 to i32
%485 = icmp sge i32 %482, %484
br i1 %485, label %486, label %511
486: ; preds = %481
%487 = load i32, i32* %7
%488 = and i32 %487, 16
%489 = icmp ne i32 %488, 0
br i1 %489, label %490, label %501
490: ; preds = %486
%491 = load i8*, i8** %9
%492 = load i8, i8* %491
%493 = sext i8 %492 to i32
%494 = call i32 @isupper(i32 %493)
%495 = icmp ne i32 %494, 0
br i1 %495, label %496, label %501
496: ; preds = %490
%497 = load i8*, i8** %9
%498 = load i8, i8* %497
%499 = sext i8 %498 to i32
%500 = call i32 @tolower(i32 %499)
br label %505
501: ; preds = %490, %486
%502 = load i8*, i8** %9
%503 = load i8, i8* %502
%504 = sext i8 %503 to i32
br label %505
505: ; preds = %501, %496
%506 = phi i32 [ %500, %496 ], [ %504, %501 ]
%507 = load i8, i8* %14
%508 = sext i8 %507 to i32
%509 = icmp sle i32 %506, %508
br i1 %509, label %510, label %511
510: ; preds = %505
br label %522
511: ; preds = %505, %481
%512 = load i8, i8* %10
%513 = sext i8 %512 to i32
%514 = icmp eq i32 %513, 93
br i1 %514, label %515, label %516
515: ; preds = %511
br label %517
516: ; preds = %511
br label %344
517: ; preds = %515
%518 = load i32, i32* %12
%519 = icmp ne i32 %518, 0
br i1 %519, label %521, label %520
520: ; preds = %517
store i32 1, i32* %4
br label %598
521: ; preds = %517
br label %578
522: ; preds = %510
br label %523
523: ; preds = %546, %522
%524 = load i8, i8* %10
%525 = sext i8 %524 to i32
%526 = icmp ne i32 %525, 93
br i1 %526, label %527, label %547
527: ; preds = %523
%528 = load i8, i8* %10
%529 = sext i8 %528 to i32
%530 = icmp eq i32 %529, 0
br i1 %530, label %531, label %532
531: ; preds = %527
store i32 1, i32* %4
br label %598
532: ; preds = %527
%533 = load i8*, i8** %8
%534 = getelementptr inbounds i8, i8* %533, i32 1
store i8* %534, i8** %8
%535 = load i8, i8* %533
store i8 %535, i8* %10
%536 = load i32, i32* %7
%537 = and i32 %536, 2
%538 = icmp ne i32 %537, 0
br i1 %538, label %546, label %539
539: ; preds = %532
%540 = load i8, i8* %10
%541 = sext i8 %540 to i32
%542 = icmp eq i32 %541, 92
br i1 %542, label %543, label %546
543: ; preds = %539
%544 = load i8*, i8** %8
%545 = getelementptr inbounds i8, i8* %544, i32 1
store i8* %545, i8** %8
br label %546
546: ; preds = %543, %539, %532
br label %523
547: ; preds = %523
%548 = load i32, i32* %12
%549 = icmp ne i32 %548, 0
br i1 %549, label %550, label %551
550: ; preds = %547
store i32 1, i32* %4
br label %598
551: ; preds = %547
br label %578
552: ; preds = %39
%553 = load i8, i8* %10
%554 = sext i8 %553 to i32
%555 = load i32, i32* %7
%556 = and i32 %555, 16
%557 = icmp ne i32 %556, 0
br i1 %557, label %558, label %569
558: ; preds = %552
%559 = load i8*, i8** %9
%560 = load i8, i8* %559
%561 = sext i8 %560 to i32
%562 = call i32 @isupper(i32 %561)
%563 = icmp ne i32 %562, 0
br i1 %563, label %564, label %569
564: ; preds = %558
%565 = load i8*, i8** %9
%566 = load i8, i8* %565
%567 = sext i8 %566 to i32
%568 = call i32 @tolower(i32 %567)
br label %573
569: ; preds = %558, %552
%570 = load i8*, i8** %9
%571 = load i8, i8* %570
%572 = sext i8 %571 to i32
br label %573
573: ; preds = %569, %564
%574 = phi i32 [ %568, %564 ], [ %572, %569 ]
%575 = icmp ne i32 %554, %574
br i1 %575, label %576, label %577
576: ; preds = %573
store i32 1, i32* %4
br label %598
577: ; preds = %573
br label %578
578: ; preds = %577, %551, %521, %138, %86
%579 = load i8*, i8** %9
%580 = getelementptr inbounds i8, i8* %579, i32 1
store i8* %580, i8** %9
br label %17
581: ; preds = %17
%582 = load i8*, i8** %9
%583 = load i8, i8* %582
%584 = sext i8 %583 to i32
%585 = icmp eq i32 %584, 0
br i1 %585, label %586, label %587
586: ; preds = %581
store i32 0, i32* %4
br label %598
587: ; preds = %581
%588 = load i32, i32* %7
%589 = and i32 %588, 8
%590 = icmp ne i32 %589, 0
br i1 %590, label %591, label %597
591: ; preds = %587
%592 = load i8*, i8** %9
%593 = load i8, i8* %592
%594 = sext i8 %593 to i32
%595 = icmp eq i32 %594, 47
br i1 %595, label %596, label %597
596: ; preds = %591
store i32 0, i32* %4
br label %598
597: ; preds = %591, %587
store i32 1, i32* %4
br label %598
598: ; preds = %597, %596, %586, %576, %550, %531, %520, %439, %410, %380, %321, %297, %291, %286, %207, %195, %162, %137, %83, %59, %49
%599 = load i32, i32* %4
ret i32 %599
}

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