#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 */
float INFINITY;
int /*<<< orphan*/ getchar();
float float_max_size() {
  float d, d_p, step;
  short int i;
  d = d_p = step = 0;
  i = 0;
  d = 1;
  while (d != INFINITY) {
    d_p = d;
    d = d * 10;
    i++;
  };
  d = d_p;
  step = d;
  while (step > 1) {
    step = step / 10;
    i = 0;
    while ((d < INFINITY) && (d + step != d)) {
      d_p = d;
      d = d + step;
      i++;
      if (i == 30)
        getchar();
    };
    d = d_p;
  };
  return d;
}


x86 assembly (clang, -O0):
<float_max_size>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
xorps  %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x8(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
movw   $0x0,-0xe(%rbp)
movss  0xec2(%rip),%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
mov    0x2e99(%rip),%rax
ucomiss (%rax),%xmm0
jne    1163 <float_max_size+0x53>
jp     1163 <float_max_size+0x53>
jmp    1190 <float_max_size+0x80>
movss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x8(%rbp)
movss  0xe8f(%rip),%xmm0
mulss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
mov    -0xe(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0xe(%rbp)
jmp    1143 <float_max_size+0x33>
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
movss  0xe4f(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    126a <float_max_size+0x15a>
movss  -0xc(%rbp),%xmm0
movss  0xe3d(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0xc(%rbp)
movw   $0x0,-0xe(%rbp)
movss  -0x4(%rbp),%xmm1
mov    0x2e06(%rip),%rax
movss  (%rax),%xmm0
xor    %eax,%eax
ucomiss %xmm1,%xmm0
mov    %al,-0xf(%rbp)
jbe    120d <float_max_size+0xfd>
movss  -0x4(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
ucomiss -0x4(%rbp),%xmm0
setne  %al
setp   %cl
or     %cl,%al
mov    %al,-0xf(%rbp)
mov    -0xf(%rbp),%al
test   $0x1,%al
jne    121d <float_max_size+0x10d>
jmp    125b <float_max_size+0x14b>
movss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x4(%rbp),%xmm0
addss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
mov    -0xe(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0xe(%rbp)
movswl -0xe(%rbp),%eax
cmp    $0x1e,%eax
jne    1256 <float_max_size+0x146>
mov    $0x0,%al
call   1030 <getchar@plt>
jmp    11d6 <float_max_size+0xc6>
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    11a4 <float_max_size+0x94>
movss  -0x4(%rbp),%xmm0
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<float_max_size>:
push   %rbp
push   %rbx
sub    $0x18,%rsp
mov    0x2ecb(%rip),%rbx
movss  (%rbx),%xmm4
ucomiss 0xed8(%rip),%xmm4
jne    1130 <float_max_size+0x20>
jnp    11fd <float_max_size+0xed>
movss  0xec8(%rip),%xmm1
nopl   0x0(%rax,%rax,1)
movaps %xmm1,%xmm2
mulss  0xeb9(%rip),%xmm1
ucomiss %xmm4,%xmm1
jne    1140 <float_max_size+0x30>
jp     1140 <float_max_size+0x30>
ucomiss 0xea7(%rip),%xmm2
jbe    1202 <float_max_size+0xf2>
movaps %xmm2,%xmm3
jmp    1183 <float_max_size+0x73>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movaps %xmm3,%xmm0
ucomiss 0xe86(%rip),%xmm2
movaps %xmm0,%xmm3
jbe    1205 <float_max_size+0xf5>
divss  0xe79(%rip),%xmm2
ucomiss %xmm3,%xmm4
jbe    1170 <float_max_size+0x60>
movaps %xmm2,%xmm1
addss  %xmm3,%xmm1
ucomiss %xmm3,%xmm1
jne    119e <float_max_size+0x8e>
jnp    1170 <float_max_size+0x60>
mov    $0x1d,%bp
movss  %xmm2,0xc(%rsp)
nopl   0x0(%rax,%rax,1)
movaps %xmm3,%xmm0
movaps %xmm1,%xmm3
sub    $0x1,%bp
jae    11e5 <float_max_size+0xd5>
xor    %eax,%eax
movss  %xmm3,0x14(%rsp)
movss  %xmm0,0x10(%rsp)
call   1030 <getchar@plt>
movss  0x10(%rsp),%xmm0
movss  0x14(%rsp),%xmm3
movss  0xc(%rsp),%xmm2
movss  (%rbx),%xmm4
ucomiss %xmm3,%xmm4
jbe    1173 <float_max_size+0x63>
movaps %xmm2,%xmm1
addss  %xmm3,%xmm1
ucomiss %xmm3,%xmm1
jne    11b0 <float_max_size+0xa0>
jp     11b0 <float_max_size+0xa0>
jmp    1173 <float_max_size+0x63>
xorps  %xmm0,%xmm0
jmp    1205 <float_max_size+0xf5>
movaps %xmm2,%xmm0
add    $0x18,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
@INFINITY = global float 0.000000e+00
define float @float_max_size() {
%1 = alloca float
%2 = alloca float
%3 = alloca float
%4 = alloca i16
store float 0.000000e+00, float* %3
store float 0.000000e+00, float* %2
store float 0.000000e+00, float* %1
store i16 0, i16* %4
store float 1.000000e+00, float* %1
br label %5
5: ; preds = %9, %0
%6 = load float, float* %1
%7 = load float, float* @INFINITY
%8 = fcmp une float %6, %7
br i1 %8, label %9, label %15
9: ; preds = %5
%10 = load float, float* %1
store float %10, float* %2
%11 = load float, float* %1
%12 = fmul float %11, 1.000000e+01
store float %12, float* %1
%13 = load i16, i16* %4
%14 = add i16 %13, 1
store i16 %14, i16* %4
br label %5
15: ; preds = %5
%16 = load float, float* %2
store float %16, float* %1
%17 = load float, float* %1
store float %17, float* %3
br label %18
18: ; preds = %49, %15
%19 = load float, float* %3
%20 = fcmp ogt float %19, 1.000000e+00
br i1 %20, label %21, label %51
21: ; preds = %18
%22 = load float, float* %3
%23 = fdiv float %22, 1.000000e+01
store float %23, float* %3
store i16 0, i16* %4
br label %24
24: ; preds = %48, %21
%25 = load float, float* %1
%26 = load float, float* @INFINITY
%27 = fcmp olt float %25, %26
br i1 %27, label %28, label %34
28: ; preds = %24
%29 = load float, float* %1
%30 = load float, float* %3
%31 = fadd float %29, %30
%32 = load float, float* %1
%33 = fcmp une float %31, %32
br label %34
34: ; preds = %28, %24
%35 = phi i1 [ false, %24 ], [ %33, %28 ]
br i1 %35, label %36, label %49
36: ; preds = %34
%37 = load float, float* %1
store float %37, float* %2
%38 = load float, float* %1
%39 = load float, float* %3
%40 = fadd float %38, %39
store float %40, float* %1
%41 = load i16, i16* %4
%42 = add i16 %41, 1
store i16 %42, i16* %4
%43 = load i16, i16* %4
%44 = sext i16 %43 to i32
%45 = icmp eq i32 %44, 30
br i1 %45, label %46, label %48
46: ; preds = %36
%47 = call i32 (...) @getchar()
br label %48
48: ; preds = %46, %36
br label %24
49: ; preds = %34
%50 = load float, float* %2
store float %50, float* %1
br label %18
51: ; preds = %18
%52 = load float, float* %1
ret float %52
}

LLVM IR (-O2):
@INFINITY = global float 0.000000e+00
define float @float_max_size() {
%1 = load float, float* @INFINITY
%2 = fcmp une float %1, 1.000000e+00
br i1 %2, label %5, label %40
3: ; preds = %5
%4 = fcmp ogt float %6, 1.000000e+00
br i1 %4, label %9, label %40
5: ; preds = %0, %5
%6 = phi float [ %7, %5 ], [ 1.000000e+00, %0 ]
%7 = fmul float %6, 1.000000e+01
%8 = fcmp une float %7, %1
br i1 %8, label %5, label %3
9: ; preds = %3, %35
%10 = phi float [ %36, %35 ], [ %1, %3 ]
%11 = phi float [ %37, %35 ], [ %1, %3 ]
%12 = phi float [ %14, %35 ], [ %6, %3 ]
%13 = phi float [ %38, %35 ], [ %6, %3 ]
%14 = fdiv float %12, 1.000000e+01
%15 = fcmp olt float %13, %11
%16 = fadd float %14, %13
%17 = fcmp une float %16, %13
%18 = select i1 %15, i1 %17, i1 false
br i1 %18, label %19, label %35
19: ; preds = %9, %29
%20 = phi float [ %32, %29 ], [ %16, %9 ]
%21 = phi float [ %20, %29 ], [ %13, %9 ]
%22 = phi i16 [ %24, %29 ], [ 0, %9 ]
%23 = phi float [ %30, %29 ], [ %10, %9 ]
%24 = add i16 %22, 1
%25 = icmp eq i16 %24, 30
br i1 %25, label %26, label %29
26: ; preds = %19
%27 = tail call i32 (...) @getchar()
%28 = load float, float* @INFINITY
br label %29
29: ; preds = %26, %19
%30 = phi float [ %28, %26 ], [ %23, %19 ]
%31 = fcmp olt float %20, %30
%32 = fadd float %14, %20
%33 = fcmp une float %32, %20
%34 = select i1 %31, i1 %33, i1 false
br i1 %34, label %19, label %35
35: ; preds = %29, %9
%36 = phi float [ %10, %9 ], [ %30, %29 ]
%37 = phi float [ %11, %9 ], [ %30, %29 ]
%38 = phi float [ %13, %9 ], [ %21, %29 ]
%39 = fcmp ogt float %14, 1.000000e+00
br i1 %39, label %9, label %40
40: ; preds = %35, %0, %3
%41 = phi float [ %6, %3 ], [ 0.000000e+00, %0 ], [ %38, %35 ]
ret float %41
}