#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 = 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    1917 <bpser+0x787>
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    178e <bpser+0x5fe>
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    16cf <bpser+0x53f>
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    1917 <bpser+0x787>
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    178e <bpser+0x5fe>
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,%eax
mov    %eax,0x2c36(%rip)
cmpl   $0x1,0x2c2f(%rip)
jge    14b0 <bpser+0x320>
jmp    1555 <bpser+0x3c5>
movsd  0xb48(%rip),%xmm0
movsd  %xmm0,0x2bd0(%rip)
movl   $0x1,0x2c06(%rip)
mov    0x2c00(%rip),%eax
cmp    0x2bfe(%rip),%eax
jg     1538 <bpser+0x3a8>
movsd  0x2ba4(%rip),%xmm0
movsd  0xb14(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x2b90(%rip)
movsd  0x2b88(%rip),%xmm0
movsd  0x2b70(%rip),%xmm1
addsd  0x2b78(%rip),%xmm1
divsd  %xmm1,%xmm0
mulsd  0x2b74(%rip),%xmm0
movsd  %xmm0,0x2b6c(%rip)
mov    0x2ba6(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2b9d(%rip)
jmp    14ca <bpser+0x33a>
movsd  0x2b50(%rip),%xmm0
call   1080 <log@plt>
addsd  0x2b6b(%rip),%xmm0
movsd  %xmm0,0x2b63(%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  0x2b39(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2b22(%rip)
movsd  0x2ada(%rip),%xmm0
movsd  0xa4a(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x2ac6(%rip)
movsd  0x2aae(%rip),%xmm0
addsd  0x2ab6(%rip),%xmm0
movsd  %xmm0,0x2aa6(%rip)
movsd  0x2a9e(%rip),%xmm0
movsd  0xa16(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    15f9 <bpser+0x469>
jmp    1621 <bpser+0x491>
lea    0x2a80(%rip),%rdi
call   1030 <gam1@plt>
movaps %xmm0,%xmm1
movsd  0x9f0(%rip),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2a8c(%rip)
jmp    1670 <bpser+0x4e0>
movsd  0x2a4f(%rip),%xmm0
addsd  0x2a57(%rip),%xmm0
movsd  0x9c7(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,0x2a73(%rip)
lea    0x2a6c(%rip),%rdi
call   1030 <gam1@plt>
movaps %xmm0,%xmm1
movsd  0x9a4(%rip),%xmm0
addsd  %xmm1,%xmm0
divsd  0x2a18(%rip),%xmm0
movsd  %xmm0,0x2a38(%rip)
movsd  0x2a50(%rip),%xmm0
call   1070 <exp@plt>
movsd  0x29f3(%rip),%xmm1
mov    -0x10(%rbp),%rax
divsd  (%rax),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
lea    0x29eb(%rip),%rdi
call   1030 <gam1@plt>
movaps %xmm0,%xmm2
movsd  -0x50(%rbp),%xmm0
movsd  0x94e(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm1,%xmm0
divsd  0x29e6(%rip),%xmm0
movsd  %xmm0,0x29a6(%rip)
jmp    178e <bpser+0x5fe>
lea    0x29a2(%rip),%rdi
call   10b0 <gamln1@plt>
movsd  %xmm0,-0x68(%rbp)
lea    0x2991(%rip),%rdi
lea    0x299a(%rip),%rsi
call   1060 <algdiv@plt>
movaps %xmm0,%xmm1
movsd  -0x68(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x29b1(%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  0x2987(%rip),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,0x2970(%rip)
movsd  0x2918(%rip),%xmm0
mov    -0x10(%rbp),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0x2953(%rip),%xmm0
call   1070 <exp@plt>
movaps %xmm0,%xmm1
movsd  -0x58(%rbp),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,0x28e2(%rip)
movsd  0x28da(%rip),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    17ae <bpser+0x61e>
jp     17ae <bpser+0x61e>
jmp    17d0 <bpser+0x640>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
mov    -0x28(%rbp),%rax
movsd  0x84e(%rip),%xmm0
mulsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jb     17e2 <bpser+0x652>
movsd  0x2898(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    1917 <bpser+0x787>
xorps  %xmm0,%xmm0
movsd  %xmm0,0x28ab(%rip)
xorps  %xmm0,%xmm0
movsd  %xmm0,0x28a8(%rip)
movsd  0x800(%rip),%xmm0
movsd  %xmm0,0x2888(%rip)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,0x2890(%rip)
movsd  0x7d8(%rip),%xmm0
addsd  0x2868(%rip),%xmm0
movsd  %xmm0,0x2860(%rip)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
divsd  0x2850(%rip),%xmm0
movsd  0x7c8(%rip),%xmm1
subsd  %xmm0,%xmm1
movsd  0x7bc(%rip),%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mulsd  (%rax),%xmm0
mulsd  0x2820(%rip),%xmm0
movsd  %xmm0,0x2818(%rip)
movsd  0x2810(%rip),%xmm0
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm1
addsd  0x2808(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,0x2824(%rip)
movsd  0x281c(%rip),%xmm0
addsd  0x27f4(%rip),%xmm0
movsd  %xmm0,0x27ec(%rip)
movsd  0x2804(%rip),%xmm0
movaps 0x75d(%rip),%xmm1
pand   %xmm1,%xmm0
ucomisd 0x27e1(%rip),%xmm0
jbe    18da <bpser+0x74a>
jmp    1820 <bpser+0x690>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x27b6(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x70a(%rip),%xmm1
addsd  %xmm1,%xmm0
mulsd  0x276e(%rip),%xmm0
movsd  %xmm0,0x2766(%rip)
movsd  0x275e(%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    1273 <bpser+0xe3>
movsd  (%r14),%xmm1
call   1040 <fifdmax1@plt>
movsd  %xmm0,0x2e83(%rip)
ucomisd 0xdfb(%rip),%xmm0
jae    12bd <bpser+0x12d>
ucomisd 0xde5(%rip),%xmm0
jbe    1336 <bpser+0x1a6>
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,%eax
test   %eax,%eax
jle    143e <bpser+0x2ae>
movsd  0x2e1b(%rip),%xmm2
cmp    $0x1,%eax
jne    13b6 <bpser+0x226>
movsd  0xd92(%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,0x2df5(%rip)
movapd %xmm1,%xmm0
call   1070 <exp@plt>
divsd  (%rbx),%xmm0
jmp    159f <bpser+0x40f>
lea    0x2db4(%rip),%r13
mov    %r13,%rdi
call   10b0 <gamln1@plt>
movsd  %xmm0,(%rsp)
lea    0x2db0(%rip),%rsi
mov    %r13,%rdi
call   1060 <algdiv@plt>
addsd  (%rsp),%xmm0
movsd  %xmm0,0x2dab(%rip)
movsd  (%rbx),%xmm0
movsd  %xmm0,(%rsp)
movsd  (%r12),%xmm0
call   1080 <log@plt>
mulsd  (%rsp),%xmm0
subsd  0x2d8a(%rip),%xmm0
movsd  %xmm0,0x2d8a(%rip)
movsd  0x2d5a(%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,0x2d23(%rip)
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    135d <bpser+0x1cd>
jnp    166e <bpser+0x4de>
movsd  (%rbx),%xmm0
addsd  (%r14),%xmm0
movsd  %xmm0,0x2d12(%rip)
ucomisd 0xc8a(%rip),%xmm0
jbe    1528 <bpser+0x398>
movsd  (%rbx),%xmm0
addsd  (%r14),%xmm0
addsd  0xc83(%rip),%xmm0
movsd  %xmm0,0x2d03(%rip)
lea    0x2cfc(%rip),%rdi
call   1030 <gam1@plt>
addsd  0xc57(%rip),%xmm0
divsd  0x2ccf(%rip),%xmm0
jmp    153c <bpser+0x3ac>
mov    %eax,%ecx
and    $0xfffffffe,%ecx
movsd  0xc3d(%rip),%xmm0
movsd  0xc45(%rip),%xmm3
nopl   0x0(%rax,%rax,1)
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 %250
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 %196
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 %177
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 %250
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 %196
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 i32
store i32 %108, i32* @bpser.m
%109 = load i32, i32* @bpser.m
%110 = icmp slt i32 %109, 1
br i1 %110, label %111, label %112
111: ; preds = %104
br label %135
112: ; preds = %104
store double 1.000000e+00, double* @bpser.c
store i32 1, i32* @bpser.i
br label %113
113: ; preds = %127, %112
%114 = load i32, i32* @bpser.i
%115 = load i32, i32* @bpser.m
%116 = icmp sle i32 %114, %115
br i1 %116, label %117, label %130
117: ; preds = %113
%118 = load double, double* @bpser.b0
%119 = fsub double %118, 1.000000e+00
store double %119, double* @bpser.b0
%120 = load double, double* @bpser.b0
%121 = load double, double* @bpser.a0
%122 = load double, double* @bpser.b0
%123 = fadd double %121, %122
%124 = fdiv double %120, %123
%125 = load double, double* @bpser.c
%126 = fmul double %125, %124
store double %126, double* @bpser.c
br label %127
127: ; preds = %117
%128 = load i32, i32* @bpser.i
%129 = add nsw i32 %128, 1
store i32 %129, i32* @bpser.i
br label %113
130: ; preds = %113
%131 = load double, double* @bpser.c
%132 = call double @log(double %131)
%133 = load double, double* @bpser.u
%134 = fadd double %132, %133
store double %134, double* @bpser.u
br label %135
135: ; preds = %130, %111
%136 = load double*, double** %6
%137 = load double, double* %136
%138 = load double*, double** %8
%139 = load double, double* %138
%140 = call double @log(double %139)
%141 = load double, double* @bpser.u
%142 = fneg double %141
%143 = call double @llvm.fmuladd.f64(double %137, double %140, double %142)
store double %143, double* @bpser.z
%144 = load double, double* @bpser.b0
%145 = fsub double %144, 1.000000e+00
store double %145, double* @bpser.b0
%146 = load double, double* @bpser.a0
%147 = load double, double* @bpser.b0
%148 = fadd double %146, %147
store double %148, double* @bpser.apb
%149 = load double, double* @bpser.apb
%150 = fcmp ogt double %149, 1.000000e+00
br i1 %150, label %151, label %152
151: ; preds = %135
br label %155
152: ; preds = %135
%153 = call double @gam1(double* @bpser.apb)
%154 = fadd double 1.000000e+00, %153
store double %154, double* @bpser.t
br label %164
155: ; preds = %151
%156 = load double, double* @bpser.a0
%157 = load double, double* @bpser.b0
%158 = fadd double %156, %157
%159 = fsub double %158, 1.000000e+00
store double %159, double* @bpser.u
%160 = call double @gam1(double* @bpser.u)
%161 = fadd double 1.000000e+00, %160
%162 = load double, double* @bpser.apb
%163 = fdiv double %161, %162
store double %163, double* @bpser.t
br label %164
164: ; preds = %155, %152
%165 = load double, double* @bpser.z
%166 = call double @exp(double %165)
%167 = load double, double* @bpser.a0
%168 = load double*, double** %6
%169 = load double, double* %168
%170 = fdiv double %167, %169
%171 = fmul double %166, %170
%172 = call double @gam1(double* @bpser.b0)
%173 = fadd double 1.000000e+00, %172
%174 = fmul double %171, %173
%175 = load double, double* @bpser.t
%176 = fdiv double %174, %175
store double %176, double* @bpser.bpser
br label %196
177: ; preds = %48
%178 = call double @gamln1(double* @bpser.a0)
%179 = call double @algdiv(double* @bpser.a0, double* @bpser.b0)
%180 = fadd double %178, %179
store double %180, double* @bpser.u
%181 = load double*, double** %6
%182 = load double, double* %181
%183 = load double*, double** %8
%184 = load double, double* %183
%185 = call double @log(double %184)
%186 = load double, double* @bpser.u
%187 = fneg double %186
%188 = call double @llvm.fmuladd.f64(double %182, double %185, double %187)
store double %188, double* @bpser.z
%189 = load double, double* @bpser.a0
%190 = load double*, double** %6
%191 = load double, double* %190
%192 = fdiv double %189, %191
%193 = load double, double* @bpser.z
%194 = call double @exp(double %193)
%195 = fmul double %192, %194
store double %195, double* @bpser.bpser
br label %196
196: ; preds = %177, %164, %86, %24
%197 = load double, double* @bpser.bpser
%198 = fcmp oeq double %197, 0.000000e+00
br i1 %198, label %206, label %199
199: ; preds = %196
%200 = load double*, double** %6
%201 = load double, double* %200
%202 = load double*, double** %9
%203 = load double, double* %202
%204 = fmul double 1.000000e-01, %203
%205 = fcmp ole double %201, %204
br i1 %205, label %206, label %208
206: ; preds = %199, %196
%207 = load double, double* @bpser.bpser
store double %207, double* %5
br label %250
208: ; preds = %199
store double 0.000000e+00, double* @bpser.n
store double 0.000000e+00, double* @bpser.sum
store double 1.000000e+00, double* @bpser.c
%209 = load double*, double** %9
%210 = load double, double* %209
%211 = load double*, double** %6
%212 = load double, double* %211
%213 = fdiv double %210, %212
store double %213, double* @bpser.tol
br label %214
214: ; preds = %241, %208
%215 = load double, double* @bpser.n
%216 = fadd double %215, 1.000000e+00
store double %216, double* @bpser.n
%217 = load double*, double** %7
%218 = load double, double* %217
%219 = load double, double* @bpser.n
%220 = fdiv double %218, %219
%221 = fsub double 5.000000e-01, %220
%222 = fadd double 5.000000e-01, %221
%223 = load double*, double** %8
%224 = load double, double* %223
%225 = fmul double %222, %224
%226 = load double, double* @bpser.c
%227 = fmul double %226, %225
store double %227, double* @bpser.c
%228 = load double, double* @bpser.c
%229 = load double*, double** %6
%230 = load double, double* %229
%231 = load double, double* @bpser.n
%232 = fadd double %230, %231
%233 = fdiv double %228, %232
store double %233, double* @bpser.w
%234 = load double, double* @bpser.w
%235 = load double, double* @bpser.sum
%236 = fadd double %235, %234
store double %236, double* @bpser.sum
%237 = load double, double* @bpser.w
%238 = call double @llvm.fabs.f64(double %237)
%239 = load double, double* @bpser.tol
%240 = fcmp ogt double %238, %239
br i1 %240, label %241, label %242
241: ; preds = %214
br label %214
242: ; preds = %214
%243 = load double*, double** %6
%244 = load double, double* %243
%245 = load double, double* @bpser.sum
%246 = call double @llvm.fmuladd.f64(double %244, double %245, double 1.000000e+00)
%247 = load double, double* @bpser.bpser
%248 = fmul double %247, %246
store double %248, double* @bpser.bpser
%249 = load double, double* @bpser.bpser
store double %249, double* %5
br label %250
250: ; preds = %242, %206, %61, %13
%251 = load double, double* %5
ret double %251
}

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 %192, 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 %162
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 %147
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 %192, 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 %162
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 i32
%75 = icmp slt i32 %74, 1
br i1 %75, label %113, label %76
76: ; preds = %70
%77 = load double, double* @bpser.a0
%78 = and i32 %74, 1
%79 = icmp eq i32 %74, 1
br i1 %79, label %96, label %80
80: ; preds = %76
%81 = and i32 %74, -2
br label %82
82: ; preds = %82, %80
%83 = phi double [ %72, %80 ], [ %90, %82 ]
%84 = phi double [ 1.000000e+00, %80 ], [ %93, %82 ]
%85 = phi i32 [ 0, %80 ], [ %94, %82 ]
%86 = fadd double %83, -1.000000e+00
%87 = fadd double %86, %77
%88 = fdiv double %86, %87
%89 = fmul double %84, %88
%90 = fadd double %86, -1.000000e+00
%91 = fadd double %90, %77
%92 = fdiv double %90, %91
%93 = fmul double %89, %92
%94 = add i32 %85, 2
%95 = icmp eq i32 %94, %81
br i1 %95, label %96, label %82
96: ; preds = %82, %76
%97 = phi double [ undef, %76 ], [ %90, %82 ]
%98 = phi double [ undef, %76 ], [ %93, %82 ]
%99 = phi double [ %72, %76 ], [ %90, %82 ]
%100 = phi double [ 1.000000e+00, %76 ], [ %93, %82 ]
%101 = icmp eq i32 %78, 0
br i1 %101, label %107, label %102
102: ; preds = %96
%103 = fadd double %99, -1.000000e+00
%104 = fadd double %103, %77
%105 = fdiv double %103, %104
%106 = fmul double %100, %105
br label %107
107: ; preds = %96, %102
%108 = phi double [ %97, %96 ], [ %103, %102 ]
%109 = phi double [ %98, %96 ], [ %106, %102 ]
store double %108, double* @bpser.b0
%110 = tail call double @log(double %109)
%111 = load double, double* @bpser.u
%112 = fadd double %110, %111
store double %112, double* @bpser.u
br label %113
113: ; preds = %70, %107
%114 = load double, double* %0
%115 = load double, double* %2
%116 = tail call double @log(double %115)
%117 = load double, double* @bpser.u
%118 = fneg double %117
%119 = tail call double @llvm.fmuladd.f64(double %114, double %116, double %118)
store double %119, double* @bpser.z
%120 = load double, double* @bpser.b0
%121 = fadd double %120, -1.000000e+00
store double %121, double* @bpser.b0
%122 = load double, double* @bpser.a0
%123 = fadd double %121, %122
store double %123, double* @bpser.apb
%124 = fcmp ogt double %123, 1.000000e+00
br i1 %124, label %128, label %125
125: ; preds = %113
%126 = tail call double @gam1(double* @bpser.apb)
%127 = fadd double %126, 1.000000e+00
br label %134
128: ; preds = %113
%129 = fadd double %123, -1.000000e+00
store double %129, double* @bpser.u
%130 = tail call double @gam1(double* @bpser.u)
%131 = fadd double %130, 1.000000e+00
%132 = load double, double* @bpser.apb
%133 = fdiv double %131, %132
br label %134
134: ; preds = %128, %125
%135 = phi double [ %127, %125 ], [ %133, %128 ]
store double %135, double* @bpser.t
%136 = load double, double* @bpser.z
%137 = tail call double @exp(double %136)
%138 = load double, double* @bpser.a0
%139 = load double, double* %0
%140 = fdiv double %138, %139
%141 = fmul double %137, %140
%142 = tail call double @gam1(double* @bpser.b0)
%143 = fadd double %142, 1.000000e+00
%144 = fmul double %141, %143
%145 = load double, double* @bpser.t
%146 = fdiv double %144, %145
br label %162
147: ; preds = %22
%148 = tail call double @gamln1(double* @bpser.a0)
%149 = tail call double @algdiv(double* @bpser.a0, double* @bpser.b0)
%150 = fadd double %148, %149
store double %150, double* @bpser.u
%151 = load double, double* %0
%152 = load double, double* %2
%153 = tail call double @log(double %152)
%154 = load double, double* @bpser.u
%155 = fneg double %154
%156 = tail call double @llvm.fmuladd.f64(double %151, double %153, double %155)
store double %156, double* @bpser.z
%157 = load double, double* @bpser.a0
%158 = load double, double* %0
%159 = fdiv double %157, %158
%160 = tail call double @exp(double %156)
%161 = fmul double %159, %160
br label %162
162: ; preds = %147, %134, %50, %13
%163 = phi double [ %161, %147 ], [ %146, %134 ], [ %69, %50 ], [ %21, %13 ]
store double %163, double* @bpser.bpser
%164 = fcmp oeq double %163, 0.000000e+00
br i1 %164, label %192, label %165
165: ; preds = %162
%166 = load double, double* %0
%167 = load double, double* %3
%168 = fmul double %167, 1.000000e-01
%169 = fcmp ugt double %166, %168
br i1 %169, label %170, label %192
170: ; preds = %165
%171 = fdiv double %167, %166
%172 = load double, double* %1
%173 = load double, double* %2
br label %174
174: ; preds = %174, %170
%175 = phi double [ %186, %174 ], [ 0.000000e+00, %170 ]
%176 = phi double [ %183, %174 ], [ 1.000000e+00, %170 ]
%177 = phi double [ %178, %174 ], [ 0.000000e+00, %170 ]
%178 = fadd double %177, 1.000000e+00
%179 = fdiv double %172, %178
%180 = fsub double 5.000000e-01, %179
%181 = fadd double %180, 5.000000e-01
%182 = fmul double %173, %181
%183 = fmul double %176, %182
%184 = fadd double %166, %178
%185 = fdiv double %183, %184
%186 = fadd double %175, %185
%187 = tail call double @llvm.fabs.f64(double %185)
%188 = fcmp ogt double %187, %171
br i1 %188, label %174, label %189
189: ; preds = %174
%190 = tail call double @llvm.fmuladd.f64(double %166, double %186, double 1.000000e+00)
%191 = fmul double %163, %190
store double %191, double* @bpser.bpser
br label %192
192: ; preds = %162, %165, %28, %4, %189
%193 = phi double [ %191, %189 ], [ 0.000000e+00, %4 ], [ %31, %28 ], [ %163, %165 ], [ %163, %162 ]
ret double %193
}