#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 */
int DBL_EPSILON;
double INFINITY;
double NAN;
double bd0(double, double);
double dnorm(double, int, int, int);
double exp(double);
double fabs(double);
int /*<<< orphan*/ isfinite(double);
int log(int);
int log1p(double);
double sqrt(double);
double stirlerr(double);
double dt(double x, double n, int give_log) {
  if (n <= 0)
    return (NAN);
  if (!isfinite(x))
    return (give_log ? -INFINITY : 0.);
  if (!isfinite(n))
    return dnorm(x, 0., 1., give_log);
  double u, ax,
      t = -bd0(n / 2., (n + 1) / 2.) + stirlerr((n + 1) / 2.) -
          stirlerr(n / 2.),
      x2n = x * x / n, l_x2n;
  int lrg_x2n = (x2n > 1. / DBL_EPSILON);
  if (lrg_x2n) {
    ax = fabs(x);
    l_x2n = log(ax) - log(n) / 2.;
    u = n * l_x2n;
  } else if (x2n > 0.2) {
    l_x2n = log(1 + x2n) / 2.;
    u = n * l_x2n;
  } else {
    l_x2n = log1p(x2n) / 2.;
    u = -bd0(n / 2., (n + x * x) / 2.) + x * x / 2.;
  }
  if (give_log)
    return t - u - (0.918938533204672741780329736406 + l_x2n);
  double I_sqrt_ = (lrg_x2n ? sqrt(n) / ax : exp(-l_x2n));
  return exp(t - u) * 0.398942280401432677939946059934 * I_sqrt_;
}


