#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_CASEFOLD;
int FNM_NOESCAPE;
int FNM_NOMATCH;
int FNM_PATHNAME;
int classmatch(char const *, char const, int const, char const **);
scalar_t__ isupper(unsigned char);
scalar_t__ tolower(unsigned char);
int fnmatch_ch(const char **pattern, const char **string, int flags) {
  const char *const mismatch = *pattern;
  const int nocase = !!(flags & FNM_CASEFOLD);
  const int escape = !(flags & FNM_NOESCAPE);
  const int slash = !!(flags & FNM_PATHNAME);
  int result = FNM_NOMATCH;
  const char *startch;
  int negate;
  if (**pattern == '[') {
    ++*pattern;
    negate = ((**pattern == '!') || (**pattern == '^'));
    if (negate)
      ++*pattern;
    if (**pattern == ']')
      goto leadingclosebrace;
    while (**pattern) {
      if (**pattern == ']') {
        ++*pattern;
        ++*string;
        return (result ^ negate);
      }
      if (escape && (**pattern == '\\')) {
        ++*pattern;
        if (!**pattern)
          break;
      }
      if (slash && (**pattern == '/'))
        break;
      if (classmatch(*pattern, **string, nocase, pattern) == 1) {
        result = 0;
        continue;
      }
    leadingclosebrace:
      if (((*pattern)[1] == '-') && ((*pattern)[2] != ']')) {
        startch = *pattern;
        *pattern += (escape && ((*pattern)[2] == '\\')) ? 3 : 2;
        if (!**pattern || (slash && (**pattern == '/')))
          break;
        if ((**string >= *startch) && (**string <= **pattern))
          result = 0;
        else if (nocase &&
                 (isupper((unsigned char)**string) ||
                  isupper((unsigned char)*startch) ||
                  isupper((unsigned char)**pattern)) &&
                 (tolower((unsigned char)**string) >=
                  tolower((unsigned char)*startch)) &&
                 (tolower((unsigned char)**string) <=
                  tolower((unsigned char)**pattern)))
          result = 0;
        ++*pattern;
        continue;
      }
      if ((**string == **pattern))
        result = 0;
      else if (nocase &&
               (isupper((unsigned char)**string) ||
                isupper((unsigned char)**pattern)) &&
               (tolower((unsigned char)**string) ==
                tolower((unsigned char)**pattern)))
        result = 0;
      ++*pattern;
    }
    *pattern = mismatch;
    result = FNM_NOMATCH;
  } else if (**pattern == '?') {
    if (!**string || (slash && (**string == '/')))
      return FNM_NOMATCH;
    result = 0;
    goto fnmatch_ch_success;
  } else if (escape && (**pattern == '\\') && (*pattern)[1]) {
    ++*pattern;
  }
  if (**string == **pattern)
    result = 0;
  else if (nocase &&
           (isupper((unsigned char)**string) ||
            isupper((unsigned char)**pattern)) &&
           (tolower((unsigned char)**string) ==
            tolower((unsigned char)**pattern)))
    result = 0;
  if (!**string || !**pattern ||
      (slash && ((**string == '/') || (**pattern == '/'))))
    return result;
fnmatch_ch_success:
  ++*pattern;
  ++*string;
  return result;
}


