char get_grint_char(int g) {
  char c;
  if (g == 0)
    c = '0';
  else if (g == 1)
    c = '1';
  else if (g == 2)
    c = '2';
  else if (g == 3)
    c = '3';
  else if (g == 4)
    c = '4';
  else if (g == 5)
    c = '5';
  else if (g == 6)
    c = '6';
  else if (g == 7)
    c = '7';
  else if (g == 8)
    c = '8';
  else if (g == 9)
    c = '9';
  else if (g == 10)
    c = ':';
  else if (g == 11)
    c = ';';
  else if (g == 12)
    c = '<';
  else if (g == 13)
    c = '=';
  else if (g == 14)
    c = '>';
  else if (g == 15)
    c = '?';
  else if (g == 16)
    c = '@';
  else if (g == 17)
    c = 'A';
  else if (g == 18)
    c = 'B';
  else if (g == 19)
    c = 'C';
  else if (g == 20)
    c = 'D';
  else if (g == 21)
    c = 'E';
  else if (g == 22)
    c = 'F';
  else if (g == 23)
    c = 'G';
  else if (g == 24)
    c = 'H';
  else if (g == 25)
    c = 'I';
  else if (g == 26)
    c = 'J';
  else
    c = 'u';
  return c;
}


x86 assembly (clang, -O0):
<get_grint_char>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
cmpl   $0x0,-0x4(%rbp)
jne    111a <get_grint_char+0x1a>
movb   $0x30,-0x5(%rbp)
jmp    138e <get_grint_char+0x28e>
cmpl   $0x1,-0x4(%rbp)
jne    112d <get_grint_char+0x2d>
movb   $0x31,-0x5(%rbp)
jmp    1389 <get_grint_char+0x289>
cmpl   $0x2,-0x4(%rbp)
jne    1140 <get_grint_char+0x40>
movb   $0x32,-0x5(%rbp)
jmp    1384 <get_grint_char+0x284>
cmpl   $0x3,-0x4(%rbp)
jne    1153 <get_grint_char+0x53>
movb   $0x33,-0x5(%rbp)
jmp    137f <get_grint_char+0x27f>
cmpl   $0x4,-0x4(%rbp)
jne    1166 <get_grint_char+0x66>
movb   $0x34,-0x5(%rbp)
jmp    137a <get_grint_char+0x27a>
cmpl   $0x5,-0x4(%rbp)
jne    1179 <get_grint_char+0x79>
movb   $0x35,-0x5(%rbp)
jmp    1375 <get_grint_char+0x275>
cmpl   $0x6,-0x4(%rbp)
jne    118c <get_grint_char+0x8c>
movb   $0x36,-0x5(%rbp)
jmp    1370 <get_grint_char+0x270>
cmpl   $0x7,-0x4(%rbp)
jne    119f <get_grint_char+0x9f>
movb   $0x37,-0x5(%rbp)
jmp    136b <get_grint_char+0x26b>
cmpl   $0x8,-0x4(%rbp)
jne    11b2 <get_grint_char+0xb2>
movb   $0x38,-0x5(%rbp)
jmp    1366 <get_grint_char+0x266>
cmpl   $0x9,-0x4(%rbp)
jne    11c5 <get_grint_char+0xc5>
movb   $0x39,-0x5(%rbp)
jmp    1361 <get_grint_char+0x261>
cmpl   $0xa,-0x4(%rbp)
jne    11d8 <get_grint_char+0xd8>
movb   $0x3a,-0x5(%rbp)
jmp    135c <get_grint_char+0x25c>
cmpl   $0xb,-0x4(%rbp)
jne    11eb <get_grint_char+0xeb>
movb   $0x3b,-0x5(%rbp)
jmp    1357 <get_grint_char+0x257>
cmpl   $0xc,-0x4(%rbp)
jne    11fe <get_grint_char+0xfe>
movb   $0x3c,-0x5(%rbp)
jmp    1352 <get_grint_char+0x252>
cmpl   $0xd,-0x4(%rbp)
jne    1211 <get_grint_char+0x111>
movb   $0x3d,-0x5(%rbp)
jmp    134d <get_grint_char+0x24d>
cmpl   $0xe,-0x4(%rbp)
jne    1224 <get_grint_char+0x124>
movb   $0x3e,-0x5(%rbp)
jmp    1348 <get_grint_char+0x248>
cmpl   $0xf,-0x4(%rbp)
jne    1237 <get_grint_char+0x137>
movb   $0x3f,-0x5(%rbp)
jmp    1343 <get_grint_char+0x243>
cmpl   $0x10,-0x4(%rbp)
jne    124a <get_grint_char+0x14a>
movb   $0x40,-0x5(%rbp)
jmp    133e <get_grint_char+0x23e>
cmpl   $0x11,-0x4(%rbp)
jne    125d <get_grint_char+0x15d>
movb   $0x41,-0x5(%rbp)
jmp    1339 <get_grint_char+0x239>
cmpl   $0x12,-0x4(%rbp)
jne    1270 <get_grint_char+0x170>
movb   $0x42,-0x5(%rbp)
jmp    1334 <get_grint_char+0x234>
cmpl   $0x13,-0x4(%rbp)
jne    1283 <get_grint_char+0x183>
movb   $0x43,-0x5(%rbp)
jmp    132f <get_grint_char+0x22f>
cmpl   $0x14,-0x4(%rbp)
jne    1296 <get_grint_char+0x196>
movb   $0x44,-0x5(%rbp)
jmp    132a <get_grint_char+0x22a>
cmpl   $0x15,-0x4(%rbp)
jne    12a9 <get_grint_char+0x1a9>
movb   $0x45,-0x5(%rbp)
jmp    1325 <get_grint_char+0x225>
cmpl   $0x16,-0x4(%rbp)
jne    12bc <get_grint_char+0x1bc>
movb   $0x46,-0x5(%rbp)
jmp    1320 <get_grint_char+0x220>
cmpl   $0x17,-0x4(%rbp)
jne    12cf <get_grint_char+0x1cf>
movb   $0x47,-0x5(%rbp)
jmp    131b <get_grint_char+0x21b>
cmpl   $0x18,-0x4(%rbp)
jne    12e2 <get_grint_char+0x1e2>
movb   $0x48,-0x5(%rbp)
jmp    1316 <get_grint_char+0x216>
cmpl   $0x19,-0x4(%rbp)
jne    12f5 <get_grint_char+0x1f5>
movb   $0x49,-0x5(%rbp)
jmp    1311 <get_grint_char+0x211>
cmpl   $0x1a,-0x4(%rbp)
jne    1308 <get_grint_char+0x208>
movb   $0x4a,-0x5(%rbp)
jmp    130c <get_grint_char+0x20c>
movb   $0x75,-0x5(%rbp)
jmp    1311 <get_grint_char+0x211>
jmp    1316 <get_grint_char+0x216>
jmp    131b <get_grint_char+0x21b>
jmp    1320 <get_grint_char+0x220>
jmp    1325 <get_grint_char+0x225>
jmp    132a <get_grint_char+0x22a>
jmp    132f <get_grint_char+0x22f>
jmp    1334 <get_grint_char+0x234>
jmp    1339 <get_grint_char+0x239>
jmp    133e <get_grint_char+0x23e>
jmp    1343 <get_grint_char+0x243>
jmp    1348 <get_grint_char+0x248>
jmp    134d <get_grint_char+0x24d>
jmp    1352 <get_grint_char+0x252>
jmp    1357 <get_grint_char+0x257>
jmp    135c <get_grint_char+0x25c>
jmp    1361 <get_grint_char+0x261>
jmp    1366 <get_grint_char+0x266>
jmp    136b <get_grint_char+0x26b>
jmp    1370 <get_grint_char+0x270>
jmp    1375 <get_grint_char+0x275>
jmp    137a <get_grint_char+0x27a>
jmp    137f <get_grint_char+0x27f>
jmp    1384 <get_grint_char+0x284>
jmp    1389 <get_grint_char+0x289>
jmp    138e <get_grint_char+0x28e>
movsbl -0x5(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_grint_char>:
lea    0x30(%rdi),%eax
cmp    $0x1b,%edi
movzbl %al,%ecx
mov    $0x75,%eax
cmovb  %ecx,%eax
ret

LLVM IR (-O0):
define signext i8 @get_grint_char(i32 %0) {
%2 = alloca i32
%3 = alloca i8
store i32 %0, i32* %2
%4 = load i32, i32* %2
%5 = icmp eq i32 %4, 0
br i1 %5, label %6, label %7
6: ; preds = %1
store i8 48, i8* %3
br label %138
7: ; preds = %1
%8 = load i32, i32* %2
%9 = icmp eq i32 %8, 1
br i1 %9, label %10, label %11
10: ; preds = %7
store i8 49, i8* %3
br label %137
11: ; preds = %7
%12 = load i32, i32* %2
%13 = icmp eq i32 %12, 2
br i1 %13, label %14, label %15
14: ; preds = %11
store i8 50, i8* %3
br label %136
15: ; preds = %11
%16 = load i32, i32* %2
%17 = icmp eq i32 %16, 3
br i1 %17, label %18, label %19
18: ; preds = %15
store i8 51, i8* %3
br label %135
19: ; preds = %15
%20 = load i32, i32* %2
%21 = icmp eq i32 %20, 4
br i1 %21, label %22, label %23
22: ; preds = %19
store i8 52, i8* %3
br label %134
23: ; preds = %19
%24 = load i32, i32* %2
%25 = icmp eq i32 %24, 5
br i1 %25, label %26, label %27
26: ; preds = %23
store i8 53, i8* %3
br label %133
27: ; preds = %23
%28 = load i32, i32* %2
%29 = icmp eq i32 %28, 6
br i1 %29, label %30, label %31
30: ; preds = %27
store i8 54, i8* %3
br label %132
31: ; preds = %27
%32 = load i32, i32* %2
%33 = icmp eq i32 %32, 7
br i1 %33, label %34, label %35
34: ; preds = %31
store i8 55, i8* %3
br label %131
35: ; preds = %31
%36 = load i32, i32* %2
%37 = icmp eq i32 %36, 8
br i1 %37, label %38, label %39
38: ; preds = %35
store i8 56, i8* %3
br label %130
39: ; preds = %35
%40 = load i32, i32* %2
%41 = icmp eq i32 %40, 9
br i1 %41, label %42, label %43
42: ; preds = %39
store i8 57, i8* %3
br label %129
43: ; preds = %39
%44 = load i32, i32* %2
%45 = icmp eq i32 %44, 10
br i1 %45, label %46, label %47
46: ; preds = %43
store i8 58, i8* %3
br label %128
47: ; preds = %43
%48 = load i32, i32* %2
%49 = icmp eq i32 %48, 11
br i1 %49, label %50, label %51
50: ; preds = %47
store i8 59, i8* %3
br label %127
51: ; preds = %47
%52 = load i32, i32* %2
%53 = icmp eq i32 %52, 12
br i1 %53, label %54, label %55
54: ; preds = %51
store i8 60, i8* %3
br label %126
55: ; preds = %51
%56 = load i32, i32* %2
%57 = icmp eq i32 %56, 13
br i1 %57, label %58, label %59
58: ; preds = %55
store i8 61, i8* %3
br label %125
59: ; preds = %55
%60 = load i32, i32* %2
%61 = icmp eq i32 %60, 14
br i1 %61, label %62, label %63
62: ; preds = %59
store i8 62, i8* %3
br label %124
63: ; preds = %59
%64 = load i32, i32* %2
%65 = icmp eq i32 %64, 15
br i1 %65, label %66, label %67
66: ; preds = %63
store i8 63, i8* %3
br label %123
67: ; preds = %63
%68 = load i32, i32* %2
%69 = icmp eq i32 %68, 16
br i1 %69, label %70, label %71
70: ; preds = %67
store i8 64, i8* %3
br label %122
71: ; preds = %67
%72 = load i32, i32* %2
%73 = icmp eq i32 %72, 17
br i1 %73, label %74, label %75
74: ; preds = %71
store i8 65, i8* %3
br label %121
75: ; preds = %71
%76 = load i32, i32* %2
%77 = icmp eq i32 %76, 18
br i1 %77, label %78, label %79
78: ; preds = %75
store i8 66, i8* %3
br label %120
79: ; preds = %75
%80 = load i32, i32* %2
%81 = icmp eq i32 %80, 19
br i1 %81, label %82, label %83
82: ; preds = %79
store i8 67, i8* %3
br label %119
83: ; preds = %79
%84 = load i32, i32* %2
%85 = icmp eq i32 %84, 20
br i1 %85, label %86, label %87
86: ; preds = %83
store i8 68, i8* %3
br label %118
87: ; preds = %83
%88 = load i32, i32* %2
%89 = icmp eq i32 %88, 21
br i1 %89, label %90, label %91
90: ; preds = %87
store i8 69, i8* %3
br label %117
91: ; preds = %87
%92 = load i32, i32* %2
%93 = icmp eq i32 %92, 22
br i1 %93, label %94, label %95
94: ; preds = %91
store i8 70, i8* %3
br label %116
95: ; preds = %91
%96 = load i32, i32* %2
%97 = icmp eq i32 %96, 23
br i1 %97, label %98, label %99
98: ; preds = %95
store i8 71, i8* %3
br label %115
99: ; preds = %95
%100 = load i32, i32* %2
%101 = icmp eq i32 %100, 24
br i1 %101, label %102, label %103
102: ; preds = %99
store i8 72, i8* %3
br label %114
103: ; preds = %99
%104 = load i32, i32* %2
%105 = icmp eq i32 %104, 25
br i1 %105, label %106, label %107
106: ; preds = %103
store i8 73, i8* %3
br label %113
107: ; preds = %103
%108 = load i32, i32* %2
%109 = icmp eq i32 %108, 26
br i1 %109, label %110, label %111
110: ; preds = %107
store i8 74, i8* %3
br label %112
111: ; preds = %107
store i8 117, i8* %3
br label %112
112: ; preds = %111, %110
br label %113
113: ; preds = %112, %106
br label %114
114: ; preds = %113, %102
br label %115
115: ; preds = %114, %98
br label %116
116: ; preds = %115, %94
br label %117
117: ; preds = %116, %90
br label %118
118: ; preds = %117, %86
br label %119
119: ; preds = %118, %82
br label %120
120: ; preds = %119, %78
br label %121
121: ; preds = %120, %74
br label %122
122: ; preds = %121, %70
br label %123
123: ; preds = %122, %66
br label %124
124: ; preds = %123, %62
br label %125
125: ; preds = %124, %58
br label %126
126: ; preds = %125, %54
br label %127
127: ; preds = %126, %50
br label %128
128: ; preds = %127, %46
br label %129
129: ; preds = %128, %42
br label %130
130: ; preds = %129, %38
br label %131
131: ; preds = %130, %34
br label %132
132: ; preds = %131, %30
br label %133
133: ; preds = %132, %26
br label %134
134: ; preds = %133, %22
br label %135
135: ; preds = %134, %18
br label %136
136: ; preds = %135, %14
br label %137
137: ; preds = %136, %10
br label %138
138: ; preds = %137, %6
%139 = load i8, i8* %3
ret i8 %139
}

LLVM IR (-O2):
define signext i8 @get_grint_char(i32 %0) {
%2 = icmp ult i32 %0, 27
%3 = trunc i32 %0 to i8
%4 = add i8 %3, 48
%5 = select i1 %2, i8 %4, i8 117
ret i8 %5
}