void get_gymy(int *gymy_space, int width, int height, int q, int skip,
              int *probe, int probe_num_values, int *probe_dist, int *out,
              int out_size, int out_dist, double threshold) {
  for (int y = 0; y < out_size; y++) {
    double sum = 0;
    for (int x1 = 0; x1 < width; x1 += skip) {
      for (int x2 = 0; x2 < height; x2 += skip) {
        if (gymy_space[x1 * height + x2] > threshold) {
          double m1_sqrt_x1_x2_y_outd =
              (((double)(sqrt(((abs(x1 - y)) * ((double)abs(x1 - y))) +
                              ((out_dist) * ((double)out_dist)) +
                              ((x2) * ((double)x2))))) -
               floor((sqrt(((abs(x1 - y)) * ((double)abs(x1 - y))) +
                           ((out_dist) * ((double)out_dist)) +
                           ((x2) * ((double)x2))))));
          for (int val = 0; val < probe_num_values; val++) {
            double alpha =
                (((sqrt(
                     (((probe_dist[val])) * ((double)(probe_dist[val]))) +
                     ((abs(x1 - probe[val])) * ((double)abs(x1 - probe[val]))) +
                     (((x2)) * ((double)(x2)))))) +
                 m1_sqrt_x1_x2_y_outd);
            double X = 0.75 + 2.0 / q * alpha;
            if ((((double)X) - floor(X)) < 0.5)
              sum -= 1;
            else
              sum += 1;
          }
        }
      }
    }
    out[y] = fabs(sum);
  }
}


