int updateBoardData(int *boardData, int x, int y, int XorO) {
  if (y == 1) {
    if (x == 2) {
      if (boardData[0] > 1) {
        boardData[0] = XorO;
        return 5;
      }
    } else if (x == 6) {
      if (boardData[1] > 1) {
        boardData[1] = XorO;
        return 5;
      }
    } else if (x == 10) {
      if (boardData[2] > 1) {
        boardData[2] = XorO;
        return 5;
      }
    }
  } else if (y == 3) {
    if (x == 2) {
      if (boardData[3] > 1) {
        boardData[3] = XorO;
        return 5;
      }
    } else if (x == 6) {
      if (boardData[4] > 1) {
        boardData[4] = XorO;
        return 5;
      }
    } else if (x == 10) {
      if (boardData[5] > 1) {
        boardData[5] = XorO;
        return 5;
      }
    }
  } else if (y == 5) {
    if (x == 2) {
      if (boardData[6] > 1) {
        boardData[6] = XorO;
        return 5;
      }
    } else if (x == 6) {
      if (boardData[7] > 1) {
        boardData[7] = XorO;
        return 5;
      }
    } else if (x == 10) {
      if (boardData[8] > 1) {
        boardData[8] = XorO;
        return 5;
      }
    }
  }
  return 0;
}


