unsigned int _XlcParseCT(const char **text, int *length,
                         unsigned char *final_byte) {
  unsigned int ret = 0;
  unsigned char ch;
  const unsigned char *str = (const unsigned char *)*text;
  *final_byte = 0;
  if (*length < 1)
    return 0;
  switch (ch = *str++) {
  case 0x001b:
    if (*length < 2)
      return 0;
    switch (ch = *str++) {
    case 0x0025:
      if (*length < 3)
        return 0;
      ch = *str++;
      if (ch == 0x002f) {
        if (*length < 4)
          return 0;
        ret = 0x252f;
        ch = *str++;
      } else if (ch == '@') {
        ret = 0x2540;
      } else {
        ret = 0x0025;
      }
      *final_byte = ch;
      break;
    case 0x0023:
      if (*length < 4)
        return 0;
      *final_byte = *str++;
      switch (*str++) {
      case 0x0030:
        ret = 0x0030;
        break;
      case 0x0031:
        ret = 0x0031;
        break;
      default:
        ret = 0;
        break;
      }
      break;
    case 0x0024:
      if (*length < 4)
        return 0;
      ch = *str++;
      switch (ch) {
      case 0x0028:
        ret = 0x2428;
        break;
      case 0x0029:
        ret = 0x2429;
        break;
      default:
        ret = 0;
        break;
      }
      *final_byte = *str++;
      break;
    case 0x0028:
      if (*length < 3)
        return 0;
      ret = 0x0028;
      *final_byte = *str++;
      break;
    case 0x0029:
      if (*length < 3)
        return 0;
      ret = 0x0029;
      *final_byte = *str++;
      break;
    case 0x002d:
      if (*length < 3)
        return 0;
      ret = 0x002d;
      *final_byte = *str++;
      break;
    }
    break;
  case 0x009b:
    if (*length < 2)
      return 0;
    switch (*str++) {
    case 0x0031:
      if (*length < 3)
        return 0;
      if (*str++ == 0x005d)
        ret = 0x0031;
      break;
    case 0x0032:
      if (*length < 3)
        return 0;
      if (*str++ == 0x005d)
        ret = 0x0032;
      break;
    case 0x005d:
      ret = 0x005d;
      break;
    }
    break;
  }
  if (ret) {
    *length -= (const char *)str - *text;
    *text = (const char *)str;
  }
  return ret;
}


