#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ clr_col(char *, int, int, int);
int /*<<< orphan*/ clr_row(char *, int, int, int);
scalar_t__ get_dot(char *, int, int, int, int);
const int score_array(char Dots[], int Hgt, int Wid) {
  int x, y, worstedge, first, last, sum;
  int penalty_local = 0;
  int penalty = 0;
  if (Hgt & 1) {
    if (Hgt < 12) {
      sum = 0;
      for (x = 1; x < Wid - 1; x++) {
        if (!(clr_col(Dots, Hgt, Wid, x))) {
          sum = 0;
          if (penalty_local) {
            penalty += penalty_local;
            penalty_local = 0;
          }
        } else {
          sum++;
          if (sum == 1) {
            penalty_local = Hgt;
          } else {
            penalty_local *= Hgt;
          }
        }
      }
    }
  } else {
    if (Wid < 12) {
      sum = 0;
      for (y = 1; y < Hgt - 1; y++) {
        if (!(clr_row(Dots, Hgt, Wid, y))) {
          sum = 0;
          if (penalty_local) {
            penalty += penalty_local;
            penalty_local = 0;
          }
        } else {
          sum++;
          if (sum == 1) {
            penalty_local = Wid;
          } else {
            penalty_local *= Wid;
          }
        }
      }
    }
  }
  sum = 0;
  first = -1;
  last = -1;
  for (x = 0; x < Wid; x += 2)
    if (get_dot(Dots, Hgt, Wid, x, 0)) {
      if (first < 0) {
        first = x;
      }
      last = x;
      sum++;
    }
  worstedge = sum + last - first;
  worstedge *= Hgt;
  sum = 0;
  first = -1;
  last = -1;
  for (x = Wid & 1; x < Wid; x += 2)
    if (get_dot(Dots, Hgt, Wid, x, Hgt - 1)) {
      if (first < 0) {
        first = x;
      }
      last = x;
      sum++;
    }
  sum += last - first;
  sum *= Hgt;
  if (sum < worstedge) {
    worstedge = sum;
  }
  sum = 0;
  first = -1;
  last = -1;
  for (y = 0; y < Hgt; y += 2)
    if (get_dot(Dots, Hgt, Wid, 0, y)) {
      if (first < 0) {
        first = y;
      }
      last = y;
      sum++;
    }
  sum += last - first;
  sum *= Wid;
  if (sum < worstedge) {
    worstedge = sum;
  }
  sum = 0;
  first = -1;
  last = -1;
  for (y = Hgt & 1; y < Hgt; y += 2)
    if (get_dot(Dots, Hgt, Wid, Wid - 1, y)) {
      if (first < 0) {
        first = y;
      }
      last = y;
      sum++;
    }
  sum += last - first;
  sum *= Wid;
  if (sum < worstedge) {
    worstedge = sum;
  }
  sum = 0;
  for (y = 0; y < Hgt; y++) {
    for (x = y & 1; x < Wid; x += 2) {
      if ((!get_dot(Dots, Hgt, Wid, x - 1, y - 1)) &&
          (!get_dot(Dots, Hgt, Wid, x + 1, y - 1)) &&
          (!get_dot(Dots, Hgt, Wid, x - 1, y + 1)) &&
          (!get_dot(Dots, Hgt, Wid, x + 1, y + 1)) &&
          ((!get_dot(Dots, Hgt, Wid, x, y)) ||
           ((!get_dot(Dots, Hgt, Wid, x - 2, y)) &&
            (!get_dot(Dots, Hgt, Wid, x, y - 2)) &&
            (!get_dot(Dots, Hgt, Wid, x + 2, y)) &&
            (!get_dot(Dots, Hgt, Wid, x, y + 2))))) {
        sum++;
      }
    }
  }
  return (worstedge - sum * sum - penalty);
}


