#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ isalnum(char const);
int /*<<< orphan*/ isdigit(char const);
int /*<<< orphan*/ isxdigit(char const);
int /*<<< orphan*/ toupper(char const);
int decode_entity(const char **ptr, const char *end) {
  const char *p = *ptr;
  int value = -1;
  if (++p == end)
    return -1;
  switch (*p++) {
  case '#': {
    int digits = 0;
    value = 0;
    if (*p == 'x')
      for (++p; value < 256 && p < end && isxdigit(*p); p++, digits++)
        value =
            (value << 4) + ((*p) < 'A' ? (*p) - '0' : toupper(*p) - 'A' + 10);
    else
      for (; value < 256 && p < end && isdigit(*p); p++, digits++)
        value = (value * 10) + (*p - '0');
    if (!digits)
      return -1;
    if (!value || (value & ~0x7f))
      return -1;
    *ptr = (p += 0, p < end && *p == ';' ? ++p : p);
    return value;
  }
  case 'g':
    if (((p + 1 == end || (p + 1 < end && !isalnum(p[1]))) && p[0] == 't'))
      value = '>', *ptr = (p += 1, p < end && *p == ';' ? ++p : p);
    break;
  case 'l':
    if (((p + 1 == end || (p + 1 < end && !isalnum(p[1]))) && p[0] == 't'))
      value = '<', *ptr = (p += 1, p < end && *p == ';' ? ++p : p);
    break;
  case 'a':
    if (((p + 2 == end || (p + 2 < end && !isalnum(p[2]))) && p[0] == 'm' &&
         p[1] == 'p'))
      value = '&', *ptr = (p += 2, p < end && *p == ';' ? ++p : p);
    else if (((p + 3 == end || (p + 3 < end && !isalnum(p[3]))) &&
              p[0] == 'p' && p[1] == 'o' && p[2] == 's'))
      value = '\'', *ptr = (p += 3, p < end && *p == ';' ? ++p : p);
    break;
  case 'q':
    if (((p + 3 == end || (p + 3 < end && !isalnum(p[3]))) && p[0] == 'u' &&
         p[1] == 'o' && p[2] == 't'))
      value = '\"', *ptr = (p += 3, p < end && *p == ';' ? ++p : p);
    break;
  case 'n':
    if (((p + 3 == end || (p + 3 < end && !isalnum(p[3]))) && p[0] == 'b' &&
         p[1] == 's' && p[2] == 'p'))
      value = ' ', *ptr = (p += 3, p < end && *p == ';' ? ++p : p);
    break;
  }
  return value;
}


