unsigned int BOB8(const unsigned char *str, unsigned int len) {
  unsigned int a, b, c;
  unsigned int initval = 353;
  a = b = 0x9e3779b9;
  c = initval;
  while (len >= 12) {
    a += (str[0] + ((unsigned int)str[1] << 8) + ((unsigned int)str[2] << 16) +
          ((unsigned int)str[3] << 24));
    b += (str[4] + ((unsigned int)str[5] << 8) + ((unsigned int)str[6] << 16) +
          ((unsigned int)str[7] << 24));
    c += (str[8] + ((unsigned int)str[9] << 8) + ((unsigned int)str[10] << 16) +
          ((unsigned int)str[11] << 24));
    {
      a -= b;
      a -= c;
      a ^= (c >> 13);
      b -= c;
      b -= a;
      b ^= (a << 8);
      c -= a;
      c -= b;
      c ^= (b >> 13);
      a -= b;
      a -= c;
      a ^= (c >> 12);
      b -= c;
      b -= a;
      b ^= (a << 16);
      c -= a;
      c -= b;
      c ^= (b >> 5);
      a -= b;
      a -= c;
      a ^= (c >> 3);
      b -= c;
      b -= a;
      b ^= (a << 10);
      c -= a;
      c -= b;
      c ^= (b >> 15);
    };
    str += 12;
    len -= 12;
  }
  c += len;
  switch (len) {
  case 11:
    c += ((unsigned int)str[10] << 24);
  case 10:
    c += ((unsigned int)str[9] << 16);
  case 9:
    c += ((unsigned int)str[8] << 8);
  case 8:
    b += ((unsigned int)str[7] << 24);
  case 7:
    b += ((unsigned int)str[6] << 16);
  case 6:
    b += ((unsigned int)str[5] << 8);
  case 5:
    b += str[4];
  case 4:
    a += ((unsigned int)str[3] << 24);
  case 3:
    a += ((unsigned int)str[2] << 16);
  case 2:
    a += ((unsigned int)str[1] << 8);
  case 1:
    a += str[0];
  }
  {
    a -= b;
    a -= c;
    a ^= (c >> 13);
    b -= c;
    b -= a;
    b ^= (a << 8);
    c -= a;
    c -= b;
    c ^= (b >> 13);
    a -= b;
    a -= c;
    a ^= (c >> 12);
    b -= c;
    b -= a;
    b ^= (a << 16);
    c -= a;
    c -= b;
    c ^= (b >> 5);
    a -= b;
    a -= c;
    a ^= (c >> 3);
    b -= c;
    b -= a;
    b ^= (a << 10);
    c -= a;
    c -= b;
    c ^= (b >> 15);
  };
  return c;
}


