#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 */
unsigned int right_encode(unsigned char *encbuf, size_t value) {
  unsigned int n, i;
  size_t v;
  for (v = value, n = 0; v && (n < sizeof(size_t)); ++n, v >>= 8)
    ;
  for (i = 1; i <= n; ++i)
    encbuf[i - 1] = (unsigned char)(value >> (8 * (n - i)));
  encbuf[n] = (unsigned char)n;
  return n + 1;
}


x86 assembly (clang, -O0):
<right_encode>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x14(%rbp)
xor    %eax,%eax
cmpq   $0x0,-0x20(%rbp)
mov    %al,-0x21(%rbp)
je     1138 <right_encode+0x38>
mov    -0x14(%rbp),%eax
cmp    $0x8,%rax
setb   %al
mov    %al,-0x21(%rbp)
mov    -0x21(%rbp),%al
test   $0x1,%al
jne    1148 <right_encode+0x48>
jmp    1167 <right_encode+0x67>
jmp    114d <right_encode+0x4d>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x20(%rbp),%rax
shr    $0x8,%rax
mov    %rax,-0x20(%rbp)
jmp    111b <right_encode+0x1b>
movl   $0x1,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
ja     11ab <right_encode+0xab>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    -0x18(%rbp),%ecx
shl    $0x3,%ecx
mov    %ecx,%ecx
shr    %cl,%rax
mov    %al,%dl
mov    -0x8(%rbp),%rax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
mov    %ecx,%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    116e <right_encode+0x6e>
mov    -0x14(%rbp),%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
mov    %dl,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<right_encode>:
push   %r14
push   %rbx
test   %rsi,%rsi
je     1156 <right_encode+0x56>
cmp    $0x100,%rsi
jb     1163 <right_encode+0x63>
cmp    $0x10000,%rsi
jb     1170 <right_encode+0x70>
cmp    $0x1000000,%rsi
jb     117d <right_encode+0x7d>
mov    %rsi,%rax
shr    $0x20,%rax
je     118a <right_encode+0x8a>
mov    %rsi,%rax
shr    $0x28,%rax
je     1197 <right_encode+0x97>
mov    %rsi,%rax
shr    $0x30,%rax
je     11a4 <right_encode+0xa4>
xor    %r14d,%r14d
mov    %rsi,%rax
shr    $0x38,%rax
setne  %r14b
lea    0x8(%r14),%eax
add    $0x7,%r14d
jmp    11af <right_encode+0xaf>
mov    $0x1,%eax
xor    %r14d,%r14d
jmp    191e <right_encode+0x81e>
mov    $0x1,%r14d
mov    $0x2,%eax
jmp    11af <right_encode+0xaf>
mov    $0x2,%r14d
mov    $0x3,%eax
jmp    11af <right_encode+0xaf>
mov    $0x3,%r14d
mov    $0x4,%eax
jmp    11af <right_encode+0xaf>
mov    $0x4,%r14d
mov    $0x5,%eax
jmp    11af <right_encode+0xaf>
mov    $0x5,%r14d
mov    $0x6,%eax
jmp    11af <right_encode+0xaf>
mov    $0x6,%r14d
mov    $0x7,%eax
mov    %eax,%r8d
lea    -0x1(%r8),%r10
mov    $0x1,%r9d
cmp    $0x10,%r10
jb     183e <right_encode+0x73e>
mov    %r10,%r11
and    $0xfffffffffffffff0,%r11
lea    0x1(%r11),%r9
movd   %r14d,%xmm0
pshufd $0x0,%xmm0,%xmm14
movq   %rsi,%xmm0
pshufd $0x44,%xmm0,%xmm13
lea    -0x10(%r11),%rdx
shr    $0x4,%rdx
add    $0x1,%rdx
mov    %rdx,%rbx
and    $0xfffffffffffffffe,%rbx
movdqa 0xdfe(%rip),%xmm1
movdqa 0xe06(%rip),%xmm2
movdqa 0xe0e(%rip),%xmm4
movdqa 0xe16(%rip),%xmm0
mov    %rdi,%rcx
movdqa %xmm14,-0x78(%rsp)
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movdqa %xmm0,-0x48(%rsp)
movdqa %xmm4,-0x38(%rsp)
movdqa %xmm2,-0x28(%rsp)
movdqa %xmm1,-0x18(%rsp)
movdqa %xmm14,%xmm10
psubd  %xmm0,%xmm10
movdqa %xmm14,%xmm11
psubd  %xmm4,%xmm11
psubd  %xmm2,%xmm14
movdqa -0x78(%rsp),%xmm3
psubd  %xmm1,%xmm3
movdqa %xmm3,%xmm5
pslld  $0x3,%xmm5
movdqa %xmm14,%xmm0
pslld  $0x3,%xmm0
movdqa %xmm11,%xmm7
pslld  $0x3,%xmm7
movdqa %xmm10,%xmm2
pslld  $0x3,%xmm2
movdqa %xmm2,%xmm1
pxor   %xmm9,%xmm9
punpckhdq %xmm9,%xmm1
movdqa %xmm1,-0x58(%rsp)
movdqa %xmm7,%xmm1
punpckhdq %xmm9,%xmm1
movdqa %xmm1,-0x68(%rsp)
xorps  %xmm15,%xmm15
movss  %xmm7,%xmm15
xorps  %xmm8,%xmm8
movss  %xmm0,%xmm8
pxor   %xmm4,%xmm4
movdqa %xmm5,%xmm1
punpckhdq %xmm9,%xmm1
movdqa %xmm13,%xmm6
psrlq  %xmm1,%xmm6
movss  %xmm5,%xmm4
movdqa %xmm5,%xmm12
psrldq $0xc,%xmm12
movdqa %xmm13,%xmm1
psrlq  %xmm12,%xmm1
movsd  %xmm6,%xmm1
movdqa %xmm13,%xmm6
psrlq  %xmm4,%xmm6
psrlq  $0x20,%xmm5
movdqa %xmm13,%xmm4
psrlq  %xmm5,%xmm4
movdqa %xmm13,%xmm12
psrlq  %xmm8,%xmm12
movdqa %xmm0,%xmm8
psrlq  $0x20,%xmm8
movdqa %xmm13,%xmm5
psrlq  %xmm8,%xmm5
movdqa %xmm0,%xmm8
punpckhdq %xmm9,%xmm8
movsd  %xmm6,%xmm4
movdqa %xmm13,%xmm9
psrlq  %xmm8,%xmm9
psrldq $0xc,%xmm0
movdqa %xmm13,%xmm8
psrlq  %xmm0,%xmm8
movdqa %xmm13,%xmm0
psrlq  %xmm15,%xmm0
movsd  %xmm12,%xmm5
movdqa %xmm7,%xmm12
psrlq  $0x20,%xmm12
movdqa %xmm13,%xmm6
psrlq  %xmm12,%xmm6
movdqa %xmm13,%xmm12
psrlq  -0x68(%rsp),%xmm12
xorps  %xmm15,%xmm15
movss  %xmm2,%xmm15
movsd  %xmm9,%xmm8
psrldq $0xc,%xmm7
movdqa %xmm13,%xmm9
psrlq  %xmm7,%xmm9
movsd  %xmm0,%xmm6
movdqa %xmm13,%xmm7
psrlq  %xmm15,%xmm7
movdqa %xmm2,%xmm15
psrlq  $0x20,%xmm15
movdqa %xmm13,%xmm0
psrlq  %xmm15,%xmm0
movdqa %xmm13,%xmm15
psrlq  -0x58(%rsp),%xmm15
movsd  %xmm12,%xmm9
psrldq $0xc,%xmm2
movdqa %xmm13,%xmm12
psrlq  %xmm2,%xmm12
movsd  %xmm7,%xmm0
movsd  %xmm15,%xmm12
andpd  0xc47(%rip),%xmm12
andpd  0xc3f(%rip),%xmm0
packuswb %xmm12,%xmm0
andpd  0xc31(%rip),%xmm9
andpd  0xc29(%rip),%xmm6
packuswb %xmm9,%xmm6
packuswb %xmm6,%xmm0
andpd  0xc17(%rip),%xmm8
andpd  0xc0f(%rip),%xmm5
packuswb %xmm8,%xmm5
andpd  0xc02(%rip),%xmm4
andpd  0xbfa(%rip),%xmm1
packuswb %xmm1,%xmm4
packuswb %xmm4,%xmm5
packuswb %xmm5,%xmm0
movdqu %xmm0,(%rcx)
movdqa 0xbf2(%rip),%xmm0
psubd  %xmm0,%xmm10
psubd  %xmm0,%xmm11
psubd  %xmm0,%xmm14
psubd  %xmm0,%xmm3
pslld  $0x3,%xmm3
pslld  $0x3,%xmm14
pslld  $0x3,%xmm11
pslld  $0x3,%xmm10
movdqa %xmm10,%xmm8
pxor   %xmm0,%xmm0
punpckhdq %xmm0,%xmm8
movdqa %xmm11,%xmm9
punpckhdq %xmm0,%xmm9
pxor   %xmm7,%xmm7
pxor   %xmm0,%xmm0
movss  %xmm11,%xmm0
pxor   %xmm5,%xmm5
movss  %xmm14,%xmm5
movdqa %xmm3,%xmm2
xorpd  %xmm1,%xmm1
movss  %xmm3,%xmm1
movdqa %xmm13,%xmm6
psrlq  %xmm1,%xmm6
punpckhdq %xmm7,%xmm2
movdqa %xmm3,%xmm4
psrlq  $0x20,%xmm4
movdqa %xmm13,%xmm15
psrlq  %xmm4,%xmm15
movsd  %xmm6,%xmm15
movdqa %xmm13,%xmm4
psrlq  %xmm2,%xmm4
psrldq $0xc,%xmm3
movdqa %xmm13,%xmm12
psrlq  %xmm3,%xmm12
movdqa %xmm13,%xmm6
psrlq  %xmm5,%xmm6
movdqa %xmm14,%xmm5
psrlq  $0x20,%xmm5
movdqa %xmm13,%xmm3
psrlq  %xmm5,%xmm3
movdqa %xmm14,%xmm5
punpckhdq %xmm7,%xmm5
movsd  %xmm4,%xmm12
movdqa %xmm13,%xmm4
psrlq  %xmm5,%xmm4
psrldq $0xc,%xmm14
movdqa %xmm13,%xmm5
psrlq  %xmm14,%xmm5
movdqa %xmm13,%xmm7
psrlq  %xmm0,%xmm7
movsd  %xmm6,%xmm3
movdqa %xmm11,%xmm0
psrlq  $0x20,%xmm0
movdqa %xmm13,%xmm6
psrlq  %xmm0,%xmm6
movdqa %xmm13,%xmm2
psrlq  %xmm9,%xmm2
pxor   %xmm0,%xmm0
movss  %xmm10,%xmm0
movsd  %xmm4,%xmm5
psrldq $0xc,%xmm11
movdqa %xmm13,%xmm4
psrlq  %xmm11,%xmm4
movsd  %xmm7,%xmm6
movdqa %xmm13,%xmm7
psrlq  %xmm0,%xmm7
movdqa %xmm10,%xmm1
psrlq  $0x20,%xmm1
movdqa %xmm13,%xmm0
psrlq  %xmm1,%xmm0
movdqa %xmm13,%xmm1
psrlq  %xmm8,%xmm1
movsd  %xmm2,%xmm4
psrldq $0xc,%xmm10
movdqa %xmm13,%xmm2
psrlq  %xmm10,%xmm2
movsd  %xmm7,%xmm0
movsd  %xmm1,%xmm2
movdqa -0x18(%rsp),%xmm1
movapd 0xa62(%rip),%xmm8
andpd  %xmm8,%xmm2
andpd  %xmm8,%xmm0
packuswb %xmm2,%xmm0
movdqa -0x28(%rsp),%xmm2
andpd  %xmm8,%xmm4
andpd  %xmm8,%xmm6
packuswb %xmm4,%xmm6
movdqa -0x38(%rsp),%xmm4
packuswb %xmm6,%xmm0
andpd  %xmm8,%xmm5
andpd  %xmm8,%xmm3
packuswb %xmm5,%xmm3
andpd  %xmm8,%xmm12
andpd  %xmm8,%xmm15
packuswb %xmm12,%xmm15
packuswb %xmm15,%xmm3
packuswb %xmm3,%xmm0
movdqa -0x78(%rsp),%xmm14
movdqu %xmm0,0x10(%rcx)
movdqa -0x48(%rsp),%xmm0
movdqa 0xa16(%rip),%xmm3
paddd  %xmm3,%xmm0
paddd  %xmm3,%xmm4
paddd  %xmm3,%xmm2
paddd  %xmm3,%xmm1
add    $0x20,%rcx
add    $0xfffffffffffffffe,%rbx
jne    1230 <right_encode+0x130>
test   $0x1,%dl
je     1835 <right_encode+0x735>
movdqa %xmm14,%xmm15
psubd  %xmm0,%xmm15
movdqa %xmm14,%xmm0
movdqa %xmm14,%xmm3
psubd  %xmm4,%xmm3
movdqa %xmm14,%xmm7
psubd  %xmm2,%xmm7
psubd  %xmm1,%xmm0
pslld  $0x3,%xmm0
pslld  $0x3,%xmm7
pslld  $0x3,%xmm3
pslld  $0x3,%xmm15
pxor   %xmm2,%xmm2
movdqa %xmm15,%xmm1
punpckhdq %xmm2,%xmm1
movdqa %xmm1,-0x78(%rsp)
pxor   %xmm11,%xmm11
movss  %xmm15,%xmm11
movdqa %xmm3,%xmm10
punpckhdq %xmm2,%xmm10
pxor   %xmm9,%xmm9
movss  %xmm3,%xmm9
movdqa %xmm7,%xmm12
punpckhdq %xmm2,%xmm12
xorpd  %xmm5,%xmm5
movdqa %xmm0,%xmm1
punpckhdq %xmm2,%xmm1
movdqa %xmm13,%xmm6
psrlq  %xmm1,%xmm6
movss  %xmm7,%xmm5
movdqa %xmm0,%xmm4
psrldq $0xc,%xmm4
movdqa %xmm13,%xmm14
psrlq  %xmm4,%xmm14
movss  %xmm0,%xmm2
movdqa %xmm13,%xmm4
psrlq  %xmm2,%xmm4
psrlq  $0x20,%xmm0
movdqa %xmm13,%xmm2
psrlq  %xmm0,%xmm2
movdqa %xmm13,%xmm1
psrlq  %xmm5,%xmm1
movsd  %xmm6,%xmm14
movdqa %xmm7,%xmm6
psrlq  $0x20,%xmm6
movdqa %xmm13,%xmm5
psrlq  %xmm6,%xmm5
movsd  %xmm4,%xmm2
movdqa %xmm13,%xmm0
psrlq  %xmm12,%xmm0
psrldq $0xc,%xmm7
movdqa %xmm13,%xmm4
psrlq  %xmm7,%xmm4
movdqa %xmm13,%xmm12
psrlq  %xmm9,%xmm12
movsd  %xmm1,%xmm5
movdqa %xmm3,%xmm1
psrlq  $0x20,%xmm1
movdqa %xmm13,%xmm6
psrlq  %xmm1,%xmm6
movsd  %xmm0,%xmm4
movdqa %xmm13,%xmm9
psrlq  %xmm10,%xmm9
psrldq $0xc,%xmm3
movdqa %xmm13,%xmm1
psrlq  %xmm3,%xmm1
movdqa %xmm13,%xmm7
psrlq  %xmm11,%xmm7
movsd  %xmm12,%xmm6
movdqa %xmm15,%xmm0
psrlq  $0x20,%xmm0
movdqa %xmm13,%xmm3
psrlq  %xmm0,%xmm3
movsd  %xmm9,%xmm1
movsd  %xmm7,%xmm3
movdqa %xmm13,%xmm0
psrlq  -0x78(%rsp),%xmm0
psrldq $0xc,%xmm15
psrlq  %xmm15,%xmm13
movsd  %xmm0,%xmm13
andpd  %xmm8,%xmm13
andpd  %xmm8,%xmm3
packuswb %xmm13,%xmm3
andpd  %xmm8,%xmm1
andpd  %xmm8,%xmm6
packuswb %xmm1,%xmm6
packuswb %xmm6,%xmm3
andpd  %xmm8,%xmm4
andpd  %xmm8,%xmm5
packuswb %xmm4,%xmm5
andpd  %xmm8,%xmm2
andpd  %xmm8,%xmm14
packuswb %xmm14,%xmm2
packuswb %xmm2,%xmm5
packuswb %xmm5,%xmm3
movdqu %xmm3,(%rcx)
cmp    %r11,%r10
je     191e <right_encode+0x81e>
mov    %r14d,%ecx
sub    %r9d,%ecx
shl    $0x3,%ecx
mov    %rsi,%rdx
shr    %cl,%rdx
mov    %dl,-0x1(%r9,%rdi,1)
lea    0x1(%r9),%rdx
cmp    %r8,%rdx
je     191e <right_encode+0x81e>
mov    %r14d,%ecx
sub    %edx,%ecx
shl    $0x3,%ecx
mov    %rsi,%rdx
shr    %cl,%rdx
mov    %dl,(%rdi,%r9,1)
lea    0x2(%r9),%rdx
cmp    %r8,%rdx
je     191e <right_encode+0x81e>
mov    %r14d,%ecx
sub    %edx,%ecx
shl    $0x3,%ecx
mov    %rsi,%rdx
shr    %cl,%rdx
mov    %dl,0x1(%rdi,%r9,1)
lea    0x3(%r9),%rdx
cmp    %r8,%rdx
je     191e <right_encode+0x81e>
mov    %r14d,%ecx
sub    %edx,%ecx
shl    $0x3,%ecx
mov    %rsi,%rdx
shr    %cl,%rdx
mov    %dl,0x2(%rdi,%r9,1)
lea    0x4(%r9),%rdx
cmp    %r8,%rdx
je     191e <right_encode+0x81e>
mov    %r14d,%ecx
sub    %edx,%ecx
shl    $0x3,%ecx
mov    %rsi,%rdx
shr    %cl,%rdx
mov    %dl,0x3(%rdi,%r9,1)
lea    0x5(%r9),%rdx
cmp    %r8,%rdx
je     191e <right_encode+0x81e>
mov    %r14d,%ecx
sub    %edx,%ecx
shl    $0x3,%ecx
mov    %rsi,%rdx
shr    %cl,%rdx
mov    %dl,0x4(%rdi,%r9,1)
lea    0x6(%r9),%rdx
cmp    %r8,%rdx
je     191e <right_encode+0x81e>
mov    %r14d,%ecx
sub    %edx,%ecx
shl    $0x3,%ecx
mov    %rsi,%rbx
shr    %cl,%rbx
mov    %bl,0x5(%rdi,%r9,1)
add    $0x7,%r9
cmp    %r8,%r9
je     191e <right_encode+0x81e>
mov    %r14d,%ecx
sub    %r9d,%ecx
shl    $0x3,%ecx
shr    %cl,%rsi
mov    %sil,(%rdi,%rdx,1)
mov    %r14d,%ecx
mov    %r14b,(%rdi,%rcx,1)
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
define i32 @right_encode(i8* %0, i64 %1) {
%3 = alloca i8*
%4 = alloca i64
%5 = alloca i32
%6 = alloca i32
%7 = alloca i64
store i8* %0, i8** %3
store i64 %1, i64* %4
%8 = load i64, i64* %4
store i64 %8, i64* %7
store i32 0, i32* %5
br label %9
9: ; preds = %19, %2
%10 = load i64, i64* %7
%11 = icmp ne i64 %10, 0
br i1 %11, label %12, label %16
12: ; preds = %9
%13 = load i32, i32* %5
%14 = zext i32 %13 to i64
%15 = icmp ult i64 %14, 8
br label %16
16: ; preds = %12, %9
%17 = phi i1 [ false, %9 ], [ %15, %12 ]
br i1 %17, label %18, label %24
18: ; preds = %16
br label %19
19: ; preds = %18
%20 = load i32, i32* %5
%21 = add i32 %20, 1
store i32 %21, i32* %5
%22 = load i64, i64* %7
%23 = lshr i64 %22, 8
store i64 %23, i64* %7
br label %9
24: ; preds = %16
store i32 1, i32* %6
br label %25
25: ; preds = %43, %24
%26 = load i32, i32* %6
%27 = load i32, i32* %5
%28 = icmp ule i32 %26, %27
br i1 %28, label %29, label %46
29: ; preds = %25
%30 = load i64, i64* %4
%31 = load i32, i32* %5
%32 = load i32, i32* %6
%33 = sub i32 %31, %32
%34 = mul i32 8, %33
%35 = zext i32 %34 to i64
%36 = lshr i64 %30, %35
%37 = trunc i64 %36 to i8
%38 = load i8*, i8** %3
%39 = load i32, i32* %6
%40 = sub i32 %39, 1
%41 = zext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %38, i64 %41
store i8 %37, i8* %42
br label %43
43: ; preds = %29
%44 = load i32, i32* %6
%45 = add i32 %44, 1
store i32 %45, i32* %6
br label %25
46: ; preds = %25
%47 = load i32, i32* %5
%48 = trunc i32 %47 to i8
%49 = load i8*, i8** %3
%50 = load i32, i32* %5
%51 = zext i32 %50 to i64
%52 = getelementptr inbounds i8, i8* %49, i64 %51
store i8 %48, i8* %52
%53 = load i32, i32* %5
%54 = add i32 %53, 1
ret i32 %54
}

