#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 copystring(char *, unsigned int, char *);
unsigned int isinf(double);
scalar_t__ isnan(double);
int __dtostr(double d, char *buf, unsigned int maxlen, unsigned int prec,
             unsigned int prec2, int g) {
  union {
    unsigned long long l;
    double d;
  } u = {.d = d};
  signed long e = ((u.l >> 52) & ((1 << 11) - 1)) - 1023;
  signed long e10;
  unsigned int i;
  double backup = d;
  double tmp;
  char *oldbuf = buf;
  if ((i = isinf(d)))
    return copystring(buf, maxlen, i > 0 ? "inf" : "-inf");
  if (isnan(d))
    return copystring(buf, maxlen, "nan");
  e10 = 1 + (long)(e * 0.30102999566398119802);
  if (d == 0.0) {
    prec2 = prec2 == 0 ? 1 : prec2 + 2;
    prec2 = prec2 > maxlen ? 8 : prec2;
    i = 0;
    if (prec2 && (long long)u.l < 0) {
      buf[0] = '-';
      ++i;
    }
    for (; i < prec2; ++i)
      buf[i] = '0';
    buf[buf[0] == '0' ? 1 : 2] = '.';
    buf[i] = 0;
    return i;
  }
  if (d < 0.0) {
    d = -d;
    *buf = '-';
    --maxlen;
    ++buf;
  }
  tmp = 0.5;
  for (i = 0; i < prec2; i++) {
    tmp *= 0.1;
  }
  d += tmp;
  if (d < 1.0) {
    *buf = '0';
    --maxlen;
    ++buf;
  }
  if (e10 > 0) {
    int first = 1;
    tmp = 10.0;
    i = e10;
    while (i > 10) {
      tmp = tmp * 1e10;
      i -= 10;
    }
    while (i > 1) {
      tmp = tmp * 10;
      --i;
    }
    while (tmp > 0.9) {
      char digit;
      double fraction = d / tmp;
      digit = (int)(fraction);
      if (!first || digit) {
        first = 0;
        *buf = digit + '0';
        ++buf;
        if (!maxlen) {
          int len = __dtostr(backup / tmp, oldbuf, maxlen, prec, prec2, 0);
          int initial = 1;
          if (len == 0)
            return 0;
          maxlen -= len;
          buf += len;
          if (maxlen > 0) {
            *buf = 'e';
            ++buf;
          }
          --maxlen;
          for (len = 1000; len > 0; len /= 10) {
            if (e10 >= len || !initial) {
              if (maxlen > 0) {
                *buf = (e10 / len) + '0';
                ++buf;
              }
              --maxlen;
              initial = 0;
              e10 = e10 % len;
            }
          }
          if (maxlen > 0)
            goto fini;
          return 0;
        }
        d -= digit * tmp;
        --maxlen;
      }
      tmp /= 10.0;
    }
  } else {
    tmp = 0.1;
  }
  if (buf == oldbuf) {
    if (!maxlen)
      return 0;
    --maxlen;
    *buf = '0';
    ++buf;
  }
  if (prec2 || prec > (unsigned int)(buf - oldbuf) + 1) {
    if (!maxlen)
      return 0;
    --maxlen;
    *buf = '.';
    ++buf;
    if (g) {
      if (prec2)
        prec = prec2;
      prec -= buf - oldbuf - 1;
    } else {
      prec -= buf - oldbuf - 1;
      if (prec2)
        prec = prec2;
    }
    if (prec > maxlen)
      return 0;
    while (prec > 0) {
      char digit;
      double fraction = d / tmp;
      digit = (int)(fraction);
      *buf = digit + '0';
      ++buf;
      d -= digit * tmp;
      tmp /= 10.0;
      --prec;
    }
  }
fini:
  *buf = 0;
  return buf - oldbuf;
}


