#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 */
typedef int uint8_t;

/* Variables and functions */
int score(uint8_t board[42], char token, char oppToken) {
  uint8_t winLineStart[25] = {0,  7, 14, 21, 28, 35, 0, 1, 2, 3, 4,  5, 6,
                              14, 7, 0,  1,  2,  3,  3, 4, 5, 6, 13, 20};
  uint8_t winLineReps[25] = {0,  7, 14, 21, 28, 35, 0, 1, 2, 3, 4,  5, 6,
                             14, 7, 0,  1,  2,  3,  3, 4, 5, 6, 13, 20};
  uint8_t winLineSteps[25] = {1, 1, 1, 1, 1, 1, 7, 7, 7, 7, 7, 7, 7,
                              8, 8, 8, 8, 8, 8, 6, 6, 6, 6, 6, 6};
  uint8_t lineCount, lineStart, lineReps, pos, lineStep, position;
  int totalScore = 0, addScore = 0, testScore = 0;
  for (lineCount = 0; lineCount < 25; lineCount++) {
    lineStart = winLineStart[lineCount];
    lineStep = winLineSteps[lineCount];
    for (lineReps = 0; lineReps < winLineReps[lineCount]; lineReps++) {
      position = lineStart;
      for (pos = 0; pos < 4; pos++) {
        testScore = addScore;
        if (board[position] == token) {
          if (testScore < 0) {
            addScore = 0;
            break;
          } else {
            switch (testScore) {
            case 100:
              return 1000;
            case 10:
              addScore = 100;
              break;
            case 1:
              addScore = 10;
              break;
            case 0:
              addScore = 1;
              break;
            }
          }
        }
        if (board[position] == oppToken) {
          if (testScore > 0) {
            addScore = 0;
            break;
          } else {
            switch (testScore) {
            case -100:
              return -1000;
            case -10:
              addScore = -100;
              break;
            case -1:
              addScore = -10;
              break;
            case 0:
              addScore = -1;
              break;
            }
          }
        }
        position += lineStep;
      }
      lineStart += lineStep;
      totalScore += addScore;
    }
  }
  return totalScore;
}


