#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, int);
int strlen(char *);
long hash(char *word) {
  int l, count = 42, count1 = 1;
  l = strlen(word);
  int i = l;
  for (l = 0; l < i; l++, count1++) {
    if (word[l] == 'a')
      count = count + 97 * count1;
    else if (word[l] == 'b')
      count = count + 98 * count1;
    else if (word[l] == 'c')
      count = count + 99 * count1;
    else if (word[l] == 'd')
      count = count + 100 * count1;
    else if (word[l] == 'e')
      count = count + 101 * count1;
    else if (word[l] == 'f')
      count = count + 102 * count1;
    else if (word[l] == 'g')
      count = count + 103 * count1;
    else if (word[l] == 'h')
      count = count + 104 * count1;
    else if (word[l] == 'i')
      count = count + 105 * count1;
    else if (word[l] == 'j')
      count = count + 106 * count1;
    else if (word[l] == 'k')
      count = count + 107 * count1;
    else if (word[l] == 'l')
      count = count + 108 * count1;
    else if (word[l] == 'm')
      count = count + 109 * count1;
    else if (word[l] == 'n')
      count = count + 110 * count1;
    else if (word[l] == 'o')
      count = count + 111 * count1;
    else if (word[l] == 'p')
      count = count + 112 * count1;
    else if (word[l] == 'q')
      count = count + 113 * count1;
    else if (word[l] == 'r')
      count = count + 114 * count1;
    else if (word[l] == 's')
      count = count + 115 * count1;
    else if (word[l] == 't')
      count = count + 116 * count1;
    else if (word[l] == 'u')
      count = count + 117 * count1;
    else if (word[l] == 'v')
      count = count + 118 * count1;
    else if (word[l] == 'w')
      count = count + 119 * count1;
    else if (word[l] == 'x')
      count = count + 120 * count1;
    else if (word[l] == 'y')
      count = count + 121 * count1;
    else if (word[l] == 'z')
      count = count + 122 * count1;
  }
  printf("\n%d", count);
  return 0;
}


