#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 col_penalty(char *, int, int);
scalar_t__ get_dot(char *, int, int, int, int);
int row_penalty(char *, int, int);
int score_array(char Dots[], int Hgt, int Wid) {
  int x, y, worstedge, first, last, sum;
  int penalty = 0;
  penalty = row_penalty(Dots, Hgt, Wid) + col_penalty(Dots, Hgt, 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++;
    }
  }
  if (sum == 0) {
    return -99999;
  }
  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++;
    }
  }
  if (sum == 0) {
    return -99999;
  }
  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++;
    }
  }
  if (sum == 0) {
    return -99999;
  }
  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++;
    }
  }
  if (sum == 0) {
    return -99999;
  }
  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    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
movl   $0x0,-0x34(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
call   1040 <row_penalty@plt>
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
call   1050 <col_penalty@plt>
mov    %eax,%ecx
mov    -0x38(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x34(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0xffffffff,-0x28(%rbp)
movl   $0xffffffff,-0x2c(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    11ed <score_array+0xbd>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
xor    %r8d,%r8d
call   1030 <get_dot@plt>
cmp    $0x0,%rax
je     11da <score_array+0xaa>
cmpl   $0x0,-0x28(%rbp)
jge    11cb <score_array+0x9b>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    11df <score_array+0xaf>
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    1190 <score_array+0x60>
cmpl   $0x0,-0x30(%rbp)
jne    1203 <score_array+0xd3>
movl   $0xfffe7961,-0x4(%rbp)
jmp    1605 <score_array+0x4d5>
mov    -0x30(%rbp),%eax
add    -0x2c(%rbp),%eax
sub    -0x28(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x14(%rbp),%eax
imul   -0x24(%rbp),%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0xffffffff,-0x28(%rbp)
movl   $0xffffffff,-0x2c(%rbp)
mov    -0x18(%rbp),%eax
and    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1299 <score_array+0x169>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
mov    -0x14(%rbp),%r8d
sub    $0x1,%r8d
call   1030 <get_dot@plt>
cmp    $0x0,%rax
je     1286 <score_array+0x156>
cmpl   $0x0,-0x28(%rbp)
jge    1277 <score_array+0x147>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    128b <score_array+0x15b>
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    1237 <score_array+0x107>
cmpl   $0x0,-0x30(%rbp)
jne    12af <score_array+0x17f>
movl   $0xfffe7961,-0x4(%rbp)
jmp    1605 <score_array+0x4d5>
mov    -0x2c(%rbp),%eax
sub    -0x28(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x14(%rbp),%eax
imul   -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    12d7 <score_array+0x1a7>
mov    -0x30(%rbp),%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0xffffffff,-0x28(%rbp)
movl   $0xffffffff,-0x2c(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1350 <score_array+0x220>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x20(%rbp),%r8d
xor    %ecx,%ecx
call   1030 <get_dot@plt>
cmp    $0x0,%rax
je     133d <score_array+0x20d>
cmpl   $0x0,-0x28(%rbp)
jge    132e <score_array+0x1fe>
mov    -0x20(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1342 <score_array+0x212>
mov    -0x20(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x20(%rbp)
jmp    12f3 <score_array+0x1c3>
cmpl   $0x0,-0x30(%rbp)
jne    1366 <score_array+0x236>
movl   $0xfffe7961,-0x4(%rbp)
jmp    1605 <score_array+0x4d5>
mov    -0x2c(%rbp),%eax
sub    -0x28(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x18(%rbp),%eax
imul   -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    138e <score_array+0x25e>
mov    -0x30(%rbp),%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0xffffffff,-0x28(%rbp)
movl   $0xffffffff,-0x2c(%rbp)
mov    -0x14(%rbp),%eax
and    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    140d <score_array+0x2dd>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x20(%rbp),%r8d
call   1030 <get_dot@plt>
cmp    $0x0,%rax
je     13fa <score_array+0x2ca>
cmpl   $0x0,-0x28(%rbp)
jge    13eb <score_array+0x2bb>
mov    -0x20(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    13ff <score_array+0x2cf>
mov    -0x20(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x20(%rbp)
jmp    13ac <score_array+0x27c>
cmpl   $0x0,-0x30(%rbp)
jne    1423 <score_array+0x2f3>
movl   $0xfffe7961,-0x4(%rbp)
jmp    1605 <score_array+0x4d5>
mov    -0x2c(%rbp),%eax
sub    -0x28(%rbp),%eax
add    -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x18(%rbp),%eax
imul   -0x30(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    144b <score_array+0x31b>
mov    -0x30(%rbp),%eax
mov    %eax,-0x24(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    15f3 <score_array+0x4c3>
mov    -0x20(%rbp),%eax
and    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    15e0 <score_array+0x4b0>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x20(%rbp),%r8d
sub    $0x1,%r8d
call   1030 <get_dot@plt>
cmp    $0x0,%rax
jne    15cd <score_array+0x49d>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
mov    -0x20(%rbp),%r8d
sub    $0x1,%r8d
call   1030 <get_dot@plt>
cmp    $0x0,%rax
jne    15cd <score_array+0x49d>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
mov    -0x20(%rbp),%r8d
add    $0x1,%r8d
call   1030 <get_dot@plt>
cmp    $0x0,%rax
jne    15cd <score_array+0x49d>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
mov    -0x20(%rbp),%r8d
add    $0x1,%r8d
call   1030 <get_dot@plt>
cmp    $0x0,%rax
jne    15cd <score_array+0x49d>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
mov    -0x20(%rbp),%r8d
call   1030 <get_dot@plt>
cmp    $0x0,%rax
je     15c4 <score_array+0x494>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
sub    $0x2,%ecx
mov    -0x20(%rbp),%r8d
call   1030 <get_dot@plt>
cmp    $0x0,%rax
jne    15cd <score_array+0x49d>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
mov    -0x20(%rbp),%r8d
sub    $0x2,%r8d
call   1030 <get_dot@plt>
cmp    $0x0,%rax
jne    15cd <score_array+0x49d>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
add    $0x2,%ecx
mov    -0x20(%rbp),%r8d
call   1030 <get_dot@plt>
cmp    $0x0,%rax
jne    15cd <score_array+0x49d>
mov    -0x10(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
mov    -0x1c(%rbp),%ecx
mov    -0x20(%rbp),%r8d
add    $0x2,%r8d
call   1030 <get_dot@plt>
cmp    $0x0,%rax
jne    15cd <score_array+0x49d>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    15d2 <score_array+0x4a2>
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    146e <score_array+0x33e>
jmp    15e5 <score_array+0x4b5>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1459 <score_array+0x329>
mov    -0x24(%rbp),%eax
mov    -0x30(%rbp),%ecx
imul   -0x30(%rbp),%ecx
sub    %ecx,%eax
sub    -0x34(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x40,%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,%ebx
mov    %esi,%r12d
mov    %rdi,%rbp
call   1040 <row_penalty@plt>
mov    %eax,%r14d
mov    %rbp,%rdi
mov    %r12d,%esi
mov    %ebx,%edx
call   1050 <col_penalty@plt>
mov    $0xfffe7961,%ecx
mov    %rbx,0x18(%rsp)
test   %ebx,%ebx
jle    13ba <score_array+0x28a>
mov    %r14d,0x44(%rsp)
mov    %eax,0x40(%rsp)
mov    $0xffffffff,%r13d
mov    %rbp,0x8(%rsp)
xor    %r14d,%r14d
mov    $0xffffffff,%ebx
xor    %ebp,%ebp
mov    0x18(%rsp),%r15
mov    %r12,0x10(%rsp)
cs nopw 0x0(%rax,%rax,1)
nop
mov    %ebx,%r12d
mov    0x8(%rsp),%rdi
mov    0x10(%rsp),%rsi
mov    %r15d,%edx
mov    %ebp,%ecx
xor    %r8d,%r8d
call   1030 <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,%r14d
add    $0x2,%ebp
cmp    %r15d,%ebp
jl     11a0 <score_array+0x70>
test   %r14d,%r14d
je     13b5 <score_array+0x285>
mov    0x18(%rsp),%rax
cmp    $0x2,%eax
jl     13b5 <score_array+0x285>
sub    %ebx,%r13d
add    %r14d,%r13d
mov    0x10(%rsp),%rcx
imul   %ecx,%r13d
mov    %eax,%ebp
and    $0x1,%ebp
lea    -0x1(%rcx),%eax
mov    %eax,0x4(%rsp)
mov    $0xffffffff,%r12d
xor    %ebx,%ebx
mov    $0xffffffff,%r14d
nopw   0x0(%rax,%rax,1)
mov    %r14d,%r15d
mov    0x8(%rsp),%rdi
mov    0x10(%rsp),%rsi
mov    0x18(%rsp),%rdx
mov    %ebp,%ecx
mov    0x4(%rsp),%r8d
call   1030 <get_dot@plt>
test   %r14d,%r14d
cmovs  %ebp,%r14d
xor    %ecx,%ecx
test   %rax,%rax
cmove  %r15d,%r14d
mov    0x18(%rsp),%rax
cmovne %ebp,%r12d
setne  %cl
add    %ecx,%ebx
add    $0x2,%ebp
cmp    %eax,%ebp
jl     1220 <score_array+0xf0>
test   %ebx,%ebx
je     13b5 <score_array+0x285>
sub    %r14d,%r12d
add    %ebx,%r12d
mov    0x10(%rsp),%rcx
imul   %ecx,%r12d
cmp    %r13d,%r12d
cmovge %r13d,%r12d
test   %ecx,%ecx
jle    13b5 <score_array+0x285>
mov    $0xffffffff,%r13d
xor    %r14d,%r14d
mov    $0xffffffff,%ebx
xor    %ebp,%ebp
nopl   0x0(%rax)
mov    %ebx,%r15d
mov    0x8(%rsp),%rdi
mov    0x10(%rsp),%rsi
mov    0x18(%rsp),%rdx
xor    %ecx,%ecx
mov    %ebp,%r8d
call   1030 <get_dot@plt>
test   %ebx,%ebx
cmovs  %ebp,%ebx
xor    %ecx,%ecx
test   %rax,%rax
cmove  %r15d,%ebx
cmovne %ebp,%r13d
setne  %cl
add    %ecx,%r14d
add    $0x2,%ebp
cmp    0x10(%rsp),%ebp
jl     12a0 <score_array+0x170>
test   %r14d,%r14d
je     13b5 <score_array+0x285>
sub    %ebx,%r13d
add    %r14d,%r13d
mov    0x18(%rsp),%rax
imul   %eax,%r13d
cmp    %r12d,%r13d
cmovge %r12d,%r13d
mov    0x10(%rsp),%rcx
cmp    $0x2,%ecx
jl     13b5 <score_array+0x285>
mov    %r13d,0x28(%rsp)
mov    %ecx,%ebp
and    $0x1,%ebp
lea    -0x1(%rax),%edx
mov    %edx,0x4(%rsp)
mov    $0xffffffff,%r14d
xor    %r12d,%r12d
mov    $0xffffffff,%ebx
mov    0x10(%rsp),%r13
xchg   %ax,%ax
mov    %ebx,%r15d
mov    0x8(%rsp),%rdi
mov    %r13d,%esi
mov    0x18(%rsp),%rdx
mov    0x4(%rsp),%ecx
mov    %ebp,%r8d
call   1030 <get_dot@plt>
test   %ebx,%ebx
cmovs  %ebp,%ebx
xor    %ecx,%ecx
test   %rax,%rax
cmove  %r15d,%ebx
cmovne %ebp,%r14d
setne  %cl
add    %ecx,%r12d
add    $0x2,%ebp
cmp    %r13d,%ebp
jl     1330 <score_array+0x200>
test   %r12d,%r12d
mov    $0xfffe7961,%ecx
je     13ba <score_array+0x28a>
sub    %ebx,%r14d
add    %r12d,%r14d
mov    0x18(%rsp),%r12
imul   %r12d,%r14d
mov    0x28(%rsp),%r13d
cmp    %r13d,%r14d
cmovge %r13d,%r14d
mov    0x10(%rsp),%r15
test   %r15d,%r15d
mov    %r14d,0x34(%rsp)
jle    153b <score_array+0x40b>
movl   $0x0,0x24(%rsp)
xor    %eax,%eax
mov    0x8(%rsp),%r14
jmp    13da <score_array+0x2aa>
mov    $0xfffe7961,%ecx
mov    %ecx,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    0x4(%rsp),%ecx
mov    %ecx,%eax
cmp    %r15d,%ecx
je     1543 <score_array+0x413>
mov    %eax,%r13d
and    $0x1,%r13d
cmp    %r12d,%r13d
jge    1531 <score_array+0x401>
lea    -0x1(%rax),%ebx
lea    0x1(%rax),%ecx
mov    %ecx,0x4(%rsp)
lea    -0x2(%rax),%ecx
mov    %ecx,0x3c(%rsp)
mov    %rax,0x28(%rsp)
add    $0x2,%eax
mov    %eax,0x38(%rsp)
mov    %ebx,0x8(%rsp)
jmp    141d <score_array+0x2ed>
nopl   (%rax)
mov    0x8(%rsp),%ebx
add    $0x2,%r13d
cmp    %r12d,%r13d
jge    13cb <score_array+0x29b>
lea    -0x1(%r13),%ebp
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %ebp,%ecx
mov    %ebx,%r8d
call   1030 <get_dot@plt>
test   %rax,%rax
jne    1414 <score_array+0x2e4>
mov    %ebx,%r8d
lea    0x1(%r13),%ebx
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %ebx,%ecx
call   1030 <get_dot@plt>
test   %rax,%rax
jne    1410 <score_array+0x2e0>
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %ebp,%ecx
mov    0x4(%rsp),%ebp
mov    %ebp,%r8d
call   1030 <get_dot@plt>
test   %rax,%rax
jne    1410 <score_array+0x2e0>
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %ebx,%ecx
mov    %ebp,%r8d
call   1030 <get_dot@plt>
test   %rax,%rax
jne    1410 <score_array+0x2e0>
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %r13d,%ecx
mov    0x28(%rsp),%rbp
mov    %ebp,%r8d
call   1030 <get_dot@plt>
test   %rax,%rax
mov    0x8(%rsp),%ebx
je     1527 <score_array+0x3f7>
lea    -0x2(%r13),%ecx
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %ebp,%r8d
call   1030 <get_dot@plt>
test   %rax,%rax
jne    1414 <score_array+0x2e4>
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %r13d,%ecx
mov    0x3c(%rsp),%r8d
call   1030 <get_dot@plt>
test   %rax,%rax
jne    1414 <score_array+0x2e4>
lea    0x2(%r13),%ecx
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    0x28(%rsp),%r8
call   1030 <get_dot@plt>
test   %rax,%rax
jne    1414 <score_array+0x2e4>
mov    %r14,%rdi
mov    %r15d,%esi
mov    %r12d,%edx
mov    %r13d,%ecx
mov    0x38(%rsp),%r8d
call   1030 <get_dot@plt>
test   %rax,%rax
jne    1414 <score_array+0x2e4>
addl   $0x1,0x24(%rsp)
jmp    1414 <score_array+0x2e4>
add    $0x1,%eax
mov    %eax,%ecx
jmp    13cf <score_array+0x29f>
movl   $0x0,0x24(%rsp)
mov    0x24(%rsp),%ecx
imul   %ecx,%ecx
mov    0x40(%rsp),%eax
add    0x44(%rsp),%eax
add    %ecx,%eax
mov    0x34(%rsp),%ecx
sub    %eax,%ecx
jmp    13ba <score_array+0x28a>

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

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