#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 /*<<< orphan*/ printf(char *);
double roundf(float);
int float_test(void) {
  volatile float x;
  float y;
  printf("Start float tests\n");
  x = 2.0;
  printf("test <...");
  if (x < 3.0)
    printf("passed\n");
  else {
    printf("failed\n");
    return -1;
  }
  printf("test <=...");
  if (x <= 3.0)
    printf("passed\n");
  else {
    printf("failed\n");
    return -1;
  }
  x = 4.0;
  printf("test >...");
  if (x > 3.0)
    printf("passed\n");
  else {
    printf("failed\n");
    return -1;
  }
  printf("test >=...");
  if (x >= 3.0)
    printf("passed\n");
  else {
    printf("failed\n");
    return -1;
  }
  printf("test ==...");
  if (x == 3.0) {
    printf("failed\n");
    return -1;
  } else
    printf("passed\n");
  printf("test !=...");
  if (x != 3.0)
    printf("passed\n");
  else
    printf("failed\n");
  y = x * 5.0;
  printf("test *...");
  if (y == 20.0)
    printf("passed\n");
  else {
    printf("failed\n");
    return -1;
  }
  y = x / 5.0;
  printf("test /...");
  if (roundf(y * 10.0) == (8.0))
    printf("passed\n");
  else {
    printf("failed\n");
    return -1;
  }
  y = x + 5.0;
  printf("test +...");
  if (y == 9.0)
    printf("passed\n");
  else {
    printf("failed\n");
    return -1;
  }
  y = x - 5.0;
  printf("test -...");
  if (y == -1.0)
    printf("passed\n");
  else {
    printf("failed\n");
    return -1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<float_test>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
lea    0xf11(%rip),%rdi
call   1030 <printf@plt>
movss  0xefc(%rip),%xmm0
movss  %xmm0,-0x8(%rbp)
lea    0xf0b(%rip),%rdi
call   1030 <printf@plt>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xea2(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1179 <float_test+0x59>
lea    0xeee(%rip),%rdi
call   1030 <printf@plt>
jmp    1191 <float_test+0x71>
lea    0xee5(%rip),%rdi
call   1030 <printf@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    151a <float_test+0x3fa>
lea    0xed5(%rip),%rdi
call   1030 <printf@plt>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe52(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     11c9 <float_test+0xa9>
lea    0xe9e(%rip),%rdi
call   1030 <printf@plt>
jmp    11e1 <float_test+0xc1>
lea    0xe95(%rip),%rdi
call   1030 <printf@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    151a <float_test+0x3fa>
movss  0xe53(%rip),%xmm0
movss  %xmm0,-0x8(%rbp)
lea    0xe83(%rip),%rdi
call   1030 <printf@plt>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdf5(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1226 <float_test+0x106>
lea    0xe41(%rip),%rdi
call   1030 <printf@plt>
jmp    123e <float_test+0x11e>
lea    0xe38(%rip),%rdi
call   1030 <printf@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    151a <float_test+0x3fa>
lea    0xe3d(%rip),%rdi
call   1030 <printf@plt>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xda5(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1276 <float_test+0x156>
lea    0xdf1(%rip),%rdi
call   1030 <printf@plt>
jmp    128e <float_test+0x16e>
lea    0xde8(%rip),%rdi
call   1030 <printf@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    151a <float_test+0x3fa>
lea    0xdf8(%rip),%rdi
call   1030 <printf@plt>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd55(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12d3 <float_test+0x1b3>
jp     12d3 <float_test+0x1b3>
lea    0xda3(%rip),%rdi
call   1030 <printf@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    151a <float_test+0x3fa>
lea    0xd83(%rip),%rdi
call   1030 <printf@plt>
lea    0xdb2(%rip),%rdi
call   1030 <printf@plt>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd04(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1311 <float_test+0x1f1>
jp     1311 <float_test+0x1f1>
jmp    1322 <float_test+0x202>
lea    0xd45(%rip),%rdi
call   1030 <printf@plt>
jmp    132e <float_test+0x20e>
lea    0xd3c(%rip),%rdi
call   1030 <printf@plt>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcd1(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
lea    0xd50(%rip),%rdi
call   1030 <printf@plt>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc9f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    138a <float_test+0x26a>
jp     138a <float_test+0x26a>
lea    0xcdd(%rip),%rdi
call   1030 <printf@plt>
jmp    13a2 <float_test+0x282>
lea    0xcd4(%rip),%rdi
call   1030 <printf@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    151a <float_test+0x3fa>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc5d(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
lea    0xce6(%rip),%rdi
call   1030 <printf@plt>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc43(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1040 <roundf@plt>
movsd  0xc26(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1413 <float_test+0x2f3>
jp     1413 <float_test+0x2f3>
lea    0xc54(%rip),%rdi
call   1030 <printf@plt>
jmp    142b <float_test+0x30b>
lea    0xc4b(%rip),%rdi
call   1030 <printf@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    151a <float_test+0x3fa>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xbd4(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
lea    0xc67(%rip),%rdi
call   1030 <printf@plt>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xbc2(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1487 <float_test+0x367>
jp     1487 <float_test+0x367>
lea    0xbe0(%rip),%rdi
call   1030 <printf@plt>
jmp    149f <float_test+0x37f>
lea    0xbd7(%rip),%rdi
call   1030 <printf@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    151a <float_test+0x3fa>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb60(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
lea    0xbfd(%rip),%rdi
call   1030 <printf@plt>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb56(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    14fb <float_test+0x3db>
jp     14fb <float_test+0x3db>
lea    0xb6c(%rip),%rdi
call   1030 <printf@plt>
jmp    1513 <float_test+0x3f3>
lea    0xb63(%rip),%rdi
call   1030 <printf@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    151a <float_test+0x3fa>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<float_test>:
push   %rbp
push   %r14
push   %rbx
sub    $0x10,%rsp
lea    0xf51(%rip),%rdi
call   1030 <puts@plt>
movl   $0x40000000,0x8(%rsp)
40
lea    0xed5(%rip),%rdi
call   1040 <printf@plt>
mov    $0xffffffff,%ebp
lea    0xf45(%rip),%rbx
movss  0xe94(%rip),%xmm0
ucomiss 0x8(%rsp),%xmm0
jbe    1224 <float_test+0xf4>
lea    0xf24(%rip),%rdi
call   1030 <puts@plt>
lea    0xea8(%rip),%rdi
call   1040 <printf@plt>
movss  0xe69(%rip),%xmm0
ucomiss 0x8(%rsp),%xmm0
jb     1224 <float_test+0xf4>
lea    0xef9(%rip),%rdi
call   1030 <puts@plt>
movl   $0x40800000,0x8(%rsp)
40
lea    0xe80(%rip),%rdi
call   1040 <printf@plt>
movss  0x8(%rsp),%xmm0
ucomiss 0xe31(%rip),%xmm0
jbe    1224 <float_test+0xf4>
lea    0xeca(%rip),%rdi
call   1030 <puts@plt>
lea    0xe63(%rip),%rdi
call   1040 <printf@plt>
movss  0x8(%rsp),%xmm0
ucomiss 0xe0a(%rip),%xmm0
jb     1224 <float_test+0xf4>
lea    0xea3(%rip),%r14
mov    %r14,%rdi
call   1030 <puts@plt>
lea    0xe44(%rip),%rdi
call   1040 <printf@plt>
movss  0x8(%rsp),%xmm0
ucomiss 0xde0(%rip),%xmm0
jne    1237 <float_test+0x107>
jp     1237 <float_test+0x107>
mov    %rbx,%rdi
call   1030 <puts@plt>
mov    %ebp,%eax
add    $0x10,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret
mov    %r14,%rdi
call   1030 <puts@plt>
lea    0xe17(%rip),%rdi
call   1040 <printf@plt>
movss  0x8(%rsp),%xmm0
ucomiss 0xda8(%rip),%xmm0
lea    0xe4a(%rip),%rbx
mov    %rbx,%rdi
cmovne %r14,%rdi
cmovp  %r14,%rdi
call   1030 <puts@plt>
movss  0x8(%rsp),%xmm0
mulss  0xd87(%rip),%xmm0
movss  %xmm0,0xc(%rsp)
lea    0xdde(%rip),%rdi
call   1040 <printf@plt>
movss  0xc(%rsp),%xmm0
ucomiss 0xd6c(%rip),%xmm0
jne    1224 <float_test+0xf4>
jp     1224 <float_test+0xf4>
lea    0xdfb(%rip),%rdi
call   1030 <puts@plt>
movss  0x8(%rsp),%xmm0
divss  0xd4a(%rip),%xmm0
movss  %xmm0,0xc(%rsp)
lea    0xdab(%rip),%rdi
call   1040 <printf@plt>
movss  0xc(%rsp),%xmm0
mulss  0xd32(%rip),%xmm0
call   1050 <roundf@plt>
ucomisd 0xd39(%rip),%xmm0
jne    1224 <float_test+0xf4>
jp     1224 <float_test+0xf4>
lea    0xda8(%rip),%r14
mov    %r14,%rdi
call   1030 <puts@plt>
movss  0x8(%rsp),%xmm0
addss  0xcf4(%rip),%xmm0
movss  %xmm0,0xc(%rsp)
lea    0xd5f(%rip),%rdi
call   1040 <printf@plt>
movss  0xc(%rsp),%xmm0
ucomiss 0xce1(%rip),%xmm0
jne    1224 <float_test+0xf4>
jp     1224 <float_test+0xf4>
mov    %r14,%rdi
call   1030 <puts@plt>
movss  0x8(%rsp),%xmm0
addss  0xcc3(%rip),%xmm0
movss  %xmm0,0xc(%rsp)
lea    0xd28(%rip),%rdi
call   1040 <printf@plt>
movss  0xcad(%rip),%xmm0
movss  0xc(%rsp),%xmm2
movaps %xmm2,%xmm1
cmpneqss %xmm0,%xmm1
movd   %xmm1,%ebp
ucomiss %xmm0,%xmm2
lea    0xd22(%rip),%rax
cmovne %rax,%r14
cmovp  %rax,%r14
mov    %r14,%rbx
jmp    1224 <float_test+0xf4>

LLVM IR (-O0):
@.str = [19 x i8] c"Start float tests\0A\00"
@.str.1 = [10 x i8] c"test <...\00"
@.str.2 = [8 x i8] c"passed\0A\00"
@.str.3 = [8 x i8] c"failed\0A\00"
@.str.4 = [11 x i8] c"test <=...\00"
@.str.5 = [10 x i8] c"test >...\00"
@.str.6 = [11 x i8] c"test >=...\00"
@.str.7 = [11 x i8] c"test ==...\00"
@.str.8 = [11 x i8] c"test !=...\00"
@.str.9 = [10 x i8] c"test *...\00"
@.str.10 = [10 x i8] c"test /...\00"
@.str.11 = [10 x i8] c"test +...\00"
@.str.12 = [10 x i8] c"test -...\00"
define i32 @float_test() {
%1 = alloca i32
%2 = alloca float
%3 = alloca float
%4 = call i32 @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str, i64 0, i64 0))
store volatile float 2.000000e+00, float* %2
%5 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.1, i64 0, i64 0))
%6 = load volatile float, float* %2
%7 = fpext float %6 to double
%8 = fcmp olt double %7, 3.000000e+00
br i1 %8, label %9, label %11
9: ; preds = %0
%10 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
br label %13
11: ; preds = %0
%12 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0))
store i32 -1, i32* %1
br label %114
13: ; preds = %9
%14 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.4, i64 0, i64 0))
%15 = load volatile float, float* %2
%16 = fpext float %15 to double
%17 = fcmp ole double %16, 3.000000e+00
br i1 %17, label %18, label %20
18: ; preds = %13
%19 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
br label %22
20: ; preds = %13
%21 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0))
store i32 -1, i32* %1
br label %114
22: ; preds = %18
store volatile float 4.000000e+00, float* %2
%23 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.5, i64 0, i64 0))
%24 = load volatile float, float* %2
%25 = fpext float %24 to double
%26 = fcmp ogt double %25, 3.000000e+00
br i1 %26, label %27, label %29
27: ; preds = %22
%28 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
br label %31
29: ; preds = %22
%30 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0))
store i32 -1, i32* %1
br label %114
31: ; preds = %27
%32 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.6, i64 0, i64 0))
%33 = load volatile float, float* %2
%34 = fpext float %33 to double
%35 = fcmp oge double %34, 3.000000e+00
br i1 %35, label %36, label %38
36: ; preds = %31
%37 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
br label %40
38: ; preds = %31
%39 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0))
store i32 -1, i32* %1
br label %114
40: ; preds = %36
%41 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.7, i64 0, i64 0))
%42 = load volatile float, float* %2
%43 = fpext float %42 to double
%44 = fcmp oeq double %43, 3.000000e+00
br i1 %44, label %45, label %47
45: ; preds = %40
%46 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0))
store i32 -1, i32* %1
br label %114
47: ; preds = %40
%48 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
br label %49
49: ; preds = %47
%50 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.8, i64 0, i64 0))
%51 = load volatile float, float* %2
%52 = fpext float %51 to double
%53 = fcmp une double %52, 3.000000e+00
br i1 %53, label %54, label %56
54: ; preds = %49
%55 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
br label %58
56: ; preds = %49
%57 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0))
br label %58
58: ; preds = %56, %54
%59 = load volatile float, float* %2
%60 = fpext float %59 to double
%61 = fmul double %60, 5.000000e+00
%62 = fptrunc double %61 to float
store float %62, float* %3
%63 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.9, i64 0, i64 0))
%64 = load float, float* %3
%65 = fpext float %64 to double
%66 = fcmp oeq double %65, 2.000000e+01
br i1 %66, label %67, label %69
67: ; preds = %58
%68 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
br label %71
69: ; preds = %58
%70 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0))
store i32 -1, i32* %1
br label %114
71: ; preds = %67
%72 = load volatile float, float* %2
%73 = fpext float %72 to double
%74 = fdiv double %73, 5.000000e+00
%75 = fptrunc double %74 to float
store float %75, float* %3
%76 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.10, i64 0, i64 0))
%77 = load float, float* %3
%78 = fpext float %77 to double
%79 = fmul double %78, 1.000000e+01
%80 = fptrunc double %79 to float
%81 = call double @roundf(float %80)
%82 = fcmp oeq double %81, 8.000000e+00
br i1 %82, label %83, label %85
83: ; preds = %71
%84 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
br label %87
85: ; preds = %71
%86 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0))
store i32 -1, i32* %1
br label %114
87: ; preds = %83
%88 = load volatile float, float* %2
%89 = fpext float %88 to double
%90 = fadd double %89, 5.000000e+00
%91 = fptrunc double %90 to float
store float %91, float* %3
%92 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.11, i64 0, i64 0))
%93 = load float, float* %3
%94 = fpext float %93 to double
%95 = fcmp oeq double %94, 9.000000e+00
br i1 %95, label %96, label %98
96: ; preds = %87
%97 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
br label %100
98: ; preds = %87
%99 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0))
store i32 -1, i32* %1
br label %114
100: ; preds = %96
%101 = load volatile float, float* %2
%102 = fpext float %101 to double
%103 = fsub double %102, 5.000000e+00
%104 = fptrunc double %103 to float
store float %104, float* %3
%105 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.12, i64 0, i64 0))
%106 = load float, float* %3
%107 = fpext float %106 to double
%108 = fcmp oeq double %107, -1.000000e+00
br i1 %108, label %109, label %111
109: ; preds = %100
%110 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
br label %113
111: ; preds = %100
%112 = call i32 @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0))
store i32 -1, i32* %1
br label %114
113: ; preds = %109
store i32 0, i32* %1
br label %114
114: ; preds = %113, %111, %98, %85, %69, %45, %38, %29, %20, %11
%115 = load i32, i32* %1
ret i32 %115
}

