int xmlEncodeCdata(unsigned char *out, unsigned int olen,
                   const unsigned char *in, unsigned int ilen) {
  static const char b[] = "<![CDATA[";
  static const char e[] = "]]>";
  int len;
  unsigned int i;
  len = 0;
  for (i = 0; i < sizeof(b) - 1; i++, len++)
    if (olen > 0) {
      *out++ = b[i];
      olen--;
    }
  for (; ilen--;)
    switch (*in) {
    case 0x00:
    case 0x01:
    case 0x02:
    case 0x03:
    case 0x04:
    case 0x05:
    case 0x06:
    case 0x07:
    case 0x08:
    case 0x0b:
    case 0x0c:
    case 0x0e:
    case 0x0f:
    case 0x10:
    case 0x11:
    case 0x12:
    case 0x13:
    case 0x14:
    case 0x15:
    case 0x16:
    case 0x17:
    case 0x18:
    case 0x19:
    case 0x1a:
    case 0x1b:
    case 0x1c:
    case 0x1d:
    case 0x1e:
    case 0x1f:
    case 0x7f:
      return (-1);
      break;
    case ']':
      if (ilen > 1 && *(in + 1) == ']' && *(in + 2) == '>') {
        if (olen > 0) {
          *out++ = *in;
          olen--;
        }
        in++, len++;
        if (olen > 0) {
          *out++ = *in;
          olen--;
        }
        in++, len++;
        for (i = 0; i < sizeof(e) - 1; i++, len++)
          if (olen > 0) {
            *out++ = e[i];
            olen--;
          }
        for (i = 0; i < sizeof(b) - 1; i++, len++)
          if (olen > 0) {
            *out++ = b[i];
            olen--;
          }
        if (olen > 0) {
          *out++ = *in;
          olen--;
        }
        in++, len++;
        ilen -= 2;
      } else {
        if (olen > 0) {
          *out++ = *in;
          olen--;
        }
        in++, len++;
      }
      break;
    default:
      if ((*in & 0x80) == 0x00) {
        if (olen > 0) {
          *out++ = *in++;
          olen--;
        } else
          in++;
        len++;
      } else if (ilen > 0 && (*in & 0xe0) == 0xc0 &&
                 (*(in + 1) & 0xc0) == 0x80) {
        if (olen > 1) {
          *out++ = *in++;
          *out++ = *in++;
          olen -= 2;
        } else
          in += 2;
        len += 2;
        ilen--;
      } else if (ilen > 1 && (*in & 0xf0) == 0xe0 &&
                 (*(in + 1) & 0xc0) == 0x80 && (*(in + 2) & 0xc0) == 0x80) {
        if (olen > 2) {
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          olen -= 3;
        } else
          in += 3;
        len += 3;
        ilen -= 2;
      } else if (ilen > 2 && (*in & 0xf8) == 0xf0 &&
                 (*(in + 1) & 0xc0) == 0x80 && (*(in + 2) & 0xc0) == 0x80 &&
                 (*(in + 3) & 0xc0) == 0x80) {
        if (olen > 3) {
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          olen -= 4;
        } else
          in += 4;
        len += 4;
        ilen -= 3;
      } else if (ilen > 3 && (*in & 0xfc) == 0xf8 &&
                 (*(in + 1) & 0xc0) == 0x80 && (*(in + 2) & 0xc0) == 0x80 &&
                 (*(in + 3) & 0xc0) == 0x80 && (*(in + 4) & 0xc0) == 0x80) {
        if (olen > 4) {
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          olen -= 5;
        } else
          in += 5;
        len += 5;
        ilen -= 4;
      } else if (ilen > 4 && (*in & 0xfe) == 0xfc &&
                 (*(in + 1) & 0xc0) == 0x80 && (*(in + 2) & 0xc0) == 0x80 &&
                 (*(in + 3) & 0xc0) == 0x80 && (*(in + 4) & 0xc0) == 0x80 &&
                 (*(in + 5) & 0xc0) == 0x80) {
        if (olen > 5) {
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          *out++ = *in++;
          olen -= 6;
        } else
          in += 6;
        len += 6;
        ilen -= 5;
      } else
        return (-1);
      break;
    }
  for (i = 0; i < sizeof(e) - 1; i++, len++)
    if (olen > 0) {
      *out++ = e[i];
      olen--;
    }
  return (len);
}


