void long_to_string(char *buffer, long number) {
  char *p = buffer;
  int force = 0;
  if (number < 0) {
    *p++ = '-';
    number = -number;
  }
  do {
    if (force || number >= 1000000000)
      *p++ = number / 1000000000 + '0', number %= 1000000000, force = 1;
  } while (0);
  do {
    if (force || number >= 100000000)
      *p++ = number / 100000000 + '0', number %= 100000000, force = 1;
  } while (0);
  do {
    if (force || number >= 10000000)
      *p++ = number / 10000000 + '0', number %= 10000000, force = 1;
  } while (0);
  do {
    if (force || number >= 1000000)
      *p++ = number / 1000000 + '0', number %= 1000000, force = 1;
  } while (0);
  do {
    if (force || number >= 100000)
      *p++ = number / 100000 + '0', number %= 100000, force = 1;
  } while (0);
  do {
    if (force || number >= 10000)
      *p++ = number / 10000 + '0', number %= 10000, force = 1;
  } while (0);
  do {
    if (force || number >= 1000)
      *p++ = number / 1000 + '0', number %= 1000, force = 1;
  } while (0);
  do {
    if (force || number >= 100)
      *p++ = number / 100 + '0', number %= 100, force = 1;
  } while (0);
  do {
    if (force || number >= 10)
      *p++ = number / 10 + '0', number %= 10, force = 1;
  } while (0);
  *p++ = number + '0';
  *p = '\0';
}