LLVM IR (-O2):
define i32 @right_encode(i8* nocapture writeonly %0, i64 %1) {
%3 = icmp eq i64 %1, 0
br i1 %3, label %154, label %58
4: ; preds = %70, %68, %66, %64, %62, %60, %58
%5 = phi i32 [ 2, %58 ], [ 3, %60 ], [ 4, %62 ], [ 5, %64 ], [ 6, %66 ], [ 7, %68 ], [ %72, %70 ]
%6 = phi i32 [ 1, %58 ], [ 2, %60 ], [ 3, %62 ], [ 4, %64 ], [ 5, %66 ], [ 6, %68 ], [ %73, %70 ]
%7 = zext i32 %5 to i64
%8 = add nsw i64 %7, -1
%9 = icmp ult i64 %8, 16
br i1 %9, label %74, label %10
10: ; preds = %4
%11 = and i64 %8, -16
%12 = or i64 %11, 1
%13 = insertelement <16 x i32> poison, i32 %6, i64 0
%14 = shufflevector <16 x i32> %13, <16 x i32> poison, <16 x i32> zeroinitializer
%15 = insertelement <16 x i64> poison, i64 %1, i64 0
%16 = shufflevector <16 x i64> %15, <16 x i64> poison, <16 x i32> zeroinitializer
%17 = add nuw nsw i64 %11, -16
%18 = lshr exact i64 %17, 4
%19 = add nuw nsw i64 %18, 1
%20 = and i64 %19, 1
%21 = and i64 %19, 2305843009213693950
br label %22
22: ; preds = %22, %10
%23 = phi i64 [ 0, %10 ], [ %42, %22 ]
%24 = phi <16 x i32> [ <i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16>, %10 ], [ %43, %22 ]
%25 = phi i64 [ 0, %10 ], [ %44, %22 ]
%26 = sub <16 x i32> %14, %24
%27 = shl <16 x i32> %26, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
%28 = zext <16 x i32> %27 to <16 x i64>
%29 = lshr <16 x i64> %16, %28
%30 = trunc <16 x i64> %29 to <16 x i8>
%31 = getelementptr inbounds i8, i8* %0, i64 %23
%32 = bitcast i8* %31 to <16 x i8>*
store <16 x i8> %30, <16 x i8>* %32
%33 = or i64 %23, 16
%34 = add <16 x i32> %24, <i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16, i32 16>
%35 = sub <16 x i32> %14, %34
%36 = shl <16 x i32> %35, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
%37 = zext <16 x i32> %36 to <16 x i64>
%38 = lshr <16 x i64> %16, %37
%39 = trunc <16 x i64> %38 to <16 x i8>
%40 = getelementptr inbounds i8, i8* %0, i64 %33
%41 = bitcast i8* %40 to <16 x i8>*
store <16 x i8> %39, <16 x i8>* %41
%42 = add nuw i64 %23, 32
%43 = add <16 x i32> %24, <i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32, i32 32>
%44 = add nuw nsw i64 %25, 2
%45 = icmp eq i64 %44, %21
br i1 %45, label %46, label %22
46: ; preds = %22
%47 = icmp eq i64 %20, 0
br i1 %47, label %56, label %48
48: ; preds = %46
%49 = sub <16 x i32> %14, %43
%50 = shl <16 x i32> %49, <i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3, i32 3>
%51 = zext <16 x i32> %50 to <16 x i64>
%52 = lshr <16 x i64> %16, %51
%53 = trunc <16 x i64> %52 to <16 x i8>
%54 = getelementptr inbounds i8, i8* %0, i64 %42
%55 = bitcast i8* %54 to <16 x i8>*
store <16 x i8> %53, <16 x i8>* %55
br label %56
56: ; preds = %46, %48
%57 = icmp eq i64 %8, %11
br i1 %57, label %154, label %74
58: ; preds = %2
%59 = icmp ugt i64 %1, 255
br i1 %59, label %60, label %4
60: ; preds = %58
%61 = icmp ugt i64 %1, 65535
br i1 %61, label %62, label %4
62: ; preds = %60
%63 = icmp ugt i64 %1, 16777215
br i1 %63, label %64, label %4
64: ; preds = %62
%65 = icmp ugt i64 %1, 4294967295
br i1 %65, label %66, label %4
66: ; preds = %64
%67 = icmp ugt i64 %1, 1099511627775
br i1 %67, label %68, label %4
68: ; preds = %66
%69 = icmp ugt i64 %1, 281474976710655
br i1 %69, label %70, label %4
70: ; preds = %68
%71 = icmp ugt i64 %1, 72057594037927935
%72 = select i1 %71, i32 9, i32 8
%73 = select i1 %71, i32 8, i32 7
br label %4
74: ; preds = %56, %4
%75 = phi i64 [ 1, %4 ], [ %12, %56 ]
%76 = trunc i64 %75 to i32
%77 = sub i32 %6, %76
%78 = shl i32 %77, 3
%79 = zext i32 %78 to i64
%80 = lshr i64 %1, %79
%81 = trunc i64 %80 to i8
%82 = add nsw i64 %75, -1
%83 = getelementptr inbounds i8, i8* %0, i64 %82
store i8 %81, i8* %83
%84 = add nuw nsw i64 %75, 1
%85 = icmp eq i64 %84, %7
br i1 %85, label %154, label %86
86: ; preds = %74
%87 = trunc i64 %84 to i32
%88 = sub i32 %6, %87
%89 = shl i32 %88, 3
%90 = zext i32 %89 to i64
%91 = lshr i64 %1, %90
%92 = trunc i64 %91 to i8
%93 = getelementptr inbounds i8, i8* %0, i64 %75
store i8 %92, i8* %93
%94 = add nuw nsw i64 %75, 2
%95 = icmp eq i64 %94, %7
br i1 %95, label %154, label %96
96: ; preds = %86
%97 = trunc i64 %94 to i32
%98 = sub i32 %6, %97
%99 = shl i32 %98, 3
%100 = zext i32 %99 to i64
%101 = lshr i64 %1, %100
%102 = trunc i64 %101 to i8
%103 = getelementptr inbounds i8, i8* %0, i64 %84
store i8 %102, i8* %103
%104 = add nuw nsw i64 %75, 3
%105 = icmp eq i64 %104, %7
br i1 %105, label %154, label %106
106: ; preds = %96
%107 = trunc i64 %104 to i32
%108 = sub i32 %6, %107
%109 = shl i32 %108, 3
%110 = zext i32 %109 to i64
%111 = lshr i64 %1, %110
%112 = trunc i64 %111 to i8
%113 = getelementptr inbounds i8, i8* %0, i64 %94
store i8 %112, i8* %113
%114 = add nuw nsw i64 %75, 4
%115 = icmp eq i64 %114, %7
br i1 %115, label %154, label %116
116: ; preds = %106
%117 = trunc i64 %114 to i32
%118 = sub i32 %6, %117
%119 = shl i32 %118, 3
%120 = zext i32 %119 to i64
%121 = lshr i64 %1, %120
%122 = trunc i64 %121 to i8
%123 = getelementptr inbounds i8, i8* %0, i64 %104
store i8 %122, i8* %123
%124 = add nuw nsw i64 %75, 5
%125 = icmp eq i64 %124, %7
br i1 %125, label %154, label %126
126: ; preds = %116
%127 = trunc i64 %124 to i32
%128 = sub i32 %6, %127
%129 = shl i32 %128, 3
%130 = zext i32 %129 to i64
%131 = lshr i64 %1, %130
%132 = trunc i64 %131 to i8
%133 = getelementptr inbounds i8, i8* %0, i64 %114
store i8 %132, i8* %133
%134 = add nuw nsw i64 %75, 6
%135 = icmp eq i64 %134, %7
br i1 %135, label %154, label %136
136: ; preds = %126
%137 = trunc i64 %134 to i32
%138 = sub i32 %6, %137
%139 = shl i32 %138, 3
%140 = zext i32 %139 to i64
%141 = lshr i64 %1, %140
%142 = trunc i64 %141 to i8
%143 = getelementptr inbounds i8, i8* %0, i64 %124
store i8 %142, i8* %143
%144 = add nuw nsw i64 %75, 7
%145 = icmp eq i64 %144, %7
br i1 %145, label %154, label %146
146: ; preds = %136
%147 = trunc i64 %144 to i32
%148 = sub i32 %6, %147
%149 = shl i32 %148, 3
%150 = zext i32 %149 to i64
%151 = lshr i64 %1, %150
%152 = trunc i64 %151 to i8
%153 = getelementptr inbounds i8, i8* %0, i64 %134
store i8 %152, i8* %153
br label %154
154: ; preds = %74, %86, %96, %106, %116, %126, %136, %146, %56, %2
%155 = phi i32 [ 0, %2 ], [ %6, %56 ], [ %6, %146 ], [ %6, %136 ], [ %6, %126 ], [ %6, %116 ], [ %6, %106 ], [ %6, %96 ], [ %6, %86 ], [ %6, %74 ]
%156 = phi i32 [ 1, %2 ], [ %5, %56 ], [ %5, %146 ], [ %5, %136 ], [ %5, %126 ], [ %5, %116 ], [ %5, %106 ], [ %5, %96 ], [ %5, %86 ], [ %5, %74 ]
%157 = zext i32 %155 to i64
%158 = trunc i32 %155 to i8
%159 = getelementptr inbounds i8, i8* %0, i64 %157
store i8 %158, i8* %159
ret i32 %156
}