x86 assembly (clang, -O0):
<xmlEncodeCdata>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    $0x9,%rax
jae    117c <xmlEncodeCdata+0x7c>
cmpl   $0x0,-0x14(%rbp)
jbe    1160 <xmlEncodeCdata+0x60>
mov    -0x2c(%rbp),%eax
mov    %eax,%ecx
lea    0x10bd(%rip),%rax
mov    (%rax,%rcx,1),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1165 <xmlEncodeCdata+0x65>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1120 <xmlEncodeCdata+0x20>
jmp    1181 <xmlEncodeCdata+0x81>
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
je     1a3d <xmlEncodeCdata+0x93d>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
mov    %rax,-0x38(%rbp)
test   %al,%al
js     13c9 <xmlEncodeCdata+0x2c9>
mov    -0x38(%rbp),%rax
lea    0xe4d(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0xffffffff,-0x4(%rbp)
jmp    1aa6 <xmlEncodeCdata+0x9a6>
cmpl   $0x1,-0x24(%rbp)
jbe    1385 <xmlEncodeCdata+0x285>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x5d,%eax
jne    1385 <xmlEncodeCdata+0x285>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
cmp    $0x3e,%eax
jne    1385 <xmlEncodeCdata+0x285>
cmpl   $0x0,-0x14(%rbp)
jbe    121e <xmlEncodeCdata+0x11e>
mov    -0x20(%rbp),%rax
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x14(%rbp)
jbe    125d <xmlEncodeCdata+0x15d>
mov    -0x20(%rbp),%rax
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    $0x3,%rax
jae    12d5 <xmlEncodeCdata+0x1d5>
cmpl   $0x0,-0x14(%rbp)
jbe    12b9 <xmlEncodeCdata+0x1b9>
mov    -0x2c(%rbp),%eax
mov    %eax,%ecx
lea    0xf6e(%rip),%rax
mov    (%rax,%rcx,1),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    12be <xmlEncodeCdata+0x1be>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1279 <xmlEncodeCdata+0x179>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    $0x9,%rax
jae    1338 <xmlEncodeCdata+0x238>
cmpl   $0x0,-0x14(%rbp)
jbe    131c <xmlEncodeCdata+0x21c>
mov    -0x2c(%rbp),%eax
mov    %eax,%ecx
lea    0xf01(%rip),%rax
mov    (%rax,%rcx,1),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1321 <xmlEncodeCdata+0x221>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    12dc <xmlEncodeCdata+0x1dc>
cmpl   $0x0,-0x14(%rbp)
jbe    1362 <xmlEncodeCdata+0x262>
mov    -0x20(%rbp),%rax
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x24(%rbp)
jmp    13c4 <xmlEncodeCdata+0x2c4>
cmpl   $0x0,-0x14(%rbp)
jbe    13af <xmlEncodeCdata+0x2af>
mov    -0x20(%rbp),%rax
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1a38 <xmlEncodeCdata+0x938>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
and    $0x80,%eax
cmp    $0x0,%eax
jne    1432 <xmlEncodeCdata+0x332>
cmpl   $0x0,-0x14(%rbp)
jbe    1418 <xmlEncodeCdata+0x318>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1424 <xmlEncodeCdata+0x324>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1a33 <xmlEncodeCdata+0x933>
cmpl   $0x0,-0x24(%rbp)
jbe    14ea <xmlEncodeCdata+0x3ea>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
and    $0xe0,%eax
cmp    $0xc0,%eax
jne    14ea <xmlEncodeCdata+0x3ea>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    14ea <xmlEncodeCdata+0x3ea>
cmpl   $0x1,-0x14(%rbp)
jbe    14c7 <xmlEncodeCdata+0x3c7>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x14(%rbp)
jmp    14d3 <xmlEncodeCdata+0x3d3>
mov    -0x20(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1a2e <xmlEncodeCdata+0x92e>
cmpl   $0x1,-0x24(%rbp)
jbe    15dc <xmlEncodeCdata+0x4dc>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
and    $0xf0,%eax
cmp    $0xe0,%eax
jne    15dc <xmlEncodeCdata+0x4dc>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    15dc <xmlEncodeCdata+0x4dc>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    15dc <xmlEncodeCdata+0x4dc>
cmpl   $0x2,-0x14(%rbp)
jbe    15b9 <xmlEncodeCdata+0x4b9>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
sub    $0x3,%eax
mov    %eax,-0x14(%rbp)
jmp    15c5 <xmlEncodeCdata+0x4c5>
mov    -0x20(%rbp),%rax
add    $0x3,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x24(%rbp)
jmp    1a29 <xmlEncodeCdata+0x929>
cmpl   $0x2,-0x24(%rbp)
jbe    1708 <xmlEncodeCdata+0x608>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
and    $0xf8,%eax
cmp    $0xf0,%eax
jne    1708 <xmlEncodeCdata+0x608>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1708 <xmlEncodeCdata+0x608>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1708 <xmlEncodeCdata+0x608>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1708 <xmlEncodeCdata+0x608>
cmpl   $0x3,-0x14(%rbp)
jbe    16e5 <xmlEncodeCdata+0x5e5>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
sub    $0x4,%eax
mov    %eax,-0x14(%rbp)
jmp    16f1 <xmlEncodeCdata+0x5f1>
mov    -0x20(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x3,%eax
mov    %eax,-0x24(%rbp)
jmp    1a24 <xmlEncodeCdata+0x924>
cmpl   $0x3,-0x24(%rbp)
jbe    186e <xmlEncodeCdata+0x76e>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
and    $0xfc,%eax
cmp    $0xf8,%eax
jne    186e <xmlEncodeCdata+0x76e>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    186e <xmlEncodeCdata+0x76e>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    186e <xmlEncodeCdata+0x76e>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    186e <xmlEncodeCdata+0x76e>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    186e <xmlEncodeCdata+0x76e>
cmpl   $0x4,-0x14(%rbp)
jbe    184b <xmlEncodeCdata+0x74b>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
sub    $0x5,%eax
mov    %eax,-0x14(%rbp)
jmp    1857 <xmlEncodeCdata+0x757>
mov    -0x20(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x4,%eax
mov    %eax,-0x24(%rbp)
jmp    1a1f <xmlEncodeCdata+0x91f>
cmpl   $0x4,-0x24(%rbp)
jbe    1a0e <xmlEncodeCdata+0x90e>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
and    $0xfe,%eax
cmp    $0xfc,%eax
jne    1a0e <xmlEncodeCdata+0x90e>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1a0e <xmlEncodeCdata+0x90e>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1a0e <xmlEncodeCdata+0x90e>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1a0e <xmlEncodeCdata+0x90e>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1a0e <xmlEncodeCdata+0x90e>
mov    -0x20(%rbp),%rax
movzbl 0x5(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1a0e <xmlEncodeCdata+0x90e>
cmpl   $0x5,-0x14(%rbp)
jbe    19eb <xmlEncodeCdata+0x8eb>
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x20(%rbp)
mov    (%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
sub    $0x6,%eax
mov    %eax,-0x14(%rbp)
jmp    19f7 <xmlEncodeCdata+0x8f7>
mov    -0x20(%rbp),%rax
add    $0x6,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x5,%eax
mov    %eax,-0x24(%rbp)
jmp    1a1a <xmlEncodeCdata+0x91a>
movl   $0xffffffff,-0x4(%rbp)
jmp    1aa6 <xmlEncodeCdata+0x9a6>
jmp    1a1f <xmlEncodeCdata+0x91f>
jmp    1a24 <xmlEncodeCdata+0x924>
jmp    1a29 <xmlEncodeCdata+0x929>
jmp    1a2e <xmlEncodeCdata+0x92e>
jmp    1a33 <xmlEncodeCdata+0x933>
jmp    1a38 <xmlEncodeCdata+0x938>
jmp    1181 <xmlEncodeCdata+0x81>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    $0x3,%rax
jae    1aa0 <xmlEncodeCdata+0x9a0>
cmpl   $0x0,-0x14(%rbp)
jbe    1a84 <xmlEncodeCdata+0x984>
mov    -0x2c(%rbp),%eax
mov    %eax,%ecx
lea    0x7a3(%rip),%rax
mov    (%rax,%rcx,1),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    1a89 <xmlEncodeCdata+0x989>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1a44 <xmlEncodeCdata+0x944>
mov    -0x28(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<xmlEncodeCdata>:
push   %rbp
push   %rbx
xor    %eax,%eax
test   %esi,%esi
je     1190 <xmlEncodeCdata+0x90>
movb   $0x3c,(%rdi)
cmp    $0x1,%esi
jne    111a <xmlEncodeCdata+0x1a>
add    $0x1,%rdi
jmp    1190 <xmlEncodeCdata+0x90>
movb   $0x21,0x1(%rdi)
cmp    $0x2,%esi
jne    1129 <xmlEncodeCdata+0x29>
add    $0x2,%rdi
jmp    1190 <xmlEncodeCdata+0x90>
movb   $0x5b,0x2(%rdi)
cmp    $0x3,%esi
jne    1138 <xmlEncodeCdata+0x38>
add    $0x3,%rdi
jmp    1190 <xmlEncodeCdata+0x90>
movb   $0x43,0x3(%rdi)
cmp    $0x4,%esi
jne    1147 <xmlEncodeCdata+0x47>
add    $0x4,%rdi
jmp    1190 <xmlEncodeCdata+0x90>
movb   $0x44,0x4(%rdi)
cmp    $0x5,%esi
jne    1156 <xmlEncodeCdata+0x56>
add    $0x5,%rdi
jmp    1190 <xmlEncodeCdata+0x90>
movb   $0x41,0x5(%rdi)
cmp    $0x6,%esi
jne    1165 <xmlEncodeCdata+0x65>
add    $0x6,%rdi
jmp    1190 <xmlEncodeCdata+0x90>
movb   $0x54,0x6(%rdi)
cmp    $0x7,%esi
jne    1174 <xmlEncodeCdata+0x74>
add    $0x7,%rdi
jmp    1190 <xmlEncodeCdata+0x90>
movb   $0x41,0x7(%rdi)
cmp    $0x8,%esi
jne    1183 <xmlEncodeCdata+0x83>
add    $0x8,%rdi
jmp    1190 <xmlEncodeCdata+0x90>
movb   $0x5b,0x8(%rdi)
add    $0x9,%rdi
add    $0xfffffff7,%esi
mov    %esi,%eax
mov    $0x9,%r9d
test   %ecx,%ecx
je     15a2 <xmlEncodeCdata+0x4a2>
lea    0xe5b(%rip),%r8
mov    %eax,%r10d
lea    -0x1(%rcx),%ebp
movzbl (%rdx),%r11d
movzbl %r11b,%ebx
mov    $0xffffffff,%eax
test   %bl,%bl
js     1200 <xmlEncodeCdata+0x100>
movslq (%r8,%rbx,4),%rsi
add    %r8,%rsi
jmp    *%rsi
cmp    $0x2,%ebp
jb     1210 <xmlEncodeCdata+0x110>
cmpb   $0x5d,0x1(%rdx)
jne    1210 <xmlEncodeCdata+0x110>
cmpb   $0x3e,0x2(%rdx)
jne    1210 <xmlEncodeCdata+0x110>
xor    %eax,%eax
test   %r10d,%r10d
jne    147f <xmlEncodeCdata+0x37f>
add    $0x3,%rdx
add    $0xf,%r9d
add    $0xfffffffd,%ecx
jmp    146b <xmlEncodeCdata+0x36b>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
test   $0x80,%r11b
jne    1234 <xmlEncodeCdata+0x134>
test   %r10d,%r10d
je     1225 <xmlEncodeCdata+0x125>
mov    %r11b,(%rdi)
jmp    1218 <xmlEncodeCdata+0x118>
test   %r10d,%r10d
je     1225 <xmlEncodeCdata+0x125>
movb   $0x5d,(%rdi)
add    $0x1,%rdi
add    $0xffffffff,%r10d
mov    %r10d,%eax
jmp    1227 <xmlEncodeCdata+0x127>
xor    %eax,%eax
add    $0x1,%rdx
add    $0x1,%r9d
jmp    146d <xmlEncodeCdata+0x36d>
test   %ebp,%ebp
je     1277 <xmlEncodeCdata+0x177>
and    $0xffffffe0,%ebx
cmp    $0xc0,%ebx
jne    1277 <xmlEncodeCdata+0x177>
movzbl 0x1(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1277 <xmlEncodeCdata+0x177>
cmp    $0x2,%r10d
jb     1267 <xmlEncodeCdata+0x167>
mov    %r11b,(%rdi)
movzbl 0x1(%rdx),%eax
mov    %al,0x1(%rdi)
add    $0x2,%rdi
add    $0xfffffffe,%r10d
add    $0x2,%rdx
add    $0x2,%r9d
add    $0xfffffffe,%ecx
jmp    1468 <xmlEncodeCdata+0x368>
cmp    $0x2,%ebp
jb     15c2 <xmlEncodeCdata+0x4c2>
mov    %r11d,%ebx
and    $0xf0,%bl
cmp    $0xe0,%bl
jne    12d2 <xmlEncodeCdata+0x1d2>
movzbl 0x1(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    12d2 <xmlEncodeCdata+0x1d2>
movzbl 0x2(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    12d2 <xmlEncodeCdata+0x1d2>
cmp    $0x3,%r10d
jb     12c2 <xmlEncodeCdata+0x1c2>
mov    %r11b,(%rdi)
movzbl 0x1(%rdx),%eax
mov    %al,0x1(%rdi)
movzbl 0x2(%rdx),%eax
mov    %al,0x2(%rdi)
add    $0x3,%rdi
add    $0xfffffffd,%r10d
add    $0x3,%rdx
add    $0x3,%r9d
add    $0xfffffffd,%ecx
jmp    1468 <xmlEncodeCdata+0x368>
cmp    $0x3,%ebp
jb     15c2 <xmlEncodeCdata+0x4c2>
mov    %r11d,%ebx
and    $0xf8,%bl
cmp    $0xf0,%bl
jne    1340 <xmlEncodeCdata+0x240>
movzbl 0x1(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1340 <xmlEncodeCdata+0x240>
movzbl 0x2(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1340 <xmlEncodeCdata+0x240>
movzbl 0x3(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1340 <xmlEncodeCdata+0x240>
cmp    $0x4,%r10d
jb     1330 <xmlEncodeCdata+0x230>
mov    %r11b,(%rdi)
movzbl 0x1(%rdx),%eax
mov    %al,0x1(%rdi)
movzbl 0x2(%rdx),%eax
mov    %al,0x2(%rdi)
movzbl 0x3(%rdx),%eax
mov    %al,0x3(%rdi)
add    $0x4,%rdi
add    $0xfffffffc,%r10d
add    $0x4,%rdx
add    $0x4,%r9d
add    $0xfffffffc,%ecx
jmp    1468 <xmlEncodeCdata+0x368>
cmp    $0x4,%ebp
jb     15c2 <xmlEncodeCdata+0x4c2>
mov    %r11d,%ebx
and    $0xfc,%bl
cmp    $0xf8,%bl
jne    13c1 <xmlEncodeCdata+0x2c1>
movzbl 0x1(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    13c1 <xmlEncodeCdata+0x2c1>
movzbl 0x2(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    13c1 <xmlEncodeCdata+0x2c1>
movzbl 0x3(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    13c1 <xmlEncodeCdata+0x2c1>
movzbl 0x4(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    13c1 <xmlEncodeCdata+0x2c1>
cmp    $0x5,%r10d
jb     13b1 <xmlEncodeCdata+0x2b1>
mov    %r11b,(%rdi)
movzbl 0x1(%rdx),%eax
mov    %al,0x1(%rdi)
movzbl 0x2(%rdx),%eax
mov    %al,0x2(%rdi)
movzbl 0x3(%rdx),%eax
mov    %al,0x3(%rdi)
movzbl 0x4(%rdx),%eax
mov    %al,0x4(%rdi)
add    $0x5,%rdi
add    $0xfffffffb,%r10d
add    $0x5,%rdx
add    $0x5,%r9d
add    $0xfffffffb,%ecx
jmp    1468 <xmlEncodeCdata+0x368>
cmp    $0x5,%ebp
jb     15c2 <xmlEncodeCdata+0x4c2>
mov    %r11d,%ebx
and    $0xfe,%bl
cmp    $0xfc,%bl
jne    15c2 <xmlEncodeCdata+0x4c2>
movzbl 0x1(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    15c2 <xmlEncodeCdata+0x4c2>
movzbl 0x2(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    15c2 <xmlEncodeCdata+0x4c2>
movzbl 0x3(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    15c2 <xmlEncodeCdata+0x4c2>
movzbl 0x4(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    15c2 <xmlEncodeCdata+0x4c2>
movzbl 0x5(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    15c2 <xmlEncodeCdata+0x4c2>
cmp    $0x6,%r10d
jb     145d <xmlEncodeCdata+0x35d>
mov    %r11b,(%rdi)
movzbl 0x1(%rdx),%eax
mov    %al,0x1(%rdi)
movzbl 0x2(%rdx),%eax
mov    %al,0x2(%rdi)
movzbl 0x3(%rdx),%eax
mov    %al,0x3(%rdi)
movzbl 0x4(%rdx),%eax
mov    %al,0x4(%rdi)
movzbl 0x5(%rdx),%eax
mov    %al,0x5(%rdi)
add    $0x6,%rdi
add    $0xfffffffa,%r10d
add    $0x6,%rdx
add    $0x6,%r9d
add    $0xfffffffa,%ecx
mov    %r10d,%eax
mov    %ecx,%ebp
mov    %ebp,%ecx
mov    %eax,%r10d
test   %ebp,%ebp
jne    11a8 <xmlEncodeCdata+0xa8>
jmp    15a2 <xmlEncodeCdata+0x4a2>
movb   $0x5d,(%rdi)
cmp    $0x1,%r10d
jne    1491 <xmlEncodeCdata+0x391>
add    $0x1,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movzbl 0x1(%rdx),%ebx
mov    %bl,0x1(%rdi)
cmp    $0x2,%r10d
jne    14a7 <xmlEncodeCdata+0x3a7>
add    $0x2,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movb   $0x5d,0x2(%rdi)
cmp    $0x3,%r10d
jne    14ba <xmlEncodeCdata+0x3ba>
add    $0x3,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movb   $0x5d,0x3(%rdi)
cmp    $0x4,%r10d
jne    14cd <xmlEncodeCdata+0x3cd>
add    $0x4,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movb   $0x3e,0x4(%rdi)
cmp    $0x5,%r10d
jne    14e0 <xmlEncodeCdata+0x3e0>
add    $0x5,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movb   $0x3c,0x5(%rdi)
cmp    $0x6,%r10d
jne    14f3 <xmlEncodeCdata+0x3f3>
add    $0x6,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movb   $0x21,0x6(%rdi)
cmp    $0x7,%r10d
jne    1506 <xmlEncodeCdata+0x406>
add    $0x7,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movb   $0x5b,0x7(%rdi)
cmp    $0x8,%r10d
jne    1519 <xmlEncodeCdata+0x419>
add    $0x8,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movb   $0x43,0x8(%rdi)
cmp    $0x9,%r10d
jne    152c <xmlEncodeCdata+0x42c>
add    $0x9,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movb   $0x44,0x9(%rdi)
cmp    $0xa,%r10d
jne    153f <xmlEncodeCdata+0x43f>
add    $0xa,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movb   $0x41,0xa(%rdi)
cmp    $0xb,%r10d
jne    1552 <xmlEncodeCdata+0x452>
add    $0xb,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movb   $0x54,0xb(%rdi)
cmp    $0xc,%r10d
jne    1565 <xmlEncodeCdata+0x465>
add    $0xc,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movb   $0x41,0xc(%rdi)
cmp    $0xd,%r10d
jne    1578 <xmlEncodeCdata+0x478>
add    $0xd,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movb   $0x5b,0xd(%rdi)
cmp    $0xe,%r10d
jne    158b <xmlEncodeCdata+0x48b>
add    $0xe,%rdi
jmp    11e1 <xmlEncodeCdata+0xe1>
movzbl 0x2(%rdx),%eax
mov    %al,0xe(%rdi)
add    $0xf,%rdi
add    $0xfffffff1,%r10d
mov    %r10d,%eax
jmp    11e1 <xmlEncodeCdata+0xe1>
test   %eax,%eax
je     15bb <xmlEncodeCdata+0x4bb>
movb   $0x5d,(%rdi)
add    $0xffffffff,%eax
je     15bb <xmlEncodeCdata+0x4bb>
movb   $0x5d,0x1(%rdi)
cmp    $0x1,%eax
je     15bb <xmlEncodeCdata+0x4bb>
movb   $0x3e,0x2(%rdi)
add    $0x3,%r9d
mov    %r9d,%eax
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
@xmlEncodeCdata.b = internal constant [10 x i8] c"<![CDATA[\00"
@xmlEncodeCdata.e = internal constant [4 x i8] c"]]>\00"
define i32 @xmlEncodeCdata(i8* %0, i32 %1, i8* %2, i32 %3) {
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i8*
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
store i8* %0, i8** %6
store i32 %1, i32* %7
store i8* %2, i8** %8
store i32 %3, i32* %9
store i32 0, i32* %10
store i32 0, i32* %11
br label %12
12: ; preds = %29, %4
%13 = load i32, i32* %11
%14 = zext i32 %13 to i64
%15 = icmp ult i64 %14, 9
br i1 %15, label %16, label %34
16: ; preds = %12
%17 = load i32, i32* %7
%18 = icmp ugt i32 %17, 0
br i1 %18, label %19, label %28
19: ; preds = %16
%20 = load i32, i32* %11
%21 = zext i32 %20 to i64
%22 = getelementptr inbounds [10 x i8], [10 x i8]* @xmlEncodeCdata.b, i64 0, i64 %21
%23 = load i8, i8* %22
%24 = load i8*, i8** %6
%25 = getelementptr inbounds i8, i8* %24, i32 1
store i8* %25, i8** %6
store i8 %23, i8* %24
%26 = load i32, i32* %7
%27 = add i32 %26, -1
store i32 %27, i32* %7
br label %28
28: ; preds = %19, %16
br label %29
29: ; preds = %28
%30 = load i32, i32* %11
%31 = add i32 %30, 1
store i32 %31, i32* %11
%32 = load i32, i32* %10
%33 = add nsw i32 %32, 1
store i32 %33, i32* %10
br label %12
34: ; preds = %12
br label %35
35: ; preds = %516, %34
%36 = load i32, i32* %9
%37 = add i32 %36, -1
store i32 %37, i32* %9
%38 = icmp ne i32 %36, 0
br i1 %38, label %39, label %517
39: ; preds = %35
%40 = load i8*, i8** %8
%41 = load i8, i8* %40
%42 = zext i8 %41 to i32
switch i32 %42, label %166 [
i32 0, label %43
i32 1, label %43
i32 2, label %43
i32 3, label %43
i32 4, label %43
i32 5, label %43
i32 6, label %43
i32 7, label %43
i32 8, label %43
i32 11, label %43
i32 12, label %43
i32 14, label %43
i32 15, label %43
i32 16, label %43
i32 17, label %43
i32 18, label %43
i32 19, label %43
i32 20, label %43
i32 21, label %43
i32 22, label %43
i32 23, label %43
i32 24, label %43
i32 25, label %43
i32 26, label %43
i32 27, label %43
i32 28, label %43
i32 29, label %43
i32 30, label %43
i32 31, label %43
i32 127, label %43
i32 93, label %44
]
43: ; preds = %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39, %39
store i32 -1, i32* %5
br label %542
44: ; preds = %39
%45 = load i32, i32* %9
%46 = icmp ugt i32 %45, 1
br i1 %46, label %47, label %150
47: ; preds = %44
%48 = load i8*, i8** %8
%49 = getelementptr inbounds i8, i8* %48, i64 1
%50 = load i8, i8* %49
%51 = zext i8 %50 to i32
%52 = icmp eq i32 %51, 93
br i1 %52, label %53, label %150
53: ; preds = %47
%54 = load i8*, i8** %8
%55 = getelementptr inbounds i8, i8* %54, i64 2
%56 = load i8, i8* %55
%57 = zext i8 %56 to i32
%58 = icmp eq i32 %57, 62
br i1 %58, label %59, label %150
59: ; preds = %53
%60 = load i32, i32* %7
%61 = icmp ugt i32 %60, 0
br i1 %61, label %62, label %69
62: ; preds = %59
%63 = load i8*, i8** %8
%64 = load i8, i8* %63
%65 = load i8*, i8** %6
%66 = getelementptr inbounds i8, i8* %65, i32 1
store i8* %66, i8** %6
store i8 %64, i8* %65
%67 = load i32, i32* %7
%68 = add i32 %67, -1
store i32 %68, i32* %7
br label %69
69: ; preds = %62, %59
%70 = load i8*, i8** %8
%71 = getelementptr inbounds i8, i8* %70, i32 1
store i8* %71, i8** %8
%72 = load i32, i32* %10
%73 = add nsw i32 %72, 1
store i32 %73, i32* %10
%74 = load i32, i32* %7
%75 = icmp ugt i32 %74, 0
br i1 %75, label %76, label %83
76: ; preds = %69
%77 = load i8*, i8** %8
%78 = load i8, i8* %77
%79 = load i8*, i8** %6
%80 = getelementptr inbounds i8, i8* %79, i32 1
store i8* %80, i8** %6
store i8 %78, i8* %79
%81 = load i32, i32* %7
%82 = add i32 %81, -1
store i32 %82, i32* %7
br label %83
83: ; preds = %76, %69
%84 = load i8*, i8** %8
%85 = getelementptr inbounds i8, i8* %84, i32 1
store i8* %85, i8** %8
%86 = load i32, i32* %10
%87 = add nsw i32 %86, 1
store i32 %87, i32* %10
store i32 0, i32* %11
br label %88
88: ; preds = %105, %83
%89 = load i32, i32* %11
%90 = zext i32 %89 to i64
%91 = icmp ult i64 %90, 3
br i1 %91, label %92, label %110
92: ; preds = %88
%93 = load i32, i32* %7
%94 = icmp ugt i32 %93, 0
br i1 %94, label %95, label %104
95: ; preds = %92
%96 = load i32, i32* %11
%97 = zext i32 %96 to i64
%98 = getelementptr inbounds [4 x i8], [4 x i8]* @xmlEncodeCdata.e, i64 0, i64 %97
%99 = load i8, i8* %98
%100 = load i8*, i8** %6
%101 = getelementptr inbounds i8, i8* %100, i32 1
store i8* %101, i8** %6
store i8 %99, i8* %100
%102 = load i32, i32* %7
%103 = add i32 %102, -1
store i32 %103, i32* %7
br label %104
104: ; preds = %95, %92
br label %105
105: ; preds = %104
%106 = load i32, i32* %11
%107 = add i32 %106, 1
store i32 %107, i32* %11
%108 = load i32, i32* %10
%109 = add nsw i32 %108, 1
store i32 %109, i32* %10
br label %88
110: ; preds = %88
store i32 0, i32* %11
br label %111
111: ; preds = %128, %110
%112 = load i32, i32* %11
%113 = zext i32 %112 to i64
%114 = icmp ult i64 %113, 9
br i1 %114, label %115, label %133
115: ; preds = %111
%116 = load i32, i32* %7
%117 = icmp ugt i32 %116, 0
br i1 %117, label %118, label %127
118: ; preds = %115
%119 = load i32, i32* %11
%120 = zext i32 %119 to i64
%121 = getelementptr inbounds [10 x i8], [10 x i8]* @xmlEncodeCdata.b, i64 0, i64 %120
%122 = load i8, i8* %121
%123 = load i8*, i8** %6
%124 = getelementptr inbounds i8, i8* %123, i32 1
store i8* %124, i8** %6
store i8 %122, i8* %123
%125 = load i32, i32* %7
%126 = add i32 %125, -1
store i32 %126, i32* %7
br label %127
127: ; preds = %118, %115
br label %128
128: ; preds = %127
%129 = load i32, i32* %11
%130 = add i32 %129, 1
store i32 %130, i32* %11
%131 = load i32, i32* %10
%132 = add nsw i32 %131, 1
store i32 %132, i32* %10
br label %111
133: ; preds = %111
%134 = load i32, i32* %7
%135 = icmp ugt i32 %134, 0
br i1 %135, label %136, label %143
136: ; preds = %133
%137 = load i8*, i8** %8
%138 = load i8, i8* %137
%139 = load i8*, i8** %6
%140 = getelementptr inbounds i8, i8* %139, i32 1
store i8* %140, i8** %6
store i8 %138, i8* %139
%141 = load i32, i32* %7
%142 = add i32 %141, -1
store i32 %142, i32* %7
br label %143
143: ; preds = %136, %133
%144 = load i8*, i8** %8
%145 = getelementptr inbounds i8, i8* %144, i32 1
store i8* %145, i8** %8
%146 = load i32, i32* %10
%147 = add nsw i32 %146, 1
store i32 %147, i32* %10
%148 = load i32, i32* %9
%149 = sub i32 %148, 2
store i32 %149, i32* %9
br label %165
150: ; preds = %53, %47, %44
%151 = load i32, i32* %7
%152 = icmp ugt i32 %151, 0
br i1 %152, label %153, label %160
153: ; preds = %150
%154 = load i8*, i8** %8
%155 = load i8, i8* %154
%156 = load i8*, i8** %6
%157 = getelementptr inbounds i8, i8* %156, i32 1
store i8* %157, i8** %6
store i8 %155, i8* %156
%158 = load i32, i32* %7
%159 = add i32 %158, -1
store i32 %159, i32* %7
br label %160
160: ; preds = %153, %150
%161 = load i8*, i8** %8
%162 = getelementptr inbounds i8, i8* %161, i32 1
store i8* %162, i8** %8
%163 = load i32, i32* %10
%164 = add nsw i32 %163, 1
store i32 %164, i32* %10
br label %165
165: ; preds = %160, %143
br label %516
166: ; preds = %39
%167 = load i8*, i8** %8
%168 = load i8, i8* %167
%169 = zext i8 %168 to i32
%170 = and i32 %169, 128
%171 = icmp eq i32 %170, 0
br i1 %171, label %172, label %189
172: ; preds = %166
%173 = load i32, i32* %7
%174 = icmp ugt i32 %173, 0
br i1 %174, label %175, label %183
175: ; preds = %172
%176 = load i8*, i8** %8
%177 = getelementptr inbounds i8, i8* %176, i32 1
store i8* %177, i8** %8
%178 = load i8, i8* %176
%179 = load i8*, i8** %6
%180 = getelementptr inbounds i8, i8* %179, i32 1
store i8* %180, i8** %6
store i8 %178, i8* %179
%181 = load i32, i32* %7
%182 = add i32 %181, -1
store i32 %182, i32* %7
br label %186
183: ; preds = %172
%184 = load i8*, i8** %8
%185 = getelementptr inbounds i8, i8* %184, i32 1
store i8* %185, i8** %8
br label %186
186: ; preds = %183, %175
%187 = load i32, i32* %10
%188 = add nsw i32 %187, 1
store i32 %188, i32* %10
br label %515
189: ; preds = %166
%190 = load i32, i32* %9
%191 = icmp ugt i32 %190, 0
br i1 %191, label %192, label %229
192: ; preds = %189
%193 = load i8*, i8** %8
%194 = load i8, i8* %193
%195 = zext i8 %194 to i32
%196 = and i32 %195, 224
%197 = icmp eq i32 %196, 192
br i1 %197, label %198, label %229
198: ; preds = %192
%199 = load i8*, i8** %8
%200 = getelementptr inbounds i8, i8* %199, i64 1
%201 = load i8, i8* %200
%202 = zext i8 %201 to i32
%203 = and i32 %202, 192
%204 = icmp eq i32 %203, 128
br i1 %204, label %205, label %229
205: ; preds = %198
%206 = load i32, i32* %7
%207 = icmp ugt i32 %206, 1
br i1 %207, label %208, label %221
208: ; preds = %205
%209 = load i8*, i8** %8
%210 = getelementptr inbounds i8, i8* %209, i32 1
store i8* %210, i8** %8
%211 = load i8, i8* %209
%212 = load i8*, i8** %6
%213 = getelementptr inbounds i8, i8* %212, i32 1
store i8* %213, i8** %6
store i8 %211, i8* %212
%214 = load i8*, i8** %8
%215 = getelementptr inbounds i8, i8* %214, i32 1
store i8* %215, i8** %8
%216 = load i8, i8* %214
%217 = load i8*, i8** %6
%218 = getelementptr inbounds i8, i8* %217, i32 1
store i8* %218, i8** %6
store i8 %216, i8* %217
%219 = load i32, i32* %7
%220 = sub i32 %219, 2
store i32 %220, i32* %7
br label %224
221: ; preds = %205
%222 = load i8*, i8** %8
%223 = getelementptr inbounds i8, i8* %222, i64 2
store i8* %223, i8** %8
br label %224
224: ; preds = %221, %208
%225 = load i32, i32* %10
%226 = add nsw i32 %225, 2
store i32 %226, i32* %10
%227 = load i32, i32* %9
%228 = add i32 %227, -1
store i32 %228, i32* %9
br label %514
229: ; preds = %198, %192, %189
%230 = load i32, i32* %9
%231 = icmp ugt i32 %230, 1
br i1 %231, label %232, label %281
232: ; preds = %229
%233 = load i8*, i8** %8
%234 = load i8, i8* %233
%235 = zext i8 %234 to i32
%236 = and i32 %235, 240
%237 = icmp eq i32 %236, 224
br i1 %237, label %238, label %281
238: ; preds = %232
%239 = load i8*, i8** %8
%240 = getelementptr inbounds i8, i8* %239, i64 1
%241 = load i8, i8* %240
%242 = zext i8 %241 to i32
%243 = and i32 %242, 192
%244 = icmp eq i32 %243, 128
br i1 %244, label %245, label %281
245: ; preds = %238
%246 = load i8*, i8** %8
%247 = getelementptr inbounds i8, i8* %246, i64 2
%248 = load i8, i8* %247
%249 = zext i8 %248 to i32
%250 = and i32 %249, 192
%251 = icmp eq i32 %250, 128
br i1 %251, label %252, label %281
252: ; preds = %245
%253 = load i32, i32* %7
%254 = icmp ugt i32 %253, 2
br i1 %254, label %255, label %273
255: ; preds = %252
%256 = load i8*, i8** %8
%257 = getelementptr inbounds i8, i8* %256, i32 1
store i8* %257, i8** %8
%258 = load i8, i8* %256
%259 = load i8*, i8** %6
%260 = getelementptr inbounds i8, i8* %259, i32 1
store i8* %260, i8** %6
store i8 %258, i8* %259
%261 = load i8*, i8** %8
%262 = getelementptr inbounds i8, i8* %261, i32 1
store i8* %262, i8** %8
%263 = load i8, i8* %261
%264 = load i8*, i8** %6
%265 = getelementptr inbounds i8, i8* %264, i32 1
store i8* %265, i8** %6
store i8 %263, i8* %264
%266 = load i8*, i8** %8
%267 = getelementptr inbounds i8, i8* %266, i32 1
store i8* %267, i8** %8
%268 = load i8, i8* %266
%269 = load i8*, i8** %6
%270 = getelementptr inbounds i8, i8* %269, i32 1
store i8* %270, i8** %6
store i8 %268, i8* %269
%271 = load i32, i32* %7
%272 = sub i32 %271, 3
store i32 %272, i32* %7
br label %276
273: ; preds = %252
%274 = load i8*, i8** %8
%275 = getelementptr inbounds i8, i8* %274, i64 3
store i8* %275, i8** %8
br label %276
276: ; preds = %273, %255
%277 = load i32, i32* %10
%278 = add nsw i32 %277, 3
store i32 %278, i32* %10
%279 = load i32, i32* %9
%280 = sub i32 %279, 2
store i32 %280, i32* %9
br label %513
281: ; preds = %245, %238, %232, %229
%282 = load i32, i32* %9
%283 = icmp ugt i32 %282, 2
br i1 %283, label %284, label %345
284: ; preds = %281
%285 = load i8*, i8** %8
%286 = load i8, i8* %285
%287 = zext i8 %286 to i32
%288 = and i32 %287, 248
%289 = icmp eq i32 %288, 240
br i1 %289, label %290, label %345
290: ; preds = %284
%291 = load i8*, i8** %8
%292 = getelementptr inbounds i8, i8* %291, i64 1
%293 = load i8, i8* %292
%294 = zext i8 %293 to i32
%295 = and i32 %294, 192
%296 = icmp eq i32 %295, 128
br i1 %296, label %297, label %345
297: ; preds = %290
%298 = load i8*, i8** %8
%299 = getelementptr inbounds i8, i8* %298, i64 2
%300 = load i8, i8* %299
%301 = zext i8 %300 to i32
%302 = and i32 %301, 192
%303 = icmp eq i32 %302, 128
br i1 %303, label %304, label %345
304: ; preds = %297
%305 = load i8*, i8** %8
%306 = getelementptr inbounds i8, i8* %305, i64 3
%307 = load i8, i8* %306
%308 = zext i8 %307 to i32
%309 = and i32 %308, 192
%310 = icmp eq i32 %309, 128
br i1 %310, label %311, label %345
311: ; preds = %304
%312 = load i32, i32* %7
%313 = icmp ugt i32 %312, 3
br i1 %313, label %314, label %337
314: ; preds = %311
%315 = load i8*, i8** %8
%316 = getelementptr inbounds i8, i8* %315, i32 1
store i8* %316, i8** %8
%317 = load i8, i8* %315
%318 = load i8*, i8** %6
%319 = getelementptr inbounds i8, i8* %318, i32 1
store i8* %319, i8** %6
store i8 %317, i8* %318
%320 = load i8*, i8** %8
%321 = getelementptr inbounds i8, i8* %320, i32 1
store i8* %321, i8** %8
%322 = load i8, i8* %320
%323 = load i8*, i8** %6
%324 = getelementptr inbounds i8, i8* %323, i32 1
store i8* %324, i8** %6
store i8 %322, i8* %323
%325 = load i8*, i8** %8
%326 = getelementptr inbounds i8, i8* %325, i32 1
store i8* %326, i8** %8
%327 = load i8, i8* %325
%328 = load i8*, i8** %6
%329 = getelementptr inbounds i8, i8* %328, i32 1
store i8* %329, i8** %6
store i8 %327, i8* %328
%330 = load i8*, i8** %8
%331 = getelementptr inbounds i8, i8* %330, i32 1
store i8* %331, i8** %8
%332 = load i8, i8* %330
%333 = load i8*, i8** %6
%334 = getelementptr inbounds i8, i8* %333, i32 1
store i8* %334, i8** %6
store i8 %332, i8* %333
%335 = load i32, i32* %7
%336 = sub i32 %335, 4
store i32 %336, i32* %7
br label %340
337: ; preds = %311
%338 = load i8*, i8** %8
%339 = getelementptr inbounds i8, i8* %338, i64 4
store i8* %339, i8** %8
br label %340
340: ; preds = %337, %314
%341 = load i32, i32* %10
%342 = add nsw i32 %341, 4
store i32 %342, i32* %10
%343 = load i32, i32* %9
%344 = sub i32 %343, 3
store i32 %344, i32* %9
br label %512
345: ; preds = %304, %297, %290, %284, %281
%346 = load i32, i32* %9
%347 = icmp ugt i32 %346, 3
br i1 %347, label %348, label %421
348: ; preds = %345
%349 = load i8*, i8** %8
%350 = load i8, i8* %349
%351 = zext i8 %350 to i32
%352 = and i32 %351, 252
%353 = icmp eq i32 %352, 248
br i1 %353, label %354, label %421
354: ; preds = %348
%355 = load i8*, i8** %8
%356 = getelementptr inbounds i8, i8* %355, i64 1
%357 = load i8, i8* %356
%358 = zext i8 %357 to i32
%359 = and i32 %358, 192
%360 = icmp eq i32 %359, 128
br i1 %360, label %361, label %421
361: ; preds = %354
%362 = load i8*, i8** %8
%363 = getelementptr inbounds i8, i8* %362, i64 2
%364 = load i8, i8* %363
%365 = zext i8 %364 to i32
%366 = and i32 %365, 192
%367 = icmp eq i32 %366, 128
br i1 %367, label %368, label %421
368: ; preds = %361
%369 = load i8*, i8** %8
%370 = getelementptr inbounds i8, i8* %369, i64 3
%371 = load i8, i8* %370
%372 = zext i8 %371 to i32
%373 = and i32 %372, 192
%374 = icmp eq i32 %373, 128
br i1 %374, label %375, label %421
375: ; preds = %368
%376 = load i8*, i8** %8
%377 = getelementptr inbounds i8, i8* %376, i64 4
%378 = load i8, i8* %377
%379 = zext i8 %378 to i32
%380 = and i32 %379, 192
%381 = icmp eq i32 %380, 128
br i1 %381, label %382, label %421
382: ; preds = %375
%383 = load i32, i32* %7
%384 = icmp ugt i32 %383, 4
br i1 %384, label %385, label %413
385: ; preds = %382
%386 = load i8*, i8** %8
%387 = getelementptr inbounds i8, i8* %386, i32 1
store i8* %387, i8** %8
%388 = load i8, i8* %386
%389 = load i8*, i8** %6
%390 = getelementptr inbounds i8, i8* %389, i32 1
store i8* %390, i8** %6
store i8 %388, i8* %389
%391 = load i8*, i8** %8
%392 = getelementptr inbounds i8, i8* %391, i32 1
store i8* %392, i8** %8
%393 = load i8, i8* %391
%394 = load i8*, i8** %6
%395 = getelementptr inbounds i8, i8* %394, i32 1
store i8* %395, i8** %6
store i8 %393, i8* %394
%396 = load i8*, i8** %8
%397 = getelementptr inbounds i8, i8* %396, i32 1
store i8* %397, i8** %8
%398 = load i8, i8* %396
%399 = load i8*, i8** %6
%400 = getelementptr inbounds i8, i8* %399, i32 1
store i8* %400, i8** %6
store i8 %398, i8* %399
%401 = load i8*, i8** %8
%402 = getelementptr inbounds i8, i8* %401, i32 1
store i8* %402, i8** %8
%403 = load i8, i8* %401
%404 = load i8*, i8** %6
%405 = getelementptr inbounds i8, i8* %404, i32 1
store i8* %405, i8** %6
store i8 %403, i8* %404
%406 = load i8*, i8** %8
%407 = getelementptr inbounds i8, i8* %406, i32 1
store i8* %407, i8** %8
%408 = load i8, i8* %406
%409 = load i8*, i8** %6
%410 = getelementptr inbounds i8, i8* %409, i32 1
store i8* %410, i8** %6
store i8 %408, i8* %409
%411 = load i32, i32* %7
%412 = sub i32 %411, 5
store i32 %412, i32* %7
br label %416
413: ; preds = %382
%414 = load i8*, i8** %8
%415 = getelementptr inbounds i8, i8* %414, i64 5
store i8* %415, i8** %8
br label %416
416: ; preds = %413, %385
%417 = load i32, i32* %10
%418 = add nsw i32 %417, 5
store i32 %418, i32* %10
%419 = load i32, i32* %9
%420 = sub i32 %419, 4
store i32 %420, i32* %9
br label %511
421: ; preds = %375, %368, %361, %354, %348, %345
%422 = load i32, i32* %9
%423 = icmp ugt i32 %422, 4
br i1 %423, label %424, label %509
424: ; preds = %421
%425 = load i8*, i8** %8
%426 = load i8, i8* %425
%427 = zext i8 %426 to i32
%428 = and i32 %427, 254
%429 = icmp eq i32 %428, 252
br i1 %429, label %430, label %509
430: ; preds = %424
%431 = load i8*, i8** %8
%432 = getelementptr inbounds i8, i8* %431, i64 1
%433 = load i8, i8* %432
%434 = zext i8 %433 to i32
%435 = and i32 %434, 192
%436 = icmp eq i32 %435, 128
br i1 %436, label %437, label %509
437: ; preds = %430
%438 = load i8*, i8** %8
%439 = getelementptr inbounds i8, i8* %438, i64 2
%440 = load i8, i8* %439
%441 = zext i8 %440 to i32
%442 = and i32 %441, 192
%443 = icmp eq i32 %442, 128
br i1 %443, label %444, label %509
444: ; preds = %437
%445 = load i8*, i8** %8
%446 = getelementptr inbounds i8, i8* %445, i64 3
%447 = load i8, i8* %446
%448 = zext i8 %447 to i32
%449 = and i32 %448, 192
%450 = icmp eq i32 %449, 128
br i1 %450, label %451, label %509
451: ; preds = %444
%452 = load i8*, i8** %8
%453 = getelementptr inbounds i8, i8* %452, i64 4
%454 = load i8, i8* %453
%455 = zext i8 %454 to i32
%456 = and i32 %455, 192
%457 = icmp eq i32 %456, 128
br i1 %457, label %458, label %509
458: ; preds = %451
%459 = load i8*, i8** %8
%460 = getelementptr inbounds i8, i8* %459, i64 5
%461 = load i8, i8* %460
%462 = zext i8 %461 to i32
%463 = and i32 %462, 192
%464 = icmp eq i32 %463, 128
br i1 %464, label %465, label %509
465: ; preds = %458
%466 = load i32, i32* %7
%467 = icmp ugt i32 %466, 5
br i1 %467, label %468, label %501
468: ; preds = %465
%469 = load i8*, i8** %8
%470 = getelementptr inbounds i8, i8* %469, i32 1
store i8* %470, i8** %8
%471 = load i8, i8* %469
%472 = load i8*, i8** %6
%473 = getelementptr inbounds i8, i8* %472, i32 1
store i8* %473, i8** %6
store i8 %471, i8* %472
%474 = load i8*, i8** %8
%475 = getelementptr inbounds i8, i8* %474, i32 1
store i8* %475, i8** %8
%476 = load i8, i8* %474
%477 = load i8*, i8** %6
%478 = getelementptr inbounds i8, i8* %477, i32 1
store i8* %478, i8** %6
store i8 %476, i8* %477
%479 = load i8*, i8** %8
%480 = getelementptr inbounds i8, i8* %479, i32 1
store i8* %480, i8** %8
%481 = load i8, i8* %479
%482 = load i8*, i8** %6
%483 = getelementptr inbounds i8, i8* %482, i32 1
store i8* %483, i8** %6
store i8 %481, i8* %482
%484 = load i8*, i8** %8
%485 = getelementptr inbounds i8, i8* %484, i32 1
store i8* %485, i8** %8
%486 = load i8, i8* %484
%487 = load i8*, i8** %6
%488 = getelementptr inbounds i8, i8* %487, i32 1
store i8* %488, i8** %6
store i8 %486, i8* %487
%489 = load i8*, i8** %8
%490 = getelementptr inbounds i8, i8* %489, i32 1
store i8* %490, i8** %8
%491 = load i8, i8* %489
%492 = load i8*, i8** %6
%493 = getelementptr inbounds i8, i8* %492, i32 1
store i8* %493, i8** %6
store i8 %491, i8* %492
%494 = load i8*, i8** %8
%495 = getelementptr inbounds i8, i8* %494, i32 1
store i8* %495, i8** %8
%496 = load i8, i8* %494
%497 = load i8*, i8** %6
%498 = getelementptr inbounds i8, i8* %497, i32 1
store i8* %498, i8** %6
store i8 %496, i8* %497
%499 = load i32, i32* %7
%500 = sub i32 %499, 6
store i32 %500, i32* %7
br label %504
501: ; preds = %465
%502 = load i8*, i8** %8
%503 = getelementptr inbounds i8, i8* %502, i64 6
store i8* %503, i8** %8
br label %504
504: ; preds = %501, %468
%505 = load i32, i32* %10
%506 = add nsw i32 %505, 6
store i32 %506, i32* %10
%507 = load i32, i32* %9
%508 = sub i32 %507, 5
store i32 %508, i32* %9
br label %510
509: ; preds = %458, %451, %444, %437, %430, %424, %421
store i32 -1, i32* %5
br label %542
510: ; preds = %504
br label %511
511: ; preds = %510, %416
br label %512
512: ; preds = %511, %340
br label %513
513: ; preds = %512, %276
br label %514
514: ; preds = %513, %224
br label %515
515: ; preds = %514, %186
br label %516
516: ; preds = %515, %165
br label %35
517: ; preds = %35
store i32 0, i32* %11
br label %518
518: ; preds = %535, %517
%519 = load i32, i32* %11
%520 = zext i32 %519 to i64
%521 = icmp ult i64 %520, 3
br i1 %521, label %522, label %540
522: ; preds = %518
%523 = load i32, i32* %7
%524 = icmp ugt i32 %523, 0
br i1 %524, label %525, label %534
525: ; preds = %522
%526 = load i32, i32* %11
%527 = zext i32 %526 to i64
%528 = getelementptr inbounds [4 x i8], [4 x i8]* @xmlEncodeCdata.e, i64 0, i64 %527
%529 = load i8, i8* %528
%530 = load i8*, i8** %6
%531 = getelementptr inbounds i8, i8* %530, i32 1
store i8* %531, i8** %6
store i8 %529, i8* %530
%532 = load i32, i32* %7
%533 = add i32 %532, -1
store i32 %533, i32* %7
br label %534
534: ; preds = %525, %522
br label %535
535: ; preds = %534
%536 = load i32, i32* %11
%537 = add i32 %536, 1
store i32 %537, i32* %11
%538 = load i32, i32* %10
%539 = add nsw i32 %538, 1
store i32 %539, i32* %10
br label %518
540: ; preds = %518
%541 = load i32, i32* %10
store i32 %541, i32* %5
br label %542
542: ; preds = %540, %509, %43
%543 = load i32, i32* %5
ret i32 %543
}

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