int wild_match(const char *ma, const char *na) {
  const char *mask = ma, *nask = na, *m = ma, *n = na, *mlast;
  int close = 0, q = 0, wild = 0;
  if ((ma == (char *)0) || (na == (char *)0))
    return 0;
  if ((!*ma) || (!*na))
    return 0;
  while (*m)
    m++;
  while (*n)
    n++;
  m--;
  n--;
  mlast = m;
  while (((((((*m) >= 'A') && ((*m) <= 'Z')) ? ((*m) - 'A' + 'a') : *m) ==
           ((((*n) >= 'A') && ((*n) <= 'Z')) ? ((*n) - 'A' + 'a') : *n)) ||
          ((*m == '?') && (m[-1] != '\\'))) &&
         (m != ma) && (n != na) && !((*m == '*') && (m[-1] != '\\'))) {
    if (!((*m == '?') && (m[-1] != '\\')))
      close++;
    m--;
    n--;
    if (*m == '\\')
      m--;
  }
  if ((*m != '*') || (*(m - 1) == '\\')) {
    if ((m == ma) && (n == na) &&
        (((((*m) >= 'A') && ((*m) <= 'Z')) ? ((*m) - 'A' + 'a') : *m) ==
         ((((*n) >= 'A') && ((*n) <= 'Z')) ? ((*n) - 'A' + 'a') : *n)))
      return close + 1;
    if ((m == ma) || (n == na))
      return 0;
    return 0;
  }
  while (1) {
    q = (m > mask) ? (*(m - 1) == '\\') : 0;
    if (m < mask) {
      if (n < nask)
        return close + 1;
      for (m++; (m < mlast) ? (*m == '?') : 0; m++)
        ;
      if ((*m == '*') && (m < mlast))
        return close + 1;
      if (wild) {
        m = ma;
        n = --na;
      } else
        return 0;
    } else if (n < nask) {
      while ((*m == '*') && (m >= mask))
        m--;
      return (m < mask) ? close + 1 : 0;
    }
    q = (m > mask) ? (*(m - 1) == '\\') : 0;
    if ((*m == '*') && (!q)) {
      while ((m > mask) ? (*m == '*') : 0)
        m--;
      if (*m == '\\') {
        m++;
        q = 1;
      }
      wild = 1;
      ma = m;
      na = n;
    }
    if ((((((*m) >= 'A') && ((*m) <= 'Z')) ? ((*m) - 'A' + 'a') : *m) !=
         ((((*n) >= 'A') && ((*n) <= 'Z')) ? ((*n) - 'A' + 'a') : *n)) &&
        ((*m != '?') || q)) {
      if (wild) {
        m = ma;
        n = --na;
        q = (m > mask) ? (*(m - 1) == '\\') : 0;
      } else
        return 0;
    } else {
      if ((*m != '?') || q)
        close++;
      if (*m)
        m--;
      if (*n)
        n--;
      if (q)
        m--;
    }
  }
}


