int explore(int row, int col, int board[8][8], int turn, int direction) {
  int tempvector[8] = {3, 3, 3, 3, 3, 3, 3, 3};
  int i = 0;
  switch (direction) {
  case 1:
    for (; (0 <= (row) && (row) < 8 && 0 <= (col) && (col) < 8); row--, col--)
      tempvector[i++] = board[row][col];
    break;
  case 2:
    for (; (0 <= (row) && (row) < 8 && 0 <= (col) && (col) < 8); row--)
      tempvector[i++] = board[row][col];
    break;
  case 3:
    for (; (0 <= (row) && (row) < 8 && 0 <= (col) && (col) < 8); row--, col++)
      tempvector[i++] = board[row][col];
    break;
  case 4:
    for (; (0 <= (row) && (row) < 8 && 0 <= (col) && (col) < 8); col--)
      tempvector[i++] = board[row][col];
    break;
  case 5:
    return 0;
  case 6:
    for (; (0 <= (row) && (row) < 8 && 0 <= (col) && (col) < 8); col++)
      tempvector[i++] = board[row][col];
    break;
  case 7:
    for (; (0 <= (row) && (row) < 8 && 0 <= (col) && (col) < 8); row++, col--)
      tempvector[i++] = board[row][col];
    break;
  case 8:
    for (; (0 <= (row) && (row) < 8 && 0 <= (col) && (col) < 8); row++)
      tempvector[i++] = board[row][col];
    break;
  case 9:
    for (; (0 <= (row) && (row) < 8 && 0 <= (col) && (col) < 8); row++, col++)
      tempvector[i++] = board[row][col];
    break;
  }
  if (tempvector[1] != (turn + 1) % 2)
    return 0;
  for (i = 2; i < 8 && tempvector[i] < 2; i++)
    if (tempvector[i] == turn)
      return 1;
  return 0;
}


