#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*/ minimax(char *, int, int, int *);
int rand();
void aiGenerateMove(int difficultyLevel, int *field, char board[]) {
  if (difficultyLevel == 1) {
    do {
      *field = rand() % 9 + 1;
    } while (board[*field - 1] != ' ');
  } else if (difficultyLevel == 2) {
    int i;
    for (i = 0; i < 7; i += 3)
      if (board[i] != ' ' && board[i] == board[i + 1] && board[i + 2] == ' ') {
        *field = i + 3;
        return;
      }
    for (i = 1; i < 8; i += 3)
      if (board[i] != ' ' && board[i] == board[i + 1] && board[i - 1] == ' ') {
        *field = i;
        return;
      }
    for (i = 0; i < 7; i += 3)
      if (board[i] != ' ' && board[i] == board[i + 2] && board[i + 1] == ' ') {
        *field = i + 2;
        return;
      }
    for (i = 0; i < 3; i++)
      if (board[i] != ' ' && board[i] == board[i + 3] && board[i + 6] == ' ') {
        *field = i + 7;
        return;
      }
    for (i = 3; i < 6; i++)
      if (board[i] != ' ' && board[i] == board[i + 3] && board[i - 3] == ' ') {
        *field = i - 2;
        return;
      }
    for (i = 0; i < 3; i++)
      if (board[i] != ' ' && board[i] == board[i + 6] && board[i + 3] == ' ') {
        *field = i + 4;
        return;
      }
    if (board[0] != ' ' && board[0] == board[4] && board[8] == ' ') {
      *field = 9;
      return;
    }
    if (board[4] != ' ' && board[4] == board[8] && board[0] == ' ') {
      *field = 1;
      return;
    }
    if (board[0] != ' ' && board[0] == board[8] && board[4] == ' ') {
      *field = 5;
      return;
    }
    if (board[2] != ' ' && board[2] == board[4] && board[6] == ' ') {
      *field = 7;
      return;
    }
    if (board[4] != ' ' && board[4] == board[6] && board[2] == ' ') {
      *field = 3;
      return;
    }
    if (board[2] != ' ' && board[2] == board[6] && board[4] == ' ') {
      *field = 5;
      return;
    }
    aiGenerateMove(1, field, board);
  } else if (difficultyLevel == 3) {
    minimax(board, 9, true, field);
  }
}