x86 assembly (clang, -O0):
<get_gymy>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9,-0x20(%rbp)
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    0x28(%rbp),%eax
jge    1437 <get_gymy+0x307>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    140a <get_gymy+0x2da>
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    13f7 <get_gymy+0x2c7>
mov    -0x8(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    -0x40(%rbp),%ecx
movslq %ecx,%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
ucomisd -0x28(%rbp),%xmm0
jbe    13e4 <get_gymy+0x2b4>
mov    -0x3c(%rbp),%edi
sub    -0x2c(%rbp),%edi
call   1030 <abs@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x3c(%rbp),%edi
sub    -0x2c(%rbp),%edi
call   1030 <abs@plt>
movsd  -0x78(%rbp),%xmm1
cvtsi2sd %eax,%xmm2
cvtsi2sdl 0x30(%rbp),%xmm0
cvtsi2sdl 0x30(%rbp),%xmm3
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
cvtsi2sdl -0x40(%rbp),%xmm0
cvtsi2sdl -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x68(%rbp)
mov    -0x3c(%rbp),%edi
sub    -0x2c(%rbp),%edi
call   1030 <abs@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x3c(%rbp),%edi
sub    -0x2c(%rbp),%edi
call   1030 <abs@plt>
movsd  -0x70(%rbp),%xmm1
cvtsi2sd %eax,%xmm2
cvtsi2sdl 0x30(%rbp),%xmm0
cvtsi2sdl 0x30(%rbp),%xmm3
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
cvtsi2sdl -0x40(%rbp),%xmm0
cvtsi2sdl -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
call   1050 <floor@plt>
movaps %xmm0,%xmm1
movsd  -0x68(%rbp),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    13df <get_gymy+0x2af>
mov    0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    0x18(%rbp),%rax
movslq -0x4c(%rbp),%rcx
cvtsi2sdl (%rax,%rcx,4),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x3c(%rbp),%edi
mov    -0x20(%rbp),%rax
movslq -0x4c(%rbp),%rcx
sub    (%rax,%rcx,4),%edi
call   1030 <abs@plt>
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x3c(%rbp),%edi
mov    -0x20(%rbp),%rax
movslq -0x4c(%rbp),%rcx
sub    (%rax,%rcx,4),%edi
call   1030 <abs@plt>
movsd  -0x98(%rbp),%xmm0
ff
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0x88(%rbp),%xmm2
ff
cvtsi2sd %eax,%xmm3
mulsd  %xmm3,%xmm0
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
cvtsi2sdl -0x40(%rbp),%xmm0
cvtsi2sdl -0x40(%rbp),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x58(%rbp)
cvtsi2sdl -0x14(%rbp),%xmm1
movsd  0xcce(%rip),%xmm0
divsd  %xmm1,%xmm0
movsd  -0x58(%rbp),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xcb1(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x60(%rbp),%xmm0
call   1050 <floor@plt>
movsd  -0x80(%rbp),%xmm1
subsd  %xmm0,%xmm1
movsd  0xc7b(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    13ba <get_gymy+0x28a>
movsd  -0x38(%rbp),%xmm0
movsd  0xc7c(%rip),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    13cc <get_gymy+0x29c>
movsd  0xc66(%rip),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
jmp    13d1 <get_gymy+0x2a1>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1294 <get_gymy+0x164>
jmp    13e4 <get_gymy+0x2b4>
jmp    13e9 <get_gymy+0x2b9>
mov    -0x18(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
jmp    119b <get_gymy+0x6b>
jmp    13fc <get_gymy+0x2cc>
mov    -0x18(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
jmp    1188 <get_gymy+0x58>
movsd  -0x38(%rbp),%xmm0
movaps 0xbea(%rip),%xmm1
pand   %xmm1,%xmm0
cvttsd2si %xmm0,%edx
mov    0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    116d <get_gymy+0x3d>
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_gymy>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x98,%rsp
movsd  %xmm0,0x78(%rsp)
mov    %edx,0x4(%rsp)
mov    %esi,(%rsp)
mov    %rdi,0x70(%rsp)
mov    0xe8(%rsp),%eax
test   %eax,%eax
jle    1402 <get_gymy+0x2e2>
mov    %r9,%rbx
xorps  %xmm0,%xmm0
cvtsi2sdl 0xf0(%rsp),%xmm0
mulsd  %xmm0,%xmm0
movsd  %xmm0,0x50(%rsp)
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
movsd  0xe86(%rip),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,0x88(%rsp)
movslq %r8d,%rcx
mov    %rcx,0x28(%rsp)
movslq 0x4(%rsp),%rcx
mov    %rcx,0x20(%rsp)
movslq (%rsp),%rcx
mov    %rcx,0x58(%rsp)
mov    %eax,%eax
mov    %rax,0x48(%rsp)
mov    0xd0(%rsp),%r12d
xor    %eax,%eax
mov    %rax,0x10(%rsp)
xorpd  %xmm2,%xmm2
lea    0xe5d(%rip),%r13
jmp    1206 <get_gymy+0xe6>
cs nopw 0x0(%rax,%rax,1)
nop
movapd 0x30(%rsp),%xmm0
andpd  0xe52(%rip),%xmm0
cvttsd2si %xmm0,%eax
mov    0xe0(%rsp),%rcx
mov    0x10(%rsp),%rdx
mov    %eax,(%rcx,%rdx,4)
add    $0x1,%rdx
mov    %rdx,0x10(%rsp)
cmp    0x48(%rsp),%rdx
je     1402 <get_gymy+0x2e2>
xorpd  %xmm0,%xmm0
movapd %xmm0,0x30(%rsp)
cmpl   $0x0,(%rsp)
jle    11d0 <get_gymy+0xb0>
xorpd  %xmm0,%xmm0
movapd %xmm0,0x30(%rsp)
xor    %r15d,%r15d
jmp    123c <get_gymy+0x11c>
cs nopw 0x0(%rax,%rax,1)
nop
add    0x28(%rsp),%r15
cmp    0x58(%rsp),%r15
jge    11d0 <get_gymy+0xb0>
cmpl   $0x0,0x4(%rsp)
jle    1230 <get_gymy+0x110>
mov    %r15,%rax
imul   0x20(%rsp),%rax
mov    %rax,0x80(%rsp)
mov    %r15d,%eax
sub    0x10(%rsp),%eax
mov    %eax,%ecx
neg    %ecx
cmovs  %eax,%ecx
xorps  %xmm0,%xmm0
cvtsi2sd %ecx,%xmm0
mulsd  %xmm0,%xmm0
addsd  0x50(%rsp),%xmm0
movsd  %xmm0,0x68(%rsp)
xor    %r14d,%r14d
jmp    129c <get_gymy+0x17c>
xorpd  %xmm2,%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    0x28(%rsp),%r14
cmp    0x20(%rsp),%r14
jge    1230 <get_gymy+0x110>
mov    0x80(%rsp),%rax
add    %r14,%rax
mov    0x70(%rsp),%rcx
xorps  %xmm0,%xmm0
cvtsi2sdl (%rcx,%rax,4),%xmm0
ucomisd 0x78(%rsp),%xmm0
jbe    1290 <get_gymy+0x170>
xorps  %xmm1,%xmm1
cvtsi2sd %r14d,%xmm1
mulsd  %xmm1,%xmm1
movsd  %xmm1,0x90(%rsp)
addsd  0x68(%rsp),%xmm1
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
ucomisd %xmm2,%xmm1
movsd  %xmm0,0x8(%rsp)
jae    1315 <get_gymy+0x1f5>
movsd  %xmm0,0x18(%rsp)
movapd %xmm1,%xmm0
movsd  %xmm1,0x60(%rsp)
call   1030 <sqrt@plt>
movsd  0x60(%rsp),%xmm1
xorpd  %xmm2,%xmm2
movsd  %xmm0,0x8(%rsp)
movsd  0x18(%rsp),%xmm0
ucomisd %xmm2,%xmm1
jae    1324 <get_gymy+0x204>
movapd %xmm1,%xmm0
call   1030 <sqrt@plt>
call   1040 <floor@plt>
cmpl   $0x0,0xd0(%rsp)
jle    127e <get_gymy+0x15e>
movsd  0x8(%rsp),%xmm1
subsd  %xmm0,%xmm1
movsd  %xmm1,0x8(%rsp)
xor    %ebp,%ebp
xorpd  %xmm2,%xmm2
jmp    13b6 <get_gymy+0x296>
nop
call   1030 <sqrt@plt>
addsd  0x8(%rsp),%xmm0
mulsd  0x88(%rsp),%xmm0
addsd  0xc9c(%rip),%xmm0
movsd  %xmm0,0x18(%rsp)
call   1040 <floor@plt>
movsd  0x18(%rsp),%xmm1
subsd  %xmm0,%xmm1
xor    %eax,%eax
movsd  0xc85(%rip),%xmm0
ucomisd %xmm1,%xmm0
seta   %al
movapd 0x30(%rsp),%xmm0
addsd  0x0(%r13,%rax,8),%xmm0
movapd %xmm0,0x30(%rsp)
add    $0x1,%rbp
cmp    %rbp,%r12
xorpd  %xmm2,%xmm2
je     1290 <get_gymy+0x170>
mov    0xd8(%rsp),%rax
xorps  %xmm0,%xmm0
cvtsi2sdl (%rax,%rbp,4),%xmm0
mov    %r15d,%eax
sub    (%rbx,%rbp,4),%eax
mov    %eax,%ecx
neg    %ecx
cmovs  %eax,%ecx
xorps  %xmm1,%xmm1
cvtsi2sd %ecx,%xmm1
mulsd  %xmm1,%xmm1
mulsd  %xmm0,%xmm0
addsd  %xmm1,%xmm0
addsd  0x90(%rsp),%xmm0
ucomisd %xmm2,%xmm0
jb     1350 <get_gymy+0x230>
sqrtsd %xmm0,%xmm0
jmp    1355 <get_gymy+0x235>
add    $0x98,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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