#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 */
typedef int uint16_t;

/* Variables and functions */
size_t tifsizeof(uint16_t t) {
  switch (t) {
  case 1:
    return 1;
  case 2:
    return 1;
  case 3:
    return 2;
  case 4:
    return 4;
  case 5:
    return 8;
  case 6:
    return 1;
  case 7:
    return 1;
  case 8:
    return 2;
  case 9:
    return 4;
  case 10:
    return 8;
  case 11:
    return 4;
  case 12:
    return 8;
  case 16:
    return 8;
  case 17:
    return 8;
  case 18:
    return 8;
  }
  return 0;
}


x86 assembly (clang, -O0):
<tifsizeof>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0xc(%rbp)
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0x11,%eax
ja     11f3 <tifsizeof+0xf3>
mov    -0x18(%rbp),%rax
lea    0xed9(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movq   $0x1,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x1,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x2,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x4,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x8,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x1,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x1,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x2,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x4,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x8,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x4,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x8,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x8,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x8,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x8,-0x8(%rbp)
jmp    11fb <tifsizeof+0xfb>
movq   $0x0,-0x8(%rbp)
mov    -0x8(%rbp),%rax
pop    %rbp
ret

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

LLVM IR (-O0):
define i64 @tifsizeof(i32 %0) {
%2 = alloca i64
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
switch i32 %4, label %20 [
i32 1, label %5
i32 2, label %6
i32 3, label %7
i32 4, label %8
i32 5, label %9
i32 6, label %10
i32 7, label %11
i32 8, label %12
i32 9, label %13
i32 10, label %14
i32 11, label %15
i32 12, label %16
i32 16, label %17
i32 17, label %18
i32 18, label %19
]
5: ; preds = %1
store i64 1, i64* %2
br label %21
6: ; preds = %1
store i64 1, i64* %2
br label %21
7: ; preds = %1
store i64 2, i64* %2
br label %21
8: ; preds = %1
store i64 4, i64* %2
br label %21
9: ; preds = %1
store i64 8, i64* %2
br label %21
10: ; preds = %1
store i64 1, i64* %2
br label %21
11: ; preds = %1
store i64 1, i64* %2
br label %21
12: ; preds = %1
store i64 2, i64* %2
br label %21
13: ; preds = %1
store i64 4, i64* %2
br label %21
14: ; preds = %1
store i64 8, i64* %2
br label %21
15: ; preds = %1
store i64 4, i64* %2
br label %21
16: ; preds = %1
store i64 8, i64* %2
br label %21
17: ; preds = %1
store i64 8, i64* %2
br label %21
18: ; preds = %1
store i64 8, i64* %2
br label %21
19: ; preds = %1
store i64 8, i64* %2
br label %21
20: ; preds = %1
store i64 0, i64* %2
br label %21
21: ; preds = %20, %19, %18, %17, %16, %15, %14, %13, %12, %11, %10, %9, %8, %7, %6, %5
%22 = load i64, i64* %2
ret i64 %22
}

LLVM IR (-O2):
@switch.table.tifsizeof = [18 x i64] [i64 1, i64 1, i64 2, i64 4, i64 8, i64 1, i64 1, i64 2, i64 4, i64 8, i64 4, i64 8, i64 0, i64 0, i64 0, i64 8, i64 8, i64 8]
define i64 @tifsizeof(i32 %0) {
%2 = add i32 %0, -1
%3 = icmp ult i32 %2, 18
br i1 %3, label %4, label %8
4: ; preds = %1
%5 = sext i32 %2 to i64
%6 = getelementptr inbounds [18 x i64], [18 x i64]* @switch.table.tifsizeof, 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
}