int check_code(unsigned short code[], unsigned short neuer_code[]) {
  int i, j, run, knotenzahl, OK, naechste_nummer;
  int bild[200 + 1], urbild[200 + 1], start[200 + 1];
  knotenzahl = code[0];
  for (i = 2, OK = 1, run = 1; (i <= knotenzahl) && OK; i++) {
    OK = 0;
    for (; code[run] != 0; run++)
      ;
    run++;
    for (; !OK && (code[run] != 0); run++)
      if (code[run] < i)
        OK = 1;
  }
  if (OK)
    return 1;
  start[1] = 1;
  for (i = 2, run = 1; i <= knotenzahl; i++) {
    bild[i] = 0;
    for (; code[run] != 0; run++)
      ;
    run++;
    start[i] = run;
  }
  bild[1] = urbild[1] = 1;
  naechste_nummer = 2;
  for (i = 1; naechste_nummer <= knotenzahl; i++) {
    run = start[urbild[i]];
    for (; code[run] != 0; run++) {
      if (bild[code[run]] == 0) {
        bild[code[run]] = naechste_nummer;
        urbild[naechste_nummer] = code[run];
        naechste_nummer++;
      }
    }
  }
  neuer_code[0] = code[0];
  for (i = 1, run = 1; i <= knotenzahl; i++) {
    j = start[urbild[i]];
    for (; code[j] != 0; j++, run++)
      neuer_code[run] = bild[code[j]];
    neuer_code[run] = 0;
    run++;
  }
  return 0;
}