x86 assembly (clang, -O0):
<_XlcParseCT>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
mov    %rax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x18(%rbp),%rax
cmpl   $0x1,(%rax)
jge    1142 <_XlcParseCT+0x42>
movl   $0x0,-0x4(%rbp)
jmp    1562 <_XlcParseCT+0x462>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movzbl (%rax),%ecx
mov    %ecx,-0x34(%rbp)
mov    %cl,%al
sub    $0x1b,%ecx
mov    %al,-0x25(%rbp)
je     117d <_XlcParseCT+0x7d>
jmp    116a <_XlcParseCT+0x6a>
mov    -0x34(%rbp),%eax
sub    $0x9b,%eax
je     1443 <_XlcParseCT+0x343>
jmp    152d <_XlcParseCT+0x42d>
mov    -0x18(%rbp),%rax
cmpl   $0x2,(%rax)
jge    1196 <_XlcParseCT+0x96>
movl   $0x0,-0x4(%rbp)
jmp    1562 <_XlcParseCT+0x462>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movzbl (%rax),%eax
mov    %al,%cl
mov    %cl,-0x25(%rbp)
add    $0xffffffdd,%eax
mov    %eax,%ecx
mov    %rcx,-0x40(%rbp)
sub    $0xa,%eax
ja     143e <_XlcParseCT+0x33e>
mov    -0x40(%rbp),%rax
lea    0xe36(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x18(%rbp),%rax
cmpl   $0x3,(%rax)
jge    11ec <_XlcParseCT+0xec>
movl   $0x0,-0x4(%rbp)
jmp    1562 <_XlcParseCT+0x462>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x25(%rbp)
movzbl -0x25(%rbp),%eax
cmp    $0x2f,%eax
jne    1246 <_XlcParseCT+0x146>
mov    -0x18(%rbp),%rax
cmpl   $0x4,(%rax)
jge    1226 <_XlcParseCT+0x126>
movl   $0x0,-0x4(%rbp)
jmp    1562 <_XlcParseCT+0x462>
movl   $0x252f,-0x24(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x25(%rbp)
jmp    126b <_XlcParseCT+0x16b>
movzbl -0x25(%rbp),%eax
cmp    $0x40,%eax
jne    125f <_XlcParseCT+0x15f>
movl   $0x2540,-0x24(%rbp)
jmp    1266 <_XlcParseCT+0x166>
movl   $0x25,-0x24(%rbp)
jmp    126b <_XlcParseCT+0x16b>
mov    -0x25(%rbp),%cl
mov    -0x20(%rbp),%rax
mov    %cl,(%rax)
jmp    143e <_XlcParseCT+0x33e>
mov    -0x18(%rbp),%rax
cmpl   $0x4,(%rax)
jge    1292 <_XlcParseCT+0x192>
movl   $0x0,-0x4(%rbp)
jmp    1562 <_XlcParseCT+0x462>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x20(%rbp),%rax
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movzbl (%rax),%eax
mov    %eax,-0x44(%rbp)
sub    $0x30,%eax
je     12dd <_XlcParseCT+0x1dd>
jmp    12cc <_XlcParseCT+0x1cc>
mov    -0x44(%rbp),%eax
sub    $0x31,%eax
je     12e9 <_XlcParseCT+0x1e9>
jmp    12f5 <_XlcParseCT+0x1f5>
movl   $0x30,-0x24(%rbp)
jmp    12fc <_XlcParseCT+0x1fc>
movl   $0x31,-0x24(%rbp)
jmp    12fc <_XlcParseCT+0x1fc>
movl   $0x0,-0x24(%rbp)
jmp    143e <_XlcParseCT+0x33e>
mov    -0x18(%rbp),%rax
cmpl   $0x4,(%rax)
jge    131a <_XlcParseCT+0x21a>
movl   $0x0,-0x4(%rbp)
jmp    1562 <_XlcParseCT+0x462>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%al
mov    %al,-0x25(%rbp)
movzbl -0x25(%rbp),%eax
mov    %eax,-0x48(%rbp)
sub    $0x28,%eax
je     1354 <_XlcParseCT+0x254>
jmp    1343 <_XlcParseCT+0x243>
mov    -0x48(%rbp),%eax
sub    $0x29,%eax
je     1360 <_XlcParseCT+0x260>
jmp    136c <_XlcParseCT+0x26c>
movl   $0x2428,-0x24(%rbp)
jmp    1373 <_XlcParseCT+0x273>
movl   $0x2429,-0x24(%rbp)
jmp    1373 <_XlcParseCT+0x273>
movl   $0x0,-0x24(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x20(%rbp),%rax
mov    %cl,(%rax)
jmp    143e <_XlcParseCT+0x33e>
mov    -0x18(%rbp),%rax
cmpl   $0x3,(%rax)
jge    13a8 <_XlcParseCT+0x2a8>
movl   $0x0,-0x4(%rbp)
jmp    1562 <_XlcParseCT+0x462>
movl   $0x28,-0x24(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x20(%rbp),%rax
mov    %cl,(%rax)
jmp    143e <_XlcParseCT+0x33e>
mov    -0x18(%rbp),%rax
cmpl   $0x3,(%rax)
jge    13e4 <_XlcParseCT+0x2e4>
movl   $0x0,-0x4(%rbp)
jmp    1562 <_XlcParseCT+0x462>
movl   $0x29,-0x24(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x20(%rbp),%rax
mov    %cl,(%rax)
jmp    143e <_XlcParseCT+0x33e>
mov    -0x18(%rbp),%rax
cmpl   $0x3,(%rax)
jge    1420 <_XlcParseCT+0x320>
movl   $0x0,-0x4(%rbp)
jmp    1562 <_XlcParseCT+0x462>
movl   $0x2d,-0x24(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
mov    (%rax),%cl
mov    -0x20(%rbp),%rax
mov    %cl,(%rax)
jmp    152d <_XlcParseCT+0x42d>
mov    -0x18(%rbp),%rax
cmpl   $0x2,(%rax)
jge    145c <_XlcParseCT+0x35c>
movl   $0x0,-0x4(%rbp)
jmp    1562 <_XlcParseCT+0x462>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movzbl (%rax),%eax
mov    %eax,-0x4c(%rbp)
sub    $0x31,%eax
je     14a1 <_XlcParseCT+0x3a1>
jmp    147f <_XlcParseCT+0x37f>
mov    -0x4c(%rbp),%eax
sub    $0x32,%eax
je     14e1 <_XlcParseCT+0x3e1>
jmp    1490 <_XlcParseCT+0x390>
mov    -0x4c(%rbp),%eax
sub    $0x5d,%eax
je     1521 <_XlcParseCT+0x421>
jmp    1528 <_XlcParseCT+0x428>
mov    -0x18(%rbp),%rax
cmpl   $0x3,(%rax)
jge    14ba <_XlcParseCT+0x3ba>
movl   $0x0,-0x4(%rbp)
jmp    1562 <_XlcParseCT+0x462>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movzbl (%rax),%eax
cmp    $0x5d,%eax
jne    14dc <_XlcParseCT+0x3dc>
movl   $0x31,-0x24(%rbp)
jmp    1528 <_XlcParseCT+0x428>
mov    -0x18(%rbp),%rax
cmpl   $0x3,(%rax)
jge    14fa <_XlcParseCT+0x3fa>
movl   $0x0,-0x4(%rbp)
jmp    1562 <_XlcParseCT+0x462>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movzbl (%rax),%eax
cmp    $0x5d,%eax
jne    151c <_XlcParseCT+0x41c>
movl   $0x32,-0x24(%rbp)
jmp    1528 <_XlcParseCT+0x428>
movl   $0x5d,-0x24(%rbp)
jmp    152d <_XlcParseCT+0x42d>
cmpl   $0x0,-0x24(%rbp)
je     155c <_XlcParseCT+0x45c>
mov    -0x30(%rbp),%rdx
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
sub    %rax,%rdx
mov    -0x18(%rbp),%rax
movslq (%rax),%rcx
sub    %rdx,%rcx
mov    %ecx,(%rax)
mov    -0x30(%rbp),%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<_XlcParseCT>:
mov    (%rdi),%r8
movb   $0x0,(%rdx)
mov    (%rsi),%r11d
xor    %eax,%eax
test   %r11d,%r11d
jle    12e0 <_XlcParseCT+0x1e0>
mov    (%r8),%cl
cmp    $0x9b,%cl
je     1189 <_XlcParseCT+0x89>
cmp    $0x1b,%cl
jne    12e0 <_XlcParseCT+0x1e0>
cmp    $0x2,%r11d
jb     12e0 <_XlcParseCT+0x1e0>
mov    0x1(%r8),%r9b
add    $0xdd,%r9b
cmp    $0xa,%r9b
ja     12e0 <_XlcParseCT+0x1e0>
movzbl %r9b,%ecx
lea    0xeb4(%rip),%r9
movslq (%r9,%rcx,4),%rcx
add    %r9,%rcx
jmp    *%rcx
cmp    $0x4,%r11d
jb     12e0 <_XlcParseCT+0x1e0>
mov    0x2(%r8),%cl
mov    %cl,(%rdx)
mov    0x3(%r8),%cl
add    $0x4,%r8
cmp    $0x30,%cl
je     12b3 <_XlcParseCT+0x1b3>
cmp    $0x31,%cl
jne    12e0 <_XlcParseCT+0x1e0>
mov    $0x31,%eax
jmp    12d6 <_XlcParseCT+0x1d6>
cmp    $0x2,%r11d
jb     12e0 <_XlcParseCT+0x1e0>
mov    0x1(%r8),%dl
cmp    $0x5d,%dl
je     11cd <_XlcParseCT+0xcd>
cmp    $0x32,%dl
je     11db <_XlcParseCT+0xdb>
cmp    $0x31,%dl
jne    12e0 <_XlcParseCT+0x1e0>
cmp    $0x3,%r11d
jb     12e0 <_XlcParseCT+0x1e0>
cmpb   $0x5d,0x2(%r8)
jne    12e0 <_XlcParseCT+0x1e0>
add    $0x3,%r8
mov    $0x31,%eax
jmp    12d6 <_XlcParseCT+0x1d6>
add    $0x2,%r8
mov    $0x5d,%eax
jmp    12d6 <_XlcParseCT+0x1d6>
cmp    $0x3,%r11d
jb     12e0 <_XlcParseCT+0x1e0>
cmpb   $0x5d,0x2(%r8)
jne    12e0 <_XlcParseCT+0x1e0>
add    $0x3,%r8
mov    $0x32,%eax
jmp    12d6 <_XlcParseCT+0x1d6>
cmp    $0x4,%r11d
jb     12e0 <_XlcParseCT+0x1e0>
lea    0x4(%r8),%r9
mov    0x2(%r8),%r10b
mov    0x3(%r8),%cl
mov    %cl,(%rdx)
cmp    $0x28,%r10b
je     12ba <_XlcParseCT+0x1ba>
cmp    $0x29,%r10b
jne    12e0 <_XlcParseCT+0x1e0>
mov    $0x2429,%eax
jmp    12bf <_XlcParseCT+0x1bf>
cmp    $0x3,%r11d
jb     12e0 <_XlcParseCT+0x1e0>
lea    0x3(%r8),%r10
mov    0x2(%r8),%r9b
cmp    $0x40,%r9b
je     12c4 <_XlcParseCT+0x1c4>
cmp    $0x2f,%r9b
jne    12cb <_XlcParseCT+0x1cb>
cmp    $0x4,%r11d
jb     12e0 <_XlcParseCT+0x1e0>
mov    0x3(%r8),%r9b
add    $0x4,%r8
mov    $0x252f,%eax
mov    %r8,%r10
jmp    12d0 <_XlcParseCT+0x1d0>
cmp    $0x3,%r11d
jb     12e0 <_XlcParseCT+0x1e0>
mov    0x2(%r8),%al
add    $0x3,%r8
mov    %al,(%rdx)
mov    $0x28,%eax
jmp    12d6 <_XlcParseCT+0x1d6>
cmp    $0x3,%r11d
jb     12e0 <_XlcParseCT+0x1e0>
mov    0x2(%r8),%al
add    $0x3,%r8
mov    %al,(%rdx)
mov    $0x29,%eax
jmp    12d6 <_XlcParseCT+0x1d6>
cmp    $0x3,%r11d
jb     12e0 <_XlcParseCT+0x1e0>
mov    0x2(%r8),%al
add    $0x3,%r8
mov    %al,(%rdx)
mov    $0x2d,%eax
jmp    12d6 <_XlcParseCT+0x1d6>
mov    $0x30,%eax
jmp    12d6 <_XlcParseCT+0x1d6>
mov    $0x2428,%eax
mov    %r9,%r8
jmp    12d6 <_XlcParseCT+0x1d6>
mov    $0x2540,%eax
jmp    12d0 <_XlcParseCT+0x1d0>
mov    $0x25,%eax
mov    %r9b,(%rdx)
mov    %r10,%r8
mov    (%rdi),%ecx
sub    %r8d,%ecx
add    %ecx,(%rsi)
mov    %r8,(%rdi)
ret

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

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