#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 fabs(double);
double probks(double);
double sqrt(double);
double ks2(int *cls, int len, int *n0, int *n1, double *kstail) {
  int i;
  double en0, en1, en;
  double y, ymax;
  if (len <= 1) {
    *kstail = 1.0;
    return 0;
  }
  *n0 = *n1 = 0;
  for (i = 0; i < len; i++) {
    if (cls[i] > 1)
      continue;
    if (cls[i] < 0)
      continue;
    if (cls[i] == 0)
      ++*n0;
    if (cls[i] == 1)
      ++*n1;
  }
  if (((*n0) < (*n1) ? (*n0) : (*n1)) == 0) {
    *kstail = 1.0;
    return 0;
  }
  en0 = (double)*n0;
  en1 = (double)*n1;
  ymax = y = 0.0;
  ;
  for (i = 0; i < len; i++) {
    if (cls[i] > 1)
      continue;
    if (cls[i] < 0)
      continue;
    if (cls[i] == 0)
      y += 1.0 / en0;
    if (cls[i] == 1)
      y -= 1.0 / en1;
    ymax = ((ymax) < (fabs(y)) ? (fabs(y)) : (ymax));
  }
  en = sqrt(en0 * en1 / (en0 + en1));
  y = en + .12 + (0.11 / en);
  y *= ymax;
  *kstail = probks(y);
  return y;
}


