long parallelize_left_justifiedstl96(bit_stm, par_buf, bs_len, resol, sync)
short *bit_stm, *par_buf;
long bs_len, resol;
char sync;
{
  unsigned short tmp, *bs;
  long n, j, k;
  n = (bs_len - (sync == 1 ? 2 : 0)) / resol;
  bs = (unsigned short *)bit_stm;
  if (n * resol + (sync == 1 ? 2 : 0) != bs_len) {
    memset(par_buf, -1, n * sizeof(short));
    return (-1);
  } else {
    memset(par_buf, 0, n * sizeof(short));
  }
  for (j = 0; j < n; j++) {
    if (*bs == 0x6B20)
      return (0l);
    if (*bs == 0x6B21) {
      bs++;
      if (*bs++ != (bs_len - 2))
        return (-bs_len);
    }
    tmp = (unsigned)(*bs++ == 0x0081) ? 1 : 0;
    for (k = 1; k < resol; k++) {
      tmp += (unsigned)(((*bs++) == 0x0081 ? 1 : 0) << k);
    }
    if (*(bs - 1) == 0x0081)
      for (; k < 16; k++)
        tmp += (1 << k);
    par_buf[j] = (short)tmp;
  }
  if ((resol = 16 - resol) != 0)
    for (j = 0; j < n; j++) {
      k = (long)par_buf[j] << resol;
      par_buf[j] = (k > 32767) ? 32767 : (k < -32768 ? (-32768) : (short)k);
    }
  return ((long)n);
}


