#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 FP_INFINITE;
double bd0(double, double);
double log(double);
double log1p(double);
double stirlerr(int);
double dbinom_raw(int x, int n, double p, double q) {
  double lf, lc;
  if (p == 0) {
    if (x == 0)
      return 0.0;
    else
      return -FP_INFINITE;
  }
  if (q == 0) {
    if (x == 0)
      return 0.0;
    else
      return -FP_INFINITE;
  }
  if (x == 0) {
    if (n == 0)
      return 0.0;
    lc = (p < 0.1) ? -bd0((double)n, (double)n * q) - (double)n * p
                   : (double)n * log(q);
    return lc;
  }
  if (x == n) {
    lc = (q < 0.1) ? -bd0((double)n, (double)n * p) - (double)n * q
                   : (double)n * log(p);
    return lc;
  }
  if (x < 0 || x > n)
    return -FP_INFINITE;
  lc = stirlerr(n) - stirlerr(x) - stirlerr(n - x) -
       bd0((double)x, (double)n * p) - bd0((double)(n - x), (double)n * q);
  lf = log(6.283185307179586476925286766559) + log((double)x) +
       log1p(-(double)x / (double)n);
  lc -= 0.5 * lf;
  return (lc);
}


x86 assembly (clang, -O0):
<dbinom_raw>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %edi,-0xc(%rbp)
mov    %esi,-0x10(%rbp)
movsd  %xmm0,-0x18(%rbp)
movsd  %xmm1,-0x20(%rbp)
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11b6 <dbinom_raw+0x76>
jp     11b6 <dbinom_raw+0x76>
cmpl   $0x0,-0xc(%rbp)
jne    118a <dbinom_raw+0x4a>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1500 <dbinom_raw+0x3c0>
mov    0x2e57(%rip),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1500 <dbinom_raw+0x3c0>
movsd  -0x20(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1211 <dbinom_raw+0xd1>
jp     1211 <dbinom_raw+0xd1>
cmpl   $0x0,-0xc(%rbp)
jne    11e5 <dbinom_raw+0xa5>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1500 <dbinom_raw+0x3c0>
mov    0x2dfc(%rip),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1500 <dbinom_raw+0x3c0>
cmpl   $0x0,-0xc(%rbp)
jne    12e1 <dbinom_raw+0x1a1>
cmpl   $0x0,-0x10(%rbp)
jne    1232 <dbinom_raw+0xf2>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1500 <dbinom_raw+0x3c0>
movsd  0xdd6(%rip),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    12a3 <dbinom_raw+0x163>
cvtsi2sdl -0x10(%rbp),%xmm0
cvtsi2sdl -0x10(%rbp),%xmm1
mulsd  -0x20(%rbp),%xmm1
call   1030 <bd0@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
cvtsi2sdl -0x10(%rbp),%xmm0
movsd  -0x18(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    12c8 <dbinom_raw+0x188>
cvtsi2sdl -0x10(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x20(%rbp),%xmm0
call   1050 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x40(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1500 <dbinom_raw+0x3c0>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jne    139c <dbinom_raw+0x25c>
movsd  0xd1b(%rip),%xmm0
ucomisd -0x20(%rbp),%xmm0
jbe    135e <dbinom_raw+0x21e>
cvtsi2sdl -0x10(%rbp),%xmm0
cvtsi2sdl -0x10(%rbp),%xmm1
mulsd  -0x18(%rbp),%xmm1
call   1030 <bd0@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
cvtsi2sdl -0x10(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1383 <dbinom_raw+0x243>
cvtsi2sdl -0x10(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x18(%rbp),%xmm0
call   1050 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x50(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1500 <dbinom_raw+0x3c0>
cmpl   $0x0,-0xc(%rbp)
jl     13b2 <dbinom_raw+0x272>
mov    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jle    13de <dbinom_raw+0x29e>
mov    0x2c2f(%rip),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1500 <dbinom_raw+0x3c0>
mov    -0x10(%rbp),%edi
call   1040 <stirlerr@plt>
movsd  %xmm0,-0x80(%rbp)
mov    -0xc(%rbp),%edi
call   1040 <stirlerr@plt>
movaps %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%edi
sub    -0xc(%rbp),%edi
call   1040 <stirlerr@plt>
movaps %xmm0,%xmm1
movsd  -0x78(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
cvtsi2sdl -0xc(%rbp),%xmm0
cvtsi2sdl -0x10(%rbp),%xmm1
mulsd  -0x18(%rbp),%xmm1
call   1030 <bd0@plt>
movaps %xmm0,%xmm1
movsd  -0x70(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%eax
sub    -0xc(%rbp),%eax
cvtsi2sd %eax,%xmm0
cvtsi2sdl -0x10(%rbp),%xmm1
mulsd  -0x20(%rbp),%xmm1
call   1030 <bd0@plt>
movaps %xmm0,%xmm1
movsd  -0x68(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xb91(%rip),%xmm0
call   1050 <log@plt>
movsd  %xmm0,-0x60(%rbp)
cvtsi2sdl -0xc(%rbp),%xmm0
call   1050 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x60(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
cvtsi2sdl -0xc(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
cvtsi2sdl -0x10(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1060 <log1p@plt>
movaps %xmm0,%xmm1
movsd  -0x58(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
movsd  0xb17(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dbinom_raw>:
push   %rbp
push   %r14
push   %rbx
sub    $0x40,%rsp
movapd %xmm0,%xmm2
mov    %edi,%ebp
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm2
jne    1160 <dbinom_raw+0x20>
jp     1160 <dbinom_raw+0x20>
test   %ebp,%ebp
jne    1170 <dbinom_raw+0x30>
jmp    1183 <dbinom_raw+0x43>
ucomisd %xmm0,%xmm1
jne    118c <dbinom_raw+0x4c>
jp     118c <dbinom_raw+0x4c>
test   %ebp,%ebp
je     1231 <dbinom_raw+0xf1>
mov    0x2e71(%rip),%rax
movsd  (%rax),%xmm0
xorpd  0xe9d(%rip),%xmm0
add    $0x40,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret
mov    %esi,%ebx
test   %ebp,%ebp
je     11e0 <dbinom_raw+0xa0>
cmp    %ebp,%ebx
jne    123a <dbinom_raw+0xfa>
movsd  0xe6e(%rip),%xmm0
ucomisd %xmm1,%xmm0
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
movapd %xmm0,(%rsp)
jbe    133d <dbinom_raw+0x1fd>
mulsd  %xmm0,%xmm2
movsd  %xmm1,0x18(%rsp)
movapd %xmm2,%xmm1
call   1030 <bd0@plt>
movapd (%rsp),%xmm1
xorpd  0xe48(%rip),%xmm1
mulsd  0x18(%rsp),%xmm1
jmp    1224 <dbinom_raw+0xe4>
test   %ebx,%ebx
je     1231 <dbinom_raw+0xf1>
movsd  0xe24(%rip),%xmm0
ucomisd %xmm2,%xmm0
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
movapd %xmm0,(%rsp)
jbe    1343 <dbinom_raw+0x203>
mulsd  %xmm0,%xmm1
movsd  %xmm2,0x20(%rsp)
call   1030 <bd0@plt>
movapd (%rsp),%xmm1
xorpd  0xe02(%rip),%xmm1
mulsd  0x20(%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
jmp    1183 <dbinom_raw+0x43>
xorpd  %xmm0,%xmm0
jmp    1183 <dbinom_raw+0x43>
test   %ebp,%ebp
js     1170 <dbinom_raw+0x30>
mov    %ebx,%r14d
sub    %ebp,%r14d
jl     1170 <dbinom_raw+0x30>
mov    %ebx,%edi
movsd  %xmm1,0x18(%rsp)
movsd  %xmm2,0x20(%rsp)
call   1040 <stirlerr@plt>
movsd  %xmm0,(%rsp)
mov    %ebp,%edi
call   1040 <stirlerr@plt>
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
mov    %r14d,%edi
call   1040 <stirlerr@plt>
xorps  %xmm2,%xmm2
cvtsi2sd %ebp,%xmm2
movapd %xmm2,0x30(%rsp)
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0x20(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movapd %xmm2,%xmm0
call   1030 <bd0@plt>
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %r14d,%xmm0
movsd  0x18(%rsp),%xmm1
mulsd  0x28(%rsp),%xmm1
call   1030 <bd0@plt>
movsd  (%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
movapd 0x30(%rsp),%xmm0
call   1050 <log@plt>
addsd  0xcfa(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
movapd 0x30(%rsp),%xmm0
xorpd  0xd06(%rip),%xmm0
divsd  0x28(%rsp),%xmm0
call   1060 <log1p@plt>
addsd  0x18(%rsp),%xmm0
mulsd  0xcd5(%rip),%xmm0
addsd  (%rsp),%xmm0
jmp    1183 <dbinom_raw+0x43>
movapd %xmm2,%xmm0
jmp    1347 <dbinom_raw+0x207>
movapd %xmm1,%xmm0
call   1050 <log@plt>
mulsd  (%rsp),%xmm0
jmp    1183 <dbinom_raw+0x43>

LLVM IR (-O0):
@FP_INFINITE = global double 0.000000e+00
define double @dbinom_raw(i32 %0, i32 %1, double %2, double %3) {
%5 = alloca double
%6 = alloca i32
%7 = alloca i32
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
store i32 %0, i32* %6
store i32 %1, i32* %7
store double %2, double* %8
store double %3, double* %9
%12 = load double, double* %8
%13 = fcmp oeq double %12, 0.000000e+00
br i1 %13, label %14, label %21
14: ; preds = %4
%15 = load i32, i32* %6
%16 = icmp eq i32 %15, 0
br i1 %16, label %17, label %18
17: ; preds = %14
store double 0.000000e+00, double* %5
br label %150
18: ; preds = %14
%19 = load double, double* @FP_INFINITE
%20 = fneg double %19
store double %20, double* %5
br label %150
21: ; preds = %4
%22 = load double, double* %9
%23 = fcmp oeq double %22, 0.000000e+00
br i1 %23, label %24, label %31
24: ; preds = %21
%25 = load i32, i32* %6
%26 = icmp eq i32 %25, 0
br i1 %26, label %27, label %28
27: ; preds = %24
store double 0.000000e+00, double* %5
br label %150
28: ; preds = %24
%29 = load double, double* @FP_INFINITE
%30 = fneg double %29
store double %30, double* %5
br label %150
31: ; preds = %21
%32 = load i32, i32* %6
%33 = icmp eq i32 %32, 0
br i1 %33, label %34, label %64
34: ; preds = %31
%35 = load i32, i32* %7
%36 = icmp eq i32 %35, 0
br i1 %36, label %37, label %38
37: ; preds = %34
store double 0.000000e+00, double* %5
br label %150
38: ; preds = %34
%39 = load double, double* %8
%40 = fcmp olt double %39, 1.000000e-01
br i1 %40, label %41, label %55
41: ; preds = %38
%42 = load i32, i32* %7
%43 = sitofp i32 %42 to double
%44 = load i32, i32* %7
%45 = sitofp i32 %44 to double
%46 = load double, double* %9
%47 = fmul double %45, %46
%48 = call double @bd0(double %43, double %47)
%49 = fneg double %48
%50 = load i32, i32* %7
%51 = sitofp i32 %50 to double
%52 = load double, double* %8
%53 = fneg double %51
%54 = call double @llvm.fmuladd.f64(double %53, double %52, double %49)
br label %61
55: ; preds = %38
%56 = load i32, i32* %7
%57 = sitofp i32 %56 to double
%58 = load double, double* %9
%59 = call double @log(double %58)
%60 = fmul double %57, %59
br label %61
61: ; preds = %55, %41
%62 = phi double [ %54, %41 ], [ %60, %55 ]
store double %62, double* %11
%63 = load double, double* %11
store double %63, double* %5
br label %150
64: ; preds = %31
%65 = load i32, i32* %6
%66 = load i32, i32* %7
%67 = icmp eq i32 %65, %66
br i1 %67, label %68, label %94
68: ; preds = %64
%69 = load double, double* %9
%70 = fcmp olt double %69, 1.000000e-01
br i1 %70, label %71, label %85
71: ; preds = %68
%72 = load i32, i32* %7
%73 = sitofp i32 %72 to double
%74 = load i32, i32* %7
%75 = sitofp i32 %74 to double
%76 = load double, double* %8
%77 = fmul double %75, %76
%78 = call double @bd0(double %73, double %77)
%79 = fneg double %78
%80 = load i32, i32* %7
%81 = sitofp i32 %80 to double
%82 = load double, double* %9
%83 = fneg double %81
%84 = call double @llvm.fmuladd.f64(double %83, double %82, double %79)
br label %91
85: ; preds = %68
%86 = load i32, i32* %7
%87 = sitofp i32 %86 to double
%88 = load double, double* %8
%89 = call double @log(double %88)
%90 = fmul double %87, %89
br label %91
91: ; preds = %85, %71
%92 = phi double [ %84, %71 ], [ %90, %85 ]
store double %92, double* %11
%93 = load double, double* %11
store double %93, double* %5
br label %150
94: ; preds = %64
%95 = load i32, i32* %6
%96 = icmp slt i32 %95, 0
br i1 %96, label %101, label %97
97: ; preds = %94
%98 = load i32, i32* %6
%99 = load i32, i32* %7
%100 = icmp sgt i32 %98, %99
br i1 %100, label %101, label %104
101: ; preds = %97, %94
%102 = load double, double* @FP_INFINITE
%103 = fneg double %102
store double %103, double* %5
br label %150
104: ; preds = %97
%105 = load i32, i32* %7
%106 = call double @stirlerr(i32 %105)
%107 = load i32, i32* %6
%108 = call double @stirlerr(i32 %107)
%109 = fsub double %106, %108
%110 = load i32, i32* %7
%111 = load i32, i32* %6
%112 = sub nsw i32 %110, %111
%113 = call double @stirlerr(i32 %112)
%114 = fsub double %109, %113
%115 = load i32, i32* %6
%116 = sitofp i32 %115 to double
%117 = load i32, i32* %7
%118 = sitofp i32 %117 to double
%119 = load double, double* %8
%120 = fmul double %118, %119
%121 = call double @bd0(double %116, double %120)
%122 = fsub double %114, %121
%123 = load i32, i32* %7
%124 = load i32, i32* %6
%125 = sub nsw i32 %123, %124
%126 = sitofp i32 %125 to double
%127 = load i32, i32* %7
%128 = sitofp i32 %127 to double
%129 = load double, double* %9
%130 = fmul double %128, %129
%131 = call double @bd0(double %126, double %130)
%132 = fsub double %122, %131
store double %132, double* %11
%133 = call double @log(double 0x401921FB54442D18)
%134 = load i32, i32* %6
%135 = sitofp i32 %134 to double
%136 = call double @log(double %135)
%137 = fadd double %133, %136
%138 = load i32, i32* %6
%139 = sitofp i32 %138 to double
%140 = fneg double %139
%141 = load i32, i32* %7
%142 = sitofp i32 %141 to double
%143 = fdiv double %140, %142
%144 = call double @log1p(double %143)
%145 = fadd double %137, %144
store double %145, double* %10
%146 = load double, double* %10
%147 = load double, double* %11
%148 = call double @llvm.fmuladd.f64(double -5.000000e-01, double %146, double %147)
store double %148, double* %11
%149 = load double, double* %11
store double %149, double* %5
br label %150
150: ; preds = %104, %101, %91, %61, %37, %28, %27, %18, %17
%151 = load double, double* %5
ret double %151
}

LLVM IR (-O2):
@FP_INFINITE = global double 0.000000e+00
define double @dbinom_raw(i32 %0, i32 %1, double %2, double %3) {
%5 = fcmp oeq double %2, 0.000000e+00
br i1 %5, label %6, label %11
6: ; preds = %4
%7 = icmp eq i32 %0, 0
br i1 %7, label %77, label %8
8: ; preds = %6
%9 = load double, double* @FP_INFINITE
%10 = fneg double %9
br label %77
11: ; preds = %4
%12 = fcmp oeq double %3, 0.000000e+00
%13 = icmp eq i32 %0, 0
br i1 %12, label %14, label %18
14: ; preds = %11
br i1 %13, label %77, label %15
15: ; preds = %14
%16 = load double, double* @FP_INFINITE
%17 = fneg double %16
br label %77
18: ; preds = %11
br i1 %13, label %19, label %33
19: ; preds = %18
%20 = icmp eq i32 %1, 0
br i1 %20, label %77, label %21
21: ; preds = %19
%22 = fcmp olt double %2, 1.000000e-01
%23 = sitofp i32 %1 to double
br i1 %22, label %24, label %30
24: ; preds = %21
%25 = fmul double %23, %3
%26 = tail call double @bd0(double %23, double %25)
%27 = fneg double %26
%28 = fneg double %23
%29 = tail call double @llvm.fmuladd.f64(double %28, double %2, double %27)
br label %77
30: ; preds = %21
%31 = tail call double @log(double %3)
%32 = fmul double %31, %23
br label %77
33: ; preds = %18
%34 = icmp eq i32 %1, %0
br i1 %34, label %35, label %47
35: ; preds = %33
%36 = fcmp olt double %3, 1.000000e-01
%37 = sitofp i32 %0 to double
br i1 %36, label %38, label %44
38: ; preds = %35
%39 = fmul double %37, %2
%40 = tail call double @bd0(double %37, double %39)
%41 = fneg double %40
%42 = fneg double %37
%43 = tail call double @llvm.fmuladd.f64(double %42, double %3, double %41)
br label %77
44: ; preds = %35
%45 = tail call double @log(double %2)
%46 = fmul double %45, %37
br label %77
47: ; preds = %33
%48 = icmp slt i32 %0, 0
%49 = icmp slt i32 %1, %0
%50 = or i1 %48, %49
br i1 %50, label %51, label %54
51: ; preds = %47
%52 = load double, double* @FP_INFINITE
%53 = fneg double %52
br label %77
54: ; preds = %47
%55 = tail call double @stirlerr(i32 %1)
%56 = tail call double @stirlerr(i32 %0)
%57 = fsub double %55, %56
%58 = sub nsw i32 %1, %0
%59 = tail call double @stirlerr(i32 %58)
%60 = fsub double %57, %59
%61 = sitofp i32 %0 to double
%62 = sitofp i32 %1 to double
%63 = fmul double %62, %2
%64 = tail call double @bd0(double %61, double %63)
%65 = fsub double %60, %64
%66 = sitofp i32 %58 to double
%67 = fmul double %62, %3
%68 = tail call double @bd0(double %66, double %67)
%69 = fsub double %65, %68
%70 = tail call double @log(double %61)
%71 = fadd double %70, 0x3FFD67F1C864BEB4
%72 = fneg double %61
%73 = fdiv double %72, %62
%74 = tail call double @log1p(double %73)
%75 = fadd double %71, %74
%76 = tail call double @llvm.fmuladd.f64(double %75, double -5.000000e-01, double %69)
br label %77
77: ; preds = %38, %44, %24, %30, %19, %14, %6, %54, %51, %15, %8
%78 = phi double [ %10, %8 ], [ %17, %15 ], [ %53, %51 ], [ %76, %54 ], [ 0.000000e+00, %6 ], [ 0.000000e+00, %14 ], [ 0.000000e+00, %19 ], [ %29, %24 ], [ %32, %30 ], [ %43, %38 ], [ %46, %44 ]
ret double %78
}