int xmlEncodeString(unsigned char *out, unsigned int olen,
                    const unsigned char *in, unsigned int ilen) {
  int len;
  len = 0;
  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 (olen > 4) {
        *out++ = '&';
        *out++ = 'a';
        *out++ = 'm';
        *out++ = 'p';
        *out++ = ';';
        olen -= 5;
      }
      in++;
      len += 5;
      break;
    case '\'':
      if (olen > 5) {
        *out++ = '&';
        *out++ = 'a';
        *out++ = 'p';
        *out++ = 'o';
        *out++ = 's';
        *out++ = ';';
        olen -= 6;
      }
      in++;
      len += 6;
      break;
    case '>':
      if (olen > 3) {
        *out++ = '&';
        *out++ = 'g';
        *out++ = 't';
        *out++ = ';';
        olen -= 4;
      }
      in++;
      len += 4;
      break;
    case '<':
      if (olen > 3) {
        *out++ = '&';
        *out++ = 'l';
        *out++ = 't';
        *out++ = ';';
        olen -= 4;
      }
      in++;
      len += 4;
      break;
    case '"':
      if (olen > 5) {
        *out++ = '&';
        *out++ = 'q';
        *out++ = 'u';
        *out++ = 'o';
        *out++ = 't';
        *out++ = ';';
        olen -= 6;
      }
      in++;
      len += 6;
      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;
    }
  return (len);
}


