#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int FNM_LEADING_DIR;
int FNM_NOESCAPE;
int FNM_NOMATCH;
int FNM_PATHNAME;
int FNM_PERIOD;
scalar_t__ PATH_MAX;
int /*<<< orphan*/ fnmatch_ch(char const **, char const **, int);
char *strchr(char const *, char);
scalar_t__ strnlen(char const *, scalar_t__);
int fnmatch(const char *pattern, const char *string, int flags) {
  static const char dummystring[2] = {' ', 0};
  const int escape = !(flags & FNM_NOESCAPE);
  const int slash = !!(flags & FNM_PATHNAME);
  const int leading_dir = !!(flags & FNM_LEADING_DIR);
  const char *strendseg;
  const char *dummyptr;
  const char *matchptr;
  int wild;
  const char *strstartseg = NULL;
  const char *mismatch = NULL;
  int matchlen = 0;
  if (strnlen(pattern, PATH_MAX) == PATH_MAX ||
      strnlen(string, PATH_MAX) == PATH_MAX)
    return (FNM_NOMATCH);
  if (*pattern == '*')
    goto firstsegment;
  while (*pattern && *string) {
    if (slash && escape && (*pattern == '\\') && (pattern[1] == '/'))
      ++pattern;
    if (slash && (*pattern == '/') && (*string == '/')) {
      ++pattern;
      ++string;
    }
  firstsegment:
    if ((flags & FNM_PERIOD) && (*string == '.')) {
      if (*pattern == '.')
        ++pattern;
      else if (escape && (*pattern == '\\') && (pattern[1] == '.'))
        pattern += 2;
      else
        return FNM_NOMATCH;
      ++string;
    }
    if (slash) {
      strendseg = strchr(string, '/');
      if (!strendseg)
        strendseg = strchr(string, '\0');
    } else {
      strendseg = strchr(string, '\0');
    }
    while (*pattern) {
      if ((string > strendseg) || ((string == strendseg) && (*pattern != '*')))
        break;
      if (slash && ((*pattern == '/') ||
                    (escape && (*pattern == '\\') && (pattern[1] == '/'))))
        break;
      for (wild = 0; ((*pattern == '*') || (*pattern == '?')); ++pattern) {
        if (*pattern == '*') {
          wild = 1;
        } else if (string < strendseg) {
          ++string;
        } else {
          return FNM_NOMATCH;
        }
      }
      if (wild) {
        strstartseg = string;
        mismatch = pattern;
        for (matchptr = pattern, matchlen = 0; 1; ++matchlen) {
          if ((*matchptr == '\0') ||
              (slash && ((*matchptr == '/') || (escape && (*matchptr == '\\') &&
                                                (matchptr[1] == '/'))))) {
            if (string + matchlen > strendseg)
              return FNM_NOMATCH;
            string = strendseg - matchlen;
            wild = 0;
            break;
          }
          if (*matchptr == '*') {
            if (string + matchlen > strendseg)
              return FNM_NOMATCH;
            break;
          }
          if (escape && (*matchptr == '\\') && matchptr[1]) {
            matchptr += 2;
          } else if (*matchptr == '[') {
            dummyptr = dummystring;
            fnmatch_ch(&matchptr, &dummyptr, flags);
          } else {
            ++matchptr;
          }
        }
      }
      while (*pattern && (string < strendseg)) {
        if (*pattern == '*')
          break;
        if (slash && ((*string == '/') || (*pattern == '/') ||
                      (escape && (*pattern == '\\') && (pattern[1] == '/'))))
          break;
        if (!fnmatch_ch(&pattern, &string, flags))
          continue;
        if (wild) {
          string = ++strstartseg;
          if (string + matchlen > strendseg)
            return FNM_NOMATCH;
          pattern = mismatch;
          continue;
        } else
          return FNM_NOMATCH;
      }
    }
    if (*string && !((slash || leading_dir) && (*string == '/')))
      return FNM_NOMATCH;
    if (*pattern &&
        !(slash && ((*pattern == '/') ||
                    (escape && (*pattern == '\\') && (pattern[1] == '/')))))
      return FNM_NOMATCH;
    if (leading_dir && !*pattern && *string == '/')
      return 0;
  }
  if (!*string && !*pattern)
    return 0;
  return FNM_NOMATCH;
}


