#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 */
int algdiv(double, double);
double alnrel(double);
double bcorr(double, double);
int gamln(double);
double gsumln(double, double);
double log(double);
double betaln(double a0, double b0) {
  static double e = .918938533204673;
  int i__1;
  double ret_val;
  double a, b, c__, h__;
  int i__, n;
  double u, v, w, z__;
  a = ((a0 < b0) ? a0 : b0);
  b = ((a0 > b0) ? a0 : b0);
  if (a >= 8.0) {
    goto L60;
  }
  if (a >= 1.0) {
    goto L20;
  }
  if (b >= 8.0) {
    goto L10;
  }
  ret_val = gamln(a) + (gamln(b) - gamln(a + b));
  return ret_val;
L10:
  ret_val = gamln(a) + algdiv(a, b);
  return ret_val;
L20:
  if (a > 2.0) {
    goto L30;
  }
  if (b > 2.0) {
    goto L21;
  }
  ret_val = gamln(a) + gamln(b) - gsumln(a, b);
  return ret_val;
L21:
  w = 0.0;
  if (b < 8.0) {
    goto L40;
  }
  ret_val = gamln(a) + algdiv(a, b);
  return ret_val;
L30:
  if (b > 1e3f) {
    goto L50;
  }
  n = a - 1.0;
  w = 1.0;
  i__1 = n;
  for (i__ = 1; i__ <= i__1; ++i__) {
    a += -1.0;
    h__ = a / b;
    w *= h__ / (h__ + 1.0);
  }
  w = log(w);
  if (b < 8.0) {
    goto L40;
  }
  ret_val = w + gamln(a) + algdiv(a, b);
  return ret_val;
L40:
  n = b - 1.0;
  z__ = 1.0;
  i__1 = n;
  for (i__ = 1; i__ <= i__1; ++i__) {
    b += -1.0;
    z__ *= b / (a + b);
  }
  ret_val = w + log(z__) + (gamln(a) + (gamln(b) - gsumln(a, b)));
  return ret_val;
L50:
  n = a - 1.0;
  w = 1.0;
  i__1 = n;
  for (i__ = 1; i__ <= i__1; ++i__) {
    a += -1.0;
    w *= a / (a / b + 1.0);
  }
  ret_val = log(w) - n * log(b) + (gamln(a) + algdiv(a, b));
  return ret_val;
L60:
  w = bcorr(a, b);
  h__ = a / b;
  c__ = h__ / (h__ + 1.0);
  u = -(a - 0.5) * log(c__);
  v = b * alnrel(h__);
  if (u <= v) {
    goto L61;
  }
  ret_val = log(b) * -0.5 + e + w - v - u;
  return ret_val;
L61:
  ret_val = log(b) * -0.5 + e + w - u - v;
  return ret_val;
}


