#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 */
typedef int uint64_t;

/* Variables and functions */
char *malloc(int);
char *unpack(int n, uint64_t v) {
  char *buf = malloc(n);
  int index = 0;
  for (int i = n; i > 0; --i) {
    buf[index++] = (char)((v >> (8 * i)) & 0xff);
  }
  return buf;
}


x86 assembly (clang, -O0):
<unpack>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    -0x4(%rbp),%edi
call   1030 <malloc@plt>
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x0,-0x18(%rbp)
jle    1176 <unpack+0x66>
mov    -0x8(%rbp),%eax
mov    -0x18(%rbp),%ecx
shl    $0x3,%ecx
sar    %cl,%eax
and    $0xff,%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x14(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
jmp    1137 <unpack+0x27>
mov    -0x10(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<unpack>:
push   %rbp
push   %rbx
sub    $0x38,%rsp
mov    %esi,%ebx
mov    %edi,%ebp
call   1030 <malloc@plt>
test   %ebp,%ebp
jle    19e6 <unpack+0x8d6>
mov    %ebp,%edx
cmp    $0x10,%ebp
jae    1135 <unpack+0x25>
xor    %esi,%esi
jmp    19c5 <unpack+0x8b5>
mov    %edx,%esi
movd   %ebp,%xmm0
pshufd $0x0,%xmm0,%xmm10
movdqa 0xeb6(%rip),%xmm12
paddd  %xmm10,%xmm12
movdqa 0xeb8(%rip),%xmm13
paddd  %xmm10,%xmm13
movdqa 0xeba(%rip),%xmm14
paddd  %xmm10,%xmm14
paddd  0xebc(%rip),%xmm10
and    $0xfffffff0,%esi
movd   %ebx,%xmm0
pshufd $0x0,%xmm0,%xmm11
lea    -0x10(%rsi),%rdi
mov    %rdi,%rcx
shr    $0x4,%rcx
add    $0x1,%rcx
mov    %ecx,%r8d
and    $0x3,%r8d
cmp    $0x30,%rdi
jae    11a4 <unpack+0x94>
xor    %edi,%edi
jmp    17fe <unpack+0x6ee>
and    $0xfffffffffffffffc,%rcx
xor    %edi,%edi
movaps 0xe8e(%rip),%xmm15
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqa %xmm14,0x10(%rsp)
movdqa %xmm13,(%rsp)
movdqa %xmm12,0x20(%rsp)
movdqa %xmm10,%xmm9
pslld  $0x3,%xmm9
movdqa %xmm14,%xmm3
pslld  $0x3,%xmm3
movdqa (%rsp),%xmm14
movdqa %xmm12,%xmm1
pslld  $0x3,%xmm1
pshuflw $0xfe,%xmm1,%xmm0
movdqa %xmm11,%xmm4
psrad  %xmm0,%xmm4
pslld  $0x3,%xmm14
pshuflw $0x54,%xmm1,%xmm0
movdqa %xmm11,%xmm5
psrad  %xmm0,%xmm5
pshufd $0xee,%xmm1,%xmm0
pshuflw $0xfe,%xmm0,%xmm8
movdqa %xmm11,%xmm7
psrad  %xmm8,%xmm7
punpcklqdq %xmm4,%xmm5
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm11,%xmm4
psrad  %xmm0,%xmm4
punpckhqdq %xmm7,%xmm4
pshuflw $0xfe,%xmm14,%xmm0
movdqa %xmm11,%xmm7
psrad  %xmm0,%xmm7
shufps $0xcc,%xmm4,%xmm5
pshuflw $0x54,%xmm14,%xmm4
movdqa %xmm11,%xmm0
psrad  %xmm4,%xmm0
pshufd $0xee,%xmm14,%xmm4
pshuflw $0xfe,%xmm4,%xmm8
movdqa %xmm11,%xmm2
psrad  %xmm8,%xmm2
punpcklqdq %xmm7,%xmm0
pshuflw $0x54,%xmm4,%xmm4
movdqa %xmm11,%xmm7
psrad  %xmm4,%xmm7
punpckhqdq %xmm2,%xmm7
pshuflw $0xfe,%xmm3,%xmm8
movdqa %xmm11,%xmm4
psrad  %xmm8,%xmm4
shufps $0xcc,%xmm7,%xmm0
pshuflw $0x54,%xmm3,%xmm8
movdqa %xmm11,%xmm7
psrad  %xmm8,%xmm7
pshufd $0xee,%xmm3,%xmm8
pshuflw $0xfe,%xmm8,%xmm2
movdqa %xmm11,%xmm12
psrad  %xmm2,%xmm12
punpcklqdq %xmm4,%xmm7
pshuflw $0x54,%xmm8,%xmm4
movdqa %xmm11,%xmm2
psrad  %xmm4,%xmm2
punpckhqdq %xmm12,%xmm2
pshuflw $0xfe,%xmm9,%xmm8
movdqa %xmm11,%xmm4
psrad  %xmm8,%xmm4
shufps $0xcc,%xmm2,%xmm7
pshuflw $0x54,%xmm9,%xmm8
movdqa %xmm11,%xmm2
psrad  %xmm8,%xmm2
pshufd $0xee,%xmm9,%xmm8
pshuflw $0xfe,%xmm8,%xmm12
movdqa %xmm11,%xmm13
psrad  %xmm12,%xmm13
punpcklqdq %xmm4,%xmm2
pshuflw $0x54,%xmm8,%xmm4
movdqa %xmm11,%xmm6
psrad  %xmm4,%xmm6
punpckhqdq %xmm13,%xmm6
shufps $0xcc,%xmm6,%xmm2
andps  %xmm15,%xmm2
andps  %xmm15,%xmm7
packuswb %xmm7,%xmm2
andps  %xmm15,%xmm0
andps  %xmm15,%xmm5
packuswb %xmm5,%xmm0
packuswb %xmm0,%xmm2
movdqu %xmm2,(%rax,%rdi,1)
movdqa %xmm9,%xmm12
movdqa 0xce6(%rip),%xmm0
paddd  %xmm0,%xmm12
movdqa %xmm3,%xmm7
paddd  %xmm0,%xmm7
movdqa %xmm14,%xmm2
movdqa %xmm1,%xmm4
paddd  %xmm0,%xmm4
pshuflw $0xfe,%xmm4,%xmm5
movdqa %xmm11,%xmm6
psrad  %xmm5,%xmm6
paddd  %xmm0,%xmm2
pshuflw $0x54,%xmm4,%xmm0
movdqa %xmm11,%xmm5
psrad  %xmm0,%xmm5
pshufd $0xee,%xmm4,%xmm0
pshuflw $0xfe,%xmm0,%xmm8
movdqa %xmm11,%xmm4
psrad  %xmm8,%xmm4
punpcklqdq %xmm6,%xmm5
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm11,%xmm6
psrad  %xmm0,%xmm6
punpckhqdq %xmm4,%xmm6
pshuflw $0xfe,%xmm2,%xmm0
movdqa %xmm11,%xmm4
psrad  %xmm0,%xmm4
shufps $0xcc,%xmm6,%xmm5
pshuflw $0x54,%xmm2,%xmm0
movdqa %xmm11,%xmm8
psrad  %xmm0,%xmm8
pshufd $0xee,%xmm2,%xmm0
pshuflw $0xfe,%xmm0,%xmm2
movdqa %xmm11,%xmm6
psrad  %xmm2,%xmm6
punpcklqdq %xmm4,%xmm8
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm11,%xmm2
psrad  %xmm0,%xmm2
punpckhqdq %xmm6,%xmm2
pshuflw $0xfe,%xmm7,%xmm0
movdqa %xmm11,%xmm6
psrad  %xmm0,%xmm6
shufps $0xcc,%xmm2,%xmm8
pshuflw $0x54,%xmm7,%xmm0
movdqa %xmm11,%xmm4
psrad  %xmm0,%xmm4
pshufd $0xee,%xmm7,%xmm0
pshuflw $0xfe,%xmm0,%xmm2
movdqa %xmm11,%xmm7
psrad  %xmm2,%xmm7
punpcklqdq %xmm6,%xmm4
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm11,%xmm2
psrad  %xmm0,%xmm2
punpckhqdq %xmm7,%xmm2
pshuflw $0xfe,%xmm12,%xmm0
movdqa %xmm11,%xmm6
psrad  %xmm0,%xmm6
shufps $0xcc,%xmm2,%xmm4
pshuflw $0x54,%xmm12,%xmm0
movdqa %xmm11,%xmm2
psrad  %xmm0,%xmm2
pshufd $0xee,%xmm12,%xmm0
pshuflw $0xfe,%xmm0,%xmm12
movdqa %xmm11,%xmm7
psrad  %xmm12,%xmm7
punpcklqdq %xmm6,%xmm2
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm11,%xmm6
psrad  %xmm0,%xmm6
punpckhqdq %xmm7,%xmm6
shufps $0xcc,%xmm6,%xmm2
andps  %xmm15,%xmm2
andps  %xmm15,%xmm4
packuswb %xmm4,%xmm2
andps  %xmm15,%xmm8
andps  %xmm15,%xmm5
packuswb %xmm5,%xmm8
packuswb %xmm8,%xmm2
movdqu %xmm2,0x10(%rax,%rdi,1)
movdqa %xmm9,%xmm8
movdqa 0xb79(%rip),%xmm7
paddd  %xmm7,%xmm8
movdqa %xmm3,%xmm0
paddd  %xmm7,%xmm0
movdqa %xmm14,%xmm2
movdqa %xmm1,%xmm4
paddd  %xmm7,%xmm4
pshuflw $0xfe,%xmm4,%xmm5
movdqa %xmm11,%xmm6
psrad  %xmm5,%xmm6
paddd  %xmm7,%xmm2
pshuflw $0x54,%xmm4,%xmm7
movdqa %xmm11,%xmm13
psrad  %xmm7,%xmm13
pshufd $0xee,%xmm4,%xmm4
pshuflw $0xfe,%xmm4,%xmm12
movdqa %xmm11,%xmm7
psrad  %xmm12,%xmm7
punpcklqdq %xmm6,%xmm13
pshuflw $0x54,%xmm4,%xmm4
movdqa %xmm11,%xmm6
psrad  %xmm4,%xmm6
punpckhqdq %xmm7,%xmm6
pshuflw $0xfe,%xmm2,%xmm7
movdqa %xmm11,%xmm4
psrad  %xmm7,%xmm4
shufps $0xcc,%xmm6,%xmm13
pshuflw $0x54,%xmm2,%xmm6
movdqa %xmm11,%xmm7
psrad  %xmm6,%xmm7
pshufd $0xee,%xmm2,%xmm2
pshuflw $0xfe,%xmm2,%xmm12
movdqa %xmm11,%xmm6
psrad  %xmm12,%xmm6
punpcklqdq %xmm4,%xmm7
pshuflw $0x54,%xmm2,%xmm2
movdqa %xmm11,%xmm4
psrad  %xmm2,%xmm4
punpckhqdq %xmm6,%xmm4
pshuflw $0xfe,%xmm0,%xmm2
movdqa %xmm11,%xmm6
psrad  %xmm2,%xmm6
shufps $0xcc,%xmm4,%xmm7
pshuflw $0x54,%xmm0,%xmm2
movdqa %xmm11,%xmm4
psrad  %xmm2,%xmm4
pshufd $0xee,%xmm0,%xmm0
pshuflw $0xfe,%xmm0,%xmm12
movdqa %xmm11,%xmm2
psrad  %xmm12,%xmm2
movdqa 0x20(%rsp),%xmm12
punpcklqdq %xmm6,%xmm4
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm11,%xmm6
psrad  %xmm0,%xmm6
punpckhqdq %xmm2,%xmm6
pshuflw $0xfe,%xmm8,%xmm0
movdqa %xmm11,%xmm2
psrad  %xmm0,%xmm2
shufps $0xcc,%xmm6,%xmm4
pshuflw $0x54,%xmm8,%xmm0
movdqa %xmm11,%xmm6
psrad  %xmm0,%xmm6
pshufd $0xee,%xmm8,%xmm0
pshuflw $0xfe,%xmm0,%xmm8
movdqa %xmm11,%xmm5
psrad  %xmm8,%xmm5
punpcklqdq %xmm2,%xmm6
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm11,%xmm2
psrad  %xmm0,%xmm2
punpckhqdq %xmm5,%xmm2
shufps $0xcc,%xmm2,%xmm6
andps  %xmm15,%xmm6
andps  %xmm15,%xmm4
packuswb %xmm4,%xmm6
andps  %xmm15,%xmm7
andps  %xmm15,%xmm13
packuswb %xmm13,%xmm7
packuswb %xmm7,%xmm6
movdqu %xmm6,0x20(%rax,%rdi,1)
movdqa 0xa07(%rip),%xmm4
paddd  %xmm4,%xmm9
paddd  %xmm4,%xmm3
paddd  %xmm4,%xmm1
pshuflw $0xfe,%xmm1,%xmm0
movdqa %xmm11,%xmm2
psrad  %xmm0,%xmm2
paddd  %xmm4,%xmm14
pshuflw $0x54,%xmm1,%xmm0
movdqa %xmm11,%xmm5
psrad  %xmm0,%xmm5
pshufd $0xee,%xmm1,%xmm0
pshuflw $0xfe,%xmm0,%xmm1
movdqa %xmm11,%xmm4
psrad  %xmm1,%xmm4
punpcklqdq %xmm2,%xmm5
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm11,%xmm1
psrad  %xmm0,%xmm1
punpckhqdq %xmm4,%xmm1
pshuflw $0xfe,%xmm14,%xmm0
movdqa %xmm11,%xmm2
psrad  %xmm0,%xmm2
shufps $0xcc,%xmm1,%xmm5
pshuflw $0x54,%xmm14,%xmm1
movdqa %xmm11,%xmm0
psrad  %xmm1,%xmm0
pshufd $0xee,%xmm14,%xmm1
movdqa 0x10(%rsp),%xmm14
movdqa (%rsp),%xmm13
pshuflw $0xfe,%xmm1,%xmm4
movdqa %xmm11,%xmm6
psrad  %xmm4,%xmm6
punpcklqdq %xmm2,%xmm0
pshuflw $0x54,%xmm1,%xmm1
movdqa %xmm11,%xmm2
psrad  %xmm1,%xmm2
punpckhqdq %xmm6,%xmm2
pshuflw $0xfe,%xmm3,%xmm1
movdqa %xmm11,%xmm4
psrad  %xmm1,%xmm4
shufps $0xcc,%xmm2,%xmm0
pshuflw $0x54,%xmm3,%xmm2
movdqa %xmm11,%xmm1
psrad  %xmm2,%xmm1
pshufd $0xee,%xmm3,%xmm2
pshuflw $0xfe,%xmm2,%xmm3
movdqa %xmm11,%xmm6
psrad  %xmm3,%xmm6
punpcklqdq %xmm4,%xmm1
pshuflw $0x54,%xmm2,%xmm2
movdqa %xmm11,%xmm3
psrad  %xmm2,%xmm3
punpckhqdq %xmm6,%xmm3
pshuflw $0xfe,%xmm9,%xmm2
movdqa %xmm11,%xmm4
psrad  %xmm2,%xmm4
shufps $0xcc,%xmm3,%xmm1
pshuflw $0x54,%xmm9,%xmm2
movdqa %xmm11,%xmm3
psrad  %xmm2,%xmm3
pshufd $0xee,%xmm9,%xmm2
pshuflw $0xfe,%xmm2,%xmm6
movdqa %xmm11,%xmm7
psrad  %xmm6,%xmm7
punpcklqdq %xmm4,%xmm3
pshuflw $0x54,%xmm2,%xmm2
movdqa %xmm11,%xmm4
psrad  %xmm2,%xmm4
punpckhqdq %xmm7,%xmm4
shufps $0xcc,%xmm4,%xmm3
andps  %xmm15,%xmm3
andps  %xmm15,%xmm1
packuswb %xmm1,%xmm3
andps  %xmm15,%xmm0
andps  %xmm15,%xmm5
packuswb %xmm5,%xmm0
packuswb %xmm0,%xmm3
movdqu %xmm3,0x30(%rax,%rdi,1)
add    $0x40,%rdi
movdqa 0x8a0(%rip),%xmm0
paddd  %xmm0,%xmm10
paddd  %xmm0,%xmm14
paddd  %xmm0,%xmm13
paddd  %xmm0,%xmm12
add    $0xfffffffffffffffc,%rcx
jne    11c0 <unpack+0xb0>
test   %r8,%r8
je     19be <unpack+0x8ae>
mov    %rax,%rcx
add    %rdi,%rcx
shl    $0x4,%r8
xor    %edi,%edi
movaps 0x825(%rip),%xmm8
movdqa 0x86c(%rip),%xmm9
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movdqa %xmm10,%xmm3
pslld  $0x3,%xmm3
movdqa %xmm14,%xmm6
pslld  $0x3,%xmm6
movdqa %xmm13,%xmm2
movdqa %xmm12,%xmm5
pslld  $0x3,%xmm5
pshuflw $0xfe,%xmm5,%xmm4
movdqa %xmm11,%xmm7
psrad  %xmm4,%xmm7
pslld  $0x3,%xmm2
pshuflw $0x54,%xmm5,%xmm0
movdqa %xmm11,%xmm4
psrad  %xmm0,%xmm4
pshufd $0xee,%xmm5,%xmm0
pshuflw $0xfe,%xmm0,%xmm5
movdqa %xmm11,%xmm1
psrad  %xmm5,%xmm1
punpcklqdq %xmm7,%xmm4
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm11,%xmm5
psrad  %xmm0,%xmm5
punpckhqdq %xmm1,%xmm5
pshuflw $0xfe,%xmm2,%xmm0
movdqa %xmm11,%xmm1
psrad  %xmm0,%xmm1
shufps $0xcc,%xmm5,%xmm4
pshuflw $0x54,%xmm2,%xmm0
movdqa %xmm11,%xmm5
psrad  %xmm0,%xmm5
pshufd $0xee,%xmm2,%xmm0
pshuflw $0xfe,%xmm0,%xmm2
movdqa %xmm11,%xmm7
psrad  %xmm2,%xmm7
punpcklqdq %xmm1,%xmm5
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm11,%xmm1
psrad  %xmm0,%xmm1
punpckhqdq %xmm7,%xmm1
pshuflw $0xfe,%xmm6,%xmm0
movdqa %xmm11,%xmm2
psrad  %xmm0,%xmm2
shufps $0xcc,%xmm1,%xmm5
pshuflw $0x54,%xmm6,%xmm0
movdqa %xmm11,%xmm7
psrad  %xmm0,%xmm7
pshufd $0xee,%xmm6,%xmm0
pshuflw $0xfe,%xmm0,%xmm1
movdqa %xmm11,%xmm6
psrad  %xmm1,%xmm6
punpcklqdq %xmm2,%xmm7
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm11,%xmm1
psrad  %xmm0,%xmm1
punpckhqdq %xmm6,%xmm1
pshuflw $0xfe,%xmm3,%xmm0
movdqa %xmm11,%xmm2
psrad  %xmm0,%xmm2
shufps $0xcc,%xmm1,%xmm7
pshuflw $0x54,%xmm3,%xmm0
movdqa %xmm11,%xmm1
psrad  %xmm0,%xmm1
pshufd $0xee,%xmm3,%xmm0
pshuflw $0xfe,%xmm0,%xmm3
movdqa %xmm11,%xmm6
psrad  %xmm3,%xmm6
punpcklqdq %xmm2,%xmm1
pshuflw $0x54,%xmm0,%xmm0
movdqa %xmm11,%xmm2
psrad  %xmm0,%xmm2
punpckhqdq %xmm6,%xmm2
shufps $0xcc,%xmm2,%xmm1
andps  %xmm8,%xmm1
andps  %xmm8,%xmm7
packuswb %xmm7,%xmm1
andps  %xmm8,%xmm5
andps  %xmm8,%xmm4
packuswb %xmm4,%xmm5
packuswb %xmm5,%xmm1
movdqu %xmm1,(%rcx,%rdi,1)
paddd  %xmm9,%xmm10
paddd  %xmm9,%xmm14
paddd  %xmm9,%xmm13
paddd  %xmm9,%xmm12
add    $0x10,%rdi
cmp    %rdi,%r8
jne    1830 <unpack+0x720>
cmp    %rdx,%rsi
je     19e6 <unpack+0x8d6>
sub    %esi,%ebp
shl    $0x3,%ebp
nopl   0x0(%rax,%rax,1)
mov    %ebx,%edi
mov    %ebp,%ecx
sar    %cl,%edi
mov    %dil,(%rax,%rsi,1)
add    $0x1,%rsi
add    $0xfffffff8,%ebp
cmp    %rsi,%rdx
jne    19d0 <unpack+0x8c0>
add    $0x38,%rsp
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define i8* @unpack(i32 %0, i32 %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32
store i32 %0, i32* %3
store i32 %1, i32* %4
%8 = load i32, i32* %3
%9 = call i8* @malloc(i32 %8)
store i8* %9, i8** %5
store i32 0, i32* %6
%10 = load i32, i32* %3
store i32 %10, i32* %7
br label %11
11: ; preds = %26, %2
%12 = load i32, i32* %7
%13 = icmp sgt i32 %12, 0
br i1 %13, label %14, label %29
14: ; preds = %11
%15 = load i32, i32* %4
%16 = load i32, i32* %7
%17 = mul nsw i32 8, %16
%18 = ashr i32 %15, %17
%19 = and i32 %18, 255
%20 = trunc i32 %19 to i8
%21 = load i8*, i8** %5
%22 = load i32, i32* %6
%23 = add nsw i32 %22, 1
store i32 %23, i32* %6
%24 = sext i32 %22 to i64
%25 = getelementptr inbounds i8, i8* %21, i64 %24
store i8 %20, i8* %25
br label %26
26: ; preds = %14
%27 = load i32, i32* %7
%28 = add nsw i32 %27, -1
store i32 %28, i32* %7
br label %11
29: ; preds = %11
%30 = load i8*, i8** %5
ret i8* %30
}

LLVM IR (-O2):
define noalias i8* @unpack(i32 %0, i32 %1) {
%3 = tail call i8* @malloc(i32 %0)
%4 = icmp sgt i32 %0, 0
br i1 %4, label %5, label %80
5: ; preds = %2
%6 = zext i32 %0 to i64
%7 = icmp ult i32 %0, 16
br i1 %7, label %77, label %8
8: ; preds = %5
%9 = and i64 %6, 4294967280
%10 = trunc i64 %9 to i32
%11 = sub i32 %0, %10
%12 = insertelement <16 x i32> poison, i32 %0, i64 0
%13 = shufflevector <16 x i32> %12, <16 x i32> poison, <16 x i32> zeroinitializer
%14 = add <16 x i32> %13, <i32 0, 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>
%15 = insertelement <16 x i32> poison, i32 %1, i64 0
%16 = shufflevector <16 x i32> %15, <16 x i32> poison, <16 x i32> zeroinitializer
%17 = add nsw i64 %9, -16
%18 = lshr exact i64 %17, 4
%19 = add nuw nsw i64 %18, 1
%20 = and i64 %19, 3
%21 = icmp ult i64 %17, 48
br i1 %21, label %58, label %22
22: ; preds = %8
%23 = and i64 %19, 2305843009213693948
br label %24
24: ; preds = %24, %22
%25 = phi i64 [ 0, %22 ], [ %54, %24 ]
%26 = phi <16 x i32> [ %14, %22 ], [ %55, %24 ]
%27 = phi i64 [ 0, %22 ], [ %56, %24 ]
%28 = shl nsw <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>
%29 = ashr <16 x i32> %16, %28
%30 = trunc <16 x i32> %29 to <16 x i8>
%31 = getelementptr inbounds i8, i8* %3, i64 %25
%32 = bitcast i8* %31 to <16 x i8>*
store <16 x i8> %30, <16 x i8>* %32
%33 = or i64 %25, 16
%34 = 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>
%35 = add <16 x i32> %34, <i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128, i32 -128>
%36 = ashr <16 x i32> %16, %35
%37 = trunc <16 x i32> %36 to <16 x i8>
%38 = getelementptr inbounds i8, i8* %3, i64 %33
%39 = bitcast i8* %38 to <16 x i8>*
store <16 x i8> %37, <16 x i8>* %39
%40 = or i64 %25, 32
%41 = 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>
%42 = add <16 x i32> %41, <i32 -256, i32 -256, i32 -256, i32 -256, i32 -256, i32 -256, i32 -256, i32 -256, i32 -256, i32 -256, i32 -256, i32 -256, i32 -256, i32 -256, i32 -256, i32 -256>
%43 = ashr <16 x i32> %16, %42
%44 = trunc <16 x i32> %43 to <16 x i8>
%45 = getelementptr inbounds i8, i8* %3, i64 %40
%46 = bitcast i8* %45 to <16 x i8>*
store <16 x i8> %44, <16 x i8>* %46
%47 = or i64 %25, 48
%48 = 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>
%49 = add <16 x i32> %48, <i32 -384, i32 -384, i32 -384, i32 -384, i32 -384, i32 -384, i32 -384, i32 -384, i32 -384, i32 -384, i32 -384, i32 -384, i32 -384, i32 -384, i32 -384, i32 -384>
%50 = ashr <16 x i32> %16, %49
%51 = trunc <16 x i32> %50 to <16 x i8>
%52 = getelementptr inbounds i8, i8* %3, i64 %47
%53 = bitcast i8* %52 to <16 x i8>*
store <16 x i8> %51, <16 x i8>* %53
%54 = add nuw i64 %25, 64
%55 = add <16 x i32> %26, <i32 -64, i32 -64, i32 -64, i32 -64, i32 -64, i32 -64, i32 -64, i32 -64, i32 -64, i32 -64, i32 -64, i32 -64, i32 -64, i32 -64, i32 -64, i32 -64>
%56 = add i64 %27, 4
%57 = icmp eq i64 %56, %23
br i1 %57, label %58, label %24
58: ; preds = %24, %8
%59 = phi i64 [ 0, %8 ], [ %54, %24 ]
%60 = phi <16 x i32> [ %14, %8 ], [ %55, %24 ]
%61 = icmp eq i64 %20, 0
br i1 %61, label %75, label %62
62: ; preds = %58, %62
%63 = phi i64 [ %71, %62 ], [ %59, %58 ]
%64 = phi <16 x i32> [ %72, %62 ], [ %60, %58 ]
%65 = phi i64 [ %73, %62 ], [ 0, %58 ]
%66 = shl nsw <16 x i32> %64, <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>
%67 = ashr <16 x i32> %16, %66
%68 = trunc <16 x i32> %67 to <16 x i8>
%69 = getelementptr inbounds i8, i8* %3, i64 %63
%70 = bitcast i8* %69 to <16 x i8>*
store <16 x i8> %68, <16 x i8>* %70
%71 = add nuw i64 %63, 16
%72 = add <16 x i32> %64, <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>
%73 = add i64 %65, 1
%74 = icmp eq i64 %73, %20
br i1 %74, label %75, label %62
75: ; preds = %62, %58
%76 = icmp eq i64 %9, %6
br i1 %76, label %80, label %77
77: ; preds = %5, %75
%78 = phi i64 [ 0, %5 ], [ %9, %75 ]
%79 = phi i32 [ %0, %5 ], [ %11, %75 ]
br label %81
80: ; preds = %81, %75, %2
ret i8* %3
81: ; preds = %77, %81
%82 = phi i64 [ %87, %81 ], [ %78, %77 ]
%83 = phi i32 [ %89, %81 ], [ %79, %77 ]
%84 = shl nsw i32 %83, 3
%85 = ashr i32 %1, %84
%86 = trunc i32 %85 to i8
%87 = add nuw nsw i64 %82, 1
%88 = getelementptr inbounds i8, i8* %3, i64 %82
store i8 %86, i8* %88
%89 = add nsw i32 %83, -1
%90 = icmp eq i64 %87, %6
br i1 %90, label %80, label %81
}