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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ string_to_utf8(unsigned char const *, int *);
void good_string_to_utf8(const unsigned char *s, int *v) {
  string_to_utf8(s, v);
  int i, j;
  for (i = j = 0; v[i]; i++) {
    if (v[i] == '&') {
      if (v[i + 1] == 'a' && v[i + 2] == 'm' && v[i + 3] == 'p' &&
          v[i + 4] == ';') {
        i += 4, v[j++] = '&';
      } else if (v[i + 1] == 'l' && v[i + 2] == 't' && v[i + 3] == ';') {
        i += 3, v[j++] = '<';
      } else if (v[i + 1] == 'g' && v[i + 2] == 't' && v[i + 3] == ';') {
        i += 3, v[j++] = '>';
      } else if (v[i + 1] == 'q' && v[i + 2] == 'u' && v[i + 3] == 'o' &&
                 v[i + 4] == 't' && v[i + 5] == ';') {
        i += 5, v[j++] = '"';
      } else {
        v[j++] = '&';
      }
    } else {
      v[j++] = v[i];
    }
  }
  v[j++] = 0;
  for (i = j = 0; v[i]; i++) {
    if (v[i] == '&') {
      if (v[i + 1] == 'a' && v[i + 2] == 'm' && v[i + 3] == 'p' &&
          v[i + 4] == ';') {
        i += 4, v[j++] = '&';
      } else if (v[i + 1] == '#') {
        int r = 0, ti = i;
        for (i += 2; v[i] != ';' && v[i]; i++) {
          if ('0' <= v[i] && v[i] <= '9') {
            r = r * 10 + v[i] - '0';
          } else {
            break;
          }
        }
        if (v[i] != ';') {
          v[j++] = v[i = ti];
        } else {
          v[j++] = r;
        }
      } else {
        v[j++] = v[i];
      }
    } else {
      v[j++] = v[i];
    }
  }
  v[j++] = 0;
  for (i = j = 0; v[i]; i++) {
    if (v[i] != 173 && (v[i] < 65024 || v[i] > 65062) &&
        (v[i] < 7627 || v[i] > 7654) && v[i] != 8288 &&
        (v[i] < 8202 || v[i] > 8207) && (v[i] < 8400 || v[i] > 8433) &&
        v[i] != 8228 && (v[i] < 8298 || v[i] > 8303) && v[i] != 65279 &&
        (v[i] < 768 || v[i] > 879)) {
      v[j++] = v[i];
    }
  }
  v[j++] = 0;
}


