#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 cdflib_exparg(int const *);
int cdflib_fifidint(double const);
scalar_t__ cdflib_fifmod(int, int);
double dpmpar(int const);
double exp(double);
double fabs(double const);
double log(double);
double const sin(double const);
double cdflib_gamma_x(const double *a) {
  static const double d = .41893853320467274178e0;
  static const double pi = 3.1415926535898e0;
  static const double r1 = .820756370353826e-03;
  static const double r2 = -.595156336428591e-03;
  static const double r3 = .793650663183693e-03;
  static const double r4 = -.277777777770481e-02;
  static const double r5 = .833333333333333e-01;
  static const double p[7] = {.539637273585445e-03,
                              .261939260042690e-02,
                              .204493667594920e-01,
                              .730981088720487e-01,
                              .279648642639792e+00,
                              .553413866010467e+00,
                              1.0e0};
  static const double q[7] = {-.832979206704073e-03,
                              .470059485860584e-02,
                              .225211131035340e-01,
                              -.170458969313360e+00,
                              -.567902761974940e-01,
                              .113062953091122e+01,
                              1.0e0};
  static const int K2 = 3;
  static const int K3 = 0;
  double Xgamm, bot, g, lnx, s = 0, t, top, w, x, z;
  int i, j, m, n, T1;
  Xgamm = 0.0e0;
  x = *a;
  if (fabs(*a) >= 15.0e0) {
    goto S110;
  }
  t = 1.0e0;
  m = cdflib_fifidint(*a) - 1;
  T1 = m;
  if (T1 < 0) {
    goto S40;
  } else if (T1 == 0) {
    goto S30;
  } else {
    goto S10;
  }
S10:
  for (j = 1; j <= m; j++) {
    x -= 1.0e0;
    t = x * t;
  }
S30:
  x -= 1.0e0;
  goto S80;
S40:
  t = *a;
  if (*a > 0.0e0) {
    goto S70;
  }
  m = -m - 1;
  if (m == 0) {
    goto S60;
  }
  for (j = 1; j <= m; j++) {
    x += 1.0e0;
    t = x * t;
  }
S60:
  x += (0.5e0 + 0.5e0);
  t = x * t;
  if (t == 0.0e0) {
    return Xgamm;
  }
S70:
  if (fabs(t) >= 1.e-30) {
    goto S80;
  }
  if (fabs(t) * dpmpar(K2) <= 1.0001e0) {
    return Xgamm;
  }
  Xgamm = 1.0e0 / t;
  return Xgamm;
S80:
  top = p[0];
  bot = q[0];
  for (i = 1; i < 7; i++) {
    top = p[i] + x * top;
    bot = q[i] + x * bot;
  }
  Xgamm = top / bot;
  if (*a < 1.0e0) {
    goto S100;
  }
  Xgamm *= t;
  return Xgamm;
S100:
  Xgamm /= t;
  return Xgamm;
S110:
  if (fabs(*a) >= 1.e3) {
    return Xgamm;
  }
  if (*a > 0.0e0) {
    goto S120;
  }
  x = -*a;
  n = (int)x;
  t = x - (double)n;
  if (t > 0.9e0) {
    t = 1.0e0 - t;
  }
  s = sin(pi * t) / pi;
  if (cdflib_fifmod(n, 2) == 0) {
    s = -s;
  }
  if (s == 0.0e0) {
    return Xgamm;
  }
S120:
  t = 1.0e0 / (x * x);
  g = ((((r1 * t + r2) * t + r3) * t + r4) * t + r5) / x;
  lnx = log(x);
  z = x;
  g = d + g + (z - 0.5e0) * (lnx - 1.e0);
  w = g;
  t = g - w;
  if (w > 0.99999e0 * cdflib_exparg(&K3)) {
    return Xgamm;
  }
  Xgamm = exp(w) * (1.0e0 + t);
  if (*a < 0.0e0) {
    Xgamm = 1.0e0 / (Xgamm * s) / x;
  }
  return Xgamm;
}


