#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 u_int8_t;
typedef int u_int32_t;

/* Variables and functions */
u_int32_t __ht_strong_hash(u_int8_t *k, u_int32_t length, u_int32_t initval) {
  u_int32_t a, b, c;
  u_int32_t len;
  len = length;
  a = b = 0x9e3779b9;
  c = initval;
  while (len >= 12) {
    a = a + (k[0] + ((u_int32_t)k[1] << 8) + ((u_int32_t)k[2] << 16) +
             ((u_int32_t)k[3] << 24));
    b = b + (k[4] + ((u_int32_t)k[5] << 8) + ((u_int32_t)k[6] << 16) +
             ((u_int32_t)k[7] << 24));
    c = c + (k[8] + ((u_int32_t)k[9] << 8) + ((u_int32_t)k[10] << 16) +
             ((u_int32_t)k[11] << 24));
    {
      a = a - b;
      a = a - c;
      a = a ^ (c >> 13);
      b = b - c;
      b = b - a;
      b = b ^ (a << 8);
      c = c - a;
      c = c - b;
      c = c ^ (b >> 13);
      a = a - b;
      a = a - c;
      a = a ^ (c >> 12);
      b = b - c;
      b = b - a;
      b = b ^ (a << 16);
      c = c - a;
      c = c - b;
      c = c ^ (b >> 5);
      a = a - b;
      a = a - c;
      a = a ^ (c >> 3);
      b = b - c;
      b = b - a;
      b = b ^ (a << 10);
      c = c - a;
      c = c - b;
      c = c ^ (b >> 15);
    };
    k = k + 12;
    len = len - 12;
  }
  c = c + length;
  switch (len) {
  case 11:
    c = c + ((u_int32_t)k[10] << 24);
  case 10:
    c = c + ((u_int32_t)k[9] << 16);
  case 9:
    c = c + ((u_int32_t)k[8] << 8);
  case 8:
    b = b + ((u_int32_t)k[7] << 24);
  case 7:
    b = b + ((u_int32_t)k[6] << 16);
  case 6:
    b = b + ((u_int32_t)k[5] << 8);
  case 5:
    b = b + k[4];
  case 4:
    a = a + ((u_int32_t)k[3] << 24);
  case 3:
    a = a + ((u_int32_t)k[2] << 16);
  case 2:
    a = a + ((u_int32_t)k[1] << 8);
  case 1:
    a = a + k[0];
  }
  {
    a = a - b;
    a = a - c;
    a = a ^ (c >> 13);
    b = b - c;
    b = b - a;
    b = b ^ (a << 8);
    c = c - a;
    c = c - b;
    c = c ^ (b >> 13);
    a = a - b;
    a = a - c;
    a = a ^ (c >> 12);
    b = b - c;
    b = b - a;
    b = b ^ (a << 16);
    c = c - a;
    c = c - b;
    c = c ^ (b >> 5);
    a = a - b;
    a = a - c;
    a = a ^ (c >> 3);
    b = b - c;
    b = b - a;
    b = b ^ (a << 10);
    c = c - a;
    c = c - b;
    c = c ^ (b >> 15);
  };
  return c;
}


