#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*/ sqlite3_snprintf(int, char *, char *, ...);
scalar_t__ strlen(char *);
int speedtest1_numbername(unsigned int n, char *zOut, int nOut) {
  static const char *ones[] = {"zero",    "one",       "two",      "three",
                               "four",    "five",      "six",      "seven",
                               "eight",   "nine",      "ten",      "eleven",
                               "twelve",  "thirteen",  "fourteen", "fifteen",
                               "sixteen", "seventeen", "eighteen", "nineteen"};
  static const char *tens[] = {"",      "ten",   "twenty",  "thirty", "forty",
                               "fifty", "sixty", "seventy", "eighty", "ninety"};
  int i = 0;
  if (n >= 1000000000) {
    i += speedtest1_numbername(n / 1000000000, zOut + i, nOut - i);
    sqlite3_snprintf(nOut - i, zOut + i, " billion");
    i += (int)strlen(zOut + i);
    n = n % 1000000000;
  }
  if (n >= 1000000) {
    if (i && i < nOut - 1)
      zOut[i++] = ' ';
    i += speedtest1_numbername(n / 1000000, zOut + i, nOut - i);
    sqlite3_snprintf(nOut - i, zOut + i, " million");
    i += (int)strlen(zOut + i);
    n = n % 1000000;
  }
  if (n >= 1000) {
    if (i && i < nOut - 1)
      zOut[i++] = ' ';
    i += speedtest1_numbername(n / 1000, zOut + i, nOut - i);
    sqlite3_snprintf(nOut - i, zOut + i, " thousand");
    i += (int)strlen(zOut + i);
    n = n % 1000;
  }
  if (n >= 100) {
    if (i && i < nOut - 1)
      zOut[i++] = ' ';
    sqlite3_snprintf(nOut - i, zOut + i, "%s hundred", ones[n / 100]);
    i += (int)strlen(zOut + i);
    n = n % 100;
  }
  if (n >= 20) {
    if (i && i < nOut - 1)
      zOut[i++] = ' ';
    sqlite3_snprintf(nOut - i, zOut + i, "%s", tens[n / 10]);
    i += (int)strlen(zOut + i);
    n = n % 10;
  }
  if (n > 0) {
    if (i && i < nOut - 1)
      zOut[i++] = ' ';
    sqlite3_snprintf(nOut - i, zOut + i, "%s", ones[n]);
    i += (int)strlen(zOut + i);
  }
  if (i == 0) {
    sqlite3_snprintf(nOut - i, zOut + i, "zero");
    i += (int)strlen(zOut + i);
  }
  return i;
}


