#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 */
scalar_t__ pow(double, double);
double sqrt(double);
void spotbounds(double **cdat, int naxis1, int naxis2, double *umb, double *pen,
                double umb_sig, double pen_sig) {
  double mean, stdev;
  double smean, sstdev;
  int i, j;
  double counter;
  counter = 0.0;
  mean = smean = 0.0;
  stdev = sstdev = 0.0;
  *umb = 0.0;
  *pen = 0.0;
  for (i = 0; i < naxis1; i++) {
    for (j = 0; j < naxis2; j++) {
      if (cdat[j][i] > 0) {
        mean += cdat[j][i];
        counter++;
      }
    }
  }
  mean /= counter;
  for (i = 0; i < naxis1; i++) {
    for (j = 0; j < naxis2; j++) {
      if (cdat[j][i] > 0) {
        stdev += pow(cdat[j][i] - mean, 2.0);
      }
    }
  }
  stdev = sqrt(stdev / (counter - 1.0));
  *pen = mean - umb_sig * stdev;
  counter = 0.0;
  for (i = 0; i < naxis1; i++) {
    for (j = 0; j < naxis2; j++) {
      if ((cdat[j][i] > 0) && (cdat[j][i] <= *pen)) {
        smean += cdat[j][i];
        counter++;
      }
    }
  }
  smean /= counter;
  for (i = 0; i < naxis1; i++) {
    for (j = 0; j < naxis2; j++) {
      if ((cdat[j][i] > 0) && (cdat[j][i] <= *pen)) {
        sstdev += pow(cdat[j][i] - smean, 2.0);
      }
    }
  }
  sstdev = sqrt(sstdev / (counter - 1.0));
  *umb = smean - pen_sig * sstdev;
  return;
}


