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)) && (1 && isupper((unsigned char)c))
             ? tolower((unsigned char)c)
             : ((unsigned char)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)) && (1 && isupper((unsigned char)c))
                 ? tolower((unsigned char)c)
                 : ((unsigned char)c));
      }
      if (((flags & (1 << 4)) && (1 && 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;
      {
        char c1 = (!(flags & (1 << 1)) && c == '\\') ? *p : c;
        c1 = ((flags & (1 << 4)) && (1 && isupper((unsigned char)c1))
                  ? tolower((unsigned char)c1)
                  : ((unsigned char)c1));
        for (--p; *n != '\0'; ++n)
          if ((c == '[' ||
               ((flags & (1 << 4)) && (1 && 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 char cstart = c, cend = c;
        if (!(flags & (1 << 1)) && c == '\\')
          cstart = cend = *p++;
        cstart = cend =
            ((flags & (1 << 4)) && (1 && isupper((unsigned char)cstart))
                 ? tolower((unsigned char)cstart)
                 : ((unsigned char)cstart));
        if (c == '\0')
          return 1;
        c = *p++;
        c = ((flags & (1 << 4)) && (1 && isupper((unsigned char)c))
                 ? tolower((unsigned char)c)
                 : ((unsigned char)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)) && (1 && isupper((unsigned char)cend))
                      ? tolower((unsigned char)cend)
                      : ((unsigned char)cend));
          c = *p++;
        }
        if (((flags & (1 << 4)) && (1 && isupper((unsigned char)*n))
                 ? tolower((unsigned char)*n)
                 : ((unsigned char)*n)) >= cstart &&
            ((flags & (1 << 4)) && (1 && 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)) && (1 && 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)
movsbl %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)
movsbl -0x31(%rbp),%eax
mov    %eax,-0x44(%rbp)
sub    $0x2a,%eax
je     1370 <fnmatch+0x240>
jmp    11ca <fnmatch+0x9a>
mov    -0x44(%rbp),%eax
sub    $0x3f,%eax
je     11fd <fnmatch+0xcd>
jmp    11db <fnmatch+0xab>
mov    -0x44(%rbp),%eax
sub    $0x5b,%eax
je     15d2 <fnmatch+0x4a2>
jmp    11ec <fnmatch+0xbc>
mov    -0x44(%rbp),%eax
sub    $0x5c,%eax
je     12ac <fnmatch+0x17c>
jmp    19e3 <fnmatch+0x8b3>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1219 <fnmatch+0xe9>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1244 <fnmatch+0x114>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1244 <fnmatch+0x114>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     129d <fnmatch+0x16d>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    129d <fnmatch+0x16d>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
je     1291 <fnmatch+0x161>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     129d <fnmatch+0x16d>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    129d <fnmatch+0x16d>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    12a2 <fnmatch+0x172>
jmp    12a7 <fnmatch+0x177>
jmp    1a4b <fnmatch+0x91b>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    130e <fnmatch+0x1de>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1301 <fnmatch+0x1d1>
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
movsbl -0x31(%rbp),%ecx
cmp    %ecx,%eax
je     136b <fnmatch+0x23b>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    1a4b <fnmatch+0x91b>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     13c9 <fnmatch+0x299>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    13c9 <fnmatch+0x299>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
je     13bd <fnmatch+0x28d>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     13c9 <fnmatch+0x299>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    13c9 <fnmatch+0x299>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%ecx
mov    $0x1,%al
cmp    $0x3f,%ecx
mov    %al,-0x4d(%rbp)
je     13fc <fnmatch+0x2cc>
movsbl -0x31(%rbp),%eax
cmp    $0x2a,%eax
sete   %al
mov    %al,-0x4d(%rbp)
mov    -0x4d(%rbp),%al
test   $0x1,%al
jne    140c <fnmatch+0x2dc>
jmp    147e <fnmatch+0x34e>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     142b <fnmatch+0x2fb>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     1448 <fnmatch+0x318>
movsbl -0x31(%rbp),%eax
cmp    $0x3f,%eax
jne    1454 <fnmatch+0x324>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1454 <fnmatch+0x324>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    1459 <fnmatch+0x329>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    13dd <fnmatch+0x2ad>
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    1497 <fnmatch+0x367>
movl   $0x0,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    14c2 <fnmatch+0x392>
movsbl -0x31(%rbp),%eax
cmp    $0x5c,%eax
jne    14c2 <fnmatch+0x392>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x54(%rbp)
jmp    14c9 <fnmatch+0x399>
movsbl -0x31(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    %al,-0x32(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1501 <fnmatch+0x3d1>
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>
movsbl -0x31(%rbp),%eax
cmp    $0x5b,%eax
je     1588 <fnmatch+0x458>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     156f <fnmatch+0x43f>
mov    -0x30(%rbp),%rax
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
movsbl -0x32(%rbp),%ecx
cmp    %ecx,%eax
jne    15b0 <fnmatch+0x480>
mov    -0x28(%rbp),%rdi
mov    -0x30(%rbp),%rsi
mov    -0x1c(%rbp),%edx
and    $0xfffffffb,%edx
call   1030 <fnmatch@plt>
cmp    $0x0,%eax
jne    15b0 <fnmatch+0x480>
movl   $0x0,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    15b5 <fnmatch+0x485>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    151a <fnmatch+0x3ea>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    15ee <fnmatch+0x4be>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     1647 <fnmatch+0x517>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1647 <fnmatch+0x517>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
je     163b <fnmatch+0x50b>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1647 <fnmatch+0x517>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    1647 <fnmatch+0x517>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x28(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x21,%ecx
mov    %al,-0x5d(%rbp)
je     166c <fnmatch+0x53c>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5e,%eax
sete   %al
mov    %al,-0x5d(%rbp)
mov    -0x5d(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x38(%rbp)
cmpl   $0x0,-0x38(%rbp)
je     168d <fnmatch+0x55d>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
mov    %al,-0x39(%rbp)
mov    -0x31(%rbp),%al
mov    %al,-0x3a(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    16e0 <fnmatch+0x5b0>
movsbl -0x31(%rbp),%eax
cmp    $0x5c,%eax
jne    16e0 <fnmatch+0x5b0>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x3a(%rbp)
mov    %al,-0x39(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1712 <fnmatch+0x5e2>
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)
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    173b <fnmatch+0x60b>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1781 <fnmatch+0x651>
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>
movsbl -0x31(%rbp),%eax
cmp    $0x2f,%eax
jne    17b6 <fnmatch+0x686>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
movsbl -0x31(%rbp),%eax
cmp    $0x2d,%eax
jne    1883 <fnmatch+0x753>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
je     1883 <fnmatch+0x753>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x3a(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    1817 <fnmatch+0x6e7>
movsbl -0x3a(%rbp),%eax
cmp    $0x5c,%eax
jne    1817 <fnmatch+0x6e7>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x3a(%rbp)
movsbl -0x3a(%rbp),%eax
cmp    $0x0,%eax
jne    1830 <fnmatch+0x700>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1862 <fnmatch+0x732>
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
movsbl -0x39(%rbp),%ecx
cmp    %ecx,%eax
jl     192a <fnmatch+0x7fa>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     190c <fnmatch+0x7dc>
mov    -0x30(%rbp),%rax
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
movsbl -0x3a(%rbp),%ecx
cmp    %ecx,%eax
jg     192a <fnmatch+0x7fa>
jmp    195c <fnmatch+0x82c>
movsbl -0x31(%rbp),%eax
cmp    $0x5d,%eax
jne    193c <fnmatch+0x80c>
jmp    1941 <fnmatch+0x811>
jmp    16a1 <fnmatch+0x571>
cmpl   $0x0,-0x38(%rbp)
jne    1957 <fnmatch+0x827>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    1a4b <fnmatch+0x91b>
jmp    1961 <fnmatch+0x831>
movsbl -0x31(%rbp),%eax
cmp    $0x5d,%eax
je     19c8 <fnmatch+0x898>
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    1987 <fnmatch+0x857>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    19c3 <fnmatch+0x893>
movsbl -0x31(%rbp),%eax
cmp    $0x5c,%eax
jne    19c3 <fnmatch+0x893>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1961 <fnmatch+0x831>
cmpl   $0x0,-0x38(%rbp)
je     19de <fnmatch+0x8ae>
movl   $0x1,-0x4(%rbp)
jmp    1aaa <fnmatch+0x97a>
jmp    1a4b <fnmatch+0x91b>
movsbl -0x31(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1a22 <fnmatch+0x8f2>
mov    -0x30(%rbp),%rax
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     155d <fnmatch+0x42d>
mov    %rdi,%r13
mov    %edx,%ecx
and    $0x1,%cl
mov    %cl,0x17(%rsp)
mov    %r12,0x20(%rsp)
mov    %edx,0xc(%rsp)
jmp    1184 <fnmatch+0x54>
movzbl (%r12),%ebp
movsbl %bl,%eax
cmp    %eax,%ebp
jne    169f <fnmatch+0x56f>
add    $0x1,%r12
mov    (%r15),%al
mov    %r15,%r13
test   %al,%al
je     155d <fnmatch+0x42d>
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
movsbl %bl,%ebp
cmp    $0x5a,%ebp
jle    1200 <fnmatch+0xd0>
cmp    $0x5b,%ebp
je     1270 <fnmatch+0x140>
cmp    $0x5c,%ebp
jne    148f <fnmatch+0x35f>
test   $0x2,%dl
jne    14be <fnmatch+0x38e>
lea    0x2(%r13),%r15
movzbl 0x1(%r13),%ebx
test   $0x10,%dl
je     1162 <fnmatch+0x32>
mov    %ebx,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     14c7 <fnmatch+0x397>
mov    %ebx,%edi
call   1040 <tolower@plt>
mov    %eax,%ebx
jmp    14c7 <fnmatch+0x397>
cs nopw 0x0(%rax,%rax,1)
cmp    $0x3f,%ebp
jne    1486 <fnmatch+0x356>
mov    (%r12),%al
test   %al,%al
je     169f <fnmatch+0x56f>
cmp    $0x2f,%al
sete   %cl
test   %cl,0x17(%rsp)
jne    169f <fnmatch+0x56f>
test   $0x4,%dl
je     1172 <fnmatch+0x42>
cmp    $0x2e,%al
jne    1172 <fnmatch+0x42>
cmp    0x20(%rsp),%r12
je     169f <fnmatch+0x56f>
test   $0x1,%dl
je     1172 <fnmatch+0x42>
movl   $0x1,0x10(%rsp)
cmpb   $0x2f,-0x1(%r12)
jne    1172 <fnmatch+0x42>
jmp    16a7 <fnmatch+0x577>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r12,0x18(%rsp)
movzbl (%r12),%r12d
movl   $0x1,0x10(%rsp)
test   %r12d,%r12d
je     16a7 <fnmatch+0x577>
test   $0x4,%dl
je     12ba <fnmatch+0x18a>
cmp    $0x2e,%r12b
jne    12ba <fnmatch+0x18a>
mov    0x20(%rsp),%rax
cmp    %rax,0x18(%rsp)
je     16a7 <fnmatch+0x577>
test   $0x1,%dl
je     12ba <fnmatch+0x18a>
mov    0x18(%rsp),%rax
cmpb   $0x2f,-0x1(%rax)
je     16a7 <fnmatch+0x577>
mov    0x1(%r13),%cl
cmp    $0x21,%cl
sete   %al
mov    %cl,0x16(%rsp)
cmp    $0x5e,%cl
sete   %cl
or     %al,%cl
lea    0x2(%r13),%rax
movzbl %cl,%ecx
test   %cl,%cl
cmovne %rax,%r15
add    $0x1,%r15
mov    0x1(%rcx,%r13,1),%bl
jmp    1305 <fnmatch+0x1d5>
nopl   0x0(%rax,%rax,1)
movsbl %r13b,%ecx
cmp    %ecx,%eax
jle    1503 <fnmatch+0x3d3>
cmp    $0x5d,%bl
je     14e9 <fnmatch+0x3b9>
test   $0x2,%dl
jne    1330 <fnmatch+0x200>
cmp    $0x5c,%bl
jne    1330 <fnmatch+0x200>
lea    0x1(%r15),%r14
movzbl (%r15),%eax
mov    %r14,%r15
test   $0x10,%dl
je     133f <fnmatch+0x20f>
jmp    1353 <fnmatch+0x223>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %ebx,%eax
test   $0x10,%dl
jne    1350 <fnmatch+0x220>
test   %bl,%bl
je     16a7 <fnmatch+0x577>
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     16a7 <fnmatch+0x577>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
jmp    137c <fnmatch+0x24c>
test   %bl,%bl
je     16a7 <fnmatch+0x577>
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
mov    %ebx,%eax
shl    $0x18,%eax
test   $0x1,%dl
je     13ad <fnmatch+0x27d>
cmp    $0x2f000000,%eax
je     16a7 <fnmatch+0x577>
lea    0x1(%r14),%r15
cmp    $0x2d000000,%eax
jne    1430 <fnmatch+0x300>
movzbl (%r15),%eax
mov    %ebp,%r13d
cmp    $0x5d,%al
je     1410 <fnmatch+0x2e0>
lea    0x2(%r14),%r15
test   $0x2,%dl
jne    13dc <fnmatch+0x2ac>
cmp    $0x5c,%al
jne    13dc <fnmatch+0x2ac>
movzbl 0x2(%r14),%eax
add    $0x3,%r14
mov    %r14,%r15
test   %al,%al
je     16a7 <fnmatch+0x577>
movzbl %al,%r13d
test   $0x10,%dl
je     1408 <fnmatch+0x2d8>
mov    %r13d,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1404 <fnmatch+0x2d4>
mov    %r13d,%edi
call   1040 <tolower@plt>
mov    %eax,%r13d
mov    0xc(%rsp),%edx
movzbl (%r15),%ebx
add    $0x1,%r15
test   $0x10,%dl
jne    1438 <fnmatch+0x308>
movsbl %bpl,%ecx
mov    %r12d,%eax
cmp    %r12d,%ecx
jle    12f0 <fnmatch+0x1c0>
jmp    12fc <fnmatch+0x1cc>
nopw   0x0(%rax,%rax,1)
mov    %ebp,%r13d
test   $0x10,%dl
je     1415 <fnmatch+0x2e5>
mov    %r12d,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     146d <fnmatch+0x33d>
mov    %r12d,%edi
call   1040 <tolower@plt>
movsbl %bpl,%ecx
cmp    %ecx,%eax
mov    0xc(%rsp),%edx
jl     12fc <fnmatch+0x1cc>
mov    %r12d,%edi
call   1040 <tolower@plt>
mov    0xc(%rsp),%edx
jmp    12f0 <fnmatch+0x1c0>
movsbl %bpl,%ecx
mov    %r12d,%eax
cmp    %r12d,%ecx
mov    0xc(%rsp),%edx
jg     12fc <fnmatch+0x1cc>
jmp    12f0 <fnmatch+0x1c0>
cmp    $0x2a,%ebp
je     158b <fnmatch+0x45b>
movzbl (%r12),%ebx
test   $0x10,%dl
je     14b1 <fnmatch+0x381>
mov    %ebx,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     14ad <fnmatch+0x37d>
mov    %ebx,%edi
call   1040 <tolower@plt>
mov    %eax,%ebx
mov    0xc(%rsp),%edx
cmp    %ebx,%ebp
je     1172 <fnmatch+0x42>
jmp    169f <fnmatch+0x56f>
test   $0x10,%dl
je     1162 <fnmatch+0x32>
movzbl (%r12),%ebp
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     14e0 <fnmatch+0x3b0>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
mov    0xc(%rsp),%edx
jmp    1167 <fnmatch+0x37>
mov    0x16(%rsp),%al
cmp    $0x21,%al
je     153a <fnmatch+0x40a>
cmp    $0x5e,%al
mov    0x18(%rsp),%r12
je     1172 <fnmatch+0x42>
jmp    16a7 <fnmatch+0x577>
mov    0x18(%rsp),%r12
test   %bl,%bl
je     16a7 <fnmatch+0x577>
cmp    $0x5d,%bl
je     1544 <fnmatch+0x414>
test   $0x2,%dl
sete   %al
movzbl (%r15),%ebx
cmp    $0x5c,%bl
sete   %cl
and    %al,%cl
movzbl %cl,%eax
add    %rax,%r15
add    $0x1,%r15
test   %bl,%bl
jne    1510 <fnmatch+0x3e0>
jmp    16a7 <fnmatch+0x577>
mov    0x18(%rsp),%r12
jmp    1172 <fnmatch+0x42>
mov    0x16(%rsp),%al
cmp    $0x21,%al
je     16a7 <fnmatch+0x577>
cmp    $0x5e,%al
jne    1172 <fnmatch+0x42>
jmp    16a7 <fnmatch+0x577>
mov    (%r12),%al
test   %al,%al
je     157e <fnmatch+0x44e>
test   $0x8,%dl
sete   %cl
cmp    $0x2f,%al
setne  %al
or     %cl,%al
movzbl %al,%eax
mov    %eax,0x10(%rsp)
jmp    16a7 <fnmatch+0x577>
movl   $0x0,0x10(%rsp)
jmp    16a7 <fnmatch+0x577>
test   $0x4,%dl
je     15c4 <fnmatch+0x494>
cmpb   $0x2e,(%r12)
jne    15c4 <fnmatch+0x494>
movl   $0x1,0x10(%rsp)
cmp    0x20(%rsp),%r12
je     16a7 <fnmatch+0x577>
test   $0x1,%dl
je     15c4 <fnmatch+0x494>
cmpb   $0x2f,-0x1(%r12)
jne    15c4 <fnmatch+0x494>
jmp    16a7 <fnmatch+0x577>
nopl   0x0(%rax)
add    $0x1,%r12
add    $0x1,%r13
movzbl 0x0(%r13),%ebx
cmp    $0x2a,%bl
je     15d7 <fnmatch+0x4a7>
cmp    $0x3f,%bl
jne    15f8 <fnmatch+0x4c8>
test   $0x1,%dl
je     15e7 <fnmatch+0x4b7>
cmpb   $0x2f,(%r12)
je     169f <fnmatch+0x56f>
cmp    $0x3f,%bl
jne    15c0 <fnmatch+0x490>
cmpb   $0x0,(%r12)
jne    15c0 <fnmatch+0x490>
jmp    169f <fnmatch+0x56f>
movl   $0x0,0x10(%rsp)
test   %bl,%bl
je     16a7 <fnmatch+0x577>
mov    %ebx,%eax
test   $0x2,%dl
jne    161a <fnmatch+0x4ea>
mov    %ebx,%eax
cmp    $0x5c,%bl
jne    161a <fnmatch+0x4ea>
mov    0x1(%r13),%al
movzbl %al,%ebp
test   $0x10,%dl
je     163a <fnmatch+0x50a>
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1636 <fnmatch+0x506>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
mov    0xc(%rsp),%edx
mov    (%r12),%al
test   %al,%al
je     169f <fnmatch+0x56f>
movsbl %bpl,%r15d
mov    %edx,%r14d
and    $0xfffffffb,%r14d
jmp    1673 <fnmatch+0x543>
mov    %r13,%rdi
mov    %r12,%rsi
mov    %r14d,%edx
call   1030 <fnmatch@plt>
mov    0xc(%rsp),%edx
test   %eax,%eax
je     16a7 <fnmatch+0x577>
movzbl 0x1(%r12),%eax
add    $0x1,%r12
test   %al,%al
je     169f <fnmatch+0x56f>
cmp    $0x5b,%bl
je     164f <fnmatch+0x51f>
movzbl %al,%ebp
test   $0x10,%dl
je     1698 <fnmatch+0x568>
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1694 <fnmatch+0x564>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
mov    0xc(%rsp),%edx
cmp    %r15d,%ebp
je     164f <fnmatch+0x51f>
jmp    1665 <fnmatch+0x535>
movl   $0x1,0x10(%rsp)
mov    0x10(%rsp),%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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