x86 assembly (clang, -O0):
<wild_match>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x38(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     115b <wild_match+0x5b>
cmpq   $0x0,-0x18(%rbp)
jne    1167 <wild_match+0x67>
movl   $0x0,-0x4(%rbp)
jmp    18d5 <wild_match+0x7d5>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     1181 <wild_match+0x81>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
jne    118d <wild_match+0x8d>
movl   $0x0,-0x4(%rbp)
jmp    18d5 <wild_match+0x7d5>
jmp    1192 <wild_match+0x92>
mov    -0x30(%rbp),%rax
cmpb   $0x0,(%rax)
je     11b0 <wild_match+0xb0>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1192 <wild_match+0x92>
jmp    11b5 <wild_match+0xb5>
mov    -0x38(%rbp),%rax
cmpb   $0x0,(%rax)
je     11d3 <wild_match+0xd3>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    11b5 <wild_match+0xb5>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jl     1228 <wild_match+0x128>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5a,%eax
jg     1228 <wild_match+0x128>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
sub    $0x41,%eax
add    $0x61,%eax
mov    %eax,-0x50(%rbp)
jmp    1232 <wild_match+0x132>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jl     126d <wild_match+0x16d>
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5a,%eax
jg     126d <wild_match+0x16d>
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
sub    $0x41,%eax
add    $0x61,%eax
mov    %eax,-0x58(%rbp)
jmp    1277 <wild_match+0x177>
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x58(%rbp)
mov    -0x54(%rbp),%eax
mov    -0x58(%rbp),%ecx
cmp    %ecx,%eax
je     12b0 <wild_match+0x1b0>
mov    -0x30(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x3f,%ecx
mov    %al,-0x59(%rbp)
jne    1304 <wild_match+0x204>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%ecx
xor    %eax,%eax
cmp    $0x5c,%ecx
mov    %al,-0x59(%rbp)
je     1304 <wild_match+0x204>
mov    -0x30(%rbp),%rcx
xor    %eax,%eax
cmp    -0x10(%rbp),%rcx
mov    %al,-0x59(%rbp)
je     1304 <wild_match+0x204>
mov    -0x38(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x59(%rbp)
je     1304 <wild_match+0x204>
mov    -0x30(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x2a,%ecx
mov    %al,-0x5a(%rbp)
jne    12fc <wild_match+0x1fc>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x5c,%eax
setne  %al
mov    %al,-0x5a(%rbp)
mov    -0x5a(%rbp),%al
xor    $0xff,%al
mov    %al,-0x59(%rbp)
mov    -0x59(%rbp),%al
test   $0x1,%al
jne    1314 <wild_match+0x214>
jmp    1377 <wild_match+0x277>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3f,%eax
jne    1335 <wild_match+0x235>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x5c,%eax
jne    133e <wild_match+0x23e>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    1372 <wild_match+0x272>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
jmp    11f3 <wild_match+0xf3>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    1398 <wild_match+0x298>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x5c,%eax
jne    1488 <wild_match+0x388>
mov    -0x30(%rbp),%rax
cmp    -0x10(%rbp),%rax
jne    1454 <wild_match+0x354>
mov    -0x38(%rbp),%rax
cmp    -0x18(%rbp),%rax
jne    1454 <wild_match+0x354>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jl     13e9 <wild_match+0x2e9>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5a,%eax
jg     13e9 <wild_match+0x2e9>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
sub    $0x41,%eax
add    $0x61,%eax
mov    %eax,-0x60(%rbp)
jmp    13f3 <wild_match+0x2f3>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jl     142e <wild_match+0x32e>
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5a,%eax
jg     142e <wild_match+0x32e>
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
sub    $0x41,%eax
add    $0x61,%eax
mov    %eax,-0x68(%rbp)
jmp    1438 <wild_match+0x338>
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x68(%rbp)
mov    -0x64(%rbp),%eax
mov    -0x68(%rbp),%ecx
cmp    %ecx,%eax
jne    1454 <wild_match+0x354>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    18d5 <wild_match+0x7d5>
mov    -0x30(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     1470 <wild_match+0x370>
mov    -0x38(%rbp),%rax
cmp    -0x18(%rbp),%rax
jne    147c <wild_match+0x37c>
movl   $0x0,-0x4(%rbp)
jmp    18d5 <wild_match+0x7d5>
movl   $0x0,-0x4(%rbp)
jmp    18d5 <wild_match+0x7d5>
jmp    148d <wild_match+0x38d>
mov    -0x30(%rbp),%rax
cmp    -0x20(%rbp),%rax
jbe    14b6 <wild_match+0x3b6>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x5c,%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x6c(%rbp)
jmp    14c0 <wild_match+0x3c0>
xor    %eax,%eax
mov    %eax,-0x6c(%rbp)
jmp    14c0 <wild_match+0x3c0>
mov    -0x6c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    15b4 <wild_match+0x4b4>
mov    -0x38(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    14f0 <wild_match+0x3f0>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    18d5 <wild_match+0x7d5>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x40(%rbp),%rax
jae    1524 <wild_match+0x424>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3f,%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x70(%rbp)
jmp    152e <wild_match+0x42e>
xor    %eax,%eax
mov    %eax,-0x70(%rbp)
jmp    152e <wild_match+0x42e>
mov    -0x70(%rbp),%eax
cmp    $0x0,%eax
je     1550 <wild_match+0x450>
jmp    153f <wild_match+0x43f>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    14fc <wild_match+0x3fc>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    157c <wild_match+0x47c>
mov    -0x30(%rbp),%rax
cmp    -0x40(%rbp),%rax
jae    157c <wild_match+0x47c>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4(%rbp)
jmp    18d5 <wild_match+0x7d5>
cmpl   $0x0,-0x4c(%rbp)
je     15a3 <wild_match+0x4a3>
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x18(%rbp)
mov    %rax,-0x38(%rbp)
jmp    15af <wild_match+0x4af>
movl   $0x0,-0x4(%rbp)
jmp    18d5 <wild_match+0x7d5>
jmp    1641 <wild_match+0x541>
mov    -0x38(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    163c <wild_match+0x53c>
jmp    15c7 <wild_match+0x4c7>
mov    -0x30(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x2a,%ecx
mov    %al,-0x71(%rbp)
jne    15ea <wild_match+0x4ea>
mov    -0x30(%rbp),%rax
cmp    -0x20(%rbp),%rax
setae  %al
mov    %al,-0x71(%rbp)
mov    -0x71(%rbp),%al
test   $0x1,%al
jne    15fa <wild_match+0x4fa>
jmp    160b <wild_match+0x50b>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
jmp    15c7 <wild_match+0x4c7>
mov    -0x30(%rbp),%rax
cmp    -0x20(%rbp),%rax
jae    1627 <wild_match+0x527>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    1631 <wild_match+0x531>
xor    %eax,%eax
mov    %eax,-0x78(%rbp)
jmp    1631 <wild_match+0x531>
mov    -0x78(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    18d5 <wild_match+0x7d5>
jmp    1641 <wild_match+0x541>
mov    -0x30(%rbp),%rax
cmp    -0x20(%rbp),%rax
jbe    166a <wild_match+0x56a>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x5c,%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x7c(%rbp)
jmp    1674 <wild_match+0x574>
xor    %eax,%eax
mov    %eax,-0x7c(%rbp)
jmp    1674 <wild_match+0x574>
mov    -0x7c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
jne    1722 <wild_match+0x622>
cmpl   $0x0,-0x48(%rbp)
jne    1722 <wild_match+0x622>
jmp    1699 <wild_match+0x599>
mov    -0x30(%rbp),%rax
cmp    -0x20(%rbp),%rax
jbe    16c1 <wild_match+0x5c1>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x80(%rbp)
jmp    16cb <wild_match+0x5cb>
xor    %eax,%eax
mov    %eax,-0x80(%rbp)
jmp    16cb <wild_match+0x5cb>
mov    -0x80(%rbp),%eax
cmp    $0x0,%eax
je     16e8 <wild_match+0x5e8>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
jmp    1699 <wild_match+0x599>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    170b <wild_match+0x60b>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
movl   $0x1,-0x48(%rbp)
movl   $0x1,-0x4c(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jl     175a <wild_match+0x65a>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5a,%eax
jg     175a <wild_match+0x65a>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
sub    $0x41,%eax
add    $0x61,%eax
mov    %eax,-0x84(%rbp)
jmp    1767 <wild_match+0x667>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
mov    %eax,-0x88(%rbp)
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jl     17ab <wild_match+0x6ab>
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5a,%eax
jg     17ab <wild_match+0x6ab>
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
sub    $0x41,%eax
add    $0x61,%eax
mov    %eax,-0x8c(%rbp)
jmp    17b8 <wild_match+0x6b8>
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x88(%rbp),%eax
mov    -0x8c(%rbp),%ecx
cmp    %ecx,%eax
je     1860 <wild_match+0x760>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3f,%eax
jne    17e6 <wild_match+0x6e6>
cmpl   $0x0,-0x48(%rbp)
je     1860 <wild_match+0x760>
cmpl   $0x0,-0x4c(%rbp)
je     184f <wild_match+0x74f>
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x18(%rbp)
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x20(%rbp),%rax
jbe    1834 <wild_match+0x734>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x5c,%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x90(%rbp)
jmp    1841 <wild_match+0x741>
xor    %eax,%eax
mov    %eax,-0x90(%rbp)
jmp    1841 <wild_match+0x741>
mov    -0x90(%rbp),%eax
mov    %eax,-0x48(%rbp)
jmp    185b <wild_match+0x75b>
movl   $0x0,-0x4(%rbp)
jmp    18d5 <wild_match+0x7d5>
jmp    18d0 <wild_match+0x7d0>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3f,%eax
jne    187a <wild_match+0x77a>
cmpl   $0x0,-0x48(%rbp)
je     1883 <wild_match+0x783>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
mov    -0x30(%rbp),%rax
cmpb   $0x0,(%rax)
je     189c <wild_match+0x79c>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
mov    -0x38(%rbp),%rax
cmpb   $0x0,(%rax)
je     18b5 <wild_match+0x7b5>
mov    -0x38(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x38(%rbp)
cmpl   $0x0,-0x48(%rbp)
je     18cb <wild_match+0x7cb>
mov    -0x30(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x30(%rbp)
jmp    18d0 <wild_match+0x7d0>
jmp    148d <wild_match+0x38d>
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<wild_match>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
xor    %eax,%eax
test   %rdi,%rdi
je     13c6 <wild_match+0x2c6>
test   %rsi,%rsi
je     13c6 <wild_match+0x2c6>
cmpb   $0x0,(%rdi)
je     13c6 <wild_match+0x2c6>
cmpb   $0x0,(%rsi)
je     13c6 <wild_match+0x2c6>
lea    -0x1(%rdi),%r12
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmpb   $0x0,0x2(%r12)
lea    0x1(%r12),%r12
jne    1140 <wild_match+0x40>
mov    $0xffffffffffffffff,%rcx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmpb   $0x0,0x2(%rsi,%rcx,1)
lea    0x1(%rcx),%rcx
jne    1160 <wild_match+0x60>
xor    %r8d,%r8d
mov    %r12,%r15
jmp    118f <wild_match+0x8f>
movzbl -0x1(%r15),%ebx
add    $0x1,%r8d
mov    %ebx,%eax
xor    %edx,%edx
cmp    $0x5c,%al
sete   %dl
not    %rdx
add    %rdx,%r15
add    $0xffffffffffffffff,%rcx
movsbl (%r15),%r11d
lea    -0x41(%r11),%r9d
lea    0x20(%r11),%eax
cmp    $0x1a,%r9b
cmovae %r11d,%eax
movsbl (%rsi,%rcx,1),%edx
lea    -0x41(%rdx),%ebx
lea    0x20(%rdx),%r10d
cmp    $0x1a,%bl
cmovae %edx,%r10d
cmp    %r10d,%eax
jne    11e0 <wild_match+0xe0>
cmp    %rdi,%r15
je     1214 <wild_match+0x114>
test   %rcx,%rcx
je     1214 <wild_match+0x114>
cmp    $0x2a,%r11b
je     1205 <wild_match+0x105>
cmp    $0x3f,%r11b
jne    1173 <wild_match+0x73>
movzbl -0x1(%r15),%eax
mov    $0x5c,%bl
cmp    $0x5c,%al
je     1178 <wild_match+0x78>
jmp    117e <wild_match+0x7e>
nopl   (%rax)
cmp    $0x3f,%r11b
jne    1214 <wild_match+0x114>
mov    $0x3f,%r11d
test   %rcx,%rcx
je     1227 <wild_match+0x127>
cmp    %rdi,%r15
je     1227 <wild_match+0x127>
movzbl -0x1(%r15),%eax
cmp    $0x5c,%al
jne    117e <wild_match+0x7e>
jmp    1227 <wild_match+0x127>
mov    $0x5c,%bl
cmpb   $0x5c,-0x1(%r15)
je     1178 <wild_match+0x78>
jmp    121a <wild_match+0x11a>
cmp    $0x2a,%r11b
jne    1227 <wild_match+0x127>
cmpb   $0x5c,-0x1(%r15)
mov    $0x2a,%r11d
jne    1259 <wild_match+0x159>
xor    %eax,%eax
cmp    %rdi,%r15
jne    13c6 <wild_match+0x2c6>
test   %rcx,%rcx
jne    13c6 <wild_match+0x2c6>
lea    0x20(%r11),%ecx
cmp    $0x1a,%r9b
cmovae %r11d,%ecx
add    $0x1,%r8d
xor    %eax,%eax
cmp    %r10d,%ecx
cmove  %r8d,%eax
jmp    13c6 <wild_match+0x2c6>
add    %rsi,%rcx
xor    %r9d,%r9d
mov    %rsi,%r11
mov    %rdi,%r10
cmp    %rdi,%r15
jae    12ae <wild_match+0x1ae>
cmp    %rsi,%rcx
jb     13bf <wild_match+0x2bf>
add    $0x1,%r15
nopw   0x0(%rax,%rax,1)
cmp    %r12,%r15
jae    1299 <wild_match+0x199>
movzbl (%r15),%eax
add    $0x1,%r15
cmp    $0x3f,%al
je     1280 <wild_match+0x180>
cmp    $0x2a,%al
je     13bf <wild_match+0x2bf>
test   %r9d,%r9d
je     13d1 <wild_match+0x2d1>
add    $0xffffffffffffffff,%r11
mov    %r10,%r15
mov    %r11,%rcx
jmp    12b7 <wild_match+0x1b7>
cmp    %rsi,%rcx
jb     139a <wild_match+0x29a>
cmp    %rdi,%r15
jbe    12f8 <wild_match+0x1f8>
mov    -0x1(%r15),%al
mov    (%r15),%r13b
cmp    $0x5c,%al
sete   %r14b
cmp    $0x2a,%r13b
jne    132b <wild_match+0x22b>
cmp    $0x5c,%al
je     132b <wild_match+0x22b>
add    $0xffffffffffffffff,%r15
nopw   0x0(%rax,%rax,1)
cmp    %rdi,%r15
jbe    1308 <wild_match+0x208>
movzbl (%r15),%edx
add    $0xffffffffffffffff,%r15
cmp    $0x2a,%dl
je     12e0 <wild_match+0x1e0>
add    $0x1,%r15
jmp    130d <wild_match+0x20d>
mov    (%r15),%r13b
mov    $0x2a,%dl
cmp    $0x2a,%r13b
je     130d <wild_match+0x20d>
xor    %r14d,%r14d
jmp    132b <wild_match+0x22b>
mov    (%rdi),%dl
mov    %rdi,%r15
xor    %r14d,%r14d
cmp    $0x5c,%dl
sete   %r14b
lea    (%r15,%r14,1),%r10
mov    (%r15,%r14,1),%r13b
mov    $0x1,%r9d
mov    %rcx,%r11
mov    %r10,%r15
movsbl %r13b,%eax
lea    -0x41(%rax),%edx
lea    0x20(%rax),%ebp
cmp    $0x1a,%dl
cmovae %eax,%ebp
movsbl (%rcx),%edx
lea    -0x41(%rdx),%eax
lea    0x20(%rdx),%ebx
cmp    $0x1a,%al
cmovae %edx,%ebx
cmp    %ebx,%ebp
je     136f <wild_match+0x26f>
cmp    $0x3f,%r13b
setne  %al
or     %r14b,%al
cmp    $0x1,%al
jne    136f <wild_match+0x26f>
test   %r9d,%r9d
je     13d1 <wild_match+0x2d1>
add    $0xffffffffffffffff,%r11
mov    %r10,%r15
mov    %r11,%rcx
jmp    1265 <wild_match+0x165>
cmp    $0x3f,%r13b
setne  %al
or     %r14b,%al
movzbl %al,%eax
add    %eax,%r8d
cmp    $0x1,%r13b
adc    $0xffffffffffffffff,%r15
cmp    $0x1,%dl
adc    $0xffffffffffffffff,%rcx
movzbl %r14b,%eax
sub    %rax,%r15
jmp    1265 <wild_match+0x165>
lea    -0x1(%r15),%rcx
cmp    %rdi,%r15
jb     13ac <wild_match+0x2ac>
cmpb   $0x2a,(%r15)
mov    %rcx,%r15
je     139a <wild_match+0x29a>
add    $0x1,%rcx
add    $0x1,%r8d
xor    %eax,%eax
cmp    %rdi,%rcx
cmovb  %r8d,%eax
jmp    13c6 <wild_match+0x2c6>
add    $0x1,%r8d
mov    %r8d,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %eax,%eax
jmp    13c6 <wild_match+0x2c6>

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

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