int Presnell(char *Asn1, int L1, char *Asn2, int L2, char SecStr,
             float Threshold, float *Q2, float *O) {
  int Boundaries(char *Asn, int L, char SecondStr, int(*Bound)[2]);
  int Bound1[500][2], Bound2[500][2], Length1[500], Length2[500], NSeg1, NSeg2;
  int Overlap, MaxOverlap, TP = 0, FP = 0, FN = 0;
  register int i, j;
  NSeg1 = Boundaries(Asn1, L1, SecStr, Bound1);
  NSeg2 = Boundaries(Asn2, L2, SecStr, Bound2);
  for (i = 0; i < NSeg1; i++)
    Length1[i] = Bound1[i][1] - Bound1[i][0] + 1;
  for (j = 0; j < NSeg2; j++)
    Length2[j] = Bound2[j][1] - Bound2[j][0] + 1;
  for (i = 0; i < NSeg1; i++) {
    MaxOverlap = 0;
    for (j = 0; j < NSeg2; j++) {
      Overlap =
          ((Bound1[i][1]) < (Bound2[j][1]) ? Bound1[i][1] : Bound2[j][1]) -
          ((Bound1[i][0]) < (Bound2[j][0]) ? Bound2[j][0] : Bound1[i][0]) + 1;
      if (Overlap > MaxOverlap)
        MaxOverlap = Overlap;
    }
    if ((float)MaxOverlap / (float)Length1[i] >= Threshold)
      TP++;
    else
      FN++;
  }
  for (i = 0; i < NSeg2; i++) {
    MaxOverlap = 0;
    for (j = 0; j < NSeg1; j++) {
      Overlap =
          ((Bound2[i][1]) < (Bound1[j][1]) ? Bound2[i][1] : Bound1[j][1]) -
          ((Bound2[i][0]) < (Bound1[j][0]) ? Bound1[j][0] : Bound2[i][0]) + 1;
      if (Overlap > MaxOverlap)
        MaxOverlap = Overlap;
    }
    if ((float)MaxOverlap / (float)Length2[i] < Threshold)
      FP++;
  }
  if (TP + FN != 0) {
    *Q2 = (float)TP / ((float)TP + (float)FN);
    *O = (float)FP / ((float)TP + (float)FN);
  } else {
    *Q2 = -1.0;
    *O = -1.0;
  }
  return (1);
}


