#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 uint32_t;

/* Variables and functions */
const char *ext4_dmask_id2str(uint32_t m) {
  switch (m) {
  case (1ul << 0):
    return "ext4_balloc: ";
  case (1ul << 1):
    return "ext4_bcache: ";
  case (1ul << 2):
    return "ext4_bitmap: ";
  case (1ul << 3):
    return "ext4_block_group: ";
  case (1ul << 4):
    return "ext4_blockdev: ";
  case (1ul << 5):
    return "ext4_dir_idx: ";
  case (1ul << 6):
    return "ext4_dir: ";
  case (1ul << 7):
    return "ext4_extent: ";
  case (1ul << 8):
    return "ext4_fs: ";
  case (1ul << 9):
    return "ext4_hash: ";
  case (1ul << 10):
    return "ext4_ialloc: ";
  case (1ul << 11):
    return "ext4_inode: ";
  case (1ul << 12):
    return "ext4_super: ";
  case (1ul << 13):
    return "ext4_xattr: ";
  case (1ul << 14):
    return "ext4_mkfs: ";
  case (1ul << 16):
    return "ext4_jbd: ";
  case (1ul << 17):
    return "ext4_mbr: ";
  case (1ul << 15):
    return "ext4: ";
  }
  return "";
}


x86 assembly (clang, -O0):
<ext4_dmask_id2str>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x10(%rbp)
sub    $0x1,%eax
je     1252 <ext4_dmask_id2str+0x152>
jmp    111b <ext4_dmask_id2str+0x1b>
mov    -0x10(%rbp),%eax
sub    $0x2,%eax
je     1262 <ext4_dmask_id2str+0x162>
jmp    112c <ext4_dmask_id2str+0x2c>
mov    -0x10(%rbp),%eax
sub    $0x4,%eax
je     1272 <ext4_dmask_id2str+0x172>
jmp    113d <ext4_dmask_id2str+0x3d>
mov    -0x10(%rbp),%eax
sub    $0x8,%eax
je     1282 <ext4_dmask_id2str+0x182>
jmp    114e <ext4_dmask_id2str+0x4e>
mov    -0x10(%rbp),%eax
sub    $0x10,%eax
je     1292 <ext4_dmask_id2str+0x192>
jmp    115f <ext4_dmask_id2str+0x5f>
mov    -0x10(%rbp),%eax
sub    $0x20,%eax
je     12a2 <ext4_dmask_id2str+0x1a2>
jmp    1170 <ext4_dmask_id2str+0x70>
mov    -0x10(%rbp),%eax
sub    $0x40,%eax
je     12b2 <ext4_dmask_id2str+0x1b2>
jmp    1181 <ext4_dmask_id2str+0x81>
mov    -0x10(%rbp),%eax
sub    $0x80,%eax
je     12c2 <ext4_dmask_id2str+0x1c2>
jmp    1194 <ext4_dmask_id2str+0x94>
mov    -0x10(%rbp),%eax
sub    $0x100,%eax
je     12d2 <ext4_dmask_id2str+0x1d2>
jmp    11a7 <ext4_dmask_id2str+0xa7>
mov    -0x10(%rbp),%eax
sub    $0x200,%eax
je     12e2 <ext4_dmask_id2str+0x1e2>
jmp    11ba <ext4_dmask_id2str+0xba>
mov    -0x10(%rbp),%eax
sub    $0x400,%eax
je     12f2 <ext4_dmask_id2str+0x1f2>
jmp    11cd <ext4_dmask_id2str+0xcd>
mov    -0x10(%rbp),%eax
sub    $0x800,%eax
je     1302 <ext4_dmask_id2str+0x202>
jmp    11e0 <ext4_dmask_id2str+0xe0>
mov    -0x10(%rbp),%eax
sub    $0x1000,%eax
je     1312 <ext4_dmask_id2str+0x212>
jmp    11f3 <ext4_dmask_id2str+0xf3>
mov    -0x10(%rbp),%eax
sub    $0x2000,%eax
je     1322 <ext4_dmask_id2str+0x222>
jmp    1206 <ext4_dmask_id2str+0x106>
mov    -0x10(%rbp),%eax
sub    $0x4000,%eax
je     1332 <ext4_dmask_id2str+0x232>
jmp    1219 <ext4_dmask_id2str+0x119>
mov    -0x10(%rbp),%eax
sub    $0x8000,%eax
je     1362 <ext4_dmask_id2str+0x262>
jmp    122c <ext4_dmask_id2str+0x12c>
mov    -0x10(%rbp),%eax
sub    $0x10000,%eax
je     1342 <ext4_dmask_id2str+0x242>
jmp    123f <ext4_dmask_id2str+0x13f>
mov    -0x10(%rbp),%eax
sub    $0x20000,%eax
je     1352 <ext4_dmask_id2str+0x252>
jmp    1372 <ext4_dmask_id2str+0x272>
lea    0xda7(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xda5(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xda3(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xda1(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xda4(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xda4(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xda3(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xd9e(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xd9c(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xd96(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xd92(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xd90(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xd8d(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xd8a(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xd87(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xd83(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xd7e(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xd79(%rip),%rax
mov    %rax,-0x8(%rbp)
jmp    137d <ext4_dmask_id2str+0x27d>
lea    0xd6f(%rip),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<ext4_dmask_id2str>:
cmp    $0x1ff,%edi
jg     112f <ext4_dmask_id2str+0x2f>
lea    -0x1(%rdi),%ecx
cmp    $0x3f,%ecx
ja     118f <ext4_dmask_id2str+0x8f>
lea    0xfe9(%rip),%rax
lea    0xee2(%rip),%rdx
movslq (%rdx,%rcx,4),%rcx
add    %rdx,%rcx
jmp    *%rcx
lea    0xfe0(%rip),%rax
ret
cmp    $0x1fff,%edi
jle    116b <ext4_dmask_id2str+0x6b>
cmp    $0x7fff,%edi
jle    11ab <ext4_dmask_id2str+0xab>
cmp    $0x8000,%edi
je     120b <ext4_dmask_id2str+0x10b>
cmp    $0x10000,%edi
je     1213 <ext4_dmask_id2str+0x113>
cmp    $0x20000,%edi
jne    1203 <ext4_dmask_id2str+0x103>
lea    0x106d(%rip),%rax
ret
cmp    $0x7ff,%edi
jg     11c3 <ext4_dmask_id2str+0xc3>
cmp    $0x200,%edi
je     121b <ext4_dmask_id2str+0x11b>
cmp    $0x400,%edi
jne    1203 <ext4_dmask_id2str+0x103>
lea    0xffd(%rip),%rax
ret
cmp    $0x80,%edi
je     1223 <ext4_dmask_id2str+0x123>
cmp    $0x100,%edi
jne    1203 <ext4_dmask_id2str+0x103>
lea    0xfcb(%rip),%rax
ret
cmp    $0x2000,%edi
je     122b <ext4_dmask_id2str+0x12b>
cmp    $0x4000,%edi
jne    1203 <ext4_dmask_id2str+0x103>
lea    0xffe(%rip),%rax
ret
cmp    $0x800,%edi
je     1233 <ext4_dmask_id2str+0x133>
cmp    $0x1000,%edi
jne    1203 <ext4_dmask_id2str+0x103>
lea    0xfcc(%rip),%rax
ret
lea    0xf3a(%rip),%rax
ret
lea    0xf40(%rip),%rax
ret
lea    0xf4b(%rip),%rax
ret
lea    0xf53(%rip),%rax
ret
lea    0xf5a(%rip),%rax
ret
lea    0xfde(%rip),%rax
ret
lea    0xfd0(%rip),%rax
ret
lea    0xfb2(%rip),%rax
ret
lea    0xf5d(%rip),%rax
ret
lea    0xf3d(%rip),%rax
ret
lea    0xf81(%rip),%rax
ret
lea    0xf5f(%rip),%rax
ret

LLVM IR (-O0):
@.str = [14 x i8] c"ext4_balloc: \00"
@.str.1 = [14 x i8] c"ext4_bcache: \00"
@.str.2 = [14 x i8] c"ext4_bitmap: \00"
@.str.3 = [19 x i8] c"ext4_block_group: \00"
@.str.4 = [16 x i8] c"ext4_blockdev: \00"
@.str.5 = [15 x i8] c"ext4_dir_idx: \00"
@.str.6 = [11 x i8] c"ext4_dir: \00"
@.str.7 = [14 x i8] c"ext4_extent: \00"
@.str.8 = [10 x i8] c"ext4_fs: \00"
@.str.9 = [12 x i8] c"ext4_hash: \00"
@.str.10 = [14 x i8] c"ext4_ialloc: \00"
@.str.11 = [13 x i8] c"ext4_inode: \00"
@.str.12 = [13 x i8] c"ext4_super: \00"
@.str.13 = [13 x i8] c"ext4_xattr: \00"
@.str.14 = [12 x i8] c"ext4_mkfs: \00"
@.str.15 = [11 x i8] c"ext4_jbd: \00"
@.str.16 = [11 x i8] c"ext4_mbr: \00"
@.str.17 = [7 x i8] c"ext4: \00"
@.str.18 = [1 x i8] zeroinitializer
define i8* @ext4_dmask_id2str(i32 %0) {
%2 = alloca i8*
%3 = alloca i32
store i32 %0, i32* %3
%4 = load i32, i32* %3
switch i32 %4, label %23 [
i32 1, label %5
i32 2, label %6
i32 4, label %7
i32 8, label %8
i32 16, label %9
i32 32, label %10
i32 64, label %11
i32 128, label %12
i32 256, label %13
i32 512, label %14
i32 1024, label %15
i32 2048, label %16
i32 4096, label %17
i32 8192, label %18
i32 16384, label %19
i32 65536, label %20
i32 131072, label %21
i32 32768, label %22
]
5: ; preds = %1
store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str, i64 0, i64 0), i8** %2
br label %24
6: ; preds = %1
store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8** %2
br label %24
7: ; preds = %1
store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.2, i64 0, i64 0), i8** %2
br label %24
8: ; preds = %1
store i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.3, i64 0, i64 0), i8** %2
br label %24
9: ; preds = %1
store i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.4, i64 0, i64 0), i8** %2
br label %24
10: ; preds = %1
store i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.5, i64 0, i64 0), i8** %2
br label %24
11: ; preds = %1
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.6, i64 0, i64 0), i8** %2
br label %24
12: ; preds = %1
store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.7, i64 0, i64 0), i8** %2
br label %24
13: ; preds = %1
store i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.8, i64 0, i64 0), i8** %2
br label %24
14: ; preds = %1
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0), i8** %2
br label %24
15: ; preds = %1
store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.10, i64 0, i64 0), i8** %2
br label %24
16: ; preds = %1
store i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i64 0, i64 0), i8** %2
br label %24
17: ; preds = %1
store i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i64 0, i64 0), i8** %2
br label %24
18: ; preds = %1
store i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.13, i64 0, i64 0), i8** %2
br label %24
19: ; preds = %1
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.14, i64 0, i64 0), i8** %2
br label %24
20: ; preds = %1
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.15, i64 0, i64 0), i8** %2
br label %24
21: ; preds = %1
store i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.16, i64 0, i64 0), i8** %2
br label %24
22: ; preds = %1
store i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.17, i64 0, i64 0), i8** %2
br label %24
23: ; preds = %1
store i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.18, i64 0, i64 0), i8** %2
br label %24
24: ; preds = %23, %22, %21, %20, %19, %18, %17, %16, %15, %14, %13, %12, %11, %10, %9, %8, %7, %6, %5
%25 = load i8*, i8** %2
ret i8* %25
}