x86 assembly (clang, -O0):
<parallelize_left_justifiedstl96>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %r8b,%al
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %al,-0x29(%rbp)
mov    -0x20(%rbp),%rax
movsbl -0x29(%rbp),%esi
xor    %ecx,%ecx
mov    $0x2,%edx
cmp    $0x1,%esi
cmove  %edx,%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
cqto
idivq  -0x28(%rbp)
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x40(%rbp),%rax
imul   -0x28(%rbp),%rax
movsbl -0x29(%rbp),%esi
xor    %ecx,%ecx
mov    $0x2,%edx
cmp    $0x1,%esi
cmove  %edx,%ecx
movslq %ecx,%rcx
add    %rcx,%rax
cmp    -0x20(%rbp),%rax
je     11a8 <parallelize_left_justifiedstl96+0x98>
mov    -0x18(%rbp),%rdi
mov    -0x40(%rbp),%rdx
shl    $0x1,%rdx
mov    $0xff,%esi
call   1030 <memset@plt>
movq   $0xffffffffffffffff,-0x8(%rbp)
ff
jmp    13f2 <parallelize_left_justifiedstl96+0x2e2>
mov    -0x18(%rbp),%rdi
mov    -0x40(%rbp),%rdx
shl    $0x1,%rdx
xor    %esi,%esi
call   1030 <memset@plt>
movq   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x40(%rbp),%rax
jge    1339 <parallelize_left_justifiedstl96+0x229>
mov    -0x38(%rbp),%rax
movzwl (%rax),%eax
cmp    $0x6b20,%eax
jne    11f0 <parallelize_left_justifiedstl96+0xe0>
movq   $0x0,-0x8(%rbp)
jmp    13f2 <parallelize_left_justifiedstl96+0x2e2>
mov    -0x38(%rbp),%rax
movzwl (%rax),%eax
cmp    $0x6b21,%eax
jne    1245 <parallelize_left_justifiedstl96+0x135>
mov    -0x38(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x2,%rcx
mov    %rcx,-0x38(%rbp)
movzwl (%rax),%eax
mov    -0x20(%rbp),%rcx
sub    $0x2,%rcx
cmp    %rcx,%rax
je     1240 <parallelize_left_justifiedstl96+0x130>
xor    %eax,%eax
sub    -0x20(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    13f2 <parallelize_left_justifiedstl96+0x2e2>
jmp    1245 <parallelize_left_justifiedstl96+0x135>
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x2,%rcx
mov    %rcx,-0x38(%rbp)
movzwl (%rax),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x81,%edx
cmove  %ecx,%eax
mov    %ax,-0x2c(%rbp)
movq   $0x1,-0x50(%rbp)
mov    -0x50(%rbp),%rax
cmp    -0x28(%rbp),%rax
jge    12c6 <parallelize_left_justifiedstl96+0x1b6>
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x2,%rcx
mov    %rcx,-0x38(%rbp)
movzwl (%rax),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x81,%edx
cmove  %ecx,%eax
mov    -0x50(%rbp),%rcx
shl    %cl,%eax
mov    %eax,%ecx
movzwl -0x2c(%rbp),%eax
add    %ecx,%eax
mov    %ax,-0x2c(%rbp)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    1273 <parallelize_left_justifiedstl96+0x163>
mov    -0x38(%rbp),%rax
movzwl -0x2(%rax),%eax
cmp    $0x81,%eax
jne    1318 <parallelize_left_justifiedstl96+0x208>
jmp    12de <parallelize_left_justifiedstl96+0x1ce>
cmpq   $0x10,-0x50(%rbp)
jge    1313 <parallelize_left_justifiedstl96+0x203>
mov    -0x50(%rbp),%rax
mov    %eax,%ecx
mov    $0x1,%eax
shl    %cl,%eax
mov    %eax,%ecx
movzwl -0x2c(%rbp),%eax
add    %ecx,%eax
mov    %ax,-0x2c(%rbp)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    12de <parallelize_left_justifiedstl96+0x1ce>
jmp    1318 <parallelize_left_justifiedstl96+0x208>
mov    -0x2c(%rbp),%dx
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    11c3 <parallelize_left_justifiedstl96+0xb3>
mov    $0x10,%eax
sub    -0x28(%rbp),%rax
mov    %rax,-0x28(%rbp)
cmp    $0x0,%rax
je     13ea <parallelize_left_justifiedstl96+0x2da>
movq   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x40(%rbp),%rax
jge    13e5 <parallelize_left_justifiedstl96+0x2d5>
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
movswq (%rax,%rcx,2),%rax
mov    -0x28(%rbp),%rcx
shl    %cl,%rax
mov    %rax,-0x50(%rbp)
cmpq   $0x7fff,-0x50(%rbp)
jle    1399 <parallelize_left_justifiedstl96+0x289>
mov    $0x7fff,%eax
mov    %eax,-0x54(%rbp)
jmp    13c2 <parallelize_left_justifiedstl96+0x2b2>
cmpq   $0xffffffffffff8000,-0x50(%rbp)
ff
jge    13b4 <parallelize_left_justifiedstl96+0x2a4>
mov    $0xffff8000,%eax
mov    %eax,-0x58(%rbp)
jmp    13bc <parallelize_left_justifiedstl96+0x2ac>
mov    -0x50(%rbp),%rax
cwtl
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    %ax,%dx
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    1358 <parallelize_left_justifiedstl96+0x248>
jmp    13ea <parallelize_left_justifiedstl96+0x2da>
mov    -0x40(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<parallelize_left_justifiedstl96>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %rcx,%rbx
mov    %rdx,%rbp
mov    %rsi,%r15
mov    %rdi,%r12
xor    %ecx,%ecx
cmp    $0x1,%r8b
sete   %cl
add    %rcx,%rcx
mov    %rdx,%rax
sub    %rcx,%rax
mov    %rax,%rdx
or     %rbx,%rdx
shr    $0x20,%rdx
je     1152 <parallelize_left_justifiedstl96+0x42>
cqto
idiv   %rbx
mov    %rax,%r14
jmp    1159 <parallelize_left_justifiedstl96+0x49>
xor    %edx,%edx
div    %ebx
mov    %eax,%r14d
mov    %r14,%rax
imul   %rbx,%rax
add    %rcx,%rax
lea    (%r14,%r14,1),%rdx
cmp    %rbp,%rax
jne    1640 <parallelize_left_justifiedstl96+0x530>
mov    %rbp,0x8(%rsp)
mov    %r15,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
test   %r14,%r14
jle    1654 <parallelize_left_justifiedstl96+0x544>
mov    0x8(%rsp),%rax
add    $0xfffffffffffffffe,%rax
mov    %rax,0x40(%rsp)
lea    -0x1(%rbx),%rax
lea    -0x9(%rbx),%rcx
mov    %rcx,0x38(%rsp)
shr    $0x3,%rcx
add    $0x1,%rcx
cmp    $0x2,%rbx
mov    $0x1,%r10d
cmovge %rbx,%r10
mov    %r10d,%r9d
neg    %r9d
mov    %rax,0x10(%rsp)
and    $0xfffffffffffffff8,%rax
mov    %rax,0x28(%rsp)
add    $0x1,%rax
mov    %rax,0x20(%rsp)
mov    %rcx,%rax
mov    %rcx,0x30(%rsp)
and    $0xfffffffffffffffe,%rcx
mov    %rcx,0x18(%rsp)
and    $0x7,%r9d
add    $0xfffffffffffffff7,%r10
xor    %r11d,%r11d
movdqa 0xe05(%rip),%xmm8
movdqa 0xe0c(%rip),%xmm9
movdqa 0xe13(%rip),%xmm12
movdqa 0xe1a(%rip),%xmm13
movdqa 0xe21(%rip),%xmm14
movdqa 0xe28(%rip),%xmm10
movdqa 0xe2f(%rip),%xmm11
jmp    1252 <parallelize_left_justifiedstl96+0x142>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r8w,(%r15,%r11,2)
add    $0x1,%r11
cmp    %r14,%r11
je     1666 <parallelize_left_justifiedstl96+0x556>
movzwl (%r12),%ecx
cmp    $0x6b21,%ecx
je     1270 <parallelize_left_justifiedstl96+0x160>
movzwl %cx,%eax
cmp    $0x6b20,%eax
jne    128a <parallelize_left_justifiedstl96+0x17a>
jmp    1681 <parallelize_left_justifiedstl96+0x571>
xchg   %ax,%ax
movzwl 0x2(%r12),%eax
cmp    %rax,0x40(%rsp)
jne    1686 <parallelize_left_justifiedstl96+0x576>
add    $0x4,%r12
movzwl (%r12),%ecx
movzwl %cx,%eax
xor    %r8d,%r8d
cmp    $0x81,%eax
sete   %r8b
lea    0x2(%r12),%r13
mov    $0x1,%eax
cmp    $0x2,%rbx
jl     12e0 <parallelize_left_justifiedstl96+0x1d0>
mov    $0x1,%ecx
cmpq   $0x8,0x10(%rsp)
jb     1550 <parallelize_left_justifiedstl96+0x440>
movzwl %r8w,%eax
movd   %eax,%xmm7
cmpq   $0x8,0x38(%rsp)
jae    12e8 <parallelize_left_justifiedstl96+0x1d8>
xor    %eax,%eax
movdqa %xmm9,%xmm3
movdqa %xmm8,%xmm0
jmp    1466 <parallelize_left_justifiedstl96+0x356>
nopl   0x0(%rax,%rax,1)
mov    %r13,%r12
jmp    157e <parallelize_left_justifiedstl96+0x46e>
mov    0x18(%rsp),%rcx
xor    %eax,%eax
movdqa %xmm9,%xmm3
movdqa %xmm8,%xmm0
nopl   0x0(%rax)
movdqu 0x2(%r12,%rax,2),%xmm5
movdqu 0x12(%r12,%rax,2),%xmm6
pcmpeqw %xmm12,%xmm5
movdqa %xmm5,%xmm2
punpckhwd %xmm2,%xmm2
pand   %xmm13,%xmm2
punpcklwd %xmm5,%xmm5
pand   %xmm13,%xmm5
movdqa %xmm3,%xmm1
pslld  $0x17,%xmm1
paddd  %xmm14,%xmm1
cvttps2dq %xmm1,%xmm1
pshufd $0xf5,%xmm5,%xmm4
pmuludq %xmm1,%xmm5
pshufd $0xe8,%xmm5,%xmm5
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm4,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm5
movdqa %xmm0,%xmm1
pslld  $0x17,%xmm1
paddd  %xmm14,%xmm1
cvttps2dq %xmm1,%xmm1
pshufd $0xf5,%xmm2,%xmm4
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm4,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm2
pslld  $0x10,%xmm2
psrad  $0x10,%xmm2
pslld  $0x10,%xmm5
psrad  $0x10,%xmm5
packssdw %xmm2,%xmm5
paddw  %xmm7,%xmm5
movdqa %xmm3,%xmm7
paddd  %xmm10,%xmm7
movdqa %xmm0,%xmm1
paddd  %xmm10,%xmm1
pcmpeqw %xmm12,%xmm6
movdqa %xmm6,%xmm2
punpcklwd %xmm2,%xmm2
pand   %xmm13,%xmm2
punpckhwd %xmm6,%xmm6
pand   %xmm13,%xmm6
pslld  $0x17,%xmm1
paddd  %xmm14,%xmm1
cvttps2dq %xmm1,%xmm1
pshufd $0xf5,%xmm6,%xmm4
pmuludq %xmm1,%xmm6
pshufd $0xe8,%xmm6,%xmm6
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm4,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm6
pslld  $0x17,%xmm7
paddd  %xmm14,%xmm7
cvttps2dq %xmm7,%xmm1
pshufd $0xf5,%xmm2,%xmm4
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm7
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm4,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm7
pslld  $0x10,%xmm7
psrad  $0x10,%xmm7
pslld  $0x10,%xmm6
psrad  $0x10,%xmm6
packssdw %xmm6,%xmm7
paddw  %xmm5,%xmm7
add    $0x10,%rax
paddd  %xmm11,%xmm3
paddd  %xmm11,%xmm0
add    $0xfffffffffffffffe,%rcx
jne    1300 <parallelize_left_justifiedstl96+0x1f0>
testb  $0x1,0x30(%rsp)
je     150b <parallelize_left_justifiedstl96+0x3fb>
movdqu 0x0(%r13,%rax,2),%xmm1
pcmpeqw %xmm12,%xmm1
movdqa %xmm1,%xmm2
punpckhwd %xmm2,%xmm2
pand   %xmm13,%xmm2
punpcklwd %xmm1,%xmm1
pand   %xmm13,%xmm1
pslld  $0x17,%xmm3
paddd  %xmm14,%xmm3
cvttps2dq %xmm3,%xmm3
pshufd $0xf5,%xmm1,%xmm4
pmuludq %xmm3,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm4,%xmm3
pshufd $0xe8,%xmm3,%xmm3
punpckldq %xmm3,%xmm1
pslld  $0x17,%xmm0
paddd  %xmm14,%xmm0
cvttps2dq %xmm0,%xmm0
pshufd $0xf5,%xmm2,%xmm3
pmuludq %xmm0,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pshufd $0xf5,%xmm0,%xmm0
pmuludq %xmm3,%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm2
pslld  $0x10,%xmm2
psrad  $0x10,%xmm2
pslld  $0x10,%xmm1
psrad  $0x10,%xmm1
packssdw %xmm2,%xmm1
paddw  %xmm1,%xmm7
pshufd $0xee,%xmm7,%xmm0
paddw  %xmm7,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddw  %xmm0,%xmm1
movdqa %xmm1,%xmm0
psrld  $0x10,%xmm0
paddw  %xmm1,%xmm0
movd   %xmm0,%r8d
mov    0x28(%rsp),%rax
cmp    %rax,0x10(%rsp)
je     1571 <parallelize_left_justifiedstl96+0x461>
lea    0x0(%r13,%rax,2),%r13
mov    0x20(%rsp),%rcx
cs nopw 0x0(%rax,%rax,1)
nop
movzwl 0x0(%r13),%eax
xor    %edx,%edx
cmp    $0x81,%eax
sete   %dl
shl    %cl,%edx
add    %edx,%r8d
add    $0x1,%rcx
add    $0x2,%r13
cmp    %rcx,%rbx
jne    1550 <parallelize_left_justifiedstl96+0x440>
movzwl -0x2(%r12,%rbx,2),%ecx
lea    (%r12,%rbx,2),%r12
mov    %rbx,%rax
movzwl %cx,%ecx
cmp    $0x81,%ecx
jne    1240 <parallelize_left_justifiedstl96+0x130>
cmp    $0xf,%rax
ja     1240 <parallelize_left_justifiedstl96+0x130>
test   %r9,%r9
je     15b6 <parallelize_left_justifiedstl96+0x4a6>
mov    %r9,%rdx
nop
mov    $0x1,%esi
mov    %eax,%ecx
shl    %cl,%esi
add    %esi,%r8d
add    $0x1,%rax
add    $0xffffffffffffffff,%rdx
jne    15a0 <parallelize_left_justifiedstl96+0x490>
cmp    $0x7,%r10
jb     1240 <parallelize_left_justifiedstl96+0x130>
add    $0xfffffffffffffff0,%rax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
lea    0x10(%rax),%ecx
mov    $0x1,%edx
shl    %cl,%edx
lea    0x11(%rax),%ecx
mov    $0x1,%esi
shl    %cl,%esi
add    %edx,%r8d
lea    0x12(%rax),%ecx
mov    $0x1,%edx
shl    %cl,%edx
lea    0x13(%rax),%ecx
mov    $0x1,%edi
shl    %cl,%edi
add    %r8d,%esi
add    %esi,%edx
lea    0x14(%rax),%ecx
mov    $0x1,%esi
shl    %cl,%esi
lea    0x15(%rax),%ecx
mov    $0x1,%ebp
shl    %cl,%ebp
add    %edx,%edi
add    %edi,%esi
lea    0x16(%rax),%ecx
mov    $0x1,%edx
shl    %cl,%edx
lea    0x17(%rax),%ecx
mov    $0x1,%r8d
shl    %cl,%r8d
add    %esi,%ebp
add    %ebp,%edx
add    %edx,%r8d
add    $0x8,%rax
jne    15d0 <parallelize_left_justifiedstl96+0x4c0>
jmp    1240 <parallelize_left_justifiedstl96+0x130>
mov    %r15,%rdi
mov    $0xff,%esi
call   1030 <memset@plt>
mov    $0xffffffffffffffff,%r14
mov    %r14,%rax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
sub    $0x10,%rbx
je     1654 <parallelize_left_justifiedstl96+0x544>
test   %r14,%r14
jle    1654 <parallelize_left_justifiedstl96+0x544>
neg    %rbx
cmp    $0x1,%r14
jne    1690 <parallelize_left_justifiedstl96+0x580>
xor    %eax,%eax
jmp    1701 <parallelize_left_justifiedstl96+0x5f1>
xor    %r14d,%r14d
jmp    1654 <parallelize_left_justifiedstl96+0x544>
mov    0x8(%rsp),%r14
neg    %r14
jmp    1654 <parallelize_left_justifiedstl96+0x544>
mov    %r14,%rdx
and    $0xfffffffffffffffe,%rdx
xor    %eax,%eax
mov    $0xffffffffffff8000,%rsi
mov    $0x7fff,%edi
cs nopw 0x0(%rax,%rax,1)
nop
movswq (%r15,%rax,2),%rbp
mov    %ebx,%ecx
shl    %cl,%rbp
cmp    $0xffffffffffff8001,%rbp
cmovl  %rsi,%rbp
cmp    $0x7fff,%rbp
cmovge %edi,%ebp
mov    %bp,(%r15,%rax,2)
movswq 0x2(%r15,%rax,2),%rbp
shl    %cl,%rbp
cmp    $0xffffffffffff8001,%rbp
cmovl  %rsi,%rbp
cmp    $0x7fff,%rbp
cmovge %edi,%ebp
mov    %bp,0x2(%r15,%rax,2)
add    $0x2,%rax
cmp    %rax,%rdx
jne    16b0 <parallelize_left_justifiedstl96+0x5a0>
test   $0x1,%r14b
je     1654 <parallelize_left_justifiedstl96+0x544>
movswq (%r15,%rax,2),%rdx
mov    %ebx,%ecx
shl    %cl,%rdx
cmp    $0xffffffffffff8001,%rdx
mov    $0xffffffffffff8000,%rcx
cmovge %rdx,%rcx
cmp    $0x7fff,%rcx
mov    $0x7fff,%edx
cmovl  %ecx,%edx
mov    %dx,(%r15,%rax,2)
jmp    1654 <parallelize_left_justifiedstl96+0x544>

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

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