#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 exp(double);
double log(double);
double ntail(double);
double sqrt(double);
double pochisq(double x, int df) {
  double a, y, s;
  double e, c, z;
  double poz();
  int even;
  if (x <= 0.0 || df < 1)
    return (1.0);
  a = 0.5 * x;
  even = (2 * (df / 2)) == df;
  if (df > 1)
    y = (((-a) < -20.0) ? 0.0 : exp(-a));
  s = (even ? y : (2.0 * ntail(sqrt(x))));
  if (df > 2) {
    x = 0.5 * (df - 1.0);
    z = (even ? 1.0 : 0.5);
    if (a > 20.0) {
      e = (even ? 0.0 : 0.5723649429247000870717135);
      c = log(a);
      while (z <= x) {
        e = log(z) + e;
        s += (((c * z - a - e) < -20.0) ? 0.0 : exp(c * z - a - e));
        z += 1.0;
      }
      return (s);
    } else {
      e = (even ? 1.0 : (0.5641895835477562869480795 / sqrt(a)));
      c = 0.0;
      while (z <= x) {
        e = e * (a / z);
        c = c + e;
        z += 1.0;
      }
      return (c * y + s);
    }
  } else
    return (s);
}


x86 assembly (clang, -O0):
<pochisq>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
movsd  %xmm0,-0x10(%rbp)
mov    %edi,-0x14(%rbp)
xorps  %xmm0,%xmm0
ucomisd -0x10(%rbp),%xmm0
jae    116b <pochisq+0x2b>
cmpl   $0x1,-0x14(%rbp)
jge    117d <pochisq+0x3d>
movsd  0xead(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14ee <pochisq+0x3ae>
movsd  0xe7b(%rip),%xmm0
mulsd  -0x10(%rbp),%xmm0
movsd  %xmm0,-0x20(%rbp)
mov    -0x14(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
shl    $0x1,%eax
cmp    -0x14(%rbp),%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x1,-0x14(%rbp)
jle    1220 <pochisq+0xe0>
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  0xe2f(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    11f0 <pochisq+0xb0>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
jmp    1216 <pochisq+0xd6>
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
call   1040 <exp@plt>
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x28(%rbp)
cmpl   $0x0,-0x4c(%rbp)
je     1239 <pochisq+0xf9>
movsd  -0x28(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    125c <pochisq+0x11c>
movsd  -0x10(%rbp),%xmm0
call   1060 <sqrt@plt>
call   1030 <ntail@plt>
movaps %xmm0,%xmm1
movsd  0xdbd(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
cmpl   $0x2,-0x14(%rbp)
jle    14e4 <pochisq+0x3a4>
cvtsi2sdl -0x14(%rbp),%xmm1
movsd  0xda3(%rip),%xmm0
subsd  %xmm0,%xmm1
movsd  0xd77(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x10(%rbp)
mov    -0x4c(%rbp),%eax
movsd  0xd83(%rip),%xmm0
movsd  0xd5b(%rip),%xmm1
movsd  %xmm1,-0x70(%rbp)
cmp    $0x0,%eax
movsd  %xmm0,-0x68(%rbp)
jne    12c2 <pochisq+0x182>
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x20(%rbp),%xmm0
movsd  0xd3f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    141c <pochisq+0x2dc>
mov    -0x4c(%rbp),%eax
xorps  %xmm0,%xmm0
movsd  0xd3f(%rip),%xmm1
movsd  %xmm1,-0x80(%rbp)
cmp    $0x0,%eax
movsd  %xmm0,-0x78(%rbp)
jne    130e <pochisq+0x1ce>
movsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x20(%rbp),%xmm0
call   1050 <log@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     140d <pochisq+0x2cd>
movsd  -0x48(%rbp),%xmm0
call   1050 <log@plt>
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x40(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
subsd  -0x38(%rbp),%xmm1
movsd  0xc7e(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    13a4 <pochisq+0x264>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    13e4 <pochisq+0x2a4>
movsd  -0x40(%rbp),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x20(%rbp),%xmm1
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
subsd  -0x38(%rbp),%xmm0
call   1040 <exp@plt>
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  0xc22(%rip),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1327 <pochisq+0x1e7>
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14ee <pochisq+0x3ae>
cmpl   $0x0,-0x4c(%rbp)
je     143b <pochisq+0x2fb>
movsd  0xbf2(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    145c <pochisq+0x31c>
movsd  -0x20(%rbp),%xmm0
call   1060 <sqrt@plt>
movaps %xmm0,%xmm1
movsd  0xbd8(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x10(%rbp),%xmm0
ucomisd %xmm1,%xmm0
jb     14c3 <pochisq+0x383>
movsd  -0x38(%rbp),%xmm0
movsd  -0x20(%rbp),%xmm1
divsd  -0x48(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x40(%rbp),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xb6c(%rip),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
jmp    1471 <pochisq+0x331>
movsd  -0x40(%rbp),%xmm0
movsd  -0x28(%rbp),%xmm2
movsd  -0x30(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    14ee <pochisq+0x3ae>
movsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pochisq>:
push   %rbp
push   %rbx
sub    $0x38,%rsp
movapd %xmm0,%xmm1
xorpd  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
movsd  0xea6(%rip),%xmm5
jae    134c <pochisq+0x20c>
mov    %edi,%ebx
test   %edi,%edi
jle    134c <pochisq+0x20c>
movsd  0xe96(%rip),%xmm4
mulsd  %xmm1,%xmm4
mov    %ebx,%ebp
and    $0xfffffffe,%ebp
cmp    $0x2,%ebx
movapd %xmm4,0x20(%rsp)
jb     11bb <pochisq+0x7b>
xorpd  %xmm8,%xmm8
ucomisd 0xe7d(%rip),%xmm4
ja     11bb <pochisq+0x7b>
movapd 0xea3(%rip),%xmm0
xorpd  %xmm4,%xmm0
movsd  %xmm1,(%rsp)
call   1040 <exp@plt>
movsd  (%rsp),%xmm1
movapd 0x20(%rsp),%xmm4
movapd %xmm0,%xmm8
movapd %xmm8,%xmm5
cmp    %ebx,%ebp
je     1201 <pochisq+0xc1>
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm1
movsd  %xmm8,0x8(%rsp)
jb     11de <pochisq+0x9e>
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
jmp    11e7 <pochisq+0xa7>
movapd %xmm1,%xmm0
call   1060 <sqrt@plt>
call   1030 <ntail@plt>
movapd %xmm0,%xmm5
addsd  %xmm0,%xmm5
movapd 0x20(%rsp),%xmm4
movsd  0x8(%rsp),%xmm8
cmp    $0x3,%ebx
jb     134c <pochisq+0x20c>
xor    %eax,%eax
cmp    %ebx,%ebp
cvtsi2sd %ebx,%xmm6
addsd  0xdfe(%rip),%xmm6
sete   %al
mulsd  0xde3(%rip),%xmm6
lea    0xe24(%rip),%rcx
movsd  (%rcx,%rax,8),%xmm7
ucomisd 0xdd7(%rip),%xmm4
movsd  %xmm6,0x18(%rsp)
jbe    1275 <pochisq+0x135>
movsd  %xmm5,0x10(%rsp)
movapd %xmm4,%xmm0
movsd  %xmm7,(%rsp)
call   1050 <log@plt>
movsd  (%rsp),%xmm2
movapd %xmm0,%xmm1
movsd  0x18(%rsp),%xmm0
ucomisd %xmm2,%xmm0
jae    128a <pochisq+0x14a>
movsd  0x10(%rsp),%xmm0
jmp    1350 <pochisq+0x210>
cmp    %ebx,%ebp
jne    1357 <pochisq+0x217>
movsd  0xd7b(%rip),%xmm1
jmp    13af <pochisq+0x26f>
movsd  %xmm1,0x30(%rsp)
xorpd  %xmm3,%xmm3
cmp    %ebx,%ebp
je     12a0 <pochisq+0x160>
movsd  0xd88(%rip),%xmm3
movapd 0x20(%rsp),%xmm0
xorpd  0xd92(%rip),%xmm0
movapd %xmm0,0x20(%rsp)
movsd  0x10(%rsp),%xmm5
jmp    12de <pochisq+0x19e>
nopl   0x0(%rax)
movsd  0x10(%rsp),%xmm5
addsd  %xmm1,%xmm5
addsd  0xd2e(%rip),%xmm2
movsd  0x18(%rsp),%xmm0
ucomisd %xmm2,%xmm0
jb     134c <pochisq+0x20c>
movsd  %xmm2,(%rsp)
movsd  %xmm5,0x10(%rsp)
movsd  %xmm3,0x8(%rsp)
movapd %xmm2,%xmm0
call   1050 <log@plt>
movsd  (%rsp),%xmm2
movapd %xmm0,%xmm3
addsd  0x8(%rsp),%xmm3
movsd  0x30(%rsp),%xmm0
mulsd  %xmm2,%xmm0
addsd  0x20(%rsp),%xmm0
subsd  %xmm3,%xmm0
xorpd  %xmm1,%xmm1
movsd  0xd09(%rip),%xmm4
ucomisd %xmm0,%xmm4
ja     12c0 <pochisq+0x180>
movsd  %xmm3,0x8(%rsp)
call   1040 <exp@plt>
movsd  0x8(%rsp),%xmm3
movsd  (%rsp),%xmm2
movapd %xmm0,%xmm1
jmp    12c0 <pochisq+0x180>
movapd %xmm5,%xmm0
add    $0x38,%rsp
pop    %rbx
pop    %rbp
ret
xorpd  %xmm0,%xmm0
ucomisd %xmm0,%xmm4
jb     136a <pochisq+0x22a>
xorps  %xmm0,%xmm0
sqrtsd %xmm4,%xmm0
jmp    13a3 <pochisq+0x263>
movapd %xmm4,%xmm0
movsd  %xmm5,0x10(%rsp)
movsd  %xmm7,(%rsp)
movsd  %xmm8,0x8(%rsp)
call   1060 <sqrt@plt>
movsd  0x8(%rsp),%xmm8
movsd  (%rsp),%xmm7
movsd  0x18(%rsp),%xmm6
movsd  0x10(%rsp),%xmm5
movapd 0x20(%rsp),%xmm4
movsd  0xc75(%rip),%xmm1
divsd  %xmm0,%xmm1
xorpd  %xmm0,%xmm0
ucomisd %xmm7,%xmm6
jb     13ea <pochisq+0x2aa>
xorpd  %xmm0,%xmm0
movsd  0xc3b(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nop
movapd %xmm4,%xmm3
divsd  %xmm7,%xmm3
mulsd  %xmm3,%xmm1
addsd  %xmm1,%xmm0
addsd  %xmm2,%xmm7
ucomisd %xmm7,%xmm6
jae    13d0 <pochisq+0x290>
mulsd  %xmm8,%xmm0
addsd  %xmm5,%xmm0
jmp    1350 <pochisq+0x210>

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

LLVM IR (-O2):
define double @pochisq(double %0, i32 %1) {
%3 = fcmp ole double %0, 0.000000e+00
%4 = icmp slt i32 %1, 1
%5 = or i1 %3, %4
br i1 %5, label %72, label %6
6: ; preds = %2
%7 = fmul double %0, 5.000000e-01
%8 = and i32 %1, -2
%9 = icmp eq i32 %8, %1
%10 = icmp ugt i32 %1, 1
br i1 %10, label %11, label %16
11: ; preds = %6
%12 = fcmp ogt double %7, 2.000000e+01
br i1 %12, label %16, label %13
13: ; preds = %11
%14 = fneg double %7
%15 = tail call double @exp(double %14)
br label %16
16: ; preds = %13, %11, %6
%17 = phi double [ undef, %6 ], [ %15, %13 ], [ 0.000000e+00, %11 ]
br i1 %9, label %22, label %18
18: ; preds = %16
%19 = tail call double @sqrt(double %0)
%20 = tail call double @ntail(double %19)
%21 = fmul double %20, 2.000000e+00
br label %22
22: ; preds = %16, %18
%23 = phi double [ %21, %18 ], [ %17, %16 ]
%24 = icmp ugt i32 %1, 2
br i1 %24, label %25, label %72
25: ; preds = %22
%26 = sitofp i32 %1 to double
%27 = fadd double %26, -1.000000e+00
%28 = fmul double %27, 5.000000e-01
%29 = select i1 %9, double 1.000000e+00, double 5.000000e-01
%30 = fcmp ogt double %7, 2.000000e+01
br i1 %30, label %31, label %53
31: ; preds = %25
%32 = tail call double @log(double %7)
%33 = fcmp ugt double %29, %28
br i1 %33, label %72, label %34
34: ; preds = %31
%35 = select i1 %9, double 0.000000e+00, double 0x3FE250D048E7A1BD
%36 = fneg double %7
br label %37
37: ; preds = %34, %48
%38 = phi double [ %29, %34 ], [ %51, %48 ]
%39 = phi double [ %35, %34 ], [ %42, %48 ]
%40 = phi double [ %23, %34 ], [ %50, %48 ]
%41 = tail call double @log(double %38)
%42 = fadd double %39, %41
%43 = tail call double @llvm.fmuladd.f64(double %32, double %38, double %36)
%44 = fsub double %43, %42
%45 = fcmp olt double %44, -2.000000e+01
br i1 %45, label %48, label %46
46: ; preds = %37
%47 = tail call double @exp(double %44)
br label %48
48: ; preds = %37, %46
%49 = phi double [ %47, %46 ], [ 0.000000e+00, %37 ]
%50 = fadd double %40, %49
%51 = fadd double %38, 1.000000e+00
%52 = fcmp ugt double %51, %28
br i1 %52, label %72, label %37
53: ; preds = %25
br i1 %9, label %57, label %54
54: ; preds = %53
%55 = tail call double @sqrt(double %7)
%56 = fdiv double 0x3FE20DD750429B6D, %55
br label %57
57: ; preds = %53, %54
%58 = phi double [ %56, %54 ], [ 1.000000e+00, %53 ]
%59 = fcmp ugt double %29, %28
br i1 %59, label %69, label %60
60: ; preds = %57, %60
%61 = phi double [ %67, %60 ], [ %29, %57 ]
%62 = phi double [ %66, %60 ], [ 0.000000e+00, %57 ]
%63 = phi double [ %65, %60 ], [ %58, %57 ]
%64 = fdiv double %7, %61
%65 = fmul double %63, %64
%66 = fadd double %62, %65
%67 = fadd double %61, 1.000000e+00
%68 = fcmp ugt double %67, %28
br i1 %68, label %69, label %60
69: ; preds = %60, %57
%70 = phi double [ 0.000000e+00, %57 ], [ %66, %60 ]
%71 = tail call double @llvm.fmuladd.f64(double %70, double %17, double %23)
br label %72
72: ; preds = %48, %31, %22, %2, %69
%73 = phi double [ %71, %69 ], [ 1.000000e+00, %2 ], [ %23, %22 ], [ %23, %31 ], [ %50, %48 ]
ret double %73
}