#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 beta_distr(double, double, double, char const *);
double beta_distr_density(double, double, double, char const *);
double beta_distr_inv(double, double, int, char const *);
int /*<<< orphan*/ exit(int);
double fabs(double);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, char const *);
int /*<<< orphan*/ stderr;
void beta_distr_constants(double a, double b, double p, double *c1, double *c2,
                          const char *prompt) {
  double delta_c1, delta_c2;
  static double last_a, last_b, last_p, last_c1, last_c2;
  double a11, a12, a21, a22, b1, b2;
  double det;
  static const double eps = 1e-10;
  if (a <= 0 || b <= 0 || p <= 0 || p >= 1) {
    fprintf(stderr,
            "%s: IMPLEMENTATION ERROR! (Invalid argument in function "
            "\"beta_distr_constants\")\n",
            prompt);
    exit(4);
  }
  if ((((a) != (a)) || ((last_a) != (last_a))
           ? (((a) != (a)) && ((last_a) != (last_a)) ? 1 : 0)
           : !(a < last_a || last_a < a)) &&
      (((b) != (b)) || ((last_b) != (last_b))
           ? (((b) != (b)) && ((last_b) != (last_b)) ? 1 : 0)
           : !(b < last_b || last_b < b)) &&
      (((p) != (p)) || ((last_p) != (last_p))
           ? (((p) != (p)) && ((last_p) != (last_p)) ? 1 : 0)
           : !(p < last_p || last_p < p))) {
    *c1 = last_c1;
    *c2 = last_c2;
    return;
  }
  *c1 = beta_distr_inv(a, b, p / 2, prompt);
  *c2 = beta_distr_inv(a, b, 1 - p / 2, prompt);
  while (1) {
    a11 = -beta_distr_density(a, b, *c1, prompt);
    a12 = beta_distr_density(a, b, *c2, prompt);
    a21 = -beta_distr_density(a + 1, b, *c1, prompt);
    a22 = beta_distr_density(a + 1, b, *c2, prompt);
    b1 = p + beta_distr(a, b, *c1, prompt) - beta_distr(a, b, *c2, prompt);
    b2 = p + beta_distr(a + 1, b, *c1, prompt) -
         beta_distr(a + 1, b, *c2, prompt);
    det = a11 * a22 - a12 * a21;
    delta_c1 = (b1 * a22 - b2 * a12) / det;
    delta_c2 = (b2 * a11 - b1 * a21) / det;
    if (fabs(delta_c1) < *c1 * eps && fabs(delta_c2) < *c2 * eps)
      break;
    if (*c1 + delta_c1 >= a / (a + b))
      *c1 = (a / (a + b) + *c1) / 2;
    else if (*c1 + delta_c1 <= 0)
      *c1 /= 2;
    else
      *c1 += delta_c1;
    if (*c2 + delta_c2 >= 1)
      *c2 = (1 + *c2) / 2;
    else if (*c2 + delta_c2 <= a / (a + b))
      *c2 = (a / (a + b) + *c2) / 2;
    else
      *c2 += delta_c2;
  }
  last_a = a;
  last_b = b;
  last_p = p;
  last_c1 = *c1;
  last_c2 = *c2;
  return;
}


