#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 */
typedef float chr;
typedef float chl;

/* Variables and functions */
scalar_t__ ceil(float);
float fabs(float);
scalar_t__ floor(float);
int /*<<< orphan*/ free(int *);
scalar_t__ malloc(int);
int /*<<< orphan*/ pkpurge(int *, int *, int *, int *, int, float *);
void pkpick(float *spec, float chl, float chr, int avewidth, float thresh,
            float sensi, int sign, int *tpick, int *picked, int *purged,
            int npurged, int nlabel, int npart) {
  int istart, istop, n, i, j, npick, nplabel;
  int *tpicked;
  tpicked = (int *)malloc(sizeof(int) * 512);
  nplabel = 0;
  *tpick = 0;
  npick = 0;
  if (avewidth < 2)
    avewidth = 2;
  istart = ((int)(((chl) < 0.0) ? (ceil((chl)-0.5)) : (floor((chl) + 0.5)))) +
           avewidth - 1;
  istop = istart;
  spec--;
  for (n = 0; n < npart; n++) {
    istart = istop + 1;
    istop = istop + ((int)((((chr - chl) / npart) < 0.0)
                               ? (ceil(((chr - chl) / npart) - 0.5))
                               : (floor(((chr - chl) / npart) + 0.5))));
    if (istop >
        ((int)(((chr) < 0.0) ? (ceil((chr)-0.5)) : (floor((chr) + 0.5)))) -
            avewidth)
      istop =
          ((int)(((chr) < 0.0) ? (ceil((chr)-0.5)) : (floor((chr) + 0.5)))) -
          avewidth;
    for (i = istart; i < istop && npick < 512 - 1; i++) {
      if (sign >= 1) {
        if (spec[i] > thresh) {
          if ((spec[i - 1] < spec[i]) && (spec[i + 1] < spec[i])) {
            tpicked[npick++] = i;
          }
        }
      } else if (sign == 0) {
        if (fabs(spec[i]) > thresh) {
          if ((fabs(spec[i - 1]) < fabs(spec[i])) &&
              (fabs(spec[i + 1]) < fabs(spec[i]))) {
            tpicked[npick++] = i;
          }
        }
      } else if (sign <= -1) {
        if (spec[i] < (-1) * thresh) {
          if ((spec[i - 1] > spec[i]) && (spec[i + 1] > spec[i])) {
            tpicked[npick++] = i;
          }
        }
      }
    }
    nplabel = (int)(nplabel + nlabel / npart);
    if (npick > nplabel)
      pkpurge(tpicked, purged, &npick, &npurged, nplabel, spec);
    nplabel -= npick;
    for (j = 0; j < npick && (*tpick + j < 512 - 1); j++)
      picked[*tpick + j] = tpicked[j];
    *tpick += npick;
    npick = 0;
  }
  free(tpicked);
}


