#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 /*<<< orphan*/ FILE;

/* Variables and functions */
int EOF;
int /*<<< orphan*/ fclose(int /*<<< orphan*/ *);
int fgetc(int /*<<< orphan*/ *);
int /*<<< orphan*/ *fopen(char *, char *);
int /*<<< orphan*/ printf(char *, ...);
int main(void) {
  FILE *arch;
  int i, siz, op;
  unsigned char m[32000];
  int count[256];
  int len[256] = {
      2, 1, 0, 0, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 2, 0, 2, 2, 2, 2,
      1, 3, 1, 0, 3, 3, 3, 3, 3, 2, 0, 0, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,
      2, 2, 2, 0, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3, 1, 2, 0, 0, 0, 2, 2, 2,
      1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 2, 0, 0, 2, 2, 2, 1, 3, 1, 0, 0, 3, 3, 3,
      1, 2, 0, 0, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 2, 0, 2, 2, 2, 2,
      1, 3, 1, 0, 3, 3, 3, 3, 2, 2, 0, 0, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,
      2, 2, 2, 0, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3, 2, 2, 2, 0, 2, 2, 2, 2,
      1, 2, 1, 0, 3, 3, 3, 3, 2, 2, 2, 0, 2, 2, 2, 2, 1, 3, 1, 0, 3, 3, 3, 3,
      2, 2, 0, 0, 2, 2, 2, 2, 1, 2, 1, 1, 3, 3, 3, 3, 2, 2, 2, 0, 0, 2, 2, 2,
      1, 3, 1, 1, 0, 3, 3, 3, 2, 2, 0, 0, 2, 2, 2, 2, 1, 2, 1, 0, 3, 3, 3, 3,
      2, 2, 2, 0, 0, 2, 2, 2, 1, 3, 1, 0, 0, 3, 3, 3,
  };
  for (i = 0; i < 256; i++)
    count[i] = 0;
  printf("Init OK\n");
  arch = fopen("a.o65", "rb");
  printf("reading... ");
  for (i = 0; (op = fgetc(arch)) != EOF; i++)
    m[i] = op;
  siz = i;
  fclose(arch);
  printf("%d bytes\n", siz);
  printf("\n");
  i = 0;
  do {
    op = m[i];
    count[op]++;
    i += len[op];
  } while ((len[op] > 0) && (i < siz));
  printf("%d bytes processed\n", i);
  for (i = 0; i < 256; i++) {
    printf("Opcode %d: %d\n", i, count[i]);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x8530,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x8520(%rbp),%rdi
lea    0xe90(%rip),%rsi
mov    $0x400,%edx
call   1060 <memcpy@plt>
movl   $0x0,-0x14(%rbp)
cmpl   $0x100,-0x14(%rbp)
jge    11ab <main+0x5b>
movslq -0x14(%rbp),%rax
movl   $0x0,-0x8120(%rbp,%rax,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1181 <main+0x31>
lea    0x124e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x1249(%rip),%rdi
lea    0x1248(%rip),%rsi
call   1070 <fopen@plt>
mov    %rax,-0x10(%rbp)
lea    0x123b(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x14(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <fgetc@plt>
mov    %eax,-0x1c(%rbp)
mov    0x2df0(%rip),%rcx
cmp    (%rcx),%eax
je     121e <main+0xce>
mov    -0x1c(%rbp),%eax
mov    %al,%cl
movslq -0x14(%rbp),%rax
mov    %cl,-0x7d20(%rbp,%rax,1)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11e5 <main+0x95>
mov    -0x14(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <fclose@plt>
mov    -0x18(%rbp),%esi
lea    0x11e7(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0x11c2(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x14(%rbp)
movslq -0x14(%rbp),%rax
movzbl -0x7d20(%rbp,%rax,1),%eax
ff
mov    %eax,-0x1c(%rbp)
movslq -0x1c(%rbp),%rax
mov    -0x8120(%rbp,%rax,4),%ecx
add    $0x1,%ecx
mov    %ecx,-0x8120(%rbp,%rax,4)
movslq -0x1c(%rbp),%rax
mov    -0x8520(%rbp,%rax,4),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
movslq -0x1c(%rbp),%rcx
xor    %eax,%eax
cmpl   $0x0,-0x8520(%rbp,%rcx,4)
mov    %al,-0x8521(%rbp)
jle    12b1 <main+0x161>
mov    -0x14(%rbp),%eax
cmp    -0x18(%rbp),%eax
setl   %al
mov    %al,-0x8521(%rbp)
mov    -0x8521(%rbp),%al
test   $0x1,%al
jne    1253 <main+0x103>
mov    -0x14(%rbp),%esi
lea    0x115f(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x14(%rbp)
cmpl   $0x100,-0x14(%rbp)
jge    130e <main+0x1be>
mov    -0x14(%rbp),%esi
movslq -0x14(%rbp),%rax
mov    -0x8120(%rbp,%rax,4),%edx
lea    0x1143(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    12d7 <main+0x187>
xor    %eax,%eax
add    $0x8530,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x8108,%rsp
mov    %rsp,%rdi
xor    %ebx,%ebx
mov    $0x400,%edx
xor    %esi,%esi
call   1070 <memset@plt>
lea    0x12ac(%rip),%rdi
call   1040 <puts@plt>
lea    0x125e(%rip),%rdi
lea    0x125d(%rip),%rsi
call   1090 <fopen@plt>
mov    %rax,%r15
lea    0x1251(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
mov    %r15,%rdi
call   1080 <fgetc@plt>
mov    0x2e1a(%rip),%r12
mov    $0x0,%r14d
cmp    (%r12),%eax
je     11fa <main+0x8a>
xor    %r14d,%r14d
nopl   (%rax)
mov    %al,0x400(%rsp,%r14,1)
add    $0x1,%r14
mov    %r15,%rdi
call   1080 <fgetc@plt>
cmp    (%r12),%eax
jne    11e0 <main+0x70>
mov    %r15,%rdi
call   1050 <fclose@plt>
lea    0x120c(%rip),%rdi
mov    %r14d,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xddc(%rip),%rax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movslq %ebx,%rbx
movzbl 0x400(%rsp,%rbx,1),%ecx
addl   $0x1,(%rsp,%rcx,4)
mov    (%rax,%rcx,4),%ecx
add    %ecx,%ebx
test   %ecx,%ecx
jle    124d <main+0xdd>
cmp    %r14d,%ebx
jl     1230 <main+0xc0>
lea    0x11cb(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0x11cf(%rip),%r14
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
mov    (%rsp,%rbx,4),%edx
mov    %r14,%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%rbx
cmp    $0x100,%rbx
jne    1270 <main+0x100>
xor    %eax,%eax
add    $0x8108,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@__const.main.len = [256 x i32] [i32 2, i32 1, i32 0, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 3, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 1, i32 2, i32 0, i32 0, i32 0, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 0, i32 3, i32 3, i32 3, i32 1, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 1, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 1, i32 0, i32 3, i32 3, i32 3, i32 2, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 0, i32 3, i32 3, i32 3]
@.str = [9 x i8] c"Init OK\0A\00"
@.str.1 = [6 x i8] c"a.o65\00"
@.str.2 = [3 x i8] c"rb\00"
@.str.3 = [12 x i8] c"reading... \00"
@EOF = global i32 0
@.str.4 = [10 x i8] c"%d bytes\0A\00"
@.str.5 = [2 x i8] c"\0A\00"
@.str.6 = [20 x i8] c"%d bytes processed\0A\00"
@.str.7 = [15 x i8] c"Opcode %d: %d\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32*
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca [32000 x i8]
%7 = alloca [256 x i32]
%8 = alloca [256 x i32]
store i32 0, i32* %1
%9 = bitcast [256 x i32]* %8 to i8*
store i32 0, i32* %3
br label %10
10: ; preds = %17, %0
%11 = load i32, i32* %3
%12 = icmp slt i32 %11, 256
br i1 %12, label %13, label %20
13: ; preds = %10
%14 = load i32, i32* %3
%15 = sext i32 %14 to i64
%16 = getelementptr inbounds [256 x i32], [256 x i32]* %7, i64 0, i64 %15
store i32 0, i32* %16
br label %17
17: ; preds = %13
%18 = load i32, i32* %3
%19 = add nsw i32 %18, 1
store i32 %19, i32* %3
br label %10
20: ; preds = %10
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
%22 = call i32* @fopen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
store i32* %22, i32** %2
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 0))
store i32 0, i32* %3
br label %24
24: ; preds = %35, %20
%25 = load i32*, i32** %2
%26 = call i32 @fgetc(i32* %25)
store i32 %26, i32* %5
%27 = load i32, i32* @EOF
%28 = icmp ne i32 %26, %27
br i1 %28, label %29, label %38
29: ; preds = %24
%30 = load i32, i32* %5
%31 = trunc i32 %30 to i8
%32 = load i32, i32* %3
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [32000 x i8], [32000 x i8]* %6, i64 0, i64 %33
store i8 %31, i8* %34
br label %35
35: ; preds = %29
%36 = load i32, i32* %3
%37 = add nsw i32 %36, 1
store i32 %37, i32* %3
br label %24
38: ; preds = %24
%39 = load i32, i32* %3
store i32 %39, i32* %4
%40 = load i32*, i32** %2
%41 = call i32 @fclose(i32* %40)
%42 = load i32, i32* %4
%43 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 %42)
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
store i32 0, i32* %3
br label %45
45: ; preds = %72, %38
%46 = load i32, i32* %3
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds [32000 x i8], [32000 x i8]* %6, i64 0, i64 %47
%49 = load i8, i8* %48
%50 = zext i8 %49 to i32
store i32 %50, i32* %5
%51 = load i32, i32* %5
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds [256 x i32], [256 x i32]* %7, i64 0, i64 %52
%54 = load i32, i32* %53
%55 = add nsw i32 %54, 1
store i32 %55, i32* %53
%56 = load i32, i32* %5
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds [256 x i32], [256 x i32]* %8, i64 0, i64 %57
%59 = load i32, i32* %58
%60 = load i32, i32* %3
%61 = add nsw i32 %60, %59
store i32 %61, i32* %3
br label %62
62: ; preds = %45
%63 = load i32, i32* %5
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds [256 x i32], [256 x i32]* %8, i64 0, i64 %64
%66 = load i32, i32* %65
%67 = icmp sgt i32 %66, 0
br i1 %67, label %68, label %72
68: ; preds = %62
%69 = load i32, i32* %3
%70 = load i32, i32* %4
%71 = icmp slt i32 %69, %70
br label %72
72: ; preds = %68, %62
%73 = phi i1 [ false, %62 ], [ %71, %68 ]
br i1 %73, label %45, label %74
74: ; preds = %72
%75 = load i32, i32* %3
%76 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.6, i64 0, i64 0), i32 %75)
store i32 0, i32* %3
br label %77
77: ; preds = %87, %74
%78 = load i32, i32* %3
%79 = icmp slt i32 %78, 256
br i1 %79, label %80, label %90
80: ; preds = %77
%81 = load i32, i32* %3
%82 = load i32, i32* %3
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds [256 x i32], [256 x i32]* %7, i64 0, i64 %83
%85 = load i32, i32* %84
%86 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.7, i64 0, i64 0), i32 %81, i32 %85)
br label %87
87: ; preds = %80
%88 = load i32, i32* %3
%89 = add nsw i32 %88, 1
store i32 %89, i32* %3
br label %77
90: ; preds = %77
ret i32 0
}

LLVM IR (-O2):
@__const.main.len = [256 x i32] [i32 2, i32 1, i32 0, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 3, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 1, i32 2, i32 0, i32 0, i32 0, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 0, i32 3, i32 3, i32 3, i32 1, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 1, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 1, i32 0, i32 3, i32 3, i32 3, i32 2, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 2, i32 1, i32 2, i32 1, i32 0, i32 3, i32 3, i32 3, i32 3, i32 2, i32 2, i32 2, i32 0, i32 0, i32 2, i32 2, i32 2, i32 1, i32 3, i32 1, i32 0, i32 0, i32 3, i32 3, i32 3]
@.str.1 = [6 x i8] c"a.o65\00"
@.str.2 = [3 x i8] c"rb\00"
@.str.3 = [12 x i8] c"reading... \00"
@EOF = global i32 0
@.str.4 = [10 x i8] c"%d bytes\0A\00"
@.str.6 = [20 x i8] c"%d bytes processed\0A\00"
@.str.7 = [15 x i8] c"Opcode %d: %d\0A\00"
@str = [8 x i8] c"Init OK\00"
define i32 @main() {
%1 = alloca [32000 x i8]
%2 = alloca [256 x i32]
%3 = bitcast [256 x i32]* %2 to i8*
%4 = getelementptr inbounds [32000 x i8], [32000 x i8]* %1, i64 0, i64 0
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @str, i64 0, i64 0))
%6 = tail call i32* @fopen(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0))
%7 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str.3, i64 0, i64 0))
%8 = tail call i32 @fgetc(i32* %6)
%9 = load i32, i32* @EOF
%10 = icmp eq i32 %8, %9
br i1 %10, label %22, label %11
11: ; preds = %0, %11
%12 = phi i64 [ %16, %11 ], [ 0, %0 ]
%13 = phi i32 [ %17, %11 ], [ %8, %0 ]
%14 = trunc i32 %13 to i8
%15 = getelementptr inbounds [32000 x i8], [32000 x i8]* %1, i64 0, i64 %12
store i8 %14, i8* %15
%16 = add nuw i64 %12, 1
%17 = tail call i32 @fgetc(i32* %6)
%18 = load i32, i32* @EOF
%19 = icmp eq i32 %17, %18
br i1 %19, label %20, label %11
20: ; preds = %11
%21 = trunc i64 %16 to i32
br label %22
22: ; preds = %20, %0
%23 = phi i32 [ 0, %0 ], [ %21, %20 ]
%24 = tail call i32 @fclose(i32* %6)
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @.str.4, i64 0, i64 0), i32 %23)
%26 = tail call i32 @putchar(i32 10)
br label %27
27: ; preds = %27, %22
%28 = phi i32 [ 0, %22 ], [ %38, %27 ]
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds [32000 x i8], [32000 x i8]* %1, i64 0, i64 %29
%31 = load i8, i8* %30
%32 = zext i8 %31 to i64
%33 = getelementptr inbounds [256 x i32], [256 x i32]* %2, i64 0, i64 %32
%34 = load i32, i32* %33
%35 = add nsw i32 %34, 1
store i32 %35, i32* %33
%36 = getelementptr inbounds [256 x i32], [256 x i32]* @__const.main.len, i64 0, i64 %32
%37 = load i32, i32* %36
%38 = add nsw i32 %37, %28
%39 = icmp sgt i32 %37, 0
%40 = icmp slt i32 %38, %23
%41 = select i1 %39, i1 %40, i1 false
br i1 %41, label %27, label %42
42: ; preds = %27
%43 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @.str.6, i64 0, i64 0), i32 %38)
br label %44
44: ; preds = %42, %44
%45 = phi i64 [ 0, %42 ], [ %50, %44 ]
%46 = getelementptr inbounds [256 x i32], [256 x i32]* %2, i64 0, i64 %45
%47 = load i32, i32* %46
%48 = trunc i64 %45 to i32
%49 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.7, i64 0, i64 0), i32 %48, i32 %47)
%50 = add nuw nsw i64 %45, 1
%51 = icmp eq i64 %50, 256
br i1 %51, label %52, label %44
52: ; preds = %44
ret i32 0
}