int fpattern_submatch(const char *pat, const char *fname, int flength) {
  int fch;
  int pch, pch2;
  int i;
  int yes, match;
  int lo, hi;
  while (*pat != '\0') {
    fch = (unsigned char)*fname;
    pch = (unsigned char)*pat;
    pat++;
    switch (pch) {
    case '?':
      if (flength == 0)
        return (0);
      fname++;
      flength--;
      break;
    case '*':
      i = flength;
      while (i >= 0) {
        if (fpattern_submatch(pat, fname + i, flength - i))
          return (1);
        i--;
      }
      return (0);
    case '`':;
      pch = (unsigned char)*pat;
      if ((((pch) >= '0' && (pch) <= '9') || ((pch) >= 'a' && (pch) <= 'f') ||
           ((pch) >= 'A' && (pch) <= 'F'))) {
        pch2 = *++pat;
        pch = ((((pch) >= '0' && (pch) <= '9')
                    ? (pch) - '0'
                    : 10 + (((pch) >= 'a' && (pch) <= 'f') ? (pch) - 'a'
                                                           : (pch) - 'A'))
               << 4) |
              (((pch2) >= '0' && (pch2) <= '9')
                   ? (pch2) - '0'
                   : 10 + (((pch2) >= 'a' && (pch2) <= 'f') ? (pch2) - 'a'
                                                            : (pch2) - 'A'));
      }
      if ((fch) != (pch))
        return (0);
      fname++;
      flength--;
      pat++;
      break;
    case '[':
      yes = 1;
      if (*pat == '!') {
        pat++;
        yes = 0;
      }
      match = !yes;
      while (*pat != ']') {
        ;
        pch = (unsigned char)*pat++;
        if (pch == '`') {
          ;
          pch = (unsigned char)*pat++;
          if ((((pch) >= '0' && (pch) <= '9') ||
               ((pch) >= 'a' && (pch) <= 'f') ||
               ((pch) >= 'A' && (pch) <= 'F'))) {
            pch2 = *pat++;
            lo = ((((pch) >= '0' && (pch) <= '9')
                       ? (pch) - '0'
                       : 10 + (((pch) >= 'a' && (pch) <= 'f') ? (pch) - 'a'
                                                              : (pch) - 'A'))
                  << 4) |
                 (((pch2) >= '0' && (pch2) <= '9')
                      ? (pch2) - '0'
                      : 10 + (((pch2) >= 'a' && (pch2) <= 'f') ? (pch2) - 'a'
                                                               : (pch2) - 'A'));
          } else {
            lo = pch;
          }
        } else {
          lo = pch;
        }
        if (*pat == '-') {
          pat++;
          pch = (unsigned char)*pat++;
          if (pch == '`') {
            ;
            pch = (unsigned char)*pat++;
            if ((((pch) >= '0' && (pch) <= '9') ||
                 ((pch) >= 'a' && (pch) <= 'f') ||
                 ((pch) >= 'A' && (pch) <= 'F'))) {
              pch2 = *pat++;
              hi = ((((pch) >= '0' && (pch) <= '9')
                         ? (pch) - '0'
                         : 10 + (((pch) >= 'a' && (pch) <= 'f') ? (pch) - 'a'
                                                                : (pch) - 'A'))
                    << 4) |
                   (((pch2) >= '0' && (pch2) <= '9')
                        ? (pch2) - '0'
                        : 10 + (((pch2) >= 'a' && (pch2) <= 'f')
                                    ? (pch2) - 'a'
                                    : (pch2) - 'A'));
            } else {
              hi = pch;
            }
          } else {
            hi = pch;
          }
          if ((fch) >= (lo) && (fch) <= (hi)) {
            match = yes;
            while (*pat != ']') {
              ;
              pat++;
            }
            break;
          }
        } else {
          if ((fch) == (lo)) {
            match = yes;
            while (*pat != ']') {
              ;
              pat++;
            }
            break;
          }
        };
      }
      if (!match)
        return (0);
      fname++;
      flength--;
      ;
      pat++;
      break;
    case '{':
      yes = 1;
      if (*pat == '!') {
        pat++;
        yes = 0;
      }
      do {
        const char *org_pat = pat;
        match = !yes;
        while (*pat != '}') {
          ;
          pch = (unsigned char)*pat++;
          if (pch == '`') {
            ;
            pch = (unsigned char)*pat++;
            if ((((pch) >= '0' && (pch) <= '9') ||
                 ((pch) >= 'a' && (pch) <= 'f') ||
                 ((pch) >= 'A' && (pch) <= 'F'))) {
              pch2 = *pat++;
              lo = ((((pch) >= '0' && (pch) <= '9')
                         ? (pch) - '0'
                         : 10 + (((pch) >= 'a' && (pch) <= 'f') ? (pch) - 'a'
                                                                : (pch) - 'A'))
                    << 4) |
                   (((pch2) >= '0' && (pch2) <= '9')
                        ? (pch2) - '0'
                        : 10 + (((pch2) >= 'a' && (pch2) <= 'f')
                                    ? (pch2) - 'a'
                                    : (pch2) - 'A'));
            } else {
              lo = pch;
            }
          } else {
            lo = pch;
          }
          if (*pat == '-') {
            pat++;
            pch = (unsigned char)*pat++;
            if (pch == '`') {
              ;
              pch = (unsigned char)*pat++;
              if ((((pch) >= '0' && (pch) <= '9') ||
                   ((pch) >= 'a' && (pch) <= 'f') ||
                   ((pch) >= 'A' && (pch) <= 'F'))) {
                pch2 = *pat++;
                hi =
                    ((((pch) >= '0' && (pch) <= '9')
                          ? (pch) - '0'
                          : 10 + (((pch) >= 'a' && (pch) <= 'f') ? (pch) - 'a'
                                                                 : (pch) - 'A'))
                     << 4) |
                    (((pch2) >= '0' && (pch2) <= '9')
                         ? (pch2) - '0'
                         : 10 + (((pch2) >= 'a' && (pch2) <= 'f')
                                     ? (pch2) - 'a'
                                     : (pch2) - 'A'));
              } else {
                hi = pch;
              }
            } else {
              hi = pch;
            }
            if ((fch) >= (lo) && (fch) <= (hi)) {
              match = yes;
              while (*pat != '}') {
                ;
                pat++;
              }
              break;
            }
          } else {
            if ((fch) == (lo)) {
              match = yes;
              while (*pat != '}') {
                ;
                pat++;
              }
              break;
            }
          };
        };
        if (match) {
          fname++;
          flength--;
          fch = *fname;
          if (flength > 0)
            pat = org_pat;
        }
      } while (match && flength > 0);
      pat++;
      break;
    default:
      if ((fch) != (pch))
        return (0);
      fname++;
      flength--;
      break;
    }
  }
  if (flength != 0)
    return (0);
  return (1);
}


