#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 */
scalar_t__ isname(char);
scalar_t__ iswhite(char);
int /*<<< orphan*/ memcmp(char *, char *, int);
int /*<<< orphan*/ xml_emit_att_name(char *, char *);
int /*<<< orphan*/ xml_emit_att_value(char *, int /*<<< orphan*/);
int /*<<< orphan*/ xml_emit_cdata(char *, char *);
int /*<<< orphan*/ xml_emit_close_tag();
int /*<<< orphan*/ xml_emit_open_tag(char *, char *);
int /*<<< orphan*/ xml_emit_text(char *, char *);
char *xml_parse_imp(char *p) {
  char *mark;
  int quote;
parse_text:
  mark = p;
  while (*p && *p != '<')
    ++p;
  if (mark != p)
    xml_emit_text(mark, p);
  if (*p == '<') {
    ++p;
    goto parse_element;
  }
  return NULL;
parse_element:
  if (*p == '/') {
    ++p;
    goto parse_closing_element;
  }
  if (*p == '!') {
    ++p;
    goto parse_comment;
  }
  if (*p == '?') {
    ++p;
    goto parse_processing_instruction;
  }
  while (iswhite(*p))
    ++p;
  if (isname(*p))
    goto parse_element_name;
  return "syntax error in element";
parse_comment:
  if (*p == '[')
    goto parse_cdata;
  if (*p == 'D' && !memcmp(p, "DOCTYPE", 7))
    goto parse_declaration;
  if (*p == 'E' && !memcmp(p, "ENTITY", 6))
    goto parse_declaration;
  if (*p++ != '-')
    return "syntax error in comment (<! not followed by --)";
  if (*p++ != '-')
    return "syntax error in comment (<!- not followed by -)";
  while (*p) {
    if (p[0] == '-' && p[1] == '-' && p[2] == '>') {
      p += 3;
      goto parse_text;
    }
    ++p;
  }
  return "end of data in comment";
parse_declaration:
  while (*p)
    if (*p++ == '>')
      goto parse_text;
  return "end of data in declaration";
parse_cdata:
  if (p[1] != 'C' || p[2] != 'D' || p[3] != 'A' || p[4] != 'T' || p[5] != 'A' ||
      p[6] != '[')
    return "syntax error in CDATA section";
  p += 7;
  mark = p;
  while (*p) {
    if (p[0] == ']' && p[1] == ']' && p[2] == '>') {
      xml_emit_cdata(mark, p);
      p += 3;
      goto parse_text;
    }
    ++p;
  }
  return "end of data in CDATA section";
parse_processing_instruction:
  while (*p) {
    if (p[0] == '?' && p[1] == '>') {
      p += 2;
      goto parse_text;
    }
    ++p;
  }
  return "end of data in processing instruction";
parse_closing_element:
  while (iswhite(*p))
    ++p;
  while (isname(*p))
    ++p;
  while (iswhite(*p))
    ++p;
  if (*p != '>')
    return "syntax error in closing element";
  xml_emit_close_tag();
  ++p;
  goto parse_text;
parse_element_name:
  mark = p;
  while (isname(*p))
    ++p;
  xml_emit_open_tag(mark, p);
  if (*p == '>') {
    ++p;
    goto parse_text;
  }
  if (p[0] == '/' && p[1] == '>') {
    xml_emit_close_tag();
    p += 2;
    goto parse_text;
  }
  if (iswhite(*p))
    goto parse_attributes;
  return "syntax error after element name";
parse_attributes:
  while (iswhite(*p))
    ++p;
  if (isname(*p))
    goto parse_attribute_name;
  if (*p == '>') {
    ++p;
    goto parse_text;
  }
  if (p[0] == '/' && p[1] == '>') {
    xml_emit_close_tag();
    p += 2;
    goto parse_text;
  }
  return "syntax error in attributes";
parse_attribute_name:
  mark = p;
  while (isname(*p))
    ++p;
  xml_emit_att_name(mark, p);
  while (iswhite(*p))
    ++p;
  if (*p == '=') {
    ++p;
    goto parse_attribute_value;
  }
  return "syntax error after attribute name";
parse_attribute_value:
  while (iswhite(*p))
    ++p;
  quote = *p++;
  if (quote != '"' && quote != '\'')
    return "missing quote character";
  mark = p;
  while (*p && *p != quote)
    ++p;
  if (*p == quote) {
    xml_emit_att_value(mark, p++);
    goto parse_attributes;
  }
  return "end of data in attribute value";
}


