void mangle(const unsigned char *key, unsigned char *ret_key, int nbytes) {
  unsigned long long new_key = 0;
  int i;
  for (i = 0; i < nbytes; ++i) {
    new_key |= key[nbytes - i - 1] << (i * 8);
  }
  new_key = (new_key * 2083697005) & (0xffffffff);
  for (i = 0; i < nbytes; ++i) {
    ret_key[i] = (new_key >> (i * 8)) & 0xff;
  }
}


x86 assembly (clang, -O0):
<mangle>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movq   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    115e <mangle+0x5e>
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
sub    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x24(%rbp),%ecx
shl    $0x3,%ecx
shl    %cl,%eax
cltq
or     -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    111e <mangle+0x1e>
imul   $0x7c32b16d,-0x20(%rbp),%rax
7c
movabs $0xffffffff,%rcx
and    %rcx,%rax
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11ba <mangle+0xba>
mov    -0x20(%rbp),%rax
mov    -0x24(%rbp),%ecx
shl    $0x3,%ecx
mov    %ecx,%ecx
shr    %cl,%rax
and    $0xff,%rax
mov    %al,%dl
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    117e <mangle+0x7e>
pop    %rbp
ret

x86 assembly (clang, -O2):
<mangle>:
push   %r15
push   %r14
push   %rbx
sub    $0x50,%rsp
test   %edx,%edx
jle    184b <mangle+0x74b>
mov    %edx,%r9d
cmp    $0x1,%edx
jne    1121 <mangle+0x21>
xor    %r8d,%r8d
xor    %r15d,%r15d
jmp    1174 <mangle+0x74>
mov    %r9d,%r11d
and    $0xfffffffe,%r11d
lea    -0x2(%rdx),%ebx
mov    $0x8,%r10d
xor    %r8d,%r8d
xor    %r15d,%r15d
nopw   0x0(%rax,%rax,1)
lea    0x1(%rbx),%ecx
movslq %ecx,%rcx
movzbl (%rdi,%rcx,1),%r14d
lea    -0x8(%r10),%ecx
shl    %cl,%r14d
movslq %ebx,%rbx
movzbl (%rdi,%rbx,1),%eax
mov    %r10d,%ecx
shl    %cl,%eax
or     %rax,%r15
or     %r14,%r15
add    $0x2,%r8
add    $0xfffffffe,%ebx
add    $0x10,%r10d
cmp    %r8,%r11
jne    1140 <mangle+0x40>
test   $0x1,%r9b
je     1193 <mangle+0x93>
mov    %r8d,%eax
not    %eax
add    %edx,%eax
cltq
movzbl (%rdi,%rax,1),%eax
shl    $0x3,%r8d
mov    %r8d,%ecx
shl    %cl,%eax
or     %rax,%r15
test   %edx,%edx
jle    184b <mangle+0x74b>
imul   $0x7c32b16d,%r15d,%ebx
cmp    $0x10,%edx
jae    11ae <mangle+0xae>
xor    %edx,%edx
jmp    1819 <mangle+0x719>
mov    %r9d,%edx
and    $0xfffffff0,%edx
movq   %rbx,%xmm0
pshufd $0x44,%xmm0,%xmm8
lea    -0x10(%rdx),%rcx
mov    %rcx,%r8
shr    $0x4,%r8
add    $0x1,%r8
test   %rcx,%rcx
je     1855 <mangle+0x755>
mov    %r8,%rdi
and    $0xfffffffffffffffe,%rdi
movdqa 0xe9a(%rip),%xmm2
movdqa 0xea2(%rip),%xmm3
movdqa 0xea9(%rip),%xmm11
movdqa 0xeb0(%rip),%xmm9
movdqa 0xeb8(%rip),%xmm6
movdqa 0xec0(%rip),%xmm0
movdqa 0xec7(%rip),%xmm15
movdqa 0xecf(%rip),%xmm7
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movdqa %xmm7,-0x70(%rsp)
movdqa %xmm2,-0x80(%rsp)
movdqa %xmm3,-0x10(%rsp)
movdqa %xmm11,(%rsp)
movdqa %xmm9,0x10(%rsp)
movdqa %xmm6,0x20(%rsp)
movdqa %xmm0,0x30(%rsp)
movdqa %xmm15,0x40(%rsp)
movdqa -0x80(%rsp),%xmm5
psllq  $0x3,%xmm5
psllq  $0x3,%xmm3
movdqa %xmm3,%xmm1
movdqa %xmm3,-0x60(%rsp)
psllq  $0x3,%xmm11
movdqa %xmm11,%xmm3
movdqa %xmm11,-0x50(%rsp)
psllq  $0x3,%xmm9
movdqa %xmm9,%xmm2
movdqa %xmm9,-0x40(%rsp)
psllq  $0x3,%xmm6
movdqa %xmm6,%xmm10
movdqa %xmm6,-0x30(%rsp)
movdqa %xmm0,%xmm9
psllq  $0x3,%xmm9
movdqa %xmm9,-0x20(%rsp)
movdqa 0xe36(%rip),%xmm7
pand   %xmm7,%xmm9
pand   %xmm7,%xmm10
pand   %xmm7,%xmm2
pand   %xmm7,%xmm1
movdqa %xmm5,%xmm0
pand   %xmm7,%xmm0
movdqa %xmm8,%xmm4
psrlq  %xmm0,%xmm4
pshufd $0xee,%xmm0,%xmm13
movdqa %xmm8,%xmm0
psrlq  %xmm13,%xmm0
movdqa %xmm8,%xmm13
psrlq  %xmm1,%xmm13
pand   %xmm7,%xmm3
pshufd $0xee,%xmm1,%xmm11
movdqa %xmm8,%xmm1
psrlq  %xmm11,%xmm1
movsd  %xmm4,%xmm0
movdqa %xmm8,%xmm4
psrlq  %xmm3,%xmm4
pshufd $0xee,%xmm3,%xmm11
movdqa %xmm8,%xmm3
psrlq  %xmm11,%xmm3
movdqa %xmm8,%xmm11
psrlq  %xmm2,%xmm11
movsd  %xmm13,%xmm1
pshufd $0xee,%xmm2,%xmm13
movdqa %xmm8,%xmm2
psrlq  %xmm13,%xmm2
movsd  %xmm4,%xmm3
movdqa %xmm8,%xmm13
psrlq  %xmm10,%xmm13
pshufd $0xee,%xmm10,%xmm10
movdqa %xmm8,%xmm4
psrlq  %xmm10,%xmm4
movdqa %xmm8,%xmm14
psrlq  %xmm9,%xmm14
pshufd $0xee,%xmm9,%xmm9
movdqa %xmm8,%xmm12
psrlq  %xmm9,%xmm12
movdqa %xmm15,%xmm10
psllq  $0x3,%xmm10
movsd  %xmm11,%xmm2
movdqa %xmm10,%xmm6
pand   %xmm7,%xmm6
movdqa %xmm8,%xmm11
psrlq  %xmm6,%xmm11
movsd  %xmm13,%xmm4
pshufd $0xee,%xmm6,%xmm6
movdqa %xmm8,%xmm15
psrlq  %xmm6,%xmm15
movdqa -0x70(%rsp),%xmm9
psllq  $0x3,%xmm9
movdqa %xmm9,%xmm6
pand   %xmm7,%xmm6
movdqa %xmm8,%xmm7
psrlq  %xmm6,%xmm7
movsd  %xmm14,%xmm12
pshufd $0xee,%xmm6,%xmm6
movdqa %xmm8,%xmm13
psrlq  %xmm6,%xmm13
movsd  %xmm11,%xmm15
movsd  %xmm7,%xmm13
movapd 0xd05(%rip),%xmm6
andpd  %xmm6,%xmm13
andpd  %xmm6,%xmm15
packuswb %xmm15,%xmm13
andpd  %xmm6,%xmm12
andpd  %xmm6,%xmm4
packuswb %xmm4,%xmm12
packuswb %xmm12,%xmm13
andpd  %xmm6,%xmm2
andpd  %xmm6,%xmm3
packuswb %xmm3,%xmm2
andpd  %xmm6,%xmm1
andpd  %xmm6,%xmm0
movapd %xmm6,%xmm15
packuswb %xmm0,%xmm1
packuswb %xmm1,%xmm2
packuswb %xmm2,%xmm13
movdqu %xmm13,(%rsi,%rcx,1)
movdqa 0xcbf(%rip),%xmm0
paddq  %xmm0,%xmm5
movdqa -0x60(%rsp),%xmm3
paddq  %xmm0,%xmm3
movdqa -0x50(%rsp),%xmm6
paddq  %xmm0,%xmm6
movdqa -0x40(%rsp),%xmm7
paddq  %xmm0,%xmm7
movdqa -0x30(%rsp),%xmm1
paddq  %xmm0,%xmm1
movdqa -0x20(%rsp),%xmm11
paddq  %xmm0,%xmm11
paddq  %xmm0,%xmm10
paddq  %xmm0,%xmm9
movdqa 0xc55(%rip),%xmm2
pand   %xmm2,%xmm9
pand   %xmm2,%xmm10
pand   %xmm2,%xmm11
pand   %xmm2,%xmm1
movdqa %xmm1,%xmm0
pand   %xmm2,%xmm7
pand   %xmm2,%xmm3
pand   %xmm2,%xmm5
movdqa %xmm2,%xmm13
movdqa %xmm8,%xmm2
psrlq  %xmm5,%xmm2
pshufd $0xee,%xmm5,%xmm1
movdqa %xmm8,%xmm12
psrlq  %xmm1,%xmm12
movdqa %xmm8,%xmm4
psrlq  %xmm3,%xmm4
pand   %xmm13,%xmm6
pshufd $0xee,%xmm3,%xmm3
movdqa %xmm8,%xmm1
psrlq  %xmm3,%xmm1
movsd  %xmm2,%xmm12
movdqa %xmm8,%xmm5
psrlq  %xmm6,%xmm5
pshufd $0xee,%xmm6,%xmm2
movdqa %xmm8,%xmm13
psrlq  %xmm2,%xmm13
movdqa %xmm8,%xmm6
movdqa %xmm7,%xmm2
psrlq  %xmm7,%xmm6
movsd  %xmm4,%xmm1
pshufd $0xee,%xmm7,%xmm4
movdqa %xmm8,%xmm2
psrlq  %xmm4,%xmm2
movsd  %xmm5,%xmm13
movdqa %xmm8,%xmm5
psrlq  %xmm0,%xmm5
pshufd $0xee,%xmm0,%xmm7
movdqa %xmm8,%xmm4
psrlq  %xmm7,%xmm4
movdqa %xmm8,%xmm14
movdqa %xmm11,%xmm0
psrlq  %xmm11,%xmm14
movsd  %xmm6,%xmm2
pshufd $0xee,%xmm11,%xmm11
movdqa %xmm8,%xmm6
psrlq  %xmm11,%xmm6
movdqa (%rsp),%xmm11
movsd  %xmm5,%xmm4
movdqa %xmm8,%xmm0
psrlq  %xmm10,%xmm0
pshufd $0xee,%xmm10,%xmm5
movdqa %xmm8,%xmm3
psrlq  %xmm5,%xmm3
movdqa %xmm8,%xmm7
psrlq  %xmm9,%xmm7
movsd  %xmm14,%xmm6
pshufd $0xee,%xmm9,%xmm9
movdqa %xmm8,%xmm5
psrlq  %xmm9,%xmm5
movdqa 0x10(%rsp),%xmm9
movsd  %xmm0,%xmm3
movdqa 0x30(%rsp),%xmm0
movsd  %xmm7,%xmm5
movdqa -0x70(%rsp),%xmm7
andpd  %xmm15,%xmm5
andpd  %xmm15,%xmm3
packuswb %xmm3,%xmm5
movdqa -0x10(%rsp),%xmm3
andpd  %xmm15,%xmm6
andpd  %xmm15,%xmm4
packuswb %xmm4,%xmm6
packuswb %xmm6,%xmm5
movdqa 0x20(%rsp),%xmm6
andpd  %xmm15,%xmm2
andpd  %xmm15,%xmm13
packuswb %xmm13,%xmm2
andpd  %xmm15,%xmm1
andpd  %xmm15,%xmm12
packuswb %xmm12,%xmm1
packuswb %xmm1,%xmm2
packuswb %xmm2,%xmm5
movdqu %xmm5,0x10(%rsi,%rcx,1)
movdqa -0x80(%rsp),%xmm2
add    $0x20,%rcx
movdqa 0xae7(%rip),%xmm1
paddq  %xmm1,%xmm7
movdqa 0x40(%rsp),%xmm15
paddq  %xmm1,%xmm15
paddq  %xmm1,%xmm0
paddq  %xmm1,%xmm6
paddq  %xmm1,%xmm9
paddq  %xmm1,%xmm11
paddq  %xmm1,%xmm3
paddq  %xmm1,%xmm2
add    $0xfffffffffffffffe,%rdi
jne    1230 <mangle+0x130>
psllq  $0x3,%xmm2
psllq  $0x3,%xmm3
psllq  $0x3,%xmm11
psllq  $0x3,%xmm9
psllq  $0x3,%xmm6
psllq  $0x3,%xmm0
movdqa %xmm15,%xmm12
psllq  $0x3,%xmm12
psllq  $0x3,%xmm7
movdqa 0xa4b(%rip),%xmm1
pand   %xmm1,%xmm7
pand   %xmm1,%xmm12
pand   %xmm1,%xmm0
pand   %xmm1,%xmm6
pand   %xmm1,%xmm9
pand   %xmm1,%xmm11
pand   %xmm1,%xmm3
pand   %xmm1,%xmm2
test   $0x1,%r8b
je     1814 <mangle+0x714>
movdqa %xmm8,%xmm1
psrlq  %xmm2,%xmm1
pshufd $0xee,%xmm2,%xmm2
movdqa %xmm8,%xmm10
psrlq  %xmm2,%xmm10
movsd  %xmm1,%xmm10
movdqa %xmm8,%xmm2
psrlq  %xmm3,%xmm2
pshufd $0xee,%xmm3,%xmm3
movdqa %xmm8,%xmm1
psrlq  %xmm3,%xmm1
movdqa %xmm8,%xmm4
psrlq  %xmm11,%xmm4
movsd  %xmm2,%xmm1
pshufd $0xee,%xmm11,%xmm2
movdqa %xmm8,%xmm3
psrlq  %xmm2,%xmm3
movsd  %xmm4,%xmm3
movdqa %xmm8,%xmm4
psrlq  %xmm9,%xmm4
pshufd $0xee,%xmm9,%xmm5
movdqa %xmm8,%xmm2
psrlq  %xmm5,%xmm2
movdqa %xmm8,%xmm5
psrlq  %xmm6,%xmm5
movsd  %xmm4,%xmm2
pshufd $0xee,%xmm6,%xmm6
movdqa %xmm8,%xmm4
psrlq  %xmm6,%xmm4
movsd  %xmm5,%xmm4
movdqa %xmm8,%xmm5
psrlq  %xmm0,%xmm5
pshufd $0xee,%xmm0,%xmm6
movdqa %xmm7,%xmm0
movdqa %xmm8,%xmm7
psrlq  %xmm6,%xmm7
movdqa %xmm8,%xmm6
psrlq  %xmm12,%xmm6
movsd  %xmm5,%xmm7
pshufd $0xee,%xmm12,%xmm9
movdqa %xmm8,%xmm5
psrlq  %xmm9,%xmm5
movsd  %xmm6,%xmm5
movdqa %xmm8,%xmm6
psrlq  %xmm0,%xmm6
pshufd $0xee,%xmm0,%xmm0
psrlq  %xmm0,%xmm8
movsd  %xmm6,%xmm8
movapd 0x944(%rip),%xmm0
andpd  %xmm0,%xmm8
andpd  %xmm0,%xmm5
packuswb %xmm5,%xmm8
andpd  %xmm0,%xmm7
andpd  %xmm0,%xmm4
packuswb %xmm4,%xmm7
packuswb %xmm7,%xmm8
andpd  %xmm0,%xmm2
andpd  %xmm0,%xmm3
packuswb %xmm3,%xmm2
andpd  %xmm0,%xmm1
andpd  %xmm0,%xmm10
packuswb %xmm10,%xmm1
packuswb %xmm1,%xmm2
packuswb %xmm2,%xmm8
movdqu %xmm8,(%rsi,%rcx,1)
cmp    %r9,%rdx
je     184b <mangle+0x74b>
lea    0x0(,%rdx,8),%rdi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %edi,%ecx
and    $0xf8,%cl
mov    %rbx,%rax
shr    %cl,%rax
mov    %al,(%rsi,%rdx,1)
add    $0x1,%rdx
add    $0x8,%rdi
cmp    %rdx,%r9
jne    1830 <mangle+0x730>
add    $0x50,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret
movdqa 0x7a3(%rip),%xmm2
movdqa 0x7ab(%rip),%xmm3
movdqa 0x7b2(%rip),%xmm11
movdqa 0x7b9(%rip),%xmm9
movdqa 0x7c1(%rip),%xmm6
movdqa 0x7c9(%rip),%xmm0
movdqa 0x7d0(%rip),%xmm12
movdqa 0x7d8(%rip),%xmm7
xor    %ecx,%ecx
test   $0x1,%r8b
jne    16e2 <mangle+0x5e2>
jmp    1814 <mangle+0x714>

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

