int sprint_number_nonlocalized(char *str, double nr) {
  int flag = 0, z, i, j = 0, q, base = 1000000000;
  double var;
  q = (int)nr;
  var = nr - q;
  if (nr < 0.0) {
    str[j++] = '-';
    if (q < 0) {
      q = -q;
    }
  }
  for (i = 10; i; i--) {
    z = q / base;
    q %= base;
    if (z || flag) {
      str[j++] = '0' + z;
      flag = 1;
    }
    base /= 10;
  }
  if (!flag) {
    str[j++] = '0';
  }
  base = 100000000;
  var *= (base * 10);
  q = (int)var;
  if (q < 0) {
    q = -q;
  }
  if (!q) {
    str[j] = 0;
    return j;
  }
  str[j++] = '.';
  for (i = 9; i; i--) {
    z = q / base;
    q %= base;
    str[j++] = '0' + z;
    base /= 10;
  }
  str[j] = 0;
  j--;
  for (; j > 0; j--) {
    if (str[j] == '0') {
      str[j] = 0;
    } else {
      j++;
      break;
    }
  }
  return j;
}


x86 assembly (clang, -O0):
<sprint_number_nonlocalized>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
movsd  %xmm0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x3b9aca00,-0x30(%rbp)
cvttsd2si -0x18(%rbp),%eax
mov    %eax,-0x2c(%rbp)
movsd  -0x18(%rbp),%xmm0
cvtsi2sdl -0x2c(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    1178 <sprint_number_nonlocalized+0x78>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x2d,(%rax,%rcx,1)
cmpl   $0x0,-0x2c(%rbp)
jge    1173 <sprint_number_nonlocalized+0x73>
xor    %eax,%eax
sub    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    1178 <sprint_number_nonlocalized+0x78>
movl   $0xa,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     11f3 <sprint_number_nonlocalized+0xf3>
mov    -0x2c(%rbp),%eax
cltd
idivl  -0x30(%rbp)
mov    %eax,-0x20(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
cltd
idiv   %ecx
mov    %edx,-0x2c(%rbp)
cmpl   $0x0,-0x20(%rbp)
jne    11b3 <sprint_number_nonlocalized+0xb3>
cmpl   $0x0,-0x1c(%rbp)
je     11d7 <sprint_number_nonlocalized+0xd7>
mov    -0x20(%rbp),%eax
add    $0x30,%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x28(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
movl   $0x1,-0x1c(%rbp)
mov    -0x30(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x30(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    117f <sprint_number_nonlocalized+0x7f>
cmpl   $0x0,-0x1c(%rbp)
jne    1213 <sprint_number_nonlocalized+0x113>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x30,(%rax,%rcx,1)
movl   $0x5f5e100,-0x30(%rbp)
imul   $0xa,-0x30(%rbp),%eax
cvtsi2sd %eax,%xmm0
mulsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
cvttsd2si -0x38(%rbp),%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jge    1246 <sprint_number_nonlocalized+0x146>
xor    %eax,%eax
sub    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jne    1267 <sprint_number_nonlocalized+0x167>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1349 <sprint_number_nonlocalized+0x249>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x28(%rbp)
movslq %ecx,%rcx
movb   $0x2e,(%rax,%rcx,1)
movl   $0x9,-0x24(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     12dd <sprint_number_nonlocalized+0x1dd>
mov    -0x2c(%rbp),%eax
cltd
idivl  -0x30(%rbp)
mov    %eax,-0x20(%rbp)
mov    -0x30(%rbp),%ecx
mov    -0x2c(%rbp),%eax
cltd
idiv   %ecx
mov    %edx,-0x2c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x30,%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x28(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x30(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x30(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1284 <sprint_number_nonlocalized+0x184>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x0,-0x28(%rbp)
jle    1343 <sprint_number_nonlocalized+0x243>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1322 <sprint_number_nonlocalized+0x222>
mov    -0x10(%rbp),%rax
movslq -0x28(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1330 <sprint_number_nonlocalized+0x230>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1343 <sprint_number_nonlocalized+0x243>
jmp    1335 <sprint_number_nonlocalized+0x235>
mov    -0x28(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x28(%rbp)
jmp    12f2 <sprint_number_nonlocalized+0x1f2>
mov    -0x28(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<sprint_number_nonlocalized>:
cvttsd2si %xmm0,%eax
xor    %r8d,%r8d
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jbe    1122 <sprint_number_nonlocalized+0x22>
movb   $0x2d,(%rdi)
mov    %eax,%ecx
neg    %ecx
cmovns %ecx,%eax
mov    $0x1,%ecx
jmp    1124 <sprint_number_nonlocalized+0x24>
xor    %ecx,%ecx
movslq %eax,%rdx
imul   $0x44b82fa1,%rdx,%rsi
mov    %rsi,%rax
shr    $0x3f,%rax
sar    $0x3c,%rsi
add    %eax,%esi
imul   $0x3b9aca00,%esi,%r9d
mov    %edx,%eax
sub    %r9d,%eax
add    $0x3b9ac9ff,%edx
cmp    $0x773593ff,%edx
jb     1168 <sprint_number_nonlocalized+0x68>
add    $0x30,%sil
mov    %ecx,%edx
add    $0x1,%ecx
mov    %sil,(%rdi,%rdx,1)
mov    $0x1,%r8d
movslq %eax,%rsi
imul   $0x55e63b89,%rsi,%rdx
mov    %rdx,%rax
shr    $0x3f,%rax
sar    $0x39,%rdx
add    %eax,%edx
imul   $0x5f5e100,%edx,%eax
sub    %eax,%esi
xor    %r9d,%r9d
or     %edx,%r8d
je     11a2 <sprint_number_nonlocalized+0xa2>
add    $0x30,%dl
mov    %ecx,%eax
add    $0x1,%ecx
mov    %dl,(%rdi,%rax,1)
mov    $0x1,%r8d
jmp    11a5 <sprint_number_nonlocalized+0xa5>
xor    %r8d,%r8d
movslq %esi,%rdx
imul   $0x6b5fca6b,%rdx,%rax
mov    %rax,%rsi
shr    $0x3f,%rsi
sar    $0x36,%rax
add    %esi,%eax
imul   $0x989680,%eax,%esi
sub    %esi,%edx
or     %eax,%r8d
je     11d9 <sprint_number_nonlocalized+0xd9>
add    $0x30,%al
mov    %ecx,%esi
add    $0x1,%ecx
mov    %al,(%rdi,%rsi,1)
mov    $0x1,%r9d
movslq %edx,%rdx
imul   $0x431bde83,%rdx,%rax
mov    %rax,%rsi
shr    $0x3f,%rsi
sar    $0x32,%rax
add    %esi,%eax
imul   $0xf4240,%eax,%esi
sub    %esi,%edx
xor    %r8d,%r8d
or     %eax,%r9d
je     1212 <sprint_number_nonlocalized+0x112>
add    $0x30,%al
mov    %ecx,%esi
add    $0x1,%ecx
mov    %al,(%rdi,%rsi,1)
mov    $0x1,%r9d
jmp    1215 <sprint_number_nonlocalized+0x115>
xor    %r9d,%r9d
movslq %edx,%rax
imul   $0x14f8b589,%rax,%rdx
mov    %rdx,%rsi
shr    $0x3f,%rsi
sar    $0x2d,%rdx
add    %esi,%edx
imul   $0x186a0,%edx,%esi
sub    %esi,%eax
or     %edx,%r9d
je     124a <sprint_number_nonlocalized+0x14a>
add    $0x30,%dl
mov    %ecx,%esi
add    $0x1,%ecx
mov    %dl,(%rdi,%rsi,1)
mov    $0x1,%r8d
movslq %eax,%r10
imul   $0x68db8bad,%r10,%rdx
mov    %rdx,%rsi
shr    $0x3f,%rsi
sar    $0x2c,%rdx
add    %esi,%edx
imul   $0x2710,%edx,%esi
sub    %esi,%r10d
xor    %r9d,%r9d
or     %edx,%r8d
je     1285 <sprint_number_nonlocalized+0x185>
add    $0x30,%dl
mov    %ecx,%esi
add    $0x1,%ecx
mov    %dl,(%rdi,%rsi,1)
mov    $0x1,%r8d
jmp    1288 <sprint_number_nonlocalized+0x188>
xor    %r8d,%r8d
cvttpd2dq %xmm0,%xmm1
movswl %r10w,%edx
imul   $0xffff8313,%edx,%edx
shr    $0x10,%edx
add    %r10d,%edx
movzwl %dx,%esi
movswl %si,%edx
shr    $0xf,%esi
sar    $0x9,%edx
add    %esi,%edx
movswl %dx,%esi
imul   $0x3e8,%edx,%eax
sub    %eax,%r10d
or     %r8d,%esi
je     12cc <sprint_number_nonlocalized+0x1cc>
lea    0x30(%rdx),%eax
mov    %ecx,%edx
add    $0x1,%ecx
mov    %al,(%rdi,%rdx,1)
mov    $0x1,%r9d
cvtdq2pd %xmm1,%xmm1
movswl %r10w,%eax
imul   $0x147b,%eax,%edx
mov    %edx,%eax
shr    $0x1f,%eax
sar    $0x13,%edx
add    %eax,%edx
imul   $0x64,%edx,%eax
sub    %eax,%r10d
xor    %r8d,%r8d
or     %edx,%r9d
je     1305 <sprint_number_nonlocalized+0x205>
add    $0x30,%dl
mov    %ecx,%eax
add    $0x1,%ecx
mov    %dl,(%rdi,%rax,1)
mov    $0x1,%r9d
jmp    1308 <sprint_number_nonlocalized+0x208>
xor    %r9d,%r9d
subsd  %xmm1,%xmm0
movsbl %r10b,%esi
imul   $0x67,%esi,%eax
movzwl %ax,%edx
movswl %dx,%eax
shr    $0xf,%edx
shr    $0xa,%eax
add    %dl,%al
movsbl %al,%r10d
movzbl %r10b,%edx
add    %edx,%edx
lea    (%rdx,%rdx,4),%edx
sub    %dl,%sil
movsbl %sil,%esi
or     %r10d,%r9d
je     134a <sprint_number_nonlocalized+0x24a>
add    $0x30,%al
mov    %ecx,%edx
add    $0x1,%ecx
mov    %al,(%rdi,%rdx,1)
mov    $0x1,%r8d
lea    0x30(%rsi),%eax
or     %esi,%r8d
movzbl %al,%eax
mov    $0x30,%edx
cmovne %eax,%edx
mov    %ecx,%r8d
mov    %dl,(%rdi,%r8,1)
mulsd  0xc96(%rip),%xmm0
lea    0x1(%r8),%rax
cvttsd2si %xmm0,%edx
test   %edx,%edx
je     14b7 <sprint_number_nonlocalized+0x3b7>
mov    %edx,%r10d
neg    %r10d
cmovs  %edx,%r10d
movb   $0x2e,(%rdi,%rax,1)
imul   $0x55e63b89,%r10,%r9
shr    $0x39,%r9
imul   $0x5f5e100,%r9d,%edx
sub    %edx,%r10d
add    $0x30,%r9b
mov    %r9b,0x1(%rdi,%rax,1)
imul   $0x6b5fca6b,%r10,%r9
shr    $0x36,%r9
imul   $0x989680,%r9d,%edx
sub    %edx,%r10d
or     $0x30,%r9b
mov    %r9b,0x2(%rdi,%rax,1)
imul   $0x431bde83,%r10,%r9
shr    $0x32,%r9
imul   $0xf4240,%r9d,%edx
sub    %edx,%r10d
add    $0x30,%r9b
mov    %r9b,0x3(%rdi,%rax,1)
mov    %r10d,%edx
shr    $0x5,%edx
imul   $0xa7c5ac5,%rdx,%r9
shr    $0x27,%r9
imul   $0x186a0,%r9d,%edx
sub    %edx,%r10d
or     $0x30,%r9b
mov    %r9b,0x4(%rdi,%rax,1)
mov    $0xd1b71759,%edx
imul   %r10,%rdx
shr    $0x2d,%rdx
imul   $0x2710,%edx,%esi
sub    %esi,%r10d
or     $0x30,%dl
mov    %dl,0x5(%rdi,%rax,1)
movzwl %r10w,%edx
shr    $0x3,%edx
imul   $0x20c5,%edx,%edx
shr    $0x14,%edx
imul   $0x3e8,%edx,%esi
sub    %esi,%r10d
movzwl %r10w,%r9d
add    $0x30,%dl
mov    %dl,0x6(%rdi,%rax,1)
mov    %r9d,%edx
shr    $0x2,%edx
imul   $0x147b,%edx,%edx
shr    $0x11,%edx
imul   $0x64,%edx,%esi
sub    %esi,%r9d
or     $0x30,%dl
mov    %dl,0x7(%rdi,%rax,1)
imul   $0xcd,%r9d,%edx
movzwl %dx,%edx
shr    $0xb,%edx
lea    (%rdx,%rdx,1),%esi
lea    (%rsi,%rsi,4),%esi
sub    %sil,%r9b
or     $0x30,%dl
mov    %dl,0x8(%rdi,%rax,1)
or     $0x30,%r9b
mov    %r9b,0x9(%rdi,%rax,1)
movb   $0x0,0xb(%r8,%rdi,1)
add    $0xb,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %ecx,%eax
lea    -0x1(%rax),%ecx
cmpb   $0x30,(%rdi,%rcx,1)
jne    14b6 <sprint_number_nonlocalized+0x3b6>
movb   $0x0,(%rdi,%rcx,1)
cmp    $0x1,%ecx
jg     14a0 <sprint_number_nonlocalized+0x3a0>
xor    %eax,%eax
ret
movb   $0x0,(%rdi,%rax,1)
ret

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

LLVM IR (-O2):
define i32 @sprint_number_nonlocalized(i8* nocapture %0, double %1) {
%3 = fptosi double %1 to i32
%4 = sitofp i32 %3 to double
%5 = fsub double %1, %4
%6 = fcmp olt double %1, 0.000000e+00
br i1 %6, label %7, label %9
7: ; preds = %2
store i8 45, i8* %0
%8 = tail call i32 @llvm.abs.i32(i32 %3, i1 true)
br label %9
9: ; preds = %7, %2
%10 = phi i32 [ 0, %2 ], [ 1, %7 ]
%11 = phi i32 [ %3, %2 ], [ %8, %7 ]
%12 = srem i32 %11, 1000000000
%13 = sdiv i32 %11, 1000000000
%14 = add i32 %11, 999999999
%15 = icmp ult i32 %14, 1999999999
br i1 %15, label %22, label %16
16: ; preds = %9
%17 = trunc i32 %13 to i8
%18 = add nsw i8 %17, 48
%19 = add nuw nsw i32 %10, 1
%20 = zext i32 %10 to i64
%21 = getelementptr inbounds i8, i8* %0, i64 %20
store i8 %18, i8* %21
br label %22
22: ; preds = %9, %16
%23 = phi i32 [ 1, %16 ], [ 0, %9 ]
%24 = phi i32 [ %19, %16 ], [ %10, %9 ]
%25 = sdiv i32 %12, 100000000
%26 = srem i32 %12, 100000000
%27 = or i32 %25, %23
%28 = icmp eq i32 %27, 0
br i1 %28, label %35, label %29
29: ; preds = %22
%30 = trunc i32 %25 to i8
%31 = add nsw i8 %30, 48
%32 = add nuw nsw i32 %24, 1
%33 = zext i32 %24 to i64
%34 = getelementptr inbounds i8, i8* %0, i64 %33
store i8 %31, i8* %34
br label %35
35: ; preds = %29, %22
%36 = phi i32 [ 1, %29 ], [ 0, %22 ]
%37 = phi i32 [ %32, %29 ], [ %24, %22 ]
%38 = sdiv i32 %26, 10000000
%39 = srem i32 %26, 10000000
%40 = or i32 %38, %36
%41 = icmp eq i32 %40, 0
br i1 %41, label %48, label %42
42: ; preds = %35
%43 = trunc i32 %38 to i8
%44 = add nsw i8 %43, 48
%45 = add nuw nsw i32 %37, 1
%46 = zext i32 %37 to i64
%47 = getelementptr inbounds i8, i8* %0, i64 %46
store i8 %44, i8* %47
br label %48
48: ; preds = %42, %35
%49 = phi i32 [ 1, %42 ], [ 0, %35 ]
%50 = phi i32 [ %45, %42 ], [ %37, %35 ]
%51 = sdiv i32 %39, 1000000
%52 = srem i32 %39, 1000000
%53 = or i32 %51, %49
%54 = icmp eq i32 %53, 0
br i1 %54, label %61, label %55
55: ; preds = %48
%56 = trunc i32 %51 to i8
%57 = add nsw i8 %56, 48
%58 = add nuw nsw i32 %50, 1
%59 = zext i32 %50 to i64
%60 = getelementptr inbounds i8, i8* %0, i64 %59
store i8 %57, i8* %60
br label %61
61: ; preds = %55, %48
%62 = phi i32 [ 1, %55 ], [ 0, %48 ]
%63 = phi i32 [ %58, %55 ], [ %50, %48 ]
%64 = sdiv i32 %52, 100000
%65 = srem i32 %52, 100000
%66 = or i32 %64, %62
%67 = icmp eq i32 %66, 0
br i1 %67, label %74, label %68
68: ; preds = %61
%69 = trunc i32 %64 to i8
%70 = add nsw i8 %69, 48
%71 = add nuw nsw i32 %63, 1
%72 = zext i32 %63 to i64
%73 = getelementptr inbounds i8, i8* %0, i64 %72
store i8 %70, i8* %73
br label %74
74: ; preds = %68, %61
%75 = phi i32 [ 1, %68 ], [ 0, %61 ]
%76 = phi i32 [ %71, %68 ], [ %63, %61 ]
%77 = sdiv i32 %65, 10000
%78 = srem i32 %65, 10000
%79 = or i32 %77, %75
%80 = icmp eq i32 %79, 0
br i1 %80, label %87, label %81
81: ; preds = %74
%82 = trunc i32 %77 to i8
%83 = add nsw i8 %82, 48
%84 = add nuw nsw i32 %76, 1
%85 = zext i32 %76 to i64
%86 = getelementptr inbounds i8, i8* %0, i64 %85
store i8 %83, i8* %86
br label %87
87: ; preds = %81, %74
%88 = phi i32 [ 1, %81 ], [ 0, %74 ]
%89 = phi i32 [ %84, %81 ], [ %76, %74 ]
%90 = trunc i32 %78 to i16
%91 = sdiv i16 %90, 1000
%92 = sext i16 %91 to i32
%93 = trunc i32 %78 to i16
%94 = srem i16 %93, 1000
%95 = or i32 %88, %92
%96 = icmp eq i32 %95, 0
br i1 %96, label %103, label %97
97: ; preds = %87
%98 = trunc i16 %91 to i8
%99 = add nsw i8 %98, 48
%100 = add nuw nsw i32 %89, 1
%101 = zext i32 %89 to i64
%102 = getelementptr inbounds i8, i8* %0, i64 %101
store i8 %99, i8* %102
br label %103
103: ; preds = %97, %87
%104 = phi i32 [ 1, %97 ], [ 0, %87 ]
%105 = phi i32 [ %100, %97 ], [ %89, %87 ]
%106 = sdiv i16 %94, 100
%107 = sext i16 %106 to i32
%108 = srem i16 %94, 100
%109 = or i32 %104, %107
%110 = icmp eq i32 %109, 0
br i1 %110, label %117, label %111
111: ; preds = %103
%112 = trunc i16 %106 to i8
%113 = add nsw i8 %112, 48
%114 = add nuw nsw i32 %105, 1
%115 = zext i32 %105 to i64
%116 = getelementptr inbounds i8, i8* %0, i64 %115
store i8 %113, i8* %116
br label %117
117: ; preds = %111, %103
%118 = phi i32 [ 1, %111 ], [ 0, %103 ]
%119 = phi i32 [ %114, %111 ], [ %105, %103 ]
%120 = trunc i16 %108 to i8
%121 = sdiv i8 %120, 10
%122 = sext i8 %121 to i32
%123 = trunc i16 %108 to i8
%124 = srem i8 %123, 10
%125 = sext i8 %124 to i32
%126 = or i32 %118, %122
%127 = icmp eq i32 %126, 0
br i1 %127, label %133, label %128
128: ; preds = %117
%129 = add nsw i8 %121, 48
%130 = add nuw nsw i32 %119, 1
%131 = zext i32 %119 to i64
%132 = getelementptr inbounds i8, i8* %0, i64 %131
store i8 %129, i8* %132
br label %133
133: ; preds = %128, %117
%134 = phi i32 [ 1, %128 ], [ 0, %117 ]
%135 = phi i32 [ %130, %128 ], [ %119, %117 ]
%136 = or i32 %134, %125
%137 = icmp eq i32 %136, 0
%138 = add nsw i8 %124, 48
%139 = select i1 %137, i8 48, i8 %138
%140 = add nuw nsw i32 %135, 1
%141 = zext i32 %135 to i64
%142 = getelementptr inbounds i8, i8* %0, i64 %141
store i8 %139, i8* %142
%143 = fmul double %5, 1.000000e+09
%144 = fptosi double %143 to i32
%145 = icmp eq i32 %144, 0
br i1 %145, label %146, label %149
146: ; preds = %133
%147 = zext i32 %140 to i64
%148 = getelementptr inbounds i8, i8* %0, i64 %147
store i8 0, i8* %148
br label %223
149: ; preds = %133
%150 = tail call i32 @llvm.abs.i32(i32 %144, i1 true)
%151 = zext i32 %140 to i64
%152 = getelementptr inbounds i8, i8* %0, i64 %151
store i8 46, i8* %152
%153 = zext i32 %140 to i64
%154 = add nuw nsw i64 %153, 1
%155 = udiv i32 %150, 100000000
%156 = urem i32 %150, 100000000
%157 = trunc i32 %155 to i8
%158 = add nuw nsw i8 %157, 48
%159 = getelementptr inbounds i8, i8* %0, i64 %154
store i8 %158, i8* %159
%160 = add nuw nsw i64 %153, 2
%161 = udiv i32 %156, 10000000
%162 = urem i32 %156, 10000000
%163 = trunc i32 %161 to i8
%164 = or i8 %163, 48
%165 = getelementptr inbounds i8, i8* %0, i64 %160
store i8 %164, i8* %165
%166 = add nuw nsw i64 %153, 3
%167 = udiv i32 %162, 1000000
%168 = urem i32 %162, 1000000
%169 = trunc i32 %167 to i8
%170 = add nuw nsw i8 %169, 48
%171 = getelementptr inbounds i8, i8* %0, i64 %166
store i8 %170, i8* %171
%172 = add nuw nsw i64 %153, 4
%173 = udiv i32 %168, 100000
%174 = urem i32 %168, 100000
%175 = trunc i32 %173 to i8
%176 = or i8 %175, 48
%177 = getelementptr inbounds i8, i8* %0, i64 %172
store i8 %176, i8* %177
%178 = add nuw nsw i64 %153, 5
%179 = udiv i32 %174, 10000
%180 = urem i32 %174, 10000
%181 = trunc i32 %179 to i8
%182 = or i8 %181, 48
%183 = getelementptr inbounds i8, i8* %0, i64 %178
store i8 %182, i8* %183
%184 = add nuw nsw i64 %153, 6
%185 = trunc i32 %180 to i16
%186 = udiv i16 %185, 1000
%187 = trunc i32 %180 to i16
%188 = urem i16 %187, 1000
%189 = trunc i16 %186 to i8
%190 = add nuw nsw i8 %189, 48
%191 = getelementptr inbounds i8, i8* %0, i64 %184
store i8 %190, i8* %191
%192 = add nuw nsw i64 %153, 7
%193 = udiv i16 %188, 100
%194 = urem i16 %188, 100
%195 = trunc i16 %193 to i8
%196 = or i8 %195, 48
%197 = getelementptr inbounds i8, i8* %0, i64 %192
store i8 %196, i8* %197
%198 = add nuw nsw i64 %153, 8
%199 = trunc i16 %194 to i8
%200 = udiv i8 %199, 10
%201 = trunc i16 %194 to i8
%202 = urem i8 %201, 10
%203 = or i8 %200, 48
%204 = getelementptr inbounds i8, i8* %0, i64 %198
store i8 %203, i8* %204
%205 = add nuw nsw i64 %153, 9
%206 = or i8 %202, 48
%207 = getelementptr inbounds i8, i8* %0, i64 %205
store i8 %206, i8* %207
%208 = add nuw nsw i32 %135, 11
%209 = trunc i64 %205 to i32
%210 = zext i32 %208 to i64
%211 = getelementptr inbounds i8, i8* %0, i64 %210
store i8 0, i8* %211
br label %212
212: ; preds = %149, %218
%213 = phi i32 [ %219, %218 ], [ %209, %149 ]
%214 = zext i32 %213 to i64
%215 = getelementptr inbounds i8, i8* %0, i64 %214
%216 = load i8, i8* %215
%217 = icmp eq i8 %216, 48
br i1 %217, label %218, label %221
218: ; preds = %212
store i8 0, i8* %215
%219 = add nsw i32 %213, -1
%220 = icmp sgt i32 %213, 1
br i1 %220, label %212, label %223
221: ; preds = %212
%222 = add nuw nsw i32 %213, 1
br label %223
223: ; preds = %218, %221, %146
%224 = phi i32 [ %140, %146 ], [ %222, %221 ], [ 0, %218 ]
ret i32 %224
}