unsigned hashstring(const char *s, unsigned si) {
  switch (si) {
  case 1:
    return s[0] * 83;
  case 2:
    return s[0] * 83 + s[1] * 263;
  case 3:
    return s[0] * 83 + s[1] * 263 + s[2] * 151;
  case 4:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199;
  case 5:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199 + s[4] * 619;
  case 6:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199 + s[4] * 619 +
           s[5] * 311;
  case 7:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199 + s[4] * 619 +
           s[5] * 311 + s[6] * 347;
  case 8:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199 + s[4] * 619 +
           s[5] * 311 + s[6] * 347 + s[7] * 19;
  case 9:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199 + s[4] * 619 +
           s[5] * 311 + s[6] * 347 + s[7] * 19 + s[8] * 601;
  case 10:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199 + s[4] * 619 +
           s[5] * 311 + s[6] * 347 + s[7] * 19 + s[8] * 601 + s[9] * 43;
  case 11:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199 + s[4] * 619 +
           s[5] * 311 + s[6] * 347 + s[7] * 19 + s[8] * 601 + s[9] * 43 +
           s[10] * 239;
  case 12:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199 + s[4] * 619 +
           s[5] * 311 + s[6] * 347 + s[7] * 19 + s[8] * 601 + s[9] * 43 +
           s[10] * 239 + s[11] * 523;
  case 13:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199 + s[4] * 619 +
           s[5] * 311 + s[6] * 347 + s[7] * 19 + s[8] * 601 + s[9] * 43 +
           s[10] * 239 + s[11] * 523 + s[12] * 463;
  case 14:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199 + s[4] * 619 +
           s[5] * 311 + s[6] * 347 + s[7] * 19 + s[8] * 601 + s[9] * 43 +
           s[10] * 239 + s[11] * 523 + s[12] * 463 + s[13] * 599;
  case 15:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199 + s[4] * 619 +
           s[5] * 311 + s[6] * 347 + s[7] * 19 + s[8] * 601 + s[9] * 43 +
           s[10] * 239 + s[11] * 523 + s[12] * 463 + s[13] * 599 + s[14] * 223;
  case 16:
    return s[0] * 83 + s[1] * 263 + s[2] * 151 + s[3] * 199 + s[4] * 619 +
           s[5] * 311 + s[6] * 347 + s[7] * 19 + s[8] * 601 + s[9] * 43 +
           s[10] * 239 + s[11] * 523 + s[12] * 463 + s[13] * 599 + s[14] * 223 +
           s[15] * 29;
  default: {
    static const unsigned m[] = {83,  263, 151, 199, 619, 311, 347, 19,
                                 601, 43,  239, 523, 463, 599, 223, 29};
    unsigned res = 0;
    for (unsigned i = 0; i < si; ++i)
      res += s[i] * m[i % 16];
    return res;
  }
  }
}


