#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 /*<<< orphan*/ get_result(int *, double **, double **, double **,
                              double **);
int /*<<< orphan*/ sprintf(char *, char *, char *);
double sqrt(double);
int /*<<< orphan*/ system(char *);
int /*<<< orphan*/ write_sex_cfg();
double run_sex(char *fitsfile) {
  char command[256];
  int N, j, x;
  double *xx, *yy, *F, *Q;
  double S, NN, E, tt;
  write_sex_cfg();
  sprintf(command, "sex -c _sex.cfg %s", fitsfile);
  system(command);
  get_result(&N, &xx, &yy, &F, &Q);
  do {
    S = 0;
    NN = 0;
    for (x = 0; x < N; x++)
      if (F[x] > 0) {
        S += Q[x];
        NN++;
      }
    S /= NN;
    E = 0;
    for (x = 0; x < N; x++)
      if (F[x] > 0) {
        tt = S - Q[x];
        E += tt * tt;
      }
    E = sqrt(E / (NN - 1));
    j = 0;
    for (x = 0; x < N; x++) {
      tt = S - Q[x];
      if (F[x] > 0)
        if ((tt > 2 * E) || (tt < -2 * E)) {
          F[x] = 0;
          j++;
        }
    }
  } while (j);
  if (N > 10)
    return S;
  else
    return -1.0;
}


