#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 utf8_decode_fwrd(unsigned char **, int *);
int escape(int utf8, unsigned char **a, int *b) {
  int c;
  unsigned char *s = *a;
  int l = *b;
  if (*s == '\\' && l >= 2) {
    ++s;
    --l;
    switch (*s) {
    case 'n':
      c = 10;
      ++s;
      --l;
      break;
    case 't':
      c = 9;
      ++s;
      --l;
      break;
    case 'a':
      c = 7;
      ++s;
      --l;
      break;
    case 'b':
      c = 8;
      ++s;
      --l;
      break;
    case 'f':
      c = 12;
      ++s;
      --l;
      break;
    case 'e':
      c = 27;
      ++s;
      --l;
      break;
    case 'r':
      c = 13;
      ++s;
      --l;
      break;
    case '8':
      c = 8;
      ++s;
      --l;
      break;
    case '9':
      c = 9;
      ++s;
      --l;
      break;
    case '0':
    case '1':
    case '2':
    case '3':
    case '4':
    case '5':
    case '6':
    case '7':
      c = *s - '0';
      ++s;
      --l;
      if (l > 0 && *s >= '0' && *s <= '7') {
        c = c * 8 + s[1] - '0';
        ++s;
        --l;
      }
      if (l > 0 && *s >= '0' && *s <= '7') {
        c = c * 8 + s[1] - '0';
        ++s;
        --l;
      }
      break;
    case 'x':
    case 'X':
      c = 0;
      ++s;
      --l;
      if (l > 0 && *s >= '0' && *s <= '9') {
        c = c * 16 + *s - '0';
        ++s;
        --l;
      } else if (l > 0 && *s >= 'A' && *s <= 'F') {
        c = c * 16 + *s - 'A' + 10;
        ++s;
        --l;
      } else if (l > 0 && *s >= 'a' && *s <= 'f') {
        c = c * 16 + *s - 'a' + 10;
        ++s;
        --l;
      }
      if (l > 0 && *s >= '0' && *s <= '9') {
        c = c * 16 + *s - '0';
        ++s;
        --l;
      } else if (l > 0 && *s >= 'A' && *s <= 'F') {
        c = c * 16 + *s - 'A' + 10;
        ++s;
        --l;
      } else if (l > 0 && *s >= 'a' && *s <= 'f') {
        c = c * 16 + *s - 'a' + 10;
        ++s;
        --l;
      }
      break;
    default:
      if (utf8)
        c = utf8_decode_fwrd(&s, &l);
      else {
        c = *s++;
        --l;
      }
      break;
    }
  } else if (utf8) {
    c = utf8_decode_fwrd(&s, &l);
  } else {
    c = *s++;
    --l;
  }
  *a = s;
  *b = l;
  return c;
}


