#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 atoi(char *);
int /*<<< orphan*/ printf(char *);
void num_to_word(char *triple, int place, int l) {
  int a, b, c, d, cnt, count = 0;
  a = b = c = -1;
  char augged[l];
  while (count < l) {
    for (cnt = 0; (augged[cnt] = triple[cnt++]);)
      ;
    augged[count + 1] = 0;
    if (count == 0)
      a = atoi(&augged[count]);
    if (count == 1)
      b = atoi(&augged[count]);
    if (count == 2)
      c = atoi(&augged[count]);
    ++count;
  }
  if (l == 1) {
    c = a;
    a = -1;
    b = -1;
  }
  if (l == 2) {
    c = b;
    b = a;
    a = -1;
  }
  if (a == 1)
    printf("one ");
  if (a == 2)
    printf("two ");
  if (a == 3)
    printf("three ");
  if (a == 4)
    printf("four ");
  if (a == 5)
    printf("five ");
  if (a == 6)
    printf("six ");
  if (a == 7)
    printf("seven");
  if (a == 8)
    printf("eight");
  if (a == 9)
    printf("nine ");
  if (l == 3 && a > 0)
    printf("hundred ");
  if (b == 1 && c == 0)
    printf("ten ");
  if (b == 1 && c == 1)
    printf("eleven ");
  if (b == 1 && c == 2)
    printf("twelve ");
  if (b == 1 && c == 3)
    printf("thirteen ");
  if (b == 1 && c == 4)
    printf("fourteen ");
  if (b == 1 && c == 5)
    printf("fifteen ");
  if (b == 1 && c == 6)
    printf("sixteen ");
  if (b == 1 && c == 7)
    printf("seventeen ");
  if (b == 1 && c == 8)
    printf("eighteen ");
  if (b == 1 && c == 9)
    printf("nineteen ");
  if (b == 2)
    printf("twenty ");
  if (b == 3)
    printf("thirty ");
  if (b == 4)
    printf("fourty ");
  if (b == 5)
    printf("fifty ");
  if (b == 6)
    printf("sixty ");
  if (b == 7)
    printf("seventy ");
  if (b == 8)
    printf("eighty ");
  if (b == 9)
    printf("ninety ");
  if (c == 1 && b != 1)
    printf("one ");
  if (c == 2 && b != 1)
    printf("two ");
  if (c == 3 && b != 1)
    printf("three ");
  if (c == 4 && b != 1)
    printf("four ");
  if (c == 5 && b != 1)
    printf("five ");
  if (c == 6 && b != 1)
    printf("six ");
  if (c == 7 && b != 1)
    printf("seven ");
  if (c == 8 && b != 1)
    printf("eight ");
  if (c == 9 && b != 1)
    printf("nine ");
  d = 0;
  if (a < 0)
    a = 0;
  if (b < 0)
    a = 0;
  if (c < 0)
    a = 0;
  d = a + b + c;
  if (place < 7 && place > 3 && d > -1)
    printf("thousand ");
  if (place < 10 && place > 6 && d > -1)
    printf("million ");
  if (place < 13 && place > 9 && d > -1)
    printf("billion ");
  if (place < 16 && place > 12 && d > -1)
    printf("trillion ");
  if (place < 19 && place > 15 && d > -1)
    printf("quadrillion ");
  if (place < 22 && place > 18 && d > -1)
    printf("quintillion ");
  if (place < 25 && place > 21 && d > -1)
    printf("sextillion ");
  if (place < 28 && place > 24 && d > -1)
    printf("septillion ");
  a = b = c = -1;
}


