#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 /*<<< orphan*/ nums;

/* Variables and functions */
int /*<<< orphan*/ bzero(char *, int);
isValidSudoku(char **board, int boardRowSize, int boardColSize) {
  static char nums[9];
  int i, j, k, l;
  for (i = 0; i < 9; i++) {
    bzero(nums, sizeof(nums));
    for (j = 0; j < 9; j++) {
      if (board[i][j] == '.')
        continue;
      if (board[i][j] < '1' || board[i][j] > '9')
        return (0);
      if (nums[board[i][j] - '1'])
        return (0);
      nums[board[i][j] - '1'] = 1;
    }
  }
  for (i = 0; i < 9; i++) {
    bzero(nums, sizeof(nums));
    for (j = 0; j < 9; j++) {
      if (board[j][i] == '.')
        continue;
      if (board[j][i] < '1' || board[j][i] > '9')
        return (0);
      if (nums[board[j][i] - '1'])
        return (0);
      nums[board[j][i] - '1'] = 1;
    }
  }
  for (i = 0; i < 3; i++) {
    for (j = 0; j < 3; j++) {
      bzero(nums, sizeof(nums));
      for (k = i * 3; k < i * 3 + 3; k++) {
        for (l = j * 3; l < j * 3 + 3; l++) {
          if (board[k][l] == '.')
            continue;
          if (board[k][l] < '1' || board[k][l] > '9')
            return (0);
          if (nums[board[k][l] - '1'])
            return (0);
          nums[board[k][l] - '1'] = 1;
        }
      }
    }
  }
  return (1);
}


