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++;
        if (c == '\0')
          return 1;
        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++) {
        if ((flags & (1 << 0)) && *n == '/')
          return 1;
        else if (c == '?') {
          if (*n == '\0')
            return 1;
          else
            ++n;
        }
      }
      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 == '\\') {
          if (*p == '\0')
            return 1;
          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 == '\\') {
          if (*p == '\0')
            return 1;
          ++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     1ac3 <fnmatch+0x993>
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     1389 <fnmatch+0x259>
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     1601 <fnmatch+0x4d1>
jmp    11ec <fnmatch+0xbc>
mov    -0x44(%rbp),%eax
sub    $0x5c,%eax
je     12ac <fnmatch+0x17c>
jmp    1a4a <fnmatch+0x91a>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1219 <fnmatch+0xe9>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
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    1b11 <fnmatch+0x9e1>
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    1b11 <fnmatch+0x9e1>
jmp    12a2 <fnmatch+0x172>
jmp    12a7 <fnmatch+0x177>
jmp    1ab2 <fnmatch+0x982>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    1327 <fnmatch+0x1f7>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    12e8 <fnmatch+0x1b8>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     131a <fnmatch+0x1ea>
movsbl -0x31(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     131a <fnmatch+0x1ea>
movsbl -0x31(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x48(%rbp)
jmp    1321 <fnmatch+0x1f1>
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     135f <fnmatch+0x22f>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     135f <fnmatch+0x22f>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x4c(%rbp)
jmp    1369 <fnmatch+0x239>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
movsbl -0x31(%rbp),%ecx
cmp    %ecx,%eax
je     1384 <fnmatch+0x254>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
jmp    1ab2 <fnmatch+0x982>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     13e2 <fnmatch+0x2b2>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    13e2 <fnmatch+0x2b2>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
je     13d6 <fnmatch+0x2a6>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     13e2 <fnmatch+0x2b2>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    13e2 <fnmatch+0x2b2>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
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     1415 <fnmatch+0x2e5>
movsbl -0x31(%rbp),%eax
cmp    $0x2a,%eax
sete   %al
mov    %al,-0x4d(%rbp)
mov    -0x4d(%rbp),%al
test   $0x1,%al
jne    1425 <fnmatch+0x2f5>
jmp    14ad <fnmatch+0x37d>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1450 <fnmatch+0x320>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1450 <fnmatch+0x320>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
movsbl -0x31(%rbp),%eax
cmp    $0x3f,%eax
jne    148a <fnmatch+0x35a>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1479 <fnmatch+0x349>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    148a <fnmatch+0x35a>
jmp    148f <fnmatch+0x35f>
jmp    1494 <fnmatch+0x364>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
jmp    13f6 <fnmatch+0x2c6>
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    14c6 <fnmatch+0x396>
movl   $0x0,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    14f1 <fnmatch+0x3c1>
movsbl -0x31(%rbp),%eax
cmp    $0x5c,%eax
jne    14f1 <fnmatch+0x3c1>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x54(%rbp)
jmp    14f8 <fnmatch+0x3c8>
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     1530 <fnmatch+0x400>
movsbl -0x32(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1530 <fnmatch+0x400>
movsbl -0x32(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x58(%rbp)
jmp    1537 <fnmatch+0x407>
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     15f5 <fnmatch+0x4c5>
movsbl -0x31(%rbp),%eax
cmp    $0x5b,%eax
je     15b7 <fnmatch+0x487>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     159e <fnmatch+0x46e>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     159e <fnmatch+0x46e>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x5c(%rbp)
jmp    15a8 <fnmatch+0x478>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
movsbl -0x32(%rbp),%ecx
cmp    %ecx,%eax
jne    15df <fnmatch+0x4af>
mov    -0x28(%rbp),%rdi
mov    -0x30(%rbp),%rsi
mov    -0x1c(%rbp),%edx
and    $0xfffffffb,%edx
call   1030 <fnmatch@plt>
cmp    $0x0,%eax
jne    15df <fnmatch+0x4af>
movl   $0x0,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
jmp    15e4 <fnmatch+0x4b4>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1549 <fnmatch+0x419>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    161d <fnmatch+0x4ed>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     1676 <fnmatch+0x546>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1676 <fnmatch+0x546>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
je     166a <fnmatch+0x53a>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1676 <fnmatch+0x546>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    1676 <fnmatch+0x546>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
mov    -0x28(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x21,%ecx
mov    %al,-0x5d(%rbp)
je     169b <fnmatch+0x56b>
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     16bc <fnmatch+0x58c>
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    172b <fnmatch+0x5fb>
movsbl -0x31(%rbp),%eax
cmp    $0x5c,%eax
jne    172b <fnmatch+0x5fb>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1714 <fnmatch+0x5e4>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
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     175d <fnmatch+0x62d>
movsbl -0x39(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     175d <fnmatch+0x62d>
movsbl -0x39(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x64(%rbp)
jmp    1764 <fnmatch+0x634>
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    1786 <fnmatch+0x656>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
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     17cc <fnmatch+0x69c>
movsbl -0x31(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     17cc <fnmatch+0x69c>
movsbl -0x31(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x68(%rbp)
jmp    17d3 <fnmatch+0x6a3>
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     1801 <fnmatch+0x6d1>
movsbl -0x31(%rbp),%eax
cmp    $0x2f,%eax
jne    1801 <fnmatch+0x6d1>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
movsbl -0x31(%rbp),%eax
cmp    $0x2d,%eax
jne    18ce <fnmatch+0x79e>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
je     18ce <fnmatch+0x79e>
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    1862 <fnmatch+0x732>
movsbl -0x3a(%rbp),%eax
cmp    $0x5c,%eax
jne    1862 <fnmatch+0x732>
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    187b <fnmatch+0x74b>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     18ad <fnmatch+0x77d>
movsbl -0x3a(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     18ad <fnmatch+0x77d>
movsbl -0x3a(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x6c(%rbp)
jmp    18b4 <fnmatch+0x784>
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     1906 <fnmatch+0x7d6>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1906 <fnmatch+0x7d6>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x70(%rbp)
jmp    1910 <fnmatch+0x7e0>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
movsbl -0x39(%rbp),%ecx
cmp    %ecx,%eax
jl     1975 <fnmatch+0x845>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1957 <fnmatch+0x827>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1957 <fnmatch+0x827>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x74(%rbp)
jmp    1961 <fnmatch+0x831>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
movsbl -0x3a(%rbp),%ecx
cmp    %ecx,%eax
jg     1975 <fnmatch+0x845>
jmp    19a7 <fnmatch+0x877>
movsbl -0x31(%rbp),%eax
cmp    $0x5d,%eax
jne    1987 <fnmatch+0x857>
jmp    198c <fnmatch+0x85c>
jmp    16d0 <fnmatch+0x5a0>
cmpl   $0x0,-0x38(%rbp)
jne    19a2 <fnmatch+0x872>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
jmp    1ab2 <fnmatch+0x982>
jmp    19ac <fnmatch+0x87c>
movsbl -0x31(%rbp),%eax
cmp    $0x5d,%eax
je     1a2f <fnmatch+0x8ff>
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    19d2 <fnmatch+0x8a2>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
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    1a2a <fnmatch+0x8fa>
movsbl -0x31(%rbp),%eax
cmp    $0x5c,%eax
jne    1a2a <fnmatch+0x8fa>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1a1e <fnmatch+0x8ee>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    19ac <fnmatch+0x87c>
cmpl   $0x0,-0x38(%rbp)
je     1a45 <fnmatch+0x915>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
jmp    1ab2 <fnmatch+0x982>
movsbl -0x31(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1a89 <fnmatch+0x959>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1a89 <fnmatch+0x959>
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x7c(%rbp)
jmp    1a93 <fnmatch+0x963>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x78(%rbp),%eax
mov    -0x7c(%rbp),%ecx
cmp    %ecx,%eax
je     1aad <fnmatch+0x97d>
movl   $0x1,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
jmp    1ab2 <fnmatch+0x982>
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    1adf <fnmatch+0x9af>
movl   $0x0,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
mov    -0x1c(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     1b0a <fnmatch+0x9da>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1b0a <fnmatch+0x9da>
movl   $0x0,-0x4(%rbp)
jmp    1b11 <fnmatch+0x9e1>
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    $0x18,%rsp
mov    (%rdi),%al
test   %al,%al
je     1583 <fnmatch+0x453>
mov    %rdi,%r12
mov    %edx,%ecx
and    $0x1,%cl
mov    %cl,0x7(%rsp)
mov    %rsi,0x10(%rsp)
mov    %edx,(%rsp)
jmp    1183 <fnmatch+0x53>
mov    0x8(%rsp),%rsi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%rsi
mov    0x0(%r13),%al
mov    %r13,%r12
test   %al,%al
je     1583 <fnmatch+0x453>
movsbl %al,%ebx
test   $0x10,%dl
mov    %rsi,0x8(%rsp)
je     11ac <fnmatch+0x7c>
mov    %ebx,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     11a4 <fnmatch+0x74>
mov    %ebx,%edi
call   1040 <tolower@plt>
mov    %eax,%ebx
mov    (%rsp),%edx
mov    0x8(%rsp),%rsi
lea    0x1(%r12),%r13
movsbl %bl,%ebp
cmp    $0x5a,%ebp
jle    1200 <fnmatch+0xd0>
cmp    $0x5b,%ebp
je     1270 <fnmatch+0x140>
cmp    $0x5c,%ebp
jne    1467 <fnmatch+0x337>
test   $0x2,%dl
jne    1498 <fnmatch+0x368>
movsbl 0x1(%r12),%ebx
test   %ebx,%ebx
je     16be <fnmatch+0x58e>
add    $0x2,%r12
test   $0x10,%dl
jne    149f <fnmatch+0x36f>
mov    %r12,%r13
jmp    1502 <fnmatch+0x3d2>
nopw   0x0(%rax,%rax,1)
cmp    $0x3f,%ebp
jne    145e <fnmatch+0x32e>
mov    (%rsi),%bl
mov    $0x1,%eax
test   %bl,%bl
je     16c3 <fnmatch+0x593>
cmp    $0x2f,%bl
sete   %cl
test   %cl,0x7(%rsp)
jne    16c3 <fnmatch+0x593>
test   $0x4,%dl
je     115e <fnmatch+0x2e>
cmp    $0x2e,%bl
jne    115e <fnmatch+0x2e>
mov    0x8(%rsp),%rsi
cmp    0x10(%rsp),%rsi
je     16c3 <fnmatch+0x593>
test   $0x1,%dl
je     1170 <fnmatch+0x40>
cmpb   $0x2f,-0x1(%rsi)
jne    1170 <fnmatch+0x40>
jmp    16c3 <fnmatch+0x593>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl (%rsi),%ebx
test   %ebx,%ebx
je     16be <fnmatch+0x58e>
test   $0x4,%dl
je     129f <fnmatch+0x16f>
cmp    $0x2e,%bl
jne    129f <fnmatch+0x16f>
cmp    0x10(%rsp),%rsi
je     16be <fnmatch+0x58e>
test   $0x1,%dl
je     129f <fnmatch+0x16f>
cmpb   $0x2f,-0x1(%rsi)
je     16be <fnmatch+0x58e>
mov    0x1(%r12),%cl
cmp    $0x21,%cl
sete   %al
mov    %cl,0x6(%rsp)
cmp    $0x5e,%cl
sete   %cl
or     %al,%cl
lea    0x2(%r12),%rax
movzbl %cl,%ecx
test   %cl,%cl
cmovne %rax,%r13
add    $0x1,%r13
mov    0x1(%rcx,%r12,1),%bpl
jmp    12e6 <fnmatch+0x1b6>
nop
movsbl %r12b,%ecx
cmp    %ecx,%eax
jle    151a <fnmatch+0x3ea>
cmp    $0x5d,%bpl
je     14d5 <fnmatch+0x3a5>
test   $0x2,%dl
jne    1310 <fnmatch+0x1e0>
cmp    $0x5c,%bpl
jne    1310 <fnmatch+0x1e0>
movzbl 0x0(%r13),%eax
test   %al,%al
je     16be <fnmatch+0x58e>
add    $0x1,%r13
mov    %r13,%r14
test   $0x10,%dl
je     1320 <fnmatch+0x1f0>
jmp    1333 <fnmatch+0x203>
nopl   0x0(%rax)
mov    %ebp,%eax
test   $0x10,%dl
jne    1330 <fnmatch+0x200>
test   %bpl,%bpl
je     16be <fnmatch+0x58e>
movzbl %al,%r15d
movzbl 0x0(%r13),%ebp
mov    %r13,%r14
jmp    137d <fnmatch+0x24d>
xchg   %ax,%ax
mov    %r13,%r14
movsbl %al,%r15d
mov    %r15d,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1359 <fnmatch+0x229>
test   %bpl,%bpl
je     16be <fnmatch+0x58e>
mov    %r15d,%edi
call   1040 <tolower@plt>
mov    %eax,%r15d
jmp    1362 <fnmatch+0x232>
test   %bpl,%bpl
je     16be <fnmatch+0x58e>
movsbl (%r14),%ebp
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     137a <fnmatch+0x24a>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
mov    (%rsp),%edx
mov    %ebp,%eax
shl    $0x18,%eax
test   $0x1,%dl
je     1392 <fnmatch+0x262>
cmp    $0x2f000000,%eax
je     16be <fnmatch+0x58e>
lea    0x1(%r14),%r13
cmp    $0x2d000000,%eax
jne    1410 <fnmatch+0x2e0>
movzbl 0x0(%r13),%eax
mov    %r15d,%r12d
cmp    $0x5d,%al
je     13f6 <fnmatch+0x2c6>
lea    0x2(%r14),%r13
test   $0x2,%dl
jne    13c2 <fnmatch+0x292>
cmp    $0x5c,%al
jne    13c2 <fnmatch+0x292>
movzbl 0x2(%r14),%eax
add    $0x3,%r14
mov    %r14,%r13
test   %al,%al
je     16be <fnmatch+0x58e>
movsbl %al,%r12d
test   $0x10,%dl
je     13ed <fnmatch+0x2bd>
mov    %r12d,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     13ea <fnmatch+0x2ba>
mov    %r12d,%edi
call   1040 <tolower@plt>
mov    %eax,%r12d
mov    (%rsp),%edx
movzbl 0x0(%r13),%ebp
add    $0x1,%r13
test   $0x10,%dl
jne    1418 <fnmatch+0x2e8>
movsbl %r15b,%ecx
mov    %ebx,%eax
cmp    %ebx,%ecx
jle    12d0 <fnmatch+0x1a0>
jmp    12dc <fnmatch+0x1ac>
xchg   %ax,%ax
mov    %r15d,%r12d
test   $0x10,%dl
je     13fb <fnmatch+0x2cb>
mov    %ebx,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1448 <fnmatch+0x318>
mov    %ebx,%edi
call   1040 <tolower@plt>
movsbl %r15b,%ecx
cmp    %ecx,%eax
mov    (%rsp),%edx
jl     12dc <fnmatch+0x1ac>
mov    %ebx,%edi
call   1040 <tolower@plt>
mov    (%rsp),%edx
jmp    12d0 <fnmatch+0x1a0>
movsbl %r15b,%ecx
mov    %ebx,%eax
cmp    %ebx,%ecx
mov    (%rsp),%edx
jg     12dc <fnmatch+0x1ac>
jmp    12d0 <fnmatch+0x1a0>
cmp    $0x2a,%ebp
je     15a2 <fnmatch+0x472>
movsbl (%rsi),%ebx
test   $0x10,%dl
je     148b <fnmatch+0x35b>
mov    %ebx,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1483 <fnmatch+0x353>
mov    %ebx,%edi
call   1040 <tolower@plt>
mov    %eax,%ebx
mov    (%rsp),%edx
mov    0x8(%rsp),%rsi
cmp    %ebx,%ebp
je     1170 <fnmatch+0x40>
jmp    16be <fnmatch+0x58e>
test   $0x10,%dl
jne    14bb <fnmatch+0x38b>
jmp    1502 <fnmatch+0x3d2>
mov    %ebx,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     14b3 <fnmatch+0x383>
mov    %ebx,%edi
call   1040 <tolower@plt>
mov    %eax,%ebx
mov    %r12,%r13
mov    0x8(%rsp),%rsi
movsbl (%rsi),%ebp
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     14fa <fnmatch+0x3ca>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    (%rsp),%edx
jmp    1505 <fnmatch+0x3d5>
mov    0x6(%rsp),%cl
cmp    $0x21,%cl
mov    $0x1,%eax
je     115e <fnmatch+0x2e>
cmp    $0x5e,%cl
mov    0x8(%rsp),%rsi
je     1170 <fnmatch+0x40>
jmp    16c3 <fnmatch+0x593>
mov    (%rsp),%edx
mov    0x8(%rsp),%rsi
movsbl (%rsi),%eax
movsbl %bl,%ecx
cmp    %ecx,%eax
mov    0x8(%rsp),%rsi
je     1170 <fnmatch+0x40>
jmp    16be <fnmatch+0x58e>
mov    %r13,%rcx
mov    0x8(%rsp),%rsi
mov    $0x1,%eax
nopw   0x0(%rax,%rax,1)
test   %bpl,%bpl
je     16c3 <fnmatch+0x593>
mov    %rcx,%r13
cmp    $0x5d,%bpl
je     1568 <fnmatch+0x438>
lea    0x1(%r13),%rcx
movzbl 0x0(%r13),%ebp
test   $0x2,%dl
jne    1530 <fnmatch+0x400>
cmp    $0x5c,%bpl
jne    1530 <fnmatch+0x400>
cmpb   $0x0,(%rcx)
je     16c3 <fnmatch+0x593>
add    $0x2,%r13
mov    %r13,%rcx
jmp    1530 <fnmatch+0x400>
mov    0x6(%rsp),%cl
cmp    $0x21,%cl
je     16c3 <fnmatch+0x593>
cmp    $0x5e,%cl
jne    1170 <fnmatch+0x40>
jmp    16c3 <fnmatch+0x593>
mov    (%rsi),%al
test   %al,%al
je     1609 <fnmatch+0x4d9>
test   $0x8,%dl
sete   %cl
cmp    $0x2f,%al
setne  %al
or     %cl,%al
movzbl %al,%eax
jmp    16c3 <fnmatch+0x593>
test   $0x4,%dl
je     15d0 <fnmatch+0x4a0>
cmpb   $0x2e,(%rsi)
jne    15d0 <fnmatch+0x4a0>
mov    $0x1,%eax
cmp    0x10(%rsp),%rsi
je     16c3 <fnmatch+0x593>
test   $0x1,%dl
je     15d0 <fnmatch+0x4a0>
cmpb   $0x2f,-0x1(%rsi)
je     16c3 <fnmatch+0x593>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r12
movzbl (%r12),%ebx
cmp    $0x2a,%bl
je     15e3 <fnmatch+0x4b3>
cmp    $0x3f,%bl
jne    1605 <fnmatch+0x4d5>
test   $0x1,%dl
je     15f1 <fnmatch+0x4c1>
cmpb   $0x2f,(%rsi)
je     16be <fnmatch+0x58e>
cmp    $0x3f,%bl
jne    15d0 <fnmatch+0x4a0>
cmpb   $0x0,(%rsi)
je     16be <fnmatch+0x58e>
add    $0x1,%rsi
jmp    15d0 <fnmatch+0x4a0>
test   %bl,%bl
jne    1610 <fnmatch+0x4e0>
xor    %eax,%eax
jmp    16c3 <fnmatch+0x593>
mov    %ebx,%eax
test   $0x2,%dl
jne    1623 <fnmatch+0x4f3>
mov    %ebx,%eax
cmp    $0x5c,%bl
jne    1623 <fnmatch+0x4f3>
mov    0x1(%r12),%al
test   $0x10,%dl
jne    162e <fnmatch+0x4fe>
movzbl %al,%r14d
jmp    1652 <fnmatch+0x522>
mov    %rsi,%rbp
movsbl %al,%r14d
mov    %r14d,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     164c <fnmatch+0x51c>
mov    %r14d,%edi
call   1040 <tolower@plt>
mov    %eax,%r14d
mov    (%rsp),%edx
mov    %rbp,%rsi
mov    (%rsi),%al
test   %al,%al
je     16be <fnmatch+0x58e>
movsbl %r14b,%r13d
mov    %edx,%r15d
and    $0xfffffffb,%r15d
jmp    1689 <fnmatch+0x559>
mov    %r12,%rdi
mov    %r15d,%edx
mov    %rsi,%rbp
call   1030 <fnmatch@plt>
mov    %rbp,%rsi
mov    (%rsp),%edx
test   %eax,%eax
je     1609 <fnmatch+0x4d9>
movzbl 0x1(%rsi),%eax
add    $0x1,%rsi
test   %al,%al
je     16be <fnmatch+0x58e>
cmp    $0x5b,%bl
je     1665 <fnmatch+0x535>
movsbl %al,%r14d
test   $0x10,%dl
je     16b7 <fnmatch+0x587>
mov    %rsi,%rbp
mov    %r14d,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     16b1 <fnmatch+0x581>
mov    %r14d,%edi
call   1040 <tolower@plt>
mov    %eax,%r14d
mov    (%rsp),%edx
mov    %rbp,%rsi
cmp    %r13d,%r14d
je     1665 <fnmatch+0x535>
jmp    167d <fnmatch+0x54d>
mov    $0x1,%eax
add    $0x18,%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 = %599, %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 %602
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 %573 [
i32 63, label %44
i32 92, label %87
i32 42, label %144
i32 91, label %301
]
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 %619
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 %619
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 %619
84: ; preds = %77, %73, %64, %60
br label %85
85: ; preds = %84
br label %86
86: ; preds = %85
br label %599
87: ; preds = %39
%88 = load i32, i32* %7
%89 = and i32 %88, 2
%90 = icmp ne i32 %89, 0
br i1 %90, label %118, 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 i8, i8* %10
%96 = sext i8 %95 to i32
%97 = icmp eq i32 %96, 0
br i1 %97, label %98, label %99
98: ; preds = %91
store i32 1, i32* %4
br label %619
99: ; preds = %91
%100 = load i32, i32* %7
%101 = and i32 %100, 16
%102 = icmp ne i32 %101, 0
br i1 %102, label %103, label %112
103: ; preds = %99
%104 = load i8, i8* %10
%105 = sext i8 %104 to i32
%106 = call i32 @isupper(i32 %105)
%107 = icmp ne i32 %106, 0
br i1 %107, label %108, label %112
108: ; preds = %103
%109 = load i8, i8* %10
%110 = sext i8 %109 to i32
%111 = call i32 @tolower(i32 %110)
br label %115
112: ; preds = %103, %99
%113 = load i8, i8* %10
%114 = sext i8 %113 to i32
br label %115
115: ; preds = %112, %108
%116 = phi i32 [ %111, %108 ], [ %114, %112 ]
%117 = trunc i32 %116 to i8
store i8 %117, i8* %10
br label %118
118: ; preds = %115, %87
%119 = load i32, i32* %7
%120 = and i32 %119, 16
%121 = icmp ne i32 %120, 0
br i1 %121, label %122, label %133
122: ; preds = %118
%123 = load i8*, i8** %9
%124 = load i8, i8* %123
%125 = sext i8 %124 to i32
%126 = call i32 @isupper(i32 %125)
%127 = icmp ne i32 %126, 0
br i1 %127, label %128, label %133
128: ; preds = %122
%129 = load i8*, i8** %9
%130 = load i8, i8* %129
%131 = sext i8 %130 to i32
%132 = call i32 @tolower(i32 %131)
br label %137
133: ; preds = %122, %118
%134 = load i8*, i8** %9
%135 = load i8, i8* %134
%136 = sext i8 %135 to i32
br label %137
137: ; preds = %133, %128
%138 = phi i32 [ %132, %128 ], [ %136, %133 ]
%139 = load i8, i8* %10
%140 = sext i8 %139 to i32
%141 = icmp ne i32 %138, %140
br i1 %141, label %142, label %143
142: ; preds = %137
store i32 1, i32* %4
br label %619
143: ; preds = %137
br label %599
144: ; preds = %39
%145 = load i32, i32* %7
%146 = and i32 %145, 4
%147 = icmp ne i32 %146, 0
br i1 %147, label %148, label %168
148: ; preds = %144
%149 = load i8*, i8** %9
%150 = load i8, i8* %149
%151 = sext i8 %150 to i32
%152 = icmp eq i32 %151, 46
br i1 %152, label %153, label %168
153: ; preds = %148
%154 = load i8*, i8** %9
%155 = load i8*, i8** %6
%156 = icmp eq i8* %154, %155
br i1 %156, label %167, label %157
157: ; preds = %153
%158 = load i32, i32* %7
%159 = and i32 %158, 1
%160 = icmp ne i32 %159, 0
br i1 %160, label %161, label %168
161: ; preds = %157
%162 = load i8*, i8** %9
%163 = getelementptr inbounds i8, i8* %162, i64 -1
%164 = load i8, i8* %163
%165 = sext i8 %164 to i32
%166 = icmp eq i32 %165, 47
br i1 %166, label %167, label %168
167: ; preds = %161, %153
store i32 1, i32* %4
br label %619
168: ; preds = %161, %157, %148, %144
%169 = load i8*, i8** %8
%170 = getelementptr inbounds i8, i8* %169, i32 1
store i8* %170, i8** %8
%171 = load i8, i8* %169
store i8 %171, i8* %10
br label %172
172: ; preds = %208, %168
%173 = load i8, i8* %10
%174 = sext i8 %173 to i32
%175 = icmp eq i32 %174, 63
br i1 %175, label %180, label %176
176: ; preds = %172
%177 = load i8, i8* %10
%178 = sext i8 %177 to i32
%179 = icmp eq i32 %178, 42
br label %180
180: ; preds = %176, %172
%181 = phi i1 [ true, %172 ], [ %179, %176 ]
br i1 %181, label %182, label %212
182: ; preds = %180
%183 = load i32, i32* %7
%184 = and i32 %183, 1
%185 = icmp ne i32 %184, 0
br i1 %185, label %186, label %192
186: ; preds = %182
%187 = load i8*, i8** %9
%188 = load i8, i8* %187
%189 = sext i8 %188 to i32
%190 = icmp eq i32 %189, 47
br i1 %190, label %191, label %192
191: ; preds = %186
store i32 1, i32* %4
br label %619
192: ; preds = %186, %182
%193 = load i8, i8* %10
%194 = sext i8 %193 to i32
%195 = icmp eq i32 %194, 63
br i1 %195, label %196, label %206
196: ; preds = %192
%197 = load i8*, i8** %9
%198 = load i8, i8* %197
%199 = sext i8 %198 to i32
%200 = icmp eq i32 %199, 0
br i1 %200, label %201, label %202
201: ; preds = %196
store i32 1, i32* %4
br label %619
202: ; preds = %196
%203 = load i8*, i8** %9
%204 = getelementptr inbounds i8, i8* %203, i32 1
store i8* %204, i8** %9
br label %205
205: ; preds = %202
br label %206
206: ; preds = %205, %192
br label %207
207: ; preds = %206
br label %208
208: ; preds = %207
%209 = load i8*, i8** %8
%210 = getelementptr inbounds i8, i8* %209, i32 1
store i8* %210, i8** %8
%211 = load i8, i8* %209
store i8 %211, i8* %10
br label %172
212: ; preds = %180
%213 = load i8, i8* %10
%214 = sext i8 %213 to i32
%215 = icmp eq i32 %214, 0
br i1 %215, label %216, label %217
216: ; preds = %212
store i32 0, i32* %4
br label %619
217: ; preds = %212
%218 = load i32, i32* %7
%219 = and i32 %218, 2
%220 = icmp ne i32 %219, 0
br i1 %220, label %229, label %221
221: ; preds = %217
%222 = load i8, i8* %10
%223 = sext i8 %222 to i32
%224 = icmp eq i32 %223, 92
br i1 %224, label %225, label %229
225: ; preds = %221
%226 = load i8*, i8** %8
%227 = load i8, i8* %226
%228 = sext i8 %227 to i32
br label %232
229: ; preds = %221, %217
%230 = load i8, i8* %10
%231 = sext i8 %230 to i32
br label %232
232: ; preds = %229, %225
%233 = phi i32 [ %228, %225 ], [ %231, %229 ]
%234 = trunc i32 %233 to i8
store i8 %234, i8* %11
%235 = load i32, i32* %7
%236 = and i32 %235, 16
%237 = icmp ne i32 %236, 0
br i1 %237, label %238, label %247
238: ; preds = %232
%239 = load i8, i8* %11
%240 = sext i8 %239 to i32
%241 = call i32 @isupper(i32 %240)
%242 = icmp ne i32 %241, 0
br i1 %242, label %243, label %247
243: ; preds = %238
%244 = load i8, i8* %11
%245 = sext i8 %244 to i32
%246 = call i32 @tolower(i32 %245)
br label %250
247: ; preds = %238, %232
%248 = load i8, i8* %11
%249 = sext i8 %248 to i32
br label %250
250: ; preds = %247, %243
%251 = phi i32 [ %246, %243 ], [ %249, %247 ]
%252 = trunc i32 %251 to i8
store i8 %252, i8* %11
%253 = load i8*, i8** %8
%254 = getelementptr inbounds i8, i8* %253, i32 -1
store i8* %254, i8** %8
br label %255
255: ; preds = %297, %250
%256 = load i8*, i8** %9
%257 = load i8, i8* %256
%258 = sext i8 %257 to i32
%259 = icmp ne i32 %258, 0
br i1 %259, label %260, label %300
260: ; preds = %255
%261 = load i8, i8* %10
%262 = sext i8 %261 to i32
%263 = icmp eq i32 %262, 91
br i1 %263, label %288, label %264
264: ; preds = %260
%265 = load i32, i32* %7
%266 = and i32 %265, 16
%267 = icmp ne i32 %266, 0
br i1 %267, label %268, label %279
268: ; preds = %264
%269 = load i8*, i8** %9
%270 = load i8, i8* %269
%271 = sext i8 %270 to i32
%272 = call i32 @isupper(i32 %271)
%273 = icmp ne i32 %272, 0
br i1 %273, label %274, label %279
274: ; preds = %268
%275 = load i8*, i8** %9
%276 = load i8, i8* %275
%277 = sext i8 %276 to i32
%278 = call i32 @tolower(i32 %277)
br label %283
279: ; preds = %268, %264
%280 = load i8*, i8** %9
%281 = load i8, i8* %280
%282 = sext i8 %281 to i32
br label %283
283: ; preds = %279, %274
%284 = phi i32 [ %278, %274 ], [ %282, %279 ]
%285 = load i8, i8* %11
%286 = sext i8 %285 to i32
%287 = icmp eq i32 %284, %286
br i1 %287, label %288, label %296
288: ; preds = %283, %260
%289 = load i8*, i8** %8
%290 = load i8*, i8** %9
%291 = load i32, i32* %7
%292 = and i32 %291, -5
%293 = call i32 @fnmatch(i8* %289, i8* %290, i32 %292)
%294 = icmp eq i32 %293, 0
br i1 %294, label %295, label %296
295: ; preds = %288
store i32 0, i32* %4
br label %619
296: ; preds = %288, %283
br label %297
297: ; preds = %296
%298 = load i8*, i8** %9
%299 = getelementptr inbounds i8, i8* %298, i32 1
store i8* %299, i8** %9
br label %255
300: ; preds = %255
store i32 1, i32* %4
br label %619
301: ; preds = %39
%302 = load i8*, i8** %9
%303 = load i8, i8* %302
%304 = sext i8 %303 to i32
%305 = icmp eq i32 %304, 0
br i1 %305, label %306, label %307
306: ; preds = %301
store i32 1, i32* %4
br label %619
307: ; preds = %301
%308 = load i32, i32* %7
%309 = and i32 %308, 4
%310 = icmp ne i32 %309, 0
br i1 %310, label %311, label %331
311: ; preds = %307
%312 = load i8*, i8** %9
%313 = load i8, i8* %312
%314 = sext i8 %313 to i32
%315 = icmp eq i32 %314, 46
br i1 %315, label %316, label %331
316: ; preds = %311
%317 = load i8*, i8** %9
%318 = load i8*, i8** %6
%319 = icmp eq i8* %317, %318
br i1 %319, label %330, label %320
320: ; preds = %316
%321 = load i32, i32* %7
%322 = and i32 %321, 1
%323 = icmp ne i32 %322, 0
br i1 %323, label %324, label %331
324: ; preds = %320
%325 = load i8*, i8** %9
%326 = getelementptr inbounds i8, i8* %325, i64 -1
%327 = load i8, i8* %326
%328 = sext i8 %327 to i32
%329 = icmp eq i32 %328, 47
br i1 %329, label %330, label %331
330: ; preds = %324, %316
store i32 1, i32* %4
br label %619
331: ; preds = %324, %320, %311, %307
%332 = load i8*, i8** %8
%333 = load i8, i8* %332
%334 = sext i8 %333 to i32
%335 = icmp eq i32 %334, 33
br i1 %335, label %341, label %336
336: ; preds = %331
%337 = load i8*, i8** %8
%338 = load i8, i8* %337
%339 = sext i8 %338 to i32
%340 = icmp eq i32 %339, 94
br label %341
341: ; preds = %336, %331
%342 = phi i1 [ true, %331 ], [ %340, %336 ]
%343 = zext i1 %342 to i32
store i32 %343, i32* %12
%344 = load i32, i32* %12
%345 = icmp ne i32 %344, 0
br i1 %345, label %346, label %349
346: ; preds = %341
%347 = load i8*, i8** %8
%348 = getelementptr inbounds i8, i8* %347, i32 1
store i8* %348, i8** %8
br label %349
349: ; preds = %346, %341
%350 = load i8*, i8** %8
%351 = getelementptr inbounds i8, i8* %350, i32 1
store i8* %351, i8** %8
%352 = load i8, i8* %350
store i8 %352, i8* %10
br label %353
353: ; preds = %531, %349
%354 = load i8, i8* %10
store i8 %354, i8* %13
%355 = load i8, i8* %10
store i8 %355, i8* %14
%356 = load i32, i32* %7
%357 = and i32 %356, 2
%358 = icmp ne i32 %357, 0
br i1 %358, label %373, label %359
359: ; preds = %353
%360 = load i8, i8* %10
%361 = sext i8 %360 to i32
%362 = icmp eq i32 %361, 92
br i1 %362, label %363, label %373
363: ; preds = %359
%364 = load i8*, i8** %8
%365 = load i8, i8* %364
%366 = sext i8 %365 to i32
%367 = icmp eq i32 %366, 0
br i1 %367, label %368, label %369
368: ; preds = %363
store i32 1, i32* %4
br label %619
369: ; preds = %363
%370 = load i8*, i8** %8
%371 = getelementptr inbounds i8, i8* %370, i32 1
store i8* %371, i8** %8
%372 = load i8, i8* %370
store i8 %372, i8* %14
store i8 %372, i8* %13
br label %373
373: ; preds = %369, %359, %353
%374 = load i32, i32* %7
%375 = and i32 %374, 16
%376 = icmp ne i32 %375, 0
br i1 %376, label %377, label %386
377: ; preds = %373
%378 = load i8, i8* %13
%379 = sext i8 %378 to i32
%380 = call i32 @isupper(i32 %379)
%381 = icmp ne i32 %380, 0
br i1 %381, label %382, label %386
382: ; preds = %377
%383 = load i8, i8* %13
%384 = sext i8 %383 to i32
%385 = call i32 @tolower(i32 %384)
br label %389
386: ; preds = %377, %373
%387 = load i8, i8* %13
%388 = sext i8 %387 to i32
br label %389
389: ; preds = %386, %382
%390 = phi i32 [ %385, %382 ], [ %388, %386 ]
%391 = trunc i32 %390 to i8
store i8 %391, i8* %14
store i8 %391, i8* %13
%392 = load i8, i8* %10
%393 = sext i8 %392 to i32
%394 = icmp eq i32 %393, 0
br i1 %394, label %395, label %396
395: ; preds = %389
store i32 1, i32* %4
br label %619
396: ; preds = %389
%397 = load i8*, i8** %8
%398 = getelementptr inbounds i8, i8* %397, i32 1
store i8* %398, i8** %8
%399 = load i8, i8* %397
store i8 %399, i8* %10
%400 = load i32, i32* %7
%401 = and i32 %400, 16
%402 = icmp ne i32 %401, 0
br i1 %402, label %403, label %412
403: ; preds = %396
%404 = load i8, i8* %10
%405 = sext i8 %404 to i32
%406 = call i32 @isupper(i32 %405)
%407 = icmp ne i32 %406, 0
br i1 %407, label %408, label %412
408: ; preds = %403
%409 = load i8, i8* %10
%410 = sext i8 %409 to i32
%411 = call i32 @tolower(i32 %410)
br label %415
412: ; preds = %403, %396
%413 = load i8, i8* %10
%414 = sext i8 %413 to i32
br label %415
415: ; preds = %412, %408
%416 = phi i32 [ %411, %408 ], [ %414, %412 ]
%417 = trunc i32 %416 to i8
store i8 %417, i8* %10
%418 = load i32, i32* %7
%419 = and i32 %418, 1
%420 = icmp ne i32 %419, 0
br i1 %420, label %421, label %426
421: ; preds = %415
%422 = load i8, i8* %10
%423 = sext i8 %422 to i32
%424 = icmp eq i32 %423, 47
br i1 %424, label %425, label %426
425: ; preds = %421
store i32 1, i32* %4
br label %619
426: ; preds = %421, %415
%427 = load i8, i8* %10
%428 = sext i8 %427 to i32
%429 = icmp eq i32 %428, 45
br i1 %429, label %430, label %477
430: ; preds = %426
%431 = load i8*, i8** %8
%432 = load i8, i8* %431
%433 = sext i8 %432 to i32
%434 = icmp ne i32 %433, 93
br i1 %434, label %435, label %477
435: ; preds = %430
%436 = load i8*, i8** %8
%437 = getelementptr inbounds i8, i8* %436, i32 1
store i8* %437, i8** %8
%438 = load i8, i8* %436
store i8 %438, i8* %14
%439 = load i32, i32* %7
%440 = and i32 %439, 2
%441 = icmp ne i32 %440, 0
br i1 %441, label %450, label %442
442: ; preds = %435
%443 = load i8, i8* %14
%444 = sext i8 %443 to i32
%445 = icmp eq i32 %444, 92
br i1 %445, label %446, label %450
446: ; preds = %442
%447 = load i8*, i8** %8
%448 = getelementptr inbounds i8, i8* %447, i32 1
store i8* %448, i8** %8
%449 = load i8, i8* %447
store i8 %449, i8* %14
br label %450
450: ; preds = %446, %442, %435
%451 = load i8, i8* %14
%452 = sext i8 %451 to i32
%453 = icmp eq i32 %452, 0
br i1 %453, label %454, label %455
454: ; preds = %450
store i32 1, i32* %4
br label %619
455: ; preds = %450
%456 = load i32, i32* %7
%457 = and i32 %456, 16
%458 = icmp ne i32 %457, 0
br i1 %458, label %459, label %468
459: ; preds = %455
%460 = load i8, i8* %14
%461 = sext i8 %460 to i32
%462 = call i32 @isupper(i32 %461)
%463 = icmp ne i32 %462, 0
br i1 %463, label %464, label %468
464: ; preds = %459
%465 = load i8, i8* %14
%466 = sext i8 %465 to i32
%467 = call i32 @tolower(i32 %466)
br label %471
468: ; preds = %459, %455
%469 = load i8, i8* %14
%470 = sext i8 %469 to i32
br label %471
471: ; preds = %468, %464
%472 = phi i32 [ %467, %464 ], [ %470, %468 ]
%473 = trunc i32 %472 to i8
store i8 %473, i8* %14
%474 = load i8*, i8** %8
%475 = getelementptr inbounds i8, i8* %474, i32 1
store i8* %475, i8** %8
%476 = load i8, i8* %474
store i8 %476, i8* %10
br label %477
477: ; preds = %471, %430, %426
%478 = load i32, i32* %7
%479 = and i32 %478, 16
%480 = icmp ne i32 %479, 0
br i1 %480, label %481, label %492
481: ; preds = %477
%482 = load i8*, i8** %9
%483 = load i8, i8* %482
%484 = sext i8 %483 to i32
%485 = call i32 @isupper(i32 %484)
%486 = icmp ne i32 %485, 0
br i1 %486, label %487, label %492
487: ; preds = %481
%488 = load i8*, i8** %9
%489 = load i8, i8* %488
%490 = sext i8 %489 to i32
%491 = call i32 @tolower(i32 %490)
br label %496
492: ; preds = %481, %477
%493 = load i8*, i8** %9
%494 = load i8, i8* %493
%495 = sext i8 %494 to i32
br label %496
496: ; preds = %492, %487
%497 = phi i32 [ %491, %487 ], [ %495, %492 ]
%498 = load i8, i8* %13
%499 = sext i8 %498 to i32
%500 = icmp sge i32 %497, %499
br i1 %500, label %501, label %526
501: ; preds = %496
%502 = load i32, i32* %7
%503 = and i32 %502, 16
%504 = icmp ne i32 %503, 0
br i1 %504, label %505, label %516
505: ; preds = %501
%506 = load i8*, i8** %9
%507 = load i8, i8* %506
%508 = sext i8 %507 to i32
%509 = call i32 @isupper(i32 %508)
%510 = icmp ne i32 %509, 0
br i1 %510, label %511, label %516
511: ; preds = %505
%512 = load i8*, i8** %9
%513 = load i8, i8* %512
%514 = sext i8 %513 to i32
%515 = call i32 @tolower(i32 %514)
br label %520
516: ; preds = %505, %501
%517 = load i8*, i8** %9
%518 = load i8, i8* %517
%519 = sext i8 %518 to i32
br label %520
520: ; preds = %516, %511
%521 = phi i32 [ %515, %511 ], [ %519, %516 ]
%522 = load i8, i8* %14
%523 = sext i8 %522 to i32
%524 = icmp sle i32 %521, %523
br i1 %524, label %525, label %526
525: ; preds = %520
br label %537
526: ; preds = %520, %496
%527 = load i8, i8* %10
%528 = sext i8 %527 to i32
%529 = icmp eq i32 %528, 93
br i1 %529, label %530, label %531
530: ; preds = %526
br label %532
531: ; preds = %526
br label %353
532: ; preds = %530
%533 = load i32, i32* %12
%534 = icmp ne i32 %533, 0
br i1 %534, label %536, label %535
535: ; preds = %532
store i32 1, i32* %4
br label %619
536: ; preds = %532
br label %599
537: ; preds = %525
br label %538
538: ; preds = %567, %537
%539 = load i8, i8* %10
%540 = sext i8 %539 to i32
%541 = icmp ne i32 %540, 93
br i1 %541, label %542, label %568
542: ; preds = %538
%543 = load i8, i8* %10
%544 = sext i8 %543 to i32
%545 = icmp eq i32 %544, 0
br i1 %545, label %546, label %547
546: ; preds = %542
store i32 1, i32* %4
br label %619
547: ; preds = %542
%548 = load i8*, i8** %8
%549 = getelementptr inbounds i8, i8* %548, i32 1
store i8* %549, i8** %8
%550 = load i8, i8* %548
store i8 %550, i8* %10
%551 = load i32, i32* %7
%552 = and i32 %551, 2
%553 = icmp ne i32 %552, 0
br i1 %553, label %567, label %554
554: ; preds = %547
%555 = load i8, i8* %10
%556 = sext i8 %555 to i32
%557 = icmp eq i32 %556, 92
br i1 %557, label %558, label %567
558: ; preds = %554
%559 = load i8*, i8** %8
%560 = load i8, i8* %559
%561 = sext i8 %560 to i32
%562 = icmp eq i32 %561, 0
br i1 %562, label %563, label %564
563: ; preds = %558
store i32 1, i32* %4
br label %619
564: ; preds = %558
%565 = load i8*, i8** %8
%566 = getelementptr inbounds i8, i8* %565, i32 1
store i8* %566, i8** %8
br label %567
567: ; preds = %564, %554, %547
br label %538
568: ; preds = %538
%569 = load i32, i32* %12
%570 = icmp ne i32 %569, 0
br i1 %570, label %571, label %572
571: ; preds = %568
store i32 1, i32* %4
br label %619
572: ; preds = %568
br label %599
573: ; preds = %39
%574 = load i8, i8* %10
%575 = sext i8 %574 to i32
%576 = load i32, i32* %7
%577 = and i32 %576, 16
%578 = icmp ne i32 %577, 0
br i1 %578, label %579, label %590
579: ; preds = %573
%580 = load i8*, i8** %9
%581 = load i8, i8* %580
%582 = sext i8 %581 to i32
%583 = call i32 @isupper(i32 %582)
%584 = icmp ne i32 %583, 0
br i1 %584, label %585, label %590
585: ; preds = %579
%586 = load i8*, i8** %9
%587 = load i8, i8* %586
%588 = sext i8 %587 to i32
%589 = call i32 @tolower(i32 %588)
br label %594
590: ; preds = %579, %573
%591 = load i8*, i8** %9
%592 = load i8, i8* %591
%593 = sext i8 %592 to i32
br label %594
594: ; preds = %590, %585
%595 = phi i32 [ %589, %585 ], [ %593, %590 ]
%596 = icmp ne i32 %575, %595
br i1 %596, label %597, label %598
597: ; preds = %594
store i32 1, i32* %4
br label %619
598: ; preds = %594
br label %599
599: ; preds = %598, %572, %536, %143, %86
%600 = load i8*, i8** %9
%601 = getelementptr inbounds i8, i8* %600, i32 1
store i8* %601, i8** %9
br label %17
602: ; preds = %17
%603 = load i8*, i8** %9
%604 = load i8, i8* %603
%605 = sext i8 %604 to i32
%606 = icmp eq i32 %605, 0
br i1 %606, label %607, label %608
607: ; preds = %602
store i32 0, i32* %4
br label %619
608: ; preds = %602
%609 = load i32, i32* %7
%610 = and i32 %609, 8
%611 = icmp ne i32 %610, 0
br i1 %611, label %612, label %618
612: ; preds = %608
%613 = load i8*, i8** %9
%614 = load i8, i8* %613
%615 = sext i8 %614 to i32
%616 = icmp eq i32 %615, 47
br i1 %616, label %617, label %618
617: ; preds = %612
store i32 0, i32* %4
br label %619
618: ; preds = %612, %608
store i32 1, i32* %4
br label %619
619: ; preds = %618, %617, %607, %597, %571, %563, %546, %535, %454, %425, %395, %368, %330, %306, %300, %295, %216, %201, %191, %167, %142, %98, %83, %59, %49
%620 = load i32, i32* %4
ret i32 %620
}

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