x86 assembly (clang, -O0):
<num_to_word>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0xffffffff,-0x1c(%rbp)
movl   $0xffffffff,-0x18(%rbp)
movl   $0xffffffff,-0x14(%rbp)
mov    -0x10(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0x30(%rbp)
mov    %rax,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x40(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    122a <num_to_word+0x10a>
movl   $0x0,-0x24(%rbp)
mov    -0x40(%rbp),%rcx
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%edx
mov    %edx,%esi
add    $0x1,%esi
mov    %esi,-0x24(%rbp)
movslq %edx,%rdx
mov    (%rax,%rdx,1),%al
movslq -0x24(%rbp),%rdx
mov    %al,(%rcx,%rdx,1)
cmp    $0x0,%al
je     11b4 <num_to_word+0x94>
jmp    1187 <num_to_word+0x67>
mov    -0x40(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
cmpl   $0x0,-0x28(%rbp)
jne    11e2 <num_to_word+0xc2>
mov    -0x40(%rbp),%rdi
movslq -0x28(%rbp),%rax
add    %rax,%rdi
call   1040 <atoi@plt>
mov    %eax,-0x14(%rbp)
cmpl   $0x1,-0x28(%rbp)
jne    11ff <num_to_word+0xdf>
mov    -0x40(%rbp),%rdi
movslq -0x28(%rbp),%rax
add    %rax,%rdi
call   1040 <atoi@plt>
mov    %eax,-0x18(%rbp)
cmpl   $0x2,-0x28(%rbp)
jne    121c <num_to_word+0xfc>
mov    -0x40(%rbp),%rdi
movslq -0x28(%rbp),%rax
add    %rax,%rdi
call   1040 <atoi@plt>
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1174 <num_to_word+0x54>
cmpl   $0x1,-0x10(%rbp)
jne    1248 <num_to_word+0x128>
mov    -0x14(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movl   $0xffffffff,-0x14(%rbp)
movl   $0xffffffff,-0x18(%rbp)
cmpl   $0x2,-0x10(%rbp)
jne    1265 <num_to_word+0x145>
mov    -0x18(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
movl   $0xffffffff,-0x14(%rbp)
cmpl   $0x1,-0x14(%rbp)
jne    127b <num_to_word+0x15b>
lea    0xd8a(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x2,-0x14(%rbp)
jne    1291 <num_to_word+0x171>
lea    0xd79(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x3,-0x14(%rbp)
jne    12a7 <num_to_word+0x187>
lea    0xd68(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x4,-0x14(%rbp)
jne    12bd <num_to_word+0x19d>
lea    0xd59(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x5,-0x14(%rbp)
jne    12d3 <num_to_word+0x1b3>
lea    0xd49(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x6,-0x14(%rbp)
jne    12e9 <num_to_word+0x1c9>
lea    0xd39(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x7,-0x14(%rbp)
jne    12ff <num_to_word+0x1df>
lea    0xd28(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x8,-0x14(%rbp)
jne    1315 <num_to_word+0x1f5>
lea    0xd18(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x9,-0x14(%rbp)
jne    132b <num_to_word+0x20b>
lea    0xd08(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x3,-0x10(%rbp)
jne    134b <num_to_word+0x22b>
cmpl   $0x0,-0x14(%rbp)
jle    134b <num_to_word+0x22b>
lea    0xcee(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1,-0x18(%rbp)
jne    136b <num_to_word+0x24b>
cmpl   $0x0,-0x1c(%rbp)
jne    136b <num_to_word+0x24b>
lea    0xcd7(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1,-0x18(%rbp)
jne    138b <num_to_word+0x26b>
cmpl   $0x1,-0x1c(%rbp)
jne    138b <num_to_word+0x26b>
lea    0xcbc(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1,-0x18(%rbp)
jne    13ab <num_to_word+0x28b>
cmpl   $0x2,-0x1c(%rbp)
jne    13ab <num_to_word+0x28b>
lea    0xca4(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1,-0x18(%rbp)
jne    13cb <num_to_word+0x2ab>
cmpl   $0x3,-0x1c(%rbp)
jne    13cb <num_to_word+0x2ab>
lea    0xc8c(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1,-0x18(%rbp)
jne    13eb <num_to_word+0x2cb>
cmpl   $0x4,-0x1c(%rbp)
jne    13eb <num_to_word+0x2cb>
lea    0xc76(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1,-0x18(%rbp)
jne    140b <num_to_word+0x2eb>
cmpl   $0x5,-0x1c(%rbp)
jne    140b <num_to_word+0x2eb>
lea    0xc60(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1,-0x18(%rbp)
jne    142b <num_to_word+0x30b>
cmpl   $0x6,-0x1c(%rbp)
jne    142b <num_to_word+0x30b>
lea    0xc49(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1,-0x18(%rbp)
jne    144b <num_to_word+0x32b>
cmpl   $0x7,-0x1c(%rbp)
jne    144b <num_to_word+0x32b>
lea    0xc32(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1,-0x18(%rbp)
jne    146b <num_to_word+0x34b>
cmpl   $0x8,-0x1c(%rbp)
jne    146b <num_to_word+0x34b>
lea    0xc1d(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1,-0x18(%rbp)
jne    148b <num_to_word+0x36b>
cmpl   $0x9,-0x1c(%rbp)
jne    148b <num_to_word+0x36b>
lea    0xc07(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x2,-0x18(%rbp)
jne    14a1 <num_to_word+0x381>
lea    0xbfb(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x3,-0x18(%rbp)
jne    14b7 <num_to_word+0x397>
lea    0xbed(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x4,-0x18(%rbp)
jne    14cd <num_to_word+0x3ad>
lea    0xbdf(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x5,-0x18(%rbp)
jne    14e3 <num_to_word+0x3c3>
lea    0xbd1(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x6,-0x18(%rbp)
jne    14f9 <num_to_word+0x3d9>
lea    0xbc2(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x7,-0x18(%rbp)
jne    150f <num_to_word+0x3ef>
lea    0xbb3(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x8,-0x18(%rbp)
jne    1525 <num_to_word+0x405>
lea    0xba6(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x9,-0x18(%rbp)
jne    153b <num_to_word+0x41b>
lea    0xb98(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1,-0x1c(%rbp)
jne    155b <num_to_word+0x43b>
cmpl   $0x1,-0x18(%rbp)
je     155b <num_to_word+0x43b>
lea    0xaaa(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x2,-0x1c(%rbp)
jne    157b <num_to_word+0x45b>
cmpl   $0x1,-0x18(%rbp)
je     157b <num_to_word+0x45b>
lea    0xa8f(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x3,-0x1c(%rbp)
jne    159b <num_to_word+0x47b>
cmpl   $0x1,-0x18(%rbp)
je     159b <num_to_word+0x47b>
lea    0xa74(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x4,-0x1c(%rbp)
jne    15bb <num_to_word+0x49b>
cmpl   $0x1,-0x18(%rbp)
je     15bb <num_to_word+0x49b>
lea    0xa5b(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x5,-0x1c(%rbp)
jne    15db <num_to_word+0x4bb>
cmpl   $0x1,-0x18(%rbp)
je     15db <num_to_word+0x4bb>
lea    0xa41(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x6,-0x1c(%rbp)
jne    15fb <num_to_word+0x4db>
cmpl   $0x1,-0x18(%rbp)
je     15fb <num_to_word+0x4db>
lea    0xa27(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x7,-0x1c(%rbp)
jne    161b <num_to_word+0x4fb>
cmpl   $0x1,-0x18(%rbp)
je     161b <num_to_word+0x4fb>
lea    0xac0(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x8,-0x1c(%rbp)
jne    163b <num_to_word+0x51b>
cmpl   $0x1,-0x18(%rbp)
je     163b <num_to_word+0x51b>
lea    0xaa7(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x9,-0x1c(%rbp)
jne    165b <num_to_word+0x53b>
cmpl   $0x1,-0x18(%rbp)
je     165b <num_to_word+0x53b>
lea    0x9d8(%rip),%rdi
call   1030 <printf@plt>
movl   $0x0,-0x20(%rbp)
cmpl   $0x0,-0x14(%rbp)
jge    1673 <num_to_word+0x553>
movl   $0x0,-0x14(%rbp)
cmpl   $0x0,-0x18(%rbp)
jge    1684 <num_to_word+0x564>
movl   $0x0,-0x14(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jge    1695 <num_to_word+0x575>
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x20(%rbp)
cmpl   $0x7,-0xc(%rbp)
jge    16cb <num_to_word+0x5ab>
cmpl   $0x3,-0xc(%rbp)
jle    16cb <num_to_word+0x5ab>
cmpl   $0xffffffff,-0x20(%rbp)
jle    16cb <num_to_word+0x5ab>
lea    0xa1e(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0xa,-0xc(%rbp)
jge    16f5 <num_to_word+0x5d5>
cmpl   $0x6,-0xc(%rbp)
jle    16f5 <num_to_word+0x5d5>
cmpl   $0xffffffff,-0x20(%rbp)
jle    16f5 <num_to_word+0x5d5>
lea    0x9fe(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0xd,-0xc(%rbp)
jge    171f <num_to_word+0x5ff>
cmpl   $0x9,-0xc(%rbp)
jle    171f <num_to_word+0x5ff>
cmpl   $0xffffffff,-0x20(%rbp)
jle    171f <num_to_word+0x5ff>
lea    0x9dd(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x10,-0xc(%rbp)
jge    1749 <num_to_word+0x629>
cmpl   $0xc,-0xc(%rbp)
jle    1749 <num_to_word+0x629>
cmpl   $0xffffffff,-0x20(%rbp)
jle    1749 <num_to_word+0x629>
lea    0x9bc(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x13,-0xc(%rbp)
jge    1773 <num_to_word+0x653>
cmpl   $0xf,-0xc(%rbp)
jle    1773 <num_to_word+0x653>
cmpl   $0xffffffff,-0x20(%rbp)
jle    1773 <num_to_word+0x653>
lea    0x99c(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x16,-0xc(%rbp)
jge    179d <num_to_word+0x67d>
cmpl   $0x12,-0xc(%rbp)
jle    179d <num_to_word+0x67d>
cmpl   $0xffffffff,-0x20(%rbp)
jle    179d <num_to_word+0x67d>
lea    0x97f(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x19,-0xc(%rbp)
jge    17c7 <num_to_word+0x6a7>
cmpl   $0x15,-0xc(%rbp)
jle    17c7 <num_to_word+0x6a7>
cmpl   $0xffffffff,-0x20(%rbp)
jle    17c7 <num_to_word+0x6a7>
lea    0x962(%rip),%rdi
call   1030 <printf@plt>
cmpl   $0x1c,-0xc(%rbp)
jge    17f1 <num_to_word+0x6d1>
cmpl   $0x18,-0xc(%rbp)
jle    17f1 <num_to_word+0x6d1>
cmpl   $0xffffffff,-0x20(%rbp)
jle    17f1 <num_to_word+0x6d1>
lea    0x944(%rip),%rdi
call   1030 <printf@plt>
movl   $0xffffffff,-0x1c(%rbp)
movl   $0xffffffff,-0x18(%rbp)
movl   $0xffffffff,-0x14(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rsp
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<num_to_word>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %rsi,-0x48(%rbp)
mov    %edx,%ebx
mov    %rsp,%r13
lea    0xf(%rbx),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r13
mov    %r13,%rsp
mov    $0xffffffff,%r15d
mov    $0xffffffff,%eax
mov    %rax,-0x30(%rbp)
mov    $0xffffffff,%eax
mov    %rax,-0x38(%rbp)
mov    %edx,-0x3c(%rbp)
test   %edx,%edx
jle    120f <num_to_word+0xef>
mov    %rdi,%r14
lea    0x2(%r13),%rax
mov    %rax,-0x58(%rbp)
lea    0x1(%r13),%rax
mov    %rax,-0x50(%rbp)
mov    $0xffffffff,%eax
mov    %rax,-0x38(%rbp)
xor    %r12d,%r12d
mov    $0xffffffff,%eax
mov    %rax,-0x30(%rbp)
mov    $0xffffffff,%r15d
jmp    11b1 <num_to_word+0x91>
nopl   0x0(%rax,%rax,1)
mov    -0x58(%rbp),%rdi
call   1040 <atoi@plt>
mov    %eax,%r15d
cmp    %rbx,%r12
je     120f <num_to_word+0xef>
mov    %r12,%rax
mov    $0x1,%ecx
nopl   0x0(%rax)
movzbl -0x1(%r14,%rcx,1),%edx
mov    %dl,0x0(%r13,%rcx,1)
add    $0x1,%rcx
test   %dl,%dl
jne    11c0 <num_to_word+0xa0>
lea    0x1(%rax),%r12
movb   $0x0,0x1(%r13,%rax,1)
cmp    $0x2,%eax
je     11a0 <num_to_word+0x80>
cmp    $0x1,%eax
je     1200 <num_to_word+0xe0>
test   %eax,%eax
jne    11ac <num_to_word+0x8c>
mov    %r13,%rdi
call   1040 <atoi@plt>
mov    %rax,-0x38(%rbp)
jmp    11ac <num_to_word+0x8c>
nopl   0x0(%rax)
mov    -0x50(%rbp),%rdi
call   1040 <atoi@plt>
mov    %rax,-0x30(%rbp)
jmp    11ac <num_to_word+0x8c>
mov    -0x3c(%rbp),%ebx
cmp    $0x1,%ebx
mov    %r15d,%r12d
mov    -0x38(%rbp),%r14
cmove  %r14d,%r12d
mov    -0x30(%rbp),%r13
mov    $0xffffffff,%eax
cmove  %eax,%r13d
cmove  %eax,%r14d
cmp    $0x2,%ebx
cmove  %r13d,%r12d
cmove  %r14d,%r13d
cmove  %eax,%r14d
lea    -0x1(%r14),%eax
cmp    $0x8,%eax
ja     125e <num_to_word+0x13e>
cltq
lea    0xeea(%rip),%rcx
movslq (%rcx,%rax,4),%rdi
add    %rcx,%rdi
call   1030 <printf@plt>
cmp    $0x3,%ebx
mov    -0x48(%rbp),%r15
jne    1278 <num_to_word+0x158>
test   %r14d,%r14d
jle    1278 <num_to_word+0x158>
lea    0xdc1(%rip),%rdi
call   1030 <printf@plt>
cmp    $0x1,%r13d
jne    128f <num_to_word+0x16f>
test   %r12d,%r12d
jne    128f <num_to_word+0x16f>
lea    0xdb3(%rip),%rdi
jmp    1466 <num_to_word+0x346>
cmp    $0x1,%r13d
jne    12a7 <num_to_word+0x187>
cmp    $0x1,%r12d
jne    12a7 <num_to_word+0x187>
lea    0xda0(%rip),%rdi
jmp    1466 <num_to_word+0x346>
cmp    $0x1,%r13d
jne    12bf <num_to_word+0x19f>
cmp    $0x2,%r12d
jne    12bf <num_to_word+0x19f>
lea    0xd90(%rip),%rdi
jmp    1466 <num_to_word+0x346>
cmp    $0x1,%r13d
jne    12d7 <num_to_word+0x1b7>
cmp    $0x3,%r12d
jne    12d7 <num_to_word+0x1b7>
lea    0xd80(%rip),%rdi
jmp    1466 <num_to_word+0x346>
cmp    $0x1,%r13d
jne    12ef <num_to_word+0x1cf>
cmp    $0x4,%r12d
jne    12ef <num_to_word+0x1cf>
lea    0xd72(%rip),%rdi
jmp    1466 <num_to_word+0x346>
cmp    $0x1,%r13d
jne    1307 <num_to_word+0x1e7>
cmp    $0x5,%r12d
jne    1307 <num_to_word+0x1e7>
lea    0xd64(%rip),%rdi
jmp    1466 <num_to_word+0x346>
cmp    $0x1,%r13d
jne    131f <num_to_word+0x1ff>
cmp    $0x6,%r12d
jne    131f <num_to_word+0x1ff>
lea    0xd55(%rip),%rdi
jmp    1466 <num_to_word+0x346>
cmp    $0x1,%r13d
jne    1337 <num_to_word+0x217>
cmp    $0x7,%r12d
jne    1337 <num_to_word+0x217>
lea    0xd46(%rip),%rdi
jmp    1466 <num_to_word+0x346>
cmp    $0x1,%r13d
jne    134f <num_to_word+0x22f>
cmp    $0x8,%r12d
jne    134f <num_to_word+0x22f>
lea    0xd39(%rip),%rdi
jmp    1466 <num_to_word+0x346>
cmp    $0x1,%r13d
jne    1367 <num_to_word+0x247>
cmp    $0x9,%r12d
jne    1367 <num_to_word+0x247>
lea    0xd2b(%rip),%rdi
jmp    1466 <num_to_word+0x346>
lea    -0x2(%r13),%eax
cmp    $0x7,%eax
ja     1385 <num_to_word+0x265>
cltq
lea    0xde7(%rip),%rcx
movslq (%rcx,%rax,4),%rdi
add    %rcx,%rdi
call   1030 <printf@plt>
cmp    $0x1,%r13d
setne  %bl
cmp    $0x1,%r12d
jne    13a6 <num_to_word+0x286>
cmp    $0x1,%r13d
je     13a6 <num_to_word+0x286>
lea    0xc61(%rip),%rdi
call   1030 <printf@plt>
mov    $0x1,%bl
cmp    $0x2,%r12d
jne    13bc <num_to_word+0x29c>
test   %bl,%bl
je     13bc <num_to_word+0x29c>
lea    0xc4e(%rip),%rdi
call   1030 <printf@plt>
cmp    $0x3,%r12d
sete   %al
and    %bl,%al
cmp    $0x1,%al
jne    13d5 <num_to_word+0x2b5>
lea    0xc3a(%rip),%rdi
call   1030 <printf@plt>
cmp    $0x4,%r12d
sete   %al
and    %bl,%al
cmp    $0x1,%al
jne    13ee <num_to_word+0x2ce>
lea    0xc28(%rip),%rdi
call   1030 <printf@plt>
cmp    $0x5,%r12d
sete   %al
and    %bl,%al
cmp    $0x1,%al
jne    1407 <num_to_word+0x2e7>
lea    0xc15(%rip),%rdi
call   1030 <printf@plt>
cmp    $0x6,%r12d
sete   %al
and    %bl,%al
cmp    $0x1,%al
jne    1420 <num_to_word+0x300>
lea    0xc02(%rip),%rdi
call   1030 <printf@plt>
cmp    $0x7,%r12d
sete   %al
and    %bl,%al
cmp    $0x1,%al
jne    1439 <num_to_word+0x319>
lea    0xca2(%rip),%rdi
call   1030 <printf@plt>
cmp    $0x8,%r12d
sete   %al
and    %bl,%al
cmp    $0x1,%al
jne    1452 <num_to_word+0x332>
lea    0xc90(%rip),%rdi
call   1030 <printf@plt>
cmp    $0x9,%r12d
sete   %al
and    %bl,%al
cmp    $0x1,%al
jne    146b <num_to_word+0x34b>
lea    0xbc8(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
test   %r14d,%r14d
cmovs  %eax,%r14d
mov    %r12d,%ecx
or     %r13d,%ecx
cmovs  %eax,%r14d
add    %r13d,%r12d
add    %r14d,%r12d
lea    -0x4(%r15),%eax
cmp    $0x2,%eax
ja     149e <num_to_word+0x37e>
test   %r12d,%r12d
js     149e <num_to_word+0x37e>
lea    0xc4b(%rip),%rdi
jmp    1541 <num_to_word+0x421>
lea    -0x7(%r15),%eax
cmp    $0x2,%eax
ja     14b8 <num_to_word+0x398>
test   %r12d,%r12d
js     14b8 <num_to_word+0x398>
lea    0xc3b(%rip),%rdi
jmp    1541 <num_to_word+0x421>
lea    -0xa(%r15),%eax
cmp    $0x2,%eax
ja     14cf <num_to_word+0x3af>
test   %r12d,%r12d
js     14cf <num_to_word+0x3af>
lea    0xc2a(%rip),%rdi
jmp    1541 <num_to_word+0x421>
lea    -0xd(%r15),%eax
cmp    $0x2,%eax
ja     14e6 <num_to_word+0x3c6>
test   %r12d,%r12d
js     14e6 <num_to_word+0x3c6>
lea    0xc1c(%rip),%rdi
jmp    1541 <num_to_word+0x421>
lea    -0x10(%r15),%eax
cmp    $0x2,%eax
ja     14fd <num_to_word+0x3dd>
test   %r12d,%r12d
js     14fd <num_to_word+0x3dd>
lea    0xc0f(%rip),%rdi
jmp    1541 <num_to_word+0x421>
lea    -0x13(%r15),%eax
cmp    $0x2,%eax
ja     1514 <num_to_word+0x3f4>
test   %r12d,%r12d
js     1514 <num_to_word+0x3f4>
lea    0xc05(%rip),%rdi
jmp    1541 <num_to_word+0x421>
lea    -0x16(%r15),%eax
cmp    $0x2,%eax
ja     152b <num_to_word+0x40b>
test   %r12d,%r12d
js     152b <num_to_word+0x40b>
lea    0xbfb(%rip),%rdi
jmp    1541 <num_to_word+0x421>
add    $0xffffffe7,%r15d
cmp    $0x2,%r15d
ja     1554 <num_to_word+0x434>
test   %r12d,%r12d
js     1554 <num_to_word+0x434>
lea    0xbef(%rip),%rdi
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <printf@plt>
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [5 x i8] c"one \00"
@.str.1 = [5 x i8] c"two \00"
@.str.2 = [7 x i8] c"three \00"
@.str.3 = [6 x i8] c"four \00"
@.str.4 = [6 x i8] c"five \00"
@.str.5 = [5 x i8] c"six \00"
@.str.6 = [6 x i8] c"seven\00"
@.str.7 = [6 x i8] c"eight\00"
@.str.8 = [6 x i8] c"nine \00"
@.str.9 = [9 x i8] c"hundred \00"
@.str.10 = [5 x i8] c"ten \00"
@.str.11 = [8 x i8] c"eleven \00"
@.str.12 = [8 x i8] c"twelve \00"
@.str.13 = [10 x i8] c"thirteen \00"
@.str.14 = [10 x i8] c"fourteen \00"
@.str.15 = [9 x i8] c"fifteen \00"
@.str.16 = [9 x i8] c"sixteen \00"
@.str.17 = [11 x i8] c"seventeen \00"
@.str.18 = [10 x i8] c"eighteen \00"
@.str.19 = [10 x i8] c"nineteen \00"
@.str.20 = [8 x i8] c"twenty \00"
@.str.21 = [8 x i8] c"thirty \00"
@.str.22 = [8 x i8] c"fourty \00"
@.str.23 = [7 x i8] c"fifty \00"
@.str.24 = [7 x i8] c"sixty \00"
@.str.25 = [9 x i8] c"seventy \00"
@.str.26 = [8 x i8] c"eighty \00"
@.str.27 = [8 x i8] c"ninety \00"
@.str.28 = [7 x i8] c"seven \00"
@.str.29 = [7 x i8] c"eight \00"
@.str.30 = [10 x i8] c"thousand \00"
@.str.31 = [9 x i8] c"million \00"
@.str.32 = [9 x i8] c"billion \00"
@.str.33 = [10 x i8] c"trillion \00"
@.str.34 = [13 x i8] c"quadrillion \00"
@.str.35 = [13 x i8] c"quintillion \00"
@.str.36 = [12 x i8] c"sextillion \00"
@.str.37 = [12 x i8] c"septillion \00"
define void @num_to_word(i8* %0, i32 %1, i32 %2) {
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i8*
%14 = alloca i64
store i8* %0, i8** %4
store i32 %1, i32* %5
store i32 %2, i32* %6
store i32 0, i32* %12
store i32 -1, i32* %9
store i32 -1, i32* %8
store i32 -1, i32* %7
%15 = load i32, i32* %6
%16 = zext i32 %15 to i64
%17 = call i8* @llvm.stacksave()
store i8* %17, i8** %13
%18 = alloca i8, i64 %16
store i64 %16, i64* %14
br label %19
19: ; preds = %64, %3
%20 = load i32, i32* %12
%21 = load i32, i32* %6
%22 = icmp slt i32 %20, %21
br i1 %22, label %23, label %67
23: ; preds = %19
store i32 0, i32* %11
br label %24
24: ; preds = %35, %23
%25 = load i8*, i8** %4
%26 = load i32, i32* %11
%27 = add nsw i32 %26, 1
store i32 %27, i32* %11
%28 = sext i32 %26 to i64
%29 = getelementptr inbounds i8, i8* %25, i64 %28
%30 = load i8, i8* %29
%31 = load i32, i32* %11
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds i8, i8* %18, i64 %32
store i8 %30, i8* %33
%34 = icmp ne i8 %30, 0
br i1 %34, label %35, label %36
35: ; preds = %24
br label %24
36: ; preds = %24
%37 = load i32, i32* %12
%38 = add nsw i32 %37, 1
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds i8, i8* %18, i64 %39
store i8 0, i8* %40
%41 = load i32, i32* %12
%42 = icmp eq i32 %41, 0
br i1 %42, label %43, label %48
43: ; preds = %36
%44 = load i32, i32* %12
%45 = sext i32 %44 to i64
%46 = getelementptr inbounds i8, i8* %18, i64 %45
%47 = call i32 @atoi(i8* %46)
store i32 %47, i32* %7
br label %48
48: ; preds = %43, %36
%49 = load i32, i32* %12
%50 = icmp eq i32 %49, 1
br i1 %50, label %51, label %56
51: ; preds = %48
%52 = load i32, i32* %12
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds i8, i8* %18, i64 %53
%55 = call i32 @atoi(i8* %54)
store i32 %55, i32* %8
br label %56
56: ; preds = %51, %48
%57 = load i32, i32* %12
%58 = icmp eq i32 %57, 2
br i1 %58, label %59, label %64
59: ; preds = %56
%60 = load i32, i32* %12
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i8, i8* %18, i64 %61
%63 = call i32 @atoi(i8* %62)
store i32 %63, i32* %9
br label %64
64: ; preds = %59, %56
%65 = load i32, i32* %12
%66 = add nsw i32 %65, 1
store i32 %66, i32* %12
br label %19
67: ; preds = %19
%68 = load i32, i32* %6
%69 = icmp eq i32 %68, 1
br i1 %69, label %70, label %72
70: ; preds = %67
%71 = load i32, i32* %7
store i32 %71, i32* %9
store i32 -1, i32* %7
store i32 -1, i32* %8
br label %72
72: ; preds = %70, %67
%73 = load i32, i32* %6
%74 = icmp eq i32 %73, 2
br i1 %74, label %75, label %78
75: ; preds = %72
%76 = load i32, i32* %8
store i32 %76, i32* %9
%77 = load i32, i32* %7
store i32 %77, i32* %8
store i32 -1, i32* %7
br label %78
78: ; preds = %75, %72
%79 = load i32, i32* %7
%80 = icmp eq i32 %79, 1
br i1 %80, label %81, label %83
81: ; preds = %78
%82 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
br label %83
83: ; preds = %81, %78
%84 = load i32, i32* %7
%85 = icmp eq i32 %84, 2
br i1 %85, label %86, label %88
86: ; preds = %83
%87 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
br label %88
88: ; preds = %86, %83
%89 = load i32, i32* %7
%90 = icmp eq i32 %89, 3
br i1 %90, label %91, label %93
91: ; preds = %88
%92 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %93
93: ; preds = %91, %88
%94 = load i32, i32* %7
%95 = icmp eq i32 %94, 4
br i1 %95, label %96, label %98
96: ; preds = %93
%97 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
br label %98
98: ; preds = %96, %93
%99 = load i32, i32* %7
%100 = icmp eq i32 %99, 5
br i1 %100, label %101, label %103
101: ; preds = %98
%102 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0))
br label %103
103: ; preds = %101, %98
%104 = load i32, i32* %7
%105 = icmp eq i32 %104, 6
br i1 %105, label %106, label %108
106: ; preds = %103
%107 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
br label %108
108: ; preds = %106, %103
%109 = load i32, i32* %7
%110 = icmp eq i32 %109, 7
br i1 %110, label %111, label %113
111: ; preds = %108
%112 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
br label %113
113: ; preds = %111, %108
%114 = load i32, i32* %7
%115 = icmp eq i32 %114, 8
br i1 %115, label %116, label %118
116: ; preds = %113
%117 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.7, i64 0, i64 0))
br label %118
118: ; preds = %116, %113
%119 = load i32, i32* %7
%120 = icmp eq i32 %119, 9
br i1 %120, label %121, label %123
121: ; preds = %118
%122 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0))
br label %123
123: ; preds = %121, %118
%124 = load i32, i32* %6
%125 = icmp eq i32 %124, 3
br i1 %125, label %126, label %131
126: ; preds = %123
%127 = load i32, i32* %7
%128 = icmp sgt i32 %127, 0
br i1 %128, label %129, label %131
129: ; preds = %126
%130 = call i32 @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.9, i64 0, i64 0))
br label %131
131: ; preds = %129, %126, %123
%132 = load i32, i32* %8
%133 = icmp eq i32 %132, 1
br i1 %133, label %134, label %139
134: ; preds = %131
%135 = load i32, i32* %9
%136 = icmp eq i32 %135, 0
br i1 %136, label %137, label %139
137: ; preds = %134
%138 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0))
br label %139
139: ; preds = %137, %134, %131
%140 = load i32, i32* %8
%141 = icmp eq i32 %140, 1
br i1 %141, label %142, label %147
142: ; preds = %139
%143 = load i32, i32* %9
%144 = icmp eq i32 %143, 1
br i1 %144, label %145, label %147
145: ; preds = %142
%146 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0))
br label %147
147: ; preds = %145, %142, %139
%148 = load i32, i32* %8
%149 = icmp eq i32 %148, 1
br i1 %149, label %150, label %155
150: ; preds = %147
%151 = load i32, i32* %9
%152 = icmp eq i32 %151, 2
br i1 %152, label %153, label %155
153: ; preds = %150
%154 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.12, i64 0, i64 0))
br label %155
155: ; preds = %153, %150, %147
%156 = load i32, i32* %8
%157 = icmp eq i32 %156, 1
br i1 %157, label %158, label %163
158: ; preds = %155
%159 = load i32, i32* %9
%160 = icmp eq i32 %159, 3
br i1 %160, label %161, label %163
161: ; preds = %158
%162 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.13, i64 0, i64 0))
br label %163
163: ; preds = %161, %158, %155
%164 = load i32, i32* %8
%165 = icmp eq i32 %164, 1
br i1 %165, label %166, label %171
166: ; preds = %163
%167 = load i32, i32* %9
%168 = icmp eq i32 %167, 4
br i1 %168, label %169, label %171
169: ; preds = %166
%170 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.14, i64 0, i64 0))
br label %171
171: ; preds = %169, %166, %163
%172 = load i32, i32* %8
%173 = icmp eq i32 %172, 1
br i1 %173, label %174, label %179
174: ; preds = %171
%175 = load i32, i32* %9
%176 = icmp eq i32 %175, 5
br i1 %176, label %177, label %179
177: ; preds = %174
%178 = call i32 @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0))
br label %179
179: ; preds = %177, %174, %171
%180 = load i32, i32* %8
%181 = icmp eq i32 %180, 1
br i1 %181, label %182, label %187
182: ; preds = %179
%183 = load i32, i32* %9
%184 = icmp eq i32 %183, 6
br i1 %184, label %185, label %187
185: ; preds = %182
%186 = call i32 @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.16, i64 0, i64 0))
br label %187
187: ; preds = %185, %182, %179
%188 = load i32, i32* %8
%189 = icmp eq i32 %188, 1
br i1 %189, label %190, label %195
190: ; preds = %187
%191 = load i32, i32* %9
%192 = icmp eq i32 %191, 7
br i1 %192, label %193, label %195
193: ; preds = %190
%194 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.17, i64 0, i64 0))
br label %195
195: ; preds = %193, %190, %187
%196 = load i32, i32* %8
%197 = icmp eq i32 %196, 1
br i1 %197, label %198, label %203
198: ; preds = %195
%199 = load i32, i32* %9
%200 = icmp eq i32 %199, 8
br i1 %200, label %201, label %203
201: ; preds = %198
%202 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.18, i64 0, i64 0))
br label %203
203: ; preds = %201, %198, %195
%204 = load i32, i32* %8
%205 = icmp eq i32 %204, 1
br i1 %205, label %206, label %211
206: ; preds = %203
%207 = load i32, i32* %9
%208 = icmp eq i32 %207, 9
br i1 %208, label %209, label %211
209: ; preds = %206
%210 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.19, i64 0, i64 0))
br label %211
211: ; preds = %209, %206, %203
%212 = load i32, i32* %8
%213 = icmp eq i32 %212, 2
br i1 %213, label %214, label %216
214: ; preds = %211
%215 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.20, i64 0, i64 0))
br label %216
216: ; preds = %214, %211
%217 = load i32, i32* %8
%218 = icmp eq i32 %217, 3
br i1 %218, label %219, label %221
219: ; preds = %216
%220 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.21, i64 0, i64 0))
br label %221
221: ; preds = %219, %216
%222 = load i32, i32* %8
%223 = icmp eq i32 %222, 4
br i1 %223, label %224, label %226
224: ; preds = %221
%225 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.22, i64 0, i64 0))
br label %226
226: ; preds = %224, %221
%227 = load i32, i32* %8
%228 = icmp eq i32 %227, 5
br i1 %228, label %229, label %231
229: ; preds = %226
%230 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.23, i64 0, i64 0))
br label %231
231: ; preds = %229, %226
%232 = load i32, i32* %8
%233 = icmp eq i32 %232, 6
br i1 %233, label %234, label %236
234: ; preds = %231
%235 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.24, i64 0, i64 0))
br label %236
236: ; preds = %234, %231
%237 = load i32, i32* %8
%238 = icmp eq i32 %237, 7
br i1 %238, label %239, label %241
239: ; preds = %236
%240 = call i32 @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.25, i64 0, i64 0))
br label %241
241: ; preds = %239, %236
%242 = load i32, i32* %8
%243 = icmp eq i32 %242, 8
br i1 %243, label %244, label %246
244: ; preds = %241
%245 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.26, i64 0, i64 0))
br label %246
246: ; preds = %244, %241
%247 = load i32, i32* %8
%248 = icmp eq i32 %247, 9
br i1 %248, label %249, label %251
249: ; preds = %246
%250 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.27, i64 0, i64 0))
br label %251
251: ; preds = %249, %246
%252 = load i32, i32* %9
%253 = icmp eq i32 %252, 1
br i1 %253, label %254, label %259
254: ; preds = %251
%255 = load i32, i32* %8
%256 = icmp ne i32 %255, 1
br i1 %256, label %257, label %259
257: ; preds = %254
%258 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
br label %259
259: ; preds = %257, %254, %251
%260 = load i32, i32* %9
%261 = icmp eq i32 %260, 2
br i1 %261, label %262, label %267
262: ; preds = %259
%263 = load i32, i32* %8
%264 = icmp ne i32 %263, 1
br i1 %264, label %265, label %267
265: ; preds = %262
%266 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
br label %267
267: ; preds = %265, %262, %259
%268 = load i32, i32* %9
%269 = icmp eq i32 %268, 3
br i1 %269, label %270, label %275
270: ; preds = %267
%271 = load i32, i32* %8
%272 = icmp ne i32 %271, 1
br i1 %272, label %273, label %275
273: ; preds = %270
%274 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %275
275: ; preds = %273, %270, %267
%276 = load i32, i32* %9
%277 = icmp eq i32 %276, 4
br i1 %277, label %278, label %283
278: ; preds = %275
%279 = load i32, i32* %8
%280 = icmp ne i32 %279, 1
br i1 %280, label %281, label %283
281: ; preds = %278
%282 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
br label %283
283: ; preds = %281, %278, %275
%284 = load i32, i32* %9
%285 = icmp eq i32 %284, 5
br i1 %285, label %286, label %291
286: ; preds = %283
%287 = load i32, i32* %8
%288 = icmp ne i32 %287, 1
br i1 %288, label %289, label %291
289: ; preds = %286
%290 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0))
br label %291
291: ; preds = %289, %286, %283
%292 = load i32, i32* %9
%293 = icmp eq i32 %292, 6
br i1 %293, label %294, label %299
294: ; preds = %291
%295 = load i32, i32* %8
%296 = icmp ne i32 %295, 1
br i1 %296, label %297, label %299
297: ; preds = %294
%298 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
br label %299
299: ; preds = %297, %294, %291
%300 = load i32, i32* %9
%301 = icmp eq i32 %300, 7
br i1 %301, label %302, label %307
302: ; preds = %299
%303 = load i32, i32* %8
%304 = icmp ne i32 %303, 1
br i1 %304, label %305, label %307
305: ; preds = %302
%306 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.28, i64 0, i64 0))
br label %307
307: ; preds = %305, %302, %299
%308 = load i32, i32* %9
%309 = icmp eq i32 %308, 8
br i1 %309, label %310, label %315
310: ; preds = %307
%311 = load i32, i32* %8
%312 = icmp ne i32 %311, 1
br i1 %312, label %313, label %315
313: ; preds = %310
%314 = call i32 @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.29, i64 0, i64 0))
br label %315
315: ; preds = %313, %310, %307
%316 = load i32, i32* %9
%317 = icmp eq i32 %316, 9
br i1 %317, label %318, label %323
318: ; preds = %315
%319 = load i32, i32* %8
%320 = icmp ne i32 %319, 1
br i1 %320, label %321, label %323
321: ; preds = %318
%322 = call i32 @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0))
br label %323
323: ; preds = %321, %318, %315
store i32 0, i32* %10
%324 = load i32, i32* %7
%325 = icmp slt i32 %324, 0
br i1 %325, label %326, label %327
326: ; preds = %323
store i32 0, i32* %7
br label %327
327: ; preds = %326, %323
%328 = load i32, i32* %8
%329 = icmp slt i32 %328, 0
br i1 %329, label %330, label %331
330: ; preds = %327
store i32 0, i32* %7
br label %331
331: ; preds = %330, %327
%332 = load i32, i32* %9
%333 = icmp slt i32 %332, 0
br i1 %333, label %334, label %335
334: ; preds = %331
store i32 0, i32* %7
br label %335
335: ; preds = %334, %331
%336 = load i32, i32* %7
%337 = load i32, i32* %8
%338 = add nsw i32 %336, %337
%339 = load i32, i32* %9
%340 = add nsw i32 %338, %339
store i32 %340, i32* %10
%341 = load i32, i32* %5
%342 = icmp slt i32 %341, 7
br i1 %342, label %343, label %351
343: ; preds = %335
%344 = load i32, i32* %5
%345 = icmp sgt i32 %344, 3
br i1 %345, label %346, label %351
346: ; preds = %343
%347 = load i32, i32* %10
%348 = icmp sgt i32 %347, -1
br i1 %348, label %349, label %351
349: ; preds = %346
%350 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.30, i64 0, i64 0))
br label %351
351: ; preds = %349, %346, %343, %335
%352 = load i32, i32* %5
%353 = icmp slt i32 %352, 10
br i1 %353, label %354, label %362
354: ; preds = %351
%355 = load i32, i32* %5
%356 = icmp sgt i32 %355, 6
br i1 %356, label %357, label %362
357: ; preds = %354
%358 = load i32, i32* %10
%359 = icmp sgt i32 %358, -1
br i1 %359, label %360, label %362
360: ; preds = %357
%361 = call i32 @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.31, i64 0, i64 0))
br label %362
362: ; preds = %360, %357, %354, %351
%363 = load i32, i32* %5
%364 = icmp slt i32 %363, 13
br i1 %364, label %365, label %373
365: ; preds = %362
%366 = load i32, i32* %5
%367 = icmp sgt i32 %366, 9
br i1 %367, label %368, label %373
368: ; preds = %365
%369 = load i32, i32* %10
%370 = icmp sgt i32 %369, -1
br i1 %370, label %371, label %373
371: ; preds = %368
%372 = call i32 @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.32, i64 0, i64 0))
br label %373
373: ; preds = %371, %368, %365, %362
%374 = load i32, i32* %5
%375 = icmp slt i32 %374, 16
br i1 %375, label %376, label %384
376: ; preds = %373
%377 = load i32, i32* %5
%378 = icmp sgt i32 %377, 12
br i1 %378, label %379, label %384
379: ; preds = %376
%380 = load i32, i32* %10
%381 = icmp sgt i32 %380, -1
br i1 %381, label %382, label %384
382: ; preds = %379
%383 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.33, i64 0, i64 0))
br label %384
384: ; preds = %382, %379, %376, %373
%385 = load i32, i32* %5
%386 = icmp slt i32 %385, 19
br i1 %386, label %387, label %395
387: ; preds = %384
%388 = load i32, i32* %5
%389 = icmp sgt i32 %388, 15
br i1 %389, label %390, label %395
390: ; preds = %387
%391 = load i32, i32* %10
%392 = icmp sgt i32 %391, -1
br i1 %392, label %393, label %395
393: ; preds = %390
%394 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.34, i64 0, i64 0))
br label %395
395: ; preds = %393, %390, %387, %384
%396 = load i32, i32* %5
%397 = icmp slt i32 %396, 22
br i1 %397, label %398, label %406
398: ; preds = %395
%399 = load i32, i32* %5
%400 = icmp sgt i32 %399, 18
br i1 %400, label %401, label %406
401: ; preds = %398
%402 = load i32, i32* %10
%403 = icmp sgt i32 %402, -1
br i1 %403, label %404, label %406
404: ; preds = %401
%405 = call i32 @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.35, i64 0, i64 0))
br label %406
406: ; preds = %404, %401, %398, %395
%407 = load i32, i32* %5
%408 = icmp slt i32 %407, 25
br i1 %408, label %409, label %417
409: ; preds = %406
%410 = load i32, i32* %5
%411 = icmp sgt i32 %410, 21
br i1 %411, label %412, label %417
412: ; preds = %409
%413 = load i32, i32* %10
%414 = icmp sgt i32 %413, -1
br i1 %414, label %415, label %417
415: ; preds = %412
%416 = call i32 @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.36, i64 0, i64 0))
br label %417
417: ; preds = %415, %412, %409, %406
%418 = load i32, i32* %5
%419 = icmp slt i32 %418, 28
br i1 %419, label %420, label %428
420: ; preds = %417
%421 = load i32, i32* %5
%422 = icmp sgt i32 %421, 24
br i1 %422, label %423, label %428
423: ; preds = %420
%424 = load i32, i32* %10
%425 = icmp sgt i32 %424, -1
br i1 %425, label %426, label %428
426: ; preds = %423
%427 = call i32 @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.37, i64 0, i64 0))
br label %428
428: ; preds = %426, %423, %420, %417
store i32 -1, i32* %9
store i32 -1, i32* %8
store i32 -1, i32* %7
%429 = load i8*, i8** %13
ret void
}

