#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 */
bool floattest(double p1, float p2, double p3, float p4, double p5, float p6,
               double p7, float p8, double p9, float p10, double p11, float p12,
               double p13, float p14) {
  if (p1 != 1.0)
    return false;
  if (p2 != 2.0)
    return false;
  if (p3 != 3.0)
    return false;
  if (p4 != 4.0)
    return false;
  if (p5 != 5.0)
    return false;
  if (p6 != 6.0)
    return false;
  if (p7 != 7.0)
    return false;
  if (p8 != 8.0)
    return false;
  if (p9 != 9.0)
    return false;
  if (p10 != 10.0)
    return false;
  if (p11 != 11.0)
    return false;
  if (p12 != 12.0)
    return false;
  if (p13 != 13.0)
    return false;
  if (p14 != 14.0)
    return false;
  return true;
}


x86 assembly (clang, -O0):
<floattest>:
push   %rbp
mov    %rsp,%rbp
movss  0x38(%rbp),%xmm8
movsd  0x30(%rbp),%xmm8
movss  0x28(%rbp),%xmm8
movsd  0x20(%rbp),%xmm8
movss  0x18(%rbp),%xmm8
movsd  0x10(%rbp),%xmm8
movsd  %xmm0,-0x10(%rbp)
movss  %xmm1,-0x14(%rbp)
movsd  %xmm2,-0x20(%rbp)
movss  %xmm3,-0x24(%rbp)
movsd  %xmm4,-0x30(%rbp)
movss  %xmm5,-0x34(%rbp)
movsd  %xmm6,-0x40(%rbp)
movss  %xmm7,-0x44(%rbp)
movsd  -0x10(%rbp),%xmm0
movsd  0xea3(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1172 <floattest+0x72>
jp     1172 <floattest+0x72>
jmp    117e <floattest+0x7e>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe79(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    11a4 <floattest+0xa4>
jp     11a4 <floattest+0xa4>
jmp    11b0 <floattest+0xb0>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movsd  -0x20(%rbp),%xmm0
movsd  0xe53(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    11d2 <floattest+0xd2>
jp     11d2 <floattest+0xd2>
jmp    11de <floattest+0xde>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe29(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1204 <floattest+0x104>
jp     1204 <floattest+0x104>
jmp    1210 <floattest+0x110>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movsd  -0x30(%rbp),%xmm0
movsd  0xe03(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1232 <floattest+0x132>
jp     1232 <floattest+0x132>
jmp    123e <floattest+0x13e>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movss  -0x34(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdd9(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1264 <floattest+0x164>
jp     1264 <floattest+0x164>
jmp    1270 <floattest+0x170>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movsd  -0x40(%rbp),%xmm0
movsd  0xdb3(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1292 <floattest+0x192>
jp     1292 <floattest+0x192>
jmp    129e <floattest+0x19e>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd89(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12c4 <floattest+0x1c4>
jp     12c4 <floattest+0x1c4>
jmp    12d0 <floattest+0x1d0>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movsd  0x10(%rbp),%xmm0
movsd  0xd63(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12f2 <floattest+0x1f2>
jp     12f2 <floattest+0x1f2>
jmp    12fe <floattest+0x1fe>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movss  0x18(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd39(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1324 <floattest+0x224>
jp     1324 <floattest+0x224>
jmp    1330 <floattest+0x230>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movsd  0x20(%rbp),%xmm0
movsd  0xd13(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1352 <floattest+0x252>
jp     1352 <floattest+0x252>
jmp    135e <floattest+0x25e>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movss  0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xce9(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    1384 <floattest+0x284>
jp     1384 <floattest+0x284>
jmp    1390 <floattest+0x290>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movsd  0x30(%rbp),%xmm0
movsd  0xcc3(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    13b2 <floattest+0x2b2>
jp     13b2 <floattest+0x2b2>
jmp    13be <floattest+0x2be>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movss  0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc99(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    13e4 <floattest+0x2e4>
jp     13e4 <floattest+0x2e4>
jmp    13f0 <floattest+0x2f0>
movl   $0x0,-0x4(%rbp)
jmp    13f7 <floattest+0x2f7>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<floattest>:
ucomisd 0xef8(%rip),%xmm0
setnp  %al
sete   %cl
and    %al,%cl
ucomiss 0xf21(%rip),%xmm1
setnp  %al
sete   %dl
and    %al,%dl
and    %cl,%dl
ucomisd 0xedf(%rip),%xmm2
setnp  %al
sete   %cl
and    %al,%cl
ucomiss 0xf04(%rip),%xmm3
setnp  %sil
sete   %al
and    %sil,%al
and    %cl,%al
and    %dl,%al
ucomisd 0xec2(%rip),%xmm4
setnp  %cl
sete   %dl
and    %cl,%dl
ucomiss 0xee3(%rip),%xmm5
setnp  %sil
sete   %cl
and    %sil,%cl
and    %dl,%cl
ucomisd 0xea7(%rip),%xmm6
setnp  %sil
sete   %dl
and    %sil,%dl
and    %cl,%dl
and    %al,%dl
ucomiss 0xebe(%rip),%xmm7
movsd  0x8(%rsp),%xmm0
setnp  %al
sete   %cl
and    %al,%cl
and    %dl,%cl
ucomisd 0xe82(%rip),%xmm0
movss  0x10(%rsp),%xmm0
setnp  %al
sete   %dl
and    %al,%dl
and    %cl,%dl
ucomiss 0xe93(%rip),%xmm0
movss  0x20(%rsp),%xmm0
movsd  0x18(%rsp),%xmm1
setnp  %al
sete   %cl
and    %al,%cl
ucomisd 0xe57(%rip),%xmm1
setnp  %sil
sete   %al
and    %sil,%al
and    %cl,%al
and    %dl,%al
ucomiss 0xe66(%rip),%xmm0
movsd  0x28(%rsp),%xmm0
setnp  %cl
sete   %dil
and    %cl,%dil
ucomisd 0xe32(%rip),%xmm0
movss  0x30(%rsp),%xmm0
setnp  %sil
sete   %cl
and    %sil,%cl
ucomiss 0xe3b(%rip),%xmm0
setnp  %sil
sete   %dl
and    %sil,%dl
and    %dil,%cl
and    %al,%cl
and    %dl,%cl
movzbl %cl,%eax
ret

LLVM IR (-O0):
define i32 @floattest(double %0, float %1, double %2, float %3, double %4, float %5, double %6, float %7, double %8, float %9, double %10, float %11, double %12, float %13) {
%15 = alloca i32
%16 = alloca double
%17 = alloca float
%18 = alloca double
%19 = alloca float
%20 = alloca double
%21 = alloca float
%22 = alloca double
%23 = alloca float
%24 = alloca double
%25 = alloca float
%26 = alloca double
%27 = alloca float
%28 = alloca double
%29 = alloca float
store double %0, double* %16
store float %1, float* %17
store double %2, double* %18
store float %3, float* %19
store double %4, double* %20
store float %5, float* %21
store double %6, double* %22
store float %7, float* %23
store double %8, double* %24
store float %9, float* %25
store double %10, double* %26
store float %11, float* %27
store double %12, double* %28
store float %13, float* %29
%30 = load double, double* %16
%31 = fcmp une double %30, 1.000000e+00
br i1 %31, label %32, label %33
32: ; preds = %14
store i32 0, i32* %15
br label %93
33: ; preds = %14
%34 = load float, float* %17
%35 = fpext float %34 to double
%36 = fcmp une double %35, 2.000000e+00
br i1 %36, label %37, label %38
37: ; preds = %33
store i32 0, i32* %15
br label %93
38: ; preds = %33
%39 = load double, double* %18
%40 = fcmp une double %39, 3.000000e+00
br i1 %40, label %41, label %42
41: ; preds = %38
store i32 0, i32* %15
br label %93
42: ; preds = %38
%43 = load float, float* %19
%44 = fpext float %43 to double
%45 = fcmp une double %44, 4.000000e+00
br i1 %45, label %46, label %47
46: ; preds = %42
store i32 0, i32* %15
br label %93
47: ; preds = %42
%48 = load double, double* %20
%49 = fcmp une double %48, 5.000000e+00
br i1 %49, label %50, label %51
50: ; preds = %47
store i32 0, i32* %15
br label %93
51: ; preds = %47
%52 = load float, float* %21
%53 = fpext float %52 to double
%54 = fcmp une double %53, 6.000000e+00
br i1 %54, label %55, label %56
55: ; preds = %51
store i32 0, i32* %15
br label %93
56: ; preds = %51
%57 = load double, double* %22
%58 = fcmp une double %57, 7.000000e+00
br i1 %58, label %59, label %60
59: ; preds = %56
store i32 0, i32* %15
br label %93
60: ; preds = %56
%61 = load float, float* %23
%62 = fpext float %61 to double
%63 = fcmp une double %62, 8.000000e+00
br i1 %63, label %64, label %65
64: ; preds = %60
store i32 0, i32* %15
br label %93
65: ; preds = %60
%66 = load double, double* %24
%67 = fcmp une double %66, 9.000000e+00
br i1 %67, label %68, label %69
68: ; preds = %65
store i32 0, i32* %15
br label %93
69: ; preds = %65
%70 = load float, float* %25
%71 = fpext float %70 to double
%72 = fcmp une double %71, 1.000000e+01
br i1 %72, label %73, label %74
73: ; preds = %69
store i32 0, i32* %15
br label %93
74: ; preds = %69
%75 = load double, double* %26
%76 = fcmp une double %75, 1.100000e+01
br i1 %76, label %77, label %78
77: ; preds = %74
store i32 0, i32* %15
br label %93
78: ; preds = %74
%79 = load float, float* %27
%80 = fpext float %79 to double
%81 = fcmp une double %80, 1.200000e+01
br i1 %81, label %82, label %83
82: ; preds = %78
store i32 0, i32* %15
br label %93
83: ; preds = %78
%84 = load double, double* %28
%85 = fcmp une double %84, 1.300000e+01
br i1 %85, label %86, label %87
86: ; preds = %83
store i32 0, i32* %15
br label %93
87: ; preds = %83
%88 = load float, float* %29
%89 = fpext float %88 to double
%90 = fcmp une double %89, 1.400000e+01
br i1 %90, label %91, label %92
91: ; preds = %87
store i32 0, i32* %15
br label %93
92: ; preds = %87
store i32 1, i32* %15
br label %93
93: ; preds = %92, %91, %86, %82, %77, %73, %68, %64, %59, %55, %50, %46, %41, %37, %32
%94 = load i32, i32* %15
ret i32 %94
}

LLVM IR (-O2):
define i32 @floattest(double %0, float %1, double %2, float %3, double %4, float %5, double %6, float %7, double %8, float %9, double %10, float %11, double %12, float %13) {
%15 = fcmp une double %0, 1.000000e+00
%16 = fcmp une float %1, 2.000000e+00
%17 = or i1 %15, %16
%18 = fcmp une double %2, 3.000000e+00
%19 = or i1 %17, %18
%20 = fcmp une float %3, 4.000000e+00
%21 = or i1 %19, %20
%22 = fcmp une double %4, 5.000000e+00
%23 = or i1 %21, %22
%24 = fcmp une float %5, 6.000000e+00
%25 = or i1 %23, %24
%26 = fcmp une double %6, 7.000000e+00
%27 = or i1 %25, %26
%28 = fcmp une float %7, 8.000000e+00
%29 = or i1 %27, %28
%30 = fcmp une double %8, 9.000000e+00
%31 = or i1 %29, %30
%32 = fcmp une float %9, 1.000000e+01
%33 = or i1 %31, %32
%34 = fcmp une double %10, 1.100000e+01
%35 = or i1 %33, %34
%36 = fcmp une float %11, 1.200000e+01
%37 = or i1 %35, %36
%38 = fcmp une double %12, 1.300000e+01
%39 = or i1 %37, %38
%40 = fcmp oeq float %13, 1.400000e+01
%41 = xor i1 %39, true
%42 = and i1 %40, %41
%43 = zext i1 %42 to i32
ret i32 %43
}