x86 assembly (clang, -O0):
<BOB8>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x161,-0x1c(%rbp)
movl   $0x9e3779b9,-0x14(%rbp)
movl   $0x9e3779b9,-0x10(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
cmpl   $0xc,-0xc(%rbp)
jb     131a <BOB8+0x21a>
mov    -0x8(%rbp),%rax
movzbl (%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x1(%rcx),%ecx
shl    $0x8,%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x2(%rcx),%ecx
shl    $0x10,%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x3(%rcx),%ecx
shl    $0x18,%ecx
add    %ecx,%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x4(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x5(%rcx),%ecx
shl    $0x8,%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x6(%rcx),%ecx
shl    $0x10,%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
movzbl 0x7(%rcx),%ecx
shl    $0x18,%ecx
add    %ecx,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x8(%rax),%eax
mov    -0x8(%rbp),%rcx
movzbl 0x9(%rcx),%ecx
shl    $0x8,%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
movzbl 0xa(%rcx),%ecx
shl    $0x10,%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
movzbl 0xb(%rcx),%ecx
shl    $0x18,%ecx
add    %ecx,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x10(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%eax
shr    $0xd,%eax
xor    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%eax
shl    $0x8,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shr    $0xd,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x10(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%eax
shr    $0xc,%eax
xor    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%eax
shl    $0x10,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shr    $0x5,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x10(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%eax
shr    $0x3,%eax
xor    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%eax
shl    $0xa,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shr    $0xf,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
add    $0xc,%rax
mov    %rax,-0x8(%rbp)
mov    -0xc(%rbp),%eax
sub    $0xc,%eax
mov    %eax,-0xc(%rbp)
jmp    1126 <BOB8+0x26>
mov    -0xc(%rbp),%ecx
mov    -0x18(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
sub    $0xa,%eax
ja     1402 <BOB8+0x302>
mov    -0x28(%rbp),%rax
lea    0xcbb(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x8(%rbp),%rax
movzbl 0xa(%rax),%eax
shl    $0x18,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x9(%rax),%eax
shl    $0x10,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x8(%rax),%eax
shl    $0x8,%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x7(%rax),%eax
shl    $0x18,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x6(%rax),%eax
shl    $0x10,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x5(%rax),%eax
shl    $0x8,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x4(%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x3(%rax),%eax
shl    $0x18,%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x2(%rax),%eax
shl    $0x10,%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x1(%rax),%eax
shl    $0x8,%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movzbl (%rax),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x10(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%eax
shr    $0xd,%eax
xor    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%eax
shl    $0x8,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shr    $0xd,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x10(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%eax
shr    $0xc,%eax
xor    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%eax
shl    $0x10,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shr    $0x5,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x10(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x10(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%eax
shr    $0x3,%eax
xor    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x18(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%eax
shl    $0xa,%eax
xor    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
shr    $0xf,%eax
xor    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<BOB8>:
cmp    $0xc,%esi
jb     11c2 <BOB8+0xc2>
mov    $0x9e3779b9,%r10d
mov    $0x161,%r8d
mov    $0x9e3779b9,%r11d
nopl   0x0(%rax,%rax,1)
add    0x4(%rdi),%r10d
add    0x8(%rdi),%r8d
add    (%rdi),%r11d
sub    %r10d,%r11d
sub    %r8d,%r11d
mov    %r8d,%r9d
shr    $0xd,%r9d
xor    %r11d,%r9d
sub    %r8d,%r10d
sub    %r9d,%r10d
mov    %r9d,%edx
shl    $0x8,%edx
xor    %r10d,%edx
sub    %r9d,%r8d
sub    %edx,%r8d
mov    %edx,%ecx
shr    $0xd,%ecx
xor    %r8d,%ecx
sub    %edx,%r9d
sub    %ecx,%r9d
mov    %ecx,%r8d
shr    $0xc,%r8d
xor    %r9d,%r8d
sub    %ecx,%edx
sub    %r8d,%edx
mov    %r8d,%eax
shl    $0x10,%eax
xor    %edx,%eax
sub    %r8d,%ecx
sub    %eax,%ecx
mov    %eax,%edx
shr    $0x5,%edx
xor    %ecx,%edx
sub    %eax,%r8d
sub    %edx,%r8d
mov    %edx,%r11d
shr    $0x3,%r11d
xor    %r8d,%r11d
sub    %edx,%eax
sub    %r11d,%eax
mov    %r11d,%r10d
shl    $0xa,%r10d
xor    %eax,%r10d
sub    %r11d,%edx
sub    %r10d,%edx
mov    %r10d,%r8d
shr    $0xf,%r8d
xor    %edx,%r8d
add    $0xc,%rdi
add    $0xfffffff4,%esi
cmp    $0xb,%esi
ja     1120 <BOB8+0x20>
jmp    11d4 <BOB8+0xd4>
mov    $0x161,%r8d
mov    $0x9e3779b9,%r11d
mov    $0x9e3779b9,%r10d
add    %esi,%r8d
add    $0xffffffff,%esi
cmp    $0xa,%esi
ja     127b <BOB8+0x17b>
lea    0xe16(%rip),%rax
movslq (%rax,%rsi,4),%rcx
add    %rax,%rcx
jmp    *%rcx
movzbl 0xa(%rdi),%eax
shl    $0x18,%eax
add    %r8d,%eax
mov    %eax,%r8d
movzbl 0x9(%rdi),%eax
shl    $0x10,%eax
add    %r8d,%eax
mov    %eax,%r8d
movzbl 0x8(%rdi),%eax
shl    $0x8,%eax
add    %r8d,%eax
mov    %eax,%r8d
movzbl 0x7(%rdi),%eax
shl    $0x18,%eax
add    %r10d,%eax
mov    %eax,%r10d
movzbl 0x6(%rdi),%eax
shl    $0x10,%eax
add    %r10d,%eax
mov    %eax,%r10d
movzbl 0x5(%rdi),%eax
shl    $0x8,%eax
add    %r10d,%eax
mov    %eax,%r10d
movzbl 0x4(%rdi),%eax
add    %r10d,%eax
mov    %eax,%r10d
movzbl 0x3(%rdi),%eax
shl    $0x18,%eax
add    %r11d,%eax
mov    %eax,%r11d
movzbl 0x2(%rdi),%eax
shl    $0x10,%eax
add    %r11d,%eax
mov    %eax,%r11d
movzbl 0x1(%rdi),%eax
shl    $0x8,%eax
add    %r11d,%eax
mov    %eax,%r11d
movzbl (%rdi),%eax
add    %r11d,%eax
mov    %eax,%r11d
sub    %r10d,%r11d
sub    %r8d,%r11d
mov    %r8d,%eax
shr    $0xd,%eax
xor    %r11d,%eax
sub    %r8d,%r10d
sub    %eax,%r10d
mov    %eax,%ecx
shl    $0x8,%ecx
xor    %r10d,%ecx
sub    %eax,%r8d
sub    %ecx,%r8d
mov    %ecx,%edx
shr    $0xd,%edx
xor    %r8d,%edx
sub    %ecx,%eax
sub    %edx,%eax
mov    %edx,%esi
shr    $0xc,%esi
xor    %eax,%esi
sub    %edx,%ecx
sub    %esi,%ecx
mov    %esi,%edi
shl    $0x10,%edi
xor    %ecx,%edi
sub    %esi,%edx
sub    %edi,%edx
mov    %edi,%ecx
shr    $0x5,%ecx
xor    %edx,%ecx
sub    %edi,%esi
sub    %ecx,%esi
mov    %ecx,%edx
shr    $0x3,%edx
xor    %esi,%edx
sub    %ecx,%edi
sub    %edx,%edi
mov    %edx,%eax
shl    $0xa,%eax
xor    %edi,%eax
add    %eax,%edx
sub    %edx,%ecx
shr    $0xf,%eax
xor    %ecx,%eax
ret

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

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