#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 kbinr(int);
int chparse(int max_delay, int rest_delay, int *state, int *private,
            int param[], int *nparam, int inter[], int *ninter, int *final) {
  int present[8];
  register int c;
  register int i;
  if (*state == 0)
    *private = 0;
label1:
  c = kbinr(max_delay);
  max_delay = rest_delay;
label2:
  switch (c) {
  case 0x00:
  case 0x7F:
    goto label5;
  case 0x1B:
  case 0x9B:
  case 0x8f:
  case 0x90:
  case 0x9D:
  case 0x9E:
  case 0x9F:
    *state = c;
    *private = 0;
    for (i = 0; i < 8; i++)
      param[i] = present[i] = 0;
    for (i = 0; i < 8; i++)
      inter[i] = '\0';
    *nparam = *ninter = 0;
    goto label1;
  }
  if (*state == 0)
    goto label5;
  if ((c >= 0x80 && c < 0xA0) || c == (-2) || c == (-1) || c == 0x18 ||
      c == 0x1A) {
    *state = 0;
    goto label5;
  }
  if (c < 0x20)
    goto label5;
  if (c <= 0x2F) {
    if (*ninter < 7)
      inter[++*ninter] = c;
    goto label1;
  }
  if (*state == 0x1B) {
    if (*ninter == 0 && (c & 0x3F) < 0x20) {
      c = (c & 0x3F) + 0x80;
      goto label2;
    }
    goto label4;
  }
  if (c >= 0x40)
    goto label3;
  else if (c >= 0x3C) {
    if (*nparam != 0)
      *private = 'X';
    else {
      *private = c;
      *nparam = 1;
    }
    goto label1;
  }
  if (*nparam == 0)
    *nparam = 1;
  if (*ninter != 0) {
    *ninter = 0;
    *private = 'X';
  }
  if (c == ';') {
    if (*nparam >= (8 - 1))
      *private = 'X';
    else {
      ++*nparam;
    }
    goto label1;
  }
  if (c > '9') {
    *private = 'X';
    goto label1;
  }
  present[*nparam] = 1;
  param[*nparam] = (param[*nparam] * 10) + (c - '0');
  goto label1;
label3:
  if (*nparam == 0)
    *nparam = 1;
label4:
  *final = c;
  c = *state;
  *state = 0;
label5:
  return (c);
}