x86 assembly (clang, -O0):
<explore>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
movaps 0xf24(%rip),%xmm0
movaps %xmm0,-0x30(%rbp)
movaps 0xf09(%rip),%xmm0
movaps %xmm0,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,%ecx
mov    %rcx,-0x50(%rbp)
sub    $0x8,%eax
ja     15cb <explore+0x4cb>
mov    -0x50(%rbp),%rax
lea    0xeae(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
jmp    1160 <explore+0x60>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0x8(%rbp),%ecx
mov    %al,-0x51(%rbp)
jg     1199 <explore+0x99>
xor    %eax,%eax
cmpl   $0x8,-0x8(%rbp)
mov    %al,-0x51(%rbp)
jge    1199 <explore+0x99>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0xc(%rbp),%ecx
mov    %al,-0x51(%rbp)
jg     1199 <explore+0x99>
cmpl   $0x8,-0xc(%rbp)
setl   %al
mov    %al,-0x51(%rbp)
mov    -0x51(%rbp),%al
test   $0x1,%al
jne    11a9 <explore+0xa9>
jmp    11e7 <explore+0xe7>
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x44(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x44(%rbp)
cltq
mov    %ecx,-0x40(%rbp,%rax,4)
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
jmp    1160 <explore+0x60>
jmp    15cb <explore+0x4cb>
jmp    11f1 <explore+0xf1>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0x8(%rbp),%ecx
mov    %al,-0x52(%rbp)
jg     122a <explore+0x12a>
xor    %eax,%eax
cmpl   $0x8,-0x8(%rbp)
mov    %al,-0x52(%rbp)
jge    122a <explore+0x12a>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0xc(%rbp),%ecx
mov    %al,-0x52(%rbp)
jg     122a <explore+0x12a>
cmpl   $0x8,-0xc(%rbp)
setl   %al
mov    %al,-0x52(%rbp)
mov    -0x52(%rbp),%al
test   $0x1,%al
jne    123a <explore+0x13a>
jmp    126f <explore+0x16f>
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x44(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x44(%rbp)
cltq
mov    %ecx,-0x40(%rbp,%rax,4)
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
jmp    11f1 <explore+0xf1>
jmp    15cb <explore+0x4cb>
jmp    1279 <explore+0x179>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0x8(%rbp),%ecx
mov    %al,-0x53(%rbp)
jg     12b2 <explore+0x1b2>
xor    %eax,%eax
cmpl   $0x8,-0x8(%rbp)
mov    %al,-0x53(%rbp)
jge    12b2 <explore+0x1b2>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0xc(%rbp),%ecx
mov    %al,-0x53(%rbp)
jg     12b2 <explore+0x1b2>
cmpl   $0x8,-0xc(%rbp)
setl   %al
mov    %al,-0x53(%rbp)
mov    -0x53(%rbp),%al
test   $0x1,%al
jne    12c2 <explore+0x1c2>
jmp    1300 <explore+0x200>
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x44(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x44(%rbp)
cltq
mov    %ecx,-0x40(%rbp,%rax,4)
mov    -0x8(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x8(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    1279 <explore+0x179>
jmp    15cb <explore+0x4cb>
jmp    130a <explore+0x20a>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0x8(%rbp),%ecx
mov    %al,-0x54(%rbp)
jg     1343 <explore+0x243>
xor    %eax,%eax
cmpl   $0x8,-0x8(%rbp)
mov    %al,-0x54(%rbp)
jge    1343 <explore+0x243>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0xc(%rbp),%ecx
mov    %al,-0x54(%rbp)
jg     1343 <explore+0x243>
cmpl   $0x8,-0xc(%rbp)
setl   %al
mov    %al,-0x54(%rbp)
mov    -0x54(%rbp),%al
test   $0x1,%al
jne    1353 <explore+0x253>
jmp    1388 <explore+0x288>
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x44(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x44(%rbp)
cltq
mov    %ecx,-0x40(%rbp,%rax,4)
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
jmp    130a <explore+0x20a>
jmp    15cb <explore+0x4cb>
movl   $0x0,-0x4(%rbp)
jmp    1662 <explore+0x562>
jmp    139e <explore+0x29e>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0x8(%rbp),%ecx
mov    %al,-0x55(%rbp)
jg     13d7 <explore+0x2d7>
xor    %eax,%eax
cmpl   $0x8,-0x8(%rbp)
mov    %al,-0x55(%rbp)
jge    13d7 <explore+0x2d7>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0xc(%rbp),%ecx
mov    %al,-0x55(%rbp)
jg     13d7 <explore+0x2d7>
cmpl   $0x8,-0xc(%rbp)
setl   %al
mov    %al,-0x55(%rbp)
mov    -0x55(%rbp),%al
test   $0x1,%al
jne    13e7 <explore+0x2e7>
jmp    141c <explore+0x31c>
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x44(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x44(%rbp)
cltq
mov    %ecx,-0x40(%rbp,%rax,4)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    139e <explore+0x29e>
jmp    15cb <explore+0x4cb>
jmp    1426 <explore+0x326>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0x8(%rbp),%ecx
mov    %al,-0x56(%rbp)
jg     145f <explore+0x35f>
xor    %eax,%eax
cmpl   $0x8,-0x8(%rbp)
mov    %al,-0x56(%rbp)
jge    145f <explore+0x35f>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0xc(%rbp),%ecx
mov    %al,-0x56(%rbp)
jg     145f <explore+0x35f>
cmpl   $0x8,-0xc(%rbp)
setl   %al
mov    %al,-0x56(%rbp)
mov    -0x56(%rbp),%al
test   $0x1,%al
jne    146f <explore+0x36f>
jmp    14ad <explore+0x3ad>
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x44(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x44(%rbp)
cltq
mov    %ecx,-0x40(%rbp,%rax,4)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0xc(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0xc(%rbp)
jmp    1426 <explore+0x326>
jmp    15cb <explore+0x4cb>
jmp    14b7 <explore+0x3b7>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0x8(%rbp),%ecx
mov    %al,-0x57(%rbp)
jg     14f0 <explore+0x3f0>
xor    %eax,%eax
cmpl   $0x8,-0x8(%rbp)
mov    %al,-0x57(%rbp)
jge    14f0 <explore+0x3f0>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0xc(%rbp),%ecx
mov    %al,-0x57(%rbp)
jg     14f0 <explore+0x3f0>
cmpl   $0x8,-0xc(%rbp)
setl   %al
mov    %al,-0x57(%rbp)
mov    -0x57(%rbp),%al
test   $0x1,%al
jne    1500 <explore+0x400>
jmp    1535 <explore+0x435>
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x44(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x44(%rbp)
cltq
mov    %ecx,-0x40(%rbp,%rax,4)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    14b7 <explore+0x3b7>
jmp    15cb <explore+0x4cb>
jmp    153f <explore+0x43f>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0x8(%rbp),%ecx
mov    %al,-0x58(%rbp)
jg     1578 <explore+0x478>
xor    %eax,%eax
cmpl   $0x8,-0x8(%rbp)
mov    %al,-0x58(%rbp)
jge    1578 <explore+0x478>
xor    %eax,%eax
xor    %ecx,%ecx
cmp    -0xc(%rbp),%ecx
mov    %al,-0x58(%rbp)
jg     1578 <explore+0x478>
cmpl   $0x8,-0xc(%rbp)
setl   %al
mov    %al,-0x58(%rbp)
mov    -0x58(%rbp),%al
test   $0x1,%al
jne    1588 <explore+0x488>
jmp    15c6 <explore+0x4c6>
mov    -0x18(%rbp),%rax
movslq -0x8(%rbp),%rcx
shl    $0x5,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x44(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x44(%rbp)
cltq
mov    %ecx,-0x40(%rbp,%rax,4)
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
jmp    153f <explore+0x43f>
jmp    15cb <explore+0x4cb>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    -0x5c(%rbp),%eax
cmp    %edx,%eax
je     15f6 <explore+0x4f6>
movl   $0x0,-0x4(%rbp)
jmp    1662 <explore+0x562>
movl   $0x2,-0x44(%rbp)
xor    %eax,%eax
cmpl   $0x8,-0x44(%rbp)
mov    %al,-0x5d(%rbp)
jge    161b <explore+0x51b>
movslq -0x44(%rbp),%rax
cmpl   $0x2,-0x40(%rbp,%rax,4)
setl   %al
mov    %al,-0x5d(%rbp)
mov    -0x5d(%rbp),%al
test   $0x1,%al
jne    162b <explore+0x52b>
jmp    165b <explore+0x55b>
movslq -0x44(%rbp),%rax
mov    -0x40(%rbp,%rax,4),%eax
cmp    -0x1c(%rbp),%eax
jne    1648 <explore+0x548>
movl   $0x1,-0x4(%rbp)
jmp    1662 <explore+0x562>
jmp    164d <explore+0x54d>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    15fd <explore+0x4fd>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<explore>:
movaps 0xf39(%rip),%xmm0
movaps %xmm0,-0x18(%rsp)
movaps 0xf1d(%rip),%xmm0
movaps %xmm0,-0x28(%rsp)
add    $0xffffffff,%r8d
cmp    $0x8,%r8d
ja     14c0 <explore+0x3c0>
lea    0xed3(%rip),%rax
movslq (%rax,%r8,4),%r8
add    %rax,%r8
xor    %eax,%eax
jmp    *%r8
mov    %esi,%eax
or     %edi,%eax
cmp    $0x7,%eax
ja     14c0 <explore+0x3c0>
mov    %esi,%eax
lea    (%rdx,%rax,4),%r8
lea    -0x28(%rsp),%rdx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    %edi,%eax
shl    $0x5,%rax
mov    (%r8,%rax,1),%eax
mov    %eax,(%rdx)
add    $0xffffffff,%edi
cmp    $0x7,%edi
ja     14c0 <explore+0x3c0>
lea    -0x1(%rsi),%eax
add    $0xfffffffffffffffc,%r8
add    $0x4,%rdx
test   %esi,%esi
mov    %eax,%esi
jg     1160 <explore+0x60>
jmp    14c0 <explore+0x3c0>
mov    %edi,%eax
or     %esi,%eax
cmp    $0x7,%eax
ja     14c0 <explore+0x3c0>
mov    %esi,%r8d
lea    -0x28(%rsp),%r9
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %edi,%eax
shl    $0x5,%rax
add    %rdx,%rax
mov    (%rax,%r8,4),%eax
mov    %eax,(%r9)
add    $0xffffffff,%edi
mov    %edi,%eax
or     %esi,%eax
add    $0x4,%r9
cmp    $0x8,%eax
jb     11b0 <explore+0xb0>
jmp    14c0 <explore+0x3c0>
mov    %esi,%eax
or     %edi,%eax
cmp    $0x7,%eax
ja     14c0 <explore+0x3c0>
mov    %esi,%eax
lea    (%rdx,%rax,4),%r8
lea    -0x28(%rsp),%rdx
nopl   (%rax)
mov    %edi,%eax
shl    $0x5,%rax
mov    (%r8,%rax,1),%eax
mov    %eax,(%rdx)
add    $0xffffffff,%edi
cmp    $0x7,%edi
ja     14c0 <explore+0x3c0>
lea    0x1(%rsi),%eax
add    $0x4,%r8
add    $0x4,%rdx
cmp    $0x7,%esi
mov    %eax,%esi
jl     11f0 <explore+0xf0>
jmp    14c0 <explore+0x3c0>
mov    %esi,%eax
or     %edi,%eax
cmp    $0x7,%eax
ja     14c0 <explore+0x3c0>
mov    %edi,%r8d
mov    %esi,%r9d
shl    $0x5,%r8
add    %r8,%rdx
lea    -0x28(%rsp),%rsi
xchg   %ax,%ax
mov    (%rdx,%r9,4),%eax
mov    %eax,(%rsi)
cmp    $0x7,%edi
ja     14c0 <explore+0x3c0>
lea    -0x1(%r9),%rax
add    $0x4,%rsi
test   %r9d,%r9d
mov    %rax,%r9
jg     1240 <explore+0x140>
jmp    14c0 <explore+0x3c0>
mov    %esi,%eax
or     %edi,%eax
cmp    $0x7,%eax
ja     14c0 <explore+0x3c0>
mov    %edi,%r8d
mov    %esi,%r9d
shl    $0x5,%r8
add    %r8,%rdx
lea    (%rdx,%r9,4),%rdx
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%rdx,%rsi,4),%eax
mov    %eax,-0x28(%rsp,%rsi,4)
cmp    $0x7,%edi
ja     14c0 <explore+0x3c0>
lea    0x1(%rsi),%rax
add    %r9d,%esi
cmp    $0x7,%esi
mov    %rax,%rsi
jl     1290 <explore+0x190>
jmp    14c0 <explore+0x3c0>
mov    %esi,%eax
or     %edi,%eax
cmp    $0x7,%eax
ja     14c0 <explore+0x3c0>
mov    %edi,%eax
mov    %esi,%r8d
shl    $0x5,%rax
add    %rax,%rdx
mov    (%rdx,%r8,4),%eax
mov    %eax,-0x28(%rsp)
cmp    $0x6,%edi
ja     14c0 <explore+0x3c0>
test   %esi,%esi
jle    14c0 <explore+0x3c0>
lea    -0x1(%r8),%rsi
mov    0x20(%rdx,%rsi,4),%eax
mov    %eax,-0x24(%rsp)
cmp    $0x5,%edi
ja     14c0 <explore+0x3c0>
test   %esi,%esi
jle    14c0 <explore+0x3c0>
lea    -0x2(%r8),%rsi
mov    0x40(%rdx,%rsi,4),%eax
mov    %eax,-0x20(%rsp)
cmp    $0x4,%edi
ja     14c0 <explore+0x3c0>
test   %esi,%esi
jle    14c0 <explore+0x3c0>
lea    -0x3(%r8),%rsi
mov    0x60(%rdx,%rsi,4),%eax
mov    %eax,-0x1c(%rsp)
cmp    $0x3,%edi
ja     14c0 <explore+0x3c0>
test   %esi,%esi
jle    14c0 <explore+0x3c0>
lea    -0x4(%r8),%rsi
mov    0x80(%rdx,%rsi,4),%eax
mov    %eax,-0x18(%rsp)
cmp    $0x2,%edi
ja     14c0 <explore+0x3c0>
test   %esi,%esi
jle    14c0 <explore+0x3c0>
lea    -0x5(%r8),%rsi
mov    0xa0(%rdx,%rsi,4),%eax
mov    %eax,-0x14(%rsp)
cmp    $0x1,%edi
ja     14c0 <explore+0x3c0>
test   %esi,%esi
jle    14c0 <explore+0x3c0>
lea    -0x6(%r8),%rsi
mov    0xc0(%rdx,%rsi,4),%eax
mov    %eax,-0x10(%rsp)
test   %edi,%edi
jne    14c0 <explore+0x3c0>
test   %esi,%esi
jle    14c0 <explore+0x3c0>
mov    0xc4(%rdx,%r8,4),%eax
jmp    14bc <explore+0x3bc>
mov    %edi,%eax
or     %esi,%eax
cmp    $0x7,%eax
ja     14c0 <explore+0x3c0>
mov    %esi,%r8d
mov    %edi,%eax
shl    $0x5,%rax
add    %rax,%rdx
lea    (%rdx,%r8,4),%r8
add    $0x1,%edi
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
mov    (%r8,%rdx,8),%eax
mov    %eax,-0x28(%rsp,%rdx,1)
mov    %edi,%eax
or     %esi,%eax
add    $0x4,%rdx
add    $0x1,%edi
cmp    $0x8,%eax
jb     13d0 <explore+0x2d0>
jmp    14c0 <explore+0x3c0>
mov    %esi,%eax
or     %edi,%eax
cmp    $0x7,%eax
ja     14c0 <explore+0x3c0>
mov    %edi,%eax
mov    %esi,%r8d
shl    $0x5,%rax
add    %rax,%rdx
mov    (%rdx,%r8,4),%eax
mov    %eax,-0x28(%rsp)
cmp    $0x6,%edi
ja     14c0 <explore+0x3c0>
cmp    $0x7,%esi
jge    14c0 <explore+0x3c0>
lea    0x1(%r8),%rsi
mov    0x20(%rdx,%rsi,4),%eax
mov    %eax,-0x24(%rsp)
cmp    $0x5,%edi
ja     14c0 <explore+0x3c0>
cmp    $0x6,%esi
jg     14c0 <explore+0x3c0>
lea    0x2(%r8),%rsi
mov    0x40(%rdx,%rsi,4),%eax
mov    %eax,-0x20(%rsp)
cmp    $0x4,%edi
ja     14c0 <explore+0x3c0>
cmp    $0x6,%esi
jg     14c0 <explore+0x3c0>
lea    0x3(%r8),%rsi
mov    0x60(%rdx,%rsi,4),%eax
mov    %eax,-0x1c(%rsp)
cmp    $0x3,%edi
ja     14c0 <explore+0x3c0>
cmp    $0x6,%esi
jg     14c0 <explore+0x3c0>
lea    0x4(%r8),%rsi
mov    0x80(%rdx,%rsi,4),%eax
mov    %eax,-0x18(%rsp)
cmp    $0x2,%edi
ja     14c0 <explore+0x3c0>
cmp    $0x6,%esi
jg     14c0 <explore+0x3c0>
lea    0x5(%r8),%rsi
mov    0xa0(%rdx,%rsi,4),%eax
mov    %eax,-0x14(%rsp)
cmp    $0x1,%edi
ja     14c0 <explore+0x3c0>
cmp    $0x6,%esi
jg     14c0 <explore+0x3c0>
lea    0x6(%r8),%rsi
mov    0xc0(%rdx,%rsi,4),%eax
mov    %eax,-0x10(%rsp)
test   %edi,%edi
jne    14c0 <explore+0x3c0>
cmp    $0x6,%esi
jg     14c0 <explore+0x3c0>
mov    0xfc(%rdx,%r8,4),%eax
mov    %eax,-0xc(%rsp)
lea    0x1(%rcx),%eax
mov    %eax,%edx
shr    $0x1f,%edx
add    %ecx,%edx
add    $0x1,%edx
and    $0xfffffffe,%edx
sub    %edx,%eax
cmp    %eax,-0x24(%rsp)
jne    1535 <explore+0x435>
mov    -0x20(%rsp),%edx
cmp    $0x2,%edx
jge    1535 <explore+0x435>
mov    $0x1,%eax
cmp    %ecx,%edx
jne    14eb <explore+0x3eb>
ret
mov    -0x1c(%rsp),%edx
cmp    $0x1,%edx
jg     1535 <explore+0x435>
cmp    %ecx,%edx
je     14ea <explore+0x3ea>
mov    -0x18(%rsp),%edx
cmp    $0x1,%edx
jg     1535 <explore+0x435>
cmp    %ecx,%edx
je     14ea <explore+0x3ea>
mov    -0x14(%rsp),%edx
cmp    $0x1,%edx
jg     1535 <explore+0x435>
cmp    %ecx,%edx
je     14ea <explore+0x3ea>
mov    -0x10(%rsp),%edx
cmp    $0x1,%edx
jg     1535 <explore+0x435>
cmp    %ecx,%edx
je     14ea <explore+0x3ea>
mov    -0xc(%rsp),%edx
mov    $0x0,%eax
cmp    $0x1,%edx
jg     14ea <explore+0x3ea>
xor    %eax,%eax
cmp    %ecx,%edx
sete   %al
ret
xor    %eax,%eax
ret

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

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