int magic(int s[999][999], int length) {
  int i, j, sum = 0, row = 0, sbor_dia1 = 0, sbor_dia2 = 0;
  for (i = 0; i < length; i++) {
    sum = sum + s[0][i];
  }
  for (i = 1; i < length; i++) {
    for (j = 0; j < length; j++) {
      row = row + s[i][j];
    }
    if (sum != row) {
      return 0;
    }
    row = 0;
  }
  for (i = 1; i < length; i++) {
    for (j = 0; j < length; j++) {
      row = row + s[j][i];
    }
    if (sum != row) {
      return 0;
    }
    row = 0;
  }
  j = 0;
  i = 0;
  for (i = 0; i < length; i++) {
    for (j = 0; j < length; j++) {
      if (j == i) {
        sbor_dia1 = sbor_dia1 + s[i][j];
        j++;
        i++;
      }
    }
    if (sum != sbor_dia1) {
      return 0;
    }
  }
  for (i = 0; i < length; ++i) {
    for (j = 0; j < length; ++j) {
      if (i == j) {
        sbor_dia2 = sbor_dia2 + s[j][i];
      }
    }
  }
  if (sbor_dia2 != sum) {
    return 0;
  }
  return 1;
}


x86 assembly (clang, -O0):
<magic>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1159 <magic+0x59>
mov    -0x20(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x18(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    112e <magic+0x2e>
movl   $0x1,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11d9 <magic+0xd9>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11ac <magic+0xac>
mov    -0x24(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x18(%rbp),%rdx
imul   $0xf9c,%rdx,%rdx
add    %rdx,%rcx
movslq -0x1c(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
mov    %eax,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1173 <magic+0x73>
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     11c4 <magic+0xc4>
movl   $0x0,-0x4(%rbp)
jmp    139e <magic+0x29e>
movl   $0x0,-0x24(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1160 <magic+0x60>
movl   $0x1,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1259 <magic+0x159>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    122c <magic+0x12c>
mov    -0x24(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
imul   $0xf9c,%rdx,%rdx
add    %rdx,%rcx
movslq -0x18(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
mov    %eax,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11f3 <magic+0xf3>
mov    -0x20(%rbp),%eax
cmp    -0x24(%rbp),%eax
je     1244 <magic+0x144>
movl   $0x0,-0x4(%rbp)
jmp    139e <magic+0x29e>
movl   $0x0,-0x24(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    11e0 <magic+0xe0>
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1308 <magic+0x208>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    12dd <magic+0x1dd>
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jne    12ca <magic+0x1ca>
mov    -0x28(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x18(%rbp),%rdx
imul   $0xf9c,%rdx,%rdx
add    %rdx,%rcx
movslq -0x1c(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
mov    %eax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    12cf <magic+0x1cf>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1281 <magic+0x181>
mov    -0x20(%rbp),%eax
cmp    -0x28(%rbp),%eax
je     12f5 <magic+0x1f5>
movl   $0x0,-0x4(%rbp)
jmp    139e <magic+0x29e>
jmp    12fa <magic+0x1fa>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    126e <magic+0x16e>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    137f <magic+0x27f>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    136c <magic+0x26c>
mov    -0x18(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jne    1359 <magic+0x259>
mov    -0x2c(%rbp),%eax
mov    -0x10(%rbp),%rcx
movslq -0x1c(%rbp),%rdx
imul   $0xf9c,%rdx,%rdx
add    %rdx,%rcx
movslq -0x18(%rbp),%rdx
add    (%rcx,%rdx,4),%eax
mov    %eax,-0x2c(%rbp)
jmp    135e <magic+0x25e>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1322 <magic+0x222>
jmp    1371 <magic+0x271>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    130f <magic+0x20f>
mov    -0x2c(%rbp),%eax
cmp    -0x20(%rbp),%eax
je     1397 <magic+0x297>
movl   $0x0,-0x4(%rbp)
jmp    139e <magic+0x29e>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<magic>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
test   %esi,%esi
jle    111e <magic+0x1e>
mov    %esi,%r15d
cmp    $0x8,%esi
jae    1126 <magic+0x26>
xor    %ecx,%ecx
xor    %r14d,%r14d
jmp    1210 <magic+0x110>
xor    %r14d,%r14d
jmp    15f7 <magic+0x4f7>
mov    %r15d,%ecx
and    $0xfffffff8,%ecx
lea    -0x8(%rcx),%rdx
mov    %rdx,%rax
shr    $0x3,%rax
add    $0x1,%rax
mov    %eax,%ebp
and    $0x3,%ebp
cmp    $0x18,%rdx
jae    1152 <magic+0x52>
pxor   %xmm0,%xmm0
xor    %edx,%edx
pxor   %xmm1,%xmm1
jmp    11b9 <magic+0xb9>
and    $0xfffffffffffffffc,%rax
pxor   %xmm0,%xmm0
xor    %edx,%edx
pxor   %xmm1,%xmm1
movdqu (%rdi,%rdx,4),%xmm2
paddd  %xmm0,%xmm2
movdqu 0x10(%rdi,%rdx,4),%xmm0
paddd  %xmm1,%xmm0
movdqu 0x20(%rdi,%rdx,4),%xmm1
movdqu 0x30(%rdi,%rdx,4),%xmm3
movdqu 0x40(%rdi,%rdx,4),%xmm4
paddd  %xmm1,%xmm4
paddd  %xmm2,%xmm4
movdqu 0x50(%rdi,%rdx,4),%xmm2
paddd  %xmm3,%xmm2
paddd  %xmm0,%xmm2
movdqu 0x60(%rdi,%rdx,4),%xmm0
paddd  %xmm4,%xmm0
movdqu 0x70(%rdi,%rdx,4),%xmm1
paddd  %xmm2,%xmm1
add    $0x20,%rdx
add    $0xfffffffffffffffc,%rax
jne    1160 <magic+0x60>
test   %rbp,%rbp
je     11ec <magic+0xec>
lea    (%rdi,%rdx,4),%rax
add    $0x10,%rax
shl    $0x5,%rbp
xor    %edx,%edx
nopl   0x0(%rax)
movdqu -0x10(%rax,%rdx,1),%xmm2
paddd  %xmm2,%xmm0
movdqu (%rax,%rdx,1),%xmm2
paddd  %xmm2,%xmm1
add    $0x20,%rdx
cmp    %rdx,%rbp
jne    11d0 <magic+0xd0>
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%r14d
cmp    %r15,%rcx
je     121d <magic+0x11d>
nopl   0x0(%rax)
add    (%rdi,%rcx,4),%r14d
add    $0x1,%rcx
cmp    %rcx,%r15
jne    1210 <magic+0x110>
cmp    $0x2,%esi
jl     14ce <magic+0x3ce>
mov    %r15d,%r11d
and    $0xfffffff8,%r11d
lea    -0x8(%r11),%r8
mov    %r8,%r9
shr    $0x3,%r9
add    $0x1,%r9
mov    %r9d,%r10d
and    $0x3,%r10d
and    $0xfffffffffffffffc,%r9
lea    0x100c(%rdi),%rdx
mov    %r10,%rbx
shl    $0x5,%rbx
mov    $0x1,%r12d
mov    %rdi,%rbp
xchg   %ax,%ax
cmp    $0x8,%esi
jae    1270 <magic+0x170>
xor    %ecx,%ecx
xor    %eax,%eax
jmp    1360 <magic+0x260>
xchg   %ax,%ax
pxor   %xmm0,%xmm0
cmp    $0x18,%r8
jae    1290 <magic+0x190>
xor    %eax,%eax
pxor   %xmm1,%xmm1
jmp    12f9 <magic+0x1f9>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r9,%rcx
xor    %eax,%eax
pxor   %xmm1,%xmm1
nopl   0x0(%rax)
movdqu -0x70(%rdx,%rax,4),%xmm2
paddd  %xmm0,%xmm2
movdqu -0x60(%rdx,%rax,4),%xmm0
paddd  %xmm1,%xmm0
movdqu -0x50(%rdx,%rax,4),%xmm1
movdqu -0x40(%rdx,%rax,4),%xmm3
movdqu -0x30(%rdx,%rax,4),%xmm4
paddd  %xmm1,%xmm4
paddd  %xmm2,%xmm4
movdqu -0x20(%rdx,%rax,4),%xmm2
paddd  %xmm3,%xmm2
paddd  %xmm0,%xmm2
movdqu -0x10(%rdx,%rax,4),%xmm0
paddd  %xmm4,%xmm0
movdqu (%rdx,%rax,4),%xmm1
paddd  %xmm2,%xmm1
add    $0x20,%rax
add    $0xfffffffffffffffc,%rcx
jne    12a0 <magic+0x1a0>
test   %r10,%r10
je     1333 <magic+0x233>
lea    0x0(,%rax,4),%rax
add    %rbp,%rax
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movdqu 0xf9c(%rax,%rcx,1),%xmm2
paddd  %xmm2,%xmm0
movdqu 0xfac(%rax,%rcx,1),%xmm2
paddd  %xmm2,%xmm1
add    $0x20,%rcx
cmp    %rcx,%rbx
jne    1310 <magic+0x210>
paddd  %xmm1,%xmm0
pshufd $0xee,%xmm0,%xmm1
paddd  %xmm0,%xmm1
pshufd $0x55,%xmm1,%xmm0
paddd  %xmm1,%xmm0
movd   %xmm0,%eax
mov    %r11,%rcx
cmp    %r15,%r11
je     1370 <magic+0x270>
cs nopw 0x0(%rax,%rax,1)
nop
add    0xf9c(%rbp,%rcx,4),%eax
add    $0x1,%rcx
cmp    %rcx,%r15
jne    1360 <magic+0x260>
cmp    %eax,%r14d
jne    1603 <magic+0x503>
add    $0x1,%r12
add    $0xf9c,%rdx
add    $0xf9c,%rbp
cmp    %r15,%r12
jne    1260 <magic+0x160>
cmp    $0x2,%esi
jl     14ce <magic+0x3ce>
mov    %r15d,%r8d
and    $0xfffffff8,%r8d
lea    0x6d48(%rdi),%rcx
mov    %r15,%rax
shr    $0x3,%rax
imul   $0x7ce0,%rax,%rdx
lea    0x4(%rdi),%r9
mov    $0x1,%r10d
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    $0x8,%esi
jae    13e0 <magic+0x2e0>
xor    %r11d,%r11d
xor    %eax,%eax
jmp    1481 <magic+0x381>
nop
pxor   %xmm0,%xmm0
xor    %eax,%eax
pxor   %xmm1,%xmm1
nopw   0x0(%rax,%rax,1)
movd   -0x3e70(%rcx,%rax,1),%xmm2
ff ff
movd   -0x4e0c(%rcx,%rax,1),%xmm3
punpckldq %xmm2,%xmm3
movd   -0x5da8(%rcx,%rax,1),%xmm2
ff ff
movd   -0x6d44(%rcx,%rax,1),%xmm4
ff ff
punpckldq %xmm2,%xmm4
punpcklqdq %xmm3,%xmm4
paddd  %xmm4,%xmm0
movd   (%rcx,%rax,1),%xmm2
movd   -0xf9c(%rcx,%rax,1),%xmm3
ff ff
punpckldq %xmm2,%xmm3
movd   -0x1f38(%rcx,%rax,1),%xmm2
ff ff
movd   -0x2ed4(%rcx,%rax,1),%xmm4
ff ff
punpckldq %xmm2,%xmm4
punpcklqdq %xmm3,%xmm4
paddd  %xmm4,%xmm1
add    $0x7ce0,%rax
cmp    %rax,%rdx
jne    13f0 <magic+0x2f0>
paddd  %xmm0,%xmm1
pshufd $0xee,%xmm1,%xmm0
paddd  %xmm1,%xmm0
pshufd $0x55,%xmm0,%xmm1
paddd  %xmm0,%xmm1
movd   %xmm1,%eax
mov    %r8,%r11
cmp    %r15,%r8
je     14b0 <magic+0x3b0>
imul   $0xf9c,%r11,%rbp
add    %r9,%rbp
mov    %r15,%rbx
sub    %r11,%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    0x0(%rbp),%eax
add    $0xf9c,%rbp
add    $0xffffffffffffffff,%rbx
jne    14a0 <magic+0x3a0>
cmp    %eax,%r14d
jne    1603 <magic+0x503>
add    $0x1,%r10
add    $0x4,%rcx
add    $0x4,%r9
cmp    %r15,%r10
jne    13d0 <magic+0x2d0>
test   %esi,%esi
jle    15f7 <magic+0x4f7>
xor    %eax,%eax
xor    %ecx,%ecx
xor    %edx,%edx
nopl   0x0(%rax)
cmp    %edx,%ecx
jne    14fa <magic+0x3fa>
movslq %ecx,%rdx
imul   $0xf9c,%rdx,%rbp
add    %rdi,%rbp
add    0x0(%rbp,%rdx,4),%eax
add    $0x1,%ecx
mov    %ecx,%edx
add    $0x1,%ecx
cmp    %esi,%ecx
jl     14e0 <magic+0x3e0>
cmp    %eax,%r14d
jne    1603 <magic+0x503>
add    $0x1,%edx
xor    %ecx,%ecx
mov    %r14d,%eax
cmp    %esi,%edx
jl     14e0 <magic+0x3e0>
test   %esi,%esi
jle    15f7 <magic+0x4f7>
lea    -0x1(%r15),%r8
mov    %r15d,%r9d
and    $0x3,%r9d
mov    %r15d,%r11d
and    $0xfffffffc,%r11d
mov    %r9,%rsi
neg    %rsi
xor    %r10d,%r10d
xor    %edx,%edx
xor    %ecx,%ecx
jmp    1551 <magic+0x451>
nop
add    $0x1,%rdx
add    $0xffffffffffffffff,%r10
cmp    %r15,%rdx
je     15f9 <magic+0x4f9>
imul   $0xf9c,%rdx,%rax
add    %rdi,%rax
lea    (%rax,%rdx,4),%rbp
cmp    $0x3,%r8
jae    1570 <magic+0x470>
xor    %eax,%eax
test   %r9,%r9
jne    15cd <magic+0x4cd>
jmp    1540 <magic+0x440>
xchg   %ax,%ax
xor    %ebx,%ebx
jmp    1589 <magic+0x489>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%rbx
cmp    %r11,%rbx
je     15c0 <magic+0x4c0>
mov    %rbx,%rax
cmp    %rbx,%rdx
jne    1594 <magic+0x494>
add    0x0(%rbp),%ecx
lea    0x1(%rax),%rbx
cmp    %rbx,%rdx
jne    15a0 <magic+0x4a0>
add    0x0(%rbp),%ecx
add    $0x1,%rbx
cmp    %rbx,%rdx
jne    15ac <magic+0x4ac>
add    0x0(%rbp),%ecx
add    $0x1,%rbx
cmp    %rbx,%rdx
jne    1580 <magic+0x480>
add    0x0(%rbp),%ecx
jmp    1580 <magic+0x480>
nopw   0x0(%rax,%rax,1)
add    $0x4,%rax
test   %r9,%r9
je     1540 <magic+0x440>
add    %r10,%rax
xor    %ebx,%ebx
jmp    15ed <magic+0x4ed>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0xffffffffffffffff,%rbx
cmp    %rbx,%rsi
je     1540 <magic+0x440>
cmp    %rbx,%rax
jne    15e0 <magic+0x4e0>
add    0x0(%rbp),%ecx
jmp    15e0 <magic+0x4e0>
xor    %ecx,%ecx
xor    %eax,%eax
cmp    %r14d,%ecx
sete   %al
jmp    1605 <magic+0x505>
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @magic([999 x i32]* nocapture %0, i32 %1) {
%3 = icmp sgt i32 %1, 0
br i1 %3, label %4, label %366
4: ; preds = %2
%5 = zext i32 %1 to i64
%6 = icmp ult i32 %1, 8
br i1 %6, label %88, label %7
7: ; preds = %4
%8 = and i64 %5, 4294967288
%9 = add nsw i64 %8, -8
%10 = lshr exact i64 %9, 3
%11 = add nuw nsw i64 %10, 1
%12 = and i64 %11, 3
%13 = icmp ult i64 %9, 24
br i1 %13, label %59, label %14
14: ; preds = %7
%15 = and i64 %11, 4611686018427387900
br label %16
16: ; preds = %16, %14
%17 = phi i64 [ 0, %14 ], [ %56, %16 ]
%18 = phi <4 x i32> [ zeroinitializer, %14 ], [ %54, %16 ]
%19 = phi <4 x i32> [ zeroinitializer, %14 ], [ %55, %16 ]
%20 = phi i64 [ 0, %14 ], [ %57, %16 ]
%21 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 0, i64 %17
%22 = bitcast i32* %21 to <4 x i32>*
%23 = load <4 x i32>, <4 x i32>* %22
%24 = getelementptr inbounds i32, i32* %21, i64 4
%25 = bitcast i32* %24 to <4 x i32>*
%26 = load <4 x i32>, <4 x i32>* %25
%27 = add <4 x i32> %23, %18
%28 = add <4 x i32> %26, %19
%29 = or i64 %17, 8
%30 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 0, i64 %29
%31 = bitcast i32* %30 to <4 x i32>*
%32 = load <4 x i32>, <4 x i32>* %31
%33 = getelementptr inbounds i32, i32* %30, i64 4
%34 = bitcast i32* %33 to <4 x i32>*
%35 = load <4 x i32>, <4 x i32>* %34
%36 = add <4 x i32> %32, %27
%37 = add <4 x i32> %35, %28
%38 = or i64 %17, 16
%39 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 0, i64 %38
%40 = bitcast i32* %39 to <4 x i32>*
%41 = load <4 x i32>, <4 x i32>* %40
%42 = getelementptr inbounds i32, i32* %39, i64 4
%43 = bitcast i32* %42 to <4 x i32>*
%44 = load <4 x i32>, <4 x i32>* %43
%45 = add <4 x i32> %41, %36
%46 = add <4 x i32> %44, %37
%47 = or i64 %17, 24
%48 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 0, i64 %47
%49 = bitcast i32* %48 to <4 x i32>*
%50 = load <4 x i32>, <4 x i32>* %49
%51 = getelementptr inbounds i32, i32* %48, i64 4
%52 = bitcast i32* %51 to <4 x i32>*
%53 = load <4 x i32>, <4 x i32>* %52
%54 = add <4 x i32> %50, %45
%55 = add <4 x i32> %53, %46
%56 = add nuw i64 %17, 32
%57 = add i64 %20, 4
%58 = icmp eq i64 %57, %15
br i1 %58, label %59, label %16
59: ; preds = %16, %7
%60 = phi <4 x i32> [ undef, %7 ], [ %54, %16 ]
%61 = phi <4 x i32> [ undef, %7 ], [ %55, %16 ]
%62 = phi i64 [ 0, %7 ], [ %56, %16 ]
%63 = phi <4 x i32> [ zeroinitializer, %7 ], [ %54, %16 ]
%64 = phi <4 x i32> [ zeroinitializer, %7 ], [ %55, %16 ]
%65 = icmp eq i64 %12, 0
br i1 %65, label %82, label %66
66: ; preds = %59, %66
%67 = phi i64 [ %79, %66 ], [ %62, %59 ]
%68 = phi <4 x i32> [ %77, %66 ], [ %63, %59 ]
%69 = phi <4 x i32> [ %78, %66 ], [ %64, %59 ]
%70 = phi i64 [ %80, %66 ], [ 0, %59 ]
%71 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 0, i64 %67
%72 = bitcast i32* %71 to <4 x i32>*
%73 = load <4 x i32>, <4 x i32>* %72
%74 = getelementptr inbounds i32, i32* %71, i64 4
%75 = bitcast i32* %74 to <4 x i32>*
%76 = load <4 x i32>, <4 x i32>* %75
%77 = add <4 x i32> %73, %68
%78 = add <4 x i32> %76, %69
%79 = add nuw i64 %67, 8
%80 = add i64 %70, 1
%81 = icmp eq i64 %80, %12
br i1 %81, label %82, label %66
82: ; preds = %66, %59
%83 = phi <4 x i32> [ %60, %59 ], [ %77, %66 ]
%84 = phi <4 x i32> [ %61, %59 ], [ %78, %66 ]
%85 = add <4 x i32> %84, %83
%86 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %85)
%87 = icmp eq i64 %8, %5
br i1 %87, label %91, label %88
88: ; preds = %4, %82
%89 = phi i64 [ 0, %4 ], [ %8, %82 ]
%90 = phi i32 [ 0, %4 ], [ %86, %82 ]
br label %107
91: ; preds = %107, %82
%92 = phi i32 [ %86, %82 ], [ %112, %107 ]
%93 = icmp sgt i32 %1, 1
br i1 %93, label %94, label %260
94: ; preds = %91
%95 = zext i32 %1 to i64
%96 = and i64 %5, 4294967288
%97 = add nsw i64 %96, -8
%98 = lshr exact i64 %97, 3
%99 = add nuw nsw i64 %98, 1
%100 = icmp ult i32 %1, 8
%101 = and i64 %5, 4294967288
%102 = and i64 %99, 3
%103 = icmp ult i64 %97, 24
%104 = and i64 %99, 4611686018427387900
%105 = icmp eq i64 %102, 0
%106 = icmp eq i64 %101, %5
br label %117
107: ; preds = %88, %107
%108 = phi i64 [ %113, %107 ], [ %89, %88 ]
%109 = phi i32 [ %112, %107 ], [ %90, %88 ]
%110 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 0, i64 %108
%111 = load i32, i32* %110
%112 = add nsw i32 %111, %109
%113 = add nuw nsw i64 %108, 1
%114 = icmp eq i64 %113, %5
br i1 %114, label %91, label %107
115: ; preds = %207
%116 = icmp eq i64 %210, %95
br i1 %116, label %193, label %117
117: ; preds = %115, %94
%118 = phi i64 [ 1, %94 ], [ %210, %115 ]
br i1 %100, label %190, label %119
119: ; preds = %117
br i1 %103, label %163, label %120
120: ; preds = %119, %120
%121 = phi i64 [ %160, %120 ], [ 0, %119 ]
%122 = phi <4 x i32> [ %158, %120 ], [ zeroinitializer, %119 ]
%123 = phi <4 x i32> [ %159, %120 ], [ zeroinitializer, %119 ]
%124 = phi i64 [ %161, %120 ], [ 0, %119 ]
%125 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %118, i64 %121
%126 = bitcast i32* %125 to <4 x i32>*
%127 = load <4 x i32>, <4 x i32>* %126
%128 = getelementptr inbounds i32, i32* %125, i64 4
%129 = bitcast i32* %128 to <4 x i32>*
%130 = load <4 x i32>, <4 x i32>* %129
%131 = add <4 x i32> %127, %122
%132 = add <4 x i32> %130, %123
%133 = or i64 %121, 8
%134 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %118, i64 %133
%135 = bitcast i32* %134 to <4 x i32>*
%136 = load <4 x i32>, <4 x i32>* %135
%137 = getelementptr inbounds i32, i32* %134, i64 4
%138 = bitcast i32* %137 to <4 x i32>*
%139 = load <4 x i32>, <4 x i32>* %138
%140 = add <4 x i32> %136, %131
%141 = add <4 x i32> %139, %132
%142 = or i64 %121, 16
%143 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %118, i64 %142
%144 = bitcast i32* %143 to <4 x i32>*
%145 = load <4 x i32>, <4 x i32>* %144
%146 = getelementptr inbounds i32, i32* %143, i64 4
%147 = bitcast i32* %146 to <4 x i32>*
%148 = load <4 x i32>, <4 x i32>* %147
%149 = add <4 x i32> %145, %140
%150 = add <4 x i32> %148, %141
%151 = or i64 %121, 24
%152 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %118, i64 %151
%153 = bitcast i32* %152 to <4 x i32>*
%154 = load <4 x i32>, <4 x i32>* %153
%155 = getelementptr inbounds i32, i32* %152, i64 4
%156 = bitcast i32* %155 to <4 x i32>*
%157 = load <4 x i32>, <4 x i32>* %156
%158 = add <4 x i32> %154, %149
%159 = add <4 x i32> %157, %150
%160 = add nuw i64 %121, 32
%161 = add i64 %124, 4
%162 = icmp eq i64 %161, %104
br i1 %162, label %163, label %120
163: ; preds = %120, %119
%164 = phi <4 x i32> [ undef, %119 ], [ %158, %120 ]
%165 = phi <4 x i32> [ undef, %119 ], [ %159, %120 ]
%166 = phi i64 [ 0, %119 ], [ %160, %120 ]
%167 = phi <4 x i32> [ zeroinitializer, %119 ], [ %158, %120 ]
%168 = phi <4 x i32> [ zeroinitializer, %119 ], [ %159, %120 ]
br i1 %105, label %185, label %169
169: ; preds = %163, %169
%170 = phi i64 [ %182, %169 ], [ %166, %163 ]
%171 = phi <4 x i32> [ %180, %169 ], [ %167, %163 ]
%172 = phi <4 x i32> [ %181, %169 ], [ %168, %163 ]
%173 = phi i64 [ %183, %169 ], [ 0, %163 ]
%174 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %118, i64 %170
%175 = bitcast i32* %174 to <4 x i32>*
%176 = load <4 x i32>, <4 x i32>* %175
%177 = getelementptr inbounds i32, i32* %174, i64 4
%178 = bitcast i32* %177 to <4 x i32>*
%179 = load <4 x i32>, <4 x i32>* %178
%180 = add <4 x i32> %176, %171
%181 = add <4 x i32> %179, %172
%182 = add nuw i64 %170, 8
%183 = add i64 %173, 1
%184 = icmp eq i64 %183, %102
br i1 %184, label %185, label %169
185: ; preds = %169, %163
%186 = phi <4 x i32> [ %164, %163 ], [ %180, %169 ]
%187 = phi <4 x i32> [ %165, %163 ], [ %181, %169 ]
%188 = add <4 x i32> %187, %186
%189 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %188)
br i1 %106, label %207, label %190
190: ; preds = %117, %185
%191 = phi i64 [ 0, %117 ], [ %101, %185 ]
%192 = phi i32 [ 0, %117 ], [ %189, %185 ]
br label %199
193: ; preds = %115
br i1 %93, label %194, label %260
194: ; preds = %193
%195 = zext i32 %1 to i64
%196 = icmp ult i32 %1, 8
%197 = and i64 %5, 4294967288
%198 = icmp eq i64 %197, %5
br label %213
199: ; preds = %190, %199
%200 = phi i64 [ %205, %199 ], [ %191, %190 ]
%201 = phi i32 [ %204, %199 ], [ %192, %190 ]
%202 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %118, i64 %200
%203 = load i32, i32* %202
%204 = add nsw i32 %203, %201
%205 = add nuw nsw i64 %200, 1
%206 = icmp eq i64 %205, %95
br i1 %206, label %207, label %199
207: ; preds = %199, %185
%208 = phi i32 [ %189, %185 ], [ %204, %199 ]
%209 = icmp eq i32 %92, %208
%210 = add nuw nsw i64 %118, 1
br i1 %209, label %115, label %371
211: ; preds = %269
%212 = icmp eq i64 %272, %195
br i1 %212, label %260, label %213
213: ; preds = %211, %194
%214 = phi i64 [ 1, %194 ], [ %272, %211 ]
br i1 %196, label %257, label %215
215: ; preds = %213, %215
%216 = phi i64 [ %252, %215 ], [ 0, %213 ]
%217 = phi <4 x i32> [ %250, %215 ], [ zeroinitializer, %213 ]
%218 = phi <4 x i32> [ %251, %215 ], [ zeroinitializer, %213 ]
%219 = or i64 %216, 1
%220 = or i64 %216, 2
%221 = or i64 %216, 3
%222 = or i64 %216, 4
%223 = or i64 %216, 5
%224 = or i64 %216, 6
%225 = or i64 %216, 7
%226 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %216, i64 %214
%227 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %219, i64 %214
%228 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %220, i64 %214
%229 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %221, i64 %214
%230 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %222, i64 %214
%231 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %223, i64 %214
%232 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %224, i64 %214
%233 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %225, i64 %214
%234 = load i32, i32* %226
%235 = load i32, i32* %227
%236 = load i32, i32* %228
%237 = load i32, i32* %229
%238 = insertelement <4 x i32> poison, i32 %234, i64 0
%239 = insertelement <4 x i32> %238, i32 %235, i64 1
%240 = insertelement <4 x i32> %239, i32 %236, i64 2
%241 = insertelement <4 x i32> %240, i32 %237, i64 3
%242 = load i32, i32* %230
%243 = load i32, i32* %231
%244 = load i32, i32* %232
%245 = load i32, i32* %233
%246 = insertelement <4 x i32> poison, i32 %242, i64 0
%247 = insertelement <4 x i32> %246, i32 %243, i64 1
%248 = insertelement <4 x i32> %247, i32 %244, i64 2
%249 = insertelement <4 x i32> %248, i32 %245, i64 3
%250 = add <4 x i32> %241, %217
%251 = add <4 x i32> %249, %218
%252 = add nuw i64 %216, 8
%253 = icmp eq i64 %252, %197
br i1 %253, label %254, label %215
254: ; preds = %215
%255 = add <4 x i32> %251, %250
%256 = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> %255)
br i1 %198, label %269, label %257
257: ; preds = %213, %254
%258 = phi i64 [ 0, %213 ], [ %197, %254 ]
%259 = phi i32 [ 0, %213 ], [ %256, %254 ]
br label %261
260: ; preds = %211, %91, %193
br i1 %3, label %283, label %366
261: ; preds = %257, %261
%262 = phi i64 [ %267, %261 ], [ %258, %257 ]
%263 = phi i32 [ %266, %261 ], [ %259, %257 ]
%264 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %262, i64 %214
%265 = load i32, i32* %264
%266 = add nsw i32 %265, %263
%267 = add nuw nsw i64 %262, 1
%268 = icmp eq i64 %267, %195
br i1 %268, label %269, label %261
269: ; preds = %261, %254
%270 = phi i32 [ %256, %254 ], [ %266, %261 ]
%271 = icmp eq i32 %92, %270
%272 = add nuw nsw i64 %214, 1
br i1 %271, label %211, label %371
273: ; preds = %304
%274 = icmp slt i32 %306, %1
br i1 %274, label %300, label %275
275: ; preds = %273
br i1 %3, label %276, label %366
276: ; preds = %275
%277 = zext i32 %1 to i64
%278 = add nsw i64 %5, -1
%279 = and i64 %5, 3
%280 = icmp ult i64 %278, 3
%281 = and i64 %5, 4294967292
%282 = icmp eq i64 %279, 0
br label %307
283: ; preds = %260, %300
%284 = phi i32 [ %301, %300 ], [ 0, %260 ]
%285 = phi i32 [ %302, %300 ], [ 0, %260 ]
%286 = phi i32 [ %303, %300 ], [ 0, %260 ]
%287 = icmp eq i32 %285, %286
br i1 %287, label %288, label %294
288: ; preds = %283
%289 = sext i32 %285 to i64
%290 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %289, i64 %289
%291 = load i32, i32* %290
%292 = add nsw i32 %291, %284
%293 = add nsw i32 %285, 1
br label %294
294: ; preds = %283, %288
%295 = phi i32 [ %293, %288 ], [ %286, %283 ]
%296 = phi i32 [ %293, %288 ], [ %285, %283 ]
%297 = phi i32 [ %292, %288 ], [ %284, %283 ]
%298 = add nsw i32 %296, 1
%299 = icmp slt i32 %298, %1
br i1 %299, label %300, label %304
300: ; preds = %294, %273
%301 = phi i32 [ %297, %294 ], [ %92, %273 ]
%302 = phi i32 [ %298, %294 ], [ 0, %273 ]
%303 = phi i32 [ %295, %294 ], [ %306, %273 ]
br label %283
304: ; preds = %294
%305 = icmp eq i32 %92, %297
%306 = add nsw i32 %295, 1
br i1 %305, label %273, label %371
307: ; preds = %362, %276
%308 = phi i64 [ 0, %276 ], [ %364, %362 ]
%309 = phi i32 [ 0, %276 ], [ %363, %362 ]
%310 = getelementptr inbounds [999 x i32], [999 x i32]* %0, i64 %308, i64 %308
br i1 %280, label %345, label %311
311: ; preds = %307, %340
%312 = phi i64 [ %342, %340 ], [ 0, %307 ]
%313 = phi i32 [ %341, %340 ], [ %309, %307 ]
%314 = phi i64 [ %343, %340 ], [ 0, %307 ]
%315 = icmp eq i64 %308, %312
br i1 %315, label %316, label %319
316: ; preds = %311
%317 = load i32, i32* %310
%318 = add nsw i32 %317, %313
br label %319
319: ; preds = %311, %316
%320 = phi i32 [ %318, %316 ], [ %313, %311 ]
%321 = or i64 %312, 1
%322 = icmp eq i64 %308, %321
br i1 %322, label %323, label %326
323: ; preds = %319
%324 = load i32, i32* %310
%325 = add nsw i32 %324, %320
br label %326
326: ; preds = %323, %319
%327 = phi i32 [ %325, %323 ], [ %320, %319 ]
%328 = or i64 %312, 2
%329 = icmp eq i64 %308, %328
br i1 %329, label %330, label %333
330: ; preds = %326
%331 = load i32, i32* %310
%332 = add nsw i32 %331, %327
br label %333
333: ; preds = %330, %326
%334 = phi i32 [ %332, %330 ], [ %327, %326 ]
%335 = or i64 %312, 3
%336 = icmp eq i64 %308, %335
br i1 %336, label %337, label %340
337: ; preds = %333
%338 = load i32, i32* %310
%339 = add nsw i32 %338, %334
br label %340
340: ; preds = %337, %333
%341 = phi i32 [ %339, %337 ], [ %334, %333 ]
%342 = add nuw nsw i64 %312, 4
%343 = add i64 %314, 4
%344 = icmp eq i64 %343, %281
br i1 %344, label %345, label %311
345: ; preds = %340, %307
%346 = phi i32 [ undef, %307 ], [ %341, %340 ]
%347 = phi i64 [ 0, %307 ], [ %342, %340 ]
%348 = phi i32 [ %309, %307 ], [ %341, %340 ]
br i1 %282, label %362, label %349
349: ; preds = %345, %357
%350 = phi i64 [ %359, %357 ], [ %347, %345 ]
%351 = phi i32 [ %358, %357 ], [ %348, %345 ]
%352 = phi i64 [ %360, %357 ], [ 0, %345 ]
%353 = icmp eq i64 %308, %350
br i1 %353, label %354, label %357
354: ; preds = %349
%355 = load i32, i32* %310
%356 = add nsw i32 %355, %351
br label %357
357: ; preds = %354, %349
%358 = phi i32 [ %356, %354 ], [ %351, %349 ]
%359 = add nuw nsw i64 %350, 1
%360 = add i64 %352, 1
%361 = icmp eq i64 %360, %279
br i1 %361, label %362, label %349
362: ; preds = %357, %345
%363 = phi i32 [ %346, %345 ], [ %358, %357 ]
%364 = add nuw nsw i64 %308, 1
%365 = icmp eq i64 %364, %277
br i1 %365, label %366, label %307
366: ; preds = %362, %2, %260, %275
%367 = phi i32 [ %92, %275 ], [ %92, %260 ], [ 0, %2 ], [ %92, %362 ]
%368 = phi i32 [ 0, %275 ], [ 0, %260 ], [ 0, %2 ], [ %363, %362 ]
%369 = icmp eq i32 %368, %367
%370 = zext i1 %369 to i32
br label %371
371: ; preds = %207, %269, %304, %366
%372 = phi i32 [ %370, %366 ], [ 0, %304 ], [ 0, %269 ], [ 0, %207 ]
ret i32 %372
}