#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 */
typedef scalar_t__ flags;

/* Variables and functions */
int /*<<< orphan*/ rangematch(char const *, char const, int, char const **);
char *strchr(char const *, char);
int /*<<< orphan*/ tolower(unsigned char);
int wildmatch(const char *pattern, const char *string, int flags) {
  const char *stringstart;
  const char *newp;
  const char *slash;
  char c, test;
  char prev;
  int wild = 0;
  if (((flags) & (0x40))) {
    flags |= 0x02;
  }
  for (stringstart = string;;) {
    switch (c = *pattern++) {
    case '\0':
      if (((flags) & (0x08)) && *string == '/')
        return 0;
      return (*string == '\0') ? 0 : 1;
    case '?':
      if (*string == '\0')
        return 1;
      if (*string == '/' && ((flags) & (0x02)))
        return 1;
      if (*string == '.' && ((flags) & (0x04)) &&
          (string == stringstart ||
           (((flags) & (0x02)) && *(string - 1) == '/')))
        return 1;
      ++string;
      break;
    case '*':
      c = *pattern;
      wild = ((flags) & (0x40)) && c == '*';
      if (wild) {
        prev = pattern[-2];
        while (c == '*') {
          c = *++pattern;
        }
        while (c == '/' && pattern[1] == '*' && pattern[2] == '*') {
          prev = c;
          c = *++pattern;
          while (c == '*') {
            c = *++pattern;
          }
        }
        if (c == '/' && wildmatch(pattern + 1, string, flags) == 0) {
          return 0;
        }
      } else {
        while (c == '*') {
          c = *++pattern;
        }
      }
      if (!wild && *string == '.' && ((flags) & (0x04)) &&
          (string == stringstart ||
           (((flags) & (0x02)) && *(string - 1) == '/'))) {
        return 1;
      }
      if (c == '\0') {
        if (wild && prev == '/') {
          return 0;
        }
        if (((flags) & (0x02))) {
          return (((flags) & (0x08)) || strchr(string, '/') == NULL ? 0 : 1);
        } else {
          return 0;
        }
      } else if (c == '/') {
        if (wild) {
          slash = strchr(stringstart, '/');
          if (!slash) {
            return 1;
          }
          while (slash) {
            if (wildmatch(pattern + 1, slash + 1, flags) == 0) {
              return 0;
            }
            slash = strchr(slash + 1, '/');
          }
        } else {
          if (((flags) & (0x02))) {
            if ((string = strchr(string, '/')) == NULL) {
              return 1;
            }
          }
        }
      } else if (wild) {
        return 1;
      }
      while ((test = *string) != '\0') {
        if (!wildmatch(pattern, string, flags & ~0x04))
          return 0;
        if (test == '/' && ((flags) & (0x02)))
          break;
        ++string;
      }
      return 1;
    case '[':
      if (*string == '\0')
        return 1;
      if (*string == '/' && ((flags) & (0x02)))
        return 1;
      if (*string == '.' && ((flags) & (0x04)) &&
          (string == stringstart ||
           (((flags) & (0x02)) && *(string - 1) == '/')))
        return 1;
      switch (rangematch(pattern, *string, flags, &newp)) {
      case -1:
        ++string;
        goto normal;
      case 1:
        pattern = newp;
        break;
      case 0:
        return (1);
      }
      ++string;
      break;
    case '\\':
      if (!((flags) & (0x01))) {
        if ((c = *pattern++) == '\0') {
          c = '\\';
          --pattern;
          if (*(string + 1) == '\0') {
            return 1;
          }
        }
      }
    default:
    normal:
      if (c != *string &&
          !(((flags) & (0x10)) &&
            (tolower((unsigned char)c) == tolower((unsigned char)*string))))
        return 1;
      ++string;
      break;
    }
  }
}


