int lo_pattern_match(const char *str, const char *p) {
  int negate;
  int match;
  char c;
  while (*p) {
    if (!*str && *p != '*')
      return 0;
    switch (c = *p++) {
    case '*':
      while (*p == '*' && *p != '/')
        p++;
      if (!*p)
        return 1;
      if (*p != '?' && *p != '[' && *p != '{')
        while (*str && *p != *str)
          str++;
      while (*str) {
        if (lo_pattern_match(str, p))
          return 1;
        str++;
      }
      return 0;
    case '?':
      if (*str)
        break;
      return 0;
    case '[':
      if (*p != '!')
        negate = 0;
      else {
        negate = 1;
        p++;
      }
      match = 0;
      while (!match && (c = *p++)) {
        if (!*p)
          return 0;
        if (*p == '-') {
          if (!*++p)
            return 0;
          if (*p != ']') {
            if (*str == c || *str == *p || (*str > c && *str < *p))
              match = 1;
          } else {
            if (*str >= c)
              match = 1;
            break;
          }
        } else {
          if (c == *str)
            match = 1;
          if (*p != ']') {
            if (*p == *str)
              match = 1;
          } else
            break;
        }
      }
      if (negate == match)
        return 0;
      while (*p && *p != ']')
        p++;
      if (!*p++)
        return 0;
      break;
    case '{': {
      const char *place = str;
      const char *remainder = p;
      while (*remainder && *remainder != '}')
        remainder++;
      if (!*remainder++)
        return 0;
      c = *p++;
      while (c) {
        if (c == ',') {
          if (lo_pattern_match(str, remainder)) {
            return 1;
          } else {
            str = place;
            if (!*p++)
              return 0;
          }
        } else if (c == '}') {
          if (!*p && !*str)
            return 1;
          str--;
          break;
        } else if (c == *str) {
          str++;
          if (!*str && *remainder)
            return 0;
        } else {
          str = place;
          while (*p != ',' && *p != '}' && *p)
            p++;
          if (*p == ',')
            p++;
          else if (*p == '}') {
            return 0;
          }
        }
        c = *p++;
      }
    } break;
    default:
      if (c != *str)
        return 0;
      break;
    }
    str++;
  }
  return !*str;
}


