int fnmatch_helper(pcur, scur, flags) const char **pcur;
const char **scur;
int flags;
{
  const int period = !(flags & 0x04);
  const int pathname = flags & 0x02;
  const int escape = !(flags & 0x01);
  const int nocase = flags & 0x08;
  const char *ptmp = 0;
  const char *stmp = 0;
  const char *p = *pcur;
  const char *s = *scur;
  if (period && *s == '.' && *(escape && *(p) == '\\' ? (p) + 1 : (p)) != '.')
    return *pcur = p, *scur = s, (1);
  ;
  while (1) {
    switch (*p) {
    case '*':
      do {
        p++;
      } while (*p == '*');
      if ((!*((escape && *(p) == '\\' ? (p) + 1 : (p))) ||
           (pathname && *((escape && *(p) == '\\' ? (p) + 1 : (p))) == '/'))) {
        p = (escape && *(p) == '\\' ? (p) + 1 : (p));
        return *pcur = p, *scur = s, (0);
        ;
      }
      if ((!*(s) || (pathname && *(s) == '/')))
        return *pcur = p, *scur = s, (1);
      ;
      ptmp = p;
      stmp = s;
      continue;
    case '?':
      if ((!*(s) || (pathname && *(s) == '/')))
        return *pcur = p, *scur = s, (1);
      ;
      p++;
      (++(s));
      continue;
    case '[': {
      const char *t;
      if ((!*(s) || (pathname && *(s) == '/')))
        return *pcur = p, *scur = s, (1);
      ;
      if ((t = bracket(p + 1, s, flags)) != 0) {
        p = t;
        (++(s));
        continue;
      }
      goto failed;
    }
    }
    p = (escape && *(p) == '\\' ? (p) + 1 : (p));
    if ((!*(s) || (pathname && *(s) == '/')))
      return *pcur = p, *scur = s,
             ((!*(p) || (pathname && *(p) == '/')) ? 0 : 1);
    ;
    if ((!*(p) || (pathname && *(p) == '/')))
      goto failed;
    if (((((unsigned char)((nocase && (isascii((int)(unsigned char)(*(p))) &&
                                       isupper((int)(unsigned char)(*(p))))
                                ? tolower(*(p))
                                : (*(p))))) -
          ((unsigned char)((nocase && (isascii((int)(unsigned char)(*(s))) &&
                                       isupper((int)(unsigned char)(*(s))))
                                ? tolower(*(s))
                                : (*(s))))))) != 0)
      goto failed;
    (++(p));
    (++(s));
    continue;
  failed:
    if (ptmp && stmp) {
      p = ptmp;
      (++(stmp));
      s = stmp;
      continue;
    }
    return *pcur = p, *scur = s, (1);
    ;
  }
}