x86 assembly (clang, -O0):
<cdflib_gamma_x>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x10(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movaps 0xed5(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xe49(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     11c6 <cdflib_gamma_x+0x56>
jmp    14cc <cdflib_gamma_x+0x35c>
movsd  0xe3a(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
call   1050 <cdflib_fifidint@plt>
sub    $0x1,%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
mov    %eax,-0x74(%rbp)
cmpl   $0x0,-0x74(%rbp)
jge    11fb <cdflib_gamma_x+0x8b>
jmp    1275 <cdflib_gamma_x+0x105>
cmpl   $0x0,-0x74(%rbp)
jne    120a <cdflib_gamma_x+0x9a>
jmp    125a <cdflib_gamma_x+0xea>
jmp    120f <cdflib_gamma_x+0x9f>
movl   $0x1,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x6c(%rbp),%eax
jg     1255 <cdflib_gamma_x+0xe5>
movsd  -0x58(%rbp),%xmm0
movsd  0xdd9(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    1216 <cdflib_gamma_x+0xa6>
jmp    125a <cdflib_gamma_x+0xea>
movsd  -0x58(%rbp),%xmm0
movsd  0xda1(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    13db <cdflib_gamma_x+0x26b>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    129c <cdflib_gamma_x+0x12c>
jmp    134a <cdflib_gamma_x+0x1da>
xor    %eax,%eax
sub    -0x6c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x6c(%rbp)
cmpl   $0x0,-0x6c(%rbp)
jne    12b6 <cdflib_gamma_x+0x146>
jmp    12fd <cdflib_gamma_x+0x18d>
movl   $0x1,-0x68(%rbp)
mov    -0x68(%rbp),%eax
cmp    -0x6c(%rbp),%eax
jg     12f8 <cdflib_gamma_x+0x188>
movsd  0xd37(%rip),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x68(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    12bd <cdflib_gamma_x+0x14d>
jmp    12fd <cdflib_gamma_x+0x18d>
movsd  0xd03(%rip),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
mulsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1345 <cdflib_gamma_x+0x1d5>
jp     1345 <cdflib_gamma_x+0x1d5>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179c <cdflib_gamma_x+0x62c>
jmp    134a <cdflib_gamma_x+0x1da>
movsd  -0x40(%rbp),%xmm0
movaps 0xd2a(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xcae(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1371 <cdflib_gamma_x+0x201>
jmp    13db <cdflib_gamma_x+0x26b>
movsd  -0x40(%rbp),%xmm0
movaps 0xd03(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    $0x3,%edi
call   1030 <dpmpar@plt>
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0xc77(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     13ba <cdflib_gamma_x+0x24a>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179c <cdflib_gamma_x+0x62c>
movsd  0xc46(%rip),%xmm0
divsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179c <cdflib_gamma_x+0x62c>
movsd  0xced(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xd20(%rip),%xmm0
movsd  %xmm0,-0x20(%rbp)
movl   $0x1,-0x64(%rbp)
cmpl   $0x7,-0x64(%rbp)
jge    1462 <cdflib_gamma_x+0x2f2>
movslq -0x64(%rbp),%rcx
lea    0xcbf(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movslq -0x64(%rbp),%rcx
lea    0xcd8(%rip),%rax
movsd  (%rax,%rcx,8),%xmm1
movsd  -0x58(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x64(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    13fc <cdflib_gamma_x+0x28c>
movsd  -0x48(%rbp),%xmm0
divsd  -0x20(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xb8b(%rip),%xmm0
ucomisd (%rax),%xmm0
jbe    148c <cdflib_gamma_x+0x31c>
jmp    14aa <cdflib_gamma_x+0x33a>
movsd  -0x40(%rbp),%xmm0
mulsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179c <cdflib_gamma_x+0x62c>
movsd  -0x40(%rbp),%xmm1
movsd  -0x18(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179c <cdflib_gamma_x+0x62c>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movaps 0xba5(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  0xb39(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1500 <cdflib_gamma_x+0x390>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179c <cdflib_gamma_x+0x62c>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    151a <cdflib_gamma_x+0x3aa>
jmp    1609 <cdflib_gamma_x+0x499>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
cvttsd2si -0x58(%rbp),%eax
mov    %eax,-0x70(%rbp)
movsd  -0x58(%rbp),%xmm0
cvtsi2sdl -0x70(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  0xac2(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1582 <cdflib_gamma_x+0x412>
movsd  0xa90(%rip),%xmm0
subsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xaa6(%rip),%xmm0
mulsd  -0x40(%rbp),%xmm0
call   1040 <sin@plt>
movsd  0xa94(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x70(%rbp),%edi
mov    $0x2,%esi
call   1060 <cdflib_fifmod@plt>
cmp    $0x0,%rax
jne    15dd <cdflib_gamma_x+0x46d>
movsd  -0x38(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x38(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1604 <cdflib_gamma_x+0x494>
jp     1604 <cdflib_gamma_x+0x494>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179c <cdflib_gamma_x+0x62c>
jmp    1609 <cdflib_gamma_x+0x499>
movsd  -0x58(%rbp),%xmm1
mulsd  -0x58(%rbp),%xmm1
movsd  0x9ed(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  0xa37(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa33(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa0e(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9f1(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0x9d4(%rip),%xmm1
addsd  %xmm1,%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x58(%rbp),%xmm0
call   1080 <log@plt>
movsd  %xmm0,-0x30(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  0x99d(%rip),%xmm1
addsd  -0x28(%rbp),%xmm1
movsd  -0x60(%rbp),%xmm0
movsd  0x983(%rip),%xmm2
subsd  %xmm2,%xmm0
movsd  -0x30(%rbp),%xmm2
movsd  0x93a(%rip),%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x28(%rbp),%xmm0
subsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
lea    0xa40(%rip),%rdi
call   1090 <cdflib_exparg@plt>
movaps %xmm0,%xmm2
movsd  -0x88(%rbp),%xmm0
ff
movsd  0x914(%rip),%xmm1
mulsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    1741 <cdflib_gamma_x+0x5d1>
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    179c <cdflib_gamma_x+0x62c>
movsd  -0x50(%rbp),%xmm0
call   1070 <exp@plt>
movsd  0x8b5(%rip),%xmm1
addsd  -0x40(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
xorps  %xmm0,%xmm0
ucomisd (%rax),%xmm0
jbe    1792 <cdflib_gamma_x+0x622>
movsd  -0x18(%rbp),%xmm1
mulsd  -0x38(%rbp),%xmm1
movsd  0x884(%rip),%xmm0
divsd  %xmm1,%xmm0
divsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<cdflib_gamma_x>:
push   %rbp
push   %rbx
sub    $0x48,%rsp
mov    %rdi,%rbx
movsd  (%rdi),%xmm0
movapd 0xe7b(%rip),%xmm1
andpd  %xmm0,%xmm1
ucomisd 0xe8f(%rip),%xmm1
jae    11b8 <cdflib_gamma_x+0x48>
movapd %xmm0,(%rsp)
call   1050 <cdflib_fifidint@plt>
test   %eax,%eax
jle    11e3 <cdflib_gamma_x+0x73>
cmp    $0x1,%eax
jne    1203 <cdflib_gamma_x+0x93>
movsd  0xe82(%rip),%xmm4
movapd (%rsp),%xmm3
jmp    134d <cdflib_gamma_x+0x1dd>
xorpd  %xmm5,%xmm5
ucomisd 0xe64(%rip),%xmm1
jae    165d <cdflib_gamma_x+0x4ed>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1229 <cdflib_gamma_x+0xb9>
xorpd  %xmm1,%xmm1
movapd %xmm1,0x10(%rsp)
jmp    143e <cdflib_gamma_x+0x2ce>
movsd  (%rbx),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    12aa <cdflib_gamma_x+0x13a>
movapd %xmm0,%xmm4
movapd (%rsp),%xmm3
jmp    1605 <cdflib_gamma_x+0x495>
lea    -0x1(%rax),%edx
add    $0xfffffffe,%eax
mov    %edx,%ecx
and    $0x7,%ecx
cmp    $0x7,%eax
movapd (%rsp),%xmm3
jae    12c3 <cdflib_gamma_x+0x153>
movsd  0xe0c(%rip),%xmm4
jmp    1325 <cdflib_gamma_x+0x1b5>
xorpd  0xddf(%rip),%xmm0
cvttsd2si %xmm0,%ebp
cvttpd2dq %xmm0,%xmm1
cvtdq2pd %xmm1,%xmm2
movapd %xmm0,(%rsp)
movapd %xmm0,%xmm1
subsd  %xmm2,%xmm1
movsd  0xdde(%rip),%xmm2
subsd  %xmm1,%xmm2
movsd  0xdda(%rip),%xmm0
cmpltsd %xmm1,%xmm0
andpd  %xmm0,%xmm2
andnpd %xmm1,%xmm0
orpd   %xmm2,%xmm0
mulsd  0xdc9(%rip),%xmm0
call   1040 <sin@plt>
divsd  0xdbc(%rip),%xmm0
movapd %xmm0,0x10(%rsp)
mov    %ebp,%edi
mov    $0x2,%esi
call   1060 <cdflib_fifmod@plt>
test   %rax,%rax
je     1415 <cdflib_gamma_x+0x2a5>
movapd 0x10(%rsp),%xmm0
jmp    1423 <cdflib_gamma_x+0x2b3>
cmp    $0x80000001,%eax
jae    154a <cdflib_gamma_x+0x3da>
movapd %xmm0,%xmm4
movapd (%rsp),%xmm3
jmp    15ed <cdflib_gamma_x+0x47d>
and    $0xfffffff8,%edx
movsd  0xd62(%rip),%xmm4
movsd  0xdaa(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
addsd  %xmm0,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm0,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm0,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm0,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm0,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm0,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm0,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm0,%xmm3
mulsd  %xmm3,%xmm4
add    $0xfffffff8,%edx
jne    12e0 <cdflib_gamma_x+0x170>
test   %ecx,%ecx
je     134d <cdflib_gamma_x+0x1dd>
movsd  0xd4f(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
addsd  %xmm0,%xmm3
mulsd  %xmm3,%xmm4
add    $0xffffffff,%ecx
jne    1340 <cdflib_gamma_x+0x1d0>
addsd  0xd2b(%rip),%xmm3
movsd  (%rbx),%xmm0
movsd  0xd37(%rip),%xmm5
mulsd  %xmm3,%xmm5
addsd  0xd33(%rip),%xmm5
movsd  0xd33(%rip),%xmm1
mulsd  %xmm3,%xmm1
addsd  0xd2f(%rip),%xmm1
mulsd  %xmm3,%xmm5
addsd  0xd2b(%rip),%xmm5
mulsd  %xmm3,%xmm1
addsd  0xd27(%rip),%xmm1
mulsd  %xmm3,%xmm5
addsd  0xd23(%rip),%xmm5
mulsd  %xmm3,%xmm1
addsd  0xd1f(%rip),%xmm1
mulsd  %xmm3,%xmm5
addsd  0xd1b(%rip),%xmm5
mulsd  %xmm3,%xmm1
addsd  0xd17(%rip),%xmm1
mulsd  %xmm3,%xmm5
addsd  0xd13(%rip),%xmm5
mulsd  %xmm3,%xmm1
addsd  0xd0f(%rip),%xmm1
mulsd  %xmm3,%xmm5
movsd  0xc43(%rip),%xmm2
addsd  %xmm2,%xmm5
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm5
ucomisd %xmm0,%xmm2
jbe    140c <cdflib_gamma_x+0x29c>
divsd  %xmm4,%xmm5
jmp    165d <cdflib_gamma_x+0x4ed>
mulsd  %xmm4,%xmm5
jmp    165d <cdflib_gamma_x+0x4ed>
movapd 0x10(%rsp),%xmm0
xorpd  0xbed(%rip),%xmm0
xorpd  %xmm5,%xmm5
movapd %xmm0,0x10(%rsp)
ucomisd %xmm5,%xmm0
movapd (%rsp),%xmm0
jne    143e <cdflib_gamma_x+0x2ce>
jnp    165d <cdflib_gamma_x+0x4ed>
movapd %xmm0,(%rsp)
movapd %xmm0,%xmm2
mulsd  %xmm0,%xmm2
movsd  0xbdd(%rip),%xmm1
divsd  %xmm2,%xmm1
movsd  0xbe9(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xbe5(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xbe1(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xbdd(%rip),%xmm2
mulsd  %xmm1,%xmm2
addsd  0xbd9(%rip),%xmm2
divsd  %xmm0,%xmm2
movsd  %xmm2,0x28(%rsp)
call   1080 <log@plt>
movsd  0x28(%rsp),%xmm2
addsd  0xbc4(%rip),%xmm2
movsd  0xbc4(%rip),%xmm1
addsd  (%rsp),%xmm1
addsd  0xbbf(%rip),%xmm0
mulsd  %xmm1,%xmm0
addsd  %xmm2,%xmm0
movsd  %xmm0,0x28(%rsp)
lea    0xc2a(%rip),%rdi
call   1090 <cdflib_exparg@plt>
mulsd  0xba5(%rip),%xmm0
movsd  0x28(%rsp),%xmm1
ucomisd %xmm0,%xmm1
xorpd  %xmm5,%xmm5
ja     165d <cdflib_gamma_x+0x4ed>
movapd %xmm1,%xmm0
subsd  %xmm0,%xmm1
movapd %xmm1,0x30(%rsp)
call   1070 <exp@plt>
movapd 0x30(%rsp),%xmm5
addsd  0xb18(%rip),%xmm5
mulsd  %xmm0,%xmm5
xorpd  %xmm0,%xmm0
ucomisd (%rbx),%xmm0
jbe    165d <cdflib_gamma_x+0x4ed>
movapd 0x10(%rsp),%xmm0
mulsd  %xmm5,%xmm0
movsd  0xaf4(%rip),%xmm5
divsd  %xmm0,%xmm5
divsd  (%rsp),%xmm5
jmp    165d <cdflib_gamma_x+0x4ed>
mov    %eax,%edx
neg    %edx
mov    %edx,%ecx
and    $0x7,%ecx
cmp    $0xfffffff8,%eax
movapd (%rsp),%xmm3
jbe    1563 <cdflib_gamma_x+0x3f3>
movapd %xmm0,%xmm4
jmp    15c5 <cdflib_gamma_x+0x455>
and    $0xfffffff8,%edx
movsd  0xac2(%rip),%xmm1
movapd %xmm0,%xmm4
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm4
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm4
add    $0xfffffff8,%edx
jne    1580 <cdflib_gamma_x+0x410>
test   %ecx,%ecx
je     15ed <cdflib_gamma_x+0x47d>
movsd  0xa5f(%rip),%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
addsd  %xmm1,%xmm3
mulsd  %xmm3,%xmm4
add    $0xffffffff,%ecx
jne    15e0 <cdflib_gamma_x+0x470>
addsd  0xa3b(%rip),%xmm3
mulsd  %xmm3,%xmm4
xorpd  %xmm5,%xmm5
ucomisd %xmm5,%xmm4
jne    1605 <cdflib_gamma_x+0x495>
jnp    165d <cdflib_gamma_x+0x4ed>
movapd 0x9f3(%rip),%xmm1
andpd  %xmm4,%xmm1
ucomisd 0xa77(%rip),%xmm1
jae    1359 <cdflib_gamma_x+0x1e9>
mov    $0x3,%edi
movapd %xmm4,(%rsp)
movapd %xmm1,0x10(%rsp)
call   1030 <dpmpar@plt>
movapd (%rsp),%xmm2
mulsd  0x10(%rsp),%xmm0
xorpd  %xmm5,%xmm5
movsd  0xaad(%rip),%xmm1
ucomisd %xmm0,%xmm1
jae    165d <cdflib_gamma_x+0x4ed>
movsd  0x9d7(%rip),%xmm5
divsd  %xmm2,%xmm5
movapd %xmm5,%xmm0
add    $0x48,%rsp
pop    %rbx
pop    %rbp
ret

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

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