x86 assembly (clang, -O0):
<Presnell>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2f50,%rsp
mov    %r8b,%al
mov    0x10(%rbp),%r8
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %al,-0x1d(%rbp)
movss  %xmm0,-0x24(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x0,-0x2f24(%rbp)
movl   $0x0,-0x2f28(%rbp)
movl   $0x0,-0x2f2c(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x1d(%rbp),%al
lea    -0xfd0(%rbp),%rcx
movsbl %al,%edx
call   1030 <Boundaries@plt>
mov    %eax,-0x2f14(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x1c(%rbp),%esi
mov    -0x1d(%rbp),%al
lea    -0x1f70(%rbp),%rcx
movsbl %al,%edx
call   1030 <Boundaries@plt>
mov    %eax,-0x2f18(%rbp)
movl   $0x0,-0x2f30(%rbp)
mov    -0x2f30(%rbp),%eax
cmp    -0x2f14(%rbp),%eax
jge    11f5 <Presnell+0xe5>
movslq -0x2f30(%rbp),%rax
mov    -0xfcc(%rbp,%rax,8),%ecx
movslq -0x2f30(%rbp),%rax
sub    -0xfd0(%rbp,%rax,8),%ecx
add    $0x1,%ecx
movslq -0x2f30(%rbp),%rax
mov    %ecx,-0x2740(%rbp,%rax,4)
mov    -0x2f30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2f30(%rbp)
jmp    11a2 <Presnell+0x92>
movl   $0x0,-0x2f34(%rbp)
mov    -0x2f34(%rbp),%eax
cmp    -0x2f18(%rbp),%eax
jge    1252 <Presnell+0x142>
movslq -0x2f34(%rbp),%rax
mov    -0x1f6c(%rbp,%rax,8),%ecx
movslq -0x2f34(%rbp),%rax
sub    -0x1f70(%rbp,%rax,8),%ecx
add    $0x1,%ecx
movslq -0x2f34(%rbp),%rax
mov    %ecx,-0x2f10(%rbp,%rax,4)
mov    -0x2f34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2f34(%rbp)
jmp    11ff <Presnell+0xef>
movl   $0x0,-0x2f30(%rbp)
mov    -0x2f30(%rbp),%eax
cmp    -0x2f14(%rbp),%eax
jge    13ee <Presnell+0x2de>
movl   $0x0,-0x2f20(%rbp)
movl   $0x0,-0x2f34(%rbp)
mov    -0x2f34(%rbp),%eax
cmp    -0x2f18(%rbp),%eax
jge    138c <Presnell+0x27c>
movslq -0x2f30(%rbp),%rax
mov    -0xfcc(%rbp,%rax,8),%eax
movslq -0x2f34(%rbp),%rcx
cmp    -0x1f6c(%rbp,%rcx,8),%eax
jge    12cf <Presnell+0x1bf>
movslq -0x2f30(%rbp),%rax
mov    -0xfcc(%rbp,%rax,8),%eax
mov    %eax,-0x2f38(%rbp)
jmp    12e3 <Presnell+0x1d3>
movslq -0x2f34(%rbp),%rax
mov    -0x1f6c(%rbp,%rax,8),%eax
mov    %eax,-0x2f38(%rbp)
mov    -0x2f38(%rbp),%eax
mov    %eax,-0x2f3c(%rbp)
movslq -0x2f30(%rbp),%rax
mov    -0xfd0(%rbp,%rax,8),%eax
movslq -0x2f34(%rbp),%rcx
cmp    -0x1f70(%rbp,%rcx,8),%eax
jge    132a <Presnell+0x21a>
movslq -0x2f34(%rbp),%rax
mov    -0x1f70(%rbp,%rax,8),%eax
mov    %eax,-0x2f40(%rbp)
jmp    133e <Presnell+0x22e>
movslq -0x2f30(%rbp),%rax
mov    -0xfd0(%rbp,%rax,8),%eax
mov    %eax,-0x2f40(%rbp)
mov    -0x2f3c(%rbp),%eax
mov    -0x2f40(%rbp),%ecx
sub    %ecx,%eax
add    $0x1,%eax
mov    %eax,-0x2f1c(%rbp)
mov    -0x2f1c(%rbp),%eax
cmp    -0x2f20(%rbp),%eax
jle    1373 <Presnell+0x263>
mov    -0x2f1c(%rbp),%eax
mov    %eax,-0x2f20(%rbp)
jmp    1378 <Presnell+0x268>
mov    -0x2f34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2f34(%rbp)
jmp    1282 <Presnell+0x172>
cvtsi2ssl -0x2f20(%rbp),%xmm0
ff
movslq -0x2f30(%rbp),%rax
cvtsi2ssl -0x2740(%rbp,%rax,4),%xmm1
ff ff
divss  %xmm1,%xmm0
ucomiss -0x24(%rbp),%xmm0
jb     13c6 <Presnell+0x2b6>
mov    -0x2f24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2f24(%rbp)
jmp    13d5 <Presnell+0x2c5>
mov    -0x2f2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2f2c(%rbp)
jmp    13da <Presnell+0x2ca>
mov    -0x2f30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2f30(%rbp)
jmp    125c <Presnell+0x14c>
movl   $0x0,-0x2f30(%rbp)
mov    -0x2f30(%rbp),%eax
cmp    -0x2f18(%rbp),%eax
jge    157a <Presnell+0x46a>
movl   $0x0,-0x2f20(%rbp)
movl   $0x0,-0x2f34(%rbp)
mov    -0x2f34(%rbp),%eax
cmp    -0x2f14(%rbp),%eax
jge    1528 <Presnell+0x418>
movslq -0x2f30(%rbp),%rax
mov    -0x1f6c(%rbp,%rax,8),%eax
movslq -0x2f34(%rbp),%rcx
cmp    -0xfcc(%rbp,%rcx,8),%eax
jge    146b <Presnell+0x35b>
movslq -0x2f30(%rbp),%rax
mov    -0x1f6c(%rbp,%rax,8),%eax
mov    %eax,-0x2f44(%rbp)
jmp    147f <Presnell+0x36f>
movslq -0x2f34(%rbp),%rax
mov    -0xfcc(%rbp,%rax,8),%eax
mov    %eax,-0x2f44(%rbp)
mov    -0x2f44(%rbp),%eax
mov    %eax,-0x2f48(%rbp)
movslq -0x2f30(%rbp),%rax
mov    -0x1f70(%rbp,%rax,8),%eax
movslq -0x2f34(%rbp),%rcx
cmp    -0xfd0(%rbp,%rcx,8),%eax
jge    14c6 <Presnell+0x3b6>
movslq -0x2f34(%rbp),%rax
mov    -0xfd0(%rbp,%rax,8),%eax
mov    %eax,-0x2f4c(%rbp)
jmp    14da <Presnell+0x3ca>
movslq -0x2f30(%rbp),%rax
mov    -0x1f70(%rbp,%rax,8),%eax
mov    %eax,-0x2f4c(%rbp)
mov    -0x2f48(%rbp),%eax
mov    -0x2f4c(%rbp),%ecx
sub    %ecx,%eax
add    $0x1,%eax
mov    %eax,-0x2f1c(%rbp)
mov    -0x2f1c(%rbp),%eax
cmp    -0x2f20(%rbp),%eax
jle    150f <Presnell+0x3ff>
mov    -0x2f1c(%rbp),%eax
mov    %eax,-0x2f20(%rbp)
jmp    1514 <Presnell+0x404>
mov    -0x2f34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2f34(%rbp)
jmp    141e <Presnell+0x30e>
cvtsi2ssl -0x2f20(%rbp),%xmm1
ff
movslq -0x2f30(%rbp),%rax
cvtsi2ssl -0x2f10(%rbp,%rax,4),%xmm0
ff ff
divss  %xmm0,%xmm1
movss  -0x24(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    1561 <Presnell+0x451>
mov    -0x2f28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2f28(%rbp)
jmp    1566 <Presnell+0x456>
mov    -0x2f30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2f30(%rbp)
jmp    13f8 <Presnell+0x2e8>
mov    -0x2f24(%rbp),%eax
add    -0x2f2c(%rbp),%eax
cmp    $0x0,%eax
je     15e4 <Presnell+0x4d4>
cvtsi2ssl -0x2f24(%rbp),%xmm0
ff
cvtsi2ssl -0x2f24(%rbp),%xmm1
ff
cvtsi2ssl -0x2f2c(%rbp),%xmm2
ff
addss  %xmm2,%xmm1
divss  %xmm1,%xmm0
mov    -0x30(%rbp),%rax
movss  %xmm0,(%rax)
cvtsi2ssl -0x2f28(%rbp),%xmm0
ff
cvtsi2ssl -0x2f24(%rbp),%xmm1
ff
cvtsi2ssl -0x2f2c(%rbp),%xmm2
ff
addss  %xmm2,%xmm1
divss  %xmm1,%xmm0
mov    0x10(%rbp),%rax
movss  %xmm0,(%rax)
jmp    1604 <Presnell+0x4f4>
mov    -0x30(%rbp),%rax
movss  0xa10(%rip),%xmm0
movss  %xmm0,(%rax)
mov    0x10(%rbp),%rax
movss  0xa00(%rip),%xmm0
movss  %xmm0,(%rax)
mov    $0x1,%eax
add    $0x2f50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Presnell>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x2ef8,%rsp
mov    %r9,%r14
movd   %xmm0,0xc(%rsp)
mov    %r8d,%ebx
mov    %ecx,%r15d
mov    %rdx,%r12
lea    0xfb0(%rsp),%rcx
mov    %r8d,%edx
call   1030 <Boundaries@plt>
mov    %eax,%r13d
lea    0x10(%rsp),%rcx
mov    %r12,%rdi
mov    %r15d,%esi
mov    %ebx,%edx
call   1030 <Boundaries@plt>
mov    %r13d,%r8d
test   %r13d,%r13d
jle    1221 <Presnell+0x111>
cmp    $0x8,%r13d
jae    1171 <Presnell+0x61>
xor    %ecx,%ecx
jmp    1200 <Presnell+0xf0>
mov    %r8d,%ecx
and    $0xfffffff8,%ecx
lea    0x0(,%r8,4),%rdx
and    $0xffffffffffffffe0,%rdx
xor    %esi,%esi
pcmpeqd %xmm0,%xmm0
nopl   0x0(%rax)
movaps 0xfb0(%rsp,%rsi,2),%xmm1
movaps 0xfc0(%rsp,%rsi,2),%xmm2
movaps 0xfd0(%rsp,%rsi,2),%xmm3
movaps 0xfe0(%rsp,%rsi,2),%xmm4
movaps %xmm1,%xmm5
shufps $0x88,%xmm2,%xmm5
movaps %xmm3,%xmm6
shufps $0x88,%xmm4,%xmm6
shufps $0xdd,%xmm2,%xmm1
psubd  %xmm5,%xmm1
shufps $0xdd,%xmm4,%xmm3
psubd  %xmm6,%xmm3
psubd  %xmm0,%xmm1
psubd  %xmm0,%xmm3
movdqa %xmm1,0x2720(%rsp,%rsi,1)
movdqa %xmm3,0x2730(%rsp,%rsi,1)
add    $0x20,%rsi
cmp    %rsi,%rdx
jne    1190 <Presnell+0x80>
cmp    %r8,%rcx
je     1221 <Presnell+0x111>
cs nopw 0x0(%rax,%rax,1)
mov    0xfb4(%rsp,%rcx,8),%edx
sub    0xfb0(%rsp,%rcx,8),%edx
add    $0x1,%edx
mov    %edx,0x2720(%rsp,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%r8
jne    1200 <Presnell+0xf0>
mov    %eax,%r9d
test   %eax,%eax
movss  0xc(%rsp),%xmm7
jle    12db <Presnell+0x1cb>
cmp    $0x8,%eax
jae    123e <Presnell+0x12e>
xor    %ecx,%ecx
jmp    12c0 <Presnell+0x1b0>
mov    %r9d,%ecx
and    $0xfffffff8,%ecx
lea    0x0(,%r9,4),%rdx
and    $0xffffffffffffffe0,%rdx
xor    %esi,%esi
pcmpeqd %xmm0,%xmm0
cs nopw 0x0(%rax,%rax,1)
movaps 0x10(%rsp,%rsi,2),%xmm1
movaps 0x20(%rsp,%rsi,2),%xmm2
movaps 0x30(%rsp,%rsi,2),%xmm3
movaps 0x40(%rsp,%rsi,2),%xmm4
movaps %xmm1,%xmm5
shufps $0x88,%xmm2,%xmm5
movaps %xmm3,%xmm6
shufps $0x88,%xmm4,%xmm6
shufps $0xdd,%xmm2,%xmm1
psubd  %xmm5,%xmm1
shufps $0xdd,%xmm4,%xmm3
psubd  %xmm6,%xmm3
psubd  %xmm0,%xmm1
psubd  %xmm0,%xmm3
movdqa %xmm1,0x1f50(%rsp,%rsi,1)
movdqa %xmm3,0x1f60(%rsp,%rsi,1)
add    $0x20,%rsi
cmp    %rsi,%rdx
jne    1260 <Presnell+0x150>
cmp    %r9,%rcx
je     12db <Presnell+0x1cb>
nopw   0x0(%rax,%rax,1)
mov    0x14(%rsp,%rcx,8),%edx
sub    0x10(%rsp,%rcx,8),%edx
add    $0x1,%edx
mov    %edx,0x1f50(%rsp,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%r9
jne    12c0 <Presnell+0x1b0>
test   %r13d,%r13d
jle    13cc <Presnell+0x2bc>
mov    %r9d,%r12d
and    $0xfffffffe,%r12d
xor    %r15d,%r15d
xor    %r10d,%r10d
xor    %r11d,%r11d
jmp    1333 <Presnell+0x223>
cs nopw 0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
xorps  %xmm1,%xmm1
cvtsi2ssl 0x2720(%rsp,%r15,4),%xmm1
divss  %xmm1,%xmm0
ucomiss %xmm7,%xmm0
sbb    $0xffffffff,%r11d
ucomiss %xmm7,%xmm0
adc    $0x0,%r10d
add    $0x1,%r15
cmp    %r8,%r15
je     13d2 <Presnell+0x2c2>
mov    $0x0,%esi
test   %eax,%eax
jle    1300 <Presnell+0x1f0>
mov    0xfb0(%rsp,%r15,8),%ecx
mov    0xfb4(%rsp,%r15,8),%ebx
xor    %edi,%edi
xor    %esi,%esi
cmp    $0x1,%eax
je     13a1 <Presnell+0x291>
cs nopw 0x0(%rax,%rax,1)
nop
mov    0x10(%rsp,%rdi,8),%ebp
mov    0x14(%rsp,%rdi,8),%edx
cmp    %edx,%ebx
cmovl  %ebx,%edx
cmp    %ebp,%ecx
cmovge %ecx,%ebp
sub    %ebp,%edx
lea    0x1(%rdx),%ebp
cmp    %esi,%edx
cmovl  %esi,%ebp
mov    0x1c(%rsp,%rdi,8),%edx
cmp    %edx,%ebx
cmovl  %ebx,%edx
mov    0x18(%rsp,%rdi,8),%esi
cmp    %esi,%ecx
cmovge %ecx,%esi
sub    %esi,%edx
lea    0x1(%rdx),%esi
cmp    %ebp,%edx
cmovl  %ebp,%esi
add    $0x2,%rdi
cmp    %rdi,%r12
jne    1360 <Presnell+0x250>
test   $0x1,%r9b
je     1300 <Presnell+0x1f0>
mov    0x10(%rsp,%rdi,8),%edx
mov    0x14(%rsp,%rdi,8),%edi
cmp    %edi,%ebx
cmovl  %ebx,%edi
cmp    %edx,%ecx
cmovl  %edx,%ecx
sub    %ecx,%edi
lea    0x1(%rdi),%ecx
cmp    %esi,%edi
cmovge %ecx,%esi
jmp    1300 <Presnell+0x1f0>
xor    %r11d,%r11d
xor    %r10d,%r10d
test   %eax,%eax
jle    14c8 <Presnell+0x3b8>
mov    %r8d,%eax
and    $0xfffffffe,%eax
xor    %r12d,%r12d
xor    %r15d,%r15d
jmp    1420 <Presnell+0x310>
nopl   0x0(%rax,%rax,1)
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
xorps  %xmm1,%xmm1
cvtsi2ssl 0x1f50(%rsp,%r12,4),%xmm1
divss  %xmm1,%xmm0
xor    %ecx,%ecx
ucomiss %xmm0,%xmm7
seta   %cl
add    %ecx,%r15d
add    $0x1,%r12
cmp    %r9,%r12
je     14be <Presnell+0x3ae>
mov    $0x0,%esi
test   %r13d,%r13d
jle    13f0 <Presnell+0x2e0>
mov    0x10(%rsp,%r12,8),%ecx
mov    0x14(%rsp,%r12,8),%ebx
xor    %edi,%edi
xor    %esi,%esi
cmp    $0x1,%r13d
je     148d <Presnell+0x37d>
xchg   %ax,%ax
mov    0xfb0(%rsp,%rdi,8),%ebp
mov    0xfb4(%rsp,%rdi,8),%edx
cmp    %edx,%ebx
cmovl  %ebx,%edx
cmp    %ebp,%ecx
cmovge %ecx,%ebp
sub    %ebp,%edx
lea    0x1(%rdx),%ebp
cmp    %esi,%edx
cmovl  %esi,%ebp
mov    0xfbc(%rsp,%rdi,8),%edx
cmp    %edx,%ebx
cmovl  %ebx,%edx
mov    0xfb8(%rsp,%rdi,8),%esi
cmp    %esi,%ecx
cmovge %ecx,%esi
sub    %esi,%edx
lea    0x1(%rdx),%esi
cmp    %ebp,%edx
cmovl  %ebp,%esi
add    $0x2,%rdi
cmp    %rdi,%rax
jne    1440 <Presnell+0x330>
test   $0x1,%r8b
je     13f0 <Presnell+0x2e0>
mov    0xfb0(%rsp,%rdi,8),%edx
mov    0xfb4(%rsp,%rdi,8),%edi
cmp    %edi,%ebx
cmovl  %ebx,%edi
cmp    %edx,%ecx
cmovl  %edx,%ecx
sub    %ecx,%edi
lea    0x1(%rdi),%ecx
cmp    %esi,%edi
cmovge %ecx,%esi
jmp    13f0 <Presnell+0x2e0>
xorps  %xmm0,%xmm0
cvtsi2ss %r15d,%xmm0
jmp    14cc <Presnell+0x3bc>
pxor   %xmm0,%xmm0
mov    0x2f30(%rsp),%rax
mov    %r11d,%ecx
add    %r10d,%ecx
jne    14ed <Presnell+0x3dd>
movl   $0xbf800000,(%r14)
movss  0xb15(%rip),%xmm0
jmp    150e <Presnell+0x3fe>
xorps  %xmm1,%xmm1
cvtsi2ss %r11d,%xmm1
xorps  %xmm2,%xmm2
cvtsi2ss %r10d,%xmm2
addss  %xmm1,%xmm2
divss  %xmm2,%xmm1
movss  %xmm1,(%r14)
divss  %xmm2,%xmm0
movss  %xmm0,(%rax)
mov    $0x1,%eax
add    $0x2ef8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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