x86 assembly (clang, -O0):
<fnmatch_helper>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x2,%eax
mov    %eax,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
and    $0x8,%eax
mov    %eax,-0x2c(%rbp)
movq   $0x0,-0x38(%rbp)
movq   $0x0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x48(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x50(%rbp)
cmpl   $0x0,-0x20(%rbp)
je     1239 <fnmatch_helper+0xf9>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1239 <fnmatch_helper+0xf9>
cmpl   $0x0,-0x28(%rbp)
je     11ff <fnmatch_helper+0xbf>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    11ff <fnmatch_helper+0xbf>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x60(%rbp)
jmp    1207 <fnmatch_helper+0xc7>
mov    -0x48(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x60(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
je     1239 <fnmatch_helper+0xf9>
mov    -0x48(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x50(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    1735 <fnmatch_helper+0x5f5>
jmp    123e <fnmatch_helper+0xfe>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x64(%rbp)
sub    $0x2a,%eax
je     1278 <fnmatch_helper+0x138>
jmp    1256 <fnmatch_helper+0x116>
mov    -0x64(%rbp),%eax
sub    $0x3f,%eax
je     13e1 <fnmatch_helper+0x2a1>
jmp    1267 <fnmatch_helper+0x127>
mov    -0x64(%rbp),%eax
sub    $0x5b,%eax
je     1447 <fnmatch_helper+0x307>
jmp    14d4 <fnmatch_helper+0x394>
jmp    127d <fnmatch_helper+0x13d>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
je     127d <fnmatch_helper+0x13d>
cmpl   $0x0,-0x28(%rbp)
je     12c4 <fnmatch_helper+0x184>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    12c4 <fnmatch_helper+0x184>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x70(%rbp)
jmp    12cc <fnmatch_helper+0x18c>
mov    -0x48(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x70(%rbp),%rax
cmpb   $0x0,(%rax)
je     1326 <fnmatch_helper+0x1e6>
cmpl   $0x0,-0x24(%rbp)
je     1383 <fnmatch_helper+0x243>
cmpl   $0x0,-0x28(%rbp)
je     130e <fnmatch_helper+0x1ce>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    130e <fnmatch_helper+0x1ce>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x78(%rbp)
jmp    1316 <fnmatch_helper+0x1d6>
mov    -0x48(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x78(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1383 <fnmatch_helper+0x243>
cmpl   $0x0,-0x28(%rbp)
je     1351 <fnmatch_helper+0x211>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    1351 <fnmatch_helper+0x211>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x80(%rbp)
jmp    1359 <fnmatch_helper+0x219>
mov    -0x48(%rbp),%rax
mov    %rax,-0x80(%rbp)
mov    -0x80(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x50(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1735 <fnmatch_helper+0x5f5>
mov    -0x50(%rbp),%rax
cmpb   $0x0,(%rax)
je     13aa <fnmatch_helper+0x26a>
cmpl   $0x0,-0x24(%rbp)
je     13cc <fnmatch_helper+0x28c>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    13cc <fnmatch_helper+0x28c>
mov    -0x48(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x50(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    1735 <fnmatch_helper+0x5f5>
mov    -0x48(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x50(%rbp),%rax
mov    %rax,-0x40(%rbp)
jmp    123e <fnmatch_helper+0xfe>
mov    -0x50(%rbp),%rax
cmpb   $0x0,(%rax)
je     1408 <fnmatch_helper+0x2c8>
cmpl   $0x0,-0x24(%rbp)
je     142a <fnmatch_helper+0x2ea>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    142a <fnmatch_helper+0x2ea>
mov    -0x48(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x50(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    1735 <fnmatch_helper+0x5f5>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    123e <fnmatch_helper+0xfe>
mov    -0x50(%rbp),%rax
cmpb   $0x0,(%rax)
je     146e <fnmatch_helper+0x32e>
cmpl   $0x0,-0x24(%rbp)
je     1490 <fnmatch_helper+0x350>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1490 <fnmatch_helper+0x350>
mov    -0x48(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x50(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x1,-0x4(%rbp)
jmp    1735 <fnmatch_helper+0x5f5>
mov    -0x48(%rbp),%rdi
add    $0x1,%rdi
mov    -0x50(%rbp),%rsi
mov    -0x1c(%rbp),%edx
mov    $0x0,%al
call   1030 <bracket@plt>
cltq
mov    %rax,-0x58(%rbp)
cmp    $0x0,%rax
je     14cf <fnmatch_helper+0x38f>
mov    -0x58(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    123e <fnmatch_helper+0xfe>
jmp    16e1 <fnmatch_helper+0x5a1>
cmpl   $0x0,-0x28(%rbp)
je     1502 <fnmatch_helper+0x3c2>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5c,%eax
jne    1502 <fnmatch_helper+0x3c2>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x88(%rbp)
jmp    150d <fnmatch_helper+0x3cd>
mov    -0x48(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    -0x88(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
cmpb   $0x0,(%rax)
je     153f <fnmatch_helper+0x3ff>
cmpl   $0x0,-0x24(%rbp)
je     15b6 <fnmatch_helper+0x476>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    15b6 <fnmatch_helper+0x476>
mov    -0x48(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x50(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x48(%rbp),%rcx
mov    $0x1,%al
cmpb   $0x0,(%rcx)
mov    %al,-0x89(%rbp)
je     159b <fnmatch_helper+0x45b>
xor    %eax,%eax
cmpl   $0x0,-0x24(%rbp)
mov    %al,-0x8a(%rbp)
je     158f <fnmatch_helper+0x44f>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
sete   %al
mov    %al,-0x8a(%rbp)
mov    -0x8a(%rbp),%al
mov    %al,-0x89(%rbp)
mov    -0x89(%rbp),%dl
mov    $0x1,%eax
xor    %ecx,%ecx
test   $0x1,%dl
cmovne %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    1735 <fnmatch_helper+0x5f5>
mov    -0x48(%rbp),%rax
cmpb   $0x0,(%rax)
je     15dd <fnmatch_helper+0x49d>
cmpl   $0x0,-0x24(%rbp)
je     15e2 <fnmatch_helper+0x4a2>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    15e2 <fnmatch_helper+0x4a2>
jmp    16e1 <fnmatch_helper+0x5a1>
cmpl   $0x0,-0x2c(%rbp)
je     162f <fnmatch_helper+0x4ef>
mov    -0x48(%rbp),%rax
movzbl (%rax),%edi
mov    $0x0,%al
call   1060 <isascii@plt>
cmp    $0x0,%eax
je     162f <fnmatch_helper+0x4ef>
mov    -0x48(%rbp),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     162f <fnmatch_helper+0x4ef>
mov    -0x48(%rbp),%rax
movsbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x90(%rbp)
jmp    163c <fnmatch_helper+0x4fc>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x90(%rbp)
mov    -0x90(%rbp),%eax
movzbl %al,%eax
mov    %eax,-0x94(%rbp)
cmpl   $0x0,-0x2c(%rbp)
je     1698 <fnmatch_helper+0x558>
mov    -0x50(%rbp),%rax
movzbl (%rax),%edi
mov    $0x0,%al
call   1060 <isascii@plt>
cmp    $0x0,%eax
je     1698 <fnmatch_helper+0x558>
mov    -0x50(%rbp),%rax
movzbl (%rax),%edi
call   1050 <isupper@plt>
cmp    $0x0,%eax
je     1698 <fnmatch_helper+0x558>
mov    -0x50(%rbp),%rax
movsbl (%rax),%edi
call   1040 <tolower@plt>
mov    %eax,-0x98(%rbp)
jmp    16a5 <fnmatch_helper+0x565>
mov    -0x50(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x98(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x98(%rbp),%ecx
movzbl %cl,%ecx
sub    %ecx,%eax
cmp    $0x0,%eax
je     16c4 <fnmatch_helper+0x584>
jmp    16e1 <fnmatch_helper+0x5a1>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    123e <fnmatch_helper+0xfe>
cmpq   $0x0,-0x38(%rbp)
je     1718 <fnmatch_helper+0x5d8>
cmpq   $0x0,-0x40(%rbp)
je     1718 <fnmatch_helper+0x5d8>
mov    -0x38(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,-0x50(%rbp)
jmp    123e <fnmatch_helper+0xfe>
mov    -0x48(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x50(%rbp),%rcx
mov    -0x18(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fnmatch_helper>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %edx,%r12d
mov    (%rdi),%rdx
mov    (%rsi),%rcx
test   $0x4,%r12b
jne    1183 <fnmatch_helper+0x43>
cmpb   $0x2e,(%rcx)
jne    1183 <fnmatch_helper+0x43>
mov    %rdx,%rbp
test   $0x1,%r12b
jne    1177 <fnmatch_helper+0x37>
xor    %ebp,%ebp
cmpb   $0x5c,(%rdx)
sete   %bpl
add    %rdx,%rbp
mov    $0x1,%al
cmpb   $0x2e,0x0(%rbp)
jne    13f5 <fnmatch_helper+0x2b5>
mov    %rdi,0x10(%rsp)
mov    %rsi,0x18(%rsp)
mov    %r12d,%eax
and    $0x2,%eax
shr    %eax
mov    %eax,0xc(%rsp)
xor    %r14d,%r14d
xor    %r13d,%r13d
mov    %r13,0x20(%rsp)
mov    %rdx,%rbx
mov    %rcx,%r13
jmp    11d0 <fnmatch_helper+0x90>
nopl   0x0(%rax)
movzbl %r15b,%eax
xor    %bpl,%al
je     12ce <fnmatch_helper+0x18e>
jmp    1320 <fnmatch_helper+0x1e0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl (%rbx),%eax
movsbl %al,%ecx
cmp    $0x3f,%ecx
je     12b0 <fnmatch_helper+0x170>
cmp    $0x5b,%ecx
je     12e0 <fnmatch_helper+0x1a0>
cmp    $0x2a,%ecx
je     134a <fnmatch_helper+0x20a>
test   $0x1,%r12b
sete   %cl
cmp    $0x5c,%al
sete   %al
and    %cl,%al
movzbl %al,%eax
add    %rax,%rbx
movzbl 0x0(%r13),%r15d
test   %r15b,%r15b
je     13b1 <fnmatch_helper+0x271>
test   $0x2,%r12b
je     1223 <fnmatch_helper+0xe3>
cmp    $0x2f,%r15b
je     13b1 <fnmatch_helper+0x271>
movzbl (%rbx),%ebp
test   %ebp,%ebp
je     1320 <fnmatch_helper+0x1e0>
test   $0x2,%r12b
je     123e <fnmatch_helper+0xfe>
cmp    $0x2f,%bpl
je     1320 <fnmatch_helper+0x1e0>
test   $0x8,%r12b
je     11b0 <fnmatch_helper+0x70>
mov    %ebp,%edi
xor    %eax,%eax
call   1060 <isascii@plt>
movzbl (%rbx),%ebp
test   %eax,%eax
je     126e <fnmatch_helper+0x12e>
mov    %ebp,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     126e <fnmatch_helper+0x12e>
movsbl %bpl,%edi
call   1040 <tolower@plt>
mov    %eax,%ebp
movzbl 0x0(%r13),%edi
xor    %eax,%eax
call   1060 <isascii@plt>
movzbl 0x0(%r13),%r15d
test   %eax,%eax
je     11b0 <fnmatch_helper+0x70>
movzbl %r15b,%edi
call   1050 <isupper@plt>
test   %eax,%eax
je     11b0 <fnmatch_helper+0x70>
movsbl %r15b,%edi
call   1040 <tolower@plt>
xor    %bpl,%al
je     12ce <fnmatch_helper+0x18e>
jmp    1320 <fnmatch_helper+0x1e0>
nopl   0x0(%rax,%rax,1)
movzbl 0x0(%r13),%ecx
mov    $0x1,%al
test   %cl,%cl
je     13e5 <fnmatch_helper+0x2a5>
test   $0x2,%r12b
je     12ce <fnmatch_helper+0x18e>
cmp    $0x2f,%cl
je     13e5 <fnmatch_helper+0x2a5>
add    $0x1,%rbx
add    $0x1,%r13
jmp    11d0 <fnmatch_helper+0x90>
nopl   0x0(%rax,%rax,1)
movzbl 0x0(%r13),%ecx
mov    $0x1,%al
test   %cl,%cl
je     13e5 <fnmatch_helper+0x2a5>
test   $0x2,%r12b
je     12fe <fnmatch_helper+0x1be>
cmp    $0x2f,%cl
je     13e5 <fnmatch_helper+0x2a5>
lea    0x1(%rbx),%rdi
mov    %r13,%rsi
mov    %r12d,%edx
xor    %eax,%eax
call   1030 <bracket@plt>
test   %eax,%eax
je     1320 <fnmatch_helper+0x1e0>
movslq %eax,%rbx
add    $0x1,%r13
jmp    11d0 <fnmatch_helper+0x90>
nop
mov    $0x1,%al
test   %r14,%r14
je     13e5 <fnmatch_helper+0x2a5>
mov    0x20(%rsp),%rsi
lea    0x1(%rsi),%rcx
mov    %r14,%rdx
test   %rsi,%rsi
mov    %rcx,0x20(%rsp)
jne    11a4 <fnmatch_helper+0x64>
jmp    13e5 <fnmatch_helper+0x2a5>
lea    0x1(%rbx),%rsi
xchg   %ax,%ax
add    $0x1,%rbx
movzbl (%rsi),%eax
add    $0x1,%rsi
cmp    $0x2a,%al
je     1350 <fnmatch_helper+0x210>
lea    -0x1(%rsi),%r14
cmp    $0x5c,%al
mov    %r14,%rcx
cmove  %rsi,%rcx
test   $0x1,%r12b
cmovne %r14,%rcx
mov    (%rcx),%al
test   %al,%al
je     13e0 <fnmatch_helper+0x2a0>
cmp    $0x2f,%al
sete   %al
test   %al,0xc(%rsp)
jne    13e0 <fnmatch_helper+0x2a0>
mov    0x0(%r13),%cl
mov    $0x1,%al
test   %cl,%cl
je     13e5 <fnmatch_helper+0x2a5>
cmp    $0x2f,%cl
sete   %bl
and    0xc(%rsp),%bl
mov    %r14,%rdx
mov    %r13,%rcx
cmp    $0x1,%bl
jne    119f <fnmatch_helper+0x5f>
add    $0xffffffffffffffff,%rsi
mov    %rsi,%rbx
jmp    13e5 <fnmatch_helper+0x2a5>
mov    0x10(%rsp),%rax
mov    %rbx,(%rax)
mov    0x18(%rsp),%rax
mov    %r13,(%rax)
mov    (%rbx),%cl
xor    %edx,%edx
test   %cl,%cl
setne  %dl
xor    %eax,%eax
cmp    $0x2f,%cl
setne  %al
test   $0x2,%r12b
cmove  %edx,%eax
test   %cl,%cl
cmove  %edx,%eax
jmp    13f5 <fnmatch_helper+0x2b5>
xor    %eax,%eax
mov    %rcx,%rbx
mov    0x10(%rsp),%rcx
mov    %rbx,(%rcx)
mov    0x18(%rsp),%rcx
mov    %r13,(%rcx)
movzbl %al,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @fnmatch_helper(i8** nocapture %0, i8** nocapture %1, i32 %2) {
%4 = and i32 %2, 4
%5 = icmp eq i32 %4, 0
%6 = and i32 %2, 2
%7 = and i32 %2, 1
%8 = icmp eq i32 %7, 0
%9 = and i32 %2, 8
%10 = load i8*, i8** %0
%11 = load i8*, i8** %1
br i1 %5, label %12, label %25
12: ; preds = %3
%13 = load i8, i8* %11
%14 = icmp eq i8 %13, 46
br i1 %14, label %15, label %25
15: ; preds = %12
br i1 %8, label %16, label %21
16: ; preds = %15
%17 = load i8, i8* %10
%18 = icmp eq i8 %17, 92
%19 = zext i1 %18 to i64
%20 = getelementptr i8, i8* %10, i64 %19
br label %21
21: ; preds = %16, %15
%22 = phi i8* [ %10, %15 ], [ %20, %16 ]
%23 = load i8, i8* %22
%24 = icmp eq i8 %23, 46
br i1 %24, label %25, label %163
25: ; preds = %21, %12, %3
%26 = icmp ne i32 %6, 0
%27 = icmp eq i32 %9, 0
%28 = icmp eq i32 %6, 0
%29 = xor i1 %28, true
%30 = xor i1 %28, true
br label %31
31: ; preds = %64, %25
%32 = phi i8* [ %48, %64 ], [ null, %25 ]
%33 = phi i8* [ %43, %64 ], [ null, %25 ]
%34 = phi i8* [ %48, %64 ], [ %10, %25 ]
%35 = phi i8* [ %43, %64 ], [ %11, %25 ]
%36 = icmp ne i8* %32, null
br label %37
37: ; preds = %155, %31
%38 = phi i8* [ %33, %31 ], [ %159, %155 ]
%39 = phi i8* [ %34, %31 ], [ %32, %155 ]
%40 = phi i8* [ %35, %31 ], [ %159, %155 ]
br label %41
41: ; preds = %75, %37
%42 = phi i8* [ %39, %37 ], [ %76, %75 ]
%43 = phi i8* [ %40, %37 ], [ %77, %75 ]
%44 = load i8, i8* %42
%45 = sext i8 %44 to i32
switch i32 %45, label %91 [
i32 42, label %46
i32 63, label %67
i32 91, label %78
]
46: ; preds = %41, %46
%47 = phi i8* [ %48, %46 ], [ %42, %41 ]
%48 = getelementptr inbounds i8, i8* %47, i64 1
%49 = load i8, i8* %48
%50 = icmp eq i8 %49, 42
br i1 %50, label %46, label %51
51: ; preds = %46
%52 = icmp eq i8 %49, 92
%53 = select i1 %8, i1 %52, i1 false
%54 = getelementptr inbounds i8, i8* %47, i64 2
%55 = select i1 %53, i8* %54, i8* %48
%56 = load i8, i8* %55
%57 = icmp eq i8 %56, 0
br i1 %57, label %160, label %58
58: ; preds = %51
%59 = icmp eq i8 %56, 47
%60 = select i1 %30, i1 %59, i1 false
br i1 %60, label %160, label %61
61: ; preds = %58
%62 = load i8, i8* %43
%63 = icmp eq i8 %62, 0
br i1 %63, label %160, label %64
64: ; preds = %61
%65 = icmp eq i8 %62, 47
%66 = select i1 %29, i1 %65, i1 false
br i1 %66, label %160, label %31
67: ; preds = %41
%68 = load i8, i8* %43
%69 = icmp eq i8 %68, 0
br i1 %69, label %160, label %70
70: ; preds = %67
%71 = icmp eq i8 %68, 47
%72 = select i1 %26, i1 %71, i1 false
br i1 %72, label %160, label %73
73: ; preds = %70
%74 = getelementptr inbounds i8, i8* %42, i64 1
br label %75
75: ; preds = %73, %153, %88
%76 = phi i8* [ %154, %153 ], [ %90, %88 ], [ %74, %73 ]
%77 = getelementptr inbounds i8, i8* %43, i64 1
br label %41
78: ; preds = %41
%79 = load i8, i8* %43
%80 = icmp eq i8 %79, 0
br i1 %80, label %160, label %81
81: ; preds = %78
%82 = icmp eq i8 %79, 47
%83 = select i1 %26, i1 %82, i1 false
br i1 %83, label %160, label %84
84: ; preds = %81
%85 = getelementptr inbounds i8, i8* %42, i64 1
%86 = tail call i32 (i8*, i8*, i32, ...) bitcast (i32 (...)* @bracket to i32 (i8*, i8*, i32, ...)*)(i8* %85, i8* %43, i32 %2)
%87 = icmp eq i32 %86, 0
br i1 %87, label %155, label %88
88: ; preds = %84
%89 = sext i32 %86 to i64
%90 = inttoptr i64 %89 to i8*
br label %75
91: ; preds = %41
%92 = icmp eq i8 %44, 92
%93 = select i1 %8, i1 %92, i1 false
%94 = zext i1 %93 to i64
%95 = getelementptr i8, i8* %42, i64 %94
%96 = load i8, i8* %43
%97 = icmp eq i8 %96, 0
br i1 %97, label %101, label %98
98: ; preds = %91
%99 = icmp eq i8 %96, 47
%100 = select i1 %26, i1 %99, i1 false
br i1 %100, label %101, label %108
101: ; preds = %98, %91
store i8* %95, i8** %0
store i8* %43, i8** %1
%102 = load i8, i8* %95
%103 = icmp eq i8 %102, 0
%104 = or i1 %103, %28
%105 = xor i1 %103, true
%106 = icmp ne i8 %102, 47
%107 = select i1 %104, i1 %105, i1 %106
br label %163
108: ; preds = %98
%109 = load i8, i8* %95
%110 = icmp eq i8 %109, 0
br i1 %110, label %155, label %111
111: ; preds = %108
%112 = icmp eq i8 %109, 47
%113 = select i1 %26, i1 %112, i1 false
br i1 %113, label %155, label %114
114: ; preds = %111
%115 = zext i8 %109 to i32
br i1 %27, label %143, label %116
116: ; preds = %114
%117 = tail call i32 (i32, ...) bitcast (i32 (...)* @isascii to i32 (i32, ...)*)(i32 %115)
%118 = icmp eq i32 %117, 0
%119 = load i8, i8* %95
br i1 %118, label %127, label %120
120: ; preds = %116
%121 = zext i8 %119 to i32
%122 = tail call i32 @isupper(i32 %121)
%123 = icmp eq i32 %122, 0
br i1 %123, label %127, label %124
124: ; preds = %120
%125 = sext i8 %119 to i32
%126 = tail call i32 @tolower(i32 %125)
br label %129
127: ; preds = %116, %120
%128 = zext i8 %119 to i32
br label %129
129: ; preds = %127, %124
%130 = phi i32 [ %126, %124 ], [ %128, %127 ]
%131 = load i8, i8* %43
%132 = zext i8 %131 to i32
%133 = tail call i32 (i32, ...) bitcast (i32 (...)* @isascii to i32 (i32, ...)*)(i32 %132)
%134 = icmp eq i32 %133, 0
%135 = load i8, i8* %43
br i1 %134, label %143, label %136
136: ; preds = %129
%137 = zext i8 %135 to i32
%138 = tail call i32 @isupper(i32 %137)
%139 = icmp eq i32 %138, 0
br i1 %139, label %143, label %140
140: ; preds = %136
%141 = sext i8 %135 to i32
%142 = tail call i32 @tolower(i32 %141)
br label %147
143: ; preds = %129, %114, %136
%144 = phi i8 [ %135, %136 ], [ %96, %114 ], [ %135, %129 ]
%145 = phi i32 [ %130, %136 ], [ %115, %114 ], [ %130, %129 ]
%146 = zext i8 %144 to i32
br label %147
147: ; preds = %143, %140
%148 = phi i32 [ %130, %140 ], [ %145, %143 ]
%149 = phi i32 [ %142, %140 ], [ %146, %143 ]
%150 = xor i32 %149, %148
%151 = and i32 %150, 255
%152 = icmp eq i32 %151, 0
br i1 %152, label %153, label %155
153: ; preds = %147
%154 = getelementptr inbounds i8, i8* %95, i64 1
br label %75
155: ; preds = %84, %111, %147, %108
%156 = phi i8* [ %95, %147 ], [ %95, %108 ], [ %95, %111 ], [ %42, %84 ]
%157 = icmp ne i8* %38, null
%158 = select i1 %36, i1 %157, i1 false
%159 = getelementptr inbounds i8, i8* %38, i64 1
br i1 %158, label %37, label %160
160: ; preds = %61, %64, %51, %58, %155, %81, %78, %67, %70
%161 = phi i8* [ %42, %70 ], [ %42, %67 ], [ %42, %78 ], [ %42, %81 ], [ %156, %155 ], [ %48, %61 ], [ %48, %64 ], [ %55, %51 ], [ %55, %58 ]
%162 = phi i1 [ true, %70 ], [ true, %67 ], [ true, %78 ], [ true, %81 ], [ true, %155 ], [ true, %61 ], [ true, %64 ], [ false, %51 ], [ false, %58 ]
store i8* %161, i8** %0
store i8* %43, i8** %1
br label %163
163: ; preds = %101, %160, %21
%164 = phi i1 [ true, %21 ], [ %107, %101 ], [ %162, %160 ]
%165 = zext i1 %164 to i32
ret i32 %165
}