x86 assembly (clang, -O0):
<good_string_to_utf8>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1030 <string_to_utf8@plt>
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     13b4 <good_string_to_utf8+0x2a4>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x26,(%rax,%rcx,4)
jne    1381 <good_string_to_utf8+0x271>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x61,(%rax,%rcx,4)
jne    11e2 <good_string_to_utf8+0xd2>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x6d,(%rax,%rcx,4)
jne    11e2 <good_string_to_utf8+0xd2>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
cmpl   $0x70,(%rax,%rcx,4)
jne    11e2 <good_string_to_utf8+0xd2>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
cmpl   $0x3b,(%rax,%rcx,4)
jne    11e2 <good_string_to_utf8+0xd2>
mov    -0x14(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movl   $0x26,(%rax,%rcx,4)
jmp    137c <good_string_to_utf8+0x26c>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x6c,(%rax,%rcx,4)
jne    124e <good_string_to_utf8+0x13e>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x74,(%rax,%rcx,4)
jne    124e <good_string_to_utf8+0x13e>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
cmpl   $0x3b,(%rax,%rcx,4)
jne    124e <good_string_to_utf8+0x13e>
mov    -0x14(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movl   $0x3c,(%rax,%rcx,4)
jmp    1377 <good_string_to_utf8+0x267>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x67,(%rax,%rcx,4)
jne    12ba <good_string_to_utf8+0x1aa>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x74,(%rax,%rcx,4)
jne    12ba <good_string_to_utf8+0x1aa>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
cmpl   $0x3b,(%rax,%rcx,4)
jne    12ba <good_string_to_utf8+0x1aa>
mov    -0x14(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movl   $0x3e,(%rax,%rcx,4)
jmp    1372 <good_string_to_utf8+0x262>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x71,(%rax,%rcx,4)
jne    1354 <good_string_to_utf8+0x244>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x75,(%rax,%rcx,4)
jne    1354 <good_string_to_utf8+0x244>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
cmpl   $0x6f,(%rax,%rcx,4)
jne    1354 <good_string_to_utf8+0x244>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
cmpl   $0x74,(%rax,%rcx,4)
jne    1354 <good_string_to_utf8+0x244>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
cmpl   $0x3b,(%rax,%rcx,4)
jne    1354 <good_string_to_utf8+0x244>
mov    -0x14(%rbp),%eax
add    $0x5,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movl   $0x22,(%rax,%rcx,4)
jmp    136d <good_string_to_utf8+0x25d>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movl   $0x26,(%rax,%rcx,4)
jmp    1372 <good_string_to_utf8+0x262>
jmp    1377 <good_string_to_utf8+0x267>
jmp    137c <good_string_to_utf8+0x26c>
jmp    13a1 <good_string_to_utf8+0x291>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x18(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    13a6 <good_string_to_utf8+0x296>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    113b <good_string_to_utf8+0x2b>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     15f8 <good_string_to_utf8+0x4e8>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x26,(%rax,%rcx,4)
jne    15c5 <good_string_to_utf8+0x4b5>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x61,(%rax,%rcx,4)
jne    1482 <good_string_to_utf8+0x372>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
cmpl   $0x6d,(%rax,%rcx,4)
jne    1482 <good_string_to_utf8+0x372>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
cmpl   $0x70,(%rax,%rcx,4)
jne    1482 <good_string_to_utf8+0x372>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
cmpl   $0x3b,(%rax,%rcx,4)
jne    1482 <good_string_to_utf8+0x372>
mov    -0x14(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movl   $0x26,(%rax,%rcx,4)
jmp    15c0 <good_string_to_utf8+0x4b0>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0x23,(%rax,%rcx,4)
jne    159b <good_string_to_utf8+0x48b>
movl   $0x0,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x14(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
xor    %eax,%eax
cmpl   $0x3b,(%rcx,%rdx,4)
mov    %al,-0x21(%rbp)
je     14d8 <good_string_to_utf8+0x3c8>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
setne  %al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%al
test   $0x1,%al
jne    14e8 <good_string_to_utf8+0x3d8>
jmp    1542 <good_string_to_utf8+0x432>
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
mov    $0x30,%eax
cmp    (%rcx,%rdx,4),%eax
jg     152a <good_string_to_utf8+0x41a>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x39,(%rax,%rcx,4)
jg     152a <good_string_to_utf8+0x41a>
imul   $0xa,-0x1c(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x14(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
sub    $0x30,%eax
mov    %eax,-0x1c(%rbp)
jmp    152f <good_string_to_utf8+0x41f>
jmp    1542 <good_string_to_utf8+0x432>
jmp    1534 <good_string_to_utf8+0x424>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    14af <good_string_to_utf8+0x39f>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x3b,(%rax,%rcx,4)
je     157e <good_string_to_utf8+0x46e>
mov    -0x10(%rbp),%rax
mov    -0x20(%rbp),%ecx
mov    %ecx,-0x14(%rbp)
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x18(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1596 <good_string_to_utf8+0x486>
mov    -0x1c(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x18(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    15bb <good_string_to_utf8+0x4ab>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x18(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    15c0 <good_string_to_utf8+0x4b0>
jmp    15e5 <good_string_to_utf8+0x4d5>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x18(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    15ea <good_string_to_utf8+0x4da>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    13db <good_string_to_utf8+0x2cb>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     17b4 <good_string_to_utf8+0x6a4>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0xad,(%rax,%rcx,4)
je     17a1 <good_string_to_utf8+0x691>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0xfe00,(%rax,%rcx,4)
jl     1670 <good_string_to_utf8+0x560>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0xfe26,(%rax,%rcx,4)
jle    17a1 <good_string_to_utf8+0x691>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x1dcb,(%rax,%rcx,4)
jl     169a <good_string_to_utf8+0x58a>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x1de6,(%rax,%rcx,4)
jle    17a1 <good_string_to_utf8+0x691>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x2060,(%rax,%rcx,4)
je     17a1 <good_string_to_utf8+0x691>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x200a,(%rax,%rcx,4)
jl     16d9 <good_string_to_utf8+0x5c9>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x200f,(%rax,%rcx,4)
jle    17a1 <good_string_to_utf8+0x691>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x20d0,(%rax,%rcx,4)
jl     1703 <good_string_to_utf8+0x5f3>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x20f1,(%rax,%rcx,4)
jle    17a1 <good_string_to_utf8+0x691>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x2024,(%rax,%rcx,4)
je     17a1 <good_string_to_utf8+0x691>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x206a,(%rax,%rcx,4)
jl     1742 <good_string_to_utf8+0x632>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x206f,(%rax,%rcx,4)
jle    17a1 <good_string_to_utf8+0x691>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0xfeff,(%rax,%rcx,4)
je     17a1 <good_string_to_utf8+0x691>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x300,(%rax,%rcx,4)
jl     1781 <good_string_to_utf8+0x671>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x36f,(%rax,%rcx,4)
jle    17a1 <good_string_to_utf8+0x691>
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x18(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    17a6 <good_string_to_utf8+0x696>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    161f <good_string_to_utf8+0x50f>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<good_string_to_utf8>:
push   %r14
push   %rbx
push   %rax
mov    %rsi,%r14
call   1030 <string_to_utf8@plt>
xor    %eax,%eax
lea    0xedb(%rip),%rcx
xor    %edx,%edx
jmp    1143 <good_string_to_utf8+0x33>
nopl   0x0(%rax)
test   %edi,%edi
je     11fa <good_string_to_utf8+0xea>
mov    %edi,(%r14,%rax,4)
add    $0x1,%rax
add    $0x1,%edx
movslq %edx,%rsi
mov    (%r14,%rsi,4),%edi
cmp    $0x26,%edi
jne    1130 <good_string_to_utf8+0x20>
mov    0x4(%r14,%rsi,4),%edi
add    $0xffffff9f,%edi
cmp    $0x10,%edi
ja     11f0 <good_string_to_utf8+0xe0>
movslq (%rcx,%rdi,4),%rdi
add    %rcx,%rdi
jmp    *%rdi
cmpl   $0x6d,0x8(%r14,%rsi,4)
jne    11f0 <good_string_to_utf8+0xe0>
cmpl   $0x70,0xc(%r14,%rsi,4)
jne    11f0 <good_string_to_utf8+0xe0>
cmpl   $0x3b,0x10(%r14,%rsi,4)
jne    11f0 <good_string_to_utf8+0xe0>
add    $0x4,%edx
jmp    11f0 <good_string_to_utf8+0xe0>
cmpl   $0x74,0x8(%r14,%rsi,4)
jne    11f0 <good_string_to_utf8+0xe0>
cmpl   $0x3b,0xc(%r14,%rsi,4)
jne    11f0 <good_string_to_utf8+0xe0>
add    $0x3,%edx
mov    $0x3e,%edi
jmp    1138 <good_string_to_utf8+0x28>
cmpl   $0x74,0x8(%r14,%rsi,4)
jne    11f0 <good_string_to_utf8+0xe0>
cmpl   $0x3b,0xc(%r14,%rsi,4)
jne    11f0 <good_string_to_utf8+0xe0>
add    $0x3,%edx
mov    $0x3c,%edi
jmp    1138 <good_string_to_utf8+0x28>
cmpl   $0x75,0x8(%r14,%rsi,4)
jne    11f0 <good_string_to_utf8+0xe0>
cmpl   $0x6f,0xc(%r14,%rsi,4)
jne    11f0 <good_string_to_utf8+0xe0>
cmpl   $0x74,0x10(%r14,%rsi,4)
jne    11f0 <good_string_to_utf8+0xe0>
cmpl   $0x3b,0x14(%r14,%rsi,4)
jne    11f0 <good_string_to_utf8+0xe0>
add    $0x5,%edx
mov    $0x22,%edi
jmp    1138 <good_string_to_utf8+0x28>
nopw   0x0(%rax,%rax,1)
mov    $0x26,%edi
jmp    1138 <good_string_to_utf8+0x28>
mov    %eax,%eax
movl   $0x0,(%r14,%rax,4)
xor    %r8d,%r8d
xor    %ecx,%ecx
jmp    1223 <good_string_to_utf8+0x113>
nopl   0x0(%rax,%rax,1)
test   %edi,%edi
je     12b9 <good_string_to_utf8+0x1a9>
mov    %edi,(%r14,%r8,4)
add    $0x1,%r8
add    $0x1,%ecx
movslq %ecx,%rdx
mov    (%r14,%rdx,4),%edi
cmp    $0x26,%edi
jne    1210 <good_string_to_utf8+0x100>
mov    0x4(%r14,%rdx,4),%eax
cmp    $0x23,%eax
je     1267 <good_string_to_utf8+0x157>
cmp    $0x61,%eax
jne    1260 <good_string_to_utf8+0x150>
cmpl   $0x6d,0x8(%r14,%rdx,4)
jne    1260 <good_string_to_utf8+0x150>
cmpl   $0x70,0xc(%r14,%rdx,4)
jne    1260 <good_string_to_utf8+0x150>
cmpl   $0x3b,0x10(%r14,%rdx,4)
jne    1260 <good_string_to_utf8+0x150>
add    $0x4,%ecx
nopl   0x0(%rax)
mov    $0x26,%edi
jmp    1218 <good_string_to_utf8+0x108>
lea    0x2(%rcx),%edx
movslq %edx,%rax
lea    (%r14,%rax,4),%rdi
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    (%rdi),%ebx
test   %ebx,%ebx
je     1260 <good_string_to_utf8+0x150>
cmp    $0x3b,%ebx
je     12b0 <good_string_to_utf8+0x1a0>
lea    -0x30(%rbx),%eax
cmp    $0x9,%eax
ja     12a2 <good_string_to_utf8+0x192>
lea    (%rsi,%rsi,4),%esi
lea    (%rax,%rsi,2),%esi
add    $0x1,%edx
add    $0x4,%rdi
jmp    1280 <good_string_to_utf8+0x170>
mov    $0x26,%edi
cmp    $0x3b,%ebx
jne    1218 <good_string_to_utf8+0x108>
mov    %esi,%edi
mov    %edx,%ecx
jmp    1218 <good_string_to_utf8+0x108>
mov    %r8d,%eax
movl   $0x0,(%r14,%rax,4)
xor    %eax,%eax
mov    %r14,%rcx
jmp    12d4 <good_string_to_utf8+0x1c4>
nopl   0x0(%rax,%rax,1)
add    $0x4,%rcx
mov    (%rcx),%edx
cmp    $0xad,%edx
je     12d0 <good_string_to_utf8+0x1c0>
test   %edx,%edx
je     1348 <good_string_to_utf8+0x238>
lea    -0xfe27(%rdx),%esi
cmp    $0xffffffd8,%esi
ja     12d0 <good_string_to_utf8+0x1c0>
lea    -0x1de7(%rdx),%esi
cmp    $0xffffffe3,%esi
ja     12d0 <good_string_to_utf8+0x1c0>
lea    -0x200a(%rdx),%esi
cmp    $0x6,%esi
jb     12d0 <good_string_to_utf8+0x1c0>
cmp    $0x2060,%edx
je     12d0 <good_string_to_utf8+0x1c0>
cmp    $0x2024,%edx
je     12d0 <good_string_to_utf8+0x1c0>
lea    -0x20d0(%rdx),%esi
cmp    $0x22,%esi
jb     12d0 <good_string_to_utf8+0x1c0>
lea    -0x206a(%rdx),%esi
cmp    $0x6,%esi
jb     12d0 <good_string_to_utf8+0x1c0>
cmp    $0xfeff,%edx
je     12d0 <good_string_to_utf8+0x1c0>
lea    -0x370(%rdx),%esi
cmp    $0xffffff8f,%esi
ja     12d0 <good_string_to_utf8+0x1c0>
movslq %eax,%rsi
add    $0x1,%eax
mov    %edx,(%r14,%rsi,4)
jmp    12d0 <good_string_to_utf8+0x1c0>
cltq
movl   $0x0,(%r14,%rax,4)
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

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

LLVM IR (-O2):
define void @good_string_to_utf8(i8* %0, i32* %1) {
%3 = tail call i32 @string_to_utf8(i8* %0, i32* %1)
br label %4
4: ; preds = %82, %2
%5 = phi i64 [ %86, %82 ], [ 0, %2 ]
%6 = phi i32 [ %87, %82 ], [ 0, %2 ]
%7 = sext i32 %6 to i64
%8 = getelementptr inbounds i32, i32* %1, i64 %7
%9 = load i32, i32* %8
switch i32 %9, label %82 [
i32 0, label %88
i32 38, label %10
]
10: ; preds = %4
%11 = add nsw i32 %6, 1
%12 = sext i32 %11 to i64
%13 = getelementptr inbounds i32, i32* %1, i64 %12
%14 = load i32, i32* %13
switch i32 %14, label %81 [
i32 97, label %15
i32 108, label %33
i32 103, label %45
i32 113, label %57
]
15: ; preds = %10
%16 = add nsw i32 %6, 2
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds i32, i32* %1, i64 %17
%19 = load i32, i32* %18
%20 = icmp eq i32 %19, 109
br i1 %20, label %21, label %81
21: ; preds = %15
%22 = add nsw i32 %6, 3
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds i32, i32* %1, i64 %23
%25 = load i32, i32* %24
%26 = icmp eq i32 %25, 112
br i1 %26, label %27, label %81
27: ; preds = %21
%28 = add nsw i32 %6, 4
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds i32, i32* %1, i64 %29
%31 = load i32, i32* %30
%32 = icmp eq i32 %31, 59
br i1 %32, label %82, label %81
33: ; preds = %10
%34 = add nsw i32 %6, 2
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds i32, i32* %1, i64 %35
%37 = load i32, i32* %36
%38 = icmp eq i32 %37, 116
br i1 %38, label %39, label %81
39: ; preds = %33
%40 = add nsw i32 %6, 3
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i32, i32* %1, i64 %41
%43 = load i32, i32* %42
%44 = icmp eq i32 %43, 59
br i1 %44, label %82, label %81
45: ; preds = %10
%46 = add nsw i32 %6, 2
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i32, i32* %1, i64 %47
%49 = load i32, i32* %48
%50 = icmp eq i32 %49, 116
br i1 %50, label %51, label %81
51: ; preds = %45
%52 = add nsw i32 %6, 3
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds i32, i32* %1, i64 %53
%55 = load i32, i32* %54
%56 = icmp eq i32 %55, 59
br i1 %56, label %82, label %81
57: ; preds = %10
%58 = add nsw i32 %6, 2
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds i32, i32* %1, i64 %59
%61 = load i32, i32* %60
%62 = icmp eq i32 %61, 117
br i1 %62, label %63, label %81
63: ; preds = %57
%64 = add nsw i32 %6, 3
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds i32, i32* %1, i64 %65
%67 = load i32, i32* %66
%68 = icmp eq i32 %67, 111
br i1 %68, label %69, label %81
69: ; preds = %63
%70 = add nsw i32 %6, 4
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds i32, i32* %1, i64 %71
%73 = load i32, i32* %72
%74 = icmp eq i32 %73, 116
br i1 %74, label %75, label %81
75: ; preds = %69
%76 = add nsw i32 %6, 5
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds i32, i32* %1, i64 %77
%79 = load i32, i32* %78
%80 = icmp eq i32 %79, 59
br i1 %80, label %82, label %81
81: ; preds = %10, %15, %21, %27, %33, %39, %45, %51, %75, %69, %63, %57
br label %82
82: ; preds = %4, %75, %51, %39, %27, %81
%83 = phi i32 [ 38, %81 ], [ 38, %27 ], [ 60, %39 ], [ 62, %51 ], [ 34, %75 ], [ %9, %4 ]
%84 = phi i32 [ %6, %81 ], [ %28, %27 ], [ %40, %39 ], [ %52, %51 ], [ %76, %75 ], [ %6, %4 ]
%85 = getelementptr inbounds i32, i32* %1, i64 %5
store i32 %83, i32* %85
%86 = add nuw i64 %5, 1
%87 = add nsw i32 %84, 1
br label %4
88: ; preds = %4
%89 = and i64 %5, 4294967295
%90 = getelementptr inbounds i32, i32* %1, i64 %89
store i32 0, i32* %90
br label %91
91: ; preds = %140, %88
%92 = phi i64 [ %144, %140 ], [ 0, %88 ]
%93 = phi i32 [ %145, %140 ], [ 0, %88 ]
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds i32, i32* %1, i64 %94
%96 = load i32, i32* %95
switch i32 %96, label %140 [
i32 0, label %146
i32 38, label %97
]
97: ; preds = %91
%98 = add nsw i32 %93, 1
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds i32, i32* %1, i64 %99
%101 = load i32, i32* %100
switch i32 %101, label %139 [
i32 97, label %102
i32 35, label %120
]
102: ; preds = %97
%103 = add nsw i32 %93, 2
%104 = sext i32 %103 to i64
%105 = getelementptr inbounds i32, i32* %1, i64 %104
%106 = load i32, i32* %105
%107 = icmp eq i32 %106, 109
br i1 %107, label %108, label %139
108: ; preds = %102
%109 = add nsw i32 %93, 3
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds i32, i32* %1, i64 %110
%112 = load i32, i32* %111
%113 = icmp eq i32 %112, 112
br i1 %113, label %114, label %139
114: ; preds = %108
%115 = add nsw i32 %93, 4
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds i32, i32* %1, i64 %116
%118 = load i32, i32* %117
%119 = icmp eq i32 %118, 59
br i1 %119, label %140, label %139
120: ; preds = %97
%121 = add i32 %93, 2
%122 = sext i32 %121 to i64
br label %123
123: ; preds = %131, %120
%124 = phi i64 [ %134, %131 ], [ %122, %120 ]
%125 = phi i32 [ %133, %131 ], [ 0, %120 ]
%126 = getelementptr inbounds i32, i32* %1, i64 %124
%127 = load i32, i32* %126
switch i32 %127, label %128 [
i32 59, label %137
i32 0, label %140
]
128: ; preds = %123
%129 = add i32 %127, -48
%130 = icmp ult i32 %129, 10
br i1 %130, label %131, label %135
131: ; preds = %128
%132 = mul nsw i32 %125, 10
%133 = add i32 %129, %132
%134 = add i64 %124, 1
br label %123
135: ; preds = %128
%136 = icmp eq i32 %127, 59
br i1 %136, label %137, label %140
137: ; preds = %123, %135
%138 = trunc i64 %124 to i32
br label %140
139: ; preds = %97, %102, %108, %114
br label %140
140: ; preds = %123, %91, %135, %114, %137, %139
%141 = phi i32 [ %125, %137 ], [ 38, %139 ], [ 38, %114 ], [ 38, %135 ], [ %96, %91 ], [ 38, %123 ]
%142 = phi i32 [ %138, %137 ], [ %93, %139 ], [ %115, %114 ], [ %93, %135 ], [ %93, %91 ], [ %93, %123 ]
%143 = getelementptr inbounds i32, i32* %1, i64 %92
store i32 %141, i32* %143
%144 = add nuw i64 %92, 1
%145 = add nsw i32 %142, 1
br label %91
146: ; preds = %91
%147 = and i64 %92, 4294967295
%148 = getelementptr inbounds i32, i32* %1, i64 %147
store i32 0, i32* %148
br label %149
149: ; preds = %174, %146
%150 = phi i64 [ %176, %174 ], [ 0, %146 ]
%151 = phi i32 [ %175, %174 ], [ 0, %146 ]
%152 = getelementptr inbounds i32, i32* %1, i64 %150
%153 = load i32, i32* %152
switch i32 %153, label %154 [
i32 0, label %177
i32 173, label %174
]
154: ; preds = %149
%155 = add i32 %153, -65063
%156 = icmp ult i32 %155, -39
%157 = add i32 %153, -7655
%158 = icmp ult i32 %157, -28
%159 = and i1 %156, %158
br i1 %159, label %160, label %174
160: ; preds = %154
switch i32 %153, label %161 [
i32 8288, label %174
i32 8207, label %174
i32 8206, label %174
i32 8205, label %174
i32 8204, label %174
i32 8203, label %174
i32 8202, label %174
]
161: ; preds = %160
%162 = add i32 %153, -8400
%163 = icmp ult i32 %162, 34
%164 = icmp eq i32 %153, 8228
%165 = or i1 %164, %163
br i1 %165, label %174, label %166
166: ; preds = %161
switch i32 %153, label %167 [
i32 65279, label %174
i32 8303, label %174
i32 8302, label %174
i32 8301, label %174
i32 8300, label %174
i32 8299, label %174
i32 8298, label %174
]
167: ; preds = %166
%168 = add i32 %153, -880
%169 = icmp ult i32 %168, -112
br i1 %169, label %170, label %174
170: ; preds = %167
%171 = add nsw i32 %151, 1
%172 = sext i32 %151 to i64
%173 = getelementptr inbounds i32, i32* %1, i64 %172
store i32 %153, i32* %173
br label %174
174: ; preds = %160, %160, %160, %160, %160, %160, %160, %166, %166, %166, %166, %166, %166, %166, %167, %161, %154, %149, %170
%175 = phi i32 [ %171, %170 ], [ %151, %149 ], [ %151, %154 ], [ %151, %160 ], [ %151, %161 ], [ %151, %166 ], [ %151, %167 ], [ %151, %166 ], [ %151, %166 ], [ %151, %166 ], [ %151, %166 ], [ %151, %166 ], [ %151, %166 ], [ %151, %160 ], [ %151, %160 ], [ %151, %160 ], [ %151, %160 ], [ %151, %160 ], [ %151, %160 ]
%176 = add nuw i64 %150, 1
br label %149
177: ; preds = %149
%178 = sext i32 %151 to i64
%179 = getelementptr inbounds i32, i32* %1, i64 %178
store i32 0, i32* %179
ret void
}