x86 assembly (clang, -O0):
<hashstring>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
sub    $0xf,%eax
ja     19a1 <hashstring+0x8a1>
mov    -0x28(%rbp),%rax
lea    0xed5(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
imul   $0x26b,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
imul   $0x26b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x5(%rcx),%ecx
imul   $0x137,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
imul   $0x26b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x5(%rcx),%ecx
imul   $0x137,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
imul   $0x15b,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
imul   $0x26b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x5(%rcx),%ecx
imul   $0x137,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
imul   $0x15b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x7(%rcx),%ecx
imul   $0x13,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
imul   $0x26b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x5(%rcx),%ecx
imul   $0x137,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
imul   $0x15b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x7(%rcx),%ecx
imul   $0x13,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x8(%rcx),%ecx
imul   $0x259,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
imul   $0x26b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x5(%rcx),%ecx
imul   $0x137,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
imul   $0x15b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x7(%rcx),%ecx
imul   $0x13,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x8(%rcx),%ecx
imul   $0x259,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x9(%rcx),%ecx
imul   $0x2b,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
imul   $0x26b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x5(%rcx),%ecx
imul   $0x137,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
imul   $0x15b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x7(%rcx),%ecx
imul   $0x13,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x8(%rcx),%ecx
imul   $0x259,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x9(%rcx),%ecx
imul   $0x2b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xa(%rcx),%ecx
imul   $0xef,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
imul   $0x26b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x5(%rcx),%ecx
imul   $0x137,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
imul   $0x15b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x7(%rcx),%ecx
imul   $0x13,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x8(%rcx),%ecx
imul   $0x259,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x9(%rcx),%ecx
imul   $0x2b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xa(%rcx),%ecx
imul   $0xef,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xb(%rcx),%ecx
imul   $0x20b,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
imul   $0x26b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x5(%rcx),%ecx
imul   $0x137,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
imul   $0x15b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x7(%rcx),%ecx
imul   $0x13,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x8(%rcx),%ecx
imul   $0x259,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x9(%rcx),%ecx
imul   $0x2b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xa(%rcx),%ecx
imul   $0xef,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xb(%rcx),%ecx
imul   $0x20b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xc(%rcx),%ecx
imul   $0x1cf,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
imul   $0x26b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x5(%rcx),%ecx
imul   $0x137,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
imul   $0x15b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x7(%rcx),%ecx
imul   $0x13,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x8(%rcx),%ecx
imul   $0x259,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x9(%rcx),%ecx
imul   $0x2b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xa(%rcx),%ecx
imul   $0xef,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xb(%rcx),%ecx
imul   $0x20b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xc(%rcx),%ecx
imul   $0x1cf,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xd(%rcx),%ecx
imul   $0x257,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
imul   $0x26b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x5(%rcx),%ecx
imul   $0x137,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
imul   $0x15b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x7(%rcx),%ecx
imul   $0x13,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x8(%rcx),%ecx
imul   $0x259,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x9(%rcx),%ecx
imul   $0x2b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xa(%rcx),%ecx
imul   $0xef,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xb(%rcx),%ecx
imul   $0x20b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xc(%rcx),%ecx
imul   $0x1cf,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xd(%rcx),%ecx
imul   $0x257,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xe(%rcx),%ecx
imul   $0xdf,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
imul   $0x53,%eax,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
imul   $0x107,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
imul   $0x97,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
imul   $0xc7,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
imul   $0x26b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x5(%rcx),%ecx
imul   $0x137,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
imul   $0x15b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x7(%rcx),%ecx
imul   $0x13,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x8(%rcx),%ecx
imul   $0x259,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x9(%rcx),%ecx
imul   $0x2b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xa(%rcx),%ecx
imul   $0xef,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xb(%rcx),%ecx
imul   $0x20b,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xc(%rcx),%ecx
imul   $0x1cf,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xd(%rcx),%ecx
imul   $0x257,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xe(%rcx),%ecx
imul   $0xdf,%ecx,%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0xf(%rcx),%ecx
imul   $0x1d,%ecx,%ecx
add    %ecx,%eax
mov    %eax,-0x4(%rbp)
jmp    19f5 <hashstring+0x8f5>
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jae    19ef <hashstring+0x8ef>
mov    -0x10(%rbp),%rax
mov    -0x1c(%rbp),%ecx
movsbl (%rax,%rcx,1),%eax
mov    -0x1c(%rbp),%ecx
and    $0xf,%ecx
mov    %ecx,%ecx
mov    %ecx,%edx
lea    0x669(%rip),%rcx
imul   (%rcx,%rdx,4),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    19af <hashstring+0x8af>
mov    -0x18(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<hashstring>:
push   %rbx
mov    %esi,%eax
mov    %esi,%r11d
cmp    $0x10,%esi
ja     1123 <hashstring+0x23>
lea    0xf4e(%rip),%rdx
movslq (%rdx,%r11,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
movsbl (%rdi),%eax
imul   $0x53,%eax,%eax
pop    %rbx
ret
xor    %ebx,%ebx
cmp    $0x8,%eax
jb     15e8 <hashstring+0x4e8>
lea    -0x11(%r11),%rax
mov    $0x0,%r8d
cmp    $0xfffffffffffffff0,%rax
jb     16ad <hashstring+0x5ad>
mov    %r11d,%ebx
and    $0xfffffff8,%ebx
lea    -0x8(%rbx),%rax
mov    %rax,%r8
shr    $0x3,%r8
add    $0x1,%r8
test   %rax,%rax
je     15f0 <hashstring+0x4f0>
mov    %r8,%rsi
and    $0xfffffffffffffffe,%rsi
pxor   %xmm0,%xmm0
xor    %eax,%eax
movdqa 0xebb(%rip),%xmm2
movdqa 0xec3(%rip),%xmm3
movdqa 0xe9b(%rip),%xmm4
movdqa 0xec3(%rip),%xmm5
pxor   %xmm1,%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movd   (%rdi,%rax,1),%xmm6
punpcklbw %xmm6,%xmm6
punpcklwd %xmm6,%xmm6
movd   0x4(%rdi,%rax,1),%xmm7
punpcklbw %xmm7,%xmm7
punpcklwd %xmm7,%xmm7
psrad  $0x18,%xmm6
pmaddwd %xmm2,%xmm6
paddd  %xmm0,%xmm6
psrad  $0x18,%xmm7
pmaddwd %xmm3,%xmm7
paddd  %xmm1,%xmm7
movd   0x8(%rdi,%rax,1),%xmm0
punpcklbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm0
movd   0xc(%rdi,%rax,1),%xmm1
punpcklbw %xmm1,%xmm1
punpcklwd %xmm1,%xmm1
psrad  $0x18,%xmm0
pmaddwd %xmm4,%xmm0
paddd  %xmm6,%xmm0
psrad  $0x18,%xmm1
pmaddwd %xmm5,%xmm1
paddd  %xmm7,%xmm1
add    $0x10,%rax
add    $0xfffffffffffffffe,%rsi
jne    11a0 <hashstring+0xa0>
jmp    15fa <hashstring+0x4fa>
movsbl (%rdi),%eax
imul   $0x53,%eax,%ecx
movsbl 0x1(%rdi),%eax
imul   $0x107,%eax,%eax
jmp    14a8 <hashstring+0x3a8>
movsbl (%rdi),%eax
imul   $0x53,%eax,%eax
movsbl 0x1(%rdi),%ecx
imul   $0x107,%ecx,%ecx
add    %eax,%ecx
movsbl 0x2(%rdi),%eax
imul   $0x97,%eax,%eax
jmp    14a8 <hashstring+0x3a8>
movd   (%rdi),%xmm0
punpcklbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm0
psrad  $0x18,%xmm0
pmaddwd 0xdc7(%rip),%xmm0
jmp    15d0 <hashstring+0x4d0>
movd   (%rdi),%xmm0
punpcklbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm0
psrad  $0x18,%xmm0
pmaddwd 0xda9(%rip),%xmm0
movsbl 0x4(%rdi),%eax
imul   $0x26b,%eax,%ecx
jmp    133d <hashstring+0x23d>
movd   (%rdi),%xmm0
punpcklbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm0
psrad  $0x18,%xmm0
pmaddwd 0xd81(%rip),%xmm0
movsbl 0x4(%rdi),%eax
imul   $0x26b,%eax,%ecx
movsbl 0x5(%rdi),%eax
imul   $0x137,%eax,%edx
jmp    137e <hashstring+0x27e>
movd   (%rdi),%xmm0
punpcklbw %xmm0,%xmm0
punpcklwd %xmm0,%xmm0
psrad  $0x18,%xmm0
pmaddwd 0xd4f(%rip),%xmm0
movsbl 0x4(%rdi),%eax
imul   $0x26b,%eax,%ecx
movsbl 0x5(%rdi),%eax
imul   $0x137,%eax,%edx
movsbl 0x6(%rdi),%eax
imul   $0x15b,%eax,%esi
jmp    13c9 <hashstring+0x2c9>
movq   (%rdi),%xmm0
punpcklbw %xmm0,%xmm0
psraw  $0x8,%xmm0
pmaddwd 0xcf7(%rip),%xmm0
jmp    15d0 <hashstring+0x4d0>
movq   (%rdi),%xmm0
punpcklbw %xmm0,%xmm0
psraw  $0x8,%xmm0
pmaddwd 0xcdd(%rip),%xmm0
movsbl 0x8(%rdi),%eax
imul   $0x259,%eax,%ecx
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%eax
jmp    14a8 <hashstring+0x3a8>
movq   (%rdi),%xmm0
punpcklbw %xmm0,%xmm0
psraw  $0x8,%xmm0
pmaddwd 0xca3(%rip),%xmm0
movsbl 0x8(%rdi),%eax
imul   $0x259,%eax,%ecx
movsbl 0x9(%rdi),%eax
imul   $0x2b,%eax,%edx
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%eax
jmp    151d <hashstring+0x41d>
movq   (%rdi),%xmm0
punpcklbw %xmm0,%xmm0
psraw  $0x8,%xmm0
pmaddwd 0xc62(%rip),%xmm0
movsbl 0x8(%rdi),%eax
imul   $0x259,%eax,%ecx
movsbl 0x9(%rdi),%eax
imul   $0x2b,%eax,%edx
movsbl 0xa(%rdi),%eax
imul   $0xef,%eax,%esi
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%eax
jmp    159e <hashstring+0x49e>
movq   (%rdi),%xmm0
punpcklbw %xmm0,%xmm0
psraw  $0x8,%xmm0
pmaddwd 0xc17(%rip),%xmm0
movd   0x8(%rdi),%xmm1
punpcklbw %xmm1,%xmm1
punpcklwd %xmm1,%xmm1
psrad  $0x18,%xmm1
pmaddwd 0xc0d(%rip),%xmm1
pshufd $0xee,%xmm0,%xmm2
paddd  %xmm0,%xmm2
pshufd $0x55,%xmm2,%xmm0
paddd  %xmm2,%xmm0
movd   %xmm0,%ecx
pshufd $0xee,%xmm1,%xmm0
paddd  %xmm1,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%eax
jmp    14a8 <hashstring+0x3a8>
movq   (%rdi),%xmm0
punpcklbw %xmm0,%xmm0
psraw  $0x8,%xmm0
pmaddwd 0xbba(%rip),%xmm0
movd   0x8(%rdi),%xmm1
punpcklbw %xmm1,%xmm1
punpcklwd %xmm1,%xmm1
psrad  $0x18,%xmm1
pmaddwd 0xbb0(%rip),%xmm1
movsbl 0xc(%rdi),%eax
imul   $0x1cf,%eax,%ecx
pshufd $0xee,%xmm0,%xmm2
paddd  %xmm0,%xmm2
pshufd $0x55,%xmm2,%xmm0
paddd  %xmm2,%xmm0
movd   %xmm0,%edx
pshufd $0xee,%xmm1,%xmm0
paddd  %xmm1,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%eax
add    %edx,%eax
add    %ecx,%eax
pop    %rbx
ret
movq   (%rdi),%xmm0
punpcklbw %xmm0,%xmm0
psraw  $0x8,%xmm0
pmaddwd 0xb4f(%rip),%xmm0
movd   0x8(%rdi),%xmm1
punpcklbw %xmm1,%xmm1
punpcklwd %xmm1,%xmm1
psrad  $0x18,%xmm1
pmaddwd 0xb45(%rip),%xmm1
movsbl 0xc(%rdi),%eax
imul   $0x1cf,%eax,%ecx
movsbl 0xd(%rdi),%eax
imul   $0x257,%eax,%edx
pshufd $0xee,%xmm0,%xmm2
paddd  %xmm0,%xmm2
pshufd $0x55,%xmm2,%xmm0
paddd  %xmm2,%xmm0
movd   %xmm0,%esi
pshufd $0xee,%xmm1,%xmm0
paddd  %xmm1,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%eax
add    %esi,%eax
add    %ecx,%eax
add    %edx,%eax
pop    %rbx
ret
movq   (%rdi),%xmm0
punpcklbw %xmm0,%xmm0
psraw  $0x8,%xmm0
pmaddwd 0xad8(%rip),%xmm0
movd   0x8(%rdi),%xmm1
punpcklbw %xmm1,%xmm1
punpcklwd %xmm1,%xmm1
psrad  $0x18,%xmm1
pmaddwd 0xace(%rip),%xmm1
movsbl 0xc(%rdi),%eax
imul   $0x1cf,%eax,%ecx
movsbl 0xd(%rdi),%eax
imul   $0x257,%eax,%edx
movsbl 0xe(%rdi),%eax
imul   $0xdf,%eax,%esi
pshufd $0xee,%xmm0,%xmm2
paddd  %xmm0,%xmm2
pshufd $0x55,%xmm2,%xmm0
paddd  %xmm2,%xmm0
movd   %xmm0,%edi
pshufd $0xee,%xmm1,%xmm0
paddd  %xmm1,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%eax
add    %edi,%eax
add    %ecx,%eax
add    %edx,%eax
add    %esi,%eax
pop    %rbx
ret
movdqu (%rdi),%xmm0
punpckhbw %xmm0,%xmm1
psraw  $0x8,%xmm1
pmaddwd 0xa45(%rip),%xmm1
punpcklbw %xmm0,%xmm0
psraw  $0x8,%xmm0
pmaddwd 0xa44(%rip),%xmm0
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%eax
pop    %rbx
ret
xor    %r8d,%r8d
jmp    16ad <hashstring+0x5ad>
pxor   %xmm0,%xmm0
xor    %eax,%eax
pxor   %xmm1,%xmm1
test   $0x1,%r8b
je     1686 <hashstring+0x586>
movd   (%rdi,%rax,1),%xmm2
movd   0x4(%rdi,%rax,1),%xmm3
punpcklbw %xmm2,%xmm2
punpcklwd %xmm2,%xmm2
psrad  $0x18,%xmm2
punpcklbw %xmm3,%xmm3
punpcklwd %xmm3,%xmm3
psrad  $0x18,%xmm3
and    $0x8,%eax
lea    0xa7d(%rip),%rsi
movdqa (%rsi,%rax,4),%xmm4
movdqa 0x10(%rsi,%rax,4),%xmm5
pshufd $0xf5,%xmm4,%xmm6
pmuludq %xmm2,%xmm4
pshufd $0xe8,%xmm4,%xmm4
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm4
paddd  %xmm4,%xmm0
pshufd $0xf5,%xmm5,%xmm2
pmuludq %xmm3,%xmm5
pshufd $0xe8,%xmm5,%xmm4
pshufd $0xf5,%xmm3,%xmm3
pmuludq %xmm2,%xmm3
pshufd $0xe8,%xmm3,%xmm2
punpckldq %xmm2,%xmm4
paddd  %xmm4,%xmm1
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%r8d
mov    %r8d,%eax
cmp    %r11,%rbx
je     14aa <hashstring+0x3aa>
mov    %rbx,%r10
not    %r10
test   $0x1,%r11b
jne    16bb <hashstring+0x5bb>
jmp    16dc <hashstring+0x5dc>
movsbl (%rdi,%rbx,1),%eax
mov    %ebx,%r9d
and    $0x8,%r9d
lea    0x9e3(%rip),%rsi
imul   (%rsi,%r9,4),%eax
add    %r8d,%eax
or     $0x1,%rbx
mov    %eax,%r8d
add    %r11,%r10
je     14aa <hashstring+0x3aa>
lea    0x9c4(%rip),%rsi
mov    %r8d,%eax
nop
movsbl (%rdi,%rbx,1),%ecx
mov    %ebx,%edx
and    $0xf,%edx
imul   (%rsi,%rdx,4),%ecx
add    %eax,%ecx
lea    0x1(%rbx),%edx
movsbl 0x1(%rdi,%rbx,1),%eax
and    $0xf,%edx
imul   (%rsi,%rdx,4),%eax
add    %ecx,%eax
add    $0x2,%rbx
cmp    %rbx,%r11
jne    16f0 <hashstring+0x5f0>
jmp    14aa <hashstring+0x3aa>

LLVM IR (-O0):
@hashstring.m = internal constant [16 x i32] [i32 83, i32 263, i32 151, i32 199, i32 619, i32 311, i32 347, i32 19, i32 601, i32 43, i32 239, i32 523, i32 463, i32 599, i32 223, i32 29]
define i32 @hashstring(i8* %0, i32 %1) {
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
store i8* %0, i8** %4
store i32 %1, i32* %5
%8 = load i32, i32* %5
switch i32 %8, label %825 [
i32 1, label %9
i32 2, label %15
i32 3, label %27
i32 4, label %45
i32 5, label %69
i32 6, label %99
i32 7, label %135
i32 8, label %177
i32 9, label %225
i32 10, label %279
i32 11, label %339
i32 12, label %405
i32 13, label %477
i32 14, label %555
i32 15, label %639
i32 16, label %729
]
9: ; preds = %2
%10 = load i8*, i8** %4
%11 = getelementptr inbounds i8, i8* %10, i64 0
%12 = load i8, i8* %11
%13 = sext i8 %12 to i32
%14 = mul nsw i32 %13, 83
store i32 %14, i32* %3
br label %850
15: ; preds = %2
%16 = load i8*, i8** %4
%17 = getelementptr inbounds i8, i8* %16, i64 0
%18 = load i8, i8* %17
%19 = sext i8 %18 to i32
%20 = mul nsw i32 %19, 83
%21 = load i8*, i8** %4
%22 = getelementptr inbounds i8, i8* %21, i64 1
%23 = load i8, i8* %22
%24 = sext i8 %23 to i32
%25 = mul nsw i32 %24, 263
%26 = add nsw i32 %20, %25
store i32 %26, i32* %3
br label %850
27: ; preds = %2
%28 = load i8*, i8** %4
%29 = getelementptr inbounds i8, i8* %28, i64 0
%30 = load i8, i8* %29
%31 = sext i8 %30 to i32
%32 = mul nsw i32 %31, 83
%33 = load i8*, i8** %4
%34 = getelementptr inbounds i8, i8* %33, i64 1
%35 = load i8, i8* %34
%36 = sext i8 %35 to i32
%37 = mul nsw i32 %36, 263
%38 = add nsw i32 %32, %37
%39 = load i8*, i8** %4
%40 = getelementptr inbounds i8, i8* %39, i64 2
%41 = load i8, i8* %40
%42 = sext i8 %41 to i32
%43 = mul nsw i32 %42, 151
%44 = add nsw i32 %38, %43
store i32 %44, i32* %3
br label %850
45: ; preds = %2
%46 = load i8*, i8** %4
%47 = getelementptr inbounds i8, i8* %46, i64 0
%48 = load i8, i8* %47
%49 = sext i8 %48 to i32
%50 = mul nsw i32 %49, 83
%51 = load i8*, i8** %4
%52 = getelementptr inbounds i8, i8* %51, i64 1
%53 = load i8, i8* %52
%54 = sext i8 %53 to i32
%55 = mul nsw i32 %54, 263
%56 = add nsw i32 %50, %55
%57 = load i8*, i8** %4
%58 = getelementptr inbounds i8, i8* %57, i64 2
%59 = load i8, i8* %58
%60 = sext i8 %59 to i32
%61 = mul nsw i32 %60, 151
%62 = add nsw i32 %56, %61
%63 = load i8*, i8** %4
%64 = getelementptr inbounds i8, i8* %63, i64 3
%65 = load i8, i8* %64
%66 = sext i8 %65 to i32
%67 = mul nsw i32 %66, 199
%68 = add nsw i32 %62, %67
store i32 %68, i32* %3
br label %850
69: ; preds = %2
%70 = load i8*, i8** %4
%71 = getelementptr inbounds i8, i8* %70, i64 0
%72 = load i8, i8* %71
%73 = sext i8 %72 to i32
%74 = mul nsw i32 %73, 83
%75 = load i8*, i8** %4
%76 = getelementptr inbounds i8, i8* %75, i64 1
%77 = load i8, i8* %76
%78 = sext i8 %77 to i32
%79 = mul nsw i32 %78, 263
%80 = add nsw i32 %74, %79
%81 = load i8*, i8** %4
%82 = getelementptr inbounds i8, i8* %81, i64 2
%83 = load i8, i8* %82
%84 = sext i8 %83 to i32
%85 = mul nsw i32 %84, 151
%86 = add nsw i32 %80, %85
%87 = load i8*, i8** %4
%88 = getelementptr inbounds i8, i8* %87, i64 3
%89 = load i8, i8* %88
%90 = sext i8 %89 to i32
%91 = mul nsw i32 %90, 199
%92 = add nsw i32 %86, %91
%93 = load i8*, i8** %4
%94 = getelementptr inbounds i8, i8* %93, i64 4
%95 = load i8, i8* %94
%96 = sext i8 %95 to i32
%97 = mul nsw i32 %96, 619
%98 = add nsw i32 %92, %97
store i32 %98, i32* %3
br label %850
99: ; preds = %2
%100 = load i8*, i8** %4
%101 = getelementptr inbounds i8, i8* %100, i64 0
%102 = load i8, i8* %101
%103 = sext i8 %102 to i32
%104 = mul nsw i32 %103, 83
%105 = load i8*, i8** %4
%106 = getelementptr inbounds i8, i8* %105, i64 1
%107 = load i8, i8* %106
%108 = sext i8 %107 to i32
%109 = mul nsw i32 %108, 263
%110 = add nsw i32 %104, %109
%111 = load i8*, i8** %4
%112 = getelementptr inbounds i8, i8* %111, i64 2
%113 = load i8, i8* %112
%114 = sext i8 %113 to i32
%115 = mul nsw i32 %114, 151
%116 = add nsw i32 %110, %115
%117 = load i8*, i8** %4
%118 = getelementptr inbounds i8, i8* %117, i64 3
%119 = load i8, i8* %118
%120 = sext i8 %119 to i32
%121 = mul nsw i32 %120, 199
%122 = add nsw i32 %116, %121
%123 = load i8*, i8** %4
%124 = getelementptr inbounds i8, i8* %123, i64 4
%125 = load i8, i8* %124
%126 = sext i8 %125 to i32
%127 = mul nsw i32 %126, 619
%128 = add nsw i32 %122, %127
%129 = load i8*, i8** %4
%130 = getelementptr inbounds i8, i8* %129, i64 5
%131 = load i8, i8* %130
%132 = sext i8 %131 to i32
%133 = mul nsw i32 %132, 311
%134 = add nsw i32 %128, %133
store i32 %134, i32* %3
br label %850
135: ; preds = %2
%136 = load i8*, i8** %4
%137 = getelementptr inbounds i8, i8* %136, i64 0
%138 = load i8, i8* %137
%139 = sext i8 %138 to i32
%140 = mul nsw i32 %139, 83
%141 = load i8*, i8** %4
%142 = getelementptr inbounds i8, i8* %141, i64 1
%143 = load i8, i8* %142
%144 = sext i8 %143 to i32
%145 = mul nsw i32 %144, 263
%146 = add nsw i32 %140, %145
%147 = load i8*, i8** %4
%148 = getelementptr inbounds i8, i8* %147, i64 2
%149 = load i8, i8* %148
%150 = sext i8 %149 to i32
%151 = mul nsw i32 %150, 151
%152 = add nsw i32 %146, %151
%153 = load i8*, i8** %4
%154 = getelementptr inbounds i8, i8* %153, i64 3
%155 = load i8, i8* %154
%156 = sext i8 %155 to i32
%157 = mul nsw i32 %156, 199
%158 = add nsw i32 %152, %157
%159 = load i8*, i8** %4
%160 = getelementptr inbounds i8, i8* %159, i64 4
%161 = load i8, i8* %160
%162 = sext i8 %161 to i32
%163 = mul nsw i32 %162, 619
%164 = add nsw i32 %158, %163
%165 = load i8*, i8** %4
%166 = getelementptr inbounds i8, i8* %165, i64 5
%167 = load i8, i8* %166
%168 = sext i8 %167 to i32
%169 = mul nsw i32 %168, 311
%170 = add nsw i32 %164, %169
%171 = load i8*, i8** %4
%172 = getelementptr inbounds i8, i8* %171, i64 6
%173 = load i8, i8* %172
%174 = sext i8 %173 to i32
%175 = mul nsw i32 %174, 347
%176 = add nsw i32 %170, %175
store i32 %176, i32* %3
br label %850
177: ; preds = %2
%178 = load i8*, i8** %4
%179 = getelementptr inbounds i8, i8* %178, i64 0
%180 = load i8, i8* %179
%181 = sext i8 %180 to i32
%182 = mul nsw i32 %181, 83
%183 = load i8*, i8** %4
%184 = getelementptr inbounds i8, i8* %183, i64 1
%185 = load i8, i8* %184
%186 = sext i8 %185 to i32
%187 = mul nsw i32 %186, 263
%188 = add nsw i32 %182, %187
%189 = load i8*, i8** %4
%190 = getelementptr inbounds i8, i8* %189, i64 2
%191 = load i8, i8* %190
%192 = sext i8 %191 to i32
%193 = mul nsw i32 %192, 151
%194 = add nsw i32 %188, %193
%195 = load i8*, i8** %4
%196 = getelementptr inbounds i8, i8* %195, i64 3
%197 = load i8, i8* %196
%198 = sext i8 %197 to i32
%199 = mul nsw i32 %198, 199
%200 = add nsw i32 %194, %199
%201 = load i8*, i8** %4
%202 = getelementptr inbounds i8, i8* %201, i64 4
%203 = load i8, i8* %202
%204 = sext i8 %203 to i32
%205 = mul nsw i32 %204, 619
%206 = add nsw i32 %200, %205
%207 = load i8*, i8** %4
%208 = getelementptr inbounds i8, i8* %207, i64 5
%209 = load i8, i8* %208
%210 = sext i8 %209 to i32
%211 = mul nsw i32 %210, 311
%212 = add nsw i32 %206, %211
%213 = load i8*, i8** %4
%214 = getelementptr inbounds i8, i8* %213, i64 6
%215 = load i8, i8* %214
%216 = sext i8 %215 to i32
%217 = mul nsw i32 %216, 347
%218 = add nsw i32 %212, %217
%219 = load i8*, i8** %4
%220 = getelementptr inbounds i8, i8* %219, i64 7
%221 = load i8, i8* %220
%222 = sext i8 %221 to i32
%223 = mul nsw i32 %222, 19
%224 = add nsw i32 %218, %223
store i32 %224, i32* %3
br label %850
225: ; preds = %2
%226 = load i8*, i8** %4
%227 = getelementptr inbounds i8, i8* %226, i64 0
%228 = load i8, i8* %227
%229 = sext i8 %228 to i32
%230 = mul nsw i32 %229, 83
%231 = load i8*, i8** %4
%232 = getelementptr inbounds i8, i8* %231, i64 1
%233 = load i8, i8* %232
%234 = sext i8 %233 to i32
%235 = mul nsw i32 %234, 263
%236 = add nsw i32 %230, %235
%237 = load i8*, i8** %4
%238 = getelementptr inbounds i8, i8* %237, i64 2
%239 = load i8, i8* %238
%240 = sext i8 %239 to i32
%241 = mul nsw i32 %240, 151
%242 = add nsw i32 %236, %241
%243 = load i8*, i8** %4
%244 = getelementptr inbounds i8, i8* %243, i64 3
%245 = load i8, i8* %244
%246 = sext i8 %245 to i32
%247 = mul nsw i32 %246, 199
%248 = add nsw i32 %242, %247
%249 = load i8*, i8** %4
%250 = getelementptr inbounds i8, i8* %249, i64 4
%251 = load i8, i8* %250
%252 = sext i8 %251 to i32
%253 = mul nsw i32 %252, 619
%254 = add nsw i32 %248, %253
%255 = load i8*, i8** %4
%256 = getelementptr inbounds i8, i8* %255, i64 5
%257 = load i8, i8* %256
%258 = sext i8 %257 to i32
%259 = mul nsw i32 %258, 311
%260 = add nsw i32 %254, %259
%261 = load i8*, i8** %4
%262 = getelementptr inbounds i8, i8* %261, i64 6
%263 = load i8, i8* %262
%264 = sext i8 %263 to i32
%265 = mul nsw i32 %264, 347
%266 = add nsw i32 %260, %265
%267 = load i8*, i8** %4
%268 = getelementptr inbounds i8, i8* %267, i64 7
%269 = load i8, i8* %268
%270 = sext i8 %269 to i32
%271 = mul nsw i32 %270, 19
%272 = add nsw i32 %266, %271
%273 = load i8*, i8** %4
%274 = getelementptr inbounds i8, i8* %273, i64 8
%275 = load i8, i8* %274
%276 = sext i8 %275 to i32
%277 = mul nsw i32 %276, 601
%278 = add nsw i32 %272, %277
store i32 %278, i32* %3
br label %850
279: ; preds = %2
%280 = load i8*, i8** %4
%281 = getelementptr inbounds i8, i8* %280, i64 0
%282 = load i8, i8* %281
%283 = sext i8 %282 to i32
%284 = mul nsw i32 %283, 83
%285 = load i8*, i8** %4
%286 = getelementptr inbounds i8, i8* %285, i64 1
%287 = load i8, i8* %286
%288 = sext i8 %287 to i32
%289 = mul nsw i32 %288, 263
%290 = add nsw i32 %284, %289
%291 = load i8*, i8** %4
%292 = getelementptr inbounds i8, i8* %291, i64 2
%293 = load i8, i8* %292
%294 = sext i8 %293 to i32
%295 = mul nsw i32 %294, 151
%296 = add nsw i32 %290, %295
%297 = load i8*, i8** %4
%298 = getelementptr inbounds i8, i8* %297, i64 3
%299 = load i8, i8* %298
%300 = sext i8 %299 to i32
%301 = mul nsw i32 %300, 199
%302 = add nsw i32 %296, %301
%303 = load i8*, i8** %4
%304 = getelementptr inbounds i8, i8* %303, i64 4
%305 = load i8, i8* %304
%306 = sext i8 %305 to i32
%307 = mul nsw i32 %306, 619
%308 = add nsw i32 %302, %307
%309 = load i8*, i8** %4
%310 = getelementptr inbounds i8, i8* %309, i64 5
%311 = load i8, i8* %310
%312 = sext i8 %311 to i32
%313 = mul nsw i32 %312, 311
%314 = add nsw i32 %308, %313
%315 = load i8*, i8** %4
%316 = getelementptr inbounds i8, i8* %315, i64 6
%317 = load i8, i8* %316
%318 = sext i8 %317 to i32
%319 = mul nsw i32 %318, 347
%320 = add nsw i32 %314, %319
%321 = load i8*, i8** %4
%322 = getelementptr inbounds i8, i8* %321, i64 7
%323 = load i8, i8* %322
%324 = sext i8 %323 to i32
%325 = mul nsw i32 %324, 19
%326 = add nsw i32 %320, %325
%327 = load i8*, i8** %4
%328 = getelementptr inbounds i8, i8* %327, i64 8
%329 = load i8, i8* %328
%330 = sext i8 %329 to i32
%331 = mul nsw i32 %330, 601
%332 = add nsw i32 %326, %331
%333 = load i8*, i8** %4
%334 = getelementptr inbounds i8, i8* %333, i64 9
%335 = load i8, i8* %334
%336 = sext i8 %335 to i32
%337 = mul nsw i32 %336, 43
%338 = add nsw i32 %332, %337
store i32 %338, i32* %3
br label %850
339: ; preds = %2
%340 = load i8*, i8** %4
%341 = getelementptr inbounds i8, i8* %340, i64 0
%342 = load i8, i8* %341
%343 = sext i8 %342 to i32
%344 = mul nsw i32 %343, 83
%345 = load i8*, i8** %4
%346 = getelementptr inbounds i8, i8* %345, i64 1
%347 = load i8, i8* %346
%348 = sext i8 %347 to i32
%349 = mul nsw i32 %348, 263
%350 = add nsw i32 %344, %349
%351 = load i8*, i8** %4
%352 = getelementptr inbounds i8, i8* %351, i64 2
%353 = load i8, i8* %352
%354 = sext i8 %353 to i32
%355 = mul nsw i32 %354, 151
%356 = add nsw i32 %350, %355
%357 = load i8*, i8** %4
%358 = getelementptr inbounds i8, i8* %357, i64 3
%359 = load i8, i8* %358
%360 = sext i8 %359 to i32
%361 = mul nsw i32 %360, 199
%362 = add nsw i32 %356, %361
%363 = load i8*, i8** %4
%364 = getelementptr inbounds i8, i8* %363, i64 4
%365 = load i8, i8* %364
%366 = sext i8 %365 to i32
%367 = mul nsw i32 %366, 619
%368 = add nsw i32 %362, %367
%369 = load i8*, i8** %4
%370 = getelementptr inbounds i8, i8* %369, i64 5
%371 = load i8, i8* %370
%372 = sext i8 %371 to i32
%373 = mul nsw i32 %372, 311
%374 = add nsw i32 %368, %373
%375 = load i8*, i8** %4
%376 = getelementptr inbounds i8, i8* %375, i64 6
%377 = load i8, i8* %376
%378 = sext i8 %377 to i32
%379 = mul nsw i32 %378, 347
%380 = add nsw i32 %374, %379
%381 = load i8*, i8** %4
%382 = getelementptr inbounds i8, i8* %381, i64 7
%383 = load i8, i8* %382
%384 = sext i8 %383 to i32
%385 = mul nsw i32 %384, 19
%386 = add nsw i32 %380, %385
%387 = load i8*, i8** %4
%388 = getelementptr inbounds i8, i8* %387, i64 8
%389 = load i8, i8* %388
%390 = sext i8 %389 to i32
%391 = mul nsw i32 %390, 601
%392 = add nsw i32 %386, %391
%393 = load i8*, i8** %4
%394 = getelementptr inbounds i8, i8* %393, i64 9
%395 = load i8, i8* %394
%396 = sext i8 %395 to i32
%397 = mul nsw i32 %396, 43
%398 = add nsw i32 %392, %397
%399 = load i8*, i8** %4
%400 = getelementptr inbounds i8, i8* %399, i64 10
%401 = load i8, i8* %400
%402 = sext i8 %401 to i32
%403 = mul nsw i32 %402, 239
%404 = add nsw i32 %398, %403
store i32 %404, i32* %3
br label %850
405: ; preds = %2
%406 = load i8*, i8** %4
%407 = getelementptr inbounds i8, i8* %406, i64 0
%408 = load i8, i8* %407
%409 = sext i8 %408 to i32
%410 = mul nsw i32 %409, 83
%411 = load i8*, i8** %4
%412 = getelementptr inbounds i8, i8* %411, i64 1
%413 = load i8, i8* %412
%414 = sext i8 %413 to i32
%415 = mul nsw i32 %414, 263
%416 = add nsw i32 %410, %415
%417 = load i8*, i8** %4
%418 = getelementptr inbounds i8, i8* %417, i64 2
%419 = load i8, i8* %418
%420 = sext i8 %419 to i32
%421 = mul nsw i32 %420, 151
%422 = add nsw i32 %416, %421
%423 = load i8*, i8** %4
%424 = getelementptr inbounds i8, i8* %423, i64 3
%425 = load i8, i8* %424
%426 = sext i8 %425 to i32
%427 = mul nsw i32 %426, 199
%428 = add nsw i32 %422, %427
%429 = load i8*, i8** %4
%430 = getelementptr inbounds i8, i8* %429, i64 4
%431 = load i8, i8* %430
%432 = sext i8 %431 to i32
%433 = mul nsw i32 %432, 619
%434 = add nsw i32 %428, %433
%435 = load i8*, i8** %4
%436 = getelementptr inbounds i8, i8* %435, i64 5
%437 = load i8, i8* %436
%438 = sext i8 %437 to i32
%439 = mul nsw i32 %438, 311
%440 = add nsw i32 %434, %439
%441 = load i8*, i8** %4
%442 = getelementptr inbounds i8, i8* %441, i64 6
%443 = load i8, i8* %442
%444 = sext i8 %443 to i32
%445 = mul nsw i32 %444, 347
%446 = add nsw i32 %440, %445
%447 = load i8*, i8** %4
%448 = getelementptr inbounds i8, i8* %447, i64 7
%449 = load i8, i8* %448
%450 = sext i8 %449 to i32
%451 = mul nsw i32 %450, 19
%452 = add nsw i32 %446, %451
%453 = load i8*, i8** %4
%454 = getelementptr inbounds i8, i8* %453, i64 8
%455 = load i8, i8* %454
%456 = sext i8 %455 to i32
%457 = mul nsw i32 %456, 601
%458 = add nsw i32 %452, %457
%459 = load i8*, i8** %4
%460 = getelementptr inbounds i8, i8* %459, i64 9
%461 = load i8, i8* %460
%462 = sext i8 %461 to i32
%463 = mul nsw i32 %462, 43
%464 = add nsw i32 %458, %463
%465 = load i8*, i8** %4
%466 = getelementptr inbounds i8, i8* %465, i64 10
%467 = load i8, i8* %466
%468 = sext i8 %467 to i32
%469 = mul nsw i32 %468, 239
%470 = add nsw i32 %464, %469
%471 = load i8*, i8** %4
%472 = getelementptr inbounds i8, i8* %471, i64 11
%473 = load i8, i8* %472
%474 = sext i8 %473 to i32
%475 = mul nsw i32 %474, 523
%476 = add nsw i32 %470, %475
store i32 %476, i32* %3
br label %850
477: ; preds = %2
%478 = load i8*, i8** %4
%479 = getelementptr inbounds i8, i8* %478, i64 0
%480 = load i8, i8* %479
%481 = sext i8 %480 to i32
%482 = mul nsw i32 %481, 83
%483 = load i8*, i8** %4
%484 = getelementptr inbounds i8, i8* %483, i64 1
%485 = load i8, i8* %484
%486 = sext i8 %485 to i32
%487 = mul nsw i32 %486, 263
%488 = add nsw i32 %482, %487
%489 = load i8*, i8** %4
%490 = getelementptr inbounds i8, i8* %489, i64 2
%491 = load i8, i8* %490
%492 = sext i8 %491 to i32
%493 = mul nsw i32 %492, 151
%494 = add nsw i32 %488, %493
%495 = load i8*, i8** %4
%496 = getelementptr inbounds i8, i8* %495, i64 3
%497 = load i8, i8* %496
%498 = sext i8 %497 to i32
%499 = mul nsw i32 %498, 199
%500 = add nsw i32 %494, %499
%501 = load i8*, i8** %4
%502 = getelementptr inbounds i8, i8* %501, i64 4
%503 = load i8, i8* %502
%504 = sext i8 %503 to i32
%505 = mul nsw i32 %504, 619
%506 = add nsw i32 %500, %505
%507 = load i8*, i8** %4
%508 = getelementptr inbounds i8, i8* %507, i64 5
%509 = load i8, i8* %508
%510 = sext i8 %509 to i32
%511 = mul nsw i32 %510, 311
%512 = add nsw i32 %506, %511
%513 = load i8*, i8** %4
%514 = getelementptr inbounds i8, i8* %513, i64 6
%515 = load i8, i8* %514
%516 = sext i8 %515 to i32
%517 = mul nsw i32 %516, 347
%518 = add nsw i32 %512, %517
%519 = load i8*, i8** %4
%520 = getelementptr inbounds i8, i8* %519, i64 7
%521 = load i8, i8* %520
%522 = sext i8 %521 to i32
%523 = mul nsw i32 %522, 19
%524 = add nsw i32 %518, %523
%525 = load i8*, i8** %4
%526 = getelementptr inbounds i8, i8* %525, i64 8
%527 = load i8, i8* %526
%528 = sext i8 %527 to i32
%529 = mul nsw i32 %528, 601
%530 = add nsw i32 %524, %529
%531 = load i8*, i8** %4
%532 = getelementptr inbounds i8, i8* %531, i64 9
%533 = load i8, i8* %532
%534 = sext i8 %533 to i32
%535 = mul nsw i32 %534, 43
%536 = add nsw i32 %530, %535
%537 = load i8*, i8** %4
%538 = getelementptr inbounds i8, i8* %537, i64 10
%539 = load i8, i8* %538
%540 = sext i8 %539 to i32
%541 = mul nsw i32 %540, 239
%542 = add nsw i32 %536, %541
%543 = load i8*, i8** %4
%544 = getelementptr inbounds i8, i8* %543, i64 11
%545 = load i8, i8* %544
%546 = sext i8 %545 to i32
%547 = mul nsw i32 %546, 523
%548 = add nsw i32 %542, %547
%549 = load i8*, i8** %4
%550 = getelementptr inbounds i8, i8* %549, i64 12
%551 = load i8, i8* %550
%552 = sext i8 %551 to i32
%553 = mul nsw i32 %552, 463
%554 = add nsw i32 %548, %553
store i32 %554, i32* %3
br label %850
555: ; preds = %2
%556 = load i8*, i8** %4
%557 = getelementptr inbounds i8, i8* %556, i64 0
%558 = load i8, i8* %557
%559 = sext i8 %558 to i32
%560 = mul nsw i32 %559, 83
%561 = load i8*, i8** %4
%562 = getelementptr inbounds i8, i8* %561, i64 1
%563 = load i8, i8* %562
%564 = sext i8 %563 to i32
%565 = mul nsw i32 %564, 263
%566 = add nsw i32 %560, %565
%567 = load i8*, i8** %4
%568 = getelementptr inbounds i8, i8* %567, i64 2
%569 = load i8, i8* %568
%570 = sext i8 %569 to i32
%571 = mul nsw i32 %570, 151
%572 = add nsw i32 %566, %571
%573 = load i8*, i8** %4
%574 = getelementptr inbounds i8, i8* %573, i64 3
%575 = load i8, i8* %574
%576 = sext i8 %575 to i32
%577 = mul nsw i32 %576, 199
%578 = add nsw i32 %572, %577
%579 = load i8*, i8** %4
%580 = getelementptr inbounds i8, i8* %579, i64 4
%581 = load i8, i8* %580
%582 = sext i8 %581 to i32
%583 = mul nsw i32 %582, 619
%584 = add nsw i32 %578, %583
%585 = load i8*, i8** %4
%586 = getelementptr inbounds i8, i8* %585, i64 5
%587 = load i8, i8* %586
%588 = sext i8 %587 to i32
%589 = mul nsw i32 %588, 311
%590 = add nsw i32 %584, %589
%591 = load i8*, i8** %4
%592 = getelementptr inbounds i8, i8* %591, i64 6
%593 = load i8, i8* %592
%594 = sext i8 %593 to i32
%595 = mul nsw i32 %594, 347
%596 = add nsw i32 %590, %595
%597 = load i8*, i8** %4
%598 = getelementptr inbounds i8, i8* %597, i64 7
%599 = load i8, i8* %598
%600 = sext i8 %599 to i32
%601 = mul nsw i32 %600, 19
%602 = add nsw i32 %596, %601
%603 = load i8*, i8** %4
%604 = getelementptr inbounds i8, i8* %603, i64 8
%605 = load i8, i8* %604
%606 = sext i8 %605 to i32
%607 = mul nsw i32 %606, 601
%608 = add nsw i32 %602, %607
%609 = load i8*, i8** %4
%610 = getelementptr inbounds i8, i8* %609, i64 9
%611 = load i8, i8* %610
%612 = sext i8 %611 to i32
%613 = mul nsw i32 %612, 43
%614 = add nsw i32 %608, %613
%615 = load i8*, i8** %4
%616 = getelementptr inbounds i8, i8* %615, i64 10
%617 = load i8, i8* %616
%618 = sext i8 %617 to i32
%619 = mul nsw i32 %618, 239
%620 = add nsw i32 %614, %619
%621 = load i8*, i8** %4
%622 = getelementptr inbounds i8, i8* %621, i64 11
%623 = load i8, i8* %622
%624 = sext i8 %623 to i32
%625 = mul nsw i32 %624, 523
%626 = add nsw i32 %620, %625
%627 = load i8*, i8** %4
%628 = getelementptr inbounds i8, i8* %627, i64 12
%629 = load i8, i8* %628
%630 = sext i8 %629 to i32
%631 = mul nsw i32 %630, 463
%632 = add nsw i32 %626, %631
%633 = load i8*, i8** %4
%634 = getelementptr inbounds i8, i8* %633, i64 13
%635 = load i8, i8* %634
%636 = sext i8 %635 to i32
%637 = mul nsw i32 %636, 599
%638 = add nsw i32 %632, %637
store i32 %638, i32* %3
br label %850
639: ; preds = %2
%640 = load i8*, i8** %4
%641 = getelementptr inbounds i8, i8* %640, i64 0
%642 = load i8, i8* %641
%643 = sext i8 %642 to i32
%644 = mul nsw i32 %643, 83
%645 = load i8*, i8** %4
%646 = getelementptr inbounds i8, i8* %645, i64 1
%647 = load i8, i8* %646
%648 = sext i8 %647 to i32
%649 = mul nsw i32 %648, 263
%650 = add nsw i32 %644, %649
%651 = load i8*, i8** %4
%652 = getelementptr inbounds i8, i8* %651, i64 2
%653 = load i8, i8* %652
%654 = sext i8 %653 to i32
%655 = mul nsw i32 %654, 151
%656 = add nsw i32 %650, %655
%657 = load i8*, i8** %4
%658 = getelementptr inbounds i8, i8* %657, i64 3
%659 = load i8, i8* %658
%660 = sext i8 %659 to i32
%661 = mul nsw i32 %660, 199
%662 = add nsw i32 %656, %661
%663 = load i8*, i8** %4
%664 = getelementptr inbounds i8, i8* %663, i64 4
%665 = load i8, i8* %664
%666 = sext i8 %665 to i32
%667 = mul nsw i32 %666, 619
%668 = add nsw i32 %662, %667
%669 = load i8*, i8** %4
%670 = getelementptr inbounds i8, i8* %669, i64 5
%671 = load i8, i8* %670
%672 = sext i8 %671 to i32
%673 = mul nsw i32 %672, 311
%674 = add nsw i32 %668, %673
%675 = load i8*, i8** %4
%676 = getelementptr inbounds i8, i8* %675, i64 6
%677 = load i8, i8* %676
%678 = sext i8 %677 to i32
%679 = mul nsw i32 %678, 347
%680 = add nsw i32 %674, %679
%681 = load i8*, i8** %4
%682 = getelementptr inbounds i8, i8* %681, i64 7
%683 = load i8, i8* %682
%684 = sext i8 %683 to i32
%685 = mul nsw i32 %684, 19
%686 = add nsw i32 %680, %685
%687 = load i8*, i8** %4
%688 = getelementptr inbounds i8, i8* %687, i64 8
%689 = load i8, i8* %688
%690 = sext i8 %689 to i32
%691 = mul nsw i32 %690, 601
%692 = add nsw i32 %686, %691
%693 = load i8*, i8** %4
%694 = getelementptr inbounds i8, i8* %693, i64 9
%695 = load i8, i8* %694
%696 = sext i8 %695 to i32
%697 = mul nsw i32 %696, 43
%698 = add nsw i32 %692, %697
%699 = load i8*, i8** %4
%700 = getelementptr inbounds i8, i8* %699, i64 10
%701 = load i8, i8* %700
%702 = sext i8 %701 to i32
%703 = mul nsw i32 %702, 239
%704 = add nsw i32 %698, %703
%705 = load i8*, i8** %4
%706 = getelementptr inbounds i8, i8* %705, i64 11
%707 = load i8, i8* %706
%708 = sext i8 %707 to i32
%709 = mul nsw i32 %708, 523
%710 = add nsw i32 %704, %709
%711 = load i8*, i8** %4
%712 = getelementptr inbounds i8, i8* %711, i64 12
%713 = load i8, i8* %712
%714 = sext i8 %713 to i32
%715 = mul nsw i32 %714, 463
%716 = add nsw i32 %710, %715
%717 = load i8*, i8** %4
%718 = getelementptr inbounds i8, i8* %717, i64 13
%719 = load i8, i8* %718
%720 = sext i8 %719 to i32
%721 = mul nsw i32 %720, 599
%722 = add nsw i32 %716, %721
%723 = load i8*, i8** %4
%724 = getelementptr inbounds i8, i8* %723, i64 14
%725 = load i8, i8* %724
%726 = sext i8 %725 to i32
%727 = mul nsw i32 %726, 223
%728 = add nsw i32 %722, %727
store i32 %728, i32* %3
br label %850
729: ; preds = %2
%730 = load i8*, i8** %4
%731 = getelementptr inbounds i8, i8* %730, i64 0
%732 = load i8, i8* %731
%733 = sext i8 %732 to i32
%734 = mul nsw i32 %733, 83
%735 = load i8*, i8** %4
%736 = getelementptr inbounds i8, i8* %735, i64 1
%737 = load i8, i8* %736
%738 = sext i8 %737 to i32
%739 = mul nsw i32 %738, 263
%740 = add nsw i32 %734, %739
%741 = load i8*, i8** %4
%742 = getelementptr inbounds i8, i8* %741, i64 2
%743 = load i8, i8* %742
%744 = sext i8 %743 to i32
%745 = mul nsw i32 %744, 151
%746 = add nsw i32 %740, %745
%747 = load i8*, i8** %4
%748 = getelementptr inbounds i8, i8* %747, i64 3
%749 = load i8, i8* %748
%750 = sext i8 %749 to i32
%751 = mul nsw i32 %750, 199
%752 = add nsw i32 %746, %751
%753 = load i8*, i8** %4
%754 = getelementptr inbounds i8, i8* %753, i64 4
%755 = load i8, i8* %754
%756 = sext i8 %755 to i32
%757 = mul nsw i32 %756, 619
%758 = add nsw i32 %752, %757
%759 = load i8*, i8** %4
%760 = getelementptr inbounds i8, i8* %759, i64 5
%761 = load i8, i8* %760
%762 = sext i8 %761 to i32
%763 = mul nsw i32 %762, 311
%764 = add nsw i32 %758, %763
%765 = load i8*, i8** %4
%766 = getelementptr inbounds i8, i8* %765, i64 6
%767 = load i8, i8* %766
%768 = sext i8 %767 to i32
%769 = mul nsw i32 %768, 347
%770 = add nsw i32 %764, %769
%771 = load i8*, i8** %4
%772 = getelementptr inbounds i8, i8* %771, i64 7
%773 = load i8, i8* %772
%774 = sext i8 %773 to i32
%775 = mul nsw i32 %774, 19
%776 = add nsw i32 %770, %775
%777 = load i8*, i8** %4
%778 = getelementptr inbounds i8, i8* %777, i64 8
%779 = load i8, i8* %778
%780 = sext i8 %779 to i32
%781 = mul nsw i32 %780, 601
%782 = add nsw i32 %776, %781
%783 = load i8*, i8** %4
%784 = getelementptr inbounds i8, i8* %783, i64 9
%785 = load i8, i8* %784
%786 = sext i8 %785 to i32
%787 = mul nsw i32 %786, 43
%788 = add nsw i32 %782, %787
%789 = load i8*, i8** %4
%790 = getelementptr inbounds i8, i8* %789, i64 10
%791 = load i8, i8* %790
%792 = sext i8 %791 to i32
%793 = mul nsw i32 %792, 239
%794 = add nsw i32 %788, %793
%795 = load i8*, i8** %4
%796 = getelementptr inbounds i8, i8* %795, i64 11
%797 = load i8, i8* %796
%798 = sext i8 %797 to i32
%799 = mul nsw i32 %798, 523
%800 = add nsw i32 %794, %799
%801 = load i8*, i8** %4
%802 = getelementptr inbounds i8, i8* %801, i64 12
%803 = load i8, i8* %802
%804 = sext i8 %803 to i32
%805 = mul nsw i32 %804, 463
%806 = add nsw i32 %800, %805
%807 = load i8*, i8** %4
%808 = getelementptr inbounds i8, i8* %807, i64 13
%809 = load i8, i8* %808
%810 = sext i8 %809 to i32
%811 = mul nsw i32 %810, 599
%812 = add nsw i32 %806, %811
%813 = load i8*, i8** %4
%814 = getelementptr inbounds i8, i8* %813, i64 14
%815 = load i8, i8* %814
%816 = sext i8 %815 to i32
%817 = mul nsw i32 %816, 223
%818 = add nsw i32 %812, %817
%819 = load i8*, i8** %4
%820 = getelementptr inbounds i8, i8* %819, i64 15
%821 = load i8, i8* %820
%822 = sext i8 %821 to i32
%823 = mul nsw i32 %822, 29
%824 = add nsw i32 %818, %823
store i32 %824, i32* %3
br label %850
825: ; preds = %2
store i32 0, i32* %6
store i32 0, i32* %7
br label %826
826: ; preds = %845, %825
%827 = load i32, i32* %7
%828 = load i32, i32* %5
%829 = icmp ult i32 %827, %828
br i1 %829, label %830, label %848
830: ; preds = %826
%831 = load i8*, i8** %4
%832 = load i32, i32* %7
%833 = zext i32 %832 to i64
%834 = getelementptr inbounds i8, i8* %831, i64 %833
%835 = load i8, i8* %834
%836 = sext i8 %835 to i32
%837 = load i32, i32* %7
%838 = urem i32 %837, 16
%839 = zext i32 %838 to i64
%840 = getelementptr inbounds [16 x i32], [16 x i32]* @hashstring.m, i64 0, i64 %839
%841 = load i32, i32* %840
%842 = mul i32 %836, %841
%843 = load i32, i32* %6
%844 = add i32 %843, %842
store i32 %844, i32* %6
br label %845
845: ; preds = %830
%846 = load i32, i32* %7
%847 = add i32 %846, 1
store i32 %847, i32* %7
br label %826
848: ; preds = %826
%849 = load i32, i32* %6
store i32 %849, i32* %3
br label %850
850: ; preds = %848, %729, %639, %555, %477, %405, %339, %279, %225, %177, %135, %99, %69, %45, %27, %15, %9
%851 = load i32, i32* %3
ret i32 %851
}

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