x86 assembly (clang, -O0):
<run_sex>:
push   %rbp
mov    %rsp,%rbp
sub    $0x160,%rsp
mov    %rdi,-0x10(%rbp)
mov    $0x0,%al
call   1050 <write_sex_cfg@plt>
lea    -0x110(%rbp),%rdi
mov    -0x10(%rbp),%rdx
lea    0xea8(%rip),%rsi
call   1070 <sprintf@plt>
lea    -0x110(%rbp),%rdi
call   1040 <system@plt>
lea    -0x114(%rbp),%rdi
lea    -0x128(%rbp),%rsi
lea    -0x130(%rbp),%rdx
lea    -0x138(%rbp),%rcx
lea    -0x140(%rbp),%r8
call   1030 <get_result@plt>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
movl   $0x0,-0x11c(%rbp)
mov    -0x11c(%rbp),%eax
cmp    -0x114(%rbp),%eax
jge    1257 <run_sex+0x107>
mov    -0x138(%rbp),%rax
movslq -0x11c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    123e <run_sex+0xee>
mov    -0x140(%rbp),%rax
movslq -0x11c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x148(%rbp),%xmm0
ff
movsd  %xmm0,-0x148(%rbp)
ff
movsd  0xdd2(%rip),%xmm0
addsd  -0x150(%rbp),%xmm0
ff
movsd  %xmm0,-0x150(%rbp)
ff
jmp    1243 <run_sex+0xf3>
mov    -0x11c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x11c(%rbp)
jmp    11d1 <run_sex+0x81>
movsd  -0x150(%rbp),%xmm1
ff
movsd  -0x148(%rbp),%xmm0
ff
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
movl   $0x0,-0x11c(%rbp)
mov    -0x11c(%rbp),%eax
cmp    -0x114(%rbp),%eax
jge    131e <run_sex+0x1ce>
mov    -0x138(%rbp),%rax
movslq -0x11c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1305 <run_sex+0x1b5>
movsd  -0x148(%rbp),%xmm0
ff
mov    -0x140(%rbp),%rax
movslq -0x11c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
movsd  -0x160(%rbp),%xmm2
ff
movsd  -0x158(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
jmp    130a <run_sex+0x1ba>
mov    -0x11c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x11c(%rbp)
jmp    1288 <run_sex+0x138>
movsd  -0x158(%rbp),%xmm0
ff
movsd  -0x150(%rbp),%xmm1
ff
movsd  0xcca(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
call   1060 <sqrt@plt>
movsd  %xmm0,-0x158(%rbp)
ff
movl   $0x0,-0x118(%rbp)
movl   $0x0,-0x11c(%rbp)
mov    -0x11c(%rbp),%eax
cmp    -0x114(%rbp),%eax
jge    143b <run_sex+0x2eb>
movsd  -0x148(%rbp),%xmm0
ff
mov    -0x140(%rbp),%rax
movslq -0x11c(%rbp),%rcx
subsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
mov    -0x138(%rbp),%rax
movslq -0x11c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    1422 <run_sex+0x2d2>
movsd  -0x160(%rbp),%xmm0
ff
movsd  0xc4c(%rip),%xmm1
mulsd  -0x158(%rbp),%xmm1
ff
ucomisd %xmm1,%xmm0
ja     13f8 <run_sex+0x2a8>
movsd  -0x160(%rbp),%xmm1
ff
movsd  0xc32(%rip),%xmm0
mulsd  -0x158(%rbp),%xmm0
ff
ucomisd %xmm1,%xmm0
jbe    141d <run_sex+0x2cd>
mov    -0x138(%rbp),%rax
movslq -0x11c(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x118(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x118(%rbp)
jmp    1422 <run_sex+0x2d2>
jmp    1427 <run_sex+0x2d7>
mov    -0x11c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x11c(%rbp)
jmp    135f <run_sex+0x20f>
jmp    1440 <run_sex+0x2f0>
cmpl   $0x0,-0x118(%rbp)
jne    11b1 <run_sex+0x61>
cmpl   $0xa,-0x114(%rbp)
jle    146c <run_sex+0x31c>
movsd  -0x148(%rbp),%xmm0
ff
movsd  %xmm0,-0x8(%rbp)
jmp    1479 <run_sex+0x329>
movsd  0xb94(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x160,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<run_sex>:
push   %r14
push   %rbx
sub    $0x138,%rsp
mov    %rdi,%rbx
xor    %eax,%eax
call   1050 <write_sex_cfg@plt>
lea    0xeb5(%rip),%rsi
lea    0x30(%rsp),%r14
mov    %r14,%rdi
mov    %rbx,%rdx
call   1070 <sprintf@plt>
mov    %r14,%rdi
call   1040 <system@plt>
lea    0x4(%rsp),%rdi
lea    0x28(%rsp),%rsi
lea    0x20(%rsp),%rdx
lea    0x10(%rsp),%rcx
lea    0x8(%rsp),%r8
call   1030 <get_result@plt>
mov    0x4(%rsp),%eax
movsd  0xe53(%rip),%xmm4
xorpd  %xmm5,%xmm5
movsd  0xe4f(%rip),%xmm6
movsd  0xe4f(%rip),%xmm3
movsd  0xe4f(%rip),%xmm7
jmp    11d8 <run_sex+0x88>
nopl   0x0(%rax,%rax,1)
test   %edi,%edi
je     13eb <run_sex+0x29b>
movapd %xmm4,%xmm8
xorpd  %xmm1,%xmm1
xorpd  %xmm0,%xmm0
test   %eax,%eax
jle    1330 <run_sex+0x1e0>
mov    0x10(%rsp),%rdi
mov    0x8(%rsp),%rsi
mov    %eax,%r8d
mov    %r8,%rdx
add    $0xffffffffffffffff,%rdx
je     1260 <run_sex+0x110>
mov    %r8d,%ecx
and    $0xfffffffe,%ecx
xorpd  %xmm1,%xmm1
xor    %ebx,%ebx
xorpd  %xmm8,%xmm8
jmp    1229 <run_sex+0xd9>
cs nopw 0x0(%rax,%rax,1)
add    $0x2,%rbx
cmp    %rbx,%rcx
je     126b <run_sex+0x11b>
movsd  (%rdi,%rbx,8),%xmm0
ucomisd %xmm5,%xmm0
jbe    123e <run_sex+0xee>
addsd  (%rsi,%rbx,8),%xmm8
addsd  %xmm6,%xmm1
movsd  0x8(%rdi,%rbx,8),%xmm0
ucomisd %xmm5,%xmm0
jbe    1220 <run_sex+0xd0>
addsd  0x8(%rsi,%rbx,8),%xmm8
addsd  %xmm6,%xmm1
jmp    1220 <run_sex+0xd0>
nopw   0x0(%rax,%rax,1)
xorpd  %xmm1,%xmm1
xor    %ebx,%ebx
xorpd  %xmm8,%xmm8
test   $0x1,%r8b
je     1286 <run_sex+0x136>
movsd  (%rdi,%rbx,8),%xmm0
ucomisd %xmm5,%xmm0
jbe    1286 <run_sex+0x136>
addsd  (%rsi,%rbx,8),%xmm8
addsd  %xmm6,%xmm1
divsd  %xmm1,%xmm8
test   %eax,%eax
jle    1300 <run_sex+0x1b0>
mov    0x10(%rsp),%rsi
mov    0x8(%rsp),%rax
test   %rdx,%rdx
je     1306 <run_sex+0x1b6>
mov    %r8d,%ecx
and    $0xfffffffe,%ecx
xorpd  %xmm0,%xmm0
xor    %edx,%edx
jmp    12b9 <run_sex+0x169>
nopl   0x0(%rax)
add    $0x2,%rdx
cmp    %rdx,%rcx
je     130c <run_sex+0x1bc>
movsd  (%rsi,%rdx,8),%xmm2
ucomisd %xmm5,%xmm2
jbe    12d6 <run_sex+0x186>
movapd %xmm8,%xmm2
subsd  (%rax,%rdx,8),%xmm2
mulsd  %xmm2,%xmm2
addsd  %xmm2,%xmm0
movsd  0x8(%rsi,%rdx,8),%xmm2
ucomisd %xmm5,%xmm2
jbe    12b0 <run_sex+0x160>
movapd %xmm8,%xmm2
subsd  0x8(%rax,%rdx,8),%xmm2
mulsd  %xmm2,%xmm2
addsd  %xmm2,%xmm0
jmp    12b0 <run_sex+0x160>
nopw   0x0(%rax,%rax,1)
xorpd  %xmm0,%xmm0
jmp    1330 <run_sex+0x1e0>
xorpd  %xmm0,%xmm0
xor    %edx,%edx
test   $0x1,%r8b
je     1330 <run_sex+0x1e0>
movsd  (%rsi,%rdx,8),%xmm2
ucomisd %xmm5,%xmm2
jbe    1330 <run_sex+0x1e0>
movapd %xmm8,%xmm2
subsd  (%rax,%rdx,8),%xmm2
mulsd  %xmm2,%xmm2
addsd  %xmm2,%xmm0
nop
addsd  %xmm3,%xmm1
divsd  %xmm1,%xmm0
ucomisd %xmm5,%xmm0
jb     1350 <run_sex+0x200>
sqrtsd %xmm0,%xmm0
jmp    1387 <run_sex+0x237>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  %xmm8,0x18(%rsp)
call   1060 <sqrt@plt>
movsd  0x18(%rsp),%xmm8
movsd  0xcad(%rip),%xmm7
movsd  0xc95(%rip),%xmm6
xorpd  %xmm5,%xmm5
movsd  0xc81(%rip),%xmm4
movsd  0xc89(%rip),%xmm3
mov    0x4(%rsp),%eax
test   %eax,%eax
jle    13eb <run_sex+0x29b>
mov    0x8(%rsp),%rcx
mov    0x10(%rsp),%rdx
movapd %xmm0,%xmm1
addsd  %xmm0,%xmm1
mulsd  %xmm7,%xmm0
xor    %esi,%esi
xor    %edi,%edi
jmp    13c8 <run_sex+0x278>
nopl   0x0(%rax,%rax,1)
movq   $0x0,(%rdx,%rsi,8)
add    $0x1,%edi
add    $0x1,%rsi
cmp    %rsi,%rax
je     11d0 <run_sex+0x80>
movsd  (%rdx,%rsi,8),%xmm2
ucomisd %xmm5,%xmm2
jbe    13bb <run_sex+0x26b>
movapd %xmm8,%xmm2
subsd  (%rcx,%rsi,8),%xmm2
ucomisd %xmm1,%xmm2
ja     13b0 <run_sex+0x260>
ucomisd %xmm2,%xmm0
jbe    13bb <run_sex+0x26b>
jmp    13b0 <run_sex+0x260>
cmp    $0xb,%eax
jge    13f5 <run_sex+0x2a5>
movapd %xmm3,%xmm8
movapd %xmm8,%xmm0
add    $0x138,%rsp
pop    %rbx
pop    %r14
ret

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

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