x86 assembly (clang, -O0):
<speedtest1_numbername>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
cmpl   $0x3b9aca00,-0x4(%rbp)
jb     11c4 <speedtest1_numbername+0x94>
mov    -0x4(%rbp),%eax
mov    $0x3b9aca00,%ecx
xor    %edx,%edx
div    %ecx
mov    %eax,%edi
mov    -0x10(%rbp),%rsi
movslq -0x18(%rbp),%rax
add    %rax,%rsi
mov    -0x14(%rbp),%edx
sub    -0x18(%rbp),%edx
call   1040 <speedtest1_numbername@plt>
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%edi
sub    -0x18(%rbp),%edi
mov    -0x10(%rbp),%rsi
movslq -0x18(%rbp),%rax
add    %rax,%rsi
lea    0xf20(%rip),%rdx
mov    $0x0,%al
call   1050 <sqlite3_snprintf@plt>
mov    -0x10(%rbp),%rdi
movslq -0x18(%rbp),%rax
add    %rax,%rdi
call   1030 <strlen@plt>
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x3b9aca00,%ecx
xor    %edx,%edx
div    %ecx
mov    %edx,-0x4(%rbp)
cmpl   $0xf4240,-0x4(%rbp)
jb     1270 <speedtest1_numbername+0x140>
cmpl   $0x0,-0x18(%rbp)
je     1202 <speedtest1_numbername+0xd2>
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1202 <speedtest1_numbername+0xd2>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x4(%rbp),%eax
mov    $0xf4240,%ecx
xor    %edx,%edx
div    %ecx
mov    %eax,%edi
mov    -0x10(%rbp),%rsi
movslq -0x18(%rbp),%rax
add    %rax,%rsi
mov    -0x14(%rbp),%edx
sub    -0x18(%rbp),%edx
call   1040 <speedtest1_numbername@plt>
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%edi
sub    -0x18(%rbp),%edi
mov    -0x10(%rbp),%rsi
movslq -0x18(%rbp),%rax
add    %rax,%rsi
lea    0xe7d(%rip),%rdx
mov    $0x0,%al
call   1050 <sqlite3_snprintf@plt>
mov    -0x10(%rbp),%rdi
movslq -0x18(%rbp),%rax
add    %rax,%rdi
call   1030 <strlen@plt>
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
mov    $0xf4240,%ecx
xor    %edx,%edx
div    %ecx
mov    %edx,-0x4(%rbp)
cmpl   $0x3e8,-0x4(%rbp)
jb     131c <speedtest1_numbername+0x1ec>
cmpl   $0x0,-0x18(%rbp)
je     12ae <speedtest1_numbername+0x17e>
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12ae <speedtest1_numbername+0x17e>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x4(%rbp),%eax
mov    $0x3e8,%ecx
xor    %edx,%edx
div    %ecx
mov    %eax,%edi
mov    -0x10(%rbp),%rsi
movslq -0x18(%rbp),%rax
add    %rax,%rsi
mov    -0x14(%rbp),%edx
sub    -0x18(%rbp),%edx
call   1040 <speedtest1_numbername@plt>
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%edi
sub    -0x18(%rbp),%edi
mov    -0x10(%rbp),%rsi
movslq -0x18(%rbp),%rax
add    %rax,%rsi
lea    0xdda(%rip),%rdx
mov    $0x0,%al
call   1050 <sqlite3_snprintf@plt>
mov    -0x10(%rbp),%rdi
movslq -0x18(%rbp),%rax
add    %rax,%rdi
call   1030 <strlen@plt>
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x3e8,%ecx
xor    %edx,%edx
div    %ecx
mov    %edx,-0x4(%rbp)
cmpl   $0x64,-0x4(%rbp)
jb     13b6 <speedtest1_numbername+0x286>
cmpl   $0x0,-0x18(%rbp)
je     1357 <speedtest1_numbername+0x227>
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1357 <speedtest1_numbername+0x227>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x14(%rbp),%edi
sub    -0x18(%rbp),%edi
mov    -0x10(%rbp),%rsi
movslq -0x18(%rbp),%rax
add    %rax,%rsi
mov    -0x4(%rbp),%eax
mov    $0x64,%ecx
xor    %edx,%edx
div    %ecx
mov    %eax,%eax
mov    %eax,%ecx
lea    0x2cc1(%rip),%rax
mov    (%rax,%rcx,8),%rcx
lea    0xd4a(%rip),%rdx
mov    $0x0,%al
call   1050 <sqlite3_snprintf@plt>
mov    -0x10(%rbp),%rdi
movslq -0x18(%rbp),%rax
add    %rax,%rdi
call   1030 <strlen@plt>
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
mov    $0x64,%ecx
xor    %edx,%edx
div    %ecx
mov    %edx,-0x4(%rbp)
cmpl   $0x14,-0x4(%rbp)
jb     1450 <speedtest1_numbername+0x320>
cmpl   $0x0,-0x18(%rbp)
je     13f1 <speedtest1_numbername+0x2c1>
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    13f1 <speedtest1_numbername+0x2c1>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x14(%rbp),%edi
sub    -0x18(%rbp),%edi
mov    -0x10(%rbp),%rsi
movslq -0x18(%rbp),%rax
add    %rax,%rsi
mov    -0x4(%rbp),%eax
mov    $0xa,%ecx
xor    %edx,%edx
div    %ecx
mov    %eax,%eax
mov    %eax,%ecx
lea    0x2cc7(%rip),%rax
mov    (%rax,%rcx,8),%rcx
lea    0xcbb(%rip),%rdx
mov    $0x0,%al
call   1050 <sqlite3_snprintf@plt>
mov    -0x10(%rbp),%rdi
movslq -0x18(%rbp),%rax
add    %rax,%rdi
call   1030 <strlen@plt>
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x4(%rbp),%eax
mov    $0xa,%ecx
xor    %edx,%edx
div    %ecx
mov    %edx,-0x4(%rbp)
cmpl   $0x0,-0x4(%rbp)
jbe    14d0 <speedtest1_numbername+0x3a0>
cmpl   $0x0,-0x18(%rbp)
je     148b <speedtest1_numbername+0x35b>
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    148b <speedtest1_numbername+0x35b>
mov    -0x10(%rbp),%rax
mov    -0x18(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
movslq %ecx,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x14(%rbp),%edi
sub    -0x18(%rbp),%edi
mov    -0x10(%rbp),%rsi
movslq -0x18(%rbp),%rax
add    %rax,%rsi
mov    -0x4(%rbp),%eax
mov    %eax,%ecx
lea    0x2b98(%rip),%rax
mov    (%rax,%rcx,8),%rcx
lea    0xc2c(%rip),%rdx
mov    $0x0,%al
call   1050 <sqlite3_snprintf@plt>
mov    -0x10(%rbp),%rdi
movslq -0x18(%rbp),%rax
add    %rax,%rdi
call   1030 <strlen@plt>
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x0,-0x18(%rbp)
jne    150f <speedtest1_numbername+0x3df>
mov    -0x14(%rbp),%edi
sub    -0x18(%rbp),%edi
mov    -0x10(%rbp),%rsi
movslq -0x18(%rbp),%rax
add    %rax,%rsi
lea    0xb0e(%rip),%rdx
mov    $0x0,%al
call   1050 <sqlite3_snprintf@plt>
mov    -0x10(%rbp),%rdi
movslq -0x18(%rbp),%rax
add    %rax,%rdi
call   1030 <strlen@plt>
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<speedtest1_numbername>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %edx,%r15d
mov    %rsi,%r13
mov    %edi,%r12d
cmp    $0x3b9aca00,%edi
mov    %rsi,(%rsp)
jb     11e2 <speedtest1_numbername+0xb2>
mov    %r12d,%eax
shr    $0x9,%eax
imul   $0x44b83,%rax,%rbp
shr    $0x27,%rbp
mov    %ebp,%edi
mov    %r13,%rsi
mov    %r15d,%edx
call   1040 <speedtest1_numbername@plt>
mov    %r15d,%edi
sub    %eax,%edi
movslq %eax,%rbx
add    %rbx,%r13
lea    0xf34(%rip),%rdx
xor    %r14d,%r14d
mov    %r13,%rsi
xor    %eax,%eax
call   1050 <sqlite3_snprintf@plt>
mov    %r13,%rdi
call   1030 <strlen@plt>
add    %eax,%ebx
imul   $0x3b9aca00,%ebp,%eax
sub    %eax,%r12d
cmp    $0xf423f,%r12d
ja     1225 <speedtest1_numbername+0xf5>
cmp    $0x3e7,%r12d
ja     1306 <speedtest1_numbername+0x1d6>
cmp    $0x63,%r12d
jbe    1386 <speedtest1_numbername+0x256>
test   %ebx,%ebx
mov    (%rsp),%r13
je     1246 <speedtest1_numbername+0x116>
lea    -0x1(%r15),%eax
cmp    %eax,%ebx
jge    1248 <speedtest1_numbername+0x118>
movslq %ebx,%rax
add    $0x1,%ebx
movb   $0x20,0x0(%r13,%rax,1)
jmp    1248 <speedtest1_numbername+0x118>
xor    %r14d,%r14d
cmp    $0xf423f,%r12d
ja     12a7 <speedtest1_numbername+0x177>
xor    %ebx,%ebx
cmp    $0x3e7,%r12d
ja     132a <speedtest1_numbername+0x1fa>
xor    %ebx,%ebx
cmp    $0x63,%r12d
ja     1248 <speedtest1_numbername+0x118>
xor    %ebx,%ebx
cmp    $0x13,%r12d
ja     13ac <speedtest1_numbername+0x27c>
xor    %ebx,%ebx
test   %r12d,%r12d
jne    141d <speedtest1_numbername+0x2ed>
jmp    1456 <speedtest1_numbername+0x326>
test   %ebx,%ebx
je     12a3 <speedtest1_numbername+0x173>
lea    -0x1(%r15),%eax
cmp    %eax,%ebx
mov    (%rsp),%r13
jge    1241 <speedtest1_numbername+0x111>
movslq %ebx,%rax
add    $0x1,%ebx
movb   $0x20,0x0(%r13,%rax,1)
mov    %ebx,%r14d
jmp    12a7 <speedtest1_numbername+0x177>
xor    %ebx,%ebx
mov    %r15d,%edi
sub    %ebx,%edi
movslq %ebx,%rbx
lea    (%rbx,%r13,1),%r14
movzwl %r12w,%eax
shr    $0x2,%eax
imul   $0x147b,%eax,%ebp
shr    $0x11,%ebp
lea    0x2b15(%rip),%rax
mov    (%rax,%rbp,8),%rcx
lea    0xe5e(%rip),%rdx
mov    %r14,%rsi
xor    %eax,%eax
call   1050 <sqlite3_snprintf@plt>
mov    %r14,%rdi
call   1030 <strlen@plt>
add    %eax,%ebx
imul   $0x64,%ebp,%eax
sub    %eax,%r12d
movzwl %r12w,%r12d
cmp    $0x13,%r12d
ja     1390 <speedtest1_numbername+0x260>
jmp    13fc <speedtest1_numbername+0x2cc>
mov    (%rsp),%r13
movslq %r14d,%rbx
lea    (%rbx,%r13,1),%rsi
mov    %r15d,%edx
sub    %ebx,%edx
mov    %r12d,%eax
imul   $0x431bde83,%rax,%rbp
shr    $0x32,%rbp
mov    %ebp,%edi
call   1040 <speedtest1_numbername@plt>
add    %ebx,%eax
mov    %r15d,%edi
sub    %eax,%edi
movslq %eax,%rbx
add    %rbx,%r13
lea    0xde5(%rip),%rdx
mov    %r13,%rsi
xor    %eax,%eax
call   1050 <sqlite3_snprintf@plt>
mov    %r13,%rdi
call   1030 <strlen@plt>
add    %eax,%ebx
imul   $0xf4240,%ebp,%eax
sub    %eax,%r12d
cmp    $0x3e7,%r12d
jbe    11ba <speedtest1_numbername+0x8a>
test   %ebx,%ebx
je     1324 <speedtest1_numbername+0x1f4>
lea    -0x1(%r15),%eax
cmp    %eax,%ebx
mov    (%rsp),%r13
jge    132a <speedtest1_numbername+0x1fa>
movslq %ebx,%rax
add    $0x1,%ebx
movb   $0x20,0x0(%r13,%rax,1)
jmp    132a <speedtest1_numbername+0x1fa>
xor    %ebx,%ebx
mov    (%rsp),%r13
movslq %ebx,%rbx
lea    (%rbx,%r13,1),%rsi
mov    %r15d,%edx
sub    %ebx,%edx
mov    %r12d,%eax
imul   $0x10624dd3,%rax,%rbp
shr    $0x26,%rbp
mov    %ebp,%edi
call   1040 <speedtest1_numbername@plt>
add    %ebx,%eax
mov    %r15d,%edi
sub    %eax,%edi
movslq %eax,%rbx
add    %rbx,%r13
lea    0xd6b(%rip),%rdx
mov    %r13,%rsi
xor    %eax,%eax
call   1050 <sqlite3_snprintf@plt>
mov    %r13,%rdi
call   1030 <strlen@plt>
add    %eax,%ebx
imul   $0x3e8,%ebp,%eax
sub    %eax,%r12d
cmp    $0x63,%r12d
ja     11c4 <speedtest1_numbername+0x94>
mov    (%rsp),%r13
cmp    $0x13,%r12d
jbe    13fc <speedtest1_numbername+0x2cc>
test   %ebx,%ebx
je     13aa <speedtest1_numbername+0x27a>
lea    -0x1(%r15),%eax
cmp    %eax,%ebx
jge    13ac <speedtest1_numbername+0x27c>
movslq %ebx,%rax
add    $0x1,%ebx
movb   $0x20,0x0(%r13,%rax,1)
jmp    13ac <speedtest1_numbername+0x27c>
xor    %ebx,%ebx
mov    %r15d,%edi
sub    %ebx,%edi
movslq %ebx,%rbx
lea    (%rbx,%r13,1),%r14
movzbl %r12b,%r12d
imul   $0xcd,%r12d,%ebp
shr    $0xb,%ebp
lea    0xd17(%rip),%rax
movslq (%rax,%rbp,4),%rcx
add    %rax,%rcx
lea    0xd04(%rip),%rdx
mov    %r14,%rsi
xor    %eax,%eax
call   1050 <sqlite3_snprintf@plt>
mov    %r14,%rdi
call   1030 <strlen@plt>
add    %eax,%ebx
add    %ebp,%ebp
lea    0x0(%rbp,%rbp,4),%eax
sub    %al,%r12b
movzbl %r12b,%r12d
test   %r12d,%r12d
je     1452 <speedtest1_numbername+0x322>
test   %ebx,%ebx
je     141b <speedtest1_numbername+0x2eb>
lea    -0x1(%r15),%eax
cmp    %eax,%ebx
jge    141d <speedtest1_numbername+0x2ed>
movslq %ebx,%rax
add    $0x1,%ebx
movb   $0x20,0x0(%r13,%rax,1)
jmp    141d <speedtest1_numbername+0x2ed>
xor    %ebx,%ebx
mov    %r15d,%edi
sub    %ebx,%edi
movslq %ebx,%rbx
lea    (%rbx,%r13,1),%rbp
mov    %r12d,%eax
lea    0x294d(%rip),%rcx
mov    (%rcx,%rax,8),%rcx
lea    0xca1(%rip),%rdx
mov    %rbp,%rsi
xor    %eax,%eax
call   1050 <sqlite3_snprintf@plt>
mov    %rbp,%rdi
call   1030 <strlen@plt>
add    %eax,%ebx
test   %ebx,%ebx
jne    1475 <speedtest1_numbername+0x345>
lea    0xba3(%rip),%rdx
mov    %r15d,%edi
mov    %r13,%rsi
xor    %eax,%eax
call   1050 <sqlite3_snprintf@plt>
mov    %r13,%rdi
call   1030 <strlen@plt>
mov    %rax,%rbx
mov    %ebx,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@speedtest1_numbername.ones = internal global [20 x i8*] [i8* getelementptr inbounds ([5 x i8], [5 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 ([4 x i8], [4 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.9, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.13, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 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 ([8 x i8], [8 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.17, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.19, i32 0, i32 0)]
@.str = [5 x i8] c"zero\00"
@.str.1 = [4 x i8] c"one\00"
@.str.2 = [4 x i8] c"two\00"
@.str.3 = [6 x i8] c"three\00"
@.str.4 = [5 x i8] c"four\00"
@.str.5 = [5 x i8] c"five\00"
@.str.6 = [4 x i8] c"six\00"
@.str.7 = [6 x i8] c"seven\00"
@.str.8 = [6 x i8] c"eight\00"
@.str.9 = [5 x i8] c"nine\00"
@.str.10 = [4 x i8] c"ten\00"
@.str.11 = [7 x i8] c"eleven\00"
@.str.12 = [7 x i8] c"twelve\00"
@.str.13 = [9 x i8] c"thirteen\00"
@.str.14 = [9 x i8] c"fourteen\00"
@.str.15 = [8 x i8] c"fifteen\00"
@.str.16 = [8 x i8] c"sixteen\00"
@.str.17 = [10 x i8] c"seventeen\00"
@.str.18 = [9 x i8] c"eighteen\00"
@.str.19 = [9 x i8] c"nineteen\00"
@speedtest1_numbername.tens = internal global [10 x i8*] [i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 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 ([6 x i8], [6 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 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 ([7 x i8], [7 x i8]* @.str.27, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.28, i32 0, i32 0)]
@.str.20 = [1 x i8] zeroinitializer
@.str.21 = [7 x i8] c"twenty\00"
@.str.22 = [7 x i8] c"thirty\00"
@.str.23 = [6 x i8] c"forty\00"
@.str.24 = [6 x i8] c"fifty\00"
@.str.25 = [6 x i8] c"sixty\00"
@.str.26 = [8 x i8] c"seventy\00"
@.str.27 = [7 x i8] c"eighty\00"
@.str.28 = [7 x i8] c"ninety\00"
@.str.29 = [9 x i8] c" billion\00"
@.str.30 = [9 x i8] c" million\00"
@.str.31 = [10 x i8] c" thousand\00"
@.str.32 = [11 x i8] c"%s hundred\00"
@.str.33 = [3 x i8] c"%s\00"
define i32 @speedtest1_numbername(i32 %0, i8* %1, i32 %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32
store i32 %0, i32* %4
store i8* %1, i8** %5
store i32 %2, i32* %6
store i32 0, i32* %7
%8 = load i32, i32* %4
%9 = icmp uge i32 %8, 1000000000
br i1 %9, label %10, label %41
10: ; preds = %3
%11 = load i32, i32* %4
%12 = udiv i32 %11, 1000000000
%13 = load i8*, i8** %5
%14 = load i32, i32* %7
%15 = sext i32 %14 to i64
%16 = getelementptr inbounds i8, i8* %13, i64 %15
%17 = load i32, i32* %6
%18 = load i32, i32* %7
%19 = sub nsw i32 %17, %18
%20 = call i32 @speedtest1_numbername(i32 %12, i8* %16, i32 %19)
%21 = load i32, i32* %7
%22 = add nsw i32 %21, %20
store i32 %22, i32* %7
%23 = load i32, i32* %6
%24 = load i32, i32* %7
%25 = sub nsw i32 %23, %24
%26 = load i8*, i8** %5
%27 = load i32, i32* %7
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds i8, i8* %26, i64 %28
%30 = call i32 (i32, i8*, i8*, ...) @sqlite3_snprintf(i32 %25, i8* %29, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.29, i64 0, i64 0))
%31 = load i8*, i8** %5
%32 = load i32, i32* %7
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds i8, i8* %31, i64 %33
%35 = call i64 @strlen(i8* %34)
%36 = trunc i64 %35 to i32
%37 = load i32, i32* %7
%38 = add nsw i32 %37, %36
store i32 %38, i32* %7
%39 = load i32, i32* %4
%40 = urem i32 %39, 1000000000
store i32 %40, i32* %4
br label %41
41: ; preds = %10, %3
%42 = load i32, i32* %4
%43 = icmp uge i32 %42, 1000000
br i1 %43, label %44, label %89
44: ; preds = %41
%45 = load i32, i32* %7
%46 = icmp ne i32 %45, 0
br i1 %46, label %47, label %58
47: ; preds = %44
%48 = load i32, i32* %7
%49 = load i32, i32* %6
%50 = sub nsw i32 %49, 1
%51 = icmp slt i32 %48, %50
br i1 %51, label %52, label %58
52: ; preds = %47
%53 = load i8*, i8** %5
%54 = load i32, i32* %7
%55 = add nsw i32 %54, 1
store i32 %55, i32* %7
%56 = sext i32 %54 to i64
%57 = getelementptr inbounds i8, i8* %53, i64 %56
store i8 32, i8* %57
br label %58
58: ; preds = %52, %47, %44
%59 = load i32, i32* %4
%60 = udiv i32 %59, 1000000
%61 = load i8*, i8** %5
%62 = load i32, i32* %7
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds i8, i8* %61, i64 %63
%65 = load i32, i32* %6
%66 = load i32, i32* %7
%67 = sub nsw i32 %65, %66
%68 = call i32 @speedtest1_numbername(i32 %60, i8* %64, i32 %67)
%69 = load i32, i32* %7
%70 = add nsw i32 %69, %68
store i32 %70, i32* %7
%71 = load i32, i32* %6
%72 = load i32, i32* %7
%73 = sub nsw i32 %71, %72
%74 = load i8*, i8** %5
%75 = load i32, i32* %7
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds i8, i8* %74, i64 %76
%78 = call i32 (i32, i8*, i8*, ...) @sqlite3_snprintf(i32 %73, i8* %77, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.30, i64 0, i64 0))
%79 = load i8*, i8** %5
%80 = load i32, i32* %7
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds i8, i8* %79, i64 %81
%83 = call i64 @strlen(i8* %82)
%84 = trunc i64 %83 to i32
%85 = load i32, i32* %7
%86 = add nsw i32 %85, %84
store i32 %86, i32* %7
%87 = load i32, i32* %4
%88 = urem i32 %87, 1000000
store i32 %88, i32* %4
br label %89
89: ; preds = %58, %41
%90 = load i32, i32* %4
%91 = icmp uge i32 %90, 1000
br i1 %91, label %92, label %137
92: ; preds = %89
%93 = load i32, i32* %7
%94 = icmp ne i32 %93, 0
br i1 %94, label %95, label %106
95: ; preds = %92
%96 = load i32, i32* %7
%97 = load i32, i32* %6
%98 = sub nsw i32 %97, 1
%99 = icmp slt i32 %96, %98
br i1 %99, label %100, label %106
100: ; preds = %95
%101 = load i8*, i8** %5
%102 = load i32, i32* %7
%103 = add nsw i32 %102, 1
store i32 %103, i32* %7
%104 = sext i32 %102 to i64
%105 = getelementptr inbounds i8, i8* %101, i64 %104
store i8 32, i8* %105
br label %106
106: ; preds = %100, %95, %92
%107 = load i32, i32* %4
%108 = udiv i32 %107, 1000
%109 = load i8*, i8** %5
%110 = load i32, i32* %7
%111 = sext i32 %110 to i64
%112 = getelementptr inbounds i8, i8* %109, i64 %111
%113 = load i32, i32* %6
%114 = load i32, i32* %7
%115 = sub nsw i32 %113, %114
%116 = call i32 @speedtest1_numbername(i32 %108, i8* %112, i32 %115)
%117 = load i32, i32* %7
%118 = add nsw i32 %117, %116
store i32 %118, i32* %7
%119 = load i32, i32* %6
%120 = load i32, i32* %7
%121 = sub nsw i32 %119, %120
%122 = load i8*, i8** %5
%123 = load i32, i32* %7
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds i8, i8* %122, i64 %124
%126 = call i32 (i32, i8*, i8*, ...) @sqlite3_snprintf(i32 %121, i8* %125, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.31, i64 0, i64 0))
%127 = load i8*, i8** %5
%128 = load i32, i32* %7
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds i8, i8* %127, i64 %129
%131 = call i64 @strlen(i8* %130)
%132 = trunc i64 %131 to i32
%133 = load i32, i32* %7
%134 = add nsw i32 %133, %132
store i32 %134, i32* %7
%135 = load i32, i32* %4
%136 = urem i32 %135, 1000
store i32 %136, i32* %4
br label %137
137: ; preds = %106, %89
%138 = load i32, i32* %4
%139 = icmp uge i32 %138, 100
br i1 %139, label %140, label %178
140: ; preds = %137
%141 = load i32, i32* %7
%142 = icmp ne i32 %141, 0
br i1 %142, label %143, label %154
143: ; preds = %140
%144 = load i32, i32* %7
%145 = load i32, i32* %6
%146 = sub nsw i32 %145, 1
%147 = icmp slt i32 %144, %146
br i1 %147, label %148, label %154
148: ; preds = %143
%149 = load i8*, i8** %5
%150 = load i32, i32* %7
%151 = add nsw i32 %150, 1
store i32 %151, i32* %7
%152 = sext i32 %150 to i64
%153 = getelementptr inbounds i8, i8* %149, i64 %152
store i8 32, i8* %153
br label %154
154: ; preds = %148, %143, %140
%155 = load i32, i32* %6
%156 = load i32, i32* %7
%157 = sub nsw i32 %155, %156
%158 = load i8*, i8** %5
%159 = load i32, i32* %7
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds i8, i8* %158, i64 %160
%162 = load i32, i32* %4
%163 = udiv i32 %162, 100
%164 = zext i32 %163 to i64
%165 = getelementptr inbounds [20 x i8*], [20 x i8*]* @speedtest1_numbername.ones, i64 0, i64 %164
%166 = load i8*, i8** %165
%167 = call i32 (i32, i8*, i8*, ...) @sqlite3_snprintf(i32 %157, i8* %161, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.32, i64 0, i64 0), i8* %166)
%168 = load i8*, i8** %5
%169 = load i32, i32* %7
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds i8, i8* %168, i64 %170
%172 = call i64 @strlen(i8* %171)
%173 = trunc i64 %172 to i32
%174 = load i32, i32* %7
%175 = add nsw i32 %174, %173
store i32 %175, i32* %7
%176 = load i32, i32* %4
%177 = urem i32 %176, 100
store i32 %177, i32* %4
br label %178
178: ; preds = %154, %137
%179 = load i32, i32* %4
%180 = icmp uge i32 %179, 20
br i1 %180, label %181, label %219
181: ; preds = %178
%182 = load i32, i32* %7
%183 = icmp ne i32 %182, 0
br i1 %183, label %184, label %195
184: ; preds = %181
%185 = load i32, i32* %7
%186 = load i32, i32* %6
%187 = sub nsw i32 %186, 1
%188 = icmp slt i32 %185, %187
br i1 %188, label %189, label %195
189: ; preds = %184
%190 = load i8*, i8** %5
%191 = load i32, i32* %7
%192 = add nsw i32 %191, 1
store i32 %192, i32* %7
%193 = sext i32 %191 to i64
%194 = getelementptr inbounds i8, i8* %190, i64 %193
store i8 32, i8* %194
br label %195
195: ; preds = %189, %184, %181
%196 = load i32, i32* %6
%197 = load i32, i32* %7
%198 = sub nsw i32 %196, %197
%199 = load i8*, i8** %5
%200 = load i32, i32* %7
%201 = sext i32 %200 to i64
%202 = getelementptr inbounds i8, i8* %199, i64 %201
%203 = load i32, i32* %4
%204 = udiv i32 %203, 10
%205 = zext i32 %204 to i64
%206 = getelementptr inbounds [10 x i8*], [10 x i8*]* @speedtest1_numbername.tens, i64 0, i64 %205
%207 = load i8*, i8** %206
%208 = call i32 (i32, i8*, i8*, ...) @sqlite3_snprintf(i32 %198, i8* %202, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.33, i64 0, i64 0), i8* %207)
%209 = load i8*, i8** %5
%210 = load i32, i32* %7
%211 = sext i32 %210 to i64
%212 = getelementptr inbounds i8, i8* %209, i64 %211
%213 = call i64 @strlen(i8* %212)
%214 = trunc i64 %213 to i32
%215 = load i32, i32* %7
%216 = add nsw i32 %215, %214
store i32 %216, i32* %7
%217 = load i32, i32* %4
%218 = urem i32 %217, 10
store i32 %218, i32* %4
br label %219
219: ; preds = %195, %178
%220 = load i32, i32* %4
%221 = icmp ugt i32 %220, 0
br i1 %221, label %222, label %257
222: ; preds = %219
%223 = load i32, i32* %7
%224 = icmp ne i32 %223, 0
br i1 %224, label %225, label %236
225: ; preds = %222
%226 = load i32, i32* %7
%227 = load i32, i32* %6
%228 = sub nsw i32 %227, 1
%229 = icmp slt i32 %226, %228
br i1 %229, label %230, label %236
230: ; preds = %225
%231 = load i8*, i8** %5
%232 = load i32, i32* %7
%233 = add nsw i32 %232, 1
store i32 %233, i32* %7
%234 = sext i32 %232 to i64
%235 = getelementptr inbounds i8, i8* %231, i64 %234
store i8 32, i8* %235
br label %236
236: ; preds = %230, %225, %222
%237 = load i32, i32* %6
%238 = load i32, i32* %7
%239 = sub nsw i32 %237, %238
%240 = load i8*, i8** %5
%241 = load i32, i32* %7
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds i8, i8* %240, i64 %242
%244 = load i32, i32* %4
%245 = zext i32 %244 to i64
%246 = getelementptr inbounds [20 x i8*], [20 x i8*]* @speedtest1_numbername.ones, i64 0, i64 %245
%247 = load i8*, i8** %246
%248 = call i32 (i32, i8*, i8*, ...) @sqlite3_snprintf(i32 %239, i8* %243, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.33, i64 0, i64 0), i8* %247)
%249 = load i8*, i8** %5
%250 = load i32, i32* %7
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds i8, i8* %249, i64 %251
%253 = call i64 @strlen(i8* %252)
%254 = trunc i64 %253 to i32
%255 = load i32, i32* %7
%256 = add nsw i32 %255, %254
store i32 %256, i32* %7
br label %257
257: ; preds = %236, %219
%258 = load i32, i32* %7
%259 = icmp eq i32 %258, 0
br i1 %259, label %260, label %277
260: ; preds = %257
%261 = load i32, i32* %6
%262 = load i32, i32* %7
%263 = sub nsw i32 %261, %262
%264 = load i8*, i8** %5
%265 = load i32, i32* %7
%266 = sext i32 %265 to i64
%267 = getelementptr inbounds i8, i8* %264, i64 %266
%268 = call i32 (i32, i8*, i8*, ...) @sqlite3_snprintf(i32 %263, i8* %267, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
%269 = load i8*, i8** %5
%270 = load i32, i32* %7
%271 = sext i32 %270 to i64
%272 = getelementptr inbounds i8, i8* %269, i64 %271
%273 = call i64 @strlen(i8* %272)
%274 = trunc i64 %273 to i32
%275 = load i32, i32* %7
%276 = add nsw i32 %275, %274
store i32 %276, i32* %7
br label %277
277: ; preds = %260, %257
%278 = load i32, i32* %7
ret i32 %278
}

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