x86 assembly (clang, -O0):
<updateBoardData>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
cmpl   $0x1,-0x18(%rbp)
jne    11c1 <updateBoardData+0xc1>
cmpl   $0x2,-0x14(%rbp)
jne    114c <updateBoardData+0x4c>
mov    -0x10(%rbp),%rax
cmpl   $0x1,(%rax)
jle    1147 <updateBoardData+0x47>
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x5,-0x4(%rbp)
jmp    1336 <updateBoardData+0x236>
jmp    11bc <updateBoardData+0xbc>
cmpl   $0x6,-0x14(%rbp)
jne    117f <updateBoardData+0x7f>
mov    -0x10(%rbp),%rax
cmpl   $0x1,0x4(%rax)
jle    117a <updateBoardData+0x7a>
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x4(%rax)
movl   $0x5,-0x4(%rbp)
jmp    1336 <updateBoardData+0x236>
jmp    11b7 <updateBoardData+0xb7>
cmpl   $0xa,-0x14(%rbp)
jne    11b2 <updateBoardData+0xb2>
mov    -0x10(%rbp),%rax
cmpl   $0x1,0x8(%rax)
jle    11ad <updateBoardData+0xad>
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x8(%rax)
movl   $0x5,-0x4(%rbp)
jmp    1336 <updateBoardData+0x236>
jmp    11b2 <updateBoardData+0xb2>
jmp    11b7 <updateBoardData+0xb7>
jmp    11bc <updateBoardData+0xbc>
jmp    132f <updateBoardData+0x22f>
cmpl   $0x3,-0x18(%rbp)
jne    1273 <updateBoardData+0x173>
cmpl   $0x2,-0x14(%rbp)
jne    11fe <updateBoardData+0xfe>
mov    -0x10(%rbp),%rax
cmpl   $0x1,0xc(%rax)
jle    11f9 <updateBoardData+0xf9>
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0xc(%rax)
movl   $0x5,-0x4(%rbp)
jmp    1336 <updateBoardData+0x236>
jmp    126e <updateBoardData+0x16e>
cmpl   $0x6,-0x14(%rbp)
jne    1231 <updateBoardData+0x131>
mov    -0x10(%rbp),%rax
cmpl   $0x1,0x10(%rax)
jle    122c <updateBoardData+0x12c>
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x10(%rax)
movl   $0x5,-0x4(%rbp)
jmp    1336 <updateBoardData+0x236>
jmp    1269 <updateBoardData+0x169>
cmpl   $0xa,-0x14(%rbp)
jne    1264 <updateBoardData+0x164>
mov    -0x10(%rbp),%rax
cmpl   $0x1,0x14(%rax)
jle    125f <updateBoardData+0x15f>
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x14(%rax)
movl   $0x5,-0x4(%rbp)
jmp    1336 <updateBoardData+0x236>
jmp    1264 <updateBoardData+0x164>
jmp    1269 <updateBoardData+0x169>
jmp    126e <updateBoardData+0x16e>
jmp    132a <updateBoardData+0x22a>
cmpl   $0x5,-0x18(%rbp)
jne    1325 <updateBoardData+0x225>
cmpl   $0x2,-0x14(%rbp)
jne    12b0 <updateBoardData+0x1b0>
mov    -0x10(%rbp),%rax
cmpl   $0x1,0x18(%rax)
jle    12ab <updateBoardData+0x1ab>
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x18(%rax)
movl   $0x5,-0x4(%rbp)
jmp    1336 <updateBoardData+0x236>
jmp    1320 <updateBoardData+0x220>
cmpl   $0x6,-0x14(%rbp)
jne    12e3 <updateBoardData+0x1e3>
mov    -0x10(%rbp),%rax
cmpl   $0x1,0x1c(%rax)
jle    12de <updateBoardData+0x1de>
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x1c(%rax)
movl   $0x5,-0x4(%rbp)
jmp    1336 <updateBoardData+0x236>
jmp    131b <updateBoardData+0x21b>
cmpl   $0xa,-0x14(%rbp)
jne    1316 <updateBoardData+0x216>
mov    -0x10(%rbp),%rax
cmpl   $0x1,0x20(%rax)
jle    1311 <updateBoardData+0x211>
mov    -0x1c(%rbp),%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,0x20(%rax)
movl   $0x5,-0x4(%rbp)
jmp    1336 <updateBoardData+0x236>
jmp    1316 <updateBoardData+0x216>
jmp    131b <updateBoardData+0x21b>
jmp    1320 <updateBoardData+0x220>
jmp    1325 <updateBoardData+0x225>
jmp    132a <updateBoardData+0x22a>
jmp    132f <updateBoardData+0x22f>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<updateBoardData>:
xor    %eax,%eax
cmp    $0x5,%edx
je     112a <updateBoardData+0x2a>
cmp    $0x3,%edx
je     1145 <updateBoardData+0x45>
cmp    $0x1,%edx
jne    1129 <updateBoardData+0x29>
cmp    $0xa,%esi
je     119c <updateBoardData+0x9c>
cmp    $0x6,%esi
je     1160 <updateBoardData+0x60>
cmp    $0x2,%esi
jne    1129 <updateBoardData+0x29>
cmpl   $0x1,(%rdi)
jg     11a6 <updateBoardData+0xa6>
ret
cmp    $0xa,%esi
je     116c <updateBoardData+0x6c>
cmp    $0x6,%esi
je     1178 <updateBoardData+0x78>
cmp    $0x2,%esi
jne    1129 <updateBoardData+0x29>
cmpl   $0x1,0x18(%rdi)
jle    1129 <updateBoardData+0x29>
add    $0x18,%rdi
jmp    11a6 <updateBoardData+0xa6>
cmp    $0xa,%esi
je     1184 <updateBoardData+0x84>
cmp    $0x6,%esi
je     1190 <updateBoardData+0x90>
cmp    $0x2,%esi
jne    1129 <updateBoardData+0x29>
cmpl   $0x1,0xc(%rdi)
jle    1129 <updateBoardData+0x29>
add    $0xc,%rdi
jmp    11a6 <updateBoardData+0xa6>
cmpl   $0x1,0x4(%rdi)
jle    1129 <updateBoardData+0x29>
add    $0x4,%rdi
jmp    11a6 <updateBoardData+0xa6>
cmpl   $0x2,0x20(%rdi)
jl     1129 <updateBoardData+0x29>
add    $0x20,%rdi
jmp    11a6 <updateBoardData+0xa6>
cmpl   $0x1,0x1c(%rdi)
jle    1129 <updateBoardData+0x29>
add    $0x1c,%rdi
jmp    11a6 <updateBoardData+0xa6>
cmpl   $0x1,0x14(%rdi)
jle    1129 <updateBoardData+0x29>
add    $0x14,%rdi
jmp    11a6 <updateBoardData+0xa6>
cmpl   $0x1,0x10(%rdi)
jle    1129 <updateBoardData+0x29>
add    $0x10,%rdi
jmp    11a6 <updateBoardData+0xa6>
cmpl   $0x1,0x8(%rdi)
jle    1129 <updateBoardData+0x29>
add    $0x8,%rdi
mov    %ecx,(%rdi)
mov    $0x5,%eax
ret

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