x86 assembly (clang, -O0):
<long_to_string>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpq   $0x0,-0x10(%rbp)
jge    1142 <long_to_string+0x42>
mov    -0x18(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x18(%rbp)
movb   $0x2d,(%rax)
xor    %eax,%eax
sub    -0x10(%rbp),%rax
mov    %rax,-0x10(%rbp)
jmp    1147 <long_to_string+0x47>
cmpl   $0x0,-0x1c(%rbp)
jne    115f <long_to_string+0x5f>
cmpq   $0x3b9aca00,-0x10(%rbp)
3b
jl     119d <long_to_string+0x9d>
mov    -0x10(%rbp),%rax
mov    $0x3b9aca00,%ecx
cqto
idiv   %rcx
add    $0x30,%rax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    $0x3b9aca00,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x10(%rbp)
movl   $0x1,-0x1c(%rbp)
jmp    11a2 <long_to_string+0xa2>
jmp    11a7 <long_to_string+0xa7>
cmpl   $0x0,-0x1c(%rbp)
jne    11bf <long_to_string+0xbf>
cmpq   $0x5f5e100,-0x10(%rbp)
05
jl     11fd <long_to_string+0xfd>
mov    -0x10(%rbp),%rax
mov    $0x5f5e100,%ecx
cqto
idiv   %rcx
add    $0x30,%rax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    $0x5f5e100,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x10(%rbp)
movl   $0x1,-0x1c(%rbp)
jmp    1202 <long_to_string+0x102>
jmp    1207 <long_to_string+0x107>
cmpl   $0x0,-0x1c(%rbp)
jne    121f <long_to_string+0x11f>
cmpq   $0x989680,-0x10(%rbp)
jl     125d <long_to_string+0x15d>
mov    -0x10(%rbp),%rax
mov    $0x989680,%ecx
cqto
idiv   %rcx
add    $0x30,%rax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    $0x989680,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x10(%rbp)
movl   $0x1,-0x1c(%rbp)
jmp    1262 <long_to_string+0x162>
jmp    1267 <long_to_string+0x167>
cmpl   $0x0,-0x1c(%rbp)
jne    127f <long_to_string+0x17f>
cmpq   $0xf4240,-0x10(%rbp)
jl     12bd <long_to_string+0x1bd>
mov    -0x10(%rbp),%rax
mov    $0xf4240,%ecx
cqto
idiv   %rcx
add    $0x30,%rax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    $0xf4240,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x10(%rbp)
movl   $0x1,-0x1c(%rbp)
jmp    12c2 <long_to_string+0x1c2>
jmp    12c7 <long_to_string+0x1c7>
cmpl   $0x0,-0x1c(%rbp)
jne    12df <long_to_string+0x1df>
cmpq   $0x186a0,-0x10(%rbp)
jl     131d <long_to_string+0x21d>
mov    -0x10(%rbp),%rax
mov    $0x186a0,%ecx
cqto
idiv   %rcx
add    $0x30,%rax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    $0x186a0,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x10(%rbp)
movl   $0x1,-0x1c(%rbp)
jmp    1322 <long_to_string+0x222>
jmp    1327 <long_to_string+0x227>
cmpl   $0x0,-0x1c(%rbp)
jne    133f <long_to_string+0x23f>
cmpq   $0x2710,-0x10(%rbp)
jl     137d <long_to_string+0x27d>
mov    -0x10(%rbp),%rax
mov    $0x2710,%ecx
cqto
idiv   %rcx
add    $0x30,%rax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    $0x2710,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x10(%rbp)
movl   $0x1,-0x1c(%rbp)
jmp    1382 <long_to_string+0x282>
jmp    1387 <long_to_string+0x287>
cmpl   $0x0,-0x1c(%rbp)
jne    139f <long_to_string+0x29f>
cmpq   $0x3e8,-0x10(%rbp)
jl     13dd <long_to_string+0x2dd>
mov    -0x10(%rbp),%rax
mov    $0x3e8,%ecx
cqto
idiv   %rcx
add    $0x30,%rax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    $0x3e8,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x10(%rbp)
movl   $0x1,-0x1c(%rbp)
jmp    13e2 <long_to_string+0x2e2>
jmp    13e7 <long_to_string+0x2e7>
cmpl   $0x0,-0x1c(%rbp)
jne    13fc <long_to_string+0x2fc>
cmpq   $0x64,-0x10(%rbp)
jl     143a <long_to_string+0x33a>
mov    -0x10(%rbp),%rax
mov    $0x64,%ecx
cqto
idiv   %rcx
add    $0x30,%rax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    $0x64,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x10(%rbp)
movl   $0x1,-0x1c(%rbp)
jmp    143f <long_to_string+0x33f>
jmp    1444 <long_to_string+0x344>
cmpl   $0x0,-0x1c(%rbp)
jne    1459 <long_to_string+0x359>
cmpq   $0xa,-0x10(%rbp)
jl     1497 <long_to_string+0x397>
mov    -0x10(%rbp),%rax
mov    $0xa,%ecx
cqto
idiv   %rcx
add    $0x30,%rax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x10(%rbp),%rax
mov    $0xa,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x10(%rbp)
movl   $0x1,-0x1c(%rbp)
jmp    149c <long_to_string+0x39c>
mov    -0x10(%rbp),%rax
add    $0x30,%rax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
mov    -0x18(%rbp),%rax
movb   $0x0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<long_to_string>:
test   %rsi,%rsi
js     113b <long_to_string+0x3b>
cmp    $0x3b9aca00,%rsi
jb     114e <long_to_string+0x4e>
mov    %rsi,%rax
shr    $0x9,%rax
movabs $0x44b82fa09b5a53,%rcx
mul    %rcx
shr    $0xb,%rdx
lea    0x30(%rdx),%eax
mov    %al,(%rdi)
add    $0x1,%rdi
imul   $0x3b9aca00,%rdx,%rax
sub    %rax,%rsi
jmp    115b <long_to_string+0x5b>
movb   $0x2d,(%rdi)
add    $0x1,%rdi
neg    %rsi
cmp    $0x3b9aca00,%rsi
jae    110e <long_to_string+0xe>
cmp    $0x5f5e100,%rsi
jb     1267 <long_to_string+0x167>
mov    %esi,%eax
imul   $0x55e63b89,%rax,%rax
shr    $0x39,%rax
lea    0x30(%rax),%ecx
mov    %cl,(%rdi)
add    $0x1,%rdi
imul   $0x5f5e100,%eax,%eax
sub    %eax,%esi
mov    %esi,%eax
imul   $0x6b5fca6b,%rax,%rax
shr    $0x36,%rax
lea    0x30(%rax),%ecx
mov    %cl,(%rdi)
add    $0x1,%rdi
imul   $0x989680,%eax,%eax
sub    %eax,%esi
mov    %esi,%eax
imul   $0x431bde83,%rax,%rax
shr    $0x32,%rax
lea    0x30(%rax),%ecx
mov    %cl,(%rdi)
add    $0x1,%rdi
imul   $0xf4240,%eax,%eax
sub    %eax,%esi
mov    %esi,%eax
shr    $0x5,%eax
imul   $0xa7c5ac5,%rax,%rax
shr    $0x27,%rax
lea    0x30(%rax),%ecx
mov    %cl,(%rdi)
add    $0x1,%rdi
imul   $0x186a0,%eax,%eax
sub    %eax,%esi
mov    %esi,%eax
mov    $0xd1b71759,%ecx
imul   %rax,%rcx
shr    $0x2d,%rcx
lea    0x30(%rcx),%eax
mov    %al,(%rdi)
add    $0x1,%rdi
imul   $0x2710,%ecx,%eax
sub    %eax,%esi
movzwl %si,%eax
shr    $0x3,%eax
imul   $0x20c5,%eax,%eax
shr    $0x14,%eax
lea    0x30(%rax),%ecx
mov    %cl,(%rdi)
add    $0x1,%rdi
imul   $0x3e8,%eax,%eax
sub    %eax,%esi
movzwl %si,%esi
movzwl %si,%eax
shr    $0x2,%eax
imul   $0x147b,%eax,%eax
shr    $0x11,%eax
lea    0x30(%rax),%ecx
mov    %cl,(%rdi)
add    $0x1,%rdi
imul   $0x64,%eax,%eax
sub    %eax,%esi
movzwl %si,%esi
movzbl %sil,%eax
imul   $0xcd,%eax,%eax
shr    $0xb,%eax
lea    0x30(%rax),%ecx
mov    %cl,(%rdi)
add    $0x1,%rdi
add    %eax,%eax
lea    (%rax,%rax,4),%eax
sub    %al,%sil
movzbl %sil,%esi
add    $0x30,%sil
mov    %sil,(%rdi)
movb   $0x0,0x1(%rdi)
ret
cmp    $0x989680,%rsi
jae    1179 <long_to_string+0x79>
cmp    $0xf4240,%rsi
jae    1197 <long_to_string+0x97>
cmp    $0x186a0,%rsi
jae    11b5 <long_to_string+0xb5>
cmp    $0x2710,%rsi
jae    11d6 <long_to_string+0xd6>
cmp    $0x3e8,%rsi
jae    11f6 <long_to_string+0xf6>
cmp    $0x64,%rsi
jae    1219 <long_to_string+0x119>
cmp    $0xa,%rsi
jae    1239 <long_to_string+0x139>
jmp    125b <long_to_string+0x15b>

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

LLVM IR (-O2):
define void @long_to_string(i8* nocapture writeonly %0, i64 %1) {
%3 = icmp slt i64 %1, 0
br i1 %3, label %4, label %7
4: ; preds = %2
%5 = getelementptr inbounds i8, i8* %0, i64 1
store i8 45, i8* %0
%6 = sub nsw i64 0, %1
br label %7
7: ; preds = %2, %4
%8 = phi i64 [ %6, %4 ], [ %1, %2 ]
%9 = phi i8* [ %5, %4 ], [ %0, %2 ]
%10 = icmp ugt i64 %8, 999999999
br i1 %10, label %11, label %17
11: ; preds = %7
%12 = udiv i64 %8, 1000000000
%13 = trunc i64 %12 to i8
%14 = add i8 %13, 48
%15 = getelementptr inbounds i8, i8* %9, i64 1
store i8 %14, i8* %9
%16 = urem i64 %8, 1000000000
br label %19
17: ; preds = %7
%18 = icmp ugt i64 %8, 99999999
br i1 %18, label %19, label %29
19: ; preds = %17, %11
%20 = phi i8* [ %15, %11 ], [ %9, %17 ]
%21 = phi i64 [ %16, %11 ], [ %8, %17 ]
%22 = trunc i64 %21 to i32
%23 = udiv i32 %22, 100000000
%24 = trunc i32 %23 to i8
%25 = add nuw nsw i8 %24, 48
%26 = getelementptr inbounds i8, i8* %20, i64 1
store i8 %25, i8* %20
%27 = urem i32 %22, 100000000
%28 = zext i32 %27 to i64
br label %31
29: ; preds = %17
%30 = icmp ugt i64 %8, 9999999
br i1 %30, label %31, label %41
31: ; preds = %19, %29
%32 = phi i8* [ %26, %19 ], [ %9, %29 ]
%33 = phi i64 [ %28, %19 ], [ %8, %29 ]
%34 = trunc i64 %33 to i32
%35 = udiv i32 %34, 10000000
%36 = trunc i32 %35 to i8
%37 = add nuw nsw i8 %36, 48
%38 = getelementptr inbounds i8, i8* %32, i64 1
store i8 %37, i8* %32
%39 = urem i32 %34, 10000000
%40 = zext i32 %39 to i64
br label %43
41: ; preds = %29
%42 = icmp ugt i64 %8, 999999
br i1 %42, label %43, label %53
43: ; preds = %41, %31
%44 = phi i8* [ %38, %31 ], [ %9, %41 ]
%45 = phi i64 [ %40, %31 ], [ %8, %41 ]
%46 = trunc i64 %45 to i32
%47 = udiv i32 %46, 1000000
%48 = trunc i32 %47 to i8
%49 = add nuw nsw i8 %48, 48
%50 = getelementptr inbounds i8, i8* %44, i64 1
store i8 %49, i8* %44
%51 = urem i32 %46, 1000000
%52 = zext i32 %51 to i64
br label %55
53: ; preds = %41
%54 = icmp ugt i64 %8, 99999
br i1 %54, label %55, label %65
55: ; preds = %43, %53
%56 = phi i8* [ %50, %43 ], [ %9, %53 ]
%57 = phi i64 [ %52, %43 ], [ %8, %53 ]
%58 = trunc i64 %57 to i32
%59 = udiv i32 %58, 100000
%60 = trunc i32 %59 to i8
%61 = add nuw nsw i8 %60, 48
%62 = getelementptr inbounds i8, i8* %56, i64 1
store i8 %61, i8* %56
%63 = urem i32 %58, 100000
%64 = zext i32 %63 to i64
br label %67
65: ; preds = %53
%66 = icmp ugt i64 %8, 9999
br i1 %66, label %67, label %77
67: ; preds = %65, %55
%68 = phi i8* [ %62, %55 ], [ %9, %65 ]
%69 = phi i64 [ %64, %55 ], [ %8, %65 ]
%70 = trunc i64 %69 to i32
%71 = udiv i32 %70, 10000
%72 = trunc i32 %71 to i8
%73 = add nuw nsw i8 %72, 48
%74 = getelementptr inbounds i8, i8* %68, i64 1
store i8 %73, i8* %68
%75 = urem i32 %70, 10000
%76 = zext i32 %75 to i64
br label %79
77: ; preds = %65
%78 = icmp ugt i64 %8, 999
br i1 %78, label %79, label %89
79: ; preds = %67, %77
%80 = phi i8* [ %74, %67 ], [ %9, %77 ]
%81 = phi i64 [ %76, %67 ], [ %8, %77 ]
%82 = trunc i64 %81 to i16
%83 = udiv i16 %82, 1000
%84 = trunc i16 %83 to i8
%85 = add nuw nsw i8 %84, 48
%86 = getelementptr inbounds i8, i8* %80, i64 1
store i8 %85, i8* %80
%87 = urem i16 %82, 1000
%88 = zext i16 %87 to i64
br label %91
89: ; preds = %77
%90 = icmp ugt i64 %8, 99
br i1 %90, label %91, label %101
91: ; preds = %89, %79
%92 = phi i8* [ %86, %79 ], [ %9, %89 ]
%93 = phi i64 [ %88, %79 ], [ %8, %89 ]
%94 = trunc i64 %93 to i16
%95 = udiv i16 %94, 100
%96 = trunc i16 %95 to i8
%97 = add nuw nsw i8 %96, 48
%98 = getelementptr inbounds i8, i8* %92, i64 1
store i8 %97, i8* %92
%99 = urem i16 %94, 100
%100 = zext i16 %99 to i64
br label %103
101: ; preds = %89
%102 = icmp ugt i64 %8, 9
br i1 %102, label %103, label %112
103: ; preds = %91, %101
%104 = phi i8* [ %98, %91 ], [ %9, %101 ]
%105 = phi i64 [ %100, %91 ], [ %8, %101 ]
%106 = trunc i64 %105 to i8
%107 = udiv i8 %106, 10
%108 = add nuw nsw i8 %107, 48
%109 = getelementptr inbounds i8, i8* %104, i64 1
store i8 %108, i8* %104
%110 = urem i8 %106, 10
%111 = zext i8 %110 to i64
br label %112
112: ; preds = %101, %103
%113 = phi i64 [ %111, %103 ], [ %8, %101 ]
%114 = phi i8* [ %109, %103 ], [ %9, %101 ]
%115 = trunc i64 %113 to i8
%116 = add nuw nsw i8 %115, 48
%117 = getelementptr inbounds i8, i8* %114, i64 1
store i8 %116, i8* %114
store i8 0, i8* %117
ret void
}