unsigned char *translation(unsigned char *c, int t) {
  int i;
  switch (t) {
  case 0:
    for (i = 0; i < (28 * 28) - (28); i++)
      c[i] = c[i + (28)];
    for (i = (28 * 28) - (28); i < (28 * 28); i++)
      c[i] = 0;
    break;
  case 1:
    for (i = (28 * 28) - 1; i >= (28); i--)
      c[i] = c[i - (28)];
    for (i = (28) - 1; i >= 0; i--)
      c[i] = 0;
    break;
  case 2:
    for (i = 0; i < (28 * 28) - 1; i++)
      if (i % (28) == 0)
        c[i] = 0;
      else
        c[i] = c[i + 1];
    c[(28 * 28) - 1] = 0;
    break;
  case 3:
    for (i = (28 * 28) - 1; i > 0; i--)
      if ((i - 1) % (28) == 0)
        c[i] = 0;
      else
        c[i] = c[i - 1];
    c[0] = 0;
    break;
  case 4:
    c = translation(c, 0);
    c = translation(c, 2);
    break;
  case 5:
    c = translation(c, 0);
    c = translation(c, 3);
    break;
  case 6:
    c = translation(c, 1);
    c = translation(c, 2);
    break;
  case 7:
    c = translation(c, 1);
    c = translation(c, 3);
    break;
  case 8:
    break;
  }
  return c;
}


