#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_fast32(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))) + (*(unsigned int *)p);
      p += 4;
      v2 = ((v2 << 11) | (v2 >> (32 - 11))) + (*(unsigned int *)p);
      p += 4;
      v3 = ((v3 << 17) | (v3 >> (32 - 17))) + (*(unsigned int *)p);
      p += 4;
      v4 = ((v4 << 19) | (v4 >> (32 - 19))) + (*(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_fast32>:
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_fast32+0x33>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
call   1030 <XXH_small@plt>
mov    %eax,-0x4(%rbp)
jmp    1427 <XXH_fast32+0x317>
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    1231 <XXH_fast32+0x121>
mov    -0x2c(%rbp),%eax
shl    $0xd,%eax
mov    -0x2c(%rbp),%ecx
shr    $0x13,%ecx
or     %ecx,%eax
mov    -0x20(%rbp),%rcx
add    (%rcx),%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
mov    -0x20(%rbp),%rcx
add    (%rcx),%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
mov    -0x20(%rbp),%rcx
add    (%rcx),%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
mov    -0x20(%rbp),%rcx
add    (%rcx),%eax
mov    %eax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x20(%rbp)
jmp    1192 <XXH_fast32+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_fast32>:
cmp    $0xf,%esi
jg     111a <XXH_fast32+0xa>
jmp    1030 <XXH_small@plt>
push   %rbx
mov    %esi,%r8d
add    $0x9e3779b1,%edx
imul   $0x85ebca77,%edx,%ecx
add    %esi,%ecx
imul   $0xc2b2ae3d,%ecx,%eax
imul   $0x5a43fc33,%ecx,%r9d
add    %rdi,%r8
add    $0xfffffffffffffff0,%r8
cmp    %rdi,%r8
jbe    1172 <XXH_fast32+0x62>
cs nopw 0x0(%rax,%rax,1)
nop
rol    $0xd,%edx
add    (%rdi),%edx
rol    $0xb,%ecx
add    0x4(%rdi),%ecx
rol    $0x11,%eax
add    0x8(%rdi),%eax
rol    $0x13,%r9d
add    0xc(%rdi),%r9d
add    $0x10,%rdi
cmp    %r8,%rdi
jb     1150 <XXH_fast32+0x40>
mov    %edx,%edi
rol    $0x11,%edi
add    %edx,%edi
mov    %ecx,%edx
rol    $0x13,%edx
add    %ecx,%edx
mov    %eax,%ecx
rol    $0xd,%ecx
add    %eax,%ecx
mov    %r9d,%eax
rol    $0xb,%eax
add    %r9d,%eax
imul   $0x9e3779b1,%edi,%edi
imul   $0x9e3779b1,%edx,%edx
imul   $0x9e3779b1,%ecx,%r9d
add    (%r8),%edi
add    0x4(%r8),%edx
add    0x8(%r8),%r9d
imul   $0x9e3779b1,%eax,%r10d
add    0xc(%r8),%r10d
imul   $0x85ebca77,%edi,%ecx
imul   $0x85ebca77,%edx,%eax
imul   $0x85ebca77,%r9d,%r8d
imul   $0x85ebca77,%r10d,%r11d
shr    $0x15,%ecx
imul   $0xe43f8277,%edi,%edi
add    %ecx,%edi
shr    $0xf,%eax
imul   $0x1ad9ca77,%edx,%ecx
add    %eax,%ecx
shr    $0xd,%r8d
imul   $0xd9a3ca77,%r9d,%ebx
add    %r8d,%ebx
shr    $0x13,%r11d
imul   $0xff3aaa77,%r10d,%r9d
add    %r11d,%r9d
imul   $0xc2b2ae3d,%edi,%r8d
imul   $0xc2b2ae3d,%ecx,%edi
imul   $0xc2b2ae3d,%ebx,%edx
imul   $0xc2b2ae3d,%r9d,%eax
imul   $0x159571e8,%ecx,%ecx
add    %r8d,%ecx
shr    $0x1d,%edi
add    %ecx,%edi
imul   $0xacab8f40,%ebx,%ecx
add    %edi,%ecx
shr    $0x1a,%edx
add    %ecx,%edx
imul   $0x655c7a00,%r9d,%ecx
add    %edx,%ecx
shr    $0x17,%eax
add    %ecx,%eax
mov    %eax,%ecx
shr    $0xb,%ecx
xor    %eax,%ecx
imul   $0x9e3779b1,%esi,%eax
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_fast32(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 %238
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 %90
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 i8*, i8** %8
%52 = bitcast i8* %51 to i32*
%53 = load i32, i32* %52
%54 = add i32 %50, %53
store i32 %54, i32* %10
%55 = load i8*, i8** %8
%56 = getelementptr inbounds i8, i8* %55, i64 4
store i8* %56, i8** %8
%57 = load i32, i32* %11
%58 = shl i32 %57, 11
%59 = load i32, i32* %11
%60 = lshr i32 %59, 21
%61 = or i32 %58, %60
%62 = load i8*, i8** %8
%63 = bitcast i8* %62 to i32*
%64 = load i32, i32* %63
%65 = add i32 %61, %64
store i32 %65, i32* %11
%66 = load i8*, i8** %8
%67 = getelementptr inbounds i8, i8* %66, i64 4
store i8* %67, i8** %8
%68 = load i32, i32* %12
%69 = shl i32 %68, 17
%70 = load i32, i32* %12
%71 = lshr i32 %70, 15
%72 = or i32 %69, %71
%73 = load i8*, i8** %8
%74 = bitcast i8* %73 to i32*
%75 = load i32, i32* %74
%76 = add i32 %72, %75
store i32 %76, i32* %12
%77 = load i8*, i8** %8
%78 = getelementptr inbounds i8, i8* %77, i64 4
store i8* %78, i8** %8
%79 = load i32, i32* %13
%80 = shl i32 %79, 19
%81 = load i32, i32* %13
%82 = lshr i32 %81, 13
%83 = or i32 %80, %82
%84 = load i8*, i8** %8
%85 = bitcast i8* %84 to i32*
%86 = load i32, i32* %85
%87 = add i32 %83, %86
store i32 %87, i32* %13
%88 = load i8*, i8** %8
%89 = getelementptr inbounds i8, i8* %88, i64 4
store i8* %89, i8** %8
br label %41
90: ; preds = %41
%91 = load i8*, i8** %9
%92 = getelementptr inbounds i8, i8* %91, i64 -16
store i8* %92, i8** %8
%93 = load i32, i32* %10
%94 = shl i32 %93, 17
%95 = load i32, i32* %10
%96 = lshr i32 %95, 15
%97 = or i32 %94, %96
%98 = load i32, i32* %10
%99 = add i32 %98, %97
store i32 %99, i32* %10
%100 = load i32, i32* %11
%101 = shl i32 %100, 19
%102 = load i32, i32* %11
%103 = lshr i32 %102, 13
%104 = or i32 %101, %103
%105 = load i32, i32* %11
%106 = add i32 %105, %104
store i32 %106, i32* %11
%107 = load i32, i32* %12
%108 = shl i32 %107, 13
%109 = load i32, i32* %12
%110 = lshr i32 %109, 19
%111 = or i32 %108, %110
%112 = load i32, i32* %12
%113 = add i32 %112, %111
store i32 %113, i32* %12
%114 = load i32, i32* %13
%115 = shl i32 %114, 11
%116 = load i32, i32* %13
%117 = lshr i32 %116, 21
%118 = or i32 %115, %117
%119 = load i32, i32* %13
%120 = add i32 %119, %118
store i32 %120, i32* %13
%121 = load i32, i32* %10
%122 = mul i32 %121, -1640531535
store i32 %122, i32* %10
%123 = load i32, i32* %11
%124 = mul i32 %123, -1640531535
store i32 %124, i32* %11
%125 = load i32, i32* %12
%126 = mul i32 %125, -1640531535
store i32 %126, i32* %12
%127 = load i32, i32* %13
%128 = mul i32 %127, -1640531535
store i32 %128, i32* %13
%129 = load i8*, i8** %8
%130 = bitcast i8* %129 to i32*
%131 = load i32, i32* %130
%132 = load i32, i32* %10
%133 = add i32 %132, %131
store i32 %133, i32* %10
%134 = load i8*, i8** %8
%135 = getelementptr inbounds i8, i8* %134, i64 4
store i8* %135, i8** %8
%136 = load i8*, i8** %8
%137 = bitcast i8* %136 to i32*
%138 = load i32, i32* %137
%139 = load i32, i32* %11
%140 = add i32 %139, %138
store i32 %140, i32* %11
%141 = load i8*, i8** %8
%142 = getelementptr inbounds i8, i8* %141, i64 4
store i8* %142, i8** %8
%143 = load i8*, i8** %8
%144 = bitcast i8* %143 to i32*
%145 = load i32, i32* %144
%146 = load i32, i32* %12
%147 = add i32 %146, %145
store i32 %147, i32* %12
%148 = load i8*, i8** %8
%149 = getelementptr inbounds i8, i8* %148, i64 4
store i8* %149, i8** %8
%150 = load i8*, i8** %8
%151 = bitcast i8* %150 to i32*
%152 = load i32, i32* %151
%153 = load i32, i32* %13
%154 = add i32 %153, %152
store i32 %154, i32* %13
%155 = load i32, i32* %10
%156 = mul i32 %155, -2048144777
store i32 %156, i32* %10
%157 = load i32, i32* %11
%158 = mul i32 %157, -2048144777
store i32 %158, i32* %11
%159 = load i32, i32* %12
%160 = mul i32 %159, -2048144777
store i32 %160, i32* %12
%161 = load i32, i32* %13
%162 = mul i32 %161, -2048144777
store i32 %162, i32* %13
%163 = load i32, i32* %10
%164 = shl i32 %163, 11
%165 = load i32, i32* %10
%166 = lshr i32 %165, 21
%167 = or i32 %164, %166
%168 = load i32, i32* %10
%169 = add i32 %168, %167
store i32 %169, i32* %10
%170 = load i32, i32* %11
%171 = shl i32 %170, 17
%172 = load i32, i32* %11
%173 = lshr i32 %172, 15
%174 = or i32 %171, %173
%175 = load i32, i32* %11
%176 = add i32 %175, %174
store i32 %176, i32* %11
%177 = load i32, i32* %12
%178 = shl i32 %177, 19
%179 = load i32, i32* %12
%180 = lshr i32 %179, 13
%181 = or i32 %178, %180
%182 = load i32, i32* %12
%183 = add i32 %182, %181
store i32 %183, i32* %12
%184 = load i32, i32* %13
%185 = shl i32 %184, 13
%186 = load i32, i32* %13
%187 = lshr i32 %186, 19
%188 = or i32 %185, %187
%189 = load i32, i32* %13
%190 = add i32 %189, %188
store i32 %190, i32* %13
%191 = load i32, i32* %10
%192 = mul i32 %191, -1028477379
store i32 %192, i32* %10
%193 = load i32, i32* %11
%194 = mul i32 %193, -1028477379
store i32 %194, i32* %11
%195 = load i32, i32* %12
%196 = mul i32 %195, -1028477379
store i32 %196, i32* %12
%197 = load i32, i32* %13
%198 = mul i32 %197, -1028477379
store i32 %198, i32* %13
%199 = load i32, i32* %10
%200 = load i32, i32* %11
%201 = shl i32 %200, 3
%202 = load i32, i32* %11
%203 = lshr i32 %202, 29
%204 = or i32 %201, %203
%205 = add i32 %199, %204
%206 = load i32, i32* %12
%207 = shl i32 %206, 6
%208 = load i32, i32* %12
%209 = lshr i32 %208, 26
%210 = or i32 %207, %209
%211 = add i32 %205, %210
%212 = load i32, i32* %13
%213 = shl i32 %212, 9
%214 = load i32, i32* %13
%215 = lshr i32 %214, 23
%216 = or i32 %213, %215
%217 = add i32 %211, %216
store i32 %217, i32* %15
%218 = load i32, i32* %15
%219 = lshr i32 %218, 11
%220 = load i32, i32* %15
%221 = xor i32 %220, %219
store i32 %221, i32* %15
%222 = load i32, i32* %6
%223 = add i32 668265263, %222
%224 = mul i32 %223, -1640531535
%225 = load i32, i32* %15
%226 = add i32 %225, %224
store i32 %226, i32* %15
%227 = load i32, i32* %15
%228 = lshr i32 %227, 15
%229 = load i32, i32* %15
%230 = xor i32 %229, %228
store i32 %230, i32* %15
%231 = load i32, i32* %15
%232 = mul i32 %231, -2048144777
store i32 %232, i32* %15
%233 = load i32, i32* %15
%234 = lshr i32 %233, 13
%235 = load i32, i32* %15
%236 = xor i32 %235, %234
store i32 %236, i32* %15
%237 = load i32, i32* %15
store i32 %237, i32* %4
br label %238
238: ; preds = %90, %18
%239 = load i32, i32* %4
ret i32 %239
}

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