x86 assembly (clang, -O0):
<beta_distr_constants>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
movsd  %xmm0,-0x8(%rbp)
movsd  %xmm1,-0x10(%rbp)
movsd  %xmm2,-0x18(%rbp)
mov    %rdi,-0x20(%rbp)
mov    %rsi,-0x28(%rbp)
mov    %rdx,-0x30(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x8(%rbp),%xmm0
jae    11b7 <beta_distr_constants+0x67>
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jae    11b7 <beta_distr_constants+0x67>
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jae    11b7 <beta_distr_constants+0x67>
movsd  -0x18(%rbp),%xmm0
movsd  0xe53(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     11da <beta_distr_constants+0x8a>
mov    0x2e22(%rip),%rax
mov    (%rax),%edi
mov    -0x30(%rbp),%rdx
lea    0xe6d(%rip),%rsi
call   1050 <fprintf@plt>
mov    $0x4,%edi
call   1070 <exit@plt>
movsd  -0x8(%rbp),%xmm0
ucomisd -0x8(%rbp),%xmm0
jne    1211 <beta_distr_constants+0xc1>
jp     1211 <beta_distr_constants+0xc1>
movsd  0x2e58(%rip),%xmm0
ucomisd 0x2e50(%rip),%xmm0
jne    1211 <beta_distr_constants+0xc1>
jp     1211 <beta_distr_constants+0xc1>
jmp    126b <beta_distr_constants+0x11b>
movsd  -0x8(%rbp),%xmm0
ucomisd -0x8(%rbp),%xmm0
jne    122c <beta_distr_constants+0xdc>
jp     122c <beta_distr_constants+0xdc>
jmp    125c <beta_distr_constants+0x10c>
movsd  0x2e1c(%rip),%xmm0
ucomisd 0x2e14(%rip),%xmm0
jne    124d <beta_distr_constants+0xfd>
jp     124d <beta_distr_constants+0xfd>
jmp    125c <beta_distr_constants+0x10c>
mov    $0x1,%al
test   $0x1,%al
jne    1299 <beta_distr_constants+0x149>
jmp    143c <beta_distr_constants+0x2ec>
xor    %eax,%eax
test   $0x1,%al
jne    1299 <beta_distr_constants+0x149>
jmp    143c <beta_distr_constants+0x2ec>
movsd  -0x8(%rbp),%xmm1
movsd  0x2dd8(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     143c <beta_distr_constants+0x2ec>
movsd  0x2dc6(%rip),%xmm1
movsd  -0x8(%rbp),%xmm0
ucomisd %xmm1,%xmm0
ja     143c <beta_distr_constants+0x2ec>
movsd  -0x10(%rbp),%xmm0
ucomisd -0x10(%rbp),%xmm0
jne    12d0 <beta_distr_constants+0x180>
jp     12d0 <beta_distr_constants+0x180>
movsd  0x2da1(%rip),%xmm0
ucomisd 0x2d99(%rip),%xmm0
jne    12d0 <beta_distr_constants+0x180>
jp     12d0 <beta_distr_constants+0x180>
jmp    132a <beta_distr_constants+0x1da>
movsd  -0x10(%rbp),%xmm0
ucomisd -0x10(%rbp),%xmm0
jne    12eb <beta_distr_constants+0x19b>
jp     12eb <beta_distr_constants+0x19b>
jmp    131b <beta_distr_constants+0x1cb>
movsd  0x2d65(%rip),%xmm0
ucomisd 0x2d5d(%rip),%xmm0
jne    130c <beta_distr_constants+0x1bc>
jp     130c <beta_distr_constants+0x1bc>
jmp    131b <beta_distr_constants+0x1cb>
mov    $0x1,%al
test   $0x1,%al
jne    1358 <beta_distr_constants+0x208>
jmp    143c <beta_distr_constants+0x2ec>
xor    %eax,%eax
test   $0x1,%al
jne    1358 <beta_distr_constants+0x208>
jmp    143c <beta_distr_constants+0x2ec>
movsd  -0x10(%rbp),%xmm1
movsd  0x2d21(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     143c <beta_distr_constants+0x2ec>
movsd  0x2d0f(%rip),%xmm1
movsd  -0x10(%rbp),%xmm0
ucomisd %xmm1,%xmm0
ja     143c <beta_distr_constants+0x2ec>
movsd  -0x18(%rbp),%xmm0
ucomisd -0x18(%rbp),%xmm0
jne    138f <beta_distr_constants+0x23f>
jp     138f <beta_distr_constants+0x23f>
movsd  0x2cea(%rip),%xmm0
ucomisd 0x2ce2(%rip),%xmm0
jne    138f <beta_distr_constants+0x23f>
jp     138f <beta_distr_constants+0x23f>
jmp    13e9 <beta_distr_constants+0x299>
movsd  -0x18(%rbp),%xmm0
ucomisd -0x18(%rbp),%xmm0
jne    13aa <beta_distr_constants+0x25a>
jp     13aa <beta_distr_constants+0x25a>
jmp    13da <beta_distr_constants+0x28a>
movsd  0x2cae(%rip),%xmm0
ucomisd 0x2ca6(%rip),%xmm0
jne    13cb <beta_distr_constants+0x27b>
jp     13cb <beta_distr_constants+0x27b>
jmp    13da <beta_distr_constants+0x28a>
mov    $0x1,%al
test   $0x1,%al
jne    1417 <beta_distr_constants+0x2c7>
jmp    143c <beta_distr_constants+0x2ec>
xor    %eax,%eax
test   $0x1,%al
jne    1417 <beta_distr_constants+0x2c7>
jmp    143c <beta_distr_constants+0x2ec>
movsd  -0x18(%rbp),%xmm1
movsd  0x2c6a(%rip),%xmm0
ucomisd %xmm1,%xmm0
ja     143c <beta_distr_constants+0x2ec>
movsd  0x2c58(%rip),%xmm1
movsd  -0x18(%rbp),%xmm0
ucomisd %xmm1,%xmm0
ja     143c <beta_distr_constants+0x2ec>
movsd  0x2c49(%rip),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  0x2c41(%rip),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    190a <beta_distr_constants+0x7ba>
movsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm2
movsd  0xbb5(%rip),%xmm3
divsd  %xmm3,%xmm2
cvttsd2si %xmm2,%edi
mov    -0x30(%rbp),%rsi
call   1060 <beta_distr_inv@plt>
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm3
movsd  0xb85(%rip),%xmm2
divsd  %xmm2,%xmm3
movsd  0xb71(%rip),%xmm2
subsd  %xmm3,%xmm2
cvttsd2si %xmm2,%edi
mov    -0x30(%rbp),%rsi
call   1060 <beta_distr_inv@plt>
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x30(%rbp),%rdi
call   1030 <beta_distr_density@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x30(%rbp),%rdi
call   1030 <beta_distr_density@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  0xaf9(%rip),%xmm0
addsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x30(%rbp),%rdi
call   1030 <beta_distr_density@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  0xaba(%rip),%xmm0
addsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x30(%rbp),%rdi
call   1030 <beta_distr_density@plt>
movsd  %xmm0,-0x60(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x30(%rbp),%rdi
call   1040 <beta_distr@plt>
movaps %xmm0,%xmm1
movsd  -0x98(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x30(%rbp),%rdi
call   1040 <beta_distr@plt>
movaps %xmm0,%xmm1
movsd  -0x90(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  0xa17(%rip),%xmm0
addsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x30(%rbp),%rdi
call   1040 <beta_distr@plt>
movaps %xmm0,%xmm1
movsd  -0x88(%rbp),%xmm0
ff
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  0x9e0(%rip),%xmm0
addsd  -0x8(%rbp),%xmm0
movsd  -0x10(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
mov    -0x30(%rbp),%rdi
call   1040 <beta_distr@plt>
movaps %xmm0,%xmm1
movsd  -0x80(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  -0x50(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
divsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm1
movaps 0x916(%rip),%xmm0
pand   %xmm0,%xmm1
mov    -0x20(%rbp),%rax
movsd  0x8f6(%rip),%xmm0
mulsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    1757 <beta_distr_constants+0x607>
movsd  -0x40(%rbp),%xmm1
movaps 0x8ec(%rip),%xmm0
pand   %xmm0,%xmm1
mov    -0x28(%rbp),%rax
movsd  0x8cc(%rip),%xmm0
mulsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jbe    1757 <beta_distr_constants+0x607>
jmp    18c3 <beta_distr_constants+0x773>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm2
addsd  -0x10(%rbp),%xmm2
divsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jb     17b5 <beta_distr_constants+0x665>
movsd  -0x8(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm1
addsd  -0x10(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  0x864(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    1802 <beta_distr_constants+0x6b2>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm1
addsd  -0x38(%rbp),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     17ec <beta_distr_constants+0x69c>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  0x829(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
jmp    17fd <beta_distr_constants+0x6ad>
movsd  -0x38(%rbp),%xmm0
mov    -0x20(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
jmp    1802 <beta_distr_constants+0x6b2>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  0x7e9(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     184a <beta_distr_constants+0x6fa>
mov    -0x28(%rbp),%rax
movsd  0x7d3(%rip),%xmm0
addsd  (%rax),%xmm0
movsd  0x7cf(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    18be <beta_distr_constants+0x76e>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm1
addsd  -0x40(%rbp),%xmm1
movsd  -0x8(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm2
addsd  -0x10(%rbp),%xmm2
divsd  %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jb     18a8 <beta_distr_constants+0x758>
movsd  -0x8(%rbp),%xmm0
movsd  -0x8(%rbp),%xmm1
addsd  -0x10(%rbp),%xmm1
divsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
addsd  (%rax),%xmm0
movsd  0x771(%rip),%xmm1
divsd  %xmm1,%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
jmp    18b9 <beta_distr_constants+0x769>
movsd  -0x40(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
jmp    18be <beta_distr_constants+0x76e>
jmp    14a8 <beta_distr_constants+0x358>
movsd  -0x8(%rbp),%xmm0
movsd  %xmm0,0x2780(%rip)
movsd  -0x10(%rbp),%xmm0
movsd  %xmm0,0x277b(%rip)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,0x2776(%rip)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x276e(%rip)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,0x2766(%rip)
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<beta_distr_constants>:
push   %r15
push   %r14
push   %rbx
sub    $0xa0,%rsp
mov    %rdx,%rbx
movsd  %xmm1,(%rsp)
movsd  %xmm0,0x8(%rsp)
movsd  %xmm2,0x10(%rsp)
ucomisd 0xe88(%rip),%xmm2
jae    1242 <beta_distr_constants+0xf2>
xorpd  %xmm0,%xmm0
ucomisd 0x8(%rsp),%xmm0
jae    1242 <beta_distr_constants+0xf2>
ucomisd (%rsp),%xmm0
jae    1242 <beta_distr_constants+0xf2>
xorpd  %xmm0,%xmm0
ucomisd 0x10(%rsp),%xmm0
jae    1242 <beta_distr_constants+0xf2>
mov    %rsi,%r14
mov    %rdi,%r15
movsd  0x8(%rsp),%xmm0
ucomisd %xmm0,%xmm0
movsd  0x2e8f(%rip),%xmm0
jp     1264 <beta_distr_constants+0x114>
ucomisd %xmm0,%xmm0
jp     127d <beta_distr_constants+0x12d>
ucomisd 0x8(%rsp),%xmm0
jne    127d <beta_distr_constants+0x12d>
movsd  (%rsp),%xmm0
ucomisd %xmm0,%xmm0
movsd  0x2e6a(%rip),%xmm0
jp     126f <beta_distr_constants+0x11f>
ucomisd %xmm0,%xmm0
jp     127d <beta_distr_constants+0x12d>
ucomisd (%rsp),%xmm0
jne    127d <beta_distr_constants+0x12d>
movsd  0x10(%rsp),%xmm0
ucomisd %xmm0,%xmm0
movsd  0x2e4d(%rip),%xmm0
jp     1277 <beta_distr_constants+0x127>
ucomisd %xmm0,%xmm0
jp     127d <beta_distr_constants+0x12d>
ucomisd 0x10(%rsp),%xmm0
jne    127d <beta_distr_constants+0x12d>
movsd  0x2e3d(%rip),%xmm0
movsd  %xmm0,(%r15)
movsd  0x2e38(%rip),%xmm0
movsd  %xmm0,(%r14)
jmp    15ac <beta_distr_constants+0x45c>
mov    0x2d97(%rip),%rax
mov    (%rax),%edi
lea    0xdee(%rip),%rsi
mov    %rbx,%rdx
call   1050 <fprintf@plt>
mov    $0x4,%edi
call   1070 <exit@plt>
ucomisd %xmm0,%xmm0
jnp    127d <beta_distr_constants+0x12d>
jmp    11dd <beta_distr_constants+0x8d>
ucomisd %xmm0,%xmm0
jnp    127d <beta_distr_constants+0x12d>
jmp    1201 <beta_distr_constants+0xb1>
ucomisd %xmm0,%xmm0
jp     1223 <beta_distr_constants+0xd3>
movsd  0xd83(%rip),%xmm0
mulsd  0x10(%rsp),%xmm0
movsd  %xmm0,0x18(%rsp)
cvttsd2si %xmm0,%edi
movsd  0x8(%rsp),%xmm0
movsd  (%rsp),%xmm1
mov    %rbx,%rsi
call   1060 <beta_distr_inv@plt>
movsd  %xmm0,(%r15)
movsd  0xd4b(%rip),%xmm0
subsd  0x18(%rsp),%xmm0
cvttsd2si %xmm0,%edi
movsd  0x8(%rsp),%xmm0
movsd  (%rsp),%xmm1
mov    %rbx,%rsi
call   1060 <beta_distr_inv@plt>
movsd  %xmm0,(%r14)
movsd  0x8(%rsp),%xmm1
movapd %xmm1,%xmm0
addsd  0xd17(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
movapd %xmm1,%xmm0
addsd  (%rsp),%xmm0
divsd  %xmm0,%xmm1
movsd  %xmm1,0x38(%rsp)
jmp    1325 <beta_distr_constants+0x1d5>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
addsd  %xmm1,%xmm0
mulsd  0xcec(%rip),%xmm0
movapd %xmm0,%xmm5
movsd  %xmm5,(%r14)
movsd  (%r15),%xmm2
movsd  0x8(%rsp),%xmm0
movsd  (%rsp),%xmm1
mov    %rbx,%rdi
call   1030 <beta_distr_density@plt>
movaps %xmm0,0x90(%rsp)
movaps %xmm0,%xmm1
movaps 0xcd1(%rip),%xmm0
xorps  %xmm0,%xmm1
movaps %xmm1,0x80(%rsp)
movsd  (%r14),%xmm2
movsd  0x8(%rsp),%xmm0
movsd  (%rsp),%xmm1
mov    %rbx,%rdi
call   1030 <beta_distr_density@plt>
movaps %xmm0,0x70(%rsp)
movsd  (%r15),%xmm2
movsd  0x18(%rsp),%xmm0
movsd  (%rsp),%xmm1
mov    %rbx,%rdi
call   1030 <beta_distr_density@plt>
movaps %xmm0,0x60(%rsp)
movsd  (%r14),%xmm2
movsd  0x18(%rsp),%xmm0
movsd  (%rsp),%xmm1
mov    %rbx,%rdi
call   1030 <beta_distr_density@plt>
movaps %xmm0,0x50(%rsp)
movsd  (%r15),%xmm2
movsd  0x8(%rsp),%xmm0
movsd  (%rsp),%xmm1
mov    %rbx,%rdi
call   1040 <beta_distr@plt>
addsd  0x10(%rsp),%xmm0
movapd %xmm0,0x20(%rsp)
movsd  (%r14),%xmm2
movsd  0x8(%rsp),%xmm0
movsd  (%rsp),%xmm1
mov    %rbx,%rdi
call   1040 <beta_distr@plt>
movapd 0x20(%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,0x20(%rsp)
movsd  (%r15),%xmm2
movsd  0x18(%rsp),%xmm0
movsd  (%rsp),%xmm1
mov    %rbx,%rdi
call   1040 <beta_distr@plt>
addsd  0x10(%rsp),%xmm0
movapd %xmm0,0x40(%rsp)
movsd  (%r14),%xmm2
movsd  0x18(%rsp),%xmm0
movsd  (%rsp),%xmm1
mov    %rbx,%rdi
call   1040 <beta_distr@plt>
movapd 0x50(%rsp),%xmm6
movapd 0x60(%rsp),%xmm5
movapd 0x40(%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,%xmm0
movapd %xmm1,%xmm2
xorpd  0xbc1(%rip),%xmm0
movapd 0x70(%rsp),%xmm1
unpcklpd %xmm1,%xmm1
unpcklpd %xmm5,%xmm0
mulpd  %xmm1,%xmm0
movapd 0x20(%rsp),%xmm1
mulsd  %xmm1,%xmm5
unpcklpd 0x80(%rsp),%xmm1
unpcklpd %xmm6,%xmm6
mulpd  %xmm1,%xmm6
addpd  %xmm0,%xmm6
movapd %xmm6,%xmm0
unpckhpd %xmm6,%xmm0
divsd  %xmm0,%xmm6
mulsd  0x90(%rsp),%xmm2
subsd  %xmm2,%xmm5
divsd  %xmm0,%xmm5
movapd %xmm6,%xmm1
movapd 0xb77(%rip),%xmm3
andpd  %xmm3,%xmm1
movsd  (%r15),%xmm0
movapd %xmm0,%xmm2
movsd  0xb42(%rip),%xmm4
mulsd  %xmm4,%xmm2
ucomisd %xmm1,%xmm2
jbe    14f7 <beta_distr_constants+0x3a7>
movapd %xmm5,%xmm2
andpd  %xmm3,%xmm2
movsd  (%r14),%xmm1
movapd %xmm1,%xmm3
mulsd  %xmm4,%xmm3
ucomisd %xmm2,%xmm3
ja     1573 <beta_distr_constants+0x423>
addsd  %xmm0,%xmm6
movsd  0x38(%rsp),%xmm2
ucomisd %xmm2,%xmm6
jae    1530 <beta_distr_constants+0x3e0>
xorpd  %xmm1,%xmm1
ucomisd %xmm6,%xmm1
movsd  0xae9(%rip),%xmm1
jb     1548 <beta_distr_constants+0x3f8>
mulsd  0xae7(%rip),%xmm0
movapd %xmm0,%xmm6
jmp    1548 <beta_distr_constants+0x3f8>
nopw   0x0(%rax,%rax,1)
addsd  %xmm2,%xmm0
mulsd  0xacc(%rip),%xmm0
movapd %xmm0,%xmm6
movsd  0xab8(%rip),%xmm1
movsd  %xmm6,(%r15)
movsd  (%r14),%xmm0
addsd  %xmm0,%xmm5
ucomisd %xmm1,%xmm5
jae    1310 <beta_distr_constants+0x1c0>
ucomisd %xmm5,%xmm2
jb     1320 <beta_distr_constants+0x1d0>
addsd  %xmm2,%xmm0
jmp    1314 <beta_distr_constants+0x1c4>
movsd  0x8(%rsp),%xmm2
movsd  %xmm2,0x2acf(%rip)
movsd  (%rsp),%xmm2
movsd  %xmm2,0x2aca(%rip)
movsd  0x10(%rsp),%xmm2
movsd  %xmm2,0x2ac4(%rip)
movsd  %xmm0,0x2ac4(%rip)
movsd  %xmm1,0x2ac4(%rip)
add    $0xa0,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@beta_distr_constants.last_a = internal global double 0.000000e+00
@beta_distr_constants.last_b = internal global double 0.000000e+00
@beta_distr_constants.last_p = internal global double 0.000000e+00
@beta_distr_constants.last_c1 = internal global double 0.000000e+00
@beta_distr_constants.last_c2 = internal global double 0.000000e+00
@beta_distr_constants.eps = internal constant double 1.000000e-10
@stderr = global i32 0
@.str = [81 x i8] c"%s: IMPLEMENTATION ERROR! (Invalid argument in function \22beta_distr_constants\22)\0A\00"
define void @beta_distr_constants(double %0, double %1, double %2, double* %3, double* %4, i8* %5) {
%7 = alloca double
%8 = alloca double
%9 = alloca double
%10 = alloca double*
%11 = alloca double*
%12 = alloca i8*
%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
store double %0, double* %7
store double %1, double* %8
store double %2, double* %9
store double* %3, double** %10
store double* %4, double** %11
store i8* %5, i8** %12
%22 = load double, double* %7
%23 = fcmp ole double %22, 0.000000e+00
br i1 %23, label %33, label %24
24: ; preds = %6
%25 = load double, double* %8
%26 = fcmp ole double %25, 0.000000e+00
br i1 %26, label %33, label %27
27: ; preds = %24
%28 = load double, double* %9
%29 = fcmp ole double %28, 0.000000e+00
br i1 %29, label %33, label %30
30: ; preds = %27
%31 = load double, double* %9
%32 = fcmp oge double %31, 1.000000e+00
br i1 %32, label %33, label %38
33: ; preds = %30, %27, %24, %6
%34 = load i32, i32* @stderr
%35 = load i8*, i8** %12
%36 = call i32 @fprintf(i32 %34, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str, i64 0, i64 0), i8* %35)
%37 = call i32 @exit(i32 4)
unreachable
38: ; preds = %30
%39 = load double, double* %7
%40 = load double, double* %7
%41 = fcmp une double %39, %40
br i1 %41, label %46, label %42
42: ; preds = %38
%43 = load double, double* @beta_distr_constants.last_a
%44 = load double, double* @beta_distr_constants.last_a
%45 = fcmp une double %43, %44
br i1 %45, label %46, label %56
46: ; preds = %42, %38
%47 = load double, double* %7
%48 = load double, double* %7
%49 = fcmp une double %47, %48
br i1 %49, label %50, label %55
50: ; preds = %46
%51 = load double, double* @beta_distr_constants.last_a
%52 = load double, double* @beta_distr_constants.last_a
%53 = fcmp une double %51, %52
br i1 %53, label %54, label %55
54: ; preds = %50
br i1 true, label %64, label %121
55: ; preds = %50, %46
br i1 false, label %64, label %121
56: ; preds = %42
%57 = load double, double* %7
%58 = load double, double* @beta_distr_constants.last_a
%59 = fcmp olt double %57, %58
br i1 %59, label %121, label %60
60: ; preds = %56
%61 = load double, double* @beta_distr_constants.last_a
%62 = load double, double* %7
%63 = fcmp olt double %61, %62
br i1 %63, label %121, label %64
64: ; preds = %60, %55, %54
%65 = load double, double* %8
%66 = load double, double* %8
%67 = fcmp une double %65, %66
br i1 %67, label %72, label %68
68: ; preds = %64
%69 = load double, double* @beta_distr_constants.last_b
%70 = load double, double* @beta_distr_constants.last_b
%71 = fcmp une double %69, %70
br i1 %71, label %72, label %82
72: ; preds = %68, %64
%73 = load double, double* %8
%74 = load double, double* %8
%75 = fcmp une double %73, %74
br i1 %75, label %76, label %81
76: ; preds = %72
%77 = load double, double* @beta_distr_constants.last_b
%78 = load double, double* @beta_distr_constants.last_b
%79 = fcmp une double %77, %78
br i1 %79, label %80, label %81
80: ; preds = %76
br i1 true, label %90, label %121
81: ; preds = %76, %72
br i1 false, label %90, label %121
82: ; preds = %68
%83 = load double, double* %8
%84 = load double, double* @beta_distr_constants.last_b
%85 = fcmp olt double %83, %84
br i1 %85, label %121, label %86
86: ; preds = %82
%87 = load double, double* @beta_distr_constants.last_b
%88 = load double, double* %8
%89 = fcmp olt double %87, %88
br i1 %89, label %121, label %90
90: ; preds = %86, %81, %80
%91 = load double, double* %9
%92 = load double, double* %9
%93 = fcmp une double %91, %92
br i1 %93, label %98, label %94
94: ; preds = %90
%95 = load double, double* @beta_distr_constants.last_p
%96 = load double, double* @beta_distr_constants.last_p
%97 = fcmp une double %95, %96
br i1 %97, label %98, label %108
98: ; preds = %94, %90
%99 = load double, double* %9
%100 = load double, double* %9
%101 = fcmp une double %99, %100
br i1 %101, label %102, label %107
102: ; preds = %98
%103 = load double, double* @beta_distr_constants.last_p
%104 = load double, double* @beta_distr_constants.last_p
%105 = fcmp une double %103, %104
br i1 %105, label %106, label %107
106: ; preds = %102
br i1 true, label %116, label %121
107: ; preds = %102, %98
br i1 false, label %116, label %121
108: ; preds = %94
%109 = load double, double* %9
%110 = load double, double* @beta_distr_constants.last_p
%111 = fcmp olt double %109, %110
br i1 %111, label %121, label %112
112: ; preds = %108
%113 = load double, double* @beta_distr_constants.last_p
%114 = load double, double* %9
%115 = fcmp olt double %113, %114
br i1 %115, label %121, label %116
116: ; preds = %112, %107, %106
%117 = load double, double* @beta_distr_constants.last_c1
%118 = load double*, double** %10
store double %117, double* %118
%119 = load double, double* @beta_distr_constants.last_c2
%120 = load double*, double** %11
store double %119, double* %120
br label %326
121: ; preds = %112, %108, %107, %106, %86, %82, %81, %80, %60, %56, %55, %54
%122 = load double, double* %7
%123 = load double, double* %8
%124 = load double, double* %9
%125 = fdiv double %124, 2.000000e+00
%126 = fptosi double %125 to i32
%127 = load i8*, i8** %12
%128 = call double @beta_distr_inv(double %122, double %123, i32 %126, i8* %127)
%129 = load double*, double** %10
store double %128, double* %129
%130 = load double, double* %7
%131 = load double, double* %8
%132 = load double, double* %9
%133 = fdiv double %132, 2.000000e+00
%134 = fsub double 1.000000e+00, %133
%135 = fptosi double %134 to i32
%136 = load i8*, i8** %12
%137 = call double @beta_distr_inv(double %130, double %131, i32 %135, i8* %136)
%138 = load double*, double** %11
store double %137, double* %138
br label %139
139: ; preds = %121, %317
%140 = load double, double* %7
%141 = load double, double* %8
%142 = load double*, double** %10
%143 = load double, double* %142
%144 = load i8*, i8** %12
%145 = call double @beta_distr_density(double %140, double %141, double %143, i8* %144)
%146 = fneg double %145
store double %146, double* %15
%147 = load double, double* %7
%148 = load double, double* %8
%149 = load double*, double** %11
%150 = load double, double* %149
%151 = load i8*, i8** %12
%152 = call double @beta_distr_density(double %147, double %148, double %150, i8* %151)
store double %152, double* %16
%153 = load double, double* %7
%154 = fadd double %153, 1.000000e+00
%155 = load double, double* %8
%156 = load double*, double** %10
%157 = load double, double* %156
%158 = load i8*, i8** %12
%159 = call double @beta_distr_density(double %154, double %155, double %157, i8* %158)
%160 = fneg double %159
store double %160, double* %17
%161 = load double, double* %7
%162 = fadd double %161, 1.000000e+00
%163 = load double, double* %8
%164 = load double*, double** %11
%165 = load double, double* %164
%166 = load i8*, i8** %12
%167 = call double @beta_distr_density(double %162, double %163, double %165, i8* %166)
store double %167, double* %18
%168 = load double, double* %9
%169 = load double, double* %7
%170 = load double, double* %8
%171 = load double*, double** %10
%172 = load double, double* %171
%173 = load i8*, i8** %12
%174 = call double @beta_distr(double %169, double %170, double %172, i8* %173)
%175 = fadd double %168, %174
%176 = load double, double* %7
%177 = load double, double* %8
%178 = load double*, double** %11
%179 = load double, double* %178
%180 = load i8*, i8** %12
%181 = call double @beta_distr(double %176, double %177, double %179, i8* %180)
%182 = fsub double %175, %181
store double %182, double* %19
%183 = load double, double* %9
%184 = load double, double* %7
%185 = fadd double %184, 1.000000e+00
%186 = load double, double* %8
%187 = load double*, double** %10
%188 = load double, double* %187
%189 = load i8*, i8** %12
%190 = call double @beta_distr(double %185, double %186, double %188, i8* %189)
%191 = fadd double %183, %190
%192 = load double, double* %7
%193 = fadd double %192, 1.000000e+00
%194 = load double, double* %8
%195 = load double*, double** %11
%196 = load double, double* %195
%197 = load i8*, i8** %12
%198 = call double @beta_distr(double %193, double %194, double %196, i8* %197)
%199 = fsub double %191, %198
store double %199, double* %20
%200 = load double, double* %15
%201 = load double, double* %18
%202 = load double, double* %16
%203 = load double, double* %17
%204 = fmul double %202, %203
%205 = fneg double %204
%206 = call double @llvm.fmuladd.f64(double %200, double %201, double %205)
store double %206, double* %21
%207 = load double, double* %19
%208 = load double, double* %18
%209 = load double, double* %20
%210 = load double, double* %16
%211 = fmul double %209, %210
%212 = fneg double %211
%213 = call double @llvm.fmuladd.f64(double %207, double %208, double %212)
%214 = load double, double* %21
%215 = fdiv double %213, %214
store double %215, double* %13
%216 = load double, double* %20
%217 = load double, double* %15
%218 = load double, double* %19
%219 = load double, double* %17
%220 = fmul double %218, %219
%221 = fneg double %220
%222 = call double @llvm.fmuladd.f64(double %216, double %217, double %221)
%223 = load double, double* %21
%224 = fdiv double %222, %223
store double %224, double* %14
%225 = load double, double* %13
%226 = call double @llvm.fabs.f64(double %225)
%227 = load double*, double** %10
%228 = load double, double* %227
%229 = fmul double %228, 1.000000e-10
%230 = fcmp olt double %226, %229
br i1 %230, label %231, label %239
231: ; preds = %139
%232 = load double, double* %14
%233 = call double @llvm.fabs.f64(double %232)
%234 = load double*, double** %11
%235 = load double, double* %234
%236 = fmul double %235, 1.000000e-10
%237 = fcmp olt double %233, %236
br i1 %237, label %238, label %239
238: ; preds = %231
br label %318
239: ; preds = %231, %139
%240 = load double*, double** %10
%241 = load double, double* %240
%242 = load double, double* %13
%243 = fadd double %241, %242
%244 = load double, double* %7
%245 = load double, double* %7
%246 = load double, double* %8
%247 = fadd double %245, %246
%248 = fdiv double %244, %247
%249 = fcmp oge double %243, %248
br i1 %249, label %250, label %261
250: ; preds = %239
%251 = load double, double* %7
%252 = load double, double* %7
%253 = load double, double* %8
%254 = fadd double %252, %253
%255 = fdiv double %251, %254
%256 = load double*, double** %10
%257 = load double, double* %256
%258 = fadd double %255, %257
%259 = fdiv double %258, 2.000000e+00
%260 = load double*, double** %10
store double %259, double* %260
br label %277
261: ; preds = %239
%262 = load double*, double** %10
%263 = load double, double* %262
%264 = load double, double* %13
%265 = fadd double %263, %264
%266 = fcmp ole double %265, 0.000000e+00
br i1 %266, label %267, label %271
267: ; preds = %261
%268 = load double*, double** %10
%269 = load double, double* %268
%270 = fdiv double %269, 2.000000e+00
store double %270, double* %268
br label %276
271: ; preds = %261
%272 = load double, double* %13
%273 = load double*, double** %10
%274 = load double, double* %273
%275 = fadd double %274, %272
store double %275, double* %273
br label %276
276: ; preds = %271, %267
br label %277
277: ; preds = %276, %250
%278 = load double*, double** %11
%279 = load double, double* %278
%280 = load double, double* %14
%281 = fadd double %279, %280
%282 = fcmp oge double %281, 1.000000e+00
br i1 %282, label %283, label %289
283: ; preds = %277
%284 = load double*, double** %11
%285 = load double, double* %284
%286 = fadd double 1.000000e+00, %285
%287 = fdiv double %286, 2.000000e+00
%288 = load double*, double** %11
store double %287, double* %288
br label %317
289: ; preds = %277
%290 = load double*, double** %11
%291 = load double, double* %290
%292 = load double, double* %14
%293 = fadd double %291, %292
%294 = load double, double* %7
%295 = load double, double* %7
%296 = load double, double* %8
%297 = fadd double %295, %296
%298 = fdiv double %294, %297
%299 = fcmp ole double %293, %298
br i1 %299, label %300, label %311
300: ; preds = %289
%301 = load double, double* %7
%302 = load double, double* %7
%303 = load double, double* %8
%304 = fadd double %302, %303
%305 = fdiv double %301, %304
%306 = load double*, double** %11
%307 = load double, double* %306
%308 = fadd double %305, %307
%309 = fdiv double %308, 2.000000e+00
%310 = load double*, double** %11
store double %309, double* %310
br label %316
311: ; preds = %289
%312 = load double, double* %14
%313 = load double*, double** %11
%314 = load double, double* %313
%315 = fadd double %314, %312
store double %315, double* %313
br label %316
316: ; preds = %311, %300
br label %317
317: ; preds = %316, %283
br label %139
318: ; preds = %238
%319 = load double, double* %7
store double %319, double* @beta_distr_constants.last_a
%320 = load double, double* %8
store double %320, double* @beta_distr_constants.last_b
%321 = load double, double* %9
store double %321, double* @beta_distr_constants.last_p
%322 = load double*, double** %10
%323 = load double, double* %322
store double %323, double* @beta_distr_constants.last_c1
%324 = load double*, double** %11
%325 = load double, double* %324
store double %325, double* @beta_distr_constants.last_c2
br label %326
326: ; preds = %318, %116
ret void
}

LLVM IR (-O2):
@beta_distr_constants.last_a = internal unnamed_addr global double 0.000000e+00
@beta_distr_constants.last_b = internal unnamed_addr global double 0.000000e+00
@beta_distr_constants.last_p = internal unnamed_addr global double 0.000000e+00
@beta_distr_constants.last_c1 = internal unnamed_addr global double 0.000000e+00
@beta_distr_constants.last_c2 = internal unnamed_addr global double 0.000000e+00
@stderr = global i32 0
@.str = [81 x i8] c"%s: IMPLEMENTATION ERROR! (Invalid argument in function \22beta_distr_constants\22)\0A\00"
define void @beta_distr_constants(double %0, double %1, double %2, double* nocapture %3, double* nocapture %4, i8* %5) {
%7 = fcmp ole double %0, 0.000000e+00
%8 = fcmp ole double %1, 0.000000e+00
%9 = or i1 %7, %8
%10 = fcmp ole double %2, 0.000000e+00
%11 = or i1 %9, %10
%12 = fcmp oge double %2, 1.000000e+00
%13 = or i1 %12, %11
br i1 %13, label %14, label %18
14: ; preds = %6
%15 = load i32, i32* @stderr
%16 = tail call i32 @fprintf(i32 %15, i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str, i64 0, i64 0), i8* %5)
%17 = tail call i32 @exit(i32 4)
unreachable
18: ; preds = %6
%19 = fcmp uno double %0, 0.000000e+00
%20 = load double, double* @beta_distr_constants.last_a
br i1 %19, label %25, label %21
21: ; preds = %18
%22 = fcmp ord double %20, 0.000000e+00
%23 = fcmp ueq double %20, %0
%24 = and i1 %22, %23
br i1 %24, label %27, label %48
25: ; preds = %18
%26 = fcmp uno double %20, 0.000000e+00
br i1 %26, label %27, label %48
27: ; preds = %21, %25
%28 = fcmp uno double %1, 0.000000e+00
%29 = load double, double* @beta_distr_constants.last_b
br i1 %28, label %34, label %30
30: ; preds = %27
%31 = fcmp ord double %29, 0.000000e+00
%32 = fcmp ueq double %29, %1
%33 = and i1 %31, %32
br i1 %33, label %36, label %48
34: ; preds = %27
%35 = fcmp uno double %29, 0.000000e+00
br i1 %35, label %36, label %48
36: ; preds = %30, %34
%37 = fcmp uno double %2, 0.000000e+00
%38 = load double, double* @beta_distr_constants.last_p
br i1 %37, label %43, label %39
39: ; preds = %36
%40 = fcmp ord double %38, 0.000000e+00
%41 = fcmp ueq double %38, %2
%42 = and i1 %40, %41
br i1 %42, label %45, label %48
43: ; preds = %36
%44 = fcmp uno double %38, 0.000000e+00
br i1 %44, label %45, label %48
45: ; preds = %39, %43
%46 = load double, double* @beta_distr_constants.last_c1
store double %46, double* %3
%47 = load double, double* @beta_distr_constants.last_c2
store double %47, double* %4
br label %132
48: ; preds = %39, %30, %21, %43, %34, %25
%49 = fmul double %2, 5.000000e-01
%50 = fptosi double %49 to i32
%51 = tail call double @beta_distr_inv(double %0, double %1, i32 %50, i8* %5)
store double %51, double* %3
%52 = fsub double 1.000000e+00, %49
%53 = fptosi double %52 to i32
%54 = tail call double @beta_distr_inv(double %0, double %1, i32 %53, i8* %5)
store double %54, double* %4
%55 = fadd double %0, 1.000000e+00
%56 = fadd double %0, %1
%57 = fdiv double %0, %56
br label %58
58: ; preds = %129, %48
%59 = load double, double* %3
%60 = tail call double @beta_distr_density(double %0, double %1, double %59, i8* %5)
%61 = fneg double %60
%62 = load double, double* %4
%63 = tail call double @beta_distr_density(double %0, double %1, double %62, i8* %5)
%64 = load double, double* %3
%65 = tail call double @beta_distr_density(double %55, double %1, double %64, i8* %5)
%66 = load double, double* %4
%67 = tail call double @beta_distr_density(double %55, double %1, double %66, i8* %5)
%68 = load double, double* %3
%69 = tail call double @beta_distr(double %0, double %1, double %68, i8* %5)
%70 = fadd double %69, %2
%71 = load double, double* %4
%72 = tail call double @beta_distr(double %0, double %1, double %71, i8* %5)
%73 = fsub double %70, %72
%74 = load double, double* %3
%75 = tail call double @beta_distr(double %55, double %1, double %74, i8* %5)
%76 = fadd double %75, %2
%77 = load double, double* %4
%78 = tail call double @beta_distr(double %55, double %1, double %77, i8* %5)
%79 = fsub double %76, %78
%80 = fneg double %79
%81 = insertelement <2 x double> poison, double %63, i64 0
%82 = shufflevector <2 x double> %81, <2 x double> poison, <2 x i32> zeroinitializer
%83 = insertelement <2 x double> poison, double %80, i64 0
%84 = insertelement <2 x double> %83, double %65, i64 1
%85 = fmul <2 x double> %82, %84
%86 = insertelement <2 x double> poison, double %73, i64 0
%87 = insertelement <2 x double> %86, double %61, i64 1
%88 = insertelement <2 x double> poison, double %67, i64 0
%89 = shufflevector <2 x double> %88, <2 x double> poison, <2 x i32> zeroinitializer
%90 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %87, <2 x double> %89, <2 x double> %85)
%91 = extractelement <2 x double> %90, i64 0
%92 = extractelement <2 x double> %90, i64 1
%93 = fdiv double %91, %92
%94 = fmul double %65, %73
%95 = tail call double @llvm.fmuladd.f64(double %79, double %61, double %94)
%96 = fdiv double %95, %92
%97 = tail call double @llvm.fabs.f64(double %93)
%98 = load double, double* %3
%99 = fmul double %98, 1.000000e-10
%100 = fcmp olt double %97, %99
br i1 %100, label %101, label %106
101: ; preds = %58
%102 = tail call double @llvm.fabs.f64(double %96)
%103 = load double, double* %4
%104 = fmul double %103, 1.000000e-10
%105 = fcmp olt double %102, %104
br i1 %105, label %131, label %106
106: ; preds = %101, %58
%107 = fadd double %98, %93
%108 = fcmp ult double %107, %57
br i1 %108, label %112, label %109
109: ; preds = %106
%110 = fadd double %57, %98
%111 = fmul double %110, 5.000000e-01
br label %116
112: ; preds = %106
%113 = fcmp ugt double %107, 0.000000e+00
br i1 %113, label %116, label %114
114: ; preds = %112
%115 = fmul double %98, 5.000000e-01
br label %116
116: ; preds = %112, %114, %109
%117 = phi double [ %115, %114 ], [ %111, %109 ], [ %107, %112 ]
store double %117, double* %3
%118 = load double, double* %4
%119 = fadd double %96, %118
%120 = fcmp ult double %119, 1.000000e+00
br i1 %120, label %124, label %121
121: ; preds = %116
%122 = fadd double %118, 1.000000e+00
%123 = fmul double %122, 5.000000e-01
br label %129
124: ; preds = %116
%125 = fcmp ugt double %119, %57
br i1 %125, label %129, label %126
126: ; preds = %124
%127 = fadd double %57, %118
%128 = fmul double %127, 5.000000e-01
br label %129
129: ; preds = %124, %126, %121
%130 = phi double [ %128, %126 ], [ %123, %121 ], [ %119, %124 ]
store double %130, double* %4
br label %58
131: ; preds = %101
store double %0, double* @beta_distr_constants.last_a
store double %1, double* @beta_distr_constants.last_b
store double %2, double* @beta_distr_constants.last_p
store double %98, double* @beta_distr_constants.last_c1
store double %103, double* @beta_distr_constants.last_c2
br label %132
132: ; preds = %131, %45
ret void
}