x86 assembly (clang, -O0):
<__ht_strong_hash>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x20(%rbp)
movl   $0x9e3779b9,-0x18(%rbp)
movl   $0x9e3779b9,-0x14(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x1c(%rbp)
cmpl   $0xc,-0x20(%rbp)
jl     1304 <__ht_strong_hash+0x204>
mov    -0x14(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    (%rcx),%ecx
mov    -0x8(%rbp),%rdx
mov    0x4(%rdx),%edx
shl    $0x8,%edx
add    %edx,%ecx
mov    -0x8(%rbp),%rdx
mov    0x8(%rdx),%edx
shl    $0x10,%edx
add    %edx,%ecx
mov    -0x8(%rbp),%rdx
mov    0xc(%rdx),%edx
shl    $0x18,%edx
add    %edx,%ecx
add    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    0x10(%rcx),%ecx
mov    -0x8(%rbp),%rdx
mov    0x14(%rdx),%edx
shl    $0x8,%edx
add    %edx,%ecx
mov    -0x8(%rbp),%rdx
mov    0x18(%rdx),%edx
shl    $0x10,%edx
add    %edx,%ecx
mov    -0x8(%rbp),%rdx
mov    0x1c(%rdx),%edx
shl    $0x18,%edx
add    %edx,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    0x20(%rcx),%ecx
mov    -0x8(%rbp),%rdx
mov    0x24(%rdx),%edx
shl    $0x8,%edx
add    %edx,%ecx
mov    -0x8(%rbp),%rdx
mov    0x28(%rdx),%edx
shl    $0x10,%edx
add    %edx,%ecx
mov    -0x8(%rbp),%rdx
mov    0x2c(%rdx),%edx
shl    $0x18,%edx
add    %edx,%ecx
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sar    $0xd,%ecx
xor    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
shl    $0x8,%ecx
xor    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
sar    $0xd,%ecx
xor    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sar    $0xc,%ecx
xor    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
shl    $0x10,%ecx
xor    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
sar    $0x5,%ecx
xor    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sar    $0x3,%ecx
xor    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
shl    $0xa,%ecx
xor    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
sar    $0xf,%ecx
xor    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
add    $0x30,%rax
mov    %rax,-0x8(%rbp)
mov    -0x20(%rbp),%eax
sub    $0xc,%eax
mov    %eax,-0x20(%rbp)
jmp    1128 <__ht_strong_hash+0x28>
mov    -0x1c(%rbp),%eax
mov    -0xc(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
sub    $0xa,%eax
ja     13f3 <__ht_strong_hash+0x2f3>
mov    -0x28(%rbp),%rax
lea    0xcd1(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x1c(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    0x28(%rcx),%ecx
shl    $0x18,%ecx
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    0x24(%rcx),%ecx
shl    $0x10,%ecx
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    0x20(%rcx),%ecx
shl    $0x8,%ecx
add    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    0x1c(%rcx),%ecx
shl    $0x18,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    0x18(%rcx),%ecx
shl    $0x10,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    0x14(%rcx),%ecx
shl    $0x8,%ecx
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x8(%rbp),%rcx
add    0x10(%rcx),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    0xc(%rcx),%ecx
shl    $0x18,%ecx
add    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    0x8(%rcx),%ecx
shl    $0x10,%ecx
add    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x8(%rbp),%rcx
mov    0x4(%rcx),%ecx
shl    $0x8,%ecx
add    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x8(%rbp),%rcx
add    (%rcx),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sar    $0xd,%ecx
xor    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
shl    $0x8,%ecx
xor    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
sar    $0xd,%ecx
xor    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sar    $0xc,%ecx
xor    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
shl    $0x10,%ecx
xor    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
sar    $0x5,%ecx
xor    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x1c(%rbp),%ecx
sar    $0x3,%ecx
xor    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0x14(%rbp),%ecx
shl    $0xa,%ecx
xor    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
sar    $0xf,%ecx
xor    %ecx,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<__ht_strong_hash>:
push   %rbp
push   %r14
push   %rbx
mov    $0x9e3779b9,%eax
mov    $0x9e3779b9,%ebx
mov    %esi,%r9d
cmp    $0xc,%esi
jl     11f7 <__ht_strong_hash+0xf7>
mov    $0x9e3779b9,%eax
nop
mov    %r9d,%r8d
mov    0x4(%rdi),%r10d
mov    0x8(%rdi),%r9d
shl    $0x8,%r10d
shl    $0x10,%r9d
mov    0xc(%rdi),%r11d
shl    $0x18,%r11d
mov    0x14(%rdi),%r14d
shl    $0x8,%r14d
mov    0x18(%rdi),%ebp
shl    $0x10,%ebp
mov    0x1c(%rdi),%ecx
shl    $0x18,%ecx
add    0x10(%rdi),%ebx
add    %r14d,%ebx
add    %ebp,%ebx
add    %ecx,%ebx
mov    0x24(%rdi),%r14d
shl    $0x8,%r14d
mov    0x28(%rdi),%ebp
shl    $0x10,%ebp
mov    0x2c(%rdi),%ecx
add    0x20(%rdi),%edx
shl    $0x18,%ecx
add    %r14d,%edx
add    %ebp,%edx
add    %ecx,%edx
add    (%rdi),%eax
add    %r10d,%eax
add    %r9d,%eax
add    %r11d,%eax
sub    %ebx,%eax
sub    %edx,%eax
mov    %edx,%ebp
sar    $0xd,%ebp
xor    %eax,%ebp
sub    %edx,%ebx
sub    %ebp,%ebx
mov    %ebp,%ecx
shl    $0x8,%ecx
xor    %ebx,%ecx
sub    %ebp,%edx
sub    %ecx,%edx
mov    %ecx,%eax
sar    $0xd,%eax
xor    %edx,%eax
sub    %ecx,%ebp
sub    %eax,%ebp
mov    %eax,%edx
sar    $0xc,%edx
xor    %ebp,%edx
sub    %eax,%ecx
sub    %edx,%ecx
mov    %edx,%ebp
shl    $0x10,%ebp
xor    %ecx,%ebp
sub    %edx,%eax
sub    %ebp,%eax
mov    %ebp,%ecx
sar    $0x5,%ecx
xor    %eax,%ecx
sub    %ebp,%edx
sub    %ecx,%edx
mov    %ecx,%eax
sar    $0x3,%eax
xor    %edx,%eax
sub    %ecx,%ebp
sub    %eax,%ebp
mov    %eax,%ebx
shl    $0xa,%ebx
xor    %ebp,%ebx
sub    %eax,%ecx
sub    %ebx,%ecx
mov    %ebx,%edx
sar    $0xf,%edx
xor    %ecx,%edx
add    $0x30,%rdi
lea    -0xc(%r8),%r9d
cmp    $0x17,%r8d
ja     1120 <__ht_strong_hash+0x20>
add    %esi,%edx
add    $0xffffffff,%r9d
cmp    $0xa,%r9d
ja     1272 <__ht_strong_hash+0x172>
lea    0xdf6(%rip),%rcx
movslq (%rcx,%r9,4),%rsi
add    %rcx,%rsi
jmp    *%rsi
mov    0x28(%rdi),%ecx
shl    $0x18,%ecx
add    %edx,%ecx
mov    %ecx,%edx
mov    0x24(%rdi),%ecx
shl    $0x10,%ecx
add    %edx,%ecx
mov    %ecx,%edx
mov    0x20(%rdi),%ecx
shl    $0x8,%ecx
add    %edx,%ecx
mov    %ecx,%edx
mov    0x1c(%rdi),%ecx
shl    $0x18,%ecx
add    %ebx,%ecx
mov    %ecx,%ebx
mov    0x18(%rdi),%ecx
shl    $0x10,%ecx
add    %ebx,%ecx
mov    %ecx,%ebx
mov    0x14(%rdi),%ecx
shl    $0x8,%ecx
add    %ebx,%ecx
mov    %ecx,%ebx
add    0x10(%rdi),%ebx
mov    0xc(%rdi),%ecx
shl    $0x18,%ecx
add    %eax,%ecx
mov    %ecx,%eax
mov    0x8(%rdi),%ecx
shl    $0x10,%ecx
add    %eax,%ecx
mov    %ecx,%eax
mov    0x4(%rdi),%ecx
shl    $0x8,%ecx
add    %eax,%ecx
mov    %ecx,%eax
add    (%rdi),%eax
sub    %ebx,%eax
sub    %edx,%eax
mov    %edx,%ecx
sar    $0xd,%ecx
xor    %eax,%ecx
sub    %edx,%ebx
sub    %ecx,%ebx
mov    %ecx,%eax
shl    $0x8,%eax
xor    %ebx,%eax
sub    %ecx,%edx
sub    %eax,%edx
mov    %eax,%esi
sar    $0xd,%esi
xor    %edx,%esi
sub    %eax,%ecx
sub    %esi,%ecx
mov    %esi,%edx
sar    $0xc,%edx
xor    %ecx,%edx
sub    %esi,%eax
sub    %edx,%eax
mov    %edx,%ecx
shl    $0x10,%ecx
xor    %eax,%ecx
sub    %edx,%esi
sub    %ecx,%esi
mov    %ecx,%edi
sar    $0x5,%edi
xor    %esi,%edi
sub    %ecx,%edx
sub    %edi,%edx
mov    %edi,%esi
sar    $0x3,%esi
xor    %edx,%esi
sub    %edi,%ecx
sub    %esi,%ecx
mov    %esi,%eax
shl    $0xa,%eax
xor    %ecx,%eax
add    %eax,%esi
sub    %esi,%edi
sar    $0xf,%eax
xor    %edi,%eax
pop    %rbx
pop    %r14
pop    %rbp
ret

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

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