x86 assembly (clang, -O0):
<aiGenerateMove>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
cmpl   $0x1,-0x4(%rbp)
jne    118c <aiGenerateMove+0x5c>
jmp    1152 <aiGenerateMove+0x22>
mov    $0x0,%al
call   1050 <rand@plt>
mov    $0x9,%ecx
cltd
idiv   %ecx
add    $0x1,%edx
mov    -0x10(%rbp),%rax
mov    %edx,(%rax)
mov    -0x18(%rbp),%rax
mov    -0x10(%rbp),%rcx
mov    (%rcx),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    1152 <aiGenerateMove+0x22>
jmp    16bc <aiGenerateMove+0x58c>
cmpl   $0x2,-0x4(%rbp)
jne    1691 <aiGenerateMove+0x561>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x7,-0x1c(%rbp)
jge    121f <aiGenerateMove+0xef>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     120c <aiGenerateMove+0xdc>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x18(%rbp),%rcx
mov    -0x1c(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    120c <aiGenerateMove+0xdc>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    120c <aiGenerateMove+0xdc>
mov    -0x1c(%rbp),%ecx
add    $0x3,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    16bc <aiGenerateMove+0x58c>
jmp    1211 <aiGenerateMove+0xe1>
mov    -0x1c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x1c(%rbp)
jmp    119d <aiGenerateMove+0x6d>
movl   $0x1,-0x1c(%rbp)
cmpl   $0x8,-0x1c(%rbp)
jge    12a5 <aiGenerateMove+0x175>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     1292 <aiGenerateMove+0x162>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x18(%rbp),%rcx
mov    -0x1c(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    1292 <aiGenerateMove+0x162>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    1292 <aiGenerateMove+0x162>
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    16bc <aiGenerateMove+0x58c>
jmp    1297 <aiGenerateMove+0x167>
mov    -0x1c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x1c(%rbp)
jmp    1226 <aiGenerateMove+0xf6>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x7,-0x1c(%rbp)
jge    132e <aiGenerateMove+0x1fe>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     131b <aiGenerateMove+0x1eb>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x18(%rbp),%rcx
mov    -0x1c(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    131b <aiGenerateMove+0x1eb>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    131b <aiGenerateMove+0x1eb>
mov    -0x1c(%rbp),%ecx
add    $0x2,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    16bc <aiGenerateMove+0x58c>
jmp    1320 <aiGenerateMove+0x1f0>
mov    -0x1c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x1c(%rbp)
jmp    12ac <aiGenerateMove+0x17c>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x3,-0x1c(%rbp)
jge    13b7 <aiGenerateMove+0x287>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     13a4 <aiGenerateMove+0x274>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x18(%rbp),%rcx
mov    -0x1c(%rbp),%edx
add    $0x3,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    13a4 <aiGenerateMove+0x274>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    13a4 <aiGenerateMove+0x274>
mov    -0x1c(%rbp),%ecx
add    $0x7,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    16bc <aiGenerateMove+0x58c>
jmp    13a9 <aiGenerateMove+0x279>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1335 <aiGenerateMove+0x205>
movl   $0x3,-0x1c(%rbp)
cmpl   $0x6,-0x1c(%rbp)
jge    1440 <aiGenerateMove+0x310>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     142d <aiGenerateMove+0x2fd>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x18(%rbp),%rcx
mov    -0x1c(%rbp),%edx
add    $0x3,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    142d <aiGenerateMove+0x2fd>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    142d <aiGenerateMove+0x2fd>
mov    -0x1c(%rbp),%ecx
sub    $0x2,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    16bc <aiGenerateMove+0x58c>
jmp    1432 <aiGenerateMove+0x302>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    13be <aiGenerateMove+0x28e>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x3,-0x1c(%rbp)
jge    14c9 <aiGenerateMove+0x399>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     14b6 <aiGenerateMove+0x386>
mov    -0x18(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
mov    -0x18(%rbp),%rcx
mov    -0x1c(%rbp),%edx
add    $0x6,%edx
movslq %edx,%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    14b6 <aiGenerateMove+0x386>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    14b6 <aiGenerateMove+0x386>
mov    -0x1c(%rbp),%ecx
add    $0x4,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
jmp    16bc <aiGenerateMove+0x58c>
jmp    14bb <aiGenerateMove+0x38b>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1447 <aiGenerateMove+0x317>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
je     1510 <aiGenerateMove+0x3e0>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x18(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
cmp    %ecx,%eax
jne    1510 <aiGenerateMove+0x3e0>
mov    -0x18(%rbp),%rax
movsbl 0x8(%rax),%eax
cmp    $0x20,%eax
jne    1510 <aiGenerateMove+0x3e0>
mov    -0x10(%rbp),%rax
movl   $0x9,(%rax)
jmp    16bc <aiGenerateMove+0x58c>
mov    -0x18(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x20,%eax
je     1558 <aiGenerateMove+0x428>
mov    -0x18(%rbp),%rax
movsbl 0x4(%rax),%eax
mov    -0x18(%rbp),%rcx
movsbl 0x8(%rcx),%ecx
cmp    %ecx,%eax
jne    1558 <aiGenerateMove+0x428>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    1558 <aiGenerateMove+0x428>
mov    -0x10(%rbp),%rax
movl   $0x1,(%rax)
jmp    16bc <aiGenerateMove+0x58c>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
je     159f <aiGenerateMove+0x46f>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
mov    -0x18(%rbp),%rcx
movsbl 0x8(%rcx),%ecx
cmp    %ecx,%eax
jne    159f <aiGenerateMove+0x46f>
mov    -0x18(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x20,%eax
jne    159f <aiGenerateMove+0x46f>
mov    -0x10(%rbp),%rax
movl   $0x5,(%rax)
jmp    16bc <aiGenerateMove+0x58c>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x20,%eax
je     15e8 <aiGenerateMove+0x4b8>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%eax
mov    -0x18(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
cmp    %ecx,%eax
jne    15e8 <aiGenerateMove+0x4b8>
mov    -0x18(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x20,%eax
jne    15e8 <aiGenerateMove+0x4b8>
mov    -0x10(%rbp),%rax
movl   $0x7,(%rax)
jmp    16bc <aiGenerateMove+0x58c>
mov    -0x18(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x20,%eax
je     1631 <aiGenerateMove+0x501>
mov    -0x18(%rbp),%rax
movsbl 0x4(%rax),%eax
mov    -0x18(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
cmp    %ecx,%eax
jne    1631 <aiGenerateMove+0x501>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x20,%eax
jne    1631 <aiGenerateMove+0x501>
mov    -0x10(%rbp),%rax
movl   $0x3,(%rax)
jmp    16bc <aiGenerateMove+0x58c>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x20,%eax
je     167a <aiGenerateMove+0x54a>
mov    -0x18(%rbp),%rax
movsbl 0x2(%rax),%eax
mov    -0x18(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
cmp    %ecx,%eax
jne    167a <aiGenerateMove+0x54a>
mov    -0x18(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x20,%eax
jne    167a <aiGenerateMove+0x54a>
mov    -0x10(%rbp),%rax
movl   $0x5,(%rax)
jmp    16bc <aiGenerateMove+0x58c>
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
mov    $0x1,%edi
call   1040 <aiGenerateMove@plt>
jmp    16b7 <aiGenerateMove+0x587>
cmpl   $0x3,-0x4(%rbp)
jne    16b2 <aiGenerateMove+0x582>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rcx
mov    $0x9,%esi
mov    $0x1,%edx
call   1030 <minimax@plt>
jmp    16b7 <aiGenerateMove+0x587>
jmp    16bc <aiGenerateMove+0x58c>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<aiGenerateMove>:
push   %r14
push   %rbx
push   %rax
mov    %rdx,%rbx
mov    %rsi,%r14
cmp    $0x3,%edi
je     117c <aiGenerateMove+0x5c>
cmp    $0x2,%edi
je     1198 <aiGenerateMove+0x78>
cmp    $0x1,%edi
jne    135f <aiGenerateMove+0x23f>
nopl   (%rax)
xor    %eax,%eax
call   1040 <rand@plt>
cltq
imul   $0x38e38e39,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x21,%rcx
add    %edx,%ecx
lea    (%rcx,%rcx,8),%ecx
mov    %eax,%edx
sub    %ecx,%edx
neg    %ecx
add    %ecx,%eax
add    $0x1,%eax
mov    %eax,(%r14)
movslq %edx,%rax
cmpb   $0x20,(%rbx,%rax,1)
jne    1140 <aiGenerateMove+0x20>
jmp    135f <aiGenerateMove+0x23f>
mov    %rbx,%rdi
mov    $0x9,%esi
mov    $0x1,%edx
mov    %r14,%rcx
add    $0x8,%rsp
pop    %rbx
pop    %r14
jmp    1030 <minimax@plt>
mov    (%rbx),%cl
cmp    $0x20,%cl
je     11af <aiGenerateMove+0x8f>
cmp    0x1(%rbx),%cl
jne    11af <aiGenerateMove+0x8f>
mov    $0x3,%eax
cmpb   $0x20,0x2(%rbx)
je     11e2 <aiGenerateMove+0xc2>
mov    0x3(%rbx),%dl
cmp    $0x20,%dl
je     11c7 <aiGenerateMove+0xa7>
cmp    0x4(%rbx),%dl
jne    11c7 <aiGenerateMove+0xa7>
mov    $0x6,%eax
cmpb   $0x20,0x5(%rbx)
je     11e2 <aiGenerateMove+0xc2>
mov    0x6(%rbx),%dil
cmp    $0x20,%dil
je     11ea <aiGenerateMove+0xca>
cmp    0x7(%rbx),%dil
jne    11ea <aiGenerateMove+0xca>
mov    $0x9,%eax
cmpb   $0x20,0x8(%rbx)
jne    11ea <aiGenerateMove+0xca>
mov    %eax,(%r14)
jmp    135f <aiGenerateMove+0x23f>
mov    0x1(%rbx),%al
cmp    $0x20,%al
jne    1345 <aiGenerateMove+0x225>
mov    0x4(%rbx),%r11b
cmp    $0x20,%r11b
je     1213 <aiGenerateMove+0xf3>
cmp    0x5(%rbx),%r11b
jne    1213 <aiGenerateMove+0xf3>
mov    $0x4,%esi
cmp    $0x20,%dl
je     135c <aiGenerateMove+0x23c>
mov    0x7(%rbx),%r9b
cmp    $0x20,%r9b
je     1232 <aiGenerateMove+0x112>
cmp    0x8(%rbx),%r9b
jne    1232 <aiGenerateMove+0x112>
mov    $0x7,%esi
cmp    $0x20,%dil
je     135c <aiGenerateMove+0x23c>
cmp    $0x20,%cl
je     1249 <aiGenerateMove+0x129>
cmp    0x2(%rbx),%cl
jne    1249 <aiGenerateMove+0x129>
mov    $0x2,%esi
cmp    $0x20,%al
je     135c <aiGenerateMove+0x23c>
cmp    $0x20,%dl
je     1262 <aiGenerateMove+0x142>
cmp    0x5(%rbx),%dl
jne    1262 <aiGenerateMove+0x142>
mov    $0x5,%esi
cmp    $0x20,%r11b
je     135c <aiGenerateMove+0x23c>
cmp    $0x20,%dil
je     127d <aiGenerateMove+0x15d>
cmp    0x8(%rbx),%dil
jne    127d <aiGenerateMove+0x15d>
mov    $0x8,%esi
cmp    $0x20,%r9b
je     135c <aiGenerateMove+0x23c>
cmp    $0x20,%cl
je     1295 <aiGenerateMove+0x175>
cmp    %dl,%cl
jne    1295 <aiGenerateMove+0x175>
mov    $0x7,%esi
cmp    $0x20,%dil
je     135c <aiGenerateMove+0x23c>
cmp    $0x20,%al
je     12ad <aiGenerateMove+0x18d>
cmp    %r11b,%al
jne    12ad <aiGenerateMove+0x18d>
mov    $0x8,%esi
cmp    $0x20,%r9b
je     135c <aiGenerateMove+0x23c>
mov    0x2(%rbx),%r8b
cmp    $0x20,%r8b
je     12cc <aiGenerateMove+0x1ac>
cmp    0x5(%rbx),%r8b
jne    12cc <aiGenerateMove+0x1ac>
mov    $0x9,%esi
cmpb   $0x20,0x8(%rbx)
je     135c <aiGenerateMove+0x23c>
cmp    $0x20,%dl
je     12e0 <aiGenerateMove+0x1c0>
cmp    %dil,%dl
jne    12e0 <aiGenerateMove+0x1c0>
mov    $0x1,%esi
cmp    $0x20,%cl
je     135c <aiGenerateMove+0x23c>
cmp    $0x20,%r11b
je     12f4 <aiGenerateMove+0x1d4>
cmp    %r9b,%r11b
jne    12f4 <aiGenerateMove+0x1d4>
mov    $0x2,%esi
cmp    $0x20,%al
je     135c <aiGenerateMove+0x23c>
mov    0x5(%rbx),%r10b
cmp    $0x20,%r10b
jne    1367 <aiGenerateMove+0x247>
cmp    $0x20,%cl
je     1312 <aiGenerateMove+0x1f2>
cmp    %dil,%cl
jne    1312 <aiGenerateMove+0x1f2>
mov    $0x4,%esi
cmp    $0x20,%dl
je     135c <aiGenerateMove+0x23c>
cmp    $0x20,%al
je     1326 <aiGenerateMove+0x206>
cmp    %r9b,%al
jne    1326 <aiGenerateMove+0x206>
mov    $0x5,%esi
cmp    $0x20,%r11b
je     135c <aiGenerateMove+0x23c>
cmp    $0x20,%r8b
jne    1394 <aiGenerateMove+0x274>
cmp    $0x20,%cl
je     137a <aiGenerateMove+0x25a>
cmp    %r11b,%cl
jne    137a <aiGenerateMove+0x25a>
cmpb   $0x20,0x8(%rbx)
jne    137a <aiGenerateMove+0x25a>
movl   $0x9,(%r14)
jmp    135f <aiGenerateMove+0x23f>
cmp    0x2(%rbx),%al
jne    11f5 <aiGenerateMove+0xd5>
mov    $0x1,%esi
cmp    $0x20,%cl
jne    11f5 <aiGenerateMove+0xd5>
mov    %esi,(%r14)
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret
cmp    0x8(%rbx),%r10b
jne    12fe <aiGenerateMove+0x1de>
mov    $0x3,%esi
cmp    $0x20,%r8b
je     135c <aiGenerateMove+0x23c>
jmp    12fe <aiGenerateMove+0x1de>
cmp    $0x20,%r11b
je     13a7 <aiGenerateMove+0x287>
cmp    0x8(%rbx),%r11b
jne    13a7 <aiGenerateMove+0x287>
cmp    $0x20,%cl
jne    13c0 <aiGenerateMove+0x2a0>
movl   $0x1,(%r14)
jmp    135f <aiGenerateMove+0x23f>
cmp    0x8(%rbx),%r8b
jne    132c <aiGenerateMove+0x20c>
mov    $0x6,%esi
cmp    $0x20,%r10b
je     135c <aiGenerateMove+0x23c>
jmp    132c <aiGenerateMove+0x20c>
cmp    $0x20,%cl
je     13c0 <aiGenerateMove+0x2a0>
cmp    0x8(%rbx),%cl
jne    13c0 <aiGenerateMove+0x2a0>
cmp    $0x20,%r11b
jne    13c0 <aiGenerateMove+0x2a0>
movl   $0x5,(%r14)
jmp    135f <aiGenerateMove+0x23f>
cmp    $0x20,%r8b
je     13da <aiGenerateMove+0x2ba>
cmp    %r11b,%r8b
jne    13da <aiGenerateMove+0x2ba>
cmp    $0x20,%dil
jne    13da <aiGenerateMove+0x2ba>
movl   $0x7,(%r14)
jmp    135f <aiGenerateMove+0x23f>
cmp    $0x20,%r11b
je     13f7 <aiGenerateMove+0x2d7>
cmp    %dil,%r11b
jne    13f7 <aiGenerateMove+0x2d7>
cmp    $0x20,%r8b
jne    1408 <aiGenerateMove+0x2e8>
movl   $0x3,(%r14)
jmp    135f <aiGenerateMove+0x23f>
cmp    $0x20,%r8b
je     1408 <aiGenerateMove+0x2e8>
cmp    %dil,%r8b
jne    1408 <aiGenerateMove+0x2e8>
cmp    $0x20,%r11b
je     13b7 <aiGenerateMove+0x297>
xor    %eax,%eax
call   1040 <rand@plt>
cltq
imul   $0x38e38e39,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x21,%rcx
add    %edx,%ecx
lea    (%rcx,%rcx,8),%ecx
mov    %eax,%edx
sub    %ecx,%edx
neg    %ecx
add    %ecx,%eax
add    $0x1,%eax
mov    %eax,(%r14)
movslq %edx,%rax
cmpb   $0x20,(%rbx,%rax,1)
jne    1408 <aiGenerateMove+0x2e8>
jmp    135f <aiGenerateMove+0x23f>

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

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