x86 assembly (clang, -O0):
<dt>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
movsd  %xmm0,-0x10(%rbp)
movsd  %xmm1,-0x18(%rbp)
mov    %edi,-0x1c(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x18(%rbp),%xmm0
jb     11bb <dt+0x3b>
mov    0x2e4b(%rip),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    152f <dt+0x3af>
movsd  -0x10(%rbp),%xmm0
call   1050 <isfinite@plt>
cmp    $0x0,%eax
jne    1220 <dt+0xa0>
cmpl   $0x0,-0x1c(%rbp)
je     1204 <dt+0x84>
mov    0x2e01(%rip),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    1211 <dt+0x91>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    1211 <dt+0x91>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    152f <dt+0x3af>
movsd  -0x18(%rbp),%xmm0
call   1050 <isfinite@plt>
cmp    $0x0,%eax
jne    1251 <dt+0xd1>
movsd  -0x10(%rbp),%xmm0
mov    -0x1c(%rbp),%edx
xor    %edi,%edi
mov    $0x1,%esi
call   1070 <dnorm@plt>
movsd  %xmm0,-0x8(%rbp)
jmp    152f <dt+0x3af>
movsd  -0x18(%rbp),%xmm0
movsd  0xdaa(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  0xd96(%rip),%xmm1
addsd  -0x18(%rbp),%xmm1
movsd  0xd91(%rip),%xmm2
divsd  %xmm2,%xmm1
call   1030 <bd0@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  0xd5c(%rip),%xmm0
addsd  -0x18(%rbp),%xmm0
movsd  0xd57(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1040 <stirlerr@plt>
movaps %xmm0,%xmm1
movsd  -0x70(%rbp),%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xd30(%rip),%xmm1
divsd  %xmm1,%xmm0
call   1040 <stirlerr@plt>
movaps %xmm0,%xmm1
movsd  -0x68(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x10(%rbp),%xmm0
mulsd  -0x10(%rbp),%xmm0
divsd  -0x18(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
mov    0x2cc6(%rip),%rax
cvtsi2sdl (%rax),%xmm2
movsd  0xce2(%rip),%xmm1
divsd  %xmm2,%xmm1
ucomisd %xmm1,%xmm0
seta   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x4c(%rbp)
je     139f <dt+0x21f>
movsd  -0x10(%rbp),%xmm0
movaps 0xce9(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
cvttsd2si -0x30(%rbp),%edi
call   1080 <log@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x78(%rbp)
cvttsd2si -0x18(%rbp),%edi
call   1080 <log@plt>
movsd  -0x78(%rbp),%xmm0
cvtsi2sd %eax,%xmm1
movsd  0xc8a(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x18(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1488 <dt+0x308>
movsd  -0x40(%rbp),%xmm0
movsd  0xc64(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    13f5 <dt+0x275>
movsd  0xc42(%rip),%xmm0
addsd  -0x40(%rbp),%xmm0
cvttsd2si %xmm0,%edi
call   1080 <log@plt>
cvtsi2sd %eax,%xmm0
movsd  0xc30(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x18(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1483 <dt+0x303>
movsd  -0x40(%rbp),%xmm0
call   10a0 <log1p@plt>
cvtsi2sd %eax,%xmm0
movsd  0xbfd(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x18(%rbp),%xmm0
movsd  0xbe7(%rip),%xmm1
divsd  %xmm1,%xmm0
movsd  -0x18(%rbp),%xmm2
movsd  -0x10(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
movsd  0xbc4(%rip),%xmm2
divsd  %xmm2,%xmm1
call   1030 <bd0@plt>
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  -0x10(%rbp),%xmm1
mulsd  -0x10(%rbp),%xmm1
movsd  0xb92(%rip),%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x28(%rbp)
jmp    1488 <dt+0x308>
cmpl   $0x0,-0x1c(%rbp)
je     14b7 <dt+0x337>
movsd  -0x38(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  0xb7c(%rip),%xmm1
addsd  -0x48(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    152f <dt+0x3af>
cmpl   $0x0,-0x4c(%rbp)
je     14da <dt+0x35a>
movsd  -0x18(%rbp),%xmm0
call   1090 <sqrt@plt>
divsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    1500 <dt+0x380>
movsd  -0x48(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1060 <exp@plt>
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x38(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
call   1060 <exp@plt>
movsd  0xaf7(%rip),%xmm1
mulsd  %xmm1,%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<dt>:
push   %rbx
sub    $0x50,%rsp
xorpd  %xmm2,%xmm2
ucomisd %xmm1,%xmm2
jae    12d6 <dt+0x156>
mov    %edi,%ebx
movapd %xmm1,(%rsp)
movapd %xmm0,0x30(%rsp)
call   1050 <isfinite@plt>
test   %eax,%eax
je     12e7 <dt+0x167>
movaps (%rsp),%xmm0
call   1050 <isfinite@plt>
test   %eax,%eax
je     1304 <dt+0x184>
movsd  0xe3a(%rip),%xmm3
movapd (%rsp),%xmm2
movapd %xmm2,%xmm0
mulsd  %xmm3,%xmm0
movapd %xmm0,0x40(%rsp)
movsd  0xe27(%rip),%xmm1
addsd  %xmm2,%xmm1
mulsd  %xmm3,%xmm1
movsd  %xmm1,0x20(%rsp)
call   1030 <bd0@plt>
movsd  %xmm0,0x10(%rsp)
movsd  0x20(%rsp),%xmm0
call   1040 <stirlerr@plt>
subsd  0x10(%rsp),%xmm0
movapd %xmm0,0x10(%rsp)
movapd 0x40(%rsp),%xmm0
call   1040 <stirlerr@plt>
movapd 0x10(%rsp),%xmm1
subsd  %xmm0,%xmm1
movapd %xmm1,0x10(%rsp)
movapd 0x30(%rsp),%xmm3
movapd %xmm3,%xmm4
mov    0x2d9b(%rip),%rax
xorps  %xmm1,%xmm1
cvtsi2sdl (%rax),%xmm1
mulsd  %xmm3,%xmm4
movapd 0xde0(%rip),%xmm0
movsd  %xmm4,%xmm0
movapd (%rsp),%xmm2
unpcklpd %xmm1,%xmm2
divpd  %xmm2,%xmm0
movapd %xmm0,%xmm1
unpckhpd %xmm0,%xmm1
ucomisd %xmm1,%xmm0
jbe    131c <dt+0x19c>
andpd  0xdd5(%rip),%xmm3
movapd %xmm3,0x30(%rsp)
cvttsd2si %xmm3,%edi
call   1080 <log@plt>
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  %xmm0,0x40(%rsp)
cvttsd2si (%rsp),%edi
call   1080 <log@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  0xd68(%rip),%xmm1
addsd  0x40(%rsp),%xmm1
movapd %xmm1,%xmm2
movapd (%rsp),%xmm0
mulsd  %xmm0,%xmm2
test   %ebx,%ebx
je     13ca <dt+0x24a>
movapd 0x10(%rsp),%xmm0
jmp    13b5 <dt+0x235>
mov    0x2d1b(%rip),%rax
movsd  (%rax),%xmm0
add    $0x50,%rsp
pop    %rbx
ret
xorpd  %xmm0,%xmm0
test   %ebx,%ebx
je     12e1 <dt+0x161>
mov    0x2cea(%rip),%rax
movsd  (%rax),%xmm0
xorpd  0xd3e(%rip),%xmm0
jmp    12e1 <dt+0x161>
movaps 0x30(%rsp),%xmm0
xor    %edi,%edi
mov    $0x1,%esi
mov    %ebx,%edx
add    $0x50,%rsp
pop    %rbx
jmp    1070 <dnorm@plt>
ucomisd 0xcec(%rip),%xmm0
jbe    1355 <dt+0x1d5>
addsd  0xcda(%rip),%xmm0
cvttsd2si %xmm0,%edi
call   1080 <log@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
mulsd  0xcba(%rip),%xmm1
movapd (%rsp),%xmm0
mulsd  %xmm1,%xmm0
movapd %xmm0,%xmm2
jmp    13ab <dt+0x22b>
movapd %xmm4,0x20(%rsp)
call   10a0 <log1p@plt>
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
movsd  0xc91(%rip),%xmm0
mulsd  %xmm0,%xmm1
movapd %xmm1,0x30(%rsp)
movapd (%rsp),%xmm1
addsd  0x20(%rsp),%xmm1
mulsd  %xmm0,%xmm1
movapd 0x40(%rsp),%xmm0
call   1030 <bd0@plt>
movapd 0x30(%rsp),%xmm1
movapd 0x20(%rsp),%xmm2
mulsd  0xc59(%rip),%xmm2
subsd  %xmm0,%xmm2
test   %ebx,%ebx
movapd 0x10(%rsp),%xmm0
je     13dd <dt+0x25d>
subsd  %xmm2,%xmm0
addsd  0xc5f(%rip),%xmm1
subsd  %xmm1,%xmm0
jmp    12e1 <dt+0x161>
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1407 <dt+0x287>
xorps  %xmm3,%xmm3
sqrtsd %xmm0,%xmm3
jmp    141c <dt+0x29c>
xorpd  0xc5b(%rip),%xmm1
movapd %xmm1,%xmm0
movapd %xmm2,0x20(%rsp)
call   1060 <exp@plt>
movapd 0x20(%rsp),%xmm2
movsd  %xmm0,(%rsp)
movapd 0x10(%rsp),%xmm0
jmp    1431 <dt+0x2b1>
movapd %xmm2,0x20(%rsp)
call   1090 <sqrt@plt>
movapd 0x20(%rsp),%xmm2
movapd %xmm0,%xmm3
movapd 0x10(%rsp),%xmm0
movapd 0x30(%rsp),%xmm1
divsd  %xmm1,%xmm3
movsd  %xmm3,(%rsp)
subsd  %xmm2,%xmm0
call   1060 <exp@plt>
mulsd  0xbe6(%rip),%xmm0
mulsd  (%rsp),%xmm0
jmp    12e1 <dt+0x161>

LLVM IR (-O0):
@NAN = global double 0.000000e+00
@INFINITY = global double 0.000000e+00
@DBL_EPSILON = global i32 0
define double @dt(double %0, double %1, i32 %2) {
%4 = alloca double
%5 = alloca double
%6 = alloca double
%7 = alloca i32
%8 = alloca double
%9 = alloca double
%10 = alloca double
%11 = alloca double
%12 = alloca double
%13 = alloca i32
%14 = alloca double
store double %0, double* %5
store double %1, double* %6
store i32 %2, i32* %7
%15 = load double, double* %6
%16 = fcmp ole double %15, 0.000000e+00
br i1 %16, label %17, label %19
17: ; preds = %3
%18 = load double, double* @NAN
store double %18, double* %4
br label %150
19: ; preds = %3
%20 = load double, double* %5
%21 = call i32 @isfinite(double %20)
%22 = icmp ne i32 %21, 0
br i1 %22, label %32, label %23
23: ; preds = %19
%24 = load i32, i32* %7
%25 = icmp ne i32 %24, 0
br i1 %25, label %26, label %29
26: ; preds = %23
%27 = load double, double* @INFINITY
%28 = fneg double %27
br label %30
29: ; preds = %23
br label %30
30: ; preds = %29, %26
%31 = phi double [ %28, %26 ], [ 0.000000e+00, %29 ]
store double %31, double* %4
br label %150
32: ; preds = %19
%33 = load double, double* %6
%34 = call i32 @isfinite(double %33)
%35 = icmp ne i32 %34, 0
br i1 %35, label %40, label %36
36: ; preds = %32
%37 = load double, double* %5
%38 = load i32, i32* %7
%39 = call double @dnorm(double %37, i32 0, i32 1, i32 %38)
store double %39, double* %4
br label %150
40: ; preds = %32
%41 = load double, double* %6
%42 = fdiv double %41, 2.000000e+00
%43 = load double, double* %6
%44 = fadd double %43, 1.000000e+00
%45 = fdiv double %44, 2.000000e+00
%46 = call double @bd0(double %42, double %45)
%47 = fneg double %46
%48 = load double, double* %6
%49 = fadd double %48, 1.000000e+00
%50 = fdiv double %49, 2.000000e+00
%51 = call double @stirlerr(double %50)
%52 = fadd double %47, %51
%53 = load double, double* %6
%54 = fdiv double %53, 2.000000e+00
%55 = call double @stirlerr(double %54)
%56 = fsub double %52, %55
store double %56, double* %10
%57 = load double, double* %5
%58 = load double, double* %5
%59 = fmul double %57, %58
%60 = load double, double* %6
%61 = fdiv double %59, %60
store double %61, double* %11
%62 = load double, double* %11
%63 = load i32, i32* @DBL_EPSILON
%64 = sitofp i32 %63 to double
%65 = fdiv double 1.000000e+00, %64
%66 = fcmp ogt double %62, %65
%67 = zext i1 %66 to i32
store i32 %67, i32* %13
%68 = load i32, i32* %13
%69 = icmp ne i32 %68, 0
br i1 %69, label %70, label %86
70: ; preds = %40
%71 = load double, double* %5
%72 = call double @llvm.fabs.f64(double %71)
store double %72, double* %9
%73 = load double, double* %9
%74 = fptosi double %73 to i32
%75 = call i32 @log(i32 %74)
%76 = sitofp i32 %75 to double
%77 = load double, double* %6
%78 = fptosi double %77 to i32
%79 = call i32 @log(i32 %78)
%80 = sitofp i32 %79 to double
%81 = fdiv double %80, 2.000000e+00
%82 = fsub double %76, %81
store double %82, double* %12
%83 = load double, double* %6
%84 = load double, double* %12
%85 = fmul double %83, %84
store double %85, double* %8
br label %119
86: ; preds = %40
%87 = load double, double* %11
%88 = fcmp ogt double %87, 2.000000e-01
br i1 %88, label %89, label %99
89: ; preds = %86
%90 = load double, double* %11
%91 = fadd double 1.000000e+00, %90
%92 = fptosi double %91 to i32
%93 = call i32 @log(i32 %92)
%94 = sitofp i32 %93 to double
%95 = fdiv double %94, 2.000000e+00
store double %95, double* %12
%96 = load double, double* %6
%97 = load double, double* %12
%98 = fmul double %96, %97
store double %98, double* %8
br label %118
99: ; preds = %86
%100 = load double, double* %11
%101 = call i32 @log1p(double %100)
%102 = sitofp i32 %101 to double
%103 = fdiv double %102, 2.000000e+00
store double %103, double* %12
%104 = load double, double* %6
%105 = fdiv double %104, 2.000000e+00
%106 = load double, double* %6
%107 = load double, double* %5
%108 = load double, double* %5
%109 = call double @llvm.fmuladd.f64(double %107, double %108, double %106)
%110 = fdiv double %109, 2.000000e+00
%111 = call double @bd0(double %105, double %110)
%112 = fneg double %111
%113 = load double, double* %5
%114 = load double, double* %5
%115 = fmul double %113, %114
%116 = fdiv double %115, 2.000000e+00
%117 = fadd double %112, %116
store double %117, double* %8
br label %118
118: ; preds = %99, %89
br label %119
119: ; preds = %118, %70
%120 = load i32, i32* %7
%121 = icmp ne i32 %120, 0
br i1 %121, label %122, label %129
122: ; preds = %119
%123 = load double, double* %10
%124 = load double, double* %8
%125 = fsub double %123, %124
%126 = load double, double* %12
%127 = fadd double 0x3FED67F1C864BEB5, %126
%128 = fsub double %125, %127
store double %128, double* %4
br label %150
129: ; preds = %119
%130 = load i32, i32* %13
%131 = icmp ne i32 %130, 0
br i1 %131, label %132, label %137
132: ; preds = %129
%133 = load double, double* %6
%134 = call double @sqrt(double %133)
%135 = load double, double* %9
%136 = fdiv double %134, %135
br label %141
137: ; preds = %129
%138 = load double, double* %12
%139 = fneg double %138
%140 = call double @exp(double %139)
br label %141
141: ; preds = %137, %132
%142 = phi double [ %136, %132 ], [ %140, %137 ]
store double %142, double* %14
%143 = load double, double* %10
%144 = load double, double* %8
%145 = fsub double %143, %144
%146 = call double @exp(double %145)
%147 = fmul double %146, 0x3FD9884533D43651
%148 = load double, double* %14
%149 = fmul double %147, %148
store double %149, double* %4
br label %150
150: ; preds = %141, %122, %36, %30, %17
%151 = load double, double* %4
ret double %151
}

LLVM IR (-O2):
@NAN = global double 0.000000e+00
@INFINITY = global double 0.000000e+00
@DBL_EPSILON = global i32 0
define double @dt(double %0, double %1, i32 %2) {
%4 = fcmp ugt double %1, 0.000000e+00
br i1 %4, label %7, label %5
5: ; preds = %3
%6 = load double, double* @NAN
br label %92
7: ; preds = %3
%8 = tail call i32 @isfinite(double %0)
%9 = icmp eq i32 %8, 0
br i1 %9, label %10, label %15
10: ; preds = %7
%11 = icmp eq i32 %2, 0
%12 = load double, double* @INFINITY
%13 = fneg double %12
%14 = select i1 %11, double 0.000000e+00, double %13
br label %92
15: ; preds = %7
%16 = tail call i32 @isfinite(double %1)
%17 = icmp eq i32 %16, 0
br i1 %17, label %18, label %20
18: ; preds = %15
%19 = tail call double @dnorm(double %0, i32 0, i32 1, i32 %2)
br label %92
20: ; preds = %15
%21 = fmul double %1, 5.000000e-01
%22 = fadd double %1, 1.000000e+00
%23 = fmul double %22, 5.000000e-01
%24 = tail call double @bd0(double %21, double %23)
%25 = tail call double @stirlerr(double %23)
%26 = fsub double %25, %24
%27 = tail call double @stirlerr(double %21)
%28 = fsub double %26, %27
%29 = fmul double %0, %0
%30 = load i32, i32* @DBL_EPSILON
%31 = sitofp i32 %30 to double
%32 = insertelement <2 x double> <double poison, double 1.000000e+00>, double %29, i64 0
%33 = insertelement <2 x double> poison, double %1, i64 0
%34 = insertelement <2 x double> %33, double %31, i64 1
%35 = fdiv <2 x double> %32, %34
%36 = extractelement <2 x double> %35, i64 0
%37 = extractelement <2 x double> %35, i64 1
%38 = fcmp ogt double %36, %37
br i1 %38, label %61, label %39
39: ; preds = %20
%40 = fcmp ogt double %36, 2.000000e-01
br i1 %40, label %41, label %48
41: ; preds = %39
%42 = fadd double %36, 1.000000e+00
%43 = fptosi double %42 to i32
%44 = tail call i32 @log(i32 %43)
%45 = sitofp i32 %44 to double
%46 = fmul double %45, 5.000000e-01
%47 = fmul double %46, %1
br label %57
48: ; preds = %39
%49 = tail call i32 @log1p(double %36)
%50 = sitofp i32 %49 to double
%51 = fmul double %50, 5.000000e-01
%52 = tail call double @llvm.fmuladd.f64(double %0, double %0, double %1)
%53 = fmul double %52, 5.000000e-01
%54 = tail call double @bd0(double %21, double %53)
%55 = fmul double %29, 5.000000e-01
%56 = fsub double %55, %54
br label %57
57: ; preds = %41, %48
%58 = phi double [ %46, %41 ], [ %51, %48 ]
%59 = phi double [ %47, %41 ], [ %56, %48 ]
%60 = icmp eq i32 %2, 0
br i1 %60, label %82, label %73
61: ; preds = %20
%62 = tail call double @llvm.fabs.f64(double %0)
%63 = fptosi double %62 to i32
%64 = tail call i32 @log(i32 %63)
%65 = sitofp i32 %64 to double
%66 = fptosi double %1 to i32
%67 = tail call i32 @log(i32 %66)
%68 = sitofp i32 %67 to double
%69 = fmul double %68, 5.000000e-01
%70 = fsub double %65, %69
%71 = fmul double %70, %1
%72 = icmp eq i32 %2, 0
br i1 %72, label %79, label %73
73: ; preds = %61, %57
%74 = phi double [ %71, %61 ], [ %59, %57 ]
%75 = phi double [ %70, %61 ], [ %58, %57 ]
%76 = fsub double %28, %74
%77 = fadd double %75, 0x3FED67F1C864BEB5
%78 = fsub double %76, %77
br label %92
79: ; preds = %61
%80 = tail call double @sqrt(double %1)
%81 = fdiv double %80, %62
br label %85
82: ; preds = %57
%83 = fneg double %58
%84 = tail call double @exp(double %83)
br label %85
85: ; preds = %82, %79
%86 = phi double [ %71, %79 ], [ %59, %82 ]
%87 = phi double [ %81, %79 ], [ %84, %82 ]
%88 = fsub double %28, %86
%89 = tail call double @exp(double %88)
%90 = fmul double %89, 0x3FD9884533D43651
%91 = fmul double %87, %90
br label %92
92: ; preds = %73, %85, %18, %10, %5
%93 = phi double [ %6, %5 ], [ %19, %18 ], [ %14, %10 ], [ %78, %73 ], [ %91, %85 ]
ret double %93
}