x86 assembly (clang, -O0):
<score_array>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0xc(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     1213 <score_array+0xe3>
cmpl   $0xc,-0xc(%rbp)
jge    120e <score_array+0xde>
movl   $0x0,-0x28(%rbp)
movl   $0x1,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1209 <score_array+0xd9>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
call   1030 <clr_col@plt>
cmp    $0x0,%eax
jne    11c9 <score_array+0x99>
movl   $0x0,-0x28(%rbp)
cmpl   $0x0,-0x2c(%rbp)
je     11c4 <score_array+0x94>
mov    -0x2c(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
movl   $0x0,-0x2c(%rbp)
jmp    11f6 <score_array+0xc6>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x1,-0x28(%rbp)
jne    11e7 <score_array+0xb7>
mov    -0xc(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    11f1 <score_array+0xc1>
mov    -0xc(%rbp),%eax
imul   -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    11f6 <score_array+0xc6>
jmp    11fb <score_array+0xcb>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1177 <score_array+0x47>
jmp    120e <score_array+0xde>
jmp    12c7 <score_array+0x197>
cmpl   $0xc,-0x10(%rbp)
jge    12c2 <score_array+0x192>
movl   $0x0,-0x28(%rbp)
movl   $0x1,-0x18(%rbp)
mov    -0x18(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12bd <score_array+0x18d>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x18(%rbp),%ecx
call   1050 <clr_row@plt>
cmp    $0x0,%eax
jne    127d <score_array+0x14d>
movl   $0x0,-0x28(%rbp)
cmpl   $0x0,-0x2c(%rbp)
je     1278 <score_array+0x148>
mov    -0x2c(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
movl   $0x0,-0x2c(%rbp)
jmp    12aa <score_array+0x17a>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x1,-0x28(%rbp)
jne    129b <score_array+0x16b>
mov    -0x10(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    12a5 <score_array+0x175>
mov    -0x10(%rbp),%eax
imul   -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
jmp    12aa <score_array+0x17a>
jmp    12af <score_array+0x17f>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    122b <score_array+0xfb>
jmp    12c2 <score_array+0x192>
jmp    12c7 <score_array+0x197>
movl   $0x0,-0x28(%rbp)
movl   $0xffffffff,-0x20(%rbp)
movl   $0xffffffff,-0x24(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1340 <score_array+0x210>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
xor    %r8d,%r8d
call   1040 <get_dot@plt>
cmp    $0x0,%rax
je     132d <score_array+0x1fd>
cmpl   $0x0,-0x20(%rbp)
jge    131e <score_array+0x1ee>
mov    -0x14(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1332 <score_array+0x202>
mov    -0x14(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x14(%rbp)
jmp    12e3 <score_array+0x1b3>
mov    -0x28(%rbp),%eax
add    -0x24(%rbp),%eax
sub    -0x20(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0xc(%rbp),%eax
imul   -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0xffffffff,-0x20(%rbp)
movl   $0xffffffff,-0x24(%rbp)
mov    -0x10(%rbp),%eax
and    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    13d6 <score_array+0x2a6>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
mov    -0xc(%rbp),%r8d
sub    $0x1,%r8d
call   1040 <get_dot@plt>
cmp    $0x0,%rax
je     13c3 <score_array+0x293>
cmpl   $0x0,-0x20(%rbp)
jge    13b4 <score_array+0x284>
mov    -0x14(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    13c8 <score_array+0x298>
mov    -0x14(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x14(%rbp)
jmp    1374 <score_array+0x244>
mov    -0x24(%rbp),%eax
sub    -0x20(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0xc(%rbp),%eax
imul   -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    13fe <score_array+0x2ce>
mov    -0x28(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0xffffffff,-0x20(%rbp)
movl   $0xffffffff,-0x24(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1477 <score_array+0x347>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x18(%rbp),%r8d
xor    %ecx,%ecx
call   1040 <get_dot@plt>
cmp    $0x0,%rax
je     1464 <score_array+0x334>
cmpl   $0x0,-0x20(%rbp)
jge    1455 <score_array+0x325>
mov    -0x18(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1469 <score_array+0x339>
mov    -0x18(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x18(%rbp)
jmp    141a <score_array+0x2ea>
mov    -0x24(%rbp),%eax
sub    -0x20(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%eax
imul   -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    149f <score_array+0x36f>
mov    -0x28(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0xffffffff,-0x20(%rbp)
movl   $0xffffffff,-0x24(%rbp)
mov    -0xc(%rbp),%eax
and    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    151e <score_array+0x3ee>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x10(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x18(%rbp),%r8d
call   1040 <get_dot@plt>
cmp    $0x0,%rax
je     150b <score_array+0x3db>
cmpl   $0x0,-0x20(%rbp)
jge    14fc <score_array+0x3cc>
mov    -0x18(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x18(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1510 <score_array+0x3e0>
mov    -0x18(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x18(%rbp)
jmp    14bd <score_array+0x38d>
mov    -0x24(%rbp),%eax
sub    -0x20(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x10(%rbp),%eax
imul   -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1546 <score_array+0x416>
mov    -0x28(%rbp),%eax
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0x28(%rbp)
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    16ee <score_array+0x5be>
mov    -0x18(%rbp),%eax
and    $0x1,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    16db <score_array+0x5ab>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x18(%rbp),%r8d
sub    $0x1,%r8d
call   1040 <get_dot@plt>
cmp    $0x0,%rax
jne    16c8 <score_array+0x598>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
mov    -0x18(%rbp),%r8d
sub    $0x1,%r8d
call   1040 <get_dot@plt>
cmp    $0x0,%rax
jne    16c8 <score_array+0x598>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x18(%rbp),%r8d
add    $0x1,%r8d
call   1040 <get_dot@plt>
cmp    $0x0,%rax
jne    16c8 <score_array+0x598>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
mov    -0x18(%rbp),%r8d
add    $0x1,%r8d
call   1040 <get_dot@plt>
cmp    $0x0,%rax
jne    16c8 <score_array+0x598>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%r8d
call   1040 <get_dot@plt>
cmp    $0x0,%rax
je     16bf <score_array+0x58f>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
sub    $0x2,%ecx
mov    -0x18(%rbp),%r8d
call   1040 <get_dot@plt>
cmp    $0x0,%rax
jne    16c8 <score_array+0x598>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%r8d
sub    $0x2,%r8d
call   1040 <get_dot@plt>
cmp    $0x0,%rax
jne    16c8 <score_array+0x598>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
add    $0x2,%ecx
mov    -0x18(%rbp),%r8d
call   1040 <get_dot@plt>
cmp    $0x0,%rax
jne    16c8 <score_array+0x598>
mov    -0x8(%rbp),%rdi
mov    -0xc(%rbp),%esi
mov    -0x10(%rbp),%edx
mov    -0x14(%rbp),%ecx
mov    -0x18(%rbp),%r8d
add    $0x2,%r8d
call   1040 <get_dot@plt>
cmp    $0x0,%rax
jne    16c8 <score_array+0x598>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    16cd <score_array+0x59d>
mov    -0x14(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x14(%rbp)
jmp    1569 <score_array+0x439>
jmp    16e0 <score_array+0x5b0>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1554 <score_array+0x424>
mov    -0x1c(%rbp),%eax
mov    -0x28(%rbp),%ecx
imul   -0x28(%rbp),%ecx
sub    %ecx,%eax
sub    -0x30(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<score_array>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %edx,%r14d
mov    %rdi,%rbx
mov    %esi,%eax
and    $0x1,%eax
mov    %rsi,0x10(%rsp)
mov    %rdi,0x20(%rsp)
mov    %eax,0x30(%rsp)
jne    11fb <score_array+0xcb>
xor    %r12d,%r12d
cmp    $0xb,%r14d
jg     12b6 <score_array+0x186>
movl   $0x0,0x8(%rsp)
cmp    $0x3,%esi
jl     12a8 <score_array+0x178>
mov    $0x2,%r12d
sub    0x10(%rsp),%r12d
mov    $0x1,%ebp
movl   $0x0,0x8(%rsp)
xor    %r15d,%r15d
xor    %r13d,%r13d
jmp    11c2 <score_array+0x92>
nopl   0x0(%rax,%rax,1)
add    %r15d,0x8(%rsp)
xor    %r13d,%r13d
xor    %r15d,%r15d
lea    (%r12,%rbp,1),%eax
add    $0x1,%eax
mov    %ebp,%ecx
add    $0x1,%ecx
mov    %ecx,%ebp
cmp    $0x1,%eax
je     12a8 <score_array+0x178>
mov    %rbx,%rdi
mov    0x10(%rsp),%rsi
mov    %r14d,%edx
mov    %ebp,%ecx
call   1050 <clr_row@plt>
test   %eax,%eax
je     11a0 <score_array+0x70>
test   %r13d,%r13d
je     11f0 <score_array+0xc0>
add    $0x1,%r13d
imul   %r14d,%r15d
jmp    11ab <score_array+0x7b>
nopw   0x0(%rax,%rax,1)
mov    $0x1,%r13d
mov    %r14d,%r15d
jmp    11ab <score_array+0x7b>
cmp    $0xb,%esi
jg     12a0 <score_array+0x170>
movl   $0x0,0x8(%rsp)
cmp    $0x3,%r14d
jl     12a8 <score_array+0x178>
mov    $0x2,%r12d
sub    %r14d,%r12d
mov    $0x1,%ebp
movl   $0x0,0x8(%rsp)
xor    %r15d,%r15d
xor    %r13d,%r13d
jmp    125e <score_array+0x12e>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    %r15d,0x8(%rsp)
xor    %r13d,%r13d
xor    %r15d,%r15d
lea    (%r12,%rbp,1),%eax
add    $0x1,%eax
mov    %ebp,%ecx
add    $0x1,%ecx
mov    %ecx,%ebp
cmp    $0x1,%eax
je     12a8 <score_array+0x178>
mov    %rbx,%rdi
mov    0x10(%rsp),%rsi
mov    %r14d,%edx
mov    %ebp,%ecx
call   1030 <clr_col@plt>
test   %eax,%eax
je     1240 <score_array+0x110>
test   %r13d,%r13d
je     1290 <score_array+0x160>
add    $0x1,%r13d
imul   0x10(%rsp),%r15d
jmp    124b <score_array+0x11b>
cs nopw 0x0(%rax,%rax,1)
nop
mov    $0x1,%r13d
mov    0x10(%rsp),%rax
mov    %eax,%r15d
jmp    124b <score_array+0x11b>
movl   $0x0,0x8(%rsp)
test   %r14d,%r14d
jle    13b3 <score_array+0x283>
mov    0x8(%rsp),%r12d
mov    %r12d,0x8(%rsp)
mov    $0xffffffff,%r13d
xor    %r15d,%r15d
mov    $0xffffffff,%ebx
xor    %ebp,%ebp
nopl   0x0(%rax,%rax,1)
mov    %ebx,%r12d
mov    0x20(%rsp),%rdi
mov    0x10(%rsp),%rsi
mov    %r14d,%edx
mov    %ebp,%ecx
xor    %r8d,%r8d
call   1040 <get_dot@plt>
test   %ebx,%ebx
cmovs  %ebp,%ebx
xor    %ecx,%ecx
test   %rax,%rax
cmove  %r12d,%ebx
cmovne %ebp,%r13d
setne  %cl
add    %ecx,%r15d
add    $0x2,%ebp
cmp    %r14d,%ebp
jl     12d0 <score_array+0x1a0>
mov    0x20(%rsp),%rcx
sub    %ebx,%r13d
add    %r15d,%r13d
mov    0x10(%rsp),%rax
imul   %eax,%r13d
xor    %r15d,%r15d
cmp    $0x2,%r14d
jl     13a9 <score_array+0x279>
mov    %r14d,%ebp
and    $0x1,%ebp
lea    -0x1(%rax),%edx
mov    %edx,0xc(%rsp)
mov    $0xffffffff,%r15d
xor    %ebx,%ebx
mov    $0xffffffff,%r12d
cs nopw 0x0(%rax,%rax,1)
mov    %r12d,0x18(%rsp)
mov    0x20(%rsp),%rdi
mov    0x10(%rsp),%rsi
mov    %r14d,%edx
mov    %ebp,%ecx
mov    0xc(%rsp),%r8d
call   1040 <get_dot@plt>
mov    0x18(%rsp),%esi
test   %esi,%esi
cmovs  %ebp,%r12d
xor    %ecx,%ecx
test   %rax,%rax
cmove  %esi,%r12d
cmovne %ebp,%r15d
setne  %cl
add    %ecx,%ebx
add    $0x2,%ebp
cmp    %r14d,%ebp
jl     1350 <score_array+0x220>
sub    %r12d,%r15d
add    %ebx,%r15d
mov    0x8(%rsp),%r12d
mov    0x10(%rsp),%rax
mov    0x20(%rsp),%rbx
jmp    13c3 <score_array+0x293>
mov    0x8(%rsp),%r12d
mov    %rcx,%rbx
jmp    13c3 <score_array+0x293>
xor    %r13d,%r13d
xor    %r15d,%r15d
mov    0x10(%rsp),%rax
mov    0x8(%rsp),%r12d
imul   %eax,%r15d
cmp    %r13d,%r15d
cmovge %r13d,%r15d
test   %eax,%eax
jle    1690 <score_array+0x560>
mov    %r15d,0xc(%rsp)
mov    %r12d,0x8(%rsp)
mov    %r14,0x18(%rsp)
mov    $0xffffffff,%r14d
xor    %r13d,%r13d
mov    %rbx,%r12
mov    $0xffffffff,%ebx
xor    %ebp,%ebp
nopl   0x0(%rax,%rax,1)
mov    %ebx,%r15d
mov    %r12,%rdi
mov    0x10(%rsp),%rsi
mov    0x18(%rsp),%rdx
xor    %ecx,%ecx
mov    %ebp,%r8d
call   1040 <get_dot@plt>
test   %ebx,%ebx
cmovs  %ebp,%ebx
xor    %ecx,%ecx
test   %rax,%rax
cmove  %r15d,%ebx
mov    0x10(%rsp),%r15
cmovne %ebp,%r14d
setne  %cl
add    %ecx,%r13d
add    $0x2,%ebp
cmp    %r15d,%ebp
jl     1400 <score_array+0x2d0>
mov    0x18(%rsp),%rdx
sub    %ebx,%r14d
add    %r13d,%r14d
imul   %edx,%r14d
mov    0xc(%rsp),%eax
cmp    %eax,%r14d
cmovge %eax,%r14d
mov    %r14d,0x28(%rsp)
xor    %ecx,%ecx
mov    $0x0,%r13d
cmp    $0x2,%r15d
jl     14df <score_array+0x3af>
lea    -0x1(%rdx),%eax
mov    %eax,0xc(%rsp)
mov    $0xffffffff,%r13d
xor    %ebx,%ebx
mov    $0xffffffff,%ebp
mov    0x30(%rsp),%r14d
cs nopw 0x0(%rax,%rax,1)
nop
mov    %ebp,%r12d
mov    0x20(%rsp),%rdi
mov    0x10(%rsp),%rsi
mov    %rdx,%r15
mov    0xc(%rsp),%ecx
mov    %r14d,%r8d
call   1040 <get_dot@plt>
mov    %r15,%rdx
test   %ebp,%ebp
cmovs  %r14d,%ebp
xor    %ecx,%ecx
test   %rax,%rax
cmove  %r12d,%ebp
cmovne %r14d,%r13d
setne  %cl
add    %ecx,%ebx
add    $0x2,%r14d
cmp    0x10(%rsp),%r14d
jl     1490 <score_array+0x360>
sub    %ebp,%r13d
add    %ebx,%r13d
mov    0x10(%rsp),%r15
xor    %ecx,%ecx
imul   %edx,%r13d
test   %r15d,%r15d
jle    16a0 <score_array+0x570>
mov    %rdx,%r12
mov    %r13d,0x3c(%rsp)
movl   $0x0,0x2c(%rsp)
xor    %eax,%eax
mov    0x20(%rsp),%r14
jmp    151f <score_array+0x3ef>
cs nopw 0x0(%rax,%rax,1)
nop
mov    0xc(%rsp),%ecx
mov    %ecx,%eax
cmp    %r15d,%ecx
je     167c <score_array+0x54c>
mov    %eax,%ebp
and    $0x1,%ebp
cmp    %r12d,%ebp
jge    1550 <score_array+0x420>
lea    -0x1(%rax),%ebx
lea    0x1(%rax),%ecx
mov    %ecx,0xc(%rsp)
lea    -0x2(%rax),%ecx
mov    %ecx,0x44(%rsp)
mov    %rax,0x30(%rsp)
add    $0x2,%eax
mov    %eax,0x40(%rsp)
mov    %ebx,0x18(%rsp)
jmp    156c <score_array+0x43c>
nopl   0x0(%rax)
add    $0x1,%eax
mov    %eax,%ecx
jmp    1514 <score_array+0x3e4>
addl   $0x1,0x2c(%rsp)
nopl   0x0(%rax)
mov    0x18(%rsp),%ebx
add    $0x2,%ebp
cmp    %r12d,%ebp
jge    1510 <score_array+0x3e0>
lea    -0x1(%rbp),%r13d
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %r13d,%ecx
mov    %ebx,%r8d
call   1040 <get_dot@plt>
test   %rax,%rax
jne    1564 <score_array+0x434>
mov    %ebx,%r8d
lea    0x1(%rbp),%ebx
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %ebx,%ecx
call   1040 <get_dot@plt>
test   %rax,%rax
jne    1560 <score_array+0x430>
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %r13d,%ecx
mov    0xc(%rsp),%r13d
mov    %r13d,%r8d
call   1040 <get_dot@plt>
test   %rax,%rax
jne    1560 <score_array+0x430>
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %ebx,%ecx
mov    %r13d,%r8d
call   1040 <get_dot@plt>
test   %rax,%rax
jne    1560 <score_array+0x430>
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %ebp,%ecx
mov    0x30(%rsp),%rbx
mov    %ebx,%r8d
call   1040 <get_dot@plt>
test   %rax,%rax
je     1557 <score_array+0x427>
lea    -0x2(%rbp),%ecx
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %ebx,%r8d
call   1040 <get_dot@plt>
test   %rax,%rax
jne    1560 <score_array+0x430>
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %ebp,%ecx
mov    0x44(%rsp),%r8d
call   1040 <get_dot@plt>
test   %rax,%rax
mov    0x18(%rsp),%ebx
jne    1564 <score_array+0x434>
lea    0x2(%rbp),%ecx
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    0x30(%rsp),%r8
call   1040 <get_dot@plt>
test   %rax,%rax
jne    1564 <score_array+0x434>
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %ebp,%ecx
mov    0x40(%rsp),%r8d
call   1040 <get_dot@plt>
test   %rax,%rax
jne    1560 <score_array+0x430>
jmp    1557 <score_array+0x427>
mov    0x8(%rsp),%r12d
mov    0x28(%rsp),%eax
mov    0x2c(%rsp),%ecx
mov    0x3c(%rsp),%r13d
jmp    16a9 <score_array+0x579>
mov    %r15d,%eax
sar    $0x1f,%eax
and    %r15d,%eax
xor    %r13d,%r13d
xor    %ecx,%ecx
jmp    16a9 <score_array+0x579>
mov    0x8(%rsp),%r12d
mov    0x28(%rsp),%eax
cmp    %eax,%r13d
cmovl  %r13d,%eax
imul   %ecx,%ecx
add    %ecx,%r12d
sub    %r12d,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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