x86 assembly (clang, -O0):
<xml_parse_imp>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x1d(%rbp)
je     11c9 <xml_parse_imp+0x39>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3c,%eax
setne  %al
mov    %al,-0x1d(%rbp)
mov    -0x1d(%rbp),%al
test   $0x1,%al
jne    11d9 <xml_parse_imp+0x49>
jmp    11ea <xml_parse_imp+0x5a>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    11a4 <xml_parse_imp+0x14>
mov    -0x18(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     1205 <xml_parse_imp+0x75>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   10b0 <xml_emit_text@plt>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3c,%eax
jne    1226 <xml_parse_imp+0x96>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1233 <xml_parse_imp+0xa3>
movq   $0x0,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1254 <xml_parse_imp+0xc4>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    15e8 <xml_parse_imp+0x458>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x21,%eax
jne    1275 <xml_parse_imp+0xe5>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    12ed <xml_parse_imp+0x15d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3f,%eax
jne    1296 <xml_parse_imp+0x106>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1583 <xml_parse_imp+0x3f3>
jmp    129b <xml_parse_imp+0x10b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1080 <iswhite@plt>
cmp    $0x0,%rax
je     12c2 <xml_parse_imp+0x132>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    129b <xml_parse_imp+0x10b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isname@plt>
cmp    $0x0,%rax
je     12dd <xml_parse_imp+0x14d>
jmp    16a4 <xml_parse_imp+0x514>
lea    0xd1c(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5b,%eax
jne    1302 <xml_parse_imp+0x172>
jmp    147b <xml_parse_imp+0x2eb>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x44,%eax
jne    1335 <xml_parse_imp+0x1a5>
mov    -0x10(%rbp),%rdi
lea    0xcfb(%rip),%rsi
mov    $0x7,%edx
call   1050 <memcmp@plt>
cmp    $0x0,%eax
jne    1335 <xml_parse_imp+0x1a5>
jmp    1434 <xml_parse_imp+0x2a4>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x45,%eax
jne    1368 <xml_parse_imp+0x1d8>
mov    -0x10(%rbp),%rdi
lea    0xcd0(%rip),%rsi
mov    $0x6,%edx
call   1050 <memcmp@plt>
cmp    $0x0,%eax
jne    1368 <xml_parse_imp+0x1d8>
jmp    1434 <xml_parse_imp+0x2a4>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
cmp    $0x2d,%eax
je     1393 <xml_parse_imp+0x203>
lea    0xc9d(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
cmp    $0x2d,%eax
je     13be <xml_parse_imp+0x22e>
lea    0xca2(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
jmp    13c3 <xml_parse_imp+0x233>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     1424 <xml_parse_imp+0x294>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    1413 <xml_parse_imp+0x283>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x2d,%eax
jne    1413 <xml_parse_imp+0x283>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x3e,%eax
jne    1413 <xml_parse_imp+0x283>
mov    -0x10(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x10(%rbp)
jmp    119c <xml_parse_imp+0xc>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13c3 <xml_parse_imp+0x233>
lea    0xc5c(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
jmp    1439 <xml_parse_imp+0x2a9>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     146b <xml_parse_imp+0x2db>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
cmp    $0x3e,%eax
jne    1466 <xml_parse_imp+0x2d6>
jmp    119c <xml_parse_imp+0xc>
jmp    1439 <xml_parse_imp+0x2a9>
lea    0xc2c(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x43,%eax
jne    14e1 <xml_parse_imp+0x351>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x44,%eax
jne    14e1 <xml_parse_imp+0x351>
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x41,%eax
jne    14e1 <xml_parse_imp+0x351>
mov    -0x10(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x54,%eax
jne    14e1 <xml_parse_imp+0x351>
mov    -0x10(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x41,%eax
jne    14e1 <xml_parse_imp+0x351>
mov    -0x10(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x5b,%eax
je     14f1 <xml_parse_imp+0x361>
lea    0xbd1(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
mov    -0x10(%rbp),%rax
add    $0x7,%rax
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     1573 <xml_parse_imp+0x3e3>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x5d,%eax
jne    1562 <xml_parse_imp+0x3d2>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x5d,%eax
jne    1562 <xml_parse_imp+0x3d2>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x3e,%eax
jne    1562 <xml_parse_imp+0x3d2>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   10a0 <xml_emit_cdata@plt>
mov    -0x10(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x10(%rbp)
jmp    119c <xml_parse_imp+0xc>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1505 <xml_parse_imp+0x375>
lea    0xb5d(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
jmp    1588 <xml_parse_imp+0x3f8>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     15d8 <xml_parse_imp+0x448>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3f,%eax
jne    15c7 <xml_parse_imp+0x437>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3e,%eax
jne    15c7 <xml_parse_imp+0x437>
mov    -0x10(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x10(%rbp)
jmp    119c <xml_parse_imp+0xc>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1588 <xml_parse_imp+0x3f8>
lea    0xb15(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
jmp    15ed <xml_parse_imp+0x45d>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1080 <iswhite@plt>
cmp    $0x0,%rax
je     1614 <xml_parse_imp+0x484>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    15ed <xml_parse_imp+0x45d>
jmp    1619 <xml_parse_imp+0x489>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isname@plt>
cmp    $0x0,%rax
je     1640 <xml_parse_imp+0x4b0>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1619 <xml_parse_imp+0x489>
jmp    1645 <xml_parse_imp+0x4b5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1080 <iswhite@plt>
cmp    $0x0,%rax
je     166c <xml_parse_imp+0x4dc>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1645 <xml_parse_imp+0x4b5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3e,%eax
je     168c <xml_parse_imp+0x4fc>
lea    0xa97(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
mov    $0x0,%al
call   1030 <xml_emit_close_tag@plt>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    119c <xml_parse_imp+0xc>
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isname@plt>
cmp    $0x0,%rax
je     16d3 <xml_parse_imp+0x543>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    16ac <xml_parse_imp+0x51c>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1090 <xml_emit_open_tag@plt>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3e,%eax
jne    1701 <xml_parse_imp+0x571>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    119c <xml_parse_imp+0xc>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    173a <xml_parse_imp+0x5aa>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3e,%eax
jne    173a <xml_parse_imp+0x5aa>
mov    $0x0,%al
call   1030 <xml_emit_close_tag@plt>
mov    -0x10(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x10(%rbp)
jmp    119c <xml_parse_imp+0xc>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1080 <iswhite@plt>
cmp    $0x0,%rax
je     1755 <xml_parse_imp+0x5c5>
jmp    1765 <xml_parse_imp+0x5d5>
lea    0x9de(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
jmp    176a <xml_parse_imp+0x5da>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1080 <iswhite@plt>
cmp    $0x0,%rax
je     1791 <xml_parse_imp+0x601>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    176a <xml_parse_imp+0x5da>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isname@plt>
cmp    $0x0,%rax
je     17ac <xml_parse_imp+0x61c>
jmp    1816 <xml_parse_imp+0x686>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3e,%eax
jne    17cd <xml_parse_imp+0x63d>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    119c <xml_parse_imp+0xc>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
jne    1806 <xml_parse_imp+0x676>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x3e,%eax
jne    1806 <xml_parse_imp+0x676>
mov    $0x0,%al
call   1030 <xml_emit_close_tag@plt>
mov    -0x10(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x10(%rbp)
jmp    119c <xml_parse_imp+0xc>
lea    0x94d(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1060 <isname@plt>
cmp    $0x0,%rax
je     1845 <xml_parse_imp+0x6b5>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    181e <xml_parse_imp+0x68e>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1070 <xml_emit_att_name@plt>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1080 <iswhite@plt>
cmp    $0x0,%rax
je     1879 <xml_parse_imp+0x6e9>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1852 <xml_parse_imp+0x6c2>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3d,%eax
jne    189a <xml_parse_imp+0x70a>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    18aa <xml_parse_imp+0x71a>
lea    0x8d4(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
jmp    18af <xml_parse_imp+0x71f>
mov    -0x10(%rbp),%rax
movsbl (%rax),%edi
call   1080 <iswhite@plt>
cmp    $0x0,%rax
je     18d6 <xml_parse_imp+0x746>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    18af <xml_parse_imp+0x71f>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movsbl (%rax),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0x22,-0x1c(%rbp)
je     190f <xml_parse_imp+0x77f>
cmpl   $0x27,-0x1c(%rbp)
je     190f <xml_parse_imp+0x77f>
lea    0x891(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    1997 <xml_parse_imp+0x807>
mov    -0x10(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x1e(%rbp)
je     193c <xml_parse_imp+0x7ac>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    -0x1c(%rbp),%eax
setne  %al
mov    %al,-0x1e(%rbp)
mov    -0x1e(%rbp),%al
test   $0x1,%al
jne    194c <xml_parse_imp+0x7bc>
jmp    195d <xml_parse_imp+0x7cd>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1917 <xml_parse_imp+0x787>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    -0x1c(%rbp),%eax
jne    198c <xml_parse_imp+0x7fc>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    %eax,%esi
call   1040 <xml_emit_att_value@plt>
jmp    1765 <xml_parse_imp+0x5d5>
lea    0x81c(%rip),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<xml_parse_imp>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rdi,%rbx
mov    %rbx,%r13
add    $0x4,%rbx
lea    0x7(%r13),%r14
lea    0x1(%r13),%rbp
xor    %r12d,%r12d
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl 0x0(%r13,%r12,1),%ecx
test   %cl,%cl
je     11f0 <xml_parse_imp+0x60>
cmp    $0x3c,%cl
je     11f0 <xml_parse_imp+0x60>
add    $0xffffffffffffffff,%rax
add    $0x1,%r12
add    $0x1,%rbx
add    $0x1,%r14
add    $0x1,%rbp
jmp    11c0 <xml_parse_imp+0x30>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %r13,%r15
sub    %rax,%r15
test   %rax,%rax
je     120b <xml_parse_imp+0x7b>
mov    %r13,%rdi
mov    %r15,%rsi
call   10b0 <xml_emit_text@plt>
mov    0x0(%r13,%r12,1),%cl
cmp    $0x3c,%cl
jne    15f8 <xml_parse_imp+0x468>
mov    0x1(%r13,%r12,1),%al
cmp    $0x21,%al
je     12f0 <xml_parse_imp+0x160>
cmp    $0x2f,%al
je     1260 <xml_parse_imp+0xd0>
cmp    $0x3f,%al
je     12de <xml_parse_imp+0x14e>
movsbl %al,%edi
call   1080 <iswhite@plt>
test   %rax,%rax
je     1393 <xml_parse_imp+0x203>
xchg   %ax,%ax
movsbl 0x1(%rbp),%edi
add    $0x1,%rbp
call   1080 <iswhite@plt>
test   %rax,%rax
jne    1240 <xml_parse_imp+0xb0>
jmp    139a <xml_parse_imp+0x20a>
nopw   0x0(%rax,%rax,1)
mov    %rbp,%rbx
add    $0x1,%rbp
movsbl 0x1(%rbx),%edi
call   1080 <iswhite@plt>
test   %rax,%rax
jne    1260 <xml_parse_imp+0xd0>
cs nopw 0x0(%rax,%rax,1)
nop
movsbl 0x1(%rbx),%edi
add    $0x1,%rbx
call   1060 <isname@plt>
test   %rax,%rax
jne    1280 <xml_parse_imp+0xf0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl (%rbx),%edi
call   1080 <iswhite@plt>
add    $0x1,%rbx
test   %rax,%rax
jne    12a0 <xml_parse_imp+0x110>
cmpb   $0x3e,-0x1(%rbx)
jne    1620 <xml_parse_imp+0x490>
xor    %eax,%eax
call   1030 <xml_emit_close_tag@plt>
jmp    119e <xml_parse_imp+0xe>
nopw   0x0(%rax,%rax,1)
cmpb   $0x3e,-0x1(%rbx)
je     119e <xml_parse_imp+0xe>
add    $0x1,%rbx
movzbl -0x2(%rbx),%eax
cmp    $0x3f,%al
je     12d0 <xml_parse_imp+0x140>
test   %al,%al
jne    12da <xml_parse_imp+0x14a>
jmp    15d4 <xml_parse_imp+0x444>
nop
lea    0x2(%r15),%rbx
mov    0x2(%r13,%r12,1),%al
cmp    $0x44,%al
je     13e8 <xml_parse_imp+0x258>
cmp    $0x5b,%al
jne    1405 <xml_parse_imp+0x275>
cmpb   $0x43,0x3(%r13,%r12,1)
jne    1617 <xml_parse_imp+0x487>
cmpb   $0x44,0x4(%r13,%r12,1)
jne    1617 <xml_parse_imp+0x487>
cmpb   $0x41,0x5(%r13,%r12,1)
jne    1617 <xml_parse_imp+0x487>
cmpb   $0x54,0x6(%r13,%r12,1)
jne    1617 <xml_parse_imp+0x487>
cmpb   $0x41,0x7(%r13,%r12,1)
jne    1617 <xml_parse_imp+0x487>
cmpb   $0x5b,0x8(%r13,%r12,1)
jne    1617 <xml_parse_imp+0x487>
add    $0x9,%r15
mov    %r15,%rbx
jmp    136c <xml_parse_imp+0x1dc>
nopw   0x0(%rax,%rax,1)
test   %al,%al
je     15e6 <xml_parse_imp+0x456>
add    $0x1,%rbx
movzbl (%rbx),%eax
cmp    $0x5d,%al
jne    1360 <xml_parse_imp+0x1d0>
cmpb   $0x5d,0x1(%rbx)
jne    1368 <xml_parse_imp+0x1d8>
cmpb   $0x3e,0x2(%rbx)
jne    1368 <xml_parse_imp+0x1d8>
mov    %r15,%rdi
mov    %rbx,%rsi
call   10a0 <xml_emit_cdata@plt>
add    $0x3,%rbx
jmp    119e <xml_parse_imp+0xe>
add    $0x1,%r15
mov    %r15,%rbp
movsbl 0x0(%rbp),%edi
call   1060 <isname@plt>
mov    %rbp,%rbx
test   %rax,%rax
je     1629 <xml_parse_imp+0x499>
nop
movsbl (%rbx),%edi
call   1060 <isname@plt>
add    $0x1,%rbx
test   %rax,%rax
jne    13b0 <xml_parse_imp+0x220>
lea    -0x1(%rbx),%r14
mov    %rbp,%rdi
mov    %r14,%rsi
call   1090 <xml_emit_open_tag@plt>
mov    -0x1(%rbx),%al
cmp    $0x2f,%al
je     1488 <xml_parse_imp+0x2f8>
cmp    $0x3e,%al
je     119e <xml_parse_imp+0xe>
jmp    149d <xml_parse_imp+0x30d>
mov    %rbx,%rdi
lea    0xc26(%rip),%rsi
mov    $0x7,%edx
call   1050 <memcmp@plt>
test   %eax,%eax
je     1470 <xml_parse_imp+0x2e0>
mov    0x2(%r13,%r12,1),%al
cmp    $0x45,%al
jne    1426 <xml_parse_imp+0x296>
mov    %rbx,%rdi
lea    0xc0d(%rip),%rsi
mov    $0x6,%edx
call   1050 <memcmp@plt>
test   %eax,%eax
je     1470 <xml_parse_imp+0x2e0>
mov    0x2(%r13,%r12,1),%al
cmp    $0x2d,%al
jne    163b <xml_parse_imp+0x4ab>
cmpb   $0x2d,0x3(%r13,%r12,1)
je     144c <xml_parse_imp+0x2bc>
jmp    1644 <xml_parse_imp+0x4b4>
nopl   0x0(%rax,%rax,1)
test   %al,%al
je     15dd <xml_parse_imp+0x44d>
add    $0x1,%r14
movzbl -0x3(%r14),%eax
cmp    $0x2d,%al
jne    1440 <xml_parse_imp+0x2b0>
cmpb   $0x2d,-0x2(%r14)
jne    1448 <xml_parse_imp+0x2b8>
cmpb   $0x3e,-0x1(%r14)
jne    1448 <xml_parse_imp+0x2b8>
mov    %r14,%rbx
jmp    119e <xml_parse_imp+0xe>
nopl   0x0(%rax,%rax,1)
movzbl (%rbx),%eax
test   %al,%al
je     1605 <xml_parse_imp+0x475>
add    $0x1,%rbx
cmp    $0x3e,%al
jne    1470 <xml_parse_imp+0x2e0>
jmp    119e <xml_parse_imp+0xe>
cmpb   $0x3e,(%rbx)
jne    149d <xml_parse_imp+0x30d>
xor    %eax,%eax
call   1030 <xml_emit_close_tag@plt>
add    $0x1,%rbx
jmp    119e <xml_parse_imp+0xe>
movsbl %al,%edi
call   1080 <iswhite@plt>
test   %rax,%rax
je     1632 <xml_parse_imp+0x4a2>
mov    %r14,%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %rbx,%r14
movsbl (%rbx),%edi
call   1080 <iswhite@plt>
add    $0x1,%rbx
test   %rax,%rax
jne    14c0 <xml_parse_imp+0x330>
movsbl (%r14),%edi
call   1060 <isname@plt>
test   %rax,%rax
je     15a5 <xml_parse_imp+0x415>
lea    -0x1(%r14),%r15
lea    0x1(%r14),%ecx
xchg   %ax,%ax
mov    %r15,%rbp
mov    %rbx,%r12
mov    %ecx,%r13d
add    $0x1,%r15
movsbl 0x1(%rbp),%edi
call   1060 <isname@plt>
add    $0x1,%rbx
lea    0x1(%r13),%ecx
test   %rax,%rax
jne    14f0 <xml_parse_imp+0x360>
mov    %r14,%rdi
mov    %r15,%rsi
call   1070 <xml_emit_att_name@plt>
xchg   %ax,%ax
mov    %r12,%r14
mov    %r13d,%ebx
movsbl 0x1(%rbp),%edi
add    $0x1,%rbp
call   1080 <iswhite@plt>
add    $0x1,%r12
lea    0x1(%rbx),%r13d
test   %rax,%rax
jne    1520 <xml_parse_imp+0x390>
cmpb   $0x3d,0x0(%rbp)
jne    15ef <xml_parse_imp+0x45f>
nopw   0x0(%rax,%rax,1)
mov    %ebx,%ebp
movsbl (%r14),%edi
call   1080 <iswhite@plt>
add    $0x1,%r14
lea    0x1(%rbp),%ebx
test   %rax,%rax
jne    1550 <xml_parse_imp+0x3c0>
mov    -0x1(%r14),%al
cmp    $0x27,%al
je     1577 <xml_parse_imp+0x3e7>
cmp    $0x22,%al
jne    160e <xml_parse_imp+0x47e>
mov    %r14,%rbx
nopw   0x0(%rax,%rax,1)
movzbl (%rbx),%ecx
add    $0x1,%rbx
add    $0x1,%ebp
test   %cl,%cl
je     1592 <xml_parse_imp+0x402>
cmp    %al,%cl
jne    1580 <xml_parse_imp+0x3f0>
cmp    %al,%cl
jne    15fc <xml_parse_imp+0x46c>
mov    %r14,%rdi
mov    %ebp,%esi
call   1040 <xml_emit_att_value@plt>
jmp    14c0 <xml_parse_imp+0x330>
mov    (%r14),%al
cmp    $0x3e,%al
je     119e <xml_parse_imp+0xe>
cmp    $0x2f,%al
jne    164d <xml_parse_imp+0x4bd>
cmpb   $0x3e,(%rbx)
jne    164d <xml_parse_imp+0x4bd>
xor    %eax,%eax
call   1030 <xml_emit_close_tag@plt>
add    $0x2,%r14
mov    %r14,%rbx
jmp    119e <xml_parse_imp+0xe>
lea    0xb19(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0xaa3(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0xaea(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0xb7f(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
xor    %eax,%eax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0xbac(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0xa92(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0xb82(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0xa9b(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0xaf3(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0x9d0(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0xb01(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0x9e5(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0xa0c(%rip),%rax
jmp    1654 <xml_parse_imp+0x4c4>
lea    0xb06(%rip),%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [24 x i8] c"syntax error in element\00"
@.str.1 = [8 x i8] c"DOCTYPE\00"
@.str.2 = [7 x i8] c"ENTITY\00"
@.str.3 = [48 x i8] c"syntax error in comment (<! not followed by --)\00"
@.str.4 = [48 x i8] c"syntax error in comment (<!- not followed by -)\00"
@.str.5 = [23 x i8] c"end of data in comment\00"
@.str.6 = [27 x i8] c"end of data in declaration\00"
@.str.7 = [30 x i8] c"syntax error in CDATA section\00"
@.str.8 = [29 x i8] c"end of data in CDATA section\00"
@.str.9 = [38 x i8] c"end of data in processing instruction\00"
@.str.10 = [32 x i8] c"syntax error in closing element\00"
@.str.11 = [32 x i8] c"syntax error after element name\00"
@.str.12 = [27 x i8] c"syntax error in attributes\00"
@.str.13 = [34 x i8] c"syntax error after attribute name\00"
@.str.14 = [24 x i8] c"missing quote character\00"
@.str.15 = [31 x i8] c"end of data in attribute value\00"
define i8* @xml_parse_imp(i8* %0) {
br label %2
2: ; preds = %196, %1
%3 = phi i8* [ %0, %1 ], [ %197, %196 ]
br label %4
4: ; preds = %7, %2
%5 = phi i8* [ %3, %2 ], [ %8, %7 ]
%6 = load i8, i8* %5
switch i8 %6, label %7 [
i8 0, label %9
i8 60, label %9
]
7: ; preds = %4
%8 = getelementptr inbounds i8, i8* %5, i64 1
br label %4
9: ; preds = %4, %4
%10 = icmp eq i8* %3, %5
br i1 %10, label %14, label %11
11: ; preds = %9
%12 = tail call i32 @xml_emit_text(i8* %3, i8* %5)
%13 = load i8, i8* %5
br label %14
14: ; preds = %11, %9
%15 = phi i8 [ %13, %11 ], [ %6, %9 ]
%16 = icmp eq i8 %15, 60
br i1 %16, label %17, label %243
17: ; preds = %14
%18 = getelementptr inbounds i8, i8* %5, i64 1
%19 = load i8, i8* %18
switch i8 %19, label %20 [
i8 47, label %25
i8 33, label %27
i8 63, label %30
]
20: ; preds = %17
%21 = tail call i64 @iswhite(i8 signext %19)
%22 = icmp eq i64 %21, 0
br i1 %22, label %38, label %23
23: ; preds = %20
%24 = getelementptr inbounds i8, i8* %5, i64 2
br label %32
25: ; preds = %17
%26 = getelementptr inbounds i8, i8* %5, i64 2
br label %141
27: ; preds = %17
%28 = getelementptr inbounds i8, i8* %5, i64 2
%29 = load i8, i8* %28
switch i8 %29, label %49 [
i8 91, label %88
i8 68, label %43
]
30: ; preds = %17
%31 = getelementptr inbounds i8, i8* %5, i64 2
br label %130
32: ; preds = %23, %32
%33 = phi i8* [ %24, %23 ], [ %37, %32 ]
%34 = load i8, i8* %33
%35 = tail call i64 @iswhite(i8 signext %34)
%36 = icmp eq i64 %35, 0
%37 = getelementptr inbounds i8, i8* %33, i64 1
br i1 %36, label %38, label %32
38: ; preds = %32, %20
%39 = phi i8* [ %18, %20 ], [ %33, %32 ]
%40 = load i8, i8* %39
%41 = tail call i64 @isname(i8 signext %40)
%42 = icmp eq i64 %41, 0
br i1 %42, label %243, label %164
43: ; preds = %27
%44 = tail call i32 @memcmp(i8* %28, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0), i32 7)
%45 = icmp eq i32 %44, 0
br i1 %45, label %46, label %47
46: ; preds = %52, %43
br label %81
47: ; preds = %43
%48 = load i8, i8* %28
br label %49
49: ; preds = %47, %27
%50 = phi i8 [ %48, %47 ], [ %29, %27 ]
%51 = icmp eq i8 %50, 69
br i1 %51, label %52, label %57
52: ; preds = %49
%53 = tail call i32 @memcmp(i8* %28, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0), i32 6)
%54 = icmp eq i32 %53, 0
br i1 %54, label %46, label %55
55: ; preds = %52
%56 = load i8, i8* %28
br label %57
57: ; preds = %55, %49
%58 = phi i8 [ %56, %55 ], [ %50, %49 ]
%59 = icmp eq i8 %58, 45
br i1 %59, label %60, label %243
60: ; preds = %57
%61 = getelementptr inbounds i8, i8* %5, i64 3
%62 = load i8, i8* %61
%63 = icmp eq i8 %62, 45
br i1 %63, label %64, label %243
64: ; preds = %60
%65 = getelementptr inbounds i8, i8* %5, i64 4
br label %66
66: ; preds = %64, %79
%67 = phi i8* [ %80, %79 ], [ %65, %64 ]
%68 = load i8, i8* %67
switch i8 %68, label %79 [
i8 0, label %243
i8 45, label %69
]
69: ; preds = %66
%70 = getelementptr inbounds i8, i8* %67, i64 1
%71 = load i8, i8* %70
%72 = icmp eq i8 %71, 45
br i1 %72, label %73, label %79
73: ; preds = %69
%74 = getelementptr inbounds i8, i8* %67, i64 2
%75 = load i8, i8* %74
%76 = icmp eq i8 %75, 62
br i1 %76, label %77, label %79
77: ; preds = %73
%78 = getelementptr inbounds i8, i8* %67, i64 3
br label %196
79: ; preds = %66, %73, %69
%80 = getelementptr inbounds i8, i8* %67, i64 1
br label %66
81: ; preds = %46, %85
%82 = phi i8* [ %86, %85 ], [ %28, %46 ]
%83 = load i8, i8* %82
%84 = icmp eq i8 %83, 0
br i1 %84, label %243, label %85
85: ; preds = %81
%86 = getelementptr inbounds i8, i8* %82, i64 1
%87 = icmp eq i8 %83, 62
br i1 %87, label %196, label %81
88: ; preds = %27
%89 = getelementptr inbounds i8, i8* %5, i64 3
%90 = load i8, i8* %89
%91 = icmp eq i8 %90, 67
br i1 %91, label %92, label %243
92: ; preds = %88
%93 = getelementptr inbounds i8, i8* %5, i64 4
%94 = load i8, i8* %93
%95 = icmp eq i8 %94, 68
br i1 %95, label %96, label %243
96: ; preds = %92
%97 = getelementptr inbounds i8, i8* %5, i64 5
%98 = load i8, i8* %97
%99 = icmp eq i8 %98, 65
br i1 %99, label %100, label %243
100: ; preds = %96
%101 = getelementptr inbounds i8, i8* %5, i64 6
%102 = load i8, i8* %101
%103 = icmp eq i8 %102, 84
br i1 %103, label %104, label %243
104: ; preds = %100
%105 = getelementptr inbounds i8, i8* %5, i64 7
%106 = load i8, i8* %105
%107 = icmp eq i8 %106, 65
br i1 %107, label %108, label %243
108: ; preds = %104
%109 = getelementptr inbounds i8, i8* %5, i64 8
%110 = load i8, i8* %109
%111 = icmp eq i8 %110, 91
br i1 %111, label %112, label %243
112: ; preds = %108
%113 = getelementptr inbounds i8, i8* %5, i64 9
br label %114
114: ; preds = %128, %112
%115 = phi i8* [ %113, %112 ], [ %129, %128 ]
%116 = load i8, i8* %115
switch i8 %116, label %128 [
i8 0, label %243
i8 93, label %117
]
117: ; preds = %114
%118 = getelementptr inbounds i8, i8* %115, i64 1
%119 = load i8, i8* %118
%120 = icmp eq i8 %119, 93
br i1 %120, label %121, label %128
121: ; preds = %117
%122 = getelementptr inbounds i8, i8* %115, i64 2
%123 = load i8, i8* %122
%124 = icmp eq i8 %123, 62
br i1 %124, label %125, label %128
125: ; preds = %121
%126 = tail call i32 @xml_emit_cdata(i8* %113, i8* %115)
%127 = getelementptr inbounds i8, i8* %115, i64 3
br label %196
128: ; preds = %114, %121, %117
%129 = getelementptr inbounds i8, i8* %115, i64 1
br label %114
130: ; preds = %139, %30
%131 = phi i8* [ %31, %30 ], [ %140, %139 ]
%132 = load i8, i8* %131
switch i8 %132, label %139 [
i8 0, label %243
i8 63, label %133
]
133: ; preds = %130
%134 = getelementptr inbounds i8, i8* %131, i64 1
%135 = load i8, i8* %134
%136 = icmp eq i8 %135, 62
br i1 %136, label %137, label %139
137: ; preds = %133
%138 = getelementptr inbounds i8, i8* %131, i64 2
br label %196
139: ; preds = %130, %133
%140 = getelementptr inbounds i8, i8* %131, i64 1
br label %130
141: ; preds = %141, %25
%142 = phi i8* [ %26, %25 ], [ %146, %141 ]
%143 = load i8, i8* %142
%144 = tail call i64 @iswhite(i8 signext %143)
%145 = icmp eq i64 %144, 0
%146 = getelementptr inbounds i8, i8* %142, i64 1
br i1 %145, label %147, label %141
147: ; preds = %141, %147
%148 = phi i8* [ %152, %147 ], [ %142, %141 ]
%149 = load i8, i8* %148
%150 = tail call i64 @isname(i8 signext %149)
%151 = icmp eq i64 %150, 0
%152 = getelementptr inbounds i8, i8* %148, i64 1
br i1 %151, label %153, label %147
153: ; preds = %147, %153
%154 = phi i8* [ %158, %153 ], [ %148, %147 ]
%155 = load i8, i8* %154
%156 = tail call i64 @iswhite(i8 signext %155)
%157 = icmp eq i64 %156, 0
%158 = getelementptr inbounds i8, i8* %154, i64 1
br i1 %157, label %159, label %153
159: ; preds = %153
%160 = load i8, i8* %154
%161 = icmp eq i8 %160, 62
br i1 %161, label %162, label %243
162: ; preds = %159
%163 = tail call i32 (...) @xml_emit_close_tag()
br label %196
164: ; preds = %38, %164
%165 = phi i8* [ %169, %164 ], [ %39, %38 ]
%166 = load i8, i8* %165
%167 = tail call i64 @isname(i8 signext %166)
%168 = icmp eq i64 %167, 0
%169 = getelementptr inbounds i8, i8* %165, i64 1
br i1 %168, label %170, label %164
170: ; preds = %164
%171 = tail call i32 @xml_emit_open_tag(i8* %39, i8* %165)
%172 = load i8, i8* %165
switch i8 %172, label %179 [
i8 62, label %196
i8 47, label %173
]
173: ; preds = %170
%174 = load i8, i8* %169
%175 = icmp eq i8 %174, 62
br i1 %175, label %176, label %179
176: ; preds = %173
%177 = tail call i32 (...) @xml_emit_close_tag()
%178 = getelementptr inbounds i8, i8* %165, i64 2
br label %196
179: ; preds = %170, %173
%180 = tail call i64 @iswhite(i8 signext %172)
%181 = icmp eq i64 %180, 0
br i1 %181, label %243, label %182
182: ; preds = %179, %188
%183 = phi i8* [ %189, %188 ], [ %165, %179 ]
%184 = load i8, i8* %183
%185 = tail call i64 @iswhite(i8 signext %184)
%186 = icmp eq i64 %185, 0
%187 = getelementptr inbounds i8, i8* %183, i64 1
br i1 %186, label %190, label %188
188: ; preds = %182, %239
%189 = phi i8* [ %187, %182 ], [ %237, %239 ]
br label %182
190: ; preds = %182
%191 = load i8, i8* %183
%192 = tail call i64 @isname(i8 signext %191)
%193 = icmp eq i64 %192, 0
br i1 %193, label %194, label %204
194: ; preds = %190
%195 = load i8, i8* %183
switch i8 %195, label %243 [
i8 62, label %196
i8 47, label %198
]
196: ; preds = %85, %194, %170, %77, %125, %137, %162, %176, %201
%197 = phi i8* [ %158, %162 ], [ %127, %125 ], [ %78, %77 ], [ %138, %137 ], [ %178, %176 ], [ %203, %201 ], [ %169, %170 ], [ %187, %194 ], [ %86, %85 ]
br label %2
198: ; preds = %194
%199 = load i8, i8* %187
%200 = icmp eq i8 %199, 62
br i1 %200, label %201, label %243
201: ; preds = %198
%202 = tail call i32 (...) @xml_emit_close_tag()
%203 = getelementptr inbounds i8, i8* %183, i64 2
br label %196
204: ; preds = %190, %204
%205 = phi i8* [ %209, %204 ], [ %183, %190 ]
%206 = load i8, i8* %205
%207 = tail call i64 @isname(i8 signext %206)
%208 = icmp eq i64 %207, 0
%209 = getelementptr inbounds i8, i8* %205, i64 1
br i1 %208, label %210, label %204
210: ; preds = %204
%211 = tail call i32 @xml_emit_att_name(i8* %183, i8* %205)
br label %212
212: ; preds = %212, %210
%213 = phi i8* [ %205, %210 ], [ %217, %212 ]
%214 = load i8, i8* %213
%215 = tail call i64 @iswhite(i8 signext %214)
%216 = icmp eq i64 %215, 0
%217 = getelementptr inbounds i8, i8* %213, i64 1
br i1 %216, label %218, label %212
218: ; preds = %212
%219 = load i8, i8* %213
%220 = icmp eq i8 %219, 61
br i1 %220, label %221, label %243
221: ; preds = %218, %221
%222 = phi i8* [ %223, %221 ], [ %213, %218 ]
%223 = getelementptr inbounds i8, i8* %222, i64 1
%224 = load i8, i8* %223
%225 = tail call i64 @iswhite(i8 signext %224)
%226 = icmp eq i64 %225, 0
br i1 %226, label %227, label %221
227: ; preds = %221
%228 = getelementptr inbounds i8, i8* %222, i64 2
%229 = load i8, i8* %223
switch i8 %229, label %243 [
i8 39, label %230
i8 34, label %230
]
230: ; preds = %227, %227
br label %231
231: ; preds = %230, %231
%232 = phi i8* [ %237, %231 ], [ %228, %230 ]
%233 = load i8, i8* %232
%234 = icmp eq i8 %233, 0
%235 = icmp eq i8 %233, %229
%236 = select i1 %234, i1 true, i1 %235
%237 = getelementptr inbounds i8, i8* %232, i64 1
br i1 %236, label %238, label %231
238: ; preds = %231
br i1 %235, label %239, label %243
239: ; preds = %238
%240 = ptrtoint i8* %232 to i64
%241 = trunc i64 %240 to i32
%242 = tail call i32 @xml_emit_att_value(i8* %228, i32 %241)
br label %188
243: ; preds = %198, %194, %179, %159, %88, %92, %96, %100, %104, %108, %60, %57, %38, %14, %130, %114, %66, %81, %238, %227, %218
%244 = phi i8* [ getelementptr inbounds ([31 x i8], [31 x i8]* @.str.15, i64 0, i64 0), %238 ], [ getelementptr inbounds ([24 x i8], [24 x i8]* @.str.14, i64 0, i64 0), %227 ], [ getelementptr inbounds ([34 x i8], [34 x i8]* @.str.13, i64 0, i64 0), %218 ], [ getelementptr inbounds ([27 x i8], [27 x i8]* @.str.6, i64 0, i64 0), %81 ], [ getelementptr inbounds ([23 x i8], [23 x i8]* @.str.5, i64 0, i64 0), %66 ], [ getelementptr inbounds ([29 x i8], [29 x i8]* @.str.8, i64 0, i64 0), %114 ], [ getelementptr inbounds ([38 x i8], [38 x i8]* @.str.9, i64 0, i64 0), %130 ], [ getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0), %198 ], [ getelementptr inbounds ([27 x i8], [27 x i8]* @.str.12, i64 0, i64 0), %194 ], [ getelementptr inbounds ([32 x i8], [32 x i8]* @.str.11, i64 0, i64 0), %179 ], [ getelementptr inbounds ([32 x i8], [32 x i8]* @.str.10, i64 0, i64 0), %159 ], [ getelementptr inbounds ([30 x i8], [30 x i8]* @.str.7, i64 0, i64 0), %88 ], [ getelementptr inbounds ([30 x i8], [30 x i8]* @.str.7, i64 0, i64 0), %92 ], [ getelementptr inbounds ([30 x i8], [30 x i8]* @.str.7, i64 0, i64 0), %96 ], [ getelementptr inbounds ([30 x i8], [30 x i8]* @.str.7, i64 0, i64 0), %100 ], [ getelementptr inbounds ([30 x i8], [30 x i8]* @.str.7, i64 0, i64 0), %104 ], [ getelementptr inbounds ([30 x i8], [30 x i8]* @.str.7, i64 0, i64 0), %108 ], [ getelementptr inbounds ([48 x i8], [48 x i8]* @.str.4, i64 0, i64 0), %60 ], [ getelementptr inbounds ([48 x i8], [48 x i8]* @.str.3, i64 0, i64 0), %57 ], [ getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i64 0, i64 0), %38 ], [ null, %14 ]
ret i8* %244
}