#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 */
struct relicparam {
  int dummy;
};

/* Variables and functions */
scalar_t__ isnan(double);
scalar_t__ nucl(struct relicparam *, double *);
int bbn_excluded(struct relicparam *paramrelic) {
  double H2_H, Yp, Li7_H, Be7_H, He3_H, Li6_H;
  double ratioH[26 + 1];
  if (nucl(paramrelic, ratioH) == 0) {
    H2_H = ratioH[3];
    Yp = ratioH[6];
    Li7_H = ratioH[8];
    Be7_H = ratioH[9];
    He3_H = ratioH[5];
    Li6_H = ratioH[7];
    if (isnan(Yp) || isnan(H2_H) || isnan(He3_H / H2_H) || isnan(Li7_H) ||
        isnan(Li6_H / Li7_H) || isnan(Be7_H))
      return -1;
    if ((Yp < 0.258) && ((H2_H > 1.2e-5) && (H2_H < 5.3e-5)) &&
        (He3_H / H2_H < 1.52) && (Li7_H > 0.85e-10) && (Li6_H / Li7_H < 0.66))
      return 0;
    else
      return 1;
  } else
    return -1;
}


x86 assembly (clang, -O0):
<bbn_excluded>:
push   %rbp
mov    %rsp,%rbp
sub    $0x120,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
lea    -0x120(%rbp),%rsi
call   1030 <nucl@plt>
cmp    $0x0,%rax
jne    12c9 <bbn_excluded+0x1a9>
movsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x18(%rbp)
movsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0x20(%rbp)
movsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0x28(%rbp)
movsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0x30(%rbp)
movsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0x38(%rbp)
movsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0x40(%rbp)
movsd  -0x20(%rbp),%xmm0
call   1040 <isnan@plt>
cmp    $0x0,%rax
jne    1219 <bbn_excluded+0xf9>
movsd  -0x18(%rbp),%xmm0
call   1040 <isnan@plt>
cmp    $0x0,%rax
jne    1219 <bbn_excluded+0xf9>
movsd  -0x38(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
call   1040 <isnan@plt>
cmp    $0x0,%rax
jne    1219 <bbn_excluded+0xf9>
movsd  -0x28(%rbp),%xmm0
call   1040 <isnan@plt>
cmp    $0x0,%rax
jne    1219 <bbn_excluded+0xf9>
movsd  -0x40(%rbp),%xmm0
divsd  -0x28(%rbp),%xmm0
call   1040 <isnan@plt>
cmp    $0x0,%rax
jne    1219 <bbn_excluded+0xf9>
movsd  -0x30(%rbp),%xmm0
call   1040 <isnan@plt>
cmp    $0x0,%rax
je     1225 <bbn_excluded+0x105>
movl   $0xffffffff,-0x4(%rbp)
jmp    12d0 <bbn_excluded+0x1b0>
movsd  0xdd3(%rip),%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    12bd <bbn_excluded+0x19d>
movsd  -0x18(%rbp),%xmm0
movsd  0xdc3(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12bd <bbn_excluded+0x19d>
movsd  0xdb9(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    12bd <bbn_excluded+0x19d>
movsd  -0x38(%rbp),%xmm1
divsd  -0x18(%rbp),%xmm1
movsd  0xda4(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12bd <bbn_excluded+0x19d>
movsd  -0x28(%rbp),%xmm0
movsd  0xd95(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12bd <bbn_excluded+0x19d>
movsd  -0x40(%rbp),%xmm1
divsd  -0x28(%rbp),%xmm1
movsd  0xd81(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12bd <bbn_excluded+0x19d>
movl   $0x0,-0x4(%rbp)
jmp    12d0 <bbn_excluded+0x1b0>
movl   $0x1,-0x4(%rbp)
jmp    12d0 <bbn_excluded+0x1b0>
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x120,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bbn_excluded>:
push   %rbx
sub    $0x110,%rsp
lea    0x30(%rsp),%rsi
call   1030 <nucl@plt>
mov    $0xffffffff,%ebx
test   %rax,%rax
jne    126c <bbn_excluded+0x14c>
movsd  0x48(%rsp),%xmm0
movsd  %xmm0,(%rsp)
movsd  0x58(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
movsd  0x60(%rsp),%xmm0
movsd  0x70(%rsp),%xmm1
movsd  %xmm1,0x10(%rsp)
movsd  0x78(%rsp),%xmm1
movsd  %xmm1,0x28(%rsp)
movsd  0x68(%rsp),%xmm1
movsd  %xmm1,0x8(%rsp)
movsd  %xmm0,0x20(%rsp)
call   1040 <isnan@plt>
test   %rax,%rax
jne    126c <bbn_excluded+0x14c>
movsd  (%rsp),%xmm0
call   1040 <isnan@plt>
test   %rax,%rax
jne    126c <bbn_excluded+0x14c>
movsd  0x18(%rsp),%xmm0
divsd  (%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
call   1040 <isnan@plt>
test   %rax,%rax
jne    126c <bbn_excluded+0x14c>
movsd  0x10(%rsp),%xmm0
call   1040 <isnan@plt>
test   %rax,%rax
jne    126c <bbn_excluded+0x14c>
movsd  0x8(%rsp),%xmm0
divsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x8(%rsp)
call   1040 <isnan@plt>
test   %rax,%rax
jne    126c <bbn_excluded+0x14c>
movsd  0x28(%rsp),%xmm0
call   1040 <isnan@plt>
test   %rax,%rax
jne    126c <bbn_excluded+0x14c>
movsd  0xdf1(%rip),%xmm0
ucomisd 0x20(%rsp),%xmm0
jbe    1267 <bbn_excluded+0x147>
movsd  (%rsp),%xmm0
ucomisd 0xde4(%rip),%xmm0
jbe    1267 <bbn_excluded+0x147>
movsd  0xde2(%rip),%xmm0
ucomisd (%rsp),%xmm0
jbe    1267 <bbn_excluded+0x147>
movsd  0xddb(%rip),%xmm0
ucomisd 0x18(%rsp),%xmm0
jbe    1267 <bbn_excluded+0x147>
movsd  0x10(%rsp),%xmm0
ucomisd 0xdcd(%rip),%xmm0
jbe    1267 <bbn_excluded+0x147>
xor    %ebx,%ebx
movsd  0xdc9(%rip),%xmm0
ucomisd 0x8(%rsp),%xmm0
ja     126c <bbn_excluded+0x14c>
mov    $0x1,%ebx
mov    %ebx,%eax
add    $0x110,%rsp
pop    %rbx
ret

LLVM IR (-O0):
%struct.relicparam = type { i32 }
define i32 @bbn_excluded(%struct.relicparam* %0) {
%2 = alloca i32
%3 = alloca %struct.relicparam*
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca [27 x double]
store %struct.relicparam* %0, %struct.relicparam** %3
%11 = load %struct.relicparam*, %struct.relicparam** %3
%12 = getelementptr inbounds [27 x double], [27 x double]* %10, i64 0, i64 0
%13 = call i64 @nucl(%struct.relicparam* %11, double* %12)
%14 = icmp eq i64 %13, 0
br i1 %14, label %15, label %80
15: ; preds = %1
%16 = getelementptr inbounds [27 x double], [27 x double]* %10, i64 0, i64 3
%17 = load double, double* %16
store double %17, double* %4
%18 = getelementptr inbounds [27 x double], [27 x double]* %10, i64 0, i64 6
%19 = load double, double* %18
store double %19, double* %5
%20 = getelementptr inbounds [27 x double], [27 x double]* %10, i64 0, i64 8
%21 = load double, double* %20
store double %21, double* %6
%22 = getelementptr inbounds [27 x double], [27 x double]* %10, i64 0, i64 9
%23 = load double, double* %22
store double %23, double* %7
%24 = getelementptr inbounds [27 x double], [27 x double]* %10, i64 0, i64 5
%25 = load double, double* %24
store double %25, double* %8
%26 = getelementptr inbounds [27 x double], [27 x double]* %10, i64 0, i64 7
%27 = load double, double* %26
store double %27, double* %9
%28 = load double, double* %5
%29 = call i64 @isnan(double %28)
%30 = icmp ne i64 %29, 0
br i1 %30, label %55, label %31
31: ; preds = %15
%32 = load double, double* %4
%33 = call i64 @isnan(double %32)
%34 = icmp ne i64 %33, 0
br i1 %34, label %55, label %35
35: ; preds = %31
%36 = load double, double* %8
%37 = load double, double* %4
%38 = fdiv double %36, %37
%39 = call i64 @isnan(double %38)
%40 = icmp ne i64 %39, 0
br i1 %40, label %55, label %41
41: ; preds = %35
%42 = load double, double* %6
%43 = call i64 @isnan(double %42)
%44 = icmp ne i64 %43, 0
br i1 %44, label %55, label %45
45: ; preds = %41
%46 = load double, double* %9
%47 = load double, double* %6
%48 = fdiv double %46, %47
%49 = call i64 @isnan(double %48)
%50 = icmp ne i64 %49, 0
br i1 %50, label %55, label %51
51: ; preds = %45
%52 = load double, double* %7
%53 = call i64 @isnan(double %52)
%54 = icmp ne i64 %53, 0
br i1 %54, label %55, label %56
55: ; preds = %51, %45, %41, %35, %31, %15
store i32 -1, i32* %2
br label %81
56: ; preds = %51
%57 = load double, double* %5
%58 = fcmp olt double %57, 2.580000e-01
br i1 %58, label %59, label %79
59: ; preds = %56
%60 = load double, double* %4
%61 = fcmp ogt double %60, 1.200000e-05
br i1 %61, label %62, label %79
62: ; preds = %59
%63 = load double, double* %4
%64 = fcmp olt double %63, 5.300000e-05
br i1 %64, label %65, label %79
65: ; preds = %62
%66 = load double, double* %8
%67 = load double, double* %4
%68 = fdiv double %66, %67
%69 = fcmp olt double %68, 1.520000e+00
br i1 %69, label %70, label %79
70: ; preds = %65
%71 = load double, double* %6
%72 = fcmp ogt double %71, 8.500000e-11
br i1 %72, label %73, label %79
73: ; preds = %70
%74 = load double, double* %9
%75 = load double, double* %6
%76 = fdiv double %74, %75
%77 = fcmp olt double %76, 6.600000e-01
br i1 %77, label %78, label %79
78: ; preds = %73
store i32 0, i32* %2
br label %81
79: ; preds = %73, %70, %65, %62, %59, %56
store i32 1, i32* %2
br label %81
80: ; preds = %1
store i32 -1, i32* %2
br label %81
81: ; preds = %80, %79, %78, %55
%82 = load i32, i32* %2
ret i32 %82
}

LLVM IR (-O2):
%struct.relicparam = type { i32 }
define i32 @bbn_excluded(%struct.relicparam* %0) {
%2 = alloca [27 x double]
%3 = bitcast [27 x double]* %2 to i8*
%4 = getelementptr inbounds [27 x double], [27 x double]* %2, i64 0, i64 0
%5 = call i64 @nucl(%struct.relicparam* %0, double* %4)
%6 = icmp eq i64 %5, 0
br i1 %6, label %7, label %52
7: ; preds = %1
%8 = getelementptr inbounds [27 x double], [27 x double]* %2, i64 0, i64 3
%9 = load double, double* %8
%10 = getelementptr inbounds [27 x double], [27 x double]* %2, i64 0, i64 6
%11 = load double, double* %10
%12 = getelementptr inbounds [27 x double], [27 x double]* %2, i64 0, i64 8
%13 = load double, double* %12
%14 = getelementptr inbounds [27 x double], [27 x double]* %2, i64 0, i64 9
%15 = load double, double* %14
%16 = getelementptr inbounds [27 x double], [27 x double]* %2, i64 0, i64 5
%17 = load double, double* %16
%18 = getelementptr inbounds [27 x double], [27 x double]* %2, i64 0, i64 7
%19 = load double, double* %18
%20 = call i64 @isnan(double %11)
%21 = icmp eq i64 %20, 0
br i1 %21, label %22, label %52
22: ; preds = %7
%23 = call i64 @isnan(double %9)
%24 = icmp eq i64 %23, 0
br i1 %24, label %25, label %52
25: ; preds = %22
%26 = fdiv double %17, %9
%27 = call i64 @isnan(double %26)
%28 = icmp eq i64 %27, 0
br i1 %28, label %29, label %52
29: ; preds = %25
%30 = call i64 @isnan(double %13)
%31 = icmp eq i64 %30, 0
br i1 %31, label %32, label %52
32: ; preds = %29
%33 = fdiv double %19, %13
%34 = call i64 @isnan(double %33)
%35 = icmp eq i64 %34, 0
br i1 %35, label %36, label %52
36: ; preds = %32
%37 = call i64 @isnan(double %15)
%38 = icmp eq i64 %37, 0
br i1 %38, label %39, label %52
39: ; preds = %36
%40 = fcmp olt double %11, 2.580000e-01
%41 = fcmp ogt double %9, 1.200000e-05
%42 = select i1 %40, i1 %41, i1 false
%43 = fcmp olt double %9, 5.300000e-05
%44 = select i1 %42, i1 %43, i1 false
br i1 %44, label %45, label %51
45: ; preds = %39
%46 = fcmp olt double %26, 1.520000e+00
%47 = fcmp ogt double %13, 8.500000e-11
%48 = select i1 %46, i1 %47, i1 false
%49 = fcmp olt double %33, 6.600000e-01
%50 = and i1 %48, %49
br i1 %50, label %52, label %51
51: ; preds = %45, %39
br label %52
52: ; preds = %1, %45, %7, %22, %25, %29, %32, %36, %51
%53 = phi i32 [ 1, %51 ], [ -1, %36 ], [ -1, %32 ], [ -1, %29 ], [ -1, %25 ], [ -1, %22 ], [ -1, %7 ], [ 0, %45 ], [ -1, %1 ]
ret i32 %53
}