x86 assembly (clang, -O0):
<translation>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0xc(%rbp),%eax
mov    %rax,-0x18(%rbp)
sub    $0x8,%rax
ja     13ab <translation+0x29b>
mov    -0x18(%rbp),%rax
lea    0xec5(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movl   $0x0,-0x10(%rbp)
cmpl   $0x2f4,-0x10(%rbp)
jge    1181 <translation+0x71>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1c,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    114b <translation+0x3b>
movl   $0x2f4,-0x10(%rbp)
cmpl   $0x310,-0x10(%rbp)
jge    11af <translation+0x9f>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1188 <translation+0x78>
jmp    13ab <translation+0x29b>
movl   $0x30f,-0x10(%rbp)
cmpl   $0x1c,-0x10(%rbp)
jl     11ee <translation+0xde>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
sub    $0x1c,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x10(%rbp)
jmp    11bb <translation+0xab>
movl   $0x1b,-0x10(%rbp)
cmpl   $0x0,-0x10(%rbp)
jl     1219 <translation+0x109>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x10(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x10(%rbp)
jmp    11f5 <translation+0xe5>
jmp    13ab <translation+0x29b>
movl   $0x0,-0x10(%rbp)
cmpl   $0x30f,-0x10(%rbp)
jge    1285 <translation+0x175>
mov    -0x10(%rbp),%eax
mov    $0x1c,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    1257 <translation+0x147>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1272 <translation+0x162>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1277 <translation+0x167>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1225 <translation+0x115>
mov    -0x8(%rbp),%rax
movb   $0x0,0x30f(%rax)
jmp    13ab <translation+0x29b>
movl   $0x30f,-0x10(%rbp)
cmpl   $0x0,-0x10(%rbp)
jle    12fc <translation+0x1ec>
mov    -0x10(%rbp),%eax
sub    $0x1,%eax
mov    $0x1c,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    12ce <translation+0x1be>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    12e9 <translation+0x1d9>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    12ee <translation+0x1de>
mov    -0x10(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x10(%rbp)
jmp    129c <translation+0x18c>
mov    -0x8(%rbp),%rax
movb   $0x0,(%rax)
jmp    13ab <translation+0x29b>
mov    -0x8(%rbp),%rdi
xor    %esi,%esi
call   1030 <translation@plt>
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rdi
mov    $0x2,%esi
call   1030 <translation@plt>
mov    %rax,-0x8(%rbp)
jmp    13ab <translation+0x29b>
mov    -0x8(%rbp),%rdi
xor    %esi,%esi
call   1030 <translation@plt>
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rdi
mov    $0x3,%esi
call   1030 <translation@plt>
mov    %rax,-0x8(%rbp)
jmp    13ab <translation+0x29b>
mov    -0x8(%rbp),%rdi
mov    $0x1,%esi
call   1030 <translation@plt>
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rdi
mov    $0x2,%esi
call   1030 <translation@plt>
mov    %rax,-0x8(%rbp)
jmp    13ab <translation+0x29b>
mov    -0x8(%rbp),%rdi
mov    $0x1,%esi
call   1030 <translation@plt>
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rdi
mov    $0x3,%esi
call   1030 <translation@plt>
mov    %rax,-0x8(%rbp)
jmp    13ab <translation+0x29b>
jmp    13ab <translation+0x29b>
mov    -0x8(%rbp),%rax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<translation>:
push   %rbx
mov    %rdi,%rbx
cmp    $0x7,%esi
ja     14e0 <translation+0x3d0>
mov    %esi,%eax
lea    0xeda(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
lea    0x1c(%rbx),%rsi
mov    $0x2f4,%edx
mov    %rbx,%rdi
call   1030 <memmove@plt>
xorps  %xmm0,%xmm0
movups %xmm0,0x2f4(%rbx)
movups %xmm0,0x300(%rbx)
jmp    14e0 <translation+0x3d0>
lea    0x1c(%rbx),%rdi
mov    $0x2f4,%edx
mov    %rbx,%rsi
call   1030 <memmove@plt>
xorps  %xmm0,%xmm0
movups %xmm0,(%rbx)
movups %xmm0,0xc(%rbx)
jmp    14e0 <translation+0x3d0>
xor    %ecx,%ecx
movabs $0x4924924924924925,%rsi
92 24 49
jmp    119d <translation+0x8d>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl 0x2(%rbx,%rcx,1),%eax
mov    %al,0x1(%rbx,%rcx,1)
add    $0x2,%rcx
mov    %rcx,%rax
shr    $0x2,%rax
mul    %rsi
shr    %rdx
lea    (%rdx,%rdx,8),%rax
lea    (%rax,%rax,2),%rax
add    %rdx,%rax
cmp    %cx,%ax
jne    11c0 <translation+0xb0>
xor    %edx,%edx
jmp    11c5 <translation+0xb5>
xchg   %ax,%ax
movzbl 0x1(%rbx,%rcx,1),%edx
mov    %dl,(%rbx,%rcx,1)
cmp    $0x30e,%rcx
je     142d <translation+0x31d>
add    $0xffffffff,%eax
cmp    %cx,%ax
jne    1190 <translation+0x80>
xor    %eax,%eax
jmp    1195 <translation+0x85>
mov    $0x30f,%eax
mov    $0x30d,%ecx
mov    $0x30e,%edx
jmp    1214 <translation+0x104>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl -0x2(%rbx,%rax,1),%esi
mov    %sil,-0x1(%rbx,%rax,1)
add    $0xfffffffe,%ecx
add    $0xfffffffe,%edx
add    $0xfffffffffffffffe,%rax
mov    %edx,%esi
shr    $0x2,%esi
imul   $0x24924925,%rsi,%rsi
shr    $0x20,%rsi
imul   $0xffffffe4,%esi,%esi
add    %eax,%esi
cmp    $0x1,%esi
jne    1240 <translation+0x130>
xor    %esi,%esi
jmp    1245 <translation+0x135>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl -0x1(%rbx,%rax,1),%esi
mov    %sil,(%rbx,%rax,1)
cmp    $0x2,%rax
jb     14dd <translation+0x3cd>
mov    %ecx,%esi
shr    $0x2,%esi
imul   $0x24924925,%rsi,%rsi
shr    $0x20,%rsi
imul   $0xffffffe4,%esi,%esi
add    %eax,%esi
cmp    $0x2,%esi
jne    1200 <translation+0xf0>
xor    %esi,%esi
jmp    1205 <translation+0xf5>
lea    0x1c(%rbx),%rsi
mov    $0x2f4,%edx
mov    %rbx,%rdi
call   1030 <memmove@plt>
xorps  %xmm0,%xmm0
movups %xmm0,0x2f4(%rbx)
movups %xmm0,0x300(%rbx)
xor    %ecx,%ecx
movabs $0x4924924924924925,%rsi
92 24 49
jmp    12bd <translation+0x1ad>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movzbl 0x2(%rbx,%rcx,1),%eax
mov    %al,0x1(%rbx,%rcx,1)
add    $0x2,%rcx
mov    %rcx,%rax
shr    $0x2,%rax
mul    %rsi
shr    %rdx
lea    (%rdx,%rdx,8),%rax
lea    (%rax,%rax,2),%rax
add    %rdx,%rax
cmp    %cx,%ax
jne    12e0 <translation+0x1d0>
xor    %edx,%edx
jmp    12e5 <translation+0x1d5>
xchg   %ax,%ax
movzbl 0x1(%rbx,%rcx,1),%edx
mov    %dl,(%rbx,%rcx,1)
cmp    $0x30e,%rcx
je     142d <translation+0x31d>
add    $0xffffffff,%eax
cmp    %cx,%ax
jne    12b0 <translation+0x1a0>
xor    %eax,%eax
jmp    12b5 <translation+0x1a5>
lea    0x1c(%rbx),%rsi
mov    $0x2f4,%edx
mov    %rbx,%rdi
call   1030 <memmove@plt>
xorps  %xmm0,%xmm0
movups %xmm0,0x2f4(%rbx)
movups %xmm0,0x300(%rbx)
mov    $0x30f,%eax
mov    $0x30d,%ecx
mov    $0x30e,%edx
jmp    1354 <translation+0x244>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl -0x2(%rbx,%rax,1),%esi
mov    %sil,-0x1(%rbx,%rax,1)
add    $0xfffffffe,%ecx
add    $0xfffffffe,%edx
add    $0xfffffffffffffffe,%rax
mov    %edx,%esi
shr    $0x2,%esi
imul   $0x24924925,%rsi,%rsi
shr    $0x20,%rsi
imul   $0xffffffe4,%esi,%esi
add    %eax,%esi
cmp    $0x1,%esi
jne    1380 <translation+0x270>
xor    %esi,%esi
jmp    1385 <translation+0x275>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl -0x1(%rbx,%rax,1),%esi
mov    %sil,(%rbx,%rax,1)
cmp    $0x2,%rax
jb     14dd <translation+0x3cd>
mov    %ecx,%esi
shr    $0x2,%esi
imul   $0x24924925,%rsi,%rsi
shr    $0x20,%rsi
imul   $0xffffffe4,%esi,%esi
add    %eax,%esi
cmp    $0x2,%esi
jne    1340 <translation+0x230>
xor    %esi,%esi
jmp    1345 <translation+0x235>
lea    0x1c(%rbx),%rdi
mov    $0x2f4,%edx
mov    %rbx,%rsi
call   1030 <memmove@plt>
xorps  %xmm0,%xmm0
movups %xmm0,(%rbx)
movups %xmm0,0xc(%rbx)
xor    %ecx,%ecx
movabs $0x4924924924924925,%rsi
92 24 49
jmp    13ed <translation+0x2dd>
nopw   0x0(%rax,%rax,1)
movzbl 0x2(%rbx,%rcx,1),%eax
mov    %al,0x1(%rbx,%rcx,1)
add    $0x2,%rcx
mov    %rcx,%rax
shr    $0x2,%rax
mul    %rsi
shr    %rdx
lea    (%rdx,%rdx,8),%rax
lea    (%rax,%rax,2),%rax
add    %rdx,%rax
cmp    %cx,%ax
jne    1410 <translation+0x300>
xor    %edx,%edx
jmp    1415 <translation+0x305>
xchg   %ax,%ax
movzbl 0x1(%rbx,%rcx,1),%edx
mov    %dl,(%rbx,%rcx,1)
cmp    $0x30e,%rcx
je     142d <translation+0x31d>
add    $0xffffffff,%eax
cmp    %cx,%ax
jne    13e0 <translation+0x2d0>
xor    %eax,%eax
jmp    13e5 <translation+0x2d5>
movb   $0x0,0x30f(%rbx)
jmp    14e0 <translation+0x3d0>
lea    0x1c(%rbx),%rdi
mov    $0x2f4,%edx
mov    %rbx,%rsi
call   1030 <memmove@plt>
xorps  %xmm0,%xmm0
movups %xmm0,(%rbx)
movups %xmm0,0xc(%rbx)
mov    $0x30f,%eax
mov    $0x30d,%ecx
mov    $0x30e,%edx
jmp    1484 <translation+0x374>
cs nopw 0x0(%rax,%rax,1)
nop
movzbl -0x2(%rbx,%rax,1),%esi
mov    %sil,-0x1(%rbx,%rax,1)
add    $0xfffffffe,%ecx
add    $0xfffffffe,%edx
add    $0xfffffffffffffffe,%rax
mov    %edx,%esi
shr    $0x2,%esi
imul   $0x24924925,%rsi,%rsi
shr    $0x20,%rsi
imul   $0xffffffe4,%esi,%esi
add    %eax,%esi
cmp    $0x1,%esi
jne    14b0 <translation+0x3a0>
xor    %esi,%esi
jmp    14b5 <translation+0x3a5>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl -0x1(%rbx,%rax,1),%esi
mov    %sil,(%rbx,%rax,1)
cmp    $0x2,%rax
jb     14dd <translation+0x3cd>
mov    %ecx,%esi
shr    $0x2,%esi
imul   $0x24924925,%rsi,%rsi
shr    $0x20,%rsi
imul   $0xffffffe4,%esi,%esi
add    %eax,%esi
cmp    $0x2,%esi
jne    1470 <translation+0x360>
xor    %esi,%esi
jmp    1475 <translation+0x365>
movb   $0x0,(%rbx)
mov    %rbx,%rax
pop    %rbx
ret

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

LLVM IR (-O2):
define i8* @translation(i8* %0, i32 %1) {
switch i32 %1, label %171 [
i32 0, label %15
i32 1, label %13
i32 2, label %18
i32 3, label %44
i32 4, label %10
i32 5, label %7
i32 6, label %5
i32 7, label %3
]
3: ; preds = %2
%4 = getelementptr i8, i8* %0, i64 28
br label %146
5: ; preds = %2
%6 = getelementptr i8, i8* %0, i64 28
br label %120
7: ; preds = %2
%8 = getelementptr i8, i8* %0, i64 28
%9 = getelementptr i8, i8* %0, i64 756
br label %95
10: ; preds = %2
%11 = getelementptr i8, i8* %0, i64 28
%12 = getelementptr i8, i8* %0, i64 756
br label %69
13: ; preds = %2
%14 = getelementptr i8, i8* %0, i64 28
br label %171
15: ; preds = %2
%16 = getelementptr i8, i8* %0, i64 28
%17 = getelementptr i8, i8* %0, i64 756
br label %171
18: ; preds = %2, %39
%19 = phi i64 [ %35, %39 ], [ 0, %2 ]
%20 = trunc i64 %19 to i16
%21 = urem i16 %20, 28
%22 = icmp eq i16 %21, 0
%23 = or i64 %19, 1
br i1 %22, label %27, label %24
24: ; preds = %18
%25 = getelementptr inbounds i8, i8* %0, i64 %23
%26 = load i8, i8* %25
br label %27
27: ; preds = %18, %24
%28 = phi i8 [ %26, %24 ], [ 0, %18 ]
%29 = getelementptr inbounds i8, i8* %0, i64 %19
store i8 %28, i8* %29
%30 = icmp eq i64 %23, 783
br i1 %30, label %42, label %31
31: ; preds = %27
%32 = trunc i64 %23 to i16
%33 = urem i16 %32, 28
%34 = icmp eq i16 %33, 0
%35 = add nuw nsw i64 %19, 2
br i1 %34, label %39, label %36
36: ; preds = %31
%37 = getelementptr inbounds i8, i8* %0, i64 %35
%38 = load i8, i8* %37
br label %39
39: ; preds = %36, %31
%40 = phi i8 [ %38, %36 ], [ 0, %31 ]
%41 = getelementptr inbounds i8, i8* %0, i64 %23
store i8 %40, i8* %41
br label %18
42: ; preds = %27
%43 = getelementptr inbounds i8, i8* %0, i64 783
store i8 0, i8* %43
br label %171
44: ; preds = %2, %65
%45 = phi i64 [ %58, %65 ], [ 783, %2 ]
%46 = add nsw i64 %45, -1
%47 = trunc i64 %46 to i32
%48 = urem i32 %47, 28
%49 = icmp eq i32 %48, 0
br i1 %49, label %53, label %50
50: ; preds = %44
%51 = getelementptr inbounds i8, i8* %0, i64 %46
%52 = load i8, i8* %51
br label %53
53: ; preds = %44, %50
%54 = phi i8 [ %52, %50 ], [ 0, %44 ]
%55 = getelementptr inbounds i8, i8* %0, i64 %45
store i8 %54, i8* %55
%56 = icmp ugt i64 %45, 1
br i1 %56, label %57, label %68
57: ; preds = %53
%58 = add nsw i64 %45, -2
%59 = trunc i64 %58 to i32
%60 = urem i32 %59, 28
%61 = icmp eq i32 %60, 0
br i1 %61, label %65, label %62
62: ; preds = %57
%63 = getelementptr inbounds i8, i8* %0, i64 %58
%64 = load i8, i8* %63
br label %65
65: ; preds = %62, %57
%66 = phi i8 [ %64, %62 ], [ 0, %57 ]
%67 = getelementptr inbounds i8, i8* %0, i64 %46
store i8 %66, i8* %67
br label %44
68: ; preds = %53
store i8 0, i8* %0
br label %171
69: ; preds = %90, %10
%70 = phi i64 [ 0, %10 ], [ %86, %90 ]
%71 = trunc i64 %70 to i16
%72 = urem i16 %71, 28
%73 = icmp eq i16 %72, 0
%74 = or i64 %70, 1
br i1 %73, label %78, label %75
75: ; preds = %69
%76 = getelementptr inbounds i8, i8* %0, i64 %74
%77 = load i8, i8* %76
br label %78
78: ; preds = %69, %75
%79 = phi i8 [ %77, %75 ], [ 0, %69 ]
%80 = getelementptr inbounds i8, i8* %0, i64 %70
store i8 %79, i8* %80
%81 = icmp eq i64 %74, 783
br i1 %81, label %93, label %82
82: ; preds = %78
%83 = trunc i64 %74 to i16
%84 = urem i16 %83, 28
%85 = icmp eq i16 %84, 0
%86 = add nuw nsw i64 %70, 2
br i1 %85, label %90, label %87
87: ; preds = %82
%88 = getelementptr inbounds i8, i8* %0, i64 %86
%89 = load i8, i8* %88
br label %90
90: ; preds = %87, %82
%91 = phi i8 [ %89, %87 ], [ 0, %82 ]
%92 = getelementptr inbounds i8, i8* %0, i64 %74
store i8 %91, i8* %92
br label %69
93: ; preds = %78
%94 = getelementptr inbounds i8, i8* %0, i64 783
store i8 0, i8* %94
br label %171
95: ; preds = %116, %7
%96 = phi i64 [ 783, %7 ], [ %109, %116 ]
%97 = add nsw i64 %96, -1
%98 = trunc i64 %97 to i32
%99 = urem i32 %98, 28
%100 = icmp eq i32 %99, 0
br i1 %100, label %104, label %101
101: ; preds = %95
%102 = getelementptr inbounds i8, i8* %0, i64 %97
%103 = load i8, i8* %102
br label %104
104: ; preds = %95, %101
%105 = phi i8 [ %103, %101 ], [ 0, %95 ]
%106 = getelementptr inbounds i8, i8* %0, i64 %96
store i8 %105, i8* %106
%107 = icmp ugt i64 %96, 1
br i1 %107, label %108, label %119
108: ; preds = %104
%109 = add nsw i64 %96, -2
%110 = trunc i64 %109 to i32
%111 = urem i32 %110, 28
%112 = icmp eq i32 %111, 0
br i1 %112, label %116, label %113
113: ; preds = %108
%114 = getelementptr inbounds i8, i8* %0, i64 %109
%115 = load i8, i8* %114
br label %116
116: ; preds = %113, %108
%117 = phi i8 [ %115, %113 ], [ 0, %108 ]
%118 = getelementptr inbounds i8, i8* %0, i64 %97
store i8 %117, i8* %118
br label %95
119: ; preds = %104
store i8 0, i8* %0
br label %171
120: ; preds = %141, %5
%121 = phi i64 [ 0, %5 ], [ %137, %141 ]
%122 = trunc i64 %121 to i16
%123 = urem i16 %122, 28
%124 = icmp eq i16 %123, 0
%125 = or i64 %121, 1
br i1 %124, label %129, label %126
126: ; preds = %120
%127 = getelementptr inbounds i8, i8* %0, i64 %125
%128 = load i8, i8* %127
br label %129
129: ; preds = %120, %126
%130 = phi i8 [ %128, %126 ], [ 0, %120 ]
%131 = getelementptr inbounds i8, i8* %0, i64 %121
store i8 %130, i8* %131
%132 = icmp eq i64 %125, 783
br i1 %132, label %144, label %133
133: ; preds = %129
%134 = trunc i64 %125 to i16
%135 = urem i16 %134, 28
%136 = icmp eq i16 %135, 0
%137 = add nuw nsw i64 %121, 2
br i1 %136, label %141, label %138
138: ; preds = %133
%139 = getelementptr inbounds i8, i8* %0, i64 %137
%140 = load i8, i8* %139
br label %141
141: ; preds = %138, %133
%142 = phi i8 [ %140, %138 ], [ 0, %133 ]
%143 = getelementptr inbounds i8, i8* %0, i64 %125
store i8 %142, i8* %143
br label %120
144: ; preds = %129
%145 = getelementptr inbounds i8, i8* %0, i64 783
store i8 0, i8* %145
br label %171
146: ; preds = %167, %3
%147 = phi i64 [ 783, %3 ], [ %160, %167 ]
%148 = add nsw i64 %147, -1
%149 = trunc i64 %148 to i32
%150 = urem i32 %149, 28
%151 = icmp eq i32 %150, 0
br i1 %151, label %155, label %152
152: ; preds = %146
%153 = getelementptr inbounds i8, i8* %0, i64 %148
%154 = load i8, i8* %153
br label %155
155: ; preds = %146, %152
%156 = phi i8 [ %154, %152 ], [ 0, %146 ]
%157 = getelementptr inbounds i8, i8* %0, i64 %147
store i8 %156, i8* %157
%158 = icmp ugt i64 %147, 1
br i1 %158, label %159, label %170
159: ; preds = %155
%160 = add nsw i64 %147, -2
%161 = trunc i64 %160 to i32
%162 = urem i32 %161, 28
%163 = icmp eq i32 %162, 0
br i1 %163, label %167, label %164
164: ; preds = %159
%165 = getelementptr inbounds i8, i8* %0, i64 %160
%166 = load i8, i8* %165
br label %167
167: ; preds = %164, %159
%168 = phi i8 [ %166, %164 ], [ 0, %159 ]
%169 = getelementptr inbounds i8, i8* %0, i64 %148
store i8 %168, i8* %169
br label %146
170: ; preds = %155
store i8 0, i8* %0
br label %171
171: ; preds = %13, %15, %2, %170, %144, %119, %93, %68, %42
ret i8* %0
}