int fin4(int grid1[6][7], int move, int fin, int row, int col, int i, int j) {
  int f, c, x, y;
  int grid[6][7], i1, j1;
  for (i1 = 0; i1 < 6; i1++)
    for (j1 = 0; j1 < 7; j1++) {
      grid[i1][j1] = grid1[i1][j1];
    }
  if (col != -1)
    grid[row][col] = move;
  if (j >= 3)
    if (((grid[j - 1][i] == move) && (grid[j - 2][i] == move)) &&
        (grid[j - 3][i] == move))
      if (fin) {
        return i;
      } else
        fin = 1;
  if (i >= 3)
    if ((grid[j][i - 1] == move) && (grid[j][i - 2] == move) &&
        (grid[j][i - 3] == move))
      if (fin) {
        return i;
      } else
        fin = 1;
  if (i >= 2 && i <= 5)
    if ((grid[j][i - 1] == move) && (grid[j][i - 2] == move) &&
        (grid[j][i + 1] == move))
      if (fin) {
        return i;
      } else
        fin = 1;
  if (i >= 1 && i <= 4)
    if ((grid[j][i - 1] == move) && (grid[j][i + 1] == move) &&
        (grid[j][i + 2] == move))
      if (fin) {
        return i;
      } else
        fin = 1;
  if (i <= 3)
    if ((grid[j][i + 1] == move) && (grid[j][i + 2] == move) &&
        (grid[j][i + 3] == move))
      if (fin) {
        return i;
      } else
        fin = 1;
  for (x = j - 1, y = i - 1, c = 0, f = 1; (x >= 0 && y >= 0) && f == 1;
       x = x - 1, y = y - 1) {
    if (grid[x][y] != move)
      f = 0;
    else
      c++;
    if (c == 3)
      if (fin) {
        return i;
      } else
        fin = 1;
  }
  for (x = j + 1, y = i + 1, f = 1; x <= 5 && y <= 6 && f == 1;
       x = x + 1, y = y + 1) {
    if (grid[x][y] != move)
      f = 0;
    else
      c++;
    if (c == 3)
      if (fin) {
        return i;
      } else
        fin = 1;
  }
  for (x = j + 1, y = i - 1, c = 0, f = 1; x <= 5 && y >= 0 && f == 1;
       x = x + 1, y = y - 1) {
    if (grid[x][y] != move)
      f = 0;
    else
      c++;
    if (c == 3)
      if (fin) {
        return i;
      } else
        fin = 1;
  }
  for (x = j - 1, y = i + 1, f = 1; x >= 0 && y <= 6 && f == 1;
       x = x - 1, y = y + 1) {
    if (grid[x][y] != move)
      f = 0;
    else
      c++;
    if (c == 3)
      if (fin) {
        return i;
      } else
        fin = 1;
  }
  return -1;
}


