#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*/ memset(unsigned char *, int, int);
int /*<<< orphan*/ printf(char *);
int utf8_encode(unsigned char *, int);
int main(void) {
  unsigned char buf[10];
  printf("1..12\n");
  memset(buf, 0x55, 10);
  if (utf8_encode(buf, 0) != 1 || buf[0] != 0 || buf[1] != 0x55)
    printf("not ");
  printf("ok 1 utf8 encode 1 byte min\n");
  memset(buf, 0x55, 10);
  if (utf8_encode(buf, 'x') != 1 || buf[0] != 0x78 || buf[1] != 0x55)
    printf("not ");
  printf("ok 2 utf8 encode 1 byte\n");
  memset(buf, 0x55, 10);
  if (utf8_encode(buf, 0x7f) != 1 || buf[0] != 0x7f || buf[1] != 0x55)
    printf("not ");
  printf("ok 3 utf8 encode 1 byte max\n");
  memset(buf, 0x55, 10);
  if (utf8_encode(buf, 0x80) != 2 || buf[0] != 0xc2 || buf[1] != 0x80 ||
      buf[2] != 0x55)
    printf("not ");
  printf("ok 4 utf8 encode 2 bytes min\n");
  memset(buf, 0x55, 10);
  if (utf8_encode(buf, 0x61f) != 2 || buf[0] != 0xd8 || buf[1] != 0x9f ||
      buf[2] != 0x55)
    printf("not ");
  printf("ok 5 utf8 encode 2 bytes\n");
  memset(buf, 0x55, 10);
  if (utf8_encode(buf, 0x7ff) != 2 || buf[0] != 0xdf || buf[1] != 0xbf ||
      buf[2] != 0x55)
    printf("not ");
  printf("ok 6 utf8 encode 2 bytes max\n");
  memset(buf, 0x55, 10);
  if (utf8_encode(buf, 0x800) != 3 || buf[0] != 0xe0 || buf[1] != 0xa0 ||
      buf[2] != 0x80 || buf[3] != 0x55)
    printf("not ");
  printf("ok 7 utf8 encode 3 bytes min\n");
  memset(buf, 0x55, 10);
  if (utf8_encode(buf, 0x2189) != 3 || buf[0] != 0xe2 || buf[1] != 0x86 ||
      buf[2] != 0x89 || buf[3] != 0x55)
    printf("not ");
  printf("ok 8 utf8 encode 3 bytes\n");
  memset(buf, 0x55, 10);
  if (utf8_encode(buf, 0xffff) != 3 || buf[0] != 0xef || buf[1] != 0xbf ||
      buf[2] != 0xbf || buf[3] != 0x55)
    printf("not ");
  printf("ok 9 utf8 encode 3 bytes max\n");
  memset(buf, 0x55, 10);
  if (utf8_encode(buf, 0x10000) != 4 || buf[0] != 0xf0 || buf[1] != 0x90 ||
      buf[2] != 0x80 || buf[3] != 0x80 || buf[4] != 0x55)
    printf("not ");
  printf("ok 10 utf8 encode 4 bytes min\n");
  memset(buf, 0x55, 10);
  if (utf8_encode(buf, 0x850bb) != 4 || buf[0] != 0xf2 || buf[1] != 0x85 ||
      buf[2] != 0x82 || buf[3] != 0xbb || buf[4] != 0x55)
    printf("not ");
  printf("ok 11 utf8 encode 4 bytes\n");
  memset(buf, 0x55, 10);
  if (utf8_encode(buf, 0x10ffff) != 4 || buf[0] != 0xf4 || buf[1] != 0x8f ||
      buf[2] != 0xbf || buf[3] != 0xbf || buf[4] != 0x55)
    printf("not ");
  printf("ok 12 utf8 encode 4 bytes max\n");
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeba(%rip),%rdi
call   1040 <printf@plt>
lea    -0xe(%rbp),%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
lea    -0xe(%rbp),%rdi
xor    %esi,%esi
call   1030 <utf8_encode@plt>
cmp    $0x1,%eax
jne    118c <main+0x5c>
movzbl -0xe(%rbp),%eax
cmp    $0x0,%eax
jne    118c <main+0x5c>
movzbl -0xd(%rbp),%eax
cmp    $0x55,%eax
je     1198 <main+0x68>
lea    0xe74(%rip),%rdi
call   1040 <printf@plt>
lea    0xe6d(%rip),%rdi
call   1040 <printf@plt>
lea    -0xe(%rbp),%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
lea    -0xe(%rbp),%rdi
mov    $0x78,%esi
call   1030 <utf8_encode@plt>
cmp    $0x1,%eax
jne    11e8 <main+0xb8>
movzbl -0xe(%rbp),%eax
cmp    $0x78,%eax
jne    11e8 <main+0xb8>
movzbl -0xd(%rbp),%eax
cmp    $0x55,%eax
je     11f4 <main+0xc4>
lea    0xe18(%rip),%rdi
call   1040 <printf@plt>
lea    0xe2e(%rip),%rdi
call   1040 <printf@plt>
lea    -0xe(%rbp),%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
lea    -0xe(%rbp),%rdi
mov    $0x7f,%esi
call   1030 <utf8_encode@plt>
cmp    $0x1,%eax
jne    1244 <main+0x114>
movzbl -0xe(%rbp),%eax
cmp    $0x7f,%eax
jne    1244 <main+0x114>
movzbl -0xd(%rbp),%eax
cmp    $0x55,%eax
je     1250 <main+0x120>
lea    0xdbc(%rip),%rdi
call   1040 <printf@plt>
lea    0xdeb(%rip),%rdi
call   1040 <printf@plt>
lea    -0xe(%rbp),%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
lea    -0xe(%rbp),%rdi
mov    $0x80,%esi
call   1030 <utf8_encode@plt>
cmp    $0x2,%eax
jne    12b1 <main+0x181>
movzbl -0xe(%rbp),%eax
cmp    $0xc2,%eax
jne    12b1 <main+0x181>
movzbl -0xd(%rbp),%eax
cmp    $0x80,%eax
jne    12b1 <main+0x181>
movzbl -0xc(%rbp),%eax
cmp    $0x55,%eax
je     12bd <main+0x18d>
lea    0xd4f(%rip),%rdi
call   1040 <printf@plt>
lea    0xd9b(%rip),%rdi
call   1040 <printf@plt>
lea    -0xe(%rbp),%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
lea    -0xe(%rbp),%rdi
mov    $0x61f,%esi
call   1030 <utf8_encode@plt>
cmp    $0x2,%eax
jne    131e <main+0x1ee>
movzbl -0xe(%rbp),%eax
cmp    $0xd8,%eax
jne    131e <main+0x1ee>
movzbl -0xd(%rbp),%eax
cmp    $0x9f,%eax
jne    131e <main+0x1ee>
movzbl -0xc(%rbp),%eax
cmp    $0x55,%eax
je     132a <main+0x1fa>
lea    0xce2(%rip),%rdi
call   1040 <printf@plt>
lea    0xd4c(%rip),%rdi
call   1040 <printf@plt>
lea    -0xe(%rbp),%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
lea    -0xe(%rbp),%rdi
mov    $0x7ff,%esi
call   1030 <utf8_encode@plt>
cmp    $0x2,%eax
jne    138b <main+0x25b>
movzbl -0xe(%rbp),%eax
cmp    $0xdf,%eax
jne    138b <main+0x25b>
movzbl -0xd(%rbp),%eax
cmp    $0xbf,%eax
jne    138b <main+0x25b>
movzbl -0xc(%rbp),%eax
cmp    $0x55,%eax
je     1397 <main+0x267>
lea    0xc75(%rip),%rdi
call   1040 <printf@plt>
lea    0xcf9(%rip),%rdi
call   1040 <printf@plt>
lea    -0xe(%rbp),%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
lea    -0xe(%rbp),%rdi
mov    $0x800,%esi
call   1030 <utf8_encode@plt>
cmp    $0x3,%eax
jne    1407 <main+0x2d7>
movzbl -0xe(%rbp),%eax
cmp    $0xe0,%eax
jne    1407 <main+0x2d7>
movzbl -0xd(%rbp),%eax
cmp    $0xa0,%eax
jne    1407 <main+0x2d7>
movzbl -0xc(%rbp),%eax
cmp    $0x80,%eax
jne    1407 <main+0x2d7>
movzbl -0xb(%rbp),%eax
cmp    $0x55,%eax
je     1413 <main+0x2e3>
lea    0xbf9(%rip),%rdi
call   1040 <printf@plt>
lea    0xc9b(%rip),%rdi
call   1040 <printf@plt>
lea    -0xe(%rbp),%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
lea    -0xe(%rbp),%rdi
mov    $0x2189,%esi
call   1030 <utf8_encode@plt>
cmp    $0x3,%eax
jne    1483 <main+0x353>
movzbl -0xe(%rbp),%eax
cmp    $0xe2,%eax
jne    1483 <main+0x353>
movzbl -0xd(%rbp),%eax
cmp    $0x86,%eax
jne    1483 <main+0x353>
movzbl -0xc(%rbp),%eax
cmp    $0x89,%eax
jne    1483 <main+0x353>
movzbl -0xb(%rbp),%eax
cmp    $0x55,%eax
je     148f <main+0x35f>
lea    0xb7d(%rip),%rdi
call   1040 <printf@plt>
lea    0xc3d(%rip),%rdi
call   1040 <printf@plt>
lea    -0xe(%rbp),%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
lea    -0xe(%rbp),%rdi
mov    $0xffff,%esi
call   1030 <utf8_encode@plt>
cmp    $0x3,%eax
jne    14ff <main+0x3cf>
movzbl -0xe(%rbp),%eax
cmp    $0xef,%eax
jne    14ff <main+0x3cf>
movzbl -0xd(%rbp),%eax
cmp    $0xbf,%eax
jne    14ff <main+0x3cf>
movzbl -0xc(%rbp),%eax
cmp    $0xbf,%eax
jne    14ff <main+0x3cf>
movzbl -0xb(%rbp),%eax
cmp    $0x55,%eax
je     150b <main+0x3db>
lea    0xb01(%rip),%rdi
call   1040 <printf@plt>
lea    0xbdb(%rip),%rdi
call   1040 <printf@plt>
lea    -0xe(%rbp),%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
lea    -0xe(%rbp),%rdi
mov    $0x10000,%esi
call   1030 <utf8_encode@plt>
cmp    $0x4,%eax
jne    158a <main+0x45a>
movzbl -0xe(%rbp),%eax
cmp    $0xf0,%eax
jne    158a <main+0x45a>
movzbl -0xd(%rbp),%eax
cmp    $0x90,%eax
jne    158a <main+0x45a>
movzbl -0xc(%rbp),%eax
cmp    $0x80,%eax
jne    158a <main+0x45a>
movzbl -0xb(%rbp),%eax
cmp    $0x80,%eax
jne    158a <main+0x45a>
movzbl -0xa(%rbp),%eax
cmp    $0x55,%eax
je     1596 <main+0x466>
lea    0xa76(%rip),%rdi
call   1040 <printf@plt>
lea    0xb6e(%rip),%rdi
call   1040 <printf@plt>
lea    -0xe(%rbp),%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
lea    -0xe(%rbp),%rdi
mov    $0x850bb,%esi
call   1030 <utf8_encode@plt>
cmp    $0x4,%eax
jne    1615 <main+0x4e5>
movzbl -0xe(%rbp),%eax
cmp    $0xf2,%eax
jne    1615 <main+0x4e5>
movzbl -0xd(%rbp),%eax
cmp    $0x85,%eax
jne    1615 <main+0x4e5>
movzbl -0xc(%rbp),%eax
cmp    $0x82,%eax
jne    1615 <main+0x4e5>
movzbl -0xb(%rbp),%eax
cmp    $0xbb,%eax
jne    1615 <main+0x4e5>
movzbl -0xa(%rbp),%eax
cmp    $0x55,%eax
je     1621 <main+0x4f1>
lea    0x9eb(%rip),%rdi
call   1040 <printf@plt>
lea    0xb02(%rip),%rdi
call   1040 <printf@plt>
lea    -0xe(%rbp),%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1050 <memset@plt>
lea    -0xe(%rbp),%rdi
mov    $0x10ffff,%esi
call   1030 <utf8_encode@plt>
cmp    $0x4,%eax
jne    16a0 <main+0x570>
movzbl -0xe(%rbp),%eax
cmp    $0xf4,%eax
jne    16a0 <main+0x570>
movzbl -0xd(%rbp),%eax
cmp    $0x8f,%eax
jne    16a0 <main+0x570>
movzbl -0xc(%rbp),%eax
cmp    $0xbf,%eax
jne    16a0 <main+0x570>
movzbl -0xb(%rbp),%eax
cmp    $0xbf,%eax
jne    16a0 <main+0x570>
movzbl -0xa(%rbp),%eax
cmp    $0x55,%eax
je     16ac <main+0x57c>
lea    0x960(%rip),%rdi
call   1040 <printf@plt>
lea    0xa92(%rip),%rdi
call   1040 <printf@plt>
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x10,%rsp
lea    0xeb9(%rip),%rdi
call   1040 <puts@plt>
lea    0x6(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1060 <memset@plt>
mov    %rbx,%rdi
xor    %esi,%esi
call   1030 <utf8_encode@plt>
cmp    $0x1,%eax
jne    1185 <main+0x45>
cmpb   $0x0,0x6(%rsp)
jne    1185 <main+0x45>
cmpb   $0x55,0x7(%rsp)
je     1191 <main+0x51>
lea    0xe74(%rip),%rdi
call   1050 <printf@plt>
lea    0xe73(%rip),%rdi
call   1040 <puts@plt>
lea    0x6(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1060 <memset@plt>
mov    %rbx,%rdi
mov    $0x78,%esi
call   1030 <utf8_encode@plt>
cmp    $0x1,%eax
jne    11d4 <main+0x94>
cmpb   $0x78,0x6(%rsp)
jne    11d4 <main+0x94>
cmpb   $0x55,0x7(%rsp)
je     11e0 <main+0xa0>
lea    0xe25(%rip),%rdi
call   1050 <printf@plt>
lea    0xe40(%rip),%rdi
call   1040 <puts@plt>
lea    0x6(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1060 <memset@plt>
mov    %rbx,%rdi
mov    $0x7f,%esi
call   1030 <utf8_encode@plt>
cmp    $0x1,%eax
jne    1223 <main+0xe3>
cmpb   $0x7f,0x6(%rsp)
jne    1223 <main+0xe3>
cmpb   $0x55,0x7(%rsp)
je     122f <main+0xef>
lea    0xdd6(%rip),%rdi
call   1050 <printf@plt>
lea    0xe09(%rip),%rdi
call   1040 <puts@plt>
lea    0x6(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1060 <memset@plt>
mov    %rbx,%rdi
mov    $0x80,%esi
call   1030 <utf8_encode@plt>
cmp    $0x2,%eax
jne    1279 <main+0x139>
cmpb   $0xc2,0x6(%rsp)
jne    1279 <main+0x139>
cmpb   $0x80,0x7(%rsp)
jne    1279 <main+0x139>
cmpb   $0x55,0x8(%rsp)
je     1285 <main+0x145>
lea    0xd80(%rip),%rdi
call   1050 <printf@plt>
lea    0xdcf(%rip),%rdi
call   1040 <puts@plt>
lea    0x6(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1060 <memset@plt>
mov    %rbx,%rdi
mov    $0x61f,%esi
call   1030 <utf8_encode@plt>
cmp    $0x2,%eax
jne    12cf <main+0x18f>
cmpb   $0xd8,0x6(%rsp)
jne    12cf <main+0x18f>
cmpb   $0x9f,0x7(%rsp)
jne    12cf <main+0x18f>
cmpb   $0x55,0x8(%rsp)
je     12db <main+0x19b>
lea    0xd2a(%rip),%rdi
call   1050 <printf@plt>
lea    0xd96(%rip),%rdi
call   1040 <puts@plt>
lea    0x6(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1060 <memset@plt>
mov    %rbx,%rdi
mov    $0x7ff,%esi
call   1030 <utf8_encode@plt>
cmp    $0x2,%eax
jne    1325 <main+0x1e5>
cmpb   $0xdf,0x6(%rsp)
jne    1325 <main+0x1e5>
cmpb   $0xbf,0x7(%rsp)
jne    1325 <main+0x1e5>
cmpb   $0x55,0x8(%rsp)
je     1331 <main+0x1f1>
lea    0xcd4(%rip),%rdi
call   1050 <printf@plt>
lea    0xd59(%rip),%rdi
call   1040 <puts@plt>
lea    0x6(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1060 <memset@plt>
mov    %rbx,%rdi
mov    $0x800,%esi
call   1030 <utf8_encode@plt>
cmp    $0x3,%eax
jne    1382 <main+0x242>
cmpb   $0xe0,0x6(%rsp)
jne    1382 <main+0x242>
cmpb   $0xa0,0x7(%rsp)
jne    1382 <main+0x242>
cmpb   $0x80,0x8(%rsp)
jne    1382 <main+0x242>
cmpb   $0x55,0x9(%rsp)
je     138e <main+0x24e>
lea    0xc77(%rip),%rdi
call   1050 <printf@plt>
lea    0xd19(%rip),%rdi
call   1040 <puts@plt>
lea    0x6(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1060 <memset@plt>
mov    %rbx,%rdi
mov    $0x2189,%esi
call   1030 <utf8_encode@plt>
cmp    $0x3,%eax
jne    13df <main+0x29f>
cmpb   $0xe2,0x6(%rsp)
jne    13df <main+0x29f>
cmpb   $0x86,0x7(%rsp)
jne    13df <main+0x29f>
cmpb   $0x89,0x8(%rsp)
jne    13df <main+0x29f>
cmpb   $0x55,0x9(%rsp)
je     13eb <main+0x2ab>
lea    0xc1a(%rip),%rdi
call   1050 <printf@plt>
lea    0xcd9(%rip),%rdi
call   1040 <puts@plt>
lea    0x6(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1060 <memset@plt>
mov    %rbx,%rdi
mov    $0xffff,%esi
call   1030 <utf8_encode@plt>
cmp    $0x3,%eax
jne    143c <main+0x2fc>
cmpb   $0xef,0x6(%rsp)
jne    143c <main+0x2fc>
cmpb   $0xbf,0x7(%rsp)
jne    143c <main+0x2fc>
cmpb   $0xbf,0x8(%rsp)
jne    143c <main+0x2fc>
cmpb   $0x55,0x9(%rsp)
je     1448 <main+0x308>
lea    0xbbd(%rip),%rdi
call   1050 <printf@plt>
lea    0xc95(%rip),%rdi
call   1040 <puts@plt>
lea    0x6(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1060 <memset@plt>
mov    %rbx,%rdi
mov    $0x10000,%esi
call   1030 <utf8_encode@plt>
cmp    $0x4,%eax
jne    14a0 <main+0x360>
cmpb   $0xf0,0x6(%rsp)
jne    14a0 <main+0x360>
cmpb   $0x90,0x7(%rsp)
jne    14a0 <main+0x360>
cmpb   $0x80,0x8(%rsp)
jne    14a0 <main+0x360>
cmpb   $0x80,0x9(%rsp)
jne    14a0 <main+0x360>
cmpb   $0x55,0xa(%rsp)
je     14ac <main+0x36c>
lea    0xb59(%rip),%rdi
call   1050 <printf@plt>
lea    0xc4e(%rip),%rdi
call   1040 <puts@plt>
lea    0x6(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1060 <memset@plt>
mov    %rbx,%rdi
mov    $0x850bb,%esi
call   1030 <utf8_encode@plt>
cmp    $0x4,%eax
jne    1504 <main+0x3c4>
cmpb   $0xf2,0x6(%rsp)
jne    1504 <main+0x3c4>
cmpb   $0x85,0x7(%rsp)
jne    1504 <main+0x3c4>
cmpb   $0x82,0x8(%rsp)
jne    1504 <main+0x3c4>
cmpb   $0xbb,0x9(%rsp)
jne    1504 <main+0x3c4>
cmpb   $0x55,0xa(%rsp)
je     1510 <main+0x3d0>
lea    0xaf5(%rip),%rdi
call   1050 <printf@plt>
lea    0xc08(%rip),%rdi
call   1040 <puts@plt>
lea    0x6(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x55,%esi
mov    $0xa,%edx
call   1060 <memset@plt>
mov    %rbx,%rdi
mov    $0x10ffff,%esi
call   1030 <utf8_encode@plt>
cmp    $0x4,%eax
jne    1568 <main+0x428>
cmpb   $0xf4,0x6(%rsp)
jne    1568 <main+0x428>
cmpb   $0x8f,0x7(%rsp)
jne    1568 <main+0x428>
cmpb   $0xbf,0x8(%rsp)
jne    1568 <main+0x428>
cmpb   $0xbf,0x9(%rsp)
jne    1568 <main+0x428>
cmpb   $0x55,0xa(%rsp)
je     1574 <main+0x434>
lea    0xa91(%rip),%rdi
call   1050 <printf@plt>
lea    0xbbe(%rip),%rdi
call   1040 <puts@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbx
ret

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

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