int check_conflict(const int sudoku[9][9], const int test_value,
                   const int row_no, const int column_no) {
  int i, j, row_start, column_start;
  for (i = 0; i < 9; ++i) {
    if (sudoku[row_no][i] == test_value) {
      return 1;
    }
  }
  for (i = 0; i < 9; ++i) {
    if (sudoku[i][column_no] == test_value) {
      return 1;
    }
  }
  row_start = row_no - (row_no % 3);
  column_start = column_no - (column_no % 3);
  for (i = row_start; i < row_start + 3; ++i) {
    for (j = column_start; j < column_start + 3; ++j) {
      if (sudoku[i][j] == test_value) {
        return 1;
      }
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<check_conflict>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
movl   $0x0,-0x20(%rbp)
cmpl   $0x9,-0x20(%rbp)
jge    1160 <check_conflict+0x60>
mov    -0x10(%rbp),%rax
movslq -0x18(%rbp),%rcx
imul   $0x24,%rcx,%rcx
add    %rcx,%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    114d <check_conflict+0x4d>
movl   $0x1,-0x4(%rbp)
jmp    1267 <check_conflict+0x167>
jmp    1152 <check_conflict+0x52>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1118 <check_conflict+0x18>
movl   $0x0,-0x20(%rbp)
cmpl   $0x9,-0x20(%rbp)
jge    11af <check_conflict+0xaf>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   $0x24,%rcx,%rcx
add    %rcx,%rax
movslq -0x1c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    119c <check_conflict+0x9c>
movl   $0x1,-0x4(%rbp)
jmp    1267 <check_conflict+0x167>
jmp    11a1 <check_conflict+0xa1>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    1167 <check_conflict+0x67>
mov    -0x18(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x18(%rbp),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    -0x34(%rbp),%eax
sub    %edx,%eax
mov    %eax,-0x28(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x1c(%rbp),%eax
mov    $0x3,%ecx
cltd
idiv   %ecx
mov    -0x30(%rbp),%eax
sub    %edx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
mov    -0x28(%rbp),%ecx
add    $0x3,%ecx
cmp    %ecx,%eax
jge    1260 <check_conflict+0x160>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
mov    -0x2c(%rbp),%ecx
add    $0x3,%ecx
cmp    %ecx,%eax
jge    124d <check_conflict+0x14d>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
imul   $0x24,%rcx,%rcx
add    %rcx,%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x14(%rbp),%eax
jne    123a <check_conflict+0x13a>
movl   $0x1,-0x4(%rbp)
jmp    1267 <check_conflict+0x167>
jmp    123f <check_conflict+0x13f>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11fe <check_conflict+0xfe>
jmp    1252 <check_conflict+0x152>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11e7 <check_conflict+0xe7>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<check_conflict>:
movslq %edx,%rax
lea    (%rax,%rax,8),%rdx
cmp    %esi,(%rdi,%rdx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0x4(%rdi,%rdx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0x8(%rdi,%rdx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0xc(%rdi,%rdx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0x10(%rdi,%rdx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0x14(%rdi,%rdx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0x18(%rdi,%rdx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0x1c(%rdi,%rdx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0x20(%rdi,%rdx,4)
je     1183 <check_conflict+0x83>
movslq %ecx,%rcx
cmp    %esi,(%rdi,%rcx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0x24(%rdi,%rcx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0x48(%rdi,%rcx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0x6c(%rdi,%rcx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0x90(%rdi,%rcx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0xb4(%rdi,%rcx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0xd8(%rdi,%rcx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0xfc(%rdi,%rcx,4)
je     1183 <check_conflict+0x83>
cmp    %esi,0x120(%rdi,%rcx,4)
jne    1189 <check_conflict+0x89>
mov    $0x1,%eax
ret
imul   $0x55555556,%rax,%rax
mov    %rax,%rdx
shr    $0x3f,%rdx
shr    $0x20,%rax
add    %edx,%eax
lea    (%rax,%rax,2),%r9d
imul   $0x55555556,%rcx,%rdx
mov    %rdx,%rcx
shr    $0x3f,%rcx
shr    $0x20,%rdx
add    %ecx,%edx
lea    (%rdx,%rdx,2),%ecx
movslq %ecx,%r8
movslq %r9d,%rcx
lea    (%rdx,%rdx,2),%edx
add    $0x2,%edx
movslq %edx,%rdx
lea    (%rax,%rax,2),%eax
add    $0x2,%eax
movslq %eax,%r9
add    $0xffffffffffffffff,%r8
lea    (%rcx,%rcx,8),%rax
lea    (%rdi,%rax,4),%rdi
mov    %r8,%rax
cmp    %esi,0x4(%rdi,%rax,4)
je     1183 <check_conflict+0x83>
add    $0x1,%rax
cmp    %rdx,%rax
jl     11df <check_conflict+0xdf>
lea    0x1(%rcx),%r10
add    $0x24,%rdi
xor    %eax,%eax
cmp    %r9,%rcx
mov    %r10,%rcx
jl     11dc <check_conflict+0xdc>
ret

LLVM IR (-O0):
define i32 @check_conflict([9 x i32]* %0, i32 %1, i32 %2, i32 %3) {
%5 = alloca i32
%6 = alloca [9 x i32]*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
store [9 x i32]* %0, [9 x i32]** %6
store i32 %1, i32* %7
store i32 %2, i32* %8
store i32 %3, i32* %9
store i32 0, i32* %10
br label %14
14: ; preds = %30, %4
%15 = load i32, i32* %10
%16 = icmp slt i32 %15, 9
br i1 %16, label %17, label %33
17: ; preds = %14
%18 = load [9 x i32]*, [9 x i32]** %6
%19 = load i32, i32* %8
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds [9 x i32], [9 x i32]* %18, i64 %20
%22 = load i32, i32* %10
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds [9 x i32], [9 x i32]* %21, i64 0, i64 %23
%25 = load i32, i32* %24
%26 = load i32, i32* %7
%27 = icmp eq i32 %25, %26
br i1 %27, label %28, label %29
28: ; preds = %17
store i32 1, i32* %5
br label %96
29: ; preds = %17
br label %30
30: ; preds = %29
%31 = load i32, i32* %10
%32 = add nsw i32 %31, 1
store i32 %32, i32* %10
br label %14
33: ; preds = %14
store i32 0, i32* %10
br label %34
34: ; preds = %50, %33
%35 = load i32, i32* %10
%36 = icmp slt i32 %35, 9
br i1 %36, label %37, label %53
37: ; preds = %34
%38 = load [9 x i32]*, [9 x i32]** %6
%39 = load i32, i32* %10
%40 = sext i32 %39 to i64
%41 = getelementptr inbounds [9 x i32], [9 x i32]* %38, i64 %40
%42 = load i32, i32* %9
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds [9 x i32], [9 x i32]* %41, i64 0, i64 %43
%45 = load i32, i32* %44
%46 = load i32, i32* %7
%47 = icmp eq i32 %45, %46
br i1 %47, label %48, label %49
48: ; preds = %37
store i32 1, i32* %5
br label %96
49: ; preds = %37
br label %50
50: ; preds = %49
%51 = load i32, i32* %10
%52 = add nsw i32 %51, 1
store i32 %52, i32* %10
br label %34
53: ; preds = %34
%54 = load i32, i32* %8
%55 = load i32, i32* %8
%56 = srem i32 %55, 3
%57 = sub nsw i32 %54, %56
store i32 %57, i32* %12
%58 = load i32, i32* %9
%59 = load i32, i32* %9
%60 = srem i32 %59, 3
%61 = sub nsw i32 %58, %60
store i32 %61, i32* %13
%62 = load i32, i32* %12
store i32 %62, i32* %10
br label %63
63: ; preds = %92, %53
%64 = load i32, i32* %10
%65 = load i32, i32* %12
%66 = add nsw i32 %65, 3
%67 = icmp slt i32 %64, %66
br i1 %67, label %68, label %95
68: ; preds = %63
%69 = load i32, i32* %13
store i32 %69, i32* %11
br label %70
70: ; preds = %88, %68
%71 = load i32, i32* %11
%72 = load i32, i32* %13
%73 = add nsw i32 %72, 3
%74 = icmp slt i32 %71, %73
br i1 %74, label %75, label %91
75: ; preds = %70
%76 = load [9 x i32]*, [9 x i32]** %6
%77 = load i32, i32* %10
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds [9 x i32], [9 x i32]* %76, i64 %78
%80 = load i32, i32* %11
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds [9 x i32], [9 x i32]* %79, i64 0, i64 %81
%83 = load i32, i32* %82
%84 = load i32, i32* %7
%85 = icmp eq i32 %83, %84
br i1 %85, label %86, label %87
86: ; preds = %75
store i32 1, i32* %5
br label %96
87: ; preds = %75
br label %88
88: ; preds = %87
%89 = load i32, i32* %11
%90 = add nsw i32 %89, 1
store i32 %90, i32* %11
br label %70
91: ; preds = %70
br label %92
92: ; preds = %91
%93 = load i32, i32* %10
%94 = add nsw i32 %93, 1
store i32 %94, i32* %10
br label %63
95: ; preds = %63
store i32 0, i32* %5
br label %96
96: ; preds = %95, %86, %48, %28
%97 = load i32, i32* %5
ret i32 %97
}

LLVM IR (-O2):
define i32 @check_conflict([9 x i32]* nocapture %0, i32 %1, i32 %2, i32 %3) {
%5 = sext i32 %2 to i64
%6 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 %5, i64 0
%7 = load i32, i32* %6
%8 = icmp eq i32 %7, %1
br i1 %8, label %102, label %9
9: ; preds = %4
%10 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 %5, i64 1
%11 = load i32, i32* %10
%12 = icmp eq i32 %11, %1
br i1 %12, label %102, label %13
13: ; preds = %9
%14 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 %5, i64 2
%15 = load i32, i32* %14
%16 = icmp eq i32 %15, %1
br i1 %16, label %102, label %17
17: ; preds = %13
%18 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 %5, i64 3
%19 = load i32, i32* %18
%20 = icmp eq i32 %19, %1
br i1 %20, label %102, label %21
21: ; preds = %17
%22 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 %5, i64 4
%23 = load i32, i32* %22
%24 = icmp eq i32 %23, %1
br i1 %24, label %102, label %25
25: ; preds = %21
%26 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 %5, i64 5
%27 = load i32, i32* %26
%28 = icmp eq i32 %27, %1
br i1 %28, label %102, label %29
29: ; preds = %25
%30 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 %5, i64 6
%31 = load i32, i32* %30
%32 = icmp eq i32 %31, %1
br i1 %32, label %102, label %33
33: ; preds = %29
%34 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 %5, i64 7
%35 = load i32, i32* %34
%36 = icmp eq i32 %35, %1
br i1 %36, label %102, label %37
37: ; preds = %33
%38 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 %5, i64 8
%39 = load i32, i32* %38
%40 = icmp eq i32 %39, %1
br i1 %40, label %102, label %41
41: ; preds = %37
%42 = sext i32 %3 to i64
%43 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 0, i64 %42
%44 = load i32, i32* %43
%45 = icmp eq i32 %44, %1
br i1 %45, label %102, label %46
46: ; preds = %41
%47 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 1, i64 %42
%48 = load i32, i32* %47
%49 = icmp eq i32 %48, %1
br i1 %49, label %102, label %50
50: ; preds = %46
%51 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 2, i64 %42
%52 = load i32, i32* %51
%53 = icmp eq i32 %52, %1
br i1 %53, label %102, label %54
54: ; preds = %50
%55 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 3, i64 %42
%56 = load i32, i32* %55
%57 = icmp eq i32 %56, %1
br i1 %57, label %102, label %58
58: ; preds = %54
%59 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 4, i64 %42
%60 = load i32, i32* %59
%61 = icmp eq i32 %60, %1
br i1 %61, label %102, label %62
62: ; preds = %58
%63 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 5, i64 %42
%64 = load i32, i32* %63
%65 = icmp eq i32 %64, %1
br i1 %65, label %102, label %66
66: ; preds = %62
%67 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 6, i64 %42
%68 = load i32, i32* %67
%69 = icmp eq i32 %68, %1
br i1 %69, label %102, label %70
70: ; preds = %66
%71 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 7, i64 %42
%72 = load i32, i32* %71
%73 = icmp eq i32 %72, %1
br i1 %73, label %102, label %74
74: ; preds = %70
%75 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 8, i64 %42
%76 = load i32, i32* %75
%77 = icmp eq i32 %76, %1
br i1 %77, label %102, label %78
78: ; preds = %74
%79 = srem i32 %2, 3
%80 = sub i32 %2, %79
%81 = srem i32 %3, 3
%82 = sub i32 %3, %81
%83 = sext i32 %82 to i64
%84 = sext i32 %80 to i64
%85 = add nsw i32 %82, 2
%86 = sext i32 %85 to i64
%87 = add nsw i32 %80, 2
%88 = sext i32 %87 to i64
br label %89
89: ; preds = %78, %99
%90 = phi i64 [ %84, %78 ], [ %100, %99 ]
br label %94
91: ; preds = %94
%92 = add nsw i64 %95, 1
%93 = icmp slt i64 %95, %86
br i1 %93, label %94, label %99
94: ; preds = %89, %91
%95 = phi i64 [ %83, %89 ], [ %92, %91 ]
%96 = getelementptr inbounds [9 x i32], [9 x i32]* %0, i64 %90, i64 %95
%97 = load i32, i32* %96
%98 = icmp eq i32 %97, %1
br i1 %98, label %102, label %91
99: ; preds = %91
%100 = add nsw i64 %90, 1
%101 = icmp slt i64 %90, %88
br i1 %101, label %89, label %102
102: ; preds = %99, %94, %4, %9, %13, %17, %21, %25, %29, %33, %37, %41, %46, %50, %54, %58, %62, %66, %70, %74
%103 = phi i32 [ 1, %74 ], [ 1, %70 ], [ 1, %66 ], [ 1, %62 ], [ 1, %58 ], [ 1, %54 ], [ 1, %50 ], [ 1, %46 ], [ 1, %41 ], [ 1, %37 ], [ 1, %33 ], [ 1, %29 ], [ 1, %25 ], [ 1, %21 ], [ 1, %17 ], [ 1, %13 ], [ 1, %9 ], [ 1, %4 ], [ 1, %94 ], [ 0, %99 ]
ret i32 %103
}