#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 const cdflib_beta_rcomp1(int *, double const *, double const *,
                                double const *, double const *);
scalar_t__ cdflib_exparg(int const *);
double exp(double);
scalar_t__ fabs(scalar_t__);
double cdflib_beta_up(const double *a, const double *b, const double *x,
                      const double *y, const int *n, const double *eps) {
  static const int K1 = 1;
  static const int K2 = 0;
  double bup, ap1, apb, d, l, r, t, w;
  int i, k, kp1, mu, nm1;
  apb = *a + *b;
  ap1 = *a + 1.0e0;
  mu = 0;
  d = 1.0e0;
  if (*n == 1 || *a < 1.0e0) {
    goto S10;
  }
  if (apb < 1.1e0 * ap1) {
    goto S10;
  }
  mu = (int)fabs(cdflib_exparg(&K1));
  k = (int)cdflib_exparg(&K2);
  if (k < mu) {
    mu = k;
  }
  t = mu;
  d = exp(-t);
S10:
  bup = cdflib_beta_rcomp1(&mu, a, b, x, y) / *a;
  if (*n == 1 || bup == 0.0e0) {
    return bup;
  }
  nm1 = *n - 1;
  w = d;
  k = 0;
  if (*b <= 1.0e0) {
    goto S50;
  }
  if (*y > 1.e-4) {
    goto S20;
  }
  k = nm1;
  goto S30;
S20:
  r = (*b - 1.0e0) * *x / *y - *a;
  if (r < 1.0e0) {
    goto S50;
  }
  t = (double)nm1;
  k = nm1;
  if (r < t) {
    k = (int)r;
  }
S30:
  for (i = 1; i <= k; i++) {
    l = i - 1;
    d = (apb + l) / (ap1 + l) * *x * d;
    w = w + d;
  }
  if (k == nm1) {
    goto S70;
  }
S50:
  kp1 = k + 1;
  for (i = kp1; i <= nm1; i++) {
    l = i - 1;
    d = (apb + l) / (ap1 + l) * *x * d;
    w = w + d;
    if (d <= *eps * w) {
      goto S70;
    }
  }
S70:
  bup *= w;
  return bup;
}


