#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 /*<<< orphan*/ uint8_t;
typedef int uint32_t;

/* Variables and functions */
size_t hfunc_jenkins(const uint8_t *key, const size_t klen) {
  uint32_t a, b, c;
  uint32_t length = klen;
  uint32_t *k;
  size_t out;
  a = b = c = 0xdeadbeef + klen;
  k = (uint32_t *)key;
  while (length > 12) {
    a += k[0];
    b += k[1];
    c += k[2];
    do {
      a -= c;
      a ^= (((c) << (4)) | ((c) >> (32 - (4))));
      c += b;
      b -= a;
      b ^= (((a) << (6)) | ((a) >> (32 - (6))));
      a += c;
      c -= b;
      c ^= (((b) << (8)) | ((b) >> (32 - (8))));
      b += a;
      a -= c;
      a ^= (((c) << (16)) | ((c) >> (32 - (16))));
      c += b;
      b -= a;
      b ^= (((a) << (19)) | ((a) >> (32 - (19))));
      a += c;
      c -= b;
      c ^= (((b) << (4)) | ((b) >> (32 - (4))));
      b += a;
    } while (0);
    ;
    length -= 12;
    k += 3;
  }
  switch (length) {
  case 12:
    c += k[2];
    b += k[1];
    a += k[0];
    break;
  case 11:
    c += k[2] & 0xffffff;
    b += k[1];
    a += k[0];
    break;
  case 10:
    c += k[2] & 0xffff;
    b += k[1];
    a += k[0];
    break;
  case 9:
    c += k[2] & 0xff;
    b += k[1];
    a += k[0];
    break;
  case 8:
    b += k[1];
    a += k[0];
    break;
  case 7:
    b += k[1] & 0xffffff;
    a += k[0];
    break;
  case 6:
    b += k[1] & 0xffff;
    a += k[0];
    break;
  case 5:
    b += k[1] & 0xff;
    a += k[0];
    break;
  case 4:
    a += k[0];
    break;
  case 3:
    a += k[0] & 0xffffff;
    break;
  case 2:
    a += k[0] & 0xffff;
    break;
  case 1:
    a += k[0] & 0xff;
    break;
  case 0:
    goto ret;
  }
  do {
    c ^= b;
    c -= (((b) << (14)) | ((b) >> (32 - (14))));
    a ^= c;
    a -= (((c) << (11)) | ((c) >> (32 - (11))));
    b ^= a;
    b -= (((a) << (25)) | ((a) >> (32 - (25))));
    c ^= b;
    c -= (((b) << (16)) | ((b) >> (32 - (16))));
    a ^= c;
    a -= (((c) << (4)) | ((c) >> (32 - (4))));
    b ^= a;
    b -= (((a) << (14)) | ((a) >> (32 - (14))));
    c ^= b;
    c -= (((b) << (24)) | ((b) >> (32 - (24))));
  } while (0);
  ;
ret:
  out = b;
  out <<= 32;
  out += c;
  return out;
}


