#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 */
unsigned int XXH_small(void const *, int, unsigned int);
unsigned int XXH_strong32(const void *input, int len, unsigned int seed) {
  if (len < 16)
    return XXH_small(input, len, seed);
  {
    const unsigned char *p = (const unsigned char *)input;
    const unsigned char *const bEnd = p + len;
    unsigned int v1 = seed + 2654435761U;
    unsigned int v2 = v1 * 2246822519U + len;
    unsigned int v3 = v2 * 3266489917U;
    unsigned int v4 = v3 * 668265263U;
    const unsigned char *const limit = bEnd - 16;
    unsigned int crc;
    while (p < limit) {
      v1 += ((v1 << 13) | (v1 >> (32 - 13)));
      v1 *= 2654435761U;
      v1 += (*(unsigned int *)p);
      p += 4;
      v2 += ((v2 << 11) | (v2 >> (32 - 11)));
      v2 *= 2654435761U;
      v2 += (*(unsigned int *)p);
      p += 4;
      v3 += ((v3 << 17) | (v3 >> (32 - 17)));
      v3 *= 2654435761U;
      v3 += (*(unsigned int *)p);
      p += 4;
      v4 += ((v4 << 19) | (v4 >> (32 - 19)));
      v4 *= 2654435761U;
      v4 += (*(unsigned int *)p);
      p += 4;
    }
    p = bEnd - 16;
    v1 += ((v1 << 17) | (v1 >> (32 - 17)));
    v2 += ((v2 << 19) | (v2 >> (32 - 19)));
    v3 += ((v3 << 13) | (v3 >> (32 - 13)));
    v4 += ((v4 << 11) | (v4 >> (32 - 11)));
    v1 *= 2654435761U;
    v2 *= 2654435761U;
    v3 *= 2654435761U;
    v4 *= 2654435761U;
    v1 += *(unsigned int *)p;
    p += 4;
    v2 += *(unsigned int *)p;
    p += 4;
    v3 += *(unsigned int *)p;
    p += 4;
    v4 += *(unsigned int *)p;
    v1 *= 2246822519U;
    v2 *= 2246822519U;
    v3 *= 2246822519U;
    v4 *= 2246822519U;
    v1 += ((v1 << 11) | (v1 >> (32 - 11)));
    v2 += ((v2 << 17) | (v2 >> (32 - 17)));
    v3 += ((v3 << 19) | (v3 >> (32 - 19)));
    v4 += ((v4 << 13) | (v4 >> (32 - 13)));
    v1 *= 3266489917U;
    v2 *= 3266489917U;
    v3 *= 3266489917U;
    v4 *= 3266489917U;
    crc = v1 + ((v2 << 3) | (v2 >> (32 - 3))) + ((v3 << 6) | (v3 >> (32 - 6))) +
          ((v4 << 9) | (v4 >> (32 - 9)));
    crc ^= crc >> 11;
    crc += (668265263U + len) * 2654435761U;
    crc ^= crc >> 15;
    crc *= 2246822519U;
    crc ^= crc >> 13;
    return crc;
  }
}