x86 assembly (clang, -O0):
<score>:
push   %rbp
mov    %rsp,%rbp
sub    $0x190,%rsp
mov    %dl,%al
mov    %sil,%cl
mov    %rdi,-0x10(%rbp)
mov    %cl,-0x11(%rbp)
mov    %al,-0x12(%rbp)
lea    -0x80(%rbp),%rdi
lea    0xecb(%rip),%rsi
mov    $0x64,%edx
call   1030 <memcpy@plt>
lea    -0xf0(%rbp),%rdi
lea    0xf23(%rip),%rsi
mov    $0x64,%edx
call   1030 <memcpy@plt>
lea    -0x160(%rbp),%rdi
lea    0xf7b(%rip),%rsi
mov    $0x64,%edx
call   1030 <memcpy@plt>
movl   $0x0,-0x17c(%rbp)
movl   $0x0,-0x180(%rbp)
movl   $0x0,-0x184(%rbp)
movl   $0x0,-0x164(%rbp)
cmpl   $0x19,-0x164(%rbp)
jge    1425 <score+0x315>
movslq -0x164(%rbp),%rax
mov    -0x80(%rbp,%rax,4),%eax
mov    %eax,-0x168(%rbp)
movslq -0x164(%rbp),%rax
mov    -0x160(%rbp,%rax,4),%eax
mov    %eax,-0x174(%rbp)
movl   $0x0,-0x16c(%rbp)
mov    -0x16c(%rbp),%eax
movslq -0x164(%rbp),%rcx
cmp    -0xf0(%rbp,%rcx,4),%eax
jge    140c <score+0x2fc>
mov    -0x168(%rbp),%eax
mov    %eax,-0x178(%rbp)
movl   $0x0,-0x170(%rbp)
cmpl   $0x4,-0x170(%rbp)
jge    13d4 <score+0x2c4>
mov    -0x180(%rbp),%eax
mov    %eax,-0x184(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x178(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
movsbl -0x11(%rbp),%ecx
cmp    %ecx,%eax
jne    12e5 <score+0x1d5>
cmpl   $0x0,-0x184(%rbp)
jge    1252 <score+0x142>
movl   $0x0,-0x180(%rbp)
jmp    13d4 <score+0x2c4>
mov    -0x184(%rbp),%eax
mov    %eax,-0x188(%rbp)
test   %eax,%eax
je     12d1 <score+0x1c1>
jmp    126b <score+0x15b>
mov    -0x188(%rbp),%eax
sub    $0x1,%eax
je     12c2 <score+0x1b2>
jmp    127f <score+0x16f>
mov    -0x188(%rbp),%eax
sub    $0xa,%eax
je     12b3 <score+0x1a3>
jmp    1293 <score+0x183>
mov    -0x188(%rbp),%eax
sub    $0x64,%eax
jne    12db <score+0x1cb>
jmp    12a7 <score+0x197>
movl   $0x3e8,-0x4(%rbp)
jmp    142e <score+0x31e>
movl   $0x64,-0x180(%rbp)
jmp    12db <score+0x1cb>
movl   $0xa,-0x180(%rbp)
jmp    12db <score+0x1cb>
movl   $0x1,-0x180(%rbp)
jmp    12e0 <score+0x1d0>
jmp    12e5 <score+0x1d5>
mov    -0x10(%rbp),%rax
movslq -0x178(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
movsbl -0x12(%rbp),%ecx
cmp    %ecx,%eax
jne    13ae <score+0x29e>
cmpl   $0x0,-0x184(%rbp)
jle    131b <score+0x20b>
movl   $0x0,-0x180(%rbp)
jmp    13d4 <score+0x2c4>
mov    -0x184(%rbp),%eax
mov    %eax,-0x18c(%rbp)
sub    $0xffffff9c,%eax
je     1370 <score+0x260>
jmp    1335 <score+0x225>
mov    -0x18c(%rbp),%eax
sub    $0xfffffff6,%eax
je     137c <score+0x26c>
jmp    1349 <score+0x239>
mov    -0x18c(%rbp),%eax
sub    $0xffffffff,%eax
je     138b <score+0x27b>
jmp    135d <score+0x24d>
mov    -0x18c(%rbp),%eax
test   %eax,%eax
je     139a <score+0x28a>
jmp    13a4 <score+0x294>
movl   $0xfffffc18,-0x4(%rbp)
jmp    142e <score+0x31e>
movl   $0xffffff9c,-0x180(%rbp)
ff ff ff
jmp    13a4 <score+0x294>
movl   $0xfffffff6,-0x180(%rbp)
ff ff ff
jmp    13a4 <score+0x294>
movl   $0xffffffff,-0x180(%rbp)
ff ff ff
jmp    13a9 <score+0x299>
jmp    13ae <score+0x29e>
mov    -0x174(%rbp),%eax
add    -0x178(%rbp),%eax
mov    %eax,-0x178(%rbp)
mov    -0x170(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x170(%rbp)
jmp    1203 <score+0xf3>
mov    -0x174(%rbp),%eax
add    -0x168(%rbp),%eax
mov    %eax,-0x168(%rbp)
mov    -0x180(%rbp),%eax
add    -0x17c(%rbp),%eax
mov    %eax,-0x17c(%rbp)
mov    -0x16c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x16c(%rbp)
jmp    11d3 <score+0xc3>
jmp    1411 <score+0x301>
mov    -0x164(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x164(%rbp)
jmp    1197 <score+0x87>
mov    -0x17c(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x190,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<score>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
xor    %r11d,%r11d
xor    %ebx,%ebx
xor    %eax,%eax
jmp    1134 <score+0x34>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %ebx,%r9d
add    $0x1,%r11
mov    %r9d,%ebx
cmp    $0x19,%r11
je     148b <score+0x38b>
mov    $0x1ff7fbe,%ecx
bt     %r11,%rcx
jae    1120 <score+0x20>
lea    0xeba(%rip),%rcx
movslq (%rcx,%r11,4),%rcx
lea    0xf1f(%rip),%rbp
movslq 0x0(%rbp,%r11,4),%r15
cmp    $0x2,%ecx
mov    $0x1,%r8d
cmovge %ecx,%r8d
lea    (%rdi,%r15,4),%r14
jmp    117b <score+0x7b>
xor    %r9d,%r9d
add    %r15,%rcx
add    %r9d,%eax
mov    %r9d,%ebx
add    $0xffffffff,%r8d
je     1123 <score+0x23>
mov    (%rdi,%rcx,4),%ebp
mov    %ebx,%r13d
cmp    %esi,%ebp
jne    11f0 <score+0xf0>
xor    %r9d,%r9d
test   %ebx,%ebx
js     116c <score+0x6c>
cmp    $0x9,%ebx
jg     11a5 <score+0xa5>
test   %ebx,%ebx
je     11b2 <score+0xb2>
mov    %ebx,%r13d
cmp    $0x1,%ebx
jne    11f0 <score+0xf0>
mov    $0xa,%r13d
jmp    11f0 <score+0xf0>
cmp    $0xa,%ebx
jne    11d7 <score+0xd7>
mov    $0x64,%r13d
jmp    11f0 <score+0xf0>
cmp    %dl,%sil
je     120d <score+0x10d>
lea    (%r15,%rcx,1),%r12
mov    (%r14,%rcx,4),%r10d
cmp    %esi,%r10d
je     1267 <score+0x167>
mov    $0x1,%ebx
cmp    %edx,%r10d
je     116c <score+0x6c>
jmp    1300 <score+0x200>
mov    %ebx,%r13d
cmp    $0x64,%ebx
je     1486 <score+0x386>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmp    %edx,%ebp
jne    1240 <score+0x140>
xor    %r9d,%r9d
test   %ebx,%ebx
jg     116c <score+0x6c>
cmp    $0xfffffffe,%ebx
jle    1215 <score+0x115>
cmp    $0xffffffff,%ebx
je     1222 <score+0x122>
test   %ebx,%ebx
jne    1240 <score+0x140>
mov    $0xffffffff,%r13d
jmp    1240 <score+0x140>
cmp    $0xfffffff6,%ebx
jne    122a <score+0x12a>
mov    $0xffffff9c,%r13d
jmp    1240 <score+0x140>
mov    $0xfffffff6,%r13d
jmp    1240 <score+0x140>
cmp    $0xffffff9c,%ebx
je     147f <score+0x37f>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    (%rcx,%r15,1),%r12
mov    (%r14,%rcx,4),%r10d
cmp    %esi,%r10d
jne    1280 <score+0x180>
test   %r13d,%r13d
js     1169 <score+0x69>
cmp    $0x9,%r13d
jg     12a7 <score+0x1a7>
test   %r13d,%r13d
je     12ba <score+0x1ba>
cmp    $0x1,%r13d
jne    1280 <score+0x180>
mov    $0xa,%ebx
mov    $0x1,%r13d
jmp    1283 <score+0x183>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r13d,%ebx
cmp    %edx,%r10d
jne    1300 <score+0x200>
xor    %r9d,%r9d
test   %r13d,%r13d
jg     116c <score+0x6c>
cmp    $0xfffffffe,%r13d
jle    12cb <score+0x1cb>
cmp    $0xffffffff,%r13d
je     12e6 <score+0x1e6>
test   %r13d,%r13d
je     12c4 <score+0x1c4>
jmp    1300 <score+0x200>
cmp    $0xa,%r13d
jne    12d8 <score+0x1d8>
mov    $0x64,%ebx
mov    $0xa,%r13d
jmp    1283 <score+0x183>
mov    $0x1,%ebx
cmp    %dl,%sil
jne    1300 <score+0x200>
mov    $0xffffffff,%ebx
jmp    1300 <score+0x200>
cmp    $0xfffffff6,%r13d
jne    12ed <score+0x1ed>
mov    $0xffffff9c,%ebx
jmp    1300 <score+0x200>
mov    %r13d,%ebx
cmp    $0x64,%r13d
jne    1283 <score+0x183>
jmp    1486 <score+0x386>
mov    $0xfffffff6,%ebx
jmp    1300 <score+0x200>
cmp    $0xffffff9c,%r13d
je     147f <score+0x37f>
nopw   0x0(%rax,%rax,1)
add    %r15,%r12
mov    (%rdi,%r12,4),%ebp
mov    %ebx,%r13d
cmp    %esi,%ebp
jne    1370 <score+0x270>
test   %ebx,%ebx
js     1169 <score+0x69>
cmp    $0x9,%ebx
jg     132f <score+0x22f>
test   %ebx,%ebx
je     133c <score+0x23c>
mov    %ebx,%r13d
cmp    $0x1,%ebx
jne    1370 <score+0x270>
mov    $0xa,%r13d
jmp    1370 <score+0x270>
cmp    $0xa,%ebx
jne    135e <score+0x25e>
mov    $0x64,%r13d
jmp    1370 <score+0x270>
cmp    %dl,%sil
je     138d <score+0x28d>
add    %r15,%r12
mov    (%rdi,%r12,4),%ebx
cmp    %esi,%ebx
je     13db <score+0x2db>
xor    %r9d,%r9d
cmp    %edx,%ebx
setne  %r9b
jmp    116c <score+0x6c>
mov    %ebx,%r13d
cmp    $0x64,%ebx
je     1486 <score+0x386>
nopw   0x0(%rax,%rax,1)
cmp    %edx,%ebp
jne    13b3 <score+0x2b3>
xor    %r9d,%r9d
test   %ebx,%ebx
jg     116c <score+0x6c>
cmp    $0xfffffffe,%ebx
jle    1395 <score+0x295>
cmp    $0xffffffff,%ebx
je     13a2 <score+0x2a2>
test   %ebx,%ebx
jne    13b3 <score+0x2b3>
mov    $0xffffffff,%r13d
jmp    13b3 <score+0x2b3>
cmp    $0xfffffff6,%ebx
jne    13aa <score+0x2aa>
mov    $0xffffff9c,%r13d
jmp    13b3 <score+0x2b3>
mov    $0xfffffff6,%r13d
jmp    13b3 <score+0x2b3>
cmp    $0xffffff9c,%ebx
je     147f <score+0x37f>
add    %r15,%r12
mov    (%rdi,%r12,4),%ebx
cmp    %esi,%ebx
jne    13e9 <score+0x2e9>
test   %r13d,%r13d
js     1169 <score+0x69>
cmp    $0x9,%r13d
jg     141d <score+0x31d>
test   %r13d,%r13d
je     1431 <score+0x331>
mov    %r13d,%r10d
cmp    $0x1,%r13d
jne    13ec <score+0x2ec>
mov    $0xa,%r10d
mov    $0x1,%r13d
jmp    13ec <score+0x2ec>
mov    %r13d,%r10d
cmp    %edx,%ebx
jne    1415 <score+0x315>
xor    %r9d,%r9d
test   %r13d,%r13d
jg     116c <score+0x6c>
cmp    $0xfffffffe,%r13d
jle    144b <score+0x34b>
cmp    $0xffffffff,%r13d
je     1467 <score+0x367>
mov    %r10d,%r9d
test   %r13d,%r13d
je     1440 <score+0x340>
jmp    116c <score+0x6c>
mov    %r10d,%r9d
jmp    116c <score+0x6c>
cmp    $0xa,%r13d
jne    145c <score+0x35c>
mov    $0x64,%r10d
mov    $0xa,%r13d
jmp    13ec <score+0x2ec>
mov    $0x1,%r9d
cmp    %dl,%sil
jne    116c <score+0x6c>
mov    $0xffffffff,%r9d
jmp    116c <score+0x6c>
cmp    $0xfffffff6,%r13d
jne    1472 <score+0x372>
mov    $0xffffff9c,%r9d
jmp    116c <score+0x6c>
mov    %r13d,%r10d
cmp    $0x64,%r13d
jne    13ec <score+0x2ec>
jmp    1486 <score+0x386>
mov    $0xfffffff6,%r9d
jmp    116c <score+0x6c>
mov    %r10d,%r9d
cmp    $0xffffff9c,%r13d
jne    116c <score+0x6c>
mov    $0xfffffc18,%eax
jmp    148b <score+0x38b>
mov    $0x3e8,%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@__const.score.winLineStart = [25 x i32] [i32 0, i32 7, i32 14, i32 21, i32 28, i32 35, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 14, i32 7, i32 0, i32 1, i32 2, i32 3, i32 3, i32 4, i32 5, i32 6, i32 13, i32 20]
@__const.score.winLineReps = [25 x i32] [i32 0, i32 7, i32 14, i32 21, i32 28, i32 35, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 14, i32 7, i32 0, i32 1, i32 2, i32 3, i32 3, i32 4, i32 5, i32 6, i32 13, i32 20]
@__const.score.winLineSteps = [25 x i32] [i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6]
define i32 @score(i32* %0, i8 signext %1, i8 signext %2) {
%4 = alloca i32
%5 = alloca i32*
%6 = alloca i8
%7 = alloca i8
%8 = alloca [25 x i32]
%9 = alloca [25 x i32]
%10 = alloca [25 x 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
store i32* %0, i32** %5
store i8 %1, i8* %6
store i8 %2, i8* %7
%20 = bitcast [25 x i32]* %8 to i8*
%21 = bitcast [25 x i32]* %9 to i8*
%22 = bitcast [25 x i32]* %10 to i8*
store i32 0, i32* %17
store i32 0, i32* %18
store i32 0, i32* %19
store i32 0, i32* %11
br label %23
23: ; preds = %108, %3
%24 = load i32, i32* %11
%25 = icmp slt i32 %24, 25
br i1 %25, label %26, label %111
26: ; preds = %23
%27 = load i32, i32* %11
%28 = sext i32 %27 to i64
%29 = getelementptr inbounds [25 x i32], [25 x i32]* %8, i64 0, i64 %28
%30 = load i32, i32* %29
store i32 %30, i32* %12
%31 = load i32, i32* %11
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds [25 x i32], [25 x i32]* %10, i64 0, i64 %32
%34 = load i32, i32* %33
store i32 %34, i32* %15
store i32 0, i32* %13
br label %35
35: ; preds = %104, %26
%36 = load i32, i32* %13
%37 = load i32, i32* %11
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds [25 x i32], [25 x i32]* %9, i64 0, i64 %38
%40 = load i32, i32* %39
%41 = icmp slt i32 %36, %40
br i1 %41, label %42, label %107
42: ; preds = %35
%43 = load i32, i32* %12
store i32 %43, i32* %16
store i32 0, i32* %14
br label %44
44: ; preds = %94, %42
%45 = load i32, i32* %14
%46 = icmp slt i32 %45, 4
br i1 %46, label %47, label %97
47: ; preds = %44
%48 = load i32, i32* %18
store i32 %48, i32* %19
%49 = load i32*, i32** %5
%50 = load i32, i32* %16
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds i32, i32* %49, i64 %51
%53 = load i32, i32* %52
%54 = load i8, i8* %6
%55 = sext i8 %54 to i32
%56 = icmp eq i32 %53, %55
br i1 %56, label %57, label %69
57: ; preds = %47
%58 = load i32, i32* %19
%59 = icmp slt i32 %58, 0
br i1 %59, label %60, label %61
60: ; preds = %57
store i32 0, i32* %18
br label %97
61: ; preds = %57
%62 = load i32, i32* %19
switch i32 %62, label %67 [
i32 100, label %63
i32 10, label %64
i32 1, label %65
i32 0, label %66
]
63: ; preds = %61
store i32 1000, i32* %4
br label %113
64: ; preds = %61
store i32 100, i32* %18
br label %67
65: ; preds = %61
store i32 10, i32* %18
br label %67
66: ; preds = %61
store i32 1, i32* %18
br label %67
67: ; preds = %61, %66, %65, %64
br label %68
68: ; preds = %67
br label %69
69: ; preds = %68, %47
%70 = load i32*, i32** %5
%71 = load i32, i32* %16
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds i32, i32* %70, i64 %72
%74 = load i32, i32* %73
%75 = load i8, i8* %7
%76 = sext i8 %75 to i32
%77 = icmp eq i32 %74, %76
br i1 %77, label %78, label %90
78: ; preds = %69
%79 = load i32, i32* %19
%80 = icmp sgt i32 %79, 0
br i1 %80, label %81, label %82
81: ; preds = %78
store i32 0, i32* %18
br label %97
82: ; preds = %78
%83 = load i32, i32* %19
switch i32 %83, label %88 [
i32 -100, label %84
i32 -10, label %85
i32 -1, label %86
i32 0, label %87
]
84: ; preds = %82
store i32 -1000, i32* %4
br label %113
85: ; preds = %82
store i32 -100, i32* %18
br label %88
86: ; preds = %82
store i32 -10, i32* %18
br label %88
87: ; preds = %82
store i32 -1, i32* %18
br label %88
88: ; preds = %82, %87, %86, %85
br label %89
89: ; preds = %88
br label %90
90: ; preds = %89, %69
%91 = load i32, i32* %15
%92 = load i32, i32* %16
%93 = add nsw i32 %92, %91
store i32 %93, i32* %16
br label %94
94: ; preds = %90
%95 = load i32, i32* %14
%96 = add nsw i32 %95, 1
store i32 %96, i32* %14
br label %44
97: ; preds = %81, %60, %44
%98 = load i32, i32* %15
%99 = load i32, i32* %12
%100 = add nsw i32 %99, %98
store i32 %100, i32* %12
%101 = load i32, i32* %18
%102 = load i32, i32* %17
%103 = add nsw i32 %102, %101
store i32 %103, i32* %17
br label %104
104: ; preds = %97
%105 = load i32, i32* %13
%106 = add nsw i32 %105, 1
store i32 %106, i32* %13
br label %35
107: ; preds = %35
br label %108
108: ; preds = %107
%109 = load i32, i32* %11
%110 = add nsw i32 %109, 1
store i32 %110, i32* %11
br label %23
111: ; preds = %23
%112 = load i32, i32* %17
store i32 %112, i32* %4
br label %113
113: ; preds = %111, %84, %63
%114 = load i32, i32* %4
ret i32 %114
}

LLVM IR (-O2):
@__const.score.winLineReps = [25 x i32] [i32 0, i32 7, i32 14, i32 21, i32 28, i32 35, i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 14, i32 7, i32 0, i32 1, i32 2, i32 3, i32 3, i32 4, i32 5, i32 6, i32 13, i32 20]
@__const.score.winLineSteps = [25 x i32] [i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 7, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 6, i32 6, i32 6, i32 6, i32 6, i32 6]
define i32 @score(i32* nocapture %0, i8 signext %1, i8 signext %2) {
%4 = sext i8 %1 to i32
%5 = sext i8 %2 to i32
%6 = icmp eq i8 %1, %2
%7 = icmp eq i8 %1, %2
%8 = icmp eq i8 %1, %2
%9 = icmp eq i8 %1, %2
br label %10
10: ; preds = %3, %144
%11 = phi i64 [ 0, %3 ], [ %147, %144 ]
%12 = phi i32 [ 0, %3 ], [ %146, %144 ]
%13 = phi i32 [ 0, %3 ], [ %145, %144 ]
%14 = lshr i64 33521598, %11
%15 = and i64 %14, 1
%16 = icmp eq i64 %15, 0
br i1 %16, label %144, label %17
17: ; preds = %10
%18 = getelementptr inbounds [25 x i32], [25 x i32]* @__const.score.winLineReps, i64 0, i64 %11
%19 = load i32, i32* %18
%20 = getelementptr inbounds [25 x i32], [25 x i32]* @__const.score.winLineSteps, i64 0, i64 %11
%21 = load i32, i32* %20
%22 = getelementptr inbounds [25 x i32], [25 x i32]* @__const.score.winLineReps, i64 0, i64 %11
%23 = load i32, i32* %22
%24 = sext i32 %23 to i64
%25 = sext i32 %21 to i64
%26 = call i32 @llvm.smax.i32(i32 %19, i32 1)
br label %27
27: ; preds = %17, %138
%28 = phi i64 [ %24, %17 ], [ %140, %138 ]
%29 = phi i32 [ %12, %17 ], [ %139, %138 ]
%30 = phi i32 [ %13, %17 ], [ %141, %138 ]
%31 = phi i32 [ 0, %17 ], [ %142, %138 ]
%32 = getelementptr inbounds i32, i32* %0, i64 %28
%33 = load i32, i32* %32
%34 = icmp eq i32 %33, %4
br i1 %34, label %35, label %40
35: ; preds = %27
%36 = icmp slt i32 %29, 0
br i1 %36, label %138, label %37
37: ; preds = %35
switch i32 %29, label %40 [
i32 100, label %149
i32 10, label %38
i32 1, label %39
i32 0, label %43
]
38: ; preds = %37
br label %40
39: ; preds = %37
br label %40
40: ; preds = %37, %39, %38, %27
%41 = phi i32 [ %29, %37 ], [ 10, %39 ], [ 100, %38 ], [ %29, %27 ]
%42 = icmp eq i32 %33, %5
br i1 %42, label %44, label %50
43: ; preds = %37
br i1 %6, label %49, label %56
44: ; preds = %40
%45 = icmp sgt i32 %29, 0
br i1 %45, label %138, label %46
46: ; preds = %44
switch i32 %29, label %50 [
i32 -100, label %149
i32 -10, label %47
i32 -1, label %48
i32 0, label %49
]
47: ; preds = %46
br label %50
48: ; preds = %46
br label %50
49: ; preds = %43, %46
br label %50
50: ; preds = %46, %49, %48, %47, %40
%51 = phi i32 [ %41, %46 ], [ -1, %49 ], [ -10, %48 ], [ -100, %47 ], [ %41, %40 ]
%52 = add i64 %28, %25
%53 = getelementptr inbounds i32, i32* %0, i64 %52
%54 = load i32, i32* %53
%55 = icmp eq i32 %54, %4
br i1 %55, label %61, label %69
56: ; preds = %43
%57 = add i64 %28, %25
%58 = getelementptr inbounds i32, i32* %0, i64 %57
%59 = load i32, i32* %58
%60 = icmp eq i32 %59, %4
br i1 %60, label %65, label %75
61: ; preds = %50
%62 = icmp slt i32 %51, 0
br i1 %62, label %138, label %63
63: ; preds = %61
switch i32 %51, label %69 [
i32 100, label %149
i32 10, label %68
i32 1, label %65
i32 0, label %64
]
64: ; preds = %63
br i1 %7, label %80, label %84
65: ; preds = %56, %63
%66 = phi i32 [ %54, %63 ], [ %59, %56 ]
%67 = phi i64 [ %52, %63 ], [ %57, %56 ]
br label %69
68: ; preds = %63
br label %69
69: ; preds = %68, %65, %63, %50
%70 = phi i32 [ %54, %63 ], [ %66, %65 ], [ %54, %68 ], [ %54, %50 ]
%71 = phi i64 [ %52, %63 ], [ %67, %65 ], [ %52, %68 ], [ %52, %50 ]
%72 = phi i32 [ %51, %63 ], [ 1, %65 ], [ 10, %68 ], [ %51, %50 ]
%73 = phi i32 [ %51, %63 ], [ 10, %65 ], [ 100, %68 ], [ %51, %50 ]
%74 = icmp eq i32 %70, %5
br i1 %74, label %77, label %84
75: ; preds = %56
%76 = icmp eq i32 %59, %5
br i1 %76, label %138, label %84
77: ; preds = %69
%78 = icmp sgt i32 %72, 0
br i1 %78, label %138, label %79
79: ; preds = %77
switch i32 %72, label %84 [
i32 -100, label %149
i32 -10, label %83
i32 -1, label %82
i32 0, label %80
]
80: ; preds = %79, %64
%81 = phi i64 [ %71, %79 ], [ %52, %64 ]
br label %84
82: ; preds = %79
br label %84
83: ; preds = %79
br label %84
84: ; preds = %75, %83, %82, %80, %79, %69, %64
%85 = phi i64 [ %71, %79 ], [ %81, %80 ], [ %71, %82 ], [ %71, %83 ], [ %71, %69 ], [ %52, %64 ], [ %57, %75 ]
%86 = phi i32 [ %73, %79 ], [ -1, %80 ], [ -10, %82 ], [ -100, %83 ], [ %73, %69 ], [ 1, %64 ], [ 1, %75 ]
%87 = add i64 %85, %25
%88 = getelementptr inbounds i32, i32* %0, i64 %87
%89 = load i32, i32* %88
%90 = icmp eq i32 %89, %4
br i1 %90, label %91, label %97
91: ; preds = %84
%92 = icmp slt i32 %86, 0
br i1 %92, label %138, label %93
93: ; preds = %91
switch i32 %86, label %97 [
i32 100, label %149
i32 10, label %96
i32 1, label %95
i32 0, label %94
]
94: ; preds = %93
br i1 %8, label %103, label %112
95: ; preds = %93
br label %97
96: ; preds = %93
br label %97
97: ; preds = %96, %95, %93, %84
%98 = phi i32 [ %86, %93 ], [ 10, %95 ], [ 100, %96 ], [ %86, %84 ]
%99 = icmp eq i32 %89, %5
br i1 %99, label %100, label %106
100: ; preds = %97
%101 = icmp sgt i32 %86, 0
br i1 %101, label %138, label %102
102: ; preds = %100
switch i32 %86, label %106 [
i32 -100, label %149
i32 -10, label %105
i32 -1, label %104
i32 0, label %103
]
103: ; preds = %102, %94
br label %106
104: ; preds = %102
br label %106
105: ; preds = %102
br label %106
106: ; preds = %105, %104, %103, %102, %97
%107 = phi i32 [ %98, %102 ], [ -1, %103 ], [ -10, %104 ], [ -100, %105 ], [ %98, %97 ]
%108 = add i64 %87, %25
%109 = getelementptr inbounds i32, i32* %0, i64 %108
%110 = load i32, i32* %109
%111 = icmp eq i32 %110, %4
br i1 %111, label %117, label %124
112: ; preds = %94
%113 = add i64 %87, %25
%114 = getelementptr inbounds i32, i32* %0, i64 %113
%115 = load i32, i32* %114
%116 = icmp eq i32 %115, %4
br i1 %116, label %121, label %129
117: ; preds = %106
%118 = icmp slt i32 %107, 0
br i1 %118, label %138, label %119
119: ; preds = %117
switch i32 %107, label %124 [
i32 100, label %149
i32 10, label %123
i32 1, label %121
i32 0, label %120
]
120: ; preds = %119
br i1 %9, label %135, label %138
121: ; preds = %112, %119
%122 = phi i32 [ %110, %119 ], [ %115, %112 ]
br label %124
123: ; preds = %119
br label %124
124: ; preds = %123, %121, %119, %106
%125 = phi i32 [ %110, %119 ], [ %122, %121 ], [ %110, %123 ], [ %110, %106 ]
%126 = phi i32 [ %107, %119 ], [ 1, %121 ], [ 10, %123 ], [ %107, %106 ]
%127 = phi i32 [ %107, %119 ], [ 10, %121 ], [ 100, %123 ], [ %107, %106 ]
%128 = icmp eq i32 %125, %5
br i1 %128, label %132, label %138
129: ; preds = %112
%130 = icmp ne i32 %115, %5
%131 = zext i1 %130 to i32
br label %138
132: ; preds = %124
%133 = icmp sgt i32 %126, 0
br i1 %133, label %138, label %134
134: ; preds = %132
switch i32 %126, label %138 [
i32 -100, label %149
i32 -10, label %137
i32 -1, label %136
i32 0, label %135
]
135: ; preds = %134, %120
br label %138
136: ; preds = %134
br label %138
137: ; preds = %134
br label %138
138: ; preds = %129, %75, %120, %124, %134, %135, %136, %137, %132, %117, %100, %91, %77, %61, %44, %35
%139 = phi i32 [ 0, %35 ], [ 0, %44 ], [ 0, %61 ], [ 0, %77 ], [ 0, %91 ], [ 0, %100 ], [ 0, %117 ], [ 0, %132 ], [ %127, %134 ], [ -1, %135 ], [ -10, %136 ], [ -100, %137 ], [ %127, %124 ], [ 1, %120 ], [ 0, %75 ], [ %131, %129 ]
%140 = add i64 %28, %25
%141 = add nsw i32 %139, %30
%142 = add nuw i32 %31, 1
%143 = icmp eq i32 %142, %26
br i1 %143, label %144, label %27
144: ; preds = %138, %10
%145 = phi i32 [ %13, %10 ], [ %141, %138 ]
%146 = phi i32 [ %12, %10 ], [ %139, %138 ]
%147 = add nuw nsw i64 %11, 1
%148 = icmp eq i64 %147, 25
br i1 %148, label %149, label %10
149: ; preds = %144, %46, %37, %63, %79, %93, %102, %119, %134
%150 = phi i32 [ -1000, %134 ], [ 1000, %119 ], [ -1000, %102 ], [ 1000, %93 ], [ -1000, %79 ], [ 1000, %63 ], [ -1000, %46 ], [ 1000, %37 ], [ %145, %144 ]
ret i32 %150
}