#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 */
typedef unsigned char uint8_t;
typedef int int8_t;

/* Variables and functions */
scalar_t__ isinf(double);
scalar_t__ isnan(double);
int /*<<< orphan*/ strcpy(char *, char *);
char *dtostrf(double number, signed char width, unsigned char prec, char *s) {
  bool negative = false;
  if (isnan(number)) {
    strcpy(s, "nan");
    return s;
  }
  if (isinf(number)) {
    strcpy(s, "inf");
    return s;
  }
  char *out = s;
  int fillme = width;
  if (prec > 0) {
    fillme -= (prec + 1);
  }
  if (number < 0.0) {
    negative = true;
    fillme--;
    number = -number;
  }
  double rounding = 2.0;
  for (uint8_t i = 0; i < prec; ++i)
    rounding *= 10.0;
  rounding = 1.0 / rounding;
  number += rounding;
  double tenpow = 1.0;
  int digitcount = 1;
  while (number >= 10.0 * tenpow) {
    tenpow *= 10.0;
    digitcount++;
  }
  number /= tenpow;
  fillme -= digitcount;
  while (fillme-- > 0) {
    *out++ = ' ';
  }
  if (negative)
    *out++ = '-';
  digitcount += prec;
  int8_t digit = 0;
  while (digitcount-- > 0) {
    digit = (int8_t)number;
    if (digit > 9)
      digit = 9;
    *out++ = (char)('0' | digit);
    if ((digitcount == prec) && (prec > 0)) {
      *out++ = '.';
    }
    number -= digit;
    number *= 10.0;
  }
  *out = 0;
  return s;
}


