#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*/ strcat(char *, char *);
void hi_parsenum(int *arr, int arrsz, char *final) {
  char *scales[] = {" ",     "s13",     "h1 z2r", "l2kh",   "k1 r12dd",
                    "1 r1b", "kh1 r1b", "n4l",    "p1 d1m", "sh1n 0kh"};
  char *units[] = {"sh6n 0y", "8k",   "d12", "t4n",  "ch2r",
                   "p2n 0ch", "chh8", "s2t", "2tth", "n13"};
  char *teens[] = {"d1s",           "gyHy2 r1h",  "b2 r1h",  "t8 r2",
                   "ch13 d1h",      "p1n drHr1h", "s12 l1h", "s1 trHr1",
                   "1tth tth2 r1h", "6n n4s"};
  char *twenties[] = {"b4s",          "3k k4s",    "b2 4s",     "t8 y3s",
                      "ch13 b4s",     "p1ch ch4s", "chh1b b4s", "s1t t2 4s",
                      "1tth tth2 4s", "6n t4s"};
  char *thirties[] = {"t4s",    "3k t3s",    "b1t t3s", "t9 t3s",  "ch13 t3s",
                      "p9 t3s", "chh1t t3s", "s9 t3s",  "1dd t3s", "6n t2 l3s"};
  char *forties[] = {"ch2 l3s",     "3k t2 l3s",   "b1 y2 l3s",
                     "t9 t2 l3s",   "ch14 v2 l3s", "p9 t2 l3s",
                     "chh3 y2 l3s", "s9 t2 l3s",   "1dd G1000 t2 l3s",
                     "6n ch2s"};
  char *fifties[] = {"p1 G500 ch2s", "3k kyHy2 v1n", "b2 v1n",
                     "t3r G500 p1n", "ch14 v1n",     "p1ch G500 p1n",
                     "chh1p p1n",    "s1t t2 v1n",   "1tt tth2 v1n",
                     "6n s1tth"};
  char *sixties[] = {"s2tth",      "3k s1tth",  "b2 s1tth",   "t3r s1tth",
                     "ch14 s1tth", "p9 s1tth",  "chh2 s1tth", "s1dd s1tth",
                     "1dd s1tth",  "6n h1t t1r"};
  char *seventies[] = {"s1t t1r",      "3k h1t t1r",   "b1 h1t t1r",
                       "t3 h1t t1r",   "ch14 h1t t1r", "p1ch chh1t t1r ",
                       "chh3 h1t t1r", "s1 t1t t1r",   "1 tth1t t1r",
                       "6n y2 s4"};
  char *eighties[] = {"1s s4",       "3k kyHy2 s4", "b1 y2 s4",   "t3 r2 s4",
                      "ch14 r2 s4",  "p1ch ch2 s4", "chh3 y2 s4", "s1t t2 s4",
                      "1tt tth2 s4", "n1 v2 s4"};
  char *nineties[] = {"n1b b8",      "3k kyHy2n b8", "b2n b8",
                      "t3 r2n b8",   "ch14 r2n b8",  "p1n ch2n b8",
                      "chh3 y2n b8", "s1t t2n b8",   "1tt G500 tth2n b8",
                      "n3 nHy2n b8"};
  char **uptohundred[] = {units,   teens,   twenties,  thirties, forties,
                          fifties, sixties, seventies, eighties, nineties};
  int i = 0, j = 0;
  if (arrsz == 1) {
    strcat(final, units[arr[i]]);
    strcat(final, " G3000 ");
  } else if (arrsz == 2) {
    strcat(final, uptohundred[arr[i]][arr[i + 1]]);
    strcat(final, " G3000 ");
  } else if (arrsz == 3) {
    strcat(final, units[arr[i]]);
    strcat(final, " G3000 ");
    i++;
    strcat(final, scales[1]);
    strcat(final, " G3000 ");
    strcat(final, uptohundred[arr[i]][arr[i + 1]]);
    strcat(final, " G3000 ");
  } else if (arrsz > 3) {
    j = 0;
    i = (arrsz % 2) ? 0 : 1;
    if (i) {
      strcat(final, units[arr[0]]);
      strcat(final, " G3000 ");
      j++;
      strcat(final, scales[(arrsz - i) / 2 + 1]);
      strcat(final, " G3000 ");
      j++;
    }
    for (; i < arrsz - 3; i += 2) {
      strcat(final, uptohundred[arr[i]][arr[i + 1]]);
      strcat(final, " G3000 ");
      j++;
      strcat(final, scales[(arrsz - i) / 2]);
      strcat(final, " G3000 ");
      j++;
    }
    if (arr[arrsz - 3]) {
      strcat(final, units[arr[arrsz - 3]]);
      strcat(final, " G3000 ");
      j++;
      strcat(final, scales[1]);
      strcat(final, " G3000 ");
      j++;
    }
    strcat(final, uptohundred[arr[arrsz - 2]][arr[arrsz - 1]]);
    strcat(final, " G3000 ");
  }
}


