int safe(int mat[8][8], int i, int j) {
  int k, l, check = 1;
  k = i;
  l = j;
  for (j = 0; j < 8; ++j) {
    if (j == l) {
      continue;
    } else if (mat[i][j] != 0) {
      check = 0;
      break;
    }
  }
  if (check == 1) {
    j = l;
    for (i = 0; i < 8; ++i) {
      if (i == k) {
        continue;
      } else if (mat[i][j] != 0) {
        check = 0;
        break;
      }
    }
  }
  if (check == 1) {
    i = k;
    j = l;
    if (j > i) {
      for ((i = 0, j = l - k); j < 8; (++i, ++j)) {
        if ((i == k) || (j == l)) {
          continue;
        } else if (mat[i][j] != 0) {
          check = 0;
          break;
        }
      }
    } else {
      for ((j = 0, i = k - l); i < 8; (++i, ++j)) {
        if ((i == k) || (j == l)) {
          continue;
        } else if (mat[i][j] != 0) {
          check = 0;
          break;
        }
      }
    }
  }
  if (check == 1) {
    i = k;
    j = l;
    if (i + j < 7) {
      for ((j = 0, i = (k + l)); i > 0; (++j, --i)) {
        if ((j == l) || (i == k)) {
          continue;
        } else if (mat[i][j] != 0) {
          check = 0;
          break;
        }
      }
    } else {
      for ((i = 7, j = (k + l - 7)); j < 8; (++j, --k)) {
        if ((j == l) || (i == k)) {
          continue;
        } else if (mat[i][j] != 0) {
          check = 0;
          break;
        }
      }
    }
  }
  return check;
}