x86 assembly (clang, -O0):
<hash>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
movl   $0x2a,-0x10(%rbp)
movl   $0x1,-0x14(%rbp)
mov    -0x8(%rbp),%rdi
call   1030 <strlen@plt>
mov    %eax,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x18(%rbp)
movl   $0x0,-0xc(%rbp)
mov    -0xc(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    15cf <hash+0x4af>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jne    1185 <hash+0x65>
mov    -0x10(%rbp),%eax
imul   $0x61,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    15b3 <hash+0x493>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x62,%eax
jne    11ab <hash+0x8b>
mov    -0x10(%rbp),%eax
imul   $0x62,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    15ae <hash+0x48e>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x63,%eax
jne    11d1 <hash+0xb1>
mov    -0x10(%rbp),%eax
imul   $0x63,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    15a9 <hash+0x489>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x64,%eax
jne    11f7 <hash+0xd7>
mov    -0x10(%rbp),%eax
imul   $0x64,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    15a4 <hash+0x484>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x65,%eax
jne    121d <hash+0xfd>
mov    -0x10(%rbp),%eax
imul   $0x65,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    159f <hash+0x47f>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x66,%eax
jne    1243 <hash+0x123>
mov    -0x10(%rbp),%eax
imul   $0x66,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    159a <hash+0x47a>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x67,%eax
jne    1269 <hash+0x149>
mov    -0x10(%rbp),%eax
imul   $0x67,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    1595 <hash+0x475>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x68,%eax
jne    128f <hash+0x16f>
mov    -0x10(%rbp),%eax
imul   $0x68,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    1590 <hash+0x470>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x69,%eax
jne    12b5 <hash+0x195>
mov    -0x10(%rbp),%eax
imul   $0x69,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    158b <hash+0x46b>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6a,%eax
jne    12db <hash+0x1bb>
mov    -0x10(%rbp),%eax
imul   $0x6a,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    1586 <hash+0x466>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6b,%eax
jne    1301 <hash+0x1e1>
mov    -0x10(%rbp),%eax
imul   $0x6b,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    1581 <hash+0x461>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6c,%eax
jne    1327 <hash+0x207>
mov    -0x10(%rbp),%eax
imul   $0x6c,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    157c <hash+0x45c>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6d,%eax
jne    134d <hash+0x22d>
mov    -0x10(%rbp),%eax
imul   $0x6d,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    1577 <hash+0x457>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6e,%eax
jne    1373 <hash+0x253>
mov    -0x10(%rbp),%eax
imul   $0x6e,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    1572 <hash+0x452>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x6f,%eax
jne    1399 <hash+0x279>
mov    -0x10(%rbp),%eax
imul   $0x6f,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    156d <hash+0x44d>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x70,%eax
jne    13bf <hash+0x29f>
mov    -0x10(%rbp),%eax
imul   $0x70,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    1568 <hash+0x448>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x71,%eax
jne    13e5 <hash+0x2c5>
mov    -0x10(%rbp),%eax
imul   $0x71,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    1563 <hash+0x443>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x72,%eax
jne    140b <hash+0x2eb>
mov    -0x10(%rbp),%eax
imul   $0x72,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    155e <hash+0x43e>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x73,%eax
jne    1431 <hash+0x311>
mov    -0x10(%rbp),%eax
imul   $0x73,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    1559 <hash+0x439>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x74,%eax
jne    1457 <hash+0x337>
mov    -0x10(%rbp),%eax
imul   $0x74,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    1554 <hash+0x434>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x75,%eax
jne    147d <hash+0x35d>
mov    -0x10(%rbp),%eax
imul   $0x75,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    154f <hash+0x42f>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x76,%eax
jne    14a3 <hash+0x383>
mov    -0x10(%rbp),%eax
imul   $0x76,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    154a <hash+0x42a>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x77,%eax
jne    14c9 <hash+0x3a9>
mov    -0x10(%rbp),%eax
imul   $0x77,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    1545 <hash+0x425>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x78,%eax
jne    14ef <hash+0x3cf>
mov    -0x10(%rbp),%eax
imul   $0x78,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    1540 <hash+0x420>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x79,%eax
jne    1515 <hash+0x3f5>
mov    -0x10(%rbp),%eax
imul   $0x79,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    153b <hash+0x41b>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7a,%eax
jne    1536 <hash+0x416>
mov    -0x10(%rbp),%eax
imul   $0x7a,-0x14(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    153b <hash+0x41b>
jmp    1540 <hash+0x420>
jmp    1545 <hash+0x425>
jmp    154a <hash+0x42a>
jmp    154f <hash+0x42f>
jmp    1554 <hash+0x434>
jmp    1559 <hash+0x439>
jmp    155e <hash+0x43e>
jmp    1563 <hash+0x443>
jmp    1568 <hash+0x448>
jmp    156d <hash+0x44d>
jmp    1572 <hash+0x452>
jmp    1577 <hash+0x457>
jmp    157c <hash+0x45c>
jmp    1581 <hash+0x461>
jmp    1586 <hash+0x466>
jmp    158b <hash+0x46b>
jmp    1590 <hash+0x470>
jmp    1595 <hash+0x475>
jmp    159a <hash+0x47a>
jmp    159f <hash+0x47f>
jmp    15a4 <hash+0x484>
jmp    15a9 <hash+0x489>
jmp    15ae <hash+0x48e>
jmp    15b3 <hash+0x493>
jmp    15b8 <hash+0x498>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1153 <hash+0x33>
mov    -0x10(%rbp),%esi
lea    0xa27(%rip),%rdi
call   1040 <printf@plt>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<hash>:
push   %rbx
mov    %rdi,%rbx
call   1030 <strlen@plt>
test   %eax,%eax
jle    1207 <hash+0xe7>
mov    %eax,%r9d
mov    $0x2a,%esi
mov    $0x1,%ecx
mov    $0x61,%edx
xor    %edi,%edi
lea    0xeb4(%rip),%r8
nopl   0x0(%rax)
movzbl (%rbx,%rdi,1),%eax
add    $0x9f,%al
cmp    $0x19,%al
ja     11f2 <hash+0xd2>
movzbl %al,%eax
movslq (%r8,%rax,4),%rax
add    %r8,%rax
jmp    *%rax
add    %edx,%esi
jmp    11f2 <hash+0xd2>
imul   $0x62,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x63,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x64,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x65,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x66,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x67,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x68,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x69,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x6a,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x6b,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x6c,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x6d,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x6e,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x6f,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x70,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x71,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x72,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x73,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x74,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x75,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x76,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x77,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x78,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x79,%ecx,%eax
jmp    11f0 <hash+0xd0>
imul   $0x7a,%ecx,%eax
nop
add    %eax,%esi
add    $0x1,%rdi
add    $0x1,%ecx
add    $0x61,%edx
cmp    %rdi,%r9
jne    1150 <hash+0x30>
jmp    120c <hash+0xec>
mov    $0x2a,%esi
lea    0xe55(%rip),%rdi
call   1040 <printf@plt>
xor    %eax,%eax
pop    %rbx
ret

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

LLVM IR (-O2):
@.str = [4 x i8] c"\0A%d\00"
define i64 @hash(i8* %0) {
%2 = tail call i32 @strlen(i8* %0)
%3 = icmp sgt i32 %2, 0
br i1 %3, label %4, label %95
4: ; preds = %1
%5 = zext i32 %2 to i64
br label %6
6: ; preds = %4, %90
%7 = phi i64 [ 0, %4 ], [ %92, %90 ]
%8 = phi i32 [ 1, %4 ], [ %93, %90 ]
%9 = phi i32 [ 42, %4 ], [ %91, %90 ]
%10 = getelementptr inbounds i8, i8* %0, i64 %7
%11 = load i8, i8* %10
switch i8 %11, label %90 [
i8 97, label %12
i8 98, label %15
i8 99, label %18
i8 100, label %21
i8 101, label %24
i8 102, label %27
i8 103, label %30
i8 104, label %33
i8 105, label %36
i8 106, label %39
i8 107, label %42
i8 108, label %45
i8 109, label %48
i8 110, label %51
i8 111, label %54
i8 112, label %57
i8 113, label %60
i8 114, label %63
i8 115, label %66
i8 116, label %69
i8 117, label %72
i8 118, label %75
i8 119, label %78
i8 120, label %81
i8 121, label %84
i8 122, label %87
]
12: ; preds = %6
%13 = mul nsw i32 %8, 97
%14 = add nsw i32 %13, %9
br label %90
15: ; preds = %6
%16 = mul nsw i32 %8, 98
%17 = add nsw i32 %16, %9
br label %90
18: ; preds = %6
%19 = mul nsw i32 %8, 99
%20 = add nsw i32 %19, %9
br label %90
21: ; preds = %6
%22 = mul nsw i32 %8, 100
%23 = add nsw i32 %22, %9
br label %90
24: ; preds = %6
%25 = mul nsw i32 %8, 101
%26 = add nsw i32 %25, %9
br label %90
27: ; preds = %6
%28 = mul nsw i32 %8, 102
%29 = add nsw i32 %28, %9
br label %90
30: ; preds = %6
%31 = mul nsw i32 %8, 103
%32 = add nsw i32 %31, %9
br label %90
33: ; preds = %6
%34 = mul nsw i32 %8, 104
%35 = add nsw i32 %34, %9
br label %90
36: ; preds = %6
%37 = mul nsw i32 %8, 105
%38 = add nsw i32 %37, %9
br label %90
39: ; preds = %6
%40 = mul nsw i32 %8, 106
%41 = add nsw i32 %40, %9
br label %90
42: ; preds = %6
%43 = mul nsw i32 %8, 107
%44 = add nsw i32 %43, %9
br label %90
45: ; preds = %6
%46 = mul nsw i32 %8, 108
%47 = add nsw i32 %46, %9
br label %90
48: ; preds = %6
%49 = mul nsw i32 %8, 109
%50 = add nsw i32 %49, %9
br label %90
51: ; preds = %6
%52 = mul nsw i32 %8, 110
%53 = add nsw i32 %52, %9
br label %90
54: ; preds = %6
%55 = mul nsw i32 %8, 111
%56 = add nsw i32 %55, %9
br label %90
57: ; preds = %6
%58 = mul nsw i32 %8, 112
%59 = add nsw i32 %58, %9
br label %90
60: ; preds = %6
%61 = mul nsw i32 %8, 113
%62 = add nsw i32 %61, %9
br label %90
63: ; preds = %6
%64 = mul nsw i32 %8, 114
%65 = add nsw i32 %64, %9
br label %90
66: ; preds = %6
%67 = mul nsw i32 %8, 115
%68 = add nsw i32 %67, %9
br label %90
69: ; preds = %6
%70 = mul nsw i32 %8, 116
%71 = add nsw i32 %70, %9
br label %90
72: ; preds = %6
%73 = mul nsw i32 %8, 117
%74 = add nsw i32 %73, %9
br label %90
75: ; preds = %6
%76 = mul nsw i32 %8, 118
%77 = add nsw i32 %76, %9
br label %90
78: ; preds = %6
%79 = mul nsw i32 %8, 119
%80 = add nsw i32 %79, %9
br label %90
81: ; preds = %6
%82 = mul nsw i32 %8, 120
%83 = add nsw i32 %82, %9
br label %90
84: ; preds = %6
%85 = mul nsw i32 %8, 121
%86 = add nsw i32 %85, %9
br label %90
87: ; preds = %6
%88 = mul nsw i32 %8, 122
%89 = add nsw i32 %88, %9
br label %90
90: ; preds = %6, %12, %18, %24, %30, %36, %42, %48, %54, %60, %66, %72, %78, %84, %87, %81, %75, %69, %63, %57, %51, %45, %39, %33, %27, %21, %15
%91 = phi i32 [ %14, %12 ], [ %17, %15 ], [ %20, %18 ], [ %23, %21 ], [ %26, %24 ], [ %29, %27 ], [ %32, %30 ], [ %35, %33 ], [ %38, %36 ], [ %41, %39 ], [ %44, %42 ], [ %47, %45 ], [ %50, %48 ], [ %53, %51 ], [ %56, %54 ], [ %59, %57 ], [ %62, %60 ], [ %65, %63 ], [ %68, %66 ], [ %71, %69 ], [ %74, %72 ], [ %77, %75 ], [ %80, %78 ], [ %83, %81 ], [ %86, %84 ], [ %89, %87 ], [ %9, %6 ]
%92 = add nuw nsw i64 %7, 1
%93 = add nuw nsw i32 %8, 1
%94 = icmp eq i64 %92, %5
br i1 %94, label %95, label %6
95: ; preds = %90, %1
%96 = phi i32 [ 42, %1 ], [ %91, %90 ]
%97 = tail call i32 @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 %96)
ret i64 0
}