#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 */
size_t macro2len(int macro) {
  switch (macro) {
  case 14:
    return 12;
  case 53:
    return 12;
  case 15:
    return 12;
  case 54:
    return 12;
  case 16:
    return 12;
  case 58:
    return 12;
  case 59:
    return 12;
  case 17:
    return 12;
  case 18:
    return 10;
  case 64:
    return 10;
  case 65:
    return 12;
  case 19:
    return 12;
  case 69:
    return 12;
  case 68:
    return 10;
  case 20:
    return 17;
  case 21:
    return 15;
  case 23:
    return 12;
  case 25:
    return 10;
  case 96:
    return 16;
  case 26:
    return 16;
  case 28:
    return 10;
  case 30:
    return 16;
  case 71:
    return 6;
  case 32:
    return 10;
  case 72:
    return 12;
  case 98:
    return 10;
  case 33:
    return 14;
  case 35:
    return 32;
  case 77:
    return 12;
  case 78:
    return 12;
  case 79:
    return 12;
  case 81:
    return 16;
  case 82:
    return 12;
  case 87:
    return 12;
  case 88:
    return 12;
  case 91:
    return 6;
  case 90:
    return 16;
  case 92:
    return 10;
  case 38:
    return 12;
  case 39:
    return 12;
  case 40:
    return 10;
  default:
    break;
  };
  return 0;
}