LLVM IR (-O2):
define void @mangle(i8* nocapture %0, i8* nocapture writeonly %1, i32 %2) {
%4 = icmp sgt i32 %2, 0
br i1 %4, label %5, label %126
5: ; preds = %3
%6 = zext i32 %2 to i64
%7 = and i64 %6, 1
%8 = icmp eq i32 %2, 1
br i1 %8, label %45, label %9
9: ; preds = %5
%10 = and i64 %6, 4294967294
br label %11
11: ; preds = %11, %9
%12 = phi i64 [ 0, %9 ], [ %40, %11 ]
%13 = phi i64 [ 0, %9 ], [ %39, %11 ]
%14 = phi i64 [ 0, %9 ], [ %41, %11 ]
%15 = trunc i64 %12 to i32
%16 = xor i32 %15, -1
%17 = add i32 %16, %2
%18 = sext i32 %17 to i64
%19 = getelementptr inbounds i8, i8* %0, i64 %18
%20 = load i8, i8* %19
%21 = zext i8 %20 to i32
%22 = trunc i64 %12 to i32
%23 = shl nsw i32 %22, 3
%24 = shl i32 %21, %23
%25 = zext i32 %24 to i64
%26 = or i64 %13, %25
%27 = or i64 %12, 1
%28 = trunc i64 %27 to i32
%29 = xor i32 %28, -1
%30 = add i32 %29, %2
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i8, i8* %0, i64 %31
%33 = load i8, i8* %32
%34 = zext i8 %33 to i32
%35 = trunc i64 %27 to i32
%36 = shl nsw i32 %35, 3
%37 = shl i32 %34, %36
%38 = zext i32 %37 to i64
%39 = or i64 %26, %38
%40 = add nuw nsw i64 %12, 2
%41 = add i64 %14, 2
%42 = icmp eq i64 %41, %10
br i1 %42, label %43, label %11
43: ; preds = %11
%44 = trunc i64 %40 to i32
br label %45
45: ; preds = %43, %5
%46 = phi i64 [ undef, %5 ], [ %39, %43 ]
%47 = phi i32 [ 0, %5 ], [ %44, %43 ]
%48 = phi i64 [ 0, %5 ], [ %39, %43 ]
%49 = icmp eq i64 %7, 0
br i1 %49, label %61, label %50
50: ; preds = %45
%51 = xor i32 %47, -1
%52 = add i32 %51, %2
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds i8, i8* %0, i64 %53
%55 = load i8, i8* %54
%56 = zext i8 %55 to i32
%57 = shl nsw i32 %47, 3
%58 = shl i32 %56, %57
%59 = zext i32 %58 to i64
%60 = or i64 %48, %59
br label %61
61: ; preds = %45, %50
%62 = phi i64 [ %46, %45 ], [ %60, %50 ]
%63 = mul i64 %62, 2083697005
%64 = and i64 %63, 4294967295
br i1 %4, label %65, label %126
65: ; preds = %61
%66 = zext i32 %2 to i64
%67 = icmp ult i32 %2, 16
br i1 %67, label %115, label %68
68: ; preds = %65
%69 = and i64 %6, 4294967280
%70 = insertelement <16 x i64> poison, i64 %64, i64 0
%71 = shufflevector <16 x i64> %70, <16 x i64> poison, <16 x i32> zeroinitializer
%72 = add nsw i64 %69, -16
%73 = lshr exact i64 %72, 4
%74 = add nuw nsw i64 %73, 1
%75 = and i64 %74, 1
%76 = icmp eq i64 %72, 0
br i1 %76, label %104, label %77
77: ; preds = %68
%78 = and i64 %74, 2305843009213693950
br label %79
79: ; preds = %79, %77
%80 = phi i64 [ 0, %77 ], [ %97, %79 ]
%81 = phi <16 x i64> [ <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15>, %77 ], [ %98, %79 ]
%82 = phi i64 [ 0, %77 ], [ %99, %79 ]
%83 = shl <16 x i64> %81, <i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3>
%84 = and <16 x i64> %83, <i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288>
%85 = lshr <16 x i64> %71, %84
%86 = trunc <16 x i64> %85 to <16 x i8>
%87 = getelementptr inbounds i8, i8* %1, i64 %80
%88 = bitcast i8* %87 to <16 x i8>*
store <16 x i8> %86, <16 x i8>* %88
%89 = or i64 %80, 16
%90 = shl <16 x i64> %81, <i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3>
%91 = add <16 x i64> %90, <i64 128, i64 128, i64 128, i64 128, i64 128, i64 128, i64 128, i64 128, i64 128, i64 128, i64 128, i64 128, i64 128, i64 128, i64 128, i64 128>
%92 = and <16 x i64> %91, <i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288>
%93 = lshr <16 x i64> %71, %92
%94 = trunc <16 x i64> %93 to <16 x i8>
%95 = getelementptr inbounds i8, i8* %1, i64 %89
%96 = bitcast i8* %95 to <16 x i8>*
store <16 x i8> %94, <16 x i8>* %96
%97 = add nuw i64 %80, 32
%98 = add <16 x i64> %81, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
%99 = add i64 %82, 2
%100 = icmp eq i64 %99, %78
br i1 %100, label %101, label %79
101: ; preds = %79
%102 = shl <16 x i64> %98, <i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3, i64 3>
%103 = and <16 x i64> %102, <i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288, i64 4294967288>
br label %104
104: ; preds = %101, %68
%105 = phi i64 [ 0, %68 ], [ %97, %101 ]
%106 = phi <16 x i64> [ <i64 0, i64 8, i64 16, i64 24, i64 32, i64 40, i64 48, i64 56, i64 64, i64 72, i64 80, i64 88, i64 96, i64 104, i64 112, i64 120>, %68 ], [ %103, %101 ]
%107 = icmp eq i64 %75, 0
br i1 %107, label %113, label %108
108: ; preds = %104
%109 = lshr <16 x i64> %71, %106
%110 = trunc <16 x i64> %109 to <16 x i8>
%111 = getelementptr inbounds i8, i8* %1, i64 %105
%112 = bitcast i8* %111 to <16 x i8>*
store <16 x i8> %110, <16 x i8>* %112
br label %113
113: ; preds = %104, %108
%114 = icmp eq i64 %69, %6
br i1 %114, label %126, label %115
115: ; preds = %65, %113
%116 = phi i64 [ 0, %65 ], [ %69, %113 ]
br label %117
117: ; preds = %115, %117
%118 = phi i64 [ %124, %117 ], [ %116, %115 ]
%119 = shl i64 %118, 3
%120 = and i64 %119, 4294967288
%121 = lshr i64 %64, %120
%122 = trunc i64 %121 to i8
%123 = getelementptr inbounds i8, i8* %1, i64 %118
store i8 %122, i8* %123
%124 = add nuw nsw i64 %118, 1
%125 = icmp eq i64 %124, %66
br i1 %125, label %126, label %117
126: ; preds = %117, %113, %3, %61
ret void
}