x86 assembly (clang, -O0):
<pkpick>:
push   %rbp
mov    %rsp,%rbp
sub    $0xb0,%rsp
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
movss  %xmm1,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
movss  %xmm2,-0x18(%rbp)
movss  %xmm3,-0x1c(%rbp)
mov    %edx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8,-0x30(%rbp)
mov    %r9,-0x38(%rbp)
mov    $0x800,%edi
call   1060 <malloc@plt>
mov    %rax,-0x60(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x28(%rbp),%rax
movl   $0x0,(%rax)
movl   $0x0,-0x50(%rbp)
cmpl   $0x2,-0x14(%rbp)
jge    11d5 <pkpick+0x75>
movl   $0x2,-0x14(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1212 <pkpick+0xb2>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe04(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1040 <ceil@plt>
mov    %rax,-0x68(%rbp)
jmp    1234 <pkpick+0xd4>
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xddd(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1080 <floor@plt>
mov    %rax,-0x68(%rbp)
mov    -0x68(%rbp),%rax
add    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x8(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x8(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    0x20(%rbp),%eax
jge    172e <pkpick+0x5ce>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x6c(%rbp)
movss  -0x10(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
cvtsi2ssl 0x20(%rbp),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    12ce <pkpick+0x16e>
movss  -0x10(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
cvtsi2ssl 0x20(%rbp),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd48(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1040 <ceil@plt>
mov    %rax,-0x78(%rbp)
jmp    12fe <pkpick+0x19e>
movss  -0x10(%rbp),%xmm0
subss  -0xc(%rbp),%xmm0
cvtsi2ssl 0x20(%rbp),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd13(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1080 <floor@plt>
mov    %rax,-0x78(%rbp)
mov    -0x6c(%rbp),%eax
mov    -0x78(%rbp),%rcx
add    %ecx,%eax
mov    %eax,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x7c(%rbp)
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1350 <pkpick+0x1f0>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xcc9(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1040 <ceil@plt>
mov    %rax,-0x88(%rbp)
jmp    1375 <pkpick+0x215>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc9f(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1080 <floor@plt>
mov    %rax,-0x88(%rbp)
mov    -0x7c(%rbp),%eax
mov    -0x88(%rbp),%rcx
sub    -0x14(%rbp),%ecx
cmp    %ecx,%eax
jle    13fc <pkpick+0x29c>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    13ca <pkpick+0x26a>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc4f(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1040 <ceil@plt>
mov    %rax,-0x90(%rbp)
jmp    13ef <pkpick+0x28f>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc25(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1080 <floor@plt>
mov    %rax,-0x90(%rbp)
mov    -0x90(%rbp),%rax
sub    -0x14(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%ecx
xor    %eax,%eax
cmp    -0x40(%rbp),%ecx
mov    %al,-0x91(%rbp)
jge    1426 <pkpick+0x2c6>
cmpl   $0x1ff,-0x50(%rbp)
setl   %al
mov    %al,-0x91(%rbp)
mov    -0x91(%rbp),%al
test   $0x1,%al
jne    1439 <pkpick+0x2d9>
jmp    164c <pkpick+0x4ec>
cmpl   $0x1,-0x20(%rbp)
jl     14cc <pkpick+0x36c>
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
ucomiss -0x18(%rbp),%xmm0
jbe    14c7 <pkpick+0x367>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
ucomiss %xmm1,%xmm0
jbe    14c2 <pkpick+0x362>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
ucomiss %xmm1,%xmm0
jbe    14c2 <pkpick+0x362>
mov    -0x48(%rbp),%edx
mov    -0x60(%rbp),%rax
mov    -0x50(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x50(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    14c7 <pkpick+0x367>
jmp    1639 <pkpick+0x4d9>
cmpl   $0x0,-0x20(%rbp)
jne    1598 <pkpick+0x438>
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
call   1050 <fabs@plt>
ucomiss -0x18(%rbp),%xmm0
jbe    1593 <pkpick+0x433>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
call   1050 <fabs@plt>
movss  %xmm0,-0x98(%rbp)
ff
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
call   1050 <fabs@plt>
movss  -0x98(%rbp),%xmm1
ff
ucomiss %xmm1,%xmm0
jbe    158e <pkpick+0x42e>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
call   1050 <fabs@plt>
movss  %xmm0,-0x9c(%rbp)
ff
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
call   1050 <fabs@plt>
movss  -0x9c(%rbp),%xmm1
ff
ucomiss %xmm1,%xmm0
jbe    158e <pkpick+0x42e>
mov    -0x48(%rbp),%edx
mov    -0x60(%rbp),%rax
mov    -0x50(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x50(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1593 <pkpick+0x433>
jmp    1634 <pkpick+0x4d4>
cmpl   $0xffffffff,-0x20(%rbp)
jg     162f <pkpick+0x4cf>
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
movss  0xa51(%rip),%xmm0
mulss  -0x18(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    162a <pkpick+0x4ca>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
ucomiss (%rax,%rcx,4),%xmm0
jbe    1625 <pkpick+0x4c5>
mov    -0x8(%rbp),%rax
mov    -0x48(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x48(%rbp),%rcx
ucomiss (%rax,%rcx,4),%xmm0
jbe    1625 <pkpick+0x4c5>
mov    -0x48(%rbp),%edx
mov    -0x60(%rbp),%rax
mov    -0x50(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x50(%rbp)
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    162a <pkpick+0x4ca>
jmp    162f <pkpick+0x4cf>
jmp    1634 <pkpick+0x4d4>
jmp    1639 <pkpick+0x4d9>
jmp    163e <pkpick+0x4de>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1402 <pkpick+0x2a2>
mov    -0x54(%rbp),%eax
mov    %eax,-0xa0(%rbp)
mov    0x18(%rbp),%eax
cltd
idivl  0x20(%rbp)
mov    %eax,%ecx
mov    -0xa0(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x54(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x54(%rbp),%eax
jle    1692 <pkpick+0x532>
mov    -0x60(%rbp),%rdi
mov    -0x38(%rbp),%rsi
mov    -0x54(%rbp),%r8d
mov    -0x8(%rbp),%r9
lea    -0x50(%rbp),%rdx
lea    0x10(%rbp),%rcx
call   1070 <pkpurge@plt>
mov    -0x50(%rbp),%ecx
mov    -0x54(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x54(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%ecx
xor    %eax,%eax
cmp    -0x50(%rbp),%ecx
mov    %al,-0xa1(%rbp)
jge    16cf <pkpick+0x56f>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
add    -0x4c(%rbp),%eax
cmp    $0x1ff,%eax
setl   %al
mov    %al,-0xa1(%rbp)
mov    -0xa1(%rbp),%al
test   $0x1,%al
jne    16e2 <pkpick+0x582>
jmp    170e <pkpick+0x5ae>
mov    -0x60(%rbp),%rax
movslq -0x4c(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
mov    -0x30(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    (%rcx),%ecx
add    -0x4c(%rbp),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    16a4 <pkpick+0x544>
mov    -0x50(%rbp),%ecx
mov    -0x28(%rbp),%rax
add    (%rax),%ecx
mov    %ecx,(%rax)
movl   $0x0,-0x50(%rbp)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    125a <pkpick+0xfa>
mov    -0x60(%rbp),%rdi
call   1030 <free@plt>
add    $0xb0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pkpick>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %r9,0x68(%rsp)
mov    %r8,%rbp
mov    %rcx,%r15
mov    %edx,%r12d
movaps %xmm2,0x40(%rsp)
mov    %esi,%r14d
movss  %xmm1,0x24(%rsp)
movss  %xmm0,0x50(%rsp)
mov    %rdi,%r13
mov    $0x800,%edi
call   1050 <malloc@plt>
movss  0x50(%rsp),%xmm1
mov    %rax,0x8(%rsp)
mov    %r15,0x10(%rsp)
movl   $0x0,(%r15)
cmp    $0x3,%r14d
mov    $0x2,%eax
cmovge %r14d,%eax
mov    %rax,0x28(%rsp)
movl   $0x0,0x4(%rsp)
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jbe    11dc <pkpick+0x8c>
movss  0xe33(%rip),%xmm0
addss  %xmm1,%xmm0
call   1040 <ceil@plt>
jmp    11ed <pkpick+0x9d>
movss  0xe1c(%rip),%xmm0
addss  %xmm1,%xmm0
call   1070 <floor@plt>
mov    0xd0(%rsp),%r15d
test   %r15d,%r15d
movaps 0x40(%rsp),%xmm1
mov    0x8(%rsp),%rdi
jle    151a <pkpick+0x3ca>
lea    -0x4(%r13),%r14
mov    0x28(%rsp),%rcx
add    %eax,%ecx
add    $0xffffffff,%ecx
movss  0x24(%rsp),%xmm2
movaps %xmm2,%xmm3
xorps  %xmm0,%xmm0
cvtsi2ss %r15d,%xmm0
subss  0x50(%rsp),%xmm3
divss  %xmm0,%xmm3
movss  0xdc7(%rip),%xmm0
movaps %xmm3,%xmm4
addss  %xmm0,%xmm4
movss  %xmm4,0x34(%rsp)
movss  0xdb6(%rip),%xmm4
movss  %xmm3,0x38(%rsp)
addss  %xmm4,%xmm3
movss  %xmm3,0x30(%rsp)
addss  %xmm2,%xmm0
movss  %xmm0,0x20(%rsp)
addss  %xmm2,%xmm4
movss  %xmm4,0x1c(%rsp)
movaps 0xd97(%rip),%xmm0
xorps  %xmm1,%xmm0
movaps %xmm0,0x50(%rsp)
xor    %edx,%edx
xor    %eax,%eax
mov    %rbp,0x70(%rsp)
jmp    12c1 <pkpick+0x171>
nopl   0x0(%rax)
add    %ecx,(%r8)
sub    %ecx,%r15d
movl   $0x0,0x4(%rsp)
mov    0x3c(%rsp),%eax
add    $0x1,%eax
mov    %r15d,%edx
mov    0xd0(%rsp),%r15d
cmp    %r15d,%eax
mov    0x80(%rsp),%rcx
je     151a <pkpick+0x3ca>
mov    %ecx,%ebp
xorps  %xmm0,%xmm0
ucomiss 0x38(%rsp),%xmm0
mov    %eax,0x3c(%rsp)
mov    %rdx,0x78(%rsp)
jbe    12f0 <pkpick+0x1a0>
movss  0x30(%rsp),%xmm0
call   1040 <ceil@plt>
jmp    12fb <pkpick+0x1ab>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movss  0x34(%rsp),%xmm0
call   1070 <floor@plt>
mov    %rax,%rbx
add    %ebp,%ebx
xorps  %xmm0,%xmm0
ucomiss 0x24(%rsp),%xmm0
jbe    1340 <pkpick+0x1f0>
movss  0x1c(%rsp),%xmm0
call   1040 <ceil@plt>
sub    0x28(%rsp),%eax
cmp    %eax,%ebx
mov    0x10(%rsp),%r8
movaps 0x40(%rsp),%xmm2
mov    0x8(%rsp),%rdi
jle    1383 <pkpick+0x233>
movss  0x1c(%rsp),%xmm0
call   1040 <ceil@plt>
jmp    136d <pkpick+0x21d>
nopl   0x0(%rax)
movss  0x20(%rsp),%xmm0
call   1070 <floor@plt>
sub    0x28(%rsp),%eax
cmp    %eax,%ebx
mov    0x10(%rsp),%r8
movaps 0x40(%rsp),%xmm2
mov    0x8(%rsp),%rdi
jle    1383 <pkpick+0x233>
movss  0x20(%rsp),%xmm0
call   1070 <floor@plt>
mov    0x8(%rsp),%rdi
movaps 0x40(%rsp),%xmm2
mov    0x10(%rsp),%r8
mov    %rax,%rbx
sub    0x28(%rsp),%ebx
lea    0x1(%rbp),%eax
mov    0x4(%rsp),%ecx
cmp    %ebx,%eax
jge    148c <pkpick+0x33c>
cmp    $0x1fe,%ecx
jg     148c <pkpick+0x33c>
cltq
movslq %ebx,%rdx
add    $0x1,%rax
nopw   0x0(%rax,%rax,1)
movss  -0x8(%r13,%rax,4),%xmm0
test   %r12d,%r12d
jle    13f0 <pkpick+0x2a0>
ucomiss %xmm2,%xmm0
jbe    1470 <pkpick+0x320>
movslq %ebp,%rsi
ucomiss (%r14,%rsi,4),%xmm0
jbe    1470 <pkpick+0x320>
lea    0x2(%rbp),%esi
movslq %esi,%rsi
ucomiss (%r14,%rsi,4),%xmm0
ja     1456 <pkpick+0x306>
jmp    1470 <pkpick+0x320>
cs nopw 0x0(%rax,%rax,1)
nop
je     141d <pkpick+0x2cd>
movaps 0x50(%rsp),%xmm1
ucomiss %xmm0,%xmm1
jbe    1470 <pkpick+0x320>
movslq %ebp,%rsi
movss  (%r14,%rsi,4),%xmm1
ucomiss %xmm0,%xmm1
jbe    1470 <pkpick+0x320>
lea    0x2(%rbp),%esi
movslq %esi,%rsi
movss  (%r14,%rsi,4),%xmm1
ucomiss %xmm0,%xmm1
ja     1456 <pkpick+0x306>
jmp    1470 <pkpick+0x320>
andps  0xbfc(%rip),%xmm0
ucomiss %xmm2,%xmm0
jbe    1470 <pkpick+0x320>
movslq %ebp,%rsi
movss  (%r14,%rsi,4),%xmm1
andps  0xbe7(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    1470 <pkpick+0x320>
lea    0x2(%rbp),%esi
movslq %esi,%rsi
movss  (%r14,%rsi,4),%xmm1
andps  0xbcf(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    1470 <pkpick+0x320>
lea    0x1(%rcx),%esi
mov    %esi,0x4(%rsp)
movslq %ecx,%rcx
lea    0x1(%rbp),%esi
mov    %esi,(%rdi,%rcx,4)
cs nopw 0x0(%rax,%rax,1)
mov    0x4(%rsp),%ecx
cmp    %rdx,%rax
jge    148c <pkpick+0x33c>
add    $0x1,%ebp
add    $0x1,%rax
cmp    $0x1ff,%ecx
jl     13b0 <pkpick+0x260>
mov    %rbx,0x80(%rsp)
mov    0xc8(%rsp),%eax
cltd
idiv   %r15d
mov    %eax,%r15d
add    0x78(%rsp),%r15d
cmp    %r15d,%ecx
jle    14d7 <pkpick+0x387>
mov    0x68(%rsp),%rsi
lea    0x4(%rsp),%rdx
lea    0xc0(%rsp),%rcx
mov    %r15d,%r8d
mov    %r14,%r9
call   1060 <pkpurge@plt>
mov    0x8(%rsp),%rdi
mov    0x10(%rsp),%r8
mov    0x4(%rsp),%ecx
test   %ecx,%ecx
mov    0x70(%rsp),%rbp
jle    1290 <pkpick+0x140>
mov    %ecx,%eax
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
mov    (%r8),%esi
add    %rdx,%rsi
cmp    $0x1fe,%esi
jg     1290 <pkpick+0x140>
mov    (%rdi,%rdx,4),%ebx
movslq %esi,%rsi
mov    %ebx,0x0(%rbp,%rsi,4)
add    $0x1,%rdx
cmp    %rdx,%rax
jne    14f0 <pkpick+0x3a0>
jmp    1290 <pkpick+0x140>
call   1030 <free@plt>
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @pkpick(float* %0, float %1, float %2, i32 %3, float %4, float %5, i32 %6, i32* %7, i32* %8, i32* %9, i32 %10, i32 %11, i32 %12) {
%14 = alloca float*
%15 = alloca float
%16 = alloca float
%17 = alloca i32
%18 = alloca float
%19 = alloca float
%20 = alloca 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
%30 = alloca i32
%31 = alloca i32
%32 = alloca i32
%33 = alloca i32
%34 = alloca i32*
store float* %0, float** %14
store float %1, float* %15
store float %2, float* %16
store i32 %3, i32* %17
store float %4, float* %18
store float %5, float* %19
store i32 %6, i32* %20
store i32* %7, i32** %21
store i32* %8, i32** %22
store i32* %9, i32** %23
store i32 %10, i32* %24
store i32 %11, i32* %25
store i32 %12, i32* %26
%35 = call i64 @malloc(i32 2048)
%36 = inttoptr i64 %35 to i32*
store i32* %36, i32** %34
store i32 0, i32* %33
%37 = load i32*, i32** %21
store i32 0, i32* %37
store i32 0, i32* %32
%38 = load i32, i32* %17
%39 = icmp slt i32 %38, 2
br i1 %39, label %40, label %41
40: ; preds = %13
store i32 2, i32* %17
br label %41
41: ; preds = %40, %13
%42 = load float, float* %15
%43 = fpext float %42 to double
%44 = fcmp olt double %43, 0.000000e+00
br i1 %44, label %45, label %51
45: ; preds = %41
%46 = load float, float* %15
%47 = fpext float %46 to double
%48 = fsub double %47, 5.000000e-01
%49 = fptrunc double %48 to float
%50 = call i64 @ceil(float %49)
br label %57
51: ; preds = %41
%52 = load float, float* %15
%53 = fpext float %52 to double
%54 = fadd double %53, 5.000000e-01
%55 = fptrunc double %54 to float
%56 = call i64 @floor(float %55)
br label %57
57: ; preds = %51, %45
%58 = phi i64 [ %50, %45 ], [ %56, %51 ]
%59 = trunc i64 %58 to i32
%60 = load i32, i32* %17
%61 = add nsw i32 %59, %60
%62 = sub nsw i32 %61, 1
store i32 %62, i32* %27
%63 = load i32, i32* %27
store i32 %63, i32* %28
%64 = load float*, float** %14
%65 = getelementptr inbounds float, float* %64, i32 -1
store float* %65, float** %14
store i32 0, i32* %29
br label %66
66: ; preds = %364, %57
%67 = load i32, i32* %29
%68 = load i32, i32* %26
%69 = icmp slt i32 %67, %68
br i1 %69, label %70, label %367
70: ; preds = %66
%71 = load i32, i32* %28
%72 = add nsw i32 %71, 1
store i32 %72, i32* %27
%73 = load i32, i32* %28
%74 = load float, float* %16
%75 = load float, float* %15
%76 = fsub float %74, %75
%77 = load i32, i32* %26
%78 = sitofp i32 %77 to float
%79 = fdiv float %76, %78
%80 = fpext float %79 to double
%81 = fcmp olt double %80, 0.000000e+00
br i1 %81, label %82, label %93
82: ; preds = %70
%83 = load float, float* %16
%84 = load float, float* %15
%85 = fsub float %83, %84
%86 = load i32, i32* %26
%87 = sitofp i32 %86 to float
%88 = fdiv float %85, %87
%89 = fpext float %88 to double
%90 = fsub double %89, 5.000000e-01
%91 = fptrunc double %90 to float
%92 = call i64 @ceil(float %91)
br label %104
93: ; preds = %70
%94 = load float, float* %16
%95 = load float, float* %15
%96 = fsub float %94, %95
%97 = load i32, i32* %26
%98 = sitofp i32 %97 to float
%99 = fdiv float %96, %98
%100 = fpext float %99 to double
%101 = fadd double %100, 5.000000e-01
%102 = fptrunc double %101 to float
%103 = call i64 @floor(float %102)
br label %104
104: ; preds = %93, %82
%105 = phi i64 [ %92, %82 ], [ %103, %93 ]
%106 = trunc i64 %105 to i32
%107 = add nsw i32 %73, %106
store i32 %107, i32* %28
%108 = load i32, i32* %28
%109 = load float, float* %16
%110 = fpext float %109 to double
%111 = fcmp olt double %110, 0.000000e+00
br i1 %111, label %112, label %118
112: ; preds = %104
%113 = load float, float* %16
%114 = fpext float %113 to double
%115 = fsub double %114, 5.000000e-01
%116 = fptrunc double %115 to float
%117 = call i64 @ceil(float %116)
br label %124
118: ; preds = %104
%119 = load float, float* %16
%120 = fpext float %119 to double
%121 = fadd double %120, 5.000000e-01
%122 = fptrunc double %121 to float
%123 = call i64 @floor(float %122)
br label %124
124: ; preds = %118, %112
%125 = phi i64 [ %117, %112 ], [ %123, %118 ]
%126 = trunc i64 %125 to i32
%127 = load i32, i32* %17
%128 = sub nsw i32 %126, %127
%129 = icmp sgt i32 %108, %128
br i1 %129, label %130, label %151
130: ; preds = %124
%131 = load float, float* %16
%132 = fpext float %131 to double
%133 = fcmp olt double %132, 0.000000e+00
br i1 %133, label %134, label %140
134: ; preds = %130
%135 = load float, float* %16
%136 = fpext float %135 to double
%137 = fsub double %136, 5.000000e-01
%138 = fptrunc double %137 to float
%139 = call i64 @ceil(float %138)
br label %146
140: ; preds = %130
%141 = load float, float* %16
%142 = fpext float %141 to double
%143 = fadd double %142, 5.000000e-01
%144 = fptrunc double %143 to float
%145 = call i64 @floor(float %144)
br label %146
146: ; preds = %140, %134
%147 = phi i64 [ %139, %134 ], [ %145, %140 ]
%148 = trunc i64 %147 to i32
%149 = load i32, i32* %17
%150 = sub nsw i32 %148, %149
store i32 %150, i32* %28
br label %151
151: ; preds = %146, %124
%152 = load i32, i32* %27
store i32 %152, i32* %30
br label %153
153: ; preds = %309, %151
%154 = load i32, i32* %30
%155 = load i32, i32* %28
%156 = icmp slt i32 %154, %155
br i1 %156, label %157, label %160
157: ; preds = %153
%158 = load i32, i32* %32
%159 = icmp slt i32 %158, 511
br label %160
160: ; preds = %157, %153
%161 = phi i1 [ false, %153 ], [ %159, %157 ]
br i1 %161, label %162, label %312
162: ; preds = %160
%163 = load i32, i32* %20
%164 = icmp sge i32 %163, 1
br i1 %164, label %165, label %208
165: ; preds = %162
%166 = load float*, float** %14
%167 = load i32, i32* %30
%168 = sext i32 %167 to i64
%169 = getelementptr inbounds float, float* %166, i64 %168
%170 = load float, float* %169
%171 = load float, float* %18
%172 = fcmp ogt float %170, %171
br i1 %172, label %173, label %207
173: ; preds = %165
%174 = load float*, float** %14
%175 = load i32, i32* %30
%176 = sub nsw i32 %175, 1
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds float, float* %174, i64 %177
%179 = load float, float* %178
%180 = load float*, float** %14
%181 = load i32, i32* %30
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds float, float* %180, i64 %182
%184 = load float, float* %183
%185 = fcmp olt float %179, %184
br i1 %185, label %186, label %206
186: ; preds = %173
%187 = load float*, float** %14
%188 = load i32, i32* %30
%189 = add nsw i32 %188, 1
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds float, float* %187, i64 %190
%192 = load float, float* %191
%193 = load float*, float** %14
%194 = load i32, i32* %30
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds float, float* %193, i64 %195
%197 = load float, float* %196
%198 = fcmp olt float %192, %197
br i1 %198, label %199, label %206
199: ; preds = %186
%200 = load i32, i32* %30
%201 = load i32*, i32** %34
%202 = load i32, i32* %32
%203 = add nsw i32 %202, 1
store i32 %203, i32* %32
%204 = sext i32 %202 to i64
%205 = getelementptr inbounds i32, i32* %201, i64 %204
store i32 %200, i32* %205
br label %206
206: ; preds = %199, %186, %173
br label %207
207: ; preds = %206, %165
br label %308
208: ; preds = %162
%209 = load i32, i32* %20
%210 = icmp eq i32 %209, 0
br i1 %210, label %211, label %259
211: ; preds = %208
%212 = load float*, float** %14
%213 = load i32, i32* %30
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds float, float* %212, i64 %214
%216 = load float, float* %215
%217 = call float @fabs(float %216)
%218 = load float, float* %18
%219 = fcmp ogt float %217, %218
br i1 %219, label %220, label %258
220: ; preds = %211
%221 = load float*, float** %14
%222 = load i32, i32* %30
%223 = sub nsw i32 %222, 1
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds float, float* %221, i64 %224
%226 = load float, float* %225
%227 = call float @fabs(float %226)
%228 = load float*, float** %14
%229 = load i32, i32* %30
%230 = sext i32 %229 to i64
%231 = getelementptr inbounds float, float* %228, i64 %230
%232 = load float, float* %231
%233 = call float @fabs(float %232)
%234 = fcmp olt float %227, %233
br i1 %234, label %235, label %257
235: ; preds = %220
%236 = load float*, float** %14
%237 = load i32, i32* %30
%238 = add nsw i32 %237, 1
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds float, float* %236, i64 %239
%241 = load float, float* %240
%242 = call float @fabs(float %241)
%243 = load float*, float** %14
%244 = load i32, i32* %30
%245 = sext i32 %244 to i64
%246 = getelementptr inbounds float, float* %243, i64 %245
%247 = load float, float* %246
%248 = call float @fabs(float %247)
%249 = fcmp olt float %242, %248
br i1 %249, label %250, label %257
250: ; preds = %235
%251 = load i32, i32* %30
%252 = load i32*, i32** %34
%253 = load i32, i32* %32
%254 = add nsw i32 %253, 1
store i32 %254, i32* %32
%255 = sext i32 %253 to i64
%256 = getelementptr inbounds i32, i32* %252, i64 %255
store i32 %251, i32* %256
br label %257
257: ; preds = %250, %235, %220
br label %258
258: ; preds = %257, %211
br label %307
259: ; preds = %208
%260 = load i32, i32* %20
%261 = icmp sle i32 %260, -1
br i1 %261, label %262, label %306
262: ; preds = %259
%263 = load float*, float** %14
%264 = load i32, i32* %30
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds float, float* %263, i64 %265
%267 = load float, float* %266
%268 = load float, float* %18
%269 = fmul float -1.000000e+00, %268
%270 = fcmp olt float %267, %269
br i1 %270, label %271, label %305
271: ; preds = %262
%272 = load float*, float** %14
%273 = load i32, i32* %30
%274 = sub nsw i32 %273, 1
%275 = sext i32 %274 to i64
%276 = getelementptr inbounds float, float* %272, i64 %275
%277 = load float, float* %276
%278 = load float*, float** %14
%279 = load i32, i32* %30
%280 = sext i32 %279 to i64
%281 = getelementptr inbounds float, float* %278, i64 %280
%282 = load float, float* %281
%283 = fcmp ogt float %277, %282
br i1 %283, label %284, label %304
284: ; preds = %271
%285 = load float*, float** %14
%286 = load i32, i32* %30
%287 = add nsw i32 %286, 1
%288 = sext i32 %287 to i64
%289 = getelementptr inbounds float, float* %285, i64 %288
%290 = load float, float* %289
%291 = load float*, float** %14
%292 = load i32, i32* %30
%293 = sext i32 %292 to i64
%294 = getelementptr inbounds float, float* %291, i64 %293
%295 = load float, float* %294
%296 = fcmp ogt float %290, %295
br i1 %296, label %297, label %304
297: ; preds = %284
%298 = load i32, i32* %30
%299 = load i32*, i32** %34
%300 = load i32, i32* %32
%301 = add nsw i32 %300, 1
store i32 %301, i32* %32
%302 = sext i32 %300 to i64
%303 = getelementptr inbounds i32, i32* %299, i64 %302
store i32 %298, i32* %303
br label %304
304: ; preds = %297, %284, %271
br label %305
305: ; preds = %304, %262
br label %306
306: ; preds = %305, %259
br label %307
307: ; preds = %306, %258
br label %308
308: ; preds = %307, %207
br label %309
309: ; preds = %308
%310 = load i32, i32* %30
%311 = add nsw i32 %310, 1
store i32 %311, i32* %30
br label %153
312: ; preds = %160
%313 = load i32, i32* %33
%314 = load i32, i32* %25
%315 = load i32, i32* %26
%316 = sdiv i32 %314, %315
%317 = add nsw i32 %313, %316
store i32 %317, i32* %33
%318 = load i32, i32* %32
%319 = load i32, i32* %33
%320 = icmp sgt i32 %318, %319
br i1 %320, label %321, label %327
321: ; preds = %312
%322 = load i32*, i32** %34
%323 = load i32*, i32** %23
%324 = load i32, i32* %33
%325 = load float*, float** %14
%326 = call i32 @pkpurge(i32* %322, i32* %323, i32* %32, i32* %24, i32 %324, float* %325)
br label %327
327: ; preds = %321, %312
%328 = load i32, i32* %32
%329 = load i32, i32* %33
%330 = sub nsw i32 %329, %328
store i32 %330, i32* %33
store i32 0, i32* %31
br label %331
331: ; preds = %356, %327
%332 = load i32, i32* %31
%333 = load i32, i32* %32
%334 = icmp slt i32 %332, %333
br i1 %334, label %335, label %341
335: ; preds = %331
%336 = load i32*, i32** %21
%337 = load i32, i32* %336
%338 = load i32, i32* %31
%339 = add nsw i32 %337, %338
%340 = icmp slt i32 %339, 511
br label %341
341: ; preds = %335, %331
%342 = phi i1 [ false, %331 ], [ %340, %335 ]
br i1 %342, label %343, label %359
343: ; preds = %341
%344 = load i32*, i32** %34
%345 = load i32, i32* %31
%346 = sext i32 %345 to i64
%347 = getelementptr inbounds i32, i32* %344, i64 %346
%348 = load i32, i32* %347
%349 = load i32*, i32** %22
%350 = load i32*, i32** %21
%351 = load i32, i32* %350
%352 = load i32, i32* %31
%353 = add nsw i32 %351, %352
%354 = sext i32 %353 to i64
%355 = getelementptr inbounds i32, i32* %349, i64 %354
store i32 %348, i32* %355
br label %356
356: ; preds = %343
%357 = load i32, i32* %31
%358 = add nsw i32 %357, 1
store i32 %358, i32* %31
br label %331
359: ; preds = %341
%360 = load i32, i32* %32
%361 = load i32*, i32** %21
%362 = load i32, i32* %361
%363 = add nsw i32 %362, %360
store i32 %363, i32* %361
store i32 0, i32* %32
br label %364
364: ; preds = %359
%365 = load i32, i32* %29
%366 = add nsw i32 %365, 1
store i32 %366, i32* %29
br label %66
367: ; preds = %66
%368 = load i32*, i32** %34
%369 = call i32 @free(i32* %368)
ret void
}

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