x86 assembly (clang, -O0):
<fpattern_submatch>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     1c45 <fpattern_submatch+0xb35>
mov    -0x18(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x4c(%rbp)
sub    $0x2a,%eax
je     11de <fpattern_submatch+0xce>
jmp    116a <fpattern_submatch+0x5a>
mov    -0x4c(%rbp),%eax
sub    $0x3f,%eax
je     11ae <fpattern_submatch+0x9e>
jmp    117b <fpattern_submatch+0x6b>
mov    -0x4c(%rbp),%eax
sub    $0x5b,%eax
je     1391 <fpattern_submatch+0x281>
jmp    118c <fpattern_submatch+0x7c>
mov    -0x4c(%rbp),%eax
sub    $0x60,%eax
je     1237 <fpattern_submatch+0x127>
jmp    119d <fpattern_submatch+0x8d>
mov    -0x4c(%rbp),%eax
sub    $0x7b,%eax
je     1787 <fpattern_submatch+0x677>
jmp    1c13 <fpattern_submatch+0xb03>
cmpl   $0x0,-0x1c(%rbp)
jne    11c4 <fpattern_submatch+0xb4>
movl   $0x0,-0x4(%rbp)
jmp    1c62 <fpattern_submatch+0xb52>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    1c40 <fpattern_submatch+0xb30>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jl     122b <fpattern_submatch+0x11b>
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
movslq -0x2c(%rbp),%rax
add    %rax,%rsi
mov    -0x1c(%rbp),%edx
sub    -0x2c(%rbp),%edx
call   1030 <fpattern_submatch@plt>
cmp    $0x0,%eax
je     121d <fpattern_submatch+0x10d>
movl   $0x1,-0x4(%rbp)
jmp    1c62 <fpattern_submatch+0xb52>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    11e4 <fpattern_submatch+0xd4>
movl   $0x0,-0x4(%rbp)
jmp    1c62 <fpattern_submatch+0xb52>
mov    -0x10(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x30,-0x24(%rbp)
jl     1255 <fpattern_submatch+0x145>
cmpl   $0x39,-0x24(%rbp)
jle    127d <fpattern_submatch+0x16d>
cmpl   $0x61,-0x24(%rbp)
jl     1269 <fpattern_submatch+0x159>
cmpl   $0x66,-0x24(%rbp)
jle    127d <fpattern_submatch+0x16d>
cmpl   $0x41,-0x24(%rbp)
jl     1353 <fpattern_submatch+0x243>
cmpl   $0x46,-0x24(%rbp)
jg     1353 <fpattern_submatch+0x243>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl 0x1(%rax),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x30,-0x24(%rbp)
jl     12b5 <fpattern_submatch+0x1a5>
cmpl   $0x39,-0x24(%rbp)
jg     12b5 <fpattern_submatch+0x1a5>
mov    -0x24(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x50(%rbp)
jmp    12e9 <fpattern_submatch+0x1d9>
cmpl   $0x61,-0x24(%rbp)
jl     12d7 <fpattern_submatch+0x1c7>
cmpl   $0x66,-0x24(%rbp)
jg     12d7 <fpattern_submatch+0x1c7>
mov    -0x24(%rbp),%eax
sub    $0x61,%eax
mov    %eax,-0x54(%rbp)
jmp    12e0 <fpattern_submatch+0x1d0>
mov    -0x24(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x58(%rbp)
cmpl   $0x30,-0x28(%rbp)
jl     1314 <fpattern_submatch+0x204>
cmpl   $0x39,-0x28(%rbp)
jg     1314 <fpattern_submatch+0x204>
mov    -0x28(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x5c(%rbp)
jmp    1348 <fpattern_submatch+0x238>
cmpl   $0x61,-0x28(%rbp)
jl     1336 <fpattern_submatch+0x226>
cmpl   $0x66,-0x28(%rbp)
jg     1336 <fpattern_submatch+0x226>
mov    -0x28(%rbp),%eax
sub    $0x61,%eax
mov    %eax,-0x60(%rbp)
jmp    133f <fpattern_submatch+0x22f>
mov    -0x28(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x58(%rbp),%eax
mov    -0x5c(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     136b <fpattern_submatch+0x25b>
movl   $0x0,-0x4(%rbp)
jmp    1c62 <fpattern_submatch+0xb52>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1c40 <fpattern_submatch+0xb30>
movl   $0x1,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x21,%eax
jne    13bb <fpattern_submatch+0x2ab>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x30(%rbp)
cmpl   $0x0,-0x30(%rbp)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
je     174b <fpattern_submatch+0x63b>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x60,-0x24(%rbp)
jne    1531 <fpattern_submatch+0x421>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x30,-0x24(%rbp)
jl     1424 <fpattern_submatch+0x314>
cmpl   $0x39,-0x24(%rbp)
jle    144c <fpattern_submatch+0x33c>
cmpl   $0x61,-0x24(%rbp)
jl     1438 <fpattern_submatch+0x328>
cmpl   $0x66,-0x24(%rbp)
jle    144c <fpattern_submatch+0x33c>
cmpl   $0x41,-0x24(%rbp)
jl     1526 <fpattern_submatch+0x416>
cmpl   $0x46,-0x24(%rbp)
jg     1526 <fpattern_submatch+0x416>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x30,-0x24(%rbp)
jl     1483 <fpattern_submatch+0x373>
cmpl   $0x39,-0x24(%rbp)
jg     1483 <fpattern_submatch+0x373>
mov    -0x24(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x64(%rbp)
jmp    14b7 <fpattern_submatch+0x3a7>
cmpl   $0x61,-0x24(%rbp)
jl     14a5 <fpattern_submatch+0x395>
cmpl   $0x66,-0x24(%rbp)
jg     14a5 <fpattern_submatch+0x395>
mov    -0x24(%rbp),%eax
sub    $0x61,%eax
mov    %eax,-0x68(%rbp)
jmp    14ae <fpattern_submatch+0x39e>
mov    -0x24(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x6c(%rbp)
cmpl   $0x30,-0x28(%rbp)
jl     14e2 <fpattern_submatch+0x3d2>
cmpl   $0x39,-0x28(%rbp)
jg     14e2 <fpattern_submatch+0x3d2>
mov    -0x28(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x70(%rbp)
jmp    1516 <fpattern_submatch+0x406>
cmpl   $0x61,-0x28(%rbp)
jl     1504 <fpattern_submatch+0x3f4>
cmpl   $0x66,-0x28(%rbp)
jg     1504 <fpattern_submatch+0x3f4>
mov    -0x28(%rbp),%eax
sub    $0x61,%eax
mov    %eax,-0x74(%rbp)
jmp    150d <fpattern_submatch+0x3fd>
mov    -0x28(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x70(%rbp)
mov    -0x6c(%rbp),%eax
mov    -0x70(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x38(%rbp)
jmp    152c <fpattern_submatch+0x41c>
mov    -0x24(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    1537 <fpattern_submatch+0x427>
mov    -0x24(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    1709 <fpattern_submatch+0x5f9>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x60,-0x24(%rbp)
jne    16ba <fpattern_submatch+0x5aa>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x30,-0x24(%rbp)
jl     159b <fpattern_submatch+0x48b>
cmpl   $0x39,-0x24(%rbp)
jle    15c3 <fpattern_submatch+0x4b3>
cmpl   $0x61,-0x24(%rbp)
jl     15af <fpattern_submatch+0x49f>
cmpl   $0x66,-0x24(%rbp)
jle    15c3 <fpattern_submatch+0x4b3>
cmpl   $0x41,-0x24(%rbp)
jl     16af <fpattern_submatch+0x59f>
cmpl   $0x46,-0x24(%rbp)
jg     16af <fpattern_submatch+0x59f>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x30,-0x24(%rbp)
jl     15fa <fpattern_submatch+0x4ea>
cmpl   $0x39,-0x24(%rbp)
jg     15fa <fpattern_submatch+0x4ea>
mov    -0x24(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x78(%rbp)
jmp    162e <fpattern_submatch+0x51e>
cmpl   $0x61,-0x24(%rbp)
jl     161c <fpattern_submatch+0x50c>
cmpl   $0x66,-0x24(%rbp)
jg     161c <fpattern_submatch+0x50c>
mov    -0x24(%rbp),%eax
sub    $0x61,%eax
mov    %eax,-0x7c(%rbp)
jmp    1625 <fpattern_submatch+0x515>
mov    -0x24(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x78(%rbp)
mov    -0x78(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x80(%rbp)
cmpl   $0x30,-0x28(%rbp)
jl     165c <fpattern_submatch+0x54c>
cmpl   $0x39,-0x28(%rbp)
jg     165c <fpattern_submatch+0x54c>
mov    -0x28(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x84(%rbp)
jmp    169c <fpattern_submatch+0x58c>
cmpl   $0x61,-0x28(%rbp)
jl     1681 <fpattern_submatch+0x571>
cmpl   $0x66,-0x28(%rbp)
jg     1681 <fpattern_submatch+0x571>
mov    -0x28(%rbp),%eax
sub    $0x61,%eax
mov    %eax,-0x88(%rbp)
jmp    168d <fpattern_submatch+0x57d>
mov    -0x28(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0x88(%rbp)
mov    -0x88(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x84(%rbp)
mov    -0x80(%rbp),%eax
mov    -0x84(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x3c(%rbp)
jmp    16b5 <fpattern_submatch+0x5a5>
mov    -0x24(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    16c0 <fpattern_submatch+0x5b0>
mov    -0x24(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x38(%rbp),%eax
jl     1704 <fpattern_submatch+0x5f4>
mov    -0x20(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     1704 <fpattern_submatch+0x5f4>
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
je     16ff <fpattern_submatch+0x5ef>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    16de <fpattern_submatch+0x5ce>
jmp    174b <fpattern_submatch+0x63b>
jmp    1746 <fpattern_submatch+0x636>
mov    -0x20(%rbp),%eax
cmp    -0x38(%rbp),%eax
jne    1741 <fpattern_submatch+0x631>
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
je     173c <fpattern_submatch+0x62c>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    171b <fpattern_submatch+0x60b>
jmp    174b <fpattern_submatch+0x63b>
jmp    1746 <fpattern_submatch+0x636>
jmp    13cc <fpattern_submatch+0x2bc>
cmpl   $0x0,-0x34(%rbp)
jne    1761 <fpattern_submatch+0x651>
movl   $0x0,-0x4(%rbp)
jmp    1c62 <fpattern_submatch+0xb52>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1c40 <fpattern_submatch+0xb30>
movl   $0x1,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x21,%eax
jne    17b1 <fpattern_submatch+0x6a1>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x30(%rbp)
jmp    17b6 <fpattern_submatch+0x6a6>
mov    -0x10(%rbp),%rax
mov    %rax,-0x48(%rbp)
cmpl   $0x0,-0x30(%rbp)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7d,%eax
je     1b90 <fpattern_submatch+0xa80>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x60,-0x24(%rbp)
jne    195e <fpattern_submatch+0x84e>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x30,-0x24(%rbp)
jl     1827 <fpattern_submatch+0x717>
cmpl   $0x39,-0x24(%rbp)
jle    184f <fpattern_submatch+0x73f>
cmpl   $0x61,-0x24(%rbp)
jl     183b <fpattern_submatch+0x72b>
cmpl   $0x66,-0x24(%rbp)
jle    184f <fpattern_submatch+0x73f>
cmpl   $0x41,-0x24(%rbp)
jl     1953 <fpattern_submatch+0x843>
cmpl   $0x46,-0x24(%rbp)
jg     1953 <fpattern_submatch+0x843>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x30,-0x24(%rbp)
jl     1889 <fpattern_submatch+0x779>
cmpl   $0x39,-0x24(%rbp)
jg     1889 <fpattern_submatch+0x779>
mov    -0x24(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x8c(%rbp)
jmp    18c9 <fpattern_submatch+0x7b9>
cmpl   $0x61,-0x24(%rbp)
jl     18ae <fpattern_submatch+0x79e>
cmpl   $0x66,-0x24(%rbp)
jg     18ae <fpattern_submatch+0x79e>
mov    -0x24(%rbp),%eax
sub    $0x61,%eax
mov    %eax,-0x90(%rbp)
jmp    18ba <fpattern_submatch+0x7aa>
mov    -0x24(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0x90(%rbp)
mov    -0x90(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x94(%rbp)
cmpl   $0x30,-0x28(%rbp)
jl     18fd <fpattern_submatch+0x7ed>
cmpl   $0x39,-0x28(%rbp)
jg     18fd <fpattern_submatch+0x7ed>
mov    -0x28(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0x98(%rbp)
jmp    193d <fpattern_submatch+0x82d>
cmpl   $0x61,-0x28(%rbp)
jl     1922 <fpattern_submatch+0x812>
cmpl   $0x66,-0x28(%rbp)
jg     1922 <fpattern_submatch+0x812>
mov    -0x28(%rbp),%eax
sub    $0x61,%eax
mov    %eax,-0x9c(%rbp)
jmp    192e <fpattern_submatch+0x81e>
mov    -0x28(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0x9c(%rbp)
mov    -0x9c(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x98(%rbp)
mov    -0x94(%rbp),%eax
mov    -0x98(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x38(%rbp)
jmp    1959 <fpattern_submatch+0x849>
mov    -0x24(%rbp),%eax
mov    %eax,-0x38(%rbp)
jmp    1964 <fpattern_submatch+0x854>
mov    -0x24(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    1b4e <fpattern_submatch+0xa3e>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x60,-0x24(%rbp)
jne    1aff <fpattern_submatch+0x9ef>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movzbl (%rax),%eax
mov    %eax,-0x24(%rbp)
cmpl   $0x30,-0x24(%rbp)
jl     19c8 <fpattern_submatch+0x8b8>
cmpl   $0x39,-0x24(%rbp)
jle    19f0 <fpattern_submatch+0x8e0>
cmpl   $0x61,-0x24(%rbp)
jl     19dc <fpattern_submatch+0x8cc>
cmpl   $0x66,-0x24(%rbp)
jle    19f0 <fpattern_submatch+0x8e0>
cmpl   $0x41,-0x24(%rbp)
jl     1af4 <fpattern_submatch+0x9e4>
cmpl   $0x46,-0x24(%rbp)
jg     1af4 <fpattern_submatch+0x9e4>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x30,-0x24(%rbp)
jl     1a2a <fpattern_submatch+0x91a>
cmpl   $0x39,-0x24(%rbp)
jg     1a2a <fpattern_submatch+0x91a>
mov    -0x24(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0xa0(%rbp)
jmp    1a6a <fpattern_submatch+0x95a>
cmpl   $0x61,-0x24(%rbp)
jl     1a4f <fpattern_submatch+0x93f>
cmpl   $0x66,-0x24(%rbp)
jg     1a4f <fpattern_submatch+0x93f>
mov    -0x24(%rbp),%eax
sub    $0x61,%eax
mov    %eax,-0xa4(%rbp)
jmp    1a5b <fpattern_submatch+0x94b>
mov    -0x24(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0xa4(%rbp)
mov    -0xa4(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0xa0(%rbp)
mov    -0xa0(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0xa8(%rbp)
cmpl   $0x30,-0x28(%rbp)
jl     1a9e <fpattern_submatch+0x98e>
cmpl   $0x39,-0x28(%rbp)
jg     1a9e <fpattern_submatch+0x98e>
mov    -0x28(%rbp),%eax
sub    $0x30,%eax
mov    %eax,-0xac(%rbp)
jmp    1ade <fpattern_submatch+0x9ce>
cmpl   $0x61,-0x28(%rbp)
jl     1ac3 <fpattern_submatch+0x9b3>
cmpl   $0x66,-0x28(%rbp)
jg     1ac3 <fpattern_submatch+0x9b3>
mov    -0x28(%rbp),%eax
sub    $0x61,%eax
mov    %eax,-0xb0(%rbp)
jmp    1acf <fpattern_submatch+0x9bf>
mov    -0x28(%rbp),%eax
sub    $0x41,%eax
mov    %eax,-0xb0(%rbp)
mov    -0xb0(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0xac(%rbp)
mov    -0xa8(%rbp),%eax
mov    -0xac(%rbp),%ecx
or     %ecx,%eax
mov    %eax,-0x3c(%rbp)
jmp    1afa <fpattern_submatch+0x9ea>
mov    -0x24(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    1b05 <fpattern_submatch+0x9f5>
mov    -0x24(%rbp),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x38(%rbp),%eax
jl     1b49 <fpattern_submatch+0xa39>
mov    -0x20(%rbp),%eax
cmp    -0x3c(%rbp),%eax
jg     1b49 <fpattern_submatch+0xa39>
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7d,%eax
je     1b44 <fpattern_submatch+0xa34>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1b23 <fpattern_submatch+0xa13>
jmp    1b90 <fpattern_submatch+0xa80>
jmp    1b8b <fpattern_submatch+0xa7b>
mov    -0x20(%rbp),%eax
cmp    -0x38(%rbp),%eax
jne    1b86 <fpattern_submatch+0xa76>
mov    -0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7d,%eax
je     1b81 <fpattern_submatch+0xa71>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1b60 <fpattern_submatch+0xa50>
jmp    1b90 <fpattern_submatch+0xa80>
jmp    1b8b <fpattern_submatch+0xa7b>
jmp    17cf <fpattern_submatch+0x6bf>
cmpl   $0x0,-0x34(%rbp)
je     1bd0 <fpattern_submatch+0xac0>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x20(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    1bcb <fpattern_submatch+0xabb>
mov    -0x48(%rbp),%rax
mov    %rax,-0x10(%rbp)
jmp    1bd0 <fpattern_submatch+0xac0>
jmp    1bd5 <fpattern_submatch+0xac5>
xor    %eax,%eax
cmpl   $0x0,-0x34(%rbp)
mov    %al,-0xb1(%rbp)
je     1bf4 <fpattern_submatch+0xae4>
cmpl   $0x0,-0x1c(%rbp)
setg   %al
mov    %al,-0xb1(%rbp)
mov    -0xb1(%rbp),%al
test   $0x1,%al
jne    17b6 <fpattern_submatch+0x6a6>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1c40 <fpattern_submatch+0xb30>
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     1c2b <fpattern_submatch+0xb1b>
movl   $0x0,-0x4(%rbp)
jmp    1c62 <fpattern_submatch+0xb52>
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
jmp    1126 <fpattern_submatch+0x16>
cmpl   $0x0,-0x1c(%rbp)
je     1c5b <fpattern_submatch+0xb4b>
movl   $0x0,-0x4(%rbp)
jmp    1c62 <fpattern_submatch+0xb52>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fpattern_submatch>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    (%rdi),%al
test   %al,%al
je     1655 <fpattern_submatch+0x545>
mov    %rsi,%r14
movabs $0x3f0000003f,%r10
jmp    115b <fpattern_submatch+0x4b>
cmp    $0x2a,%al
je     165e <fpattern_submatch+0x54e>
cmp    %al,%r13b
jne    1695 <fpattern_submatch+0x585>
add    $0x1,%r14
add    $0xffffffff,%edx
mov    (%r12),%al
mov    %r12,%rdi
test   %al,%al
je     1655 <fpattern_submatch+0x545>
movzbl (%r14),%r13d
lea    0x1(%rdi),%r12
cmp    $0x5f,%al
jg     1340 <fpattern_submatch+0x230>
cmp    $0x3f,%al
je     1567 <fpattern_submatch+0x457>
cmp    $0x5b,%al
jne    1134 <fpattern_submatch+0x24>
lea    0x2(%rdi),%rax
xor    %r9d,%r9d
cmpb   $0x21,0x1(%rdi)
setne  %r8b
sete   %r9b
cmove  %rax,%r12
mov    0x1(%r9,%rdi,1),%al
jmp    11a5 <fpattern_submatch+0x95>
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%r12),%eax
cmp    $0x5d,%al
je     1640 <fpattern_submatch+0x530>
cmp    $0x60,%al
jne    11d0 <fpattern_submatch+0xc0>
movzbl 0x1(%r12),%edi
lea    -0x30(%rdi),%eax
cmp    $0xa,%al
jae    11e0 <fpattern_submatch+0xd0>
add    $0xffffffd0,%edi
jmp    1213 <fpattern_submatch+0x103>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%r12
movzbl %al,%edi
jmp    1259 <fpattern_submatch+0x149>
nopl   0x0(%rax)
lea    0x2(%r12),%rax
lea    -0x41(%rdi),%ebp
cmp    $0x25,%bpl
ja     131f <fpattern_submatch+0x20f>
movzbl %bpl,%esi
bt     %rsi,%r10
jae    131f <fpattern_submatch+0x20f>
lea    -0x61(%rdi),%eax
xor    %esi,%esi
cmp    $0x6,%al
setae  %sil
shl    $0x5,%esi
add    %esi,%edi
add    $0xffffffa9,%edi
movsbl 0x2(%r12),%eax
add    $0x3,%r12
shl    $0x4,%edi
lea    -0x30(%rax),%esi
cmp    $0x9,%sil
ja     1240 <fpattern_submatch+0x130>
add    $0xffffffd0,%eax
or     %edi,%eax
mov    %eax,%edi
jmp    1259 <fpattern_submatch+0x149>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    -0x61(%rax),%esi
xor    %ebp,%ebp
cmp    $0x6,%sil
setae  %bpl
shl    $0x5,%ebp
add    %ebp,%eax
add    $0xffffffa9,%eax
or     %edi,%eax
mov    %eax,%edi
movzbl (%r12),%eax
cmp    $0x2d,%al
jne    1280 <fpattern_submatch+0x170>
movzbl 0x1(%r12),%ebp
cmp    $0x60,%ebp
jne    1290 <fpattern_submatch+0x180>
movzbl 0x2(%r12),%ebp
lea    -0x30(%rbp),%eax
cmp    $0xa,%al
jae    129e <fpattern_submatch+0x18e>
add    $0xffffffd0,%ebp
jmp    12c9 <fpattern_submatch+0x1b9>
nop
cmp    %r13d,%edi
jne    11a5 <fpattern_submatch+0x95>
jmp    1604 <fpattern_submatch+0x4f4>
xchg   %ax,%ax
add    $0x2,%r12
cmp    %r13d,%edi
jle    1311 <fpattern_submatch+0x201>
jmp    11a0 <fpattern_submatch+0x90>
lea    0x3(%r12),%rax
lea    -0x41(%rbp),%esi
cmp    $0x25,%sil
ja     1327 <fpattern_submatch+0x217>
movzbl %sil,%esi
bt     %rsi,%r10
jae    1327 <fpattern_submatch+0x217>
lea    -0x61(%rbp),%eax
xor    %esi,%esi
cmp    $0x6,%al
setae  %sil
shl    $0x5,%esi
add    %esi,%ebp
add    $0xffffffa9,%ebp
movsbl 0x3(%r12),%eax
add    $0x4,%r12
shl    $0x4,%ebp
lea    -0x30(%rax),%esi
cmp    $0x9,%sil
ja     12f0 <fpattern_submatch+0x1e0>
add    $0xffffffd0,%eax
or     %ebp,%eax
mov    %eax,%ebp
cmp    %r13d,%edi
jle    1311 <fpattern_submatch+0x201>
jmp    11a0 <fpattern_submatch+0x90>
lea    -0x61(%rax),%esi
xor    %ebx,%ebx
cmp    $0x6,%sil
setae  %bl
shl    $0x5,%ebx
add    %ebx,%eax
add    $0xffffffa9,%eax
or     %ebp,%eax
mov    %eax,%ebp
cmp    %r13d,%edi
jg     11a0 <fpattern_submatch+0x90>
cmp    %r13d,%ebp
jl     11a0 <fpattern_submatch+0x90>
jmp    161f <fpattern_submatch+0x50f>
mov    %rax,%r12
jmp    1259 <fpattern_submatch+0x149>
mov    %rax,%r12
cmp    %r13d,%edi
jle    1311 <fpattern_submatch+0x201>
jmp    11a0 <fpattern_submatch+0x90>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    $0x60,%al
je     1574 <fpattern_submatch+0x464>
cmp    $0x7b,%al
jne    113c <fpattern_submatch+0x2c>
lea    0x2(%rdi),%rax
xor    %r11d,%r11d
cmpb   $0x21,0x1(%rdi)
setne  %r8b
sete   %r11b
cmove  %rax,%r12
test   %edx,%edx
mov    $0x1,%r9d
cmovle %edx,%r9d
add    $0xffffffff,%r9d
mov    0x1(%r11,%rdi,1),%r15b
nopl   0x0(%rax)
mov    %r12,%rdi
mov    %r11d,%eax
cmp    $0x7d,%r15b
je     153d <fpattern_submatch+0x42d>
mov    %r15d,%eax
mov    %r12,%rdi
jmp    13ab <fpattern_submatch+0x29b>
nopl   0x0(%rax,%rax,1)
movzbl (%rdi),%eax
cmp    $0x7d,%al
je     1510 <fpattern_submatch+0x400>
cmp    $0x60,%al
jne    13c0 <fpattern_submatch+0x2b0>
movzbl 0x1(%rdi),%ebp
lea    -0x30(%rbp),%eax
cmp    $0xa,%al
jae    13d0 <fpattern_submatch+0x2c0>
add    $0xffffffd0,%ebp
jmp    1402 <fpattern_submatch+0x2f2>
nop
add    $0x1,%rdi
movzbl %al,%ebp
jmp    1437 <fpattern_submatch+0x327>
nopl   0x0(%rax)
lea    0x2(%rdi),%rax
lea    -0x41(%rbp),%esi
cmp    $0x25,%sil
ja     14f4 <fpattern_submatch+0x3e4>
movzbl %sil,%esi
bt     %rsi,%r10
jae    14f4 <fpattern_submatch+0x3e4>
lea    -0x61(%rbp),%eax
xor    %esi,%esi
cmp    $0x6,%al
setae  %sil
shl    $0x5,%esi
add    %esi,%ebp
add    $0xffffffa9,%ebp
movsbl 0x2(%rdi),%esi
add    $0x3,%rdi
shl    $0x4,%ebp
lea    -0x30(%rsi),%eax
cmp    $0x9,%al
ja     1420 <fpattern_submatch+0x310>
add    $0xffffffd0,%esi
or     %ebp,%esi
mov    %esi,%ebp
jmp    1437 <fpattern_submatch+0x327>
nopl   (%rax)
lea    -0x61(%rsi),%eax
xor    %ebx,%ebx
cmp    $0x6,%al
setae  %bl
shl    $0x5,%ebx
lea    (%rbx,%rsi,1),%eax
add    $0xffffffa9,%eax
or     %ebp,%eax
mov    %eax,%ebp
movzbl (%rdi),%eax
cmp    $0x2d,%al
jne    1460 <fpattern_submatch+0x350>
movzbl 0x1(%rdi),%esi
cmp    $0x60,%esi
jne    1470 <fpattern_submatch+0x360>
movzbl 0x2(%rdi),%esi
lea    -0x30(%rsi),%eax
cmp    $0xa,%al
jae    147e <fpattern_submatch+0x36e>
add    $0xffffffd0,%esi
jmp    14a5 <fpattern_submatch+0x395>
nopw   0x0(%rax,%rax,1)
cmp    %ebp,%r13d
jne    13a3 <fpattern_submatch+0x293>
jmp    1515 <fpattern_submatch+0x405>
xchg   %ax,%ax
add    $0x2,%rdi
cmp    %ebp,%r13d
jge    14e9 <fpattern_submatch+0x3d9>
jmp    13a0 <fpattern_submatch+0x290>
lea    0x3(%rdi),%rax
lea    -0x41(%rsi),%ebx
cmp    $0x25,%bl
ja     14fc <fpattern_submatch+0x3ec>
movzbl %bl,%ebx
bt     %rbx,%r10
jae    14fc <fpattern_submatch+0x3ec>
lea    -0x61(%rsi),%eax
xor    %ebx,%ebx
cmp    $0x6,%al
setae  %bl
shl    $0x5,%ebx
add    %ebx,%esi
add    $0xffffffa9,%esi
movsbl 0x3(%rdi),%eax
add    $0x4,%rdi
shl    $0x4,%esi
lea    -0x30(%rax),%ebx
cmp    $0x9,%bl
ja     14c9 <fpattern_submatch+0x3b9>
add    $0xffffffd0,%eax
or     %esi,%eax
mov    %eax,%esi
cmp    %ebp,%r13d
jge    14e9 <fpattern_submatch+0x3d9>
jmp    13a0 <fpattern_submatch+0x290>
lea    -0x61(%rax),%ebx
xor    %ecx,%ecx
cmp    $0x6,%bl
setae  %cl
shl    $0x5,%ecx
add    %ecx,%eax
add    $0xffffffa9,%eax
or     %esi,%eax
mov    %eax,%esi
cmp    %ebp,%r13d
jl     13a0 <fpattern_submatch+0x290>
cmp    %esi,%r13d
jg     13a0 <fpattern_submatch+0x290>
jmp    152c <fpattern_submatch+0x41c>
mov    %rax,%rdi
jmp    1437 <fpattern_submatch+0x327>
mov    %rax,%rdi
cmp    %ebp,%r13d
jge    14e9 <fpattern_submatch+0x3d9>
jmp    13a0 <fpattern_submatch+0x290>
nopl   0x0(%rax)
mov    %r11d,%eax
jmp    153d <fpattern_submatch+0x42d>
cmp    $0x7d,%al
je     153a <fpattern_submatch+0x42a>
nopl   0x0(%rax)
cmpb   $0x7d,0x1(%rdi)
lea    0x1(%rdi),%rdi
jne    1520 <fpattern_submatch+0x410>
jmp    153a <fpattern_submatch+0x42a>
add    $0xffffffffffffffff,%rdi
cmpb   $0x7d,0x1(%rdi)
lea    0x1(%rdi),%rdi
jne    1530 <fpattern_submatch+0x420>
mov    %r8d,%eax
test   %al,%al
je     155b <fpattern_submatch+0x44b>
lea    -0x1(%rdx),%eax
movsbl 0x1(%r14),%r13d
add    $0x1,%r14
cmp    $0x1,%edx
mov    %eax,%edx
jg     1380 <fpattern_submatch+0x270>
mov    %r9d,%edx
add    $0x1,%rdi
mov    %rdi,%r12
jmp    114c <fpattern_submatch+0x3c>
test   %edx,%edx
jne    1145 <fpattern_submatch+0x35>
jmp    1695 <fpattern_submatch+0x585>
movzbl (%r12),%eax
lea    -0x30(%rax),%esi
cmp    $0xa,%sil
jae    1589 <fpattern_submatch+0x479>
add    $0xffffffd0,%eax
mov    %eax,%esi
jmp    15b7 <fpattern_submatch+0x4a7>
mov    $0x1,%esi
lea    -0x41(%rax),%ebp
cmp    $0x25,%bpl
ja     15e7 <fpattern_submatch+0x4d7>
movzbl %bpl,%ebp
bt     %rbp,%r10
jae    15e7 <fpattern_submatch+0x4d7>
lea    -0x61(%rax),%esi
xor    %ebp,%ebp
cmp    $0x6,%sil
setae  %bpl
shl    $0x5,%ebp
lea    (%rax,%rbp,1),%esi
add    $0xffffffa9,%esi
movsbl 0x2(%rdi),%eax
shl    $0x4,%esi
lea    -0x30(%rax),%ebp
cmp    $0x9,%bpl
ja     15cc <fpattern_submatch+0x4bc>
add    $0xffffffd0,%eax
jmp    15e0 <fpattern_submatch+0x4d0>
lea    -0x61(%rax),%ebp
xor    %ebx,%ebx
cmp    $0x6,%bpl
setae  %bl
shl    $0x5,%ebx
add    %ebx,%eax
add    $0xffffffa9,%eax
or     %esi,%eax
mov    $0x2,%esi
cmp    %r13d,%eax
jne    1695 <fpattern_submatch+0x585>
add    $0x1,%r14
add    $0xffffffff,%edx
lea    (%rdi,%rsi,1),%r12
add    $0x1,%r12
jmp    114c <fpattern_submatch+0x3c>
cmp    $0x5d,%al
je     163d <fpattern_submatch+0x52d>
nopl   0x0(%rax,%rax,1)
cmpb   $0x5d,0x1(%r12)
lea    0x1(%r12),%r12
jne    1610 <fpattern_submatch+0x500>
jmp    163d <fpattern_submatch+0x52d>
add    $0xffffffffffffffff,%r12
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmpb   $0x5d,0x1(%r12)
lea    0x1(%r12),%r12
jne    1630 <fpattern_submatch+0x520>
mov    %r8d,%r9d
test   %r9b,%r9b
je     1695 <fpattern_submatch+0x585>
add    $0x1,%r14
add    $0xffffffff,%edx
add    $0x1,%r12
jmp    114c <fpattern_submatch+0x3c>
xor    %eax,%eax
test   %edx,%edx
sete   %al
jmp    1697 <fpattern_submatch+0x587>
test   %edx,%edx
js     1695 <fpattern_submatch+0x585>
mov    %edx,%r15d
xor    %ebp,%ebp
nopw   0x0(%rax,%rax,1)
lea    (%r14,%r15,1),%rsi
mov    %r12,%rdi
mov    %ebp,%edx
call   1030 <fpattern_submatch@plt>
test   %eax,%eax
jne    16a6 <fpattern_submatch+0x596>
lea    -0x1(%r15),%rcx
add    $0x1,%ebp
xor    %eax,%eax
test   %r15,%r15
mov    %rcx,%r15
jg     1670 <fpattern_submatch+0x560>
jmp    1697 <fpattern_submatch+0x587>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0x1,%eax
jmp    1697 <fpattern_submatch+0x587>

LLVM IR (-O0):
define i32 @fpattern_submatch(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 i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i8*
store i8* %0, i8** %5
store i8* %1, i8** %6
store i32 %2, i32* %7
br label %17
17: ; preds = %691, %3
%18 = load i8*, i8** %5
%19 = load i8, i8* %18
%20 = sext i8 %19 to i32
%21 = icmp ne i32 %20, 0
br i1 %21, label %22, label %692
22: ; preds = %17
%23 = load i8*, i8** %6
%24 = load i8, i8* %23
%25 = zext i8 %24 to i32
store i32 %25, i32* %8
%26 = load i8*, i8** %5
%27 = load i8, i8* %26
%28 = zext i8 %27 to i32
store i32 %28, i32* %9
%29 = load i8*, i8** %5
%30 = getelementptr inbounds i8, i8* %29, i32 1
store i8* %30, i8** %5
%31 = load i32, i32* %9
switch i32 %31, label %681 [
i32 63, label %32
i32 42, label %41
i32 96, label %62
i32 91, label %152
i32 123, label %407
]
32: ; preds = %22
%33 = load i32, i32* %7
%34 = icmp eq i32 %33, 0
br i1 %34, label %35, label %36
35: ; preds = %32
store i32 0, i32* %4
br label %697
36: ; preds = %32
%37 = load i8*, i8** %6
%38 = getelementptr inbounds i8, i8* %37, i32 1
store i8* %38, i8** %6
%39 = load i32, i32* %7
%40 = add nsw i32 %39, -1
store i32 %40, i32* %7
br label %691
41: ; preds = %22
%42 = load i32, i32* %7
store i32 %42, i32* %11
br label %43
43: ; preds = %58, %41
%44 = load i32, i32* %11
%45 = icmp sge i32 %44, 0
br i1 %45, label %46, label %61
46: ; preds = %43
%47 = load i8*, i8** %5
%48 = load i8*, i8** %6
%49 = load i32, i32* %11
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds i8, i8* %48, i64 %50
%52 = load i32, i32* %7
%53 = load i32, i32* %11
%54 = sub nsw i32 %52, %53
%55 = call i32 @fpattern_submatch(i8* %47, i8* %51, i32 %54)
%56 = icmp ne i32 %55, 0
br i1 %56, label %57, label %58
57: ; preds = %46
store i32 1, i32* %4
br label %697
58: ; preds = %46
%59 = load i32, i32* %11
%60 = add nsw i32 %59, -1
store i32 %60, i32* %11
br label %43
61: ; preds = %43
store i32 0, i32* %4
br label %697
62: ; preds = %22
%63 = load i8*, i8** %5
%64 = load i8, i8* %63
%65 = zext i8 %64 to i32
store i32 %65, i32* %9
%66 = load i32, i32* %9
%67 = icmp sge i32 %66, 48
br i1 %67, label %68, label %71
68: ; preds = %62
%69 = load i32, i32* %9
%70 = icmp sle i32 %69, 57
br i1 %70, label %83, label %71
71: ; preds = %68, %62
%72 = load i32, i32* %9
%73 = icmp sge i32 %72, 97
br i1 %73, label %74, label %77
74: ; preds = %71
%75 = load i32, i32* %9
%76 = icmp sle i32 %75, 102
br i1 %76, label %83, label %77
77: ; preds = %74, %71
%78 = load i32, i32* %9
%79 = icmp sge i32 %78, 65
br i1 %79, label %80, label %140
80: ; preds = %77
%81 = load i32, i32* %9
%82 = icmp sle i32 %81, 70
br i1 %82, label %83, label %140
83: ; preds = %80, %74, %68
%84 = load i8*, i8** %5
%85 = getelementptr inbounds i8, i8* %84, i32 1
store i8* %85, i8** %5
%86 = load i8, i8* %85
%87 = sext i8 %86 to i32
store i32 %87, i32* %10
%88 = load i32, i32* %9
%89 = icmp sge i32 %88, 48
br i1 %89, label %90, label %96
90: ; preds = %83
%91 = load i32, i32* %9
%92 = icmp sle i32 %91, 57
br i1 %92, label %93, label %96
93: ; preds = %90
%94 = load i32, i32* %9
%95 = sub nsw i32 %94, 48
br label %111
96: ; preds = %90, %83
%97 = load i32, i32* %9
%98 = icmp sge i32 %97, 97
br i1 %98, label %99, label %105
99: ; preds = %96
%100 = load i32, i32* %9
%101 = icmp sle i32 %100, 102
br i1 %101, label %102, label %105
102: ; preds = %99
%103 = load i32, i32* %9
%104 = sub nsw i32 %103, 97
br label %108
105: ; preds = %99, %96
%106 = load i32, i32* %9
%107 = sub nsw i32 %106, 65
br label %108
108: ; preds = %105, %102
%109 = phi i32 [ %104, %102 ], [ %107, %105 ]
%110 = add nsw i32 10, %109
br label %111
111: ; preds = %108, %93
%112 = phi i32 [ %95, %93 ], [ %110, %108 ]
%113 = shl i32 %112, 4
%114 = load i32, i32* %10
%115 = icmp sge i32 %114, 48
br i1 %115, label %116, label %122
116: ; preds = %111
%117 = load i32, i32* %10
%118 = icmp sle i32 %117, 57
br i1 %118, label %119, label %122
119: ; preds = %116
%120 = load i32, i32* %10
%121 = sub nsw i32 %120, 48
br label %137
122: ; preds = %116, %111
%123 = load i32, i32* %10
%124 = icmp sge i32 %123, 97
br i1 %124, label %125, label %131
125: ; preds = %122
%126 = load i32, i32* %10
%127 = icmp sle i32 %126, 102
br i1 %127, label %128, label %131
128: ; preds = %125
%129 = load i32, i32* %10
%130 = sub nsw i32 %129, 97
br label %134
131: ; preds = %125, %122
%132 = load i32, i32* %10
%133 = sub nsw i32 %132, 65
br label %134
134: ; preds = %131, %128
%135 = phi i32 [ %130, %128 ], [ %133, %131 ]
%136 = add nsw i32 10, %135
br label %137
137: ; preds = %134, %119
%138 = phi i32 [ %121, %119 ], [ %136, %134 ]
%139 = or i32 %113, %138
store i32 %139, i32* %9
br label %140
140: ; preds = %137, %80, %77
%141 = load i32, i32* %8
%142 = load i32, i32* %9
%143 = icmp ne i32 %141, %142
br i1 %143, label %144, label %145
144: ; preds = %140
store i32 0, i32* %4
br label %697
145: ; preds = %140
%146 = load i8*, i8** %6
%147 = getelementptr inbounds i8, i8* %146, i32 1
store i8* %147, i8** %6
%148 = load i32, i32* %7
%149 = add nsw i32 %148, -1
store i32 %149, i32* %7
%150 = load i8*, i8** %5
%151 = getelementptr inbounds i8, i8* %150, i32 1
store i8* %151, i8** %5
br label %691
152: ; preds = %22
store i32 1, i32* %12
%153 = load i8*, i8** %5
%154 = load i8, i8* %153
%155 = sext i8 %154 to i32
%156 = icmp eq i32 %155, 33
br i1 %156, label %157, label %160
157: ; preds = %152
%158 = load i8*, i8** %5
%159 = getelementptr inbounds i8, i8* %158, i32 1
store i8* %159, i8** %5
store i32 0, i32* %12
br label %160
160: ; preds = %157, %152
%161 = load i32, i32* %12
%162 = icmp ne i32 %161, 0
%163 = xor i1 %162, true
%164 = zext i1 %163 to i32
store i32 %164, i32* %13
br label %165
165: ; preds = %395, %160
%166 = load i8*, i8** %5
%167 = load i8, i8* %166
%168 = sext i8 %167 to i32
%169 = icmp ne i32 %168, 93
br i1 %169, label %170, label %396
170: ; preds = %165
%171 = load i8*, i8** %5
%172 = getelementptr inbounds i8, i8* %171, i32 1
store i8* %172, i8** %5
%173 = load i8, i8* %171
%174 = zext i8 %173 to i32
store i32 %174, i32* %9
%175 = load i32, i32* %9
%176 = icmp eq i32 %175, 96
br i1 %176, label %177, label %259
177: ; preds = %170
%178 = load i8*, i8** %5
%179 = getelementptr inbounds i8, i8* %178, i32 1
store i8* %179, i8** %5
%180 = load i8, i8* %178
%181 = zext i8 %180 to i32
store i32 %181, i32* %9
%182 = load i32, i32* %9
%183 = icmp sge i32 %182, 48
br i1 %183, label %184, label %187
184: ; preds = %177
%185 = load i32, i32* %9
%186 = icmp sle i32 %185, 57
br i1 %186, label %199, label %187
187: ; preds = %184, %177
%188 = load i32, i32* %9
%189 = icmp sge i32 %188, 97
br i1 %189, label %190, label %193
190: ; preds = %187
%191 = load i32, i32* %9
%192 = icmp sle i32 %191, 102
br i1 %192, label %199, label %193
193: ; preds = %190, %187
%194 = load i32, i32* %9
%195 = icmp sge i32 %194, 65
br i1 %195, label %196, label %256
196: ; preds = %193
%197 = load i32, i32* %9
%198 = icmp sle i32 %197, 70
br i1 %198, label %199, label %256
199: ; preds = %196, %190, %184
%200 = load i8*, i8** %5
%201 = getelementptr inbounds i8, i8* %200, i32 1
store i8* %201, i8** %5
%202 = load i8, i8* %200
%203 = sext i8 %202 to i32
store i32 %203, i32* %10
%204 = load i32, i32* %9
%205 = icmp sge i32 %204, 48
br i1 %205, label %206, label %212
206: ; preds = %199
%207 = load i32, i32* %9
%208 = icmp sle i32 %207, 57
br i1 %208, label %209, label %212
209: ; preds = %206
%210 = load i32, i32* %9
%211 = sub nsw i32 %210, 48
br label %227
212: ; preds = %206, %199
%213 = load i32, i32* %9
%214 = icmp sge i32 %213, 97
br i1 %214, label %215, label %221
215: ; preds = %212
%216 = load i32, i32* %9
%217 = icmp sle i32 %216, 102
br i1 %217, label %218, label %221
218: ; preds = %215
%219 = load i32, i32* %9
%220 = sub nsw i32 %219, 97
br label %224
221: ; preds = %215, %212
%222 = load i32, i32* %9
%223 = sub nsw i32 %222, 65
br label %224
224: ; preds = %221, %218
%225 = phi i32 [ %220, %218 ], [ %223, %221 ]
%226 = add nsw i32 10, %225
br label %227
227: ; preds = %224, %209
%228 = phi i32 [ %211, %209 ], [ %226, %224 ]
%229 = shl i32 %228, 4
%230 = load i32, i32* %10
%231 = icmp sge i32 %230, 48
br i1 %231, label %232, label %238
232: ; preds = %227
%233 = load i32, i32* %10
%234 = icmp sle i32 %233, 57
br i1 %234, label %235, label %238
235: ; preds = %232
%236 = load i32, i32* %10
%237 = sub nsw i32 %236, 48
br label %253
238: ; preds = %232, %227
%239 = load i32, i32* %10
%240 = icmp sge i32 %239, 97
br i1 %240, label %241, label %247
241: ; preds = %238
%242 = load i32, i32* %10
%243 = icmp sle i32 %242, 102
br i1 %243, label %244, label %247
244: ; preds = %241
%245 = load i32, i32* %10
%246 = sub nsw i32 %245, 97
br label %250
247: ; preds = %241, %238
%248 = load i32, i32* %10
%249 = sub nsw i32 %248, 65
br label %250
250: ; preds = %247, %244
%251 = phi i32 [ %246, %244 ], [ %249, %247 ]
%252 = add nsw i32 10, %251
br label %253
253: ; preds = %250, %235
%254 = phi i32 [ %237, %235 ], [ %252, %250 ]
%255 = or i32 %229, %254
store i32 %255, i32* %14
br label %258
256: ; preds = %196, %193
%257 = load i32, i32* %9
store i32 %257, i32* %14
br label %258
258: ; preds = %256, %253
br label %261
259: ; preds = %170
%260 = load i32, i32* %9
store i32 %260, i32* %14
br label %261
261: ; preds = %259, %258
%262 = load i8*, i8** %5
%263 = load i8, i8* %262
%264 = sext i8 %263 to i32
%265 = icmp eq i32 %264, 45
br i1 %265, label %266, label %379
266: ; preds = %261
%267 = load i8*, i8** %5
%268 = getelementptr inbounds i8, i8* %267, i32 1
store i8* %268, i8** %5
%269 = load i8*, i8** %5
%270 = getelementptr inbounds i8, i8* %269, i32 1
store i8* %270, i8** %5
%271 = load i8, i8* %269
%272 = zext i8 %271 to i32
store i32 %272, i32* %9
%273 = load i32, i32* %9
%274 = icmp eq i32 %273, 96
br i1 %274, label %275, label %357
275: ; preds = %266
%276 = load i8*, i8** %5
%277 = getelementptr inbounds i8, i8* %276, i32 1
store i8* %277, i8** %5
%278 = load i8, i8* %276
%279 = zext i8 %278 to i32
store i32 %279, i32* %9
%280 = load i32, i32* %9
%281 = icmp sge i32 %280, 48
br i1 %281, label %282, label %285
282: ; preds = %275
%283 = load i32, i32* %9
%284 = icmp sle i32 %283, 57
br i1 %284, label %297, label %285
285: ; preds = %282, %275
%286 = load i32, i32* %9
%287 = icmp sge i32 %286, 97
br i1 %287, label %288, label %291
288: ; preds = %285
%289 = load i32, i32* %9
%290 = icmp sle i32 %289, 102
br i1 %290, label %297, label %291
291: ; preds = %288, %285
%292 = load i32, i32* %9
%293 = icmp sge i32 %292, 65
br i1 %293, label %294, label %354
294: ; preds = %291
%295 = load i32, i32* %9
%296 = icmp sle i32 %295, 70
br i1 %296, label %297, label %354
297: ; preds = %294, %288, %282
%298 = load i8*, i8** %5
%299 = getelementptr inbounds i8, i8* %298, i32 1
store i8* %299, i8** %5
%300 = load i8, i8* %298
%301 = sext i8 %300 to i32
store i32 %301, i32* %10
%302 = load i32, i32* %9
%303 = icmp sge i32 %302, 48
br i1 %303, label %304, label %310
304: ; preds = %297
%305 = load i32, i32* %9
%306 = icmp sle i32 %305, 57
br i1 %306, label %307, label %310
307: ; preds = %304
%308 = load i32, i32* %9
%309 = sub nsw i32 %308, 48
br label %325
310: ; preds = %304, %297
%311 = load i32, i32* %9
%312 = icmp sge i32 %311, 97
br i1 %312, label %313, label %319
313: ; preds = %310
%314 = load i32, i32* %9
%315 = icmp sle i32 %314, 102
br i1 %315, label %316, label %319
316: ; preds = %313
%317 = load i32, i32* %9
%318 = sub nsw i32 %317, 97
br label %322
319: ; preds = %313, %310
%320 = load i32, i32* %9
%321 = sub nsw i32 %320, 65
br label %322
322: ; preds = %319, %316
%323 = phi i32 [ %318, %316 ], [ %321, %319 ]
%324 = add nsw i32 10, %323
br label %325
325: ; preds = %322, %307
%326 = phi i32 [ %309, %307 ], [ %324, %322 ]
%327 = shl i32 %326, 4
%328 = load i32, i32* %10
%329 = icmp sge i32 %328, 48
br i1 %329, label %330, label %336
330: ; preds = %325
%331 = load i32, i32* %10
%332 = icmp sle i32 %331, 57
br i1 %332, label %333, label %336
333: ; preds = %330
%334 = load i32, i32* %10
%335 = sub nsw i32 %334, 48
br label %351
336: ; preds = %330, %325
%337 = load i32, i32* %10
%338 = icmp sge i32 %337, 97
br i1 %338, label %339, label %345
339: ; preds = %336
%340 = load i32, i32* %10
%341 = icmp sle i32 %340, 102
br i1 %341, label %342, label %345
342: ; preds = %339
%343 = load i32, i32* %10
%344 = sub nsw i32 %343, 97
br label %348
345: ; preds = %339, %336
%346 = load i32, i32* %10
%347 = sub nsw i32 %346, 65
br label %348
348: ; preds = %345, %342
%349 = phi i32 [ %344, %342 ], [ %347, %345 ]
%350 = add nsw i32 10, %349
br label %351
351: ; preds = %348, %333
%352 = phi i32 [ %335, %333 ], [ %350, %348 ]
%353 = or i32 %327, %352
store i32 %353, i32* %15
br label %356
354: ; preds = %294, %291
%355 = load i32, i32* %9
store i32 %355, i32* %15
br label %356
356: ; preds = %354, %351
br label %359
357: ; preds = %266
%358 = load i32, i32* %9
store i32 %358, i32* %15
br label %359
359: ; preds = %357, %356
%360 = load i32, i32* %8
%361 = load i32, i32* %14
%362 = icmp sge i32 %360, %361
br i1 %362, label %363, label %378
363: ; preds = %359
%364 = load i32, i32* %8
%365 = load i32, i32* %15
%366 = icmp sle i32 %364, %365
br i1 %366, label %367, label %378
367: ; preds = %363
%368 = load i32, i32* %12
store i32 %368, i32* %13
br label %369
369: ; preds = %374, %367
%370 = load i8*, i8** %5
%371 = load i8, i8* %370
%372 = sext i8 %371 to i32
%373 = icmp ne i32 %372, 93
br i1 %373, label %374, label %377
374: ; preds = %369
%375 = load i8*, i8** %5
%376 = getelementptr inbounds i8, i8* %375, i32 1
store i8* %376, i8** %5
br label %369
377: ; preds = %369
br label %396
378: ; preds = %363, %359
br label %395
379: ; preds = %261
%380 = load i32, i32* %8
%381 = load i32, i32* %14
%382 = icmp eq i32 %380, %381
br i1 %382, label %383, label %394
383: ; preds = %379
%384 = load i32, i32* %12
store i32 %384, i32* %13
br label %385
385: ; preds = %390, %383
%386 = load i8*, i8** %5
%387 = load i8, i8* %386
%388 = sext i8 %387 to i32
%389 = icmp ne i32 %388, 93
br i1 %389, label %390, label %393
390: ; preds = %385
%391 = load i8*, i8** %5
%392 = getelementptr inbounds i8, i8* %391, i32 1
store i8* %392, i8** %5
br label %385
393: ; preds = %385
br label %396
394: ; preds = %379
br label %395
395: ; preds = %394, %378
br label %165
396: ; preds = %393, %377, %165
%397 = load i32, i32* %13
%398 = icmp ne i32 %397, 0
br i1 %398, label %400, label %399
399: ; preds = %396
store i32 0, i32* %4
br label %697
400: ; preds = %396
%401 = load i8*, i8** %6
%402 = getelementptr inbounds i8, i8* %401, i32 1
store i8* %402, i8** %6
%403 = load i32, i32* %7
%404 = add nsw i32 %403, -1
store i32 %404, i32* %7
%405 = load i8*, i8** %5
%406 = getelementptr inbounds i8, i8* %405, i32 1
store i8* %406, i8** %5
br label %691
407: ; preds = %22
store i32 1, i32* %12
%408 = load i8*, i8** %5
%409 = load i8, i8* %408
%410 = sext i8 %409 to i32
%411 = icmp eq i32 %410, 33
br i1 %411, label %412, label %415
412: ; preds = %407
%413 = load i8*, i8** %5
%414 = getelementptr inbounds i8, i8* %413, i32 1
store i8* %414, i8** %5
store i32 0, i32* %12
br label %415
415: ; preds = %412, %407
br label %416
416: ; preds = %676, %415
%417 = load i8*, i8** %5
store i8* %417, i8** %16
%418 = load i32, i32* %12
%419 = icmp ne i32 %418, 0
%420 = xor i1 %419, true
%421 = zext i1 %420 to i32
store i32 %421, i32* %13
br label %422
422: ; preds = %652, %416
%423 = load i8*, i8** %5
%424 = load i8, i8* %423
%425 = sext i8 %424 to i32
%426 = icmp ne i32 %425, 125
br i1 %426, label %427, label %653
427: ; preds = %422
%428 = load i8*, i8** %5
%429 = getelementptr inbounds i8, i8* %428, i32 1
store i8* %429, i8** %5
%430 = load i8, i8* %428
%431 = zext i8 %430 to i32
store i32 %431, i32* %9
%432 = load i32, i32* %9
%433 = icmp eq i32 %432, 96
br i1 %433, label %434, label %516
434: ; preds = %427
%435 = load i8*, i8** %5
%436 = getelementptr inbounds i8, i8* %435, i32 1
store i8* %436, i8** %5
%437 = load i8, i8* %435
%438 = zext i8 %437 to i32
store i32 %438, i32* %9
%439 = load i32, i32* %9
%440 = icmp sge i32 %439, 48
br i1 %440, label %441, label %444
441: ; preds = %434
%442 = load i32, i32* %9
%443 = icmp sle i32 %442, 57
br i1 %443, label %456, label %444
444: ; preds = %441, %434
%445 = load i32, i32* %9
%446 = icmp sge i32 %445, 97
br i1 %446, label %447, label %450
447: ; preds = %444
%448 = load i32, i32* %9
%449 = icmp sle i32 %448, 102
br i1 %449, label %456, label %450
450: ; preds = %447, %444
%451 = load i32, i32* %9
%452 = icmp sge i32 %451, 65
br i1 %452, label %453, label %513
453: ; preds = %450
%454 = load i32, i32* %9
%455 = icmp sle i32 %454, 70
br i1 %455, label %456, label %513
456: ; preds = %453, %447, %441
%457 = load i8*, i8** %5
%458 = getelementptr inbounds i8, i8* %457, i32 1
store i8* %458, i8** %5
%459 = load i8, i8* %457
%460 = sext i8 %459 to i32
store i32 %460, i32* %10
%461 = load i32, i32* %9
%462 = icmp sge i32 %461, 48
br i1 %462, label %463, label %469
463: ; preds = %456
%464 = load i32, i32* %9
%465 = icmp sle i32 %464, 57
br i1 %465, label %466, label %469
466: ; preds = %463
%467 = load i32, i32* %9
%468 = sub nsw i32 %467, 48
br label %484
469: ; preds = %463, %456
%470 = load i32, i32* %9
%471 = icmp sge i32 %470, 97
br i1 %471, label %472, label %478
472: ; preds = %469
%473 = load i32, i32* %9
%474 = icmp sle i32 %473, 102
br i1 %474, label %475, label %478
475: ; preds = %472
%476 = load i32, i32* %9
%477 = sub nsw i32 %476, 97
br label %481
478: ; preds = %472, %469
%479 = load i32, i32* %9
%480 = sub nsw i32 %479, 65
br label %481
481: ; preds = %478, %475
%482 = phi i32 [ %477, %475 ], [ %480, %478 ]
%483 = add nsw i32 10, %482
br label %484
484: ; preds = %481, %466
%485 = phi i32 [ %468, %466 ], [ %483, %481 ]
%486 = shl i32 %485, 4
%487 = load i32, i32* %10
%488 = icmp sge i32 %487, 48
br i1 %488, label %489, label %495
489: ; preds = %484
%490 = load i32, i32* %10
%491 = icmp sle i32 %490, 57
br i1 %491, label %492, label %495
492: ; preds = %489
%493 = load i32, i32* %10
%494 = sub nsw i32 %493, 48
br label %510
495: ; preds = %489, %484
%496 = load i32, i32* %10
%497 = icmp sge i32 %496, 97
br i1 %497, label %498, label %504
498: ; preds = %495
%499 = load i32, i32* %10
%500 = icmp sle i32 %499, 102
br i1 %500, label %501, label %504
501: ; preds = %498
%502 = load i32, i32* %10
%503 = sub nsw i32 %502, 97
br label %507
504: ; preds = %498, %495
%505 = load i32, i32* %10
%506 = sub nsw i32 %505, 65
br label %507
507: ; preds = %504, %501
%508 = phi i32 [ %503, %501 ], [ %506, %504 ]
%509 = add nsw i32 10, %508
br label %510
510: ; preds = %507, %492
%511 = phi i32 [ %494, %492 ], [ %509, %507 ]
%512 = or i32 %486, %511
store i32 %512, i32* %14
br label %515
513: ; preds = %453, %450
%514 = load i32, i32* %9
store i32 %514, i32* %14
br label %515
515: ; preds = %513, %510
br label %518
516: ; preds = %427
%517 = load i32, i32* %9
store i32 %517, i32* %14
br label %518
518: ; preds = %516, %515
%519 = load i8*, i8** %5
%520 = load i8, i8* %519
%521 = sext i8 %520 to i32
%522 = icmp eq i32 %521, 45
br i1 %522, label %523, label %636
523: ; preds = %518
%524 = load i8*, i8** %5
%525 = getelementptr inbounds i8, i8* %524, i32 1
store i8* %525, i8** %5
%526 = load i8*, i8** %5
%527 = getelementptr inbounds i8, i8* %526, i32 1
store i8* %527, i8** %5
%528 = load i8, i8* %526
%529 = zext i8 %528 to i32
store i32 %529, i32* %9
%530 = load i32, i32* %9
%531 = icmp eq i32 %530, 96
br i1 %531, label %532, label %614
532: ; preds = %523
%533 = load i8*, i8** %5
%534 = getelementptr inbounds i8, i8* %533, i32 1
store i8* %534, i8** %5
%535 = load i8, i8* %533
%536 = zext i8 %535 to i32
store i32 %536, i32* %9
%537 = load i32, i32* %9
%538 = icmp sge i32 %537, 48
br i1 %538, label %539, label %542
539: ; preds = %532
%540 = load i32, i32* %9
%541 = icmp sle i32 %540, 57
br i1 %541, label %554, label %542
542: ; preds = %539, %532
%543 = load i32, i32* %9
%544 = icmp sge i32 %543, 97
br i1 %544, label %545, label %548
545: ; preds = %542
%546 = load i32, i32* %9
%547 = icmp sle i32 %546, 102
br i1 %547, label %554, label %548
548: ; preds = %545, %542
%549 = load i32, i32* %9
%550 = icmp sge i32 %549, 65
br i1 %550, label %551, label %611
551: ; preds = %548
%552 = load i32, i32* %9
%553 = icmp sle i32 %552, 70
br i1 %553, label %554, label %611
554: ; preds = %551, %545, %539
%555 = load i8*, i8** %5
%556 = getelementptr inbounds i8, i8* %555, i32 1
store i8* %556, i8** %5
%557 = load i8, i8* %555
%558 = sext i8 %557 to i32
store i32 %558, i32* %10
%559 = load i32, i32* %9
%560 = icmp sge i32 %559, 48
br i1 %560, label %561, label %567
561: ; preds = %554
%562 = load i32, i32* %9
%563 = icmp sle i32 %562, 57
br i1 %563, label %564, label %567
564: ; preds = %561
%565 = load i32, i32* %9
%566 = sub nsw i32 %565, 48
br label %582
567: ; preds = %561, %554
%568 = load i32, i32* %9
%569 = icmp sge i32 %568, 97
br i1 %569, label %570, label %576
570: ; preds = %567
%571 = load i32, i32* %9
%572 = icmp sle i32 %571, 102
br i1 %572, label %573, label %576
573: ; preds = %570
%574 = load i32, i32* %9
%575 = sub nsw i32 %574, 97
br label %579
576: ; preds = %570, %567
%577 = load i32, i32* %9
%578 = sub nsw i32 %577, 65
br label %579
579: ; preds = %576, %573
%580 = phi i32 [ %575, %573 ], [ %578, %576 ]
%581 = add nsw i32 10, %580
br label %582
582: ; preds = %579, %564
%583 = phi i32 [ %566, %564 ], [ %581, %579 ]
%584 = shl i32 %583, 4
%585 = load i32, i32* %10
%586 = icmp sge i32 %585, 48
br i1 %586, label %587, label %593
587: ; preds = %582
%588 = load i32, i32* %10
%589 = icmp sle i32 %588, 57
br i1 %589, label %590, label %593
590: ; preds = %587
%591 = load i32, i32* %10
%592 = sub nsw i32 %591, 48
br label %608
593: ; preds = %587, %582
%594 = load i32, i32* %10
%595 = icmp sge i32 %594, 97
br i1 %595, label %596, label %602
596: ; preds = %593
%597 = load i32, i32* %10
%598 = icmp sle i32 %597, 102
br i1 %598, label %599, label %602
599: ; preds = %596
%600 = load i32, i32* %10
%601 = sub nsw i32 %600, 97
br label %605
602: ; preds = %596, %593
%603 = load i32, i32* %10
%604 = sub nsw i32 %603, 65
br label %605
605: ; preds = %602, %599
%606 = phi i32 [ %601, %599 ], [ %604, %602 ]
%607 = add nsw i32 10, %606
br label %608
608: ; preds = %605, %590
%609 = phi i32 [ %592, %590 ], [ %607, %605 ]
%610 = or i32 %584, %609
store i32 %610, i32* %15
br label %613
611: ; preds = %551, %548
%612 = load i32, i32* %9
store i32 %612, i32* %15
br label %613
613: ; preds = %611, %608
br label %616
614: ; preds = %523
%615 = load i32, i32* %9
store i32 %615, i32* %15
br label %616
616: ; preds = %614, %613
%617 = load i32, i32* %8
%618 = load i32, i32* %14
%619 = icmp sge i32 %617, %618
br i1 %619, label %620, label %635
620: ; preds = %616
%621 = load i32, i32* %8
%622 = load i32, i32* %15
%623 = icmp sle i32 %621, %622
br i1 %623, label %624, label %635
624: ; preds = %620
%625 = load i32, i32* %12
store i32 %625, i32* %13
br label %626
626: ; preds = %631, %624
%627 = load i8*, i8** %5
%628 = load i8, i8* %627
%629 = sext i8 %628 to i32
%630 = icmp ne i32 %629, 125
br i1 %630, label %631, label %634
631: ; preds = %626
%632 = load i8*, i8** %5
%633 = getelementptr inbounds i8, i8* %632, i32 1
store i8* %633, i8** %5
br label %626
634: ; preds = %626
br label %653
635: ; preds = %620, %616
br label %652
636: ; preds = %518
%637 = load i32, i32* %8
%638 = load i32, i32* %14
%639 = icmp eq i32 %637, %638
br i1 %639, label %640, label %651
640: ; preds = %636
%641 = load i32, i32* %12
store i32 %641, i32* %13
br label %642
642: ; preds = %647, %640
%643 = load i8*, i8** %5
%644 = load i8, i8* %643
%645 = sext i8 %644 to i32
%646 = icmp ne i32 %645, 125
br i1 %646, label %647, label %650
647: ; preds = %642
%648 = load i8*, i8** %5
%649 = getelementptr inbounds i8, i8* %648, i32 1
store i8* %649, i8** %5
br label %642
650: ; preds = %642
br label %653
651: ; preds = %636
br label %652
652: ; preds = %651, %635
br label %422
653: ; preds = %650, %634, %422
%654 = load i32, i32* %13
%655 = icmp ne i32 %654, 0
br i1 %655, label %656, label %669
656: ; preds = %653
%657 = load i8*, i8** %6
%658 = getelementptr inbounds i8, i8* %657, i32 1
store i8* %658, i8** %6
%659 = load i32, i32* %7
%660 = add nsw i32 %659, -1
store i32 %660, i32* %7
%661 = load i8*, i8** %6
%662 = load i8, i8* %661
%663 = sext i8 %662 to i32
store i32 %663, i32* %8
%664 = load i32, i32* %7
%665 = icmp sgt i32 %664, 0
br i1 %665, label %666, label %668
666: ; preds = %656
%667 = load i8*, i8** %16
store i8* %667, i8** %5
br label %668
668: ; preds = %666, %656
br label %669
669: ; preds = %668, %653
br label %670
670: ; preds = %669
%671 = load i32, i32* %13
%672 = icmp ne i32 %671, 0
br i1 %672, label %673, label %676
673: ; preds = %670
%674 = load i32, i32* %7
%675 = icmp sgt i32 %674, 0
br label %676
676: ; preds = %673, %670
%677 = phi i1 [ false, %670 ], [ %675, %673 ]
br i1 %677, label %416, label %678
678: ; preds = %676
%679 = load i8*, i8** %5
%680 = getelementptr inbounds i8, i8* %679, i32 1
store i8* %680, i8** %5
br label %691
681: ; preds = %22
%682 = load i32, i32* %8
%683 = load i32, i32* %9
%684 = icmp ne i32 %682, %683
br i1 %684, label %685, label %686
685: ; preds = %681
store i32 0, i32* %4
br label %697
686: ; preds = %681
%687 = load i8*, i8** %6
%688 = getelementptr inbounds i8, i8* %687, i32 1
store i8* %688, i8** %6
%689 = load i32, i32* %7
%690 = add nsw i32 %689, -1
store i32 %690, i32* %7
br label %691
691: ; preds = %686, %678, %400, %145, %36
br label %17
692: ; preds = %17
%693 = load i32, i32* %7
%694 = icmp ne i32 %693, 0
br i1 %694, label %695, label %696
695: ; preds = %692
store i32 0, i32* %4
br label %697
696: ; preds = %692
store i32 1, i32* %4
br label %697
697: ; preds = %696, %695, %685, %399, %144, %61, %57, %35
%698 = load i32, i32* %4
ret i32 %698
}

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