#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 *);
int test_single() {
  static float f;
  static int i;
  static int e = 0;
  f = 1.0;
  for (i = 0; i < 10; i++)
    f += (1 << i);
  if (f != 1024.0) {
    printf("s1 ");
    e++;
  }
  f = 1024.0;
  for (i = 0; i < 10; i++)
    f -= (1 << i);
  if (f != 1.0) {
    printf("s2 ");
    e++;
  }
  f = 1.0;
  for (i = 1; i < 10; i++)
    f *= i;
  if (f != 362880.0) {
    printf("s3 ");
    e++;
  }
  f = 362880.0;
  for (i = 1; i < 10; i++)
    f /= i;
  if (f != 1.0) {
    printf("s4 ");
    e++;
  }
  f = 0.5;
  for (i = 1; i < 1000000; i++) {
    f += 2.0;
    f *= 0.5;
  }
  if (f != 2.0) {
    printf("s5 ");
    e++;
  }
  f = 2.0;
  for (i = 1; i < 1000000; i++) {
    f /= 0.5;
    f -= 2.0;
  }
  if (f != 2.0) {
    printf("s6 ");
    e++;
  }
  f = 1000000.0;
  for (i = 1; i < 1000000; i++)
    f = ((((f + 1.5) * 0.5) - 1.25) / 0.5);
  if (f != 1.0) {
    printf("s7 ");
    e++;
  }
  f = 1.0;
  for (i = 1; i < 1000000; i++)
    f = ((((f * 5.0) + 3.0) / 2.0) - 3.0);
  if (f != 1.0)
    printf("s8 ");
  f = 8.0;
  for (i = 1; i < 1000000; i++)
    f = ((((f - 5.0) / 2.0) + 2.5) * 2.0);
  if (f != 8.0) {
    printf("s9 ");
    e++;
  }
  f = 42.0;
  for (i = 1; i < 1000000; i++)
    f = ((((f / 6.0) - 5.0) * 19.75) + 2.5);
  if (f != 42.0) {
    printf("s10 ");
    e++;
  }
  if (e) {
    printf("\n");
    return 1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<test_single>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movss  0xee0(%rip),%xmm0
movss  %xmm0,0x2f04(%rip)
movl   $0x0,0x2efe(%rip)
cmpl   $0xa,0x2ef7(%rip)
jge    1174 <test_single+0x64>
mov    0x2eeb(%rip),%ecx
mov    $0x1,%eax
shl    %cl,%eax
cvtsi2ss %eax,%xmm0
addss  0x2ed4(%rip),%xmm0
movss  %xmm0,0x2ecc(%rip)
mov    0x2eca(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2ec1(%rip)
jmp    1132 <test_single+0x22>
movss  0x2eb0(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe98(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    119d <test_single+0x8d>
jp     119d <test_single+0x8d>
jmp    11b8 <test_single+0xa8>
lea    0xeec(%rip),%rdi
call   1030 <printf@plt>
mov    0x2e85(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2e7c(%rip)
movss  0xe44(%rip),%xmm0
movss  %xmm0,0x2e64(%rip)
movl   $0x0,0x2e5e(%rip)
cmpl   $0xa,0x2e57(%rip)
jge    1218 <test_single+0x108>
mov    0x2e4b(%rip),%ecx
mov    $0x1,%eax
shl    %cl,%eax
cvtsi2ss %eax,%xmm1
movss  0x2e34(%rip),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,0x2e28(%rip)
mov    0x2e26(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2e1d(%rip)
jmp    11d2 <test_single+0xc2>
movss  0x2e0c(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdfc(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1241 <test_single+0x131>
jp     1241 <test_single+0x131>
jmp    125c <test_single+0x14c>
lea    0xe4c(%rip),%rdi
call   1030 <printf@plt>
mov    0x2de1(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2dd8(%rip)
movss  0xd9c(%rip),%xmm0
movss  %xmm0,0x2dc0(%rip)
movl   $0x1,0x2dba(%rip)
cmpl   $0xa,0x2db3(%rip)
jge    12af <test_single+0x19f>
cvtsi2ssl 0x2da5(%rip),%xmm0
mulss  0x2d99(%rip),%xmm0
movss  %xmm0,0x2d91(%rip)
mov    0x2d8f(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2d86(%rip)
jmp    1276 <test_single+0x166>
movss  0x2d75(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd6d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12d8 <test_single+0x1c8>
jp     12d8 <test_single+0x1c8>
jmp    12f3 <test_single+0x1e3>
lea    0xdb9(%rip),%rdi
call   1030 <printf@plt>
mov    0x2d4a(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2d41(%rip)
movss  0xd0d(%rip),%xmm0
movss  %xmm0,0x2d29(%rip)
movl   $0x1,0x2d23(%rip)
cmpl   $0xa,0x2d1c(%rip)
jge    134a <test_single+0x23a>
cvtsi2ssl 0x2d0e(%rip),%xmm1
movss  0x2d02(%rip),%xmm0
divss  %xmm1,%xmm0
movss  %xmm0,0x2cf6(%rip)
mov    0x2cf4(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2ceb(%rip)
jmp    130d <test_single+0x1fd>
movss  0x2cda(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcca(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1373 <test_single+0x263>
jp     1373 <test_single+0x263>
jmp    138e <test_single+0x27e>
lea    0xd22(%rip),%rdi
call   1030 <printf@plt>
mov    0x2caf(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2ca6(%rip)
movss  0xc76(%rip),%xmm0
movss  %xmm0,0x2c8e(%rip)
movl   $0x1,0x2c88(%rip)
cmpl   $0xf4240,0x2c7e(%rip)
jge    1414 <test_single+0x304>
movss  0x2c6c(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc6c(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2c50(%rip)
movss  0x2c48(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc88(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2c2c(%rip)
mov    0x2c2a(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2c21(%rip)
jmp    13a8 <test_single+0x298>
movss  0x2c10(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc10(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    143d <test_single+0x32d>
jp     143d <test_single+0x32d>
jmp    1458 <test_single+0x348>
lea    0xc5c(%rip),%rdi
call   1030 <printf@plt>
mov    0x2be5(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2bdc(%rip)
movss  0xbb0(%rip),%xmm0
movss  %xmm0,0x2bc4(%rip)
movl   $0x1,0x2bbe(%rip)
cmpl   $0xf4240,0x2bb4(%rip)
jge    14de <test_single+0x3ce>
movss  0x2ba2(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xbe2(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2b86(%rip)
movss  0x2b7e(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb7e(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2b62(%rip)
mov    0x2b60(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2b57(%rip)
jmp    1472 <test_single+0x362>
movss  0x2b46(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb46(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1507 <test_single+0x3f7>
jp     1507 <test_single+0x3f7>
jmp    1522 <test_single+0x412>
lea    0xb96(%rip),%rdi
call   1030 <printf@plt>
mov    0x2b1b(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2b12(%rip)
movss  0xaea(%rip),%xmm0
movss  %xmm0,0x2afa(%rip)
movl   $0x1,0x2af4(%rip)
cmpl   $0xf4240,0x2aea(%rip)
jge    15a8 <test_single+0x498>
movss  0x2ad8(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb28(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xb0c(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb08(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xaf4(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2a98(%rip)
mov    0x2a96(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2a8d(%rip)
jmp    153c <test_single+0x42c>
movss  0x2a7c(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa6c(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    15d1 <test_single+0x4c1>
jp     15d1 <test_single+0x4c1>
jmp    15ec <test_single+0x4dc>
lea    0xad0(%rip),%rdi
call   1030 <printf@plt>
mov    0x2a51(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2a48(%rip)
movss  0xa0c(%rip),%xmm0
movss  %xmm0,0x2a30(%rip)
movl   $0x1,0x2a2a(%rip)
cmpl   $0xf4240,0x2a20(%rip)
jge    1672 <test_single+0x562>
movss  0x2a0e(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa36(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa3a(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0x9f6(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xa22(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x29ce(%rip)
mov    0x29cc(%rip),%eax
add    $0x1,%eax
mov    %eax,0x29c3(%rip)
jmp    1606 <test_single+0x4f6>
movss  0x29b2(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x9a2(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    169b <test_single+0x58b>
jp     169b <test_single+0x58b>
jmp    16a7 <test_single+0x597>
lea    0xa0a(%rip),%rdi
call   1030 <printf@plt>
movss  0x969(%rip),%xmm0
movss  %xmm0,0x2975(%rip)
movl   $0x1,0x296f(%rip)
cmpl   $0xf4240,0x2965(%rip)
jge    172d <test_single+0x61d>
movss  0x2953(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x97b(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0x947(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0x95b(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0x92f(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2913(%rip)
mov    0x2911(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2908(%rip)
jmp    16c1 <test_single+0x5b1>
movss  0x28f7(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x8ff(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1756 <test_single+0x646>
jp     1756 <test_single+0x646>
jmp    1771 <test_single+0x661>
lea    0x953(%rip),%rdi
call   1030 <printf@plt>
mov    0x28cc(%rip),%eax
add    $0x1,%eax
mov    %eax,0x28c3(%rip)
movss  0x8a3(%rip),%xmm0
movss  %xmm0,0x28ab(%rip)
movl   $0x1,0x28a5(%rip)
cmpl   $0xf4240,0x289b(%rip)
jge    17f7 <test_single+0x6e7>
movss  0x2889(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x8b9(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0x8a5(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  0x889(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x885(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x2849(%rip)
mov    0x2847(%rip),%eax
add    $0x1,%eax
mov    %eax,0x283e(%rip)
jmp    178b <test_single+0x67b>
movss  0x282d(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x83d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1820 <test_single+0x710>
jp     1820 <test_single+0x710>
jmp    183b <test_single+0x72b>
lea    0x88d(%rip),%rdi
call   1030 <printf@plt>
mov    0x2802(%rip),%eax
add    $0x1,%eax
mov    %eax,0x27f9(%rip)
cmpl   $0x0,0x27f2(%rip)
je     1860 <test_single+0x750>
lea    0x86a(%rip),%rdi
call   1030 <printf@plt>
movl   $0x1,-0x4(%rbp)
jmp    1867 <test_single+0x757>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test_single>:
push   %rax
movss  0xed7(%rip),%xmm0
mov    $0xf423f,%eax
movss  0xece(%rip),%xmm1
movaps %xmm0,%xmm2
nopl   0x0(%rax)
addss  %xmm1,%xmm2
mulss  %xmm0,%xmm2
addss  %xmm1,%xmm2
mulss  %xmm0,%xmm2
addss  %xmm1,%xmm2
mulss  %xmm0,%xmm2
addss  %xmm1,%xmm2
mulss  %xmm0,%xmm2
addss  %xmm1,%xmm2
mulss  %xmm0,%xmm2
addss  %xmm1,%xmm2
mulss  %xmm0,%xmm2
addss  %xmm1,%xmm2
mulss  %xmm0,%xmm2
add    $0xfffffff9,%eax
jne    1140 <test_single+0x20>
ucomiss 0xe80(%rip),%xmm2
jne    1188 <test_single+0x68>
jnp    119b <test_single+0x7b>
lea    0xe99(%rip),%rdi
call   1040 <printf@plt>
addl   $0x1,0x2e99(%rip)
movss  0xe65(%rip),%xmm3
mov    $0xf423f,%eax
movsd  0xe60(%rip),%xmm0
movsd  0xe60(%rip),%xmm1
movsd  0xe60(%rip),%xmm2
cvtss2sd %xmm3,%xmm3
addsd  %xmm0,%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm2,%xmm3
addsd  %xmm3,%xmm3
cvtsd2ss %xmm3,%xmm3
cvtss2sd %xmm3,%xmm3
addsd  %xmm0,%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm2,%xmm3
addsd  %xmm3,%xmm3
cvtsd2ss %xmm3,%xmm3
cvtss2sd %xmm3,%xmm3
addsd  %xmm0,%xmm3
mulsd  %xmm1,%xmm3
addsd  %xmm2,%xmm3
addsd  %xmm3,%xmm3
cvtsd2ss %xmm3,%xmm3
add    $0xfffffffd,%eax
jne    11c0 <test_single+0xa0>
ucomiss 0xdf8(%rip),%xmm3
jne    1218 <test_single+0xf8>
jnp    122b <test_single+0x10b>
lea    0xe0d(%rip),%rdi
call   1040 <printf@plt>
addl   $0x1,0x2e09(%rip)
cmpl   $0x0,0x2e02(%rip)
je     1245 <test_single+0x125>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    $0x1,%eax
pop    %rcx
ret
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
@test_single.f = internal global float 0.000000e+00
@test_single.i = internal global i32 0
@test_single.e = internal global i32 0
@.str = [4 x i8] c"s1 \00"
@.str.1 = [4 x i8] c"s2 \00"
@.str.2 = [4 x i8] c"s3 \00"
@.str.3 = [4 x i8] c"s4 \00"
@.str.4 = [4 x i8] c"s5 \00"
@.str.5 = [4 x i8] c"s6 \00"
@.str.6 = [4 x i8] c"s7 \00"
@.str.7 = [4 x i8] c"s8 \00"
@.str.8 = [4 x i8] c"s9 \00"
@.str.9 = [5 x i8] c"s10 \00"
@.str.10 = [2 x i8] c"\0A\00"
define i32 @test_single() {
%1 = alloca i32
store float 1.000000e+00, float* @test_single.f
store i32 0, i32* @test_single.i
br label %2
2: ; preds = %11, %0
%3 = load i32, i32* @test_single.i
%4 = icmp slt i32 %3, 10
br i1 %4, label %5, label %14
5: ; preds = %2
%6 = load i32, i32* @test_single.i
%7 = shl i32 1, %6
%8 = sitofp i32 %7 to float
%9 = load float, float* @test_single.f
%10 = fadd float %9, %8
store float %10, float* @test_single.f
br label %11
11: ; preds = %5
%12 = load i32, i32* @test_single.i
%13 = add nsw i32 %12, 1
store i32 %13, i32* @test_single.i
br label %2
14: ; preds = %2
%15 = load float, float* @test_single.f
%16 = fpext float %15 to double
%17 = fcmp une double %16, 1.024000e+03
br i1 %17, label %18, label %22
18: ; preds = %14
%19 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0))
%20 = load i32, i32* @test_single.e
%21 = add nsw i32 %20, 1
store i32 %21, i32* @test_single.e
br label %22
22: ; preds = %18, %14
store float 1.024000e+03, float* @test_single.f
store i32 0, i32* @test_single.i
br label %23
23: ; preds = %32, %22
%24 = load i32, i32* @test_single.i
%25 = icmp slt i32 %24, 10
br i1 %25, label %26, label %35
26: ; preds = %23
%27 = load i32, i32* @test_single.i
%28 = shl i32 1, %27
%29 = sitofp i32 %28 to float
%30 = load float, float* @test_single.f
%31 = fsub float %30, %29
store float %31, float* @test_single.f
br label %32
32: ; preds = %26
%33 = load i32, i32* @test_single.i
%34 = add nsw i32 %33, 1
store i32 %34, i32* @test_single.i
br label %23
35: ; preds = %23
%36 = load float, float* @test_single.f
%37 = fpext float %36 to double
%38 = fcmp une double %37, 1.000000e+00
br i1 %38, label %39, label %43
39: ; preds = %35
%40 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0))
%41 = load i32, i32* @test_single.e
%42 = add nsw i32 %41, 1
store i32 %42, i32* @test_single.e
br label %43
43: ; preds = %39, %35
store float 1.000000e+00, float* @test_single.f
store i32 1, i32* @test_single.i
br label %44
44: ; preds = %52, %43
%45 = load i32, i32* @test_single.i
%46 = icmp slt i32 %45, 10
br i1 %46, label %47, label %55
47: ; preds = %44
%48 = load i32, i32* @test_single.i
%49 = sitofp i32 %48 to float
%50 = load float, float* @test_single.f
%51 = fmul float %50, %49
store float %51, float* @test_single.f
br label %52
52: ; preds = %47
%53 = load i32, i32* @test_single.i
%54 = add nsw i32 %53, 1
store i32 %54, i32* @test_single.i
br label %44
55: ; preds = %44
%56 = load float, float* @test_single.f
%57 = fpext float %56 to double
%58 = fcmp une double %57, 3.628800e+05
br i1 %58, label %59, label %63
59: ; preds = %55
%60 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0))
%61 = load i32, i32* @test_single.e
%62 = add nsw i32 %61, 1
store i32 %62, i32* @test_single.e
br label %63
63: ; preds = %59, %55
store float 3.628800e+05, float* @test_single.f
store i32 1, i32* @test_single.i
br label %64
64: ; preds = %72, %63
%65 = load i32, i32* @test_single.i
%66 = icmp slt i32 %65, 10
br i1 %66, label %67, label %75
67: ; preds = %64
%68 = load i32, i32* @test_single.i
%69 = sitofp i32 %68 to float
%70 = load float, float* @test_single.f
%71 = fdiv float %70, %69
store float %71, float* @test_single.f
br label %72
72: ; preds = %67
%73 = load i32, i32* @test_single.i
%74 = add nsw i32 %73, 1
store i32 %74, i32* @test_single.i
br label %64
75: ; preds = %64
%76 = load float, float* @test_single.f
%77 = fpext float %76 to double
%78 = fcmp une double %77, 1.000000e+00
br i1 %78, label %79, label %83
79: ; preds = %75
%80 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0))
%81 = load i32, i32* @test_single.e
%82 = add nsw i32 %81, 1
store i32 %82, i32* @test_single.e
br label %83
83: ; preds = %79, %75
store float 5.000000e-01, float* @test_single.f
store i32 1, i32* @test_single.i
br label %84
84: ; preds = %96, %83
%85 = load i32, i32* @test_single.i
%86 = icmp slt i32 %85, 1000000
br i1 %86, label %87, label %99
87: ; preds = %84
%88 = load float, float* @test_single.f
%89 = fpext float %88 to double
%90 = fadd double %89, 2.000000e+00
%91 = fptrunc double %90 to float
store float %91, float* @test_single.f
%92 = load float, float* @test_single.f
%93 = fpext float %92 to double
%94 = fmul double %93, 5.000000e-01
%95 = fptrunc double %94 to float
store float %95, float* @test_single.f
br label %96
96: ; preds = %87
%97 = load i32, i32* @test_single.i
%98 = add nsw i32 %97, 1
store i32 %98, i32* @test_single.i
br label %84
99: ; preds = %84
%100 = load float, float* @test_single.f
%101 = fpext float %100 to double
%102 = fcmp une double %101, 2.000000e+00
br i1 %102, label %103, label %107
103: ; preds = %99
%104 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0))
%105 = load i32, i32* @test_single.e
%106 = add nsw i32 %105, 1
store i32 %106, i32* @test_single.e
br label %107
107: ; preds = %103, %99
store float 2.000000e+00, float* @test_single.f
store i32 1, i32* @test_single.i
br label %108
108: ; preds = %120, %107
%109 = load i32, i32* @test_single.i
%110 = icmp slt i32 %109, 1000000
br i1 %110, label %111, label %123
111: ; preds = %108
%112 = load float, float* @test_single.f
%113 = fpext float %112 to double
%114 = fdiv double %113, 5.000000e-01
%115 = fptrunc double %114 to float
store float %115, float* @test_single.f
%116 = load float, float* @test_single.f
%117 = fpext float %116 to double
%118 = fsub double %117, 2.000000e+00
%119 = fptrunc double %118 to float
store float %119, float* @test_single.f
br label %120
120: ; preds = %111
%121 = load i32, i32* @test_single.i
%122 = add nsw i32 %121, 1
store i32 %122, i32* @test_single.i
br label %108
123: ; preds = %108
%124 = load float, float* @test_single.f
%125 = fpext float %124 to double
%126 = fcmp une double %125, 2.000000e+00
br i1 %126, label %127, label %131
127: ; preds = %123
%128 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i64 0, i64 0))
%129 = load i32, i32* @test_single.e
%130 = add nsw i32 %129, 1
store i32 %130, i32* @test_single.e
br label %131
131: ; preds = %127, %123
store float 1.000000e+06, float* @test_single.f
store i32 1, i32* @test_single.i
br label %132
132: ; preds = %142, %131
%133 = load i32, i32* @test_single.i
%134 = icmp slt i32 %133, 1000000
br i1 %134, label %135, label %145
135: ; preds = %132
%136 = load float, float* @test_single.f
%137 = fpext float %136 to double
%138 = fadd double %137, 1.500000e+00
%139 = call double @llvm.fmuladd.f64(double %138, double 5.000000e-01, double -1.250000e+00)
%140 = fdiv double %139, 5.000000e-01
%141 = fptrunc double %140 to float
store float %141, float* @test_single.f
br label %142
142: ; preds = %135
%143 = load i32, i32* @test_single.i
%144 = add nsw i32 %143, 1
store i32 %144, i32* @test_single.i
br label %132
145: ; preds = %132
%146 = load float, float* @test_single.f
%147 = fpext float %146 to double
%148 = fcmp une double %147, 1.000000e+00
br i1 %148, label %149, label %153
149: ; preds = %145
%150 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%151 = load i32, i32* @test_single.e
%152 = add nsw i32 %151, 1
store i32 %152, i32* @test_single.e
br label %153
153: ; preds = %149, %145
store float 1.000000e+00, float* @test_single.f
store i32 1, i32* @test_single.i
br label %154
154: ; preds = %164, %153
%155 = load i32, i32* @test_single.i
%156 = icmp slt i32 %155, 1000000
br i1 %156, label %157, label %167
157: ; preds = %154
%158 = load float, float* @test_single.f
%159 = fpext float %158 to double
%160 = call double @llvm.fmuladd.f64(double %159, double 5.000000e+00, double 3.000000e+00)
%161 = fdiv double %160, 2.000000e+00
%162 = fsub double %161, 3.000000e+00
%163 = fptrunc double %162 to float
store float %163, float* @test_single.f
br label %164
164: ; preds = %157
%165 = load i32, i32* @test_single.i
%166 = add nsw i32 %165, 1
store i32 %166, i32* @test_single.i
br label %154
167: ; preds = %154
%168 = load float, float* @test_single.f
%169 = fpext float %168 to double
%170 = fcmp une double %169, 1.000000e+00
br i1 %170, label %171, label %173
171: ; preds = %167
%172 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0))
br label %173
173: ; preds = %171, %167
store float 8.000000e+00, float* @test_single.f
store i32 1, i32* @test_single.i
br label %174
174: ; preds = %185, %173
%175 = load i32, i32* @test_single.i
%176 = icmp slt i32 %175, 1000000
br i1 %176, label %177, label %188
177: ; preds = %174
%178 = load float, float* @test_single.f
%179 = fpext float %178 to double
%180 = fsub double %179, 5.000000e+00
%181 = fdiv double %180, 2.000000e+00
%182 = fadd double %181, 2.500000e+00
%183 = fmul double %182, 2.000000e+00
%184 = fptrunc double %183 to float
store float %184, float* @test_single.f
br label %185
185: ; preds = %177
%186 = load i32, i32* @test_single.i
%187 = add nsw i32 %186, 1
store i32 %187, i32* @test_single.i
br label %174
188: ; preds = %174
%189 = load float, float* @test_single.f
%190 = fpext float %189 to double
%191 = fcmp une double %190, 8.000000e+00
br i1 %191, label %192, label %196
192: ; preds = %188
%193 = call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0))
%194 = load i32, i32* @test_single.e
%195 = add nsw i32 %194, 1
store i32 %195, i32* @test_single.e
br label %196
196: ; preds = %192, %188
store float 4.200000e+01, float* @test_single.f
store i32 1, i32* @test_single.i
br label %197
197: ; preds = %207, %196
%198 = load i32, i32* @test_single.i
%199 = icmp slt i32 %198, 1000000
br i1 %199, label %200, label %210
200: ; preds = %197
%201 = load float, float* @test_single.f
%202 = fpext float %201 to double
%203 = fdiv double %202, 6.000000e+00
%204 = fsub double %203, 5.000000e+00
%205 = call double @llvm.fmuladd.f64(double %204, double 1.975000e+01, double 2.500000e+00)
%206 = fptrunc double %205 to float
store float %206, float* @test_single.f
br label %207
207: ; preds = %200
%208 = load i32, i32* @test_single.i
%209 = add nsw i32 %208, 1
store i32 %209, i32* @test_single.i
br label %197
210: ; preds = %197
%211 = load float, float* @test_single.f
%212 = fpext float %211 to double
%213 = fcmp une double %212, 4.200000e+01
br i1 %213, label %214, label %218
214: ; preds = %210
%215 = call i32 @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.9, i64 0, i64 0))
%216 = load i32, i32* @test_single.e
%217 = add nsw i32 %216, 1
store i32 %217, i32* @test_single.e
br label %218
218: ; preds = %214, %210
%219 = load i32, i32* @test_single.e
%220 = icmp ne i32 %219, 0
br i1 %220, label %221, label %223
221: ; preds = %218
%222 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
store i32 1, i32* %1
br label %224
223: ; preds = %218
store i32 0, i32* %1
br label %224
224: ; preds = %223, %221
%225 = load i32, i32* %1
ret i32 %225
}

LLVM IR (-O2):
@test_single.e = internal unnamed_addr global i32 0
@.str.4 = [4 x i8] c"s5 \00"
@.str.6 = [4 x i8] c"s7 \00"
define i32 @test_single() {
br label %1
1: ; preds = %1, %0
%2 = phi i32 [ 1, %0 ], [ %18, %1 ]
%3 = phi float [ 5.000000e-01, %0 ], [ %17, %1 ]
%4 = fadd float %3, 2.000000e+00
%5 = fmul float %4, 5.000000e-01
%6 = fadd float %5, 2.000000e+00
%7 = fmul float %6, 5.000000e-01
%8 = fadd float %7, 2.000000e+00
%9 = fmul float %8, 5.000000e-01
%10 = fadd float %9, 2.000000e+00
%11 = fmul float %10, 5.000000e-01
%12 = fadd float %11, 2.000000e+00
%13 = fmul float %12, 5.000000e-01
%14 = fadd float %13, 2.000000e+00
%15 = fmul float %14, 5.000000e-01
%16 = fadd float %15, 2.000000e+00
%17 = fmul float %16, 5.000000e-01
%18 = add nuw nsw i32 %2, 7
%19 = icmp eq i32 %18, 1000000
br i1 %19, label %20, label %1
20: ; preds = %1
%21 = fcmp une float %17, 2.000000e+00
br i1 %21, label %22, label %26
22: ; preds = %20
%23 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0))
%24 = load i32, i32* @test_single.e
%25 = add nsw i32 %24, 1
store i32 %25, i32* @test_single.e
br label %26
26: ; preds = %20, %22
br label %27
27: ; preds = %27, %26
%28 = phi i32 [ 1, %26 ], [ %45, %27 ]
%29 = phi float [ 1.000000e+06, %26 ], [ %44, %27 ]
%30 = fpext float %29 to double
%31 = fadd double %30, 1.500000e+00
%32 = tail call double @llvm.fmuladd.f64(double %31, double 5.000000e-01, double -1.250000e+00)
%33 = fmul double %32, 2.000000e+00
%34 = fptrunc double %33 to float
%35 = fpext float %34 to double
%36 = fadd double %35, 1.500000e+00
%37 = tail call double @llvm.fmuladd.f64(double %36, double 5.000000e-01, double -1.250000e+00)
%38 = fmul double %37, 2.000000e+00
%39 = fptrunc double %38 to float
%40 = fpext float %39 to double
%41 = fadd double %40, 1.500000e+00
%42 = tail call double @llvm.fmuladd.f64(double %41, double 5.000000e-01, double -1.250000e+00)
%43 = fmul double %42, 2.000000e+00
%44 = fptrunc double %43 to float
%45 = add nuw nsw i32 %28, 3
%46 = icmp eq i32 %45, 1000000
br i1 %46, label %47, label %27
47: ; preds = %27
%48 = fcmp une float %44, 1.000000e+00
br i1 %48, label %49, label %53
49: ; preds = %47
%50 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0))
%51 = load i32, i32* @test_single.e
%52 = add nsw i32 %51, 1
store i32 %52, i32* @test_single.e
br label %53
53: ; preds = %47, %49
%54 = load i32, i32* @test_single.e
%55 = icmp eq i32 %54, 0
br i1 %55, label %58, label %56
56: ; preds = %53
%57 = tail call i32 @putchar(i32 10)
br label %58
58: ; preds = %53, %56
%59 = phi i32 [ 1, %56 ], [ 0, %53 ]
ret i32 %59
}