x86 assembly (clang, -O0):
<wildmatch>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x40,%eax
cmp    $0x0,%eax
je     1172 <wildmatch+0x32>
mov    -0x1c(%rbp),%eax
or     $0x2,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x44(%rbp)
mov    %al,%cl
mov    %cl,-0x39(%rbp)
test   %eax,%eax
je     11e5 <wildmatch+0xa5>
jmp    11a1 <wildmatch+0x61>
mov    -0x44(%rbp),%eax
sub    $0x2a,%eax
je     12dd <wildmatch+0x19d>
jmp    11b2 <wildmatch+0x72>
mov    -0x44(%rbp),%eax
sub    $0x3f,%eax
je     122c <wildmatch+0xec>
jmp    11c3 <wildmatch+0x83>
mov    -0x44(%rbp),%eax
sub    $0x5b,%eax
je     16c3 <wildmatch+0x583>
jmp    11d4 <wildmatch+0x94>
mov    -0x44(%rbp),%eax
sub    $0x5c,%eax
je     17e9 <wildmatch+0x6a9>
jmp    1854 <wildmatch+0x714>
mov    -0x1c(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     1210 <wildmatch+0xd0>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1210 <wildmatch+0xd0>
movl   $0x0,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x18(%rbp),%rax
movsbl (%rax),%edx
mov    $0x1,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmove  %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1248 <wildmatch+0x108>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1273 <wildmatch+0x133>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     1273 <wildmatch+0x133>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    12cc <wildmatch+0x18c>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     12cc <wildmatch+0x18c>
mov    -0x18(%rbp),%rax
cmp    -0x28(%rbp),%rax
je     12c0 <wildmatch+0x180>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     12cc <wildmatch+0x18c>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    12cc <wildmatch+0x18c>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    18b8 <wildmatch+0x778>
mov    -0x10(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x39(%rbp)
mov    -0x1c(%rbp),%ecx
and    $0x40,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x45(%rbp)
je     1307 <wildmatch+0x1c7>
movsbl -0x39(%rbp),%eax
cmp    $0x2a,%eax
sete   %al
mov    %al,-0x45(%rbp)
mov    -0x45(%rbp),%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x40(%rbp)
cmpl   $0x0,-0x40(%rbp)
je     141d <wildmatch+0x2dd>
mov    -0x10(%rbp),%rax
mov    -0x2(%rax),%al
mov    %al,-0x3b(%rbp)
movsbl -0x39(%rbp),%eax
cmp    $0x2a,%eax
jne    134d <wildmatch+0x20d>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    0x1(%rax),%al
mov    %al,-0x39(%rbp)
jmp    1326 <wildmatch+0x1e6>
jmp    1352 <wildmatch+0x212>
movsbl -0x39(%rbp),%ecx
xor    %eax,%eax
cmp    $0x2f,%ecx
mov    %al,-0x46(%rbp)
jne    138b <wildmatch+0x24b>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%ecx
xor    %eax,%eax
cmp    $0x2a,%ecx
mov    %al,-0x46(%rbp)
jne    138b <wildmatch+0x24b>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x2a,%eax
sete   %al
mov    %al,-0x46(%rbp)
mov    -0x46(%rbp),%al
test   $0x1,%al
jne    139b <wildmatch+0x25b>
jmp    13e2 <wildmatch+0x2a2>
mov    -0x39(%rbp),%al
mov    %al,-0x3b(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    0x1(%rax),%al
mov    %al,-0x39(%rbp)
movsbl -0x39(%rbp),%eax
cmp    $0x2a,%eax
jne    13dd <wildmatch+0x29d>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    0x1(%rax),%al
mov    %al,-0x39(%rbp)
jmp    13b6 <wildmatch+0x276>
jmp    1352 <wildmatch+0x212>
movsbl -0x39(%rbp),%eax
cmp    $0x2f,%eax
jne    1418 <wildmatch+0x2d8>
mov    -0x10(%rbp),%rdi
add    $0x1,%rdi
mov    -0x18(%rbp),%rsi
mov    -0x1c(%rbp),%edx
call   1030 <wildmatch@plt>
cmp    $0x0,%eax
jne    1418 <wildmatch+0x2d8>
movl   $0x0,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
jmp    144e <wildmatch+0x30e>
jmp    1422 <wildmatch+0x2e2>
movsbl -0x39(%rbp),%eax
cmp    $0x2a,%eax
jne    1449 <wildmatch+0x309>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    0x1(%rax),%al
mov    %al,-0x39(%rbp)
jmp    1422 <wildmatch+0x2e2>
jmp    144e <wildmatch+0x30e>
cmpl   $0x0,-0x40(%rbp)
jne    14b1 <wildmatch+0x371>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    14b1 <wildmatch+0x371>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     14b1 <wildmatch+0x371>
mov    -0x18(%rbp),%rax
cmp    -0x28(%rbp),%rax
je     14a5 <wildmatch+0x365>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     14b1 <wildmatch+0x371>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    14b1 <wildmatch+0x371>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
movsbl -0x39(%rbp),%eax
cmp    $0x0,%eax
jne    1540 <wildmatch+0x400>
cmpl   $0x0,-0x40(%rbp)
je     14e1 <wildmatch+0x3a1>
movsbl -0x3b(%rbp),%eax
cmp    $0x2f,%eax
jne    14e1 <wildmatch+0x3a1>
movl   $0x0,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     1534 <wildmatch+0x3f4>
mov    -0x1c(%rbp),%ecx
and    $0x8,%ecx
mov    $0x1,%al
cmp    $0x0,%ecx
mov    %al,-0x47(%rbp)
jne    151c <wildmatch+0x3dc>
mov    -0x18(%rbp),%rdi
mov    $0x2f,%esi
call   1040 <strchr@plt>
cmp    $0x0,%rax
sete   %al
mov    %al,-0x47(%rbp)
mov    -0x47(%rbp),%dl
mov    $0x1,%eax
xor    %ecx,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
movl   $0x0,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
movsbl -0x39(%rbp),%eax
cmp    $0x2f,%eax
jne    1623 <wildmatch+0x4e3>
cmpl   $0x0,-0x40(%rbp)
je     15dd <wildmatch+0x49d>
mov    -0x28(%rbp),%rdi
mov    $0x2f,%esi
call   1040 <strchr@plt>
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x38(%rbp)
jne    1580 <wildmatch+0x440>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
jmp    1585 <wildmatch+0x445>
cmpq   $0x0,-0x38(%rbp)
je     15d8 <wildmatch+0x498>
mov    -0x10(%rbp),%rdi
add    $0x1,%rdi
mov    -0x38(%rbp),%rsi
add    $0x1,%rsi
mov    -0x1c(%rbp),%edx
call   1030 <wildmatch@plt>
cmp    $0x0,%eax
jne    15bd <wildmatch+0x47d>
movl   $0x0,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x38(%rbp),%rdi
add    $0x1,%rdi
mov    $0x2f,%esi
call   1040 <strchr@plt>
mov    %rax,-0x38(%rbp)
jmp    1585 <wildmatch+0x445>
jmp    161e <wildmatch+0x4de>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     1619 <wildmatch+0x4d9>
mov    -0x18(%rbp),%rdi
mov    $0x2f,%esi
call   1040 <strchr@plt>
mov    %rax,-0x18(%rbp)
cmp    $0x0,%rax
jne    1614 <wildmatch+0x4d4>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
jmp    1619 <wildmatch+0x4d9>
jmp    161e <wildmatch+0x4de>
jmp    163e <wildmatch+0x4fe>
cmpl   $0x0,-0x40(%rbp)
je     1639 <wildmatch+0x4f9>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
jmp    163e <wildmatch+0x4fe>
jmp    1643 <wildmatch+0x503>
jmp    1648 <wildmatch+0x508>
mov    -0x18(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x3a(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
je     16b7 <wildmatch+0x577>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x1c(%rbp),%edx
and    $0xfffffffb,%edx
call   1030 <wildmatch@plt>
cmp    $0x0,%eax
jne    1685 <wildmatch+0x545>
movl   $0x0,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
movsbl -0x3a(%rbp),%eax
cmp    $0x2f,%eax
jne    16a6 <wildmatch+0x566>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     16a6 <wildmatch+0x566>
jmp    16b7 <wildmatch+0x577>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1648 <wildmatch+0x508>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    16df <wildmatch+0x59f>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    170a <wildmatch+0x5ca>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     170a <wildmatch+0x5ca>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1763 <wildmatch+0x623>
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     1763 <wildmatch+0x623>
mov    -0x18(%rbp),%rax
cmp    -0x28(%rbp),%rax
je     1757 <wildmatch+0x617>
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     1763 <wildmatch+0x623>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2f,%eax
jne    1763 <wildmatch+0x623>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rax
movsbl (%rax),%esi
mov    -0x1c(%rbp),%edx
lea    -0x30(%rbp),%rcx
call   1060 <rangematch@plt>
mov    %eax,%ecx
mov    %ecx,-0x4c(%rbp)
sub    $0xffffffff,%eax
je     17ae <wildmatch+0x66e>
jmp    178d <wildmatch+0x64d>
mov    -0x4c(%rbp),%eax
test   %eax,%eax
je     17cc <wildmatch+0x68c>
jmp    179d <wildmatch+0x65d>
mov    -0x4c(%rbp),%eax
sub    $0x1,%eax
je     17bf <wildmatch+0x67f>
jmp    17d8 <wildmatch+0x698>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1859 <wildmatch+0x719>
mov    -0x30(%rbp),%rax
mov    %rax,-0x10(%rbp)
jmp    17d8 <wildmatch+0x698>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    18b8 <wildmatch+0x778>
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
jne    184f <wildmatch+0x70f>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%al
mov    %al,-0x39(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
jne    184a <wildmatch+0x70a>
movb   $0x5c,-0x39(%rbp)
mov    -0x10(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
jne    1845 <wildmatch+0x705>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
jmp    184a <wildmatch+0x70a>
jmp    184f <wildmatch+0x70f>
jmp    1854 <wildmatch+0x714>
jmp    1859 <wildmatch+0x719>
movsbl -0x39(%rbp),%eax
mov    -0x18(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     18ac <wildmatch+0x76c>
mov    -0x1c(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     18a0 <wildmatch+0x760>
movzbl -0x39(%rbp),%edi
call   1050 <tolower@plt>
mov    %eax,-0x50(%rbp)
mov    -0x18(%rbp),%rax
movzbl (%rax),%edi
call   1050 <tolower@plt>
mov    %eax,%ecx
mov    -0x50(%rbp),%eax
cmp    %ecx,%eax
je     18ac <wildmatch+0x76c>
movl   $0x1,-0x4(%rbp)
jmp    18bd <wildmatch+0x77d>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    117a <wildmatch+0x3a>
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<wildmatch>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %edx,%r15d
mov    %rsi,%r14
mov    %edx,%eax
shr    $0x5,%eax
and    $0x2,%eax
or     %edx,%eax
mov    %eax,0x4(%rsp)
mov    %rsi,0x8(%rsp)
jmp    1187 <wildmatch+0x47>
testb  $0x2,0x4(%rsp)
jne    130c <wildmatch+0x1cc>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%r14
mov    %rbp,%rdi
lea    0x1(%rdi),%rbp
movzbl (%rdi),%ebx
movsbl %bl,%eax
cmp    $0x5a,%eax
jle    11d0 <wildmatch+0x90>
cmp    $0x5b,%eax
je     1220 <wildmatch+0xe0>
cmp    $0x5c,%eax
jne    12c0 <wildmatch+0x180>
test   $0x1,%r15b
jne    12c0 <wildmatch+0x180>
movzbl 0x1(%rdi),%ebx
test   %bl,%bl
je     12b0 <wildmatch+0x170>
add    $0x2,%rdi
mov    %rdi,%rbp
jmp    12c0 <wildmatch+0x180>
nopw   0x0(%rax,%rax,1)
cmp    $0x3f,%eax
jne    125b <wildmatch+0x11b>
movzbl (%r14),%eax
mov    $0x1,%r13b
cmp    $0x2f,%al
je     1169 <wildmatch+0x29>
test   %al,%al
je     130c <wildmatch+0x1cc>
test   $0x4,%r15b
je     1180 <wildmatch+0x40>
cmp    $0x2e,%al
jne    1180 <wildmatch+0x40>
cmp    0x8(%rsp),%r14
je     130c <wildmatch+0x1cc>
testb  $0x2,0x4(%rsp)
je     1180 <wildmatch+0x40>
cmpb   $0x2f,-0x1(%r14)
jne    1180 <wildmatch+0x40>
jmp    130c <wildmatch+0x1cc>
nopl   0x0(%rax)
movzbl (%r14),%eax
mov    $0x1,%r13b
cmp    $0x2f,%al
je     126d <wildmatch+0x12d>
test   %al,%al
je     130c <wildmatch+0x1cc>
test   $0x4,%r15b
je     1278 <wildmatch+0x138>
cmp    $0x2e,%al
jne    1278 <wildmatch+0x138>
cmp    0x8(%rsp),%r14
je     130c <wildmatch+0x1cc>
testb  $0x2,0x4(%rsp)
je     1278 <wildmatch+0x138>
cmpb   $0x2f,-0x1(%r14)
jne    1278 <wildmatch+0x138>
jmp    130c <wildmatch+0x1cc>
test   %eax,%eax
je     12f1 <wildmatch+0x1b1>
cmp    $0x2a,%eax
jne    12c0 <wildmatch+0x180>
jmp    131f <wildmatch+0x1df>
testb  $0x2,0x4(%rsp)
jne    130c <wildmatch+0x1cc>
movsbl %al,%esi
mov    %rbp,%rdi
mov    0x4(%rsp),%edx
lea    0x10(%rsp),%rcx
call   1060 <rangematch@plt>
cmp    $0xffffffff,%eax
je     12a0 <wildmatch+0x160>
cmp    $0x1,%eax
je     12a6 <wildmatch+0x166>
test   %eax,%eax
jne    1180 <wildmatch+0x40>
jmp    130c <wildmatch+0x1cc>
add    $0x1,%r14
jmp    12c0 <wildmatch+0x180>
mov    0x10(%rsp),%rbp
jmp    1180 <wildmatch+0x40>
mov    $0x5c,%bl
cmpb   $0x0,0x1(%r14)
je     1514 <wildmatch+0x3d4>
nopl   (%rax)
cmp    (%r14),%bl
je     1180 <wildmatch+0x40>
mov    $0x1,%r13b
test   $0x10,%r15b
je     130c <wildmatch+0x1cc>
movzbl %bl,%edi
call   1050 <tolower@plt>
mov    %eax,%r12d
movzbl (%r14),%edi
call   1050 <tolower@plt>
cmp    %eax,%r12d
je     1180 <wildmatch+0x40>
jmp    130c <wildmatch+0x1cc>
test   $0x8,%r15b
sete   %al
mov    (%r14),%cl
cmp    $0x2f,%cl
setne  %dl
or     %al,%dl
test   %cl,%cl
setne  %r13b
and    %dl,%r13b
movzbl %r13b,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x0(%rbp),%cl
mov    %r15d,%eax
shr    $0x6,%al
cmp    $0x2a,%cl
sete   %r12b
and    %al,%r12b
je     134f <wildmatch+0x20f>
mov    -0x1(%rdi),%bl
nopw   0x0(%rax,%rax,1)
movzbl 0x1(%rbp),%ecx
add    $0x1,%rbp
cmp    $0x2a,%cl
je     1340 <wildmatch+0x200>
jmp    139f <wildmatch+0x25f>
cmp    $0x2a,%cl
jne    13a9 <wildmatch+0x269>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl 0x1(%rbp),%ecx
add    $0x1,%rbp
cmp    $0x2a,%cl
je     1360 <wildmatch+0x220>
jmp    13a4 <wildmatch+0x264>
cmpb   $0x2a,0x1(%rbp)
jne    1482 <wildmatch+0x342>
cmpb   $0x2a,0x2(%rbp)
jne    1482 <wildmatch+0x342>
add    $0x1,%rbp
nopw   0x0(%rax,%rax,1)
movzbl 0x1(%rbp),%ecx
add    $0x1,%rbp
cmp    $0x2a,%cl
je     1390 <wildmatch+0x250>
mov    $0x2f,%bl
cmp    $0x2f,%cl
je     136f <wildmatch+0x22f>
test   %r12b,%r12b
jne    13d5 <wildmatch+0x295>
test   $0x4,%r15b
je     13d5 <wildmatch+0x295>
cmpb   $0x2e,(%r14)
jne    13d5 <wildmatch+0x295>
mov    $0x1,%r13b
cmp    0x8(%rsp),%r14
je     130c <wildmatch+0x1cc>
testb  $0x2,0x4(%rsp)
je     13d5 <wildmatch+0x295>
cmpb   $0x2f,-0x1(%r14)
je     130c <wildmatch+0x1cc>
cmp    $0x2f,%cl
je     1422 <wildmatch+0x2e2>
test   %cl,%cl
jne    1474 <wildmatch+0x334>
cmp    $0x2f,%bl
sete   %al
xor    %r13d,%r13d
test   $0x8,%r15b
jne    130c <wildmatch+0x1cc>
andl   $0x2,0x4(%rsp)
je     130c <wildmatch+0x1cc>
and    %al,%r12b
jne    130c <wildmatch+0x1cc>
mov    %r14,%rdi
mov    $0x2f,%esi
call   1040 <strchr@plt>
test   %rax,%rax
setne  %r13b
jmp    130c <wildmatch+0x1cc>
test   %r12b,%r12b
je     14a4 <wildmatch+0x364>
mov    0x8(%rsp),%rdi
mov    $0x2f,%esi
call   1040 <strchr@plt>
test   %rax,%rax
je     1514 <wildmatch+0x3d4>
mov    %rax,%r15
lea    0x1(%rbp),%r12
add    $0x1,%r15
mov    %r12,%rdi
mov    %r15,%rsi
mov    0x4(%rsp),%edx
call   1030 <wildmatch@plt>
test   %eax,%eax
je     149c <wildmatch+0x35c>
mov    %r15,%rdi
mov    $0x2f,%esi
call   1040 <strchr@plt>
mov    %rax,%r15
test   %rax,%rax
jne    1446 <wildmatch+0x306>
jmp    14c0 <wildmatch+0x380>
mov    $0x1,%r13b
test   %r12b,%r12b
jne    130c <wildmatch+0x1cc>
jmp    14c0 <wildmatch+0x380>
lea    0x1(%rbp),%rdi
mov    %r14,%rsi
mov    0x4(%rsp),%edx
call   1030 <wildmatch@plt>
mov    $0x2f,%cl
test   %eax,%eax
jne    13a4 <wildmatch+0x264>
xor    %r13d,%r13d
jmp    130c <wildmatch+0x1cc>
testb  $0x2,0x4(%rsp)
je     14c0 <wildmatch+0x380>
mov    %r14,%rdi
mov    $0x2f,%esi
call   1040 <strchr@plt>
mov    %rax,%r14
test   %rax,%rax
je     1514 <wildmatch+0x3d4>
mov    (%r14),%bl
mov    $0x1,%r13b
test   %bl,%bl
je     130c <wildmatch+0x1cc>
mov    0x4(%rsp),%r15d
and    $0xfffffffb,%r15d
jmp    14f1 <wildmatch+0x3b1>
nopl   0x0(%rax)
movzbl 0x1(%r14),%ebx
add    $0x1,%r14
test   %bl,%bl
je     130c <wildmatch+0x1cc>
mov    %rbp,%rdi
mov    %r14,%rsi
mov    %r15d,%edx
call   1030 <wildmatch@plt>
test   %eax,%eax
je     149c <wildmatch+0x35c>
testb  $0x2,0x4(%rsp)
je     14e0 <wildmatch+0x3a0>
cmp    $0x2f,%bl
jne    14e0 <wildmatch+0x3a0>
jmp    130c <wildmatch+0x1cc>
mov    $0x1,%r13b
jmp    130c <wildmatch+0x1cc>

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

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