x86 assembly (clang, -O0):
<isValidSudoku>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
cmpl   $0x9,-0x1c(%rbp)
jge    123a <isValidSudoku+0x12a>
lea    0x2eef(%rip),%rdi
mov    $0x9,%esi
call   1030 <bzero@plt>
movl   $0x0,-0x20(%rbp)
cmpl   $0x9,-0x20(%rbp)
jge    1227 <isValidSudoku+0x117>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    1177 <isValidSudoku+0x67>
jmp    1219 <isValidSudoku+0x109>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jl     11b1 <isValidSudoku+0xa1>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    11bd <isValidSudoku+0xad>
movl   $0x0,-0x4(%rbp)
jmp    14c9 <isValidSudoku+0x3b9>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x31,%eax
movslq %eax,%rcx
lea    0x2e4b(%rip),%rax
cmpb   $0x0,(%rax,%rcx,1)
je     11f4 <isValidSudoku+0xe4>
movl   $0x0,-0x4(%rbp)
jmp    14c9 <isValidSudoku+0x3b9>
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x31,%eax
movslq %eax,%rcx
lea    0x2e14(%rip),%rax
movb   $0x1,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    114b <isValidSudoku+0x3b>
jmp    122c <isValidSudoku+0x11c>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1129 <isValidSudoku+0x19>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x9,-0x1c(%rbp)
jge    1352 <isValidSudoku+0x242>
lea    0x2dd7(%rip),%rdi
mov    $0x9,%esi
call   1030 <bzero@plt>
movl   $0x0,-0x20(%rbp)
cmpl   $0x9,-0x20(%rbp)
jge    133f <isValidSudoku+0x22f>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    128f <isValidSudoku+0x17f>
jmp    1331 <isValidSudoku+0x221>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jl     12c9 <isValidSudoku+0x1b9>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    12d5 <isValidSudoku+0x1c5>
movl   $0x0,-0x4(%rbp)
jmp    14c9 <isValidSudoku+0x3b9>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x31,%eax
movslq %eax,%rcx
lea    0x2d33(%rip),%rax
cmpb   $0x0,(%rax,%rcx,1)
je     130c <isValidSudoku+0x1fc>
movl   $0x0,-0x4(%rbp)
jmp    14c9 <isValidSudoku+0x3b9>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x1c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x31,%eax
movslq %eax,%rcx
lea    0x2cfc(%rip),%rax
movb   $0x1,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1263 <isValidSudoku+0x153>
jmp    1344 <isValidSudoku+0x234>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1241 <isValidSudoku+0x131>
movl   $0x0,-0x1c(%rbp)
cmpl   $0x3,-0x1c(%rbp)
jge    14c2 <isValidSudoku+0x3b2>
movl   $0x0,-0x20(%rbp)
cmpl   $0x3,-0x20(%rbp)
jge    14af <isValidSudoku+0x39f>
lea    0x2cae(%rip),%rdi
mov    $0x9,%esi
call   1030 <bzero@plt>
imul   $0x3,-0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
imul   $0x3,-0x1c(%rbp),%ecx
add    $0x3,%ecx
cmp    %ecx,%eax
jge    149c <isValidSudoku+0x38c>
imul   $0x3,-0x20(%rbp),%eax
mov    %eax,-0x28(%rbp)
mov    -0x28(%rbp),%eax
imul   $0x3,-0x20(%rbp),%ecx
add    $0x3,%ecx
cmp    %ecx,%eax
jge    1489 <isValidSudoku+0x379>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    13d9 <isValidSudoku+0x2c9>
jmp    147b <isValidSudoku+0x36b>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jl     1413 <isValidSudoku+0x303>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x39,%eax
jle    141f <isValidSudoku+0x30f>
movl   $0x0,-0x4(%rbp)
jmp    14c9 <isValidSudoku+0x3b9>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x31,%eax
movslq %eax,%rcx
lea    0x2be9(%rip),%rax
cmpb   $0x0,(%rax,%rcx,1)
je     1456 <isValidSudoku+0x346>
movl   $0x0,-0x4(%rbp)
jmp    14c9 <isValidSudoku+0x3b9>
mov    -0x10(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x31,%eax
movslq %eax,%rcx
lea    0x2bb2(%rip),%rax
movb   $0x1,(%rax,%rcx,1)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    13a5 <isValidSudoku+0x295>
jmp    148e <isValidSudoku+0x37e>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    138c <isValidSudoku+0x27c>
jmp    14a1 <isValidSudoku+0x391>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    136a <isValidSudoku+0x25a>
jmp    14b4 <isValidSudoku+0x3a4>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1359 <isValidSudoku+0x249>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<isValidSudoku>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rdi,%rbx
mov    $0xffffffcf,%r15d
xor    %ebp,%ebp
lea    0x2efc(%rip),%r14
jmp    1143 <isValidSudoku+0x33>
nop
movb   $0x1,(%rcx,%r14,1)
add    $0x1,%rbp
cmp    $0x9,%rbp
je     12f9 <isValidSudoku+0x1e9>
mov    %r14,%rdi
mov    $0x9,%esi
call   1030 <bzero@plt>
mov    (%rbx,%rbp,8),%rax
movsbq (%rax),%rcx
cmp    $0x2e,%rcx
je     1183 <isValidSudoku+0x73>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    (%rbx,%rbp,8),%rax
movsbq 0x1(%rax),%rcx
cmp    $0x2e,%rcx
je     11b3 <isValidSudoku+0xa3>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    (%rbx,%rbp,8),%rax
movsbq 0x2(%rax),%rcx
cmp    $0x2e,%rcx
je     11e3 <isValidSudoku+0xd3>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    (%rbx,%rbp,8),%rax
movsbq 0x3(%rax),%rcx
cmp    $0x2e,%rcx
je     1213 <isValidSudoku+0x103>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    (%rbx,%rbp,8),%rax
movsbq 0x4(%rax),%rcx
cmp    $0x2e,%rcx
je     1243 <isValidSudoku+0x133>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    (%rbx,%rbp,8),%rax
movsbq 0x5(%rax),%rcx
cmp    $0x2e,%rcx
je     1273 <isValidSudoku+0x163>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    (%rbx,%rbp,8),%rax
movsbq 0x6(%rax),%rcx
cmp    $0x2e,%rcx
je     129b <isValidSudoku+0x18b>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    (%rbx,%rbp,8),%rax
movsbq 0x7(%rax),%rcx
cmp    $0x2e,%rcx
je     12c3 <isValidSudoku+0x1b3>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    (%rbx,%rbp,8),%rax
movsbq 0x8(%rax),%rcx
cmp    $0x2e,%rcx
je     1135 <isValidSudoku+0x25>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
je     1130 <isValidSudoku+0x20>
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %ebp,%ebp
jmp    130e <isValidSudoku+0x1fe>
nopl   (%rax)
add    $0x1,%rbp
cmp    $0x9,%rbp
je     14c7 <isValidSudoku+0x3b7>
mov    %r14,%rdi
mov    $0x9,%esi
call   1030 <bzero@plt>
mov    (%rbx),%rax
movsbq (%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     1342 <isValidSudoku+0x232>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x8(%rbx),%rax
movsbq (%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     136e <isValidSudoku+0x25e>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x10(%rbx),%rax
movsbq (%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     139e <isValidSudoku+0x28e>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x18(%rbx),%rax
movsbq (%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     13ce <isValidSudoku+0x2be>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x20(%rbx),%rax
movsbq (%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     13fe <isValidSudoku+0x2ee>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x28(%rbx),%rax
movsbq (%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     142e <isValidSudoku+0x31e>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x30(%rbx),%rax
movsbq (%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     145e <isValidSudoku+0x34e>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x38(%rbx),%rax
movsbq (%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     148e <isValidSudoku+0x37e>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x40(%rbx),%rax
movsbq (%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     1300 <isValidSudoku+0x1f0>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
jmp    1300 <isValidSudoku+0x1f0>
xor    %r12d,%r12d
xor    %r13d,%r13d
xor    %ebp,%ebp
jmp    14de <isValidSudoku+0x3ce>
add    $0x3,%rbp
cmp    $0x9,%ebp
je     16b0 <isValidSudoku+0x5a0>
mov    %r14,%rdi
mov    $0x9,%esi
call   1030 <bzero@plt>
mov    (%rbx,%r12,8),%rax
movsbq (%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     151f <isValidSudoku+0x40f>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    (%rbx,%r12,8),%rax
movsbq 0x1(%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     1550 <isValidSudoku+0x440>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    (%rbx,%r12,8),%rax
movsbq 0x2(%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     157d <isValidSudoku+0x46d>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x8(%rbx,%r12,8),%rax
movsbq (%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     15b3 <isValidSudoku+0x4a3>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x8(%rbx,%r12,8),%rax
movsbq 0x1(%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     15e5 <isValidSudoku+0x4d5>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x8(%rbx,%r12,8),%rax
movsbq 0x2(%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     1612 <isValidSudoku+0x502>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x10(%rbx,%r12,8),%rax
movsbq (%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     1648 <isValidSudoku+0x538>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x10(%rbx,%r12,8),%rax
movsbq 0x1(%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     167a <isValidSudoku+0x56a>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
mov    0x10(%rbx,%r12,8),%rax
movsbq 0x2(%rax,%rbp,1),%rcx
cmp    $0x2e,%rcx
je     14d1 <isValidSudoku+0x3c1>
lea    -0x3a(%rcx),%edx
xor    %eax,%eax
cmp    $0xf7,%dl
jb     12ea <isValidSudoku+0x1da>
add    %r15d,%ecx
cmpb   $0x0,(%rcx,%r14,1)
jne    12ea <isValidSudoku+0x1da>
movb   $0x1,(%rcx,%r14,1)
jmp    14d1 <isValidSudoku+0x3c1>
add    $0x1,%r13d
add    $0x3,%r12
mov    $0x1,%eax
cmp    $0x3,%r13d
jne    14cd <isValidSudoku+0x3bd>
jmp    12ea <isValidSudoku+0x1da>

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

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