#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 */
int *freqs_from_input(char *, int);
char *malloc(int);
int *freqs_from_color(const char *data, int num_colors) {
  char *mid = malloc(num_colors / 4);
  for (int i = 0; i < num_colors; i += 4) {
    mid[i / 4] =
        (data[i] << 6) | (data[i + 1] << 4) | (data[i + 2] << 2) | data[i + 3];
  }
  return freqs_from_input(mid, (num_colors / 4));
}


x86 assembly (clang, -O0):
<freqs_from_color>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
call   1030 <malloc@plt>
mov    %rax,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11d9 <freqs_from_color+0xb9>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
shl    $0x6,%eax
mov    -0x8(%rbp),%rcx
mov    -0x1c(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
shl    $0x4,%ecx
or     %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    -0x1c(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
shl    $0x2,%ecx
or     %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    -0x1c(%rbp),%edx
add    $0x3,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
or     %ecx,%eax
mov    %al,-0x29(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    -0x29(%rbp),%dl
mov    %eax,%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x1c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x1c(%rbp)
jmp    114c <freqs_from_color+0x2c>
mov    -0x18(%rbp),%rdi
mov    -0xc(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,%esi
call   1040 <freqs_from_input@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<freqs_from_color>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %esi,%ebp
mov    %rdi,%r15
lea    0x3(%rbp),%r14d
test   %esi,%esi
cmovns %esi,%r14d
sar    $0x2,%r14d
mov    %r14d,%edi
call   1030 <malloc@plt>
test   %ebp,%ebp
jle    1752 <freqs_from_color+0x632>
mov    %ebp,%r11d
lea    -0x1(%r11),%rdx
cmp    $0x1c,%rdx
jae    1162 <freqs_from_color+0x42>
xor    %esi,%esi
jmp    170a <freqs_from_color+0x5ea>
mov    %rdx,%r8
shr    $0x2,%r8
add    $0x1,%r8
movabs $0x7ffffffffffffff0,%r9
ff ff 7f
movabs $0x3ffffffffffffff0,%r10
ff ff 3f
cmp    $0x3c,%rdx
jae    118e <freqs_from_color+0x6e>
xor    %edx,%edx
jmp    154c <freqs_from_color+0x42c>
mov    %r8,%rdx
and    %r9,%rdx
lea    0x3f(%r15),%rbp
xor    %esi,%esi
movdqa 0xe5d(%rip),%xmm8
movdqa 0xe64(%rip),%xmm9
movdqa 0xe6c(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl -0x3(%rbp,%rsi,4),%edi
movd   %edi,%xmm3
movzbl -0x7(%rbp,%rsi,4),%edi
movd   %edi,%xmm4
punpcklbw %xmm3,%xmm4
movzbl -0xb(%rbp,%rsi,4),%edi
movd   %edi,%xmm3
movzbl -0xf(%rbp,%rsi,4),%edi
movd   %edi,%xmm5
punpcklbw %xmm3,%xmm5
punpcklwd %xmm4,%xmm5
movzbl -0x13(%rbp,%rsi,4),%edi
movd   %edi,%xmm3
movzbl -0x17(%rbp,%rsi,4),%edi
movd   %edi,%xmm4
punpcklbw %xmm3,%xmm4
movzbl -0x1b(%rbp,%rsi,4),%edi
movd   %edi,%xmm6
movzbl -0x1f(%rbp,%rsi,4),%edi
movd   %edi,%xmm3
punpcklbw %xmm6,%xmm3
punpcklwd %xmm4,%xmm3
punpckldq %xmm5,%xmm3
movzbl -0x23(%rbp,%rsi,4),%edi
movd   %edi,%xmm4
movzbl -0x27(%rbp,%rsi,4),%edi
movd   %edi,%xmm5
punpcklbw %xmm4,%xmm5
movzbl -0x2b(%rbp,%rsi,4),%edi
movd   %edi,%xmm4
movzbl -0x2f(%rbp,%rsi,4),%edi
movd   %edi,%xmm6
punpcklbw %xmm4,%xmm6
punpcklwd %xmm5,%xmm6
movzbl -0x33(%rbp,%rsi,4),%edi
movd   %edi,%xmm4
movzbl -0x37(%rbp,%rsi,4),%edi
movd   %edi,%xmm5
punpcklbw %xmm4,%xmm5
movzbl -0x3b(%rbp,%rsi,4),%edi
movd   %edi,%xmm7
movzbl -0x3f(%rbp,%rsi,4),%edi
movd   %edi,%xmm4
punpcklbw %xmm7,%xmm4
punpcklwd %xmm5,%xmm4
punpckldq %xmm6,%xmm4
punpcklqdq %xmm3,%xmm4
psllw  $0x6,%xmm4
pand   %xmm8,%xmm4
movzbl -0x2(%rbp,%rsi,4),%edi
movd   %edi,%xmm3
movzbl -0x6(%rbp,%rsi,4),%edi
movd   %edi,%xmm5
punpcklbw %xmm3,%xmm5
movzbl -0xa(%rbp,%rsi,4),%edi
movd   %edi,%xmm3
movzbl -0xe(%rbp,%rsi,4),%edi
movd   %edi,%xmm6
punpcklbw %xmm3,%xmm6
punpcklwd %xmm5,%xmm6
movzbl -0x12(%rbp,%rsi,4),%edi
movd   %edi,%xmm3
movzbl -0x16(%rbp,%rsi,4),%edi
movd   %edi,%xmm7
punpcklbw %xmm3,%xmm7
movzbl -0x1a(%rbp,%rsi,4),%edi
movd   %edi,%xmm3
movzbl -0x1e(%rbp,%rsi,4),%edi
movd   %edi,%xmm5
punpcklbw %xmm3,%xmm5
punpcklwd %xmm7,%xmm5
punpckldq %xmm6,%xmm5
movzbl -0x22(%rbp,%rsi,4),%edi
movd   %edi,%xmm3
movzbl -0x26(%rbp,%rsi,4),%edi
movd   %edi,%xmm6
punpcklbw %xmm3,%xmm6
movzbl -0x2a(%rbp,%rsi,4),%edi
movd   %edi,%xmm3
movzbl -0x2e(%rbp,%rsi,4),%edi
movd   %edi,%xmm7
punpcklbw %xmm3,%xmm7
punpcklwd %xmm6,%xmm7
movzbl -0x32(%rbp,%rsi,4),%edi
movd   %edi,%xmm3
movzbl -0x36(%rbp,%rsi,4),%edi
movd   %edi,%xmm6
punpcklbw %xmm3,%xmm6
movzbl -0x3a(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x3e(%rbp,%rsi,4),%edi
movd   %edi,%xmm3
punpcklbw %xmm0,%xmm3
punpcklwd %xmm6,%xmm3
punpckldq %xmm7,%xmm3
punpcklqdq %xmm5,%xmm3
psllw  $0x4,%xmm3
pand   %xmm9,%xmm3
por    %xmm4,%xmm3
movzbl -0x1(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x5(%rbp,%rsi,4),%edi
movd   %edi,%xmm4
punpcklbw %xmm0,%xmm4
movzbl -0x9(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0xd(%rbp,%rsi,4),%edi
movd   %edi,%xmm6
punpcklbw %xmm0,%xmm6
punpcklwd %xmm4,%xmm6
movzbl -0x11(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x15(%rbp,%rsi,4),%edi
movd   %edi,%xmm4
punpcklbw %xmm0,%xmm4
movzbl -0x19(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x1d(%rbp,%rsi,4),%edi
movd   %edi,%xmm5
punpcklbw %xmm0,%xmm5
punpcklwd %xmm4,%xmm5
punpckldq %xmm6,%xmm5
movzbl -0x21(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x25(%rbp,%rsi,4),%edi
movd   %edi,%xmm4
punpcklbw %xmm0,%xmm4
movzbl -0x29(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x2d(%rbp,%rsi,4),%edi
movd   %edi,%xmm6
punpcklbw %xmm0,%xmm6
punpcklwd %xmm4,%xmm6
movzbl -0x31(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x35(%rbp,%rsi,4),%edi
movd   %edi,%xmm7
punpcklbw %xmm0,%xmm7
movzbl -0x39(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x3d(%rbp,%rsi,4),%edi
movd   %edi,%xmm4
punpcklbw %xmm0,%xmm4
punpcklwd %xmm7,%xmm4
punpckldq %xmm6,%xmm4
punpcklqdq %xmm5,%xmm4
psllw  $0x2,%xmm4
pand   %xmm2,%xmm4
movzbl 0x0(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x4(%rbp,%rsi,4),%edi
movd   %edi,%xmm5
punpcklbw %xmm0,%xmm5
movzbl -0x8(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0xc(%rbp,%rsi,4),%edi
movd   %edi,%xmm6
punpcklbw %xmm0,%xmm6
punpcklwd %xmm5,%xmm6
movzbl -0x10(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x14(%rbp,%rsi,4),%edi
movd   %edi,%xmm7
punpcklbw %xmm0,%xmm7
movzbl -0x18(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x1c(%rbp,%rsi,4),%edi
movd   %edi,%xmm5
punpcklbw %xmm0,%xmm5
punpcklwd %xmm7,%xmm5
punpckldq %xmm6,%xmm5
movzbl -0x20(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x24(%rbp,%rsi,4),%edi
movd   %edi,%xmm6
punpcklbw %xmm0,%xmm6
movzbl -0x28(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x2c(%rbp,%rsi,4),%edi
movd   %edi,%xmm7
punpcklbw %xmm0,%xmm7
punpcklwd %xmm6,%xmm7
movzbl -0x30(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x34(%rbp,%rsi,4),%edi
movd   %edi,%xmm6
punpcklbw %xmm0,%xmm6
movzbl -0x38(%rbp,%rsi,4),%edi
movd   %edi,%xmm0
movzbl -0x3c(%rbp,%rsi,4),%edi
movd   %edi,%xmm1
punpcklbw %xmm0,%xmm1
punpcklwd %xmm6,%xmm1
punpckldq %xmm7,%xmm1
punpcklqdq %xmm5,%xmm1
por    %xmm4,%xmm1
por    %xmm3,%xmm1
mov    %rsi,%rdi
and    %r10,%rdi
movdqu %xmm1,(%rax,%rdi,1)
add    $0x10,%rsi
cmp    %rsi,%rdx
jne    11c0 <freqs_from_color+0xa0>
cmp    %rdx,%r8
je     1752 <freqs_from_color+0x632>
test   $0x8,%r8b
jne    154c <freqs_from_color+0x42c>
shl    $0x2,%rdx
mov    %rdx,%rsi
jmp    170a <freqs_from_color+0x5ea>
add    $0x8,%r9
and    %r8,%r9
lea    0x0(,%r9,4),%rsi
lea    0x1f(%r15),%rbp
movdqa 0xa99(%rip),%xmm0
movdqa 0xaa1(%rip),%xmm1
movdqa 0xaa9(%rip),%xmm2
add    $0x8,%r10
nopl   0x0(%rax,%rax,1)
movzbl -0x1f(%rbp,%rdx,4),%edi
movzbl -0x17(%rbp,%rdx,4),%ecx
movzbl -0xf(%rbp,%rdx,4),%r12d
movzbl -0x13(%rbp,%rdx,4),%ebx
shl    $0x8,%ebx
or     %ecx,%ebx
movzbl -0x1b(%rbp,%rdx,4),%ecx
shl    $0x8,%ecx
or     %edi,%ecx
movd   %ecx,%xmm4
pinsrw $0x1,%ebx,%xmm4
movzbl -0xb(%rbp,%rdx,4),%ecx
shl    $0x8,%ecx
or     %r12d,%ecx
pinsrw $0x2,%ecx,%xmm4
movzbl -0x7(%rbp,%rdx,4),%ecx
movzbl -0x3(%rbp,%rdx,4),%edi
shl    $0x8,%edi
or     %ecx,%edi
pinsrw $0x3,%edi,%xmm4
psllw  $0x6,%xmm4
pand   %xmm0,%xmm4
movzbl -0x1e(%rbp,%rdx,4),%ecx
movzbl -0x16(%rbp,%rdx,4),%edi
movzbl -0xe(%rbp,%rdx,4),%r12d
movzbl -0x12(%rbp,%rdx,4),%ebx
shl    $0x8,%ebx
or     %edi,%ebx
movzbl -0x1a(%rbp,%rdx,4),%edi
shl    $0x8,%edi
or     %ecx,%edi
movd   %edi,%xmm3
pinsrw $0x1,%ebx,%xmm3
movzbl -0x6(%rbp,%rdx,4),%ecx
movzbl -0xa(%rbp,%rdx,4),%edi
shl    $0x8,%edi
or     %r12d,%edi
pinsrw $0x2,%edi,%xmm3
movzbl -0x2(%rbp,%rdx,4),%edi
shl    $0x8,%edi
or     %ecx,%edi
pinsrw $0x3,%edi,%xmm3
psllw  $0x4,%xmm3
pand   %xmm1,%xmm3
movzbl -0x1d(%rbp,%rdx,4),%ecx
movzbl -0x15(%rbp,%rdx,4),%edi
movzbl -0xd(%rbp,%rdx,4),%r13d
movzbl -0x5(%rbp,%rdx,4),%r12d
movzbl -0x11(%rbp,%rdx,4),%ebx
shl    $0x8,%ebx
or     %edi,%ebx
movzbl -0x19(%rbp,%rdx,4),%edi
shl    $0x8,%edi
or     %ecx,%edi
movd   %edi,%xmm5
pinsrw $0x1,%ebx,%xmm5
movzbl -0x9(%rbp,%rdx,4),%ecx
shl    $0x8,%ecx
or     %r13d,%ecx
pinsrw $0x2,%ecx,%xmm5
movzbl -0x1(%rbp,%rdx,4),%ecx
shl    $0x8,%ecx
or     %r12d,%ecx
pinsrw $0x3,%ecx,%xmm5
por    %xmm4,%xmm3
psllw  $0x2,%xmm5
pand   %xmm2,%xmm5
movzbl -0x1c(%rbp,%rdx,4),%ecx
movzbl -0x14(%rbp,%rdx,4),%edi
movzbl -0xc(%rbp,%rdx,4),%r12d
movzbl -0x10(%rbp,%rdx,4),%ebx
shl    $0x8,%ebx
or     %edi,%ebx
movzbl -0x18(%rbp,%rdx,4),%edi
shl    $0x8,%edi
or     %ecx,%edi
movd   %edi,%xmm4
pinsrw $0x1,%ebx,%xmm4
movzbl -0x8(%rbp,%rdx,4),%ecx
shl    $0x8,%ecx
or     %r12d,%ecx
pinsrw $0x2,%ecx,%xmm4
movzbl -0x4(%rbp,%rdx,4),%ecx
movzbl 0x0(%rbp,%rdx,4),%edi
shl    $0x8,%edi
or     %ecx,%edi
pinsrw $0x3,%edi,%xmm4
por    %xmm5,%xmm4
por    %xmm3,%xmm4
mov    %rdx,%rcx
and    %r10,%rcx
movq   %xmm4,(%rax,%rcx,1)
add    $0x8,%rdx
cmp    %rdx,%r9
jne    1580 <freqs_from_color+0x460>
cmp    %r9,%r8
je     1752 <freqs_from_color+0x632>
mov    %rsi,%rcx
shr    $0x2,%rcx
mov    %rax,%rdx
add    %rcx,%rdx
nopw   0x0(%rax,%rax,1)
movzbl (%r15,%rsi,1),%ecx
movzbl 0x1(%r15,%rsi,1),%ebx
shl    $0x6,%cl
shl    $0x4,%bl
or     %cl,%bl
movzbl 0x2(%r15,%rsi,1),%ecx
shl    $0x2,%cl
or     %bl,%cl
or     0x3(%r15,%rsi,1),%cl
mov    %cl,(%rdx)
add    $0x4,%rsi
add    $0x1,%rdx
cmp    %r11,%rsi
jb     1720 <freqs_from_color+0x600>
mov    %rax,%rdi
mov    %r14d,%esi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1040 <freqs_from_input@plt>

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

LLVM IR (-O2):
define i32* @freqs_from_color(i8* nocapture %0, i32 %1) {
%3 = sdiv i32 %1, 4
%4 = tail call i8* @malloc(i32 %3)
%5 = icmp sgt i32 %1, 0
br i1 %5, label %6, label %443
6: ; preds = %2
%7 = zext i32 %1 to i64
%8 = add nsw i64 %7, -1
%9 = lshr i64 %8, 2
%10 = add nuw nsw i64 %9, 1
%11 = icmp ult i64 %8, 28
br i1 %11, label %441, label %12
12: ; preds = %6
%13 = icmp ult i64 %8, 60
br i1 %13, label %291, label %14
14: ; preds = %12
%15 = and i64 %10, 9223372036854775792
br label %16
16: ; preds = %16, %14
%17 = phi i64 [ 0, %14 ], [ %283, %16 ]
%18 = shl i64 %17, 2
%19 = or i64 %18, 4
%20 = or i64 %18, 8
%21 = or i64 %18, 12
%22 = or i64 %18, 16
%23 = or i64 %18, 20
%24 = or i64 %18, 24
%25 = or i64 %18, 28
%26 = or i64 %18, 32
%27 = or i64 %18, 36
%28 = or i64 %18, 40
%29 = or i64 %18, 44
%30 = or i64 %18, 48
%31 = or i64 %18, 52
%32 = or i64 %18, 56
%33 = or i64 %18, 60
%34 = getelementptr inbounds i8, i8* %0, i64 %18
%35 = getelementptr inbounds i8, i8* %0, i64 %19
%36 = getelementptr inbounds i8, i8* %0, i64 %20
%37 = getelementptr inbounds i8, i8* %0, i64 %21
%38 = getelementptr inbounds i8, i8* %0, i64 %22
%39 = getelementptr inbounds i8, i8* %0, i64 %23
%40 = getelementptr inbounds i8, i8* %0, i64 %24
%41 = getelementptr inbounds i8, i8* %0, i64 %25
%42 = getelementptr inbounds i8, i8* %0, i64 %26
%43 = getelementptr inbounds i8, i8* %0, i64 %27
%44 = getelementptr inbounds i8, i8* %0, i64 %28
%45 = getelementptr inbounds i8, i8* %0, i64 %29
%46 = getelementptr inbounds i8, i8* %0, i64 %30
%47 = getelementptr inbounds i8, i8* %0, i64 %31
%48 = getelementptr inbounds i8, i8* %0, i64 %32
%49 = getelementptr inbounds i8, i8* %0, i64 %33
%50 = load i8, i8* %34
%51 = load i8, i8* %35
%52 = load i8, i8* %36
%53 = load i8, i8* %37
%54 = load i8, i8* %38
%55 = load i8, i8* %39
%56 = load i8, i8* %40
%57 = load i8, i8* %41
%58 = load i8, i8* %42
%59 = load i8, i8* %43
%60 = load i8, i8* %44
%61 = load i8, i8* %45
%62 = load i8, i8* %46
%63 = load i8, i8* %47
%64 = load i8, i8* %48
%65 = load i8, i8* %49
%66 = insertelement <16 x i8> poison, i8 %50, i64 0
%67 = insertelement <16 x i8> %66, i8 %51, i64 1
%68 = insertelement <16 x i8> %67, i8 %52, i64 2
%69 = insertelement <16 x i8> %68, i8 %53, i64 3
%70 = insertelement <16 x i8> %69, i8 %54, i64 4
%71 = insertelement <16 x i8> %70, i8 %55, i64 5
%72 = insertelement <16 x i8> %71, i8 %56, i64 6
%73 = insertelement <16 x i8> %72, i8 %57, i64 7
%74 = insertelement <16 x i8> %73, i8 %58, i64 8
%75 = insertelement <16 x i8> %74, i8 %59, i64 9
%76 = insertelement <16 x i8> %75, i8 %60, i64 10
%77 = insertelement <16 x i8> %76, i8 %61, i64 11
%78 = insertelement <16 x i8> %77, i8 %62, i64 12
%79 = insertelement <16 x i8> %78, i8 %63, i64 13
%80 = insertelement <16 x i8> %79, i8 %64, i64 14
%81 = insertelement <16 x i8> %80, i8 %65, i64 15
%82 = shl <16 x i8> %81, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
%83 = or i64 %18, 1
%84 = or i64 %18, 5
%85 = or i64 %18, 9
%86 = or i64 %18, 13
%87 = or i64 %18, 17
%88 = or i64 %18, 21
%89 = or i64 %18, 25
%90 = or i64 %18, 29
%91 = or i64 %18, 33
%92 = or i64 %18, 37
%93 = or i64 %18, 41
%94 = or i64 %18, 45
%95 = or i64 %18, 49
%96 = or i64 %18, 53
%97 = or i64 %18, 57
%98 = or i64 %18, 61
%99 = getelementptr inbounds i8, i8* %0, i64 %83
%100 = getelementptr inbounds i8, i8* %0, i64 %84
%101 = getelementptr inbounds i8, i8* %0, i64 %85
%102 = getelementptr inbounds i8, i8* %0, i64 %86
%103 = getelementptr inbounds i8, i8* %0, i64 %87
%104 = getelementptr inbounds i8, i8* %0, i64 %88
%105 = getelementptr inbounds i8, i8* %0, i64 %89
%106 = getelementptr inbounds i8, i8* %0, i64 %90
%107 = getelementptr inbounds i8, i8* %0, i64 %91
%108 = getelementptr inbounds i8, i8* %0, i64 %92
%109 = getelementptr inbounds i8, i8* %0, i64 %93
%110 = getelementptr inbounds i8, i8* %0, i64 %94
%111 = getelementptr inbounds i8, i8* %0, i64 %95
%112 = getelementptr inbounds i8, i8* %0, i64 %96
%113 = getelementptr inbounds i8, i8* %0, i64 %97
%114 = getelementptr inbounds i8, i8* %0, i64 %98
%115 = load i8, i8* %99
%116 = load i8, i8* %100
%117 = load i8, i8* %101
%118 = load i8, i8* %102
%119 = load i8, i8* %103
%120 = load i8, i8* %104
%121 = load i8, i8* %105
%122 = load i8, i8* %106
%123 = load i8, i8* %107
%124 = load i8, i8* %108
%125 = load i8, i8* %109
%126 = load i8, i8* %110
%127 = load i8, i8* %111
%128 = load i8, i8* %112
%129 = load i8, i8* %113
%130 = load i8, i8* %114
%131 = insertelement <16 x i8> poison, i8 %115, i64 0
%132 = insertelement <16 x i8> %131, i8 %116, i64 1
%133 = insertelement <16 x i8> %132, i8 %117, i64 2
%134 = insertelement <16 x i8> %133, i8 %118, i64 3
%135 = insertelement <16 x i8> %134, i8 %119, i64 4
%136 = insertelement <16 x i8> %135, i8 %120, i64 5
%137 = insertelement <16 x i8> %136, i8 %121, i64 6
%138 = insertelement <16 x i8> %137, i8 %122, i64 7
%139 = insertelement <16 x i8> %138, i8 %123, i64 8
%140 = insertelement <16 x i8> %139, i8 %124, i64 9
%141 = insertelement <16 x i8> %140, i8 %125, i64 10
%142 = insertelement <16 x i8> %141, i8 %126, i64 11
%143 = insertelement <16 x i8> %142, i8 %127, i64 12
%144 = insertelement <16 x i8> %143, i8 %128, i64 13
%145 = insertelement <16 x i8> %144, i8 %129, i64 14
%146 = insertelement <16 x i8> %145, i8 %130, i64 15
%147 = shl <16 x i8> %146, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
%148 = or <16 x i8> %147, %82
%149 = or i64 %18, 2
%150 = or i64 %18, 6
%151 = or i64 %18, 10
%152 = or i64 %18, 14
%153 = or i64 %18, 18
%154 = or i64 %18, 22
%155 = or i64 %18, 26
%156 = or i64 %18, 30
%157 = or i64 %18, 34
%158 = or i64 %18, 38
%159 = or i64 %18, 42
%160 = or i64 %18, 46
%161 = or i64 %18, 50
%162 = or i64 %18, 54
%163 = or i64 %18, 58
%164 = or i64 %18, 62
%165 = getelementptr inbounds i8, i8* %0, i64 %149
%166 = getelementptr inbounds i8, i8* %0, i64 %150
%167 = getelementptr inbounds i8, i8* %0, i64 %151
%168 = getelementptr inbounds i8, i8* %0, i64 %152
%169 = getelementptr inbounds i8, i8* %0, i64 %153
%170 = getelementptr inbounds i8, i8* %0, i64 %154
%171 = getelementptr inbounds i8, i8* %0, i64 %155
%172 = getelementptr inbounds i8, i8* %0, i64 %156
%173 = getelementptr inbounds i8, i8* %0, i64 %157
%174 = getelementptr inbounds i8, i8* %0, i64 %158
%175 = getelementptr inbounds i8, i8* %0, i64 %159
%176 = getelementptr inbounds i8, i8* %0, i64 %160
%177 = getelementptr inbounds i8, i8* %0, i64 %161
%178 = getelementptr inbounds i8, i8* %0, i64 %162
%179 = getelementptr inbounds i8, i8* %0, i64 %163
%180 = getelementptr inbounds i8, i8* %0, i64 %164
%181 = load i8, i8* %165
%182 = load i8, i8* %166
%183 = load i8, i8* %167
%184 = load i8, i8* %168
%185 = load i8, i8* %169
%186 = load i8, i8* %170
%187 = load i8, i8* %171
%188 = load i8, i8* %172
%189 = load i8, i8* %173
%190 = load i8, i8* %174
%191 = load i8, i8* %175
%192 = load i8, i8* %176
%193 = load i8, i8* %177
%194 = load i8, i8* %178
%195 = load i8, i8* %179
%196 = load i8, i8* %180
%197 = insertelement <16 x i8> poison, i8 %181, i64 0
%198 = insertelement <16 x i8> %197, i8 %182, i64 1
%199 = insertelement <16 x i8> %198, i8 %183, i64 2
%200 = insertelement <16 x i8> %199, i8 %184, i64 3
%201 = insertelement <16 x i8> %200, i8 %185, i64 4
%202 = insertelement <16 x i8> %201, i8 %186, i64 5
%203 = insertelement <16 x i8> %202, i8 %187, i64 6
%204 = insertelement <16 x i8> %203, i8 %188, i64 7
%205 = insertelement <16 x i8> %204, i8 %189, i64 8
%206 = insertelement <16 x i8> %205, i8 %190, i64 9
%207 = insertelement <16 x i8> %206, i8 %191, i64 10
%208 = insertelement <16 x i8> %207, i8 %192, i64 11
%209 = insertelement <16 x i8> %208, i8 %193, i64 12
%210 = insertelement <16 x i8> %209, i8 %194, i64 13
%211 = insertelement <16 x i8> %210, i8 %195, i64 14
%212 = insertelement <16 x i8> %211, i8 %196, i64 15
%213 = shl <16 x i8> %212, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
%214 = or <16 x i8> %148, %213
%215 = or i64 %18, 3
%216 = or i64 %18, 7
%217 = or i64 %18, 11
%218 = or i64 %18, 15
%219 = or i64 %18, 19
%220 = or i64 %18, 23
%221 = or i64 %18, 27
%222 = or i64 %18, 31
%223 = or i64 %18, 35
%224 = or i64 %18, 39
%225 = or i64 %18, 43
%226 = or i64 %18, 47
%227 = or i64 %18, 51
%228 = or i64 %18, 55
%229 = or i64 %18, 59
%230 = or i64 %18, 63
%231 = getelementptr inbounds i8, i8* %0, i64 %215
%232 = getelementptr inbounds i8, i8* %0, i64 %216
%233 = getelementptr inbounds i8, i8* %0, i64 %217
%234 = getelementptr inbounds i8, i8* %0, i64 %218
%235 = getelementptr inbounds i8, i8* %0, i64 %219
%236 = getelementptr inbounds i8, i8* %0, i64 %220
%237 = getelementptr inbounds i8, i8* %0, i64 %221
%238 = getelementptr inbounds i8, i8* %0, i64 %222
%239 = getelementptr inbounds i8, i8* %0, i64 %223
%240 = getelementptr inbounds i8, i8* %0, i64 %224
%241 = getelementptr inbounds i8, i8* %0, i64 %225
%242 = getelementptr inbounds i8, i8* %0, i64 %226
%243 = getelementptr inbounds i8, i8* %0, i64 %227
%244 = getelementptr inbounds i8, i8* %0, i64 %228
%245 = getelementptr inbounds i8, i8* %0, i64 %229
%246 = getelementptr inbounds i8, i8* %0, i64 %230
%247 = load i8, i8* %231
%248 = load i8, i8* %232
%249 = load i8, i8* %233
%250 = load i8, i8* %234
%251 = load i8, i8* %235
%252 = load i8, i8* %236
%253 = load i8, i8* %237
%254 = load i8, i8* %238
%255 = load i8, i8* %239
%256 = load i8, i8* %240
%257 = load i8, i8* %241
%258 = load i8, i8* %242
%259 = load i8, i8* %243
%260 = load i8, i8* %244
%261 = load i8, i8* %245
%262 = load i8, i8* %246
%263 = insertelement <16 x i8> poison, i8 %247, i64 0
%264 = insertelement <16 x i8> %263, i8 %248, i64 1
%265 = insertelement <16 x i8> %264, i8 %249, i64 2
%266 = insertelement <16 x i8> %265, i8 %250, i64 3
%267 = insertelement <16 x i8> %266, i8 %251, i64 4
%268 = insertelement <16 x i8> %267, i8 %252, i64 5
%269 = insertelement <16 x i8> %268, i8 %253, i64 6
%270 = insertelement <16 x i8> %269, i8 %254, i64 7
%271 = insertelement <16 x i8> %270, i8 %255, i64 8
%272 = insertelement <16 x i8> %271, i8 %256, i64 9
%273 = insertelement <16 x i8> %272, i8 %257, i64 10
%274 = insertelement <16 x i8> %273, i8 %258, i64 11
%275 = insertelement <16 x i8> %274, i8 %259, i64 12
%276 = insertelement <16 x i8> %275, i8 %260, i64 13
%277 = insertelement <16 x i8> %276, i8 %261, i64 14
%278 = insertelement <16 x i8> %277, i8 %262, i64 15
%279 = or <16 x i8> %214, %278
%280 = and i64 %17, 4611686018427387888
%281 = getelementptr inbounds i8, i8* %4, i64 %280
%282 = bitcast i8* %281 to <16 x i8>*
store <16 x i8> %279, <16 x i8>* %282
%283 = add nuw i64 %17, 16
%284 = icmp eq i64 %283, %15
br i1 %284, label %285, label %16
285: ; preds = %16
%286 = icmp eq i64 %10, %15
br i1 %286, label %443, label %287
287: ; preds = %285
%288 = shl i64 %15, 2
%289 = and i64 %10, 8
%290 = icmp eq i64 %289, 0
br i1 %290, label %441, label %291
291: ; preds = %12, %287
%292 = phi i64 [ %15, %287 ], [ 0, %12 ]
%293 = add nsw i64 %7, -1
%294 = lshr i64 %293, 2
%295 = add nuw nsw i64 %294, 1
%296 = and i64 %295, 9223372036854775800
%297 = shl i64 %296, 2
br label %298
298: ; preds = %298, %291
%299 = phi i64 [ %292, %291 ], [ %437, %298 ]
%300 = shl i64 %299, 2
%301 = or i64 %300, 4
%302 = or i64 %300, 8
%303 = or i64 %300, 12
%304 = or i64 %300, 16
%305 = or i64 %300, 20
%306 = or i64 %300, 24
%307 = or i64 %300, 28
%308 = getelementptr inbounds i8, i8* %0, i64 %300
%309 = getelementptr inbounds i8, i8* %0, i64 %301
%310 = getelementptr inbounds i8, i8* %0, i64 %302
%311 = getelementptr inbounds i8, i8* %0, i64 %303
%312 = getelementptr inbounds i8, i8* %0, i64 %304
%313 = getelementptr inbounds i8, i8* %0, i64 %305
%314 = getelementptr inbounds i8, i8* %0, i64 %306
%315 = getelementptr inbounds i8, i8* %0, i64 %307
%316 = load i8, i8* %308
%317 = load i8, i8* %309
%318 = load i8, i8* %310
%319 = load i8, i8* %311
%320 = load i8, i8* %312
%321 = load i8, i8* %313
%322 = load i8, i8* %314
%323 = load i8, i8* %315
%324 = insertelement <8 x i8> poison, i8 %316, i64 0
%325 = insertelement <8 x i8> %324, i8 %317, i64 1
%326 = insertelement <8 x i8> %325, i8 %318, i64 2
%327 = insertelement <8 x i8> %326, i8 %319, i64 3
%328 = insertelement <8 x i8> %327, i8 %320, i64 4
%329 = insertelement <8 x i8> %328, i8 %321, i64 5
%330 = insertelement <8 x i8> %329, i8 %322, i64 6
%331 = insertelement <8 x i8> %330, i8 %323, i64 7
%332 = shl <8 x i8> %331, <i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6, i8 6>
%333 = or i64 %300, 1
%334 = or i64 %300, 5
%335 = or i64 %300, 9
%336 = or i64 %300, 13
%337 = or i64 %300, 17
%338 = or i64 %300, 21
%339 = or i64 %300, 25
%340 = or i64 %300, 29
%341 = getelementptr inbounds i8, i8* %0, i64 %333
%342 = getelementptr inbounds i8, i8* %0, i64 %334
%343 = getelementptr inbounds i8, i8* %0, i64 %335
%344 = getelementptr inbounds i8, i8* %0, i64 %336
%345 = getelementptr inbounds i8, i8* %0, i64 %337
%346 = getelementptr inbounds i8, i8* %0, i64 %338
%347 = getelementptr inbounds i8, i8* %0, i64 %339
%348 = getelementptr inbounds i8, i8* %0, i64 %340
%349 = load i8, i8* %341
%350 = load i8, i8* %342
%351 = load i8, i8* %343
%352 = load i8, i8* %344
%353 = load i8, i8* %345
%354 = load i8, i8* %346
%355 = load i8, i8* %347
%356 = load i8, i8* %348
%357 = insertelement <8 x i8> poison, i8 %349, i64 0
%358 = insertelement <8 x i8> %357, i8 %350, i64 1
%359 = insertelement <8 x i8> %358, i8 %351, i64 2
%360 = insertelement <8 x i8> %359, i8 %352, i64 3
%361 = insertelement <8 x i8> %360, i8 %353, i64 4
%362 = insertelement <8 x i8> %361, i8 %354, i64 5
%363 = insertelement <8 x i8> %362, i8 %355, i64 6
%364 = insertelement <8 x i8> %363, i8 %356, i64 7
%365 = shl <8 x i8> %364, <i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4, i8 4>
%366 = or <8 x i8> %365, %332
%367 = or i64 %300, 2
%368 = or i64 %300, 6
%369 = or i64 %300, 10
%370 = or i64 %300, 14
%371 = or i64 %300, 18
%372 = or i64 %300, 22
%373 = or i64 %300, 26
%374 = or i64 %300, 30
%375 = getelementptr inbounds i8, i8* %0, i64 %367
%376 = getelementptr inbounds i8, i8* %0, i64 %368
%377 = getelementptr inbounds i8, i8* %0, i64 %369
%378 = getelementptr inbounds i8, i8* %0, i64 %370
%379 = getelementptr inbounds i8, i8* %0, i64 %371
%380 = getelementptr inbounds i8, i8* %0, i64 %372
%381 = getelementptr inbounds i8, i8* %0, i64 %373
%382 = getelementptr inbounds i8, i8* %0, i64 %374
%383 = load i8, i8* %375
%384 = load i8, i8* %376
%385 = load i8, i8* %377
%386 = load i8, i8* %378
%387 = load i8, i8* %379
%388 = load i8, i8* %380
%389 = load i8, i8* %381
%390 = load i8, i8* %382
%391 = insertelement <8 x i8> poison, i8 %383, i64 0
%392 = insertelement <8 x i8> %391, i8 %384, i64 1
%393 = insertelement <8 x i8> %392, i8 %385, i64 2
%394 = insertelement <8 x i8> %393, i8 %386, i64 3
%395 = insertelement <8 x i8> %394, i8 %387, i64 4
%396 = insertelement <8 x i8> %395, i8 %388, i64 5
%397 = insertelement <8 x i8> %396, i8 %389, i64 6
%398 = insertelement <8 x i8> %397, i8 %390, i64 7
%399 = shl <8 x i8> %398, <i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2, i8 2>
%400 = or <8 x i8> %366, %399
%401 = or i64 %300, 3
%402 = or i64 %300, 7
%403 = or i64 %300, 11
%404 = or i64 %300, 15
%405 = or i64 %300, 19
%406 = or i64 %300, 23
%407 = or i64 %300, 27
%408 = or i64 %300, 31
%409 = getelementptr inbounds i8, i8* %0, i64 %401
%410 = getelementptr inbounds i8, i8* %0, i64 %402
%411 = getelementptr inbounds i8, i8* %0, i64 %403
%412 = getelementptr inbounds i8, i8* %0, i64 %404
%413 = getelementptr inbounds i8, i8* %0, i64 %405
%414 = getelementptr inbounds i8, i8* %0, i64 %406
%415 = getelementptr inbounds i8, i8* %0, i64 %407
%416 = getelementptr inbounds i8, i8* %0, i64 %408
%417 = load i8, i8* %409
%418 = load i8, i8* %410
%419 = load i8, i8* %411
%420 = load i8, i8* %412
%421 = load i8, i8* %413
%422 = load i8, i8* %414
%423 = load i8, i8* %415
%424 = load i8, i8* %416
%425 = insertelement <8 x i8> poison, i8 %417, i64 0
%426 = insertelement <8 x i8> %425, i8 %418, i64 1
%427 = insertelement <8 x i8> %426, i8 %419, i64 2
%428 = insertelement <8 x i8> %427, i8 %420, i64 3
%429 = insertelement <8 x i8> %428, i8 %421, i64 4
%430 = insertelement <8 x i8> %429, i8 %422, i64 5
%431 = insertelement <8 x i8> %430, i8 %423, i64 6
%432 = insertelement <8 x i8> %431, i8 %424, i64 7
%433 = or <8 x i8> %400, %432
%434 = and i64 %299, 4611686018427387896
%435 = getelementptr inbounds i8, i8* %4, i64 %434
%436 = bitcast i8* %435 to <8 x i8>*
store <8 x i8> %433, <8 x i8>* %436
%437 = add nuw i64 %299, 8
%438 = icmp eq i64 %437, %296
br i1 %438, label %439, label %298
439: ; preds = %298
%440 = icmp eq i64 %295, %296
br i1 %440, label %443, label %441
441: ; preds = %6, %287, %439
%442 = phi i64 [ 0, %6 ], [ %288, %287 ], [ %297, %439 ]
br label %445
443: ; preds = %445, %285, %439, %2
%444 = tail call i32* @freqs_from_input(i8* %4, i32 %3)
ret i32* %444
445: ; preds = %441, %445
%446 = phi i64 [ %466, %445 ], [ %442, %441 ]
%447 = getelementptr inbounds i8, i8* %0, i64 %446
%448 = load i8, i8* %447
%449 = shl i8 %448, 6
%450 = or i64 %446, 1
%451 = getelementptr inbounds i8, i8* %0, i64 %450
%452 = load i8, i8* %451
%453 = shl i8 %452, 4
%454 = or i8 %453, %449
%455 = or i64 %446, 2
%456 = getelementptr inbounds i8, i8* %0, i64 %455
%457 = load i8, i8* %456
%458 = shl i8 %457, 2
%459 = or i8 %454, %458
%460 = or i64 %446, 3
%461 = getelementptr inbounds i8, i8* %0, i64 %460
%462 = load i8, i8* %461
%463 = or i8 %459, %462
%464 = lshr exact i64 %446, 2
%465 = getelementptr inbounds i8, i8* %4, i64 %464
store i8 %463, i8* %465
%466 = add nuw nsw i64 %446, 4
%467 = icmp ult i64 %466, %7
br i1 %467, label %445, label %443
}