LLVM IR (-O2):
@.str = [14 x i8] c"ext4_balloc: \00"
@.str.1 = [14 x i8] c"ext4_bcache: \00"
@.str.2 = [14 x i8] c"ext4_bitmap: \00"
@.str.3 = [19 x i8] c"ext4_block_group: \00"
@.str.4 = [16 x i8] c"ext4_blockdev: \00"
@.str.5 = [15 x i8] c"ext4_dir_idx: \00"
@.str.6 = [11 x i8] c"ext4_dir: \00"
@.str.7 = [14 x i8] c"ext4_extent: \00"
@.str.8 = [10 x i8] c"ext4_fs: \00"
@.str.9 = [12 x i8] c"ext4_hash: \00"
@.str.10 = [14 x i8] c"ext4_ialloc: \00"
@.str.11 = [13 x i8] c"ext4_inode: \00"
@.str.12 = [13 x i8] c"ext4_super: \00"
@.str.13 = [13 x i8] c"ext4_xattr: \00"
@.str.14 = [12 x i8] c"ext4_mkfs: \00"
@.str.15 = [11 x i8] c"ext4_jbd: \00"
@.str.16 = [11 x i8] c"ext4_mbr: \00"
@.str.17 = [7 x i8] c"ext4: \00"
@.str.18 = [1 x i8] zeroinitializer
define i8* @ext4_dmask_id2str(i32 %0) {
switch i32 %0, label %19 [
i32 1, label %20
i32 2, label %2
i32 4, label %3
i32 8, label %4
i32 16, label %5
i32 32, label %6
i32 64, label %7
i32 128, label %8
i32 256, label %9
i32 512, label %10
i32 1024, label %11
i32 2048, label %12
i32 4096, label %13
i32 8192, label %14
i32 16384, label %15
i32 65536, label %16
i32 131072, label %17
i32 32768, label %18
]
2: ; preds = %1
br label %20
3: ; preds = %1
br label %20
4: ; preds = %1
br label %20
5: ; preds = %1
br label %20
6: ; preds = %1
br label %20
7: ; preds = %1
br label %20
8: ; preds = %1
br label %20
9: ; preds = %1
br label %20
10: ; preds = %1
br label %20
11: ; preds = %1
br label %20
12: ; preds = %1
br label %20
13: ; preds = %1
br label %20
14: ; preds = %1
br label %20
15: ; preds = %1
br label %20
16: ; preds = %1
br label %20
17: ; preds = %1
br label %20
18: ; preds = %1
br label %20
19: ; preds = %1
br label %20
20: ; preds = %1, %19, %18, %17, %16, %15, %14, %13, %12, %11, %10, %9, %8, %7, %6, %5, %4, %3, %2
%21 = phi i8* [ getelementptr inbounds ([1 x i8], [1 x i8]* @.str.18, i64 0, i64 0), %19 ], [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.17, i64 0, i64 0), %18 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.16, i64 0, i64 0), %17 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.15, i64 0, i64 0), %16 ], [ getelementptr inbounds ([12 x i8], [12 x i8]* @.str.14, i64 0, i64 0), %15 ], [ getelementptr inbounds ([13 x i8], [13 x i8]* @.str.13, i64 0, i64 0), %14 ], [ getelementptr inbounds ([13 x i8], [13 x i8]* @.str.12, i64 0, i64 0), %13 ], [ getelementptr inbounds ([13 x i8], [13 x i8]* @.str.11, i64 0, i64 0), %12 ], [ getelementptr inbounds ([14 x i8], [14 x i8]* @.str.10, i64 0, i64 0), %11 ], [ getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i64 0, i64 0), %10 ], [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.8, i64 0, i64 0), %9 ], [ getelementptr inbounds ([14 x i8], [14 x i8]* @.str.7, i64 0, i64 0), %8 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.6, i64 0, i64 0), %7 ], [ getelementptr inbounds ([15 x i8], [15 x i8]* @.str.5, i64 0, i64 0), %6 ], [ getelementptr inbounds ([16 x i8], [16 x i8]* @.str.4, i64 0, i64 0), %5 ], [ getelementptr inbounds ([19 x i8], [19 x i8]* @.str.3, i64 0, i64 0), %4 ], [ getelementptr inbounds ([14 x i8], [14 x i8]* @.str.2, i64 0, i64 0), %3 ], [ getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), %2 ], [ getelementptr inbounds ([14 x i8], [14 x i8]* @.str, i64 0, i64 0), %1 ]
ret i8* %21
}