x86 assembly (clang, -O0):
<xmlEncodeString>:
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)
mov    -0x24(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x24(%rbp)
cmp    $0x0,%eax
je     1a77 <xmlEncodeString+0x977>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
mov    %rax,-0x30(%rbp)
test   %al,%al
js     1403 <xmlEncodeString+0x303>
mov    -0x30(%rbp),%rax
lea    0xeb5(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0xffffffff,-0x4(%rbp)
jmp    1a7d <xmlEncodeString+0x97d>
cmpl   $0x4,-0x14(%rbp)
jbe    11cd <xmlEncodeString+0xcd>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x26,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x61,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x6d,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x70,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x3b,(%rax)
mov    -0x14(%rbp),%eax
sub    $0x5,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x28(%rbp)
jmp    1a72 <xmlEncodeString+0x972>
cmpl   $0x5,-0x14(%rbp)
jbe    1266 <xmlEncodeString+0x166>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x26,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x61,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x70,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x6f,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x73,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x3b,(%rax)
mov    -0x14(%rbp),%eax
sub    $0x6,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x28(%rbp)
jmp    1a72 <xmlEncodeString+0x972>
cmpl   $0x3,-0x14(%rbp)
jbe    12db <xmlEncodeString+0x1db>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x26,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x67,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x74,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x3b,(%rax)
mov    -0x14(%rbp),%eax
sub    $0x4,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x28(%rbp)
jmp    1a72 <xmlEncodeString+0x972>
cmpl   $0x3,-0x14(%rbp)
jbe    1350 <xmlEncodeString+0x250>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x26,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x6c,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x74,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x3b,(%rax)
mov    -0x14(%rbp),%eax
sub    $0x4,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x28(%rbp)
jmp    1a72 <xmlEncodeString+0x972>
cmpl   $0x5,-0x14(%rbp)
jbe    13e9 <xmlEncodeString+0x2e9>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x26,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x71,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x75,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x6f,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x74,(%rax)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x3b,(%rax)
mov    -0x14(%rbp),%eax
sub    $0x6,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x28(%rbp)
jmp    1a72 <xmlEncodeString+0x972>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
and    $0x80,%eax
cmp    $0x0,%eax
jne    146c <xmlEncodeString+0x36c>
cmpl   $0x0,-0x14(%rbp)
jbe    1452 <xmlEncodeString+0x352>
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    145e <xmlEncodeString+0x35e>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1a6d <xmlEncodeString+0x96d>
cmpl   $0x0,-0x24(%rbp)
jbe    1524 <xmlEncodeString+0x424>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
and    $0xe0,%eax
cmp    $0xc0,%eax
jne    1524 <xmlEncodeString+0x424>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1524 <xmlEncodeString+0x424>
cmpl   $0x1,-0x14(%rbp)
jbe    1501 <xmlEncodeString+0x401>
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    150d <xmlEncodeString+0x40d>
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    1a68 <xmlEncodeString+0x968>
cmpl   $0x1,-0x24(%rbp)
jbe    1616 <xmlEncodeString+0x516>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
and    $0xf0,%eax
cmp    $0xe0,%eax
jne    1616 <xmlEncodeString+0x516>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1616 <xmlEncodeString+0x516>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1616 <xmlEncodeString+0x516>
cmpl   $0x2,-0x14(%rbp)
jbe    15f3 <xmlEncodeString+0x4f3>
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    15ff <xmlEncodeString+0x4ff>
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    1a63 <xmlEncodeString+0x963>
cmpl   $0x2,-0x24(%rbp)
jbe    1742 <xmlEncodeString+0x642>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
and    $0xf8,%eax
cmp    $0xf0,%eax
jne    1742 <xmlEncodeString+0x642>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1742 <xmlEncodeString+0x642>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1742 <xmlEncodeString+0x642>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1742 <xmlEncodeString+0x642>
cmpl   $0x3,-0x14(%rbp)
jbe    171f <xmlEncodeString+0x61f>
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    172b <xmlEncodeString+0x62b>
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    1a5e <xmlEncodeString+0x95e>
cmpl   $0x3,-0x24(%rbp)
jbe    18a8 <xmlEncodeString+0x7a8>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
and    $0xfc,%eax
cmp    $0xf8,%eax
jne    18a8 <xmlEncodeString+0x7a8>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    18a8 <xmlEncodeString+0x7a8>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    18a8 <xmlEncodeString+0x7a8>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    18a8 <xmlEncodeString+0x7a8>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    18a8 <xmlEncodeString+0x7a8>
cmpl   $0x4,-0x14(%rbp)
jbe    1885 <xmlEncodeString+0x785>
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    1891 <xmlEncodeString+0x791>
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    1a59 <xmlEncodeString+0x959>
cmpl   $0x4,-0x24(%rbp)
jbe    1a48 <xmlEncodeString+0x948>
mov    -0x20(%rbp),%rax
movzbl (%rax),%eax
and    $0xfe,%eax
cmp    $0xfc,%eax
jne    1a48 <xmlEncodeString+0x948>
mov    -0x20(%rbp),%rax
movzbl 0x1(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1a48 <xmlEncodeString+0x948>
mov    -0x20(%rbp),%rax
movzbl 0x2(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1a48 <xmlEncodeString+0x948>
mov    -0x20(%rbp),%rax
movzbl 0x3(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1a48 <xmlEncodeString+0x948>
mov    -0x20(%rbp),%rax
movzbl 0x4(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1a48 <xmlEncodeString+0x948>
mov    -0x20(%rbp),%rax
movzbl 0x5(%rax),%eax
and    $0xc0,%eax
cmp    $0x80,%eax
jne    1a48 <xmlEncodeString+0x948>
cmpl   $0x5,-0x14(%rbp)
jbe    1a25 <xmlEncodeString+0x925>
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    1a31 <xmlEncodeString+0x931>
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    1a54 <xmlEncodeString+0x954>
movl   $0xffffffff,-0x4(%rbp)
jmp    1a7d <xmlEncodeString+0x97d>
jmp    1a59 <xmlEncodeString+0x959>
jmp    1a5e <xmlEncodeString+0x95e>
jmp    1a63 <xmlEncodeString+0x963>
jmp    1a68 <xmlEncodeString+0x968>
jmp    1a6d <xmlEncodeString+0x96d>
jmp    1a72 <xmlEncodeString+0x972>
jmp    1119 <xmlEncodeString+0x19>
mov    -0x28(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<xmlEncodeString>:
push   %r14
push   %rbx
test   %ecx,%ecx
je     1430 <xmlEncodeString+0x330>
xor    %r8d,%r8d
lea    0xeeb(%rip),%r9
jmp    1135 <xmlEncodeString+0x35>
add    $0x4,%rdi
add    $0xfffffffc,%esi
add    $0x1,%rdx
add    $0x4,%r8d
mov    %r10d,%ecx
mov    %r8d,%eax
test   %r10d,%r10d
je     1432 <xmlEncodeString+0x332>
lea    -0x1(%rcx),%r10d
movzbl (%rdx),%r11d
movzbl %r11b,%r14d
mov    $0xffffffff,%eax
test   %r14b,%r14b
js     1167 <xmlEncodeString+0x67>
movslq (%r9,%r14,4),%rbx
add    %r9,%rbx
jmp    *%rbx
cmp    $0x6,%esi
jb     11c3 <xmlEncodeString+0xc3>
movl   $0x6f757126,(%rdi)
movw   $0x3b74,0x4(%rdi)
jmp    11bc <xmlEncodeString+0xbc>
test   $0x80,%r11b
jne    11f8 <xmlEncodeString+0xf8>
test   %esi,%esi
je     1421 <xmlEncodeString+0x321>
mov    %r11b,(%rdi)
add    $0x1,%rdi
add    $0xffffffff,%esi
jmp    1423 <xmlEncodeString+0x323>
cmp    $0x5,%esi
jb     119e <xmlEncodeString+0x9e>
movl   $0x706d6126,(%rdi)
movb   $0x3b,0x4(%rdi)
add    $0x5,%rdi
add    $0xfffffffb,%esi
add    $0x1,%rdx
add    $0x5,%r8d
jmp    1126 <xmlEncodeString+0x26>
cmp    $0x6,%esi
jb     11c3 <xmlEncodeString+0xc3>
movl   $0x6f706126,(%rdi)
movw   $0x3b73,0x4(%rdi)
add    $0x6,%rdi
add    $0xfffffffa,%esi
add    $0x1,%rdx
add    $0x6,%r8d
jmp    1126 <xmlEncodeString+0x26>
cmp    $0x4,%esi
jb     111e <xmlEncodeString+0x1e>
movl   $0x3b746c26,(%rdi)
jmp    1117 <xmlEncodeString+0x17>
cmp    $0x4,%esi
jb     111e <xmlEncodeString+0x1e>
movl   $0x3b746726,(%rdi)
jmp    1117 <xmlEncodeString+0x17>
test   %r10d,%r10d
je     123c <xmlEncodeString+0x13c>
and    $0xffffffe0,%r14d
cmp    $0xc0,%r14d
jne    123c <xmlEncodeString+0x13c>
movzbl 0x1(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    123c <xmlEncodeString+0x13c>
cmp    $0x2,%esi
jb     122c <xmlEncodeString+0x12c>
mov    %r11b,(%rdi)
movzbl 0x1(%rdx),%eax
mov    %al,0x1(%rdi)
add    $0x2,%rdi
add    $0xfffffffe,%esi
add    $0x2,%rdx
add    $0x2,%r8d
add    $0xfffffffe,%ecx
jmp    1419 <xmlEncodeString+0x319>
cmp    $0x2,%r10d
jb     1432 <xmlEncodeString+0x332>
mov    %r11d,%ebx
and    $0xf0,%bl
cmp    $0xe0,%bl
jne    1296 <xmlEncodeString+0x196>
movzbl 0x1(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1296 <xmlEncodeString+0x196>
movzbl 0x2(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1296 <xmlEncodeString+0x196>
cmp    $0x3,%esi
jb     1286 <xmlEncodeString+0x186>
mov    %r11b,(%rdi)
movzbl 0x1(%rdx),%eax
mov    %al,0x1(%rdi)
movzbl 0x2(%rdx),%eax
mov    %al,0x2(%rdi)
add    $0x3,%rdi
add    $0xfffffffd,%esi
add    $0x3,%rdx
add    $0x3,%r8d
add    $0xfffffffd,%ecx
jmp    1419 <xmlEncodeString+0x319>
cmp    $0x3,%r10d
jb     1432 <xmlEncodeString+0x332>
mov    %r11d,%ebx
and    $0xf8,%bl
cmp    $0xf0,%bl
jne    1303 <xmlEncodeString+0x203>
movzbl 0x1(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1303 <xmlEncodeString+0x203>
movzbl 0x2(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1303 <xmlEncodeString+0x203>
movzbl 0x3(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1303 <xmlEncodeString+0x203>
cmp    $0x4,%esi
jb     12f3 <xmlEncodeString+0x1f3>
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,%esi
add    $0x4,%rdx
add    $0x4,%r8d
add    $0xfffffffc,%ecx
jmp    1419 <xmlEncodeString+0x319>
cmp    $0x4,%r10d
jb     1432 <xmlEncodeString+0x332>
mov    %r11d,%ebx
and    $0xfc,%bl
cmp    $0xf8,%bl
jne    1383 <xmlEncodeString+0x283>
movzbl 0x1(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1383 <xmlEncodeString+0x283>
movzbl 0x2(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1383 <xmlEncodeString+0x283>
movzbl 0x3(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1383 <xmlEncodeString+0x283>
movzbl 0x4(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1383 <xmlEncodeString+0x283>
cmp    $0x5,%esi
jb     1373 <xmlEncodeString+0x273>
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,%esi
add    $0x5,%rdx
add    $0x5,%r8d
add    $0xfffffffb,%ecx
jmp    1419 <xmlEncodeString+0x319>
cmp    $0x5,%r10d
jb     1432 <xmlEncodeString+0x332>
mov    %r11d,%ebx
and    $0xfe,%bl
cmp    $0xfc,%bl
jne    1432 <xmlEncodeString+0x332>
movzbl 0x1(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1432 <xmlEncodeString+0x332>
movzbl 0x2(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1432 <xmlEncodeString+0x332>
movzbl 0x3(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1432 <xmlEncodeString+0x332>
movzbl 0x4(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1432 <xmlEncodeString+0x332>
movzbl 0x5(%rdx),%ebx
and    $0xc0,%bl
cmp    $0x80,%bl
jne    1432 <xmlEncodeString+0x332>
cmp    $0x6,%esi
jb     140e <xmlEncodeString+0x30e>
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,%esi
add    $0x6,%rdx
add    $0x6,%r8d
add    $0xfffffffa,%ecx
mov    %ecx,%r10d
jmp    1126 <xmlEncodeString+0x26>
xor    %esi,%esi
add    $0x1,%rdx
add    $0x1,%r8d
jmp    1126 <xmlEncodeString+0x26>
xor    %eax,%eax
pop    %rbx
pop    %r14
ret

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

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