unsigned int grib_accessor_classes_get_id(str, len)
register const char *str;
register unsigned int len;
{
  static unsigned short asso_values[] = {
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 0,   35,  10,  350, 3,   7,   350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 46,  350, 0,   91,  74,  37,  0,   64,  147, 110,
      29,  350, 2,   79,  74,  21,  1,   34,  350, 10,  42,  2,   94,  102, 350,
      9,   0,   0,   350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350, 350,
      350};
  register int hval = len;
  switch (hval) {
  default:
    hval += asso_values[(unsigned char)str[10]];
  case 10:
  case 9:
  case 8:
  case 7:
    hval += asso_values[(unsigned char)str[6]];
  case 6:
  case 5:
  case 4:
  case 3:
    hval += asso_values[(unsigned char)str[2]];
  case 2:
    hval += asso_values[(unsigned char)str[1]];
    break;
  }
  return hval;
}


x86 assembly (clang, -O0):
<grib_accessor_classes_get_id>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x14(%rbp)
sub    $0x2,%eax
je     119e <grib_accessor_classes_get_id+0x9e>
jmp    1125 <grib_accessor_classes_get_id+0x25>
mov    -0x14(%rbp),%eax
add    $0xfffffffd,%eax
sub    $0x4,%eax
jb     1183 <grib_accessor_classes_get_id+0x83>
jmp    1139 <grib_accessor_classes_get_id+0x39>
mov    -0x14(%rbp),%eax
add    $0xfffffff9,%eax
sub    $0x4,%eax
jb     1168 <grib_accessor_classes_get_id+0x68>
jmp    114d <grib_accessor_classes_get_id+0x4d>
mov    -0x8(%rbp),%rax
movzbl 0xa(%rax),%eax
mov    %eax,%ecx
lea    0x2ed2(%rip),%rax
movzwl (%rax,%rcx,2),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x6(%rax),%eax
mov    %eax,%ecx
lea    0x2eb7(%rip),%rax
movzwl (%rax,%rcx,2),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x2(%rax),%eax
mov    %eax,%ecx
lea    0x2e9c(%rip),%rax
movzwl (%rax,%rcx,2),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x8(%rbp),%rax
movzbl 0x1(%rax),%eax
mov    %eax,%ecx
lea    0x2e81(%rip),%rax
movzwl (%rax,%rcx,2),%eax
add    -0x10(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<grib_accessor_classes_get_id>:
lea    -0x3(%rsi),%eax
cmp    $0x4,%eax
jb     113b <grib_accessor_classes_get_id+0x3b>
lea    -0x7(%rsi),%eax
cmp    $0x4,%eax
jb     1128 <grib_accessor_classes_get_id+0x28>
cmp    $0x2,%esi
je     114e <grib_accessor_classes_get_id+0x4e>
movzbl 0xa(%rdi),%eax
lea    0xee0(%rip),%rcx
movzwl (%rcx,%rax,2),%eax
add    %esi,%eax
mov    %eax,%esi
movzbl 0x6(%rdi),%eax
lea    0xecd(%rip),%rcx
movzwl (%rcx,%rax,2),%eax
add    %esi,%eax
mov    %eax,%esi
movzbl 0x2(%rdi),%eax
lea    0xeba(%rip),%rcx
movzwl (%rcx,%rax,2),%eax
add    %esi,%eax
mov    %eax,%esi
movzbl 0x1(%rdi),%eax
lea    0xea7(%rip),%rcx
movzwl (%rcx,%rax,2),%eax
add    %esi,%eax
ret

LLVM IR (-O0):
@grib_accessor_classes_get_id.asso_values = internal global [256 x i16] [i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 0, i16 35, i16 10, i16 350, i16 3, i16 7, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 46, i16 350, i16 0, i16 91, i16 74, i16 37, i16 0, i16 64, i16 147, i16 110, i16 29, i16 350, i16 2, i16 79, i16 74, i16 21, i16 1, i16 34, i16 350, i16 10, i16 42, i16 2, i16 94, i16 102, i16 350, i16 9, i16 0, i16 0, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350]
define i32 @grib_accessor_classes_get_id(i8* %0, i32 %1) {
%3 = alloca i8*
%4 = alloca i32
%5 = alloca i32
store i8* %0, i8** %3
store i32 %1, i32* %4
%6 = load i32, i32* %4
store i32 %6, i32* %5
%7 = load i32, i32* %5
switch i32 %7, label %8 [
i32 10, label %18
i32 9, label %18
i32 8, label %18
i32 7, label %18
i32 6, label %28
i32 5, label %28
i32 4, label %28
i32 3, label %28
i32 2, label %38
]
8: ; preds = %2
%9 = load i8*, i8** %3
%10 = getelementptr inbounds i8, i8* %9, i64 10
%11 = load i8, i8* %10
%12 = zext i8 %11 to i64
%13 = getelementptr inbounds [256 x i16], [256 x i16]* @grib_accessor_classes_get_id.asso_values, i64 0, i64 %12
%14 = load i16, i16* %13
%15 = zext i16 %14 to i32
%16 = load i32, i32* %5
%17 = add nsw i32 %16, %15
store i32 %17, i32* %5
br label %18
18: ; preds = %2, %2, %2, %2, %8
%19 = load i8*, i8** %3
%20 = getelementptr inbounds i8, i8* %19, i64 6
%21 = load i8, i8* %20
%22 = zext i8 %21 to i64
%23 = getelementptr inbounds [256 x i16], [256 x i16]* @grib_accessor_classes_get_id.asso_values, i64 0, i64 %22
%24 = load i16, i16* %23
%25 = zext i16 %24 to i32
%26 = load i32, i32* %5
%27 = add nsw i32 %26, %25
store i32 %27, i32* %5
br label %28
28: ; preds = %2, %2, %2, %2, %18
%29 = load i8*, i8** %3
%30 = getelementptr inbounds i8, i8* %29, i64 2
%31 = load i8, i8* %30
%32 = zext i8 %31 to i64
%33 = getelementptr inbounds [256 x i16], [256 x i16]* @grib_accessor_classes_get_id.asso_values, i64 0, i64 %32
%34 = load i16, i16* %33
%35 = zext i16 %34 to i32
%36 = load i32, i32* %5
%37 = add nsw i32 %36, %35
store i32 %37, i32* %5
br label %38
38: ; preds = %2, %28
%39 = load i8*, i8** %3
%40 = getelementptr inbounds i8, i8* %39, i64 1
%41 = load i8, i8* %40
%42 = zext i8 %41 to i64
%43 = getelementptr inbounds [256 x i16], [256 x i16]* @grib_accessor_classes_get_id.asso_values, i64 0, i64 %42
%44 = load i16, i16* %43
%45 = zext i16 %44 to i32
%46 = load i32, i32* %5
%47 = add nsw i32 %46, %45
store i32 %47, i32* %5
br label %48
48: ; preds = %38
%49 = load i32, i32* %5
ret i32 %49
}

LLVM IR (-O2):
@grib_accessor_classes_get_id.asso_values = internal unnamed_addr constant [256 x i16] [i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 0, i16 35, i16 10, i16 350, i16 3, i16 7, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 46, i16 350, i16 0, i16 91, i16 74, i16 37, i16 0, i16 64, i16 147, i16 110, i16 29, i16 350, i16 2, i16 79, i16 74, i16 21, i16 1, i16 34, i16 350, i16 10, i16 42, i16 2, i16 94, i16 102, i16 350, i16 9, i16 0, i16 0, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350, i16 350]
define i32 @grib_accessor_classes_get_id(i8* nocapture %0, i32 %1) {
switch i32 %1, label %3 [
i32 10, label %11
i32 9, label %11
i32 8, label %11
i32 7, label %11
i32 6, label %20
i32 5, label %20
i32 4, label %20
i32 3, label %20
i32 2, label %29
]
3: ; preds = %2
%4 = getelementptr inbounds i8, i8* %0, i64 10
%5 = load i8, i8* %4
%6 = zext i8 %5 to i64
%7 = getelementptr inbounds [256 x i16], [256 x i16]* @grib_accessor_classes_get_id.asso_values, i64 0, i64 %6
%8 = load i16, i16* %7
%9 = zext i16 %8 to i32
%10 = add nsw i32 %9, %1
br label %11
11: ; preds = %2, %2, %2, %2, %3
%12 = phi i32 [ %10, %3 ], [ %1, %2 ], [ %1, %2 ], [ %1, %2 ], [ %1, %2 ]
%13 = getelementptr inbounds i8, i8* %0, i64 6
%14 = load i8, i8* %13
%15 = zext i8 %14 to i64
%16 = getelementptr inbounds [256 x i16], [256 x i16]* @grib_accessor_classes_get_id.asso_values, i64 0, i64 %15
%17 = load i16, i16* %16
%18 = zext i16 %17 to i32
%19 = add nsw i32 %12, %18
br label %20
20: ; preds = %2, %2, %2, %2, %11
%21 = phi i32 [ %19, %11 ], [ %1, %2 ], [ %1, %2 ], [ %1, %2 ], [ %1, %2 ]
%22 = getelementptr inbounds i8, i8* %0, i64 2
%23 = load i8, i8* %22
%24 = zext i8 %23 to i64
%25 = getelementptr inbounds [256 x i16], [256 x i16]* @grib_accessor_classes_get_id.asso_values, i64 0, i64 %24
%26 = load i16, i16* %25
%27 = zext i16 %26 to i32
%28 = add nsw i32 %21, %27
br label %29
29: ; preds = %2, %20
%30 = phi i32 [ %28, %20 ], [ %1, %2 ]
%31 = getelementptr inbounds i8, i8* %0, i64 1
%32 = load i8, i8* %31
%33 = zext i8 %32 to i64
%34 = getelementptr inbounds [256 x i16], [256 x i16]* @grib_accessor_classes_get_id.asso_values, i64 0, i64 %33
%35 = load i16, i16* %34
%36 = zext i16 %35 to i32
%37 = add nsw i32 %30, %36
ret i32 %37
}