x86 assembly (clang, -O0):
<macro2len>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0xc(%rbp)
mov    -0xc(%rbp),%eax
add    $0xfffffff2,%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0x54,%eax
ja     1345 <macro2len+0x245>
mov    -0x18(%rbp),%rax
lea    0xed9(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xa,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xa,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xa,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0x11,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xf,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xa,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0x10,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0x10,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xa,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0x10,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0x6,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xa,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xa,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xe,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0x20,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0x10,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0x6,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0x10,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xa,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xc,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
movq   $0xa,-0x8(%rbp)
jmp    1352 <macro2len+0x252>
jmp    134a <macro2len+0x24a>
movq   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<macro2len>:
add    $0xfffffff2,%edi
cmp    $0x54,%edi
ja     1117 <macro2len+0x17>
movslq %edi,%rax
lea    0xeee(%rip),%rcx
mov    (%rcx,%rax,8),%rax
ret
xor    %eax,%eax
ret

LLVM IR (-O0):
define i64 @macro2len(i32 %0) {
%2 = alloca i64
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
switch i32 %4, label %46 [
i32 14, label %5
i32 53, label %6
i32 15, label %7
i32 54, label %8
i32 16, label %9
i32 58, label %10
i32 59, label %11
i32 17, label %12
i32 18, label %13
i32 64, label %14
i32 65, label %15
i32 19, label %16
i32 69, label %17
i32 68, label %18
i32 20, label %19
i32 21, label %20
i32 23, label %21
i32 25, label %22
i32 96, label %23
i32 26, label %24
i32 28, label %25
i32 30, label %26
i32 71, label %27
i32 32, label %28
i32 72, label %29
i32 98, label %30
i32 33, label %31
i32 35, label %32
i32 77, label %33
i32 78, label %34
i32 79, label %35
i32 81, label %36
i32 82, label %37
i32 87, label %38
i32 88, label %39
i32 91, label %40
i32 90, label %41
i32 92, label %42
i32 38, label %43
i32 39, label %44
i32 40, label %45
]
5: ; preds = %1
store i64 12, i64* %2
br label %48
6: ; preds = %1
store i64 12, i64* %2
br label %48
7: ; preds = %1
store i64 12, i64* %2
br label %48
8: ; preds = %1
store i64 12, i64* %2
br label %48
9: ; preds = %1
store i64 12, i64* %2
br label %48
10: ; preds = %1
store i64 12, i64* %2
br label %48
11: ; preds = %1
store i64 12, i64* %2
br label %48
12: ; preds = %1
store i64 12, i64* %2
br label %48
13: ; preds = %1
store i64 10, i64* %2
br label %48
14: ; preds = %1
store i64 10, i64* %2
br label %48
15: ; preds = %1
store i64 12, i64* %2
br label %48
16: ; preds = %1
store i64 12, i64* %2
br label %48
17: ; preds = %1
store i64 12, i64* %2
br label %48
18: ; preds = %1
store i64 10, i64* %2
br label %48
19: ; preds = %1
store i64 17, i64* %2
br label %48
20: ; preds = %1
store i64 15, i64* %2
br label %48
21: ; preds = %1
store i64 12, i64* %2
br label %48
22: ; preds = %1
store i64 10, i64* %2
br label %48
23: ; preds = %1
store i64 16, i64* %2
br label %48
24: ; preds = %1
store i64 16, i64* %2
br label %48
25: ; preds = %1
store i64 10, i64* %2
br label %48
26: ; preds = %1
store i64 16, i64* %2
br label %48
27: ; preds = %1
store i64 6, i64* %2
br label %48
28: ; preds = %1
store i64 10, i64* %2
br label %48
29: ; preds = %1
store i64 12, i64* %2
br label %48
30: ; preds = %1
store i64 10, i64* %2
br label %48
31: ; preds = %1
store i64 14, i64* %2
br label %48
32: ; preds = %1
store i64 32, i64* %2
br label %48
33: ; preds = %1
store i64 12, i64* %2
br label %48
34: ; preds = %1
store i64 12, i64* %2
br label %48
35: ; preds = %1
store i64 12, i64* %2
br label %48
36: ; preds = %1
store i64 16, i64* %2
br label %48
37: ; preds = %1
store i64 12, i64* %2
br label %48
38: ; preds = %1
store i64 12, i64* %2
br label %48
39: ; preds = %1
store i64 12, i64* %2
br label %48
40: ; preds = %1
store i64 6, i64* %2
br label %48
41: ; preds = %1
store i64 16, i64* %2
br label %48
42: ; preds = %1
store i64 10, i64* %2
br label %48
43: ; preds = %1
store i64 12, i64* %2
br label %48
44: ; preds = %1
store i64 12, i64* %2
br label %48
45: ; preds = %1
store i64 10, i64* %2
br label %48
46: ; preds = %1
br label %47
47: ; preds = %46
store i64 0, i64* %2
br label %48
48: ; preds = %47, %45, %44, %43, %42, %41, %40, %39, %38, %37, %36, %35, %34, %33, %32, %31, %30, %29, %28, %27, %26, %25, %24, %23, %22, %21, %20, %19, %18, %17, %16, %15, %14, %13, %12, %11, %10, %9, %8, %7, %6, %5
%49 = load i64, i64* %2
ret i64 %49
}

LLVM IR (-O2):
@switch.table.macro2len = [85 x i64] [i64 12, i64 12, i64 12, i64 12, i64 10, i64 12, i64 17, i64 15, i64 0, i64 12, i64 0, i64 10, i64 16, i64 0, i64 10, i64 0, i64 16, i64 0, i64 10, i64 14, i64 0, i64 32, i64 0, i64 0, i64 12, i64 12, i64 10, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 0, i64 12, i64 12, i64 0, i64 0, i64 0, i64 12, i64 12, i64 0, i64 0, i64 0, i64 0, i64 10, i64 12, i64 0, i64 0, i64 10, i64 12, i64 0, i64 6, i64 12, i64 0, i64 0, i64 0, i64 0, i64 12, i64 12, i64 12, i64 0, i64 16, i64 12, i64 0, i64 0, i64 0, i64 0, i64 12, i64 12, i64 0, i64 16, i64 6, i64 10, i64 0, i64 0, i64 0, i64 16, i64 0, i64 10]
define i64 @macro2len(i32 %0) {
%2 = add i32 %0, -14
%3 = icmp ult i32 %2, 85
br i1 %3, label %4, label %8
4: ; preds = %1
%5 = sext i32 %2 to i64
%6 = getelementptr inbounds [85 x i64], [85 x i64]* @switch.table.macro2len, i64 0, i64 %5
%7 = load i64, i64* %6
br label %8
8: ; preds = %1, %4
%9 = phi i64 [ %7, %4 ], [ 0, %1 ]
ret i64 %9
}