LLVM IR (-O2):
define i32 @updateBoardData(i32* nocapture %0, i32 %1, i32 %2, i32 %3) {
switch i32 %2, label %45 [
i32 1, label %5
i32 3, label %17
i32 5, label %30
]
5: ; preds = %4
switch i32 %1, label %45 [
i32 2, label %6
i32 6, label %9
i32 10, label %13
]
6: ; preds = %5
%7 = load i32, i32* %0
%8 = icmp sgt i32 %7, 1
br i1 %8, label %43, label %45
9: ; preds = %5
%10 = getelementptr inbounds i32, i32* %0, i64 1
%11 = load i32, i32* %10
%12 = icmp sgt i32 %11, 1
br i1 %12, label %43, label %45
13: ; preds = %5
%14 = getelementptr inbounds i32, i32* %0, i64 2
%15 = load i32, i32* %14
%16 = icmp sgt i32 %15, 1
br i1 %16, label %43, label %45
17: ; preds = %4
switch i32 %1, label %45 [
i32 2, label %18
i32 6, label %22
i32 10, label %26
]
18: ; preds = %17
%19 = getelementptr inbounds i32, i32* %0, i64 3
%20 = load i32, i32* %19
%21 = icmp sgt i32 %20, 1
br i1 %21, label %43, label %45
22: ; preds = %17
%23 = getelementptr inbounds i32, i32* %0, i64 4
%24 = load i32, i32* %23
%25 = icmp sgt i32 %24, 1
br i1 %25, label %43, label %45
26: ; preds = %17
%27 = getelementptr inbounds i32, i32* %0, i64 5
%28 = load i32, i32* %27
%29 = icmp sgt i32 %28, 1
br i1 %29, label %43, label %45
30: ; preds = %4
switch i32 %1, label %45 [
i32 2, label %31
i32 6, label %35
i32 10, label %39
]
31: ; preds = %30
%32 = getelementptr inbounds i32, i32* %0, i64 6
%33 = load i32, i32* %32
%34 = icmp sgt i32 %33, 1
br i1 %34, label %43, label %45
35: ; preds = %30
%36 = getelementptr inbounds i32, i32* %0, i64 7
%37 = load i32, i32* %36
%38 = icmp sgt i32 %37, 1
br i1 %38, label %43, label %45
39: ; preds = %30
%40 = getelementptr inbounds i32, i32* %0, i64 8
%41 = load i32, i32* %40
%42 = icmp sgt i32 %41, 1
br i1 %42, label %43, label %45
43: ; preds = %39, %35, %31, %26, %22, %18, %13, %9, %6
%44 = phi i32* [ %0, %6 ], [ %10, %9 ], [ %14, %13 ], [ %19, %18 ], [ %23, %22 ], [ %27, %26 ], [ %32, %31 ], [ %36, %35 ], [ %40, %39 ]
store i32 %3, i32* %44
br label %45
45: ; preds = %43, %9, %13, %6, %35, %39, %31, %18, %26, %22, %5, %17, %4, %30
%46 = phi i32 [ 0, %30 ], [ 0, %4 ], [ 0, %17 ], [ 0, %5 ], [ 0, %22 ], [ 0, %26 ], [ 0, %18 ], [ 0, %31 ], [ 0, %39 ], [ 0, %35 ], [ 0, %6 ], [ 0, %13 ], [ 0, %9 ], [ 5, %43 ]
ret i32 %46
}