x86 assembly (clang, -O0):
<betaln>:
push   %rbp
mov    %rsp,%rbp
sub    $0x100,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
movsd  -0x10(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    1198 <betaln+0x38>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    11a2 <betaln+0x42>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x10(%rbp),%xmm0
ucomisd -0x18(%rbp),%xmm0
jbe    11cb <betaln+0x6b>
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    11d5 <betaln+0x75>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0xe14(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     11fb <betaln+0x9b>
jmp    1750 <betaln+0x5f0>
movsd  -0x30(%rbp),%xmm0
movsd  0xe00(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1217 <betaln+0xb7>
jmp    12cd <betaln+0x16d>
movsd  -0x38(%rbp),%xmm0
movsd  0xddc(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1233 <betaln+0xd3>
jmp    128c <betaln+0x12c>
movsd  -0x30(%rbp),%xmm0
call   1040 <gamln@plt>
mov    %eax,-0x84(%rbp)
movsd  -0x38(%rbp),%xmm0
call   1040 <gamln@plt>
mov    %eax,-0x88(%rbp)
movsd  -0x30(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
call   1040 <gamln@plt>
mov    -0x88(%rbp),%ecx
mov    %eax,%edx
mov    -0x84(%rbp),%eax
sub    %edx,%ecx
add    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    18a5 <betaln+0x745>
movsd  -0x30(%rbp),%xmm0
call   1040 <gamln@plt>
mov    %eax,-0x8c(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
call   1060 <algdiv@plt>
mov    %eax,%ecx
mov    -0x8c(%rbp),%eax
add    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    18a5 <betaln+0x745>
movsd  -0x30(%rbp),%xmm0
movsd  0xd36(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12e9 <betaln+0x189>
jmp    13c8 <betaln+0x268>
movsd  -0x38(%rbp),%xmm0
movsd  0xd1a(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1305 <betaln+0x1a5>
jmp    1367 <betaln+0x207>
movsd  -0x30(%rbp),%xmm0
call   1040 <gamln@plt>
mov    %eax,-0x9c(%rbp)
movsd  -0x38(%rbp),%xmm0
call   1040 <gamln@plt>
mov    %eax,%ecx
mov    -0x9c(%rbp),%eax
add    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
call   1050 <gsumln@plt>
movaps %xmm0,%xmm1
movsd  -0x98(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    18a5 <betaln+0x745>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xc89(%rip),%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    1387 <betaln+0x227>
jmp    14fa <betaln+0x39a>
movsd  -0x30(%rbp),%xmm0
call   1040 <gamln@plt>
mov    %eax,-0xa0(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
call   1060 <algdiv@plt>
mov    %eax,%ecx
mov    -0xa0(%rbp),%eax
add    %ecx,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    18a5 <betaln+0x745>
movsd  -0x38(%rbp),%xmm0
movsd  0xc43(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    13e4 <betaln+0x284>
jmp    1619 <betaln+0x4b9>
movsd  -0x30(%rbp),%xmm0
movsd  0xc17(%rip),%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x50(%rbp)
movsd  0xc04(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movl   $0x1,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     1471 <betaln+0x311>
movsd  0xbf6(%rip),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  0xbb8(%rip),%xmm1
addsd  -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1416 <betaln+0x2b6>
movsd  -0x68(%rbp),%xmm0
call   1070 <log@plt>
movsd  %xmm0,-0x68(%rbp)
movsd  0xb78(%rip),%xmm0
ucomisd -0x38(%rbp),%xmm0
jbe    1498 <betaln+0x338>
jmp    14fa <betaln+0x39a>
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1040 <gamln@plt>
movsd  -0xb0(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
call   1060 <algdiv@plt>
movsd  -0xa8(%rbp),%xmm0
ff
cvtsi2sd %eax,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    18a5 <betaln+0x745>
movsd  -0x38(%rbp),%xmm0
movsd  0xb01(%rip),%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x50(%rbp)
movsd  0xaee(%rip),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movl   $0x1,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     1575 <betaln+0x415>
movsd  0xae0(%rip),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
addsd  -0x38(%rbp),%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    152c <betaln+0x3cc>
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
call   1070 <log@plt>
movaps %xmm0,%xmm1
movsd  -0xd0(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1040 <gamln@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1040 <gamln@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
call   1050 <gsumln@plt>
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0xc0(%rbp),%xmm1
ff
movaps %xmm0,%xmm3
movsd  -0xb8(%rbp),%xmm0
ff
subsd  %xmm3,%xmm2
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    18a5 <betaln+0x745>
movsd  -0x30(%rbp),%xmm0
movsd  0x9e2(%rip),%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x50(%rbp)
movsd  0x9cf(%rip),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movl   $0x1,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jg     16a0 <betaln+0x540>
movsd  0x9c1(%rip),%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x30(%rbp),%xmm1
divsd  -0x38(%rbp),%xmm1
movsd  0x988(%rip),%xmm2
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
mulsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    164b <betaln+0x4eb>
movsd  -0x68(%rbp),%xmm0
call   1070 <log@plt>
movsd  %xmm0,-0xf0(%rbp)
ff
cvtsi2sdl -0x50(%rbp),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
call   1070 <log@plt>
movsd  -0xf0(%rbp),%xmm1
ff
movaps %xmm0,%xmm2
movsd  -0xe8(%rbp),%xmm0
ff
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x30(%rbp),%xmm0
call   1040 <gamln@plt>
mov    %eax,-0xd4(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
call   1060 <algdiv@plt>
movsd  -0xe0(%rbp),%xmm0
ff
mov    %eax,%ecx
mov    -0xd4(%rbp),%eax
add    %ecx,%eax
cvtsi2sd %eax,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    18a5 <betaln+0x745>
movsd  -0x30(%rbp),%xmm0
movsd  -0x38(%rbp),%xmm1
call   1080 <bcorr@plt>
movsd  %xmm0,-0x68(%rbp)
movsd  -0x30(%rbp),%xmm0
divsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  0x888(%rip),%xmm1
addsd  -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0x88d(%rip),%xmm1
subsd  %xmm1,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
call   1070 <log@plt>
movaps %xmm0,%xmm1
movsd  -0x100(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
call   1030 <alnrel@plt>
movaps %xmm0,%xmm1
movsd  -0xf8(%rbp),%xmm0
ff
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x58(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     1820 <betaln+0x6c0>
jmp    1865 <betaln+0x705>
movsd  -0x38(%rbp),%xmm0
call   1070 <log@plt>
movsd  0x281e(%rip),%xmm1
movsd  0x7f6(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x68(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    18a5 <betaln+0x745>
movsd  -0x38(%rbp),%xmm0
call   1070 <log@plt>
movsd  0x27d9(%rip),%xmm1
movsd  0x7b1(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
addsd  -0x68(%rbp),%xmm0
subsd  -0x58(%rbp),%xmm0
subsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x100,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<betaln>:
push   %rbp
push   %rbx
sub    $0x38,%rsp
movapd %xmm0,%xmm5
movapd %xmm0,%xmm6
minsd  %xmm1,%xmm6
maxsd  %xmm1,%xmm5
ucomisd 0xe82(%rip),%xmm6
movsd  %xmm5,(%rsp)
jae    11e2 <betaln+0x82>
ucomisd 0xe7b(%rip),%xmm6
jae    12a3 <betaln+0x143>
movapd %xmm6,%xmm0
movapd %xmm6,0x10(%rsp)
call   1040 <gamln@plt>
movsd  (%rsp),%xmm1
mov    %eax,%ebx
ucomisd 0xe4f(%rip),%xmm1
jae    12f6 <betaln+0x196>
movapd %xmm1,%xmm0
call   1040 <gamln@plt>
mov    %eax,%ebp
movapd 0x10(%rsp),%xmm0
addsd  (%rsp),%xmm0
call   1040 <gamln@plt>
add    %ebx,%ebp
sub    %eax,%ebp
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
jmp    16bd <betaln+0x55d>
movapd %xmm6,%xmm0
movapd %xmm5,%xmm1
movapd %xmm6,0x10(%rsp)
call   1080 <bcorr@plt>
movsd  %xmm0,0x8(%rsp)
movapd 0x10(%rsp),%xmm2
movapd %xmm2,%xmm0
divsd  (%rsp),%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  0xdf0(%rip),%xmm1
addsd  %xmm0,%xmm1
divsd  %xmm1,%xmm0
movapd %xmm2,%xmm1
addsd  0xde4(%rip),%xmm1
xorpd  0xe0c(%rip),%xmm1
movapd %xmm1,0x10(%rsp)
call   1070 <log@plt>
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x10(%rsp)
movsd  0x28(%rsp),%xmm0
call   1030 <alnrel@plt>
movapd %xmm0,%xmm1
movsd  (%rsp),%xmm0
mulsd  %xmm0,%xmm1
movsd  %xmm1,0x28(%rsp)
call   1070 <log@plt>
movsd  0x28(%rsp),%xmm2
movsd  0x10(%rsp),%xmm1
ucomisd %xmm1,%xmm2
mulsd  0xd8a(%rip),%xmm0
addsd  0xd8a(%rip),%xmm0
addsd  0x8(%rsp),%xmm0
jae    12e9 <betaln+0x189>
subsd  %xmm2,%xmm0
subsd  %xmm1,%xmm0
jmp    16bd <betaln+0x55d>
ucomisd 0xd75(%rip),%xmm6
jbe    130e <betaln+0x1ae>
ucomisd 0xd73(%rip),%xmm5
movsd  0xd73(%rip),%xmm0
addsd  %xmm6,%xmm0
cvttsd2si %xmm0,%ebx
jbe    134b <betaln+0x1eb>
test   %ebx,%ebx
jle    13b2 <betaln+0x252>
cmp    $0x1,%ebx
jne    13cc <betaln+0x26c>
movsd  0xd24(%rip),%xmm0
jmp    142d <betaln+0x2cd>
subsd  %xmm1,%xmm0
subsd  %xmm2,%xmm0
jmp    16bd <betaln+0x55d>
movaps 0x10(%rsp),%xmm0
call   1060 <algdiv@plt>
add    %ebx,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
jmp    16bd <betaln+0x55d>
ucomisd 0xd0a(%rip),%xmm5
jbe    1365 <betaln+0x205>
xorpd  %xmm1,%xmm1
movsd  0xcdc(%rip),%xmm0
ucomisd %xmm5,%xmm0
ja     155e <betaln+0x3fe>
movapd %xmm6,%xmm0
movapd %xmm6,0x10(%rsp)
call   1040 <gamln@plt>
mov    %eax,%ebx
movaps 0x10(%rsp),%xmm0
movsd  (%rsp),%xmm1
jmp    12fb <betaln+0x19b>
test   %ebx,%ebx
jle    13bf <betaln+0x25f>
cmp    $0x1,%ebx
jne    14b6 <betaln+0x356>
movsd  0xca8(%rip),%xmm0
jmp    150d <betaln+0x3ad>
movapd %xmm6,%xmm0
movapd %xmm6,0x10(%rsp)
call   1040 <gamln@plt>
mov    %eax,%ebx
movsd  (%rsp),%xmm0
call   1040 <gamln@plt>
add    %ebx,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x28(%rsp)
movapd 0x10(%rsp),%xmm0
movsd  (%rsp),%xmm1
call   1050 <gsumln@plt>
movsd  0x28(%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
jmp    16bd <betaln+0x55d>
movsd  0xc4e(%rip),%xmm0
jmp    1456 <betaln+0x2f6>
movsd  0xc41(%rip),%xmm0
jmp    1536 <betaln+0x3d6>
mov    %ebx,%eax
and    $0xfffffffe,%eax
movsd  0xc2f(%rip),%xmm1
movsd  0xc4f(%rip),%xmm2
movapd %xmm1,%xmm0
cs nopw 0x0(%rax,%rax,1)
nop
addsd  %xmm2,%xmm6
movapd %xmm6,%xmm3
divsd  %xmm5,%xmm3
addsd  %xmm1,%xmm3
movapd %xmm6,%xmm4
divsd  %xmm3,%xmm4
mulsd  %xmm0,%xmm4
addsd  %xmm2,%xmm6
movapd %xmm6,%xmm3
divsd  %xmm5,%xmm3
addsd  %xmm1,%xmm3
movapd %xmm6,%xmm0
divsd  %xmm3,%xmm0
mulsd  %xmm4,%xmm0
add    $0xfffffffe,%eax
jne    13f0 <betaln+0x290>
test   $0x1,%bl
je     1456 <betaln+0x2f6>
addsd  0xbf6(%rip),%xmm6
movapd %xmm6,%xmm1
divsd  %xmm5,%xmm1
addsd  0xbbe(%rip),%xmm1
movapd %xmm6,%xmm2
divsd  %xmm1,%xmm2
mulsd  %xmm2,%xmm0
movapd %xmm6,0x10(%rsp)
call   1070 <log@plt>
movsd  %xmm0,0x8(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %ebx,%xmm0
movsd  %xmm0,0x28(%rsp)
movsd  (%rsp),%xmm0
call   1070 <log@plt>
mulsd  0x28(%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movaps 0x10(%rsp),%xmm0
call   1040 <gamln@plt>
mov    %eax,%ebx
movaps 0x10(%rsp),%xmm0
movsd  (%rsp),%xmm1
call   1060 <algdiv@plt>
add    %ebx,%eax
jmp    15c0 <betaln+0x460>
mov    %ebx,%eax
and    $0xfffffffe,%eax
movsd  0xb45(%rip),%xmm1
movsd  0xb65(%rip),%xmm2
movapd %xmm1,%xmm0
nop
addsd  %xmm2,%xmm6
movapd %xmm6,%xmm3
divsd  %xmm5,%xmm3
movapd %xmm3,%xmm4
addsd  %xmm1,%xmm4
divsd  %xmm4,%xmm3
mulsd  %xmm0,%xmm3
addsd  %xmm2,%xmm6
movapd %xmm6,%xmm0
divsd  %xmm5,%xmm0
movapd %xmm0,%xmm4
addsd  %xmm1,%xmm4
divsd  %xmm4,%xmm0
mulsd  %xmm3,%xmm0
add    $0xfffffffe,%eax
jne    14d0 <betaln+0x370>
test   $0x1,%bl
je     1536 <betaln+0x3d6>
addsd  0xb16(%rip),%xmm6
movapd %xmm6,%xmm1
divsd  %xmm5,%xmm1
movsd  0xade(%rip),%xmm2
addsd  %xmm1,%xmm2
divsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
movapd %xmm6,0x10(%rsp)
call   1070 <log@plt>
movsd  (%rsp),%xmm5
movapd %xmm0,%xmm1
movsd  0xaae(%rip),%xmm0
ucomisd %xmm5,%xmm0
jbe    158a <betaln+0x42a>
movapd 0x10(%rsp),%xmm6
movsd  0xaca(%rip),%xmm0
addsd  %xmm5,%xmm0
cvttsd2si %xmm0,%eax
test   %eax,%eax
movsd  %xmm1,0x8(%rsp)
jle    15cc <betaln+0x46c>
cmp    $0x1,%eax
jne    15d6 <betaln+0x476>
movsd  0xa83(%rip),%xmm0
jmp    1625 <betaln+0x4c5>
movaps 0x10(%rsp),%xmm0
movsd  %xmm1,0x8(%rsp)
call   1040 <gamln@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0x8(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movaps 0x10(%rsp),%xmm0
movsd  (%rsp),%xmm1
call   1060 <algdiv@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
jmp    16b7 <betaln+0x557>
movsd  0xa34(%rip),%xmm0
jmp    1645 <betaln+0x4e5>
mov    %eax,%ecx
and    $0xfffffffe,%ecx
movsd  0xa25(%rip),%xmm0
movsd  0xa45(%rip),%xmm1
nopl   0x0(%rax,%rax,1)
addsd  %xmm1,%xmm5
movapd %xmm6,%xmm2
addsd  %xmm5,%xmm2
movapd %xmm5,%xmm3
divsd  %xmm2,%xmm3
mulsd  %xmm0,%xmm3
addsd  %xmm1,%xmm5
movapd %xmm6,%xmm2
addsd  %xmm5,%xmm2
movapd %xmm5,%xmm0
divsd  %xmm2,%xmm0
mulsd  %xmm3,%xmm0
add    $0xfffffffe,%ecx
jne    15f0 <betaln+0x490>
test   $0x1,%al
je     1645 <betaln+0x4e5>
addsd  0x9ff(%rip),%xmm5
movapd %xmm6,%xmm1
addsd  %xmm5,%xmm1
movapd %xmm5,%xmm2
divsd  %xmm1,%xmm2
mulsd  %xmm2,%xmm0
movsd  %xmm5,(%rsp)
movapd %xmm6,0x10(%rsp)
call   1070 <log@plt>
movsd  0x8(%rsp),%xmm1
addsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
movaps 0x10(%rsp),%xmm0
call   1040 <gamln@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x30(%rsp)
movsd  (%rsp),%xmm0
call   1040 <gamln@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x28(%rsp)
movapd 0x10(%rsp),%xmm0
movsd  (%rsp),%xmm1
call   1050 <gsumln@plt>
movsd  0x28(%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
addsd  0x30(%rsp),%xmm0
addsd  0x8(%rsp),%xmm0
add    $0x38,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
@betaln.e = internal global double 0x3FED67F1C864BEB7
define double @betaln(double %0, double %1) {
%3 = alloca double
%4 = alloca double
%5 = alloca double
%6 = alloca i32
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca i32
%13 = alloca i32
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
store double %0, double* %4
store double %1, double* %5
%18 = load double, double* %4
%19 = load double, double* %5
%20 = fcmp olt double %18, %19
br i1 %20, label %21, label %23
21: ; preds = %2
%22 = load double, double* %4
br label %25
23: ; preds = %2
%24 = load double, double* %5
br label %25
25: ; preds = %23, %21
%26 = phi double [ %22, %21 ], [ %24, %23 ]
store double %26, double* %8
%27 = load double, double* %4
%28 = load double, double* %5
%29 = fcmp ogt double %27, %28
br i1 %29, label %30, label %32
30: ; preds = %25
%31 = load double, double* %4
br label %34
32: ; preds = %25
%33 = load double, double* %5
br label %34
34: ; preds = %32, %30
%35 = phi double [ %31, %30 ], [ %33, %32 ]
store double %35, double* %9
%36 = load double, double* %8
%37 = fcmp oge double %36, 8.000000e+00
br i1 %37, label %38, label %39
38: ; preds = %34
br label %229
39: ; preds = %34
%40 = load double, double* %8
%41 = fcmp oge double %40, 1.000000e+00
br i1 %41, label %42, label %43
42: ; preds = %39
br label %69
43: ; preds = %39
%44 = load double, double* %9
%45 = fcmp oge double %44, 8.000000e+00
br i1 %45, label %46, label %47
46: ; preds = %43
br label %60
47: ; preds = %43
%48 = load double, double* %8
%49 = call i32 @gamln(double %48)
%50 = load double, double* %9
%51 = call i32 @gamln(double %50)
%52 = load double, double* %8
%53 = load double, double* %9
%54 = fadd double %52, %53
%55 = call i32 @gamln(double %54)
%56 = sub nsw i32 %51, %55
%57 = add nsw i32 %49, %56
%58 = sitofp i32 %57 to double
store double %58, double* %7
%59 = load double, double* %7
store double %59, double* %3
br label %278
60: ; preds = %46
%61 = load double, double* %8
%62 = call i32 @gamln(double %61)
%63 = load double, double* %8
%64 = load double, double* %9
%65 = call i32 @algdiv(double %63, double %64)
%66 = add nsw i32 %62, %65
%67 = sitofp i32 %66 to double
store double %67, double* %7
%68 = load double, double* %7
store double %68, double* %3
br label %278
69: ; preds = %42
%70 = load double, double* %8
%71 = fcmp ogt double %70, 2.000000e+00
br i1 %71, label %72, label %73
72: ; preds = %69
br label %102
73: ; preds = %69
%74 = load double, double* %9
%75 = fcmp ogt double %74, 2.000000e+00
br i1 %75, label %76, label %77
76: ; preds = %73
br label %89
77: ; preds = %73
%78 = load double, double* %8
%79 = call i32 @gamln(double %78)
%80 = load double, double* %9
%81 = call i32 @gamln(double %80)
%82 = add nsw i32 %79, %81
%83 = sitofp i32 %82 to double
%84 = load double, double* %8
%85 = load double, double* %9
%86 = call double @gsumln(double %84, double %85)
%87 = fsub double %83, %86
store double %87, double* %7
%88 = load double, double* %7
store double %88, double* %3
br label %278
89: ; preds = %76
store double 0.000000e+00, double* %16
%90 = load double, double* %9
%91 = fcmp olt double %90, 8.000000e+00
br i1 %91, label %92, label %93
92: ; preds = %89
br label %148
93: ; preds = %89
%94 = load double, double* %8
%95 = call i32 @gamln(double %94)
%96 = load double, double* %8
%97 = load double, double* %9
%98 = call i32 @algdiv(double %96, double %97)
%99 = add nsw i32 %95, %98
%100 = sitofp i32 %99 to double
store double %100, double* %7
%101 = load double, double* %7
store double %101, double* %3
br label %278
102: ; preds = %72
%103 = load double, double* %9
%104 = fcmp ogt double %103, 1.000000e+03
br i1 %104, label %105, label %106
105: ; preds = %102
br label %188
106: ; preds = %102
%107 = load double, double* %8
%108 = fsub double %107, 1.000000e+00
%109 = fptosi double %108 to i32
store i32 %109, i32* %13
store double 1.000000e+00, double* %16
%110 = load i32, i32* %13
store i32 %110, i32* %6
store i32 1, i32* %12
br label %111
111: ; preds = %127, %106
%112 = load i32, i32* %12
%113 = load i32, i32* %6
%114 = icmp sle i32 %112, %113
br i1 %114, label %115, label %130
115: ; preds = %111
%116 = load double, double* %8
%117 = fadd double %116, -1.000000e+00
store double %117, double* %8
%118 = load double, double* %8
%119 = load double, double* %9
%120 = fdiv double %118, %119
store double %120, double* %11
%121 = load double, double* %11
%122 = load double, double* %11
%123 = fadd double %122, 1.000000e+00
%124 = fdiv double %121, %123
%125 = load double, double* %16
%126 = fmul double %125, %124
store double %126, double* %16
br label %127
127: ; preds = %115
%128 = load i32, i32* %12
%129 = add nsw i32 %128, 1
store i32 %129, i32* %12
br label %111
130: ; preds = %111
%131 = load double, double* %16
%132 = call double @log(double %131)
store double %132, double* %16
%133 = load double, double* %9
%134 = fcmp olt double %133, 8.000000e+00
br i1 %134, label %135, label %136
135: ; preds = %130
br label %148
136: ; preds = %130
%137 = load double, double* %16
%138 = load double, double* %8
%139 = call i32 @gamln(double %138)
%140 = sitofp i32 %139 to double
%141 = fadd double %137, %140
%142 = load double, double* %8
%143 = load double, double* %9
%144 = call i32 @algdiv(double %142, double %143)
%145 = sitofp i32 %144 to double
%146 = fadd double %141, %145
store double %146, double* %7
%147 = load double, double* %7
store double %147, double* %3
br label %278
148: ; preds = %135, %92
%149 = load double, double* %9
%150 = fsub double %149, 1.000000e+00
%151 = fptosi double %150 to i32
store i32 %151, i32* %13
store double 1.000000e+00, double* %17
%152 = load i32, i32* %13
store i32 %152, i32* %6
store i32 1, i32* %12
br label %153
153: ; preds = %167, %148
%154 = load i32, i32* %12
%155 = load i32, i32* %6
%156 = icmp sle i32 %154, %155
br i1 %156, label %157, label %170
157: ; preds = %153
%158 = load double, double* %9
%159 = fadd double %158, -1.000000e+00
store double %159, double* %9
%160 = load double, double* %9
%161 = load double, double* %8
%162 = load double, double* %9
%163 = fadd double %161, %162
%164 = fdiv double %160, %163
%165 = load double, double* %17
%166 = fmul double %165, %164
store double %166, double* %17
br label %167
167: ; preds = %157
%168 = load i32, i32* %12
%169 = add nsw i32 %168, 1
store i32 %169, i32* %12
br label %153
170: ; preds = %153
%171 = load double, double* %16
%172 = load double, double* %17
%173 = call double @log(double %172)
%174 = fadd double %171, %173
%175 = load double, double* %8
%176 = call i32 @gamln(double %175)
%177 = sitofp i32 %176 to double
%178 = load double, double* %9
%179 = call i32 @gamln(double %178)
%180 = sitofp i32 %179 to double
%181 = load double, double* %8
%182 = load double, double* %9
%183 = call double @gsumln(double %181, double %182)
%184 = fsub double %180, %183
%185 = fadd double %177, %184
%186 = fadd double %174, %185
store double %186, double* %7
%187 = load double, double* %7
store double %187, double* %3
br label %278
188: ; preds = %105
%189 = load double, double* %8
%190 = fsub double %189, 1.000000e+00
%191 = fptosi double %190 to i32
store i32 %191, i32* %13
store double 1.000000e+00, double* %16
%192 = load i32, i32* %13
store i32 %192, i32* %6
store i32 1, i32* %12
br label %193
193: ; preds = %208, %188
%194 = load i32, i32* %12
%195 = load i32, i32* %6
%196 = icmp sle i32 %194, %195
br i1 %196, label %197, label %211
197: ; preds = %193
%198 = load double, double* %8
%199 = fadd double %198, -1.000000e+00
store double %199, double* %8
%200 = load double, double* %8
%201 = load double, double* %8
%202 = load double, double* %9
%203 = fdiv double %201, %202
%204 = fadd double %203, 1.000000e+00
%205 = fdiv double %200, %204
%206 = load double, double* %16
%207 = fmul double %206, %205
store double %207, double* %16
br label %208
208: ; preds = %197
%209 = load i32, i32* %12
%210 = add nsw i32 %209, 1
store i32 %210, i32* %12
br label %193
211: ; preds = %193
%212 = load double, double* %16
%213 = call double @log(double %212)
%214 = load i32, i32* %13
%215 = sitofp i32 %214 to double
%216 = load double, double* %9
%217 = call double @log(double %216)
%218 = fneg double %215
%219 = call double @llvm.fmuladd.f64(double %218, double %217, double %213)
%220 = load double, double* %8
%221 = call i32 @gamln(double %220)
%222 = load double, double* %8
%223 = load double, double* %9
%224 = call i32 @algdiv(double %222, double %223)
%225 = add nsw i32 %221, %224
%226 = sitofp i32 %225 to double
%227 = fadd double %219, %226
store double %227, double* %7
%228 = load double, double* %7
store double %228, double* %3
br label %278
229: ; preds = %38
%230 = load double, double* %8
%231 = load double, double* %9
%232 = call double @bcorr(double %230, double %231)
store double %232, double* %16
%233 = load double, double* %8
%234 = load double, double* %9
%235 = fdiv double %233, %234
store double %235, double* %11
%236 = load double, double* %11
%237 = load double, double* %11
%238 = fadd double %237, 1.000000e+00
%239 = fdiv double %236, %238
store double %239, double* %10
%240 = load double, double* %8
%241 = fsub double %240, 5.000000e-01
%242 = fneg double %241
%243 = load double, double* %10
%244 = call double @log(double %243)
%245 = fmul double %242, %244
store double %245, double* %14
%246 = load double, double* %9
%247 = load double, double* %11
%248 = call double @alnrel(double %247)
%249 = fmul double %246, %248
store double %249, double* %15
%250 = load double, double* %14
%251 = load double, double* %15
%252 = fcmp ole double %250, %251
br i1 %252, label %253, label %254
253: ; preds = %229
br label %266
254: ; preds = %229
%255 = load double, double* %9
%256 = call double @log(double %255)
%257 = load double, double* @betaln.e
%258 = call double @llvm.fmuladd.f64(double %256, double -5.000000e-01, double %257)
%259 = load double, double* %16
%260 = fadd double %258, %259
%261 = load double, double* %15
%262 = fsub double %260, %261
%263 = load double, double* %14
%264 = fsub double %262, %263
store double %264, double* %7
%265 = load double, double* %7
store double %265, double* %3
br label %278
266: ; preds = %253
%267 = load double, double* %9
%268 = call double @log(double %267)
%269 = load double, double* @betaln.e
%270 = call double @llvm.fmuladd.f64(double %268, double -5.000000e-01, double %269)
%271 = load double, double* %16
%272 = fadd double %270, %271
%273 = load double, double* %14
%274 = fsub double %272, %273
%275 = load double, double* %15
%276 = fsub double %274, %275
store double %276, double* %7
%277 = load double, double* %7
store double %277, double* %3
br label %278
278: ; preds = %266, %254, %211, %170, %136, %93, %77, %60, %47
%279 = load double, double* %3
ret double %279
}

LLVM IR (-O2):
define double @betaln(double %0, double %1) {
%3 = fcmp olt double %0, %1
%4 = select i1 %3, double %0, double %1
%5 = fcmp ogt double %0, %1
%6 = select i1 %5, double %0, double %1
%7 = fcmp ult double %4, 8.000000e+00
br i1 %7, label %8, label %189
8: ; preds = %2
%9 = fcmp ult double %4, 1.000000e+00
br i1 %9, label %10, label %24
10: ; preds = %8
%11 = fcmp ult double %6, 8.000000e+00
%12 = tail call i32 @gamln(double %4)
br i1 %11, label %13, label %20
13: ; preds = %10
%14 = tail call i32 @gamln(double %6)
%15 = fadd double %4, %6
%16 = tail call i32 @gamln(double %15)
%17 = add i32 %14, %12
%18 = sub i32 %17, %16
%19 = sitofp i32 %18 to double
br label %210
20: ; preds = %10
%21 = tail call i32 @algdiv(double %4, double %6)
%22 = add nsw i32 %21, %12
%23 = sitofp i32 %22 to double
br label %210
24: ; preds = %8
%25 = fcmp ogt double %4, 2.000000e+00
br i1 %25, label %42, label %26
26: ; preds = %24
%27 = fcmp ogt double %6, 2.000000e+00
br i1 %27, label %35, label %28
28: ; preds = %26
%29 = tail call i32 @gamln(double %4)
%30 = tail call i32 @gamln(double %6)
%31 = add nsw i32 %30, %29
%32 = sitofp i32 %31 to double
%33 = tail call double @gsumln(double %4, double %6)
%34 = fsub double %32, %33
br label %210
35: ; preds = %26
%36 = fcmp olt double %6, 8.000000e+00
br i1 %36, label %93, label %37
37: ; preds = %35
%38 = tail call i32 @gamln(double %4)
%39 = tail call i32 @algdiv(double %4, double %6)
%40 = add nsw i32 %39, %38
%41 = sitofp i32 %40 to double
br label %210
42: ; preds = %24
%43 = fcmp ogt double %6, 1.000000e+03
%44 = fadd double %4, -1.000000e+00
%45 = fptosi double %44 to i32
%46 = icmp slt i32 %45, 1
br i1 %43, label %142, label %47
47: ; preds = %42
br i1 %46, label %81, label %48
48: ; preds = %47
%49 = and i32 %45, 1
%50 = icmp eq i32 %45, 1
br i1 %50, label %69, label %51
51: ; preds = %48
%52 = and i32 %45, -2
br label %53
53: ; preds = %53, %51
%54 = phi double [ 1.000000e+00, %51 ], [ %66, %53 ]
%55 = phi double [ %4, %51 ], [ %62, %53 ]
%56 = phi i32 [ 0, %51 ], [ %67, %53 ]
%57 = fadd double %55, -1.000000e+00
%58 = fdiv double %57, %6
%59 = fadd double %58, 1.000000e+00
%60 = fdiv double %58, %59
%61 = fmul double %54, %60
%62 = fadd double %57, -1.000000e+00
%63 = fdiv double %62, %6
%64 = fadd double %63, 1.000000e+00
%65 = fdiv double %63, %64
%66 = fmul double %61, %65
%67 = add i32 %56, 2
%68 = icmp eq i32 %67, %52
br i1 %68, label %69, label %53
69: ; preds = %53, %48
%70 = phi double [ undef, %48 ], [ %62, %53 ]
%71 = phi double [ undef, %48 ], [ %66, %53 ]
%72 = phi double [ 1.000000e+00, %48 ], [ %66, %53 ]
%73 = phi double [ %4, %48 ], [ %62, %53 ]
%74 = icmp eq i32 %49, 0
br i1 %74, label %81, label %75
75: ; preds = %69
%76 = fadd double %73, -1.000000e+00
%77 = fdiv double %76, %6
%78 = fadd double %77, 1.000000e+00
%79 = fdiv double %77, %78
%80 = fmul double %72, %79
br label %81
81: ; preds = %75, %69, %47
%82 = phi double [ %4, %47 ], [ %70, %69 ], [ %76, %75 ]
%83 = phi double [ 1.000000e+00, %47 ], [ %71, %69 ], [ %80, %75 ]
%84 = tail call double @log(double %83)
%85 = fcmp olt double %6, 8.000000e+00
br i1 %85, label %93, label %86
86: ; preds = %81
%87 = tail call i32 @gamln(double %82)
%88 = sitofp i32 %87 to double
%89 = fadd double %84, %88
%90 = tail call i32 @algdiv(double %82, double %6)
%91 = sitofp i32 %90 to double
%92 = fadd double %89, %91
br label %210
93: ; preds = %81, %35
%94 = phi double [ %82, %81 ], [ %4, %35 ]
%95 = phi double [ %84, %81 ], [ 0.000000e+00, %35 ]
%96 = fadd double %6, -1.000000e+00
%97 = fptosi double %96 to i32
%98 = icmp slt i32 %97, 1
br i1 %98, label %129, label %99
99: ; preds = %93
%100 = and i32 %97, 1
%101 = icmp eq i32 %97, 1
br i1 %101, label %118, label %102
102: ; preds = %99
%103 = and i32 %97, -2
br label %104
104: ; preds = %104, %102
%105 = phi double [ 1.000000e+00, %102 ], [ %115, %104 ]
%106 = phi double [ %6, %102 ], [ %112, %104 ]
%107 = phi i32 [ 0, %102 ], [ %116, %104 ]
%108 = fadd double %106, -1.000000e+00
%109 = fadd double %94, %108
%110 = fdiv double %108, %109
%111 = fmul double %105, %110
%112 = fadd double %108, -1.000000e+00
%113 = fadd double %94, %112
%114 = fdiv double %112, %113
%115 = fmul double %111, %114
%116 = add i32 %107, 2
%117 = icmp eq i32 %116, %103
br i1 %117, label %118, label %104
118: ; preds = %104, %99
%119 = phi double [ undef, %99 ], [ %112, %104 ]
%120 = phi double [ undef, %99 ], [ %115, %104 ]
%121 = phi double [ 1.000000e+00, %99 ], [ %115, %104 ]
%122 = phi double [ %6, %99 ], [ %112, %104 ]
%123 = icmp eq i32 %100, 0
br i1 %123, label %129, label %124
124: ; preds = %118
%125 = fadd double %122, -1.000000e+00
%126 = fadd double %94, %125
%127 = fdiv double %125, %126
%128 = fmul double %121, %127
br label %129
129: ; preds = %124, %118, %93
%130 = phi double [ %6, %93 ], [ %119, %118 ], [ %125, %124 ]
%131 = phi double [ 1.000000e+00, %93 ], [ %120, %118 ], [ %128, %124 ]
%132 = tail call double @log(double %131)
%133 = fadd double %95, %132
%134 = tail call i32 @gamln(double %94)
%135 = sitofp i32 %134 to double
%136 = tail call i32 @gamln(double %130)
%137 = sitofp i32 %136 to double
%138 = tail call double @gsumln(double %94, double %130)
%139 = fsub double %137, %138
%140 = fadd double %139, %135
%141 = fadd double %133, %140
br label %210
142: ; preds = %42
br i1 %46, label %176, label %143
143: ; preds = %142
%144 = and i32 %45, 1
%145 = icmp eq i32 %45, 1
br i1 %145, label %164, label %146
146: ; preds = %143
%147 = and i32 %45, -2
br label %148
148: ; preds = %148, %146
%149 = phi double [ 1.000000e+00, %146 ], [ %161, %148 ]
%150 = phi double [ %4, %146 ], [ %157, %148 ]
%151 = phi i32 [ 0, %146 ], [ %162, %148 ]
%152 = fadd double %150, -1.000000e+00
%153 = fdiv double %152, %6
%154 = fadd double %153, 1.000000e+00
%155 = fdiv double %152, %154
%156 = fmul double %149, %155
%157 = fadd double %152, -1.000000e+00
%158 = fdiv double %157, %6
%159 = fadd double %158, 1.000000e+00
%160 = fdiv double %157, %159
%161 = fmul double %156, %160
%162 = add i32 %151, 2
%163 = icmp eq i32 %162, %147
br i1 %163, label %164, label %148
164: ; preds = %148, %143
%165 = phi double [ undef, %143 ], [ %157, %148 ]
%166 = phi double [ undef, %143 ], [ %161, %148 ]
%167 = phi double [ 1.000000e+00, %143 ], [ %161, %148 ]
%168 = phi double [ %4, %143 ], [ %157, %148 ]
%169 = icmp eq i32 %144, 0
br i1 %169, label %176, label %170
170: ; preds = %164
%171 = fadd double %168, -1.000000e+00
%172 = fdiv double %171, %6
%173 = fadd double %172, 1.000000e+00
%174 = fdiv double %171, %173
%175 = fmul double %167, %174
br label %176
176: ; preds = %170, %164, %142
%177 = phi double [ %4, %142 ], [ %165, %164 ], [ %171, %170 ]
%178 = phi double [ 1.000000e+00, %142 ], [ %166, %164 ], [ %175, %170 ]
%179 = tail call double @log(double %178)
%180 = sitofp i32 %45 to double
%181 = tail call double @log(double %6)
%182 = fneg double %180
%183 = tail call double @llvm.fmuladd.f64(double %182, double %181, double %179)
%184 = tail call i32 @gamln(double %177)
%185 = tail call i32 @algdiv(double %177, double %6)
%186 = add nsw i32 %185, %184
%187 = sitofp i32 %186 to double
%188 = fadd double %183, %187
br label %210
189: ; preds = %2
%190 = tail call double @bcorr(double %4, double %6)
%191 = fdiv double %4, %6
%192 = fadd double %191, 1.000000e+00
%193 = fdiv double %191, %192
%194 = fadd double %4, -5.000000e-01
%195 = fneg double %194
%196 = tail call double @log(double %193)
%197 = fmul double %196, %195
%198 = tail call double @alnrel(double %191)
%199 = fmul double %6, %198
%200 = fcmp ugt double %197, %199
%201 = tail call double @log(double %6)
%202 = tail call double @llvm.fmuladd.f64(double %201, double -5.000000e-01, double 0x3FED67F1C864BEB7)
%203 = fadd double %190, %202
br i1 %200, label %204, label %207
204: ; preds = %189
%205 = fsub double %203, %199
%206 = fsub double %205, %197
br label %210
207: ; preds = %189
%208 = fsub double %203, %197
%209 = fsub double %208, %199
br label %210
210: ; preds = %207, %204, %176, %129, %86, %37, %28, %20, %13
%211 = phi double [ %209, %207 ], [ %206, %204 ], [ %188, %176 ], [ %141, %129 ], [ %92, %86 ], [ %41, %37 ], [ %34, %28 ], [ %23, %20 ], [ %19, %13 ]
ret double %211
}