x86 assembly (clang, -O0):
<cdflib_beta_up>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x18(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xe7c(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x88(%rbp)
movsd  0xe61(%rip),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x30(%rbp),%rax
cmpl   $0x1,(%rax)
je     11c7 <cdflib_beta_up+0x87>
mov    -0x10(%rbp),%rax
movsd  0xe43(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    11cc <cdflib_beta_up+0x8c>
jmp    1261 <cdflib_beta_up+0x121>
movsd  -0x50(%rbp),%xmm1
movsd  0xe2f(%rip),%xmm0
mulsd  -0x48(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    11ed <cdflib_beta_up+0xad>
jmp    1261 <cdflib_beta_up+0x121>
lea    0xe24(%rip),%rdi
call   1060 <cdflib_exparg@plt>
mov    %rax,%rdi
call   1030 <fabs@plt>
mov    %eax,-0x88(%rbp)
lea    0xe0e(%rip),%rdi
call   1060 <cdflib_exparg@plt>
mov    %eax,-0x80(%rbp)
mov    -0x80(%rbp),%eax
cmp    -0x88(%rbp),%eax
jge    122e <cdflib_beta_up+0xee>
mov    -0x80(%rbp),%eax
mov    %eax,-0x88(%rbp)
cvtsi2sdl -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1040 <exp@plt>
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x88(%rbp),%rdi
call   1050 <cdflib_beta_rcomp1@plt>
mov    -0x10(%rbp),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
cmpl   $0x1,(%rax)
je     12af <cdflib_beta_up+0x16f>
movsd  -0x40(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    12be <cdflib_beta_up+0x17e>
jp     12be <cdflib_beta_up+0x17e>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14e6 <cdflib_beta_up+0x3a6>
mov    -0x30(%rbp),%rax
mov    (%rax),%eax
sub    $0x1,%eax
mov    %eax,-0x8c(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movl   $0x0,-0x80(%rbp)
mov    -0x18(%rbp),%rax
movsd  0xd16(%rip),%xmm0
ucomisd (%rax),%xmm0
jb     12f9 <cdflib_beta_up+0x1b9>
jmp    1428 <cdflib_beta_up+0x2e8>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xd07(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1318 <cdflib_beta_up+0x1d8>
jmp    1326 <cdflib_beta_up+0x1e6>
mov    -0x8c(%rbp),%eax
mov    %eax,-0x80(%rbp)
jmp    13a6 <cdflib_beta_up+0x266>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0xcca(%rip),%xmm1
subsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mulsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
divsd  (%rax),%xmm0
mov    -0x10(%rbp),%rax
subsd  (%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  0xca1(%rip),%xmm0
ucomisd -0x68(%rbp),%xmm0
jbe    136f <cdflib_beta_up+0x22f>
jmp    1428 <cdflib_beta_up+0x2e8>
cvtsi2sdl -0x8c(%rbp),%xmm0
ff
movsd  %xmm0,-0x70(%rbp)
mov    -0x8c(%rbp),%eax
mov    %eax,-0x80(%rbp)
movsd  -0x68(%rbp),%xmm1
movsd  -0x70(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jbe    13a1 <cdflib_beta_up+0x261>
cvttsd2si -0x68(%rbp),%eax
mov    %eax,-0x80(%rbp)
jmp    13a6 <cdflib_beta_up+0x266>
movl   $0x1,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
cmp    -0x80(%rbp),%eax
jg     140f <cdflib_beta_up+0x2cf>
mov    -0x7c(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
addsd  -0x60(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mulsd  (%rax),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x7c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7c(%rbp)
jmp    13ad <cdflib_beta_up+0x26d>
mov    -0x80(%rbp),%eax
cmp    -0x8c(%rbp),%eax
jne    1423 <cdflib_beta_up+0x2e3>
jmp    14cd <cdflib_beta_up+0x38d>
jmp    1428 <cdflib_beta_up+0x2e8>
mov    -0x80(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
cmp    -0x8c(%rbp),%eax
jg     14c8 <cdflib_beta_up+0x388>
mov    -0x7c(%rbp),%eax
sub    $0x1,%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x50(%rbp),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm1
addsd  -0x60(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mulsd  (%rax),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x58(%rbp),%xmm1
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x78(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     14b5 <cdflib_beta_up+0x375>
jmp    14cd <cdflib_beta_up+0x38d>
jmp    14ba <cdflib_beta_up+0x37a>
mov    -0x7c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x7c(%rbp)
jmp    143d <cdflib_beta_up+0x2fd>
jmp    14cd <cdflib_beta_up+0x38d>
movsd  -0x78(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cdflib_beta_up>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %r9,%r15
mov    %r8,%r13
mov    %rcx,%rbx
mov    %rdx,%r12
mov    %rsi,%r14
mov    %rdi,%rbp
movsd  (%rdi),%xmm3
movsd  (%rsi),%xmm1
addsd  %xmm3,%xmm1
movsd  0xe8c(%rip),%xmm0
movapd %xmm3,%xmm2
addsd  %xmm0,%xmm2
movl   $0x0,0xc(%rsp)
cmpl   $0x1,(%r8)
movsd  %xmm1,0x20(%rsp)
movsd  %xmm2,0x18(%rsp)
je     1209 <cdflib_beta_up+0xc9>
movsd  0xe62(%rip),%xmm0
ucomisd %xmm3,%xmm0
ja     1209 <cdflib_beta_up+0xc9>
movsd  0xe5c(%rip),%xmm3
mulsd  %xmm2,%xmm3
ucomisd %xmm1,%xmm3
ja     1209 <cdflib_beta_up+0xc9>
mov    %r15,0x10(%rsp)
lea    0xe6e(%rip),%rdi
call   1060 <cdflib_exparg@plt>
mov    %rax,%rdi
call   1030 <fabs@plt>
mov    %rax,%r15
mov    %r15d,0xc(%rsp)
lea    0xe56(%rip),%rdi
call   1060 <cdflib_exparg@plt>
cmp    %eax,%r15d
jle    11ef <cdflib_beta_up+0xaf>
mov    %eax,0xc(%rsp)
mov    %eax,%r15d
xorps  %xmm0,%xmm0
cvtsi2sd %r15d,%xmm0
xorpd  0xe21(%rip),%xmm0
call   1040 <exp@plt>
mov    0x10(%rsp),%r15
movsd  %xmm0,0x10(%rsp)
lea    0xc(%rsp),%rdi
mov    %rbp,%rsi
mov    %r14,%rdx
mov    %r12,%rcx
mov    %rbx,%r8
call   1050 <cdflib_beta_rcomp1@plt>
movsd  0x0(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    0x0(%r13),%eax
cmp    $0x1,%eax
je     13df <cdflib_beta_up+0x29f>
xorpd  %xmm2,%xmm2
ucomisd %xmm2,%xmm0
jne    124b <cdflib_beta_up+0x10b>
jnp    13df <cdflib_beta_up+0x29f>
add    $0xffffffff,%eax
movsd  (%r14),%xmm2
movsd  0xda5(%rip),%xmm3
ucomisd %xmm2,%xmm3
jae    12aa <cdflib_beta_up+0x16a>
movsd  (%rbx),%xmm4
ucomisd 0xda3(%rip),%xmm4
mov    %eax,%ecx
movsd  0x20(%rsp),%xmm5
movsd  0x18(%rsp),%xmm6
movsd  0x10(%rsp),%xmm7
jbe    12da <cdflib_beta_up+0x19a>
addsd  0xd8d(%rip),%xmm2
mulsd  (%r12),%xmm2
divsd  %xmm4,%xmm2
subsd  %xmm1,%xmm2
ucomisd %xmm2,%xmm3
jbe    12c7 <cdflib_beta_up+0x187>
movapd %xmm7,%xmm1
xor    %ecx,%ecx
jmp    1394 <cdflib_beta_up+0x254>
movsd  0x10(%rsp),%xmm7
movapd %xmm7,%xmm1
xor    %ecx,%ecx
movsd  0x20(%rsp),%xmm5
movsd  0x18(%rsp),%xmm6
jmp    1394 <cdflib_beta_up+0x254>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
ucomisd %xmm2,%xmm1
mov    %eax,%ecx
jbe    12da <cdflib_beta_up+0x19a>
cvttsd2si %xmm2,%ecx
test   %ecx,%ecx
jle    12fb <cdflib_beta_up+0x1bb>
movsd  (%r12),%xmm1
cmp    $0x1,%ecx
jne    1304 <cdflib_beta_up+0x1c4>
xorpd  %xmm3,%xmm3
movapd %xmm7,%xmm2
test   $0x1,%cl
jne    136c <cdflib_beta_up+0x22c>
jmp    1388 <cdflib_beta_up+0x248>
movapd %xmm7,%xmm2
jmp    1388 <cdflib_beta_up+0x248>
mov    %ecx,%edx
and    $0xfffffffe,%edx
xor    %esi,%esi
movapd %xmm7,%xmm2
nop
lea    0x1(%rsi),%edi
xorps  %xmm3,%xmm3
cvtsi2sd %esi,%xmm3
movapd %xmm5,%xmm4
addsd  %xmm3,%xmm4
addsd  %xmm6,%xmm3
divsd  %xmm3,%xmm4
mulsd  %xmm1,%xmm4
mulsd  %xmm2,%xmm4
addsd  %xmm4,%xmm7
xorps  %xmm3,%xmm3
cvtsi2sd %edi,%xmm3
movapd %xmm5,%xmm2
addsd  %xmm3,%xmm2
addsd  %xmm6,%xmm3
divsd  %xmm3,%xmm2
mulsd  %xmm1,%xmm2
mulsd  %xmm4,%xmm2
addsd  %xmm2,%xmm7
add    $0x2,%esi
cmp    %esi,%edx
jne    1310 <cdflib_beta_up+0x1d0>
xorps  %xmm3,%xmm3
cvtsi2sd %esi,%xmm3
test   $0x1,%cl
je     1388 <cdflib_beta_up+0x248>
movapd %xmm5,%xmm4
addsd  %xmm3,%xmm4
addsd  %xmm6,%xmm3
divsd  %xmm3,%xmm4
mulsd  %xmm1,%xmm4
mulsd  %xmm4,%xmm2
addsd  %xmm2,%xmm7
movapd %xmm7,%xmm1
movapd %xmm2,%xmm7
cmp    %eax,%ecx
je     13db <cdflib_beta_up+0x29b>
cmp    %eax,%ecx
cmovg  %ecx,%eax
nopl   0x0(%rax)
cmp    %ecx,%eax
je     13db <cdflib_beta_up+0x29b>
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
add    $0x1,%ecx
movapd %xmm5,%xmm3
addsd  %xmm2,%xmm3
addsd  %xmm6,%xmm2
divsd  %xmm2,%xmm3
mulsd  (%r12),%xmm3
mulsd  %xmm3,%xmm7
addsd  %xmm7,%xmm1
movsd  (%r15),%xmm2
mulsd  %xmm1,%xmm2
ucomisd %xmm7,%xmm2
jb     13a0 <cdflib_beta_up+0x260>
mulsd  %xmm1,%xmm0
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@cdflib_beta_up.K1 = internal constant i32 1
@cdflib_beta_up.K2 = internal constant i32 0
define double @cdflib_beta_up(double* %0, double* %1, double* %2, double* %3, i32* nocapture %4, double* nocapture %5) {
%7 = alloca i32
%8 = bitcast i32* %7 to i8*
%9 = load double, double* %0
%10 = load double, double* %1
%11 = fadd double %9, %10
%12 = fadd double %9, 1.000000e+00
store i32 0, i32* %7
%13 = load i32, i32* %4
%14 = icmp eq i32 %13, 1
br i1 %14, label %33, label %15
15: ; preds = %6
%16 = fcmp olt double %9, 1.000000e+00
%17 = fmul double %12, 1.100000e+00
%18 = fcmp olt double %11, %17
%19 = select i1 %16, i1 true, i1 %18
br i1 %19, label %33, label %20
20: ; preds = %15
%21 = tail call i64 @cdflib_exparg(i32* @cdflib_beta_up.K1)
%22 = tail call i64 @fabs(i64 %21)
%23 = trunc i64 %22 to i32
store i32 %23, i32* %7
%24 = tail call i64 @cdflib_exparg(i32* @cdflib_beta_up.K2)
%25 = trunc i64 %24 to i32
%26 = icmp sgt i32 %23, %25
br i1 %26, label %27, label %28
27: ; preds = %20
store i32 %25, i32* %7
br label %28
28: ; preds = %27, %20
%29 = phi i32 [ %25, %27 ], [ %23, %20 ]
%30 = sitofp i32 %29 to double
%31 = fneg double %30
%32 = tail call double @exp(double %31)
br label %33
33: ; preds = %6, %15, %28
%34 = phi double [ 1.000000e+00, %6 ], [ 1.000000e+00, %15 ], [ %32, %28 ]
%35 = call double @cdflib_beta_rcomp1(i32* %7, double* %0, double* %1, double* %2, double* %3)
%36 = load double, double* %0
%37 = fdiv double %35, %36
%38 = load i32, i32* %4
%39 = icmp eq i32 %38, 1
%40 = fcmp oeq double %37, 0.000000e+00
%41 = select i1 %39, i1 true, i1 %40
br i1 %41, label %140, label %42
42: ; preds = %33
%43 = add i32 %38, -1
%44 = load double, double* %1
%45 = fcmp ugt double %44, 1.000000e+00
br i1 %45, label %46, label %114
46: ; preds = %42
%47 = load double, double* %3
%48 = fcmp ogt double %47, 1.000000e-04
br i1 %48, label %49, label %61
49: ; preds = %46
%50 = fadd double %44, -1.000000e+00
%51 = load double, double* %2
%52 = fmul double %50, %51
%53 = fdiv double %52, %47
%54 = fsub double %53, %36
%55 = fcmp olt double %54, 1.000000e+00
br i1 %55, label %114, label %56
56: ; preds = %49
%57 = sitofp i32 %43 to double
%58 = fcmp olt double %54, %57
br i1 %58, label %59, label %61
59: ; preds = %56
%60 = fptosi double %54 to i32
br label %61
61: ; preds = %46, %56, %59
%62 = phi i32 [ %60, %59 ], [ %43, %56 ], [ %43, %46 ]
%63 = icmp slt i32 %62, 1
br i1 %63, label %110, label %64
64: ; preds = %61
%65 = load double, double* %2
%66 = and i32 %62, 1
%67 = icmp eq i32 %62, 1
br i1 %67, label %96, label %68
68: ; preds = %64
%69 = and i32 %62, -2
br label %70
70: ; preds = %70, %68
%71 = phi i32 [ 1, %68 ], [ %90, %70 ]
%72 = phi double [ %34, %68 ], [ %89, %70 ]
%73 = phi double [ %34, %68 ], [ %88, %70 ]
%74 = phi i32 [ 0, %68 ], [ %91, %70 ]
%75 = add nsw i32 %71, -1
%76 = sitofp i32 %75 to double
%77 = fadd double %11, %76
%78 = fadd double %12, %76
%79 = fdiv double %77, %78
%80 = fmul double %79, %65
%81 = fmul double %73, %80
%82 = fadd double %72, %81
%83 = sitofp i32 %71 to double
%84 = fadd double %11, %83
%85 = fadd double %12, %83
%86 = fdiv double %84, %85
%87 = fmul double %86, %65
%88 = fmul double %81, %87
%89 = fadd double %82, %88
%90 = add nuw i32 %71, 2
%91 = add i32 %74, 2
%92 = icmp eq i32 %91, %69
br i1 %92, label %93, label %70
93: ; preds = %70
%94 = add i32 %71, 1
%95 = sitofp i32 %94 to double
br label %96
96: ; preds = %93, %64
%97 = phi double [ undef, %64 ], [ %88, %93 ]
%98 = phi double [ undef, %64 ], [ %89, %93 ]
%99 = phi double [ 0.000000e+00, %64 ], [ %95, %93 ]
%100 = phi double [ %34, %64 ], [ %89, %93 ]
%101 = phi double [ %34, %64 ], [ %88, %93 ]
%102 = icmp eq i32 %66, 0
br i1 %102, label %110, label %103
103: ; preds = %96
%104 = fadd double %11, %99
%105 = fadd double %12, %99
%106 = fdiv double %104, %105
%107 = fmul double %106, %65
%108 = fmul double %101, %107
%109 = fadd double %100, %108
br label %110
110: ; preds = %103, %96, %61
%111 = phi double [ %34, %61 ], [ %97, %96 ], [ %108, %103 ]
%112 = phi double [ %34, %61 ], [ %98, %96 ], [ %109, %103 ]
%113 = icmp eq i32 %62, %43
br i1 %113, label %137, label %114
114: ; preds = %110, %49, %42
%115 = phi double [ %34, %42 ], [ %34, %49 ], [ %111, %110 ]
%116 = phi double [ %34, %42 ], [ %34, %49 ], [ %112, %110 ]
%117 = phi i32 [ 0, %42 ], [ 0, %49 ], [ %62, %110 ]
%118 = call i32 @llvm.smax.i32(i32 %117, i32 %43)
br label %119
119: ; preds = %124, %114
%120 = phi double [ %115, %114 ], [ %132, %124 ]
%121 = phi double [ %116, %114 ], [ %133, %124 ]
%122 = phi i32 [ %117, %114 ], [ %125, %124 ]
%123 = icmp eq i32 %122, %118
br i1 %123, label %137, label %124
124: ; preds = %119
%125 = add i32 %122, 1
%126 = sitofp i32 %122 to double
%127 = fadd double %11, %126
%128 = fadd double %12, %126
%129 = fdiv double %127, %128
%130 = load double, double* %2
%131 = fmul double %129, %130
%132 = fmul double %120, %131
%133 = fadd double %121, %132
%134 = load double, double* %5
%135 = fmul double %134, %133
%136 = fcmp ugt double %132, %135
br i1 %136, label %119, label %137
137: ; preds = %119, %124, %110
%138 = phi double [ %112, %110 ], [ %121, %119 ], [ %133, %124 ]
%139 = fmul double %37, %138
br label %140
140: ; preds = %33, %137
%141 = phi double [ %139, %137 ], [ %37, %33 ]
ret double %141
}