void magic(int **a, int n) {
  int i, j, k;
  int row, col;
  for (i = 0; i < n; ++i)
    for (j = 0; j < n; ++j)
      a[i][j] = -1;
  row = 0;
  col = n / 2;
  k = 1;
  a[row][col] = k;
  while (k != n * n) {
    if (row == 0 && col != n - 1) {
      row = n - 1;
      col++;
      a[row][col] = ++k;
    } else if (row != 0 && col != n - 1) {
      if (a[row - 1][col + 1] == -1) {
        row--;
        col++;
        a[row][col] = ++k;
      } else {
        row++;
        a[row][col] = ++k;
      }
    } else if (row != 0 && col == n - 1) {
      row--;
      col = 0;
      a[row][col] = ++k;
    } else if (row == 0 && col == n - 1) {
      row++;
      a[row][col] = ++k;
    }
  }
  return;
}


x86 assembly (clang, -O0):
<magic>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movl   $0x0,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1169 <magic+0x69>
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1156 <magic+0x56>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x14(%rbp),%rcx
movl   $0xffffffff,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1125 <magic+0x25>
jmp    115b <magic+0x5b>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1112 <magic+0x12>
movl   $0x0,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,-0x20(%rbp)
movl   $0x1,-0x18(%rbp)
mov    -0x18(%rbp),%edx
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x18(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   -0xc(%rbp),%ecx
cmp    %ecx,%eax
je     1337 <magic+0x237>
cmpl   $0x0,-0x1c(%rbp)
jne    11fb <magic+0xfb>
mov    -0x20(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
je     11fb <magic+0xfb>
mov    -0xc(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1332 <magic+0x232>
cmpl   $0x0,-0x1c(%rbp)
je     1297 <magic+0x197>
mov    -0x20(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
je     1297 <magic+0x197>
mov    -0x8(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,8),%rax
mov    -0x20(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
cmpl   $0xffffffff,(%rax,%rcx,4)
jne    126d <magic+0x16d>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1292 <magic+0x192>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    132d <magic+0x22d>
cmpl   $0x0,-0x1c(%rbp)
je     12e3 <magic+0x1e3>
mov    -0x20(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    12e3 <magic+0x1e3>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x18(%rbp),%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1328 <magic+0x228>
cmpl   $0x0,-0x1c(%rbp)
jne    1323 <magic+0x223>
mov    -0x20(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    1323 <magic+0x223>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%edx
add    $0x1,%edx
mov    %edx,-0x18(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1328 <magic+0x228>
jmp    132d <magic+0x22d>
jmp    1332 <magic+0x232>
jmp    119b <magic+0x9b>
pop    %rbp
ret

x86 assembly (clang, -O2):
<magic>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %esi,%r14d
mov    %rdi,%r13
test   %esi,%esi
jle    122a <magic+0x11a>
mov    %r14d,%r12d
lea    0x0(,%r12,4),%rbp
lea    -0x1(%r12),%rax
mov    %r12d,%r15d
and    $0x7,%r15d
cmp    $0x7,%rax
jae    114d <magic+0x3d>
xor    %ebx,%ebx
jmp    11fd <magic+0xed>
and    $0xfffffff8,%r12d
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x0(%r13,%rbx,8),%rdi
mov    $0xff,%esi
mov    %rbp,%rdx
call   1030 <memset@plt>
mov    0x8(%r13,%rbx,8),%rdi
mov    $0xff,%esi
mov    %rbp,%rdx
call   1030 <memset@plt>
mov    0x10(%r13,%rbx,8),%rdi
mov    $0xff,%esi
mov    %rbp,%rdx
call   1030 <memset@plt>
mov    0x18(%r13,%rbx,8),%rdi
mov    $0xff,%esi
mov    %rbp,%rdx
call   1030 <memset@plt>
mov    0x20(%r13,%rbx,8),%rdi
mov    $0xff,%esi
mov    %rbp,%rdx
call   1030 <memset@plt>
mov    0x28(%r13,%rbx,8),%rdi
mov    $0xff,%esi
mov    %rbp,%rdx
call   1030 <memset@plt>
mov    0x30(%r13,%rbx,8),%rdi
mov    $0xff,%esi
mov    %rbp,%rdx
call   1030 <memset@plt>
mov    0x38(%r13,%rbx,8),%rdi
mov    $0xff,%esi
mov    %rbp,%rdx
call   1030 <memset@plt>
add    $0x8,%rbx
cmp    %rbx,%r12
jne    1160 <magic+0x50>
test   %r15,%r15
je     122a <magic+0x11a>
lea    0x0(,%rbx,8),%r12
add    %r13,%r12
xor    %ebx,%ebx
nop
mov    (%r12,%rbx,8),%rdi
mov    $0xff,%esi
mov    %rbp,%rdx
call   1030 <memset@plt>
add    $0x1,%rbx
cmp    %rbx,%r15
jne    1210 <magic+0x100>
mov    %r14d,%ecx
shr    $0x1f,%ecx
add    %r14d,%ecx
sar    %ecx
mov    0x0(%r13),%rax
movslq %ecx,%rdx
movl   $0x1,(%rax,%rdx,4)
mov    %r14d,%eax
imul   %r14d,%eax
cmp    $0x1,%eax
jne    125e <magic+0x14e>
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
add    $0xffffffff,%r14d
movslq %r14d,%r8
mov    $0x1,%esi
xor    %ebp,%ebp
jmp    1285 <magic+0x175>
xchg   %ax,%ax
add    $0x1,%esi
movslq %edi,%rcx
mov    0x0(%r13,%rcx,8),%rcx
mov    %esi,(%rcx)
xor    %ecx,%ecx
mov    %edi,%ebp
cmp    %eax,%esi
je     124f <magic+0x13f>
test   %ebp,%ebp
je     12c0 <magic+0x1b0>
lea    -0x1(%rbp),%edi
cmp    %r14d,%ecx
je     1270 <magic+0x160>
movslq %edi,%rdx
mov    0x0(%r13,%rdx,8),%rdx
movslq %ecx,%rbx
cmpl   $0xffffffff,0x4(%rdx,%rbx,4)
je     12ee <magic+0x1de>
add    $0x1,%esi
movslq %ebp,%rdx
add    $0x1,%ebp
mov    0x8(%r13,%rdx,8),%rdx
mov    %esi,(%rdx,%rbx,4)
mov    %ebp,%edi
jmp    127f <magic+0x16f>
nopl   0x0(%rax,%rax,1)
add    $0x1,%esi
cmp    %r14d,%ecx
jne    12da <magic+0x1ca>
mov    0x8(%r13),%rcx
mov    %esi,(%rcx,%r8,4)
mov    $0x1,%edi
mov    %r14d,%ecx
jmp    127f <magic+0x16f>
mov    0x0(%r13,%r8,8),%rdx
movslq %ecx,%rdi
add    $0x1,%ecx
mov    %esi,0x4(%rdx,%rdi,4)
mov    %r14d,%edi
jmp    127f <magic+0x16f>
add    $0x1,%ecx
add    $0x1,%rbx
add    $0x1,%esi
mov    %esi,(%rdx,%rbx,4)
jmp    127f <magic+0x16f>

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

LLVM IR (-O2):
define void @magic(i32** nocapture %0, i32 %1) {
%3 = icmp sgt i32 %1, 0
br i1 %3, label %4, label %61
4: ; preds = %2
%5 = zext i32 %1 to i64
%6 = shl nuw nsw i64 %5, 2
%7 = add nsw i64 %5, -1
%8 = and i64 %5, 7
%9 = icmp ult i64 %7, 7
br i1 %9, label %49, label %10
10: ; preds = %4
%11 = and i64 %5, 4294967288
br label %12
12: ; preds = %12, %10
%13 = phi i64 [ 0, %10 ], [ %46, %12 ]
%14 = phi i64 [ 0, %10 ], [ %47, %12 ]
%15 = getelementptr inbounds i32*, i32** %0, i64 %13
%16 = bitcast i32** %15 to i8**
%17 = load i8*, i8** %16
%18 = or i64 %13, 1
%19 = getelementptr inbounds i32*, i32** %0, i64 %18
%20 = bitcast i32** %19 to i8**
%21 = load i8*, i8** %20
%22 = or i64 %13, 2
%23 = getelementptr inbounds i32*, i32** %0, i64 %22
%24 = bitcast i32** %23 to i8**
%25 = load i8*, i8** %24
%26 = or i64 %13, 3
%27 = getelementptr inbounds i32*, i32** %0, i64 %26
%28 = bitcast i32** %27 to i8**
%29 = load i8*, i8** %28
%30 = or i64 %13, 4
%31 = getelementptr inbounds i32*, i32** %0, i64 %30
%32 = bitcast i32** %31 to i8**
%33 = load i8*, i8** %32
%34 = or i64 %13, 5
%35 = getelementptr inbounds i32*, i32** %0, i64 %34
%36 = bitcast i32** %35 to i8**
%37 = load i8*, i8** %36
%38 = or i64 %13, 6
%39 = getelementptr inbounds i32*, i32** %0, i64 %38
%40 = bitcast i32** %39 to i8**
%41 = load i8*, i8** %40
%42 = or i64 %13, 7
%43 = getelementptr inbounds i32*, i32** %0, i64 %42
%44 = bitcast i32** %43 to i8**
%45 = load i8*, i8** %44
%46 = add nuw nsw i64 %13, 8
%47 = add i64 %14, 8
%48 = icmp eq i64 %47, %11
br i1 %48, label %49, label %12
49: ; preds = %12, %4
%50 = phi i64 [ 0, %4 ], [ %46, %12 ]
%51 = icmp eq i64 %8, 0
br i1 %51, label %61, label %52
52: ; preds = %49, %52
%53 = phi i64 [ %58, %52 ], [ %50, %49 ]
%54 = phi i64 [ %59, %52 ], [ 0, %49 ]
%55 = getelementptr inbounds i32*, i32** %0, i64 %53
%56 = bitcast i32** %55 to i8**
%57 = load i8*, i8** %56
%58 = add nuw nsw i64 %53, 1
%59 = add i64 %54, 1
%60 = icmp eq i64 %59, %8
br i1 %60, label %61, label %52
61: ; preds = %49, %52, %2
%62 = sdiv i32 %1, 2
%63 = load i32*, i32** %0
%64 = sext i32 %62 to i64
%65 = getelementptr inbounds i32, i32* %63, i64 %64
store i32 1, i32* %65
%66 = mul nsw i32 %1, %1
%67 = icmp eq i32 %66, 1
br i1 %67, label %121, label %68
68: ; preds = %61
%69 = add nsw i32 %1, -1
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds i32*, i32** %0, i64 %70
%72 = getelementptr inbounds i32*, i32** %0, i64 1
br label %73
73: ; preds = %68, %116
%74 = phi i32 [ %62, %68 ], [ %119, %116 ]
%75 = phi i32 [ 0, %68 ], [ %118, %116 ]
%76 = phi i32 [ 1, %68 ], [ %117, %116 ]
%77 = icmp eq i32 %75, 0
%78 = icmp eq i32 %74, %69
br i1 %77, label %79, label %86
79: ; preds = %73
br i1 %78, label %112, label %80
80: ; preds = %79
%81 = add nsw i32 %74, 1
%82 = add nsw i32 %76, 1
%83 = load i32*, i32** %71
%84 = sext i32 %81 to i64
%85 = getelementptr inbounds i32, i32* %83, i64 %84
store i32 %82, i32* %85
br label %116
86: ; preds = %73
%87 = add nsw i32 %75, -1
br i1 %78, label %107, label %88
88: ; preds = %86
%89 = sext i32 %87 to i64
%90 = getelementptr inbounds i32*, i32** %0, i64 %89
%91 = load i32*, i32** %90
%92 = add nsw i32 %74, 1
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i32, i32* %91, i64 %93
%95 = load i32, i32* %94
%96 = icmp eq i32 %95, -1
br i1 %96, label %97, label %99
97: ; preds = %88
%98 = add nsw i32 %76, 1
store i32 %98, i32* %94
br label %116
99: ; preds = %88
%100 = add nsw i32 %75, 1
%101 = add nsw i32 %76, 1
%102 = sext i32 %100 to i64
%103 = getelementptr inbounds i32*, i32** %0, i64 %102
%104 = load i32*, i32** %103
%105 = sext i32 %74 to i64
%106 = getelementptr inbounds i32, i32* %104, i64 %105
store i32 %101, i32* %106
br label %116
107: ; preds = %86
%108 = add nsw i32 %76, 1
%109 = sext i32 %87 to i64
%110 = getelementptr inbounds i32*, i32** %0, i64 %109
%111 = load i32*, i32** %110
store i32 %108, i32* %111
br label %116
112: ; preds = %79
%113 = add nsw i32 %76, 1
%114 = load i32*, i32** %72
%115 = getelementptr inbounds i32, i32* %114, i64 %70
store i32 %113, i32* %115
br label %116
116: ; preds = %99, %97, %112, %107, %80
%117 = phi i32 [ %82, %80 ], [ %98, %97 ], [ %101, %99 ], [ %108, %107 ], [ %113, %112 ]
%118 = phi i32 [ %69, %80 ], [ %87, %97 ], [ %100, %99 ], [ %87, %107 ], [ 1, %112 ]
%119 = phi i32 [ %81, %80 ], [ %92, %97 ], [ %74, %99 ], [ 0, %107 ], [ %69, %112 ]
%120 = icmp eq i32 %117, %66
br i1 %120, label %121, label %73
121: ; preds = %116, %61
ret void
}