char *d9_name(int x) {
  int d9[64] = {7, 8, 9, 10, 11, 12, 13, 14, 6, 7, 8, 9, 10, 11, 12, 13,
                5, 6, 7, 8,  9,  10, 11, 12, 4, 5, 6, 7, 8,  9,  10, 11,
                3, 4, 5, 6,  7,  8,  9,  10, 2, 3, 4, 5, 6,  7,  8,  9,
                1, 2, 3, 4,  5,  6,  7,  8,  0, 1, 2, 3, 4,  5,  6,  7};
  static char s[15][5] = {"",     "",     "B7B7", "B6C7", "B5D7",
                          "B4E7", "B3F7", "B2G7", "C2G6", "D2G5",
                          "E2G4", "F2G3", "G2G2", "",     ""};
  return s[d9[x]];
}


x86 assembly (clang, -O0):
<d9_name>:
push   %rbp
mov    %rsp,%rbp
sub    $0x110,%rsp
mov    %edi,-0x4(%rbp)
lea    -0x110(%rbp),%rdi
lea    0xed4(%rip),%rsi
mov    $0x100,%edx
call   1030 <memcpy@plt>
movslq -0x4(%rbp),%rax
movslq -0x110(%rbp,%rax,4),%rcx
ff
lea    0x2ee7(%rip),%rax
imul   $0x5,%rcx,%rcx
add    %rcx,%rax
add    $0x110,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<d9_name>:
movslq %edi,%rax
lea    0xef6(%rip),%rcx
movslq (%rcx,%rax,4),%rax
lea    (%rax,%rax,4),%rcx
lea    0x2f17(%rip),%rax
add    %rcx,%rax
ret

LLVM IR (-O0):
@__const.d9_name.d9 = [64 x i32] [i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7]
@d9_name.s = internal global [15 x [5 x i8]] [[5 x i8] zeroinitializer, [5 x i8] zeroinitializer, [5 x i8] c"B7B7\00", [5 x i8] c"B6C7\00", [5 x i8] c"B5D7\00", [5 x i8] c"B4E7\00", [5 x i8] c"B3F7\00", [5 x i8] c"B2G7\00", [5 x i8] c"C2G6\00", [5 x i8] c"D2G5\00", [5 x i8] c"E2G4\00", [5 x i8] c"F2G3\00", [5 x i8] c"G2G2\00", [5 x i8] zeroinitializer, [5 x i8] zeroinitializer]
define i8* @d9_name(i32 %0) {
%2 = alloca i32
%3 = alloca [64 x i32]
store i32 %0, i32* %2
%4 = bitcast [64 x i32]* %3 to i8*
%5 = load i32, i32* %2
%6 = sext i32 %5 to i64
%7 = getelementptr inbounds [64 x i32], [64 x i32]* %3, i64 0, i64 %6
%8 = load i32, i32* %7
%9 = sext i32 %8 to i64
%10 = getelementptr inbounds [15 x [5 x i8]], [15 x [5 x i8]]* @d9_name.s, i64 0, i64 %9
%11 = getelementptr inbounds [5 x i8], [5 x i8]* %10, i64 0, i64 0
ret i8* %11
}

LLVM IR (-O2):
@__const.d9_name.d9 = [64 x i32] [i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7]
@d9_name.s = internal global [15 x [5 x i8]] [[5 x i8] zeroinitializer, [5 x i8] zeroinitializer, [5 x i8] c"B7B7\00", [5 x i8] c"B6C7\00", [5 x i8] c"B5D7\00", [5 x i8] c"B4E7\00", [5 x i8] c"B3F7\00", [5 x i8] c"B2G7\00", [5 x i8] c"C2G6\00", [5 x i8] c"D2G5\00", [5 x i8] c"E2G4\00", [5 x i8] c"F2G3\00", [5 x i8] c"G2G2\00", [5 x i8] zeroinitializer, [5 x i8] zeroinitializer]
define i8* @d9_name(i32 %0) {
%2 = sext i32 %0 to i64
%3 = getelementptr inbounds [64 x i32], [64 x i32]* @__const.d9_name.d9, i64 0, i64 %2
%4 = load i32, i32* %3
%5 = sext i32 %4 to i64
%6 = getelementptr inbounds [15 x [5 x i8]], [15 x [5 x i8]]* @d9_name.s, i64 0, i64 %5, i64 0
ret i8* %6
}