LLVM IR (-O2):
@.str = [5 x i8] c"one \00"
@.str.1 = [5 x i8] c"two \00"
@.str.2 = [7 x i8] c"three \00"
@.str.3 = [6 x i8] c"four \00"
@.str.4 = [6 x i8] c"five \00"
@.str.5 = [5 x i8] c"six \00"
@.str.6 = [6 x i8] c"seven\00"
@.str.7 = [6 x i8] c"eight\00"
@.str.8 = [6 x i8] c"nine \00"
@.str.9 = [9 x i8] c"hundred \00"
@.str.10 = [5 x i8] c"ten \00"
@.str.11 = [8 x i8] c"eleven \00"
@.str.12 = [8 x i8] c"twelve \00"
@.str.13 = [10 x i8] c"thirteen \00"
@.str.14 = [10 x i8] c"fourteen \00"
@.str.15 = [9 x i8] c"fifteen \00"
@.str.16 = [9 x i8] c"sixteen \00"
@.str.17 = [11 x i8] c"seventeen \00"
@.str.18 = [10 x i8] c"eighteen \00"
@.str.19 = [10 x i8] c"nineteen \00"
@.str.20 = [8 x i8] c"twenty \00"
@.str.21 = [8 x i8] c"thirty \00"
@.str.22 = [8 x i8] c"fourty \00"
@.str.23 = [7 x i8] c"fifty \00"
@.str.24 = [7 x i8] c"sixty \00"
@.str.25 = [9 x i8] c"seventy \00"
@.str.26 = [8 x i8] c"eighty \00"
@.str.27 = [8 x i8] c"ninety \00"
@.str.28 = [7 x i8] c"seven \00"
@.str.29 = [7 x i8] c"eight \00"
@.str.30 = [10 x i8] c"thousand \00"
@.str.31 = [9 x i8] c"million \00"
@.str.32 = [9 x i8] c"billion \00"
@.str.33 = [10 x i8] c"trillion \00"
@.str.34 = [13 x i8] c"quadrillion \00"
@.str.35 = [13 x i8] c"quintillion \00"
@.str.36 = [12 x i8] c"sextillion \00"
@.str.37 = [12 x i8] c"septillion \00"
@reltable.num_to_word = [9 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str to i64), i64 ptrtoint ([9 x i32]* @reltable.num_to_word to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str.1 to i64), i64 ptrtoint ([9 x i32]* @reltable.num_to_word to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.2 to i64), i64 ptrtoint ([9 x i32]* @reltable.num_to_word to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([6 x i8]* @.str.3 to i64), i64 ptrtoint ([9 x i32]* @reltable.num_to_word to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([6 x i8]* @.str.4 to i64), i64 ptrtoint ([9 x i32]* @reltable.num_to_word to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([5 x i8]* @.str.5 to i64), i64 ptrtoint ([9 x i32]* @reltable.num_to_word to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([6 x i8]* @.str.6 to i64), i64 ptrtoint ([9 x i32]* @reltable.num_to_word to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([6 x i8]* @.str.7 to i64), i64 ptrtoint ([9 x i32]* @reltable.num_to_word to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([6 x i8]* @.str.8 to i64), i64 ptrtoint ([9 x i32]* @reltable.num_to_word to i64)) to i32)]
@reltable.num_to_word.39 = [8 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([8 x i8]* @.str.20 to i64), i64 ptrtoint ([8 x i32]* @reltable.num_to_word.39 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([8 x i8]* @.str.21 to i64), i64 ptrtoint ([8 x i32]* @reltable.num_to_word.39 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([8 x i8]* @.str.22 to i64), i64 ptrtoint ([8 x i32]* @reltable.num_to_word.39 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.23 to i64), i64 ptrtoint ([8 x i32]* @reltable.num_to_word.39 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.24 to i64), i64 ptrtoint ([8 x i32]* @reltable.num_to_word.39 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([9 x i8]* @.str.25 to i64), i64 ptrtoint ([8 x i32]* @reltable.num_to_word.39 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([8 x i8]* @.str.26 to i64), i64 ptrtoint ([8 x i32]* @reltable.num_to_word.39 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([8 x i8]* @.str.27 to i64), i64 ptrtoint ([8 x i32]* @reltable.num_to_word.39 to i64)) to i32)]
define void @num_to_word(i8* nocapture %0, i32 %1, i32 %2) {
%4 = zext i32 %2 to i64
%5 = alloca i8, i64 %4
%6 = icmp sgt i32 %2, 0
br i1 %6, label %7, label %37
7: ; preds = %3
%8 = getelementptr inbounds i8, i8* %5, i64 2
%9 = getelementptr inbounds i8, i8* %5, i64 1
br label %10
10: ; preds = %7, %32
%11 = phi i64 [ 0, %7 ], [ %23, %32 ]
%12 = phi i32 [ -1, %7 ], [ %34, %32 ]
%13 = phi i32 [ -1, %7 ], [ %33, %32 ]
%14 = phi i32 [ -1, %7 ], [ %35, %32 ]
br label %15
15: ; preds = %10, %15
%16 = phi i64 [ 0, %10 ], [ %17, %15 ]
%17 = add nuw nsw i64 %16, 1
%18 = getelementptr inbounds i8, i8* %0, i64 %16
%19 = load i8, i8* %18
%20 = getelementptr inbounds i8, i8* %5, i64 %17
store i8 %19, i8* %20
%21 = icmp eq i8 %19, 0
br i1 %21, label %22, label %15
22: ; preds = %15
%23 = add nuw nsw i64 %11, 1
%24 = getelementptr inbounds i8, i8* %5, i64 %23
store i8 0, i8* %24
%25 = trunc i64 %11 to i32
switch i32 %25, label %32 [
i32 0, label %26
i32 1, label %28
i32 2, label %30
]
26: ; preds = %22
%27 = call i32 @atoi(i8* %5)
br label %32
28: ; preds = %22
%29 = call i32 @atoi(i8* %9)
br label %32
30: ; preds = %22
%31 = call i32 @atoi(i8* %8)
br label %32
32: ; preds = %22, %28, %26, %30
%33 = phi i32 [ %13, %30 ], [ %13, %26 ], [ %29, %28 ], [ %13, %22 ]
%34 = phi i32 [ %12, %30 ], [ %27, %26 ], [ %12, %28 ], [ %12, %22 ]
%35 = phi i32 [ %31, %30 ], [ %14, %26 ], [ %14, %28 ], [ %14, %22 ]
%36 = icmp eq i64 %23, %4
br i1 %36, label %37, label %10
37: ; preds = %32, %3
%38 = phi i32 [ -1, %3 ], [ %35, %32 ]
%39 = phi i32 [ -1, %3 ], [ %33, %32 ]
%40 = phi i32 [ -1, %3 ], [ %34, %32 ]
%41 = icmp eq i32 %2, 1
%42 = select i1 %41, i32 %40, i32 %38
%43 = select i1 %41, i32 -1, i32 %39
%44 = select i1 %41, i32 -1, i32 %40
%45 = icmp eq i32 %2, 2
%46 = select i1 %45, i32 %43, i32 %42
%47 = select i1 %45, i32 %44, i32 %43
%48 = select i1 %45, i32 -1, i32 %44
%49 = add i32 %48, -1
%50 = icmp ult i32 %49, 9
br i1 %50, label %51, label %56
51: ; preds = %37
%52 = sext i32 %49 to i64
%53 = shl i64 %52, 2
%54 = call i8* @llvm.load.relative.i64(i8* bitcast ([9 x i32]* @reltable.num_to_word to i8*), i64 %53)
%55 = tail call i32 @printf(i8* dereferenceable(1) %54)
br label %56
56: ; preds = %37, %51
%57 = icmp eq i32 %2, 3
%58 = icmp sgt i32 %48, 0
%59 = select i1 %57, i1 %58, i1 false
br i1 %59, label %60, label %62
60: ; preds = %56
%61 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.9, i64 0, i64 0))
br label %62
62: ; preds = %60, %56
%63 = icmp eq i32 %47, 1
%64 = icmp eq i32 %46, 0
%65 = select i1 %63, i1 %64, i1 false
br i1 %65, label %137, label %66
66: ; preds = %62
%67 = icmp eq i32 %46, 1
%68 = select i1 %63, i1 %67, i1 false
br i1 %68, label %137, label %69
69: ; preds = %66
%70 = icmp eq i32 %46, 2
%71 = select i1 %63, i1 %70, i1 false
br i1 %71, label %137, label %72
72: ; preds = %69
%73 = icmp eq i32 %46, 3
%74 = select i1 %63, i1 %73, i1 false
br i1 %74, label %137, label %75
75: ; preds = %72
%76 = icmp eq i32 %46, 4
%77 = select i1 %63, i1 %76, i1 false
br i1 %77, label %137, label %78
78: ; preds = %75
%79 = icmp eq i32 %46, 5
%80 = select i1 %63, i1 %79, i1 false
br i1 %80, label %137, label %81
81: ; preds = %78
%82 = icmp eq i32 %46, 6
%83 = select i1 %63, i1 %82, i1 false
br i1 %83, label %137, label %84
84: ; preds = %81
%85 = icmp eq i32 %46, 7
%86 = select i1 %63, i1 %85, i1 false
br i1 %86, label %137, label %87
87: ; preds = %84
%88 = icmp eq i32 %46, 8
%89 = select i1 %63, i1 %88, i1 false
br i1 %89, label %137, label %90
90: ; preds = %87
%91 = icmp eq i32 %46, 9
%92 = select i1 %63, i1 %91, i1 false
br i1 %92, label %137, label %93
93: ; preds = %90
%94 = add i32 %47, -2
%95 = icmp ult i32 %94, 8
br i1 %95, label %96, label %101
96: ; preds = %93
%97 = sext i32 %94 to i64
%98 = shl i64 %97, 2
%99 = call i8* @llvm.load.relative.i64(i8* bitcast ([8 x i32]* @reltable.num_to_word.39 to i8*), i64 %98)
%100 = tail call i32 @printf(i8* dereferenceable(1) %99)
br label %101
101: ; preds = %93, %96
%102 = icmp ne i32 %47, 1
%103 = select i1 %67, i1 %102, i1 false
br i1 %103, label %104, label %106
104: ; preds = %101
%105 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
br label %106
106: ; preds = %104, %101
%107 = phi i1 [ true, %104 ], [ %102, %101 ]
%108 = select i1 %70, i1 %107, i1 false
br i1 %108, label %109, label %111
109: ; preds = %106
%110 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.1, i64 0, i64 0))
br label %111
111: ; preds = %109, %106
%112 = select i1 %73, i1 %107, i1 false
br i1 %112, label %113, label %115
113: ; preds = %111
%114 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.2, i64 0, i64 0))
br label %115
115: ; preds = %113, %111
%116 = select i1 %76, i1 %107, i1 false
br i1 %116, label %117, label %119
117: ; preds = %115
%118 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i64 0, i64 0))
br label %119
119: ; preds = %117, %115
%120 = select i1 %79, i1 %107, i1 false
br i1 %120, label %121, label %123
121: ; preds = %119
%122 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0))
br label %123
123: ; preds = %121, %119
%124 = select i1 %82, i1 %107, i1 false
br i1 %124, label %125, label %127
125: ; preds = %123
%126 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0))
br label %127
127: ; preds = %125, %123
%128 = select i1 %85, i1 %107, i1 false
br i1 %128, label %129, label %131
129: ; preds = %127
%130 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.28, i64 0, i64 0))
br label %131
131: ; preds = %129, %127
%132 = select i1 %88, i1 %107, i1 false
br i1 %132, label %133, label %135
133: ; preds = %131
%134 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.29, i64 0, i64 0))
br label %135
135: ; preds = %133, %131
%136 = select i1 %91, i1 %107, i1 false
br i1 %136, label %137, label %140
137: ; preds = %135, %90, %87, %84, %81, %78, %75, %72, %69, %66, %62
%138 = phi i8* [ getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0), %62 ], [ getelementptr inbounds ([8 x i8], [8 x i8]* @.str.11, i64 0, i64 0), %66 ], [ getelementptr inbounds ([8 x i8], [8 x i8]* @.str.12, i64 0, i64 0), %69 ], [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.13, i64 0, i64 0), %72 ], [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.14, i64 0, i64 0), %75 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.15, i64 0, i64 0), %78 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.16, i64 0, i64 0), %81 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.17, i64 0, i64 0), %84 ], [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.18, i64 0, i64 0), %87 ], [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.19, i64 0, i64 0), %90 ], [ getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i64 0, i64 0), %135 ]
%139 = tail call i32 @printf(i8* dereferenceable(1) %138)
br label %140
140: ; preds = %137, %135
%141 = select i1 %58, i32 %48, i32 0
%142 = icmp slt i32 %47, 0
%143 = icmp slt i32 %46, 0
%144 = select i1 %143, i1 true, i1 %142
%145 = select i1 %144, i32 0, i32 %141
%146 = add i32 %46, %47
%147 = add i32 %146, %145
%148 = add i32 %1, -4
%149 = icmp ult i32 %148, 3
%150 = icmp sgt i32 %147, -1
%151 = select i1 %149, i1 %150, i1 false
br i1 %151, label %180, label %152
152: ; preds = %140
%153 = add i32 %1, -7
%154 = icmp ult i32 %153, 3
%155 = select i1 %154, i1 %150, i1 false
br i1 %155, label %180, label %156
156: ; preds = %152
%157 = add i32 %1, -10
%158 = icmp ult i32 %157, 3
%159 = select i1 %158, i1 %150, i1 false
br i1 %159, label %180, label %160
160: ; preds = %156
%161 = add i32 %1, -13
%162 = icmp ult i32 %161, 3
%163 = select i1 %162, i1 %150, i1 false
br i1 %163, label %180, label %164
164: ; preds = %160
%165 = add i32 %1, -16
%166 = icmp ult i32 %165, 3
%167 = select i1 %166, i1 %150, i1 false
br i1 %167, label %180, label %168
168: ; preds = %164
%169 = add i32 %1, -19
%170 = icmp ult i32 %169, 3
%171 = select i1 %170, i1 %150, i1 false
br i1 %171, label %180, label %172
172: ; preds = %168
%173 = add i32 %1, -22
%174 = icmp ult i32 %173, 3
%175 = select i1 %174, i1 %150, i1 false
br i1 %175, label %180, label %176
176: ; preds = %172
%177 = add i32 %1, -25
%178 = icmp ult i32 %177, 3
%179 = select i1 %178, i1 %150, i1 false
br i1 %179, label %180, label %183
180: ; preds = %176, %172, %168, %164, %160, %156, %152, %140
%181 = phi i8* [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.30, i64 0, i64 0), %140 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.31, i64 0, i64 0), %152 ], [ getelementptr inbounds ([9 x i8], [9 x i8]* @.str.32, i64 0, i64 0), %156 ], [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.33, i64 0, i64 0), %160 ], [ getelementptr inbounds ([13 x i8], [13 x i8]* @.str.34, i64 0, i64 0), %164 ], [ getelementptr inbounds ([13 x i8], [13 x i8]* @.str.35, i64 0, i64 0), %168 ], [ getelementptr inbounds ([12 x i8], [12 x i8]* @.str.36, i64 0, i64 0), %172 ], [ getelementptr inbounds ([12 x i8], [12 x i8]* @.str.37, i64 0, i64 0), %176 ]
%182 = tail call i32 @printf(i8* dereferenceable(1) %181)
br label %183
183: ; preds = %180, %176
ret void
}