#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*/ __print_float(float);
int main() {
  float a;
  float b;
  a = 4.39;
  b = a++;
  __print_float(a);
  __print_float(b);
  a++;
  b = a++;
  __print_float(a);
  __print_float(b);
  a = -2.087;
  b = a--;
  __print_float(a);
  __print_float(b);
  a--;
  b = a--;
  __print_float(a);
  __print_float(b);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
movss  0xee5(%rip),%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x8(%rbp),%xmm0
movss  0xecf(%rip),%xmm2
movaps %xmm0,%xmm1
addss  %xmm2,%xmm1
movss  %xmm1,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
movss  -0x8(%rbp),%xmm0
call   1030 <__print_float@plt>
movss  -0xc(%rbp),%xmm0
call   1030 <__print_float@plt>
movss  0xea2(%rip),%xmm0
addss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x8(%rbp),%xmm0
movss  0xe8b(%rip),%xmm2
movaps %xmm0,%xmm1
addss  %xmm2,%xmm1
movss  %xmm1,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
movss  -0x8(%rbp),%xmm0
call   1030 <__print_float@plt>
movss  -0xc(%rbp),%xmm0
call   1030 <__print_float@plt>
movss  0xe5a(%rip),%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x8(%rbp),%xmm0
movss  0xe44(%rip),%xmm2
movaps %xmm0,%xmm1
addss  %xmm2,%xmm1
movss  %xmm1,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
movss  -0x8(%rbp),%xmm0
call   1030 <__print_float@plt>
movss  -0xc(%rbp),%xmm0
call   1030 <__print_float@plt>
movss  0xe17(%rip),%xmm0
addss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x8(%rbp),%xmm0
movss  0xe00(%rip),%xmm2
movaps %xmm0,%xmm1
addss  %xmm2,%xmm1
movss  %xmm1,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
movss  -0x8(%rbp),%xmm0
call   1030 <__print_float@plt>
movss  -0xc(%rbp),%xmm0
call   1030 <__print_float@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
movss  0xee7(%rip),%xmm0
call   1030 <__print_float@plt>
movss  0xede(%rip),%xmm0
call   1030 <__print_float@plt>
movss  0xed5(%rip),%xmm0
call   1030 <__print_float@plt>
movss  0xecc(%rip),%xmm0
call   1030 <__print_float@plt>
movss  0xec3(%rip),%xmm0
call   1030 <__print_float@plt>
movss  0xeba(%rip),%xmm0
call   1030 <__print_float@plt>
movss  0xeb1(%rip),%xmm0
call   1030 <__print_float@plt>
movss  0xea8(%rip),%xmm0
call   1030 <__print_float@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca float
%3 = alloca float
store i32 0, i32* %1
store float 0x40118F5C20000000, float* %2
%4 = load float, float* %2
%5 = fadd float %4, 1.000000e+00
store float %5, float* %2
store float %4, float* %3
%6 = load float, float* %2
%7 = call i32 @__print_float(float %6)
%8 = load float, float* %3
%9 = call i32 @__print_float(float %8)
%10 = load float, float* %2
%11 = fadd float %10, 1.000000e+00
store float %11, float* %2
%12 = load float, float* %2
%13 = fadd float %12, 1.000000e+00
store float %13, float* %2
store float %12, float* %3
%14 = load float, float* %2
%15 = call i32 @__print_float(float %14)
%16 = load float, float* %3
%17 = call i32 @__print_float(float %16)
store float 0xC000B22D00000000, float* %2
%18 = load float, float* %2
%19 = fadd float %18, -1.000000e+00
store float %19, float* %2
store float %18, float* %3
%20 = load float, float* %2
%21 = call i32 @__print_float(float %20)
%22 = load float, float* %3
%23 = call i32 @__print_float(float %22)
%24 = load float, float* %2
%25 = fadd float %24, -1.000000e+00
store float %25, float* %2
%26 = load float, float* %2
%27 = fadd float %26, -1.000000e+00
store float %27, float* %2
store float %26, float* %3
%28 = load float, float* %2
%29 = call i32 @__print_float(float %28)
%30 = load float, float* %3
%31 = call i32 @__print_float(float %30)
ret i32 0
}

LLVM IR (-O2):
define i32 @main() {
%1 = tail call i32 @__print_float(float 0x40158F5C20000000)
%2 = tail call i32 @__print_float(float 0x40118F5C20000000)
%3 = tail call i32 @__print_float(float 0x401D8F5C20000000)
%4 = tail call i32 @__print_float(float 0x40198F5C20000000)
%5 = tail call i32 @__print_float(float 0xC008B22D00000000)
%6 = tail call i32 @__print_float(float 0xC000B22D00000000)
%7 = tail call i32 @__print_float(float 0xC014591680000000)
%8 = tail call i32 @__print_float(float 0xC010591680000000)
ret i32 0
}