x86 assembly (clang, -O0):
<fin4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    0x10(%rbp),%eax
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
movl   $0x0,-0xe4(%rbp)
cmpl   $0x6,-0xe4(%rbp)
jge    11b6 <fin4+0xb6>
movl   $0x0,-0xe8(%rbp)
cmpl   $0x7,-0xe8(%rbp)
jge    119d <fin4+0x9d>
mov    -0x10(%rbp),%rax
movslq -0xe4(%rbp),%rcx
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0xe8(%rbp),%rcx
mov    (%rax,%rcx,4),%edx
movslq -0xe4(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0xe8(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0xe8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xe8(%rbp)
jmp    1141 <fin4+0x41>
jmp    11a2 <fin4+0xa2>
mov    -0xe4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xe4(%rbp)
jmp    112a <fin4+0x2a>
cmpl   $0xffffffff,-0x20(%rbp)
je     11dc <fin4+0xdc>
mov    -0x14(%rbp),%edx
movslq -0x1c(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
cmpl   $0x3,0x10(%rbp)
jl     1281 <fin4+0x181>
mov    0x10(%rbp),%eax
sub    $0x1,%eax
movslq %eax,%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    127c <fin4+0x17c>
mov    0x10(%rbp),%eax
sub    $0x2,%eax
movslq %eax,%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    127c <fin4+0x17c>
mov    0x10(%rbp),%eax
sub    $0x3,%eax
movslq %eax,%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    127c <fin4+0x17c>
cmpl   $0x0,-0x18(%rbp)
je     1270 <fin4+0x170>
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    18aa <fin4+0x7aa>
movl   $0x1,-0x18(%rbp)
jmp    127c <fin4+0x17c>
jmp    1281 <fin4+0x181>
cmpl   $0x3,-0x24(%rbp)
jl     1326 <fin4+0x226>
movslq 0x10(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    1321 <fin4+0x221>
movslq 0x10(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    1321 <fin4+0x221>
movslq 0x10(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    1321 <fin4+0x221>
cmpl   $0x0,-0x18(%rbp)
je     1315 <fin4+0x215>
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    18aa <fin4+0x7aa>
movl   $0x1,-0x18(%rbp)
jmp    1321 <fin4+0x221>
jmp    1326 <fin4+0x226>
cmpl   $0x2,-0x24(%rbp)
jl     13d5 <fin4+0x2d5>
cmpl   $0x5,-0x24(%rbp)
jg     13d5 <fin4+0x2d5>
movslq 0x10(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    13d0 <fin4+0x2d0>
movslq 0x10(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    13d0 <fin4+0x2d0>
movslq 0x10(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    13d0 <fin4+0x2d0>
cmpl   $0x0,-0x18(%rbp)
je     13c4 <fin4+0x2c4>
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    18aa <fin4+0x7aa>
movl   $0x1,-0x18(%rbp)
jmp    13d0 <fin4+0x2d0>
jmp    13d5 <fin4+0x2d5>
cmpl   $0x1,-0x24(%rbp)
jl     1484 <fin4+0x384>
cmpl   $0x4,-0x24(%rbp)
jg     1484 <fin4+0x384>
movslq 0x10(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    147f <fin4+0x37f>
movslq 0x10(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    147f <fin4+0x37f>
movslq 0x10(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    147f <fin4+0x37f>
cmpl   $0x0,-0x18(%rbp)
je     1473 <fin4+0x373>
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    18aa <fin4+0x7aa>
movl   $0x1,-0x18(%rbp)
jmp    147f <fin4+0x37f>
jmp    1484 <fin4+0x384>
cmpl   $0x3,-0x24(%rbp)
jg     1529 <fin4+0x429>
movslq 0x10(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    1524 <fin4+0x424>
movslq 0x10(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    1524 <fin4+0x424>
movslq 0x10(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    1524 <fin4+0x424>
cmpl   $0x0,-0x18(%rbp)
je     1518 <fin4+0x418>
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    18aa <fin4+0x7aa>
movl   $0x1,-0x18(%rbp)
jmp    1524 <fin4+0x424>
jmp    1529 <fin4+0x429>
mov    0x10(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x1,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x30(%rbp)
mov    %al,-0xe9(%rbp)
jl     157a <fin4+0x47a>
xor    %eax,%eax
cmpl   $0x0,-0x34(%rbp)
mov    %al,-0xe9(%rbp)
jl     157a <fin4+0x47a>
cmpl   $0x1,-0x28(%rbp)
sete   %al
mov    %al,-0xe9(%rbp)
mov    -0xe9(%rbp),%al
test   $0x1,%al
jne    158d <fin4+0x48d>
jmp    160b <fin4+0x50b>
movslq -0x30(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
je     15bb <fin4+0x4bb>
movl   $0x0,-0x28(%rbp)
jmp    15c4 <fin4+0x4c4>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x3,-0x2c(%rbp)
jne    15ef <fin4+0x4ef>
cmpl   $0x0,-0x18(%rbp)
je     15e3 <fin4+0x4e3>
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    18aa <fin4+0x7aa>
movl   $0x1,-0x18(%rbp)
jmp    15ef <fin4+0x4ef>
jmp    15f4 <fin4+0x4f4>
mov    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1549 <fin4+0x449>
mov    0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
movl   $0x1,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x5,-0x30(%rbp)
mov    %al,-0xea(%rbp)
jg     1655 <fin4+0x555>
xor    %eax,%eax
cmpl   $0x6,-0x34(%rbp)
mov    %al,-0xea(%rbp)
jg     1655 <fin4+0x555>
cmpl   $0x1,-0x28(%rbp)
sete   %al
mov    %al,-0xea(%rbp)
mov    -0xea(%rbp),%al
test   $0x1,%al
jne    1668 <fin4+0x568>
jmp    16e6 <fin4+0x5e6>
movslq -0x30(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
je     1696 <fin4+0x596>
movl   $0x0,-0x28(%rbp)
jmp    169f <fin4+0x59f>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x3,-0x2c(%rbp)
jne    16ca <fin4+0x5ca>
cmpl   $0x0,-0x18(%rbp)
je     16be <fin4+0x5be>
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    18aa <fin4+0x7aa>
movl   $0x1,-0x18(%rbp)
jmp    16ca <fin4+0x5ca>
jmp    16cf <fin4+0x5cf>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1624 <fin4+0x524>
mov    0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x24(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x1,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x5,-0x30(%rbp)
mov    %al,-0xeb(%rbp)
jg     1737 <fin4+0x637>
xor    %eax,%eax
cmpl   $0x0,-0x34(%rbp)
mov    %al,-0xeb(%rbp)
jl     1737 <fin4+0x637>
cmpl   $0x1,-0x28(%rbp)
sete   %al
mov    %al,-0xeb(%rbp)
mov    -0xeb(%rbp),%al
test   $0x1,%al
jne    174a <fin4+0x64a>
jmp    17c8 <fin4+0x6c8>
movslq -0x30(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
je     1778 <fin4+0x678>
movl   $0x0,-0x28(%rbp)
jmp    1781 <fin4+0x681>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x3,-0x2c(%rbp)
jne    17ac <fin4+0x6ac>
cmpl   $0x0,-0x18(%rbp)
je     17a0 <fin4+0x6a0>
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    18aa <fin4+0x7aa>
movl   $0x1,-0x18(%rbp)
jmp    17ac <fin4+0x6ac>
jmp    17b1 <fin4+0x6b1>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1706 <fin4+0x606>
mov    0x10(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
movl   $0x1,-0x28(%rbp)
xor    %eax,%eax
cmpl   $0x0,-0x30(%rbp)
mov    %al,-0xec(%rbp)
jl     1812 <fin4+0x712>
xor    %eax,%eax
cmpl   $0x6,-0x34(%rbp)
mov    %al,-0xec(%rbp)
jg     1812 <fin4+0x712>
cmpl   $0x1,-0x28(%rbp)
sete   %al
mov    %al,-0xec(%rbp)
mov    -0xec(%rbp),%al
test   $0x1,%al
jne    1825 <fin4+0x725>
jmp    18a3 <fin4+0x7a3>
movslq -0x30(%rbp),%rcx
lea    -0xe0(%rbp),%rax
imul   $0x1c,%rcx,%rcx
add    %rcx,%rax
movslq -0x34(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
je     1853 <fin4+0x753>
movl   $0x0,-0x28(%rbp)
jmp    185c <fin4+0x75c>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x3,-0x2c(%rbp)
jne    1887 <fin4+0x787>
cmpl   $0x0,-0x18(%rbp)
je     187b <fin4+0x77b>
mov    -0x24(%rbp),%eax
mov    %eax,-0x4(%rbp)
jmp    18aa <fin4+0x7aa>
movl   $0x1,-0x18(%rbp)
jmp    1887 <fin4+0x787>
jmp    188c <fin4+0x78c>
mov    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    17e1 <fin4+0x6e1>
movl   $0xffffffff,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<fin4>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xa8,%rsp
mov    %r9d,%ebx
mov    %r8d,%r15d
mov    %ecx,%r12d
mov    %edx,%r13d
mov    %esi,%r14d
mov    %rdi,%rsi
mov    0xe0(%rsp),%ebp
mov    %rsp,%rdi
mov    $0xa8,%edx
call   1030 <memcpy@plt>
cmp    $0xffffffff,%r15d
je     1166 <fin4+0x56>
movslq %r12d,%rax
movslq %r15d,%rcx
lea    (%rax,%rax,8),%rdx
lea    (%rdx,%rdx,2),%rdx
add    %rax,%rdx
lea    (%rsp,%rdx,1),%rax
mov    %r14d,(%rax,%rcx,4)
mov    %rbp,%r10
cmp    $0x3,%r10d
jl     11d7 <fin4+0xc7>
lea    -0x1(%r10),%ecx
mov    %rbx,%r9
movslq %r9d,%rax
lea    (%rcx,%rcx,8),%rdx
lea    (%rdx,%rdx,2),%rdx
add    %rcx,%rdx
lea    (%rsp,%rdx,1),%rcx
cmp    %r14d,(%rcx,%rax,4)
jne    11cf <fin4+0xbf>
lea    -0x2(%r10),%ecx
lea    (%rcx,%rcx,8),%rdx
lea    (%rdx,%rdx,2),%rdx
add    %rcx,%rdx
lea    (%rsp,%rdx,1),%rcx
cmp    %r14d,(%rcx,%rax,4)
jne    11cf <fin4+0xbf>
lea    -0x3(%r10),%ecx
lea    (%rcx,%rcx,8),%rdx
lea    (%rdx,%rdx,2),%rdx
add    %rcx,%rdx
lea    (%rsp,%rdx,1),%rcx
cmp    %r14d,(%rcx,%rax,4)
jne    11cf <fin4+0xbf>
test   %r13d,%r13d
jne    14b1 <fin4+0x3a1>
mov    $0x1,%r13d
cmp    $0x3,%r9d
jge    11e0 <fin4+0xd0>
jmp    121f <fin4+0x10f>
mov    %rbx,%r9
cmp    $0x3,%r9d
jl     121f <fin4+0x10f>
movslq %r10d,%rax
lea    -0x1(%r9),%ecx
lea    (%rax,%rax,8),%rdx
lea    (%rdx,%rdx,2),%rdx
add    %rax,%rdx
lea    (%rsp,%rdx,1),%rax
cmp    %r14d,(%rax,%rcx,4)
jne    121f <fin4+0x10f>
lea    -0x2(%r9),%ecx
cmp    %r14d,(%rax,%rcx,4)
jne    121f <fin4+0x10f>
lea    -0x3(%r9),%ecx
cmp    %r14d,(%rax,%rcx,4)
jne    121f <fin4+0x10f>
test   %r13d,%r13d
jne    14b1 <fin4+0x3a1>
mov    $0x1,%r13d
lea    -0x2(%r9),%ecx
cmp    $0x4,%ecx
jae    1267 <fin4+0x157>
movslq %r10d,%rdx
lea    -0x1(%r9),%r8d
lea    (%rdx,%rdx,8),%rsi
lea    (%rsi,%rsi,2),%rsi
add    %rdx,%rsi
lea    (%rsp,%rsi,1),%rdx
cmp    %r14d,(%rdx,%r8,4)
jne    126b <fin4+0x15b>
mov    %ecx,%ecx
cmp    %r14d,(%rdx,%rcx,4)
jne    126b <fin4+0x15b>
mov    %r9d,%ecx
cmp    %r14d,0x4(%rdx,%rcx,4)
jne    126b <fin4+0x15b>
test   %r13d,%r13d
jne    14b1 <fin4+0x3a1>
mov    $0x1,%r13d
jmp    126b <fin4+0x15b>
lea    -0x1(%r9),%r8d
cmp    $0x3,%r8d
ja     12ac <fin4+0x19c>
movslq %r10d,%rcx
mov    %r8d,%edx
lea    (%rcx,%rcx,8),%rsi
lea    (%rsi,%rsi,2),%rsi
add    %rcx,%rsi
lea    (%rsp,%rsi,1),%rcx
cmp    %r14d,(%rcx,%rdx,4)
jne    12ac <fin4+0x19c>
mov    %r9d,%edx
cmp    %r14d,0x4(%rcx,%rdx,4)
jne    12ac <fin4+0x19c>
cmp    %r14d,0x8(%rcx,%rdx,4)
jne    12ac <fin4+0x19c>
test   %r13d,%r13d
jne    14b1 <fin4+0x3a1>
mov    $0x1,%r13d
cmp    $0x3,%r9d
jg     12eb <fin4+0x1db>
movslq %r10d,%rdx
movslq %r9d,%rcx
lea    (%rdx,%rdx,8),%rsi
lea    (%rsi,%rsi,2),%rsi
add    %rdx,%rsi
lea    (%rsp,%rsi,1),%rdx
cmp    %r14d,0x4(%rdx,%rcx,4)
jne    12eb <fin4+0x1db>
cmp    %r14d,0x8(%rdx,%rcx,4)
jne    12eb <fin4+0x1db>
cmp    %r14d,0xc(%rdx,%rcx,4)
jne    12eb <fin4+0x1db>
test   %r13d,%r13d
jne    14b1 <fin4+0x3a1>
mov    $0x1,%r13d
lea    -0x1(%r10),%ecx
xor    %edx,%edx
test   %r10d,%r10d
jle    135a <fin4+0x24a>
test   %r8d,%r8d
js     135a <fin4+0x24a>
xor    %edx,%edx
mov    %r8d,%edi
mov    %ecx,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %edx,%ebp
mov    %esi,%edx
mov    %edi,%ebx
lea    (%rdx,%rdx,8),%rax
lea    (%rax,%rax,2),%rax
add    %rdx,%rax
add    %rsp,%rax
mov    (%rax,%rbx,4),%ebx
xor    %edx,%edx
cmp    %r14d,%ebx
sete   %dl
add    %ebp,%edx
cmp    $0x3,%edx
jne    1345 <fin4+0x235>
test   %r13d,%r13d
mov    $0x1,%r13d
jne    14b1 <fin4+0x3a1>
cmp    %r14d,%ebx
jne    135a <fin4+0x24a>
test   %esi,%esi
jle    135a <fin4+0x24a>
add    $0xffffffff,%esi
lea    -0x1(%rdi),%eax
test   %edi,%edi
mov    %eax,%edi
jg     1310 <fin4+0x200>
cmp    $0x4,%r10d
jg     13d2 <fin4+0x2c2>
cmp    $0x5,%r9d
jg     13d2 <fin4+0x2c2>
movslq %r9d,%rdi
movslq %r10d,%rsi
lea    (%rsi,%rsi,8),%rax
lea    (%rax,%rax,2),%rax
add    %rsi,%rax
add    %rsp,%rax
lea    (%rax,%rdi,4),%rbx
add    $0x20,%rbx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %edx,%eax
mov    (%rbx),%ebp
xor    %edx,%edx
cmp    %r14d,%ebp
sete   %dl
add    %eax,%edx
cmp    $0x3,%edx
jne    13b2 <fin4+0x2a2>
test   %r13d,%r13d
mov    $0x1,%r13d
jne    14b1 <fin4+0x3a1>
cmp    %r14d,%ebp
jne    13d2 <fin4+0x2c2>
cmp    $0x3,%rsi
jg     13d2 <fin4+0x2c2>
add    $0x20,%rbx
add    $0x1,%rsi
lea    0x1(%rdi),%rax
cmp    $0x5,%rdi
mov    %rax,%rdi
jl     1390 <fin4+0x280>
xor    %edx,%edx
cmp    $0x4,%r10d
jg     1445 <fin4+0x335>
test   %r8d,%r8d
js     1445 <fin4+0x335>
movslq %r10d,%rsi
lea    (%rsi,%rsi,8),%rax
lea    (%rax,%rax,2),%rax
add    %rsi,%rax
lea    (%rsp,%rax,1),%rdi
add    $0x1c,%rdi
xor    %edx,%edx
nopw   0x0(%rax,%rax,1)
mov    %edx,%eax
mov    %r8d,%edx
mov    (%rdi,%rdx,4),%ebp
xor    %edx,%edx
cmp    %r14d,%ebp
sete   %dl
add    %eax,%edx
cmp    $0x3,%edx
jne    1426 <fin4+0x316>
test   %r13d,%r13d
mov    $0x1,%r13d
jne    14b1 <fin4+0x3a1>
cmp    %r14d,%ebp
jne    1445 <fin4+0x335>
cmp    $0x3,%rsi
jg     1445 <fin4+0x335>
lea    -0x1(%r8),%eax
add    $0x1c,%rdi
add    $0x1,%rsi
test   %r8d,%r8d
mov    %eax,%r8d
jg     1400 <fin4+0x2f0>
test   %r10d,%r10d
jle    14ab <fin4+0x39b>
cmp    $0x5,%r9d
jg     14ab <fin4+0x39b>
movslq %r9d,%rax
lea    (%rsp,%rax,4),%rsi
add    $0x4,%rsi
xor    %edi,%edi
nopl   (%rax)
mov    %edx,%ebx
mov    %ecx,%edx
lea    (%rdx,%rdx,8),%rbp
lea    0x0(%rbp,%rbp,2),%rbp
add    %rdx,%rbp
add    %rsi,%rbp
mov    0x0(%rbp,%rdi,4),%ebp
xor    %edx,%edx
cmp    %r14d,%ebp
sete   %dl
add    %ebx,%edx
cmp    $0x3,%edx
jne    1491 <fin4+0x381>
test   %r13d,%r13d
mov    $0x1,%r13d
jne    14b1 <fin4+0x3a1>
cmp    %r14d,%ebp
jne    14ab <fin4+0x39b>
test   %ecx,%ecx
jle    14ab <fin4+0x39b>
lea    (%rax,%rdi,1),%rbp
add    $0xffffffff,%ecx
add    $0x1,%rdi
cmp    $0x5,%rbp
jl     1460 <fin4+0x350>
mov    $0xffffffff,%r9d
mov    %r9d,%eax
add    $0xa8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @fin4([7 x i32]* %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6) {
%8 = alloca i32
%9 = alloca [7 x i32]*
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca [6 x [7 x i32]]
%21 = alloca i32
%22 = alloca i32
store [7 x i32]* %0, [7 x i32]** %9
store i32 %1, i32* %10
store i32 %2, i32* %11
store i32 %3, i32* %12
store i32 %4, i32* %13
store i32 %5, i32* %14
store i32 %6, i32* %15
store i32 0, i32* %21
br label %23
23: ; preds = %49, %7
%24 = load i32, i32* %21
%25 = icmp slt i32 %24, 6
br i1 %25, label %26, label %52
26: ; preds = %23
store i32 0, i32* %22
br label %27
27: ; preds = %45, %26
%28 = load i32, i32* %22
%29 = icmp slt i32 %28, 7
br i1 %29, label %30, label %48
30: ; preds = %27
%31 = load [7 x i32]*, [7 x i32]** %9
%32 = load i32, i32* %21
%33 = sext i32 %32 to i64
%34 = getelementptr inbounds [7 x i32], [7 x i32]* %31, i64 %33
%35 = load i32, i32* %22
%36 = sext i32 %35 to i64
%37 = getelementptr inbounds [7 x i32], [7 x i32]* %34, i64 0, i64 %36
%38 = load i32, i32* %37
%39 = load i32, i32* %21
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %40
%42 = load i32, i32* %22
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [7 x i32], [7 x i32]* %41, i64 0, i64 %43
store i32 %38, i32* %44
br label %45
45: ; preds = %30
%46 = load i32, i32* %22
%47 = add nsw i32 %46, 1
store i32 %47, i32* %22
br label %27
48: ; preds = %27
br label %49
49: ; preds = %48
%50 = load i32, i32* %21
%51 = add nsw i32 %50, 1
store i32 %51, i32* %21
br label %23
52: ; preds = %23
%53 = load i32, i32* %13
%54 = icmp ne i32 %53, -1
br i1 %54, label %55, label %63
55: ; preds = %52
%56 = load i32, i32* %10
%57 = load i32, i32* %12
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %58
%60 = load i32, i32* %13
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds [7 x i32], [7 x i32]* %59, i64 0, i64 %61
store i32 %56, i32* %62
br label %63
63: ; preds = %55, %52
%64 = load i32, i32* %15
%65 = icmp sge i32 %64, 3
br i1 %65, label %66, label %107
66: ; preds = %63
%67 = load i32, i32* %15
%68 = sub nsw i32 %67, 1
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %69
%71 = load i32, i32* %14
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds [7 x i32], [7 x i32]* %70, i64 0, i64 %72
%74 = load i32, i32* %73
%75 = load i32, i32* %10
%76 = icmp eq i32 %74, %75
br i1 %76, label %77, label %106
77: ; preds = %66
%78 = load i32, i32* %15
%79 = sub nsw i32 %78, 2
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %80
%82 = load i32, i32* %14
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds [7 x i32], [7 x i32]* %81, i64 0, i64 %83
%85 = load i32, i32* %84
%86 = load i32, i32* %10
%87 = icmp eq i32 %85, %86
br i1 %87, label %88, label %106
88: ; preds = %77
%89 = load i32, i32* %15
%90 = sub nsw i32 %89, 3
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %91
%93 = load i32, i32* %14
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds [7 x i32], [7 x i32]* %92, i64 0, i64 %94
%96 = load i32, i32* %95
%97 = load i32, i32* %10
%98 = icmp eq i32 %96, %97
br i1 %98, label %99, label %106
99: ; preds = %88
%100 = load i32, i32* %11
%101 = icmp ne i32 %100, 0
br i1 %101, label %102, label %104
102: ; preds = %99
%103 = load i32, i32* %14
store i32 %103, i32* %8
br label %474
104: ; preds = %99
store i32 1, i32* %11
br label %105
105: ; preds = %104
br label %106
106: ; preds = %105, %88, %77, %66
br label %107
107: ; preds = %106, %63
%108 = load i32, i32* %14
%109 = icmp sge i32 %108, 3
br i1 %109, label %110, label %151
110: ; preds = %107
%111 = load i32, i32* %15
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %112
%114 = load i32, i32* %14
%115 = sub nsw i32 %114, 1
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds [7 x i32], [7 x i32]* %113, i64 0, i64 %116
%118 = load i32, i32* %117
%119 = load i32, i32* %10
%120 = icmp eq i32 %118, %119
br i1 %120, label %121, label %150
121: ; preds = %110
%122 = load i32, i32* %15
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %123
%125 = load i32, i32* %14
%126 = sub nsw i32 %125, 2
%127 = sext i32 %126 to i64
%128 = getelementptr inbounds [7 x i32], [7 x i32]* %124, i64 0, i64 %127
%129 = load i32, i32* %128
%130 = load i32, i32* %10
%131 = icmp eq i32 %129, %130
br i1 %131, label %132, label %150
132: ; preds = %121
%133 = load i32, i32* %15
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %134
%136 = load i32, i32* %14
%137 = sub nsw i32 %136, 3
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds [7 x i32], [7 x i32]* %135, i64 0, i64 %138
%140 = load i32, i32* %139
%141 = load i32, i32* %10
%142 = icmp eq i32 %140, %141
br i1 %142, label %143, label %150
143: ; preds = %132
%144 = load i32, i32* %11
%145 = icmp ne i32 %144, 0
br i1 %145, label %146, label %148
146: ; preds = %143
%147 = load i32, i32* %14
store i32 %147, i32* %8
br label %474
148: ; preds = %143
store i32 1, i32* %11
br label %149
149: ; preds = %148
br label %150
150: ; preds = %149, %132, %121, %110
br label %151
151: ; preds = %150, %107
%152 = load i32, i32* %14
%153 = icmp sge i32 %152, 2
br i1 %153, label %154, label %198
154: ; preds = %151
%155 = load i32, i32* %14
%156 = icmp sle i32 %155, 5
br i1 %156, label %157, label %198
157: ; preds = %154
%158 = load i32, i32* %15
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %159
%161 = load i32, i32* %14
%162 = sub nsw i32 %161, 1
%163 = sext i32 %162 to i64
%164 = getelementptr inbounds [7 x i32], [7 x i32]* %160, i64 0, i64 %163
%165 = load i32, i32* %164
%166 = load i32, i32* %10
%167 = icmp eq i32 %165, %166
br i1 %167, label %168, label %197
168: ; preds = %157
%169 = load i32, i32* %15
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %170
%172 = load i32, i32* %14
%173 = sub nsw i32 %172, 2
%174 = sext i32 %173 to i64
%175 = getelementptr inbounds [7 x i32], [7 x i32]* %171, i64 0, i64 %174
%176 = load i32, i32* %175
%177 = load i32, i32* %10
%178 = icmp eq i32 %176, %177
br i1 %178, label %179, label %197
179: ; preds = %168
%180 = load i32, i32* %15
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %181
%183 = load i32, i32* %14
%184 = add nsw i32 %183, 1
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds [7 x i32], [7 x i32]* %182, i64 0, i64 %185
%187 = load i32, i32* %186
%188 = load i32, i32* %10
%189 = icmp eq i32 %187, %188
br i1 %189, label %190, label %197
190: ; preds = %179
%191 = load i32, i32* %11
%192 = icmp ne i32 %191, 0
br i1 %192, label %193, label %195
193: ; preds = %190
%194 = load i32, i32* %14
store i32 %194, i32* %8
br label %474
195: ; preds = %190
store i32 1, i32* %11
br label %196
196: ; preds = %195
br label %197
197: ; preds = %196, %179, %168, %157
br label %198
198: ; preds = %197, %154, %151
%199 = load i32, i32* %14
%200 = icmp sge i32 %199, 1
br i1 %200, label %201, label %245
201: ; preds = %198
%202 = load i32, i32* %14
%203 = icmp sle i32 %202, 4
br i1 %203, label %204, label %245
204: ; preds = %201
%205 = load i32, i32* %15
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %206
%208 = load i32, i32* %14
%209 = sub nsw i32 %208, 1
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds [7 x i32], [7 x i32]* %207, i64 0, i64 %210
%212 = load i32, i32* %211
%213 = load i32, i32* %10
%214 = icmp eq i32 %212, %213
br i1 %214, label %215, label %244
215: ; preds = %204
%216 = load i32, i32* %15
%217 = sext i32 %216 to i64
%218 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %217
%219 = load i32, i32* %14
%220 = add nsw i32 %219, 1
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds [7 x i32], [7 x i32]* %218, i64 0, i64 %221
%223 = load i32, i32* %222
%224 = load i32, i32* %10
%225 = icmp eq i32 %223, %224
br i1 %225, label %226, label %244
226: ; preds = %215
%227 = load i32, i32* %15
%228 = sext i32 %227 to i64
%229 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %228
%230 = load i32, i32* %14
%231 = add nsw i32 %230, 2
%232 = sext i32 %231 to i64
%233 = getelementptr inbounds [7 x i32], [7 x i32]* %229, i64 0, i64 %232
%234 = load i32, i32* %233
%235 = load i32, i32* %10
%236 = icmp eq i32 %234, %235
br i1 %236, label %237, label %244
237: ; preds = %226
%238 = load i32, i32* %11
%239 = icmp ne i32 %238, 0
br i1 %239, label %240, label %242
240: ; preds = %237
%241 = load i32, i32* %14
store i32 %241, i32* %8
br label %474
242: ; preds = %237
store i32 1, i32* %11
br label %243
243: ; preds = %242
br label %244
244: ; preds = %243, %226, %215, %204
br label %245
245: ; preds = %244, %201, %198
%246 = load i32, i32* %14
%247 = icmp sle i32 %246, 3
br i1 %247, label %248, label %289
248: ; preds = %245
%249 = load i32, i32* %15
%250 = sext i32 %249 to i64
%251 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %250
%252 = load i32, i32* %14
%253 = add nsw i32 %252, 1
%254 = sext i32 %253 to i64
%255 = getelementptr inbounds [7 x i32], [7 x i32]* %251, i64 0, i64 %254
%256 = load i32, i32* %255
%257 = load i32, i32* %10
%258 = icmp eq i32 %256, %257
br i1 %258, label %259, label %288
259: ; preds = %248
%260 = load i32, i32* %15
%261 = sext i32 %260 to i64
%262 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %261
%263 = load i32, i32* %14
%264 = add nsw i32 %263, 2
%265 = sext i32 %264 to i64
%266 = getelementptr inbounds [7 x i32], [7 x i32]* %262, i64 0, i64 %265
%267 = load i32, i32* %266
%268 = load i32, i32* %10
%269 = icmp eq i32 %267, %268
br i1 %269, label %270, label %288
270: ; preds = %259
%271 = load i32, i32* %15
%272 = sext i32 %271 to i64
%273 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %272
%274 = load i32, i32* %14
%275 = add nsw i32 %274, 3
%276 = sext i32 %275 to i64
%277 = getelementptr inbounds [7 x i32], [7 x i32]* %273, i64 0, i64 %276
%278 = load i32, i32* %277
%279 = load i32, i32* %10
%280 = icmp eq i32 %278, %279
br i1 %280, label %281, label %288
281: ; preds = %270
%282 = load i32, i32* %11
%283 = icmp ne i32 %282, 0
br i1 %283, label %284, label %286
284: ; preds = %281
%285 = load i32, i32* %14
store i32 %285, i32* %8
br label %474
286: ; preds = %281
store i32 1, i32* %11
br label %287
287: ; preds = %286
br label %288
288: ; preds = %287, %270, %259, %248
br label %289
289: ; preds = %288, %245
%290 = load i32, i32* %15
%291 = sub nsw i32 %290, 1
store i32 %291, i32* %18
%292 = load i32, i32* %14
%293 = sub nsw i32 %292, 1
store i32 %293, i32* %19
store i32 0, i32* %17
store i32 1, i32* %16
br label %294
294: ; preds = %330, %289
%295 = load i32, i32* %18
%296 = icmp sge i32 %295, 0
br i1 %296, label %297, label %303
297: ; preds = %294
%298 = load i32, i32* %19
%299 = icmp sge i32 %298, 0
br i1 %299, label %300, label %303
300: ; preds = %297
%301 = load i32, i32* %16
%302 = icmp eq i32 %301, 1
br label %303
303: ; preds = %300, %297, %294
%304 = phi i1 [ false, %297 ], [ false, %294 ], [ %302, %300 ]
br i1 %304, label %305, label %335
305: ; preds = %303
%306 = load i32, i32* %18
%307 = sext i32 %306 to i64
%308 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %307
%309 = load i32, i32* %19
%310 = sext i32 %309 to i64
%311 = getelementptr inbounds [7 x i32], [7 x i32]* %308, i64 0, i64 %310
%312 = load i32, i32* %311
%313 = load i32, i32* %10
%314 = icmp ne i32 %312, %313
br i1 %314, label %315, label %316
315: ; preds = %305
store i32 0, i32* %16
br label %319
316: ; preds = %305
%317 = load i32, i32* %17
%318 = add nsw i32 %317, 1
store i32 %318, i32* %17
br label %319
319: ; preds = %316, %315
%320 = load i32, i32* %17
%321 = icmp eq i32 %320, 3
br i1 %321, label %322, label %329
322: ; preds = %319
%323 = load i32, i32* %11
%324 = icmp ne i32 %323, 0
br i1 %324, label %325, label %327
325: ; preds = %322
%326 = load i32, i32* %14
store i32 %326, i32* %8
br label %474
327: ; preds = %322
store i32 1, i32* %11
br label %328
328: ; preds = %327
br label %329
329: ; preds = %328, %319
br label %330
330: ; preds = %329
%331 = load i32, i32* %18
%332 = sub nsw i32 %331, 1
store i32 %332, i32* %18
%333 = load i32, i32* %19
%334 = sub nsw i32 %333, 1
store i32 %334, i32* %19
br label %294
335: ; preds = %303
%336 = load i32, i32* %15
%337 = add nsw i32 %336, 1
store i32 %337, i32* %18
%338 = load i32, i32* %14
%339 = add nsw i32 %338, 1
store i32 %339, i32* %19
store i32 1, i32* %16
br label %340
340: ; preds = %376, %335
%341 = load i32, i32* %18
%342 = icmp sle i32 %341, 5
br i1 %342, label %343, label %349
343: ; preds = %340
%344 = load i32, i32* %19
%345 = icmp sle i32 %344, 6
br i1 %345, label %346, label %349
346: ; preds = %343
%347 = load i32, i32* %16
%348 = icmp eq i32 %347, 1
br label %349
349: ; preds = %346, %343, %340
%350 = phi i1 [ false, %343 ], [ false, %340 ], [ %348, %346 ]
br i1 %350, label %351, label %381
351: ; preds = %349
%352 = load i32, i32* %18
%353 = sext i32 %352 to i64
%354 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %353
%355 = load i32, i32* %19
%356 = sext i32 %355 to i64
%357 = getelementptr inbounds [7 x i32], [7 x i32]* %354, i64 0, i64 %356
%358 = load i32, i32* %357
%359 = load i32, i32* %10
%360 = icmp ne i32 %358, %359
br i1 %360, label %361, label %362
361: ; preds = %351
store i32 0, i32* %16
br label %365
362: ; preds = %351
%363 = load i32, i32* %17
%364 = add nsw i32 %363, 1
store i32 %364, i32* %17
br label %365
365: ; preds = %362, %361
%366 = load i32, i32* %17
%367 = icmp eq i32 %366, 3
br i1 %367, label %368, label %375
368: ; preds = %365
%369 = load i32, i32* %11
%370 = icmp ne i32 %369, 0
br i1 %370, label %371, label %373
371: ; preds = %368
%372 = load i32, i32* %14
store i32 %372, i32* %8
br label %474
373: ; preds = %368
store i32 1, i32* %11
br label %374
374: ; preds = %373
br label %375
375: ; preds = %374, %365
br label %376
376: ; preds = %375
%377 = load i32, i32* %18
%378 = add nsw i32 %377, 1
store i32 %378, i32* %18
%379 = load i32, i32* %19
%380 = add nsw i32 %379, 1
store i32 %380, i32* %19
br label %340
381: ; preds = %349
%382 = load i32, i32* %15
%383 = add nsw i32 %382, 1
store i32 %383, i32* %18
%384 = load i32, i32* %14
%385 = sub nsw i32 %384, 1
store i32 %385, i32* %19
store i32 0, i32* %17
store i32 1, i32* %16
br label %386
386: ; preds = %422, %381
%387 = load i32, i32* %18
%388 = icmp sle i32 %387, 5
br i1 %388, label %389, label %395
389: ; preds = %386
%390 = load i32, i32* %19
%391 = icmp sge i32 %390, 0
br i1 %391, label %392, label %395
392: ; preds = %389
%393 = load i32, i32* %16
%394 = icmp eq i32 %393, 1
br label %395
395: ; preds = %392, %389, %386
%396 = phi i1 [ false, %389 ], [ false, %386 ], [ %394, %392 ]
br i1 %396, label %397, label %427
397: ; preds = %395
%398 = load i32, i32* %18
%399 = sext i32 %398 to i64
%400 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %399
%401 = load i32, i32* %19
%402 = sext i32 %401 to i64
%403 = getelementptr inbounds [7 x i32], [7 x i32]* %400, i64 0, i64 %402
%404 = load i32, i32* %403
%405 = load i32, i32* %10
%406 = icmp ne i32 %404, %405
br i1 %406, label %407, label %408
407: ; preds = %397
store i32 0, i32* %16
br label %411
408: ; preds = %397
%409 = load i32, i32* %17
%410 = add nsw i32 %409, 1
store i32 %410, i32* %17
br label %411
411: ; preds = %408, %407
%412 = load i32, i32* %17
%413 = icmp eq i32 %412, 3
br i1 %413, label %414, label %421
414: ; preds = %411
%415 = load i32, i32* %11
%416 = icmp ne i32 %415, 0
br i1 %416, label %417, label %419
417: ; preds = %414
%418 = load i32, i32* %14
store i32 %418, i32* %8
br label %474
419: ; preds = %414
store i32 1, i32* %11
br label %420
420: ; preds = %419
br label %421
421: ; preds = %420, %411
br label %422
422: ; preds = %421
%423 = load i32, i32* %18
%424 = add nsw i32 %423, 1
store i32 %424, i32* %18
%425 = load i32, i32* %19
%426 = sub nsw i32 %425, 1
store i32 %426, i32* %19
br label %386
427: ; preds = %395
%428 = load i32, i32* %15
%429 = sub nsw i32 %428, 1
store i32 %429, i32* %18
%430 = load i32, i32* %14
%431 = add nsw i32 %430, 1
store i32 %431, i32* %19
store i32 1, i32* %16
br label %432
432: ; preds = %468, %427
%433 = load i32, i32* %18
%434 = icmp sge i32 %433, 0
br i1 %434, label %435, label %441
435: ; preds = %432
%436 = load i32, i32* %19
%437 = icmp sle i32 %436, 6
br i1 %437, label %438, label %441
438: ; preds = %435
%439 = load i32, i32* %16
%440 = icmp eq i32 %439, 1
br label %441
441: ; preds = %438, %435, %432
%442 = phi i1 [ false, %435 ], [ false, %432 ], [ %440, %438 ]
br i1 %442, label %443, label %473
443: ; preds = %441
%444 = load i32, i32* %18
%445 = sext i32 %444 to i64
%446 = getelementptr inbounds [6 x [7 x i32]], [6 x [7 x i32]]* %20, i64 0, i64 %445
%447 = load i32, i32* %19
%448 = sext i32 %447 to i64
%449 = getelementptr inbounds [7 x i32], [7 x i32]* %446, i64 0, i64 %448
%450 = load i32, i32* %449
%451 = load i32, i32* %10
%452 = icmp ne i32 %450, %451
br i1 %452, label %453, label %454
453: ; preds = %443
store i32 0, i32* %16
br label %457
454: ; preds = %443
%455 = load i32, i32* %17
%456 = add nsw i32 %455, 1
store i32 %456, i32* %17
br label %457
457: ; preds = %454, %453
%458 = load i32, i32* %17
%459 = icmp eq i32 %458, 3
br i1 %459, label %460, label %467
460: ; preds = %457
%461 = load i32, i32* %11
%462 = icmp ne i32 %461, 0
br i1 %462, label %463, label %465
463: ; preds = %460
%464 = load i32, i32* %14
store i32 %464, i32* %8
br label %474
465: ; preds = %460
store i32 1, i32* %11
br label %466
466: ; preds = %465
br label %467
467: ; preds = %466, %457
br label %468
468: ; preds = %467
%469 = load i32, i32* %18
%470 = sub nsw i32 %469, 1
store i32 %470, i32* %18
%471 = load i32, i32* %19
%472 = add nsw i32 %471, 1
store i32 %472, i32* %19
br label %432
473: ; preds = %441
store i32 -1, i32* %8
br label %474
474: ; preds = %473, %463, %417, %371, %325, %284, %240, %193, %146, %102
%475 = load i32, i32* %8
ret i32 %475
}

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