x86 assembly (clang, -O0):
<escape>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x5c,%eax
jne    1621 <escape+0x511>
cmpl   $0x2,-0x2c(%rbp)
jl     1621 <escape+0x511>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
add    $0xffffffd0,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0x48,%eax
ja     15da <escape+0x4ca>
mov    -0x38(%rbp),%rax
lea    0xe76(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0xa,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    161c <escape+0x50c>
movl   $0x9,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    161c <escape+0x50c>
movl   $0x7,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    161c <escape+0x50c>
movl   $0x8,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    161c <escape+0x50c>
movl   $0xc,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    161c <escape+0x50c>
movl   $0x1b,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    161c <escape+0x50c>
movl   $0xd,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    161c <escape+0x50c>
movl   $0x8,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    161c <escape+0x50c>
movl   $0x9,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    161c <escape+0x50c>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jle    1333 <escape+0x223>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x30,%eax
jl     1333 <escape+0x223>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x37,%eax
jg     1333 <escape+0x223>
mov    -0x1c(%rbp),%eax
shl    $0x3,%eax
mov    -0x28(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jle    1388 <escape+0x278>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x30,%eax
jl     1388 <escape+0x278>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x37,%eax
jg     1388 <escape+0x278>
mov    -0x1c(%rbp),%eax
shl    $0x3,%eax
mov    -0x28(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    161c <escape+0x50c>
movl   $0x0,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jle    1402 <escape+0x2f2>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x30,%eax
jl     1402 <escape+0x2f2>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x39,%eax
jg     1402 <escape+0x2f2>
mov    -0x1c(%rbp),%eax
shl    $0x4,%eax
mov    -0x28(%rbp),%rcx
movzbl (%rcx),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    14bf <escape+0x3af>
cmpl   $0x0,-0x2c(%rbp)
jle    145e <escape+0x34e>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x41,%eax
jl     145e <escape+0x34e>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x46,%eax
jg     145e <escape+0x34e>
mov    -0x1c(%rbp),%eax
shl    $0x4,%eax
mov    -0x28(%rbp),%rcx
movzbl (%rcx),%ecx
add    %ecx,%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    14ba <escape+0x3aa>
cmpl   $0x0,-0x2c(%rbp)
jle    14b5 <escape+0x3a5>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x61,%eax
jl     14b5 <escape+0x3a5>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x66,%eax
jg     14b5 <escape+0x3a5>
mov    -0x1c(%rbp),%eax
shl    $0x4,%eax
mov    -0x28(%rbp),%rcx
movzbl (%rcx),%ecx
add    %ecx,%eax
sub    $0x61,%eax
add    $0xa,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    14ba <escape+0x3aa>
jmp    14bf <escape+0x3af>
cmpl   $0x0,-0x2c(%rbp)
jle    1518 <escape+0x408>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x30,%eax
jl     1518 <escape+0x408>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x39,%eax
jg     1518 <escape+0x408>
mov    -0x1c(%rbp),%eax
shl    $0x4,%eax
mov    -0x28(%rbp),%rcx
movzbl (%rcx),%ecx
add    %ecx,%eax
sub    $0x30,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    15d5 <escape+0x4c5>
cmpl   $0x0,-0x2c(%rbp)
jle    1574 <escape+0x464>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x41,%eax
jl     1574 <escape+0x464>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x46,%eax
jg     1574 <escape+0x464>
mov    -0x1c(%rbp),%eax
shl    $0x4,%eax
mov    -0x28(%rbp),%rcx
movzbl (%rcx),%ecx
add    %ecx,%eax
sub    $0x41,%eax
add    $0xa,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    15d0 <escape+0x4c0>
cmpl   $0x0,-0x2c(%rbp)
jle    15cb <escape+0x4bb>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x61,%eax
jl     15cb <escape+0x4bb>
mov    -0x28(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x66,%eax
jg     15cb <escape+0x4bb>
mov    -0x1c(%rbp),%eax
shl    $0x4,%eax
mov    -0x28(%rbp),%rcx
movzbl (%rcx),%ecx
add    %ecx,%eax
sub    $0x61,%eax
add    $0xa,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    15d0 <escape+0x4c0>
jmp    15d5 <escape+0x4c5>
jmp    161c <escape+0x50c>
cmpl   $0x0,-0x4(%rbp)
je     15f9 <escape+0x4e9>
lea    -0x28(%rbp),%rdi
lea    -0x2c(%rbp),%rsi
call   1030 <utf8_decode_fwrd@plt>
mov    %eax,-0x1c(%rbp)
jmp    1617 <escape+0x507>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
movzbl (%rax),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    161c <escape+0x50c>
jmp    1663 <escape+0x553>
cmpl   $0x0,-0x4(%rbp)
je     1640 <escape+0x530>
lea    -0x28(%rbp),%rdi
lea    -0x2c(%rbp),%rsi
call   1030 <utf8_decode_fwrd@plt>
mov    %eax,-0x1c(%rbp)
jmp    165e <escape+0x54e>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x28(%rbp)
movzbl (%rax),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    1663 <escape+0x553>
mov    -0x28(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x2c(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x1c(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<escape>:
push   %r15
push   %r14
push   %rbx
sub    $0x10,%rsp
mov    %rdx,%r14
mov    %rsi,%r15
mov    (%rsi),%rdx
mov    %rdx,0x8(%rsp)
mov    (%r14),%ecx
mov    %ecx,0x4(%rsp)
cmpb   $0x5c,(%rdx)
jne    11f2 <escape+0xe2>
cmp    $0x2,%ecx
jl     11f2 <escape+0xe2>
lea    0x1(%rdx),%rax
mov    %rax,0x8(%rsp)
lea    -0x1(%rcx),%r9d
mov    %r9d,0x4(%rsp)
movzbl 0x1(%rdx),%eax
lea    -0x30(%rax),%esi
cmp    $0x48,%sil
ja     128a <escape+0x17a>
movzbl %sil,%esi
lea    0xe92(%rip),%rbx
movslq (%rbx,%rsi,4),%rsi
add    %rbx,%rsi
jmp    *%rsi
add    $0xffffffd0,%eax
lea    0x2(%rdx),%rsi
mov    %rsi,0x8(%rsp)
lea    -0x2(%rcx),%edi
mov    %edi,0x4(%rsp)
cmp    $0x2,%r9d
jb     13a5 <escape+0x295>
mov    (%rsi),%bl
and    $0xf8,%bl
cmp    $0x30,%bl
jne    11bd <escape+0xad>
movzbl 0x3(%rdx),%esi
add    $0x3,%rdx
lea    (%rsi,%rax,8),%eax
add    $0xffffffd0,%eax
mov    %rdx,0x8(%rsp)
add    $0xfffffffd,%ecx
mov    %ecx,0x4(%rsp)
mov    %rdx,%rsi
mov    %ecx,%edi
test   %edi,%edi
je     13a5 <escape+0x295>
mov    (%rsi),%cl
and    $0xf8,%cl
cmp    $0x30,%cl
jne    13a5 <escape+0x295>
movzbl 0x1(%rsi),%ecx
add    $0x1,%rsi
lea    (%rcx,%rax,8),%eax
add    $0xffffffd0,%eax
mov    %rsi,0x8(%rsp)
add    $0xffffffff,%edi
mov    %edi,0x4(%rsp)
jmp    13a5 <escape+0x295>
test   %edi,%edi
je     120a <escape+0xfa>
lea    0x8(%rsp),%rdi
lea    0x4(%rsp),%rsi
call   1030 <utf8_decode_fwrd@plt>
jmp    13a5 <escape+0x295>
lea    0x1(%rdx),%rax
mov    %rax,0x8(%rsp)
movzbl (%rdx),%eax
add    $0xffffffff,%ecx
mov    %ecx,0x4(%rsp)
jmp    13a5 <escape+0x295>
lea    0x2(%rdx),%rdi
mov    %rdi,0x8(%rsp)
lea    -0x2(%rcx),%r8d
mov    %r8d,0x4(%rsp)
xor    %eax,%eax
cmp    $0x2,%r9d
jb     13a5 <escape+0x295>
movzbl (%rdi),%esi
lea    -0x30(%rsi),%eax
cmp    $0x9,%al
ja     1326 <escape+0x216>
add    $0xffffffd0,%esi
jmp    133f <escape+0x22f>
add    $0x2,%rdx
mov    %rdx,0x8(%rsp)
add    $0xfffffffe,%ecx
mov    %ecx,0x4(%rsp)
mov    $0x8,%eax
jmp    13a5 <escape+0x295>
add    $0x2,%rdx
mov    %rdx,0x8(%rsp)
add    $0xfffffffe,%ecx
mov    %ecx,0x4(%rsp)
mov    $0x9,%eax
jmp    13a5 <escape+0x295>
test   %edi,%edi
jne    11f6 <escape+0xe6>
lea    0x2(%rdx),%rax
mov    %rax,0x8(%rsp)
movzbl 0x1(%rdx),%eax
add    $0xfffffffe,%ecx
jmp    1219 <escape+0x109>
add    $0x2,%rdx
mov    %rdx,0x8(%rsp)
add    $0xfffffffe,%ecx
mov    %ecx,0x4(%rsp)
mov    $0x7,%eax
jmp    13a5 <escape+0x295>
add    $0x2,%rdx
mov    %rdx,0x8(%rsp)
add    $0xfffffffe,%ecx
mov    %ecx,0x4(%rsp)
mov    $0x1b,%eax
jmp    13a5 <escape+0x295>
add    $0x2,%rdx
mov    %rdx,0x8(%rsp)
add    $0xfffffffe,%ecx
mov    %ecx,0x4(%rsp)
mov    $0xc,%eax
jmp    13a5 <escape+0x295>
add    $0x2,%rdx
mov    %rdx,0x8(%rsp)
add    $0xfffffffe,%ecx
mov    %ecx,0x4(%rsp)
mov    $0xa,%eax
jmp    13a5 <escape+0x295>
add    $0x2,%rdx
mov    %rdx,0x8(%rsp)
add    $0xfffffffe,%ecx
mov    %ecx,0x4(%rsp)
mov    $0xd,%eax
jmp    13a5 <escape+0x295>
lea    -0x41(%rsi),%eax
cmp    $0x5,%al
ja     1332 <escape+0x222>
add    $0xffffffc9,%esi
jmp    133f <escape+0x22f>
lea    -0x61(%rsi),%ebx
xor    %eax,%eax
cmp    $0x5,%bl
ja     1357 <escape+0x247>
add    $0xffffffa9,%esi
add    $0x3,%rdx
mov    %rdx,0x8(%rsp)
add    $0xfffffffd,%ecx
mov    %ecx,0x4(%rsp)
mov    %rdx,%rdi
mov    %ecx,%r8d
mov    %esi,%eax
test   %r8d,%r8d
je     13a5 <escape+0x295>
movzbl (%rdi),%ecx
lea    -0x30(%rcx),%edx
cmp    $0x9,%dl
ja     1371 <escape+0x261>
shl    $0x4,%eax
add    %ecx,%eax
add    $0xffffffd0,%eax
jmp    1393 <escape+0x283>
lea    -0x41(%rcx),%edx
cmp    $0x5,%dl
ja     1383 <escape+0x273>
shl    $0x4,%eax
add    %ecx,%eax
add    $0xffffffc9,%eax
jmp    1393 <escape+0x283>
lea    -0x61(%rcx),%edx
cmp    $0x5,%dl
ja     13a5 <escape+0x295>
shl    $0x4,%eax
add    %ecx,%eax
add    $0xffffffa9,%eax
add    $0x1,%rdi
mov    %rdi,0x8(%rsp)
add    $0xffffffff,%r8d
mov    %r8d,0x4(%rsp)
mov    0x8(%rsp),%rcx
mov    %rcx,(%r15)
mov    0x4(%rsp),%ecx
mov    %ecx,(%r14)
add    $0x10,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

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

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