#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 trySolve(int board[][9], int row, int col, int solved) {
  bool used[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
  used[0] = true;
  int r, c;
  int retval = solved;
  for (r = 0; r < 9; r++) {
    if (board[r][col] != -1)
      used[board[r][col]] = true;
  }
  for (c = 0; c < 9; c++) {
    if (board[row][c] != -1)
      used[board[row][c]] = true;
  }
  int i, last, sum = 0;
  for (i = 1; i < 10; i++) {
    sum += !used[i];
    if (!used[i])
      last = i;
  }
  if (sum == 1) {
    board[row][col] = last;
    retval++;
  } else {
    r = (row / 3) * 3;
    c = (col / 3) * 3;
    int rMax = r + 2;
    int cMax = c + 2;
    for (r = (row / 3) * 3; r <= rMax; r++) {
      for (c = (col / 3) * 3; c <= cMax; c++) {
        if (board[r][c] != -1)
          used[board[r][c]] = true;
      }
    }
    sum = 0;
    for (i = 1; i < 10; i++) {
      sum += !used[i];
      if (!used[i])
        last = i;
    }
    if (sum == 1) {
      board[row][col] = last;
      retval++;
    }
  }
  return retval;
}


x86 assembly (clang, -O0):
<trySolve>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
lea    -0x40(%rbp),%rdi
xor    %esi,%esi
mov    $0x28,%edx
call   1030 <memset@plt>
movl   $0x1,-0x40(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x0,-0x44(%rbp)
cmpl   $0x9,-0x44(%rbp)
jge    11a2 <trySolve+0x92>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
imul   $0x24,%rcx,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
cmpl   $0xffffffff,(%rax,%rcx,4)
je     118f <trySolve+0x7f>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
imul   $0x24,%rcx,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
movl   $0x1,-0x40(%rbp,%rax,4)
jmp    1194 <trySolve+0x84>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1149 <trySolve+0x39>
movl   $0x0,-0x48(%rbp)
cmpl   $0x9,-0x48(%rbp)
jge    1202 <trySolve+0xf2>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
imul   $0x24,%rcx,%rcx
add    %rcx,%rax
movslq -0x48(%rbp),%rcx
cmpl   $0xffffffff,(%rax,%rcx,4)
je     11ef <trySolve+0xdf>
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
imul   $0x24,%rcx,%rcx
add    %rcx,%rax
movslq -0x48(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
movl   $0x1,-0x40(%rbp,%rax,4)
jmp    11f4 <trySolve+0xe4>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    11a9 <trySolve+0x99>
movl   $0x0,-0x58(%rbp)
movl   $0x1,-0x50(%rbp)
cmpl   $0xa,-0x50(%rbp)
jge    125b <trySolve+0x14b>
movslq -0x50(%rbp),%rax
cmpl   $0x0,-0x40(%rbp,%rax,4)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
movslq -0x50(%rbp),%rax
cmpl   $0x0,-0x40(%rbp,%rax,4)
jne    1248 <trySolve+0x138>
mov    -0x50(%rbp),%eax
mov    %eax,-0x54(%rbp)
jmp    124d <trySolve+0x13d>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1210 <trySolve+0x100>
cmpl   $0x1,-0x58(%rbp)
jne    128c <trySolve+0x17c>
mov    -0x54(%rbp),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
imul   $0x24,%rcx,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    13e6 <trySolve+0x2d6>
mov    -0xc(%rbp),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
imul   $0x3,%eax,%eax
mov    %eax,-0x44(%rbp)
mov    -0x10(%rbp),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
imul   $0x3,%eax,%eax
mov    %eax,-0x48(%rbp)
mov    -0x44(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x48(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x60(%rbp)
mov    -0xc(%rbp),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
imul   $0x3,%eax,%eax
mov    %eax,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x5c(%rbp),%eax
jg     135c <trySolve+0x24c>
mov    -0x10(%rbp),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
imul   $0x3,%eax,%eax
mov    %eax,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x60(%rbp),%eax
jg     1349 <trySolve+0x239>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
imul   $0x24,%rcx,%rcx
add    %rcx,%rax
movslq -0x48(%rbp),%rcx
cmpl   $0xffffffff,(%rax,%rcx,4)
je     1336 <trySolve+0x226>
mov    -0x8(%rbp),%rax
movslq -0x44(%rbp),%rcx
imul   $0x24,%rcx,%rcx
add    %rcx,%rax
movslq -0x48(%rbp),%rcx
movslq (%rax,%rcx,4),%rax
movl   $0x1,-0x40(%rbp,%rax,4)
jmp    133b <trySolve+0x22b>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    12ee <trySolve+0x1de>
jmp    134e <trySolve+0x23e>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    12d1 <trySolve+0x1c1>
movl   $0x0,-0x58(%rbp)
movl   $0x1,-0x50(%rbp)
cmpl   $0xa,-0x50(%rbp)
jge    13b5 <trySolve+0x2a5>
movslq -0x50(%rbp),%rax
cmpl   $0x0,-0x40(%rbp,%rax,4)
setne  %al
xor    $0xff,%al
and    $0x1,%al
movzbl %al,%eax
add    -0x58(%rbp),%eax
mov    %eax,-0x58(%rbp)
movslq -0x50(%rbp),%rax
cmpl   $0x0,-0x40(%rbp,%rax,4)
jne    13a2 <trySolve+0x292>
mov    -0x50(%rbp),%eax
mov    %eax,-0x54(%rbp)
jmp    13a7 <trySolve+0x297>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    136a <trySolve+0x25a>
cmpl   $0x1,-0x58(%rbp)
jne    13e1 <trySolve+0x2d1>
mov    -0x54(%rbp),%edx
mov    -0x8(%rbp),%rax
movslq -0xc(%rbp),%rcx
imul   $0x24,%rcx,%rcx
add    %rcx,%rax
movslq -0x10(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    13e6 <trySolve+0x2d6>
mov    -0x4c(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<trySolve>:
push   %rbx
mov    %ecx,%eax
xorps  %xmm0,%xmm0
movaps %xmm0,-0x30(%rsp)
movaps %xmm0,-0x20(%rsp)
movq   $0x0,-0x10(%rsp)
movl   $0x1,-0x30(%rsp)
movslq %edx,%r9
movslq (%rdi,%r9,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     1136 <trySolve+0x36>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0x24(%rdi,%r9,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     1149 <trySolve+0x49>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0x48(%rdi,%r9,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     115c <trySolve+0x5c>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0x6c(%rdi,%r9,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     116f <trySolve+0x6f>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0x90(%rdi,%r9,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     1185 <trySolve+0x85>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0xb4(%rdi,%r9,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     119b <trySolve+0x9b>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0xd8(%rdi,%r9,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     11b1 <trySolve+0xb1>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0xfc(%rdi,%r9,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     11c7 <trySolve+0xc7>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0x120(%rdi,%r9,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     11dd <trySolve+0xdd>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq %esi,%r8
lea    (%r8,%r8,8),%r11
movslq (%rdi,%r11,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     11f6 <trySolve+0xf6>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0x4(%rdi,%r11,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     1209 <trySolve+0x109>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0x8(%rdi,%r11,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     121c <trySolve+0x11c>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0xc(%rdi,%r11,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     122f <trySolve+0x12f>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0x10(%rdi,%r11,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     1242 <trySolve+0x142>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0x14(%rdi,%r11,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     1255 <trySolve+0x155>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0x18(%rdi,%r11,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     1268 <trySolve+0x168>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0x1c(%rdi,%r11,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     127b <trySolve+0x17b>
movl   $0x1,-0x30(%rsp,%rcx,4)
movslq 0x20(%rdi,%r11,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     128e <trySolve+0x18e>
movl   $0x1,-0x30(%rsp,%rcx,4)
movdqu -0x2c(%rsp),%xmm0
movdqu -0x1c(%rsp),%xmm1
pxor   %xmm2,%xmm2
pcmpeqd %xmm2,%xmm1
pcmpeqd %xmm2,%xmm0
packssdw %xmm1,%xmm0
packsswb %xmm0,%xmm0
pmovmskb %xmm0,%ecx
mov    %ecx,%edx
and    $0x2,%dl
shr    %dl
movzbl %dl,%edx
add    $0x1,%edx
test   $0x4,%cl
mov    $0x3,%esi
cmove  %edx,%esi
test   $0x8,%cl
mov    $0x4,%edx
cmove  %esi,%edx
test   $0x10,%cl
mov    $0x5,%esi
cmove  %edx,%esi
test   $0x20,%cl
mov    $0x6,%edx
cmove  %esi,%edx
test   $0x40,%cl
mov    $0x7,%ebx
cmove  %edx,%ebx
test   $0x80,%cl
mov    $0x8,%esi
cmove  %ebx,%esi
mov    %ecx,%edx
shr    %dl
and    $0x55,%dl
sub    %dl,%cl
mov    %ecx,%edx
and    $0x33,%dl
shr    $0x2,%cl
and    $0x33,%cl
add    %dl,%cl
mov    %ecx,%edx
shr    $0x4,%dl
add    %cl,%dl
and    $0xf,%dl
xor    %ecx,%ecx
cmpl   $0x0,-0xc(%rsp)
sete   %cl
movzbl %dl,%edx
mov    $0x9,%r10d
cmovne %esi,%r10d
add    %ecx,%edx
cmp    $0x1,%edx
je     150c <trySolve+0x40c>
imul   $0x55555556,%r8,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
shr    $0x20,%rcx
add    %edx,%ecx
lea    (%rcx,%rcx,2),%edx
imul   $0x55555556,%r9,%rcx
mov    %rcx,%rsi
shr    $0x3f,%rsi
shr    $0x20,%rcx
add    %esi,%ecx
lea    (%rcx,%rcx,2),%ecx
movslq %ecx,%rcx
movslq %edx,%rbx
lea    (%rbx,%rbx,8),%rdx
lea    (%rdi,%rdx,4),%rdx
movslq (%rdx,%rcx,4),%rsi
cmp    $0xffffffffffffffff,%rsi
je     1391 <trySolve+0x291>
movl   $0x1,-0x30(%rsp,%rsi,4)
movslq 0x4(%rdx,%rcx,4),%rsi
cmp    $0xffffffffffffffff,%rsi
je     13a4 <trySolve+0x2a4>
movl   $0x1,-0x30(%rsp,%rsi,4)
movslq 0x8(%rdx,%rcx,4),%rdx
cmp    $0xffffffffffffffff,%rdx
je     13b7 <trySolve+0x2b7>
movl   $0x1,-0x30(%rsp,%rdx,4)
lea    0x1(%rcx),%r8
lea    0x1(%rbx),%rdx
lea    (%rdx,%rdx,8),%rdx
lea    (%rdi,%rdx,4),%rdx
movslq (%rdx,%rcx,4),%rsi
cmp    $0xffffffffffffffff,%rsi
je     13d9 <trySolve+0x2d9>
movl   $0x1,-0x30(%rsp,%rsi,4)
movslq (%rdx,%r8,4),%rsi
cmp    $0xffffffffffffffff,%rsi
je     13eb <trySolve+0x2eb>
movl   $0x1,-0x30(%rsp,%rsi,4)
movslq 0x8(%rdx,%rcx,4),%rdx
cmp    $0xffffffffffffffff,%rdx
je     13fe <trySolve+0x2fe>
movl   $0x1,-0x30(%rsp,%rdx,4)
add    $0x2,%rbx
lea    (%rbx,%rbx,8),%rdx
lea    (%rdi,%rdx,4),%rdx
movslq (%rdx,%rcx,4),%rsi
cmp    $0xffffffffffffffff,%rsi
je     141c <trySolve+0x31c>
movl   $0x1,-0x30(%rsp,%rsi,4)
movslq (%rdx,%r8,4),%rsi
cmp    $0xffffffffffffffff,%rsi
je     142e <trySolve+0x32e>
movl   $0x1,-0x30(%rsp,%rsi,4)
movslq 0x8(%rdx,%rcx,4),%rcx
cmp    $0xffffffffffffffff,%rcx
je     1441 <trySolve+0x341>
movl   $0x1,-0x30(%rsp,%rcx,4)
movdqu -0x2c(%rsp),%xmm0
movdqu -0x1c(%rsp),%xmm1
pxor   %xmm2,%xmm2
mov    -0xc(%rsp),%r8d
pcmpeqd %xmm2,%xmm1
pcmpeqd %xmm2,%xmm0
packssdw %xmm1,%xmm0
movdqa %xmm0,%xmm1
packsswb %xmm1,%xmm1
pmovmskb %xmm1,%ecx
mov    %ecx,%edx
shr    %dl
and    $0x55,%dl
sub    %dl,%cl
mov    %ecx,%edx
and    $0x33,%dl
shr    $0x2,%cl
and    $0x33,%cl
add    %dl,%cl
mov    %ecx,%edx
shr    $0x4,%dl
add    %cl,%dl
and    $0xf,%dl
movzbl %dl,%ecx
cmp    $0x1,%r8d
adc    $0x0,%ecx
cmp    $0x1,%ecx
jne    1517 <trySolve+0x417>
packsswb %xmm0,%xmm0
pmovmskb %xmm0,%ecx
test   $0x1,%cl
mov    $0x1,%edx
cmovne %edx,%r10d
test   $0x2,%cl
mov    $0x2,%edx
cmove  %r10d,%edx
test   $0x4,%cl
mov    $0x3,%esi
cmove  %edx,%esi
test   $0x8,%cl
mov    $0x4,%edx
cmove  %esi,%edx
test   $0x10,%cl
mov    $0x5,%esi
cmove  %edx,%esi
test   $0x20,%cl
mov    $0x6,%edx
cmove  %esi,%edx
test   $0x40,%cl
mov    $0x7,%esi
cmove  %edx,%esi
test   $0x80,%cl
mov    $0x8,%ecx
cmove  %esi,%ecx
test   %r8d,%r8d
mov    $0x9,%r10d
cmovne %ecx,%r10d
lea    (%rdi,%r11,4),%rcx
mov    %r10d,(%rcx,%r9,4)
add    $0x1,%eax
pop    %rbx
ret

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

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