x86 assembly (clang, -O0):
<dtostrf>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %sil,%al
mov    %dil,%cl
movsd  %xmm0,-0x10(%rbp)
mov    %cl,-0x11(%rbp)
mov    %al,-0x12(%rbp)
mov    %rdx,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movsd  -0x10(%rbp),%xmm0
call   1040 <isnan@plt>
cmp    $0x0,%rax
je     1185 <dtostrf+0x55>
mov    -0x20(%rbp),%rdi
lea    0xea5(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    13f4 <dtostrf+0x2c4>
movsd  -0x10(%rbp),%xmm0
call   1050 <isinf@plt>
cmp    $0x0,%rax
je     11b6 <dtostrf+0x86>
mov    -0x20(%rbp),%rdi
lea    0xe78(%rip),%rsi
call   1030 <strcpy@plt>
mov    -0x20(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    13f4 <dtostrf+0x2c4>
mov    -0x20(%rbp),%rax
mov    %rax,-0x30(%rbp)
movsbl -0x11(%rbp),%eax
mov    %eax,-0x34(%rbp)
movzbl -0x12(%rbp),%eax
cmp    $0x0,%eax
jle    11e1 <dtostrf+0xb1>
movzbl -0x12(%rbp),%ecx
add    $0x1,%ecx
mov    -0x34(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x34(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jbe    1220 <dtostrf+0xf0>
movl   $0x1,-0x24(%rbp)
mov    -0x34(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x34(%rbp)
movsd  -0x10(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xdd8(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
movb   $0x0,-0x41(%rbp)
movzbl -0x41(%rbp),%eax
movzbl -0x12(%rbp),%ecx
cmp    %ecx,%eax
jge    1260 <dtostrf+0x130>
movsd  0xdc7(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x41(%rbp),%al
add    $0x1,%al
mov    %al,-0x41(%rbp)
jmp    1231 <dtostrf+0x101>
movsd  0xda0(%rip),%xmm0
divsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xd7f(%rip),%xmm0
movsd  %xmm0,-0x50(%rbp)
movl   $0x1,-0x54(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xd6e(%rip),%xmm1
mulsd  -0x50(%rbp),%xmm1
ucomisd %xmm1,%xmm0
jb     12d1 <dtostrf+0x1a1>
movsd  0xd57(%rip),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1295 <dtostrf+0x165>
movsd  -0x50(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x54(%rbp),%ecx
mov    -0x34(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x34(%rbp)
cmp    $0x0,%eax
jle    131a <dtostrf+0x1ea>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x20,(%rax)
jmp    12ef <dtostrf+0x1bf>
cmpl   $0x0,-0x24(%rbp)
je     1336 <dtostrf+0x206>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x2d,(%rax)
movzbl -0x12(%rbp),%eax
add    -0x54(%rbp),%eax
mov    %eax,-0x54(%rbp)
movl   $0x0,-0x58(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x54(%rbp)
cmp    $0x0,%eax
jle    13e5 <dtostrf+0x2b5>
cvttsd2si -0x10(%rbp),%eax
mov    %eax,-0x58(%rbp)
cmpl   $0x9,-0x58(%rbp)
jle    1374 <dtostrf+0x244>
movl   $0x9,-0x58(%rbp)
mov    -0x58(%rbp),%eax
or     $0x30,%eax
mov    %al,%cl
mov    -0x30(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x30(%rbp)
mov    %cl,(%rax)
mov    -0x54(%rbp),%eax
movzbl -0x12(%rbp),%ecx
cmp    %ecx,%eax
jne    13bb <dtostrf+0x28b>
movzbl -0x12(%rbp),%eax
cmp    $0x0,%eax
jle    13bb <dtostrf+0x28b>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movb   $0x2e,(%rax)
cvtsi2sdl -0x58(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
movsd  0xc3a(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x10(%rbp)
jmp    1347 <dtostrf+0x217>
mov    -0x30(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x20(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dtostrf>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
mov    %rdx,%r14
mov    %esi,%r13d
mov    %edi,%r15d
movapd %xmm0,(%rsp)
call   1050 <isnan@plt>
test   %rax,%rax
je     116f <dtostrf+0x2f>
lea    0xebb(%rip),%rsi
jmp    1185 <dtostrf+0x45>
movapd (%rsp),%xmm0
call   1060 <isinf@plt>
test   %rax,%rax
je     119f <dtostrf+0x5f>
lea    0xea7(%rip),%rsi
mov    %r14,%rdi
call   1030 <strcpy@plt>
mov    %r14,%rax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movzbl %r13b,%r12d
mov    %r12d,%eax
not    %eax
xorpd  %xmm0,%xmm0
xor    %edi,%edi
movapd (%rsp),%xmm1
ucomisd %xmm1,%xmm0
seta   %cl
movapd %xmm1,%xmm4
ja     11c6 <dtostrf+0x86>
movapd %xmm4,%xmm3
jmp    11d2 <dtostrf+0x92>
movapd 0xe32(%rip),%xmm3
xorpd  %xmm4,%xmm3
mov    %cl,%dil
xor    %ebp,%ebp
test   %r13b,%r13b
cmove  %ebp,%eax
je     11f8 <dtostrf+0xb8>
lea    -0x1(%r13),%ecx
mov    %r13d,%edx
and    $0x7,%dl
cmp    $0x7,%cl
jae    1202 <dtostrf+0xc2>
movsd  0xe1a(%rip),%xmm0
jmp    1245 <dtostrf+0x105>
movsd  0xe10(%rip),%xmm0
jmp    1269 <dtostrf+0x129>
mov    %r13d,%ecx
and    $0xf8,%cl
movsd  0xe00(%rip),%xmm0
movsd  0xe00(%rip),%xmm1
nopl   0x0(%rax,%rax,1)
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
mulsd  %xmm1,%xmm0
add    $0xf8,%cl
jne    1220 <dtostrf+0xe0>
test   %dl,%dl
je     1269 <dtostrf+0x129>
movsd  0xdc7(%rip),%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mulsd  %xmm1,%xmm0
add    $0xff,%dl
jne    1260 <dtostrf+0x120>
movsbl %r15b,%esi
neg    %edi
movsd  0xda9(%rip),%xmm1
movapd %xmm1,%xmm2
divsd  %xmm0,%xmm2
addsd  %xmm2,%xmm3
movsd  0xd8d(%rip),%xmm2
nopl   0x0(%rax,%rax,1)
movapd %xmm1,%xmm5
mulsd  %xmm2,%xmm1
add    $0x1,%ebp
ucomisd %xmm1,%xmm3
jae    1290 <dtostrf+0x150>
lea    (%rdi,%rsi,1),%ecx
add    %eax,%ecx
sub    %ebp,%ecx
mov    %r14,%rdx
test   %ecx,%ecx
jle    12fa <dtostrf+0x1ba>
add    %edi,%eax
add    %esi,%eax
mov    %ebp,%r15d
not    %r15d
add    %eax,%r15d
lea    0x1(%r15),%rdx
mov    %r14,%rdi
mov    $0x20,%esi
movapd %xmm3,0x20(%rsp)
movsd  %xmm5,0x18(%rsp)
call   1040 <memset@plt>
movsd  0x18(%rsp),%xmm5
movsd  0xd31(%rip),%xmm2
movapd (%rsp),%xmm4
movapd 0x20(%rsp),%xmm3
lea    (%r14,%r15,1),%rdx
add    $0x1,%rdx
xorpd  %xmm0,%xmm0
ucomisd %xmm4,%xmm0
jbe    130b <dtostrf+0x1cb>
movb   $0x2d,(%rdx)
add    $0x1,%rdx
divsd  %xmm5,%xmm3
add    $0x1,%r12d
mov    $0x9,%eax
jmp    1342 <dtostrf+0x202>
nopw   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
subsd  %xmm0,%xmm3
mulsd  %xmm2,%xmm3
lea    (%r12,%rbp,1),%ecx
add    $0xffffffff,%ecx
mov    %ebp,%esi
add    $0xffffffff,%esi
mov    %esi,%ebp
cmp    $0x1,%ecx
jle    1371 <dtostrf+0x231>
cvttsd2si %xmm3,%ecx
mov    %rdx,%rsi
cmp    $0x9,%ecx
cmovge %eax,%ecx
mov    %ecx,%ebx
or     $0x30,%bl
add    $0x1,%rdx
mov    %bl,(%rsi)
test   %r13b,%r13b
je     1320 <dtostrf+0x1e0>
cmp    $0x1,%ebp
jne    1320 <dtostrf+0x1e0>
movb   $0x2e,0x1(%rsi)
add    $0x2,%rsi
mov    %rsi,%rdx
jmp    1320 <dtostrf+0x1e0>
movb   $0x0,(%rdx)
jmp    118d <dtostrf+0x4d>

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

LLVM IR (-O2):
@.str = [4 x i8] c"nan\00"
@.str.1 = [4 x i8] c"inf\00"
define i8* @dtostrf(double %0, i8 signext %1, i8 zeroext %2, i8* returned %3) {
%5 = tail call i64 @isnan(double %0)
%6 = icmp eq i64 %5, 0
br i1 %6, label %9, label %7
7: ; preds = %4
%8 = tail call i32 @strcpy(i8* %3, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0))
br label %107
9: ; preds = %4
%10 = tail call i64 @isinf(double %0)
%11 = icmp eq i64 %10, 0
br i1 %11, label %14, label %12
12: ; preds = %9
%13 = tail call i32 @strcpy(i8* %3, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
br label %107
14: ; preds = %9
%15 = sext i8 %1 to i32
%16 = zext i8 %2 to i32
%17 = icmp ne i8 %2, 0
%18 = xor i32 %16, -1
%19 = select i1 %17, i32 %18, i32 0
%20 = fcmp olt double %0, 0.000000e+00
%21 = fneg double %0
%22 = select i1 %20, double %21, double %0
%23 = sext i1 %20 to i32
%24 = icmp eq i8 %2, 0
br i1 %24, label %41, label %25
25: ; preds = %14
%26 = add i8 %2, -1
%27 = and i8 %2, 7
%28 = icmp ult i8 %26, 7
br i1 %28, label %31, label %29
29: ; preds = %25
%30 = and i8 %2, -8
br label %45
31: ; preds = %45, %25
%32 = phi double [ undef, %25 ], [ %55, %45 ]
%33 = phi double [ 2.000000e+00, %25 ], [ %55, %45 ]
%34 = icmp eq i8 %27, 0
br i1 %34, label %41, label %35
35: ; preds = %31, %35
%36 = phi double [ %38, %35 ], [ %33, %31 ]
%37 = phi i8 [ %39, %35 ], [ 0, %31 ]
%38 = fmul double %36, 1.000000e+01
%39 = add i8 %37, 1
%40 = icmp eq i8 %39, %27
br i1 %40, label %41, label %35
41: ; preds = %31, %35, %14
%42 = phi double [ 2.000000e+00, %14 ], [ %32, %31 ], [ %38, %35 ]
%43 = fdiv double 1.000000e+00, %42
%44 = fadd double %22, %43
br label %58
45: ; preds = %45, %29
%46 = phi double [ 2.000000e+00, %29 ], [ %55, %45 ]
%47 = phi i8 [ 0, %29 ], [ %56, %45 ]
%48 = fmul double %46, 1.000000e+01
%49 = fmul double %48, 1.000000e+01
%50 = fmul double %49, 1.000000e+01
%51 = fmul double %50, 1.000000e+01
%52 = fmul double %51, 1.000000e+01
%53 = fmul double %52, 1.000000e+01
%54 = fmul double %53, 1.000000e+01
%55 = fmul double %54, 1.000000e+01
%56 = add i8 %47, 8
%57 = icmp eq i8 %56, %30
br i1 %57, label %31, label %45
58: ; preds = %58, %41
%59 = phi double [ 1.000000e+00, %41 ], [ %61, %58 ]
%60 = phi i32 [ 1, %41 ], [ %63, %58 ]
%61 = fmul double %59, 1.000000e+01
%62 = fcmp ult double %44, %61
%63 = add nuw nsw i32 %60, 1
br i1 %62, label %64, label %58
64: ; preds = %58
%65 = fdiv double %44, %59
%66 = add nsw i32 %23, %15
%67 = add nsw i32 %66, %19
%68 = sub i32 %67, %60
%69 = icmp sgt i32 %68, 0
br i1 %69, label %70, label %78
70: ; preds = %64
%71 = add nsw i32 %19, %23
%72 = add nsw i32 %71, %15
%73 = xor i32 %60, -1
%74 = add i32 %72, %73
%75 = zext i32 %74 to i64
%76 = add nuw nsw i64 %75, 1
%77 = getelementptr i8, i8* %3, i64 %76
br label %78
78: ; preds = %70, %64
%79 = phi i8* [ %3, %64 ], [ %77, %70 ]
br i1 %20, label %80, label %82
80: ; preds = %78
%81 = getelementptr inbounds i8, i8* %79, i64 1
store i8 45, i8* %79
br label %82
82: ; preds = %80, %78
%83 = phi i8* [ %81, %80 ], [ %79, %78 ]
%84 = add nuw nsw i32 %60, %16
br label %85
85: ; preds = %82, %100
%86 = phi i32 [ %84, %82 ], [ %89, %100 ]
%87 = phi i8* [ %83, %82 ], [ %101, %100 ]
%88 = phi double [ %65, %82 ], [ %104, %100 ]
%89 = add nsw i32 %86, -1
%90 = fptosi double %88 to i32
%91 = icmp slt i32 %90, 9
%92 = select i1 %91, i32 %90, i32 9
%93 = trunc i32 %92 to i8
%94 = or i8 %93, 48
%95 = getelementptr inbounds i8, i8* %87, i64 1
store i8 %94, i8* %87
%96 = icmp eq i32 %89, %16
%97 = and i1 %17, %96
br i1 %97, label %98, label %100
98: ; preds = %85
%99 = getelementptr inbounds i8, i8* %87, i64 2
store i8 46, i8* %95
br label %100
100: ; preds = %98, %85
%101 = phi i8* [ %99, %98 ], [ %95, %85 ]
%102 = sitofp i32 %92 to double
%103 = fsub double %88, %102
%104 = fmul double %103, 1.000000e+01
%105 = icmp sgt i32 %86, 1
br i1 %105, label %85, label %106
106: ; preds = %100
store i8 0, i8* %101
br label %107
107: ; preds = %106, %12, %7
ret i8* %3
}