x86 assembly (clang, -O0):
<fnmatch>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    0x2eab(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
mov    0x2e47(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
mov    0x2e39(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x28(%rbp)
movq   $0x0,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
movl   $0x0,-0x5c(%rbp)
mov    -0x10(%rbp),%rdi
mov    0x2e2b(%rip),%rax
mov    (%rax),%rsi
call   1040 <strnlen@plt>
mov    0x2e1c(%rip),%rcx
cmp    (%rcx),%rax
je     11f8 <fnmatch+0xc8>
mov    -0x18(%rbp),%rdi
mov    0x2e08(%rip),%rax
mov    (%rax),%rsi
call   1040 <strnlen@plt>
mov    0x2df9(%rip),%rcx
cmp    (%rcx),%rax
jne    1209 <fnmatch+0xd9>
mov    0x2dd9(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    18de <fnmatch+0x7ae>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    121e <fnmatch+0xee>
jmp    12e0 <fnmatch+0x1b0>
jmp    1223 <fnmatch+0xf3>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x5d(%rbp)
je     1248 <fnmatch+0x118>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x5d(%rbp)
mov    -0x5d(%rbp),%al
test   $0x1,%al
jne    1258 <fnmatch+0x128>
jmp    18ac <fnmatch+0x77c>
cmpl   $0x0,-0x24(%rbp)
je     1299 <fnmatch+0x169>
cmpl   $0x0,-0x20(%rbp)
je     1299 <fnmatch+0x169>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    1299 <fnmatch+0x169>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
jne    1299 <fnmatch+0x169>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     12db <fnmatch+0x1ab>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    12db <fnmatch+0x1ab>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    12db <fnmatch+0x1ab>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    12e0 <fnmatch+0x1b0>
mov    -0x1c(%rbp),%eax
mov    0x2cde(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
je     1384 <fnmatch+0x254>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1384 <fnmatch+0x254>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1326 <fnmatch+0x1f6>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1378 <fnmatch+0x248>
cmpl   $0x0,-0x20(%rbp)
je     1362 <fnmatch+0x232>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    1362 <fnmatch+0x232>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2e,%eax
jne    1362 <fnmatch+0x232>
mov    -0x10(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x10(%rbp)
jmp    1373 <fnmatch+0x243>
mov    0x2c6f(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    18de <fnmatch+0x7ae>
jmp    1378 <fnmatch+0x248>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     13bf <fnmatch+0x28f>
mov    -0x18(%rbp),%rdi
mov    $0x2f,%esi
call   1030 <strchr@plt>
mov    %rax,-0x30(%rbp)
cmpq   $0x0,-0x30(%rbp)
jne    13ba <fnmatch+0x28a>
mov    -0x18(%rbp),%rdi
xor    %esi,%esi
call   1030 <strchr@plt>
mov    %rax,-0x30(%rbp)
jmp    13ce <fnmatch+0x29e>
mov    -0x18(%rbp),%rdi
xor    %esi,%esi
call   1030 <strchr@plt>
mov    %rax,-0x30(%rbp)
jmp    13d3 <fnmatch+0x2a3>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     17c9 <fnmatch+0x699>
mov    -0x18(%rbp),%rax
cmp    -0x30(%rbp),%rax
ja     140c <fnmatch+0x2dc>
mov    -0x18(%rbp),%rax
cmp    -0x30(%rbp),%rax
jne    1411 <fnmatch+0x2e1>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
je     1411 <fnmatch+0x2e1>
jmp    17c9 <fnmatch+0x699>
cmpl   $0x0,-0x24(%rbp)
je     145b <fnmatch+0x32b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     1456 <fnmatch+0x326>
cmpl   $0x0,-0x20(%rbp)
je     145b <fnmatch+0x32b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    145b <fnmatch+0x32b>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
jne    145b <fnmatch+0x32b>
jmp    17c9 <fnmatch+0x699>
movl   $0x0,-0x44(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x2a,%ecx
mov    %al,-0x5e(%rbp)
je     1487 <fnmatch+0x357>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3f,%eax
sete   %al
mov    %al,-0x5e(%rbp)
mov    -0x5e(%rbp),%al
test   $0x1,%al
jne    1497 <fnmatch+0x367>
jmp    14fe <fnmatch+0x3ce>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    14b3 <fnmatch+0x383>
movl   $0x1,-0x44(%rbp)
jmp    14e8 <fnmatch+0x3b8>
mov    -0x18(%rbp),%rax
cmp    -0x30(%rbp),%rax
jae    14d2 <fnmatch+0x3a2>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    14e3 <fnmatch+0x3b3>
mov    0x2aff(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    18de <fnmatch+0x7ae>
jmp    14e8 <fnmatch+0x3b8>
jmp    14ed <fnmatch+0x3bd>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1462 <fnmatch+0x332>
cmpl   $0x0,-0x44(%rbp)
je     16a1 <fnmatch+0x571>
mov    -0x18(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x40(%rbp)
movl   $0x0,-0x5c(%rbp)
mov    $0x1,%al
test   $0x1,%al
jne    1536 <fnmatch+0x406>
jmp    169c <fnmatch+0x56c>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     158b <fnmatch+0x45b>
cmpl   $0x0,-0x24(%rbp)
je     15d1 <fnmatch+0x4a1>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     158b <fnmatch+0x45b>
cmpl   $0x0,-0x20(%rbp)
je     15d1 <fnmatch+0x4a1>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    15d1 <fnmatch+0x4a1>
mov    -0x40(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
jne    15d1 <fnmatch+0x4a1>
mov    -0x18(%rbp),%rax
movslq -0x5c(%rbp),%rcx
add    %rcx,%rax
cmp    -0x30(%rbp),%rax
jbe    15b1 <fnmatch+0x481>
mov    0x2a31(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    18de <fnmatch+0x7ae>
mov    -0x30(%rbp),%rax
movslq -0x5c(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
add    %rcx,%rax
mov    %rax,-0x18(%rbp)
movl   $0x0,-0x44(%rbp)
jmp    169c <fnmatch+0x56c>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    160c <fnmatch+0x4dc>
mov    -0x18(%rbp),%rax
movslq -0x5c(%rbp),%rcx
add    %rcx,%rax
cmp    -0x30(%rbp),%rax
jbe    1607 <fnmatch+0x4d7>
mov    0x29db(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    18de <fnmatch+0x7ae>
jmp    169c <fnmatch+0x56c>
cmpl   $0x0,-0x20(%rbp)
je     1648 <fnmatch+0x518>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    1648 <fnmatch+0x518>
mov    -0x40(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1648 <fnmatch+0x518>
mov    -0x40(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x40(%rbp)
jmp    1689 <fnmatch+0x559>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5b,%eax
jne    1678 <fnmatch+0x548>
lea    0x9a1(%rip),%rax
mov    %rax,-0x38(%rbp)
mov    -0x1c(%rbp),%edx
lea    -0x40(%rbp),%rdi
lea    -0x38(%rbp),%rsi
call   1050 <fnmatch_ch@plt>
jmp    1684 <fnmatch+0x554>
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    1689 <fnmatch+0x559>
jmp    168e <fnmatch+0x55e>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    1527 <fnmatch+0x3f7>
jmp    16a1 <fnmatch+0x571>
jmp    16a6 <fnmatch+0x576>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x5f(%rbp)
je     16c9 <fnmatch+0x599>
mov    -0x18(%rbp),%rax
cmp    -0x30(%rbp),%rax
setb   %al
mov    %al,-0x5f(%rbp)
mov    -0x5f(%rbp),%al
test   $0x1,%al
jne    16d9 <fnmatch+0x5a9>
jmp    17c4 <fnmatch+0x694>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    16ee <fnmatch+0x5be>
jmp    17c4 <fnmatch+0x694>
cmpl   $0x0,-0x24(%rbp)
je     1748 <fnmatch+0x618>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     1743 <fnmatch+0x613>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     1743 <fnmatch+0x613>
cmpl   $0x0,-0x20(%rbp)
je     1748 <fnmatch+0x618>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    1748 <fnmatch+0x618>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
jne    1748 <fnmatch+0x618>
jmp    17c4 <fnmatch+0x694>
mov    -0x1c(%rbp),%edx
lea    -0x10(%rbp),%rdi
lea    -0x18(%rbp),%rsi
call   1050 <fnmatch_ch@plt>
cmp    $0x0,%eax
jne    1766 <fnmatch+0x636>
jmp    16a6 <fnmatch+0x576>
cmpl   $0x0,-0x44(%rbp)
je     17b3 <fnmatch+0x683>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movslq -0x5c(%rbp),%rcx
add    %rcx,%rax
cmp    -0x30(%rbp),%rax
jbe    17a6 <fnmatch+0x676>
mov    0x283c(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    18de <fnmatch+0x7ae>
mov    -0x58(%rbp),%rax
mov    %rax,-0x10(%rbp)
jmp    16a6 <fnmatch+0x576>
mov    0x281e(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    18de <fnmatch+0x7ae>
jmp    13d3 <fnmatch+0x2a3>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     180e <fnmatch+0x6de>
cmpl   $0x0,-0x24(%rbp)
jne    17ed <fnmatch+0x6bd>
cmpl   $0x0,-0x28(%rbp)
je     17fd <fnmatch+0x6cd>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     180e <fnmatch+0x6de>
mov    0x27d4(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    18de <fnmatch+0x7ae>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1874 <fnmatch+0x744>
cmpl   $0x0,-0x24(%rbp)
je     1863 <fnmatch+0x733>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     1874 <fnmatch+0x744>
cmpl   $0x0,-0x20(%rbp)
je     1863 <fnmatch+0x733>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    1863 <fnmatch+0x733>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2f,%eax
je     1874 <fnmatch+0x744>
mov    0x276e(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    18de <fnmatch+0x7ae>
cmpl   $0x0,-0x28(%rbp)
je     18a7 <fnmatch+0x777>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
jne    18a7 <fnmatch+0x777>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    18a7 <fnmatch+0x777>
movl   $0x0,-0x4(%rbp)
jmp    18de <fnmatch+0x7ae>
jmp    1223 <fnmatch+0xf3>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
jne    18d2 <fnmatch+0x7a2>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
jne    18d2 <fnmatch+0x7a2>
movl   $0x0,-0x4(%rbp)
jmp    18de <fnmatch+0x7ae>
mov    0x26ff(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fnmatch>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %edx,%r14d
mov    %rsi,%r15
mov    %rdi,%rbx
mov    %rdi,0x18(%rsp)
mov    %rsi,0x10(%rsp)
mov    0x2e90(%rip),%rax
mov    (%rax),%eax
mov    %eax,0x4(%rsp)
mov    0x2e3b(%rip),%rax
mov    (%rax),%eax
mov    %eax,(%rsp)
mov    0x2e3f(%rip),%rax
mov    (%rax),%r12d
mov    0x2e5d(%rip),%rax
mov    (%rax),%rbp
mov    %rbp,%rsi
call   1050 <strnlen@plt>
cmp    %rbp,%rax
je     11ab <fnmatch+0x6b>
mov    %r15,%rdi
mov    %rbp,%rsi
call   1050 <strnlen@plt>
cmp    %rbp,%rax
jne    11c3 <fnmatch+0x83>
mov    0x2e26(%rip),%rax
mov    (%rax),%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    (%rbx),%cl
xor    %eax,%eax
mov    %rax,0x8(%rsp)
mov    $0x0,%eax
mov    %rax,0x28(%rsp)
mov    $0x0,%r8d
mov    $0x0,%r13d
cmp    $0x2a,%cl
mov    (%rsp),%edi
mov    %r12d,0x3c(%rsp)
je     124a <fnmatch+0x10a>
test   %cl,%cl
je     164a <fnmatch+0x50a>
mov    %ecx,%eax
cmpb   $0x0,(%r15)
je     11ab <fnmatch+0x6b>
mov    0x4(%rsp),%ecx
and    %r14d,%ecx
test   %r14d,%edi
je     1225 <fnmatch+0xe5>
test   %ecx,%ecx
jne    1225 <fnmatch+0xe5>
cmp    $0x5c,%al
jne    1225 <fnmatch+0xe5>
lea    0x1(%rbx),%rax
cmpb   $0x2f,0x1(%rbx)
jne    1225 <fnmatch+0xe5>
mov    %rax,0x18(%rsp)
mov    %rax,%rbx
test   %r14d,%edi
je     1247 <fnmatch+0x107>
cmpb   $0x2f,(%rbx)
jne    1247 <fnmatch+0x107>
cmpb   $0x2f,(%r15)
jne    1247 <fnmatch+0x107>
add    $0x1,%rbx
mov    %rbx,0x18(%rsp)
add    $0x1,%r15
mov    %r15,0x10(%rsp)
mov    %r8d,%r13d
mov    0x2d77(%rip),%rax
test   %r14d,(%rax)
je     129c <fnmatch+0x15c>
cmpb   $0x2e,(%r15)
jne    129c <fnmatch+0x15c>
mov    (%rbx),%cl
mov    $0x1,%eax
cmp    $0x2e,%cl
je     128b <fnmatch+0x14b>
test   %r14d,0x4(%rsp)
jne    11ab <fnmatch+0x6b>
cmp    $0x5c,%cl
jne    11ab <fnmatch+0x6b>
mov    $0x2,%eax
cmpb   $0x2e,0x1(%rbx)
jne    11ab <fnmatch+0x6b>
add    %rax,%rbx
mov    %rbx,0x18(%rsp)
add    $0x1,%r15
mov    %r15,0x10(%rsp)
mov    %r15,%rbp
test   %r14d,%edi
je     12b9 <fnmatch+0x179>
mov    %rbp,%rdi
mov    $0x2f,%esi
call   1040 <strchr@plt>
mov    %rax,%r12
test   %rax,%rax
jne    12c7 <fnmatch+0x187>
mov    %rbp,%rdi
call   1030 <strlen@plt>
mov    %rax,%r12
add    %rbp,%r12
mov    (%rbx),%cl
mov    $0x1,%al
test   %cl,%cl
je     12df <fnmatch+0x19f>
xor    %eax,%eax
cmp    %r12,%rbp
jbe    1363 <fnmatch+0x223>
mov    %rbp,%r15
jmp    12e4 <fnmatch+0x1a4>
mov    %rbp,%r15
xor    %ecx,%ecx
mov    %r13d,%r8d
mov    (%rsp),%edi
mov    0x0(%rbp),%dl
test   %dl,%dl
mov    0x3c(%rsp),%r12d
je     130d <fnmatch+0x1cd>
mov    %edi,%esi
or     %r12d,%esi
test   %r14d,%esi
je     11ab <fnmatch+0x6b>
cmp    $0x2f,%dl
jne    11ab <fnmatch+0x6b>
test   %al,%al
je     132a <fnmatch+0x1ea>
xor    %eax,%eax
test   %r14d,%r12d
je     11ef <fnmatch+0xaf>
cmp    $0x2f,%dl
jne    11ef <fnmatch+0xaf>
jmp    11b4 <fnmatch+0x74>
test   %r14d,%edi
je     11ab <fnmatch+0x6b>
mov    $0x2f,%al
cmp    $0x2f,%cl
je     11f9 <fnmatch+0xb9>
test   %r14d,0x4(%rsp)
jne    11ab <fnmatch+0x6b>
cmp    $0x5c,%cl
jne    11ab <fnmatch+0x6b>
mov    $0x5c,%al
cmpb   $0x2f,0x1(%rbx)
je     11f9 <fnmatch+0xb9>
jmp    11ab <fnmatch+0x6b>
mov    %r13d,%r8d
mov    %rbp,%r15
mov    (%rsp),%edi
xor    %eax,%eax
cmp    %r12,%rbp
jne    137c <fnmatch+0x23c>
cmp    $0x2a,%cl
jne    165b <fnmatch+0x51b>
test   %r14d,%edi
je     13a4 <fnmatch+0x264>
xor    %eax,%eax
cmp    $0x2f,%cl
je     1663 <fnmatch+0x523>
test   %r14d,0x4(%rsp)
jne    13a4 <fnmatch+0x264>
cmp    $0x5c,%cl
jne    13a4 <fnmatch+0x264>
xor    %eax,%eax
cmpb   $0x2f,0x1(%rbx)
je     1671 <fnmatch+0x531>
add    $0x1,%rbx
xor    %eax,%eax
jmp    13c1 <fnmatch+0x281>
nopl   0x0(%rax)
mov    $0x1,%eax
mov    %rbx,0x18(%rsp)
movzbl (%rbx),%ecx
add    $0x1,%rbx
cmp    $0x2a,%cl
je     13b0 <fnmatch+0x270>
cmp    $0x3f,%cl
jne    13e2 <fnmatch+0x2a2>
cmp    %r12,%rbp
jae    11ab <fnmatch+0x6b>
add    $0x1,%rbp
mov    %rbp,0x10(%rsp)
mov    %rbp,%r15
jmp    13b5 <fnmatch+0x275>
add    $0xffffffffffffffff,%rbx
mov    $0x1,%cl
mov    %ecx,0x24(%rsp)
test   %eax,%eax
je     14da <fnmatch+0x39a>
mov    %rbx,0x30(%rsp)
mov    (%rbx),%cl
xor    %r8d,%r8d
mov    %rbp,%rax
test   %cl,%cl
je     14ec <fnmatch+0x3ac>
xor    %r13d,%r13d
mov    %rbx,%rax
xor    %r8d,%r8d
jmp    143c <fnmatch+0x2fc>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%rax
mov    %rax,0x30(%rsp)
add    $0x1,%r8d
movzbl (%rax),%ecx
add    $0x1,%r13
test   %cl,%cl
je     14e4 <fnmatch+0x3a4>
test   %r14d,%edi
je     1470 <fnmatch+0x330>
cmp    $0x2f,%cl
je     14e4 <fnmatch+0x3a4>
test   %r14d,0x4(%rsp)
jne    1470 <fnmatch+0x330>
cmp    $0x5c,%cl
jne    1470 <fnmatch+0x330>
movzbl 0x1(%rax),%ecx
cmp    $0x2f,%cl
je     14e7 <fnmatch+0x3a7>
test   %cl,%cl
jne    148d <fnmatch+0x34d>
jmp    1420 <fnmatch+0x2e0>
nopl   0x0(%rax)
cmp    $0x2a,%cl
je     1620 <fnmatch+0x4e0>
test   %r14d,0x4(%rsp)
jne    14a0 <fnmatch+0x360>
cmp    $0x5c,%cl
jne    14a0 <fnmatch+0x360>
movzbl 0x1(%rax),%ecx
test   %cl,%cl
je     1420 <fnmatch+0x2e0>
add    $0x2,%rax
jmp    1424 <fnmatch+0x2e4>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0x5b,%cl
jne    1420 <fnmatch+0x2e0>
lea    0xb50(%rip),%rax
mov    %rax,0x40(%rsp)
lea    0x30(%rsp),%rdi
lea    0x40(%rsp),%rsi
mov    %r14d,%edx
mov    %r8d,%r15d
call   1060 <fnmatch_ch@plt>
mov    %r15d,%r8d
mov    (%rsp),%edi
mov    0x30(%rsp),%rax
jmp    1429 <fnmatch+0x2e9>
mov    %rbp,%rax
mov    0x8(%rsp),%rbp
jmp    150e <fnmatch+0x3ce>
mov    %r13d,%r8d
mov    0x10(%rsp),%rax
mov    %r8d,%ecx
add    %rcx,%rax
cmp    %r12,%rax
ja     11ab <fnmatch+0x6b>
mov    %r12,%r15
sub    %rcx,%r15
mov    %r15,0x10(%rsp)
mov    %r15,%rax
mov    %rbx,0x28(%rsp)
movslq %r8d,%rcx
mov    %rcx,0x8(%rsp)
mov    0x18(%rsp),%rbx
mov    (%rbx),%cl
cmp    %r12,%rax
jb     1550 <fnmatch+0x410>
mov    %rbp,0x8(%rsp)
mov    %rax,%rbp
mov    $0x1,%al
test   %cl,%cl
je     166a <fnmatch+0x52a>
xor    %eax,%eax
cmp    %r12,%rbp
jbe    136c <fnmatch+0x22c>
jmp    12ea <fnmatch+0x1aa>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
test   %cl,%cl
je     1522 <fnmatch+0x3e2>
cmp    $0x2a,%cl
je     1522 <fnmatch+0x3e2>
test   %r14d,%edi
je     157a <fnmatch+0x43a>
cmpb   $0x2f,(%rax)
je     1522 <fnmatch+0x3e2>
cmp    $0x2f,%cl
je     1522 <fnmatch+0x3e2>
test   %r14d,0x4(%rsp)
jne    157a <fnmatch+0x43a>
cmp    $0x5c,%cl
jne    157a <fnmatch+0x43a>
cmpb   $0x2f,0x1(%rbx)
je     1522 <fnmatch+0x3e2>
mov    %r8d,%r13d
lea    0x18(%rsp),%rdi
lea    0x10(%rsp),%rsi
mov    %r14d,%edx
call   1060 <fnmatch_ch@plt>
test   %eax,%eax
jne    15b0 <fnmatch+0x470>
mov    0x10(%rsp),%rax
mov    0x18(%rsp),%rbx
movzbl (%rbx),%ecx
mov    %rax,%r15
cmp    %r12,%rax
mov    (%rsp),%edi
mov    %r13d,%r8d
jb     1550 <fnmatch+0x410>
jmp    1613 <fnmatch+0x4d3>
cmpb   $0x0,0x24(%rsp)
jne    11ab <fnmatch+0x6b>
lea    0x1(%rbp),%rax
mov    %rax,0x10(%rsp)
mov    0x8(%rsp),%rcx
add    %rbp,%rcx
add    $0x1,%rcx
cmp    %r12,%rcx
ja     11ab <fnmatch+0x6b>
mov    0x28(%rsp),%rbx
mov    %rbx,0x18(%rsp)
movzbl (%rbx),%ecx
mov    %rax,%rbp
mov    %rax,%r15
cmp    %r12,%rax
mov    (%rsp),%edi
mov    %r13d,%r8d
jb     1550 <fnmatch+0x410>
mov    %rax,%rdx
mov    %rax,0x8(%rsp)
mov    %rax,%r15
mov    %rax,%rbp
mov    0x28(%rsp),%rbx
jmp    152a <fnmatch+0x3ea>
mov    %rbp,0x8(%rsp)
mov    %rax,%r15
jmp    1527 <fnmatch+0x3e7>
mov    0x10(%rsp),%r15
lea    (%r15,%r13,1),%rax
cmp    %r12,%rax
ja     11ab <fnmatch+0x6b>
movl   $0x0,0x24(%rsp)
mov    %r15,%rax
mov    %rbx,0x28(%rsp)
mov    %r13d,%r8d
jmp    150e <fnmatch+0x3ce>
xor    %eax,%eax
cmpb   $0x0,(%r15)
jne    11ab <fnmatch+0x6b>
jmp    11b4 <fnmatch+0x74>
mov    %r12,%rbp
jmp    12ea <fnmatch+0x1aa>
mov    $0x2f,%cl
jmp    12ea <fnmatch+0x1aa>
xor    %ecx,%ecx
jmp    12ea <fnmatch+0x1aa>
mov    $0x5c,%cl
jmp    12ea <fnmatch+0x1aa>

LLVM IR (-O0):
@fnmatch.dummystring = internal constant [2 x i8] c" \00"
@FNM_NOESCAPE = global i32 0
@FNM_PATHNAME = global i32 0
@FNM_LEADING_DIR = global i32 0
@PATH_MAX = global i64 0
@FNM_NOMATCH = global i32 0
@FNM_PERIOD = global i32 0
define i32 @fnmatch(i8* %0, i8* %1, i32 %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i8*
%12 = alloca i8*
%13 = alloca i8*
%14 = alloca i32
%15 = alloca i8*
%16 = alloca i8*
%17 = alloca i32
store i8* %0, i8** %5
store i8* %1, i8** %6
store i32 %2, i32* %7
%18 = load i32, i32* %7
%19 = load i32, i32* @FNM_NOESCAPE
%20 = and i32 %18, %19
%21 = icmp ne i32 %20, 0
%22 = xor i1 %21, true
%23 = zext i1 %22 to i32
store i32 %23, i32* %8
%24 = load i32, i32* %7
%25 = load i32, i32* @FNM_PATHNAME
%26 = and i32 %24, %25
%27 = icmp ne i32 %26, 0
%28 = xor i1 %27, true
%29 = xor i1 %28, true
%30 = zext i1 %29 to i32
store i32 %30, i32* %9
%31 = load i32, i32* %7
%32 = load i32, i32* @FNM_LEADING_DIR
%33 = and i32 %31, %32
%34 = icmp ne i32 %33, 0
%35 = xor i1 %34, true
%36 = xor i1 %35, true
%37 = zext i1 %36 to i32
store i32 %37, i32* %10
store i8* null, i8** %15
store i8* null, i8** %16
store i32 0, i32* %17
%38 = load i8*, i8** %5
%39 = load i64, i64* @PATH_MAX
%40 = call i64 @strnlen(i8* %38, i64 %39)
%41 = load i64, i64* @PATH_MAX
%42 = icmp eq i64 %40, %41
br i1 %42, label %49, label %43
43: ; preds = %3
%44 = load i8*, i8** %6
%45 = load i64, i64* @PATH_MAX
%46 = call i64 @strnlen(i8* %44, i64 %45)
%47 = load i64, i64* @PATH_MAX
%48 = icmp eq i64 %46, %47
br i1 %48, label %49, label %51
49: ; preds = %43, %3
%50 = load i32, i32* @FNM_NOMATCH
store i32 %50, i32* %4
br label %481
51: ; preds = %43
%52 = load i8*, i8** %5
%53 = load i8, i8* %52
%54 = sext i8 %53 to i32
%55 = icmp eq i32 %54, 42
br i1 %55, label %56, label %57
56: ; preds = %51
br label %109
57: ; preds = %51
br label %58
58: ; preds = %469, %57
%59 = load i8*, i8** %5
%60 = load i8, i8* %59
%61 = sext i8 %60 to i32
%62 = icmp ne i32 %61, 0
br i1 %62, label %63, label %68
63: ; preds = %58
%64 = load i8*, i8** %6
%65 = load i8, i8* %64
%66 = sext i8 %65 to i32
%67 = icmp ne i32 %66, 0
br label %68
68: ; preds = %63, %58
%69 = phi i1 [ false, %58 ], [ %67, %63 ]
br i1 %69, label %70, label %470
70: ; preds = %68
%71 = load i32, i32* %9
%72 = icmp ne i32 %71, 0
br i1 %72, label %73, label %90
73: ; preds = %70
%74 = load i32, i32* %8
%75 = icmp ne i32 %74, 0
br i1 %75, label %76, label %90
76: ; preds = %73
%77 = load i8*, i8** %5
%78 = load i8, i8* %77
%79 = sext i8 %78 to i32
%80 = icmp eq i32 %79, 92
br i1 %80, label %81, label %90
81: ; preds = %76
%82 = load i8*, i8** %5
%83 = getelementptr inbounds i8, i8* %82, i64 1
%84 = load i8, i8* %83
%85 = sext i8 %84 to i32
%86 = icmp eq i32 %85, 47
br i1 %86, label %87, label %90
87: ; preds = %81
%88 = load i8*, i8** %5
%89 = getelementptr inbounds i8, i8* %88, i32 1
store i8* %89, i8** %5
br label %90
90: ; preds = %87, %81, %76, %73, %70
%91 = load i32, i32* %9
%92 = icmp ne i32 %91, 0
br i1 %92, label %93, label %108
93: ; preds = %90
%94 = load i8*, i8** %5
%95 = load i8, i8* %94
%96 = sext i8 %95 to i32
%97 = icmp eq i32 %96, 47
br i1 %97, label %98, label %108
98: ; preds = %93
%99 = load i8*, i8** %6
%100 = load i8, i8* %99
%101 = sext i8 %100 to i32
%102 = icmp eq i32 %101, 47
br i1 %102, label %103, label %108
103: ; preds = %98
%104 = load i8*, i8** %5
%105 = getelementptr inbounds i8, i8* %104, i32 1
store i8* %105, i8** %5
%106 = load i8*, i8** %6
%107 = getelementptr inbounds i8, i8* %106, i32 1
store i8* %107, i8** %6
br label %108
108: ; preds = %103, %98, %93, %90
br label %109
109: ; preds = %108, %56
%110 = load i32, i32* %7
%111 = load i32, i32* @FNM_PERIOD
%112 = and i32 %110, %111
%113 = icmp ne i32 %112, 0
br i1 %113, label %114, label %150
114: ; preds = %109
%115 = load i8*, i8** %6
%116 = load i8, i8* %115
%117 = sext i8 %116 to i32
%118 = icmp eq i32 %117, 46
br i1 %118, label %119, label %150
119: ; preds = %114
%120 = load i8*, i8** %5
%121 = load i8, i8* %120
%122 = sext i8 %121 to i32
%123 = icmp eq i32 %122, 46
br i1 %123, label %124, label %127
124: ; preds = %119
%125 = load i8*, i8** %5
%126 = getelementptr inbounds i8, i8* %125, i32 1
store i8* %126, i8** %5
br label %147
127: ; preds = %119
%128 = load i32, i32* %8
%129 = icmp ne i32 %128, 0
br i1 %129, label %130, label %144
130: ; preds = %127
%131 = load i8*, i8** %5
%132 = load i8, i8* %131
%133 = sext i8 %132 to i32
%134 = icmp eq i32 %133, 92
br i1 %134, label %135, label %144
135: ; preds = %130
%136 = load i8*, i8** %5
%137 = getelementptr inbounds i8, i8* %136, i64 1
%138 = load i8, i8* %137
%139 = sext i8 %138 to i32
%140 = icmp eq i32 %139, 46
br i1 %140, label %141, label %144
141: ; preds = %135
%142 = load i8*, i8** %5
%143 = getelementptr inbounds i8, i8* %142, i64 2
store i8* %143, i8** %5
br label %146
144: ; preds = %135, %130, %127
%145 = load i32, i32* @FNM_NOMATCH
store i32 %145, i32* %4
br label %481
146: ; preds = %141
br label %147
147: ; preds = %146, %124
%148 = load i8*, i8** %6
%149 = getelementptr inbounds i8, i8* %148, i32 1
store i8* %149, i8** %6
br label %150
150: ; preds = %147, %114, %109
%151 = load i32, i32* %9
%152 = icmp ne i32 %151, 0
br i1 %152, label %153, label %162
153: ; preds = %150
%154 = load i8*, i8** %6
%155 = call i8* @strchr(i8* %154, i8 signext 47)
store i8* %155, i8** %11
%156 = load i8*, i8** %11
%157 = icmp ne i8* %156, null
br i1 %157, label %161, label %158
158: ; preds = %153
%159 = load i8*, i8** %6
%160 = call i8* @strchr(i8* %159, i8 signext 0)
store i8* %160, i8** %11
br label %161
161: ; preds = %158, %153
br label %165
162: ; preds = %150
%163 = load i8*, i8** %6
%164 = call i8* @strchr(i8* %163, i8 signext 0)
store i8* %164, i8** %11
br label %165
165: ; preds = %162, %161
br label %166
166: ; preds = %408, %165
%167 = load i8*, i8** %5
%168 = load i8, i8* %167
%169 = icmp ne i8 %168, 0
br i1 %169, label %170, label %409
170: ; preds = %166
%171 = load i8*, i8** %6
%172 = load i8*, i8** %11
%173 = icmp ugt i8* %171, %172
br i1 %173, label %183, label %174
174: ; preds = %170
%175 = load i8*, i8** %6
%176 = load i8*, i8** %11
%177 = icmp eq i8* %175, %176
br i1 %177, label %178, label %184
178: ; preds = %174
%179 = load i8*, i8** %5
%180 = load i8, i8* %179
%181 = sext i8 %180 to i32
%182 = icmp ne i32 %181, 42
br i1 %182, label %183, label %184
183: ; preds = %178, %170
br label %409
184: ; preds = %178, %174
%185 = load i32, i32* %9
%186 = icmp ne i32 %185, 0
br i1 %186, label %187, label %207
187: ; preds = %184
%188 = load i8*, i8** %5
%189 = load i8, i8* %188
%190 = sext i8 %189 to i32
%191 = icmp eq i32 %190, 47
br i1 %191, label %206, label %192
192: ; preds = %187
%193 = load i32, i32* %8
%194 = icmp ne i32 %193, 0
br i1 %194, label %195, label %207
195: ; preds = %192
%196 = load i8*, i8** %5
%197 = load i8, i8* %196
%198 = sext i8 %197 to i32
%199 = icmp eq i32 %198, 92
br i1 %199, label %200, label %207
200: ; preds = %195
%201 = load i8*, i8** %5
%202 = getelementptr inbounds i8, i8* %201, i64 1
%203 = load i8, i8* %202
%204 = sext i8 %203 to i32
%205 = icmp eq i32 %204, 47
br i1 %205, label %206, label %207
206: ; preds = %200, %187
br label %409
207: ; preds = %200, %195, %192, %184
store i32 0, i32* %14
br label %208
208: ; preds = %237, %207
%209 = load i8*, i8** %5
%210 = load i8, i8* %209
%211 = sext i8 %210 to i32
%212 = icmp eq i32 %211, 42
br i1 %212, label %218, label %213
213: ; preds = %208
%214 = load i8*, i8** %5
%215 = load i8, i8* %214
%216 = sext i8 %215 to i32
%217 = icmp eq i32 %216, 63
br label %218
218: ; preds = %213, %208
%219 = phi i1 [ true, %208 ], [ %217, %213 ]
br i1 %219, label %220, label %240
220: ; preds = %218
%221 = load i8*, i8** %5
%222 = load i8, i8* %221
%223 = sext i8 %222 to i32
%224 = icmp eq i32 %223, 42
br i1 %224, label %225, label %226
225: ; preds = %220
store i32 1, i32* %14
br label %236
226: ; preds = %220
%227 = load i8*, i8** %6
%228 = load i8*, i8** %11
%229 = icmp ult i8* %227, %228
br i1 %229, label %230, label %233
230: ; preds = %226
%231 = load i8*, i8** %6
%232 = getelementptr inbounds i8, i8* %231, i32 1
store i8* %232, i8** %6
br label %235
233: ; preds = %226
%234 = load i32, i32* @FNM_NOMATCH
store i32 %234, i32* %4
br label %481
235: ; preds = %230
br label %236
236: ; preds = %235, %225
br label %237
237: ; preds = %236
%238 = load i8*, i8** %5
%239 = getelementptr inbounds i8, i8* %238, i32 1
store i8* %239, i8** %5
br label %208
240: ; preds = %218
%241 = load i32, i32* %14
%242 = icmp ne i32 %241, 0
br i1 %242, label %243, label %339
243: ; preds = %240
%244 = load i8*, i8** %6
store i8* %244, i8** %15
%245 = load i8*, i8** %5
store i8* %245, i8** %16
%246 = load i8*, i8** %5
store i8* %246, i8** %13
store i32 0, i32* %17
br label %247
247: ; preds = %335, %243
br i1 true, label %248, label %338
248: ; preds = %247
%249 = load i8*, i8** %13
%250 = load i8, i8* %249
%251 = sext i8 %250 to i32
%252 = icmp eq i32 %251, 0
br i1 %252, label %275, label %253
253: ; preds = %248
%254 = load i32, i32* %9
%255 = icmp ne i32 %254, 0
br i1 %255, label %256, label %290
256: ; preds = %253
%257 = load i8*, i8** %13
%258 = load i8, i8* %257
%259 = sext i8 %258 to i32
%260 = icmp eq i32 %259, 47
br i1 %260, label %275, label %261
261: ; preds = %256
%262 = load i32, i32* %8
%263 = icmp ne i32 %262, 0
br i1 %263, label %264, label %290
264: ; preds = %261
%265 = load i8*, i8** %13
%266 = load i8, i8* %265
%267 = sext i8 %266 to i32
%268 = icmp eq i32 %267, 92
br i1 %268, label %269, label %290
269: ; preds = %264
%270 = load i8*, i8** %13
%271 = getelementptr inbounds i8, i8* %270, i64 1
%272 = load i8, i8* %271
%273 = sext i8 %272 to i32
%274 = icmp eq i32 %273, 47
br i1 %274, label %275, label %290
275: ; preds = %269, %256, %248
%276 = load i8*, i8** %6
%277 = load i32, i32* %17
%278 = sext i32 %277 to i64
%279 = getelementptr inbounds i8, i8* %276, i64 %278
%280 = load i8*, i8** %11
%281 = icmp ugt i8* %279, %280
br i1 %281, label %282, label %284
282: ; preds = %275
%283 = load i32, i32* @FNM_NOMATCH
store i32 %283, i32* %4
br label %481
284: ; preds = %275
%285 = load i8*, i8** %11
%286 = load i32, i32* %17
%287 = sext i32 %286 to i64
%288 = sub i64 0, %287
%289 = getelementptr inbounds i8, i8* %285, i64 %288
store i8* %289, i8** %6
store i32 0, i32* %14
br label %338
290: ; preds = %269, %264, %261, %253
%291 = load i8*, i8** %13
%292 = load i8, i8* %291
%293 = sext i8 %292 to i32
%294 = icmp eq i32 %293, 42
br i1 %294, label %295, label %305
295: ; preds = %290
%296 = load i8*, i8** %6
%297 = load i32, i32* %17
%298 = sext i32 %297 to i64
%299 = getelementptr inbounds i8, i8* %296, i64 %298
%300 = load i8*, i8** %11
%301 = icmp ugt i8* %299, %300
br i1 %301, label %302, label %304
302: ; preds = %295
%303 = load i32, i32* @FNM_NOMATCH
store i32 %303, i32* %4
br label %481
304: ; preds = %295
br label %338
305: ; preds = %290
%306 = load i32, i32* %8
%307 = icmp ne i32 %306, 0
br i1 %307, label %308, label %322
308: ; preds = %305
%309 = load i8*, i8** %13
%310 = load i8, i8* %309
%311 = sext i8 %310 to i32
%312 = icmp eq i32 %311, 92
br i1 %312, label %313, label %322
313: ; preds = %308
%314 = load i8*, i8** %13
%315 = getelementptr inbounds i8, i8* %314, i64 1
%316 = load i8, i8* %315
%317 = sext i8 %316 to i32
%318 = icmp ne i32 %317, 0
br i1 %318, label %319, label %322
319: ; preds = %313
%320 = load i8*, i8** %13
%321 = getelementptr inbounds i8, i8* %320, i64 2
store i8* %321, i8** %13
br label %334
322: ; preds = %313, %308, %305
%323 = load i8*, i8** %13
%324 = load i8, i8* %323
%325 = sext i8 %324 to i32
%326 = icmp eq i32 %325, 91
br i1 %326, label %327, label %330
327: ; preds = %322
store i8* getelementptr inbounds ([2 x i8], [2 x i8]* @fnmatch.dummystring, i64 0, i64 0), i8** %12
%328 = load i32, i32* %7
%329 = call i32 @fnmatch_ch(i8** %13, i8** %12, i32 %328)
br label %333
330: ; preds = %322
%331 = load i8*, i8** %13
%332 = getelementptr inbounds i8, i8* %331, i32 1
store i8* %332, i8** %13
br label %333
333: ; preds = %330, %327
br label %334
334: ; preds = %333, %319
br label %335
335: ; preds = %334
%336 = load i32, i32* %17
%337 = add nsw i32 %336, 1
store i32 %337, i32* %17
br label %247
338: ; preds = %304, %284, %247
br label %339
339: ; preds = %338, %240
br label %340
340: ; preds = %404, %389, %339
%341 = load i8*, i8** %5
%342 = load i8, i8* %341
%343 = sext i8 %342 to i32
%344 = icmp ne i32 %343, 0
br i1 %344, label %345, label %349
345: ; preds = %340
%346 = load i8*, i8** %6
%347 = load i8*, i8** %11
%348 = icmp ult i8* %346, %347
br label %349
349: ; preds = %345, %340
%350 = phi i1 [ false, %340 ], [ %348, %345 ]
br i1 %350, label %351, label %408
351: ; preds = %349
%352 = load i8*, i8** %5
%353 = load i8, i8* %352
%354 = sext i8 %353 to i32
%355 = icmp eq i32 %354, 42
br i1 %355, label %356, label %357
356: ; preds = %351
br label %408
357: ; preds = %351
%358 = load i32, i32* %9
%359 = icmp ne i32 %358, 0
br i1 %359, label %360, label %385
360: ; preds = %357
%361 = load i8*, i8** %6
%362 = load i8, i8* %361
%363 = sext i8 %362 to i32
%364 = icmp eq i32 %363, 47
br i1 %364, label %384, label %365
365: ; preds = %360
%366 = load i8*, i8** %5
%367 = load i8, i8* %366
%368 = sext i8 %367 to i32
%369 = icmp eq i32 %368, 47
br i1 %369, label %384, label %370
370: ; preds = %365
%371 = load i32, i32* %8
%372 = icmp ne i32 %371, 0
br i1 %372, label %373, label %385
373: ; preds = %370
%374 = load i8*, i8** %5
%375 = load i8, i8* %374
%376 = sext i8 %375 to i32
%377 = icmp eq i32 %376, 92
br i1 %377, label %378, label %385
378: ; preds = %373
%379 = load i8*, i8** %5
%380 = getelementptr inbounds i8, i8* %379, i64 1
%381 = load i8, i8* %380
%382 = sext i8 %381 to i32
%383 = icmp eq i32 %382, 47
br i1 %383, label %384, label %385
384: ; preds = %378, %365, %360
br label %408
385: ; preds = %378, %373, %370, %357
%386 = load i32, i32* %7
%387 = call i32 @fnmatch_ch(i8** %5, i8** %6, i32 %386)
%388 = icmp ne i32 %387, 0
br i1 %388, label %390, label %389
389: ; preds = %385
br label %340
390: ; preds = %385
%391 = load i32, i32* %14
%392 = icmp ne i32 %391, 0
br i1 %392, label %393, label %406
393: ; preds = %390
%394 = load i8*, i8** %15
%395 = getelementptr inbounds i8, i8* %394, i32 1
store i8* %395, i8** %15
store i8* %395, i8** %6
%396 = load i8*, i8** %6
%397 = load i32, i32* %17
%398 = sext i32 %397 to i64
%399 = getelementptr inbounds i8, i8* %396, i64 %398
%400 = load i8*, i8** %11
%401 = icmp ugt i8* %399, %400
br i1 %401, label %402, label %404
402: ; preds = %393
%403 = load i32, i32* @FNM_NOMATCH
store i32 %403, i32* %4
br label %481
404: ; preds = %393
%405 = load i8*, i8** %16
store i8* %405, i8** %5
br label %340
406: ; preds = %390
%407 = load i32, i32* @FNM_NOMATCH
store i32 %407, i32* %4
br label %481
408: ; preds = %384, %356, %349
br label %166
409: ; preds = %206, %183, %166
%410 = load i8*, i8** %6
%411 = load i8, i8* %410
%412 = sext i8 %411 to i32
%413 = icmp ne i32 %412, 0
br i1 %413, label %414, label %427
414: ; preds = %409
%415 = load i32, i32* %9
%416 = icmp ne i32 %415, 0
br i1 %416, label %420, label %417
417: ; preds = %414
%418 = load i32, i32* %10
%419 = icmp ne i32 %418, 0
br i1 %419, label %420, label %425
420: ; preds = %417, %414
%421 = load i8*, i8** %6
%422 = load i8, i8* %421
%423 = sext i8 %422 to i32
%424 = icmp eq i32 %423, 47
br i1 %424, label %427, label %425
425: ; preds = %420, %417
%426 = load i32, i32* @FNM_NOMATCH
store i32 %426, i32* %4
br label %481
427: ; preds = %420, %409
%428 = load i8*, i8** %5
%429 = load i8, i8* %428
%430 = sext i8 %429 to i32
%431 = icmp ne i32 %430, 0
br i1 %431, label %432, label %456
432: ; preds = %427
%433 = load i32, i32* %9
%434 = icmp ne i32 %433, 0
br i1 %434, label %435, label %454
435: ; preds = %432
%436 = load i8*, i8** %5
%437 = load i8, i8* %436
%438 = sext i8 %437 to i32
%439 = icmp eq i32 %438, 47
br i1 %439, label %456, label %440
440: ; preds = %435
%441 = load i32, i32* %8
%442 = icmp ne i32 %441, 0
br i1 %442, label %443, label %454
443: ; preds = %440
%444 = load i8*, i8** %5
%445 = load i8, i8* %444
%446 = sext i8 %445 to i32
%447 = icmp eq i32 %446, 92
br i1 %447, label %448, label %454
448: ; preds = %443
%449 = load i8*, i8** %5
%450 = getelementptr inbounds i8, i8* %449, i64 1
%451 = load i8, i8* %450
%452 = sext i8 %451 to i32
%453 = icmp eq i32 %452, 47
br i1 %453, label %456, label %454
454: ; preds = %448, %443, %440, %432
%455 = load i32, i32* @FNM_NOMATCH
store i32 %455, i32* %4
br label %481
456: ; preds = %448, %435, %427
%457 = load i32, i32* %10
%458 = icmp ne i32 %457, 0
br i1 %458, label %459, label %469
459: ; preds = %456
%460 = load i8*, i8** %5
%461 = load i8, i8* %460
%462 = icmp ne i8 %461, 0
br i1 %462, label %469, label %463
463: ; preds = %459
%464 = load i8*, i8** %6
%465 = load i8, i8* %464
%466 = sext i8 %465 to i32
%467 = icmp eq i32 %466, 47
br i1 %467, label %468, label %469
468: ; preds = %463
store i32 0, i32* %4
br label %481
469: ; preds = %463, %459, %456
br label %58
470: ; preds = %68
%471 = load i8*, i8** %6
%472 = load i8, i8* %471
%473 = icmp ne i8 %472, 0
br i1 %473, label %479, label %474
474: ; preds = %470
%475 = load i8*, i8** %5
%476 = load i8, i8* %475
%477 = icmp ne i8 %476, 0
br i1 %477, label %479, label %478
478: ; preds = %474
store i32 0, i32* %4
br label %481
479: ; preds = %474, %470
%480 = load i32, i32* @FNM_NOMATCH
store i32 %480, i32* %4
br label %481
481: ; preds = %479, %478, %468, %454, %425, %406, %402, %302, %282, %233, %144, %49
%482 = load i32, i32* %4
ret i32 %482
}

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