#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int abs(int);
int pl_p2li(int *pxsrc, int xs, short *lldst, int npix) {
  int ret_val, i__1, i__2, i__3;
  static int zero, v, x1, hi, ip, dv, xe, np, op, iz, nv, pv, nz;
  --lldst;
  --pxsrc;
  if (!(npix <= 0)) {
    goto L110;
  }
  ret_val = 0;
  goto L100;
L110:
  lldst[3] = -100;
  lldst[2] = 7;
  lldst[1] = 0;
  lldst[6] = 0;
  lldst[7] = 0;
  xe = xs + npix - 1;
  op = 8;
  zero = 0;
  i__1 = zero, i__2 = pxsrc[xs];
  pv = (((i__1) > (i__2)) ? (i__1) : (i__2));
  x1 = xs;
  iz = xs;
  hi = 1;
  i__1 = xe;
  for (ip = xs; ip <= i__1; ++ip) {
    if (!(ip < xe)) {
      goto L130;
    }
    i__2 = zero, i__3 = pxsrc[ip + 1];
    nv = (((i__2) > (i__3)) ? (i__2) : (i__3));
    if (!(nv == pv)) {
      goto L140;
    }
    goto L120;
  L140:
    if (!(pv == 0)) {
      goto L150;
    }
    pv = nv;
    x1 = ip + 1;
    goto L120;
  L150:
    goto L131;
  L130:
    if (!(pv == 0)) {
      goto L160;
    }
    x1 = xe + 1;
  L160:
  L131:
    np = ip - x1 + 1;
    nz = x1 - iz;
    if (!(pv > 0)) {
      goto L170;
    }
    dv = pv - hi;
    if (!(dv != 0)) {
      goto L180;
    }
    hi = pv;
    if (!(abs(dv) > 4095)) {
      goto L190;
    }
    lldst[op] = (short)((pv & 4095) + 4096);
    ++op;
    lldst[op] = (short)(pv / 4096);
    ++op;
    goto L191;
  L190:
    if (!(dv < 0)) {
      goto L200;
    }
    lldst[op] = (short)(-dv + 12288);
    goto L201;
  L200:
    lldst[op] = (short)(dv + 8192);
  L201:
    ++op;
    if (!(np == 1 && nz == 0)) {
      goto L210;
    }
    v = lldst[op - 1];
    lldst[op - 1] = (short)(v | 16384);
    goto L91;
  L210:
  L191:
  L180:
  L170:
    if (!(nz > 0)) {
      goto L220;
    }
  L230:
    if (!(nz > 0)) {
      goto L232;
    }
    lldst[op] = (short)(((4095) < (nz)) ? (4095) : (nz));
    ++op;
    nz += -4095;
    goto L230;
  L232:
    if (!(np == 1 && pv > 0)) {
      goto L240;
    }
    lldst[op - 1] = (short)(lldst[op - 1] + 20481);
    goto L91;
  L240:
  L220:
  L250:
    if (!(np > 0)) {
      goto L252;
    }
    lldst[op] = (short)((((4095) < (np)) ? (4095) : (np)) + 16384);
    ++op;
    np += -4095;
    goto L250;
  L252:
  L91:
    x1 = ip + 1;
    iz = x1;
    pv = nv;
  L120:;
  }
  lldst[4] = (short)((op - 1) % 32768);
  lldst[5] = (short)((op - 1) / 32768);
  ret_val = op - 1;
  goto L100;
L100:
  return ret_val;
}


