#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 algdiv(double *, double *);
double betaln(double *, double *);
double exp(double);
double fabs(double);
double fifdmax1(double, double);
double fifdmin1(double, double);
double gam1(double *);
double gamln1(double *);
double log(double);
double pow(double, double);
double bpser(double *a, double *b, double *x, double *eps) {
  static double bpser, a0, apb, b0, c, n, sum, t, tol, u, w, z;
  static int i, m;
  bpser = 0.0e0;
  if (*x == 0.0e0)
    return bpser;
  a0 = fifdmin1(*a, *b);
  if (a0 < 1.0e0)
    goto S10;
  z = *a * log(*x) - betaln(a, b);
  bpser = exp(z) / *a;
  goto S100;
S10:
  b0 = fifdmax1(*a, *b);
  if (b0 >= 8.0e0)
    goto S90;
  if (b0 > 1.0e0)
    goto S40;
  bpser = pow(*x, *a);
  if (bpser == 0.0e0)
    return bpser;
  apb = *a + *b;
  if (apb > 1.0e0)
    goto S20;
  z = 1.0e0 + gam1(&apb);
  goto S30;
S20:
  u = *a + *b - 1.e0;
  z = (1.0e0 + gam1(&u)) / apb;
S30:
  c = (1.0e0 + gam1(a)) * (1.0e0 + gam1(b)) / z;
  bpser *= (c * (*b / apb));
  goto S100;
S40:
  u = gamln1(&a0);
  m = (long)(b0 - 1.0e0);
  if (m < 1)
    goto S60;
  c = 1.0e0;
  for (i = 1; i <= m; i++) {
    b0 -= 1.0e0;
    c *= (b0 / (a0 + b0));
  }
  u = log(c) + u;
S60:
  z = *a * log(*x) - u;
  b0 -= 1.0e0;
  apb = a0 + b0;
  if (apb > 1.0e0)
    goto S70;
  t = 1.0e0 + gam1(&apb);
  goto S80;
S70:
  u = a0 + b0 - 1.e0;
  t = (1.0e0 + gam1(&u)) / apb;
S80:
  bpser = exp(z) * (a0 / *a) * (1.0e0 + gam1(&b0)) / t;
  goto S100;
S90:
  u = gamln1(&a0) + algdiv(&a0, &b0);
  z = *a * log(*x) - u;
  bpser = a0 / *a * exp(z);
S100:
  if (bpser == 0.0e0 || *a <= 0.1e0 * *eps)
    return bpser;
  sum = n = 0.0e0;
  c = 1.0e0;
  tol = *eps / *a;
S110:
  n += 1.0e0;
  c *= ((0.5e0 + (0.5e0 - *b / n)) * *x);
  w = c / (*a + n);
  sum += w;
  if (fabs(w) > tol)
    goto S110;
  bpser *= (1.0e0 + *a * sum);
  return bpser;
}