x86 assembly (clang, -O0):
<chparse>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %rdx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x0,(%rax)
jne    1151 <chparse+0x41>
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
jmp    1156 <chparse+0x46>
mov    -0x4(%rbp),%edi
call   1030 <kbinr@plt>
mov    %eax,-0x54(%rbp)
mov    -0x8(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0x5c(%rbp)
test   %eax,%eax
je     11db <chparse+0xcb>
jmp    117a <chparse+0x6a>
mov    -0x5c(%rbp),%eax
sub    $0x1b,%eax
je     11e0 <chparse+0xd0>
jmp    118b <chparse+0x7b>
mov    -0x5c(%rbp),%eax
sub    $0x7f,%eax
je     11db <chparse+0xcb>
jmp    119c <chparse+0x8c>
mov    -0x5c(%rbp),%eax
add    $0xffffff71,%eax
sub    $0x2,%eax
jb     11e0 <chparse+0xd0>
jmp    11b2 <chparse+0xa2>
mov    -0x5c(%rbp),%eax
sub    $0x9b,%eax
je     11e0 <chparse+0xd0>
jmp    11c5 <chparse+0xb5>
mov    -0x5c(%rbp),%eax
add    $0xffffff63,%eax
sub    $0x3,%eax
jb     11e0 <chparse+0xd0>
jmp    1274 <chparse+0x164>
jmp    14a5 <chparse+0x395>
mov    -0x54(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x0,-0x58(%rbp)
cmpl   $0x8,-0x58(%rbp)
jge    122d <chparse+0x11d>
movslq -0x58(%rbp),%rax
movl   $0x0,-0x50(%rbp,%rax,4)
mov    -0x20(%rbp),%rax
movslq -0x58(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    11fa <chparse+0xea>
movl   $0x0,-0x58(%rbp)
cmpl   $0x8,-0x58(%rbp)
jge    125b <chparse+0x14b>
mov    0x10(%rbp),%rax
movslq -0x58(%rbp),%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    1234 <chparse+0x124>
mov    0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
jmp    1156 <chparse+0x46>
mov    -0x10(%rbp),%rax
cmpl   $0x0,(%rax)
jne    1286 <chparse+0x176>
jmp    14a5 <chparse+0x395>
cmpl   $0x80,-0x54(%rbp)
jl     12a0 <chparse+0x190>
cmpl   $0xa0,-0x54(%rbp)
jl     12c8 <chparse+0x1b8>
cmpl   $0xfffffffe,-0x54(%rbp)
je     12c8 <chparse+0x1b8>
cmpl   $0xffffffff,-0x54(%rbp)
je     12c8 <chparse+0x1b8>
cmpl   $0x18,-0x54(%rbp)
je     12c8 <chparse+0x1b8>
cmpl   $0x1a,-0x54(%rbp)
jne    12d7 <chparse+0x1c7>
mov    -0x10(%rbp),%rax
movl   $0x0,(%rax)
jmp    14a5 <chparse+0x395>
cmpl   $0x20,-0x54(%rbp)
jge    12e6 <chparse+0x1d6>
jmp    14a5 <chparse+0x395>
cmpl   $0x2f,-0x54(%rbp)
jg     131a <chparse+0x20a>
mov    0x18(%rbp),%rax
cmpl   $0x7,(%rax)
jge    1315 <chparse+0x205>
mov    -0x54(%rbp),%edx
mov    0x10(%rbp),%rax
mov    0x18(%rbp),%rsi
mov    (%rsi),%ecx
add    $0x1,%ecx
mov    %ecx,(%rsi)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1156 <chparse+0x46>
mov    -0x10(%rbp),%rax
cmpl   $0x1b,(%rax)
jne    135b <chparse+0x24b>
mov    0x18(%rbp),%rax
cmpl   $0x0,(%rax)
jne    1356 <chparse+0x246>
mov    -0x54(%rbp),%eax
and    $0x3f,%eax
cmp    $0x20,%eax
jge    1356 <chparse+0x246>
mov    -0x54(%rbp),%eax
and    $0x3f,%eax
add    $0x80,%eax
mov    %eax,-0x54(%rbp)
jmp    1167 <chparse+0x57>
jmp    1489 <chparse+0x379>
cmpl   $0x40,-0x54(%rbp)
jl     136a <chparse+0x25a>
jmp    146d <chparse+0x35d>
cmpl   $0x3c,-0x54(%rbp)
jl     13a8 <chparse+0x298>
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
je     1390 <chparse+0x280>
mov    -0x18(%rbp),%rax
movl   $0x58,(%rax)
jmp    13a3 <chparse+0x293>
mov    -0x54(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    1156 <chparse+0x46>
jmp    13ad <chparse+0x29d>
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
jne    13c4 <chparse+0x2b4>
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
mov    0x18(%rbp),%rax
cmpl   $0x0,(%rax)
je     13e5 <chparse+0x2d5>
mov    0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x18(%rbp),%rax
movl   $0x58,(%rax)
cmpl   $0x3b,-0x54(%rbp)
jne    141b <chparse+0x30b>
mov    -0x28(%rbp),%rax
cmpl   $0x7,(%rax)
jl     140b <chparse+0x2fb>
mov    -0x18(%rbp),%rax
movl   $0x58,(%rax)
jmp    1416 <chparse+0x306>
mov    -0x28(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    1156 <chparse+0x46>
cmpl   $0x39,-0x54(%rbp)
jle    1434 <chparse+0x324>
mov    -0x18(%rbp),%rax
movl   $0x58,(%rax)
jmp    1156 <chparse+0x46>
mov    -0x28(%rbp),%rax
movslq (%rax),%rax
movl   $0x1,-0x50(%rbp,%rax,4)
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
imul   $0xa,(%rax,%rcx,4),%edx
mov    -0x54(%rbp),%eax
sub    $0x30,%eax
add    %eax,%edx
mov    -0x20(%rbp),%rax
mov    -0x28(%rbp),%rcx
movslq (%rcx),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1156 <chparse+0x46>
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
jne    1484 <chparse+0x374>
mov    -0x28(%rbp),%rax
movl   $0x1,(%rax)
jmp    1489 <chparse+0x379>
mov    -0x54(%rbp),%ecx
mov    0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x54(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<chparse>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r9,%r14
mov    %r8,%r15
mov    %rcx,%r12
mov    %rdx,%rbx
mov    %esi,%ebp
cmpl   $0x0,(%rdx)
jne    1136 <chparse+0x26>
movl   $0x0,(%r12)
mov    0x48(%rsp),%r13
call   1030 <kbinr@plt>
mov    %eax,%ecx
mov    %ecx,%eax
lea    -0x7f(%rax),%ecx
cmp    $0x20,%ecx
ja     1169 <chparse+0x59>
movabs $0x1d0030000,%rdx
bt     %rcx,%rdx
jb     11f0 <chparse+0xe0>
test   %rcx,%rcx
je     12fe <chparse+0x1ee>
test   %eax,%eax
je     12fe <chparse+0x1ee>
cmp    $0x1b,%eax
je     11f0 <chparse+0xe0>
mov    (%rbx),%ecx
test   %ecx,%ecx
je     12fe <chparse+0x1ee>
mov    %eax,%edx
and    $0xffffffe0,%edx
cmp    $0x80,%edx
je     12f8 <chparse+0x1e8>
lea    0x2(%rax),%edx
cmp    $0x1c,%edx
ja     11a7 <chparse+0x97>
mov    $0x14000003,%esi
bt     %edx,%esi
jb     12f8 <chparse+0x1e8>
cmp    $0x20,%eax
jl     12fe <chparse+0x1ee>
cmp    $0x2f,%eax
jbe    1228 <chparse+0x118>
cmp    $0x1b,%ecx
jne    1250 <chparse+0x140>
cmpl   $0x0,0x0(%r13)
jne    12ef <chparse+0x1df>
mov    %eax,%edx
and    $0x3f,%edx
lea    0x80(%rdx),%ecx
cmp    $0x20,%edx
jb     1142 <chparse+0x32>
jmp    12ef <chparse+0x1df>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %eax,(%rbx)
movl   $0x0,(%r12)
xorps  %xmm0,%xmm0
movups %xmm0,0x10(%r15)
movups %xmm0,(%r15)
mov    0x40(%rsp),%rax
movups %xmm0,0x10(%rax)
movups %xmm0,(%rax)
movl   $0x0,0x0(%r13)
movl   $0x0,(%r14)
mov    %ebp,%edi
jmp    113b <chparse+0x2b>
movslq 0x0(%r13),%rcx
mov    %ebp,%edi
cmp    $0x6,%rcx
jg     113b <chparse+0x2b>
lea    0x1(%rcx),%rdx
mov    %edx,0x0(%r13)
mov    0x40(%rsp),%rdx
mov    %eax,0x4(%rdx,%rcx,4)
mov    %ebp,%edi
jmp    113b <chparse+0x2b>
cmp    $0x3f,%eax
ja     12e2 <chparse+0x1d2>
mov    (%r14),%ecx
cmp    $0x3c,%eax
jb     1277 <chparse+0x167>
test   %ecx,%ecx
jne    12b8 <chparse+0x1a8>
mov    %eax,(%r12)
movl   $0x1,(%r14)
mov    %ebp,%edi
jmp    113b <chparse+0x2b>
test   %ecx,%ecx
jne    1282 <chparse+0x172>
movl   $0x1,(%r14)
cmpl   $0x0,0x0(%r13)
je     1299 <chparse+0x189>
movl   $0x0,0x0(%r13)
movl   $0x58,(%r12)
cmp    $0x3b,%eax
jne    12b3 <chparse+0x1a3>
mov    (%r14),%eax
cmp    $0x7,%eax
jge    12b8 <chparse+0x1a8>
add    $0x1,%eax
mov    %eax,(%r14)
mov    %ebp,%edi
jmp    113b <chparse+0x2b>
cmp    $0x3a,%eax
jb     12c7 <chparse+0x1b7>
movl   $0x58,(%r12)
mov    %ebp,%edi
jmp    113b <chparse+0x2b>
movslq (%r14),%rcx
mov    (%r15,%rcx,4),%edx
lea    (%rdx,%rdx,4),%edx
lea    (%rax,%rdx,2),%eax
add    $0xffffffd0,%eax
mov    %eax,(%r15,%rcx,4)
mov    %ebp,%edi
jmp    113b <chparse+0x2b>
cmpl   $0x0,(%r14)
jne    12ef <chparse+0x1df>
movl   $0x1,(%r14)
mov    0x50(%rsp),%rcx
mov    %eax,(%rcx)
mov    (%rbx),%eax
movl   $0x0,(%rbx)
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @chparse(i32 %0, i32 %1, i32* nocapture %2, i32* nocapture writeonly %3, i32* nocapture %4, i32* nocapture %5, i32* nocapture writeonly %6, i32* nocapture %7, i32* nocapture writeonly %8) {
%10 = bitcast i32* %4 to i8*
%11 = bitcast i32* %6 to i8*
%12 = load i32, i32* %2
%13 = icmp eq i32 %12, 0
br i1 %13, label %14, label %15
14: ; preds = %9
store i32 0, i32* %3
br label %15
15: ; preds = %14, %9
br label %16
16: ; preds = %70, %15
%17 = phi i32 [ %0, %15 ], [ %1, %70 ]
%18 = tail call i32 @kbinr(i32 %17)
br label %19
19: ; preds = %45, %16
%20 = phi i32 [ %18, %16 ], [ %48, %45 ]
switch i32 %20, label %22 [
i32 0, label %92
i32 127, label %92
i32 27, label %21
i32 155, label %21
i32 143, label %21
i32 144, label %21
i32 157, label %21
i32 158, label %21
i32 159, label %21
]
21: ; preds = %19, %19, %19, %19, %19, %19, %19
store i32 %20, i32* %2
store i32 0, i32* %3
store i32 0, i32* %7
store i32 0, i32* %5
br label %70
22: ; preds = %19
%23 = load i32, i32* %2
%24 = icmp eq i32 %23, 0
br i1 %24, label %92, label %25
25: ; preds = %22
%26 = and i32 %20, -32
%27 = icmp eq i32 %26, 128
br i1 %27, label %90, label %28
28: ; preds = %25
switch i32 %20, label %29 [
i32 -1, label %90
i32 -2, label %90
i32 26, label %90
i32 24, label %90
]
29: ; preds = %28
%30 = icmp slt i32 %20, 32
br i1 %30, label %92, label %31
31: ; preds = %29
%32 = icmp ult i32 %20, 48
br i1 %32, label %33, label %40
33: ; preds = %31
%34 = load i32, i32* %7
%35 = icmp slt i32 %34, 7
br i1 %35, label %36, label %70
36: ; preds = %33
%37 = add nsw i32 %34, 1
store i32 %37, i32* %7
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i32, i32* %6, i64 %38
store i32 %20, i32* %39
br label %70
40: ; preds = %31
%41 = icmp eq i32 %23, 27
br i1 %41, label %42, label %49
42: ; preds = %40
%43 = load i32, i32* %7
%44 = icmp eq i32 %43, 0
br i1 %44, label %45, label %88
45: ; preds = %42
%46 = and i32 %20, 63
%47 = icmp ult i32 %46, 32
%48 = or i32 %46, 128
br i1 %47, label %19, label %88
49: ; preds = %40
%50 = icmp ugt i32 %20, 63
br i1 %50, label %84, label %51
51: ; preds = %49
%52 = icmp ugt i32 %20, 59
%53 = load i32, i32* %5
%54 = icmp eq i32 %53, 0
br i1 %52, label %55, label %58
55: ; preds = %51
br i1 %54, label %57, label %56
56: ; preds = %55
store i32 88, i32* %3
br label %70
57: ; preds = %55
store i32 %20, i32* %3
store i32 1, i32* %5
br label %70
58: ; preds = %51
br i1 %54, label %59, label %60
59: ; preds = %58
store i32 1, i32* %5
br label %60
60: ; preds = %59, %58
%61 = load i32, i32* %7
%62 = icmp eq i32 %61, 0
br i1 %62, label %64, label %63
63: ; preds = %60
store i32 0, i32* %7
store i32 88, i32* %3
br label %64
64: ; preds = %63, %60
%65 = icmp eq i32 %20, 59
br i1 %65, label %66, label %73
66: ; preds = %64
%67 = load i32, i32* %5
%68 = icmp sgt i32 %67, 6
br i1 %68, label %69, label %71
69: ; preds = %66
store i32 88, i32* %3
br label %70
70: ; preds = %69, %71, %56, %57, %33, %36, %21, %75, %76
br label %16
71: ; preds = %66
%72 = add nsw i32 %67, 1
store i32 %72, i32* %5
br label %70
73: ; preds = %64
%74 = icmp ugt i32 %20, 57
br i1 %74, label %75, label %76
75: ; preds = %73
store i32 88, i32* %3
br label %70
76: ; preds = %73
%77 = load i32, i32* %5
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds i32, i32* %4, i64 %78
%80 = load i32, i32* %79
%81 = mul nsw i32 %80, 10
%82 = add nsw i32 %20, -48
%83 = add nsw i32 %82, %81
store i32 %83, i32* %79
br label %70
84: ; preds = %49
%85 = load i32, i32* %5
%86 = icmp eq i32 %85, 0
br i1 %86, label %87, label %88
87: ; preds = %84
store i32 1, i32* %5
br label %88
88: ; preds = %42, %45, %84, %87
store i32 %20, i32* %8
%89 = load i32, i32* %2
br label %90
90: ; preds = %25, %28, %28, %28, %28, %88
%91 = phi i32 [ %89, %88 ], [ %20, %28 ], [ %20, %28 ], [ %20, %28 ], [ %20, %28 ], [ %20, %25 ]
store i32 0, i32* %2
br label %92
92: ; preds = %29, %22, %19, %19, %90
%93 = phi i32 [ %91, %90 ], [ %20, %19 ], [ %20, %19 ], [ %20, %22 ], [ %20, %29 ]
ret i32 %93
}