x86 assembly (clang, -O0):
<__dtostr>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
movsd  %xmm0,-0x10(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %esi,-0x1c(%rbp)
mov    %edx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
mov    %r8d,-0x28(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x30(%rbp),%rax
shr    $0x34,%rax
and    $0x7ff,%rax
sub    $0x3ff,%rax
mov    %rax,-0x38(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x60(%rbp)
movsd  -0x10(%rbp),%xmm0
call   1060 <isinf@plt>
mov    %eax,-0x44(%rbp)
cmp    $0x0,%eax
je     11d7 <__dtostr+0x97>
mov    -0x18(%rbp),%rdi
mov    -0x1c(%rbp),%esi
mov    -0x44(%rbp),%ecx
lea    0xe7c(%rip),%rdx
lea    0xe76(%rip),%rax
cmp    $0x0,%ecx
cmova  %rax,%rdx
call   1040 <copystring@plt>
mov    %eax,-0x4(%rbp)
jmp    1853 <__dtostr+0x713>
movsd  -0x10(%rbp),%xmm0
call   1050 <isnan@plt>
cmp    $0x0,%rax
je     1206 <__dtostr+0xc6>
mov    -0x18(%rbp),%rdi
mov    -0x1c(%rbp),%esi
lea    0xe44(%rip),%rdx
call   1040 <copystring@plt>
mov    %eax,-0x4(%rbp)
jmp    1853 <__dtostr+0x713>
cvtsi2sdq -0x38(%rbp),%xmm0
movsd  0xdec(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
movsd  -0x10(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1328 <__dtostr+0x1e8>
jp     1328 <__dtostr+0x1e8>
cmpl   $0x0,-0x24(%rbp)
jne    1257 <__dtostr+0x117>
mov    $0x1,%eax
mov    %eax,-0x8c(%rbp)
jmp    1263 <__dtostr+0x123>
mov    -0x24(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x8c(%rbp)
mov    -0x8c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jbe    1288 <__dtostr+0x148>
mov    $0x8,%eax
mov    %eax,-0x90(%rbp)
jmp    1291 <__dtostr+0x151>
mov    -0x24(%rbp),%eax
mov    %eax,-0x90(%rbp)
mov    -0x90(%rbp),%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x44(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     12c6 <__dtostr+0x186>
cmpq   $0x0,-0x30(%rbp)
jge    12c6 <__dtostr+0x186>
mov    -0x18(%rbp),%rax
movb   $0x2d,(%rax)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    12cb <__dtostr+0x18b>
mov    -0x44(%rbp),%eax
cmp    -0x24(%rbp),%eax
jae    12f0 <__dtostr+0x1b0>
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
movb   $0x30,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    12cb <__dtostr+0x18b>
mov    -0x18(%rbp),%rax
mov    -0x18(%rbp),%rcx
movsbl (%rcx),%esi
mov    $0x2,%ecx
mov    $0x1,%edx
cmp    $0x30,%esi
cmove  %edx,%ecx
movslq %ecx,%rcx
movb   $0x2e,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x44(%rbp),%ecx
movb   $0x0,(%rax,%rcx,1)
mov    -0x44(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    1853 <__dtostr+0x713>
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    1373 <__dtostr+0x233>
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x18(%rbp),%rax
movb   $0x2d,(%rax)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
movsd  0xc8d(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x24(%rbp),%eax
jae    13b3 <__dtostr+0x273>
movsd  0xc7d(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1387 <__dtostr+0x247>
movsd  -0x58(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xc46(%rip),%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    13f1 <__dtostr+0x2b1>
mov    -0x18(%rbp),%rax
movb   $0x30,(%rax)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
cmpq   $0x0,-0x40(%rbp)
jle    1675 <__dtostr+0x535>
movl   $0x1,-0x64(%rbp)
movsd  0xc15(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x40(%rbp),%rax
mov    %eax,-0x44(%rbp)
cmpl   $0xa,-0x44(%rbp)
jbe    1441 <__dtostr+0x301>
movsd  0xc07(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x44(%rbp),%eax
sub    $0xa,%eax
mov    %eax,-0x44(%rbp)
jmp    1417 <__dtostr+0x2d7>
jmp    1446 <__dtostr+0x306>
cmpl   $0x1,-0x44(%rbp)
jbe    1470 <__dtostr+0x330>
movsd  0xbc8(%rip),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x44(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x44(%rbp)
jmp    1446 <__dtostr+0x306>
jmp    1475 <__dtostr+0x335>
movsd  -0x58(%rbp),%xmm0
movsd  0xba6(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1670 <__dtostr+0x530>
movsd  -0x10(%rbp),%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
cvttsd2si -0x70(%rbp),%eax
mov    %al,-0x65(%rbp)
cmpl   $0x0,-0x64(%rbp)
je     14ba <__dtostr+0x37a>
movsbl -0x65(%rbp),%eax
cmp    $0x0,%eax
je     1655 <__dtostr+0x515>
movl   $0x0,-0x64(%rbp)
movsbl -0x65(%rbp),%eax
add    $0x30,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %cl,(%rax)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jne    1616 <__dtostr+0x4d6>
movsd  -0x50(%rbp),%xmm0
divsd  -0x58(%rbp),%xmm0
mov    -0x60(%rbp),%rdi
mov    -0x1c(%rbp),%esi
mov    -0x20(%rbp),%edx
mov    -0x24(%rbp),%ecx
xor    %r8d,%r8d
call   1030 <__dtostr@plt>
mov    %eax,-0x74(%rbp)
movl   $0x1,-0x78(%rbp)
cmpl   $0x0,-0x74(%rbp)
jne    1525 <__dtostr+0x3e5>
movl   $0x0,-0x4(%rbp)
jmp    1853 <__dtostr+0x713>
mov    -0x74(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x74(%rbp),%ecx
mov    -0x18(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x18(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jbe    155e <__dtostr+0x41e>
mov    -0x18(%rbp),%rax
movb   $0x65,(%rax)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
movl   $0x3e8,-0x74(%rbp)
cmpl   $0x0,-0x74(%rbp)
jle    15fb <__dtostr+0x4bb>
mov    -0x40(%rbp),%rax
movslq -0x74(%rbp),%rcx
cmp    %rcx,%rax
jge    1593 <__dtostr+0x453>
cmpl   $0x0,-0x78(%rbp)
jne    15e3 <__dtostr+0x4a3>
cmpl   $0x0,-0x1c(%rbp)
jbe    15c2 <__dtostr+0x482>
mov    -0x40(%rbp),%rax
movslq -0x74(%rbp),%rcx
cqto
idiv   %rcx
add    $0x30,%rax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %cl,(%rax)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0x78(%rbp)
mov    -0x40(%rbp),%rax
movslq -0x74(%rbp),%rcx
cqto
idiv   %rcx
mov    %rdx,-0x40(%rbp)
jmp    15e8 <__dtostr+0x4a8>
mov    -0x74(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
mov    %eax,-0x74(%rbp)
jmp    156e <__dtostr+0x42e>
cmpl   $0x0,-0x1c(%rbp)
jbe    160a <__dtostr+0x4ca>
jmp    183e <__dtostr+0x6fe>
movl   $0x0,-0x4(%rbp)
jmp    1853 <__dtostr+0x713>
movsbl -0x65(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  0x9be(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    1475 <__dtostr+0x335>
jmp    1682 <__dtostr+0x542>
movsd  0x99b(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
cmp    -0x60(%rbp),%rax
jne    16c2 <__dtostr+0x582>
cmpl   $0x0,-0x1c(%rbp)
jne    16a6 <__dtostr+0x566>
movl   $0x0,-0x4(%rbp)
jmp    1853 <__dtostr+0x713>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%rax
movb   $0x30,(%rax)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
cmpl   $0x0,-0x24(%rbp)
jne    16e5 <__dtostr+0x5a5>
mov    -0x20(%rbp),%eax
mov    -0x18(%rbp),%rcx
mov    -0x60(%rbp),%rdx
sub    %rdx,%rcx
add    $0x1,%ecx
cmp    %ecx,%eax
jbe    1839 <__dtostr+0x6f9>
cmpl   $0x0,-0x1c(%rbp)
jne    16fb <__dtostr+0x5bb>
movl   $0x0,-0x4(%rbp)
jmp    1853 <__dtostr+0x713>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%rax
movb   $0x2e,(%rax)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
cmpl   $0x0,-0x28(%rbp)
je     174e <__dtostr+0x60e>
cmpl   $0x0,-0x24(%rbp)
je     1731 <__dtostr+0x5f1>
mov    -0x24(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%rcx
mov    -0x60(%rbp),%rax
sub    %rax,%rcx
sub    $0x1,%rcx
mov    -0x20(%rbp),%eax
sub    %rcx,%rax
mov    %eax,-0x20(%rbp)
jmp    177b <__dtostr+0x63b>
mov    -0x18(%rbp),%rcx
mov    -0x60(%rbp),%rax
sub    %rax,%rcx
sub    $0x1,%rcx
mov    -0x20(%rbp),%eax
sub    %rcx,%rax
mov    %eax,-0x20(%rbp)
cmpl   $0x0,-0x24(%rbp)
je     1776 <__dtostr+0x636>
mov    -0x24(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    177b <__dtostr+0x63b>
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jbe    1793 <__dtostr+0x653>
movl   $0x0,-0x4(%rbp)
jmp    1853 <__dtostr+0x713>
jmp    1798 <__dtostr+0x658>
cmpl   $0x0,-0x20(%rbp)
jbe    1834 <__dtostr+0x6f4>
movsd  -0x10(%rbp),%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
cvttsd2si -0x88(%rbp),%eax
ff
mov    %al,-0x79(%rbp)
movsbl -0x79(%rbp),%eax
add    $0x30,%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %cl,(%rax)
mov    -0x18(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x18(%rbp)
movsbl -0x79(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  0x803(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
jmp    1798 <__dtostr+0x658>
jmp    1839 <__dtostr+0x6f9>
jmp    183e <__dtostr+0x6fe>
mov    -0x18(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x18(%rbp),%rax
mov    -0x60(%rbp),%rcx
sub    %rcx,%rax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<__dtostr>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r8d,%r13d
mov    %ecx,%r15d
mov    %edx,%ebp
mov    %esi,%ebx
mov    %rdi,%r12
movaps %xmm0,0x10(%rsp)
call   1070 <isinf@plt>
test   %eax,%eax
je     1182 <__dtostr+0x32>
lea    0xed0(%rip),%rdx
jmp    1198 <__dtostr+0x48>
movaps 0x10(%rsp),%xmm0
call   1060 <isnan@plt>
test   %rax,%rax
je     11b0 <__dtostr+0x60>
lea    0xebc(%rip),%rdx
mov    %r12,%rdi
mov    %ebx,%esi
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1050 <copystring@plt>
movdqa 0x10(%rsp),%xmm0
movq   %xmm0,%rax
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
jne    121a <__dtostr+0xca>
jp     121a <__dtostr+0xca>
lea    0x2(%r15),%ecx
test   %r15d,%r15d
mov    $0x1,%edx
cmovne %ecx,%edx
cmp    %ebx,%edx
mov    $0x8,%r13d
cmovbe %edx,%r13d
xor    %edx,%edx
test   %rax,%rax
jns    11f8 <__dtostr+0xa8>
test   %r13d,%r13d
je     11f8 <__dtostr+0xa8>
movb   $0x2d,(%r12)
mov    $0x1,%edx
mov    %edx,%edi
cmp    %r13d,%edx
jae    124e <__dtostr+0xfe>
add    %r12,%rdi
not    %edx
add    %r13d,%edx
add    $0x1,%rdx
mov    $0x30,%esi
call   1040 <memset@plt>
mov    %r13d,%edi
jmp    1251 <__dtostr+0x101>
shr    $0x34,%rax
and    $0x7ff,%eax
add    $0xfffffffffffffc01,%rax
cvtsi2sd %eax,%xmm1
ucomisd %xmm0,%xmm2
jbe    127b <__dtostr+0x12b>
movapd 0xe05(%rip),%xmm5
xorpd  %xmm0,%xmm5
movb   $0x2d,(%r12)
add    $0xffffffff,%ebx
lea    0x1(%r12),%r14
jmp    1282 <__dtostr+0x132>
mov    %edx,%r13d
xor    %eax,%eax
cmpb   $0x30,(%r12)
sete   %al
neg    %rax
movb   $0x2e,0x2(%r12,%rax,1)
movb   $0x0,(%r12,%rdi,1)
mov    %r13d,%eax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r12,%r14
movapd %xmm0,%xmm5
mulsd  0xd76(%rip),%xmm1
test   %r15d,%r15d
je     12a8 <__dtostr+0x158>
lea    -0x1(%r15),%ecx
mov    %r15d,%eax
and    $0x7,%eax
cmp    $0x7,%ecx
jae    12b2 <__dtostr+0x162>
movsd  0xd62(%rip),%xmm2
jmp    12f5 <__dtostr+0x1a5>
movsd  0xd58(%rip),%xmm2
jmp    1319 <__dtostr+0x1c9>
mov    %r15d,%ecx
and    $0xfffffff8,%ecx
movsd  0xd48(%rip),%xmm2
movsd  0xd48(%rip),%xmm3
nopl   0x0(%rax,%rax,1)
mulsd  %xmm3,%xmm2
mulsd  %xmm3,%xmm2
mulsd  %xmm3,%xmm2
mulsd  %xmm3,%xmm2
mulsd  %xmm3,%xmm2
mulsd  %xmm3,%xmm2
mulsd  %xmm3,%xmm2
mulsd  %xmm3,%xmm2
add    $0xfffffff8,%ecx
jne    12d0 <__dtostr+0x180>
test   %eax,%eax
je     1319 <__dtostr+0x1c9>
movsd  0xd0f(%rip),%xmm3
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mulsd  %xmm3,%xmm2
add    $0xffffffff,%eax
jne    1310 <__dtostr+0x1c0>
cvttsd2si %xmm1,%rdi
addsd  %xmm2,%xmm5
movsd  0xcee(%rip),%xmm1
ucomisd %xmm5,%xmm1
jbe    133b <__dtostr+0x1eb>
movb   $0x30,(%r14)
add    $0xffffffff,%ebx
add    $0x1,%r14
test   %rdi,%rdi
js     1392 <__dtostr+0x242>
lea    0x1(%rdi),%r8
cmp    $0xb,%r8d
jb     139f <__dtostr+0x24f>
lea    -0xb(%r8),%ecx
mov    $0xcccccccd,%eax
imul   %rcx,%rax
shr    $0x23,%rax
add    $0x1,%eax
and    $0x7,%eax
je     13ac <__dtostr+0x25c>
add    %eax,%eax
lea    (%rax,%rax,4),%eax
movsd  0xcb0(%rip),%xmm1
xor    %edx,%edx
movsd  0xcae(%rip),%xmm2
nopw   0x0(%rax,%rax,1)
mulsd  %xmm2,%xmm1
add    $0xa,%edx
cmp    %edx,%eax
jne    1380 <__dtostr+0x230>
mov    %r8d,%eax
sub    %edx,%eax
jmp    13b7 <__dtostr+0x267>
movsd  0xc76(%rip),%xmm1
jmp    14da <__dtostr+0x38a>
movsd  0xc79(%rip),%xmm1
mov    %r8d,%eax
jmp    13f8 <__dtostr+0x2a8>
movsd  0xc6c(%rip),%xmm1
mov    %r8d,%eax
cmp    $0x46,%ecx
jb     13f8 <__dtostr+0x2a8>
movsd  0xc64(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
add    $0xffffffb0,%eax
cmp    $0xa,%eax
ja     13d0 <__dtostr+0x280>
cmp    $0x2,%eax
jb     1468 <__dtostr+0x318>
lea    -0x1(%rax),%edx
lea    -0x2(%rax),%ecx
and    $0x7,%edx
je     142d <__dtostr+0x2dd>
xor    %esi,%esi
movsd  0xc0e(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mulsd  %xmm2,%xmm1
add    $0x1,%esi
cmp    %esi,%edx
jne    1420 <__dtostr+0x2d0>
sub    %esi,%eax
cmp    $0x7,%ecx
jb     1468 <__dtostr+0x318>
movsd  0xbe6(%rip),%xmm2
nopw   0x0(%rax,%rax,1)
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
mulsd  %xmm2,%xmm1
add    $0xfffffff8,%eax
cmp    $0x1,%eax
ja     1440 <__dtostr+0x2f0>
ucomisd 0xbc0(%rip),%xmm1
jbe    14da <__dtostr+0x38a>
mov    $0x1,%eax
movsd  0xba1(%rip),%xmm2
movsd  0xba9(%rip),%xmm3
jmp    1498 <__dtostr+0x348>
mov    $0x1,%eax
divsd  %xmm2,%xmm1
ucomisd %xmm3,%xmm1
jbe    14da <__dtostr+0x38a>
movapd %xmm5,%xmm4
divsd  %xmm1,%xmm4
cvttsd2si %xmm4,%ecx
test   %eax,%eax
je     14af <__dtostr+0x35f>
mov    %ecx,%eax
shl    $0x18,%eax
je     1489 <__dtostr+0x339>
lea    0x30(%rcx),%eax
mov    %al,(%r14)
add    $0x1,%r14
test   %ebx,%ebx
je     15ae <__dtostr+0x45e>
movsbl %cl,%eax
xorps  %xmm4,%xmm4
cvtsi2sd %eax,%xmm4
mulsd  %xmm1,%xmm4
subsd  %xmm4,%xmm5
add    $0xffffffff,%ebx
xor    %eax,%eax
jmp    148e <__dtostr+0x33e>
cmp    %r12,%r14
jne    14f4 <__dtostr+0x3a4>
test   %ebx,%ebx
je     15a6 <__dtostr+0x456>
add    $0xffffffff,%ebx
movb   $0x30,(%r12)
lea    0x1(%r12),%r14
test   %r15d,%r15d
jne    150a <__dtostr+0x3ba>
mov    %r14d,%eax
sub    %r12d,%eax
add    $0x1,%eax
cmp    %ebp,%eax
jae    171f <__dtostr+0x5cf>
mov    %r13d,%eax
xor    %r13d,%r13d
test   %ebx,%ebx
je     1269 <__dtostr+0x119>
add    $0xffffffff,%ebx
movb   $0x2e,(%r14)
add    $0x1,%r14
test   %eax,%eax
je     153a <__dtostr+0x3ea>
test   %r15d,%r15d
cmovne %r15d,%ebp
mov    %r12d,%eax
not    %eax
add    %r14d,%eax
sub    %eax,%ebp
jmp    154b <__dtostr+0x3fb>
mov    %r12d,%eax
not    %eax
add    %r14d,%eax
sub    %eax,%ebp
test   %r15d,%r15d
cmovne %r15d,%ebp
cmp    %ebx,%ebp
ja     1269 <__dtostr+0x119>
test   %ebp,%ebp
je     171f <__dtostr+0x5cf>
movsd  0xabd(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movapd %xmm5,%xmm3
divsd  %xmm1,%xmm3
cvttsd2si %xmm3,%eax
movsbl %al,%eax
lea    0x30(%rax),%ecx
mov    %cl,(%r14)
add    $0x1,%r14
xorps  %xmm3,%xmm3
cvtsi2sd %eax,%xmm3
mulsd  %xmm1,%xmm3
subsd  %xmm3,%xmm5
divsd  %xmm2,%xmm1
add    $0xffffffff,%ebp
jne    1570 <__dtostr+0x420>
jmp    171f <__dtostr+0x5cf>
xor    %r13d,%r13d
jmp    1269 <__dtostr+0x119>
mov    %rdi,%rbx
mov    %r8,0x8(%rsp)
divsd  %xmm1,%xmm0
xor    %r13d,%r13d
mov    %r12,%rdi
xor    %esi,%esi
mov    %ebp,%edx
mov    %r15d,%ecx
xor    %r8d,%r8d
call   1030 <__dtostr@plt>
test   %eax,%eax
je     1269 <__dtostr+0x119>
mov    %eax,%ecx
cltq
movb   $0x65,(%r14,%rax,1)
add    %rax,%r14
add    $0x1,%r14
cmp    $0x3e7,%rbx
jge    1615 <__dtostr+0x4c5>
not    %ecx
cmp    $0x63,%rbx
mov    0x8(%rsp),%rbp
jge    166c <__dtostr+0x51c>
cmp    $0x9,%rbx
jge    16ba <__dtostr+0x56a>
test   %rbx,%rbx
jns    1705 <__dtostr+0x5b5>
jmp    1717 <__dtostr+0x5c7>
movabs $0x20c49ba5e353f7cf,%rsi
9b c4 20
cmp    $0xffffffff,%ecx
mov    0x8(%rsp),%rbp
je     1645 <__dtostr+0x4f5>
mov    %rbp,%rax
imul   %rsi
mov    %rdx,%rax
shr    $0x3f,%rax
shr    $0x7,%edx
add    %eax,%edx
add    $0x30,%dl
mov    %dl,(%r14)
add    $0x1,%r14
mov    $0xfffffffe,%edi
sub    %ecx,%edi
mov    %rbp,%rax
imul   %rsi
mov    %rdx,%rax
shr    $0x3f,%rax
sar    $0x7,%rdx
add    %rax,%rdx
imul   $0x3e8,%rdx,%rax
sub    %rax,%rbp
mov    %edi,%ecx
movabs $0xa3d70a3d70a3d70b,%rsi
0a d7 a3
test   %ecx,%ecx
je     1699 <__dtostr+0x549>
mov    %rbp,%rax
imul   %rsi
add    %rbp,%rdx
mov    %rdx,%rax
shr    $0x3f,%rax
shr    $0x6,%edx
add    %eax,%edx
add    $0x30,%dl
mov    %dl,(%r14)
add    $0x1,%r14
add    $0xffffffff,%ecx
mov    %rbp,%rax
imul   %rsi
add    %rbp,%rdx
mov    %rdx,%rax
shr    $0x3f,%rax
sar    $0x6,%rdx
add    %rax,%rdx
imul   $0x64,%rdx,%rax
sub    %rax,%rbp
movabs $0x6666666666666667,%rsi
66 66 66
test   %ecx,%ecx
je     16e4 <__dtostr+0x594>
mov    %rbp,%rax
imul   %rsi
mov    %rdx,%rax
shr    $0x3f,%rax
shr    $0x2,%edx
add    %eax,%edx
add    $0x30,%dl
mov    %dl,(%r14)
add    $0x1,%r14
add    $0xffffffff,%ecx
mov    %rbp,%rax
imul   %rsi
mov    %rdx,%rax
shr    $0x3f,%rax
sar    $0x2,%rdx
add    %rax,%rdx
add    %rdx,%rdx
lea    (%rdx,%rdx,4),%rax
sub    %rax,%rbp
test   %ecx,%ecx
je     1714 <__dtostr+0x5c4>
add    $0x30,%bpl
mov    %bpl,(%r14)
add    $0x1,%r14
add    $0xffffffff,%ecx
test   %ecx,%ecx
je     1269 <__dtostr+0x119>
movb   $0x0,(%r14)
sub    %r12d,%r14d
mov    %r14d,%r13d
jmp    1269 <__dtostr+0x119>

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

LLVM IR (-O2):
@.str = [4 x i8] c"inf\00"
@.str.2 = [4 x i8] c"nan\00"
define i32 @__dtostr(double %0, i8* %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = bitcast double %0 to i64
%8 = lshr i64 %7, 52
%9 = and i64 %8, 2047
%10 = add nsw i64 %9, -1023
%11 = tail call i32 @isinf(double %0)
%12 = icmp eq i32 %11, 0
br i1 %12, label %15, label %13
13: ; preds = %6
%14 = tail call i32 @copystring(i8* %1, i32 %2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0))
br label %353
15: ; preds = %6
%16 = tail call i64 @isnan(double %0)
%17 = icmp eq i64 %16, 0
br i1 %17, label %20, label %18
18: ; preds = %15
%19 = tail call i32 @copystring(i8* %1, i32 %2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
br label %353
20: ; preds = %15
%21 = sitofp i64 %10 to double
%22 = fmul double %21, 0x3FD34413509F79FF
%23 = fptosi double %22 to i64
%24 = add nsw i64 %23, 1
%25 = fcmp oeq double %0, 0.000000e+00
br i1 %25, label %26, label %55
26: ; preds = %20
%27 = icmp eq i32 %4, 0
%28 = add i32 %4, 2
%29 = select i1 %27, i32 1, i32 %28
%30 = icmp ugt i32 %29, %2
%31 = select i1 %30, i32 8, i32 %29
%32 = icmp ne i32 %31, 0
%33 = icmp slt i64 %7, 0
%34 = and i1 %33, %32
br i1 %34, label %35, label %36
35: ; preds = %26
store i8 45, i8* %1
br label %36
36: ; preds = %35, %26
%37 = phi i32 [ 1, %35 ], [ 0, %26 ]
%38 = icmp ult i32 %37, %31
%39 = zext i32 %37 to i64
br i1 %38, label %40, label %47
40: ; preds = %36
%41 = getelementptr i8, i8* %1, i64 %39
%42 = xor i32 %37, -1
%43 = add i32 %31, %42
%44 = zext i32 %43 to i64
%45 = add nuw nsw i64 %44, 1
%46 = zext i32 %31 to i64
br label %47
47: ; preds = %40, %36
%48 = phi i64 [ %39, %36 ], [ %46, %40 ]
%49 = phi i32 [ %37, %36 ], [ %31, %40 ]
%50 = load i8, i8* %1
%51 = icmp eq i8 %50, 48
%52 = select i1 %51, i64 1, i64 2
%53 = getelementptr inbounds i8, i8* %1, i64 %52
store i8 46, i8* %53
%54 = getelementptr inbounds i8, i8* %1, i64 %48
store i8 0, i8* %54
br label %353
55: ; preds = %20
%56 = fcmp olt double %0, 0.000000e+00
br i1 %56, label %57, label %61
57: ; preds = %55
%58 = fneg double %0
store i8 45, i8* %1
%59 = add i32 %2, -1
%60 = getelementptr inbounds i8, i8* %1, i64 1
br label %61
61: ; preds = %57, %55
%62 = phi i32 [ %59, %57 ], [ %2, %55 ]
%63 = phi i8* [ %60, %57 ], [ %1, %55 ]
%64 = phi double [ %58, %57 ], [ %0, %55 ]
%65 = icmp eq i32 %4, 0
br i1 %65, label %95, label %66
66: ; preds = %61
%67 = add i32 %4, -1
%68 = and i32 %4, 7
%69 = icmp ult i32 %67, 7
br i1 %69, label %85, label %70
70: ; preds = %66
%71 = and i32 %4, -8
br label %72
72: ; preds = %72, %70
%73 = phi double [ 5.000000e-01, %70 ], [ %82, %72 ]
%74 = phi i32 [ 0, %70 ], [ %83, %72 ]
%75 = fmul double %73, 1.000000e-01
%76 = fmul double %75, 1.000000e-01
%77 = fmul double %76, 1.000000e-01
%78 = fmul double %77, 1.000000e-01
%79 = fmul double %78, 1.000000e-01
%80 = fmul double %79, 1.000000e-01
%81 = fmul double %80, 1.000000e-01
%82 = fmul double %81, 1.000000e-01
%83 = add i32 %74, 8
%84 = icmp eq i32 %83, %71
br i1 %84, label %85, label %72
85: ; preds = %72, %66
%86 = phi double [ undef, %66 ], [ %82, %72 ]
%87 = phi double [ 5.000000e-01, %66 ], [ %82, %72 ]
%88 = icmp eq i32 %68, 0
br i1 %88, label %95, label %89
89: ; preds = %85, %89
%90 = phi double [ %92, %89 ], [ %87, %85 ]
%91 = phi i32 [ %93, %89 ], [ 0, %85 ]
%92 = fmul double %90, 1.000000e-01
%93 = add i32 %91, 1
%94 = icmp eq i32 %93, %68
br i1 %94, label %95, label %89
95: ; preds = %85, %89, %61
%96 = phi double [ 5.000000e-01, %61 ], [ %86, %85 ], [ %92, %89 ]
%97 = fadd double %64, %96
%98 = fcmp olt double %97, 1.000000e+00
br i1 %98, label %99, label %102
99: ; preds = %95
store i8 48, i8* %63
%100 = add i32 %62, -1
%101 = getelementptr inbounds i8, i8* %63, i64 1
br label %102
102: ; preds = %99, %95
%103 = phi i32 [ %100, %99 ], [ %62, %95 ]
%104 = phi i8* [ %101, %99 ], [ %63, %95 ]
%105 = icmp sgt i64 %23, -1
br i1 %105, label %106, label %281
106: ; preds = %102
%107 = trunc i64 %24 to i32
%108 = icmp ugt i32 %107, 10
br i1 %108, label %109, label %129
109: ; preds = %106
%110 = add i32 %107, -11
%111 = udiv i32 %110, 10
%112 = add nuw nsw i32 %111, 1
%113 = and i32 %112, 7
%114 = icmp eq i32 %113, 0
br i1 %114, label %123, label %115
115: ; preds = %109, %115
%116 = phi double [ %119, %115 ], [ 1.000000e+01, %109 ]
%117 = phi i32 [ %120, %115 ], [ %107, %109 ]
%118 = phi i32 [ %121, %115 ], [ 0, %109 ]
%119 = fmul double %116, 1.000000e+10
%120 = add i32 %117, -10
%121 = add i32 %118, 1
%122 = icmp eq i32 %121, %113
br i1 %122, label %123, label %115
123: ; preds = %115, %109
%124 = phi double [ 1.000000e+01, %109 ], [ %119, %115 ]
%125 = phi i32 [ %107, %109 ], [ %120, %115 ]
%126 = phi double [ undef, %109 ], [ %119, %115 ]
%127 = phi i32 [ undef, %109 ], [ %120, %115 ]
%128 = icmp ult i32 %110, 70
br i1 %128, label %129, label %151
129: ; preds = %123, %151, %106
%130 = phi i32 [ %107, %106 ], [ %127, %123 ], [ %162, %151 ]
%131 = phi double [ 1.000000e+01, %106 ], [ %126, %123 ], [ %161, %151 ]
%132 = icmp ugt i32 %130, 1
br i1 %132, label %133, label %164
133: ; preds = %129
%134 = add i32 %130, 7
%135 = add i32 %130, -2
%136 = and i32 %134, 7
%137 = icmp eq i32 %136, 0
br i1 %137, label %146, label %138
138: ; preds = %133, %138
%139 = phi double [ %142, %138 ], [ %131, %133 ]
%140 = phi i32 [ %143, %138 ], [ %130, %133 ]
%141 = phi i32 [ %144, %138 ], [ 0, %133 ]
%142 = fmul double %139, 1.000000e+01
%143 = add i32 %140, -1
%144 = add i32 %141, 1
%145 = icmp eq i32 %144, %136
br i1 %145, label %146, label %138
146: ; preds = %138, %133
%147 = phi double [ %131, %133 ], [ %142, %138 ]
%148 = phi i32 [ %130, %133 ], [ %143, %138 ]
%149 = phi double [ undef, %133 ], [ %142, %138 ]
%150 = icmp ult i32 %135, 7
br i1 %150, label %164, label %167
151: ; preds = %123, %151
%152 = phi double [ %161, %151 ], [ %124, %123 ]
%153 = phi i32 [ %162, %151 ], [ %125, %123 ]
%154 = fmul double %152, 1.000000e+10
%155 = fmul double %154, 1.000000e+10
%156 = fmul double %155, 1.000000e+10
%157 = fmul double %156, 1.000000e+10
%158 = fmul double %157, 1.000000e+10
%159 = fmul double %158, 1.000000e+10
%160 = fmul double %159, 1.000000e+10
%161 = fmul double %160, 1.000000e+10
%162 = add i32 %153, -80
%163 = icmp ugt i32 %162, 10
br i1 %163, label %151, label %129
164: ; preds = %146, %167, %129
%165 = phi double [ %131, %129 ], [ %149, %146 ], [ %177, %167 ]
%166 = fcmp ogt double %165, 9.000000e-01
br i1 %166, label %180, label %281
167: ; preds = %146, %167
%168 = phi double [ %177, %167 ], [ %147, %146 ]
%169 = phi i32 [ %178, %167 ], [ %148, %146 ]
%170 = fmul double %168, 1.000000e+01
%171 = fmul double %170, 1.000000e+01
%172 = fmul double %171, 1.000000e+01
%173 = fmul double %172, 1.000000e+01
%174 = fmul double %173, 1.000000e+01
%175 = fmul double %174, 1.000000e+01
%176 = fmul double %175, 1.000000e+01
%177 = fmul double %176, 1.000000e+01
%178 = add i32 %169, -8
%179 = icmp ugt i32 %178, 1
br i1 %179, label %167, label %164
180: ; preds = %164, %274
%181 = phi double [ %278, %274 ], [ %97, %164 ]
%182 = phi i8* [ %277, %274 ], [ %104, %164 ]
%183 = phi i32 [ %276, %274 ], [ %103, %164 ]
%184 = phi i32 [ %275, %274 ], [ 1, %164 ]
%185 = phi double [ %279, %274 ], [ %165, %164 ]
%186 = fdiv double %181, %185
%187 = fptosi double %186 to i32
%188 = icmp eq i32 %184, 0
%189 = shl i32 %187, 24
%190 = ashr exact i32 %189, 24
%191 = icmp ne i32 %189, 0
%192 = select i1 %188, i1 true, i1 %191
br i1 %192, label %193, label %274
193: ; preds = %180
%194 = trunc i32 %187 to i8
%195 = add i8 %194, 48
store i8 %195, i8* %182
%196 = getelementptr inbounds i8, i8* %182, i64 1
%197 = icmp eq i32 %183, 0
br i1 %197, label %198, label %269
198: ; preds = %193
%199 = fdiv double %0, %185
%200 = tail call i32 @__dtostr(double %199, i8* %1, i32 0, i32 %3, i32 %4, i32 0)
%201 = icmp eq i32 %200, 0
br i1 %201, label %353, label %202
202: ; preds = %198
%203 = sext i32 %200 to i64
%204 = getelementptr inbounds i8, i8* %196, i64 %203
store i8 101, i8* %204
%205 = getelementptr inbounds i8, i8* %204, i64 1
%206 = xor i32 %200, -1
%207 = icmp slt i64 %23, 999
br i1 %207, label %219, label %208
208: ; preds = %202
%209 = icmp eq i32 %200, -1
br i1 %209, label %215, label %210
210: ; preds = %208
%211 = sdiv i64 %24, 1000
%212 = trunc i64 %211 to i8
%213 = add i8 %212, 48
store i8 %213, i8* %205
%214 = getelementptr inbounds i8, i8* %205, i64 1
br label %215
215: ; preds = %208, %210
%216 = phi i8* [ %214, %210 ], [ %205, %208 ]
%217 = sub i32 -2, %200
%218 = srem i64 %24, 1000
br label %221
219: ; preds = %202
%220 = icmp slt i64 %23, 99
br i1 %220, label %235, label %221
221: ; preds = %215, %219
%222 = phi i8* [ %216, %215 ], [ %205, %219 ]
%223 = phi i32 [ %217, %215 ], [ %206, %219 ]
%224 = phi i64 [ %218, %215 ], [ %24, %219 ]
%225 = icmp eq i32 %223, 0
br i1 %225, label %231, label %226
226: ; preds = %221
%227 = sdiv i64 %224, 100
%228 = trunc i64 %227 to i8
%229 = add i8 %228, 48
store i8 %229, i8* %222
%230 = getelementptr inbounds i8, i8* %222, i64 1
br label %231
231: ; preds = %221, %226
%232 = phi i8* [ %230, %226 ], [ %222, %221 ]
%233 = add i32 %223, -1
%234 = srem i64 %224, 100
br label %237
235: ; preds = %219
%236 = icmp slt i64 %23, 9
br i1 %236, label %251, label %237
237: ; preds = %231, %235
%238 = phi i8* [ %232, %231 ], [ %205, %235 ]
%239 = phi i32 [ %233, %231 ], [ %206, %235 ]
%240 = phi i64 [ %234, %231 ], [ %24, %235 ]
%241 = icmp eq i32 %239, 0
br i1 %241, label %247, label %242
242: ; preds = %237
%243 = sdiv i64 %240, 10
%244 = trunc i64 %243 to i8
%245 = add i8 %244, 48
store i8 %245, i8* %238
%246 = getelementptr inbounds i8, i8* %238, i64 1
br label %247
247: ; preds = %237, %242
%248 = phi i8* [ %246, %242 ], [ %238, %237 ]
%249 = add i32 %239, -1
%250 = srem i64 %240, 10
br label %253
251: ; preds = %235
%252 = icmp slt i64 %23, 0
br i1 %252, label %265, label %253
253: ; preds = %247, %251
%254 = phi i8* [ %248, %247 ], [ %205, %251 ]
%255 = phi i32 [ %249, %247 ], [ %206, %251 ]
%256 = phi i64 [ %250, %247 ], [ %24, %251 ]
%257 = icmp eq i32 %255, 0
br i1 %257, label %262, label %258
258: ; preds = %253
%259 = trunc i64 %256 to i8
%260 = add nsw i8 %259, 48
store i8 %260, i8* %254
%261 = getelementptr inbounds i8, i8* %254, i64 1
br label %262
262: ; preds = %258, %253
%263 = phi i8* [ %261, %258 ], [ %254, %253 ]
%264 = add i32 %255, -1
br label %265
265: ; preds = %262, %251
%266 = phi i32 [ %206, %251 ], [ %264, %262 ]
%267 = phi i8* [ %205, %251 ], [ %263, %262 ]
%268 = icmp eq i32 %266, 0
br i1 %268, label %353, label %347
269: ; preds = %193
%270 = sitofp i32 %190 to double
%271 = fneg double %270
%272 = tail call double @llvm.fmuladd.f64(double %271, double %185, double %181)
%273 = add i32 %183, -1
br label %274
274: ; preds = %269, %180
%275 = phi i32 [ 0, %269 ], [ 1, %180 ]
%276 = phi i32 [ %273, %269 ], [ %183, %180 ]
%277 = phi i8* [ %196, %269 ], [ %182, %180 ]
%278 = phi double [ %272, %269 ], [ %181, %180 ]
%279 = fdiv double %185, 1.000000e+01
%280 = fcmp ogt double %279, 9.000000e-01
br i1 %280, label %180, label %281
281: ; preds = %274, %164, %102
%282 = phi double [ 1.000000e-01, %102 ], [ %165, %164 ], [ %279, %274 ]
%283 = phi i32 [ %103, %102 ], [ %103, %164 ], [ %276, %274 ]
%284 = phi i8* [ %104, %102 ], [ %104, %164 ], [ %277, %274 ]
%285 = phi double [ %97, %102 ], [ %97, %164 ], [ %278, %274 ]
%286 = icmp eq i8* %284, %1
br i1 %286, label %287, label %292
287: ; preds = %281
%288 = icmp eq i32 %283, 0
br i1 %288, label %353, label %289
289: ; preds = %287
%290 = add i32 %283, -1
store i8 48, i8* %1
%291 = getelementptr inbounds i8, i8* %1, i64 1
br label %292
292: ; preds = %289, %281
%293 = phi i32 [ %290, %289 ], [ %283, %281 ]
%294 = phi i8* [ %291, %289 ], [ %284, %281 ]
br i1 %65, label %295, label %302
295: ; preds = %292
%296 = ptrtoint i8* %294 to i64
%297 = ptrtoint i8* %1 to i64
%298 = sub i64 %296, %297
%299 = trunc i64 %298 to i32
%300 = add i32 %299, 1
%301 = icmp ult i32 %300, %3
br i1 %301, label %302, label %347
302: ; preds = %295, %292
%303 = icmp eq i32 %293, 0
br i1 %303, label %353, label %304
304: ; preds = %302
%305 = add i32 %293, -1
store i8 46, i8* %294
%306 = getelementptr inbounds i8, i8* %294, i64 1
%307 = icmp eq i32 %5, 0
br i1 %307, label %316, label %308
308: ; preds = %304
%309 = select i1 %65, i32 %3, i32 %4
%310 = ptrtoint i8* %306 to i64
%311 = ptrtoint i8* %1 to i64
%312 = xor i64 %311, -1
%313 = add i64 %310, %312
%314 = trunc i64 %313 to i32
%315 = sub i32 %309, %314
br label %324
316: ; preds = %304
%317 = ptrtoint i8* %306 to i64
%318 = ptrtoint i8* %1 to i64
%319 = xor i64 %318, -1
%320 = add i64 %317, %319
%321 = trunc i64 %320 to i32
%322 = sub i32 %3, %321
%323 = select i1 %65, i32 %322, i32 %4
br label %324
324: ; preds = %316, %308
%325 = phi i32 [ %315, %308 ], [ %323, %316 ]
%326 = icmp ugt i32 %325, %305
br i1 %326, label %353, label %327
327: ; preds = %324
%328 = icmp eq i32 %325, 0
br i1 %328, label %347, label %329
329: ; preds = %327, %329
%330 = phi double [ %343, %329 ], [ %285, %327 ]
%331 = phi i8* [ %340, %329 ], [ %306, %327 ]
%332 = phi i32 [ %345, %329 ], [ %325, %327 ]
%333 = phi double [ %344, %329 ], [ %282, %327 ]
%334 = fdiv double %330, %333
%335 = fptosi double %334 to i32
%336 = shl i32 %335, 24
%337 = ashr exact i32 %336, 24
%338 = trunc i32 %335 to i8
%339 = add i8 %338, 48
store i8 %339, i8* %331
%340 = getelementptr inbounds i8, i8* %331, i64 1
%341 = sitofp i32 %337 to double
%342 = fneg double %341
%343 = tail call double @llvm.fmuladd.f64(double %342, double %333, double %330)
%344 = fdiv double %333, 1.000000e+01
%345 = add i32 %332, -1
%346 = icmp eq i32 %345, 0
br i1 %346, label %347, label %329
347: ; preds = %329, %327, %265, %295
%348 = phi i8* [ %294, %295 ], [ %267, %265 ], [ %306, %327 ], [ %340, %329 ]
store i8 0, i8* %348
%349 = ptrtoint i8* %348 to i64
%350 = ptrtoint i8* %1 to i64
%351 = sub i64 %349, %350
%352 = trunc i64 %351 to i32
br label %353
353: ; preds = %265, %198, %324, %302, %287, %347, %47, %18, %13
%354 = phi i32 [ %14, %13 ], [ %19, %18 ], [ %49, %47 ], [ %352, %347 ], [ 0, %287 ], [ 0, %302 ], [ 0, %324 ], [ 0, %198 ], [ 0, %265 ]
ret i32 %354
}