int main() {
  int i = 0;
  float a = 1.5;
  float b = 2.2;
  float c = a + b;
  float d = b - a;
  float e = b / a;
  float f = a * b;
  if (c != 3.7f) {
    goto Error;
  } else {
    i = 1;
  }
  if ((0.7f - d) > 0.1f) {
    goto Error;
  } else {
    i = 2;
  }
  if ((1.47f - e) > 0.1f) {
    goto Error;
  } else {
    i = 3;
  }
  if ((3.3f - f) > 0.1f) {
    goto Error;
  } else {
    i = 4;
  }
  return 0;
Error:
  return -1;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
movss  0xeee(%rip),%xmm0
movss  %xmm0,-0xc(%rbp)
movss  0xedd(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0xc(%rbp),%xmm0
addss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x10(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x10(%rbp),%xmm0
divss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0xc(%rbp),%xmm0
mulss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x14(%rbp),%xmm0
movss  0xe8b(%rip),%xmm1
ucomiss %xmm1,%xmm0
jne    1189 <main+0x89>
jp     1189 <main+0x89>
jmp    118e <main+0x8e>
jmp    121f <main+0x11f>
movl   $0x1,-0x8(%rbp)
movss  0xe73(%rip),%xmm0
subss  -0x18(%rbp),%xmm0
movss  0xe62(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    11b8 <main+0xb8>
jmp    121f <main+0x11f>
movl   $0x2,-0x8(%rbp)
movss  0xe4d(%rip),%xmm0
subss  -0x1c(%rbp),%xmm0
movss  0xe38(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    11e2 <main+0xe2>
jmp    121f <main+0x11f>
movl   $0x3,-0x8(%rbp)
movss  0xe27(%rip),%xmm0
subss  -0x20(%rbp),%xmm0
movss  0xe0e(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    120c <main+0x10c>
jmp    121f <main+0x11f>
movl   $0x4,-0x8(%rbp)
movl   $0x0,-0x4(%rbp)
jmp    1226 <main+0x126>
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
xor    %eax,%eax
ret

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = alloca float
%7 = alloca float
%8 = alloca float
store i32 0, i32* %1
store i32 0, i32* %2
store float 1.500000e+00, float* %3
store float 0x40019999A0000000, float* %4
%9 = load float, float* %3
%10 = load float, float* %4
%11 = fadd float %9, %10
store float %11, float* %5
%12 = load float, float* %4
%13 = load float, float* %3
%14 = fsub float %12, %13
store float %14, float* %6
%15 = load float, float* %4
%16 = load float, float* %3
%17 = fdiv float %15, %16
store float %17, float* %7
%18 = load float, float* %3
%19 = load float, float* %4
%20 = fmul float %18, %19
store float %20, float* %8
%21 = load float, float* %5
%22 = fcmp une float %21, 0x400D9999A0000000
br i1 %22, label %23, label %24
23: ; preds = %0
br label %44
24: ; preds = %0
store i32 1, i32* %2
br label %25
25: ; preds = %24
%26 = load float, float* %6
%27 = fsub float 0x3FE6666660000000, %26
%28 = fcmp ogt float %27, 0x3FB99999A0000000
br i1 %28, label %29, label %30
29: ; preds = %25
br label %44
30: ; preds = %25
store i32 2, i32* %2
br label %31
31: ; preds = %30
%32 = load float, float* %7
%33 = fsub float 0x3FF7851EC0000000, %32
%34 = fcmp ogt float %33, 0x3FB99999A0000000
br i1 %34, label %35, label %36
35: ; preds = %31
br label %44
36: ; preds = %31
store i32 3, i32* %2
br label %37
37: ; preds = %36
%38 = load float, float* %8
%39 = fsub float 0x400A666660000000, %38
%40 = fcmp ogt float %39, 0x3FB99999A0000000
br i1 %40, label %41, label %42
41: ; preds = %37
br label %44
42: ; preds = %37
store i32 4, i32* %2
br label %43
43: ; preds = %42
store i32 0, i32* %1
br label %45
44: ; preds = %41, %35, %29, %23
store i32 -1, i32* %1
br label %45
45: ; preds = %44, %43
%46 = load i32, i32* %1
ret i32 %46
}

LLVM IR (-O2):
define i32 @main() {
ret i32 0
}