x86 assembly (clang, -O0):
<lo_pattern_match>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
je     17db <lo_pattern_match+0x6cb>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
jne    1156 <lo_pattern_match+0x46>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2a,%eax
je     1156 <lo_pattern_match+0x46>
movl   $0x0,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
mov    %al,%cl
mov    %cl,-0x21(%rbp)
sub    $0x2a,%eax
je     11b1 <lo_pattern_match+0xa1>
jmp    117e <lo_pattern_match+0x6e>
mov    -0x3c(%rbp),%eax
sub    $0x3f,%eax
je     12ec <lo_pattern_match+0x1dc>
jmp    118f <lo_pattern_match+0x7f>
mov    -0x3c(%rbp),%eax
sub    $0x5b,%eax
je     130a <lo_pattern_match+0x1fa>
jmp    11a0 <lo_pattern_match+0x90>
mov    -0x3c(%rbp),%eax
sub    $0x7b,%eax
je     1546 <lo_pattern_match+0x436>
jmp    17a6 <lo_pattern_match+0x696>
jmp    11b6 <lo_pattern_match+0xa6>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x2a,%ecx
mov    %al,-0x3d(%rbp)
jne    11db <lo_pattern_match+0xcb>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
setne  %al
mov    %al,-0x3d(%rbp)
mov    -0x3d(%rbp),%al
test   $0x1,%al
jne    11eb <lo_pattern_match+0xdb>
jmp    11fc <lo_pattern_match+0xec>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    11b6 <lo_pattern_match+0xa6>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
jne    1215 <lo_pattern_match+0x105>
movl   $0x1,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3f,%eax
je     129b <lo_pattern_match+0x18b>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5b,%eax
je     129b <lo_pattern_match+0x18b>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7b,%eax
je     129b <lo_pattern_match+0x18b>
jmp    124a <lo_pattern_match+0x13a>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x3e(%rbp)
je     1275 <lo_pattern_match+0x165>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
setne  %al
mov    %al,-0x3e(%rbp)
mov    -0x3e(%rbp),%al
test   $0x1,%al
jne    1285 <lo_pattern_match+0x175>
jmp    1296 <lo_pattern_match+0x186>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    124a <lo_pattern_match+0x13a>
jmp    129b <lo_pattern_match+0x18b>
jmp    12a0 <lo_pattern_match+0x190>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     12e0 <lo_pattern_match+0x1d0>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   1030 <lo_pattern_match@plt>
cmp    $0x0,%eax
je     12cf <lo_pattern_match+0x1bf>
movl   $0x1,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    12a0 <lo_pattern_match+0x190>
movl   $0x0,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     12fe <lo_pattern_match+0x1ee>
jmp    17ca <lo_pattern_match+0x6ba>
movl   $0x0,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x21,%eax
je     1326 <lo_pattern_match+0x216>
movl   $0x0,-0x1c(%rbp)
jmp    1339 <lo_pattern_match+0x229>
movl   $0x1,-0x1c(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
movl   $0x0,-0x20(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x20(%rbp)
mov    %al,-0x3f(%rbp)
jne    136f <lo_pattern_match+0x25f>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
mov    (%rax),%al
mov    %al,-0x21(%rbp)
movsbl %al,%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x3f(%rbp)
mov    -0x3f(%rbp),%al
test   $0x1,%al
jne    137f <lo_pattern_match+0x26f>
jmp    14ba <lo_pattern_match+0x3aa>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
jne    1398 <lo_pattern_match+0x288>
movl   $0x0,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    145f <lo_pattern_match+0x34f>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
cmpb   $0x0,0x1(%rax)
jne    13cd <lo_pattern_match+0x2bd>
movl   $0x0,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
je     143b <lo_pattern_match+0x32b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl -0x21(%rbp),%ecx
cmp    %ecx,%eax
je     142f <lo_pattern_match+0x31f>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
mov    -0x18(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     142f <lo_pattern_match+0x31f>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl -0x21(%rbp),%ecx
cmp    %ecx,%eax
jle    1436 <lo_pattern_match+0x326>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
mov    -0x18(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jge    1436 <lo_pattern_match+0x326>
movl   $0x1,-0x20(%rbp)
jmp    145a <lo_pattern_match+0x34a>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl -0x21(%rbp),%ecx
cmp    %ecx,%eax
jl     1455 <lo_pattern_match+0x345>
movl   $0x1,-0x20(%rbp)
jmp    14ba <lo_pattern_match+0x3aa>
jmp    14b5 <lo_pattern_match+0x3a5>
movsbl -0x21(%rbp),%eax
mov    -0x10(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    1479 <lo_pattern_match+0x369>
movl   $0x1,-0x20(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
je     14ab <lo_pattern_match+0x39b>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    14a6 <lo_pattern_match+0x396>
movl   $0x1,-0x20(%rbp)
jmp    14b0 <lo_pattern_match+0x3a0>
jmp    14ba <lo_pattern_match+0x3aa>
jmp    14b5 <lo_pattern_match+0x3a5>
jmp    1340 <lo_pattern_match+0x230>
mov    -0x1c(%rbp),%eax
cmp    -0x20(%rbp),%eax
jne    14d2 <lo_pattern_match+0x3c2>
movl   $0x0,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
jmp    14d7 <lo_pattern_match+0x3c7>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x40(%rbp)
je     14fc <lo_pattern_match+0x3ec>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
setne  %al
mov    %al,-0x40(%rbp)
mov    -0x40(%rbp),%al
test   $0x1,%al
jne    150c <lo_pattern_match+0x3fc>
jmp    151d <lo_pattern_match+0x40d>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    14d7 <lo_pattern_match+0x3c7>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
cmpb   $0x0,(%rax)
jne    1541 <lo_pattern_match+0x431>
movl   $0x0,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
jmp    17ca <lo_pattern_match+0x6ba>
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x41(%rbp)
je     157b <lo_pattern_match+0x46b>
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7d,%eax
setne  %al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
test   $0x1,%al
jne    158b <lo_pattern_match+0x47b>
jmp    159c <lo_pattern_match+0x48c>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1556 <lo_pattern_match+0x446>
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x38(%rbp)
cmpb   $0x0,(%rax)
jne    15c0 <lo_pattern_match+0x4b0>
movl   $0x0,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
mov    (%rax),%al
mov    %al,-0x21(%rbp)
cmpb   $0x0,-0x21(%rbp)
je     17a1 <lo_pattern_match+0x691>
movsbl -0x21(%rbp),%eax
cmp    $0x2c,%eax
jne    1643 <lo_pattern_match+0x533>
mov    -0x10(%rbp),%rdi
mov    -0x38(%rbp),%rsi
call   1030 <lo_pattern_match@plt>
cmp    $0x0,%eax
je     160d <lo_pattern_match+0x4fd>
movl   $0x1,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
mov    -0x30(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
cmpb   $0x0,(%rax)
jne    1639 <lo_pattern_match+0x529>
movl   $0x0,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
jmp    163e <lo_pattern_match+0x52e>
jmp    1788 <lo_pattern_match+0x678>
movsbl -0x21(%rbp),%eax
cmp    $0x7d,%eax
jne    1687 <lo_pattern_match+0x577>
mov    -0x18(%rbp),%rax
cmpb   $0x0,(%rax)
jne    1676 <lo_pattern_match+0x566>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
jne    1676 <lo_pattern_match+0x566>
movl   $0x1,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
mov    -0x10(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x10(%rbp)
jmp    17a1 <lo_pattern_match+0x691>
movsbl -0x21(%rbp),%eax
mov    -0x10(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
jne    16d4 <lo_pattern_match+0x5c4>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
jne    16cf <lo_pattern_match+0x5bf>
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     16cf <lo_pattern_match+0x5bf>
movl   $0x0,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
jmp    177e <lo_pattern_match+0x66e>
mov    -0x30(%rbp),%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x2c,%ecx
mov    %al,-0x42(%rbp)
je     1716 <lo_pattern_match+0x606>
mov    -0x18(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x7d,%ecx
mov    %al,-0x42(%rbp)
je     1716 <lo_pattern_match+0x606>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x42(%rbp)
mov    -0x42(%rbp),%al
test   $0x1,%al
jne    1726 <lo_pattern_match+0x616>
jmp    1737 <lo_pattern_match+0x627>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    16dc <lo_pattern_match+0x5cc>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2c,%eax
jne    1758 <lo_pattern_match+0x648>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
jmp    1779 <lo_pattern_match+0x669>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7d,%eax
jne    1774 <lo_pattern_match+0x664>
movl   $0x0,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
jmp    1779 <lo_pattern_match+0x669>
jmp    177e <lo_pattern_match+0x66e>
jmp    1783 <lo_pattern_match+0x673>
jmp    1788 <lo_pattern_match+0x678>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
mov    (%rax),%al
mov    %al,-0x21(%rbp)
jmp    15d4 <lo_pattern_match+0x4c4>
jmp    17ca <lo_pattern_match+0x6ba>
movsbl -0x21(%rbp),%eax
mov    -0x10(%rbp),%rcx
movsbl (%rcx),%ecx
cmp    %ecx,%eax
je     17c5 <lo_pattern_match+0x6b5>
movl   $0x0,-0x4(%rbp)
jmp    17ef <lo_pattern_match+0x6df>
jmp    17ca <lo_pattern_match+0x6ba>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1120 <lo_pattern_match+0x10>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<lo_pattern_match>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %rdi,%r15
mov    (%rsi),%cl
test   %cl,%cl
je     137f <lo_pattern_match+0x26f>
mov    %rsi,%rbp
mov    (%r15),%al
xor    %r14d,%r14d
test   %al,%al
jne    113b <lo_pattern_match+0x2b>
cmp    $0x2a,%cl
jne    138a <lo_pattern_match+0x27a>
lea    0x1(%rbp),%r12
movsbl %cl,%edx
cmp    $0x5a,%edx
jle    1180 <lo_pattern_match+0x70>
cmp    $0x5b,%edx
je     11a0 <lo_pattern_match+0x90>
cmp    $0x7b,%edx
jne    1192 <lo_pattern_match+0x82>
lea    0x2(%rbp),%rbx
cs nopw 0x0(%rax,%rax,1)
nop
movzbl -0x1(%rbx),%eax
test   %al,%al
je     1260 <lo_pattern_match+0x150>
cmp    $0x7d,%al
je     1260 <lo_pattern_match+0x150>
add    $0x1,%rbx
jmp    1160 <lo_pattern_match+0x50>
nopw   0x0(%rax,%rax,1)
cmp    $0x3f,%edx
je     1368 <lo_pattern_match+0x258>
cmp    $0x2a,%edx
je     139a <lo_pattern_match+0x28a>
cmp    %al,%cl
je     136c <lo_pattern_match+0x25c>
jmp    138a <lo_pattern_match+0x27a>
nop
lea    0x2(%rbp),%rdx
xor    %ecx,%ecx
cmpb   $0x21,0x1(%rbp)
sete   %cl
cmove  %rdx,%r12
mov    0x1(%rcx,%rbp,1),%bl
jmp    11cd <lo_pattern_match+0xbd>
nopw   0x0(%rax,%rax,1)
mov    %rbp,%r12
mov    %edx,%ebx
test   %edi,%edi
jne    1302 <lo_pattern_match+0x1f2>
lea    0x1(%r12),%rbp
test   %bl,%bl
je     12fb <lo_pattern_match+0x1eb>
movzbl 0x0(%rbp),%edx
xor    %r14d,%r14d
cmp    $0x2d,%dl
je     1210 <lo_pattern_match+0x100>
test   %dl,%dl
je     138a <lo_pattern_match+0x27a>
xor    %edi,%edi
cmp    %al,%bl
sete   %dil
cmp    $0x5d,%dl
je     1324 <lo_pattern_match+0x214>
cmp    %al,%dl
jne    11c0 <lo_pattern_match+0xb0>
jmp    132b <lo_pattern_match+0x21b>
nopl   0x0(%rax,%rax,1)
movzbl 0x2(%r12),%edx
test   %dl,%dl
je     138a <lo_pattern_match+0x27a>
add    $0x2,%r12
cmp    $0x5d,%dl
je     1335 <lo_pattern_match+0x225>
mov    $0x1,%esi
cmp    %bl,%al
je     133d <lo_pattern_match+0x22d>
cmp    %dl,%al
je     133d <lo_pattern_match+0x22d>
xor    %edi,%edi
cmp    %bl,%al
jle    11c3 <lo_pattern_match+0xb3>
cmp    %dl,%al
jge    11c3 <lo_pattern_match+0xb3>
jmp    133d <lo_pattern_match+0x22d>
nopw   0x0(%rax,%rax,1)
test   %al,%al
je     138a <lo_pattern_match+0x27a>
add    $0x2,%rbp
mov    %r15,%rdi
jmp    1291 <lo_pattern_match+0x181>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%rbp
mov    %r15,%rax
mov    %rbp,%r12
add    $0x1,%rbp
mov    %rax,%rdi
mov    (%r12),%al
cmp    $0x2c,%al
je     12e0 <lo_pattern_match+0x1d0>
test   %al,%al
je     131c <lo_pattern_match+0x20c>
cmp    $0x7d,%al
je     1309 <lo_pattern_match+0x1f9>
cmp    (%rdi),%al
jne    12c0 <lo_pattern_match+0x1b0>
lea    0x1(%rdi),%rax
cmpb   $0x0,0x1(%rdi)
jne    1287 <lo_pattern_match+0x177>
cmpb   $0x0,(%rbx)
je     1287 <lo_pattern_match+0x177>
jmp    138a <lo_pattern_match+0x27a>
nopl   0x0(%rax)
movzbl 0x0(%rbp),%eax
test   %al,%al
je     1284 <lo_pattern_match+0x174>
cmp    $0x2c,%al
je     1280 <lo_pattern_match+0x170>
cmp    $0x7d,%al
je     138a <lo_pattern_match+0x27a>
add    $0x1,%rbp
jmp    12c0 <lo_pattern_match+0x1b0>
nopw   0x0(%rax,%rax,1)
mov    %rbx,%rsi
call   1030 <lo_pattern_match@plt>
test   %eax,%eax
jne    13e8 <lo_pattern_match+0x2d8>
cmpb   $0x0,0x0(%rbp)
jne    1280 <lo_pattern_match+0x170>
jmp    138a <lo_pattern_match+0x27a>
mov    %rbp,%r12
xor    %esi,%esi
jmp    133d <lo_pattern_match+0x22d>
mov    $0x1,%esi
jmp    133d <lo_pattern_match+0x22d>
cmpb   $0x0,0x0(%rbp)
jne    1318 <lo_pattern_match+0x208>
cmpb   $0x0,(%rdi)
je     13e8 <lo_pattern_match+0x2d8>
add    $0xffffffffffffffff,%rdi
mov    %rdi,%r15
mov    %rbp,%r12
jmp    136c <lo_pattern_match+0x25c>
mov    %rbp,%r12
mov    %edi,%esi
jmp    133d <lo_pattern_match+0x22d>
mov    $0x1,%esi
mov    %rbp,%r12
jmp    133d <lo_pattern_match+0x22d>
xor    %esi,%esi
cmp    %bl,%al
setge  %sil
cmp    %ecx,%esi
je     13df <lo_pattern_match+0x2cf>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r12
movzbl -0x1(%r12),%eax
test   %al,%al
je     1362 <lo_pattern_match+0x252>
cmp    $0x5d,%al
jne    1350 <lo_pattern_match+0x240>
mov    $0x0,%r14d
test   %al,%al
je     138a <lo_pattern_match+0x27a>
add    $0x1,%r15
mov    (%r12),%cl
mov    %r12,%rbp
test   %cl,%cl
jne    1128 <lo_pattern_match+0x18>
xor    %r14d,%r14d
cmpb   $0x0,(%r15)
sete   %r14b
mov    %r14d,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
add    $0x1,%r12
movzbl (%r12),%ecx
cmp    $0x2a,%cl
je     1396 <lo_pattern_match+0x286>
lea    -0x3f(%rcx),%edx
cmp    $0x3c,%dl
ja     13e4 <lo_pattern_match+0x2d4>
movzbl %dl,%edx
movabs $0x1000000010000001,%rsi
bt     %rdx,%rsi
jae    13e4 <lo_pattern_match+0x2d4>
test   %al,%al
je     138a <lo_pattern_match+0x27a>
mov    %r15,%rdi
mov    %r12,%rsi
call   1030 <lo_pattern_match@plt>
test   %eax,%eax
jne    13e8 <lo_pattern_match+0x2d8>
cmpb   $0x0,0x1(%r15)
lea    0x1(%r15),%r15
jne    13c3 <lo_pattern_match+0x2b3>
jmp    138a <lo_pattern_match+0x27a>
xor    %r14d,%r14d
jmp    138a <lo_pattern_match+0x27a>
test   %cl,%cl
jne    13fd <lo_pattern_match+0x2ed>
mov    $0x1,%r14d
jmp    138a <lo_pattern_match+0x27a>
cmp    %al,%cl
je     13bf <lo_pattern_match+0x2af>
movzbl 0x1(%r15),%eax
add    $0x1,%r15
test   %al,%al
jne    13f0 <lo_pattern_match+0x2e0>
jmp    13bf <lo_pattern_match+0x2af>

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

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