x86 assembly (clang, -O0):
<spotbounds>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
movsd  %xmm0,-0x28(%rbp)
movsd  %xmm1,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x20(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1221 <spotbounds+0x101>
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    120e <spotbounds+0xee>
mov    -0x8(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    11fb <spotbounds+0xdb>
mov    -0x8(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x38(%rbp),%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  0xe0f(%rip),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    1200 <spotbounds+0xe0>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    119c <spotbounds+0x7c>
jmp    1213 <spotbounds+0xf3>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1189 <spotbounds+0x69>
movsd  -0x60(%rbp),%xmm1
movsd  -0x38(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    12d8 <spotbounds+0x1b8>
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    12c5 <spotbounds+0x1a5>
mov    -0x8(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    12b2 <spotbounds+0x192>
mov    -0x8(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x38(%rbp),%xmm0
movsd  0xd6a(%rip),%xmm1
call   1030 <pow@plt>
cvtsi2sd %rax,%xmm0
addsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
jmp    12b7 <spotbounds+0x197>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    124e <spotbounds+0x12e>
jmp    12ca <spotbounds+0x1aa>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    123b <spotbounds+0x11b>
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  0xd16(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm1
movsd  -0x28(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1400 <spotbounds+0x2e0>
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    13ed <spotbounds+0x2cd>
mov    -0x8(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    13da <spotbounds+0x2ba>
mov    -0x8(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jb     13da <spotbounds+0x2ba>
mov    -0x8(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
addsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xc30(%rip),%xmm0
addsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    13df <spotbounds+0x2bf>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    1354 <spotbounds+0x234>
jmp    13f2 <spotbounds+0x2d2>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1341 <spotbounds+0x221>
movsd  -0x60(%rbp),%xmm1
movsd  -0x48(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    14de <spotbounds+0x3be>
movl   $0x0,-0x58(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    14cb <spotbounds+0x3ab>
mov    -0x8(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    14b8 <spotbounds+0x398>
mov    -0x8(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
ucomisd %xmm1,%xmm0
jb     14b8 <spotbounds+0x398>
mov    -0x8(%rbp),%rax
movslq -0x58(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x54(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
subsd  -0x48(%rbp),%xmm0
movsd  0xb64(%rip),%xmm1
call   1030 <pow@plt>
cvtsi2sd %rax,%xmm0
addsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
jmp    14bd <spotbounds+0x39d>
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    142d <spotbounds+0x30d>
jmp    14d0 <spotbounds+0x3b0>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    141a <spotbounds+0x2fa>
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  0xb10(%rip),%xmm2
subsd  %xmm2,%xmm1
divsd  %xmm1,%xmm0
call   1040 <sqrt@plt>
movsd  %xmm0,-0x50(%rbp)
movsd  -0x48(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
movsd  %xmm0,(%rax)
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<spotbounds>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
movsd  %xmm1,0x60(%rsp)
mov    %r8,%r13
mov    %rcx,%r14
mov    %rdi,%rbp
movq   $0x0,(%rcx)
movq   $0x0,(%r8)
mov    %esi,%r12d
mov    %edx,0x8(%rsp)
mov    %edx,%r8d
mov    %esi,0xc(%rsp)
test   %esi,%esi
mov    %r12,0x50(%rsp)
mov    %r8,%r15
movsd  %xmm0,0x58(%rsp)
jle    13e7 <spotbounds+0x2c7>
lea    -0x1(%r8),%rbx
mov    %r8d,%eax
and    $0xfffffffe,%eax
xorpd  %xmm5,%xmm5
xor    %ecx,%ecx
movsd  0xe81(%rip),%xmm0
movsd  0xe81(%rip),%xmm1
xorpd  %xmm6,%xmm6
jmp    11ad <spotbounds+0x8d>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rcx
cmp    %r12,%rcx
je     1269 <spotbounds+0x149>
cmpl   $0x0,0x8(%rsp)
jle    11a0 <spotbounds+0x80>
xor    %edx,%edx
test   %rbx,%rbx
je     1227 <spotbounds+0x107>
nopl   0x0(%rax,%rax,1)
mov    0x0(%rbp,%rdx,8),%rsi
mov    0x8(%rbp,%rdx,8),%rdi
movsd  (%rsi,%rcx,8),%xmm2
movapd %xmm5,%xmm3
addsd  %xmm0,%xmm3
xorpd  %xmm4,%xmm4
cmpltsd %xmm2,%xmm4
maxsd  %xmm1,%xmm2
addsd  %xmm6,%xmm2
andpd  %xmm4,%xmm3
andnpd %xmm5,%xmm4
orpd   %xmm3,%xmm4
movsd  (%rdi,%rcx,8),%xmm6
xorpd  %xmm5,%xmm5
cmpltsd %xmm6,%xmm5
movapd %xmm5,%xmm3
andnpd %xmm4,%xmm3
addsd  %xmm0,%xmm4
maxsd  %xmm1,%xmm6
addsd  %xmm2,%xmm6
andpd  %xmm4,%xmm5
orpd   %xmm3,%xmm5
add    $0x2,%rdx
cmp    %rdx,%rax
jne    11c0 <spotbounds+0xa0>
test   $0x1,%r8b
je     11a0 <spotbounds+0x80>
mov    0x0(%rbp,%rdx,8),%rdx
movsd  (%rdx,%rcx,8),%xmm2
movapd %xmm5,%xmm3
addsd  %xmm0,%xmm3
xorpd  %xmm4,%xmm4
cmpltsd %xmm2,%xmm4
maxsd  %xmm1,%xmm2
addsd  %xmm2,%xmm6
andpd  %xmm4,%xmm3
andnpd %xmm5,%xmm4
orpd   %xmm3,%xmm4
movapd %xmm4,%xmm5
jmp    11a0 <spotbounds+0x80>
divsd  %xmm5,%xmm6
cmpl   $0x0,0xc(%rsp)
jle    13f3 <spotbounds+0x2d3>
mov    %rbx,0x28(%rsp)
mov    %r14,0x48(%rsp)
mov    %r8d,%r14d
and    $0xfffffffe,%r14d
xorpd  %xmm2,%xmm2
xor    %ebx,%ebx
xorpd  %xmm1,%xmm1
movapd %xmm6,0x10(%rsp)
movapd %xmm5,0x30(%rsp)
jmp    12c2 <spotbounds+0x1a2>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%rbx
mov    0x50(%rsp),%r12
cmp    %r12,%rbx
je     13e0 <spotbounds+0x2c0>
cmpl   $0x0,0x8(%rsp)
jle    12b0 <spotbounds+0x190>
cmpq   $0x0,0x28(%rsp)
je     1380 <spotbounds+0x260>
xor    %r12d,%r12d
jmp    1325 <spotbounds+0x205>
nopw   0x0(%rax,%rax,1)
subsd  0x10(%rsp),%xmm0
movsd  %xmm1,(%rsp)
movsd  0xd25(%rip),%xmm1
call   1030 <pow@plt>
xorpd  %xmm2,%xmm2
movsd  (%rsp),%xmm1
movapd 0x10(%rsp),%xmm6
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  %xmm0,%xmm1
mov    %r15,%r8
movapd 0x30(%rsp),%xmm5
add    $0x2,%r12
cmp    %r12,%r14
je     1383 <spotbounds+0x263>
mov    0x0(%rbp,%r12,8),%rax
movsd  (%rax,%rbx,8),%xmm0
ucomisd %xmm2,%xmm0
jbe    1360 <spotbounds+0x240>
subsd  %xmm6,%xmm0
movsd  %xmm1,(%rsp)
movsd  0xcd2(%rip),%xmm1
call   1030 <pow@plt>
xorpd  %xmm2,%xmm2
movsd  (%rsp),%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  %xmm0,%xmm1
mov    0x8(%rbp,%r12,8),%rax
movsd  (%rax,%rbx,8),%xmm0
ucomisd %xmm2,%xmm0
ja     12e0 <spotbounds+0x1c0>
mov    %r15,%r8
movapd 0x10(%rsp),%xmm6
jmp    1316 <spotbounds+0x1f6>
nop
xor    %r12d,%r12d
test   $0x1,%r8b
je     12b0 <spotbounds+0x190>
mov    0x0(%rbp,%r12,8),%rax
movsd  (%rax,%rbx,8),%xmm0
ucomisd %xmm2,%xmm0
jbe    12b0 <spotbounds+0x190>
subsd  %xmm6,%xmm0
movsd  %xmm1,(%rsp)
movsd  0xc66(%rip),%xmm1
call   1030 <pow@plt>
xorpd  %xmm2,%xmm2
movsd  (%rsp),%xmm1
movapd 0x30(%rsp),%xmm5
movapd 0x10(%rsp),%xmm6
mov    %r15,%r8
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  %xmm0,%xmm1
jmp    12b0 <spotbounds+0x190>
mov    0x48(%rsp),%r14
jmp    13f7 <spotbounds+0x2d7>
movsd  0xc11(%rip),%xmm6
xorpd  %xmm5,%xmm5
xorpd  %xmm1,%xmm1
addsd  0xc21(%rip),%xmm5
divsd  %xmm5,%xmm1
ucomisd 0xc1d(%rip),%xmm1
jb     1416 <spotbounds+0x2f6>
xorps  %xmm0,%xmm0
sqrtsd %xmm1,%xmm0
jmp    142e <spotbounds+0x30e>
movapd %xmm1,%xmm0
movapd %xmm6,0x10(%rsp)
call   1040 <sqrt@plt>
movapd 0x10(%rsp),%xmm6
mov    %r15,%r8
movsd  0x58(%rsp),%xmm1
mulsd  %xmm0,%xmm1
subsd  %xmm1,%xmm6
movsd  %xmm6,0x0(%r13)
cmpl   $0x0,0xc(%rsp)
jle    1717 <spotbounds+0x5f7>
lea    -0x1(%r8),%rax
mov    %rax,0x28(%rsp)
mov    %r8d,%edi
and    $0xfffffffe,%edi
xorpd  %xmm0,%xmm0
xor    %ecx,%ecx
movsd  0xb9d(%rip),%xmm8
movsd  0xb9d(%rip),%xmm1
xorpd  %xmm2,%xmm2
xorpd  %xmm7,%xmm7
jmp    1491 <spotbounds+0x371>
nopl   (%rax)
addsd  %xmm5,%xmm7
add    $0x1,%rcx
cmp    %r12,%rcx
je     156a <spotbounds+0x44a>
cmpl   $0x0,0x8(%rsp)
jle    1484 <spotbounds+0x364>
cmpq   $0x0,0x28(%rsp)
je     1520 <spotbounds+0x400>
xor    %edx,%edx
jmp    14c1 <spotbounds+0x3a1>
nopl   0x0(%rax,%rax,1)
addsd  %xmm3,%xmm7
addsd  %xmm4,%xmm7
add    $0x2,%rdx
cmp    %rdx,%rdi
je     1522 <spotbounds+0x402>
mov    0x0(%rbp,%rdx,8),%rsi
movsd  (%rsi,%rcx,8),%xmm4
ucomisd %xmm0,%xmm4
setbe  %bl
ucomisd %xmm4,%xmm6
setb   %al
or     %bl,%al
movapd %xmm1,%xmm3
test   %al,%al
jne    14e7 <spotbounds+0x3c7>
movapd %xmm4,%xmm3
jne    14ee <spotbounds+0x3ce>
addsd  %xmm8,%xmm2
mov    0x8(%rbp,%rdx,8),%rax
movsd  (%rax,%rcx,8),%xmm5
ucomisd %xmm0,%xmm5
setbe  %al
ucomisd %xmm5,%xmm6
setb   %bl
or     %al,%bl
movapd %xmm1,%xmm4
test   %bl,%bl
jne    1514 <spotbounds+0x3f4>
movapd %xmm5,%xmm4
jne    14b0 <spotbounds+0x390>
addsd  %xmm8,%xmm2
jmp    14b0 <spotbounds+0x390>
nopl   (%rax)
xor    %edx,%edx
test   $0x1,%r8b
je     1484 <spotbounds+0x364>
mov    0x0(%rbp,%rdx,8),%rax
movsd  (%rax,%rcx,8),%xmm3
ucomisd %xmm0,%xmm3
setbe  %al
ucomisd %xmm3,%xmm6
setb   %dl
or     %al,%dl
movapd %xmm2,%xmm4
addsd  %xmm8,%xmm4
movapd %xmm1,%xmm5
test   %dl,%dl
jne    155b <spotbounds+0x43b>
movapd %xmm3,%xmm5
jne    1480 <spotbounds+0x360>
movapd %xmm4,%xmm2
jmp    1480 <spotbounds+0x360>
divsd  %xmm2,%xmm7
cmpl   $0x0,0xc(%rsp)
jle    1723 <spotbounds+0x603>
mov    %r14,0x48(%rsp)
mov    %r8d,%r14d
and    $0xfffffffe,%r14d
xorpd  %xmm4,%xmm4
xor    %r12d,%r12d
xorpd  %xmm3,%xmm3
movsd  %xmm7,0x10(%rsp)
movsd  %xmm2,0x30(%rsp)
jmp    15af <spotbounds+0x48f>
xchg   %ax,%ax
add    $0x1,%r12
cmp    0x50(%rsp),%r12
je     1710 <spotbounds+0x5f0>
cmpl   $0x0,0x8(%rsp)
jle    15a0 <spotbounds+0x480>
cmpq   $0x0,0x28(%rsp)
je     16a0 <spotbounds+0x580>
xor    %ebx,%ebx
jmp    15dd <spotbounds+0x4bd>
cs nopw 0x0(%rax,%rax,1)
add    $0x2,%rbx
cmp    %rbx,%r14
je     16a2 <spotbounds+0x582>
mov    0x0(%rbp,%rbx,8),%rax
movsd  (%rax,%r12,8),%xmm0
ucomisd %xmm4,%xmm0
jbe    1634 <spotbounds+0x514>
movsd  0x0(%r13),%xmm1
ucomisd %xmm0,%xmm1
jb     1634 <spotbounds+0x514>
subsd  %xmm7,%xmm0
movsd  0xa12(%rip),%xmm1
movsd  %xmm3,(%rsp)
call   1030 <pow@plt>
xorpd  %xmm4,%xmm4
movsd  (%rsp),%xmm3
movsd  0x30(%rsp),%xmm2
movsd  0x10(%rsp),%xmm7
mov    %r15,%r8
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  %xmm0,%xmm3
mov    0x8(%rbp,%rbx,8),%rax
movsd  (%rax,%r12,8),%xmm0
ucomisd %xmm4,%xmm0
jbe    15d0 <spotbounds+0x4b0>
movsd  0x0(%r13),%xmm1
ucomisd %xmm0,%xmm1
jb     15d0 <spotbounds+0x4b0>
subsd  %xmm7,%xmm0
movsd  0x9b7(%rip),%xmm1
movsd  %xmm3,(%rsp)
call   1030 <pow@plt>
xorpd  %xmm4,%xmm4
movsd  (%rsp),%xmm3
movsd  0x30(%rsp),%xmm2
movsd  0x10(%rsp),%xmm7
mov    %r15,%r8
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  %xmm0,%xmm3
jmp    15d0 <spotbounds+0x4b0>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
xor    %ebx,%ebx
test   $0x1,%r8b
je     15a0 <spotbounds+0x480>
mov    0x0(%rbp,%rbx,8),%rax
movsd  (%rax,%r12,8),%xmm0
ucomisd %xmm4,%xmm0
jbe    15a0 <spotbounds+0x480>
movsd  0x0(%r13),%xmm1
ucomisd %xmm0,%xmm1
jb     15a0 <spotbounds+0x480>
subsd  %xmm7,%xmm0
movsd  0x93b(%rip),%xmm1
movsd  %xmm3,(%rsp)
call   1030 <pow@plt>
xorpd  %xmm4,%xmm4
movsd  (%rsp),%xmm3
movsd  0x30(%rsp),%xmm2
movsd  0x10(%rsp),%xmm7
mov    %r15,%r8
xorps  %xmm0,%xmm0
cvtsi2sd %rax,%xmm0
addsd  %xmm0,%xmm3
jmp    15a0 <spotbounds+0x480>
mov    0x48(%rsp),%r14
jmp    1727 <spotbounds+0x607>
movsd  0x8e1(%rip),%xmm7
xorpd  %xmm2,%xmm2
xorpd  %xmm3,%xmm3
addsd  0x8f1(%rip),%xmm2
divsd  %xmm2,%xmm3
ucomisd 0x8ed(%rip),%xmm3
jb     1746 <spotbounds+0x626>
xorps  %xmm0,%xmm0
sqrtsd %xmm3,%xmm0
jmp    175b <spotbounds+0x63b>
movapd %xmm3,%xmm0
movsd  %xmm7,0x10(%rsp)
call   1040 <sqrt@plt>
movsd  0x10(%rsp),%xmm7
movsd  0x60(%rsp),%xmm1
mulsd  %xmm0,%xmm1
subsd  %xmm1,%xmm7
movsd  %xmm7,(%r14)
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @spotbounds(double** %0, i32 %1, i32 %2, double* %3, double* %4, double %5, double %6) {
%8 = alloca double**
%9 = alloca i32
%10 = alloca i32
%11 = alloca double*
%12 = alloca double*
%13 = alloca double
%14 = alloca double
%15 = alloca double
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca i32
%20 = alloca i32
%21 = alloca double
store double** %0, double*** %8
store i32 %1, i32* %9
store i32 %2, i32* %10
store double* %3, double** %11
store double* %4, double** %12
store double %5, double* %13
store double %6, double* %14
store double 0.000000e+00, double* %21
store double 0.000000e+00, double* %17
store double 0.000000e+00, double* %15
store double 0.000000e+00, double* %18
store double 0.000000e+00, double* %16
%22 = load double*, double** %11
store double 0.000000e+00, double* %22
%23 = load double*, double** %12
store double 0.000000e+00, double* %23
store i32 0, i32* %19
br label %24
24: ; preds = %63, %7
%25 = load i32, i32* %19
%26 = load i32, i32* %9
%27 = icmp slt i32 %25, %26
br i1 %27, label %28, label %66
28: ; preds = %24
store i32 0, i32* %20
br label %29
29: ; preds = %59, %28
%30 = load i32, i32* %20
%31 = load i32, i32* %10
%32 = icmp slt i32 %30, %31
br i1 %32, label %33, label %62
33: ; preds = %29
%34 = load double**, double*** %8
%35 = load i32, i32* %20
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds double*, double** %34, i64 %36
%38 = load double*, double** %37
%39 = load i32, i32* %19
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds double, double* %38, i64 %40
%42 = load double, double* %41
%43 = fcmp ogt double %42, 0.000000e+00
br i1 %43, label %44, label %58
44: ; preds = %33
%45 = load double**, double*** %8
%46 = load i32, i32* %20
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds double*, double** %45, i64 %47
%49 = load double*, double** %48
%50 = load i32, i32* %19
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds double, double* %49, i64 %51
%53 = load double, double* %52
%54 = load double, double* %15
%55 = fadd double %54, %53
store double %55, double* %15
%56 = load double, double* %21
%57 = fadd double %56, 1.000000e+00
store double %57, double* %21
br label %58
58: ; preds = %44, %33
br label %59
59: ; preds = %58
%60 = load i32, i32* %20
%61 = add nsw i32 %60, 1
store i32 %61, i32* %20
br label %29
62: ; preds = %29
br label %63
63: ; preds = %62
%64 = load i32, i32* %19
%65 = add nsw i32 %64, 1
store i32 %65, i32* %19
br label %24
66: ; preds = %24
%67 = load double, double* %21
%68 = load double, double* %15
%69 = fdiv double %68, %67
store double %69, double* %15
store i32 0, i32* %19
br label %70
70: ; preds = %111, %66
%71 = load i32, i32* %19
%72 = load i32, i32* %9
%73 = icmp slt i32 %71, %72
br i1 %73, label %74, label %114
74: ; preds = %70
store i32 0, i32* %20
br label %75
75: ; preds = %107, %74
%76 = load i32, i32* %20
%77 = load i32, i32* %10
%78 = icmp slt i32 %76, %77
br i1 %78, label %79, label %110
79: ; preds = %75
%80 = load double**, double*** %8
%81 = load i32, i32* %20
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds double*, double** %80, i64 %82
%84 = load double*, double** %83
%85 = load i32, i32* %19
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds double, double* %84, i64 %86
%88 = load double, double* %87
%89 = fcmp ogt double %88, 0.000000e+00
br i1 %89, label %90, label %106
90: ; preds = %79
%91 = load double**, double*** %8
%92 = load i32, i32* %20
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds double*, double** %91, i64 %93
%95 = load double*, double** %94
%96 = load i32, i32* %19
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds double, double* %95, i64 %97
%99 = load double, double* %98
%100 = load double, double* %15
%101 = fsub double %99, %100
%102 = call i64 @pow(double %101, double 2.000000e+00)
%103 = sitofp i64 %102 to double
%104 = load double, double* %16
%105 = fadd double %104, %103
store double %105, double* %16
br label %106
106: ; preds = %90, %79
br label %107
107: ; preds = %106
%108 = load i32, i32* %20
%109 = add nsw i32 %108, 1
store i32 %109, i32* %20
br label %75
110: ; preds = %75
br label %111
111: ; preds = %110
%112 = load i32, i32* %19
%113 = add nsw i32 %112, 1
store i32 %113, i32* %19
br label %70
114: ; preds = %70
%115 = load double, double* %16
%116 = load double, double* %21
%117 = fsub double %116, 1.000000e+00
%118 = fdiv double %115, %117
%119 = call double @sqrt(double %118)
store double %119, double* %16
%120 = load double, double* %15
%121 = load double, double* %13
%122 = load double, double* %16
%123 = fneg double %121
%124 = call double @llvm.fmuladd.f64(double %123, double %122, double %120)
%125 = load double*, double** %12
store double %124, double* %125
store double 0.000000e+00, double* %21
store i32 0, i32* %19
br label %126
126: ; preds = %178, %114
%127 = load i32, i32* %19
%128 = load i32, i32* %9
%129 = icmp slt i32 %127, %128
br i1 %129, label %130, label %181
130: ; preds = %126
store i32 0, i32* %20
br label %131
131: ; preds = %174, %130
%132 = load i32, i32* %20
%133 = load i32, i32* %10
%134 = icmp slt i32 %132, %133
br i1 %134, label %135, label %177
135: ; preds = %131
%136 = load double**, double*** %8
%137 = load i32, i32* %20
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds double*, double** %136, i64 %138
%140 = load double*, double** %139
%141 = load i32, i32* %19
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds double, double* %140, i64 %142
%144 = load double, double* %143
%145 = fcmp ogt double %144, 0.000000e+00
br i1 %145, label %146, label %173
146: ; preds = %135
%147 = load double**, double*** %8
%148 = load i32, i32* %20
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds double*, double** %147, i64 %149
%151 = load double*, double** %150
%152 = load i32, i32* %19
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds double, double* %151, i64 %153
%155 = load double, double* %154
%156 = load double*, double** %12
%157 = load double, double* %156
%158 = fcmp ole double %155, %157
br i1 %158, label %159, label %173
159: ; preds = %146
%160 = load double**, double*** %8
%161 = load i32, i32* %20
%162 = sext i32 %161 to i64
%163 = getelementptr inbounds double*, double** %160, i64 %162
%164 = load double*, double** %163
%165 = load i32, i32* %19
%166 = sext i32 %165 to i64
%167 = getelementptr inbounds double, double* %164, i64 %166
%168 = load double, double* %167
%169 = load double, double* %17
%170 = fadd double %169, %168
store double %170, double* %17
%171 = load double, double* %21
%172 = fadd double %171, 1.000000e+00
store double %172, double* %21
br label %173
173: ; preds = %159, %146, %135
br label %174
174: ; preds = %173
%175 = load i32, i32* %20
%176 = add nsw i32 %175, 1
store i32 %176, i32* %20
br label %131
177: ; preds = %131
br label %178
178: ; preds = %177
%179 = load i32, i32* %19
%180 = add nsw i32 %179, 1
store i32 %180, i32* %19
br label %126
181: ; preds = %126
%182 = load double, double* %21
%183 = load double, double* %17
%184 = fdiv double %183, %182
store double %184, double* %17
store i32 0, i32* %19
br label %185
185: ; preds = %239, %181
%186 = load i32, i32* %19
%187 = load i32, i32* %9
%188 = icmp slt i32 %186, %187
br i1 %188, label %189, label %242
189: ; preds = %185
store i32 0, i32* %20
br label %190
190: ; preds = %235, %189
%191 = load i32, i32* %20
%192 = load i32, i32* %10
%193 = icmp slt i32 %191, %192
br i1 %193, label %194, label %238
194: ; preds = %190
%195 = load double**, double*** %8
%196 = load i32, i32* %20
%197 = sext i32 %196 to i64
%198 = getelementptr inbounds double*, double** %195, i64 %197
%199 = load double*, double** %198
%200 = load i32, i32* %19
%201 = sext i32 %200 to i64
%202 = getelementptr inbounds double, double* %199, i64 %201
%203 = load double, double* %202
%204 = fcmp ogt double %203, 0.000000e+00
br i1 %204, label %205, label %234
205: ; preds = %194
%206 = load double**, double*** %8
%207 = load i32, i32* %20
%208 = sext i32 %207 to i64
%209 = getelementptr inbounds double*, double** %206, i64 %208
%210 = load double*, double** %209
%211 = load i32, i32* %19
%212 = sext i32 %211 to i64
%213 = getelementptr inbounds double, double* %210, i64 %212
%214 = load double, double* %213
%215 = load double*, double** %12
%216 = load double, double* %215
%217 = fcmp ole double %214, %216
br i1 %217, label %218, label %234
218: ; preds = %205
%219 = load double**, double*** %8
%220 = load i32, i32* %20
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds double*, double** %219, i64 %221
%223 = load double*, double** %222
%224 = load i32, i32* %19
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds double, double* %223, i64 %225
%227 = load double, double* %226
%228 = load double, double* %17
%229 = fsub double %227, %228
%230 = call i64 @pow(double %229, double 2.000000e+00)
%231 = sitofp i64 %230 to double
%232 = load double, double* %18
%233 = fadd double %232, %231
store double %233, double* %18
br label %234
234: ; preds = %218, %205, %194
br label %235
235: ; preds = %234
%236 = load i32, i32* %20
%237 = add nsw i32 %236, 1
store i32 %237, i32* %20
br label %190
238: ; preds = %190
br label %239
239: ; preds = %238
%240 = load i32, i32* %19
%241 = add nsw i32 %240, 1
store i32 %241, i32* %19
br label %185
242: ; preds = %185
%243 = load double, double* %18
%244 = load double, double* %21
%245 = fsub double %244, 1.000000e+00
%246 = fdiv double %243, %245
%247 = call double @sqrt(double %246)
store double %247, double* %18
%248 = load double, double* %17
%249 = load double, double* %14
%250 = load double, double* %18
%251 = fneg double %249
%252 = call double @llvm.fmuladd.f64(double %251, double %250, double %248)
%253 = load double*, double** %11
store double %252, double* %253
ret void
}

LLVM IR (-O2):
define void @spotbounds(double** nocapture %0, i32 %1, i32 %2, double* nocapture writeonly %3, double* nocapture %4, double %5, double %6) {
store double 0.000000e+00, double* %3
store double 0.000000e+00, double* %4
%8 = icmp sgt i32 %1, 0
br i1 %8, label %9, label %138
9: ; preds = %7
%10 = icmp sgt i32 %2, 0
%11 = zext i32 %1 to i64
%12 = zext i32 %2 to i64
%13 = add nsw i64 %12, -1
%14 = and i64 %12, 1
%15 = icmp eq i64 %13, 0
%16 = and i64 %12, 4294967294
%17 = icmp eq i64 %14, 0
br label %18
18: ; preds = %9, %69
%19 = phi i64 [ 0, %9 ], [ %72, %69 ]
%20 = phi double [ 0.000000e+00, %9 ], [ %71, %69 ]
%21 = phi double [ 0.000000e+00, %9 ], [ %70, %69 ]
br i1 %10, label %22, label %69
22: ; preds = %18
br i1 %15, label %52, label %23
23: ; preds = %22, %23
%24 = phi i64 [ %49, %23 ], [ 0, %22 ]
%25 = phi double [ %48, %23 ], [ %20, %22 ]
%26 = phi double [ %47, %23 ], [ %21, %22 ]
%27 = phi i64 [ %50, %23 ], [ 0, %22 ]
%28 = getelementptr inbounds double*, double** %0, i64 %24
%29 = load double*, double** %28
%30 = getelementptr inbounds double, double* %29, i64 %19
%31 = load double, double* %30
%32 = fcmp ogt double %31, 0.000000e+00
%33 = fadd double %25, 1.000000e+00
%34 = fcmp ogt double %31, -0.000000e+00
%35 = select i1 %34, double %31, double -0.000000e+00
%36 = fadd double %26, %35
%37 = select i1 %32, double %33, double %25
%38 = or i64 %24, 1
%39 = getelementptr inbounds double*, double** %0, i64 %38
%40 = load double*, double** %39
%41 = getelementptr inbounds double, double* %40, i64 %19
%42 = load double, double* %41
%43 = fcmp ogt double %42, 0.000000e+00
%44 = fadd double %37, 1.000000e+00
%45 = fcmp ogt double %42, -0.000000e+00
%46 = select i1 %45, double %42, double -0.000000e+00
%47 = fadd double %36, %46
%48 = select i1 %43, double %44, double %37
%49 = add nuw nsw i64 %24, 2
%50 = add i64 %27, 2
%51 = icmp eq i64 %50, %16
br i1 %51, label %52, label %23
52: ; preds = %23, %22
%53 = phi double [ undef, %22 ], [ %47, %23 ]
%54 = phi double [ undef, %22 ], [ %48, %23 ]
%55 = phi i64 [ 0, %22 ], [ %49, %23 ]
%56 = phi double [ %20, %22 ], [ %48, %23 ]
%57 = phi double [ %21, %22 ], [ %47, %23 ]
br i1 %17, label %69, label %58
58: ; preds = %52
%59 = getelementptr inbounds double*, double** %0, i64 %55
%60 = load double*, double** %59
%61 = getelementptr inbounds double, double* %60, i64 %19
%62 = load double, double* %61
%63 = fcmp ogt double %62, 0.000000e+00
%64 = fadd double %56, 1.000000e+00
%65 = fcmp ogt double %62, -0.000000e+00
%66 = select i1 %65, double %62, double -0.000000e+00
%67 = fadd double %57, %66
%68 = select i1 %63, double %64, double %56
br label %69
69: ; preds = %58, %52, %18
%70 = phi double [ %21, %18 ], [ %53, %52 ], [ %67, %58 ]
%71 = phi double [ %20, %18 ], [ %54, %52 ], [ %68, %58 ]
%72 = add nuw nsw i64 %19, 1
%73 = icmp eq i64 %72, %11
br i1 %73, label %74, label %18
74: ; preds = %69
%75 = fdiv double %70, %71
br i1 %8, label %76, label %138
76: ; preds = %74
%77 = icmp sgt i32 %2, 0
%78 = zext i32 %1 to i64
%79 = and i64 %12, 1
%80 = icmp eq i64 %13, 0
%81 = and i64 %12, 4294967294
%82 = icmp eq i64 %79, 0
br label %83
83: ; preds = %76, %134
%84 = phi i64 [ 0, %76 ], [ %136, %134 ]
%85 = phi double [ 0.000000e+00, %76 ], [ %135, %134 ]
br i1 %77, label %86, label %134
86: ; preds = %83
br i1 %80, label %119, label %87
87: ; preds = %86, %114
%88 = phi i64 [ %116, %114 ], [ 0, %86 ]
%89 = phi double [ %115, %114 ], [ %85, %86 ]
%90 = phi i64 [ %117, %114 ], [ 0, %86 ]
%91 = getelementptr inbounds double*, double** %0, i64 %88
%92 = load double*, double** %91
%93 = getelementptr inbounds double, double* %92, i64 %84
%94 = load double, double* %93
%95 = fcmp ogt double %94, 0.000000e+00
br i1 %95, label %96, label %101
96: ; preds = %87
%97 = fsub double %94, %75
%98 = tail call i64 @pow(double %97, double 2.000000e+00)
%99 = sitofp i64 %98 to double
%100 = fadd double %89, %99
br label %101
101: ; preds = %87, %96
%102 = phi double [ %100, %96 ], [ %89, %87 ]
%103 = or i64 %88, 1
%104 = getelementptr inbounds double*, double** %0, i64 %103
%105 = load double*, double** %104
%106 = getelementptr inbounds double, double* %105, i64 %84
%107 = load double, double* %106
%108 = fcmp ogt double %107, 0.000000e+00
br i1 %108, label %109, label %114
109: ; preds = %101
%110 = fsub double %107, %75
%111 = tail call i64 @pow(double %110, double 2.000000e+00)
%112 = sitofp i64 %111 to double
%113 = fadd double %102, %112
br label %114
114: ; preds = %109, %101
%115 = phi double [ %113, %109 ], [ %102, %101 ]
%116 = add nuw nsw i64 %88, 2
%117 = add i64 %90, 2
%118 = icmp eq i64 %117, %81
br i1 %118, label %119, label %87
119: ; preds = %114, %86
%120 = phi double [ undef, %86 ], [ %115, %114 ]
%121 = phi i64 [ 0, %86 ], [ %116, %114 ]
%122 = phi double [ %85, %86 ], [ %115, %114 ]
br i1 %82, label %134, label %123
123: ; preds = %119
%124 = getelementptr inbounds double*, double** %0, i64 %121
%125 = load double*, double** %124
%126 = getelementptr inbounds double, double* %125, i64 %84
%127 = load double, double* %126
%128 = fcmp ogt double %127, 0.000000e+00
br i1 %128, label %129, label %134
129: ; preds = %123
%130 = fsub double %127, %75
%131 = tail call i64 @pow(double %130, double 2.000000e+00)
%132 = sitofp i64 %131 to double
%133 = fadd double %122, %132
br label %134
134: ; preds = %119, %129, %123, %83
%135 = phi double [ %85, %83 ], [ %120, %119 ], [ %133, %129 ], [ %122, %123 ]
%136 = add nuw nsw i64 %84, 1
%137 = icmp eq i64 %136, %78
br i1 %137, label %138, label %83
138: ; preds = %134, %7, %74
%139 = phi double [ %75, %74 ], [ 0x7FF8000000000000, %7 ], [ %75, %134 ]
%140 = phi double [ %71, %74 ], [ 0.000000e+00, %7 ], [ %71, %134 ]
%141 = phi double [ 0.000000e+00, %74 ], [ 0.000000e+00, %7 ], [ %135, %134 ]
%142 = fadd double %140, -1.000000e+00
%143 = fdiv double %141, %142
%144 = tail call double @sqrt(double %143)
%145 = fneg double %5
%146 = tail call double @llvm.fmuladd.f64(double %145, double %144, double %139)
store double %146, double* %4
br i1 %8, label %147, label %288
147: ; preds = %138
%148 = icmp sgt i32 %2, 0
%149 = zext i32 %1 to i64
%150 = zext i32 %2 to i64
%151 = add nsw i64 %150, -1
%152 = and i64 %150, 1
%153 = icmp eq i64 %151, 0
%154 = and i64 %150, 4294967294
%155 = icmp eq i64 %152, 0
br label %156
156: ; preds = %147, %210
%157 = phi i64 [ 0, %147 ], [ %213, %210 ]
%158 = phi double [ 0.000000e+00, %147 ], [ %212, %210 ]
%159 = phi double [ 0.000000e+00, %147 ], [ %211, %210 ]
br i1 %148, label %160, label %210
160: ; preds = %156
br i1 %153, label %192, label %161
161: ; preds = %160, %161
%162 = phi i64 [ %189, %161 ], [ 0, %160 ]
%163 = phi double [ %188, %161 ], [ %158, %160 ]
%164 = phi double [ %187, %161 ], [ %159, %160 ]
%165 = phi i64 [ %190, %161 ], [ 0, %160 ]
%166 = getelementptr inbounds double*, double** %0, i64 %162
%167 = load double*, double** %166
%168 = getelementptr inbounds double, double* %167, i64 %157
%169 = load double, double* %168
%170 = fcmp ule double %169, 0.000000e+00
%171 = fcmp ugt double %169, %146
%172 = select i1 %170, i1 true, i1 %171
%173 = fadd double %163, 1.000000e+00
%174 = select i1 %172, double -0.000000e+00, double %169
%175 = fadd double %164, %174
%176 = select i1 %172, double %163, double %173
%177 = or i64 %162, 1
%178 = getelementptr inbounds double*, double** %0, i64 %177
%179 = load double*, double** %178
%180 = getelementptr inbounds double, double* %179, i64 %157
%181 = load double, double* %180
%182 = fcmp ule double %181, 0.000000e+00
%183 = fcmp ugt double %181, %146
%184 = select i1 %182, i1 true, i1 %183
%185 = fadd double %176, 1.000000e+00
%186 = select i1 %184, double -0.000000e+00, double %181
%187 = fadd double %175, %186
%188 = select i1 %184, double %176, double %185
%189 = add nuw nsw i64 %162, 2
%190 = add i64 %165, 2
%191 = icmp eq i64 %190, %154
br i1 %191, label %192, label %161
192: ; preds = %161, %160
%193 = phi double [ undef, %160 ], [ %187, %161 ]
%194 = phi double [ undef, %160 ], [ %188, %161 ]
%195 = phi i64 [ 0, %160 ], [ %189, %161 ]
%196 = phi double [ %158, %160 ], [ %188, %161 ]
%197 = phi double [ %159, %160 ], [ %187, %161 ]
br i1 %155, label %210, label %198
198: ; preds = %192
%199 = getelementptr inbounds double*, double** %0, i64 %195
%200 = load double*, double** %199
%201 = getelementptr inbounds double, double* %200, i64 %157
%202 = load double, double* %201
%203 = fcmp ule double %202, 0.000000e+00
%204 = fcmp ugt double %202, %146
%205 = select i1 %203, i1 true, i1 %204
%206 = fadd double %196, 1.000000e+00
%207 = select i1 %205, double -0.000000e+00, double %202
%208 = fadd double %197, %207
%209 = select i1 %205, double %196, double %206
br label %210
210: ; preds = %198, %192, %156
%211 = phi double [ %159, %156 ], [ %193, %192 ], [ %208, %198 ]
%212 = phi double [ %158, %156 ], [ %194, %192 ], [ %209, %198 ]
%213 = add nuw nsw i64 %157, 1
%214 = icmp eq i64 %213, %149
br i1 %214, label %215, label %156
215: ; preds = %210
%216 = fdiv double %211, %212
br i1 %8, label %217, label %288
217: ; preds = %215
%218 = icmp sgt i32 %2, 0
%219 = zext i32 %1 to i64
%220 = and i64 %150, 1
%221 = icmp eq i64 %151, 0
%222 = and i64 %150, 4294967294
%223 = icmp eq i64 %220, 0
br label %224
224: ; preds = %217, %284
%225 = phi i64 [ 0, %217 ], [ %286, %284 ]
%226 = phi double [ 0.000000e+00, %217 ], [ %285, %284 ]
br i1 %218, label %227, label %284
227: ; preds = %224
br i1 %221, label %266, label %228
228: ; preds = %227, %261
%229 = phi i64 [ %263, %261 ], [ 0, %227 ]
%230 = phi double [ %262, %261 ], [ %226, %227 ]
%231 = phi i64 [ %264, %261 ], [ 0, %227 ]
%232 = getelementptr inbounds double*, double** %0, i64 %229
%233 = load double*, double** %232
%234 = getelementptr inbounds double, double* %233, i64 %225
%235 = load double, double* %234
%236 = fcmp ogt double %235, 0.000000e+00
br i1 %236, label %237, label %245
237: ; preds = %228
%238 = load double, double* %4
%239 = fcmp ugt double %235, %238
br i1 %239, label %245, label %240
240: ; preds = %237
%241 = fsub double %235, %216
%242 = tail call i64 @pow(double %241, double 2.000000e+00)
%243 = sitofp i64 %242 to double
%244 = fadd double %230, %243
br label %245
245: ; preds = %228, %237, %240
%246 = phi double [ %244, %240 ], [ %230, %237 ], [ %230, %228 ]
%247 = or i64 %229, 1
%248 = getelementptr inbounds double*, double** %0, i64 %247
%249 = load double*, double** %248
%250 = getelementptr inbounds double, double* %249, i64 %225
%251 = load double, double* %250
%252 = fcmp ogt double %251, 0.000000e+00
br i1 %252, label %253, label %261
253: ; preds = %245
%254 = load double, double* %4
%255 = fcmp ugt double %251, %254
br i1 %255, label %261, label %256
256: ; preds = %253
%257 = fsub double %251, %216
%258 = tail call i64 @pow(double %257, double 2.000000e+00)
%259 = sitofp i64 %258 to double
%260 = fadd double %246, %259
br label %261
261: ; preds = %256, %253, %245
%262 = phi double [ %260, %256 ], [ %246, %253 ], [ %246, %245 ]
%263 = add nuw nsw i64 %229, 2
%264 = add i64 %231, 2
%265 = icmp eq i64 %264, %222
br i1 %265, label %266, label %228
266: ; preds = %261, %227
%267 = phi double [ undef, %227 ], [ %262, %261 ]
%268 = phi i64 [ 0, %227 ], [ %263, %261 ]
%269 = phi double [ %226, %227 ], [ %262, %261 ]
br i1 %223, label %284, label %270
270: ; preds = %266
%271 = getelementptr inbounds double*, double** %0, i64 %268
%272 = load double*, double** %271
%273 = getelementptr inbounds double, double* %272, i64 %225
%274 = load double, double* %273
%275 = fcmp ogt double %274, 0.000000e+00
br i1 %275, label %276, label %284
276: ; preds = %270
%277 = load double, double* %4
%278 = fcmp ugt double %274, %277
br i1 %278, label %284, label %279
279: ; preds = %276
%280 = fsub double %274, %216
%281 = tail call i64 @pow(double %280, double 2.000000e+00)
%282 = sitofp i64 %281 to double
%283 = fadd double %269, %282
br label %284
284: ; preds = %266, %279, %276, %270, %224
%285 = phi double [ %226, %224 ], [ %267, %266 ], [ %283, %279 ], [ %269, %276 ], [ %269, %270 ]
%286 = add nuw nsw i64 %225, 1
%287 = icmp eq i64 %286, %219
br i1 %287, label %288, label %224
288: ; preds = %284, %138, %215
%289 = phi double [ %216, %215 ], [ 0x7FF8000000000000, %138 ], [ %216, %284 ]
%290 = phi double [ %212, %215 ], [ 0.000000e+00, %138 ], [ %212, %284 ]
%291 = phi double [ 0.000000e+00, %215 ], [ 0.000000e+00, %138 ], [ %285, %284 ]
%292 = fadd double %290, -1.000000e+00
%293 = fdiv double %291, %292
%294 = tail call double @sqrt(double %293)
%295 = fneg double %6
%296 = tail call double @llvm.fmuladd.f64(double %295, double %294, double %289)
store double %296, double* %3
ret void
}