x86 assembly (clang, -O0):
<fnmatch_ch>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
mov    0x2e78(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x1c(%rbp),%eax
mov    0x2e82(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x30(%rbp)
mov    -0x1c(%rbp),%eax
mov    0x2e2e(%rip),%rcx
and    (%rcx),%eax
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
mov    0x2e33(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x5b,%eax
jne    15ba <fnmatch_ch+0x48a>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%ecx
mov    $0x1,%al
cmp    $0x21,%ecx
mov    %al,-0x45(%rbp)
je     11fe <fnmatch_ch+0xce>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x5e,%eax
sete   %al
mov    %al,-0x45(%rbp)
mov    -0x45(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x44(%rbp)
cmpl   $0x0,-0x44(%rbp)
je     1221 <fnmatch_ch+0xf1>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
jne    1239 <fnmatch_ch+0x109>
jmp    132b <fnmatch_ch+0x1fb>
jmp    123e <fnmatch_ch+0x10e>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
cmpb   $0x0,(%rax)
je     159e <fnmatch_ch+0x46e>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
jne    128b <fnmatch_ch+0x15b>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x38(%rbp),%eax
xor    -0x44(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1784 <fnmatch_ch+0x654>
cmpl   $0x0,-0x30(%rbp)
je     12d0 <fnmatch_ch+0x1a0>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    12d0 <fnmatch_ch+0x1a0>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
cmpb   $0x0,(%rax)
jne    12cb <fnmatch_ch+0x19b>
jmp    159e <fnmatch_ch+0x46e>
jmp    12d0 <fnmatch_ch+0x1a0>
cmpl   $0x0,-0x34(%rbp)
je     12f2 <fnmatch_ch+0x1c2>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    12f2 <fnmatch_ch+0x1c2>
jmp    159e <fnmatch_ch+0x46e>
mov    -0x10(%rbp),%rax
mov    (%rax),%rdi
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    (%rax),%al
mov    -0x2c(%rbp),%edx
mov    -0x10(%rbp),%rcx
movsbl %al,%esi
call   1040 <classmatch@plt>
cmp    $0x1,%eax
jne    1326 <fnmatch_ch+0x1f6>
movl   $0x0,-0x38(%rbp)
jmp    123e <fnmatch_ch+0x10e>
jmp    132b <fnmatch_ch+0x1fb>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2d,%eax
jne    14e9 <fnmatch_ch+0x3b9>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl 0x2(%rax),%eax
cmp    $0x5d,%eax
je     14e9 <fnmatch_ch+0x3b9>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x40(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x30(%rbp)
mov    %al,-0x46(%rbp)
je     1381 <fnmatch_ch+0x251>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl 0x2(%rax),%eax
cmp    $0x5c,%eax
sete   %al
mov    %al,-0x46(%rbp)
mov    -0x46(%rbp),%cl
mov    $0x2,%edx
mov    $0x3,%eax
test   $0x1,%cl
cmovne %eax,%edx
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
movslq %edx,%rdx
add    %rdx,%rcx
mov    %rcx,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
cmpb   $0x0,(%rax)
je     13d1 <fnmatch_ch+0x2a1>
cmpl   $0x0,-0x34(%rbp)
je     13d6 <fnmatch_ch+0x2a6>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    13d6 <fnmatch_ch+0x2a6>
jmp    159e <fnmatch_ch+0x46e>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
mov    -0x40(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jl     1417 <fnmatch_ch+0x2e7>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jg     1417 <fnmatch_ch+0x2e7>
movl   $0x0,-0x38(%rbp)
jmp    14d6 <fnmatch_ch+0x3a6>
cmpl   $0x0,-0x2c(%rbp)
je     14d1 <fnmatch_ch+0x3a1>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%rax
jne    1469 <fnmatch_ch+0x339>
mov    -0x40(%rbp),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%rax
jne    1469 <fnmatch_ch+0x339>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%rax
je     14d1 <fnmatch_ch+0x3a1>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
mov    %rax,-0x50(%rbp)
mov    -0x40(%rbp),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
mov    %rax,%rcx
mov    -0x50(%rbp),%rax
cmp    %rcx,%rax
jl     14d1 <fnmatch_ch+0x3a1>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
mov    %rax,-0x58(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
mov    %rax,%rcx
mov    -0x58(%rbp),%rax
cmp    %rcx,%rax
jg     14d1 <fnmatch_ch+0x3a1>
movl   $0x0,-0x38(%rbp)
jmp    14d6 <fnmatch_ch+0x3a6>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    123e <fnmatch_ch+0x10e>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    1511 <fnmatch_ch+0x3e1>
movl   $0x0,-0x38(%rbp)
jmp    158b <fnmatch_ch+0x45b>
cmpl   $0x0,-0x2c(%rbp)
je     1586 <fnmatch_ch+0x456>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%rax
jne    154d <fnmatch_ch+0x41d>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%rax
je     1586 <fnmatch_ch+0x456>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
mov    %rax,-0x60(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
mov    %rax,%rcx
mov    -0x60(%rbp),%rax
cmp    %rcx,%rax
jne    1586 <fnmatch_ch+0x456>
movl   $0x0,-0x38(%rbp)
jmp    158b <fnmatch_ch+0x45b>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    123e <fnmatch_ch+0x10e>
mov    -0x28(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    0x2a30(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x38(%rbp)
jmp    1660 <fnmatch_ch+0x530>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x3f,%eax
jne    1617 <fnmatch_ch+0x4e7>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
cmpb   $0x0,(%rax)
je     15fa <fnmatch_ch+0x4ca>
cmpl   $0x0,-0x34(%rbp)
je     160b <fnmatch_ch+0x4db>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    160b <fnmatch_ch+0x4db>
mov    0x29df(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1784 <fnmatch_ch+0x654>
movl   $0x0,-0x38(%rbp)
jmp    1762 <fnmatch_ch+0x632>
cmpl   $0x0,-0x30(%rbp)
je     1656 <fnmatch_ch+0x526>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    1656 <fnmatch_ch+0x526>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
je     1656 <fnmatch_ch+0x526>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
jmp    165b <fnmatch_ch+0x52b>
jmp    1660 <fnmatch_ch+0x530>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    1688 <fnmatch_ch+0x558>
movl   $0x0,-0x38(%rbp)
jmp    1702 <fnmatch_ch+0x5d2>
cmpl   $0x0,-0x2c(%rbp)
je     16fd <fnmatch_ch+0x5cd>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%rax
jne    16c4 <fnmatch_ch+0x594>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%rax
je     16fd <fnmatch_ch+0x5cd>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
mov    %rax,-0x68(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
mov    %rax,%rcx
mov    -0x68(%rbp),%rax
cmp    %rcx,%rax
jne    16fd <fnmatch_ch+0x5cd>
movl   $0x0,-0x38(%rbp)
jmp    1702 <fnmatch_ch+0x5d2>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
cmpb   $0x0,(%rax)
je     1752 <fnmatch_ch+0x622>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
cmpb   $0x0,(%rax)
je     1752 <fnmatch_ch+0x622>
cmpl   $0x0,-0x34(%rbp)
je     175d <fnmatch_ch+0x62d>
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     1752 <fnmatch_ch+0x622>
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    175d <fnmatch_ch+0x62d>
mov    -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1784 <fnmatch_ch+0x654>
jmp    1762 <fnmatch_ch+0x632>
mov    -0x10(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x18(%rbp),%rax
mov    (%rax),%rcx
add    $0x1,%rcx
mov    %rcx,(%rax)
mov    -0x38(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fnmatch_ch>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %edx,%r15d
mov    %rsi,%rbx
mov    %rdi,%r13
mov    (%rdi),%rsi
mov    0x2e7f(%rip),%rax
mov    (%rax),%edx
xor    %r12d,%r12d
test   %r15d,%edx
setne  %r12b
mov    0x2e94(%rip),%rax
mov    (%rax),%eax
mov    %eax,0x14(%rsp)
mov    0x2e4f(%rip),%rax
mov    (%rax),%eax
mov    %eax,0x10(%rsp)
mov    0x2e62(%rip),%rax
mov    (%rax),%ebp
mov    (%rsi),%al
cmp    $0x3f,%al
je     11d6 <fnmatch_ch+0xa6>
cmp    $0x5b,%al
jne    11fe <fnmatch_ch+0xce>
mov    %edx,0xc(%rsp)
mov    %rbx,0x18(%rsp)
lea    0x1(%rsi),%rbx
mov    %rbx,0x0(%r13)
mov    0x1(%rsi),%al
cmp    $0x21,%al
sete   %cl
cmp    $0x5e,%al
sete   %dl
or     %cl,%dl
movzbl %dl,%ecx
mov    %ecx,0x24(%rsp)
cmp    $0x5e,%al
je     11b9 <fnmatch_ch+0x89>
cmp    $0x21,%al
jne    11c4 <fnmatch_ch+0x94>
lea    0x2(%rsi),%rbx
mov    %rbx,0x0(%r13)
mov    0x2(%rsi),%al
mov    %rsi,0x30(%rsp)
cmp    $0x5d,%al
jne    125b <fnmatch_ch+0x12b>
jmp    12cf <fnmatch_ch+0x19f>
mov    (%rbx),%rax
mov    (%rax),%cl
test   %cl,%cl
je     1446 <fnmatch_ch+0x316>
xor    %eax,%eax
test   %r15d,0x10(%rsp)
je     1438 <fnmatch_ch+0x308>
cmp    $0x2f,%cl
je     1446 <fnmatch_ch+0x316>
jmp    1438 <fnmatch_ch+0x308>
test   %r15d,0x14(%rsp)
jne    13bb <fnmatch_ch+0x28b>
cmp    $0x5c,%al
jne    13bb <fnmatch_ch+0x28b>
lea    0x1(%rsi),%rax
cmpb   $0x0,0x1(%rsi)
je     13bb <fnmatch_ch+0x28b>
mov    %rax,0x0(%r13)
mov    %rax,%rsi
jmp    13bb <fnmatch_ch+0x28b>
mov    (%r14),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
mov    %rax,%rbx
mov    0x0(%r13),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
xor    %ecx,%ecx
cmp    %rax,%rbx
cmovg  %ebp,%ecx
mov    0x0(%r13),%rbx
add    $0x1,%rbx
mov    %rbx,0x0(%r13)
mov    %ecx,%ebp
test   %r15d,0x10(%rsp)
setne  %r14b
mov    %ebp,%ecx
movzbl (%rbx),%eax
test   %al,%al
je     13a0 <fnmatch_ch+0x270>
mov    %ecx,%ebp
cmp    $0x5d,%al
je     1457 <fnmatch_ch+0x327>
test   %r15d,0x14(%rsp)
jne    129d <fnmatch_ch+0x16d>
cmp    $0x5c,%al
jne    129d <fnmatch_ch+0x16d>
lea    0x1(%rbx),%rcx
mov    %rcx,0x0(%r13)
movzbl 0x1(%rbx),%eax
mov    %rcx,%rbx
test   %al,%al
je     13a0 <fnmatch_ch+0x270>
cmp    $0x2f,%al
sete   %al
test   %al,%r14b
jne    13a0 <fnmatch_ch+0x270>
mov    0x18(%rsp),%rax
mov    (%rax),%rax
movsbl (%rax),%esi
mov    %rbx,%rdi
mov    %r12d,%edx
mov    %r13,%rcx
call   1040 <classmatch@plt>
xor    %ecx,%ecx
mov    0x0(%r13),%rbx
cmp    $0x1,%eax
je     1266 <fnmatch_ch+0x136>
cmpb   $0x2d,0x1(%rbx)
mov    0x18(%rsp),%r14
jne    12e1 <fnmatch_ch+0x1b1>
mov    0x2(%rbx),%al
cmp    $0x5d,%al
jne    134d <fnmatch_ch+0x21d>
mov    0xc(%rsp),%edx
and    %r15d,%edx
mov    (%r14),%rax
mov    (%rax),%al
xor    %ecx,%ecx
cmp    (%rbx),%al
cmovne %ebp,%ecx
je     124d <fnmatch_ch+0x11d>
test   %edx,%edx
je     124d <fnmatch_ch+0x11d>
movzbl %al,%edi
call   1050 <isupper@plt>
test   %rax,%rax
jne    1324 <fnmatch_ch+0x1f4>
mov    0x0(%r13),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
test   %rax,%rax
je     14d8 <fnmatch_ch+0x3a8>
mov    (%r14),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
mov    %rax,%rbx
mov    0x0(%r13),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
xor    %ecx,%ecx
cmp    %rax,%rbx
cmove  %ecx,%ebp
mov    %ebp,%ecx
jmp    124d <fnmatch_ch+0x11d>
test   %r15d,0x14(%rsp)
sete   %cl
cmp    $0x5c,%al
sete   %al
and    %cl,%al
movzbl %al,%eax
lea    (%rax,%rbx,1),%rcx
add    $0x2,%rcx
mov    %rcx,0x0(%r13)
mov    0x2(%rax,%rbx,1),%al
test   %al,%al
je     13a0 <fnmatch_ch+0x270>
test   %r15d,0x10(%rsp)
je     137e <fnmatch_ch+0x24e>
cmp    $0x2f,%al
je     13a0 <fnmatch_ch+0x270>
mov    0x18(%rsp),%r14
mov    (%r14),%rcx
mov    (%rcx),%dl
cmp    (%rbx),%dl
jge    146e <fnmatch_ch+0x33e>
test   %r15d,0xc(%rsp)
jne    148a <fnmatch_ch+0x35a>
jmp    14d8 <fnmatch_ch+0x3a8>
mov    0x30(%rsp),%rsi
mov    %rsi,0x0(%r13)
mov    0x2c30(%rip),%rax
mov    (%rax),%ebp
mov    0x18(%rsp),%rbx
mov    0xc(%rsp),%edx
and    %r15d,%edx
mov    (%rbx),%rax
mov    (%rax),%cl
xor    %eax,%eax
cmp    (%rsi),%cl
cmovne %ebp,%eax
je     1412 <fnmatch_ch+0x2e2>
test   %edx,%edx
je     1412 <fnmatch_ch+0x2e2>
movzbl %cl,%edi
call   1050 <isupper@plt>
test   %rax,%rax
jne    13ee <fnmatch_ch+0x2be>
mov    0x0(%r13),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
test   %rax,%rax
je     1410 <fnmatch_ch+0x2e0>
mov    (%rbx),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
mov    %rax,%r14
mov    0x0(%r13),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
xor    %ecx,%ecx
cmp    %rax,%r14
cmove  %ecx,%ebp
mov    %ebp,%eax
mov    (%rbx),%rcx
mov    (%rcx),%dl
test   %dl,%dl
je     1444 <fnmatch_ch+0x314>
mov    0x0(%r13),%rsi
mov    (%rsi),%cl
test   %cl,%cl
je     1444 <fnmatch_ch+0x314>
test   %r15d,0x10(%rsp)
je     1438 <fnmatch_ch+0x308>
cmp    $0x2f,%dl
je     1444 <fnmatch_ch+0x314>
mov    %eax,%ebp
cmp    $0x2f,%cl
je     1446 <fnmatch_ch+0x316>
add    $0x1,%rsi
mov    %rsi,0x0(%r13)
addq   $0x1,(%rbx)
mov    %eax,%ebp
mov    %ebp,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
add    $0x1,%rbx
mov    %rbx,0x0(%r13)
mov    0x18(%rsp),%rax
addq   $0x1,(%rax)
xor    0x24(%rsp),%ebp
jmp    1446 <fnmatch_ch+0x316>
mov    0xc(%rsp),%esi
and    %r15d,%esi
xor    %ecx,%ecx
cmp    %al,%dl
cmovg  %ebp,%ecx
jle    124d <fnmatch_ch+0x11d>
test   %esi,%esi
je     124d <fnmatch_ch+0x11d>
movzbl %dl,%edi
call   1050 <isupper@plt>
test   %rax,%rax
jne    14b5 <fnmatch_ch+0x385>
movzbl (%rbx),%edi
call   1050 <isupper@plt>
test   %rax,%rax
jne    14b5 <fnmatch_ch+0x385>
mov    0x0(%r13),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
test   %rax,%rax
je     14d8 <fnmatch_ch+0x3a8>
mov    (%r14),%rax
movzbl (%rax),%edi
call   1030 <tolower@plt>
mov    %rax,0x28(%rsp)
movzbl (%rbx),%edi
call   1030 <tolower@plt>
cmp    %rax,0x28(%rsp)
jge    122b <fnmatch_ch+0xfb>
mov    %ebp,%ecx
jmp    124d <fnmatch_ch+0x11d>

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

LLVM IR (-O2):
@FNM_CASEFOLD = global i32 0
@FNM_NOESCAPE = global i32 0
@FNM_PATHNAME = global i32 0
@FNM_NOMATCH = global i32 0
define i32 @fnmatch_ch(i8** %0, i8** nocapture %1, i32 %2) {
%4 = load i8*, i8** %0
%5 = load i32, i32* @FNM_CASEFOLD
%6 = and i32 %5, %2
%7 = icmp ne i32 %6, 0
%8 = zext i1 %7 to i32
%9 = load i32, i32* @FNM_NOESCAPE
%10 = and i32 %9, %2
%11 = icmp eq i32 %10, 0
%12 = load i32, i32* @FNM_PATHNAME
%13 = and i32 %12, %2
%14 = icmp eq i32 %13, 0
%15 = load i32, i32* @FNM_NOMATCH
%16 = load i8, i8* %4
switch i8 %16, label %161 [
i8 91, label %17
i8 63, label %153
]
17: ; preds = %3
%18 = getelementptr inbounds i8, i8* %4, i64 1
store i8* %18, i8** %0
%19 = load i8, i8* %18
%20 = icmp eq i8 %19, 33
%21 = icmp eq i8 %19, 94
%22 = or i1 %20, %21
%23 = zext i1 %22 to i32
switch i8 %19, label %27 [
i8 94, label %24
i8 33, label %24
]
24: ; preds = %17, %17
%25 = getelementptr inbounds i8, i8* %4, i64 2
store i8* %25, i8** %0
%26 = load i8, i8* %25
br label %27
27: ; preds = %17, %24
%28 = phi i8 [ %19, %17 ], [ %26, %24 ]
%29 = phi i8* [ %18, %17 ], [ %25, %24 ]
%30 = icmp eq i8 %28, 93
br i1 %30, label %66, label %35
31: ; preds = %137, %126, %142, %110, %105, %97, %92, %117
%32 = phi i32 [ %68, %110 ], [ %68, %105 ], [ %68, %97 ], [ %96, %92 ], [ %125, %117 ], [ %68, %137 ], [ %133, %126 ], [ %150, %142 ]
%33 = load i8*, i8** %0
%34 = getelementptr inbounds i8, i8* %33, i64 1
store i8* %34, i8** %0
br label %35
35: ; preds = %31, %27
%36 = phi i8* [ %34, %31 ], [ %29, %27 ]
%37 = phi i32 [ %32, %31 ], [ %15, %27 ]
%38 = xor i1 %14, true
br label %39
39: ; preds = %35, %60
%40 = phi i8* [ %65, %60 ], [ %36, %35 ]
%41 = phi i32 [ 0, %60 ], [ %37, %35 ]
%42 = load i8, i8* %40
switch i8 %42, label %48 [
i8 0, label %151
i8 93, label %43
]
43: ; preds = %39
%44 = getelementptr inbounds i8, i8* %40, i64 1
store i8* %44, i8** %0
%45 = load i8*, i8** %1
%46 = getelementptr inbounds i8, i8* %45, i64 1
store i8* %46, i8** %1
%47 = xor i32 %41, %23
br label %216
48: ; preds = %39
%49 = icmp eq i8 %42, 92
%50 = select i1 %11, i1 %49, i1 false
br i1 %50, label %51, label %55
51: ; preds = %48
%52 = getelementptr inbounds i8, i8* %40, i64 1
store i8* %52, i8** %0
%53 = load i8, i8* %52
%54 = icmp eq i8 %53, 0
br i1 %54, label %151, label %55
55: ; preds = %51, %48
%56 = phi i8 [ %53, %51 ], [ %42, %48 ]
%57 = phi i8* [ %52, %51 ], [ %40, %48 ]
%58 = icmp eq i8 %56, 47
%59 = select i1 %38, i1 %58, i1 false
br i1 %59, label %151, label %60
60: ; preds = %55
%61 = load i8*, i8** %1
%62 = load i8, i8* %61
%63 = tail call i32 @classmatch(i8* %57, i8 signext %62, i32 %8, i8** %0)
%64 = icmp eq i32 %63, 1
%65 = load i8*, i8** %0
br i1 %64, label %39, label %66
66: ; preds = %60, %27
%67 = phi i8* [ %29, %27 ], [ %65, %60 ]
%68 = phi i32 [ %15, %27 ], [ %41, %60 ]
%69 = getelementptr inbounds i8, i8* %67, i64 1
%70 = load i8, i8* %69
%71 = icmp eq i8 %70, 45
br i1 %71, label %72, label %126
72: ; preds = %66
%73 = getelementptr inbounds i8, i8* %67, i64 2
%74 = load i8, i8* %73
%75 = icmp eq i8 %74, 93
br i1 %75, label %126, label %76
76: ; preds = %72
%77 = icmp eq i8 %74, 92
%78 = select i1 %11, i1 %77, i1 false
%79 = select i1 %78, i64 3, i64 2
%80 = getelementptr inbounds i8, i8* %67, i64 %79
store i8* %80, i8** %0
%81 = load i8, i8* %80
%82 = icmp eq i8 %81, 0
br i1 %82, label %151, label %83
83: ; preds = %76
%84 = xor i1 %14, true
%85 = icmp eq i8 %81, 47
%86 = select i1 %84, i1 %85, i1 false
br i1 %86, label %151, label %87
87: ; preds = %83
%88 = load i8*, i8** %1
%89 = load i8, i8* %88
%90 = load i8, i8* %67
%91 = icmp slt i8 %89, %90
br i1 %91, label %97, label %92
92: ; preds = %87
%93 = icmp sle i8 %89, %81
%94 = xor i1 %7, true
%95 = select i1 %93, i1 true, i1 %94
%96 = select i1 %93, i32 0, i32 %68
br i1 %95, label %31, label %98
97: ; preds = %87
br i1 %7, label %98, label %31
98: ; preds = %92, %97
%99 = tail call i64 @isupper(i8 zeroext %89)
%100 = icmp eq i64 %99, 0
br i1 %100, label %101, label %110
101: ; preds = %98
%102 = load i8, i8* %67
%103 = tail call i64 @isupper(i8 zeroext %102)
%104 = icmp eq i64 %103, 0
br i1 %104, label %105, label %110
105: ; preds = %101
%106 = load i8*, i8** %0
%107 = load i8, i8* %106
%108 = tail call i64 @isupper(i8 zeroext %107)
%109 = icmp eq i64 %108, 0
br i1 %109, label %31, label %110
110: ; preds = %105, %101, %98
%111 = load i8*, i8** %1
%112 = load i8, i8* %111
%113 = tail call i64 @tolower(i8 zeroext %112)
%114 = load i8, i8* %67
%115 = tail call i64 @tolower(i8 zeroext %114)
%116 = icmp slt i64 %113, %115
br i1 %116, label %31, label %117
117: ; preds = %110
%118 = load i8*, i8** %1
%119 = load i8, i8* %118
%120 = tail call i64 @tolower(i8 zeroext %119)
%121 = load i8*, i8** %0
%122 = load i8, i8* %121
%123 = tail call i64 @tolower(i8 zeroext %122)
%124 = icmp sgt i64 %120, %123
%125 = select i1 %124, i32 %68, i32 0
br label %31
126: ; preds = %72, %66
%127 = load i8*, i8** %1
%128 = load i8, i8* %127
%129 = load i8, i8* %67
%130 = icmp eq i8 %128, %129
%131 = xor i1 %7, true
%132 = select i1 %130, i1 true, i1 %131
%133 = select i1 %130, i32 0, i32 %68
br i1 %132, label %31, label %134
134: ; preds = %126
%135 = tail call i64 @isupper(i8 zeroext %128)
%136 = icmp eq i64 %135, 0
br i1 %136, label %137, label %142
137: ; preds = %134
%138 = load i8*, i8** %0
%139 = load i8, i8* %138
%140 = tail call i64 @isupper(i8 zeroext %139)
%141 = icmp eq i64 %140, 0
br i1 %141, label %31, label %142
142: ; preds = %137, %134
%143 = load i8*, i8** %1
%144 = load i8, i8* %143
%145 = tail call i64 @tolower(i8 zeroext %144)
%146 = load i8*, i8** %0
%147 = load i8, i8* %146
%148 = tail call i64 @tolower(i8 zeroext %147)
%149 = icmp eq i64 %145, %148
%150 = select i1 %149, i32 0, i32 %68
br label %31
151: ; preds = %39, %51, %55, %83, %76
store i8* %4, i8** %0
%152 = load i32, i32* @FNM_NOMATCH
br label %169
153: ; preds = %3
%154 = load i8*, i8** %1
%155 = load i8, i8* %154
%156 = icmp eq i8 %155, 0
br i1 %156, label %216, label %157
157: ; preds = %153
%158 = xor i1 %14, true
%159 = icmp eq i8 %155, 47
%160 = select i1 %158, i1 %159, i1 false
br i1 %160, label %216, label %210
161: ; preds = %3
%162 = icmp eq i8 %16, 92
%163 = select i1 %11, i1 %162, i1 false
br i1 %163, label %164, label %169
164: ; preds = %161
%165 = getelementptr inbounds i8, i8* %4, i64 1
%166 = load i8, i8* %165
%167 = icmp eq i8 %166, 0
br i1 %167, label %169, label %168
168: ; preds = %164
store i8* %165, i8** %0
br label %169
169: ; preds = %168, %164, %161, %151
%170 = phi i8* [ %4, %151 ], [ %165, %168 ], [ %4, %164 ], [ %4, %161 ]
%171 = phi i32 [ %152, %151 ], [ %15, %168 ], [ %15, %164 ], [ %15, %161 ]
%172 = load i8*, i8** %1
%173 = load i8, i8* %172
%174 = load i8, i8* %170
%175 = icmp eq i8 %173, %174
%176 = xor i1 %7, true
%177 = select i1 %175, i1 true, i1 %176
%178 = select i1 %175, i32 0, i32 %171
br i1 %177, label %196, label %179
179: ; preds = %169
%180 = tail call i64 @isupper(i8 zeroext %173)
%181 = icmp eq i64 %180, 0
br i1 %181, label %182, label %187
182: ; preds = %179
%183 = load i8*, i8** %0
%184 = load i8, i8* %183
%185 = tail call i64 @isupper(i8 zeroext %184)
%186 = icmp eq i64 %185, 0
br i1 %186, label %196, label %187
187: ; preds = %182, %179
%188 = load i8*, i8** %1
%189 = load i8, i8* %188
%190 = tail call i64 @tolower(i8 zeroext %189)
%191 = load i8*, i8** %0
%192 = load i8, i8* %191
%193 = tail call i64 @tolower(i8 zeroext %192)
%194 = icmp eq i64 %190, %193
%195 = select i1 %194, i32 0, i32 %171
br label %196
196: ; preds = %187, %169, %182
%197 = phi i32 [ %171, %182 ], [ %178, %169 ], [ %195, %187 ]
%198 = load i8*, i8** %1
%199 = load i8, i8* %198
%200 = icmp eq i8 %199, 0
br i1 %200, label %216, label %201
201: ; preds = %196
%202 = load i8*, i8** %0
%203 = load i8, i8* %202
%204 = icmp eq i8 %203, 0
br i1 %204, label %216, label %205
205: ; preds = %201
br i1 %14, label %210, label %206
206: ; preds = %205
%207 = icmp eq i8 %199, 47
%208 = icmp eq i8 %203, 47
%209 = select i1 %207, i1 true, i1 %208
br i1 %209, label %216, label %210
210: ; preds = %206, %157, %205
%211 = phi i8* [ %202, %205 ], [ %4, %157 ], [ %202, %206 ]
%212 = phi i32 [ %197, %205 ], [ 0, %157 ], [ %197, %206 ]
%213 = getelementptr inbounds i8, i8* %211, i64 1
store i8* %213, i8** %0
%214 = load i8*, i8** %1
%215 = getelementptr inbounds i8, i8* %214, i64 1
store i8* %215, i8** %1
br label %216
216: ; preds = %153, %157, %196, %201, %206, %210, %43
%217 = phi i32 [ %212, %210 ], [ %47, %43 ], [ %197, %206 ], [ %197, %201 ], [ %197, %196 ], [ %15, %157 ], [ %15, %153 ]
ret i32 %217
}