x86 assembly (clang, -O0):
<safe>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
movl   $0x1,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,-0x18(%rbp)
movl   $0x0,-0x10(%rbp)
cmpl   $0x8,-0x10(%rbp)
jge    1184 <safe+0x84>
mov    -0x10(%rbp),%eax
cmp    -0x18(%rbp),%eax
jne    1143 <safe+0x43>
jmp    1176 <safe+0x76>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     116c <safe+0x6c>
movl   $0x0,-0x1c(%rbp)
jmp    1184 <safe+0x84>
jmp    1171 <safe+0x71>
jmp    1176 <safe+0x76>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1128 <safe+0x28>
cmpl   $0x1,-0x1c(%rbp)
jne    11fc <safe+0xfc>
mov    -0x18(%rbp),%eax
mov    %eax,-0x10(%rbp)
movl   $0x0,-0xc(%rbp)
cmpl   $0x8,-0xc(%rbp)
jge    11f7 <safe+0xf7>
mov    -0xc(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    11b6 <safe+0xb6>
jmp    11e9 <safe+0xe9>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     11df <safe+0xdf>
movl   $0x0,-0x1c(%rbp)
jmp    11f7 <safe+0xf7>
jmp    11e4 <safe+0xe4>
jmp    11e9 <safe+0xe9>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    119b <safe+0x9b>
jmp    11fc <safe+0xfc>
cmpl   $0x1,-0x1c(%rbp)
jne    132f <safe+0x22f>
mov    -0x14(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    12a4 <safe+0x1a4>
movl   $0x0,-0xc(%rbp)
mov    -0x18(%rbp),%eax
sub    -0x14(%rbp),%eax
mov    %eax,-0x10(%rbp)
cmpl   $0x8,-0x10(%rbp)
jge    129f <safe+0x19f>
mov    -0xc(%rbp),%eax
cmp    -0x14(%rbp),%eax
je     1250 <safe+0x150>
mov    -0x10(%rbp),%eax
cmp    -0x18(%rbp),%eax
jne    1255 <safe+0x155>
jmp    1288 <safe+0x188>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     127e <safe+0x17e>
movl   $0x0,-0x1c(%rbp)
jmp    129f <safe+0x19f>
jmp    1283 <safe+0x183>
jmp    1288 <safe+0x188>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    122e <safe+0x12e>
jmp    132a <safe+0x22a>
movl   $0x0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
sub    -0x18(%rbp),%eax
mov    %eax,-0xc(%rbp)
cmpl   $0x8,-0xc(%rbp)
jge    1325 <safe+0x225>
mov    -0xc(%rbp),%eax
cmp    -0x14(%rbp),%eax
je     12d6 <safe+0x1d6>
mov    -0x10(%rbp),%eax
cmp    -0x18(%rbp),%eax
jne    12db <safe+0x1db>
jmp    130e <safe+0x20e>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     1304 <safe+0x204>
movl   $0x0,-0x1c(%rbp)
jmp    1325 <safe+0x225>
jmp    1309 <safe+0x209>
jmp    130e <safe+0x20e>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    12b4 <safe+0x1b4>
jmp    132a <safe+0x22a>
jmp    132f <safe+0x22f>
cmpl   $0x1,-0x1c(%rbp)
jne    1468 <safe+0x368>
mov    -0x14(%rbp),%eax
mov    %eax,-0xc(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x10(%rbp)
mov    -0xc(%rbp),%eax
add    -0x10(%rbp),%eax
cmp    $0x7,%eax
jge    13da <safe+0x2da>
movl   $0x0,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0xc(%rbp)
cmpl   $0x0,-0xc(%rbp)
jle    13d5 <safe+0x2d5>
mov    -0x10(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     1386 <safe+0x286>
mov    -0xc(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    138b <safe+0x28b>
jmp    13be <safe+0x2be>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     13b4 <safe+0x2b4>
movl   $0x0,-0x1c(%rbp)
jmp    13d5 <safe+0x2d5>
jmp    13b9 <safe+0x2b9>
jmp    13be <safe+0x2be>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
jmp    1364 <safe+0x264>
jmp    1463 <safe+0x363>
movl   $0x7,-0xc(%rbp)
mov    -0x14(%rbp),%eax
add    -0x18(%rbp),%eax
sub    $0x7,%eax
mov    %eax,-0x10(%rbp)
cmpl   $0x8,-0x10(%rbp)
jge    145e <safe+0x35e>
mov    -0x10(%rbp),%eax
cmp    -0x18(%rbp),%eax
je     140f <safe+0x30f>
mov    -0xc(%rbp),%eax
cmp    -0x14(%rbp),%eax
jne    1414 <safe+0x314>
jmp    1447 <safe+0x347>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
cmpl   $0x0,(%rax,%rcx,4)
je     143d <safe+0x33d>
movl   $0x0,-0x1c(%rbp)
jmp    145e <safe+0x35e>
jmp    1442 <safe+0x342>
jmp    1447 <safe+0x347>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    13ed <safe+0x2ed>
jmp    1463 <safe+0x363>
jmp    1468 <safe+0x368>
mov    -0x1c(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<safe>:
push   %rbx
movslq %esi,%rbx
mov    %rbx,%rcx
shl    $0x5,%rcx
xor    %eax,%eax
test   %edx,%edx
je     113d <safe+0x3d>
cmpl   $0x0,(%rdi,%rcx,1)
jne    127a <safe+0x17a>
cmp    $0x1,%edx
je     1148 <safe+0x48>
cmpl   $0x0,0x4(%rdi,%rcx,1)
jne    127a <safe+0x17a>
cmp    $0x2,%edx
jne    1148 <safe+0x48>
cmpl   $0x0,0xc(%rdi,%rcx,1)
jne    127a <safe+0x17a>
jmp    1161 <safe+0x61>
cmpl   $0x0,0x4(%rdi,%rcx,1)
jne    127a <safe+0x17a>
mov    %rbx,%rcx
shl    $0x5,%rcx
xor    %eax,%eax
cmpl   $0x0,0x8(%rdi,%rcx,1)
jne    127a <safe+0x17a>
cmp    $0x3,%edx
jne    118c <safe+0x8c>
mov    %rbx,%rcx
shl    $0x5,%rcx
xor    %eax,%eax
cmpl   $0x0,0x10(%rdi,%rcx,1)
jne    127a <safe+0x17a>
cmp    $0x5,%edx
je     11a7 <safe+0xa7>
cmpl   $0x0,0x14(%rdi,%rcx,1)
jne    127a <safe+0x17a>
cmp    $0x6,%edx
jne    11a7 <safe+0xa7>
jmp    11c0 <safe+0xc0>
cmpl   $0x0,0xc(%rdi,%rcx,1)
jne    127a <safe+0x17a>
cmp    $0x4,%edx
jne    1161 <safe+0x61>
cmpl   $0x0,0x14(%rdi,%rcx,1)
jne    127a <safe+0x17a>
mov    %rbx,%rcx
shl    $0x5,%rcx
xor    %eax,%eax
cmpl   $0x0,0x18(%rdi,%rcx,1)
jne    127a <safe+0x17a>
cmp    $0x7,%edx
je     11d4 <safe+0xd4>
mov    %rbx,%rcx
shl    $0x5,%rcx
xor    %eax,%eax
cmpl   $0x0,0x1c(%rdi,%rcx,1)
jne    127a <safe+0x17a>
movslq %edx,%r8
xor    %eax,%eax
test   %esi,%esi
je     1208 <safe+0x108>
cmpl   $0x0,(%rdi,%r8,4)
jne    127a <safe+0x17a>
cmp    $0x1,%esi
je     1210 <safe+0x110>
cmpl   $0x0,0x20(%rdi,%r8,4)
jne    127a <safe+0x17a>
cmp    $0x2,%esi
jne    1210 <safe+0x110>
cmpl   $0x0,0x60(%rdi,%r8,4)
jne    127a <safe+0x17a>
jmp    121f <safe+0x11f>
cmpl   $0x0,0x20(%rdi,%r8,4)
jne    127a <safe+0x17a>
xor    %eax,%eax
cmpl   $0x0,0x40(%rdi,%r8,4)
jne    127a <safe+0x17a>
cmp    $0x3,%esi
jne    1243 <safe+0x143>
xor    %eax,%eax
cmpl   $0x0,0x80(%rdi,%r8,4)
jne    127a <safe+0x17a>
cmp    $0x5,%esi
je     125b <safe+0x15b>
cmpl   $0x0,0xa0(%rdi,%r8,4)
jne    127a <safe+0x17a>
cmp    $0x6,%esi
jne    125b <safe+0x15b>
jmp    126d <safe+0x16d>
cmpl   $0x0,0x60(%rdi,%r8,4)
jne    127a <safe+0x17a>
cmp    $0x4,%esi
jne    121f <safe+0x11f>
cmpl   $0x0,0xa0(%rdi,%r8,4)
jne    127a <safe+0x17a>
xor    %eax,%eax
cmpl   $0x0,0xc0(%rdi,%r8,4)
jne    127a <safe+0x17a>
cmp    $0x7,%esi
je     127c <safe+0x17c>
xor    %eax,%eax
cmpl   $0x0,0xe0(%rdi,%r8,4)
je     127c <safe+0x17c>
pop    %rbx
ret
mov    %edx,%r10d
mov    %esi,%r9d
mov    %edx,%r11d
sub    %esi,%r11d
jle    12c9 <safe+0x1c9>
cmp    $0x7,%r11d
jg     1304 <safe+0x204>
movslq %r11d,%rcx
mov    %esi,%eax
sub    %edx,%eax
add    $0x8,%eax
mov    %r8,%r11
sub    %rcx,%r11
lea    (%rdi,%rcx,4),%rcx
xor    %ebx,%ebx
jmp    12b5 <safe+0x1b5>
add    $0x1,%rbx
add    $0x24,%rcx
cmp    %rbx,%rax
je     1304 <safe+0x204>
cmp    %rbx,%r9
je     12a8 <safe+0x1a8>
cmp    %rbx,%r11
je     12a8 <safe+0x1a8>
cmpl   $0x0,(%rcx)
je     12a8 <safe+0x1a8>
jmp    1365 <safe+0x265>
mov    %esi,%eax
sub    %edx,%eax
cmp    $0x7,%eax
jg     1304 <safe+0x204>
cltq
add    $0x8,%r11d
sub    %rax,%rbx
shl    $0x5,%rax
add    %rdi,%rax
xor    %ecx,%ecx
jmp    12f3 <safe+0x1f3>
add    $0x1,%rcx
add    $0x24,%rax
cmp    %rcx,%r11
je     1304 <safe+0x204>
cmp    %rcx,%rbx
je     12e6 <safe+0x1e6>
cmp    %rcx,%r10
je     12e6 <safe+0x1e6>
cmpl   $0x0,(%rax)
je     12e6 <safe+0x1e6>
jmp    1365 <safe+0x265>
add    %esi,%edx
cmp    $0x6,%edx
jg     1369 <safe+0x269>
mov    $0x1,%eax
test   %edx,%edx
jle    127a <safe+0x17a>
mov    %edx,%ecx
lea    (%r10,%r10,8),%rdx
lea    (%rdx,%rdx,2),%r8
add    %r10,%r8
mov    %rcx,%rdx
shl    $0x5,%rdx
add    %rdx,%rdi
lea    (%rcx,%rcx,8),%rdx
lea    (%rdx,%rdx,2),%r10
add    %rcx,%r10
xor    %edx,%edx
jmp    1352 <safe+0x252>
add    $0xffffffffffffffff,%rcx
add    $0xffffffffffffffe4,%rdx
mov    %r10,%rsi
add    %rdx,%rsi
je     127a <safe+0x17a>
mov    %r8,%rbx
add    %rdx,%rbx
je     133e <safe+0x23e>
cmp    %rcx,%r9
je     133e <safe+0x23e>
cmpl   $0x0,(%rdi,%rdx,1)
je     133e <safe+0x23e>
xor    %eax,%eax
pop    %rbx
ret
cmp    $0xe,%edx
ja     1472 <safe+0x372>
add    $0xfffffff9,%edx
cmp    %r8,%rdx
je     138f <safe+0x28f>
cmp    $0x7,%esi
je     138f <safe+0x28f>
xor    %eax,%eax
cmpl   $0x0,0xe0(%rdi,%rdx,4)
jne    127a <safe+0x17a>
cmp    $0x6,%edx
ja     1472 <safe+0x372>
lea    0x1(%rdx),%rax
cmp    %r8,%rax
je     13b6 <safe+0x2b6>
cmp    $0x8,%esi
je     13b6 <safe+0x2b6>
xor    %eax,%eax
cmpl   $0x0,0xe4(%rdi,%rdx,4)
jne    127a <safe+0x17a>
cmp    $0x5,%edx
ja     1472 <safe+0x372>
lea    0x2(%rdx),%rax
cmp    %r8,%rax
je     13dd <safe+0x2dd>
cmp    $0x9,%esi
je     13dd <safe+0x2dd>
xor    %eax,%eax
cmpl   $0x0,0xe8(%rdi,%rdx,4)
jne    127a <safe+0x17a>
cmp    $0x4,%edx
ja     1472 <safe+0x372>
lea    0x3(%rdx),%rax
cmp    %r8,%rax
je     1404 <safe+0x304>
cmp    $0xa,%esi
je     1404 <safe+0x304>
xor    %eax,%eax
cmpl   $0x0,0xec(%rdi,%rdx,4)
jne    127a <safe+0x17a>
cmp    $0x3,%edx
ja     1472 <safe+0x372>
lea    0x4(%rdx),%rax
cmp    %r8,%rax
je     1427 <safe+0x327>
cmp    $0xb,%esi
je     1427 <safe+0x327>
xor    %eax,%eax
cmpl   $0x0,0xf0(%rdi,%rdx,4)
jne    127a <safe+0x17a>
cmp    $0x2,%edx
ja     1472 <safe+0x372>
lea    0x5(%rdx),%rax
cmp    %r8,%rax
je     144a <safe+0x34a>
cmp    $0xc,%esi
je     144a <safe+0x34a>
xor    %eax,%eax
cmpl   $0x0,0xf4(%rdi,%rdx,4)
jne    127a <safe+0x17a>
cmp    $0x1,%edx
ja     1472 <safe+0x372>
lea    0x6(%rdx),%rax
cmp    %r8,%rax
je     146d <safe+0x36d>
cmp    $0xd,%esi
je     146d <safe+0x36d>
xor    %eax,%eax
cmpl   $0x0,0xf8(%rdi,%rdx,4)
jne    127a <safe+0x17a>
test   %rdx,%rdx
je     1479 <safe+0x379>
mov    $0x1,%eax
pop    %rbx
ret
lea    0x7(%rdx),%rax
cmp    %r8,%rax
je     1472 <safe+0x372>
cmp    $0xe,%esi
je     1472 <safe+0x372>
xor    %eax,%eax
cmpl   $0x0,0xfc(%rdi,%rdx,4)
jne    127a <safe+0x17a>
jmp    1472 <safe+0x372>

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

LLVM IR (-O2):
define i32 @safe([8 x i32]* nocapture %0, i32 %1, i32 %2) {
%4 = sext i32 %1 to i64
%5 = zext i32 %2 to i64
%6 = icmp eq i32 %2, 0
br i1 %6, label %17, label %7
7: ; preds = %3
%8 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %4, i64 0
%9 = load i32, i32* %8
%10 = icmp eq i32 %9, 0
br i1 %10, label %11, label %284
11: ; preds = %7
%12 = icmp eq i32 %2, 1
br i1 %12, label %23, label %13
13: ; preds = %11
%14 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %4, i64 1
%15 = load i32, i32* %14
%16 = icmp eq i32 %15, 0
br i1 %16, label %21, label %284
17: ; preds = %3
%18 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %4, i64 1
%19 = load i32, i32* %18
%20 = icmp eq i32 %19, 0
br i1 %20, label %23, label %284
21: ; preds = %13
%22 = icmp eq i32 %2, 2
br i1 %22, label %33, label %23
23: ; preds = %17, %11, %21
%24 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %4, i64 2
%25 = load i32, i32* %24
%26 = icmp eq i32 %25, 0
br i1 %26, label %27, label %284
27: ; preds = %23
%28 = icmp eq i32 %2, 3
br i1 %28, label %39, label %29
29: ; preds = %27
%30 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %4, i64 3
%31 = load i32, i32* %30
%32 = icmp eq i32 %31, 0
br i1 %32, label %37, label %284
33: ; preds = %21
%34 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %4, i64 3
%35 = load i32, i32* %34
%36 = icmp eq i32 %35, 0
br i1 %36, label %39, label %284
37: ; preds = %29
%38 = icmp eq i32 %2, 4
br i1 %38, label %49, label %39
39: ; preds = %33, %27, %37
%40 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %4, i64 4
%41 = load i32, i32* %40
%42 = icmp eq i32 %41, 0
br i1 %42, label %43, label %284
43: ; preds = %39
%44 = icmp eq i32 %2, 5
br i1 %44, label %55, label %45
45: ; preds = %43
%46 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %4, i64 5
%47 = load i32, i32* %46
%48 = icmp eq i32 %47, 0
br i1 %48, label %53, label %284
49: ; preds = %37
%50 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %4, i64 5
%51 = load i32, i32* %50
%52 = icmp eq i32 %51, 0
br i1 %52, label %55, label %284
53: ; preds = %45
%54 = icmp eq i32 %2, 6
br i1 %54, label %61, label %55
55: ; preds = %49, %43, %53
%56 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %4, i64 6
%57 = load i32, i32* %56
%58 = icmp eq i32 %57, 0
br i1 %58, label %59, label %284
59: ; preds = %55
%60 = icmp eq i32 %2, 7
br i1 %60, label %65, label %61
61: ; preds = %53, %59
%62 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %4, i64 7
%63 = load i32, i32* %62
%64 = icmp eq i32 %63, 0
br i1 %64, label %65, label %284
65: ; preds = %61, %59
%66 = sext i32 %2 to i64
%67 = zext i32 %1 to i64
%68 = icmp eq i32 %1, 0
br i1 %68, label %79, label %69
69: ; preds = %65
%70 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 0, i64 %66
%71 = load i32, i32* %70
%72 = icmp eq i32 %71, 0
br i1 %72, label %73, label %284
73: ; preds = %69
%74 = icmp eq i32 %1, 1
br i1 %74, label %85, label %75
75: ; preds = %73
%76 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 1, i64 %66
%77 = load i32, i32* %76
%78 = icmp eq i32 %77, 0
br i1 %78, label %83, label %284
79: ; preds = %65
%80 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 1, i64 %66
%81 = load i32, i32* %80
%82 = icmp eq i32 %81, 0
br i1 %82, label %85, label %284
83: ; preds = %75
%84 = icmp eq i32 %1, 2
br i1 %84, label %95, label %85
85: ; preds = %79, %73, %83
%86 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 2, i64 %66
%87 = load i32, i32* %86
%88 = icmp eq i32 %87, 0
br i1 %88, label %89, label %284
89: ; preds = %85
%90 = icmp eq i32 %1, 3
br i1 %90, label %101, label %91
91: ; preds = %89
%92 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 3, i64 %66
%93 = load i32, i32* %92
%94 = icmp eq i32 %93, 0
br i1 %94, label %99, label %284
95: ; preds = %83
%96 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 3, i64 %66
%97 = load i32, i32* %96
%98 = icmp eq i32 %97, 0
br i1 %98, label %101, label %284
99: ; preds = %91
%100 = icmp eq i32 %1, 4
br i1 %100, label %111, label %101
101: ; preds = %95, %89, %99
%102 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 4, i64 %66
%103 = load i32, i32* %102
%104 = icmp eq i32 %103, 0
br i1 %104, label %105, label %284
105: ; preds = %101
%106 = icmp eq i32 %1, 5
br i1 %106, label %117, label %107
107: ; preds = %105
%108 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 5, i64 %66
%109 = load i32, i32* %108
%110 = icmp eq i32 %109, 0
br i1 %110, label %115, label %284
111: ; preds = %99
%112 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 5, i64 %66
%113 = load i32, i32* %112
%114 = icmp eq i32 %113, 0
br i1 %114, label %117, label %284
115: ; preds = %107
%116 = icmp eq i32 %1, 6
br i1 %116, label %123, label %117
117: ; preds = %111, %105, %115
%118 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 6, i64 %66
%119 = load i32, i32* %118
%120 = icmp eq i32 %119, 0
br i1 %120, label %121, label %284
121: ; preds = %117
%122 = icmp eq i32 %1, 7
br i1 %122, label %127, label %123
123: ; preds = %115, %121
%124 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 7, i64 %66
%125 = load i32, i32* %124
%126 = icmp eq i32 %125, 0
br i1 %126, label %127, label %284
127: ; preds = %123, %121
%128 = icmp sgt i32 %2, %1
br i1 %128, label %129, label %151
129: ; preds = %127
%130 = sub i32 %2, %1
%131 = icmp slt i32 %130, 8
br i1 %131, label %132, label %173
132: ; preds = %129
%133 = sext i32 %130 to i64
%134 = add i32 %1, 8
%135 = sub i32 %134, %2
%136 = zext i32 %135 to i64
br label %137
137: ; preds = %132, %147
%138 = phi i64 [ %133, %132 ], [ %149, %147 ]
%139 = phi i64 [ 0, %132 ], [ %148, %147 ]
%140 = icmp eq i64 %139, %67
%141 = icmp eq i64 %138, %66
%142 = select i1 %140, i1 true, i1 %141
br i1 %142, label %147, label %143
143: ; preds = %137
%144 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %139, i64 %138
%145 = load i32, i32* %144
%146 = icmp eq i32 %145, 0
br i1 %146, label %147, label %284
147: ; preds = %143, %137
%148 = add nuw nsw i64 %139, 1
%149 = add nsw i64 %138, 1
%150 = icmp eq i64 %148, %136
br i1 %150, label %173, label %137
151: ; preds = %127
%152 = sub i32 %1, %2
%153 = icmp slt i32 %152, 8
br i1 %153, label %154, label %173
154: ; preds = %151
%155 = sext i32 %152 to i64
%156 = add i32 %2, 8
%157 = sub i32 %156, %1
%158 = zext i32 %157 to i64
br label %159
159: ; preds = %154, %169
%160 = phi i64 [ 0, %154 ], [ %171, %169 ]
%161 = phi i64 [ %155, %154 ], [ %170, %169 ]
%162 = icmp eq i64 %161, %4
%163 = icmp eq i64 %160, %5
%164 = select i1 %162, i1 true, i1 %163
br i1 %164, label %169, label %165
165: ; preds = %159
%166 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %161, i64 %160
%167 = load i32, i32* %166
%168 = icmp eq i32 %167, 0
br i1 %168, label %169, label %284
169: ; preds = %165, %159
%170 = add nsw i64 %161, 1
%171 = add nuw nsw i64 %160, 1
%172 = icmp eq i64 %171, %158
br i1 %172, label %173, label %159
173: ; preds = %169, %147, %151, %129
%174 = add i32 %2, %1
%175 = icmp slt i32 %174, 7
br i1 %175, label %176, label %194
176: ; preds = %173
%177 = icmp sgt i32 %174, 0
br i1 %177, label %178, label %284
178: ; preds = %176
%179 = zext i32 %174 to i64
br label %180
180: ; preds = %178, %190
%181 = phi i64 [ 0, %178 ], [ %191, %190 ]
%182 = phi i64 [ %179, %178 ], [ %192, %190 ]
%183 = icmp eq i64 %181, %5
%184 = icmp eq i64 %182, %67
%185 = select i1 %183, i1 true, i1 %184
br i1 %185, label %190, label %186
186: ; preds = %180
%187 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 %182, i64 %181
%188 = load i32, i32* %187
%189 = icmp eq i32 %188, 0
br i1 %189, label %190, label %284
190: ; preds = %186, %180
%191 = add nuw nsw i64 %181, 1
%192 = add nsw i64 %182, -1
%193 = icmp eq i64 %191, %179
br i1 %193, label %284, label %180
194: ; preds = %173
%195 = icmp ult i32 %174, 15
br i1 %195, label %196, label %284
196: ; preds = %194
%197 = add nsw i32 %174, -7
%198 = zext i32 %197 to i64
%199 = icmp eq i64 %198, %66
%200 = icmp eq i32 %1, 7
%201 = or i1 %199, %200
br i1 %201, label %206, label %202
202: ; preds = %196
%203 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 7, i64 %198
%204 = load i32, i32* %203
%205 = icmp eq i32 %204, 0
br i1 %205, label %206, label %284
206: ; preds = %202, %196
%207 = add nuw nsw i64 %198, 1
%208 = icmp ult i32 %197, 7
br i1 %208, label %209, label %284
209: ; preds = %206
%210 = icmp eq i64 %207, %66
%211 = icmp eq i32 %1, 8
%212 = or i1 %210, %211
br i1 %212, label %217, label %213
213: ; preds = %209
%214 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 7, i64 %207
%215 = load i32, i32* %214
%216 = icmp eq i32 %215, 0
br i1 %216, label %217, label %284
217: ; preds = %213, %209
%218 = add nuw nsw i64 %198, 2
%219 = icmp ult i32 %197, 6
br i1 %219, label %220, label %284
220: ; preds = %217
%221 = icmp eq i64 %218, %66
%222 = icmp eq i32 %1, 9
%223 = or i1 %221, %222
br i1 %223, label %228, label %224
224: ; preds = %220
%225 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 7, i64 %218
%226 = load i32, i32* %225
%227 = icmp eq i32 %226, 0
br i1 %227, label %228, label %284
228: ; preds = %224, %220
%229 = add nuw nsw i64 %198, 3
%230 = icmp ult i32 %197, 5
br i1 %230, label %231, label %284
231: ; preds = %228
%232 = icmp eq i64 %229, %66
%233 = icmp eq i32 %1, 10
%234 = or i1 %232, %233
br i1 %234, label %239, label %235
235: ; preds = %231
%236 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 7, i64 %229
%237 = load i32, i32* %236
%238 = icmp eq i32 %237, 0
br i1 %238, label %239, label %284
239: ; preds = %235, %231
%240 = add nuw nsw i64 %198, 4
%241 = icmp ult i32 %197, 4
br i1 %241, label %242, label %284
242: ; preds = %239
%243 = icmp eq i64 %240, %66
%244 = icmp eq i32 %1, 11
%245 = or i1 %243, %244
br i1 %245, label %250, label %246
246: ; preds = %242
%247 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 7, i64 %240
%248 = load i32, i32* %247
%249 = icmp eq i32 %248, 0
br i1 %249, label %250, label %284
250: ; preds = %246, %242
%251 = add nuw nsw i64 %198, 5
%252 = icmp ult i32 %197, 3
br i1 %252, label %253, label %284
253: ; preds = %250
%254 = icmp eq i64 %251, %66
%255 = icmp eq i32 %1, 12
%256 = or i1 %254, %255
br i1 %256, label %261, label %257
257: ; preds = %253
%258 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 7, i64 %251
%259 = load i32, i32* %258
%260 = icmp eq i32 %259, 0
br i1 %260, label %261, label %284
261: ; preds = %257, %253
%262 = add nuw nsw i64 %198, 6
%263 = icmp ult i32 %197, 2
br i1 %263, label %264, label %284
264: ; preds = %261
%265 = icmp eq i64 %262, %66
%266 = icmp eq i32 %1, 13
%267 = or i1 %265, %266
br i1 %267, label %272, label %268
268: ; preds = %264
%269 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 7, i64 %262
%270 = load i32, i32* %269
%271 = icmp eq i32 %270, 0
br i1 %271, label %272, label %284
272: ; preds = %268, %264
%273 = add nuw nsw i64 %198, 7
%274 = icmp eq i32 %197, 0
br i1 %274, label %275, label %284
275: ; preds = %272
%276 = icmp eq i64 %273, %66
%277 = icmp eq i32 %1, 14
%278 = or i1 %276, %277
br i1 %278, label %283, label %279
279: ; preds = %275
%280 = getelementptr inbounds [8 x i32], [8 x i32]* %0, i64 7, i64 %273
%281 = load i32, i32* %280
%282 = icmp eq i32 %281, 0
br i1 %282, label %283, label %284
283: ; preds = %279, %275
br label %284
284: ; preds = %165, %143, %206, %202, %213, %217, %224, %228, %235, %239, %246, %250, %257, %261, %268, %272, %279, %283, %190, %186, %7, %13, %23, %29, %39, %45, %55, %61, %17, %33, %49, %69, %75, %85, %91, %101, %107, %117, %123, %79, %95, %111, %194, %176
%285 = phi i32 [ 1, %176 ], [ 1, %194 ], [ 0, %111 ], [ 0, %95 ], [ 0, %79 ], [ 0, %123 ], [ 0, %117 ], [ 0, %107 ], [ 0, %101 ], [ 0, %91 ], [ 0, %85 ], [ 0, %75 ], [ 0, %69 ], [ 0, %49 ], [ 0, %33 ], [ 0, %17 ], [ 0, %61 ], [ 0, %55 ], [ 0, %45 ], [ 0, %39 ], [ 0, %29 ], [ 0, %23 ], [ 0, %13 ], [ 0, %7 ], [ 1, %190 ], [ 0, %186 ], [ 1, %206 ], [ 0, %202 ], [ 0, %213 ], [ 1, %217 ], [ 0, %224 ], [ 1, %228 ], [ 0, %235 ], [ 1, %239 ], [ 0, %246 ], [ 1, %250 ], [ 0, %257 ], [ 1, %261 ], [ 0, %268 ], [ 1, %272 ], [ 0, %279 ], [ 1, %283 ], [ 0, %143 ], [ 0, %165 ]
ret i32 %285
}