x86 assembly (clang, -O0):
<bpser>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x2ebd(%rip)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11e0 <bpser+0x50>
jp     11e0 <bpser+0x50>
movsd  0x2e9a(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1918 <bpser+0x788>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
call   1050 <fifdmin1@plt>
movsd  %xmm0,0x2e7b(%rip)
movsd  0xdfb(%rip),%xmm0
ucomisd 0x2e6b(%rip),%xmm0
jbe    1218 <bpser+0x88>
jmp    129a <bpser+0x10a>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
call   1080 <log@plt>
movsd  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x18(%rbp),%rsi
call   10a0 <betaln@plt>
movsd  -0x38(%rbp),%xmm2
movaps %xmm0,%xmm1
movsd  -0x30(%rbp),%xmm0
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2e50(%rip)
movsd  0x2e48(%rip),%xmm0
call   1070 <exp@plt>
mov    -0x10(%rbp),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,0x2ddb(%rip)
jmp    178f <bpser+0x5ff>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
call   1040 <fifdmax1@plt>
movsd  %xmm0,0x2dd1(%rip)
movsd  0x2dc9(%rip),%xmm0
movsd  0xd41(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     12d6 <bpser+0x146>
jmp    16d0 <bpser+0x540>
movsd  0x2daa(%rip),%xmm0
movsd  0xd1a(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    12f5 <bpser+0x165>
jmp    146c <bpser+0x2dc>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
call   1090 <pow@plt>
movsd  %xmm0,0x2d5e(%rip)
movsd  0x2d56(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    133f <bpser+0x1af>
jp     133f <bpser+0x1af>
movsd  0x2d3b(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1918 <bpser+0x788>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,0x2d29(%rip)
movsd  0x2d21(%rip),%xmm0
movsd  0xc99(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1376 <bpser+0x1e6>
jmp    139e <bpser+0x20e>
lea    0x2d03(%rip),%rdi
call   1030 <gam1@plt>
movaps %xmm0,%xmm1
movsd  0xc73(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2d2f(%rip)
jmp    13ed <bpser+0x25d>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
addsd  (%rax),%xmm0
movsd  0xc4a(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x2cf6(%rip)
lea    0x2cef(%rip),%rdi
call   1030 <gam1@plt>
movaps %xmm0,%xmm1
movsd  0xc27(%rip),%xmm0
addsd  %xmm1,%xmm0
divsd  0x2c9b(%rip),%xmm0
movsd  %xmm0,0x2cdb(%rip)
mov    -0x10(%rbp),%rdi
call   1030 <gam1@plt>
movaps %xmm0,%xmm1
movsd  0xbff(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rdi
call   1030 <gam1@plt>
movaps %xmm0,%xmm2
movsd  -0x40(%rbp),%xmm0
movsd  0xbdd(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  0x2c95(%rip),%xmm0
movsd  %xmm0,0x2c55(%rip)
movsd  0x2c4d(%rip),%xmm0
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm1
divsd  0x2c2d(%rip),%xmm1
mulsd  %xmm1,%xmm0
mulsd  0x2c11(%rip),%xmm0
movsd  %xmm0,0x2c09(%rip)
jmp    178f <bpser+0x5ff>
lea    0x2c05(%rip),%rdi
call   10b0 <gamln1@plt>
movsd  %xmm0,0x2c38(%rip)
movsd  0x2c00(%rip),%xmm0
movsd  0xb70(%rip),%xmm1
subsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %eax,0x2c35(%rip)
cmpl   $0x1,0x2c2e(%rip)
jge    14b1 <bpser+0x321>
jmp    1556 <bpser+0x3c6>
movsd  0xb47(%rip),%xmm0
movsd  %xmm0,0x2bcf(%rip)
movl   $0x1,0x2c05(%rip)
mov    0x2bff(%rip),%eax
cmp    0x2bfd(%rip),%eax
jg     1539 <bpser+0x3a9>
movsd  0x2ba3(%rip),%xmm0
movsd  0xb13(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x2b8f(%rip)
movsd  0x2b87(%rip),%xmm0
movsd  0x2b6f(%rip),%xmm1
addsd  0x2b77(%rip),%xmm1
divsd  %xmm1,%xmm0
mulsd  0x2b73(%rip),%xmm0
movsd  %xmm0,0x2b6b(%rip)
mov    0x2ba5(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2b9c(%rip)
jmp    14cb <bpser+0x33b>
movsd  0x2b4f(%rip),%xmm0
call   1080 <log@plt>
addsd  0x2b6a(%rip),%xmm0
movsd  %xmm0,0x2b62(%rip)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
call   1080 <log@plt>
movaps %xmm0,%xmm2
movsd  -0x48(%rbp),%xmm0
movsd  0x2b38(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2b21(%rip)
movsd  0x2ad9(%rip),%xmm0
movsd  0xa49(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x2ac5(%rip)
movsd  0x2aad(%rip),%xmm0
addsd  0x2ab5(%rip),%xmm0
movsd  %xmm0,0x2aa5(%rip)
movsd  0x2a9d(%rip),%xmm0
movsd  0xa15(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    15fa <bpser+0x46a>
jmp    1622 <bpser+0x492>
lea    0x2a7f(%rip),%rdi
call   1030 <gam1@plt>
movaps %xmm0,%xmm1
movsd  0x9ef(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2a8b(%rip)
jmp    1671 <bpser+0x4e1>
movsd  0x2a4e(%rip),%xmm0
addsd  0x2a56(%rip),%xmm0
movsd  0x9c6(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x2a72(%rip)
lea    0x2a6b(%rip),%rdi
call   1030 <gam1@plt>
movaps %xmm0,%xmm1
movsd  0x9a3(%rip),%xmm0
addsd  %xmm1,%xmm0
divsd  0x2a17(%rip),%xmm0
movsd  %xmm0,0x2a37(%rip)
movsd  0x2a4f(%rip),%xmm0
call   1070 <exp@plt>
movsd  0x29f2(%rip),%xmm1
mov    -0x10(%rbp),%rax
divsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
lea    0x29ea(%rip),%rdi
call   1030 <gam1@plt>
movaps %xmm0,%xmm2
movsd  -0x50(%rbp),%xmm0
movsd  0x94d(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  0x29e5(%rip),%xmm0
movsd  %xmm0,0x29a5(%rip)
jmp    178f <bpser+0x5ff>
lea    0x29a1(%rip),%rdi
call   10b0 <gamln1@plt>
movsd  %xmm0,-0x68(%rbp)
lea    0x2990(%rip),%rdi
lea    0x2999(%rip),%rsi
call   1060 <algdiv@plt>
movaps %xmm0,%xmm1
movsd  -0x68(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x29b0(%rip)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
call   1080 <log@plt>
movaps %xmm0,%xmm2
movsd  -0x60(%rbp),%xmm0
movsd  0x2986(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x296f(%rip)
movsd  0x2917(%rip),%xmm0
mov    -0x10(%rbp),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0x2952(%rip),%xmm0
call   1070 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x58(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x28e1(%rip)
movsd  0x28d9(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    17af <bpser+0x61f>
jp     17af <bpser+0x61f>
jmp    17d1 <bpser+0x641>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x28(%rbp),%rax
movsd  0x84d(%rip),%xmm0
mulsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jb     17e3 <bpser+0x653>
movsd  0x2897(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1918 <bpser+0x788>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x28aa(%rip)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x28a7(%rip)
movsd  0x7ff(%rip),%xmm0
movsd  %xmm0,0x2887(%rip)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,0x288f(%rip)
movsd  0x7d7(%rip),%xmm0
addsd  0x2867(%rip),%xmm0
movsd  %xmm0,0x285f(%rip)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
divsd  0x284f(%rip),%xmm0
movsd  0x7c7(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0x7bb(%rip),%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mulsd  (%rax),%xmm0
mulsd  0x281f(%rip),%xmm0
movsd  %xmm0,0x2817(%rip)
movsd  0x280f(%rip),%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
addsd  0x2807(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x2823(%rip)
movsd  0x281b(%rip),%xmm0
addsd  0x27f3(%rip),%xmm0
movsd  %xmm0,0x27eb(%rip)
movsd  0x2803(%rip),%xmm0
movaps 0x75c(%rip),%xmm1
pand   %xmm1,%xmm0
ucomisd 0x27e0(%rip),%xmm0
jbe    18db <bpser+0x74b>
jmp    1821 <bpser+0x691>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x27b5(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x709(%rip),%xmm1
addsd  %xmm1,%xmm0
mulsd  0x276d(%rip),%xmm0
movsd  %xmm0,0x2765(%rip)
movsd  0x275d(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bpser>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x10,%rsp
movq   $0x0,0x2ec8(%rip)
movsd  (%rdx),%xmm1
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
jne    11bc <bpser+0x2c>
jnp    166e <bpser+0x4de>
mov    %rcx,%r15
mov    %rdx,%r12
mov    %rsi,%r14
mov    %rdi,%rbx
movsd  (%rdi),%xmm0
movsd  (%rsi),%xmm1
call   1050 <fifdmin1@plt>
movsd  %xmm0,0x2e9b(%rip)
movsd  0xe1b(%rip),%xmm1
ucomisd %xmm0,%xmm1
movsd  (%rbx),%xmm0
jbe    1274 <bpser+0xe4>
movsd  (%r14),%xmm1
call   1040 <fifdmax1@plt>
movsd  %xmm0,0x2e83(%rip)
ucomisd 0xdfb(%rip),%xmm0
jae    12be <bpser+0x12e>
ucomisd 0xde5(%rip),%xmm0
jbe    1337 <bpser+0x1a7>
lea    0x2e50(%rip),%rdi
call   10b0 <gamln1@plt>
movsd  %xmm0,0x2e63(%rip)
movsd  0x2e4b(%rip),%xmm1
movsd  0xdcb(%rip),%xmm0
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
test   %eax,%eax
jle    143e <bpser+0x2ae>
movsd  0x2e1a(%rip),%xmm2
cmp    $0x1,%eax
jne    13b7 <bpser+0x227>
movsd  0xd91(%rip),%xmm0
jmp    1405 <bpser+0x275>
movsd  %xmm0,(%rsp)
movsd  (%r12),%xmm0
call   1080 <log@plt>
movsd  %xmm0,0x8(%rsp)
mov    %rbx,%rdi
mov    %r14,%rsi
call   10a0 <betaln@plt>
movsd  (%rsp),%xmm1
mulsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x2df4(%rip)
movapd %xmm1,%xmm0
call   1070 <exp@plt>
divsd  (%rbx),%xmm0
jmp    159f <bpser+0x40f>
lea    0x2db3(%rip),%r13
mov    %r13,%rdi
call   10b0 <gamln1@plt>
movsd  %xmm0,(%rsp)
lea    0x2daf(%rip),%rsi
mov    %r13,%rdi
call   1060 <algdiv@plt>
addsd  (%rsp),%xmm0
movsd  %xmm0,0x2daa(%rip)
movsd  (%rbx),%xmm0
movsd  %xmm0,(%rsp)
movsd  (%r12),%xmm0
call   1080 <log@plt>
mulsd  (%rsp),%xmm0
subsd  0x2d89(%rip),%xmm0
movsd  %xmm0,0x2d89(%rip)
movsd  0x2d59(%rip),%xmm1
divsd  (%rbx),%xmm1
movsd  %xmm1,(%rsp)
call   1070 <exp@plt>
mulsd  (%rsp),%xmm0
jmp    159f <bpser+0x40f>
movsd  (%r12),%xmm0
movsd  (%rbx),%xmm1
call   1090 <pow@plt>
movsd  %xmm0,0x2d22(%rip)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    135e <bpser+0x1ce>
jnp    166e <bpser+0x4de>
movsd  (%rbx),%xmm0
addsd  (%r14),%xmm0
movsd  %xmm0,0x2d11(%rip)
ucomisd 0xc89(%rip),%xmm0
jbe    1528 <bpser+0x398>
movsd  (%rbx),%xmm0
addsd  (%r14),%xmm0
addsd  0xc82(%rip),%xmm0
movsd  %xmm0,0x2d02(%rip)
lea    0x2cfb(%rip),%rdi
call   1030 <gam1@plt>
addsd  0xc56(%rip),%xmm0
divsd  0x2cce(%rip),%xmm0
jmp    153c <bpser+0x3ac>
mov    %eax,%ecx
and    $0xfffffffe,%ecx
movsd  0xc3c(%rip),%xmm0
movsd  0xc44(%rip),%xmm3
nopl   0x0(%rax)
addsd  %xmm3,%xmm1
movapd %xmm1,%xmm4
addsd  %xmm2,%xmm4
movapd %xmm1,%xmm5
divsd  %xmm4,%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm3,%xmm1
movapd %xmm1,%xmm4
addsd  %xmm2,%xmm4
movapd %xmm1,%xmm0
divsd  %xmm4,%xmm0
mulsd  %xmm5,%xmm0
add    $0xfffffffe,%ecx
jne    13d0 <bpser+0x240>
test   $0x1,%al
je     1421 <bpser+0x291>
addsd  0xbff(%rip),%xmm1
addsd  %xmm1,%xmm2
movapd %xmm1,%xmm3
divsd  %xmm2,%xmm3
mulsd  %xmm3,%xmm0
movsd  %xmm1,0x2c5f(%rip)
call   1080 <log@plt>
addsd  0x2c62(%rip),%xmm0
movsd  %xmm0,0x2c5a(%rip)
movsd  (%rbx),%xmm0
movsd  %xmm0,(%rsp)
movsd  (%r12),%xmm0
call   1080 <log@plt>
mulsd  (%rsp),%xmm0
subsd  0x2c39(%rip),%xmm0
movsd  0x2c21(%rip),%xmm1
addsd  0xba1(%rip),%xmm1
movsd  %xmm0,0x2c29(%rip)
movsd  %xmm1,0x2c09(%rip)
addsd  0x2bf1(%rip),%xmm1
movsd  %xmm1,0x2bf1(%rip)
ucomisd 0xb69(%rip),%xmm1
jbe    14c7 <bpser+0x337>
addsd  0xb6f(%rip),%xmm1
movsd  %xmm1,0x2bef(%rip)
lea    0x2be8(%rip),%rdi
call   1030 <gam1@plt>
addsd  0xb43(%rip),%xmm0
divsd  0x2bbb(%rip),%xmm0
jmp    14db <bpser+0x34b>
lea    0x2bb2(%rip),%rdi
call   1030 <gam1@plt>
addsd  0xb25(%rip),%xmm0
movsd  %xmm0,0x2bad(%rip)
movsd  0x2bb5(%rip),%xmm0
call   1070 <exp@plt>
movsd  0x2b80(%rip),%xmm1
divsd  (%rbx),%xmm1
mulsd  %xmm0,%xmm1
movsd  %xmm1,(%rsp)
lea    0x2b7c(%rip),%rdi
call   1030 <gam1@plt>
addsd  0xae7(%rip),%xmm0
mulsd  (%rsp),%xmm0
divsd  0x2b6a(%rip),%xmm0
jmp    159f <bpser+0x40f>
lea    0x2b51(%rip),%rdi
call   1030 <gam1@plt>
addsd  0xac4(%rip),%xmm0
movsd  %xmm0,0x2b5c(%rip)
mov    %rbx,%rdi
call   1030 <gam1@plt>
addsd  0xaac(%rip),%xmm0
movsd  %xmm0,(%rsp)
mov    %r14,%rdi
call   1030 <gam1@plt>
movapd %xmm0,%xmm1
addsd  0xa93(%rip),%xmm1
mulsd  (%rsp),%xmm1
movhpd (%r14),%xmm1
movsd  0x2b21(%rip),%xmm0
movhpd 0x2af9(%rip),%xmm0
divpd  %xmm0,%xmm1
movapd %xmm1,%xmm0
unpckhpd %xmm1,%xmm0
mulsd  %xmm1,%xmm0
mulsd  0x2ad1(%rip),%xmm0
movsd  %xmm0,0x2ac9(%rip)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    15b7 <bpser+0x427>
jnp    166e <bpser+0x4de>
movsd  (%rbx),%xmm12
movsd  (%r15),%xmm9
movsd  0xa4f(%rip),%xmm2
mulsd  %xmm9,%xmm2
ucomisd %xmm12,%xmm2
jae    166e <bpser+0x4de>
divsd  %xmm12,%xmm9
movsd  (%r14),%xmm10
movsd  (%r12),%xmm11
xorpd  %xmm3,%xmm3
movsd  0xa2b(%rip),%xmm5
movapd 0xa32(%rip),%xmm8
movsd  0x9fa(%rip),%xmm1
movapd %xmm1,%xmm7
xorpd  %xmm2,%xmm2
xchg   %ax,%ax
addsd  %xmm1,%xmm2
movapd %xmm10,%xmm4
divsd  %xmm2,%xmm4
movapd %xmm5,%xmm6
subsd  %xmm4,%xmm6
addsd  %xmm5,%xmm6
mulsd  %xmm11,%xmm6
mulsd  %xmm6,%xmm7
movapd %xmm12,%xmm4
addsd  %xmm2,%xmm4
movapd %xmm7,%xmm6
divsd  %xmm4,%xmm6
addsd  %xmm6,%xmm3
andpd  %xmm8,%xmm6
ucomisd %xmm9,%xmm6
ja     1610 <bpser+0x480>
mulsd  %xmm3,%xmm12
addsd  0x99f(%rip),%xmm12
mulsd  %xmm12,%xmm0
movsd  %xmm0,0x2a02(%rip)
add    $0x10,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret

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

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