#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 */
double __builtin_huge_val();
float __builtin_huge_valf();
long double __builtin_huge_vall();
double __builtin_inf();
float __builtin_inff();
long double __builtin_infl();
int /*<<< orphan*/ abort();
int main() {
  float fi = __builtin_inff();
  double di = __builtin_inf();
  long double li = __builtin_infl();
  float fh = __builtin_huge_valf();
  double dh = __builtin_huge_val();
  long double lh = __builtin_huge_vall();
  if (fi + fi != fi)
    abort();
  if (di + di != di)
    abort();
  if (li + li != li)
    abort();
  if (fi != fh)
    abort();
  if (di != dh)
    abort();
  if (li != lh)
    abort();
  if (fi <= 0)
    abort();
  if (di <= 0)
    abort();
  if (li <= 0)
    abort();
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x7f800000,-0x8(%rbp)
movabs $0x7ff0000000000000,%rax
mov    %rax,-0x10(%rbp)
flds   0xec6(%rip)
fld    %st(0)
fstpt  -0x20(%rbp)
movl   $0x7f800000,-0x24(%rbp)
mov    %rax,-0x30(%rbp)
fstpt  -0x40(%rbp)
movss  -0x8(%rbp),%xmm0
addss  -0x8(%rbp),%xmm0
ucomiss -0x8(%rbp),%xmm0
jne    116c <main+0x5c>
jp     116c <main+0x5c>
jmp    1173 <main+0x63>
mov    $0x0,%al
call   1030 <abort@plt>
movsd  -0x10(%rbp),%xmm0
addsd  -0x10(%rbp),%xmm0
ucomisd -0x10(%rbp),%xmm0
jne    1193 <main+0x83>
jp     1193 <main+0x83>
jmp    119a <main+0x8a>
mov    $0x0,%al
call   1030 <abort@plt>
fldt   -0x20(%rbp)
fld    %st(0)
fadd   %st(1),%st
fucomip %st(1),%st
fstp   %st(0)
jne    11b6 <main+0xa6>
jp     11b6 <main+0xa6>
jmp    11bd <main+0xad>
mov    $0x0,%al
call   1030 <abort@plt>
movss  -0x8(%rbp),%xmm0
ucomiss -0x24(%rbp),%xmm0
jne    11d7 <main+0xc7>
jp     11d7 <main+0xc7>
jmp    11de <main+0xce>
mov    $0x0,%al
call   1030 <abort@plt>
movsd  -0x10(%rbp),%xmm0
ucomisd -0x30(%rbp),%xmm0
jne    11f9 <main+0xe9>
jp     11f9 <main+0xe9>
jmp    1200 <main+0xf0>
mov    $0x0,%al
call   1030 <abort@plt>
fldt   -0x20(%rbp)
fldt   -0x40(%rbp)
fxch   %st(1)
fucomip %st(1),%st
fstp   %st(0)
jne    121d <main+0x10d>
jp     121d <main+0x10d>
jmp    1224 <main+0x114>
mov    $0x0,%al
call   1030 <abort@plt>
xorps  %xmm0,%xmm0
ucomiss -0x8(%rbp),%xmm0
jb     1238 <main+0x128>
mov    $0x0,%al
call   1030 <abort@plt>
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jb     124d <main+0x13d>
mov    $0x0,%al
call   1030 <abort@plt>
fldt   -0x20(%rbp)
fldz
fucomip %st(1),%st
fstp   %st(0)
jb     1268 <main+0x158>
jmp    1261 <main+0x151>
mov    $0x0,%al
call   1030 <abort@plt>
xor    %eax,%eax
add    $0x40,%rsp
pop    %rbp
ret

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

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca float
%3 = alloca double
%4 = alloca x86_fp80
%5 = alloca float
%6 = alloca double
%7 = alloca x86_fp80
store i32 0, i32* %1
store float 0x7FF0000000000000, float* %2
store double 0x7FF0000000000000, double* %3
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %4
store float 0x7FF0000000000000, float* %5
store double 0x7FF0000000000000, double* %6
store x86_fp80 0xK7FFF8000000000000000, x86_fp80* %7
%8 = load float, float* %2
%9 = load float, float* %2
%10 = fadd float %8, %9
%11 = load float, float* %2
%12 = fcmp une float %10, %11
br i1 %12, label %13, label %15
13: ; preds = %0
%14 = call i32 (...) @abort()
unreachable
15: ; preds = %0
%16 = load double, double* %3
%17 = load double, double* %3
%18 = fadd double %16, %17
%19 = load double, double* %3
%20 = fcmp une double %18, %19
br i1 %20, label %21, label %23
21: ; preds = %15
%22 = call i32 (...) @abort()
unreachable
23: ; preds = %15
%24 = load x86_fp80, x86_fp80* %4
%25 = load x86_fp80, x86_fp80* %4
%26 = fadd x86_fp80 %24, %25
%27 = load x86_fp80, x86_fp80* %4
%28 = fcmp une x86_fp80 %26, %27
br i1 %28, label %29, label %31
29: ; preds = %23
%30 = call i32 (...) @abort()
unreachable
31: ; preds = %23
%32 = load float, float* %2
%33 = load float, float* %5
%34 = fcmp une float %32, %33
br i1 %34, label %35, label %37
35: ; preds = %31
%36 = call i32 (...) @abort()
unreachable
37: ; preds = %31
%38 = load double, double* %3
%39 = load double, double* %6
%40 = fcmp une double %38, %39
br i1 %40, label %41, label %43
41: ; preds = %37
%42 = call i32 (...) @abort()
unreachable
43: ; preds = %37
%44 = load x86_fp80, x86_fp80* %4
%45 = load x86_fp80, x86_fp80* %7
%46 = fcmp une x86_fp80 %44, %45
br i1 %46, label %47, label %49
47: ; preds = %43
%48 = call i32 (...) @abort()
unreachable
49: ; preds = %43
%50 = load float, float* %2
%51 = fcmp ole float %50, 0.000000e+00
br i1 %51, label %52, label %54
52: ; preds = %49
%53 = call i32 (...) @abort()
unreachable
54: ; preds = %49
%55 = load double, double* %3
%56 = fcmp ole double %55, 0.000000e+00
br i1 %56, label %57, label %59
57: ; preds = %54
%58 = call i32 (...) @abort()
unreachable
59: ; preds = %54
%60 = load x86_fp80, x86_fp80* %4
%61 = fcmp ole x86_fp80 %60, 0xK00000000000000000000
br i1 %61, label %62, label %64
62: ; preds = %59
%63 = call i32 (...) @abort()
unreachable
64: ; preds = %59
ret i32 0
}

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