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


x86 assembly (clang, -O0):
<fnmatch>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
je     1b36 <fnmatch+0xa06>
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>
movsbl -0x31(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%eax
mov    %eax,-0x44(%rbp)
sub    $0x2a,%eax
je     1389 <fnmatch+0x259>
jmp    11ca <fnmatch+0x9a>
mov    -0x44(%rbp),%eax
sub    $0x3f,%eax
je     11fd <fnmatch+0xcd>
jmp    11db <fnmatch+0xab>
mov    -0x44(%rbp),%eax
sub    $0x5b,%eax
je     1674 <fnmatch+0x544>
jmp    11ec <fnmatch+0xbc>
mov    -0x44(%rbp),%eax
sub    $0x5c,%eax
je     12ac <fnmatch+0x17c>
jmp    1abd <fnmatch+0x98d>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1219 <fnmatch+0xe9>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
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    1b84 <fnmatch+0xa54>
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    1b84 <fnmatch+0xa54>
jmp    12a2 <fnmatch+0x172>
jmp    12a7 <fnmatch+0x177>
jmp    1b25 <fnmatch+0x9f5>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    1327 <fnmatch+0x1f7>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    12e8 <fnmatch+0x1b8>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     131a <fnmatch+0x1ea>
movzbl -0x31(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     131a <fnmatch+0x1ea>
movzbl -0x31(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x48(%rbp)
jmp    1321 <fnmatch+0x1f1>
movsbl -0x31(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
mov    %al,-0x31(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     135f <fnmatch+0x22f>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     135f <fnmatch+0x22f>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x4c(%rbp)
jmp    1369 <fnmatch+0x239>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
movsbl -0x31(%rbp),%ecx
cmp    %ecx,%eax
je     1384 <fnmatch+0x254>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
jmp    1b25 <fnmatch+0x9f5>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     13e2 <fnmatch+0x2b2>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    13e2 <fnmatch+0x2b2>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
je     13d6 <fnmatch+0x2a6>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     13e2 <fnmatch+0x2b2>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    13e2 <fnmatch+0x2b2>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
movsbl -0x31(%rbp),%ecx
mov    $0x1,%al
cmp    $0x3f,%ecx
mov    %al,-0x4d(%rbp)
je     1415 <fnmatch+0x2e5>
movsbl -0x31(%rbp),%eax
cmp    $0x2a,%eax
sete   %al
mov    %al,-0x4d(%rbp)
mov    -0x4d(%rbp),%al
test   $0x1,%al
jne    1425 <fnmatch+0x2f5>
jmp    149c <fnmatch+0x36c>
movsbl -0x31(%rbp),%eax
cmp    $0x3f,%eax
jne    147e <fnmatch+0x34e>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1461 <fnmatch+0x331>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    146d <fnmatch+0x33d>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     146d <fnmatch+0x33d>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    147e <fnmatch+0x34e>
jmp    1483 <fnmatch+0x353>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
jmp    13f6 <fnmatch+0x2c6>
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    1510 <fnmatch+0x3e0>
mov    -0x1c(%rbp),%eax
and    $0x9,%eax
cmp    $0x1,%eax
jne    1504 <fnmatch+0x3d4>
jmp    14bd <fnmatch+0x38d>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     14ff <fnmatch+0x3cf>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    14e9 <fnmatch+0x3b9>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
jmp    14ee <fnmatch+0x3be>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    14bd <fnmatch+0x38d>
jmp    1504 <fnmatch+0x3d4>
movl   $0x0,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
jne    153b <fnmatch+0x40b>
movsbl -0x31(%rbp),%eax
cmp    $0x5c,%eax
jne    153b <fnmatch+0x40b>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x54(%rbp)
jmp    1542 <fnmatch+0x412>
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     157a <fnmatch+0x44a>
movzbl -0x32(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     157a <fnmatch+0x44a>
movzbl -0x32(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x58(%rbp)
jmp    1581 <fnmatch+0x451>
movsbl -0x32(%rbp),%eax
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    %al,-0x32(%rbp)
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1668 <fnmatch+0x538>
movsbl -0x31(%rbp),%eax
cmp    $0x5b,%eax
je     1601 <fnmatch+0x4d1>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     15e8 <fnmatch+0x4b8>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     15e8 <fnmatch+0x4b8>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x5c(%rbp)
jmp    15f2 <fnmatch+0x4c2>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
movsbl -0x32(%rbp),%ecx
cmp    %ecx,%eax
jne    1629 <fnmatch+0x4f9>
mov    -0x28(%rbp),%rdi
mov    -0x30(%rbp),%rsi
mov    -0x1c(%rbp),%edx
and    $0xfffffffb,%edx
call   1030 <fnmatch@plt>
cmp    $0x0,%eax
jne    1629 <fnmatch+0x4f9>
movl   $0x0,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    164d <fnmatch+0x51d>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     164d <fnmatch+0x51d>
jmp    1668 <fnmatch+0x538>
jmp    1652 <fnmatch+0x522>
jmp    1657 <fnmatch+0x527>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1593 <fnmatch+0x463>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1690 <fnmatch+0x560>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     16e9 <fnmatch+0x5b9>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    16e9 <fnmatch+0x5b9>
mov    -0x30(%rbp),%rax
cmp    -0x18(%rbp),%rax
je     16dd <fnmatch+0x5ad>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     16e9 <fnmatch+0x5b9>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    16e9 <fnmatch+0x5b9>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
mov    -0x28(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x21,%ecx
mov    %al,-0x5d(%rbp)
je     170e <fnmatch+0x5de>
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     172f <fnmatch+0x5ff>
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    179e <fnmatch+0x66e>
movsbl -0x31(%rbp),%eax
cmp    $0x5c,%eax
jne    179e <fnmatch+0x66e>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1787 <fnmatch+0x657>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
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     17d0 <fnmatch+0x6a0>
movzbl -0x39(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     17d0 <fnmatch+0x6a0>
movzbl -0x39(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x64(%rbp)
jmp    17d7 <fnmatch+0x6a7>
movsbl -0x39(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
mov    %al,-0x3a(%rbp)
mov    %al,-0x39(%rbp)
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    17f9 <fnmatch+0x6c9>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
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     183f <fnmatch+0x70f>
movzbl -0x31(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     183f <fnmatch+0x70f>
movzbl -0x31(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x68(%rbp)
jmp    1846 <fnmatch+0x716>
movsbl -0x31(%rbp),%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    %al,-0x31(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1874 <fnmatch+0x744>
movsbl -0x31(%rbp),%eax
cmp    $0x2f,%eax
jne    1874 <fnmatch+0x744>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
movsbl -0x31(%rbp),%eax
cmp    $0x2d,%eax
jne    1941 <fnmatch+0x811>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
je     1941 <fnmatch+0x811>
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    18d5 <fnmatch+0x7a5>
movsbl -0x3a(%rbp),%eax
cmp    $0x5c,%eax
jne    18d5 <fnmatch+0x7a5>
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    18ee <fnmatch+0x7be>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1920 <fnmatch+0x7f0>
movzbl -0x3a(%rbp),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1920 <fnmatch+0x7f0>
movzbl -0x3a(%rbp),%edi
call   1040 <tolower@plt>
mov    %eax,-0x6c(%rbp)
jmp    1927 <fnmatch+0x7f7>
movsbl -0x3a(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    %al,-0x3a(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
mov    (%rax),%al
mov    %al,-0x31(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1979 <fnmatch+0x849>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1979 <fnmatch+0x849>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x70(%rbp)
jmp    1983 <fnmatch+0x853>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
movsbl -0x39(%rbp),%ecx
cmp    %ecx,%eax
jl     19e8 <fnmatch+0x8b8>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     19ca <fnmatch+0x89a>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     19ca <fnmatch+0x89a>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x74(%rbp)
jmp    19d4 <fnmatch+0x8a4>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
movsbl -0x3a(%rbp),%ecx
cmp    %ecx,%eax
jg     19e8 <fnmatch+0x8b8>
jmp    1a1a <fnmatch+0x8ea>
movsbl -0x31(%rbp),%eax
cmp    $0x5d,%eax
jne    19fa <fnmatch+0x8ca>
jmp    19ff <fnmatch+0x8cf>
jmp    1743 <fnmatch+0x613>
cmpl   $0x0,-0x38(%rbp)
jne    1a15 <fnmatch+0x8e5>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
jmp    1b25 <fnmatch+0x9f5>
jmp    1a1f <fnmatch+0x8ef>
movsbl -0x31(%rbp),%eax
cmp    $0x5d,%eax
je     1aa2 <fnmatch+0x972>
movsbl -0x31(%rbp),%eax
cmp    $0x0,%eax
jne    1a45 <fnmatch+0x915>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
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    1a9d <fnmatch+0x96d>
movsbl -0x31(%rbp),%eax
cmp    $0x5c,%eax
jne    1a9d <fnmatch+0x96d>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1a91 <fnmatch+0x961>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1a1f <fnmatch+0x8ef>
cmpl   $0x0,-0x38(%rbp)
je     1ab8 <fnmatch+0x988>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
jmp    1b25 <fnmatch+0x9f5>
movsbl -0x31(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1afc <fnmatch+0x9cc>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1afc <fnmatch+0x9cc>
mov    -0x30(%rbp),%rax
movzbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x7c(%rbp)
jmp    1b06 <fnmatch+0x9d6>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x78(%rbp),%eax
mov    -0x7c(%rbp),%ecx
cmp    %ecx,%eax
je     1b20 <fnmatch+0x9f0>
movl   $0x1,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
jmp    1b25 <fnmatch+0x9f5>
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    1b52 <fnmatch+0xa22>
movl   $0x0,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
mov    -0x1c(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     1b7d <fnmatch+0xa4d>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1b7d <fnmatch+0xa4d>
movl   $0x0,-0x4(%rbp)
jmp    1b84 <fnmatch+0xa54>
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    $0x38,%rsp
mov    (%rdi),%al
test   %al,%al
je     15de <fnmatch+0x4ae>
mov    %rdi,%r14
mov    %edx,%ecx
and    $0x1,%cl
mov    %cl,0x23(%rsp)
mov    %rsi,0x28(%rsp)
mov    %rsi,%rcx
mov    %edx,0xc(%rsp)
jmp    1181 <fnmatch+0x51>
movsbl %bpl,%eax
cmp    %eax,%ebx
jne    1690 <fnmatch+0x560>
add    $0x1,%rcx
mov    0x0(%r13),%al
mov    %r13,%r14
test   %al,%al
je     15e1 <fnmatch+0x4b1>
movzbl %al,%ebp
test   $0x10,%dl
mov    %rcx,0x18(%rsp)
je     11ab <fnmatch+0x7b>
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     11a2 <fnmatch+0x72>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
mov    0x18(%rsp),%rcx
mov    0xc(%rsp),%edx
lea    0x1(%r14),%r13
movsbl %bpl,%ebx
cmp    $0x5a,%ebx
jle    1200 <fnmatch+0xd0>
cmp    $0x5b,%ebx
je     1270 <fnmatch+0x140>
cmp    $0x5c,%ebx
jne    14c2 <fnmatch+0x392>
test   $0x2,%dl
jne    1503 <fnmatch+0x3d3>
movzbl 0x1(%r14),%ebp
test   %ebp,%ebp
je     1690 <fnmatch+0x560>
add    $0x2,%r14
test   $0x10,%dl
jne    150a <fnmatch+0x3da>
mov    %r14,%r13
jmp    156e <fnmatch+0x43e>
cs nopw 0x0(%rax,%rax,1)
nop
cmp    $0x3f,%ebx
jne    14b9 <fnmatch+0x389>
mov    (%rcx),%al
test   %al,%al
je     1690 <fnmatch+0x560>
cmp    $0x2f,%al
sete   %cl
test   %cl,0x23(%rsp)
jne    1690 <fnmatch+0x560>
test   $0x4,%dl
je     155b <fnmatch+0x42b>
cmp    $0x2e,%al
mov    0x18(%rsp),%rcx
jne    116e <fnmatch+0x3e>
cmp    0x28(%rsp),%rcx
je     1690 <fnmatch+0x560>
test   $0x1,%dl
je     116e <fnmatch+0x3e>
movl   $0x1,0x10(%rsp)
cmpb   $0x2f,-0x1(%rcx)
jne    116e <fnmatch+0x3e>
jmp    177b <fnmatch+0x64b>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movzbl (%rcx),%esi
movl   $0x1,0x10(%rsp)
test   %esi,%esi
je     177b <fnmatch+0x64b>
test   $0x4,%dl
je     12a8 <fnmatch+0x178>
cmp    $0x2e,%sil
jne    12a8 <fnmatch+0x178>
cmp    0x28(%rsp),%rcx
je     177b <fnmatch+0x64b>
test   $0x1,%dl
je     12a8 <fnmatch+0x178>
cmpb   $0x2f,-0x1(%rcx)
je     177b <fnmatch+0x64b>
mov    0x1(%r14),%cl
cmp    $0x21,%cl
sete   %al
mov    %cl,0x17(%rsp)
cmp    $0x5e,%cl
sete   %cl
or     %al,%cl
lea    0x2(%r14),%rax
movzbl %cl,%ecx
test   %cl,%cl
cmovne %rax,%r13
add    $0x1,%r13
mov    0x1(%rcx,%r14,1),%bl
movsbl %sil,%eax
mov    %eax,0x24(%rsp)
mov    %esi,0x34(%rsp)
jmp    1305 <fnmatch+0x1d5>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl %r15b,%ecx
cmp    %ecx,%eax
jle    1587 <fnmatch+0x457>
cmp    $0x5d,%bl
je     1541 <fnmatch+0x411>
test   $0x2,%dl
jne    1330 <fnmatch+0x200>
cmp    $0x5c,%bl
jne    1330 <fnmatch+0x200>
movzbl 0x0(%r13),%eax
test   %al,%al
je     177b <fnmatch+0x64b>
add    $0x1,%r13
mov    %r13,%r12
test   $0x10,%dl
je     133f <fnmatch+0x20f>
jmp    1363 <fnmatch+0x233>
nopw   0x0(%rax,%rax,1)
mov    %ebx,%eax
test   $0x10,%dl
jne    1360 <fnmatch+0x230>
test   %bl,%bl
je     177b <fnmatch+0x64b>
movzbl %al,%r14d
movzbl 0x0(%r13),%ebx
mov    %r13,%r12
add    $0x1,%r13
jmp    13bb <fnmatch+0x28b>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %r13,%r12
movzbl %al,%r14d
mov    %r14d,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1388 <fnmatch+0x258>
test   %bl,%bl
je     177b <fnmatch+0x64b>
mov    %r14d,%edi
call   1040 <tolower@plt>
mov    %eax,%r14d
jmp    1390 <fnmatch+0x260>
test   %bl,%bl
je     177b <fnmatch+0x64b>
lea    0x1(%r12),%r13
movzbl (%r12),%ebx
movzbl %bl,%ebp
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     13b7 <fnmatch+0x287>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebx
mov    0xc(%rsp),%edx
jmp    13be <fnmatch+0x28e>
mov    0xc(%rsp),%edx
movzbl %bl,%ebx
mov    %ebx,%eax
shl    $0x18,%eax
test   $0x1,%dl
je     13d3 <fnmatch+0x2a3>
cmp    $0x2f000000,%eax
je     177b <fnmatch+0x64b>
cmp    $0x2d000000,%eax
jne    1460 <fnmatch+0x330>
movzbl 0x0(%r13),%eax
mov    %r14d,%r15d
cmp    $0x5d,%al
je     143a <fnmatch+0x30a>
lea    0x2(%r12),%r13
test   $0x2,%dl
jne    1405 <fnmatch+0x2d5>
cmp    $0x5c,%al
jne    1405 <fnmatch+0x2d5>
movzbl 0x2(%r12),%eax
add    $0x3,%r12
mov    %r12,%r13
test   %al,%al
je     177b <fnmatch+0x64b>
movzbl %al,%r15d
test   $0x10,%dl
je     1431 <fnmatch+0x301>
mov    %r15d,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     142d <fnmatch+0x2fd>
mov    %r15d,%edi
call   1040 <tolower@plt>
mov    %eax,%r15d
mov    0xc(%rsp),%edx
movzbl 0x0(%r13),%ebx
add    $0x1,%r13
test   $0x10,%dl
jne    1468 <fnmatch+0x338>
movsbl %r14b,%ecx
mov    0x24(%rsp),%esi
mov    %esi,%eax
cmp    %esi,%ecx
jle    12f0 <fnmatch+0x1c0>
jmp    12fc <fnmatch+0x1cc>
cs nopw 0x0(%rax,%rax,1)
mov    %r14d,%r15d
test   $0x10,%dl
je     143f <fnmatch+0x30f>
mov    0x34(%rsp),%ebp
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     149e <fnmatch+0x36e>
mov    %ebp,%edi
call   1040 <tolower@plt>
movsbl %r14b,%ecx
cmp    %ecx,%eax
mov    0xc(%rsp),%edx
jl     12fc <fnmatch+0x1cc>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    0xc(%rsp),%edx
jmp    12f0 <fnmatch+0x1c0>
movsbl %r14b,%ecx
mov    0x24(%rsp),%edx
mov    %edx,%eax
cmp    %edx,%ecx
mov    0xc(%rsp),%edx
jg     12fc <fnmatch+0x1cc>
jmp    12f0 <fnmatch+0x1c0>
cmp    $0x2a,%ebx
je     1604 <fnmatch+0x4d4>
movzbl (%rcx),%ebp
test   $0x10,%dl
je     1162 <fnmatch+0x32>
mov    %ebp,%edi
call   1050 <isupper@plt>
mov    0xc(%rsp),%edx
mov    0x18(%rsp),%rcx
test   %eax,%eax
je     1162 <fnmatch+0x32>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    0xc(%rsp),%edx
mov    0x18(%rsp),%rcx
cmp    %eax,%ebx
je     116e <fnmatch+0x3e>
jmp    1690 <fnmatch+0x560>
test   $0x10,%dl
jne    1526 <fnmatch+0x3f6>
jmp    156e <fnmatch+0x43e>
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     151e <fnmatch+0x3ee>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
mov    %r14,%r13
mov    0x18(%rsp),%rcx
movzbl (%rcx),%ebx
mov    %ebx,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     1565 <fnmatch+0x435>
mov    %ebx,%edi
call   1040 <tolower@plt>
mov    0xc(%rsp),%edx
jmp    1571 <fnmatch+0x441>
mov    0x17(%rsp),%al
cmp    $0x21,%al
je     155b <fnmatch+0x42b>
cmp    $0x5e,%al
mov    0x18(%rsp),%rcx
je     116e <fnmatch+0x3e>
jmp    177b <fnmatch+0x64b>
mov    0x18(%rsp),%rcx
jmp    116e <fnmatch+0x3e>
mov    0x18(%rsp),%rcx
mov    0xc(%rsp),%edx
movsbl (%rcx),%eax
movsbl %bpl,%ecx
cmp    %ecx,%eax
mov    0x18(%rsp),%rcx
je     116e <fnmatch+0x3e>
jmp    1690 <fnmatch+0x560>
mov    %r13,%rax
mov    0x18(%rsp),%rcx
nop
test   %bl,%bl
je     177b <fnmatch+0x64b>
mov    %rax,%r13
cmp    $0x5d,%bl
je     15c5 <fnmatch+0x495>
lea    0x1(%r13),%rax
movzbl 0x0(%r13),%ebx
test   $0x2,%dl
jne    1590 <fnmatch+0x460>
cmp    $0x5c,%bl
jne    1590 <fnmatch+0x460>
cmpb   $0x0,(%rax)
je     177b <fnmatch+0x64b>
add    $0x2,%r13
mov    %r13,%rax
jmp    1590 <fnmatch+0x460>
mov    0x17(%rsp),%al
cmp    $0x21,%al
je     177b <fnmatch+0x64b>
cmp    $0x5e,%al
jne    116e <fnmatch+0x3e>
jmp    177b <fnmatch+0x64b>
mov    %rsi,%rcx
mov    (%rcx),%al
test   %al,%al
je     1773 <fnmatch+0x643>
test   $0x8,%dl
sete   %cl
cmp    $0x2f,%al
setne  %al
or     %cl,%al
movzbl %al,%eax
mov    %eax,0x10(%rsp)
jmp    177b <fnmatch+0x64b>
test   $0x4,%dl
je     163e <fnmatch+0x50e>
cmpb   $0x2e,(%rcx)
jne    163e <fnmatch+0x50e>
movl   $0x1,0x10(%rsp)
cmp    0x28(%rsp),%rcx
je     177b <fnmatch+0x64b>
test   $0x1,%dl
je     163e <fnmatch+0x50e>
cmpb   $0x2f,-0x1(%rcx)
jne    163e <fnmatch+0x50e>
jmp    177b <fnmatch+0x64b>
test   $0x1,%dl
jne    177b <fnmatch+0x64b>
add    $0x1,%rcx
add    $0x1,%r14
movzbl (%r14),%r12d
cmp    $0x2a,%r12b
je     163e <fnmatch+0x50e>
cmp    $0x3f,%r12b
jne    166a <fnmatch+0x53a>
movzbl (%rcx),%eax
movl   $0x1,0x10(%rsp)
cmp    $0x2f,%al
je     1631 <fnmatch+0x501>
test   %al,%al
jne    163a <fnmatch+0x50a>
jmp    177b <fnmatch+0x64b>
test   %r12b,%r12b
jne    169d <fnmatch+0x56d>
and    $0x9,%edx
cmp    $0x1,%edx
jne    1773 <fnmatch+0x643>
movzbl (%rcx),%eax
test   %al,%al
je     1773 <fnmatch+0x643>
cmp    $0x2f,%al
je     1690 <fnmatch+0x560>
add    $0x1,%rcx
jmp    167b <fnmatch+0x54b>
movl   $0x1,0x10(%rsp)
jmp    177b <fnmatch+0x64b>
mov    %rcx,%rbx
mov    %r12d,%eax
test   $0x2,%dl
jne    16b5 <fnmatch+0x585>
mov    %r12d,%eax
cmp    $0x5c,%r12b
jne    16b5 <fnmatch+0x585>
mov    0x1(%r14),%al
movzbl %al,%ebp
test   $0x10,%dl
je     16d9 <fnmatch+0x5a9>
mov    %ebp,%edi
call   1050 <isupper@plt>
mov    0xc(%rsp),%edx
test   %eax,%eax
je     16d9 <fnmatch+0x5a9>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    0xc(%rsp),%edx
mov    %eax,%ebp
mov    (%rbx),%r13b
movl   $0x1,0x10(%rsp)
test   %r13b,%r13b
je     177b <fnmatch+0x64b>
mov    %rbx,%rsi
movsbl %bpl,%eax
mov    %eax,0x18(%rsp)
mov    %edx,%r15d
and    $0xfffffffb,%r15d
jmp    170f <fnmatch+0x5df>
movzbl 0x1(%rsi),%r13d
add    $0x1,%rsi
test   %r13b,%r13b
je     177b <fnmatch+0x64b>
cmp    $0x5b,%r12b
je     174d <fnmatch+0x61d>
test   $0x10,%dl
je     1743 <fnmatch+0x613>
movzbl %r13b,%ebp
mov    %ebp,%edi
mov    %rsi,%rbx
call   1050 <isupper@plt>
mov    0xc(%rsp),%edx
mov    %rbx,%rsi
test   %eax,%eax
je     1743 <fnmatch+0x613>
mov    %ebp,%edi
call   1040 <tolower@plt>
mov    0xc(%rsp),%edx
mov    %rbx,%rsi
jmp    1747 <fnmatch+0x617>
movsbl %r13b,%eax
cmp    0x18(%rsp),%eax
jne    1766 <fnmatch+0x636>
mov    %r14,%rdi
mov    %r15d,%edx
mov    %rsi,%rbx
call   1030 <fnmatch@plt>
mov    0xc(%rsp),%edx
mov    %rbx,%rsi
test   %eax,%eax
je     1773 <fnmatch+0x643>
test   $0x1,%dl
je     1701 <fnmatch+0x5d1>
cmp    $0x2f,%r13b
jne    1701 <fnmatch+0x5d1>
jmp    177b <fnmatch+0x64b>
movl   $0x0,0x10(%rsp)
mov    0x10(%rsp),%eax
add    $0x38,%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 = %629, %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 %632
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 = sext i8 %37 to i32
br label %39
39: ; preds = %36, %32
%40 = phi i32 [ %35, %32 ], [ %38, %36 ]
%41 = trunc i32 %40 to i8
store i8 %41, i8* %10
%42 = load i8, i8* %10
%43 = sext i8 %42 to i32
switch i32 %43, label %603 [
i32 63, label %44
i32 92, label %87
i32 42, label %144
i32 91, label %331
]
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 %649
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 %649
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 %649
84: ; preds = %77, %73, %64, %60
br label %85
85: ; preds = %84
br label %86
86: ; preds = %85
br label %629
87: ; preds = %39
%88 = load i32, i32* %7
%89 = and i32 %88, 2
%90 = icmp ne i32 %89, 0
br i1 %90, label %118, label %91
91: ; preds = %87
%92 = load i8*, i8** %8
%93 = getelementptr inbounds i8, i8* %92, i32 1
store i8* %93, i8** %8
%94 = load i8, i8* %92
store i8 %94, i8* %10
%95 = load i8, i8* %10
%96 = sext i8 %95 to i32
%97 = icmp eq i32 %96, 0
br i1 %97, label %98, label %99
98: ; preds = %91
store i32 1, i32* %4
br label %649
99: ; preds = %91
%100 = load i32, i32* %7
%101 = and i32 %100, 16
%102 = icmp ne i32 %101, 0
br i1 %102, label %103, label %112
103: ; preds = %99
%104 = load i8, i8* %10
%105 = zext i8 %104 to i32
%106 = call i32 @isupper(i32 %105)
%107 = icmp ne i32 %106, 0
br i1 %107, label %108, label %112
108: ; preds = %103
%109 = load i8, i8* %10
%110 = zext i8 %109 to i32
%111 = call i32 @tolower(i32 %110)
br label %115
112: ; preds = %103, %99
%113 = load i8, i8* %10
%114 = sext i8 %113 to i32
br label %115
115: ; preds = %112, %108
%116 = phi i32 [ %111, %108 ], [ %114, %112 ]
%117 = trunc i32 %116 to i8
store i8 %117, i8* %10
br label %118
118: ; preds = %115, %87
%119 = load i32, i32* %7
%120 = and i32 %119, 16
%121 = icmp ne i32 %120, 0
br i1 %121, label %122, label %133
122: ; preds = %118
%123 = load i8*, i8** %9
%124 = load i8, i8* %123
%125 = zext i8 %124 to i32
%126 = call i32 @isupper(i32 %125)
%127 = icmp ne i32 %126, 0
br i1 %127, label %128, label %133
128: ; preds = %122
%129 = load i8*, i8** %9
%130 = load i8, i8* %129
%131 = zext i8 %130 to i32
%132 = call i32 @tolower(i32 %131)
br label %137
133: ; preds = %122, %118
%134 = load i8*, i8** %9
%135 = load i8, i8* %134
%136 = sext i8 %135 to i32
br label %137
137: ; preds = %133, %128
%138 = phi i32 [ %132, %128 ], [ %136, %133 ]
%139 = load i8, i8* %10
%140 = sext i8 %139 to i32
%141 = icmp ne i32 %138, %140
br i1 %141, label %142, label %143
142: ; preds = %137
store i32 1, i32* %4
br label %649
143: ; preds = %137
br label %629
144: ; preds = %39
%145 = load i32, i32* %7
%146 = and i32 %145, 4
%147 = icmp ne i32 %146, 0
br i1 %147, label %148, label %168
148: ; preds = %144
%149 = load i8*, i8** %9
%150 = load i8, i8* %149
%151 = sext i8 %150 to i32
%152 = icmp eq i32 %151, 46
br i1 %152, label %153, label %168
153: ; preds = %148
%154 = load i8*, i8** %9
%155 = load i8*, i8** %6
%156 = icmp eq i8* %154, %155
br i1 %156, label %167, label %157
157: ; preds = %153
%158 = load i32, i32* %7
%159 = and i32 %158, 1
%160 = icmp ne i32 %159, 0
br i1 %160, label %161, label %168
161: ; preds = %157
%162 = load i8*, i8** %9
%163 = getelementptr inbounds i8, i8* %162, i64 -1
%164 = load i8, i8* %163
%165 = sext i8 %164 to i32
%166 = icmp eq i32 %165, 47
br i1 %166, label %167, label %168
167: ; preds = %161, %153
store i32 1, i32* %4
br label %649
168: ; preds = %161, %157, %148, %144
%169 = load i8*, i8** %8
%170 = getelementptr inbounds i8, i8* %169, i32 1
store i8* %170, i8** %8
%171 = load i8, i8* %169
store i8 %171, i8* %10
br label %172
172: ; preds = %206, %168
%173 = load i8, i8* %10
%174 = sext i8 %173 to i32
%175 = icmp eq i32 %174, 63
br i1 %175, label %180, label %176
176: ; preds = %172
%177 = load i8, i8* %10
%178 = sext i8 %177 to i32
%179 = icmp eq i32 %178, 42
br label %180
180: ; preds = %176, %172
%181 = phi i1 [ true, %172 ], [ %179, %176 ]
br i1 %181, label %182, label %210
182: ; preds = %180
%183 = load i8, i8* %10
%184 = sext i8 %183 to i32
%185 = icmp eq i32 %184, 63
br i1 %185, label %186, label %205
186: ; preds = %182
%187 = load i8*, i8** %9
%188 = load i8, i8* %187
%189 = sext i8 %188 to i32
%190 = icmp eq i32 %189, 0
br i1 %190, label %200, label %191
191: ; preds = %186
%192 = load i8*, i8** %9
%193 = load i8, i8* %192
%194 = sext i8 %193 to i32
%195 = icmp eq i32 %194, 47
br i1 %195, label %196, label %201
196: ; preds = %191
%197 = load i32, i32* %7
%198 = and i32 %197, 1
%199 = icmp ne i32 %198, 0
br i1 %199, label %200, label %201
200: ; preds = %196, %186
store i32 1, i32* %4
br label %649
201: ; preds = %196, %191
%202 = load i8*, i8** %9
%203 = getelementptr inbounds i8, i8* %202, i32 1
store i8* %203, i8** %9
br label %204
204: ; preds = %201
br label %205
205: ; preds = %204, %182
br label %206
206: ; preds = %205
%207 = load i8*, i8** %8
%208 = getelementptr inbounds i8, i8* %207, i32 1
store i8* %208, i8** %8
%209 = load i8, i8* %207
store i8 %209, i8* %10
br label %172
210: ; preds = %180
%211 = load i8, i8* %10
%212 = sext i8 %211 to i32
%213 = icmp eq i32 %212, 0
br i1 %213, label %214, label %236
214: ; preds = %210
%215 = load i32, i32* %7
%216 = and i32 %215, 9
%217 = icmp eq i32 %216, 1
br i1 %217, label %218, label %235
218: ; preds = %214
br label %219
219: ; preds = %231, %218
%220 = load i8*, i8** %9
%221 = load i8, i8* %220
%222 = sext i8 %221 to i32
%223 = icmp ne i32 %222, 0
br i1 %223, label %224, label %234
224: ; preds = %219
%225 = load i8*, i8** %9
%226 = load i8, i8* %225
%227 = sext i8 %226 to i32
%228 = icmp eq i32 %227, 47
br i1 %228, label %229, label %230
229: ; preds = %224
store i32 1, i32* %4
br label %649
230: ; preds = %224
br label %231
231: ; preds = %230
%232 = load i8*, i8** %9
%233 = getelementptr inbounds i8, i8* %232, i32 1
store i8* %233, i8** %9
br label %219
234: ; preds = %219
br label %235
235: ; preds = %234, %214
store i32 0, i32* %4
br label %649
236: ; preds = %210
%237 = load i32, i32* %7
%238 = and i32 %237, 2
%239 = icmp ne i32 %238, 0
br i1 %239, label %248, label %240
240: ; preds = %236
%241 = load i8, i8* %10
%242 = sext i8 %241 to i32
%243 = icmp eq i32 %242, 92
br i1 %243, label %244, label %248
244: ; preds = %240
%245 = load i8*, i8** %8
%246 = load i8, i8* %245
%247 = sext i8 %246 to i32
br label %251
248: ; preds = %240, %236
%249 = load i8, i8* %10
%250 = sext i8 %249 to i32
br label %251
251: ; preds = %248, %244
%252 = phi i32 [ %247, %244 ], [ %250, %248 ]
%253 = trunc i32 %252 to i8
store i8 %253, i8* %11
%254 = load i32, i32* %7
%255 = and i32 %254, 16
%256 = icmp ne i32 %255, 0
br i1 %256, label %257, label %266
257: ; preds = %251
%258 = load i8, i8* %11
%259 = zext i8 %258 to i32
%260 = call i32 @isupper(i32 %259)
%261 = icmp ne i32 %260, 0
br i1 %261, label %262, label %266
262: ; preds = %257
%263 = load i8, i8* %11
%264 = zext i8 %263 to i32
%265 = call i32 @tolower(i32 %264)
br label %269
266: ; preds = %257, %251
%267 = load i8, i8* %11
%268 = sext i8 %267 to i32
br label %269
269: ; preds = %266, %262
%270 = phi i32 [ %265, %262 ], [ %268, %266 ]
%271 = trunc i32 %270 to i8
store i8 %271, i8* %11
%272 = load i8*, i8** %8
%273 = getelementptr inbounds i8, i8* %272, i32 -1
store i8* %273, i8** %8
br label %274
274: ; preds = %327, %269
%275 = load i8*, i8** %9
%276 = load i8, i8* %275
%277 = sext i8 %276 to i32
%278 = icmp ne i32 %277, 0
br i1 %278, label %279, label %330
279: ; preds = %274
%280 = load i8, i8* %10
%281 = sext i8 %280 to i32
%282 = icmp eq i32 %281, 91
br i1 %282, label %307, label %283
283: ; preds = %279
%284 = load i32, i32* %7
%285 = and i32 %284, 16
%286 = icmp ne i32 %285, 0
br i1 %286, label %287, label %298
287: ; preds = %283
%288 = load i8*, i8** %9
%289 = load i8, i8* %288
%290 = zext i8 %289 to i32
%291 = call i32 @isupper(i32 %290)
%292 = icmp ne i32 %291, 0
br i1 %292, label %293, label %298
293: ; preds = %287
%294 = load i8*, i8** %9
%295 = load i8, i8* %294
%296 = zext i8 %295 to i32
%297 = call i32 @tolower(i32 %296)
br label %302
298: ; preds = %287, %283
%299 = load i8*, i8** %9
%300 = load i8, i8* %299
%301 = sext i8 %300 to i32
br label %302
302: ; preds = %298, %293
%303 = phi i32 [ %297, %293 ], [ %301, %298 ]
%304 = load i8, i8* %11
%305 = sext i8 %304 to i32
%306 = icmp eq i32 %303, %305
br i1 %306, label %307, label %315
307: ; preds = %302, %279
%308 = load i8*, i8** %8
%309 = load i8*, i8** %9
%310 = load i32, i32* %7
%311 = and i32 %310, -5
%312 = call i32 @fnmatch(i8* %308, i8* %309, i32 %311)
%313 = icmp eq i32 %312, 0
br i1 %313, label %314, label %315
314: ; preds = %307
store i32 0, i32* %4
br label %649
315: ; preds = %307, %302
%316 = load i8*, i8** %9
%317 = load i8, i8* %316
%318 = sext i8 %317 to i32
%319 = icmp eq i32 %318, 47
br i1 %319, label %320, label %325
320: ; preds = %315
%321 = load i32, i32* %7
%322 = and i32 %321, 1
%323 = icmp ne i32 %322, 0
br i1 %323, label %324, label %325
324: ; preds = %320
br label %330
325: ; preds = %320, %315
br label %326
326: ; preds = %325
br label %327
327: ; preds = %326
%328 = load i8*, i8** %9
%329 = getelementptr inbounds i8, i8* %328, i32 1
store i8* %329, i8** %9
br label %274
330: ; preds = %324, %274
store i32 1, i32* %4
br label %649
331: ; preds = %39
%332 = load i8*, i8** %9
%333 = load i8, i8* %332
%334 = sext i8 %333 to i32
%335 = icmp eq i32 %334, 0
br i1 %335, label %336, label %337
336: ; preds = %331
store i32 1, i32* %4
br label %649
337: ; preds = %331
%338 = load i32, i32* %7
%339 = and i32 %338, 4
%340 = icmp ne i32 %339, 0
br i1 %340, label %341, label %361
341: ; preds = %337
%342 = load i8*, i8** %9
%343 = load i8, i8* %342
%344 = sext i8 %343 to i32
%345 = icmp eq i32 %344, 46
br i1 %345, label %346, label %361
346: ; preds = %341
%347 = load i8*, i8** %9
%348 = load i8*, i8** %6
%349 = icmp eq i8* %347, %348
br i1 %349, label %360, label %350
350: ; preds = %346
%351 = load i32, i32* %7
%352 = and i32 %351, 1
%353 = icmp ne i32 %352, 0
br i1 %353, label %354, label %361
354: ; preds = %350
%355 = load i8*, i8** %9
%356 = getelementptr inbounds i8, i8* %355, i64 -1
%357 = load i8, i8* %356
%358 = sext i8 %357 to i32
%359 = icmp eq i32 %358, 47
br i1 %359, label %360, label %361
360: ; preds = %354, %346
store i32 1, i32* %4
br label %649
361: ; preds = %354, %350, %341, %337
%362 = load i8*, i8** %8
%363 = load i8, i8* %362
%364 = sext i8 %363 to i32
%365 = icmp eq i32 %364, 33
br i1 %365, label %371, label %366
366: ; preds = %361
%367 = load i8*, i8** %8
%368 = load i8, i8* %367
%369 = sext i8 %368 to i32
%370 = icmp eq i32 %369, 94
br label %371
371: ; preds = %366, %361
%372 = phi i1 [ true, %361 ], [ %370, %366 ]
%373 = zext i1 %372 to i32
store i32 %373, i32* %12
%374 = load i32, i32* %12
%375 = icmp ne i32 %374, 0
br i1 %375, label %376, label %379
376: ; preds = %371
%377 = load i8*, i8** %8
%378 = getelementptr inbounds i8, i8* %377, i32 1
store i8* %378, i8** %8
br label %379
379: ; preds = %376, %371
%380 = load i8*, i8** %8
%381 = getelementptr inbounds i8, i8* %380, i32 1
store i8* %381, i8** %8
%382 = load i8, i8* %380
store i8 %382, i8* %10
br label %383
383: ; preds = %561, %379
%384 = load i8, i8* %10
store i8 %384, i8* %13
%385 = load i8, i8* %10
store i8 %385, i8* %14
%386 = load i32, i32* %7
%387 = and i32 %386, 2
%388 = icmp ne i32 %387, 0
br i1 %388, label %403, label %389
389: ; preds = %383
%390 = load i8, i8* %10
%391 = sext i8 %390 to i32
%392 = icmp eq i32 %391, 92
br i1 %392, label %393, label %403
393: ; preds = %389
%394 = load i8*, i8** %8
%395 = load i8, i8* %394
%396 = sext i8 %395 to i32
%397 = icmp eq i32 %396, 0
br i1 %397, label %398, label %399
398: ; preds = %393
store i32 1, i32* %4
br label %649
399: ; preds = %393
%400 = load i8*, i8** %8
%401 = getelementptr inbounds i8, i8* %400, i32 1
store i8* %401, i8** %8
%402 = load i8, i8* %400
store i8 %402, i8* %14
store i8 %402, i8* %13
br label %403
403: ; preds = %399, %389, %383
%404 = load i32, i32* %7
%405 = and i32 %404, 16
%406 = icmp ne i32 %405, 0
br i1 %406, label %407, label %416
407: ; preds = %403
%408 = load i8, i8* %13
%409 = zext i8 %408 to i32
%410 = call i32 @isupper(i32 %409)
%411 = icmp ne i32 %410, 0
br i1 %411, label %412, label %416
412: ; preds = %407
%413 = load i8, i8* %13
%414 = zext i8 %413 to i32
%415 = call i32 @tolower(i32 %414)
br label %419
416: ; preds = %407, %403
%417 = load i8, i8* %13
%418 = sext i8 %417 to i32
br label %419
419: ; preds = %416, %412
%420 = phi i32 [ %415, %412 ], [ %418, %416 ]
%421 = trunc i32 %420 to i8
store i8 %421, i8* %14
store i8 %421, i8* %13
%422 = load i8, i8* %10
%423 = sext i8 %422 to i32
%424 = icmp eq i32 %423, 0
br i1 %424, label %425, label %426
425: ; preds = %419
store i32 1, i32* %4
br label %649
426: ; preds = %419
%427 = load i8*, i8** %8
%428 = getelementptr inbounds i8, i8* %427, i32 1
store i8* %428, i8** %8
%429 = load i8, i8* %427
store i8 %429, i8* %10
%430 = load i32, i32* %7
%431 = and i32 %430, 16
%432 = icmp ne i32 %431, 0
br i1 %432, label %433, label %442
433: ; preds = %426
%434 = load i8, i8* %10
%435 = zext i8 %434 to i32
%436 = call i32 @isupper(i32 %435)
%437 = icmp ne i32 %436, 0
br i1 %437, label %438, label %442
438: ; preds = %433
%439 = load i8, i8* %10
%440 = zext i8 %439 to i32
%441 = call i32 @tolower(i32 %440)
br label %445
442: ; preds = %433, %426
%443 = load i8, i8* %10
%444 = sext i8 %443 to i32
br label %445
445: ; preds = %442, %438
%446 = phi i32 [ %441, %438 ], [ %444, %442 ]
%447 = trunc i32 %446 to i8
store i8 %447, i8* %10
%448 = load i32, i32* %7
%449 = and i32 %448, 1
%450 = icmp ne i32 %449, 0
br i1 %450, label %451, label %456
451: ; preds = %445
%452 = load i8, i8* %10
%453 = sext i8 %452 to i32
%454 = icmp eq i32 %453, 47
br i1 %454, label %455, label %456
455: ; preds = %451
store i32 1, i32* %4
br label %649
456: ; preds = %451, %445
%457 = load i8, i8* %10
%458 = sext i8 %457 to i32
%459 = icmp eq i32 %458, 45
br i1 %459, label %460, label %507
460: ; preds = %456
%461 = load i8*, i8** %8
%462 = load i8, i8* %461
%463 = sext i8 %462 to i32
%464 = icmp ne i32 %463, 93
br i1 %464, label %465, label %507
465: ; preds = %460
%466 = load i8*, i8** %8
%467 = getelementptr inbounds i8, i8* %466, i32 1
store i8* %467, i8** %8
%468 = load i8, i8* %466
store i8 %468, i8* %14
%469 = load i32, i32* %7
%470 = and i32 %469, 2
%471 = icmp ne i32 %470, 0
br i1 %471, label %480, label %472
472: ; preds = %465
%473 = load i8, i8* %14
%474 = sext i8 %473 to i32
%475 = icmp eq i32 %474, 92
br i1 %475, label %476, label %480
476: ; preds = %472
%477 = load i8*, i8** %8
%478 = getelementptr inbounds i8, i8* %477, i32 1
store i8* %478, i8** %8
%479 = load i8, i8* %477
store i8 %479, i8* %14
br label %480
480: ; preds = %476, %472, %465
%481 = load i8, i8* %14
%482 = sext i8 %481 to i32
%483 = icmp eq i32 %482, 0
br i1 %483, label %484, label %485
484: ; preds = %480
store i32 1, i32* %4
br label %649
485: ; preds = %480
%486 = load i32, i32* %7
%487 = and i32 %486, 16
%488 = icmp ne i32 %487, 0
br i1 %488, label %489, label %498
489: ; preds = %485
%490 = load i8, i8* %14
%491 = zext i8 %490 to i32
%492 = call i32 @isupper(i32 %491)
%493 = icmp ne i32 %492, 0
br i1 %493, label %494, label %498
494: ; preds = %489
%495 = load i8, i8* %14
%496 = zext i8 %495 to i32
%497 = call i32 @tolower(i32 %496)
br label %501
498: ; preds = %489, %485
%499 = load i8, i8* %14
%500 = sext i8 %499 to i32
br label %501
501: ; preds = %498, %494
%502 = phi i32 [ %497, %494 ], [ %500, %498 ]
%503 = trunc i32 %502 to i8
store i8 %503, i8* %14
%504 = load i8*, i8** %8
%505 = getelementptr inbounds i8, i8* %504, i32 1
store i8* %505, i8** %8
%506 = load i8, i8* %504
store i8 %506, i8* %10
br label %507
507: ; preds = %501, %460, %456
%508 = load i32, i32* %7
%509 = and i32 %508, 16
%510 = icmp ne i32 %509, 0
br i1 %510, label %511, label %522
511: ; preds = %507
%512 = load i8*, i8** %9
%513 = load i8, i8* %512
%514 = zext i8 %513 to i32
%515 = call i32 @isupper(i32 %514)
%516 = icmp ne i32 %515, 0
br i1 %516, label %517, label %522
517: ; preds = %511
%518 = load i8*, i8** %9
%519 = load i8, i8* %518
%520 = zext i8 %519 to i32
%521 = call i32 @tolower(i32 %520)
br label %526
522: ; preds = %511, %507
%523 = load i8*, i8** %9
%524 = load i8, i8* %523
%525 = sext i8 %524 to i32
br label %526
526: ; preds = %522, %517
%527 = phi i32 [ %521, %517 ], [ %525, %522 ]
%528 = load i8, i8* %13
%529 = sext i8 %528 to i32
%530 = icmp sge i32 %527, %529
br i1 %530, label %531, label %556
531: ; preds = %526
%532 = load i32, i32* %7
%533 = and i32 %532, 16
%534 = icmp ne i32 %533, 0
br i1 %534, label %535, label %546
535: ; preds = %531
%536 = load i8*, i8** %9
%537 = load i8, i8* %536
%538 = zext i8 %537 to i32
%539 = call i32 @isupper(i32 %538)
%540 = icmp ne i32 %539, 0
br i1 %540, label %541, label %546
541: ; preds = %535
%542 = load i8*, i8** %9
%543 = load i8, i8* %542
%544 = zext i8 %543 to i32
%545 = call i32 @tolower(i32 %544)
br label %550
546: ; preds = %535, %531
%547 = load i8*, i8** %9
%548 = load i8, i8* %547
%549 = sext i8 %548 to i32
br label %550
550: ; preds = %546, %541
%551 = phi i32 [ %545, %541 ], [ %549, %546 ]
%552 = load i8, i8* %14
%553 = sext i8 %552 to i32
%554 = icmp sle i32 %551, %553
br i1 %554, label %555, label %556
555: ; preds = %550
br label %567
556: ; preds = %550, %526
%557 = load i8, i8* %10
%558 = sext i8 %557 to i32
%559 = icmp eq i32 %558, 93
br i1 %559, label %560, label %561
560: ; preds = %556
br label %562
561: ; preds = %556
br label %383
562: ; preds = %560
%563 = load i32, i32* %12
%564 = icmp ne i32 %563, 0
br i1 %564, label %566, label %565
565: ; preds = %562
store i32 1, i32* %4
br label %649
566: ; preds = %562
br label %629
567: ; preds = %555
br label %568
568: ; preds = %597, %567
%569 = load i8, i8* %10
%570 = sext i8 %569 to i32
%571 = icmp ne i32 %570, 93
br i1 %571, label %572, label %598
572: ; preds = %568
%573 = load i8, i8* %10
%574 = sext i8 %573 to i32
%575 = icmp eq i32 %574, 0
br i1 %575, label %576, label %577
576: ; preds = %572
store i32 1, i32* %4
br label %649
577: ; preds = %572
%578 = load i8*, i8** %8
%579 = getelementptr inbounds i8, i8* %578, i32 1
store i8* %579, i8** %8
%580 = load i8, i8* %578
store i8 %580, i8* %10
%581 = load i32, i32* %7
%582 = and i32 %581, 2
%583 = icmp ne i32 %582, 0
br i1 %583, label %597, label %584
584: ; preds = %577
%585 = load i8, i8* %10
%586 = sext i8 %585 to i32
%587 = icmp eq i32 %586, 92
br i1 %587, label %588, label %597
588: ; preds = %584
%589 = load i8*, i8** %8
%590 = load i8, i8* %589
%591 = sext i8 %590 to i32
%592 = icmp eq i32 %591, 0
br i1 %592, label %593, label %594
593: ; preds = %588
store i32 1, i32* %4
br label %649
594: ; preds = %588
%595 = load i8*, i8** %8
%596 = getelementptr inbounds i8, i8* %595, i32 1
store i8* %596, i8** %8
br label %597
597: ; preds = %594, %584, %577
br label %568
598: ; preds = %568
%599 = load i32, i32* %12
%600 = icmp ne i32 %599, 0
br i1 %600, label %601, label %602
601: ; preds = %598
store i32 1, i32* %4
br label %649
602: ; preds = %598
br label %629
603: ; preds = %39
%604 = load i8, i8* %10
%605 = sext i8 %604 to i32
%606 = load i32, i32* %7
%607 = and i32 %606, 16
%608 = icmp ne i32 %607, 0
br i1 %608, label %609, label %620
609: ; preds = %603
%610 = load i8*, i8** %9
%611 = load i8, i8* %610
%612 = zext i8 %611 to i32
%613 = call i32 @isupper(i32 %612)
%614 = icmp ne i32 %613, 0
br i1 %614, label %615, label %620
615: ; preds = %609
%616 = load i8*, i8** %9
%617 = load i8, i8* %616
%618 = zext i8 %617 to i32
%619 = call i32 @tolower(i32 %618)
br label %624
620: ; preds = %609, %603
%621 = load i8*, i8** %9
%622 = load i8, i8* %621
%623 = sext i8 %622 to i32
br label %624
624: ; preds = %620, %615
%625 = phi i32 [ %619, %615 ], [ %623, %620 ]
%626 = icmp ne i32 %605, %625
br i1 %626, label %627, label %628
627: ; preds = %624
store i32 1, i32* %4
br label %649
628: ; preds = %624
br label %629
629: ; preds = %628, %602, %566, %143, %86
%630 = load i8*, i8** %9
%631 = getelementptr inbounds i8, i8* %630, i32 1
store i8* %631, i8** %9
br label %17
632: ; preds = %17
%633 = load i8*, i8** %9
%634 = load i8, i8* %633
%635 = sext i8 %634 to i32
%636 = icmp eq i32 %635, 0
br i1 %636, label %637, label %638
637: ; preds = %632
store i32 0, i32* %4
br label %649
638: ; preds = %632
%639 = load i32, i32* %7
%640 = and i32 %639, 8
%641 = icmp ne i32 %640, 0
br i1 %641, label %642, label %648
642: ; preds = %638
%643 = load i8*, i8** %9
%644 = load i8, i8* %643
%645 = sext i8 %644 to i32
%646 = icmp eq i32 %645, 47
br i1 %646, label %647, label %648
647: ; preds = %642
store i32 0, i32* %4
br label %649
648: ; preds = %642, %638
store i32 1, i32* %4
br label %649
649: ; preds = %648, %647, %637, %627, %601, %593, %576, %565, %484, %455, %425, %398, %360, %336, %330, %314, %235, %229, %200, %167, %142, %98, %83, %59, %49
%650 = load i32, i32* %4
ret i32 %650
}

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