x86 assembly (clang, -O0):
<hi_parsenum>:
push   %rbp
mov    %rsp,%rbp
sub    $0x3f0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
lea    -0x70(%rbp),%rdi
lea    0x296f(%rip),%rsi
mov    $0x50,%edx
call   1030 <memcpy@plt>
lea    -0xc0(%rbp),%rdi
lea    0x29a7(%rip),%rsi
mov    $0x50,%edx
call   1030 <memcpy@plt>
lea    -0x110(%rbp),%rdi
lea    0x29df(%rip),%rsi
mov    $0x50,%edx
call   1030 <memcpy@plt>
lea    -0x160(%rbp),%rdi
lea    0x2a17(%rip),%rsi
mov    $0x50,%edx
call   1030 <memcpy@plt>
lea    -0x1b0(%rbp),%rdi
lea    0x2a4f(%rip),%rsi
mov    $0x50,%edx
call   1030 <memcpy@plt>
lea    -0x200(%rbp),%rdi
lea    0x2a87(%rip),%rsi
mov    $0x50,%edx
call   1030 <memcpy@plt>
lea    -0x250(%rbp),%rdi
lea    0x2abf(%rip),%rsi
mov    $0x50,%edx
call   1030 <memcpy@plt>
lea    -0x2a0(%rbp),%rdi
lea    0x2af7(%rip),%rsi
mov    $0x50,%edx
call   1030 <memcpy@plt>
lea    -0x2f0(%rbp),%rdi
lea    0x2b2f(%rip),%rsi
mov    $0x50,%edx
call   1030 <memcpy@plt>
lea    -0x340(%rbp),%rdi
lea    0x2b67(%rip),%rsi
mov    $0x50,%edx
call   1030 <memcpy@plt>
lea    -0x390(%rbp),%rdi
lea    0x2b9f(%rip),%rsi
mov    $0x50,%edx
call   1030 <memcpy@plt>
lea    -0xc0(%rbp),%rax
mov    %rax,-0x3e0(%rbp)
lea    -0x110(%rbp),%rax
mov    %rax,-0x3d8(%rbp)
lea    -0x160(%rbp),%rax
mov    %rax,-0x3d0(%rbp)
lea    -0x1b0(%rbp),%rax
mov    %rax,-0x3c8(%rbp)
lea    -0x200(%rbp),%rax
mov    %rax,-0x3c0(%rbp)
lea    -0x250(%rbp),%rax
mov    %rax,-0x3b8(%rbp)
lea    -0x2a0(%rbp),%rax
mov    %rax,-0x3b0(%rbp)
lea    -0x2f0(%rbp),%rax
mov    %rax,-0x3a8(%rbp)
lea    -0x340(%rbp),%rax
mov    %rax,-0x3a0(%rbp)
lea    -0x390(%rbp),%rax
mov    %rax,-0x398(%rbp)
movl   $0x0,-0x3e4(%rbp)
movl   $0x0,-0x3e8(%rbp)
cmpl   $0x1,-0xc(%rbp)
jne    131a <hi_parsenum+0x1fa>
mov    -0x18(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x3e4(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
mov    -0xc0(%rbp,%rax,8),%rsi
ff
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
lea    0x10bb(%rip),%rsi
call   1040 <strcat@plt>
jmp    167b <hi_parsenum+0x55b>
cmpl   $0x2,-0xc(%rbp)
jne    1371 <hi_parsenum+0x251>
mov    -0x18(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x3e4(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
mov    -0x3e0(%rbp,%rax,8),%rax
ff
mov    -0x8(%rbp),%rcx
mov    -0x3e4(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,8),%rsi
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
lea    0x1064(%rip),%rsi
call   1040 <strcat@plt>
jmp    1676 <hi_parsenum+0x556>
cmpl   $0x3,-0xc(%rbp)
jne    1424 <hi_parsenum+0x304>
mov    -0x18(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x3e4(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
mov    -0xc0(%rbp,%rax,8),%rsi
ff
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
lea    0x1025(%rip),%rsi
call   1040 <strcat@plt>
mov    -0x3e4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3e4(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x68(%rbp),%rsi
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
lea    0xff9(%rip),%rsi
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x3e4(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
mov    -0x3e0(%rbp,%rax,8),%rax
ff
mov    -0x8(%rbp),%rcx
mov    -0x3e4(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,8),%rsi
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
lea    0xfb1(%rip),%rsi
call   1040 <strcat@plt>
jmp    1671 <hi_parsenum+0x551>
cmpl   $0x3,-0xc(%rbp)
jle    166c <hi_parsenum+0x54c>
movl   $0x0,-0x3e8(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    $0x1,%eax
xor    %ecx,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %eax,-0x3e4(%rbp)
cmpl   $0x0,-0x3e4(%rbp)
je     14dd <hi_parsenum+0x3bd>
mov    -0x18(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq (%rax),%rax
mov    -0xc0(%rbp,%rax,8),%rsi
ff
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
lea    0xf45(%rip),%rsi
call   1040 <strcat@plt>
mov    -0x3e8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3e8(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0xc(%rbp),%eax
sub    -0x3e4(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
add    $0x1,%eax
cltq
mov    -0x70(%rbp,%rax,8),%rsi
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
lea    0xf02(%rip),%rsi
call   1040 <strcat@plt>
mov    -0x3e8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3e8(%rbp)
jmp    14e2 <hi_parsenum+0x3c2>
mov    -0x3e4(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    15a1 <hi_parsenum+0x481>
mov    -0x18(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x3e4(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
mov    -0x3e0(%rbp,%rax,8),%rax
ff
mov    -0x8(%rbp),%rcx
mov    -0x3e4(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,8),%rsi
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
lea    0xe92(%rip),%rsi
call   1040 <strcat@plt>
mov    -0x3e8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3e8(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0xc(%rbp),%eax
sub    -0x3e4(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cltq
mov    -0x70(%rbp,%rax,8),%rsi
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
lea    0xe52(%rip),%rsi
call   1040 <strcat@plt>
mov    -0x3e8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3e8(%rbp)
mov    -0x3e4(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x3e4(%rbp)
jmp    14e2 <hi_parsenum+0x3c2>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1625 <hi_parsenum+0x505>
mov    -0x18(%rbp),%rdi
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movslq (%rax,%rcx,4),%rax
mov    -0xc0(%rbp,%rax,8),%rsi
ff
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
lea    0xde6(%rip),%rsi
call   1040 <strcat@plt>
mov    -0x3e8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3e8(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x68(%rbp),%rsi
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
lea    0xdba(%rip),%rsi
call   1040 <strcat@plt>
mov    -0x3e8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3e8(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movslq (%rax,%rcx,4),%rax
mov    -0x3e0(%rbp,%rax,8),%rax
ff
mov    -0x8(%rbp),%rcx
mov    -0xc(%rbp),%edx
sub    $0x1,%edx
movslq %edx,%rdx
movslq (%rcx,%rdx,4),%rcx
mov    (%rax,%rcx,8),%rsi
call   1040 <strcat@plt>
mov    -0x18(%rbp),%rdi
lea    0xd64(%rip),%rsi
call   1040 <strcat@plt>
jmp    1671 <hi_parsenum+0x551>
jmp    1676 <hi_parsenum+0x556>
jmp    167b <hi_parsenum+0x55b>
add    $0x3f0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<hi_parsenum>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x388,%rsp
mov    %rdx,%r13
mov    %rdi,%r14
movaps 0x2a12(%rip),%xmm0
movaps %xmm0,0xa0(%rsp)
movaps 0x29f3(%rip),%xmm0
movaps %xmm0,0x90(%rsp)
movaps 0x29d4(%rip),%xmm0
movaps %xmm0,0x80(%rsp)
movaps 0x29b5(%rip),%xmm0
movaps %xmm0,0x70(%rsp)
movaps 0x2999(%rip),%xmm0
movaps %xmm0,0x60(%rsp)
movaps 0x2a1d(%rip),%xmm0
movaps %xmm0,0x370(%rsp)
movaps 0x29fe(%rip),%xmm0
movaps %xmm0,0x360(%rsp)
movaps 0x29df(%rip),%xmm0
movaps %xmm0,0x350(%rsp)
movaps 0x29c0(%rip),%xmm0
movaps %xmm0,0x340(%rsp)
movaps 0x29a1(%rip),%xmm0
movaps %xmm0,0x330(%rsp)
movaps 0x2a22(%rip),%xmm0
movaps %xmm0,0x320(%rsp)
movaps 0x2a03(%rip),%xmm0
movaps %xmm0,0x310(%rsp)
movaps 0x29e4(%rip),%xmm0
movaps %xmm0,0x300(%rsp)
movaps 0x29c5(%rip),%xmm0
movaps %xmm0,0x2f0(%rsp)
movaps 0x29a6(%rip),%xmm0
movaps %xmm0,0x2e0(%rsp)
movaps 0x2a27(%rip),%xmm0
movaps %xmm0,0x2d0(%rsp)
movaps 0x2a08(%rip),%xmm0
movaps %xmm0,0x2c0(%rsp)
movaps 0x29e9(%rip),%xmm0
movaps %xmm0,0x2b0(%rsp)
movaps 0x29ca(%rip),%xmm0
movaps %xmm0,0x2a0(%rsp)
movaps 0x29ab(%rip),%xmm0
movaps %xmm0,0x290(%rsp)
movaps 0x2a2c(%rip),%xmm0
movaps %xmm0,0x280(%rsp)
movaps 0x2a0d(%rip),%xmm0
movaps %xmm0,0x270(%rsp)
movaps 0x29ee(%rip),%xmm0
movaps %xmm0,0x260(%rsp)
movaps 0x29cf(%rip),%xmm0
movaps %xmm0,0x250(%rsp)
movaps 0x29b0(%rip),%xmm0
movaps %xmm0,0x240(%rsp)
movaps 0x2a31(%rip),%xmm0
movaps %xmm0,0x230(%rsp)
movaps 0x2a12(%rip),%xmm0
movaps %xmm0,0x220(%rsp)
movaps 0x29f3(%rip),%xmm0
movaps %xmm0,0x210(%rsp)
movaps 0x29d4(%rip),%xmm0
movaps %xmm0,0x200(%rsp)
movaps 0x29b5(%rip),%xmm0
movaps %xmm0,0x1f0(%rsp)
movaps 0x2a36(%rip),%xmm0
movaps %xmm0,0x1e0(%rsp)
movaps 0x2a17(%rip),%xmm0
movaps %xmm0,0x1d0(%rsp)
movaps 0x29f8(%rip),%xmm0
movaps %xmm0,0x1c0(%rsp)
movaps 0x29d9(%rip),%xmm0
movaps %xmm0,0x1b0(%rsp)
movaps 0x29ba(%rip),%xmm0
movaps %xmm0,0x1a0(%rsp)
movaps 0x2a3b(%rip),%xmm0
movaps %xmm0,0x190(%rsp)
movaps 0x2a1c(%rip),%xmm0
movaps %xmm0,0x180(%rsp)
movaps 0x29fd(%rip),%xmm0
movaps %xmm0,0x170(%rsp)
movaps 0x29de(%rip),%xmm0
movaps %xmm0,0x160(%rsp)
movaps 0x29bf(%rip),%xmm0
movaps %xmm0,0x150(%rsp)
movaps 0x2a40(%rip),%xmm0
movaps %xmm0,0x140(%rsp)
movaps 0x2a21(%rip),%xmm0
movaps %xmm0,0x130(%rsp)
movaps 0x2a02(%rip),%xmm0
movaps %xmm0,0x120(%rsp)
movaps 0x29e3(%rip),%xmm0
movaps %xmm0,0x110(%rsp)
movaps 0x29c4(%rip),%xmm0
movaps %xmm0,0x100(%rsp)
movaps 0x2a45(%rip),%xmm0
movaps %xmm0,0xf0(%rsp)
movaps 0x2a26(%rip),%xmm0
movaps %xmm0,0xe0(%rsp)
movaps 0x2a07(%rip),%xmm0
movaps %xmm0,0xd0(%rsp)
movaps 0x29e8(%rip),%xmm0
movaps %xmm0,0xc0(%rsp)
movaps 0x29c9(%rip),%xmm0
movaps %xmm0,0xb0(%rsp)
lea    0x60(%rsp),%rax
mov    %rax,0x10(%rsp)
lea    0x330(%rsp),%rax
mov    %rax,0x18(%rsp)
lea    0x2e0(%rsp),%rax
mov    %rax,0x20(%rsp)
lea    0x290(%rsp),%rax
mov    %rax,0x28(%rsp)
lea    0x240(%rsp),%rax
mov    %rax,0x30(%rsp)
lea    0x1f0(%rsp),%rax
mov    %rax,0x38(%rsp)
lea    0x1a0(%rsp),%rax
mov    %rax,0x40(%rsp)
lea    0x150(%rsp),%rax
mov    %rax,0x48(%rsp)
lea    0x100(%rsp),%rax
mov    %rax,0x50(%rsp)
lea    0xb0(%rsp),%rax
mov    %rax,0x58(%rsp)
cmp    $0x3,%esi
je     14af <hi_parsenum+0x39f>
mov    %esi,%ebp
cmp    $0x2,%esi
je     14f8 <hi_parsenum+0x3e8>
cmp    $0x1,%ebp
jne    1504 <hi_parsenum+0x3f4>
movslq (%r14),%rax
lea    (%rsp,%rax,8),%rax
add    $0x60,%rax
jmp    163d <hi_parsenum+0x52d>
movslq (%r14),%rax
mov    0x60(%rsp,%rax,8),%rsi
mov    %r13,%rdi
call   1030 <strcat@plt>
lea    0xf05(%rip),%r15
mov    %r13,%rdi
mov    %r15,%rsi
call   1030 <strcat@plt>
lea    0xb28(%rip),%rsi
mov    %r13,%rdi
call   1030 <strcat@plt>
mov    %r13,%rdi
mov    %r15,%rsi
call   1030 <strcat@plt>
movslq 0x4(%r14),%rcx
movslq 0x8(%r14),%rax
jmp    1634 <hi_parsenum+0x524>
movslq (%r14),%rcx
movslq 0x4(%r14),%rax
jmp    1634 <hi_parsenum+0x524>
cmp    $0x4,%ebp
jl     1657 <hi_parsenum+0x547>
mov    %ebp,%ebx
not    %ebx
and    $0x1,%ebx
test   $0x1,%bpl
jne    1560 <hi_parsenum+0x450>
movslq (%r14),%rax
mov    0x60(%rsp,%rax,8),%rsi
mov    %r13,%rdi
call   1030 <strcat@plt>
lea    0xe9a(%rip),%r12
mov    %r13,%rdi
mov    %r12,%rsi
call   1030 <strcat@plt>
lea    -0x1(%rbp),%eax
shr    %eax
lea    0x2568(%rip),%rcx
mov    0x8(%rcx,%rax,8),%rsi
mov    %r13,%rdi
call   1030 <strcat@plt>
mov    %r13,%rdi
mov    %r12,%rsi
call   1030 <strcat@plt>
mov    %rbp,0x8(%rsp)
add    $0xfffffffd,%ebp
cmp    %ebp,%ebx
jge    15dc <hi_parsenum+0x4cc>
mov    0x8(%rsp),%rax
mov    %eax,%r15d
sub    %ebx,%r15d
lea    0xe4d(%rip),%r12
xchg   %ax,%ax
movslq (%r14,%rbx,4),%rax
mov    0x10(%rsp,%rax,8),%rax
movslq 0x4(%r14,%rbx,4),%rcx
mov    (%rax,%rcx,8),%rsi
mov    %r13,%rdi
call   1030 <strcat@plt>
mov    %r13,%rdi
mov    %r12,%rsi
call   1030 <strcat@plt>
mov    %r15d,%eax
shr    $0x1f,%eax
add    %r15d,%eax
sar    %eax
cltq
lea    0x24f7(%rip),%rcx
mov    (%rcx,%rax,8),%rsi
mov    %r13,%rdi
call   1030 <strcat@plt>
mov    %r13,%rdi
mov    %r12,%rsi
call   1030 <strcat@plt>
add    $0x2,%rbx
add    $0xfffffffe,%r15d
cmp    %ebx,%ebp
jg     1580 <hi_parsenum+0x470>
movslq %ebp,%rax
movslq (%r14,%rax,4),%rax
test   %rax,%rax
je     1621 <hi_parsenum+0x511>
mov    0x60(%rsp,%rax,8),%rsi
mov    %r13,%rdi
call   1030 <strcat@plt>
lea    0xdcf(%rip),%r12
mov    %r13,%rdi
mov    %r12,%rsi
call   1030 <strcat@plt>
lea    0x9f2(%rip),%rsi
mov    %r13,%rdi
call   1030 <strcat@plt>
mov    %r13,%rdi
mov    %r12,%rsi
call   1030 <strcat@plt>
mov    0x8(%rsp),%rdx
lea    -0x2(%rdx),%eax
movslq (%r14,%rax,4),%rcx
add    $0xffffffff,%edx
movslq (%r14,%rdx,4),%rax
shl    $0x3,%rax
add    0x10(%rsp,%rcx,8),%rax
mov    (%rax),%rsi
mov    %r13,%rdi
call   1030 <strcat@plt>
lea    0xd7c(%rip),%rsi
mov    %r13,%rdi
call   1030 <strcat@plt>
add    $0x388,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [2 x i8] c" \00"
@.str.1 = [4 x i8] c"s13\00"
@.str.2 = [7 x i8] c"h1 z2r\00"
@.str.3 = [5 x i8] c"l2kh\00"
@.str.4 = [9 x i8] c"k1 r12dd\00"
@.str.5 = [6 x i8] c"1 r1b\00"
@.str.6 = [8 x i8] c"kh1 r1b\00"
@.str.7 = [4 x i8] c"n4l\00"
@.str.8 = [7 x i8] c"p1 d1m\00"
@.str.9 = [9 x i8] c"sh1n 0kh\00"
@__const.hi_parsenum.scales = [10 x i8*] [i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.9, i32 0, i32 0)]
@.str.10 = [8 x i8] c"sh6n 0y\00"
@.str.11 = [3 x i8] c"8k\00"
@.str.12 = [4 x i8] c"d12\00"
@.str.13 = [4 x i8] c"t4n\00"
@.str.14 = [5 x i8] c"ch2r\00"
@.str.15 = [8 x i8] c"p2n 0ch\00"
@.str.16 = [5 x i8] c"chh8\00"
@.str.17 = [4 x i8] c"s2t\00"
@.str.18 = [5 x i8] c"2tth\00"
@.str.19 = [4 x i8] c"n13\00"
@__const.hi_parsenum.units = [10 x i8*] [i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.13, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.15, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.19, i32 0, i32 0)]
@.str.20 = [4 x i8] c"d1s\00"
@.str.21 = [10 x i8] c"gyHy2 r1h\00"
@.str.22 = [7 x i8] c"b2 r1h\00"
@.str.23 = [6 x i8] c"t8 r2\00"
@.str.24 = [9 x i8] c"ch13 d1h\00"
@.str.25 = [11 x i8] c"p1n drHr1h\00"
@.str.26 = [8 x i8] c"s12 l1h\00"
@.str.27 = [9 x i8] c"s1 trHr1\00"
@.str.28 = [14 x i8] c"1tth tth2 r1h\00"
@.str.29 = [7 x i8] c"6n n4s\00"
@__const.hi_parsenum.teens = [10 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.21, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.22, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.23, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.25, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.26, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.27, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.28, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.29, i32 0, i32 0)]
@.str.30 = [4 x i8] c"b4s\00"
@.str.31 = [7 x i8] c"3k k4s\00"
@.str.32 = [6 x i8] c"b2 4s\00"
@.str.33 = [7 x i8] c"t8 y3s\00"
@.str.34 = [9 x i8] c"ch13 b4s\00"
@.str.35 = [10 x i8] c"p1ch ch4s\00"
@.str.36 = [10 x i8] c"chh1b b4s\00"
@.str.37 = [10 x i8] c"s1t t2 4s\00"
@.str.38 = [13 x i8] c"1tth tth2 4s\00"
@.str.39 = [7 x i8] c"6n t4s\00"
@__const.hi_parsenum.twenties = [10 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.30, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.31, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.32, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.33, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.34, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.35, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.36, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.37, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.38, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.39, i32 0, i32 0)]
@.str.40 = [4 x i8] c"t4s\00"
@.str.41 = [7 x i8] c"3k t3s\00"
@.str.42 = [8 x i8] c"b1t t3s\00"
@.str.43 = [7 x i8] c"t9 t3s\00"
@.str.44 = [9 x i8] c"ch13 t3s\00"
@.str.45 = [7 x i8] c"p9 t3s\00"
@.str.46 = [10 x i8] c"chh1t t3s\00"
@.str.47 = [7 x i8] c"s9 t3s\00"
@.str.48 = [8 x i8] c"1dd t3s\00"
@.str.49 = [10 x i8] c"6n t2 l3s\00"
@__const.hi_parsenum.thirties = [10 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.40, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.41, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.42, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.43, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.44, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.45, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.46, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.47, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.48, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.49, i32 0, i32 0)]
@.str.50 = [8 x i8] c"ch2 l3s\00"
@.str.51 = [10 x i8] c"3k t2 l3s\00"
@.str.52 = [10 x i8] c"b1 y2 l3s\00"
@.str.53 = [10 x i8] c"t9 t2 l3s\00"
@.str.54 = [12 x i8] c"ch14 v2 l3s\00"
@.str.55 = [10 x i8] c"p9 t2 l3s\00"
@.str.56 = [12 x i8] c"chh3 y2 l3s\00"
@.str.57 = [10 x i8] c"s9 t2 l3s\00"
@.str.58 = [17 x i8] c"1dd G1000 t2 l3s\00"
@.str.59 = [8 x i8] c"6n ch2s\00"
@__const.hi_parsenum.forties = [10 x i8*] [i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.50, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.51, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.52, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.53, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.54, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.55, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.56, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.57, i32 0, i32 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.58, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.59, i32 0, i32 0)]
@.str.60 = [13 x i8] c"p1 G500 ch2s\00"
@.str.61 = [13 x i8] c"3k kyHy2 v1n\00"
@.str.62 = [7 x i8] c"b2 v1n\00"
@.str.63 = [13 x i8] c"t3r G500 p1n\00"
@.str.64 = [9 x i8] c"ch14 v1n\00"
@.str.65 = [14 x i8] c"p1ch G500 p1n\00"
@.str.66 = [10 x i8] c"chh1p p1n\00"
@.str.67 = [11 x i8] c"s1t t2 v1n\00"
@.str.68 = [13 x i8] c"1tt tth2 v1n\00"
@.str.69 = [9 x i8] c"6n s1tth\00"
@__const.hi_parsenum.fifties = [10 x i8*] [i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.60, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.61, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.62, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.63, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.64, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.65, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.66, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.67, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.68, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.69, i32 0, i32 0)]
@.str.70 = [6 x i8] c"s2tth\00"
@.str.71 = [9 x i8] c"3k s1tth\00"
@.str.72 = [9 x i8] c"b2 s1tth\00"
@.str.73 = [10 x i8] c"t3r s1tth\00"
@.str.74 = [11 x i8] c"ch14 s1tth\00"
@.str.75 = [9 x i8] c"p9 s1tth\00"
@.str.76 = [11 x i8] c"chh2 s1tth\00"
@.str.77 = [11 x i8] c"s1dd s1tth\00"
@.str.78 = [10 x i8] c"1dd s1tth\00"
@.str.79 = [11 x i8] c"6n h1t t1r\00"
@__const.hi_parsenum.sixties = [10 x i8*] [i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.70, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.71, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.72, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.73, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.74, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.75, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.76, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.77, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.78, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.79, i32 0, i32 0)]
@.str.80 = [8 x i8] c"s1t t1r\00"
@.str.81 = [11 x i8] c"3k h1t t1r\00"
@.str.82 = [11 x i8] c"b1 h1t t1r\00"
@.str.83 = [11 x i8] c"t3 h1t t1r\00"
@.str.84 = [13 x i8] c"ch14 h1t t1r\00"
@.str.85 = [16 x i8] c"p1ch chh1t t1r \00"
@.str.86 = [13 x i8] c"chh3 h1t t1r\00"
@.str.87 = [11 x i8] c"s1 t1t t1r\00"
@.str.88 = [12 x i8] c"1 tth1t t1r\00"
@.str.89 = [9 x i8] c"6n y2 s4\00"
@__const.hi_parsenum.seventies = [10 x i8*] [i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.80, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.81, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.82, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.83, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.84, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.85, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.86, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.87, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.88, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.89, i32 0, i32 0)]
@.str.90 = [6 x i8] c"1s s4\00"
@.str.91 = [12 x i8] c"3k kyHy2 s4\00"
@.str.92 = [9 x i8] c"b1 y2 s4\00"
@.str.93 = [9 x i8] c"t3 r2 s4\00"
@.str.94 = [11 x i8] c"ch14 r2 s4\00"
@.str.95 = [12 x i8] c"p1ch ch2 s4\00"
@.str.96 = [11 x i8] c"chh3 y2 s4\00"
@.str.97 = [10 x i8] c"s1t t2 s4\00"
@.str.98 = [12 x i8] c"1tt tth2 s4\00"
@.str.99 = [9 x i8] c"n1 v2 s4\00"
@__const.hi_parsenum.eighties = [10 x i8*] [i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.90, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.91, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.92, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.93, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.94, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.95, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.96, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.97, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.98, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.99, i32 0, i32 0)]
@.str.100 = [7 x i8] c"n1b b8\00"
@.str.101 = [13 x i8] c"3k kyHy2n b8\00"
@.str.102 = [7 x i8] c"b2n b8\00"
@.str.103 = [10 x i8] c"t3 r2n b8\00"
@.str.104 = [12 x i8] c"ch14 r2n b8\00"
@.str.105 = [12 x i8] c"p1n ch2n b8\00"
@.str.106 = [12 x i8] c"chh3 y2n b8\00"
@.str.107 = [11 x i8] c"s1t t2n b8\00"
@.str.108 = [18 x i8] c"1tt G500 tth2n b8\00"
@.str.109 = [12 x i8] c"n3 nHy2n b8\00"
@__const.hi_parsenum.nineties = [10 x i8*] [i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.100, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.101, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.102, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.103, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.104, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.105, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.106, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.107, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.108, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.109, i32 0, i32 0)]
@.str.110 = [8 x i8] c" G3000 \00"
define void @hi_parsenum(i32* %0, i32 %1, i8* %2) {
%4 = alloca i32*
%5 = alloca i32
%6 = alloca i8*
%7 = alloca [10 x i8*]
%8 = alloca [10 x i8*]
%9 = alloca [10 x i8*]
%10 = alloca [10 x i8*]
%11 = alloca [10 x i8*]
%12 = alloca [10 x i8*]
%13 = alloca [10 x i8*]
%14 = alloca [10 x i8*]
%15 = alloca [10 x i8*]
%16 = alloca [10 x i8*]
%17 = alloca [10 x i8*]
%18 = alloca [10 x i8**]
%19 = alloca i32
%20 = alloca i32
store i32* %0, i32** %4
store i32 %1, i32* %5
store i8* %2, i8** %6
%21 = bitcast [10 x i8*]* %7 to i8*
%22 = bitcast [10 x i8*]* %8 to i8*
%23 = bitcast [10 x i8*]* %9 to i8*
%24 = bitcast [10 x i8*]* %10 to i8*
%25 = bitcast [10 x i8*]* %11 to i8*
%26 = bitcast [10 x i8*]* %12 to i8*
%27 = bitcast [10 x i8*]* %13 to i8*
%28 = bitcast [10 x i8*]* %14 to i8*
%29 = bitcast [10 x i8*]* %15 to i8*
%30 = bitcast [10 x i8*]* %16 to i8*
%31 = bitcast [10 x i8*]* %17 to i8*
%32 = getelementptr inbounds [10 x i8**], [10 x i8**]* %18, i64 0, i64 0
%33 = getelementptr inbounds [10 x i8*], [10 x i8*]* %8, i64 0, i64 0
store i8** %33, i8*** %32
%34 = getelementptr inbounds i8**, i8*** %32, i64 1
%35 = getelementptr inbounds [10 x i8*], [10 x i8*]* %9, i64 0, i64 0
store i8** %35, i8*** %34
%36 = getelementptr inbounds i8**, i8*** %34, i64 1
%37 = getelementptr inbounds [10 x i8*], [10 x i8*]* %10, i64 0, i64 0
store i8** %37, i8*** %36
%38 = getelementptr inbounds i8**, i8*** %36, i64 1
%39 = getelementptr inbounds [10 x i8*], [10 x i8*]* %11, i64 0, i64 0
store i8** %39, i8*** %38
%40 = getelementptr inbounds i8**, i8*** %38, i64 1
%41 = getelementptr inbounds [10 x i8*], [10 x i8*]* %12, i64 0, i64 0
store i8** %41, i8*** %40
%42 = getelementptr inbounds i8**, i8*** %40, i64 1
%43 = getelementptr inbounds [10 x i8*], [10 x i8*]* %13, i64 0, i64 0
store i8** %43, i8*** %42
%44 = getelementptr inbounds i8**, i8*** %42, i64 1
%45 = getelementptr inbounds [10 x i8*], [10 x i8*]* %14, i64 0, i64 0
store i8** %45, i8*** %44
%46 = getelementptr inbounds i8**, i8*** %44, i64 1
%47 = getelementptr inbounds [10 x i8*], [10 x i8*]* %15, i64 0, i64 0
store i8** %47, i8*** %46
%48 = getelementptr inbounds i8**, i8*** %46, i64 1
%49 = getelementptr inbounds [10 x i8*], [10 x i8*]* %16, i64 0, i64 0
store i8** %49, i8*** %48
%50 = getelementptr inbounds i8**, i8*** %48, i64 1
%51 = getelementptr inbounds [10 x i8*], [10 x i8*]* %17, i64 0, i64 0
store i8** %51, i8*** %50
store i32 0, i32* %19
store i32 0, i32* %20
%52 = load i32, i32* %5
%53 = icmp eq i32 %52, 1
br i1 %53, label %54, label %67
54: ; preds = %3
%55 = load i8*, i8** %6
%56 = load i32*, i32** %4
%57 = load i32, i32* %19
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds i32, i32* %56, i64 %58
%60 = load i32, i32* %59
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds [10 x i8*], [10 x i8*]* %8, i64 0, i64 %61
%63 = load i8*, i8** %62
%64 = call i32 @strcat(i8* %55, i8* %63)
%65 = load i8*, i8** %6
%66 = call i32 @strcat(i8* %65, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
br label %279
67: ; preds = %3
%68 = load i32, i32* %5
%69 = icmp eq i32 %68, 2
br i1 %69, label %70, label %92
70: ; preds = %67
%71 = load i8*, i8** %6
%72 = load i32*, i32** %4
%73 = load i32, i32* %19
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds i32, i32* %72, i64 %74
%76 = load i32, i32* %75
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [10 x i8**], [10 x i8**]* %18, i64 0, i64 %77
%79 = load i8**, i8*** %78
%80 = load i32*, i32** %4
%81 = load i32, i32* %19
%82 = add nsw i32 %81, 1
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds i32, i32* %80, i64 %83
%85 = load i32, i32* %84
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds i8*, i8** %79, i64 %86
%88 = load i8*, i8** %87
%89 = call i32 @strcat(i8* %71, i8* %88)
%90 = load i8*, i8** %6
%91 = call i32 @strcat(i8* %90, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
br label %278
92: ; preds = %67
%93 = load i32, i32* %5
%94 = icmp eq i32 %93, 3
br i1 %94, label %95, label %137
95: ; preds = %92
%96 = load i8*, i8** %6
%97 = load i32*, i32** %4
%98 = load i32, i32* %19
%99 = sext i32 %98 to i64
%100 = getelementptr inbounds i32, i32* %97, i64 %99
%101 = load i32, i32* %100
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds [10 x i8*], [10 x i8*]* %8, i64 0, i64 %102
%104 = load i8*, i8** %103
%105 = call i32 @strcat(i8* %96, i8* %104)
%106 = load i8*, i8** %6
%107 = call i32 @strcat(i8* %106, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%108 = load i32, i32* %19
%109 = add nsw i32 %108, 1
store i32 %109, i32* %19
%110 = load i8*, i8** %6
%111 = getelementptr inbounds [10 x i8*], [10 x i8*]* %7, i64 0, i64 1
%112 = load i8*, i8** %111
%113 = call i32 @strcat(i8* %110, i8* %112)
%114 = load i8*, i8** %6
%115 = call i32 @strcat(i8* %114, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%116 = load i8*, i8** %6
%117 = load i32*, i32** %4
%118 = load i32, i32* %19
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds i32, i32* %117, i64 %119
%121 = load i32, i32* %120
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds [10 x i8**], [10 x i8**]* %18, i64 0, i64 %122
%124 = load i8**, i8*** %123
%125 = load i32*, i32** %4
%126 = load i32, i32* %19
%127 = add nsw i32 %126, 1
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds i32, i32* %125, i64 %128
%130 = load i32, i32* %129
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds i8*, i8** %124, i64 %131
%133 = load i8*, i8** %132
%134 = call i32 @strcat(i8* %116, i8* %133)
%135 = load i8*, i8** %6
%136 = call i32 @strcat(i8* %135, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
br label %277
137: ; preds = %92
%138 = load i32, i32* %5
%139 = icmp sgt i32 %138, 3
br i1 %139, label %140, label %276
140: ; preds = %137
store i32 0, i32* %20
%141 = load i32, i32* %5
%142 = srem i32 %141, 2
%143 = icmp ne i32 %142, 0
%144 = zext i1 %143 to i64
%145 = select i1 %143, i32 0, i32 1
store i32 %145, i32* %19
%146 = load i32, i32* %19
%147 = icmp ne i32 %146, 0
br i1 %147, label %148, label %175
148: ; preds = %140
%149 = load i8*, i8** %6
%150 = load i32*, i32** %4
%151 = getelementptr inbounds i32, i32* %150, i64 0
%152 = load i32, i32* %151
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds [10 x i8*], [10 x i8*]* %8, i64 0, i64 %153
%155 = load i8*, i8** %154
%156 = call i32 @strcat(i8* %149, i8* %155)
%157 = load i8*, i8** %6
%158 = call i32 @strcat(i8* %157, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%159 = load i32, i32* %20
%160 = add nsw i32 %159, 1
store i32 %160, i32* %20
%161 = load i8*, i8** %6
%162 = load i32, i32* %5
%163 = load i32, i32* %19
%164 = sub nsw i32 %162, %163
%165 = sdiv i32 %164, 2
%166 = add nsw i32 %165, 1
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds [10 x i8*], [10 x i8*]* %7, i64 0, i64 %167
%169 = load i8*, i8** %168
%170 = call i32 @strcat(i8* %161, i8* %169)
%171 = load i8*, i8** %6
%172 = call i32 @strcat(i8* %171, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%173 = load i32, i32* %20
%174 = add nsw i32 %173, 1
store i32 %174, i32* %20
br label %175
175: ; preds = %148, %140
br label %176
176: ; preds = %218, %175
%177 = load i32, i32* %19
%178 = load i32, i32* %5
%179 = sub nsw i32 %178, 3
%180 = icmp slt i32 %177, %179
br i1 %180, label %181, label %221
181: ; preds = %176
%182 = load i8*, i8** %6
%183 = load i32*, i32** %4
%184 = load i32, i32* %19
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds i32, i32* %183, i64 %185
%187 = load i32, i32* %186
%188 = sext i32 %187 to i64
%189 = getelementptr inbounds [10 x i8**], [10 x i8**]* %18, i64 0, i64 %188
%190 = load i8**, i8*** %189
%191 = load i32*, i32** %4
%192 = load i32, i32* %19
%193 = add nsw i32 %192, 1
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds i32, i32* %191, i64 %194
%196 = load i32, i32* %195
%197 = sext i32 %196 to i64
%198 = getelementptr inbounds i8*, i8** %190, i64 %197
%199 = load i8*, i8** %198
%200 = call i32 @strcat(i8* %182, i8* %199)
%201 = load i8*, i8** %6
%202 = call i32 @strcat(i8* %201, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%203 = load i32, i32* %20
%204 = add nsw i32 %203, 1
store i32 %204, i32* %20
%205 = load i8*, i8** %6
%206 = load i32, i32* %5
%207 = load i32, i32* %19
%208 = sub nsw i32 %206, %207
%209 = sdiv i32 %208, 2
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds [10 x i8*], [10 x i8*]* %7, i64 0, i64 %210
%212 = load i8*, i8** %211
%213 = call i32 @strcat(i8* %205, i8* %212)
%214 = load i8*, i8** %6
%215 = call i32 @strcat(i8* %214, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%216 = load i32, i32* %20
%217 = add nsw i32 %216, 1
store i32 %217, i32* %20
br label %218
218: ; preds = %181
%219 = load i32, i32* %19
%220 = add nsw i32 %219, 2
store i32 %220, i32* %19
br label %176
221: ; preds = %176
%222 = load i32*, i32** %4
%223 = load i32, i32* %5
%224 = sub nsw i32 %223, 3
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds i32, i32* %222, i64 %225
%227 = load i32, i32* %226
%228 = icmp ne i32 %227, 0
br i1 %228, label %229, label %253
229: ; preds = %221
%230 = load i8*, i8** %6
%231 = load i32*, i32** %4
%232 = load i32, i32* %5
%233 = sub nsw i32 %232, 3
%234 = sext i32 %233 to i64
%235 = getelementptr inbounds i32, i32* %231, i64 %234
%236 = load i32, i32* %235
%237 = sext i32 %236 to i64
%238 = getelementptr inbounds [10 x i8*], [10 x i8*]* %8, i64 0, i64 %237
%239 = load i8*, i8** %238
%240 = call i32 @strcat(i8* %230, i8* %239)
%241 = load i8*, i8** %6
%242 = call i32 @strcat(i8* %241, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%243 = load i32, i32* %20
%244 = add nsw i32 %243, 1
store i32 %244, i32* %20
%245 = load i8*, i8** %6
%246 = getelementptr inbounds [10 x i8*], [10 x i8*]* %7, i64 0, i64 1
%247 = load i8*, i8** %246
%248 = call i32 @strcat(i8* %245, i8* %247)
%249 = load i8*, i8** %6
%250 = call i32 @strcat(i8* %249, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%251 = load i32, i32* %20
%252 = add nsw i32 %251, 1
store i32 %252, i32* %20
br label %253
253: ; preds = %229, %221
%254 = load i8*, i8** %6
%255 = load i32*, i32** %4
%256 = load i32, i32* %5
%257 = sub nsw i32 %256, 2
%258 = sext i32 %257 to i64
%259 = getelementptr inbounds i32, i32* %255, i64 %258
%260 = load i32, i32* %259
%261 = sext i32 %260 to i64
%262 = getelementptr inbounds [10 x i8**], [10 x i8**]* %18, i64 0, i64 %261
%263 = load i8**, i8*** %262
%264 = load i32*, i32** %4
%265 = load i32, i32* %5
%266 = sub nsw i32 %265, 1
%267 = sext i32 %266 to i64
%268 = getelementptr inbounds i32, i32* %264, i64 %267
%269 = load i32, i32* %268
%270 = sext i32 %269 to i64
%271 = getelementptr inbounds i8*, i8** %263, i64 %270
%272 = load i8*, i8** %271
%273 = call i32 @strcat(i8* %254, i8* %272)
%274 = load i8*, i8** %6
%275 = call i32 @strcat(i8* %274, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
br label %276
276: ; preds = %253, %137
br label %277
277: ; preds = %276, %95
br label %278
278: ; preds = %277, %70
br label %279
279: ; preds = %278, %54
ret void
}

LLVM IR (-O2):
@.str = [2 x i8] c" \00"
@.str.1 = [4 x i8] c"s13\00"
@.str.2 = [7 x i8] c"h1 z2r\00"
@.str.3 = [5 x i8] c"l2kh\00"
@.str.4 = [9 x i8] c"k1 r12dd\00"
@.str.5 = [6 x i8] c"1 r1b\00"
@.str.6 = [8 x i8] c"kh1 r1b\00"
@.str.7 = [4 x i8] c"n4l\00"
@.str.8 = [7 x i8] c"p1 d1m\00"
@.str.9 = [9 x i8] c"sh1n 0kh\00"
@__const.hi_parsenum.scales = [10 x i8*] [i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.9, i32 0, i32 0)]
@.str.10 = [8 x i8] c"sh6n 0y\00"
@.str.11 = [3 x i8] c"8k\00"
@.str.12 = [4 x i8] c"d12\00"
@.str.13 = [4 x i8] c"t4n\00"
@.str.14 = [5 x i8] c"ch2r\00"
@.str.15 = [8 x i8] c"p2n 0ch\00"
@.str.16 = [5 x i8] c"chh8\00"
@.str.17 = [4 x i8] c"s2t\00"
@.str.18 = [5 x i8] c"2tth\00"
@.str.19 = [4 x i8] c"n13\00"
@__const.hi_parsenum.units = [10 x i8*] [i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.13, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.15, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.19, i32 0, i32 0)]
@.str.20 = [4 x i8] c"d1s\00"
@.str.21 = [10 x i8] c"gyHy2 r1h\00"
@.str.22 = [7 x i8] c"b2 r1h\00"
@.str.23 = [6 x i8] c"t8 r2\00"
@.str.24 = [9 x i8] c"ch13 d1h\00"
@.str.25 = [11 x i8] c"p1n drHr1h\00"
@.str.26 = [8 x i8] c"s12 l1h\00"
@.str.27 = [9 x i8] c"s1 trHr1\00"
@.str.28 = [14 x i8] c"1tth tth2 r1h\00"
@.str.29 = [7 x i8] c"6n n4s\00"
@__const.hi_parsenum.teens = [10 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.21, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.22, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.23, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.25, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.26, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.27, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.28, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.29, i32 0, i32 0)]
@.str.30 = [4 x i8] c"b4s\00"
@.str.31 = [7 x i8] c"3k k4s\00"
@.str.32 = [6 x i8] c"b2 4s\00"
@.str.33 = [7 x i8] c"t8 y3s\00"
@.str.34 = [9 x i8] c"ch13 b4s\00"
@.str.35 = [10 x i8] c"p1ch ch4s\00"
@.str.36 = [10 x i8] c"chh1b b4s\00"
@.str.37 = [10 x i8] c"s1t t2 4s\00"
@.str.38 = [13 x i8] c"1tth tth2 4s\00"
@.str.39 = [7 x i8] c"6n t4s\00"
@__const.hi_parsenum.twenties = [10 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.30, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.31, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.32, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.33, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.34, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.35, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.36, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.37, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.38, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.39, i32 0, i32 0)]
@.str.40 = [4 x i8] c"t4s\00"
@.str.41 = [7 x i8] c"3k t3s\00"
@.str.42 = [8 x i8] c"b1t t3s\00"
@.str.43 = [7 x i8] c"t9 t3s\00"
@.str.44 = [9 x i8] c"ch13 t3s\00"
@.str.45 = [7 x i8] c"p9 t3s\00"
@.str.46 = [10 x i8] c"chh1t t3s\00"
@.str.47 = [7 x i8] c"s9 t3s\00"
@.str.48 = [8 x i8] c"1dd t3s\00"
@.str.49 = [10 x i8] c"6n t2 l3s\00"
@__const.hi_parsenum.thirties = [10 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.40, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.41, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.42, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.43, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.44, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.45, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.46, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.47, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.48, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.49, i32 0, i32 0)]
@.str.50 = [8 x i8] c"ch2 l3s\00"
@.str.51 = [10 x i8] c"3k t2 l3s\00"
@.str.52 = [10 x i8] c"b1 y2 l3s\00"
@.str.53 = [10 x i8] c"t9 t2 l3s\00"
@.str.54 = [12 x i8] c"ch14 v2 l3s\00"
@.str.55 = [10 x i8] c"p9 t2 l3s\00"
@.str.56 = [12 x i8] c"chh3 y2 l3s\00"
@.str.57 = [10 x i8] c"s9 t2 l3s\00"
@.str.58 = [17 x i8] c"1dd G1000 t2 l3s\00"
@.str.59 = [8 x i8] c"6n ch2s\00"
@__const.hi_parsenum.forties = [10 x i8*] [i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.50, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.51, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.52, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.53, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.54, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.55, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.56, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.57, i32 0, i32 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.58, i32 0, i32 0), i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.59, i32 0, i32 0)]
@.str.60 = [13 x i8] c"p1 G500 ch2s\00"
@.str.61 = [13 x i8] c"3k kyHy2 v1n\00"
@.str.62 = [7 x i8] c"b2 v1n\00"
@.str.63 = [13 x i8] c"t3r G500 p1n\00"
@.str.64 = [9 x i8] c"ch14 v1n\00"
@.str.65 = [14 x i8] c"p1ch G500 p1n\00"
@.str.66 = [10 x i8] c"chh1p p1n\00"
@.str.67 = [11 x i8] c"s1t t2 v1n\00"
@.str.68 = [13 x i8] c"1tt tth2 v1n\00"
@.str.69 = [9 x i8] c"6n s1tth\00"
@__const.hi_parsenum.fifties = [10 x i8*] [i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.60, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.61, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.62, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.63, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.64, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.65, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.66, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.67, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.68, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.69, i32 0, i32 0)]
@.str.70 = [6 x i8] c"s2tth\00"
@.str.71 = [9 x i8] c"3k s1tth\00"
@.str.72 = [9 x i8] c"b2 s1tth\00"
@.str.73 = [10 x i8] c"t3r s1tth\00"
@.str.74 = [11 x i8] c"ch14 s1tth\00"
@.str.75 = [9 x i8] c"p9 s1tth\00"
@.str.76 = [11 x i8] c"chh2 s1tth\00"
@.str.77 = [11 x i8] c"s1dd s1tth\00"
@.str.78 = [10 x i8] c"1dd s1tth\00"
@.str.79 = [11 x i8] c"6n h1t t1r\00"
@__const.hi_parsenum.sixties = [10 x i8*] [i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.70, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.71, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.72, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.73, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.74, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.75, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.76, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.77, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.78, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.79, i32 0, i32 0)]
@.str.80 = [8 x i8] c"s1t t1r\00"
@.str.81 = [11 x i8] c"3k h1t t1r\00"
@.str.82 = [11 x i8] c"b1 h1t t1r\00"
@.str.83 = [11 x i8] c"t3 h1t t1r\00"
@.str.84 = [13 x i8] c"ch14 h1t t1r\00"
@.str.85 = [16 x i8] c"p1ch chh1t t1r \00"
@.str.86 = [13 x i8] c"chh3 h1t t1r\00"
@.str.87 = [11 x i8] c"s1 t1t t1r\00"
@.str.88 = [12 x i8] c"1 tth1t t1r\00"
@.str.89 = [9 x i8] c"6n y2 s4\00"
@__const.hi_parsenum.seventies = [10 x i8*] [i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.80, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.81, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.82, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.83, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.84, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.85, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.86, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.87, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.88, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.89, i32 0, i32 0)]
@.str.90 = [6 x i8] c"1s s4\00"
@.str.91 = [12 x i8] c"3k kyHy2 s4\00"
@.str.92 = [9 x i8] c"b1 y2 s4\00"
@.str.93 = [9 x i8] c"t3 r2 s4\00"
@.str.94 = [11 x i8] c"ch14 r2 s4\00"
@.str.95 = [12 x i8] c"p1ch ch2 s4\00"
@.str.96 = [11 x i8] c"chh3 y2 s4\00"
@.str.97 = [10 x i8] c"s1t t2 s4\00"
@.str.98 = [12 x i8] c"1tt tth2 s4\00"
@.str.99 = [9 x i8] c"n1 v2 s4\00"
@__const.hi_parsenum.eighties = [10 x i8*] [i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.90, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.91, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.92, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.93, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.94, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.95, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.96, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.97, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.98, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.99, i32 0, i32 0)]
@.str.100 = [7 x i8] c"n1b b8\00"
@.str.101 = [13 x i8] c"3k kyHy2n b8\00"
@.str.102 = [7 x i8] c"b2n b8\00"
@.str.103 = [10 x i8] c"t3 r2n b8\00"
@.str.104 = [12 x i8] c"ch14 r2n b8\00"
@.str.105 = [12 x i8] c"p1n ch2n b8\00"
@.str.106 = [12 x i8] c"chh3 y2n b8\00"
@.str.107 = [11 x i8] c"s1t t2n b8\00"
@.str.108 = [18 x i8] c"1tt G500 tth2n b8\00"
@.str.109 = [12 x i8] c"n3 nHy2n b8\00"
@__const.hi_parsenum.nineties = [10 x i8*] [i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.100, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.101, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.102, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.103, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.104, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.105, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.106, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.107, i32 0, i32 0), i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.108, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.109, i32 0, i32 0)]
@.str.110 = [8 x i8] c" G3000 \00"
define void @hi_parsenum(i32* nocapture %0, i32 %1, i8* %2) {
%4 = alloca [10 x i8*]
%5 = alloca [10 x i8*]
%6 = alloca [10 x i8*]
%7 = alloca [10 x i8*]
%8 = alloca [10 x i8*]
%9 = alloca [10 x i8*]
%10 = alloca [10 x i8*]
%11 = alloca [10 x i8*]
%12 = alloca [10 x i8*]
%13 = alloca [10 x i8*]
%14 = alloca [10 x i8**]
%15 = bitcast [10 x i8*]* %4 to i8*
%16 = bitcast [10 x i8*]* %5 to i8*
%17 = bitcast [10 x i8*]* %6 to i8*
%18 = bitcast [10 x i8*]* %7 to i8*
%19 = bitcast [10 x i8*]* %8 to i8*
%20 = bitcast [10 x i8*]* %9 to i8*
%21 = bitcast [10 x i8*]* %10 to i8*
%22 = bitcast [10 x i8*]* %11 to i8*
%23 = bitcast [10 x i8*]* %12 to i8*
%24 = bitcast [10 x i8*]* %13 to i8*
%25 = bitcast [10 x i8**]* %14 to i8*
%26 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 0
%27 = getelementptr inbounds [10 x i8*], [10 x i8*]* %4, i64 0, i64 0
store i8** %27, i8*** %26
%28 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 1
%29 = getelementptr inbounds [10 x i8*], [10 x i8*]* %5, i64 0, i64 0
store i8** %29, i8*** %28
%30 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 2
%31 = getelementptr inbounds [10 x i8*], [10 x i8*]* %6, i64 0, i64 0
store i8** %31, i8*** %30
%32 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 3
%33 = getelementptr inbounds [10 x i8*], [10 x i8*]* %7, i64 0, i64 0
store i8** %33, i8*** %32
%34 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 4
%35 = getelementptr inbounds [10 x i8*], [10 x i8*]* %8, i64 0, i64 0
store i8** %35, i8*** %34
%36 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 5
%37 = getelementptr inbounds [10 x i8*], [10 x i8*]* %9, i64 0, i64 0
store i8** %37, i8*** %36
%38 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 6
%39 = getelementptr inbounds [10 x i8*], [10 x i8*]* %10, i64 0, i64 0
store i8** %39, i8*** %38
%40 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 7
%41 = getelementptr inbounds [10 x i8*], [10 x i8*]* %11, i64 0, i64 0
store i8** %41, i8*** %40
%42 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 8
%43 = getelementptr inbounds [10 x i8*], [10 x i8*]* %12, i64 0, i64 0
store i8** %43, i8*** %42
%44 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 9
%45 = getelementptr inbounds [10 x i8*], [10 x i8*]* %13, i64 0, i64 0
store i8** %45, i8*** %44
switch i32 %1, label %77 [
i32 1, label %46
i32 2, label %50
i32 3, label %59
]
46: ; preds = %3
%47 = load i32, i32* %0
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds [10 x i8*], [10 x i8*]* %4, i64 0, i64 %48
br label %158
50: ; preds = %3
%51 = load i32, i32* %0
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 %52
%54 = load i8**, i8*** %53
%55 = getelementptr inbounds i32, i32* %0, i64 1
%56 = load i32, i32* %55
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds i8*, i8** %54, i64 %57
br label %158
59: ; preds = %3
%60 = load i32, i32* %0
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds [10 x i8*], [10 x i8*]* %4, i64 0, i64 %61
%63 = load i8*, i8** %62
%64 = call i32 @strcat(i8* %2, i8* %63)
%65 = call i32 @strcat(i8* %2, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%66 = call i32 @strcat(i8* %2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
%67 = call i32 @strcat(i8* %2, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%68 = getelementptr inbounds i32, i32* %0, i64 1
%69 = load i32, i32* %68
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 %70
%72 = load i8**, i8*** %71
%73 = getelementptr inbounds i32, i32* %0, i64 2
%74 = load i32, i32* %73
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds i8*, i8** %72, i64 %75
br label %158
77: ; preds = %3
%78 = icmp sgt i32 %1, 3
br i1 %78, label %79, label %163
79: ; preds = %77
%80 = and i32 %1, 1
%81 = xor i32 %80, 1
%82 = icmp eq i32 %81, 0
br i1 %82, label %98, label %83
83: ; preds = %79
%84 = load i32, i32* %0
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds [10 x i8*], [10 x i8*]* %4, i64 0, i64 %85
%87 = load i8*, i8** %86
%88 = call i32 @strcat(i8* %2, i8* %87)
%89 = call i32 @strcat(i8* %2, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%90 = add nsw i32 %1, -1
%91 = lshr i32 %90, 1
%92 = add nuw nsw i32 %91, 1
%93 = zext i32 %92 to i64
%94 = getelementptr inbounds [10 x i8*], [10 x i8*]* @__const.hi_parsenum.scales, i64 0, i64 %93
%95 = load i8*, i8** %94
%96 = call i32 @strcat(i8* %2, i8* %95)
%97 = call i32 @strcat(i8* %2, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
br label %98
98: ; preds = %83, %79
%99 = add nsw i32 %1, -3
%100 = icmp slt i32 %81, %99
br i1 %100, label %101, label %131
101: ; preds = %98
%102 = and i32 %1, 1
%103 = xor i32 %102, 1
%104 = zext i32 %103 to i64
br label %105
105: ; preds = %101, %105
%106 = phi i64 [ %104, %101 ], [ %128, %105 ]
%107 = getelementptr inbounds i32, i32* %0, i64 %106
%108 = load i32, i32* %107
%109 = sext i32 %108 to i64
%110 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 %109
%111 = load i8**, i8*** %110
%112 = add nuw nsw i64 %106, 1
%113 = getelementptr inbounds i32, i32* %0, i64 %112
%114 = load i32, i32* %113
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds i8*, i8** %111, i64 %115
%117 = load i8*, i8** %116
%118 = call i32 @strcat(i8* %2, i8* %117)
%119 = call i32 @strcat(i8* %2, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%120 = trunc i64 %106 to i32
%121 = sub nsw i32 %1, %120
%122 = sdiv i32 %121, 2
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds [10 x i8*], [10 x i8*]* @__const.hi_parsenum.scales, i64 0, i64 %123
%125 = load i8*, i8** %124
%126 = call i32 @strcat(i8* %2, i8* %125)
%127 = call i32 @strcat(i8* %2, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%128 = add nuw i64 %106, 2
%129 = trunc i64 %128 to i32
%130 = icmp sgt i32 %99, %129
br i1 %130, label %105, label %131
131: ; preds = %105, %98
%132 = sext i32 %99 to i64
%133 = getelementptr inbounds i32, i32* %0, i64 %132
%134 = load i32, i32* %133
%135 = icmp eq i32 %134, 0
br i1 %135, label %144, label %136
136: ; preds = %131
%137 = sext i32 %134 to i64
%138 = getelementptr inbounds [10 x i8*], [10 x i8*]* %4, i64 0, i64 %137
%139 = load i8*, i8** %138
%140 = call i32 @strcat(i8* %2, i8* %139)
%141 = call i32 @strcat(i8* %2, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
%142 = call i32 @strcat(i8* %2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
%143 = call i32 @strcat(i8* %2, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
br label %144
144: ; preds = %136, %131
%145 = add nsw i32 %1, -2
%146 = zext i32 %145 to i64
%147 = getelementptr inbounds i32, i32* %0, i64 %146
%148 = load i32, i32* %147
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds [10 x i8**], [10 x i8**]* %14, i64 0, i64 %149
%151 = load i8**, i8*** %150
%152 = add nsw i32 %1, -1
%153 = zext i32 %152 to i64
%154 = getelementptr inbounds i32, i32* %0, i64 %153
%155 = load i32, i32* %154
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds i8*, i8** %151, i64 %156
br label %158
158: ; preds = %46, %59, %144, %50
%159 = phi i8** [ %58, %50 ], [ %157, %144 ], [ %76, %59 ], [ %49, %46 ]
%160 = load i8*, i8** %159
%161 = call i32 @strcat(i8* %2, i8* %160)
%162 = call i32 @strcat(i8* %2, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.110, i64 0, i64 0))
br label %163
163: ; preds = %158, %77
ret void
}