x86 assembly (clang, -O0):
<XXH_strong32>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
cmpl   $0x10,-0x14(%rbp)
jge    1143 <XXH_strong32+0x33>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
call   1030 <XXH_small@plt>
mov    %eax,-0x4(%rbp)
jmp    1473 <XXH_strong32+0x363>
mov    -0x10(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movslq -0x14(%rbp),%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%eax
add    $0x9e3779b1,%eax
mov    %eax,-0x2c(%rbp)
imul   $0x85ebca77,-0x2c(%rbp),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x30(%rbp)
imul   $0xc2b2ae3d,-0x30(%rbp),%eax
mov    %eax,-0x34(%rbp)
imul   $0x27d4eb2f,-0x34(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
add    $0xfffffffffffffff0,%rax
mov    %rax,-0x40(%rbp)
mov    -0x20(%rbp),%rax
cmp    -0x40(%rbp),%rax
jae    127d <XXH_strong32+0x16d>
mov    -0x2c(%rbp),%eax
shl    $0xd,%eax
mov    -0x2c(%rbp),%ecx
shr    $0x13,%ecx
or     %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
imul   $0x9e3779b1,-0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x20(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%eax
shl    $0xb,%eax
mov    -0x30(%rbp),%ecx
shr    $0x15,%ecx
or     %ecx,%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
imul   $0x9e3779b1,-0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x11,%eax
mov    -0x34(%rbp),%ecx
shr    $0xf,%ecx
or     %ecx,%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
imul   $0x9e3779b1,-0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
mov    -0x38(%rbp),%eax
shl    $0x13,%eax
mov    -0x38(%rbp),%ecx
shr    $0xd,%ecx
or     %ecx,%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
imul   $0x9e3779b1,-0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
jmp    1192 <XXH_strong32+0x82>
mov    -0x28(%rbp),%rax
add    $0xfffffffffffffff0,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
shl    $0x11,%eax
mov    -0x2c(%rbp),%ecx
shr    $0xf,%ecx
or     %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
shl    $0x13,%eax
mov    -0x30(%rbp),%ecx
shr    $0xd,%ecx
or     %ecx,%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
shl    $0xd,%eax
mov    -0x34(%rbp),%ecx
shr    $0x13,%ecx
or     %ecx,%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
shl    $0xb,%eax
mov    -0x38(%rbp),%ecx
shr    $0x15,%ecx
or     %ecx,%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
imul   $0x9e3779b1,-0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
imul   $0x9e3779b1,-0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
imul   $0x9e3779b1,-0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
imul   $0x9e3779b1,-0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x20(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x20(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x20(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    (%rax),%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
imul   $0x85ebca77,-0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
imul   $0x85ebca77,-0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
imul   $0x85ebca77,-0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
imul   $0x85ebca77,-0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x2c(%rbp),%eax
shl    $0xb,%eax
mov    -0x2c(%rbp),%ecx
shr    $0x15,%ecx
or     %ecx,%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
shl    $0x11,%eax
mov    -0x30(%rbp),%ecx
shr    $0xf,%ecx
or     %ecx,%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
shl    $0x13,%eax
mov    -0x34(%rbp),%ecx
shr    $0xd,%ecx
or     %ecx,%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x38(%rbp),%eax
shl    $0xd,%eax
mov    -0x38(%rbp),%ecx
shr    $0x13,%ecx
or     %ecx,%eax
add    -0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
imul   $0xc2b2ae3d,-0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
imul   $0xc2b2ae3d,-0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
imul   $0xc2b2ae3d,-0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
imul   $0xc2b2ae3d,-0x38(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x30(%rbp),%ecx
shl    $0x3,%ecx
mov    -0x30(%rbp),%edx
shr    $0x1d,%edx
or     %edx,%ecx
add    %ecx,%eax
mov    -0x34(%rbp),%ecx
shl    $0x6,%ecx
mov    -0x34(%rbp),%edx
shr    $0x1a,%edx
or     %edx,%ecx
add    %ecx,%eax
mov    -0x38(%rbp),%ecx
shl    $0x9,%ecx
mov    -0x38(%rbp),%edx
shr    $0x17,%edx
or     %edx,%ecx
add    %ecx,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
shr    $0xb,%eax
xor    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x14(%rbp),%eax
add    $0x27d4eb2f,%eax
imul   $0x9e3779b1,%eax,%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
shr    $0xf,%eax
xor    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
imul   $0x85ebca77,-0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
shr    $0xd,%eax
xor    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<XXH_strong32>:
cmp    $0xf,%esi
jg     111a <XXH_strong32+0xa>
jmp    1030 <XXH_small@plt>
push   %rbx
mov    %esi,%r8d
add    $0x9e3779b1,%edx
imul   $0x85ebca77,%edx,%ecx
add    %esi,%ecx
imul   $0xc2b2ae3d,%ecx,%r10d
imul   $0x5a43fc33,%ecx,%r9d
add    %rdi,%r8
add    $0xfffffffffffffff0,%r8
cmp    %rdi,%r8
jbe    11a0 <XXH_strong32+0x90>
cs nopw 0x0(%rax,%rax,1)
mov    %edx,%eax
rol    $0xd,%eax
add    %edx,%eax
imul   $0x9e3779b1,%eax,%edx
add    (%rdi),%edx
mov    %ecx,%eax
rol    $0xb,%eax
add    %ecx,%eax
imul   $0x9e3779b1,%eax,%ecx
add    0x4(%rdi),%ecx
mov    %r10d,%eax
rol    $0x11,%eax
add    %r10d,%eax
imul   $0x9e3779b1,%eax,%r10d
add    0x8(%rdi),%r10d
mov    %r9d,%eax
rol    $0x13,%eax
add    %r9d,%eax
imul   $0x9e3779b1,%eax,%r9d
add    0xc(%rdi),%r9d
add    $0x10,%rdi
cmp    %r8,%rdi
jb     1150 <XXH_strong32+0x40>
mov    %edx,%eax
rol    $0x11,%eax
add    %edx,%eax
mov    %ecx,%edx
rol    $0x13,%edx
add    %ecx,%edx
mov    %r10d,%ecx
rol    $0xd,%ecx
add    %r10d,%ecx
mov    %r9d,%edi
rol    $0xb,%edi
add    %r9d,%edi
imul   $0x9e3779b1,%eax,%eax
imul   $0x9e3779b1,%edx,%edx
imul   $0x9e3779b1,%ecx,%r9d
add    (%r8),%eax
add    0x4(%r8),%edx
add    0x8(%r8),%r9d
imul   $0x9e3779b1,%edi,%r10d
add    0xc(%r8),%r10d
imul   $0x85ebca77,%eax,%ecx
imul   $0x85ebca77,%edx,%edi
imul   $0x85ebca77,%r9d,%r8d
imul   $0x85ebca77,%r10d,%r11d
shr    $0x15,%ecx
imul   $0xe43f8277,%eax,%eax
add    %ecx,%eax
shr    $0xf,%edi
imul   $0x1ad9ca77,%edx,%ecx
add    %edi,%ecx
shr    $0xd,%r8d
imul   $0xd9a3ca77,%r9d,%ebx
add    %r8d,%ebx
shr    $0x13,%r11d
imul   $0xff3aaa77,%r10d,%r9d
add    %r11d,%r9d
imul   $0xc2b2ae3d,%eax,%r8d
imul   $0xc2b2ae3d,%ecx,%eax
imul   $0xc2b2ae3d,%ebx,%edi
imul   $0xc2b2ae3d,%r9d,%edx
imul   $0x159571e8,%ecx,%ecx
add    %r8d,%ecx
shr    $0x1d,%eax
add    %ecx,%eax
imul   $0xacab8f40,%ebx,%ecx
add    %eax,%ecx
shr    $0x1a,%edi
add    %ecx,%edi
imul   $0x655c7a00,%r9d,%eax
add    %edi,%eax
shr    $0x17,%edx
add    %eax,%edx
mov    %edx,%eax
shr    $0xb,%eax
xor    %edx,%eax
imul   $0x9e3779b1,%esi,%ecx
add    %ecx,%eax
add    $0xb678d27f,%eax
mov    %eax,%ecx
shr    $0xf,%ecx
xor    %eax,%ecx
imul   $0x85ebca77,%ecx,%ecx
mov    %ecx,%eax
shr    $0xd,%eax
xor    %ecx,%eax
pop    %rbx
ret

LLVM IR (-O0):
define i32 @XXH_strong32(i8* %0, i32 %1, i32 %2) {
%4 = alloca i32
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i8*
%9 = alloca i8*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i8*
%15 = alloca i32
store i8* %0, i8** %5
store i32 %1, i32* %6
store i32 %2, i32* %7
%16 = load i32, i32* %6
%17 = icmp slt i32 %16, 16
br i1 %17, label %18, label %23
18: ; preds = %3
%19 = load i8*, i8** %5
%20 = load i32, i32* %6
%21 = load i32, i32* %7
%22 = call i32 @XXH_small(i8* %19, i32 %20, i32 %21)
store i32 %22, i32* %4
br label %258
23: ; preds = %3
%24 = load i8*, i8** %5
store i8* %24, i8** %8
%25 = load i8*, i8** %8
%26 = load i32, i32* %6
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds i8, i8* %25, i64 %27
store i8* %28, i8** %9
%29 = load i32, i32* %7
%30 = add i32 %29, -1640531535
store i32 %30, i32* %10
%31 = load i32, i32* %10
%32 = mul i32 %31, -2048144777
%33 = load i32, i32* %6
%34 = add i32 %32, %33
store i32 %34, i32* %11
%35 = load i32, i32* %11
%36 = mul i32 %35, -1028477379
store i32 %36, i32* %12
%37 = load i32, i32* %12
%38 = mul i32 %37, 668265263
store i32 %38, i32* %13
%39 = load i8*, i8** %9
%40 = getelementptr inbounds i8, i8* %39, i64 -16
store i8* %40, i8** %14
br label %41
41: ; preds = %45, %23
%42 = load i8*, i8** %8
%43 = load i8*, i8** %14
%44 = icmp ult i8* %42, %43
br i1 %44, label %45, label %110
45: ; preds = %41
%46 = load i32, i32* %10
%47 = shl i32 %46, 13
%48 = load i32, i32* %10
%49 = lshr i32 %48, 19
%50 = or i32 %47, %49
%51 = load i32, i32* %10
%52 = add i32 %51, %50
store i32 %52, i32* %10
%53 = load i32, i32* %10
%54 = mul i32 %53, -1640531535
store i32 %54, i32* %10
%55 = load i8*, i8** %8
%56 = bitcast i8* %55 to i32*
%57 = load i32, i32* %56
%58 = load i32, i32* %10
%59 = add i32 %58, %57
store i32 %59, i32* %10
%60 = load i8*, i8** %8
%61 = getelementptr inbounds i8, i8* %60, i64 4
store i8* %61, i8** %8
%62 = load i32, i32* %11
%63 = shl i32 %62, 11
%64 = load i32, i32* %11
%65 = lshr i32 %64, 21
%66 = or i32 %63, %65
%67 = load i32, i32* %11
%68 = add i32 %67, %66
store i32 %68, i32* %11
%69 = load i32, i32* %11
%70 = mul i32 %69, -1640531535
store i32 %70, i32* %11
%71 = load i8*, i8** %8
%72 = bitcast i8* %71 to i32*
%73 = load i32, i32* %72
%74 = load i32, i32* %11
%75 = add i32 %74, %73
store i32 %75, i32* %11
%76 = load i8*, i8** %8
%77 = getelementptr inbounds i8, i8* %76, i64 4
store i8* %77, i8** %8
%78 = load i32, i32* %12
%79 = shl i32 %78, 17
%80 = load i32, i32* %12
%81 = lshr i32 %80, 15
%82 = or i32 %79, %81
%83 = load i32, i32* %12
%84 = add i32 %83, %82
store i32 %84, i32* %12
%85 = load i32, i32* %12
%86 = mul i32 %85, -1640531535
store i32 %86, i32* %12
%87 = load i8*, i8** %8
%88 = bitcast i8* %87 to i32*
%89 = load i32, i32* %88
%90 = load i32, i32* %12
%91 = add i32 %90, %89
store i32 %91, i32* %12
%92 = load i8*, i8** %8
%93 = getelementptr inbounds i8, i8* %92, i64 4
store i8* %93, i8** %8
%94 = load i32, i32* %13
%95 = shl i32 %94, 19
%96 = load i32, i32* %13
%97 = lshr i32 %96, 13
%98 = or i32 %95, %97
%99 = load i32, i32* %13
%100 = add i32 %99, %98
store i32 %100, i32* %13
%101 = load i32, i32* %13
%102 = mul i32 %101, -1640531535
store i32 %102, i32* %13
%103 = load i8*, i8** %8
%104 = bitcast i8* %103 to i32*
%105 = load i32, i32* %104
%106 = load i32, i32* %13
%107 = add i32 %106, %105
store i32 %107, i32* %13
%108 = load i8*, i8** %8
%109 = getelementptr inbounds i8, i8* %108, i64 4
store i8* %109, i8** %8
br label %41
110: ; preds = %41
%111 = load i8*, i8** %9
%112 = getelementptr inbounds i8, i8* %111, i64 -16
store i8* %112, i8** %8
%113 = load i32, i32* %10
%114 = shl i32 %113, 17
%115 = load i32, i32* %10
%116 = lshr i32 %115, 15
%117 = or i32 %114, %116
%118 = load i32, i32* %10
%119 = add i32 %118, %117
store i32 %119, i32* %10
%120 = load i32, i32* %11
%121 = shl i32 %120, 19
%122 = load i32, i32* %11
%123 = lshr i32 %122, 13
%124 = or i32 %121, %123
%125 = load i32, i32* %11
%126 = add i32 %125, %124
store i32 %126, i32* %11
%127 = load i32, i32* %12
%128 = shl i32 %127, 13
%129 = load i32, i32* %12
%130 = lshr i32 %129, 19
%131 = or i32 %128, %130
%132 = load i32, i32* %12
%133 = add i32 %132, %131
store i32 %133, i32* %12
%134 = load i32, i32* %13
%135 = shl i32 %134, 11
%136 = load i32, i32* %13
%137 = lshr i32 %136, 21
%138 = or i32 %135, %137
%139 = load i32, i32* %13
%140 = add i32 %139, %138
store i32 %140, i32* %13
%141 = load i32, i32* %10
%142 = mul i32 %141, -1640531535
store i32 %142, i32* %10
%143 = load i32, i32* %11
%144 = mul i32 %143, -1640531535
store i32 %144, i32* %11
%145 = load i32, i32* %12
%146 = mul i32 %145, -1640531535
store i32 %146, i32* %12
%147 = load i32, i32* %13
%148 = mul i32 %147, -1640531535
store i32 %148, i32* %13
%149 = load i8*, i8** %8
%150 = bitcast i8* %149 to i32*
%151 = load i32, i32* %150
%152 = load i32, i32* %10
%153 = add i32 %152, %151
store i32 %153, i32* %10
%154 = load i8*, i8** %8
%155 = getelementptr inbounds i8, i8* %154, i64 4
store i8* %155, i8** %8
%156 = load i8*, i8** %8
%157 = bitcast i8* %156 to i32*
%158 = load i32, i32* %157
%159 = load i32, i32* %11
%160 = add i32 %159, %158
store i32 %160, i32* %11
%161 = load i8*, i8** %8
%162 = getelementptr inbounds i8, i8* %161, i64 4
store i8* %162, i8** %8
%163 = load i8*, i8** %8
%164 = bitcast i8* %163 to i32*
%165 = load i32, i32* %164
%166 = load i32, i32* %12
%167 = add i32 %166, %165
store i32 %167, i32* %12
%168 = load i8*, i8** %8
%169 = getelementptr inbounds i8, i8* %168, i64 4
store i8* %169, i8** %8
%170 = load i8*, i8** %8
%171 = bitcast i8* %170 to i32*
%172 = load i32, i32* %171
%173 = load i32, i32* %13
%174 = add i32 %173, %172
store i32 %174, i32* %13
%175 = load i32, i32* %10
%176 = mul i32 %175, -2048144777
store i32 %176, i32* %10
%177 = load i32, i32* %11
%178 = mul i32 %177, -2048144777
store i32 %178, i32* %11
%179 = load i32, i32* %12
%180 = mul i32 %179, -2048144777
store i32 %180, i32* %12
%181 = load i32, i32* %13
%182 = mul i32 %181, -2048144777
store i32 %182, i32* %13
%183 = load i32, i32* %10
%184 = shl i32 %183, 11
%185 = load i32, i32* %10
%186 = lshr i32 %185, 21
%187 = or i32 %184, %186
%188 = load i32, i32* %10
%189 = add i32 %188, %187
store i32 %189, i32* %10
%190 = load i32, i32* %11
%191 = shl i32 %190, 17
%192 = load i32, i32* %11
%193 = lshr i32 %192, 15
%194 = or i32 %191, %193
%195 = load i32, i32* %11
%196 = add i32 %195, %194
store i32 %196, i32* %11
%197 = load i32, i32* %12
%198 = shl i32 %197, 19
%199 = load i32, i32* %12
%200 = lshr i32 %199, 13
%201 = or i32 %198, %200
%202 = load i32, i32* %12
%203 = add i32 %202, %201
store i32 %203, i32* %12
%204 = load i32, i32* %13
%205 = shl i32 %204, 13
%206 = load i32, i32* %13
%207 = lshr i32 %206, 19
%208 = or i32 %205, %207
%209 = load i32, i32* %13
%210 = add i32 %209, %208
store i32 %210, i32* %13
%211 = load i32, i32* %10
%212 = mul i32 %211, -1028477379
store i32 %212, i32* %10
%213 = load i32, i32* %11
%214 = mul i32 %213, -1028477379
store i32 %214, i32* %11
%215 = load i32, i32* %12
%216 = mul i32 %215, -1028477379
store i32 %216, i32* %12
%217 = load i32, i32* %13
%218 = mul i32 %217, -1028477379
store i32 %218, i32* %13
%219 = load i32, i32* %10
%220 = load i32, i32* %11
%221 = shl i32 %220, 3
%222 = load i32, i32* %11
%223 = lshr i32 %222, 29
%224 = or i32 %221, %223
%225 = add i32 %219, %224
%226 = load i32, i32* %12
%227 = shl i32 %226, 6
%228 = load i32, i32* %12
%229 = lshr i32 %228, 26
%230 = or i32 %227, %229
%231 = add i32 %225, %230
%232 = load i32, i32* %13
%233 = shl i32 %232, 9
%234 = load i32, i32* %13
%235 = lshr i32 %234, 23
%236 = or i32 %233, %235
%237 = add i32 %231, %236
store i32 %237, i32* %15
%238 = load i32, i32* %15
%239 = lshr i32 %238, 11
%240 = load i32, i32* %15
%241 = xor i32 %240, %239
store i32 %241, i32* %15
%242 = load i32, i32* %6
%243 = add i32 668265263, %242
%244 = mul i32 %243, -1640531535
%245 = load i32, i32* %15
%246 = add i32 %245, %244
store i32 %246, i32* %15
%247 = load i32, i32* %15
%248 = lshr i32 %247, 15
%249 = load i32, i32* %15
%250 = xor i32 %249, %248
store i32 %250, i32* %15
%251 = load i32, i32* %15
%252 = mul i32 %251, -2048144777
store i32 %252, i32* %15
%253 = load i32, i32* %15
%254 = lshr i32 %253, 13
%255 = load i32, i32* %15
%256 = xor i32 %255, %254
store i32 %256, i32* %15
%257 = load i32, i32* %15
store i32 %257, i32* %4
br label %258
258: ; preds = %110, %18
%259 = load i32, i32* %4
ret i32 %259
}

LLVM IR (-O2):
define i32 @XXH_strong32(i8* %0, i32 %1, i32 %2) {
%4 = icmp slt i32 %1, 16
br i1 %4, label %5, label %7
5: ; preds = %3
%6 = tail call i32 @XXH_small(i8* %0, i32 %1, i32 %2)
br label %126
7: ; preds = %3
%8 = zext i32 %1 to i64
%9 = getelementptr inbounds i8, i8* %0, i64 %8
%10 = add i32 %2, -1640531535
%11 = mul i32 %10, -2048144777
%12 = add i32 %11, %1
%13 = mul i32 %12, -1028477379
%14 = mul i32 %12, 1514404915
%15 = getelementptr inbounds i8, i8* %9, i64 -16
%16 = icmp ugt i8* %15, %0
br i1 %16, label %17, label %52
17: ; preds = %7, %17
%18 = phi i8* [ %50, %17 ], [ %0, %7 ]
%19 = phi i32 [ %49, %17 ], [ %14, %7 ]
%20 = phi i32 [ %42, %17 ], [ %13, %7 ]
%21 = phi i32 [ %35, %17 ], [ %12, %7 ]
%22 = phi i32 [ %28, %17 ], [ %10, %7 ]
%23 = tail call i32 @llvm.fshl.i32(i32 %22, i32 %22, i32 13)
%24 = add i32 %23, %22
%25 = mul i32 %24, -1640531535
%26 = bitcast i8* %18 to i32*
%27 = load i32, i32* %26
%28 = add i32 %27, %25
%29 = getelementptr inbounds i8, i8* %18, i64 4
%30 = tail call i32 @llvm.fshl.i32(i32 %21, i32 %21, i32 11)
%31 = add i32 %30, %21
%32 = mul i32 %31, -1640531535
%33 = bitcast i8* %29 to i32*
%34 = load i32, i32* %33
%35 = add i32 %34, %32
%36 = getelementptr inbounds i8, i8* %18, i64 8
%37 = tail call i32 @llvm.fshl.i32(i32 %20, i32 %20, i32 17)
%38 = add i32 %37, %20
%39 = mul i32 %38, -1640531535
%40 = bitcast i8* %36 to i32*
%41 = load i32, i32* %40
%42 = add i32 %41, %39
%43 = getelementptr inbounds i8, i8* %18, i64 12
%44 = tail call i32 @llvm.fshl.i32(i32 %19, i32 %19, i32 19)
%45 = add i32 %44, %19
%46 = mul i32 %45, -1640531535
%47 = bitcast i8* %43 to i32*
%48 = load i32, i32* %47
%49 = add i32 %48, %46
%50 = getelementptr inbounds i8, i8* %18, i64 16
%51 = icmp ult i8* %50, %15
br i1 %51, label %17, label %52
52: ; preds = %17, %7
%53 = phi i32 [ %10, %7 ], [ %28, %17 ]
%54 = phi i32 [ %12, %7 ], [ %35, %17 ]
%55 = phi i32 [ %13, %7 ], [ %42, %17 ]
%56 = phi i32 [ %14, %7 ], [ %49, %17 ]
%57 = tail call i32 @llvm.fshl.i32(i32 %53, i32 %53, i32 17)
%58 = add i32 %57, %53
%59 = tail call i32 @llvm.fshl.i32(i32 %54, i32 %54, i32 19)
%60 = add i32 %59, %54
%61 = tail call i32 @llvm.fshl.i32(i32 %55, i32 %55, i32 13)
%62 = add i32 %61, %55
%63 = tail call i32 @llvm.fshl.i32(i32 %56, i32 %56, i32 11)
%64 = add i32 %63, %56
%65 = mul i32 %58, -1640531535
%66 = mul i32 %60, -1640531535
%67 = mul i32 %62, -1640531535
%68 = mul i32 %64, -1640531535
%69 = bitcast i8* %15 to i32*
%70 = load i32, i32* %69
%71 = add i32 %70, %65
%72 = getelementptr inbounds i8, i8* %15, i64 4
%73 = bitcast i8* %72 to i32*
%74 = load i32, i32* %73
%75 = add i32 %74, %66
%76 = getelementptr inbounds i8, i8* %72, i64 4
%77 = bitcast i8* %76 to i32*
%78 = load i32, i32* %77
%79 = add i32 %78, %67
%80 = getelementptr inbounds i8, i8* %76, i64 4
%81 = bitcast i8* %80 to i32*
%82 = load i32, i32* %81
%83 = add i32 %82, %68
%84 = mul i32 %71, -2048144777
%85 = mul i32 %75, -2048144777
%86 = mul i32 %79, -2048144777
%87 = mul i32 %83, -2048144777
%88 = lshr i32 %84, 21
%89 = mul i32 %71, -465599881
%90 = add i32 %89, %88
%91 = lshr i32 %85, 15
%92 = mul i32 %75, 450480759
%93 = add i32 %92, %91
%94 = lshr i32 %86, 13
%95 = mul i32 %79, -643577225
%96 = add i32 %95, %94
%97 = lshr i32 %87, 19
%98 = mul i32 %83, -12932489
%99 = add i32 %98, %97
%100 = mul i32 %90, -1028477379
%101 = mul i32 %93, -1028477379
%102 = mul i32 %96, -1028477379
%103 = mul i32 %99, -1028477379
%104 = mul i32 %93, 362115560
%105 = lshr i32 %101, 29
%106 = mul i32 %96, -1398042816
%107 = lshr i32 %102, 26
%108 = mul i32 %99, 1700559360
%109 = lshr i32 %103, 23
%110 = add i32 %104, %100
%111 = add i32 %110, %105
%112 = add i32 %111, %106
%113 = add i32 %112, %107
%114 = add i32 %113, %108
%115 = add i32 %114, %109
%116 = lshr i32 %115, 11
%117 = xor i32 %116, %115
%118 = mul i32 %1, -1640531535
%119 = add i32 %118, -1233595777
%120 = add i32 %119, %117
%121 = lshr i32 %120, 15
%122 = xor i32 %121, %120
%123 = mul i32 %122, -2048144777
%124 = lshr i32 %123, 13
%125 = xor i32 %124, %123
br label %126
126: ; preds = %52, %5
%127 = phi i32 [ %6, %5 ], [ %125, %52 ]
ret i32 %127
}