x86 assembly (clang, -O0):
<check_code>:
push   %rbp
mov    %rsp,%rbp
sub    $0x950,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movzwl (%rax),%eax
mov    %eax,-0x28(%rbp)
movl   $0x2,-0x1c(%rbp)
movl   $0x1,-0x2c(%rbp)
movl   $0x1,-0x24(%rbp)
mov    -0x1c(%rbp),%ecx
xor    %eax,%eax
cmp    -0x28(%rbp),%ecx
mov    %al,-0x9c1(%rbp)
jg     1153 <check_code+0x53>
cmpl   $0x0,-0x2c(%rbp)
setne  %al
mov    %al,-0x9c1(%rbp)
mov    -0x9c1(%rbp),%al
test   $0x1,%al
jne    1166 <check_code+0x66>
jmp    121d <check_code+0x11d>
movl   $0x0,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
cmp    $0x0,%eax
je     1195 <check_code+0x95>
jmp    1187 <check_code+0x87>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    116d <check_code+0x6d>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x2c(%rbp)
mov    %al,-0x9c2(%rbp)
jne    11c8 <check_code+0xc8>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
cmp    $0x0,%eax
setne  %al
mov    %al,-0x9c2(%rbp)
mov    -0x9c2(%rbp),%al
test   $0x1,%al
jne    11db <check_code+0xdb>
jmp    120a <check_code+0x10a>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
cmp    -0x1c(%rbp),%eax
jge    11f7 <check_code+0xf7>
movl   $0x1,-0x2c(%rbp)
jmp    11fc <check_code+0xfc>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    119e <check_code+0x9e>
jmp    120f <check_code+0x10f>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1132 <check_code+0x32>
cmpl   $0x0,-0x2c(%rbp)
je     1233 <check_code+0x133>
movl   $0x1,-0x4(%rbp)
jmp    143a <check_code+0x33a>
movl   $0x1,-0x9bc(%rbp)
movl   $0x2,-0x1c(%rbp)
movl   $0x1,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x28(%rbp),%eax
jg     12b3 <check_code+0x1b3>
movslq -0x1c(%rbp),%rax
movl   $0x0,-0x360(%rbp,%rax,4)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
cmp    $0x0,%eax
je     128e <check_code+0x18e>
jmp    1280 <check_code+0x180>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1266 <check_code+0x166>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%ecx
movslq -0x1c(%rbp),%rax
mov    %ecx,-0x9c0(%rbp,%rax,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    124b <check_code+0x14b>
movl   $0x1,-0x68c(%rbp)
movl   $0x1,-0x35c(%rbp)
movl   $0x2,-0x30(%rbp)
movl   $0x1,-0x1c(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x28(%rbp),%eax
jg     1382 <check_code+0x282>
movslq -0x1c(%rbp),%rax
movslq -0x690(%rbp,%rax,4),%rax
ff
mov    -0x9c0(%rbp,%rax,4),%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
cmp    $0x0,%eax
je     136f <check_code+0x26f>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
cmpl   $0x0,-0x360(%rbp,%rax,4)
jne    135c <check_code+0x25c>
mov    -0x30(%rbp),%ecx
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rdx
movzwl (%rax,%rdx,2),%eax
mov    %ecx,-0x360(%rbp,%rax,4)
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
movzwl (%rax,%rcx,2),%ecx
movslq -0x30(%rbp),%rax
mov    %ecx,-0x690(%rbp,%rax,4)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1361 <check_code+0x261>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12f7 <check_code+0x1f7>
jmp    1374 <check_code+0x274>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    12d5 <check_code+0x1d5>
mov    -0x10(%rbp),%rax
mov    (%rax),%cx
mov    -0x18(%rbp),%rax
mov    %cx,(%rax)
movl   $0x1,-0x1c(%rbp)
movl   $0x1,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x28(%rbp),%eax
jg     1433 <check_code+0x333>
movslq -0x1c(%rbp),%rax
movslq -0x690(%rbp,%rax,4),%rax
ff
mov    -0x9c0(%rbp,%rax,4),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
cmp    $0x0,%eax
je     140e <check_code+0x30e>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
movzwl (%rax,%rcx,2),%eax
mov    -0x360(%rbp,%rax,4),%eax
mov    %ax,%dx
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %dx,(%rax,%rcx,2)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    13c0 <check_code+0x2c0>
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
movw   $0x0,(%rax,%rcx,2)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    139e <check_code+0x29e>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x950,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<check_code>:
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x988,%rsp
movzwl (%rdi),%r15d
mov    $0x1,%eax
cmp    $0x2,%r15d
jb     1352 <check_code+0x242>
mov    %rsi,%r14
mov    %rdi,%r12
mov    $0x2,%edx
mov    $0x1,%esi
movabs $0x100000000,%rcx
mov    %rsi,%rdi
shl    $0x20,%rdi
movslq %esi,%rsi
lea    (%r12,%rsi,2),%rsi
nopl   0x0(%rax)
add    %rcx,%rdi
cmpw   $0x0,(%rsi)
lea    0x2(%rsi),%rsi
jne    1160 <check_code+0x50>
sar    $0x20,%rdi
mov    %rdi,%rsi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzwl (%r12,%rsi,2),%edi
test   %edi,%edi
je     11a0 <check_code+0x90>
add    $0x1,%rsi
cmp    %edi,%edx
jbe    1180 <check_code+0x70>
lea    0x1(%rdx),%edi
cmp    %r15d,%edx
mov    %edi,%edx
jb     114b <check_code+0x3b>
jmp    1352 <check_code+0x242>
movl   $0x1,0x4(%rsp)
cmp    $0x1,%r15w
ja     11ca <check_code+0xba>
movl   $0x1,0x664(%rsp)
movl   $0x1,0x334(%rsp)
jmp    12c0 <check_code+0x1b0>
lea    0x338(%rsp),%rdi
lea    -0x2(%r15),%eax
lea    0x4(,%rax,4),%rdx
xor    %esi,%esi
call   1030 <memset@plt>
lea    -0x1(%r15),%r8
cmp    $0x2,%r15w
jne    1209 <check_code+0xf9>
mov    $0x1,%edx
mov    $0x2,%eax
test   $0x1,%r8b
jne    1290 <check_code+0x180>
jmp    129f <check_code+0x18f>
mov    %r8,%r9
and    $0xfffffffffffffffe,%r9
mov    $0x1,%edi
mov    $0x2,%eax
xor    %esi,%esi
nopl   0x0(%rax)
movslq %edi,%rdx
lea    (%r12,%rdx,2),%rcx
add    $0x1,%edx
mov    %edi,%ebx
nopl   0x0(%rax)
mov    %edx,%edi
add    $0x1,%ebx
cmpw   $0x0,(%rcx)
lea    0x2(%rcx),%rcx
lea    0x1(%rdi),%edx
jne    1230 <check_code+0x120>
mov    %ebx,(%rsp,%rax,4)
mov    %rax,%rcx
or     $0x1,%rcx
movslq %edi,%rdx
lea    (%r12,%rdx,2),%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%edi
cmpw   $0x0,(%rdx)
lea    0x2(%rdx),%rdx
jne    1260 <check_code+0x150>
mov    %edi,(%rsp,%rcx,4)
add    $0x2,%rax
add    $0x2,%rsi
cmp    %r9,%rsi
jne    1220 <check_code+0x110>
movslq %edi,%rdx
test   $0x1,%r8b
je     129f <check_code+0x18f>
cs nopw 0x0(%rax,%rax,1)
cmpw   $0x0,(%r12,%rdx,2)
lea    0x1(%rdx),%rdx
jne    1290 <check_code+0x180>
mov    %edx,(%rsp,%rax,4)
movl   $0x1,0x664(%rsp)
movl   $0x1,0x334(%rsp)
cmp    $0x2,%r15w
jae    1361 <check_code+0x251>
mov    %r15w,(%r14)
cmp    $0x2,%r15d
mov    $0x1,%eax
cmovb  %eax,%r15d
add    $0x1,%r15d
lea    0x2(%r12),%r8
mov    $0x1,%edx
jmp    1305 <check_code+0x1f5>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
cltq
movw   $0x0,(%r14,%rax,2)
add    $0x1,%eax
add    $0x1,%rdx
cmp    %r15,%rdx
je     1350 <check_code+0x240>
movslq 0x660(%rsp,%rdx,4),%rcx
movslq (%rsp,%rcx,4),%rcx
movzwl (%r12,%rcx,2),%esi
test   %si,%si
je     12f0 <check_code+0x1e0>
movslq %eax,%rdi
lea    (%r8,%rcx,2),%rcx
lea    (%r14,%rdi,2),%rbx
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
movzwl %si,%esi
movzwl 0x330(%rsp,%rsi,4),%esi
mov    %si,(%rbx,%rdi,2)
movzwl (%rcx,%rdi,2),%esi
add    $0x1,%rdi
test   %si,%si
jne    1330 <check_code+0x220>
add    %edi,%eax
jmp    12f0 <check_code+0x1e0>
xor    %eax,%eax
add    $0x988,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
ret
lea    0x2(%r12),%rax
mov    $0x2,%ecx
mov    $0x1,%edx
mov    $0x1,%esi
cs nopw 0x0(%rax,%rax,1)
nop
movslq %esi,%rsi
movslq (%rsp,%rsi,4),%rsi
movzwl (%r12,%rsi,2),%edi
test   %di,%di
je     13d0 <check_code+0x2c0>
lea    (%rax,%rsi,2),%rsi
jmp    13ac <check_code+0x29c>
nopw   0x0(%rax,%rax,1)
movzwl (%rsi),%edi
add    $0x2,%rsi
test   %di,%di
je     13d0 <check_code+0x2c0>
movzwl %di,%edi
cmpl   $0x0,0x330(%rsp,%rdi,4)
jne    13a0 <check_code+0x290>
mov    %ecx,0x330(%rsp,%rdi,4)
movslq %ecx,%rcx
mov    %edi,0x660(%rsp,%rcx,4)
add    $0x1,%ecx
jmp    13a0 <check_code+0x290>
nop
cmp    %r15d,%ecx
jg     12c0 <check_code+0x1b0>
add    $0x1,%rdx
mov    0x660(%rsp,%rdx,4),%esi
jmp    1380 <check_code+0x270>

LLVM IR (-O0):
define i32 @check_code(i16* %0, i16* %1) {
%3 = alloca i32
%4 = alloca i16*
%5 = alloca i16*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca [201 x i32]
%13 = alloca [201 x i32]
%14 = alloca [201 x i32]
store i16* %0, i16** %4
store i16* %1, i16** %5
%15 = load i16*, i16** %4
%16 = getelementptr inbounds i16, i16* %15, i64 0
%17 = load i16, i16* %16
%18 = zext i16 %17 to i32
store i32 %18, i32* %9
store i32 2, i32* %6
store i32 1, i32* %10
store i32 1, i32* %8
br label %19
19: ; preds = %72, %2
%20 = load i32, i32* %6
%21 = load i32, i32* %9
%22 = icmp sle i32 %20, %21
br i1 %22, label %23, label %26
23: ; preds = %19
%24 = load i32, i32* %10
%25 = icmp ne i32 %24, 0
br label %26
26: ; preds = %23, %19
%27 = phi i1 [ false, %19 ], [ %25, %23 ]
br i1 %27, label %28, label %75
28: ; preds = %26
store i32 0, i32* %10
br label %29
29: ; preds = %38, %28
%30 = load i16*, i16** %4
%31 = load i32, i32* %8
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds i16, i16* %30, i64 %32
%34 = load i16, i16* %33
%35 = zext i16 %34 to i32
%36 = icmp ne i32 %35, 0
br i1 %36, label %37, label %41
37: ; preds = %29
br label %38
38: ; preds = %37
%39 = load i32, i32* %8
%40 = add nsw i32 %39, 1
store i32 %40, i32* %8
br label %29
41: ; preds = %29
%42 = load i32, i32* %8
%43 = add nsw i32 %42, 1
store i32 %43, i32* %8
br label %44
44: ; preds = %68, %41
%45 = load i32, i32* %10
%46 = icmp ne i32 %45, 0
br i1 %46, label %55, label %47
47: ; preds = %44
%48 = load i16*, i16** %4
%49 = load i32, i32* %8
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds i16, i16* %48, i64 %50
%52 = load i16, i16* %51
%53 = zext i16 %52 to i32
%54 = icmp ne i32 %53, 0
br label %55
55: ; preds = %47, %44
%56 = phi i1 [ false, %44 ], [ %54, %47 ]
br i1 %56, label %57, label %71
57: ; preds = %55
%58 = load i16*, i16** %4
%59 = load i32, i32* %8
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds i16, i16* %58, i64 %60
%62 = load i16, i16* %61
%63 = zext i16 %62 to i32
%64 = load i32, i32* %6
%65 = icmp slt i32 %63, %64
br i1 %65, label %66, label %67
66: ; preds = %57
store i32 1, i32* %10
br label %67
67: ; preds = %66, %57
br label %68
68: ; preds = %67
%69 = load i32, i32* %8
%70 = add nsw i32 %69, 1
store i32 %70, i32* %8
br label %44
71: ; preds = %55
br label %72
72: ; preds = %71
%73 = load i32, i32* %6
%74 = add nsw i32 %73, 1
store i32 %74, i32* %6
br label %19
75: ; preds = %26
%76 = load i32, i32* %10
%77 = icmp ne i32 %76, 0
br i1 %77, label %78, label %79
78: ; preds = %75
store i32 1, i32* %3
br label %228
79: ; preds = %75
%80 = getelementptr inbounds [201 x i32], [201 x i32]* %14, i64 0, i64 1
store i32 1, i32* %80
store i32 2, i32* %6
store i32 1, i32* %8
br label %81
81: ; preds = %108, %79
%82 = load i32, i32* %6
%83 = load i32, i32* %9
%84 = icmp sle i32 %82, %83
br i1 %84, label %85, label %111
85: ; preds = %81
%86 = load i32, i32* %6
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds [201 x i32], [201 x i32]* %12, i64 0, i64 %87
store i32 0, i32* %88
br label %89
89: ; preds = %98, %85
%90 = load i16*, i16** %4
%91 = load i32, i32* %8
%92 = sext i32 %91 to i64
%93 = getelementptr inbounds i16, i16* %90, i64 %92
%94 = load i16, i16* %93
%95 = zext i16 %94 to i32
%96 = icmp ne i32 %95, 0
br i1 %96, label %97, label %101
97: ; preds = %89
br label %98
98: ; preds = %97
%99 = load i32, i32* %8
%100 = add nsw i32 %99, 1
store i32 %100, i32* %8
br label %89
101: ; preds = %89
%102 = load i32, i32* %8
%103 = add nsw i32 %102, 1
store i32 %103, i32* %8
%104 = load i32, i32* %8
%105 = load i32, i32* %6
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds [201 x i32], [201 x i32]* %14, i64 0, i64 %106
store i32 %104, i32* %107
br label %108
108: ; preds = %101
%109 = load i32, i32* %6
%110 = add nsw i32 %109, 1
store i32 %110, i32* %6
br label %81
111: ; preds = %81
%112 = getelementptr inbounds [201 x i32], [201 x i32]* %13, i64 0, i64 1
store i32 1, i32* %112
%113 = getelementptr inbounds [201 x i32], [201 x i32]* %12, i64 0, i64 1
store i32 1, i32* %113
store i32 2, i32* %11
store i32 1, i32* %6
br label %114
114: ; preds = %169, %111
%115 = load i32, i32* %11
%116 = load i32, i32* %9
%117 = icmp sle i32 %115, %116
br i1 %117, label %118, label %172
118: ; preds = %114
%119 = load i32, i32* %6
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds [201 x i32], [201 x i32]* %13, i64 0, i64 %120
%122 = load i32, i32* %121
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds [201 x i32], [201 x i32]* %14, i64 0, i64 %123
%125 = load i32, i32* %124
store i32 %125, i32* %8
br label %126
126: ; preds = %165, %118
%127 = load i16*, i16** %4
%128 = load i32, i32* %8
%129 = sext i32 %128 to i64
%130 = getelementptr inbounds i16, i16* %127, i64 %129
%131 = load i16, i16* %130
%132 = zext i16 %131 to i32
%133 = icmp ne i32 %132, 0
br i1 %133, label %134, label %168
134: ; preds = %126
%135 = load i16*, i16** %4
%136 = load i32, i32* %8
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds i16, i16* %135, i64 %137
%139 = load i16, i16* %138
%140 = zext i16 %139 to i64
%141 = getelementptr inbounds [201 x i32], [201 x i32]* %12, i64 0, i64 %140
%142 = load i32, i32* %141
%143 = icmp eq i32 %142, 0
br i1 %143, label %144, label %164
144: ; preds = %134
%145 = load i32, i32* %11
%146 = load i16*, i16** %4
%147 = load i32, i32* %8
%148 = sext i32 %147 to i64
%149 = getelementptr inbounds i16, i16* %146, i64 %148
%150 = load i16, i16* %149
%151 = zext i16 %150 to i64
%152 = getelementptr inbounds [201 x i32], [201 x i32]* %12, i64 0, i64 %151
store i32 %145, i32* %152
%153 = load i16*, i16** %4
%154 = load i32, i32* %8
%155 = sext i32 %154 to i64
%156 = getelementptr inbounds i16, i16* %153, i64 %155
%157 = load i16, i16* %156
%158 = zext i16 %157 to i32
%159 = load i32, i32* %11
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds [201 x i32], [201 x i32]* %13, i64 0, i64 %160
store i32 %158, i32* %161
%162 = load i32, i32* %11
%163 = add nsw i32 %162, 1
store i32 %163, i32* %11
br label %164
164: ; preds = %144, %134
br label %165
165: ; preds = %164
%166 = load i32, i32* %8
%167 = add nsw i32 %166, 1
store i32 %167, i32* %8
br label %126
168: ; preds = %126
br label %169
169: ; preds = %168
%170 = load i32, i32* %6
%171 = add nsw i32 %170, 1
store i32 %171, i32* %6
br label %114
172: ; preds = %114
%173 = load i16*, i16** %4
%174 = getelementptr inbounds i16, i16* %173, i64 0
%175 = load i16, i16* %174
%176 = load i16*, i16** %5
%177 = getelementptr inbounds i16, i16* %176, i64 0
store i16 %175, i16* %177
store i32 1, i32* %6
store i32 1, i32* %8
br label %178
178: ; preds = %224, %172
%179 = load i32, i32* %6
%180 = load i32, i32* %9
%181 = icmp sle i32 %179, %180
br i1 %181, label %182, label %227
182: ; preds = %178
%183 = load i32, i32* %6
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds [201 x i32], [201 x i32]* %13, i64 0, i64 %184
%186 = load i32, i32* %185
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds [201 x i32], [201 x i32]* %14, i64 0, i64 %187
%189 = load i32, i32* %188
store i32 %189, i32* %7
br label %190
190: ; preds = %212, %182
%191 = load i16*, i16** %4
%192 = load i32, i32* %7
%193 = sext i32 %192 to i64
%194 = getelementptr inbounds i16, i16* %191, i64 %193
%195 = load i16, i16* %194
%196 = zext i16 %195 to i32
%197 = icmp ne i32 %196, 0
br i1 %197, label %198, label %217
198: ; preds = %190
%199 = load i16*, i16** %4
%200 = load i32, i32* %7
%201 = sext i32 %200 to i64
%202 = getelementptr inbounds i16, i16* %199, i64 %201
%203 = load i16, i16* %202
%204 = zext i16 %203 to i64
%205 = getelementptr inbounds [201 x i32], [201 x i32]* %12, i64 0, i64 %204
%206 = load i32, i32* %205
%207 = trunc i32 %206 to i16
%208 = load i16*, i16** %5
%209 = load i32, i32* %8
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds i16, i16* %208, i64 %210
store i16 %207, i16* %211
br label %212
212: ; preds = %198
%213 = load i32, i32* %7
%214 = add nsw i32 %213, 1
store i32 %214, i32* %7
%215 = load i32, i32* %8
%216 = add nsw i32 %215, 1
store i32 %216, i32* %8
br label %190
217: ; preds = %190
%218 = load i16*, i16** %5
%219 = load i32, i32* %8
%220 = sext i32 %219 to i64
%221 = getelementptr inbounds i16, i16* %218, i64 %220
store i16 0, i16* %221
%222 = load i32, i32* %8
%223 = add nsw i32 %222, 1
store i32 %223, i32* %8
br label %224
224: ; preds = %217
%225 = load i32, i32* %6
%226 = add nsw i32 %225, 1
store i32 %226, i32* %6
br label %178
227: ; preds = %178
store i32 0, i32* %3
br label %228
228: ; preds = %227, %78
%229 = load i32, i32* %3
ret i32 %229
}

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