x86 assembly (clang, -O0):
<pl_p2li>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    -0x18(%rbp),%rax
add    $0xfffffffffffffffe,%rax
mov    %rax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
add    $0xfffffffffffffffc,%rax
mov    %rax,-0x8(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    114d <pl_p2li+0x3d>
jmp    1159 <pl_p2li+0x49>
movl   $0x0,-0x20(%rbp)
jmp    16a0 <pl_p2li+0x590>
mov    -0x18(%rbp),%rax
movw   $0xff9c,0x6(%rax)
mov    -0x18(%rbp),%rax
movw   $0x7,0x4(%rax)
mov    -0x18(%rbp),%rax
movw   $0x0,0x2(%rax)
mov    -0x18(%rbp),%rax
movw   $0x0,0xc(%rax)
mov    -0x18(%rbp),%rax
movw   $0x0,0xe(%rax)
mov    -0xc(%rbp),%eax
add    -0x1c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,0x2eaa(%rip)
movl   $0x8,0x2ea8(%rip)
movl   $0x0,0x2e7e(%rip)
mov    0x2e78(%rip),%eax
mov    %eax,-0x24(%rbp)
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x28(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x28(%rbp),%eax
jle    11dc <pl_p2li+0xcc>
mov    -0x24(%rbp),%eax
mov    %eax,-0x30(%rbp)
jmp    11e2 <pl_p2li+0xd2>
mov    -0x28(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,0x2e6d(%rip)
mov    -0xc(%rbp),%eax
mov    %eax,0x2e40(%rip)
mov    -0xc(%rbp),%eax
mov    %eax,0x2e53(%rip)
movl   $0x1,0x2e31(%rip)
mov    0x2e37(%rip),%eax
mov    %eax,-0x24(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,0x2e23(%rip)
mov    0x2e1d(%rip),%eax
cmp    -0x24(%rbp),%eax
jg     165c <pl_p2li+0x54c>
mov    0x2e0e(%rip),%eax
cmp    0x2e10(%rip),%eax
jl     123f <pl_p2li+0x12f>
jmp    12d7 <pl_p2li+0x1c7>
mov    0x2de7(%rip),%eax
mov    %eax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    0x2dea(%rip),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jle    1275 <pl_p2li+0x165>
mov    -0x28(%rbp),%eax
mov    %eax,-0x34(%rbp)
jmp    127b <pl_p2li+0x16b>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,0x2dd0(%rip)
mov    0x2dca(%rip),%eax
cmp    0x2dc8(%rip),%eax
je     129b <pl_p2li+0x18b>
jmp    12a0 <pl_p2li+0x190>
jmp    1643 <pl_p2li+0x533>
cmpl   $0x0,0x2db1(%rip)
je     12b2 <pl_p2li+0x1a2>
jmp    12d2 <pl_p2li+0x1c2>
mov    0x2d9c(%rip),%eax
mov    %eax,0x2d9a(%rip)
mov    0x2d78(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2d67(%rip)
jmp    1643 <pl_p2li+0x533>
jmp    12fd <pl_p2li+0x1ed>
cmpl   $0x0,0x2d7a(%rip)
je     12e9 <pl_p2li+0x1d9>
jmp    12f8 <pl_p2li+0x1e8>
mov    0x2d55(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2d3c(%rip)
jmp    12fd <pl_p2li+0x1ed>
mov    0x2d39(%rip),%eax
sub    0x2d2b(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2d36(%rip)
mov    0x2d1c(%rip),%eax
sub    0x2d32(%rip),%eax
mov    %eax,0x2d38(%rip)
cmpl   $0x0,0x2d2d(%rip)
jg     1336 <pl_p2li+0x226>
jmp    14b7 <pl_p2li+0x3a7>
mov    0x2d1c(%rip),%eax
sub    0x2cf6(%rip),%eax
mov    %eax,0x2cf8(%rip)
cmpl   $0x0,0x2cf1(%rip)
jne    135a <pl_p2li+0x24a>
jmp    14b2 <pl_p2li+0x3a2>
mov    0x2cf8(%rip),%eax
mov    %eax,0x2cd2(%rip)
mov    0x2cd4(%rip),%edi
call   1030 <abs@plt>
cmp    $0xfff,%eax
jg     1381 <pl_p2li+0x271>
jmp    13e6 <pl_p2li+0x2d6>
mov    0x2cd1(%rip),%eax
and    $0xfff,%eax
add    $0x1000,%eax
mov    %ax,%dx
mov    -0x18(%rbp),%rax
movslq 0x2cad(%rip),%rcx
mov    %dx,(%rax,%rcx,2)
mov    0x2ca3(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2c9a(%rip)
mov    0x2ca0(%rip),%eax
mov    $0x1000,%ecx
cltd
idiv   %ecx
mov    %ax,%dx
mov    -0x18(%rbp),%rax
movslq 0x2c7e(%rip),%rcx
mov    %dx,(%rax,%rcx,2)
mov    0x2c74(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2c6b(%rip)
jmp    14ad <pl_p2li+0x39d>
cmpl   $0x0,0x2c53(%rip)
jl     13f8 <pl_p2li+0x2e8>
jmp    141c <pl_p2li+0x30c>
xor    %eax,%eax
sub    0x2c40(%rip),%eax
add    $0x3000,%eax
mov    %ax,%dx
mov    -0x18(%rbp),%rax
movslq 0x2c39(%rip),%rcx
mov    %dx,(%rax,%rcx,2)
jmp    1439 <pl_p2li+0x329>
mov    0x2c1e(%rip),%eax
add    $0x2000,%eax
mov    %ax,%dx
mov    -0x18(%rbp),%rax
movslq 0x2c17(%rip),%rcx
mov    %dx,(%rax,%rcx,2)
mov    0x2c0d(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2c04(%rip)
cmpl   $0x1,0x2bf9(%rip)
jne    1462 <pl_p2li+0x352>
cmpl   $0x0,0x2c00(%rip)
je     1467 <pl_p2li+0x357>
jmp    14a8 <pl_p2li+0x398>
mov    -0x18(%rbp),%rax
mov    0x2bdb(%rip),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
mov    %eax,0x2baf(%rip)
mov    0x2ba9(%rip),%eax
or     $0x4000,%eax
mov    %ax,%dx
mov    -0x18(%rbp),%rax
mov    0x2bb3(%rip),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
jmp    161c <pl_p2li+0x50c>
jmp    14ad <pl_p2li+0x39d>
jmp    14b2 <pl_p2li+0x3a2>
jmp    14b7 <pl_p2li+0x3a7>
cmpl   $0x0,0x2b9e(%rip)
jg     14c9 <pl_p2li+0x3b9>
jmp    159a <pl_p2li+0x48a>
jmp    14ce <pl_p2li+0x3be>
cmpl   $0x0,0x2b87(%rip)
jg     14e0 <pl_p2li+0x3d0>
jmp    1541 <pl_p2li+0x431>
mov    $0xfff,%eax
cmp    0x2b71(%rip),%eax
jge    14fe <pl_p2li+0x3ee>
mov    $0xfff,%eax
mov    %eax,-0x38(%rbp)
jmp    1507 <pl_p2li+0x3f7>
mov    0x2b58(%rip),%eax
mov    %eax,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    %ax,%dx
mov    -0x18(%rbp),%rax
movslq 0x2b34(%rip),%rcx
mov    %dx,(%rax,%rcx,2)
mov    0x2b2a(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2b21(%rip)
mov    0x2b2b(%rip),%eax
add    $0xfffff001,%eax
mov    %eax,0x2b20(%rip)
jmp    14ce <pl_p2li+0x3be>
cmpl   $0x1,0x2b00(%rip)
jne    155b <pl_p2li+0x44b>
cmpl   $0x0,0x2b03(%rip)
jg     1560 <pl_p2li+0x450>
jmp    1595 <pl_p2li+0x485>
mov    -0x18(%rbp),%rax
mov    0x2ae2(%rip),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movswl (%rax,%rcx,2),%eax
add    $0x5001,%eax
mov    %ax,%dx
mov    -0x18(%rbp),%rax
mov    0x2ac6(%rip),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
jmp    161c <pl_p2li+0x50c>
jmp    159a <pl_p2li+0x48a>
jmp    159f <pl_p2li+0x48f>
cmpl   $0x0,0x2aa2(%rip)
jg     15b1 <pl_p2li+0x4a1>
jmp    1617 <pl_p2li+0x507>
mov    $0xfff,%eax
cmp    0x2a8c(%rip),%eax
jge    15cf <pl_p2li+0x4bf>
mov    $0xfff,%eax
mov    %eax,-0x3c(%rbp)
jmp    15d8 <pl_p2li+0x4c8>
mov    0x2a73(%rip),%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x4000,%eax
mov    %ax,%dx
mov    -0x18(%rbp),%rax
movslq 0x2a5e(%rip),%rcx
mov    %dx,(%rax,%rcx,2)
mov    0x2a54(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2a4b(%rip)
mov    0x2a41(%rip),%eax
add    $0xfffff001,%eax
mov    %eax,0x2a36(%rip)
jmp    159f <pl_p2li+0x48f>
jmp    161c <pl_p2li+0x50c>
mov    0x2a1a(%rip),%eax
add    $0x1,%eax
mov    %eax,0x2a09(%rip)
mov    0x2a03(%rip),%eax
mov    %eax,0x2a19(%rip)
mov    0x2a17(%rip),%eax
mov    %eax,0x2a15(%rip)
jmp    1648 <pl_p2li+0x538>
mov    0x29ee(%rip),%eax
add    $0x1,%eax
mov    %eax,0x29e5(%rip)
jmp    1219 <pl_p2li+0x109>
mov    0x29ea(%rip),%eax
sub    $0x1,%eax
mov    $0x8000,%ecx
cltd
idiv   %ecx
mov    %dx,%cx
mov    -0x18(%rbp),%rax
mov    %cx,0x8(%rax)
mov    0x29ce(%rip),%eax
sub    $0x1,%eax
mov    $0x8000,%ecx
cltd
idiv   %ecx
mov    %ax,%cx
mov    -0x18(%rbp),%rax
mov    %cx,0xa(%rax)
mov    0x29b2(%rip),%eax
sub    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<pl_p2li>:
test   %ecx,%ecx
jle    17a2 <pl_p2li+0x6a2>
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
movw   $0xff9c,0x4(%rdx)
movl   $0x70000,(%rdx)
movl   $0x0,0xa(%rdx)
mov    %ecx,%eax
add    %esi,%ecx
movslq %esi,%r8
mov    -0x4(%rdi,%r8,4),%ebp
xor    %r15d,%r15d
test   %ebp,%ebp
cmovs  %r15d,%ebp
lea    -0x1(%rax,%rsi,1),%eax
mov    0x2edf(%rip),%r12d
cltq
mov    %rax,-0x8(%rsp)
movslq %ecx,%rax
mov    %rax,-0x10(%rsp)
lea    0xe(%rdx),%rax
mov    %rax,-0x18(%rsp)
mov    $0x8,%r11d
mov    $0x1,%r9d
mov    $0xfff,%r13d
movdqa 0xe88(%rip),%xmm8
movdqa 0xe8f(%rip),%xmm9
movdqa 0xe96(%rip),%xmm13
movdqa 0xe9e(%rip),%xmm3
movdqa 0xea6(%rip),%xmm2
movdqa 0xead(%rip),%xmm11
movdqa 0xeb4(%rip),%xmm12
movdqa 0xebb(%rip),%xmm10
mov    %esi,%eax
mov    %ecx,-0x24(%rsp)
mov    %rdi,-0x20(%rsp)
jmp    11ea <pl_p2li+0xea>
movslq %ebx,%rax
addw   $0x5001,-0x2(%rdx,%rax,2)
add    $0x1,%r8
mov    %r8,%rbx
mov    %r8d,%eax
mov    %r8d,%esi
mov    %rbx,%r8
mov    %r12d,%ebp
cmp    -0x10(%rsp),%rbx
jge    176c <pl_p2li+0x66c>
cmp    -0x8(%rsp),%r8
jge    1220 <pl_p2li+0x120>
lea    0x1(%r8),%rbx
mov    (%rdi,%r8,4),%r12d
test   %r12d,%r12d
cmovs  %r15d,%r12d
mov    %r12d,0x2e1d(%rip)
cmp    %ebp,%r12d
jne    1240 <pl_p2li+0x140>
mov    %ebp,%r12d
jmp    11d9 <pl_p2li+0xd9>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
test   %ebp,%ebp
jne    1248 <pl_p2li+0x148>
mov    %r8d,%r14d
sub    %ecx,%r14d
mov    %ecx,%esi
sub    %eax,%esi
xor    %r10d,%r10d
test   %esi,%esi
jg     12a7 <pl_p2li+0x1a7>
jmp    1530 <pl_p2li+0x430>
nopw   0x0(%rax,%rax,1)
test   %ebp,%ebp
je     14da <pl_p2li+0x3da>
mov    %r8d,%r14d
sub    %esi,%r14d
sub    %eax,%esi
test   %ebp,%ebp
jle    129c <pl_p2li+0x19c>
mov    %ebp,%eax
mov    $0x1,%r10b
sub    %r9d,%eax
je     129f <pl_p2li+0x19f>
mov    %eax,%ebx
neg    %ebx
cmovs  %eax,%ebx
movslq %r11d,%r9
cmp    $0x1000,%ebx
jb     14e3 <pl_p2li+0x3e3>
mov    %ebp,%eax
and    $0xfff,%eax
or     $0x1000,%eax
mov    %ax,-0x2(%rdx,%r9,2)
mov    %ebp,%eax
shr    $0xc,%eax
mov    %ax,(%rdx,%r9,2)
add    $0x2,%r9d
mov    %r9d,%r11d
jmp    151c <pl_p2li+0x41c>
xor    %r10d,%r10d
test   %esi,%esi
jle    1530 <pl_p2li+0x430>
mov    %r9d,-0x28(%rsp)
movslq %r11d,%r11
mov    %esi,%r9d
sub    $0xfff,%r9d
cmovb  %r15d,%r9d
add    $0xffe,%r9d
cmp    $0x6ff9,%r9d
jb     1484 <pl_p2li+0x384>
imul   $0x100101,%r9,%rax
shr    $0x20,%rax
sub    %eax,%r9d
shr    %r9d
add    %eax,%r9d
shr    $0xb,%r9d
add    $0x1,%r9d
mov    %r9d,%r15d
and    $0xfffffff8,%r15d
movd   %esi,%xmm0
pshufd $0x0,%xmm0,%xmm0
movdqa %xmm0,%xmm7
paddd  %xmm8,%xmm7
paddd  %xmm9,%xmm0
lea    -0x8(%r15),%rax
mov    %rax,%rcx
shr    $0x3,%rcx
add    $0x1,%rcx
test   %rax,%rax
je     1708 <pl_p2li+0x608>
mov    %rcx,%rbx
movabs $0x3ffffffffffffffe,%rax
ff ff 3f
and    %rax,%rbx
mov    -0x18(%rsp),%rax
lea    (%rax,%r11,2),%rbp
xor    %edi,%edi
xchg   %ax,%ax
movdqa %xmm0,%xmm1
pxor   %xmm3,%xmm1
movdqa %xmm2,%xmm4
pcmpgtd %xmm1,%xmm4
movdqa %xmm0,%xmm1
pand   %xmm4,%xmm1
pandn  %xmm13,%xmm4
por    %xmm1,%xmm4
movdqa %xmm7,%xmm1
pxor   %xmm3,%xmm1
movdqa %xmm2,%xmm5
pcmpgtd %xmm1,%xmm5
movdqa %xmm7,%xmm1
pand   %xmm5,%xmm1
pandn  %xmm13,%xmm5
por    %xmm1,%xmm5
packssdw %xmm5,%xmm4
movdqu %xmm4,-0x10(%rbp,%rdi,2)
movdqa %xmm7,%xmm1
paddd  %xmm11,%xmm1
movdqa %xmm0,%xmm4
paddd  %xmm11,%xmm4
movdqa %xmm4,%xmm5
pxor   %xmm3,%xmm5
movdqa %xmm2,%xmm6
pcmpgtd %xmm5,%xmm6
pand   %xmm6,%xmm4
pandn  %xmm13,%xmm6
por    %xmm4,%xmm6
movdqa %xmm1,%xmm4
pxor   %xmm3,%xmm4
movdqa %xmm2,%xmm5
pcmpgtd %xmm4,%xmm5
pand   %xmm5,%xmm1
pandn  %xmm13,%xmm5
por    %xmm1,%xmm5
packssdw %xmm5,%xmm6
movdqu %xmm6,0x0(%rbp,%rdi,2)
add    $0x10,%rdi
paddd  %xmm12,%xmm0
paddd  %xmm12,%xmm7
add    $0xfffffffffffffffe,%rbx
jne    1340 <pl_p2li+0x240>
test   $0x1,%cl
je     1446 <pl_p2li+0x346>
add    %r11,%rdi
movdqa %xmm0,%xmm1
pxor   %xmm3,%xmm1
movdqa %xmm2,%xmm4
pcmpgtd %xmm1,%xmm4
pand   %xmm4,%xmm0
pandn  %xmm13,%xmm4
por    %xmm0,%xmm4
movdqa %xmm7,%xmm0
pxor   %xmm3,%xmm0
movdqa %xmm2,%xmm1
pcmpgtd %xmm0,%xmm1
pand   %xmm1,%xmm7
pandn  %xmm13,%xmm1
por    %xmm7,%xmm1
packssdw %xmm1,%xmm4
movdqu %xmm4,-0x2(%rdx,%rdi,2)
mov    %r11,%rax
add    %r15,%r11
cmp    %r9,%r15
jne    146c <pl_p2li+0x36c>
lea    (%r15,%rax,1),%rbx
add    $0xffffffffffffffff,%rbx
mov    -0x24(%rsp),%ecx
mov    -0x20(%rsp),%rdi
xor    %r15d,%r15d
mov    -0x28(%rsp),%r9d
jmp    14c5 <pl_p2li+0x3c5>
mov    %r15d,%eax
shl    $0xc,%eax
sub    %eax,%r15d
add    %r15d,%esi
mov    -0x24(%rsp),%ecx
mov    -0x20(%rsp),%rdi
xor    %r15d,%r15d
mov    -0x28(%rsp),%r9d
add    $0xffffffffffffffff,%r11
mov    %r11,%rbx
mov    %esi,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
sub    $0xfff,%ebp
cmovae %r13d,%esi
mov    %si,(%rdx,%rbx,2)
add    $0x1,%rbx
lea    0xfff(%rbp),%eax
mov    %ebp,%esi
cmp    $0xfff,%eax
ja     14a0 <pl_p2li+0x3a0>
lea    0x1(%rbx),%r11
test   %r14d,%r14d
setne  %al
xor    $0x1,%r10b
or     %al,%r10b
je     11c2 <pl_p2li+0xc2>
jmp    1530 <pl_p2li+0x430>
lea    0x1(%r8),%esi
jmp    11d9 <pl_p2li+0xd9>
lea    0x2000(%rax),%r11d
mov    $0x3000,%ebx
sub    %eax,%ebx
test   %eax,%eax
cmovns %r11d,%ebx
mov    %bx,-0x2(%rdx,%r9,2)
lea    0x1(%r9),%r11d
mov    %r14d,%eax
or     %esi,%eax
jne    151c <pl_p2li+0x41c>
or     $0x4000,%ebx
mov    %bx,-0x2(%rdx,%r9,2)
mov    %ebp,%r9d
jmp    11cc <pl_p2li+0xcc>
mov    %ebp,%r9d
test   %esi,%esi
jg     12a7 <pl_p2li+0x1a7>
nopw   0x0(%rax,%rax,1)
test   %r14d,%r14d
js     11cc <pl_p2li+0xcc>
lea    0x1(%r14),%esi
cmp    $0xfff,%esi
mov    $0xfff,%eax
cmovl  %esi,%eax
movslq %r11d,%r11
sub    %eax,%r14d
add    $0xfff,%r14d
cmp    $0x6ff9,%r14d
jb     1729 <pl_p2li+0x629>
mov    %r9d,-0x28(%rsp)
imul   $0x100101,%r14,%rax
shr    $0x20,%rax
sub    %eax,%r14d
shr    %r14d
add    %eax,%r14d
shr    $0xb,%r14d
add    $0x1,%r14d
mov    %r14d,%r9d
and    $0xfffffff8,%r9d
movd   %esi,%xmm0
pshufd $0x0,%xmm0,%xmm0
movdqa %xmm0,%xmm1
paddd  %xmm8,%xmm1
paddd  %xmm9,%xmm0
lea    -0x8(%r9),%rax
mov    %rax,%r10
shr    $0x3,%r10
add    $0x1,%r10
test   %rax,%rax
je     175e <pl_p2li+0x65e>
mov    %r10,%rax
movabs $0x3ffffffffffffffe,%rbx
ff ff 3f
and    %rbx,%rax
mov    -0x18(%rsp),%rbx
lea    (%rbx,%r11,2),%rbp
xor    %ebx,%ebx
nopw   0x0(%rax,%rax,1)
movdqa %xmm0,%xmm4
pxor   %xmm3,%xmm4
movdqa %xmm2,%xmm5
pcmpgtd %xmm4,%xmm5
movdqa %xmm0,%xmm4
pand   %xmm5,%xmm4
pandn  %xmm13,%xmm5
por    %xmm4,%xmm5
movdqa %xmm1,%xmm4
pxor   %xmm3,%xmm4
movdqa %xmm2,%xmm6
pcmpgtd %xmm4,%xmm6
movdqa %xmm1,%xmm4
pand   %xmm6,%xmm4
pandn  %xmm13,%xmm6
por    %xmm4,%xmm6
packssdw %xmm6,%xmm5
por    %xmm10,%xmm5
movdqu %xmm5,-0x10(%rbp,%rbx,2)
movdqa %xmm1,%xmm4
paddd  %xmm11,%xmm4
movdqa %xmm0,%xmm5
paddd  %xmm11,%xmm5
movdqa %xmm5,%xmm6
pxor   %xmm3,%xmm6
movdqa %xmm2,%xmm7
pcmpgtd %xmm6,%xmm7
pand   %xmm7,%xmm5
pandn  %xmm13,%xmm7
por    %xmm5,%xmm7
movdqa %xmm4,%xmm5
pxor   %xmm3,%xmm5
movdqa %xmm2,%xmm6
pcmpgtd %xmm5,%xmm6
pand   %xmm6,%xmm4
pandn  %xmm13,%xmm6
por    %xmm4,%xmm6
packssdw %xmm6,%xmm7
por    %xmm10,%xmm7
movdqu %xmm7,0x0(%rbp,%rbx,2)
add    $0x10,%rbx
paddd  %xmm12,%xmm0
paddd  %xmm12,%xmm1
add    $0xfffffffffffffffe,%rax
jne    15e0 <pl_p2li+0x4e0>
test   $0x1,%r10b
je     16f6 <pl_p2li+0x5f6>
add    %r11,%rbx
movdqa %xmm0,%xmm4
pxor   %xmm3,%xmm4
movdqa %xmm2,%xmm5
pcmpgtd %xmm4,%xmm5
pand   %xmm5,%xmm0
pandn  %xmm13,%xmm5
por    %xmm0,%xmm5
movdqa %xmm1,%xmm0
pxor   %xmm3,%xmm0
movdqa %xmm2,%xmm4
pcmpgtd %xmm0,%xmm4
pand   %xmm4,%xmm1
pandn  %xmm13,%xmm4
por    %xmm1,%xmm4
packssdw %xmm4,%xmm5
por    %xmm10,%xmm5
movdqu %xmm5,-0x2(%rdx,%rbx,2)
add    %r9,%r11
cmp    %r14,%r9
jne    1718 <pl_p2li+0x618>
mov    -0x28(%rsp),%r9d
jmp    11cc <pl_p2li+0xcc>
xor    %edi,%edi
test   $0x1,%cl
jne    13ff <pl_p2li+0x2ff>
jmp    1446 <pl_p2li+0x346>
mov    %r9d,%eax
shl    $0xc,%eax
sub    %eax,%r9d
add    %r9d,%esi
mov    -0x28(%rsp),%r9d
mov    %esi,%ebp
nopl   0x0(%rax,%rax,1)
sub    $0xfff,%ebp
cmovae %r13d,%esi
or     $0x4000,%esi
mov    %si,-0x2(%rdx,%r11,2)
add    $0x1,%r11
lea    0xfff(%rbp),%eax
mov    %ebp,%esi
cmp    $0xfff,%eax
jg     1730 <pl_p2li+0x630>
jmp    11cc <pl_p2li+0xcc>
xor    %ebx,%ebx
test   $0x1,%r10b
jne    16aa <pl_p2li+0x5aa>
jmp    16f6 <pl_p2li+0x5f6>
lea    -0x1(%r11),%eax
lea    0x7ffe(%r11),%ecx
test   %eax,%eax
cmovns %eax,%ecx
mov    %ecx,%esi
and    $0xffff8000,%esi
neg    %esi
add    %r11d,%esi
add    $0xffffffff,%esi
mov    %si,0x6(%rdx)
sar    $0xf,%ecx
mov    %cx,0x8(%rdx)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %eax,%eax
ret

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

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