int main() {
  volatile float fNan = __builtin_nanf("");
  if (__builtin_fpclassify(11, 12, 13, 14, 15, fNan) != 11) {
    return 1;
  }
  volatile float fInf = __builtin_inff();
  if (__builtin_fpclassify(11, 12, 13, 14, 15, fInf) != 12) {
    return 1;
  }
  volatile float fOne = 1.f;
  if (__builtin_fpclassify(11, 12, 13, 14, 15, fOne) != 13) {
    return 1;
  }
  volatile float fZero = 0.f;
  if (__builtin_fpclassify(11, 12, 13, 14, 15, fZero) != 15) {
    return 1;
  }
  volatile double dNan = __builtin_nan("");
  if (__builtin_fpclassify(11, 12, 13, 14, 15, dNan) != 11) {
    return 1;
  }
  volatile double dInf = __builtin_inf();
  if (__builtin_fpclassify(11, 12, 13, 14, 15, dInf) != 12) {
    return 1;
  }
  volatile double dOne = 1.;
  if (__builtin_fpclassify(11, 12, 13, 14, 15, dOne) != 13) {
    return 1;
  }
  volatile double dZero = 0.;
  if (__builtin_fpclassify(11, 12, 13, 14, 15, dZero) != 15) {
    return 1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x48,%rsp
movl   $0x0,-0x4(%rbp)
movss  0xee9(%rip),%xmm0
movss  %xmm0,-0x8(%rbp)
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    $0xf,%eax
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
mov    %eax,-0x3c(%rbp)
jne    1158 <main+0x58>
jp     1158 <main+0x58>
mov    -0x3c(%rbp),%eax
cmp    $0xb,%eax
je     11cc <main+0xcc>
movl   $0x1,-0x4(%rbp)
jmp    175e <main+0x65e>
movss  -0x40(%rbp),%xmm0
mov    $0xb,%eax
ucomiss %xmm0,%xmm0
mov    %eax,-0x3c(%rbp)
jp     1140 <main+0x40>
movss  -0x40(%rbp),%xmm0
movaps 0xe96(%rip),%xmm1
pand   %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
mov    $0xc,%eax
movss  0xe74(%rip),%xmm1
ucomiss %xmm1,%xmm0
mov    %eax,-0x3c(%rbp)
jne    11a7 <main+0xa7>
jp     11a7 <main+0xa7>
jmp    1140 <main+0x40>
movss  -0x44(%rbp),%xmm1
movss  0xe54(%rip),%xmm0
mov    $0xe,%eax
mov    $0xd,%ecx
ucomiss %xmm1,%xmm0
cmovbe %ecx,%eax
mov    %eax,-0x3c(%rbp)
jmp    1140 <main+0x40>
movss  0xe30(%rip),%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    $0xf,%eax
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
mov    %eax,-0x48(%rbp)
jne    1215 <main+0x115>
jp     1215 <main+0x115>
mov    -0x48(%rbp),%eax
cmp    $0xc,%eax
je     1289 <main+0x189>
movl   $0x1,-0x4(%rbp)
jmp    175e <main+0x65e>
movss  -0x4c(%rbp),%xmm0
mov    $0xb,%eax
ucomiss %xmm0,%xmm0
mov    %eax,-0x48(%rbp)
jp     11fd <main+0xfd>
movss  -0x4c(%rbp),%xmm0
movaps 0xdd9(%rip),%xmm1
pand   %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    $0xc,%eax
movss  0xdb7(%rip),%xmm1
ucomiss %xmm1,%xmm0
mov    %eax,-0x48(%rbp)
jne    1264 <main+0x164>
jp     1264 <main+0x164>
jmp    11fd <main+0xfd>
movss  -0x50(%rbp),%xmm1
movss  0xd97(%rip),%xmm0
mov    $0xe,%eax
mov    $0xd,%ecx
ucomiss %xmm1,%xmm0
cmovbe %ecx,%eax
mov    %eax,-0x48(%rbp)
jmp    11fd <main+0xfd>
movss  0xd7b(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
mov    $0xf,%eax
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
mov    %eax,-0x54(%rbp)
jne    12d2 <main+0x1d2>
jp     12d2 <main+0x1d2>
mov    -0x54(%rbp),%eax
cmp    $0xd,%eax
je     1346 <main+0x246>
movl   $0x1,-0x4(%rbp)
jmp    175e <main+0x65e>
movss  -0x58(%rbp),%xmm0
mov    $0xb,%eax
ucomiss %xmm0,%xmm0
mov    %eax,-0x54(%rbp)
jp     12ba <main+0x1ba>
movss  -0x58(%rbp),%xmm0
movaps 0xd1c(%rip),%xmm1
pand   %xmm1,%xmm0
movss  %xmm0,-0x5c(%rbp)
mov    $0xc,%eax
movss  0xcfa(%rip),%xmm1
ucomiss %xmm1,%xmm0
mov    %eax,-0x54(%rbp)
jne    1321 <main+0x221>
jp     1321 <main+0x221>
jmp    12ba <main+0x1ba>
movss  -0x5c(%rbp),%xmm1
movss  0xcda(%rip),%xmm0
mov    $0xe,%eax
mov    $0xd,%ecx
ucomiss %xmm1,%xmm0
cmovbe %ecx,%eax
mov    %eax,-0x54(%rbp)
jmp    12ba <main+0x1ba>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
mov    $0xf,%eax
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
mov    %eax,-0x60(%rbp)
jne    138a <main+0x28a>
jp     138a <main+0x28a>
mov    -0x60(%rbp),%eax
cmp    $0xf,%eax
je     13fe <main+0x2fe>
movl   $0x1,-0x4(%rbp)
jmp    175e <main+0x65e>
movss  -0x64(%rbp),%xmm0
mov    $0xb,%eax
ucomiss %xmm0,%xmm0
mov    %eax,-0x60(%rbp)
jp     1372 <main+0x272>
movss  -0x64(%rbp),%xmm0
movaps 0xc64(%rip),%xmm1
pand   %xmm1,%xmm0
movss  %xmm0,-0x68(%rbp)
mov    $0xc,%eax
movss  0xc42(%rip),%xmm1
ucomiss %xmm1,%xmm0
mov    %eax,-0x60(%rbp)
jne    13d9 <main+0x2d9>
jp     13d9 <main+0x2d9>
jmp    1372 <main+0x272>
movss  -0x68(%rbp),%xmm1
movss  0xc22(%rip),%xmm0
mov    $0xe,%eax
mov    $0xd,%ecx
ucomiss %xmm1,%xmm0
cmovbe %ecx,%eax
mov    %eax,-0x60(%rbp)
jmp    1372 <main+0x272>
movsd  0xc2a(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    $0xf,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %eax,-0x6c(%rbp)
jne    1448 <main+0x348>
jp     1448 <main+0x348>
mov    -0x6c(%rbp),%eax
cmp    $0xb,%eax
je     14bf <main+0x3bf>
movl   $0x1,-0x4(%rbp)
jmp    175e <main+0x65e>
movsd  -0x78(%rbp),%xmm0
mov    $0xb,%eax
ucomisd %xmm0,%xmm0
mov    %eax,-0x6c(%rbp)
jp     1430 <main+0x330>
movsd  -0x78(%rbp),%xmm0
movaps 0xbb5(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    $0xc,%eax
movsd  0xbb7(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %eax,-0x6c(%rbp)
jne    1499 <main+0x399>
jp     1499 <main+0x399>
jmp    1430 <main+0x330>
movsd  -0x80(%rbp),%xmm1
movsd  0xb9a(%rip),%xmm0
mov    $0xe,%eax
mov    $0xd,%ecx
ucomisd %xmm1,%xmm0
cmovbe %ecx,%eax
mov    %eax,-0x6c(%rbp)
jmp    1430 <main+0x330>
movsd  0xb71(%rip),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    $0xf,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %eax,-0x84(%rbp)
jne    1512 <main+0x412>
jp     1512 <main+0x412>
mov    -0x84(%rbp),%eax
cmp    $0xc,%eax
je     159e <main+0x49e>
movl   $0x1,-0x4(%rbp)
jmp    175e <main+0x65e>
movsd  -0x90(%rbp),%xmm0
ff
mov    $0xb,%eax
ucomisd %xmm0,%xmm0
mov    %eax,-0x84(%rbp)
jp     14f7 <main+0x3f7>
movsd  -0x90(%rbp),%xmm0
ff
movaps 0xae2(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    $0xc,%eax
movsd  0xae1(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %eax,-0x84(%rbp)
jne    1572 <main+0x472>
jp     1572 <main+0x472>
jmp    14f7 <main+0x3f7>
movsd  -0x98(%rbp),%xmm1
ff
movsd  0xabe(%rip),%xmm0
mov    $0xe,%eax
mov    $0xd,%ecx
ucomisd %xmm1,%xmm0
cmovbe %ecx,%eax
mov    %eax,-0x84(%rbp)
jmp    14f7 <main+0x3f7>
movsd  0xaa2(%rip),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    $0xf,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %eax,-0x9c(%rbp)
jne    15f1 <main+0x4f1>
jp     15f1 <main+0x4f1>
mov    -0x9c(%rbp),%eax
cmp    $0xd,%eax
je     167d <main+0x57d>
movl   $0x1,-0x4(%rbp)
jmp    175e <main+0x65e>
movsd  -0xa8(%rbp),%xmm0
ff
mov    $0xb,%eax
ucomisd %xmm0,%xmm0
mov    %eax,-0x9c(%rbp)
jp     15d6 <main+0x4d6>
movsd  -0xa8(%rbp),%xmm0
ff
movaps 0xa03(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    $0xc,%eax
movsd  0xa02(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %eax,-0x9c(%rbp)
jne    1651 <main+0x551>
jp     1651 <main+0x551>
jmp    15d6 <main+0x4d6>
movsd  -0xb0(%rbp),%xmm1
ff
movsd  0x9df(%rip),%xmm0
mov    $0xe,%eax
mov    $0xd,%ecx
ucomisd %xmm1,%xmm0
cmovbe %ecx,%eax
mov    %eax,-0x9c(%rbp)
jmp    15d6 <main+0x4d6>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
mov    $0xf,%eax
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
mov    %eax,-0xb4(%rbp)
jne    16cb <main+0x5cb>
jp     16cb <main+0x5cb>
mov    -0xb4(%rbp),%eax
cmp    $0xf,%eax
je     1757 <main+0x657>
movl   $0x1,-0x4(%rbp)
jmp    175e <main+0x65e>
movsd  -0xc0(%rbp),%xmm0
ff
mov    $0xb,%eax
ucomisd %xmm0,%xmm0
mov    %eax,-0xb4(%rbp)
jp     16b0 <main+0x5b0>
movsd  -0xc0(%rbp),%xmm0
ff
movaps 0x929(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    $0xc,%eax
movsd  0x928(%rip),%xmm1
ucomisd %xmm1,%xmm0
mov    %eax,-0xb4(%rbp)
jne    172b <main+0x62b>
jp     172b <main+0x62b>
jmp    16b0 <main+0x5b0>
movsd  -0xc8(%rbp),%xmm1
ff
movsd  0x905(%rip),%xmm0
mov    $0xe,%eax
mov    $0xd,%ecx
ucomisd %xmm1,%xmm0
cmovbe %ecx,%eax
mov    %eax,-0xb4(%rbp)
jmp    16b0 <main+0x5b0>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x48,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
movl   $0x7fc00000,-0x24(%rsp)
7f
movss  -0x24(%rsp),%xmm0
mov    $0x1,%eax
ucomiss %xmm0,%xmm0
jp     1119 <main+0x19>
ret
movl   $0x7f800000,-0x28(%rsp)
7f
movss  -0x28(%rsp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm0,%xmm1
mov    $0x1,%eax
je     1118 <main+0x18>
andps  0xec5(%rip),%xmm0
ucomiss 0xede(%rip),%xmm0
jb     1118 <main+0x18>
movl   $0x3f800000,-0x2c(%rsp)
3f
movss  -0x2c(%rsp),%xmm0
mov    $0x1,%eax
xorps  %xmm1,%xmm1
ucomiss %xmm0,%xmm1
je     1118 <main+0x18>
andps  0xe9a(%rip),%xmm0
ucomiss 0xeb3(%rip),%xmm0
jae    1118 <main+0x18>
movss  0xead(%rip),%xmm1
ucomiss %xmm0,%xmm1
ja     1118 <main+0x18>
movl   $0x0,-0x30(%rsp)
movss  -0x30(%rsp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    126a <main+0x16a>
jp     126a <main+0x16a>
movabs $0x7ff8000000000000,%rax
mov    %rax,-0x8(%rsp)
movsd  -0x8(%rsp),%xmm0
mov    $0x1,%eax
ucomisd %xmm0,%xmm0
jnp    1118 <main+0x18>
movabs $0x7ff0000000000000,%rax
mov    %rax,-0x10(%rsp)
movsd  -0x10(%rsp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
mov    $0x1,%eax
je     1118 <main+0x18>
andpd  0xe21(%rip),%xmm0
ucomisd 0xe31(%rip),%xmm0
jb     1118 <main+0x18>
movabs $0x3ff0000000000000,%rax
mov    %rax,-0x18(%rsp)
movsd  -0x18(%rsp),%xmm0
mov    $0x1,%eax
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
je     1118 <main+0x18>
andpd  0xde3(%rip),%xmm0
ucomisd 0xdf3(%rip),%xmm0
jae    1118 <main+0x18>
movsd  0xded(%rip),%xmm1
ucomisd %xmm0,%xmm1
ja     1118 <main+0x18>
movq   $0x0,-0x20(%rsp)
xorpd  %xmm0,%xmm0
cmpneqsd -0x20(%rsp),%xmm0
movq   %xmm0,%rax
and    $0x1,%eax
ret
mov    $0x1,%eax
ret

LLVM IR (-O0):
define i32 @main() {
%1 = alloca i32
%2 = alloca float
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
store i32 0, i32* %1
store volatile float 0x7FF8000000000000, float* %2
%10 = load volatile float, float* %2
%11 = fcmp oeq float %10, 0.000000e+00
br i1 %11, label %12, label %16
12: ; preds = %21, %18, %16, %0
%13 = phi i32 [ 15, %0 ], [ 11, %16 ], [ 12, %18 ], [ %23, %21 ]
%14 = icmp ne i32 %13, 11
br i1 %14, label %15, label %24
15: ; preds = %12
store i32 1, i32* %1
br label %130
16: ; preds = %0
%17 = fcmp uno float %10, %10
br i1 %17, label %12, label %18
18: ; preds = %16
%19 = call float @llvm.fabs.f32(float %10)
%20 = fcmp oeq float %19, 0x7FF0000000000000
br i1 %20, label %12, label %21
21: ; preds = %18
%22 = fcmp uge float %19, 0x3810000000000000
%23 = select i1 %22, i32 13, i32 14
br label %12
24: ; preds = %12
store volatile float 0x7FF0000000000000, float* %3
%25 = load volatile float, float* %3
%26 = fcmp oeq float %25, 0.000000e+00
br i1 %26, label %27, label %31
27: ; preds = %36, %33, %31, %24
%28 = phi i32 [ 15, %24 ], [ 11, %31 ], [ 12, %33 ], [ %38, %36 ]
%29 = icmp ne i32 %28, 12
br i1 %29, label %30, label %39
30: ; preds = %27
store i32 1, i32* %1
br label %130
31: ; preds = %24
%32 = fcmp uno float %25, %25
br i1 %32, label %27, label %33
33: ; preds = %31
%34 = call float @llvm.fabs.f32(float %25)
%35 = fcmp oeq float %34, 0x7FF0000000000000
br i1 %35, label %27, label %36
36: ; preds = %33
%37 = fcmp uge float %34, 0x3810000000000000
%38 = select i1 %37, i32 13, i32 14
br label %27
39: ; preds = %27
store volatile float 1.000000e+00, float* %4
%40 = load volatile float, float* %4
%41 = fcmp oeq float %40, 0.000000e+00
br i1 %41, label %42, label %46
42: ; preds = %51, %48, %46, %39
%43 = phi i32 [ 15, %39 ], [ 11, %46 ], [ 12, %48 ], [ %53, %51 ]
%44 = icmp ne i32 %43, 13
br i1 %44, label %45, label %54
45: ; preds = %42
store i32 1, i32* %1
br label %130
46: ; preds = %39
%47 = fcmp uno float %40, %40
br i1 %47, label %42, label %48
48: ; preds = %46
%49 = call float @llvm.fabs.f32(float %40)
%50 = fcmp oeq float %49, 0x7FF0000000000000
br i1 %50, label %42, label %51
51: ; preds = %48
%52 = fcmp uge float %49, 0x3810000000000000
%53 = select i1 %52, i32 13, i32 14
br label %42
54: ; preds = %42
store volatile float 0.000000e+00, float* %5
%55 = load volatile float, float* %5
%56 = fcmp oeq float %55, 0.000000e+00
br i1 %56, label %57, label %61
57: ; preds = %66, %63, %61, %54
%58 = phi i32 [ 15, %54 ], [ 11, %61 ], [ 12, %63 ], [ %68, %66 ]
%59 = icmp ne i32 %58, 15
br i1 %59, label %60, label %69
60: ; preds = %57
store i32 1, i32* %1
br label %130
61: ; preds = %54
%62 = fcmp uno float %55, %55
br i1 %62, label %57, label %63
63: ; preds = %61
%64 = call float @llvm.fabs.f32(float %55)
%65 = fcmp oeq float %64, 0x7FF0000000000000
br i1 %65, label %57, label %66
66: ; preds = %63
%67 = fcmp uge float %64, 0x3810000000000000
%68 = select i1 %67, i32 13, i32 14
br label %57
69: ; preds = %57
store volatile double 0x7FF8000000000000, double* %6
%70 = load volatile double, double* %6
%71 = fcmp oeq double %70, 0.000000e+00
br i1 %71, label %72, label %76
72: ; preds = %81, %78, %76, %69
%73 = phi i32 [ 15, %69 ], [ 11, %76 ], [ 12, %78 ], [ %83, %81 ]
%74 = icmp ne i32 %73, 11
br i1 %74, label %75, label %84
75: ; preds = %72
store i32 1, i32* %1
br label %130
76: ; preds = %69
%77 = fcmp uno double %70, %70
br i1 %77, label %72, label %78
78: ; preds = %76
%79 = call double @llvm.fabs.f64(double %70)
%80 = fcmp oeq double %79, 0x7FF0000000000000
br i1 %80, label %72, label %81
81: ; preds = %78
%82 = fcmp uge double %79, 0x10000000000000
%83 = select i1 %82, i32 13, i32 14
br label %72
84: ; preds = %72
store volatile double 0x7FF0000000000000, double* %7
%85 = load volatile double, double* %7
%86 = fcmp oeq double %85, 0.000000e+00
br i1 %86, label %87, label %91
87: ; preds = %96, %93, %91, %84
%88 = phi i32 [ 15, %84 ], [ 11, %91 ], [ 12, %93 ], [ %98, %96 ]
%89 = icmp ne i32 %88, 12
br i1 %89, label %90, label %99
90: ; preds = %87
store i32 1, i32* %1
br label %130
91: ; preds = %84
%92 = fcmp uno double %85, %85
br i1 %92, label %87, label %93
93: ; preds = %91
%94 = call double @llvm.fabs.f64(double %85)
%95 = fcmp oeq double %94, 0x7FF0000000000000
br i1 %95, label %87, label %96
96: ; preds = %93
%97 = fcmp uge double %94, 0x10000000000000
%98 = select i1 %97, i32 13, i32 14
br label %87
99: ; preds = %87
store volatile double 1.000000e+00, double* %8
%100 = load volatile double, double* %8
%101 = fcmp oeq double %100, 0.000000e+00
br i1 %101, label %102, label %106
102: ; preds = %111, %108, %106, %99
%103 = phi i32 [ 15, %99 ], [ 11, %106 ], [ 12, %108 ], [ %113, %111 ]
%104 = icmp ne i32 %103, 13
br i1 %104, label %105, label %114
105: ; preds = %102
store i32 1, i32* %1
br label %130
106: ; preds = %99
%107 = fcmp uno double %100, %100
br i1 %107, label %102, label %108
108: ; preds = %106
%109 = call double @llvm.fabs.f64(double %100)
%110 = fcmp oeq double %109, 0x7FF0000000000000
br i1 %110, label %102, label %111
111: ; preds = %108
%112 = fcmp uge double %109, 0x10000000000000
%113 = select i1 %112, i32 13, i32 14
br label %102
114: ; preds = %102
store volatile double 0.000000e+00, double* %9
%115 = load volatile double, double* %9
%116 = fcmp oeq double %115, 0.000000e+00
br i1 %116, label %117, label %121
117: ; preds = %126, %123, %121, %114
%118 = phi i32 [ 15, %114 ], [ 11, %121 ], [ 12, %123 ], [ %128, %126 ]
%119 = icmp ne i32 %118, 15
br i1 %119, label %120, label %129
120: ; preds = %117
store i32 1, i32* %1
br label %130
121: ; preds = %114
%122 = fcmp uno double %115, %115
br i1 %122, label %117, label %123
123: ; preds = %121
%124 = call double @llvm.fabs.f64(double %115)
%125 = fcmp oeq double %124, 0x7FF0000000000000
br i1 %125, label %117, label %126
126: ; preds = %123
%127 = fcmp uge double %124, 0x10000000000000
%128 = select i1 %127, i32 13, i32 14
br label %117
129: ; preds = %117
store i32 0, i32* %1
br label %130
130: ; preds = %129, %120, %105, %90, %75, %60, %45, %30, %15
%131 = load i32, i32* %1
ret i32 %131
}

LLVM IR (-O2):
define i32 @main() {
%1 = alloca float
%2 = alloca float
%3 = alloca float
%4 = alloca float
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = bitcast float* %1 to i8*
store volatile float 0x7FF8000000000000, float* %1
%10 = load volatile float, float* %1
%11 = fcmp uno float %10, 0.000000e+00
br i1 %11, label %12, label %69
12: ; preds = %0
%13 = bitcast float* %2 to i8*
store volatile float 0x7FF0000000000000, float* %2
%14 = load volatile float, float* %2
%15 = fcmp one float %14, 0.000000e+00
%16 = tail call float @llvm.fabs.f32(float %14)
%17 = fcmp oeq float %16, 0x7FF0000000000000
%18 = select i1 %15, i1 %17, i1 false
br i1 %18, label %19, label %67
19: ; preds = %12
%20 = bitcast float* %3 to i8*
store volatile float 1.000000e+00, float* %3
%21 = load volatile float, float* %3
%22 = fcmp ueq float %21, 0.000000e+00
br i1 %22, label %65, label %23
23: ; preds = %19
%24 = tail call float @llvm.fabs.f32(float %21)
%25 = fcmp une float %24, 0x7FF0000000000000
%26 = fcmp uge float %24, 0x3810000000000000
%27 = and i1 %25, %26
br i1 %27, label %28, label %65
28: ; preds = %23
%29 = bitcast float* %4 to i8*
store volatile float 0.000000e+00, float* %4
%30 = load volatile float, float* %4
%31 = fcmp oeq float %30, 0.000000e+00
br i1 %31, label %32, label %63
32: ; preds = %28
%33 = bitcast double* %5 to i8*
store volatile double 0x7FF8000000000000, double* %5
%34 = load volatile double, double* %5
%35 = fcmp uno double %34, 0.000000e+00
br i1 %35, label %36, label %61
36: ; preds = %32
%37 = bitcast double* %6 to i8*
store volatile double 0x7FF0000000000000, double* %6
%38 = load volatile double, double* %6
%39 = fcmp one double %38, 0.000000e+00
%40 = tail call double @llvm.fabs.f64(double %38)
%41 = fcmp oeq double %40, 0x7FF0000000000000
%42 = select i1 %39, i1 %41, i1 false
br i1 %42, label %43, label %59
43: ; preds = %36
%44 = bitcast double* %7 to i8*
store volatile double 1.000000e+00, double* %7
%45 = load volatile double, double* %7
%46 = fcmp ueq double %45, 0.000000e+00
br i1 %46, label %57, label %47
47: ; preds = %43
%48 = tail call double @llvm.fabs.f64(double %45)
%49 = fcmp une double %48, 0x7FF0000000000000
%50 = fcmp uge double %48, 0x10000000000000
%51 = and i1 %49, %50
br i1 %51, label %52, label %57
52: ; preds = %47
%53 = bitcast double* %8 to i8*
store volatile double 0.000000e+00, double* %8
%54 = load volatile double, double* %8
%55 = fcmp une double %54, 0.000000e+00
%56 = zext i1 %55 to i32
br label %57
57: ; preds = %47, %43, %52
%58 = phi i32 [ %56, %52 ], [ 1, %43 ], [ 1, %47 ]
br label %59
59: ; preds = %36, %57
%60 = phi i32 [ %58, %57 ], [ 1, %36 ]
br label %61
61: ; preds = %32, %59
%62 = phi i32 [ %60, %59 ], [ 1, %32 ]
br label %63
63: ; preds = %28, %61
%64 = phi i32 [ %62, %61 ], [ 1, %28 ]
br label %65
65: ; preds = %23, %19, %63
%66 = phi i32 [ %64, %63 ], [ 1, %19 ], [ 1, %23 ]
br label %67
67: ; preds = %12, %65
%68 = phi i32 [ %66, %65 ], [ 1, %12 ]
br label %69
69: ; preds = %0, %67
%70 = phi i32 [ %68, %67 ], [ 1, %0 ]
ret i32 %70
}