int fnmatch(pattern, string, flags) const char *pattern;
const char *string;
int flags;
{
  register const char *p = pattern, *n = string;
  register unsigned 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((unsigned char)*n)
               ? tolower((unsigned char)*n)
               : ((unsigned char)*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;
      {
        unsigned 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((unsigned char)*n)
                                ? tolower((unsigned char)*n)
                                : ((unsigned char)*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 unsigned 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((unsigned char)*n)
                 ? tolower((unsigned char)*n)
                 : ((unsigned char)*n)) >= cstart &&
            ((flags & (1 << 4)) && isupper((unsigned char)*n)
                 ? tolower((unsigned char)*n)
                 : ((unsigned char)*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((unsigned char)*n)
                    ? tolower((unsigned char)*n)
                    : ((unsigned char)*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)
movzbl %al,%eax
cmp    $0x0,%eax
je     1a5c <fnmatch+0x92c>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     11a8 <fnmatch+0x78>
movzbl -0x31(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     11a8 <fnmatch+0x78>
movzbl -0x31(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x40(%rbp)
jmp    11af <fnmatch+0x7f>
movzbl -0x31(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %al,-0x31(%rbp)
movzbl -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>
movzbl -0x31(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1301 <fnmatch+0x1d1>
movzbl -0x31(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x48(%rbp)
jmp    1308 <fnmatch+0x1d8>
movzbl -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
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1346 <fnmatch+0x216>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x4c(%rbp)
jmp    1350 <fnmatch+0x220>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
movzbl -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)
movzbl -0x31(%rbp),%ecx
mov    $0x1,%al
cmp    $0x3f,%ecx
mov    %al,-0x4d(%rbp)
je     13fc <fnmatch+0x2cc>
movzbl -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>
movzbl -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>
movzbl -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>
movzbl -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>
movzbl -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>
movzbl -0x32(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1501 <fnmatch+0x3d1>
movzbl -0x32(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x58(%rbp)
jmp    1508 <fnmatch+0x3d8>
movzbl -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>
movzbl -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
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     156f <fnmatch+0x43f>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x5c(%rbp)
jmp    1579 <fnmatch+0x449>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
movzbl -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>
movzbl -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>
movzbl -0x39(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1712 <fnmatch+0x5e2>
movzbl -0x39(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x64(%rbp)
jmp    1719 <fnmatch+0x5e9>
movzbl -0x39(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
mov    %al,-0x3a(%rbp)
mov    %al,-0x39(%rbp)
movzbl -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>
movzbl -0x31(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1781 <fnmatch+0x651>
movzbl -0x31(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x68(%rbp)
jmp    1788 <fnmatch+0x658>
movzbl -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>
movzbl -0x31(%rbp),%eax
cmp    $0x2f,%eax
jne    17b6 <fnmatch+0x686>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
movzbl -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>
movzbl -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)
movzbl -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>
movzbl -0x3a(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1862 <fnmatch+0x732>
movzbl -0x3a(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x6c(%rbp)
jmp    1869 <fnmatch+0x739>
movzbl -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
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     18bb <fnmatch+0x78b>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x70(%rbp)
jmp    18c5 <fnmatch+0x795>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
movzbl -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
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     190c <fnmatch+0x7dc>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x74(%rbp)
jmp    1916 <fnmatch+0x7e6>
mov    -0x30(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
movzbl -0x3a(%rbp),%ecx
cmp    %ecx,%eax
jg     192a <fnmatch+0x7fa>
jmp    195c <fnmatch+0x82c>
movzbl -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>
movzbl -0x31(%rbp),%eax
cmp    $0x5d,%eax
je     19c8 <fnmatch+0x898>
movzbl -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>
movzbl -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>
movzbl -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
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1a22 <fnmatch+0x8f2>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x7c(%rbp)
jmp    1a2c <fnmatch+0x8fc>
mov    -0x30(%rbp),%rax
movzbl (%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     156d <fnmatch+0x43d>
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>
movzbl (%r12),%ebp
movzbl %bl,%eax
cmp    %eax,%ebp
jne    16af <fnmatch+0x57f>
add    $0x1,%r12
mov    (%r15),%al
mov    %r15,%r13
test   %al,%al
je     156d <fnmatch+0x43d>
movzbl %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
cmp    $0x5a,%bl
jle    1200 <fnmatch+0xd0>
cmp    $0x5b,%bl
je     1270 <fnmatch+0x140>
cmp    $0x5c,%bl
jne    148f <fnmatch+0x35f>
test   $0x2,%dl
jne    14c1 <fnmatch+0x391>
lea    0x2(%r13),%r15
movzbl 0x1(%r13),%ebx
test   $0x10,%dl
je     1162 <fnmatch+0x32>
mov    %ebx,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     14ca <fnmatch+0x39a>
mov    %ebx,%edi
call   1040 <tolower@plt>
mov    %eax,%ebx
jmp    14ca <fnmatch+0x39a>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0x3f,%bl
jne    1486 <fnmatch+0x356>
mov    (%r12),%al
test   %al,%al
je     16af <fnmatch+0x57f>
cmp    $0x2f,%al
sete   %cl
test   %cl,0x17(%rsp)
jne    16af <fnmatch+0x57f>
test   $0x4,%dl
je     1172 <fnmatch+0x42>
cmp    $0x2e,%al
jne    1172 <fnmatch+0x42>
cmp    0x20(%rsp),%r12
je     16af <fnmatch+0x57f>
test   $0x1,%dl
je     1172 <fnmatch+0x42>
movl   $0x1,0x10(%rsp)
cmpb   $0x2f,-0x1(%r12)
jne    1172 <fnmatch+0x42>
jmp    16b7 <fnmatch+0x587>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r12,0x18(%rsp)
movzbl (%r12),%r12d
movl   $0x1,0x10(%rsp)
test   %r12d,%r12d
je     16b7 <fnmatch+0x587>
test   $0x4,%dl
je     12ba <fnmatch+0x18a>
cmp    $0x2e,%r12b
jne    12ba <fnmatch+0x18a>
mov    0x20(%rsp),%rax
cmp    %rax,0x18(%rsp)
je     16b7 <fnmatch+0x587>
test   $0x1,%dl
je     12ba <fnmatch+0x18a>
mov    0x18(%rsp),%rax
cmpb   $0x2f,-0x1(%rax)
je     16b7 <fnmatch+0x587>
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)
movzbl %r13b,%ecx
cmp    %ecx,%eax
jle    1506 <fnmatch+0x3d6>
cmp    $0x5d,%bl
je     14ec <fnmatch+0x3bc>
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     16b7 <fnmatch+0x587>
movzbl %al,%ebp
movzbl (%r15),%ebx
mov    %r15,%r14
jmp    1398 <fnmatch+0x268>
nopl   0x0(%rax,%rax,1)
mov    %r15,%r14
movzbl %al,%ebp
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1374 <fnmatch+0x244>
test   %bl,%bl
je     16b7 <fnmatch+0x587>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
jmp    137c <fnmatch+0x24c>
test   %bl,%bl
je     16b7 <fnmatch+0x587>
movzbl (%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
movzbl %bl,%eax
test   $0x1,%dl
je     13a9 <fnmatch+0x279>
cmp    $0x2f,%eax
je     16b7 <fnmatch+0x587>
lea    0x1(%r14),%r15
cmp    $0x2d,%eax
jne    1430 <fnmatch+0x300>
movzbl (%r15),%eax
mov    %ebp,%r13d
cmp    $0x5d,%al
je     140a <fnmatch+0x2da>
lea    0x2(%r14),%r15
test   $0x2,%dl
jne    13d6 <fnmatch+0x2a6>
cmp    $0x5c,%al
jne    13d6 <fnmatch+0x2a6>
movzbl 0x2(%r14),%eax
add    $0x3,%r14
mov    %r14,%r15
test   %al,%al
je     16b7 <fnmatch+0x587>
movzbl %al,%r13d
test   $0x10,%dl
je     1402 <fnmatch+0x2d2>
mov    %r13d,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     13fe <fnmatch+0x2ce>
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>
movzbl %bpl,%ecx
mov    %r12d,%eax
cmp    %r12d,%ecx
jbe    12f0 <fnmatch+0x1c0>
jmp    12fc <fnmatch+0x1cc>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %ebp,%r13d
test   $0x10,%dl
je     140f <fnmatch+0x2df>
mov    %r12d,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     146d <fnmatch+0x33d>
mov    %r12d,%edi
call   1040 <tolower@plt>
movzbl %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>
movzbl %bpl,%ecx
mov    %r12d,%eax
cmp    %r12d,%ecx
mov    0xc(%rsp),%edx
ja     12fc <fnmatch+0x1cc>
jmp    12f0 <fnmatch+0x1c0>
cmp    $0x2a,%bl
je     159b <fnmatch+0x46b>
movzbl (%r12),%ebp
test   $0x10,%dl
je     14b1 <fnmatch+0x381>
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     14ad <fnmatch+0x37d>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
mov    0xc(%rsp),%edx
movzbl %bl,%eax
cmp    %ebp,%eax
je     1172 <fnmatch+0x42>
jmp    16af <fnmatch+0x57f>
test   $0x10,%dl
je     1162 <fnmatch+0x32>
movzbl (%r12),%ebp
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     14e3 <fnmatch+0x3b3>
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     154a <fnmatch+0x41a>
cmp    $0x5e,%al
mov    0x18(%rsp),%r12
je     1172 <fnmatch+0x42>
jmp    16b7 <fnmatch+0x587>
mov    0x18(%rsp),%r12
test   %bl,%bl
je     16b7 <fnmatch+0x587>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0x5d,%bl
je     1554 <fnmatch+0x424>
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    1520 <fnmatch+0x3f0>
jmp    16b7 <fnmatch+0x587>
mov    0x18(%rsp),%r12
jmp    1172 <fnmatch+0x42>
mov    0x16(%rsp),%al
cmp    $0x21,%al
je     16b7 <fnmatch+0x587>
cmp    $0x5e,%al
jne    1172 <fnmatch+0x42>
jmp    16b7 <fnmatch+0x587>
mov    (%r12),%al
test   %al,%al
je     158e <fnmatch+0x45e>
test   $0x8,%dl
sete   %cl
cmp    $0x2f,%al
setne  %al
or     %cl,%al
movzbl %al,%eax
mov    %eax,0x10(%rsp)
jmp    16b7 <fnmatch+0x587>
movl   $0x0,0x10(%rsp)
jmp    16b7 <fnmatch+0x587>
test   $0x4,%dl
je     15d4 <fnmatch+0x4a4>
cmpb   $0x2e,(%r12)
jne    15d4 <fnmatch+0x4a4>
movl   $0x1,0x10(%rsp)
cmp    0x20(%rsp),%r12
je     16b7 <fnmatch+0x587>
test   $0x1,%dl
je     15d4 <fnmatch+0x4a4>
cmpb   $0x2f,-0x1(%r12)
jne    15d4 <fnmatch+0x4a4>
jmp    16b7 <fnmatch+0x587>
nopl   0x0(%rax)
add    $0x1,%r12
add    $0x1,%r13
movzbl 0x0(%r13),%ebx
cmp    $0x2a,%bl
je     15e7 <fnmatch+0x4b7>
cmp    $0x3f,%bl
jne    1608 <fnmatch+0x4d8>
test   $0x1,%dl
je     15f7 <fnmatch+0x4c7>
cmpb   $0x2f,(%r12)
je     16af <fnmatch+0x57f>
cmp    $0x3f,%bl
jne    15d0 <fnmatch+0x4a0>
cmpb   $0x0,(%r12)
jne    15d0 <fnmatch+0x4a0>
jmp    16af <fnmatch+0x57f>
movl   $0x0,0x10(%rsp)
test   %bl,%bl
je     16b7 <fnmatch+0x587>
mov    %ebx,%eax
test   $0x2,%dl
jne    162a <fnmatch+0x4fa>
mov    %ebx,%eax
cmp    $0x5c,%bl
jne    162a <fnmatch+0x4fa>
mov    0x1(%r13),%al
movzbl %al,%ebp
test   $0x10,%dl
je     164a <fnmatch+0x51a>
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1646 <fnmatch+0x516>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
mov    0xc(%rsp),%edx
mov    (%r12),%al
test   %al,%al
je     16af <fnmatch+0x57f>
movzbl %bpl,%r15d
mov    %edx,%r14d
and    $0xfffffffb,%r14d
jmp    1683 <fnmatch+0x553>
mov    %r13,%rdi
mov    %r12,%rsi
mov    %r14d,%edx
call   1030 <fnmatch@plt>
mov    0xc(%rsp),%edx
test   %eax,%eax
je     16b7 <fnmatch+0x587>
movzbl 0x1(%r12),%eax
add    $0x1,%r12
test   %al,%al
je     16af <fnmatch+0x57f>
cmp    $0x5b,%bl
je     165f <fnmatch+0x52f>
movzbl %al,%ebp
test   $0x10,%dl
je     16a8 <fnmatch+0x578>
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     16a4 <fnmatch+0x574>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
mov    0xc(%rsp),%edx
cmp    %r15d,%ebp
je     165f <fnmatch+0x52f>
jmp    1675 <fnmatch+0x545>
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 = zext 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 = zext 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 = zext i8 %33 to i32
%35 = call i32 @tolower(i32 %34)
br label %39
36: ; preds = %27, %23
%37 = load i8, i8* %10
%38 = zext 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 = zext 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 = zext 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 = zext i8 %104 to i32
%106 = call i32 @tolower(i32 %105)
br label %110
107: ; preds = %98, %91
%108 = load i8, i8* %10
%109 = zext 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 = zext 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 = zext 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 = zext i8 %130 to i32
br label %132
132: ; preds = %128, %123
%133 = phi i32 [ %127, %123 ], [ %131, %128 ]
%134 = load i8, i8* %10
%135 = zext 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 = zext 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 = zext 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 = zext 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 = zext 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 = zext 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 = zext 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 = zext 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 = zext i8 %235 to i32
%237 = call i32 @tolower(i32 %236)
br label %241
238: ; preds = %229, %223
%239 = load i8, i8* %11
%240 = zext 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 = zext 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 = zext 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 = zext 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 = zext i8 %272 to i32
br label %274
274: ; preds = %270, %265
%275 = phi i32 [ %269, %265 ], [ %273, %270 ]
%276 = load i8, i8* %11
%277 = zext 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 = zext 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 = zext 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 = zext i8 %368 to i32
%370 = call i32 @tolower(i32 %369)
br label %374
371: ; preds = %362, %358
%372 = load i8, i8* %13
%373 = zext 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 = zext 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 = zext 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 = zext i8 %394 to i32
%396 = call i32 @tolower(i32 %395)
br label %400
397: ; preds = %388, %381
%398 = load i8, i8* %10
%399 = zext 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 = zext 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 = zext 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 = zext 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 = zext 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 = zext 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 = zext i8 %450 to i32
%452 = call i32 @tolower(i32 %451)
br label %456
453: ; preds = %444, %440
%454 = load i8, i8* %14
%455 = zext 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 = zext 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 = zext 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 = zext i8 %479 to i32
br label %481
481: ; preds = %477, %472
%482 = phi i32 [ %476, %472 ], [ %480, %477 ]
%483 = load i8, i8* %13
%484 = zext 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 = zext 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 = zext 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 = zext i8 %503 to i32
br label %505
505: ; preds = %501, %496
%506 = phi i32 [ %500, %496 ], [ %504, %501 ]
%507 = load i8, i8* %14
%508 = zext 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 = zext 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 = zext 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 = zext 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 = zext 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 = zext 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 = zext 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 = zext 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 = zext 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 %299, 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, %294
%18 = phi i8 [ %4, %6 ], [ %297, %294 ]
%19 = phi i8* [ %1, %6 ], [ %296, %294 ]
%20 = phi i8* [ %0, %6 ], [ %295, %294 ]
%21 = getelementptr inbounds i8, i8* %20, i64 1
%22 = zext 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 = and i32 %29, 255
%31 = trunc i32 %29 to i8
switch i8 %31, label %283 [
i8 63, label %32
i8 92, label %48
i8 42, label %79
i8 91, label %152
]
32: ; preds = %28
%33 = load i8, i8* %19
%34 = icmp eq i8 %33, 0
br i1 %34, label %309, label %35
35: ; preds = %32
%36 = icmp eq i8 %33, 47
%37 = select i1 %16, i1 %36, i1 false
br i1 %37, label %309, 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 %294
41: ; preds = %38
%42 = icmp eq i8* %19, %1
br i1 %42, label %309, label %43
43: ; preds = %41
br i1 %12, label %294, 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 %309, label %294
48: ; preds = %28
br i1 %14, label %49, label %58
49: ; preds = %48
%50 = getelementptr inbounds i8, i8* %20, i64 2
%51 = load i8, i8* %21
%52 = zext i8 %51 to i32
br i1 %8, label %59, label %53
53: ; preds = %49
%54 = tail call i32 @isupper(i32 %52)
%55 = icmp eq i32 %54, 0
br i1 %55, label %64, label %56
56: ; preds = %53
%57 = tail call i32 @tolower(i32 %52)
br label %64
58: ; preds = %48
br i1 %8, label %59, label %64
59: ; preds = %49, %58
%60 = phi i32 [ %29, %58 ], [ %52, %49 ]
%61 = phi i8* [ %21, %58 ], [ %50, %49 ]
%62 = load i8, i8* %19
%63 = zext i8 %62 to i32
br label %73
64: ; preds = %53, %56, %58
%65 = phi i32 [ %57, %56 ], [ %29, %58 ], [ %52, %53 ]
%66 = phi i8* [ %50, %56 ], [ %21, %58 ], [ %50, %53 ]
%67 = load i8, i8* %19
%68 = zext i8 %67 to i32
%69 = tail call i32 @isupper(i32 %68)
%70 = icmp eq i32 %69, 0
br i1 %70, label %73, label %71
71: ; preds = %64
%72 = tail call i32 @tolower(i32 %68)
br label %73
73: ; preds = %64, %59, %71
%74 = phi i32 [ %65, %71 ], [ %60, %59 ], [ %65, %64 ]
%75 = phi i8* [ %66, %71 ], [ %61, %59 ], [ %66, %64 ]
%76 = phi i32 [ %72, %71 ], [ %63, %59 ], [ %68, %64 ]
%77 = and i32 %74, 255
%78 = icmp eq i32 %76, %77
br i1 %78, label %294, label %309
79: ; preds = %28
%80 = icmp eq i32 %9, 0
br i1 %80, label %91, label %81
81: ; preds = %79
%82 = load i8, i8* %19
%83 = icmp eq i8 %82, 46
br i1 %83, label %84, label %91
84: ; preds = %81
%85 = icmp eq i8* %19, %1
br i1 %85, label %309, label %86
86: ; preds = %84
br i1 %12, label %91, label %87
87: ; preds = %86
%88 = getelementptr inbounds i8, i8* %19, i64 -1
%89 = load i8, i8* %88
%90 = icmp eq i8 %89, 47
br i1 %90, label %309, label %91
91: ; preds = %87, %86, %81, %79
%92 = getelementptr inbounds i8, i8* %20, i64 2
br label %93
93: ; preds = %107, %91
%94 = phi i8* [ %92, %91 ], [ %108, %107 ]
%95 = phi i8* [ %19, %91 ], [ %109, %107 ]
%96 = phi i8* [ %21, %91 ], [ %94, %107 ]
%97 = load i8, i8* %96
%98 = icmp eq i8 %97, 63
switch i8 %97, label %110 [
i8 63, label %99
i8 42, label %99
i8 0, label %309
]
99: ; preds = %93, %93
br i1 %12, label %103, label %100
100: ; preds = %99
%101 = load i8, i8* %95
%102 = icmp eq i8 %101, 47
br i1 %102, label %309, label %103
103: ; preds = %100, %99
br i1 %98, label %104, label %107
104: ; preds = %103
%105 = load i8, i8* %95
%106 = icmp eq i8 %105, 0
br i1 %106, label %309, label %107
107: ; preds = %103, %104
%108 = getelementptr inbounds i8, i8* %94, i64 1
%109 = getelementptr inbounds i8, i8* %95, i64 1
br label %93
110: ; preds = %93
%111 = icmp eq i8 %97, 92
%112 = select i1 %14, i1 %111, i1 false
br i1 %112, label %113, label %115
113: ; preds = %110
%114 = load i8, i8* %94
br label %115
115: ; preds = %110, %113
%116 = phi i8 [ %114, %113 ], [ %97, %110 ]
%117 = zext i8 %116 to i32
br i1 %8, label %123, label %118
118: ; preds = %115
%119 = tail call i32 @isupper(i32 %117)
%120 = icmp eq i32 %119, 0
br i1 %120, label %123, label %121
121: ; preds = %118
%122 = tail call i32 @tolower(i32 %117)
br label %123
123: ; preds = %115, %118, %121
%124 = phi i32 [ %122, %121 ], [ %117, %118 ], [ %117, %115 ]
%125 = getelementptr inbounds i8, i8* %94, i64 -1
%126 = load i8, i8* %95
%127 = icmp eq i8 %126, 0
br i1 %127, label %309, label %128
128: ; preds = %123
%129 = icmp eq i8 %97, 91
%130 = and i32 %124, 255
%131 = and i32 %2, -5
br label %132
132: ; preds = %128, %148
%133 = phi i8 [ %126, %128 ], [ %150, %148 ]
%134 = phi i8* [ %95, %128 ], [ %149, %148 ]
br i1 %129, label %145, label %135
135: ; preds = %132
%136 = zext i8 %133 to i32
br i1 %8, label %142, label %137
137: ; preds = %135
%138 = tail call i32 @isupper(i32 %136)
%139 = icmp eq i32 %138, 0
br i1 %139, label %142, label %140
140: ; preds = %137
%141 = tail call i32 @tolower(i32 %136)
br label %142
142: ; preds = %135, %137, %140
%143 = phi i32 [ %141, %140 ], [ %136, %137 ], [ %136, %135 ]
%144 = icmp eq i32 %143, %130
br i1 %144, label %145, label %148
145: ; preds = %142, %132
%146 = tail call i32 @fnmatch(i8* %125, i8* %134, i32 %131)
%147 = icmp eq i32 %146, 0
br i1 %147, label %309, label %148
148: ; preds = %142, %145
%149 = getelementptr inbounds i8, i8* %134, i64 1
%150 = load i8, i8* %149
%151 = icmp eq i8 %150, 0
br i1 %151, label %309, label %132
152: ; preds = %28
%153 = load i8, i8* %19
%154 = icmp eq i8 %153, 0
br i1 %154, label %309, label %155
155: ; preds = %152
%156 = icmp eq i8 %153, 46
%157 = select i1 %10, i1 %156, i1 false
br i1 %157, label %158, label %165
158: ; preds = %155
%159 = icmp eq i8* %19, %1
br i1 %159, label %309, label %160
160: ; preds = %158
br i1 %12, label %165, label %161
161: ; preds = %160
%162 = getelementptr inbounds i8, i8* %19, i64 -1
%163 = load i8, i8* %162
%164 = icmp eq i8 %163, 47
br i1 %164, label %309, label %165
165: ; preds = %161, %160, %155
%166 = load i8, i8* %21
%167 = icmp eq i8 %166, 33
%168 = icmp eq i8 %166, 94
%169 = or i1 %167, %168
%170 = getelementptr inbounds i8, i8* %20, i64 2
%171 = select i1 %169, i8* %170, i8* %21
%172 = getelementptr inbounds i8, i8* %171, i64 1
%173 = load i8, i8* %171
%174 = zext i8 %153 to i32
br label %175
175: ; preds = %270, %165
%176 = phi i8* [ %172, %165 ], [ %248, %270 ]
%177 = phi i8 [ %173, %165 ], [ %249, %270 ]
%178 = icmp eq i8 %177, 92
%179 = select i1 %14, i1 %178, i1 false
br i1 %179, label %181, label %180
180: ; preds = %175
br i1 %8, label %191, label %184
181: ; preds = %175
%182 = getelementptr inbounds i8, i8* %176, i64 1
%183 = load i8, i8* %176
br i1 %8, label %197, label %184
184: ; preds = %181, %180
%185 = phi i8 [ %183, %181 ], [ %177, %180 ]
%186 = phi i8* [ %182, %181 ], [ %176, %180 ]
%187 = zext i8 %185 to i32
%188 = tail call i32 @isupper(i32 %187)
%189 = icmp eq i32 %188, 0
%190 = icmp eq i8 %177, 0
br i1 %189, label %193, label %194
191: ; preds = %180
%192 = icmp eq i8 %177, 0
br i1 %192, label %309, label %197
193: ; preds = %184
br i1 %190, label %309, label %203
194: ; preds = %184
br i1 %190, label %309, label %195
195: ; preds = %194
%196 = tail call i32 @tolower(i32 %187)
br label %203
197: ; preds = %181, %191
%198 = phi i8* [ %176, %191 ], [ %182, %181 ]
%199 = phi i8 [ %177, %191 ], [ %183, %181 ]
%200 = zext i8 %199 to i32
%201 = load i8, i8* %198
%202 = zext i8 %201 to i32
br label %211
203: ; preds = %193, %195
%204 = phi i32 [ %196, %195 ], [ %187, %193 ]
%205 = load i8, i8* %186
%206 = zext i8 %205 to i32
%207 = tail call i32 @isupper(i32 %206)
%208 = icmp eq i32 %207, 0
br i1 %208, label %211, label %209
209: ; preds = %203
%210 = tail call i32 @tolower(i32 %206)
br label %211
211: ; preds = %203, %197, %209
%212 = phi i8* [ %186, %209 ], [ %198, %197 ], [ %186, %203 ]
%213 = phi i32 [ %204, %209 ], [ %200, %197 ], [ %204, %203 ]
%214 = phi i32 [ %210, %209 ], [ %202, %197 ], [ %206, %203 ]
%215 = getelementptr inbounds i8, i8* %212, i64 1
%216 = trunc i32 %214 to i8
%217 = and i32 %214, 255
%218 = icmp eq i32 %217, 47
%219 = select i1 %15, i1 %218, i1 false
br i1 %219, label %309, label %220
220: ; preds = %211
%221 = icmp eq i32 %217, 45
br i1 %221, label %222, label %247
222: ; preds = %220
%223 = load i8, i8* %215
%224 = icmp eq i8 %223, 93
br i1 %224, label %247, label %225
225: ; preds = %222
%226 = getelementptr inbounds i8, i8* %212, i64 2
%227 = icmp eq i8 %223, 92
%228 = select i1 %14, i1 %227, i1 false
br i1 %228, label %229, label %232
229: ; preds = %225
%230 = getelementptr inbounds i8, i8* %212, i64 3
%231 = load i8, i8* %226
br label %232
232: ; preds = %229, %225
%233 = phi i8* [ %230, %229 ], [ %226, %225 ]
%234 = phi i8 [ %231, %229 ], [ %223, %225 ]
%235 = zext i8 %234 to i32
%236 = icmp eq i8 %234, 0
br i1 %236, label %309, label %237
237: ; preds = %232
br i1 %8, label %243, label %238
238: ; preds = %237
%239 = tail call i32 @isupper(i32 %235)
%240 = icmp eq i32 %239, 0
br i1 %240, label %243, label %241
241: ; preds = %238
%242 = tail call i32 @tolower(i32 %235)
br label %243
243: ; preds = %237, %238, %241
%244 = phi i32 [ %242, %241 ], [ %235, %238 ], [ %235, %237 ]
%245 = getelementptr inbounds i8, i8* %233, i64 1
%246 = load i8, i8* %233
br label %247
247: ; preds = %243, %222, %220
%248 = phi i8* [ %245, %243 ], [ %215, %222 ], [ %215, %220 ]
%249 = phi i8 [ %246, %243 ], [ %216, %222 ], [ %216, %220 ]
%250 = phi i32 [ %244, %243 ], [ %213, %222 ], [ %213, %220 ]
br i1 %8, label %254, label %251
251: ; preds = %247
%252 = tail call i32 @isupper(i32 %174)
%253 = icmp eq i32 %252, 0
br i1 %253, label %257, label %260
254: ; preds = %247
%255 = and i32 %213, 255
%256 = icmp ugt i32 %255, %174
br i1 %256, label %270, label %266
257: ; preds = %251
%258 = and i32 %213, 255
%259 = icmp ugt i32 %258, %174
br i1 %259, label %270, label %266
260: ; preds = %251
%261 = tail call i32 @tolower(i32 %174)
%262 = and i32 %213, 255
%263 = icmp slt i32 %261, %262
br i1 %263, label %270, label %264
264: ; preds = %260
%265 = tail call i32 @tolower(i32 %174)
br label %266
266: ; preds = %257, %254, %264
%267 = phi i32 [ %265, %264 ], [ %174, %254 ], [ %174, %257 ]
%268 = and i32 %250, 255
%269 = icmp sgt i32 %267, %268
br i1 %269, label %270, label %273
270: ; preds = %257, %260, %266, %254
%271 = icmp eq i8 %249, 93
br i1 %271, label %272, label %175
272: ; preds = %270
switch i8 %166, label %309 [
i8 94, label %294
i8 33, label %294
]
273: ; preds = %266, %276
%274 = phi i8* [ %281, %276 ], [ %248, %266 ]
%275 = phi i8 [ %277, %276 ], [ %249, %266 ]
switch i8 %275, label %276 [
i8 93, label %282
i8 0, label %309
]
276: ; preds = %273
%277 = load i8, i8* %274
%278 = icmp eq i8 %277, 92
%279 = select i1 %14, i1 %278, i1 false
%280 = select i1 %279, i64 2, i64 1
%281 = getelementptr inbounds i8, i8* %274, i64 %280
br label %273
282: ; preds = %273
switch i8 %166, label %294 [
i8 94, label %309
i8 33, label %309
]
283: ; preds = %28
%284 = load i8, i8* %19
%285 = zext i8 %284 to i32
br i1 %8, label %291, label %286
286: ; preds = %283
%287 = tail call i32 @isupper(i32 %285)
%288 = icmp eq i32 %287, 0
br i1 %288, label %291, label %289
289: ; preds = %286
%290 = tail call i32 @tolower(i32 %285)
br label %291
291: ; preds = %283, %286, %289
%292 = phi i32 [ %290, %289 ], [ %285, %286 ], [ %285, %283 ]
%293 = icmp eq i32 %30, %292
br i1 %293, label %294, label %309
294: ; preds = %282, %272, %272, %291, %73, %38, %43, %44
%295 = phi i8* [ %21, %291 ], [ %75, %73 ], [ %21, %44 ], [ %21, %43 ], [ %21, %38 ], [ %248, %272 ], [ %248, %272 ], [ %274, %282 ]
%296 = getelementptr inbounds i8, i8* %19, i64 1
%297 = load i8, i8* %295
%298 = icmp eq i8 %297, 0
br i1 %298, label %299, label %17
299: ; preds = %294, %3
%300 = phi i8* [ %1, %3 ], [ %296, %294 ]
%301 = load i8, i8* %300
%302 = icmp eq i8 %301, 0
br i1 %302, label %309, label %303
303: ; preds = %299
%304 = and i32 %2, 8
%305 = icmp eq i32 %304, 0
%306 = icmp ne i8 %301, 47
%307 = select i1 %305, i1 true, i1 %306
%308 = zext i1 %307 to i32
br label %309
309: ; preds = %282, %282, %272, %158, %161, %152, %291, %73, %41, %44, %35, %32, %193, %194, %232, %211, %191, %273, %93, %100, %104, %148, %145, %123, %303, %299, %84, %87
%310 = phi i32 [ 1, %87 ], [ 1, %84 ], [ 0, %299 ], [ %308, %303 ], [ 1, %123 ], [ 1, %148 ], [ 0, %145 ], [ 0, %93 ], [ 1, %100 ], [ 1, %104 ], [ 1, %273 ], [ 1, %191 ], [ 1, %211 ], [ 1, %232 ], [ 1, %194 ], [ 1, %193 ], [ 1, %32 ], [ 1, %35 ], [ 1, %44 ], [ 1, %41 ], [ 1, %73 ], [ 1, %291 ], [ 1, %152 ], [ 1, %161 ], [ 1, %158 ], [ 1, %272 ], [ 1, %282 ], [ 1, %282 ]
ret i32 %310
}