long parallelize_left_justifiedstl92(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 ? 1 : 0)) / resol;
  bs = (unsigned short *)bit_stm;
  for (j = 0; j < n; j++) {
    if (*bs == 0x6B21)
      bs++;
    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_justifiedstl92>:
push   %rbp
mov    %rsp,%rbp
mov    %r8b,%al
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %al,-0x21(%rbp)
mov    -0x18(%rbp),%rax
movsbl -0x21(%rbp),%esi
xor    %ecx,%ecx
mov    $0x1,%edx
cmp    $0x1,%esi
cmove  %edx,%ecx
movslq %ecx,%rcx
sub    %rcx,%rax
cqto
idivq  -0x20(%rbp)
mov    %rax,-0x38(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x30(%rbp)
movq   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x38(%rbp),%rax
jge    126f <parallelize_left_justifiedstl92+0x16f>
mov    -0x30(%rbp),%rax
movzwl (%rax),%eax
cmp    $0x6b21,%eax
jne    117b <parallelize_left_justifiedstl92+0x7b>
mov    -0x30(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x2,%rcx
mov    %rcx,-0x30(%rbp)
movzwl (%rax),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x81,%edx
cmove  %ecx,%eax
mov    %ax,-0x24(%rbp)
movq   $0x1,-0x48(%rbp)
mov    -0x48(%rbp),%rax
cmp    -0x20(%rbp),%rax
jge    11fc <parallelize_left_justifiedstl92+0xfc>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x2,%rcx
mov    %rcx,-0x30(%rbp)
movzwl (%rax),%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x81,%edx
cmove  %ecx,%eax
mov    -0x48(%rbp),%rcx
shl    %cl,%eax
mov    %eax,%ecx
movzwl -0x24(%rbp),%eax
add    %ecx,%eax
mov    %ax,-0x24(%rbp)
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    11a9 <parallelize_left_justifiedstl92+0xa9>
mov    -0x30(%rbp),%rax
movzwl -0x2(%rax),%eax
cmp    $0x81,%eax
jne    124e <parallelize_left_justifiedstl92+0x14e>
jmp    1214 <parallelize_left_justifiedstl92+0x114>
cmpq   $0x10,-0x48(%rbp)
jge    1249 <parallelize_left_justifiedstl92+0x149>
mov    -0x48(%rbp),%rax
mov    %eax,%ecx
mov    $0x1,%eax
shl    %cl,%eax
mov    %eax,%ecx
movzwl -0x24(%rbp),%eax
add    %ecx,%eax
mov    %ax,-0x24(%rbp)
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
jmp    1214 <parallelize_left_justifiedstl92+0x114>
jmp    124e <parallelize_left_justifiedstl92+0x14e>
mov    -0x24(%rbp),%dx
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    114f <parallelize_left_justifiedstl92+0x4f>
mov    $0x10,%eax
sub    -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
cmp    $0x0,%rax
je     1320 <parallelize_left_justifiedstl92+0x220>
movq   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%rax
cmp    -0x38(%rbp),%rax
jge    131b <parallelize_left_justifiedstl92+0x21b>
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%rcx
movswq (%rax,%rcx,2),%rax
mov    -0x20(%rbp),%rcx
shl    %cl,%rax
mov    %rax,-0x48(%rbp)
cmpq   $0x7fff,-0x48(%rbp)
jle    12cf <parallelize_left_justifiedstl92+0x1cf>
mov    $0x7fff,%eax
mov    %eax,-0x4c(%rbp)
jmp    12f8 <parallelize_left_justifiedstl92+0x1f8>
cmpq   $0xffffffffffff8000,-0x48(%rbp)
ff
jge    12ea <parallelize_left_justifiedstl92+0x1ea>
mov    $0xffff8000,%eax
mov    %eax,-0x50(%rbp)
jmp    12f2 <parallelize_left_justifiedstl92+0x1f2>
mov    -0x48(%rbp),%rax
cwtl
mov    %eax,-0x50(%rbp)
mov    -0x50(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %ax,%dx
mov    -0x10(%rbp),%rax
mov    -0x40(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x40(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x40(%rbp)
jmp    128e <parallelize_left_justifiedstl92+0x18e>
jmp    1320 <parallelize_left_justifiedstl92+0x220>
mov    -0x38(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<parallelize_left_justifiedstl92>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rcx,%r15
mov    %rdx,%rax
xor    %ecx,%ecx
cmp    $0x1,%r8b
sete   %cl
sub    %rcx,%rax
mov    %rax,%rcx
or     %r15,%rcx
shr    $0x20,%rcx
je     1137 <parallelize_left_justifiedstl92+0x37>
cqto
idiv   %r15
test   %rax,%rax
jg     1145 <parallelize_left_justifiedstl92+0x45>
jmp    1674 <parallelize_left_justifiedstl92+0x574>
xor    %edx,%edx
div    %r15d
test   %rax,%rax
jle    1674 <parallelize_left_justifiedstl92+0x574>
lea    -0x1(%r15),%r8
lea    -0x9(%r15),%r11
mov    %r11,-0x8(%rsp)
shr    $0x3,%r11
add    $0x1,%r11
mov    %r8,%r12
and    $0xfffffffffffffff8,%r12
lea    0x1(%r12),%rcx
mov    %rcx,-0x10(%rsp)
mov    %r11,%rcx
and    $0xfffffffffffffffe,%rcx
mov    %rcx,-0x18(%rsp)
xor    %r13d,%r13d
movdqa 0xe7d(%rip),%xmm8
movdqa 0xe84(%rip),%xmm9
movdqa 0xe8b(%rip),%xmm12
movdqa 0xe92(%rip),%xmm13
movdqa 0xe99(%rip),%xmm14
movdqa 0xea0(%rip),%xmm10
movdqa 0xea7(%rip),%xmm11
jmp    11d2 <parallelize_left_justifiedstl92+0xd2>
nopl   0x0(%rax,%rax,1)
mov    %bp,(%rsi,%r13,2)
add    $0x1,%r13
cmp    %rax,%r13
je     15bb <parallelize_left_justifiedstl92+0x4bb>
movzwl (%rdi),%ecx
xor    %ebx,%ebx
cmp    $0x6b21,%ecx
sete   %bl
movzwl (%rdi,%rbx,2),%r14d
xor    %ebp,%ebp
cmp    $0x81,%r14d
sete   %bpl
lea    (%rdi,%rbx,2),%r9
add    $0x2,%r9
cmp    $0x2,%r15
jl     1220 <parallelize_left_justifiedstl92+0x120>
mov    $0x1,%ecx
cmp    $0x8,%r8
jae    1230 <parallelize_left_justifiedstl92+0x130>
mov    %r9,%rdi
jmp    14c0 <parallelize_left_justifiedstl92+0x3c0>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    $0x1,%edx
mov    %r9,%rdi
jmp    14e4 <parallelize_left_justifiedstl92+0x3e4>
nopl   (%rax)
movzwl %bp,%ecx
movd   %ecx,%xmm0
cmpq   $0x8,-0x8(%rsp)
jae    1250 <parallelize_left_justifiedstl92+0x150>
xor    %ecx,%ecx
movdqa %xmm9,%xmm3
movdqa %xmm8,%xmm1
jmp    13d9 <parallelize_left_justifiedstl92+0x2d9>
lea    (%rdi,%rbx,2),%rdi
add    $0x12,%rdi
mov    -0x18(%rsp),%rbp
xor    %ecx,%ecx
movdqa %xmm9,%xmm3
movdqa %xmm8,%xmm1
nopl   0x0(%rax)
movdqu -0x10(%rdi,%rcx,2),%xmm6
movdqu (%rdi,%rcx,2),%xmm15
pcmpeqw %xmm12,%xmm6
movdqa %xmm6,%xmm2
punpckhwd %xmm2,%xmm2
pand   %xmm13,%xmm2
punpcklwd %xmm6,%xmm6
pand   %xmm13,%xmm6
movdqa %xmm3,%xmm5
pslld  $0x17,%xmm5
paddd  %xmm14,%xmm5
cvttps2dq %xmm5,%xmm5
pshufd $0xf5,%xmm6,%xmm4
pmuludq %xmm5,%xmm6
pshufd $0xe8,%xmm6,%xmm6
pshufd $0xf5,%xmm5,%xmm5
pmuludq %xmm4,%xmm5
pshufd $0xe8,%xmm5,%xmm4
punpckldq %xmm4,%xmm6
movdqa %xmm1,%xmm4
pslld  $0x17,%xmm4
paddd  %xmm14,%xmm4
cvttps2dq %xmm4,%xmm4
pshufd $0xf5,%xmm2,%xmm5
pmuludq %xmm4,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pshufd $0xf5,%xmm4,%xmm4
pmuludq %xmm5,%xmm4
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm2
pslld  $0x10,%xmm2
psrad  $0x10,%xmm2
pslld  $0x10,%xmm6
psrad  $0x10,%xmm6
packssdw %xmm2,%xmm6
paddw  %xmm0,%xmm6
movdqa %xmm3,%xmm0
paddd  %xmm10,%xmm0
movdqa %xmm1,%xmm2
paddd  %xmm10,%xmm2
movdqa %xmm15,%xmm4
pcmpeqw %xmm12,%xmm4
movdqa %xmm4,%xmm5
punpcklwd %xmm5,%xmm5
pand   %xmm13,%xmm5
punpckhwd %xmm4,%xmm4
pand   %xmm13,%xmm4
pslld  $0x17,%xmm2
paddd  %xmm14,%xmm2
cvttps2dq %xmm2,%xmm2
pshufd $0xf5,%xmm4,%xmm7
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm7,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm4
pslld  $0x17,%xmm0
paddd  %xmm14,%xmm0
cvttps2dq %xmm0,%xmm2
pshufd $0xf5,%xmm5,%xmm7
pmuludq %xmm2,%xmm5
pshufd $0xe8,%xmm5,%xmm0
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm7,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm0
pslld  $0x10,%xmm0
psrad  $0x10,%xmm0
pslld  $0x10,%xmm4
psrad  $0x10,%xmm4
packssdw %xmm4,%xmm0
paddw  %xmm6,%xmm0
add    $0x10,%rcx
paddd  %xmm11,%xmm3
paddd  %xmm11,%xmm1
add    $0xfffffffffffffffe,%rbp
jne    1270 <parallelize_left_justifiedstl92+0x170>
test   $0x1,%r11b
je     1481 <parallelize_left_justifiedstl92+0x381>
movdqu (%r9,%rcx,2),%xmm15
movdqa %xmm15,%xmm2
pcmpeqw %xmm12,%xmm2
movdqa %xmm2,%xmm4
punpckhwd %xmm4,%xmm4
pand   %xmm13,%xmm4
punpcklwd %xmm2,%xmm2
pand   %xmm13,%xmm2
pslld  $0x17,%xmm3
paddd  %xmm14,%xmm3
cvttps2dq %xmm3,%xmm3
pshufd $0xf5,%xmm2,%xmm6
pmuludq %xmm3,%xmm2
pshufd $0xe8,%xmm2,%xmm5
pshufd $0xf5,%xmm3,%xmm2
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm5
pslld  $0x17,%xmm1
paddd  %xmm14,%xmm1
cvttps2dq %xmm1,%xmm1
pshufd $0xf5,%xmm4,%xmm2
pmuludq %xmm1,%xmm4
pshufd $0xe8,%xmm4,%xmm3
pshufd $0xf5,%xmm1,%xmm1
pmuludq %xmm2,%xmm1
pshufd $0xe8,%xmm1,%xmm1
punpckldq %xmm1,%xmm3
pslld  $0x10,%xmm3
psrad  $0x10,%xmm3
pslld  $0x10,%xmm5
psrad  $0x10,%xmm5
packssdw %xmm3,%xmm5
paddw  %xmm5,%xmm0
lea    (%r9,%r12,2),%rdi
pshufd $0xee,%xmm0,%xmm1
paddw  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddw  %xmm1,%xmm0
movdqa %xmm0,%xmm1
psrld  $0x10,%xmm1
paddw  %xmm0,%xmm1
movd   %xmm1,%ebp
cmp    %r12,%r8
jne    14b5 <parallelize_left_justifiedstl92+0x3b5>
pextrw $0x7,%xmm15,%r14d
jmp    14e1 <parallelize_left_justifiedstl92+0x3e1>
mov    -0x10(%rsp),%rcx
nopw   0x0(%rax,%rax,1)
movzwl (%rdi),%r14d
xor    %edx,%edx
cmp    $0x81,%r14d
sete   %dl
shl    %cl,%edx
add    %edx,%ebp
add    $0x1,%rcx
add    $0x2,%rdi
cmp    %rcx,%r15
jne    14c0 <parallelize_left_justifiedstl92+0x3c0>
mov    %r15,%rdx
movzwl %r14w,%ecx
cmp    $0x81,%ecx
jne    11c0 <parallelize_left_justifiedstl92+0xc0>
cmp    $0xf,%rdx
ja     11c0 <parallelize_left_justifiedstl92+0xc0>
mov    %edx,%r14d
neg    %r14d
mov    %rdx,%r9
and    $0x7,%r14
je     1526 <parallelize_left_justifiedstl92+0x426>
nopl   (%rax)
mov    $0x1,%ebx
mov    %r9d,%ecx
shl    %cl,%ebx
add    %ebx,%ebp
add    $0x1,%r9
add    $0xffffffffffffffff,%r14
jne    1510 <parallelize_left_justifiedstl92+0x410>
add    $0xfffffffffffffff7,%rdx
cmp    $0x7,%rdx
jb     11c0 <parallelize_left_justifiedstl92+0xc0>
add    $0xfffffffffffffff0,%r9
nopl   0x0(%rax,%rax,1)
lea    0x10(%r9),%ecx
mov    $0x1,%edx
shl    %cl,%edx
lea    0x11(%r9),%ecx
mov    $0x1,%ebx
shl    %cl,%ebx
add    %edx,%ebp
lea    0x12(%r9),%ecx
mov    $0x1,%edx
shl    %cl,%edx
lea    0x13(%r9),%ecx
mov    $0x1,%r14d
shl    %cl,%r14d
add    %ebp,%ebx
add    %ebx,%edx
lea    0x14(%r9),%ecx
mov    $0x1,%ebx
shl    %cl,%ebx
lea    0x15(%r9),%ecx
mov    $0x1,%r10d
shl    %cl,%r10d
add    %edx,%r14d
add    %r14d,%ebx
lea    0x16(%r9),%ecx
mov    $0x1,%edx
shl    %cl,%edx
lea    0x17(%r9),%ecx
mov    $0x1,%ebp
shl    %cl,%ebp
add    %ebx,%r10d
add    %r10d,%edx
add    %edx,%ebp
add    $0x8,%r9
jne    1540 <parallelize_left_justifiedstl92+0x440>
jmp    11c0 <parallelize_left_justifiedstl92+0xc0>
sub    $0x10,%r15
je     1674 <parallelize_left_justifiedstl92+0x574>
test   %rax,%rax
jle    1674 <parallelize_left_justifiedstl92+0x574>
neg    %r15
cmp    $0x1,%rax
jne    15db <parallelize_left_justifiedstl92+0x4db>
xor    %edx,%edx
jmp    1640 <parallelize_left_justifiedstl92+0x540>
mov    %rax,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %edx,%edx
mov    $0xffffffffffff8000,%r8
mov    $0x7fff,%ebx
movswq (%rsi,%rdx,2),%rbp
mov    %r15d,%ecx
shl    %cl,%rbp
cmp    $0xffffffffffff8001,%rbp
cmovl  %r8,%rbp
cmp    $0x7fff,%rbp
cmovge %ebx,%ebp
mov    %bp,(%rsi,%rdx,2)
movswq 0x2(%rsi,%rdx,2),%rbp
shl    %cl,%rbp
cmp    $0xffffffffffff8001,%rbp
cmovl  %r8,%rbp
cmp    $0x7fff,%rbp
cmovge %ebx,%ebp
mov    %bp,0x2(%rsi,%rdx,2)
add    $0x2,%rdx
cmp    %rdx,%rdi
jne    15f0 <parallelize_left_justifiedstl92+0x4f0>
test   $0x1,%al
je     1674 <parallelize_left_justifiedstl92+0x574>
movswq (%rsi,%rdx,2),%rdi
mov    %r15d,%ecx
shl    %cl,%rdi
cmp    $0xffffffffffff8001,%rdi
mov    $0xffffffffffff8000,%rcx
cmovge %rdi,%rcx
cmp    $0x7fff,%rcx
mov    $0x7fff,%edi
cmovl  %ecx,%edi
mov    %di,(%rsi,%rdx,2)
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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