x86 assembly (clang, -O0):
<hfunc_jenkins>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    %eax,-0x20(%rbp)
movabs $0xdeadbeef,%rax
add    -0x10(%rbp),%rax
mov    %eax,-0x1c(%rbp)
mov    %eax,-0x18(%rbp)
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
cmpl   $0xc,-0x20(%rbp)
jle    126c <hfunc_jenkins+0x16c>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x4,%eax
mov    -0x1c(%rbp),%ecx
sar    $0x1c,%ecx
or     %ecx,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shl    $0x6,%eax
mov    -0x14(%rbp),%ecx
sar    $0x1a,%ecx
or     %ecx,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
shl    $0x8,%eax
mov    -0x18(%rbp),%ecx
sar    $0x18,%ecx
or     %ecx,%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%eax
shl    $0x10,%eax
mov    -0x1c(%rbp),%ecx
sar    $0x10,%ecx
or     %ecx,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shl    $0x13,%eax
mov    -0x14(%rbp),%ecx
sar    $0xd,%ecx
or     %ecx,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
shl    $0x4,%eax
mov    -0x18(%rbp),%ecx
sar    $0x1c,%ecx
or     %ecx,%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
sub    $0xc,%eax
mov    %eax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0x28(%rbp)
jmp    1132 <hfunc_jenkins+0x32>
mov    -0x20(%rbp),%eax
mov    %rax,-0x38(%rbp)
sub    $0xc,%rax
ja     142b <hfunc_jenkins+0x32b>
mov    -0x38(%rbp),%rax
lea    0xd78(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <hfunc_jenkins+0x32b>
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%eax
and    $0xffffff,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <hfunc_jenkins+0x32b>
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%eax
and    $0xffff,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <hfunc_jenkins+0x32b>
mov    -0x28(%rbp),%rax
mov    0x8(%rax),%eax
and    $0xff,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <hfunc_jenkins+0x32b>
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <hfunc_jenkins+0x32b>
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
and    $0xffffff,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <hfunc_jenkins+0x32b>
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
and    $0xffff,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <hfunc_jenkins+0x32b>
mov    -0x28(%rbp),%rax
mov    0x4(%rax),%eax
and    $0xff,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <hfunc_jenkins+0x32b>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <hfunc_jenkins+0x32b>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
and    $0xffffff,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <hfunc_jenkins+0x32b>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
and    $0xffff,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <hfunc_jenkins+0x32b>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
and    $0xff,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    142b <hfunc_jenkins+0x32b>
jmp    150e <hfunc_jenkins+0x40e>
jmp    1430 <hfunc_jenkins+0x330>
mov    -0x18(%rbp),%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
shl    $0xe,%ecx
mov    -0x18(%rbp),%eax
sar    $0x12,%eax
or     %eax,%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
shl    $0xb,%ecx
mov    -0x1c(%rbp),%eax
sar    $0x15,%eax
or     %eax,%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
shl    $0x19,%ecx
mov    -0x14(%rbp),%eax
sar    $0x7,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
shl    $0x10,%ecx
mov    -0x18(%rbp),%eax
sar    $0x10,%eax
or     %eax,%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x1c(%rbp),%ecx
shl    $0x4,%ecx
mov    -0x1c(%rbp),%eax
sar    $0x1c,%eax
or     %eax,%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
shl    $0xe,%ecx
mov    -0x14(%rbp),%eax
sar    $0x12,%eax
or     %eax,%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
xor    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%ecx
shl    $0x18,%ecx
mov    -0x18(%rbp),%eax
sar    $0x8,%eax
or     %eax,%ecx
mov    -0x1c(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x1c(%rbp)
jmp    150e <hfunc_jenkins+0x40e>
movslq -0x18(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
shl    $0x20,%rax
mov    %rax,-0x30(%rbp)
movslq -0x1c(%rbp),%rax
add    -0x30(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<hfunc_jenkins>:
lea    -0x21524111(%rsi),%eax
cmp    $0xd,%esi
jl     11c9 <hfunc_jenkins+0xc9>
mov    %eax,%r10d
mov    %eax,%r9d
cs nopw 0x0(%rax,%rax,1)
nop
add    (%rdi),%eax
add    0x4(%rdi),%r9d
add    0x8(%rdi),%r10d
mov    %esi,%r8d
sub    %r10d,%eax
mov    %r10d,%ecx
shl    $0x4,%ecx
mov    %r10d,%esi
sar    $0x1c,%esi
or     %ecx,%esi
xor    %eax,%esi
add    %r9d,%r10d
sub    %esi,%r9d
mov    %esi,%eax
shl    $0x6,%eax
mov    %esi,%ecx
sar    $0x1a,%ecx
or     %eax,%ecx
xor    %r9d,%ecx
add    %r10d,%esi
sub    %ecx,%r10d
mov    %ecx,%eax
shl    $0x8,%eax
mov    %ecx,%edx
sar    $0x18,%edx
or     %eax,%edx
xor    %r10d,%edx
add    %esi,%ecx
sub    %edx,%esi
mov    %edx,%r9d
shl    $0x10,%r9d
mov    %edx,%eax
sar    $0x10,%eax
or     %r9d,%eax
xor    %esi,%eax
add    %ecx,%edx
sub    %eax,%ecx
mov    %eax,%esi
shl    $0x13,%esi
mov    %eax,%r9d
sar    $0xd,%r9d
or     %esi,%r9d
xor    %ecx,%r9d
add    %edx,%eax
sub    %r9d,%edx
mov    %r9d,%ecx
shl    $0x4,%ecx
mov    %r9d,%r10d
sar    $0x1c,%r10d
or     %ecx,%r10d
xor    %edx,%r10d
add    %eax,%r9d
lea    -0xc(%r8),%esi
add    $0xc,%rdi
cmp    $0x18,%r8d
ja     1120 <hfunc_jenkins+0x20>
cmp    $0xc,%esi
jbe    11d4 <hfunc_jenkins+0xd4>
jmp    123d <hfunc_jenkins+0x13d>
mov    %eax,%r9d
mov    %eax,%r10d
cmp    $0xc,%esi
ja     123d <hfunc_jenkins+0x13d>
mov    %esi,%ecx
lea    0xe23(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
movzbl (%rdi),%ecx
jmp    11f7 <hfunc_jenkins+0xf7>
movzwl (%rdi),%ecx
jmp    11f7 <hfunc_jenkins+0xf7>
mov    $0xffffff,%ecx
and    (%rdi),%ecx
add    %ecx,%eax
jmp    123d <hfunc_jenkins+0x13d>
movzbl 0x4(%rdi),%ecx
jmp    120f <hfunc_jenkins+0x10f>
movzwl 0x4(%rdi),%ecx
jmp    120f <hfunc_jenkins+0x10f>
mov    $0xffffff,%ecx
and    0x4(%rdi),%ecx
add    %ecx,%r9d
jmp    123b <hfunc_jenkins+0x13b>
movzbl 0x8(%rdi),%ecx
add    %ecx,%r10d
jmp    1237 <hfunc_jenkins+0x137>
movzwl 0x8(%rdi),%ecx
add    %ecx,%r10d
jmp    1237 <hfunc_jenkins+0x137>
mov    $0xffffff,%ecx
and    0x8(%rdi),%ecx
add    %ecx,%r10d
jmp    1237 <hfunc_jenkins+0x137>
add    0x8(%rdi),%r10d
add    0x4(%rdi),%r9d
add    (%rdi),%eax
xor    %r9d,%r10d
mov    %r9d,%ecx
shl    $0xe,%ecx
mov    %r9d,%edx
sar    $0x12,%edx
or     %ecx,%edx
sub    %edx,%r10d
xor    %r10d,%eax
mov    %r10d,%ecx
shl    $0xb,%ecx
mov    %r10d,%edx
sar    $0x15,%edx
or     %ecx,%edx
sub    %edx,%eax
xor    %eax,%r9d
mov    %eax,%ecx
shl    $0x19,%ecx
mov    %eax,%edx
sar    $0x7,%edx
or     %ecx,%edx
sub    %edx,%r9d
xor    %r9d,%r10d
mov    %r9d,%ecx
shl    $0x10,%ecx
mov    %r9d,%edx
sar    $0x10,%edx
or     %ecx,%edx
sub    %edx,%r10d
xor    %r10d,%eax
mov    %r10d,%ecx
shl    $0x4,%ecx
mov    %r10d,%edx
sar    $0x1c,%edx
or     %ecx,%edx
sub    %edx,%eax
xor    %eax,%r9d
mov    %eax,%ecx
shl    $0xe,%ecx
sar    $0x12,%eax
or     %ecx,%eax
sub    %eax,%r9d
xor    %r9d,%r10d
mov    %r9d,%eax
shl    $0x18,%eax
mov    %r9d,%ecx
sar    $0x8,%ecx
or     %eax,%ecx
sub    %ecx,%r10d
shl    $0x20,%r9
movslq %r10d,%rax
add    %r9,%rax
ret

LLVM IR (-O0):
define i64 @hfunc_jenkins(i32* %0, i64 %1) {
%3 = alloca i32*
%4 = alloca i64
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32*
%10 = alloca i64
store i32* %0, i32** %3
store i64 %1, i64* %4
%11 = load i64, i64* %4
%12 = trunc i64 %11 to i32
store i32 %12, i32* %8
%13 = load i64, i64* %4
%14 = add i64 3735928559, %13
%15 = trunc i64 %14 to i32
store i32 %15, i32* %7
store i32 %15, i32* %6
store i32 %15, i32* %5
%16 = load i32*, i32** %3
store i32* %16, i32** %9
br label %17
17: ; preds = %115, %2
%18 = load i32, i32* %8
%19 = icmp sgt i32 %18, 12
br i1 %19, label %20, label %120
20: ; preds = %17
%21 = load i32*, i32** %9
%22 = getelementptr inbounds i32, i32* %21, i64 0
%23 = load i32, i32* %22
%24 = load i32, i32* %5
%25 = add nsw i32 %24, %23
store i32 %25, i32* %5
%26 = load i32*, i32** %9
%27 = getelementptr inbounds i32, i32* %26, i64 1
%28 = load i32, i32* %27
%29 = load i32, i32* %6
%30 = add nsw i32 %29, %28
store i32 %30, i32* %6
%31 = load i32*, i32** %9
%32 = getelementptr inbounds i32, i32* %31, i64 2
%33 = load i32, i32* %32
%34 = load i32, i32* %7
%35 = add nsw i32 %34, %33
store i32 %35, i32* %7
br label %36
36: ; preds = %20
%37 = load i32, i32* %7
%38 = load i32, i32* %5
%39 = sub nsw i32 %38, %37
store i32 %39, i32* %5
%40 = load i32, i32* %7
%41 = shl i32 %40, 4
%42 = load i32, i32* %7
%43 = ashr i32 %42, 28
%44 = or i32 %41, %43
%45 = load i32, i32* %5
%46 = xor i32 %45, %44
store i32 %46, i32* %5
%47 = load i32, i32* %6
%48 = load i32, i32* %7
%49 = add nsw i32 %48, %47
store i32 %49, i32* %7
%50 = load i32, i32* %5
%51 = load i32, i32* %6
%52 = sub nsw i32 %51, %50
store i32 %52, i32* %6
%53 = load i32, i32* %5
%54 = shl i32 %53, 6
%55 = load i32, i32* %5
%56 = ashr i32 %55, 26
%57 = or i32 %54, %56
%58 = load i32, i32* %6
%59 = xor i32 %58, %57
store i32 %59, i32* %6
%60 = load i32, i32* %7
%61 = load i32, i32* %5
%62 = add nsw i32 %61, %60
store i32 %62, i32* %5
%63 = load i32, i32* %6
%64 = load i32, i32* %7
%65 = sub nsw i32 %64, %63
store i32 %65, i32* %7
%66 = load i32, i32* %6
%67 = shl i32 %66, 8
%68 = load i32, i32* %6
%69 = ashr i32 %68, 24
%70 = or i32 %67, %69
%71 = load i32, i32* %7
%72 = xor i32 %71, %70
store i32 %72, i32* %7
%73 = load i32, i32* %5
%74 = load i32, i32* %6
%75 = add nsw i32 %74, %73
store i32 %75, i32* %6
%76 = load i32, i32* %7
%77 = load i32, i32* %5
%78 = sub nsw i32 %77, %76
store i32 %78, i32* %5
%79 = load i32, i32* %7
%80 = shl i32 %79, 16
%81 = load i32, i32* %7
%82 = ashr i32 %81, 16
%83 = or i32 %80, %82
%84 = load i32, i32* %5
%85 = xor i32 %84, %83
store i32 %85, i32* %5
%86 = load i32, i32* %6
%87 = load i32, i32* %7
%88 = add nsw i32 %87, %86
store i32 %88, i32* %7
%89 = load i32, i32* %5
%90 = load i32, i32* %6
%91 = sub nsw i32 %90, %89
store i32 %91, i32* %6
%92 = load i32, i32* %5
%93 = shl i32 %92, 19
%94 = load i32, i32* %5
%95 = ashr i32 %94, 13
%96 = or i32 %93, %95
%97 = load i32, i32* %6
%98 = xor i32 %97, %96
store i32 %98, i32* %6
%99 = load i32, i32* %7
%100 = load i32, i32* %5
%101 = add nsw i32 %100, %99
store i32 %101, i32* %5
%102 = load i32, i32* %6
%103 = load i32, i32* %7
%104 = sub nsw i32 %103, %102
store i32 %104, i32* %7
%105 = load i32, i32* %6
%106 = shl i32 %105, 4
%107 = load i32, i32* %6
%108 = ashr i32 %107, 28
%109 = or i32 %106, %108
%110 = load i32, i32* %7
%111 = xor i32 %110, %109
store i32 %111, i32* %7
%112 = load i32, i32* %5
%113 = load i32, i32* %6
%114 = add nsw i32 %113, %112
store i32 %114, i32* %6
br label %115
115: ; preds = %36
%116 = load i32, i32* %8
%117 = sub nsw i32 %116, 12
store i32 %117, i32* %8
%118 = load i32*, i32** %9
%119 = getelementptr inbounds i32, i32* %118, i64 3
store i32* %119, i32** %9
br label %17
120: ; preds = %17
%121 = load i32, i32* %8
switch i32 %121, label %264 [
i32 12, label %122
i32 11, label %138
i32 10, label %155
i32 9, label %172
i32 8, label %189
i32 7, label %200
i32 6, label %212
i32 5, label %224
i32 4, label %236
i32 3, label %242
i32 2, label %249
i32 1, label %256
i32 0, label %263
]
122: ; preds = %120
%123 = load i32*, i32** %9
%124 = getelementptr inbounds i32, i32* %123, i64 2
%125 = load i32, i32* %124
%126 = load i32, i32* %7
%127 = add nsw i32 %126, %125
store i32 %127, i32* %7
%128 = load i32*, i32** %9
%129 = getelementptr inbounds i32, i32* %128, i64 1
%130 = load i32, i32* %129
%131 = load i32, i32* %6
%132 = add nsw i32 %131, %130
store i32 %132, i32* %6
%133 = load i32*, i32** %9
%134 = getelementptr inbounds i32, i32* %133, i64 0
%135 = load i32, i32* %134
%136 = load i32, i32* %5
%137 = add nsw i32 %136, %135
store i32 %137, i32* %5
br label %264
138: ; preds = %120
%139 = load i32*, i32** %9
%140 = getelementptr inbounds i32, i32* %139, i64 2
%141 = load i32, i32* %140
%142 = and i32 %141, 16777215
%143 = load i32, i32* %7
%144 = add nsw i32 %143, %142
store i32 %144, i32* %7
%145 = load i32*, i32** %9
%146 = getelementptr inbounds i32, i32* %145, i64 1
%147 = load i32, i32* %146
%148 = load i32, i32* %6
%149 = add nsw i32 %148, %147
store i32 %149, i32* %6
%150 = load i32*, i32** %9
%151 = getelementptr inbounds i32, i32* %150, i64 0
%152 = load i32, i32* %151
%153 = load i32, i32* %5
%154 = add nsw i32 %153, %152
store i32 %154, i32* %5
br label %264
155: ; preds = %120
%156 = load i32*, i32** %9
%157 = getelementptr inbounds i32, i32* %156, i64 2
%158 = load i32, i32* %157
%159 = and i32 %158, 65535
%160 = load i32, i32* %7
%161 = add nsw i32 %160, %159
store i32 %161, i32* %7
%162 = load i32*, i32** %9
%163 = getelementptr inbounds i32, i32* %162, i64 1
%164 = load i32, i32* %163
%165 = load i32, i32* %6
%166 = add nsw i32 %165, %164
store i32 %166, i32* %6
%167 = load i32*, i32** %9
%168 = getelementptr inbounds i32, i32* %167, i64 0
%169 = load i32, i32* %168
%170 = load i32, i32* %5
%171 = add nsw i32 %170, %169
store i32 %171, i32* %5
br label %264
172: ; preds = %120
%173 = load i32*, i32** %9
%174 = getelementptr inbounds i32, i32* %173, i64 2
%175 = load i32, i32* %174
%176 = and i32 %175, 255
%177 = load i32, i32* %7
%178 = add nsw i32 %177, %176
store i32 %178, i32* %7
%179 = load i32*, i32** %9
%180 = getelementptr inbounds i32, i32* %179, i64 1
%181 = load i32, i32* %180
%182 = load i32, i32* %6
%183 = add nsw i32 %182, %181
store i32 %183, i32* %6
%184 = load i32*, i32** %9
%185 = getelementptr inbounds i32, i32* %184, i64 0
%186 = load i32, i32* %185
%187 = load i32, i32* %5
%188 = add nsw i32 %187, %186
store i32 %188, i32* %5
br label %264
189: ; preds = %120
%190 = load i32*, i32** %9
%191 = getelementptr inbounds i32, i32* %190, i64 1
%192 = load i32, i32* %191
%193 = load i32, i32* %6
%194 = add nsw i32 %193, %192
store i32 %194, i32* %6
%195 = load i32*, i32** %9
%196 = getelementptr inbounds i32, i32* %195, i64 0
%197 = load i32, i32* %196
%198 = load i32, i32* %5
%199 = add nsw i32 %198, %197
store i32 %199, i32* %5
br label %264
200: ; preds = %120
%201 = load i32*, i32** %9
%202 = getelementptr inbounds i32, i32* %201, i64 1
%203 = load i32, i32* %202
%204 = and i32 %203, 16777215
%205 = load i32, i32* %6
%206 = add nsw i32 %205, %204
store i32 %206, i32* %6
%207 = load i32*, i32** %9
%208 = getelementptr inbounds i32, i32* %207, i64 0
%209 = load i32, i32* %208
%210 = load i32, i32* %5
%211 = add nsw i32 %210, %209
store i32 %211, i32* %5
br label %264
212: ; preds = %120
%213 = load i32*, i32** %9
%214 = getelementptr inbounds i32, i32* %213, i64 1
%215 = load i32, i32* %214
%216 = and i32 %215, 65535
%217 = load i32, i32* %6
%218 = add nsw i32 %217, %216
store i32 %218, i32* %6
%219 = load i32*, i32** %9
%220 = getelementptr inbounds i32, i32* %219, i64 0
%221 = load i32, i32* %220
%222 = load i32, i32* %5
%223 = add nsw i32 %222, %221
store i32 %223, i32* %5
br label %264
224: ; preds = %120
%225 = load i32*, i32** %9
%226 = getelementptr inbounds i32, i32* %225, i64 1
%227 = load i32, i32* %226
%228 = and i32 %227, 255
%229 = load i32, i32* %6
%230 = add nsw i32 %229, %228
store i32 %230, i32* %6
%231 = load i32*, i32** %9
%232 = getelementptr inbounds i32, i32* %231, i64 0
%233 = load i32, i32* %232
%234 = load i32, i32* %5
%235 = add nsw i32 %234, %233
store i32 %235, i32* %5
br label %264
236: ; preds = %120
%237 = load i32*, i32** %9
%238 = getelementptr inbounds i32, i32* %237, i64 0
%239 = load i32, i32* %238
%240 = load i32, i32* %5
%241 = add nsw i32 %240, %239
store i32 %241, i32* %5
br label %264
242: ; preds = %120
%243 = load i32*, i32** %9
%244 = getelementptr inbounds i32, i32* %243, i64 0
%245 = load i32, i32* %244
%246 = and i32 %245, 16777215
%247 = load i32, i32* %5
%248 = add nsw i32 %247, %246
store i32 %248, i32* %5
br label %264
249: ; preds = %120
%250 = load i32*, i32** %9
%251 = getelementptr inbounds i32, i32* %250, i64 0
%252 = load i32, i32* %251
%253 = and i32 %252, 65535
%254 = load i32, i32* %5
%255 = add nsw i32 %254, %253
store i32 %255, i32* %5
br label %264
256: ; preds = %120
%257 = load i32*, i32** %9
%258 = getelementptr inbounds i32, i32* %257, i64 0
%259 = load i32, i32* %258
%260 = and i32 %259, 255
%261 = load i32, i32* %5
%262 = add nsw i32 %261, %260
store i32 %262, i32* %5
br label %264
263: ; preds = %120
br label %337
264: ; preds = %120, %256, %249, %242, %236, %224, %212, %200, %189, %172, %155, %138, %122
br label %265
265: ; preds = %264
%266 = load i32, i32* %6
%267 = load i32, i32* %7
%268 = xor i32 %267, %266
store i32 %268, i32* %7
%269 = load i32, i32* %6
%270 = shl i32 %269, 14
%271 = load i32, i32* %6
%272 = ashr i32 %271, 18
%273 = or i32 %270, %272
%274 = load i32, i32* %7
%275 = sub nsw i32 %274, %273
store i32 %275, i32* %7
%276 = load i32, i32* %7
%277 = load i32, i32* %5
%278 = xor i32 %277, %276
store i32 %278, i32* %5
%279 = load i32, i32* %7
%280 = shl i32 %279, 11
%281 = load i32, i32* %7
%282 = ashr i32 %281, 21
%283 = or i32 %280, %282
%284 = load i32, i32* %5
%285 = sub nsw i32 %284, %283
store i32 %285, i32* %5
%286 = load i32, i32* %5
%287 = load i32, i32* %6
%288 = xor i32 %287, %286
store i32 %288, i32* %6
%289 = load i32, i32* %5
%290 = shl i32 %289, 25
%291 = load i32, i32* %5
%292 = ashr i32 %291, 7
%293 = or i32 %290, %292
%294 = load i32, i32* %6
%295 = sub nsw i32 %294, %293
store i32 %295, i32* %6
%296 = load i32, i32* %6
%297 = load i32, i32* %7
%298 = xor i32 %297, %296
store i32 %298, i32* %7
%299 = load i32, i32* %6
%300 = shl i32 %299, 16
%301 = load i32, i32* %6
%302 = ashr i32 %301, 16
%303 = or i32 %300, %302
%304 = load i32, i32* %7
%305 = sub nsw i32 %304, %303
store i32 %305, i32* %7
%306 = load i32, i32* %7
%307 = load i32, i32* %5
%308 = xor i32 %307, %306
store i32 %308, i32* %5
%309 = load i32, i32* %7
%310 = shl i32 %309, 4
%311 = load i32, i32* %7
%312 = ashr i32 %311, 28
%313 = or i32 %310, %312
%314 = load i32, i32* %5
%315 = sub nsw i32 %314, %313
store i32 %315, i32* %5
%316 = load i32, i32* %5
%317 = load i32, i32* %6
%318 = xor i32 %317, %316
store i32 %318, i32* %6
%319 = load i32, i32* %5
%320 = shl i32 %319, 14
%321 = load i32, i32* %5
%322 = ashr i32 %321, 18
%323 = or i32 %320, %322
%324 = load i32, i32* %6
%325 = sub nsw i32 %324, %323
store i32 %325, i32* %6
%326 = load i32, i32* %6
%327 = load i32, i32* %7
%328 = xor i32 %327, %326
store i32 %328, i32* %7
%329 = load i32, i32* %6
%330 = shl i32 %329, 24
%331 = load i32, i32* %6
%332 = ashr i32 %331, 8
%333 = or i32 %330, %332
%334 = load i32, i32* %7
%335 = sub nsw i32 %334, %333
store i32 %335, i32* %7
br label %336
336: ; preds = %265
br label %337
337: ; preds = %336, %263
%338 = load i32, i32* %6
%339 = sext i32 %338 to i64
store i64 %339, i64* %10
%340 = load i64, i64* %10
%341 = shl i64 %340, 32
store i64 %341, i64* %10
%342 = load i32, i32* %7
%343 = sext i32 %342 to i64
%344 = load i64, i64* %10
%345 = add i64 %344, %343
store i64 %345, i64* %10
%346 = load i64, i64* %10
ret i64 %346
}

LLVM IR (-O2):
define i64 @hfunc_jenkins(i32* %0, i64 %1) {
%3 = trunc i64 %1 to i32
%4 = add i32 %3, -559038737
%5 = icmp sgt i32 %3, 12
br i1 %5, label %6, label %59
6: ; preds = %2, %6
%7 = phi i32 [ %49, %6 ], [ %4, %2 ]
%8 = phi i32* [ %57, %6 ], [ %0, %2 ]
%9 = phi i32 [ %56, %6 ], [ %3, %2 ]
%10 = phi i32 [ %54, %6 ], [ %4, %2 ]
%11 = phi i32 [ %55, %6 ], [ %4, %2 ]
%12 = load i32, i32* %8
%13 = add nsw i32 %12, %7
%14 = getelementptr inbounds i32, i32* %8, i64 1
%15 = load i32, i32* %14
%16 = add nsw i32 %15, %11
%17 = getelementptr inbounds i32, i32* %8, i64 2
%18 = load i32, i32* %17
%19 = add nsw i32 %18, %10
%20 = sub i32 %13, %19
%21 = shl i32 %19, 4
%22 = ashr i32 %19, 28
%23 = or i32 %21, %22
%24 = xor i32 %23, %20
%25 = add nsw i32 %19, %16
%26 = sub nsw i32 %16, %24
%27 = shl i32 %24, 6
%28 = ashr i32 %24, 26
%29 = or i32 %27, %28
%30 = xor i32 %29, %26
%31 = add nsw i32 %24, %25
%32 = sub nsw i32 %25, %30
%33 = shl i32 %30, 8
%34 = ashr i32 %30, 24
%35 = or i32 %33, %34
%36 = xor i32 %35, %32
%37 = add nsw i32 %30, %31
%38 = sub nsw i32 %31, %36
%39 = shl i32 %36, 16
%40 = ashr i32 %36, 16
%41 = or i32 %39, %40
%42 = xor i32 %41, %38
%43 = add nsw i32 %36, %37
%44 = sub nsw i32 %37, %42
%45 = shl i32 %42, 19
%46 = ashr i32 %42, 13
%47 = or i32 %45, %46
%48 = xor i32 %47, %44
%49 = add nsw i32 %42, %43
%50 = sub nsw i32 %43, %48
%51 = shl i32 %48, 4
%52 = ashr i32 %48, 28
%53 = or i32 %51, %52
%54 = xor i32 %53, %50
%55 = add nsw i32 %48, %49
%56 = add nsw i32 %9, -12
%57 = getelementptr inbounds i32, i32* %8, i64 3
%58 = icmp ugt i32 %9, 24
br i1 %58, label %6, label %59
59: ; preds = %6, %2
%60 = phi i32 [ %4, %2 ], [ %55, %6 ]
%61 = phi i32 [ %4, %2 ], [ %54, %6 ]
%62 = phi i32 [ %3, %2 ], [ %56, %6 ]
%63 = phi i32* [ %0, %2 ], [ %57, %6 ]
%64 = phi i32 [ %4, %2 ], [ %49, %6 ]
switch i32 %62, label %146 [
i32 12, label %65
i32 11, label %74
i32 10, label %84
i32 9, label %94
i32 8, label %104
i32 7, label %110
i32 6, label %117
i32 5, label %124
i32 4, label %131
i32 3, label %134
i32 2, label %138
i32 1, label %142
i32 0, label %185
]
65: ; preds = %59
%66 = getelementptr inbounds i32, i32* %63, i64 2
%67 = load i32, i32* %66
%68 = add nsw i32 %67, %61
%69 = getelementptr inbounds i32, i32* %63, i64 1
%70 = load i32, i32* %69
%71 = add nsw i32 %70, %60
%72 = load i32, i32* %63
%73 = add nsw i32 %72, %64
br label %146
74: ; preds = %59
%75 = getelementptr inbounds i32, i32* %63, i64 2
%76 = load i32, i32* %75
%77 = and i32 %76, 16777215
%78 = add nsw i32 %77, %61
%79 = getelementptr inbounds i32, i32* %63, i64 1
%80 = load i32, i32* %79
%81 = add nsw i32 %80, %60
%82 = load i32, i32* %63
%83 = add nsw i32 %82, %64
br label %146
84: ; preds = %59
%85 = getelementptr inbounds i32, i32* %63, i64 2
%86 = load i32, i32* %85
%87 = and i32 %86, 65535
%88 = add nsw i32 %87, %61
%89 = getelementptr inbounds i32, i32* %63, i64 1
%90 = load i32, i32* %89
%91 = add nsw i32 %90, %60
%92 = load i32, i32* %63
%93 = add nsw i32 %92, %64
br label %146
94: ; preds = %59
%95 = getelementptr inbounds i32, i32* %63, i64 2
%96 = load i32, i32* %95
%97 = and i32 %96, 255
%98 = add nsw i32 %97, %61
%99 = getelementptr inbounds i32, i32* %63, i64 1
%100 = load i32, i32* %99
%101 = add nsw i32 %100, %60
%102 = load i32, i32* %63
%103 = add nsw i32 %102, %64
br label %146
104: ; preds = %59
%105 = getelementptr inbounds i32, i32* %63, i64 1
%106 = load i32, i32* %105
%107 = add nsw i32 %106, %60
%108 = load i32, i32* %63
%109 = add nsw i32 %108, %64
br label %146
110: ; preds = %59
%111 = getelementptr inbounds i32, i32* %63, i64 1
%112 = load i32, i32* %111
%113 = and i32 %112, 16777215
%114 = add nsw i32 %113, %60
%115 = load i32, i32* %63
%116 = add nsw i32 %115, %64
br label %146
117: ; preds = %59
%118 = getelementptr inbounds i32, i32* %63, i64 1
%119 = load i32, i32* %118
%120 = and i32 %119, 65535
%121 = add nsw i32 %120, %60
%122 = load i32, i32* %63
%123 = add nsw i32 %122, %64
br label %146
124: ; preds = %59
%125 = getelementptr inbounds i32, i32* %63, i64 1
%126 = load i32, i32* %125
%127 = and i32 %126, 255
%128 = add nsw i32 %127, %60
%129 = load i32, i32* %63
%130 = add nsw i32 %129, %64
br label %146
131: ; preds = %59
%132 = load i32, i32* %63
%133 = add nsw i32 %132, %64
br label %146
134: ; preds = %59
%135 = load i32, i32* %63
%136 = and i32 %135, 16777215
%137 = add nsw i32 %136, %64
br label %146
138: ; preds = %59
%139 = load i32, i32* %63
%140 = and i32 %139, 65535
%141 = add nsw i32 %140, %64
br label %146
142: ; preds = %59
%143 = load i32, i32* %63
%144 = and i32 %143, 255
%145 = add nsw i32 %144, %64
br label %146
146: ; preds = %65, %74, %84, %94, %104, %110, %117, %124, %131, %134, %138, %142, %59
%147 = phi i32 [ %60, %59 ], [ %60, %142 ], [ %60, %138 ], [ %60, %134 ], [ %60, %131 ], [ %128, %124 ], [ %121, %117 ], [ %114, %110 ], [ %107, %104 ], [ %101, %94 ], [ %91, %84 ], [ %81, %74 ], [ %71, %65 ]
%148 = phi i32 [ %61, %59 ], [ %61, %142 ], [ %61, %138 ], [ %61, %134 ], [ %61, %131 ], [ %61, %124 ], [ %61, %117 ], [ %61, %110 ], [ %61, %104 ], [ %98, %94 ], [ %88, %84 ], [ %78, %74 ], [ %68, %65 ]
%149 = phi i32 [ %64, %59 ], [ %145, %142 ], [ %141, %138 ], [ %137, %134 ], [ %133, %131 ], [ %130, %124 ], [ %123, %117 ], [ %116, %110 ], [ %109, %104 ], [ %103, %94 ], [ %93, %84 ], [ %83, %74 ], [ %73, %65 ]
%150 = xor i32 %148, %147
%151 = shl i32 %147, 14
%152 = ashr i32 %147, 18
%153 = or i32 %151, %152
%154 = sub nsw i32 %150, %153
%155 = xor i32 %154, %149
%156 = shl i32 %154, 11
%157 = ashr i32 %154, 21
%158 = or i32 %156, %157
%159 = sub nsw i32 %155, %158
%160 = xor i32 %159, %147
%161 = shl i32 %159, 25
%162 = ashr i32 %159, 7
%163 = or i32 %161, %162
%164 = sub nsw i32 %160, %163
%165 = xor i32 %164, %154
%166 = shl i32 %164, 16
%167 = ashr i32 %164, 16
%168 = or i32 %166, %167
%169 = sub nsw i32 %165, %168
%170 = xor i32 %169, %159
%171 = shl i32 %169, 4
%172 = ashr i32 %169, 28
%173 = or i32 %171, %172
%174 = sub nsw i32 %170, %173
%175 = xor i32 %174, %164
%176 = shl i32 %174, 14
%177 = ashr i32 %174, 18
%178 = or i32 %176, %177
%179 = sub nsw i32 %175, %178
%180 = xor i32 %179, %169
%181 = shl i32 %179, 24
%182 = ashr i32 %179, 8
%183 = or i32 %181, %182
%184 = sub nsw i32 %180, %183
br label %185
185: ; preds = %59, %146
%186 = phi i32 [ %179, %146 ], [ %60, %59 ]
%187 = phi i32 [ %184, %146 ], [ %61, %59 ]
%188 = zext i32 %186 to i64
%189 = shl nuw i64 %188, 32
%190 = sext i32 %187 to i64
%191 = add i64 %189, %190
ret i64 %191
}