LLVM IR (-O2):
@.str.1 = [10 x i8] c"test <...\00"
@.str.4 = [11 x i8] c"test <=...\00"
@.str.5 = [10 x i8] c"test >...\00"
@.str.6 = [11 x i8] c"test >=...\00"
@.str.7 = [11 x i8] c"test ==...\00"
@.str.8 = [11 x i8] c"test !=...\00"
@.str.9 = [10 x i8] c"test *...\00"
@.str.10 = [10 x i8] c"test /...\00"
@.str.11 = [10 x i8] c"test +...\00"
@.str.12 = [10 x i8] c"test -...\00"
@str = [18 x i8] c"Start float tests\00"
@str.31 = [7 x i8] c"passed\00"
@str.32 = [7 x i8] c"failed\00"
define i32 @float_test() {
%1 = alloca float
%2 = bitcast float* %1 to i8*
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str, i64 0, i64 0))
store volatile float 2.000000e+00, float* %1
%4 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.1, i64 0, i64 0))
%5 = load volatile float, float* %1
%6 = fcmp olt float %5, 3.000000e+00
br i1 %6, label %7, label %61
7: ; preds = %0
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.31, i64 0, i64 0))
%9 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.4, i64 0, i64 0))
%10 = load volatile float, float* %1
%11 = fcmp ugt float %10, 3.000000e+00
br i1 %11, label %61, label %12
12: ; preds = %7
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.31, i64 0, i64 0))
store volatile float 4.000000e+00, float* %1
%14 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.5, i64 0, i64 0))
%15 = load volatile float, float* %1
%16 = fcmp ogt float %15, 3.000000e+00
br i1 %16, label %17, label %61
17: ; preds = %12
%18 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.31, i64 0, i64 0))
%19 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.6, i64 0, i64 0))
%20 = load volatile float, float* %1
%21 = fcmp ult float %20, 3.000000e+00
br i1 %21, label %61, label %22
22: ; preds = %17
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.31, i64 0, i64 0))
%24 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.7, i64 0, i64 0))
%25 = load volatile float, float* %1
%26 = fcmp oeq float %25, 3.000000e+00
br i1 %26, label %61, label %27
27: ; preds = %22
%28 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.31, i64 0, i64 0))
%29 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @.str.8, i64 0, i64 0))
%30 = load volatile float, float* %1
%31 = fcmp une float %30, 3.000000e+00
%32 = select i1 %31, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @str.31, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @str.32, i64 0, i64 0)
%33 = tail call i32 @puts(i8* dereferenceable(1) %32)
%34 = load volatile float, float* %1
%35 = fmul float %34, 5.000000e+00
%36 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.9, i64 0, i64 0))
%37 = fcmp oeq float %35, 2.000000e+01
br i1 %37, label %38, label %61
38: ; preds = %27
%39 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.31, i64 0, i64 0))
%40 = load volatile float, float* %1
%41 = fdiv float %40, 5.000000e+00
%42 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.10, i64 0, i64 0))
%43 = fmul float %41, 1.000000e+01
%44 = tail call double @roundf(float %43)
%45 = fcmp oeq double %44, 8.000000e+00
br i1 %45, label %46, label %61
46: ; preds = %38
%47 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.31, i64 0, i64 0))
%48 = load volatile float, float* %1
%49 = fadd float %48, 5.000000e+00
%50 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.11, i64 0, i64 0))
%51 = fcmp oeq float %49, 9.000000e+00
br i1 %51, label %52, label %61
52: ; preds = %46
%53 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.31, i64 0, i64 0))
%54 = load volatile float, float* %1
%55 = fadd float %54, -5.000000e+00
%56 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.12, i64 0, i64 0))
%57 = fcmp oeq float %55, -1.000000e+00
%58 = select i1 %57, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @str.31, i64 0, i64 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @str.32, i64 0, i64 0)
%59 = xor i1 %57, true
%60 = sext i1 %59 to i32
br label %61
61: ; preds = %46, %52, %38, %27, %22, %17, %12, %7, %0
%62 = phi i8* [ getelementptr inbounds ([7 x i8], [7 x i8]* @str.32, i64 0, i64 0), %0 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @str.32, i64 0, i64 0), %7 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @str.32, i64 0, i64 0), %12 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @str.32, i64 0, i64 0), %17 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @str.32, i64 0, i64 0), %22 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @str.32, i64 0, i64 0), %27 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @str.32, i64 0, i64 0), %38 ], [ %58, %52 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @str.32, i64 0, i64 0), %46 ]
%63 = phi i32 [ -1, %0 ], [ -1, %7 ], [ -1, %12 ], [ -1, %17 ], [ -1, %22 ], [ -1, %27 ], [ -1, %38 ], [ %60, %52 ], [ -1, %46 ]
%64 = tail call i32 @puts(i8* dereferenceable(1) %62)
ret i32 %63
}