x86 assembly (clang, -O0):
<decode_entity>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x20(%rbp)
movl   $0xffffffff,-0x24(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
cmp    -0x18(%rbp),%rax
jne    1187 <decode_entity+0x47>
movl   $0xffffffff,-0x4(%rbp)
jmp    1864 <decode_entity+0x724>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x2c(%rbp)
sub    $0x23,%eax
je     11ff <decode_entity+0xbf>
jmp    11aa <decode_entity+0x6a>
mov    -0x2c(%rbp),%eax
sub    $0x61,%eax
je     1542 <decode_entity+0x402>
jmp    11bb <decode_entity+0x7b>
mov    -0x2c(%rbp),%eax
sub    $0x67,%eax
je     13f2 <decode_entity+0x2b2>
jmp    11cc <decode_entity+0x8c>
mov    -0x2c(%rbp),%eax
sub    $0x6c,%eax
je     149a <decode_entity+0x35a>
jmp    11dd <decode_entity+0x9d>
mov    -0x2c(%rbp),%eax
sub    $0x6e,%eax
je     1794 <decode_entity+0x654>
jmp    11ee <decode_entity+0xae>
mov    -0x2c(%rbp),%eax
sub    $0x71,%eax
je     16ca <decode_entity+0x58a>
jmp    185e <decode_entity+0x71e>
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x78,%eax
jne    12dd <decode_entity+0x19d>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
xor    %eax,%eax
cmpl   $0x100,-0x24(%rbp)
mov    %al,-0x2d(%rbp)
jge    1263 <decode_entity+0x123>
mov    -0x20(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x2d(%rbp)
jae    1263 <decode_entity+0x123>
mov    -0x20(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isxdigit@plt>
cmp    $0x0,%eax
setne  %al
mov    %al,-0x2d(%rbp)
mov    -0x2d(%rbp),%al
test   $0x1,%al
jne    1273 <decode_entity+0x133>
jmp    12d8 <decode_entity+0x198>
mov    -0x24(%rbp),%eax
shl    $0x4,%eax
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x41,%eax
jge    129e <decode_entity+0x15e>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x38(%rbp)
jmp    12b3 <decode_entity+0x173>
mov    -0x20(%rbp),%rax
movsbl (%rax),%edi
call   1040 <toupper@plt>
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%eax
mov    -0x38(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1229 <decode_entity+0xe9>
jmp    135e <decode_entity+0x21e>
jmp    12e2 <decode_entity+0x1a2>
xor    %eax,%eax
cmpl   $0x100,-0x24(%rbp)
mov    %al,-0x39(%rbp)
jge    131c <decode_entity+0x1dc>
mov    -0x20(%rbp),%rcx
xor    %eax,%eax
cmp    -0x18(%rbp),%rcx
mov    %al,-0x39(%rbp)
jae    131c <decode_entity+0x1dc>
mov    -0x20(%rbp),%rax
movsbl (%rax),%edi
call   1030 <isdigit@plt>
cmp    $0x0,%eax
setne  %al
mov    %al,-0x39(%rbp)
mov    -0x39(%rbp),%al
test   $0x1,%al
jne    132c <decode_entity+0x1ec>
jmp    1359 <decode_entity+0x219>
imul   $0xa,-0x24(%rbp),%eax
mov    -0x20(%rbp),%rcx
movsbl (%rcx),%ecx
sub    $0x30,%ecx
add    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    12e2 <decode_entity+0x1a2>
jmp    135e <decode_entity+0x21e>
cmpl   $0x0,-0x28(%rbp)
jne    1374 <decode_entity+0x234>
movl   $0xffffffff,-0x4(%rbp)
jmp    1864 <decode_entity+0x724>
cmpl   $0x0,-0x24(%rbp)
je     138d <decode_entity+0x24d>
mov    -0x24(%rbp),%eax
and    $0xffffff80,%eax
cmp    $0x0,%eax
je     1399 <decode_entity+0x259>
movl   $0xffffffff,-0x4(%rbp)
jmp    1864 <decode_entity+0x724>
mov    -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    13d4 <decode_entity+0x294>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
jne    13d4 <decode_entity+0x294>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    %rax,-0x48(%rbp)
jmp    13dc <decode_entity+0x29c>
mov    -0x20(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1864 <decode_entity+0x724>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
cmp    -0x18(%rbp),%rax
je     142c <decode_entity+0x2ec>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
cmp    -0x18(%rbp),%rax
jae    1495 <decode_entity+0x355>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1050 <isalnum@plt>
cmp    $0x0,%eax
jne    1495 <decode_entity+0x355>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x74,%eax
jne    1495 <decode_entity+0x355>
movl   $0x3e,-0x24(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    1482 <decode_entity+0x342>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
jne    1482 <decode_entity+0x342>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    %rax,-0x50(%rbp)
jmp    148a <decode_entity+0x34a>
mov    -0x20(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
jmp    185e <decode_entity+0x71e>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
cmp    -0x18(%rbp),%rax
je     14d4 <decode_entity+0x394>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
cmp    -0x18(%rbp),%rax
jae    153d <decode_entity+0x3fd>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1050 <isalnum@plt>
cmp    $0x0,%eax
jne    153d <decode_entity+0x3fd>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x74,%eax
jne    153d <decode_entity+0x3fd>
movl   $0x3c,-0x24(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    152a <decode_entity+0x3ea>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
jne    152a <decode_entity+0x3ea>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    %rax,-0x58(%rbp)
jmp    1532 <decode_entity+0x3f2>
mov    -0x20(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x58(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
jmp    185e <decode_entity+0x71e>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
cmp    -0x18(%rbp),%rax
je     157c <decode_entity+0x43c>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
cmp    -0x18(%rbp),%rax
jae    15fb <decode_entity+0x4bb>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%edi
call   1050 <isalnum@plt>
cmp    $0x0,%eax
jne    15fb <decode_entity+0x4bb>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x6d,%eax
jne    15fb <decode_entity+0x4bb>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x70,%eax
jne    15fb <decode_entity+0x4bb>
movl   $0x26,-0x24(%rbp)
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    15e3 <decode_entity+0x4a3>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
jne    15e3 <decode_entity+0x4a3>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    %rax,-0x60(%rbp)
jmp    15eb <decode_entity+0x4ab>
mov    -0x20(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x60(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
jmp    16c5 <decode_entity+0x585>
mov    -0x20(%rbp),%rax
add    $0x3,%rax
cmp    -0x18(%rbp),%rax
je     1635 <decode_entity+0x4f5>
mov    -0x20(%rbp),%rax
add    $0x3,%rax
cmp    -0x18(%rbp),%rax
jae    16c0 <decode_entity+0x580>
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%edi
call   1050 <isalnum@plt>
cmp    $0x0,%eax
jne    16c0 <decode_entity+0x580>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x70,%eax
jne    16c0 <decode_entity+0x580>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x6f,%eax
jne    16c0 <decode_entity+0x580>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x73,%eax
jne    16c0 <decode_entity+0x580>
movl   $0x27,-0x24(%rbp)
mov    -0x20(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    16ad <decode_entity+0x56d>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
jne    16ad <decode_entity+0x56d>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    %rax,-0x68(%rbp)
jmp    16b5 <decode_entity+0x575>
mov    -0x20(%rbp),%rax
mov    %rax,-0x68(%rbp)
mov    -0x68(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
jmp    16c5 <decode_entity+0x585>
jmp    185e <decode_entity+0x71e>
mov    -0x20(%rbp),%rax
add    $0x3,%rax
cmp    -0x18(%rbp),%rax
je     1704 <decode_entity+0x5c4>
mov    -0x20(%rbp),%rax
add    $0x3,%rax
cmp    -0x18(%rbp),%rax
jae    178f <decode_entity+0x64f>
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%edi
call   1050 <isalnum@plt>
cmp    $0x0,%eax
jne    178f <decode_entity+0x64f>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x75,%eax
jne    178f <decode_entity+0x64f>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x6f,%eax
jne    178f <decode_entity+0x64f>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x74,%eax
jne    178f <decode_entity+0x64f>
movl   $0x22,-0x24(%rbp)
mov    -0x20(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    177c <decode_entity+0x63c>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
jne    177c <decode_entity+0x63c>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    %rax,-0x70(%rbp)
jmp    1784 <decode_entity+0x644>
mov    -0x20(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x70(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
jmp    185e <decode_entity+0x71e>
mov    -0x20(%rbp),%rax
add    $0x3,%rax
cmp    -0x18(%rbp),%rax
je     17ce <decode_entity+0x68e>
mov    -0x20(%rbp),%rax
add    $0x3,%rax
cmp    -0x18(%rbp),%rax
jae    1859 <decode_entity+0x719>
mov    -0x20(%rbp),%rax
movsbl 0x3(%rax),%edi
call   1050 <isalnum@plt>
cmp    $0x0,%eax
jne    1859 <decode_entity+0x719>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x62,%eax
jne    1859 <decode_entity+0x719>
mov    -0x20(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x73,%eax
jne    1859 <decode_entity+0x719>
mov    -0x20(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x70,%eax
jne    1859 <decode_entity+0x719>
movl   $0x20,-0x24(%rbp)
mov    -0x20(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    1846 <decode_entity+0x706>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3b,%eax
jne    1846 <decode_entity+0x706>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    %rax,-0x78(%rbp)
jmp    184e <decode_entity+0x70e>
mov    -0x20(%rbp),%rax
mov    %rax,-0x78(%rbp)
mov    -0x78(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
jmp    185e <decode_entity+0x71e>
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<decode_entity>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    (%rdi),%rbp
lea    0x1(%rbp),%rax
mov    $0xffffffff,%edx
cmp    %rsi,%rax
je     13c4 <decode_entity+0x284>
mov    %rsi,%r12
mov    %rdi,%rbx
lea    0x2(%rbp),%r14
movsbl 0x1(%rbp),%ecx
lea    -0x61(%rcx),%eax
cmp    $0x10,%eax
ja     11df <decode_entity+0x9f>
lea    0xe83(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x4(%rbp),%r13
cmp    %r12,%r13
je     11ac <decode_entity+0x6c>
jae    1377 <decode_entity+0x237>
movsbl 0x0(%r13),%edi
call   1050 <isalnum@plt>
mov    $0xffffffff,%edx
test   %eax,%eax
jne    1377 <decode_entity+0x237>
cmpb   $0x6d,(%r14)
jne    1377 <decode_entity+0x237>
cmpb   $0x70,0x3(%rbp)
jne    1377 <decode_entity+0x237>
mov    %r13,%r15
mov    $0x26,%r13d
cmp    %r12,%r15
jae    13be <decode_entity+0x27e>
lea    0x5(%rbp),%rax
cmpb   $0x3b,0x4(%rbp)
jmp    13ba <decode_entity+0x27a>
cmp    $0x23,%ecx
jne    13c4 <decode_entity+0x284>
mov    (%r14),%al
cmp    $0x78,%al
jne    13d5 <decode_entity+0x295>
add    $0x3,%rbp
cmp    %r12,%rbp
jae    13c4 <decode_entity+0x284>
mov    %rbx,(%rsp)
xor    %ebx,%ebx
xor    %r13d,%r13d
mov    %rbp,%r14
mov    $0x1,%r15d
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl (%r14),%edi
call   1060 <isxdigit@plt>
test   %eax,%eax
je     1436 <decode_entity+0x2f6>
shl    $0x4,%r13d
movsbl (%r14),%eax
cmp    $0x40,%eax
jg     1243 <decode_entity+0x103>
add    $0xffffffd0,%eax
jmp    124d <decode_entity+0x10d>
mov    %eax,%edi
call   1040 <toupper@plt>
add    $0xffffffc9,%eax
mov    $0xffffffff,%edx
add    %eax,%r13d
add    $0x1,%r14
cmp    $0xff,%r13d
jg     1446 <decode_entity+0x306>
add    $0x1,%ebx
cmp    %r12,%r14
jb     1220 <decode_entity+0xe0>
jmp    1446 <decode_entity+0x306>
lea    0x3(%rbp),%r15
cmp    %r12,%r15
je     1298 <decode_entity+0x158>
jae    13c4 <decode_entity+0x284>
movsbl (%r15),%edi
call   1050 <isalnum@plt>
mov    $0xffffffff,%edx
test   %eax,%eax
jne    13c4 <decode_entity+0x284>
cmpb   $0x74,(%r14)
jne    13c4 <decode_entity+0x284>
mov    $0x3e,%r13d
jmp    12df <decode_entity+0x19f>
lea    0x3(%rbp),%r15
cmp    %r12,%r15
je     12cf <decode_entity+0x18f>
jae    13c4 <decode_entity+0x284>
movsbl (%r15),%edi
call   1050 <isalnum@plt>
mov    $0xffffffff,%edx
test   %eax,%eax
jne    13c4 <decode_entity+0x284>
cmpb   $0x74,(%r14)
jne    13c4 <decode_entity+0x284>
mov    $0x3c,%r13d
cmp    %r12,%r15
jae    13be <decode_entity+0x27e>
lea    0x4(%rbp),%rax
cmpb   $0x3b,0x3(%rbp)
jmp    13ba <decode_entity+0x27a>
lea    0x5(%rbp),%r15
cmp    %r12,%r15
je     131a <decode_entity+0x1da>
jae    13c4 <decode_entity+0x284>
movsbl (%r15),%edi
call   1050 <isalnum@plt>
mov    $0xffffffff,%edx
test   %eax,%eax
jne    13c4 <decode_entity+0x284>
cmpb   $0x62,(%r14)
jne    13c4 <decode_entity+0x284>
cmpb   $0x73,0x3(%rbp)
jne    13c4 <decode_entity+0x284>
cmpb   $0x70,0x4(%rbp)
jne    13c4 <decode_entity+0x284>
mov    $0x20,%r13d
jmp    13ad <decode_entity+0x26d>
lea    0x5(%rbp),%r15
cmp    %r12,%r15
je     135d <decode_entity+0x21d>
jae    13c4 <decode_entity+0x284>
movsbl (%r15),%edi
call   1050 <isalnum@plt>
mov    $0xffffffff,%edx
test   %eax,%eax
jne    13c4 <decode_entity+0x284>
cmpb   $0x75,(%r14)
jne    13c4 <decode_entity+0x284>
cmpb   $0x6f,0x3(%rbp)
jne    13c4 <decode_entity+0x284>
cmpb   $0x74,0x4(%rbp)
jne    13c4 <decode_entity+0x284>
mov    $0x22,%r13d
jmp    13ad <decode_entity+0x26d>
lea    0x5(%rbp),%r15
cmp    %r12,%r15
je     1394 <decode_entity+0x254>
jae    13c4 <decode_entity+0x284>
movsbl (%r15),%edi
call   1050 <isalnum@plt>
mov    $0xffffffff,%edx
test   %eax,%eax
jne    13c4 <decode_entity+0x284>
cmpb   $0x70,(%r14)
jne    13c4 <decode_entity+0x284>
cmpb   $0x6f,0x3(%rbp)
jne    13c4 <decode_entity+0x284>
cmpb   $0x73,0x0(%r13)
jne    13c4 <decode_entity+0x284>
mov    $0x27,%r13d
cmp    %r12,%r15
jae    13be <decode_entity+0x27e>
lea    0x6(%rbp),%rax
cmpb   $0x3b,0x5(%rbp)
cmove  %rax,%r15
mov    %r15,(%rbx)
mov    %r13d,%edx
mov    %edx,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
cmp    %r12,%r14
jae    13c4 <decode_entity+0x284>
mov    %rbx,(%rsp)
movsbl %al,%edi
call   1030 <isdigit@plt>
test   %eax,%eax
je     143b <decode_entity+0x2fb>
add    $0x3,%rbp
xor    %r13d,%r13d
mov    $0xffffffff,%edx
mov    $0x1,%r15d
mov    %rbp,%r14
lea    0x0(%r13,%r13,4),%eax
movsbl -0x1(%rbp),%ecx
lea    (%rcx,%rax,2),%r13d
add    $0xffffffd0,%r13d
cmp    $0xff,%r13d
jg     1446 <decode_entity+0x306>
cmp    %r12,%r14
jae    1446 <decode_entity+0x306>
movsbl (%r14),%edi
call   1030 <isdigit@plt>
mov    $0xffffffff,%edx
lea    0x1(%r14),%rbp
test   %eax,%eax
jne    13fc <decode_entity+0x2bc>
jmp    1446 <decode_entity+0x306>
mov    %ebx,%r15d
jmp    1441 <decode_entity+0x301>
xor    %r13d,%r13d
xor    %r15d,%r15d
mov    $0xffffffff,%edx
test   %r15d,%r15d
je     13c4 <decode_entity+0x284>
lea    -0x1(%r13),%eax
cmp    $0x7e,%eax
mov    (%rsp),%rbx
ja     13c4 <decode_entity+0x284>
cmp    %r12,%r14
jae    1478 <decode_entity+0x338>
xor    %r15d,%r15d
cmpb   $0x3b,(%r14)
sete   %r15b
add    %r14,%r15
jmp    13be <decode_entity+0x27e>
mov    %r14,%r15
jmp    13be <decode_entity+0x27e>

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

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