long parallelize_right_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 short)(*bs++ == 0x0081) ? 1 : 0;
    for (k = 1; k < resol; k++) {
      tmp += (unsigned short)(((*bs++) == 0x0081 ? 1 : 0) << k);
    }
    par_buf[j] = (short)tmp;
  }
  return ((long)n);
}


x86 assembly (clang, -O0):
<parallelize_right_justifiedstl96>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%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_right_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    12fd <parallelize_right_justifiedstl96+0x1ed>
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    12f5 <parallelize_right_justifiedstl96+0x1e5>
mov    -0x38(%rbp),%rax
movzwl (%rax),%eax
cmp    $0x6b20,%eax
jne    11f0 <parallelize_right_justifiedstl96+0xe0>
movq   $0x0,-0x8(%rbp)
jmp    12fd <parallelize_right_justifiedstl96+0x1ed>
mov    -0x38(%rbp),%rax
movzwl (%rax),%eax
cmp    $0x6b21,%eax
jne    1245 <parallelize_right_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_right_justifiedstl96+0x130>
xor    %eax,%eax
sub    -0x20(%rbp),%rax
mov    %rax,-0x8(%rbp)
jmp    12fd <parallelize_right_justifiedstl96+0x1ed>
jmp    1245 <parallelize_right_justifiedstl96+0x135>
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x2,%rcx
mov    %rcx,-0x38(%rbp)
movzwl (%rax),%eax
cmp    $0x81,%eax
sete   %al
and    $0x1,%al
movzbl %al,%eax
movzwl %ax,%edx
xor    %eax,%eax
mov    $0x1,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %ax,-0x2c(%rbp)
movq   $0x1,-0x50(%rbp)
mov    -0x50(%rbp),%rax
cmp    -0x28(%rbp),%rax
jge    12d4 <parallelize_right_justifiedstl96+0x1c4>
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
movzwl %ax,%ecx
movzwl -0x2c(%rbp),%eax
add    %ecx,%eax
mov    %ax,-0x2c(%rbp)
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    1280 <parallelize_right_justifiedstl96+0x170>
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_right_justifiedstl96+0xb3>
mov    -0x40(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<parallelize_right_justifiedstl96>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rcx,%r13
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,%rbx
xor    %ecx,%ecx
cmp    $0x1,%r8b
sete   %cl
add    %rcx,%rcx
mov    %rdx,%rax
sub    %rcx,%rax
mov    %rax,%rdx
or     %r13,%rdx
shr    $0x20,%rdx
je     1152 <parallelize_right_justifiedstl96+0x42>
cqto
idiv   %r13
mov    %rax,%r12
jmp    115a <parallelize_right_justifiedstl96+0x4a>
xor    %edx,%edx
div    %r13d
mov    %eax,%r12d
mov    %r12,%rax
imul   %r13,%rax
add    %rcx,%rax
lea    (%r12,%r12,1),%rdx
cmp    %r14,%rax
jne    1535 <parallelize_right_justifiedstl96+0x425>
mov    %r15,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
test   %r12,%r12
jle    1549 <parallelize_right_justifiedstl96+0x439>
lea    -0x2(%r14),%r10
lea    -0x1(%r13),%r9
lea    -0x9(%r13),%r8
mov    %r8,0x18(%rsp)
shr    $0x3,%r8
add    $0x1,%r8
mov    %r9,%r11
and    $0xfffffffffffffff8,%r11
lea    0x1(%r11),%rax
mov    %rax,0x10(%rsp)
mov    %r8,%rax
and    $0xfffffffffffffffe,%rax
mov    %rax,0x8(%rsp)
movdqa 0xe3e(%rip),%xmm8
movdqa 0xe45(%rip),%xmm9
movdqa 0xe4c(%rip),%xmm12
movdqa 0xe53(%rip),%xmm13
movdqa 0xe5a(%rip),%xmm14
movdqa 0xe61(%rip),%xmm10
movdqa 0xe68(%rip),%xmm11
xor    %eax,%eax
mov    %r10,0x20(%rsp)
jmp    1229 <parallelize_right_justifiedstl96+0x119>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    (%rbx,%r13,2),%rbp
mov    %di,(%r15,%rax,2)
add    $0x1,%rax
mov    %rbp,%rbx
cmp    %r12,%rax
je     1549 <parallelize_right_justifiedstl96+0x439>
movzwl (%rbx),%ecx
cmp    $0x6b21,%ecx
je     1250 <parallelize_right_justifiedstl96+0x140>
movzwl %cx,%edi
cmp    $0x6b20,%edi
jne    1264 <parallelize_right_justifiedstl96+0x154>
jmp    155b <parallelize_right_justifiedstl96+0x44b>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzwl 0x2(%rbx),%ecx
cmp    %rcx,%r10
jne    1560 <parallelize_right_justifiedstl96+0x450>
add    $0x4,%rbx
movzwl (%rbx),%ecx
movzwl %cx,%ecx
xor    %edi,%edi
cmp    $0x81,%ecx
sete   %dil
lea    0x2(%rbx),%rbp
cmp    $0x2,%r13
jl     1214 <parallelize_right_justifiedstl96+0x104>
mov    $0x1,%ecx
cmp    $0x8,%r9
jb     1510 <parallelize_right_justifiedstl96+0x400>
movzwl %di,%ecx
movd   %ecx,%xmm7
cmpq   $0x8,0x18(%rsp)
jae    12ac <parallelize_right_justifiedstl96+0x19c>
xor    %ecx,%ecx
movdqa %xmm9,%xmm3
movdqa %xmm8,%xmm0
jmp    1424 <parallelize_right_justifiedstl96+0x314>
mov    0x8(%rsp),%r10
xor    %ecx,%ecx
movdqa %xmm9,%xmm3
movdqa %xmm8,%xmm0
nopl   (%rax)
movdqu 0x2(%rbx,%rcx,2),%xmm5
movdqu 0x12(%rbx,%rcx,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,%rcx
paddd  %xmm11,%xmm3
paddd  %xmm11,%xmm0
add    $0xfffffffffffffffe,%r10
jne    12c0 <parallelize_right_justifiedstl96+0x1b0>
test   $0x1,%r8b
mov    0x20(%rsp),%r10
je     14cc <parallelize_right_justifiedstl96+0x3bc>
movdqu 0x0(%rbp,%rcx,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,%edi
cmp    %r11,%r9
je     1210 <parallelize_right_justifiedstl96+0x100>
lea    0x0(%rbp,%r11,2),%rbp
mov    0x10(%rsp),%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzwl 0x0(%rbp),%esi
xor    %edx,%edx
cmp    $0x81,%esi
sete   %dl
shl    %cl,%edx
add    %edx,%edi
add    $0x1,%rcx
add    $0x2,%rbp
cmp    %rcx,%r13
jne    1510 <parallelize_right_justifiedstl96+0x400>
jmp    1210 <parallelize_right_justifiedstl96+0x100>
mov    %r15,%rdi
mov    $0xff,%esi
call   1030 <memset@plt>
mov    $0xffffffffffffffff,%r12
mov    %r12,%rax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %r12d,%r12d
jmp    1549 <parallelize_right_justifiedstl96+0x439>
neg    %r14
mov    %r14,%r12
jmp    1549 <parallelize_right_justifiedstl96+0x439>

LLVM IR (-O0):
define i64 @parallelize_right_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 %128
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 = %123, %51
%53 = load i64, i64* %15
%54 = load i64, i64* %14
%55 = icmp slt i64 %53, %54
br i1 %55, label %56, label %126
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 %128
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 %128
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 i32
%88 = trunc i32 %87 to i16
%89 = zext i16 %88 to i32
%90 = icmp ne i32 %89, 0
%91 = zext i1 %90 to i64
%92 = select i1 %90, i32 1, i32 0
%93 = trunc i32 %92 to i16
store i16 %93, i16* %12
store i64 1, i64* %16
br label %94
94: ; preds = %115, %81
%95 = load i64, i64* %16
%96 = load i64, i64* %10
%97 = icmp slt i64 %95, %96
br i1 %97, label %98, label %118
98: ; preds = %94
%99 = load i16*, i16** %13
%100 = getelementptr inbounds i16, i16* %99, i32 1
store i16* %100, i16** %13
%101 = load i16, i16* %99
%102 = zext i16 %101 to i32
%103 = icmp eq i32 %102, 129
%104 = zext i1 %103 to i64
%105 = select i1 %103, i32 1, i32 0
%106 = load i64, i64* %16
%107 = trunc i64 %106 to i32
%108 = shl i32 %105, %107
%109 = trunc i32 %108 to i16
%110 = zext i16 %109 to i32
%111 = load i16, i16* %12
%112 = zext i16 %111 to i32
%113 = add nsw i32 %112, %110
%114 = trunc i32 %113 to i16
store i16 %114, i16* %12
br label %115
115: ; preds = %98
%116 = load i64, i64* %16
%117 = add nsw i64 %116, 1
store i64 %117, i64* %16
br label %94
118: ; preds = %94
%119 = load i16, i16* %12
%120 = load i16*, i16** %8
%121 = load i64, i64* %15
%122 = getelementptr inbounds i16, i16* %120, i64 %121
store i16 %119, i16* %122
br label %123
123: ; preds = %118
%124 = load i64, i64* %15
%125 = add nsw i64 %124, 1
store i64 %125, i64* %15
br label %52
126: ; preds = %52
%127 = load i64, i64* %14
store i64 %127, i64* %6
br label %128
128: ; preds = %126, %77, %61, %41
%129 = load i64, i64* %6
ret i64 %129
}

LLVM IR (-O2):
define i64 @parallelize_right_justifiedstl96(i16* nocapture %0, i16* nocapture writeonly %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 %129
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 %129
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 = icmp ult i64 %22, 8
%27 = and i64 %22, -8
%28 = or i64 %27, 1
%29 = and i64 %25, 1
%30 = icmp ult i64 %23, 8
%31 = and i64 %25, 4611686018427387902
%32 = icmp eq i64 %29, 0
%33 = icmp eq i64 %22, %27
br label %34
34: ; preds = %19, %123
%35 = phi i64 [ 0, %19 ], [ %127, %123 ]
%36 = phi i16* [ %0, %19 ], [ %125, %123 ]
%37 = load i16, i16* %36
switch i16 %37, label %48 [
i16 27424, label %129
i16 27425, label %38
]
38: ; preds = %34
%39 = getelementptr inbounds i16, i16* %36, i64 1
%40 = getelementptr inbounds i16, i16* %36, i64 2
%41 = load i16, i16* %39
%42 = zext i16 %41 to i64
%43 = icmp eq i64 %20, %42
br i1 %43, label %44, label %46
44: ; preds = %38
%45 = load i16, i16* %40
br label %48
46: ; preds = %38
%47 = sub nsw i64 0, %2
br label %129
48: ; preds = %44, %34
%49 = phi i16 [ %45, %44 ], [ %37, %34 ]
%50 = phi i16* [ %40, %44 ], [ %36, %34 ]
%51 = icmp eq i16 %49, 129
%52 = zext i1 %51 to i16
%53 = getelementptr inbounds i16, i16* %50, i64 1
br i1 %21, label %54, label %123
54: ; preds = %48
br i1 %26, label %102, label %55
55: ; preds = %54
%56 = getelementptr i16, i16* %53, i64 %27
%57 = insertelement <8 x i16> <i16 poison, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0, i16 0>, i16 %52, i64 0
br i1 %30, label %85, label %58
58: ; preds = %55, %58
%59 = phi i64 [ %81, %58 ], [ 0, %55 ]
%60 = phi <8 x i16> [ %80, %58 ], [ %57, %55 ]
%61 = phi <8 x i32> [ %82, %58 ], [ <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>, %55 ]
%62 = phi i64 [ %83, %58 ], [ 0, %55 ]
%63 = getelementptr i16, i16* %53, i64 %59
%64 = bitcast i16* %63 to <8 x i16>*
%65 = load <8 x i16>, <8 x i16>* %64
%66 = icmp eq <8 x i16> %65, <i16 129, i16 129, i16 129, i16 129, i16 129, i16 129, i16 129, i16 129>
%67 = zext <8 x i1> %66 to <8 x i32>
%68 = shl nuw <8 x i32> %67, %61
%69 = trunc <8 x i32> %68 to <8 x i16>
%70 = add <8 x i16> %60, %69
%71 = or i64 %59, 8
%72 = add <8 x i32> %61, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
%73 = getelementptr i16, i16* %53, i64 %71
%74 = bitcast i16* %73 to <8 x i16>*
%75 = load <8 x i16>, <8 x i16>* %74
%76 = icmp eq <8 x i16> %75, <i16 129, i16 129, i16 129, i16 129, i16 129, i16 129, i16 129, i16 129>
%77 = zext <8 x i1> %76 to <8 x i32>
%78 = shl nuw <8 x i32> %77, %72
%79 = trunc <8 x i32> %78 to <8 x i16>
%80 = add <8 x i16> %70, %79
%81 = add nuw i64 %59, 16
%82 = add <8 x i32> %61, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
%83 = add i64 %62, 2
%84 = icmp eq i64 %83, %31
br i1 %84, label %85, label %58
85: ; preds = %58, %55
%86 = phi <8 x i16> [ undef, %55 ], [ %80, %58 ]
%87 = phi i64 [ 0, %55 ], [ %81, %58 ]
%88 = phi <8 x i16> [ %57, %55 ], [ %80, %58 ]
%89 = phi <8 x i32> [ <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8>, %55 ], [ %82, %58 ]
br i1 %32, label %99, label %90
90: ; preds = %85
%91 = getelementptr i16, i16* %53, i64 %87
%92 = bitcast i16* %91 to <8 x i16>*
%93 = load <8 x i16>, <8 x i16>* %92
%94 = icmp eq <8 x i16> %93, <i16 129, i16 129, i16 129, i16 129, i16 129, i16 129, i16 129, i16 129>
%95 = zext <8 x i1> %94 to <8 x i32>
%96 = shl nuw <8 x i32> %95, %89
%97 = trunc <8 x i32> %96 to <8 x i16>
%98 = add <8 x i16> %88, %97
br label %99
99: ; preds = %85, %90
%100 = phi <8 x i16> [ %86, %85 ], [ %98, %90 ]
%101 = call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> %100)
br i1 %33, label %120, label %102
102: ; preds = %54, %99
%103 = phi i16* [ %53, %54 ], [ %56, %99 ]
%104 = phi i64 [ 1, %54 ], [ %28, %99 ]
%105 = phi i16 [ %52, %54 ], [ %101, %99 ]
br label %106
106: ; preds = %102, %106
%107 = phi i16* [ %118, %106 ], [ %103, %102 ]
%108 = phi i64 [ %117, %106 ], [ %104, %102 ]
%109 = phi i16 [ %116, %106 ], [ %105, %102 ]
%110 = load i16, i16* %107
%111 = icmp eq i16 %110, 129
%112 = zext i1 %111 to i32
%113 = trunc i64 %108 to i32
%114 = shl nuw i32 %112, %113
%115 = trunc i32 %114 to i16
%116 = add i16 %109, %115
%117 = add nuw nsw i64 %108, 1
%118 = getelementptr inbounds i16, i16* %107, i64 1
%119 = icmp eq i64 %117, %3
br i1 %119, label %120, label %106
120: ; preds = %106, %99
%121 = phi i16 [ %101, %99 ], [ %116, %106 ]
%122 = getelementptr i16, i16* %50, i64 %3
br label %123
123: ; preds = %120, %48
%124 = phi i16 [ %52, %48 ], [ %121, %120 ]
%125 = phi i16* [ %53, %48 ], [ %122, %120 ]
%126 = getelementptr inbounds i16, i16* %1, i64 %35
store i16 %124, i16* %126
%127 = add nuw nsw i64 %35, 1
%128 = icmp eq i64 %127, %10
br i1 %128, label %129, label %34
129: ; preds = %34, %123, %17, %46, %16
%130 = phi i64 [ -1, %16 ], [ %47, %46 ], [ %10, %17 ], [ 0, %34 ], [ %10, %123 ]
ret i64 %130
}