x86 assembly (clang, -O0):
<ks2>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
cmpl   $0x1,-0x14(%rbp)
jg     1162 <ks2+0x42>
mov    -0x30(%rbp),%rax
movsd  0xebf(%rip),%xmm0
movsd  %xmm0,(%rax)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    13e2 <ks2+0x2c2>
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x20(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1204 <ks2+0xe4>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jle    11a0 <ks2+0x80>
jmp    11f6 <ks2+0xd6>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jge    11b7 <ks2+0x97>
jmp    11f6 <ks2+0xd6>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    11d4 <ks2+0xb4>
mov    -0x20(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jne    11f1 <ks2+0xd1>
mov    -0x28(%rbp),%rax
mov    (%rax),%ecx
add    $0x1,%ecx
mov    %ecx,(%rax)
jmp    11f6 <ks2+0xd6>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    117d <ks2+0x5d>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    -0x28(%rbp),%rcx
cmp    (%rcx),%eax
jge    1224 <ks2+0x104>
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x64(%rbp)
jmp    122d <ks2+0x10d>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    $0x0,%eax
jne    1256 <ks2+0x136>
mov    -0x30(%rbp),%rax
movsd  0xdcb(%rip),%xmm0
movsd  %xmm0,(%rax)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    13e2 <ks2+0x2c2>
mov    -0x20(%rbp),%rax
cvtsi2sdl (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
cvtsi2sdl (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x58(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1372 <ks2+0x252>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jle    12aa <ks2+0x18a>
jmp    1364 <ks2+0x244>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jge    12c1 <ks2+0x1a1>
jmp    1364 <ks2+0x244>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    12ea <ks2+0x1ca>
movsd  0xd35(%rip),%xmm0
divsd  -0x40(%rbp),%xmm0
addsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jne    1317 <ks2+0x1f7>
movsd  0xd0c(%rip),%xmm1
divsd  -0x48(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x60(%rbp),%xmm1
movsd  -0x58(%rbp),%xmm0
movaps 0xcf8(%rip),%xmm2
pand   %xmm2,%xmm0
ucomisd %xmm1,%xmm0
jbe    1350 <ks2+0x230>
movsd  -0x58(%rbp),%xmm0
movaps 0xcde(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
jmp    135a <ks2+0x23a>
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1287 <ks2+0x167>
movsd  -0x40(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
addsd  -0x48(%rbp),%xmm1
divsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  0xc6c(%rip),%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  0xc57(%rip),%xmm1
divsd  -0x50(%rbp),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x60(%rbp),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
movsd  -0x58(%rbp),%xmm0
call   1030 <probks@plt>
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ks2>:
push   %r14
push   %rbx
push   %rax
mov    %r8,%r14
xorps  %xmm1,%xmm1
movsd  0xece(%rip),%xmm0
cmp    $0x2,%esi
jl     1252 <ks2+0x132>
movl   $0x0,(%rcx)
movl   $0x0,(%rdx)
mov    %esi,%r8d
xor    %ebx,%ebx
jmp    115c <ks2+0x3c>
xchg   %ax,%ax
addl   $0x1,(%rcx)
add    $0x1,%rbx
cmp    %rbx,%r8
je     1173 <ks2+0x53>
mov    (%rdi,%rbx,4),%eax
cmp    $0x1,%eax
ja     1153 <ks2+0x33>
test   %eax,%eax
jne    1150 <ks2+0x30>
addl   $0x1,(%rdx)
cmpl   $0x1,(%rdi,%rbx,4)
je     1150 <ks2+0x30>
jmp    1153 <ks2+0x33>
mov    (%rdx),%edx
mov    (%rcx),%ecx
cmp    %ecx,%edx
mov    %ecx,%eax
cmovl  %edx,%eax
test   %eax,%eax
je     1252 <ks2+0x132>
xorps  %xmm1,%xmm1
cvtsi2sd %edx,%xmm1
cvtsi2sd %ecx,%xmm2
xorpd  %xmm8,%xmm8
xorpd  %xmm3,%xmm3
test   %esi,%esi
jle    11f3 <ks2+0xd3>
movsd  0xe5a(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  0xe56(%rip),%xmm4
divsd  %xmm2,%xmm4
cmp    $0x1,%esi
jne    1262 <ks2+0x142>
xorpd  %xmm3,%xmm3
xor    %ecx,%ecx
xorpd  %xmm5,%xmm5
test   $0x1,%r8b
je     11f3 <ks2+0xd3>
mov    (%rdi,%rcx,4),%eax
cmp    $0x1,%eax
ja     11f3 <ks2+0xd3>
test   %eax,%eax
je     11df <ks2+0xbf>
movapd %xmm4,%xmm0
addsd  %xmm0,%xmm5
andpd  0xe35(%rip),%xmm5
maxsd  %xmm3,%xmm5
movapd %xmm5,%xmm3
movapd %xmm1,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
ucomisd %xmm8,%xmm0
jb     1210 <ks2+0xf0>
sqrtsd %xmm0,%xmm0
jmp    121f <ks2+0xff>
movsd  %xmm3,(%rsp)
call   1040 <sqrt@plt>
movsd  (%rsp),%xmm3
movsd  0xde9(%rip),%xmm1
addsd  %xmm0,%xmm1
movsd  0xde5(%rip),%xmm2
divsd  %xmm0,%xmm2
addsd  %xmm1,%xmm2
mulsd  %xmm2,%xmm3
movsd  %xmm3,(%rsp)
movapd %xmm3,%xmm0
call   1030 <probks@plt>
movsd  (%rsp),%xmm1
movsd  %xmm0,(%r14)
movaps %xmm1,%xmm0
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret
mov    %r8d,%edx
and    $0xfffffffe,%edx
xorpd  %xmm3,%xmm3
xor    %ecx,%ecx
movapd 0xdaa(%rip),%xmm6
xorpd  %xmm5,%xmm5
jmp    12a1 <ks2+0x181>
nopl   0x0(%rax)
addsd  %xmm7,%xmm5
movapd %xmm5,%xmm7
andpd  %xmm6,%xmm7
maxsd  %xmm3,%xmm7
movapd %xmm7,%xmm3
add    $0x2,%rcx
cmp    %rcx,%rdx
je     11c9 <ks2+0xa9>
mov    (%rdi,%rcx,4),%esi
cmp    $0x1,%esi
ja     12c9 <ks2+0x1a9>
movapd %xmm0,%xmm7
test   %esi,%esi
je     12b5 <ks2+0x195>
movapd %xmm4,%xmm7
addsd  %xmm7,%xmm5
movapd %xmm5,%xmm7
andpd  %xmm6,%xmm7
maxsd  %xmm3,%xmm7
movapd %xmm7,%xmm3
mov    0x4(%rdi,%rcx,4),%esi
cmp    $0x1,%esi
ja     1294 <ks2+0x174>
movapd %xmm0,%xmm7
test   %esi,%esi
je     1280 <ks2+0x160>
movapd %xmm4,%xmm7
jmp    1280 <ks2+0x160>

LLVM IR (-O0):
define double @ks2(i32* %0, i32 %1, i32* %2, i32* %3, double* %4) {
%6 = alloca double
%7 = alloca i32*
%8 = alloca i32
%9 = alloca i32*
%10 = alloca i32*
%11 = alloca double*
%12 = alloca i32
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
store i32* %0, i32** %7
store i32 %1, i32* %8
store i32* %2, i32** %9
store i32* %3, i32** %10
store double* %4, double** %11
%18 = load i32, i32* %8
%19 = icmp sle i32 %18, 1
br i1 %19, label %20, label %22
20: ; preds = %5
%21 = load double*, double** %11
store double 1.000000e+00, double* %21
store double 0.000000e+00, double* %6
br label %175
22: ; preds = %5
%23 = load i32*, i32** %10
store i32 0, i32* %23
%24 = load i32*, i32** %9
store i32 0, i32* %24
store i32 0, i32* %12
br label %25
25: ; preds = %68, %22
%26 = load i32, i32* %12
%27 = load i32, i32* %8
%28 = icmp slt i32 %26, %27
br i1 %28, label %29, label %71
29: ; preds = %25
%30 = load i32*, i32** %7
%31 = load i32, i32* %12
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds i32, i32* %30, i64 %32
%34 = load i32, i32* %33
%35 = icmp sgt i32 %34, 1
br i1 %35, label %36, label %37
36: ; preds = %29
br label %68
37: ; preds = %29
%38 = load i32*, i32** %7
%39 = load i32, i32* %12
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds i32, i32* %38, i64 %40
%42 = load i32, i32* %41
%43 = icmp slt i32 %42, 0
br i1 %43, label %44, label %45
44: ; preds = %37
br label %68
45: ; preds = %37
%46 = load i32*, i32** %7
%47 = load i32, i32* %12
%48 = sext i32 %47 to i64
%49 = getelementptr inbounds i32, i32* %46, i64 %48
%50 = load i32, i32* %49
%51 = icmp eq i32 %50, 0
br i1 %51, label %52, label %56
52: ; preds = %45
%53 = load i32*, i32** %9
%54 = load i32, i32* %53
%55 = add nsw i32 %54, 1
store i32 %55, i32* %53
br label %56
56: ; preds = %52, %45
%57 = load i32*, i32** %7
%58 = load i32, i32* %12
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds i32, i32* %57, i64 %59
%61 = load i32, i32* %60
%62 = icmp eq i32 %61, 1
br i1 %62, label %63, label %67
63: ; preds = %56
%64 = load i32*, i32** %10
%65 = load i32, i32* %64
%66 = add nsw i32 %65, 1
store i32 %66, i32* %64
br label %67
67: ; preds = %63, %56
br label %68
68: ; preds = %67, %44, %36
%69 = load i32, i32* %12
%70 = add nsw i32 %69, 1
store i32 %70, i32* %12
br label %25
71: ; preds = %25
%72 = load i32*, i32** %9
%73 = load i32, i32* %72
%74 = load i32*, i32** %10
%75 = load i32, i32* %74
%76 = icmp slt i32 %73, %75
br i1 %76, label %77, label %80
77: ; preds = %71
%78 = load i32*, i32** %9
%79 = load i32, i32* %78
br label %83
80: ; preds = %71
%81 = load i32*, i32** %10
%82 = load i32, i32* %81
br label %83
83: ; preds = %80, %77
%84 = phi i32 [ %79, %77 ], [ %82, %80 ]
%85 = icmp eq i32 %84, 0
br i1 %85, label %86, label %88
86: ; preds = %83
%87 = load double*, double** %11
store double 1.000000e+00, double* %87
store double 0.000000e+00, double* %6
br label %175
88: ; preds = %83
%89 = load i32*, i32** %9
%90 = load i32, i32* %89
%91 = sitofp i32 %90 to double
store double %91, double* %13
%92 = load i32*, i32** %10
%93 = load i32, i32* %92
%94 = sitofp i32 %93 to double
store double %94, double* %14
store double 0.000000e+00, double* %16
store double 0.000000e+00, double* %17
store i32 0, i32* %12
br label %95
95: ; preds = %151, %88
%96 = load i32, i32* %12
%97 = load i32, i32* %8
%98 = icmp slt i32 %96, %97
br i1 %98, label %99, label %154
99: ; preds = %95
%100 = load i32*, i32** %7
%101 = load i32, i32* %12
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds i32, i32* %100, i64 %102
%104 = load i32, i32* %103
%105 = icmp sgt i32 %104, 1
br i1 %105, label %106, label %107
106: ; preds = %99
br label %151
107: ; preds = %99
%108 = load i32*, i32** %7
%109 = load i32, i32* %12
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds i32, i32* %108, i64 %110
%112 = load i32, i32* %111
%113 = icmp slt i32 %112, 0
br i1 %113, label %114, label %115
114: ; preds = %107
br label %151
115: ; preds = %107
%116 = load i32*, i32** %7
%117 = load i32, i32* %12
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds i32, i32* %116, i64 %118
%120 = load i32, i32* %119
%121 = icmp eq i32 %120, 0
br i1 %121, label %122, label %127
122: ; preds = %115
%123 = load double, double* %13
%124 = fdiv double 1.000000e+00, %123
%125 = load double, double* %16
%126 = fadd double %125, %124
store double %126, double* %16
br label %127
127: ; preds = %122, %115
%128 = load i32*, i32** %7
%129 = load i32, i32* %12
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds i32, i32* %128, i64 %130
%132 = load i32, i32* %131
%133 = icmp eq i32 %132, 1
br i1 %133, label %134, label %139
134: ; preds = %127
%135 = load double, double* %14
%136 = fdiv double 1.000000e+00, %135
%137 = load double, double* %16
%138 = fsub double %137, %136
store double %138, double* %16
br label %139
139: ; preds = %134, %127
%140 = load double, double* %17
%141 = load double, double* %16
%142 = call double @llvm.fabs.f64(double %141)
%143 = fcmp olt double %140, %142
br i1 %143, label %144, label %147
144: ; preds = %139
%145 = load double, double* %16
%146 = call double @llvm.fabs.f64(double %145)
br label %149
147: ; preds = %139
%148 = load double, double* %17
br label %149
149: ; preds = %147, %144
%150 = phi double [ %146, %144 ], [ %148, %147 ]
store double %150, double* %17
br label %151
151: ; preds = %149, %114, %106
%152 = load i32, i32* %12
%153 = add nsw i32 %152, 1
store i32 %153, i32* %12
br label %95
154: ; preds = %95
%155 = load double, double* %13
%156 = load double, double* %14
%157 = fmul double %155, %156
%158 = load double, double* %13
%159 = load double, double* %14
%160 = fadd double %158, %159
%161 = fdiv double %157, %160
%162 = call double @sqrt(double %161)
store double %162, double* %15
%163 = load double, double* %15
%164 = fadd double %163, 1.200000e-01
%165 = load double, double* %15
%166 = fdiv double 1.100000e-01, %165
%167 = fadd double %164, %166
store double %167, double* %16
%168 = load double, double* %17
%169 = load double, double* %16
%170 = fmul double %169, %168
store double %170, double* %16
%171 = load double, double* %16
%172 = call double @probks(double %171)
%173 = load double*, double** %11
store double %172, double* %173
%174 = load double, double* %16
store double %174, double* %6
br label %175
175: ; preds = %154, %86, %20
%176 = load double, double* %6
ret double %176
}

LLVM IR (-O2):
define double @ks2(i32* nocapture %0, i32 %1, i32* nocapture %2, i32* nocapture %3, double* nocapture writeonly %4) {
%6 = icmp slt i32 %1, 2
br i1 %6, label %107, label %7
7: ; preds = %5
store i32 0, i32* %3
store i32 0, i32* %2
%8 = zext i32 %1 to i64
br label %9
9: ; preds = %7, %24
%10 = phi i64 [ 0, %7 ], [ %25, %24 ]
%11 = getelementptr inbounds i32, i32* %0, i64 %10
%12 = load i32, i32* %11
%13 = icmp ugt i32 %12, 1
br i1 %13, label %24, label %14
14: ; preds = %9
%15 = icmp eq i32 %12, 0
br i1 %15, label %16, label %21
16: ; preds = %14
%17 = load i32, i32* %2
%18 = add nsw i32 %17, 1
store i32 %18, i32* %2
%19 = load i32, i32* %11
%20 = icmp eq i32 %19, 1
br i1 %20, label %21, label %24
21: ; preds = %14, %16
%22 = load i32, i32* %3
%23 = add nsw i32 %22, 1
store i32 %23, i32* %3
br label %24
24: ; preds = %16, %21, %9
%25 = add nuw nsw i64 %10, 1
%26 = icmp eq i64 %25, %8
br i1 %26, label %27, label %9
27: ; preds = %24
%28 = load i32, i32* %2
%29 = load i32, i32* %3
%30 = icmp slt i32 %28, %29
%31 = select i1 %30, i32 %28, i32 %29
%32 = icmp eq i32 %31, 0
br i1 %32, label %107, label %33
33: ; preds = %27
%34 = sitofp i32 %28 to double
%35 = sitofp i32 %29 to double
%36 = icmp sgt i32 %1, 0
br i1 %36, label %37, label %96
37: ; preds = %33
%38 = fdiv double 1.000000e+00, %34
%39 = fdiv double -1.000000e+00, %35
%40 = and i64 %8, 1
%41 = icmp eq i32 %1, 1
br i1 %41, label %79, label %42
42: ; preds = %37
%43 = and i64 %8, 4294967294
br label %44
44: ; preds = %73, %42
%45 = phi i64 [ 0, %42 ], [ %76, %73 ]
%46 = phi double [ 0.000000e+00, %42 ], [ %75, %73 ]
%47 = phi double [ 0.000000e+00, %42 ], [ %74, %73 ]
%48 = phi i64 [ 0, %42 ], [ %77, %73 ]
%49 = getelementptr inbounds i32, i32* %0, i64 %45
%50 = load i32, i32* %49
%51 = icmp ugt i32 %50, 1
br i1 %51, label %59, label %52
52: ; preds = %44
%53 = icmp eq i32 %50, 0
%54 = select i1 %53, double %38, double %39
%55 = fadd double %47, %54
%56 = tail call double @llvm.fabs.f64(double %55)
%57 = fcmp olt double %46, %56
%58 = select i1 %57, double %56, double %46
br label %59
59: ; preds = %44, %52
%60 = phi double [ %47, %44 ], [ %55, %52 ]
%61 = phi double [ %46, %44 ], [ %58, %52 ]
%62 = or i64 %45, 1
%63 = getelementptr inbounds i32, i32* %0, i64 %62
%64 = load i32, i32* %63
%65 = icmp ugt i32 %64, 1
br i1 %65, label %73, label %66
66: ; preds = %59
%67 = icmp eq i32 %64, 0
%68 = select i1 %67, double %38, double %39
%69 = fadd double %60, %68
%70 = tail call double @llvm.fabs.f64(double %69)
%71 = fcmp olt double %61, %70
%72 = select i1 %71, double %70, double %61
br label %73
73: ; preds = %66, %59
%74 = phi double [ %60, %59 ], [ %69, %66 ]
%75 = phi double [ %61, %59 ], [ %72, %66 ]
%76 = add nuw nsw i64 %45, 2
%77 = add i64 %48, 2
%78 = icmp eq i64 %77, %43
br i1 %78, label %79, label %44
79: ; preds = %73, %37
%80 = phi double [ undef, %37 ], [ %75, %73 ]
%81 = phi i64 [ 0, %37 ], [ %76, %73 ]
%82 = phi double [ 0.000000e+00, %37 ], [ %75, %73 ]
%83 = phi double [ 0.000000e+00, %37 ], [ %74, %73 ]
%84 = icmp eq i64 %40, 0
br i1 %84, label %96, label %85
85: ; preds = %79
%86 = getelementptr inbounds i32, i32* %0, i64 %81
%87 = load i32, i32* %86
%88 = icmp ugt i32 %87, 1
br i1 %88, label %96, label %89
89: ; preds = %85
%90 = icmp eq i32 %87, 0
%91 = select i1 %90, double %38, double %39
%92 = fadd double %83, %91
%93 = tail call double @llvm.fabs.f64(double %92)
%94 = fcmp olt double %82, %93
%95 = select i1 %94, double %93, double %82
br label %96
96: ; preds = %79, %89, %85, %33
%97 = phi double [ 0.000000e+00, %33 ], [ %80, %79 ], [ %82, %85 ], [ %95, %89 ]
%98 = fmul double %34, %35
%99 = fadd double %34, %35
%100 = fdiv double %98, %99
%101 = tail call double @sqrt(double %100)
%102 = fadd double %101, 1.200000e-01
%103 = fdiv double 1.100000e-01, %101
%104 = fadd double %102, %103
%105 = fmul double %97, %104
%106 = tail call double @probks(double %105)
br label %107
107: ; preds = %27, %5, %96
%108 = phi double [ %106, %96 ], [ 1.000000e+00, %5 ], [ 1.000000e+00, %27 ]
%109 = phi double [ %105, %96 ], [ 0.000000e+00, %5 ], [ 0.000000e+00, %27 ]
store double %108, double* %4
ret double %109
}