int countNeighbors(int *cells, int row, int col) {
  int neighbors = 0;
  for (int rowMod = -1; rowMod <= 1; rowMod++) {
    for (int colMod = -1; colMod <= 1; colMod++) {
      if (row + rowMod == -1) {
        if (col + colMod == -1) {
          neighbors += cells[(25 - 1) * 80 + (80 - 1)];
          continue;
        } else if (col + colMod == 80) {
          neighbors += cells[(25 - 1) * 80];
          continue;
        } else {
          neighbors += cells[(25 - 1) * 80 + (col + colMod)];
          continue;
        }
      } else if (row + rowMod == 25) {
        if (col + colMod == -1) {
          neighbors += cells[(80 - 1)];
          continue;
        } else if (col + colMod == 80) {
          neighbors += cells[0];
          continue;
        } else {
          neighbors += cells[(col + colMod)];
          continue;
        }
      } else if (col + colMod == -1) {
        neighbors += cells[(row + rowMod) * 80 + (80 - 1)];
        continue;
      } else if (col + colMod == 80) {
        neighbors += cells[(row + rowMod) * 80];
        continue;
      } else {
        neighbors += cells[(row + rowMod) * 80 + (col + colMod)];
      }
    }
  }
  neighbors -= cells[row * 80 + col];
  return neighbors;
}


x86 assembly (clang, -O0):
<countNeighbors>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movl   $0xffffffff,-0x18(%rbp)
cmpl   $0x1,-0x18(%rbp)
jg     12d0 <countNeighbors+0x1d0>
movl   $0xffffffff,-0x1c(%rbp)
cmpl   $0x1,-0x1c(%rbp)
jg     12bd <countNeighbors+0x1bd>
mov    -0xc(%rbp),%eax
add    -0x18(%rbp),%eax
cmp    $0xffffffff,%eax
jne    11af <countNeighbors+0xaf>
mov    -0x10(%rbp),%eax
add    -0x1c(%rbp),%eax
cmp    $0xffffffff,%eax
jne    116a <countNeighbors+0x6a>
mov    -0x8(%rbp),%rax
mov    0x1f3c(%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    12af <countNeighbors+0x1af>
mov    -0x10(%rbp),%eax
add    -0x1c(%rbp),%eax
cmp    $0x50,%eax
jne    118e <countNeighbors+0x8e>
mov    -0x8(%rbp),%rax
mov    0x1e00(%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    12af <countNeighbors+0x1af>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    -0x1c(%rbp),%ecx
add    $0x780,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    12af <countNeighbors+0x1af>
mov    -0xc(%rbp),%eax
add    -0x18(%rbp),%eax
cmp    $0x19,%eax
jne    121d <countNeighbors+0x11d>
mov    -0x10(%rbp),%eax
add    -0x1c(%rbp),%eax
cmp    $0xffffffff,%eax
jne    11e2 <countNeighbors+0xe2>
mov    -0x8(%rbp),%rax
mov    0x13c(%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    12af <countNeighbors+0x1af>
mov    -0x10(%rbp),%eax
add    -0x1c(%rbp),%eax
cmp    $0x50,%eax
jne    1202 <countNeighbors+0x102>
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    12af <countNeighbors+0x1af>
mov    -0x8(%rbp),%rax
mov    -0x10(%rbp),%ecx
add    -0x1c(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    12af <countNeighbors+0x1af>
mov    -0x10(%rbp),%eax
add    -0x1c(%rbp),%eax
cmp    $0xffffffff,%eax
jne    124d <countNeighbors+0x14d>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x18(%rbp),%ecx
imul   $0x50,%ecx,%ecx
add    $0x4f,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    12af <countNeighbors+0x1af>
mov    -0x10(%rbp),%eax
add    -0x1c(%rbp),%eax
cmp    $0x50,%eax
jne    127a <countNeighbors+0x17a>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x18(%rbp),%ecx
imul   $0x50,%ecx,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    12af <countNeighbors+0x1af>
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
add    -0x18(%rbp),%ecx
imul   $0x50,%ecx,%ecx
mov    -0x10(%rbp),%edx
add    -0x1c(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    12a0 <countNeighbors+0x1a0>
jmp    12a5 <countNeighbors+0x1a5>
jmp    12aa <countNeighbors+0x1aa>
jmp    12af <countNeighbors+0x1af>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    112d <countNeighbors+0x2d>
jmp    12c2 <countNeighbors+0x1c2>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    111c <countNeighbors+0x1c>
mov    -0x8(%rbp),%rax
imul   $0x50,-0xc(%rbp),%ecx
add    -0x10(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x14(%rbp)
mov    -0x14(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<countNeighbors>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
lea    0x13c(%rdi),%r13
lea    0x1e00(%rdi),%r12
lea    0x1f3c(%rdi),%r9
movslq %edx,%r11
movslq %esi,%r14
lea    -0x1(%r14),%rbp
cmp    $0x19,%ebp
je     118d <countNeighbors+0x8d>
cmp    $0xffffffff,%ebp
jne    11ad <countNeighbors+0xad>
mov    %r9,%rax
test   %edx,%edx
je     114c <countNeighbors+0x4c>
mov    %r12,%rax
cmp    $0x51,%edx
je     114c <countNeighbors+0x4c>
lea    (%rdi,%r11,4),%rax
add    $0x1dfc,%rax
mov    %r9,%rcx
cmp    $0xffffffff,%edx
je     1167 <countNeighbors+0x67>
mov    %r12,%rcx
cmp    $0x50,%edx
je     1167 <countNeighbors+0x67>
lea    (%rdi,%r11,4),%rcx
add    $0x1e00,%rcx
mov    (%rax),%eax
mov    %eax,-0x4(%rsp)
mov    (%rcx),%eax
mov    %eax,-0x8(%rsp)
cmp    $0xfffffffe,%edx
je     1255 <countNeighbors+0x155>
cmp    $0x4f,%edx
jne    125a <countNeighbors+0x15a>
mov    %r12,%rcx
jmp    126e <countNeighbors+0x16e>
lea    -0x1(%r11),%rax
mov    %rdi,%rcx
cmp    $0x50,%eax
je     11a5 <countNeighbors+0xa5>
mov    %r13,%rcx
cmp    $0xffffffff,%eax
je     11a5 <countNeighbors+0xa5>
lea    (%rdi,%rax,4),%rcx
mov    (%rcx),%eax
mov    %eax,-0x4(%rsp)
jmp    11ed <countNeighbors+0xed>
mov    %rbp,%rax
shl    $0x4,%rax
lea    (%rax,%rax,4),%r15
lea    (%rdi,%r15,4),%r8
lea    (%rdi,%r15,4),%rcx
add    $0x13c,%rcx
lea    -0x1(%r11),%rbx
mov    %rcx,%rax
cmp    $0xffffffff,%ebx
je     11e2 <countNeighbors+0xe2>
mov    %r8,%rax
cmp    $0x50,%ebx
je     11e2 <countNeighbors+0xe2>
add    %r15,%rbx
lea    (%rdi,%rbx,4),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rsp)
cmp    $0x19,%ebp
jne    121f <countNeighbors+0x11f>
mov    %rdi,%rax
cmp    $0x50,%edx
je     1201 <countNeighbors+0x101>
mov    %r13,%rax
cmp    $0xffffffff,%edx
je     1201 <countNeighbors+0x101>
lea    (%rdi,%r11,4),%rax
mov    (%rax),%eax
mov    %eax,-0x8(%rsp)
lea    0x1(%r11),%rax
cmp    $0x50,%eax
je     121a <countNeighbors+0x11a>
cmp    $0xffffffff,%eax
jne    126a <countNeighbors+0x16a>
mov    %r13,%rcx
jmp    126e <countNeighbors+0x16e>
mov    %rdi,%rcx
jmp    126e <countNeighbors+0x16e>
mov    %rcx,%rax
cmp    $0xffffffff,%edx
je     1237 <countNeighbors+0x137>
mov    %r8,%rax
cmp    $0x50,%edx
je     1237 <countNeighbors+0x137>
lea    (%r15,%r11,1),%rax
lea    (%rdi,%rax,4),%rax
mov    (%rax),%eax
mov    %eax,-0x8(%rsp)
cmp    $0x19,%ebp
je     1207 <countNeighbors+0x107>
lea    0x1(%r11),%rax
cmp    $0xffffffff,%eax
je     126e <countNeighbors+0x16e>
cmp    $0x50,%eax
jne    1267 <countNeighbors+0x167>
mov    %r8,%rcx
jmp    126e <countNeighbors+0x16e>
mov    %r9,%rcx
jmp    126e <countNeighbors+0x16e>
lea    (%rdi,%r11,4),%rcx
add    $0x1e04,%rcx
jmp    126e <countNeighbors+0x16e>
add    %r15,%rax
lea    (%rdi,%rax,4),%rcx
mov    (%rcx),%eax
cmp    $0xffffffff,%esi
je     12a2 <countNeighbors+0x1a2>
cmp    $0x19,%esi
jne    1301 <countNeighbors+0x201>
lea    -0x1(%r11),%rcx
mov    %rdi,%rbp
cmp    $0x50,%ecx
je     1296 <countNeighbors+0x196>
mov    %r13,%rbp
cmp    $0xffffffff,%ecx
je     1296 <countNeighbors+0x196>
lea    (%rdi,%rcx,4),%rbp
mov    0x0(%rbp),%ecx
mov    %ecx,-0xc(%rsp)
jmp    1344 <countNeighbors+0x244>
mov    %r9,%rcx
test   %edx,%edx
je     12bc <countNeighbors+0x1bc>
mov    %r12,%rcx
cmp    $0x51,%edx
je     12bc <countNeighbors+0x1bc>
lea    (%rdi,%r11,4),%rcx
add    $0x1dfc,%rcx
mov    %r9,%rbp
cmp    $0xffffffff,%edx
je     12d7 <countNeighbors+0x1d7>
mov    %r12,%rbp
cmp    $0x50,%edx
je     12d7 <countNeighbors+0x1d7>
lea    (%rdi,%r11,4),%rbp
add    $0x1e00,%rbp
mov    (%rcx),%ecx
mov    %ecx,-0xc(%rsp)
mov    0x0(%rbp),%ecx
mov    %ecx,-0x10(%rsp)
mov    %r13,%r10
cmp    $0xfffffffe,%edx
je     1407 <countNeighbors+0x307>
cmp    $0x4f,%edx
jne    13fc <countNeighbors+0x2fc>
mov    %r12,%r9
jmp    1407 <countNeighbors+0x307>
mov    %r14,%rcx
shl    $0x4,%rcx
lea    (%rcx,%rcx,4),%rcx
lea    (%rdi,%rcx,4),%r15
lea    (%rdi,%rcx,4),%rbp
add    $0x13c,%rbp
lea    -0x1(%r11),%r8
mov    %rbp,%rbx
cmp    $0xffffffff,%r8d
je     1339 <countNeighbors+0x239>
mov    %r15,%rbx
cmp    $0x50,%r8d
je     1339 <countNeighbors+0x239>
lea    (%r8,%rcx,1),%rbx
lea    (%rdi,%rbx,4),%rbx
mov    (%rbx),%ebx
mov    %ebx,-0xc(%rsp)
cmp    $0x19,%esi
jne    138b <countNeighbors+0x28b>
mov    %rdi,%rcx
cmp    $0x50,%edx
je     1358 <countNeighbors+0x258>
mov    %r13,%rcx
cmp    $0xffffffff,%edx
je     1358 <countNeighbors+0x258>
lea    (%rdi,%r11,4),%rcx
mov    (%rcx),%ecx
mov    %ecx,-0x10(%rsp)
lea    0x1(%r11),%rcx
cmp    $0x50,%ecx
je     1377 <countNeighbors+0x277>
cmp    $0xffffffff,%ecx
jne    1382 <countNeighbors+0x282>
mov    %r13,%r10
mov    %r13,%r9
jmp    1407 <countNeighbors+0x307>
mov    %r13,%r10
mov    %rdi,%r9
jmp    1407 <countNeighbors+0x307>
mov    %r13,%r10
lea    (%rdi,%rcx,4),%r9
jmp    1407 <countNeighbors+0x307>
mov    %rbp,%rbx
cmp    $0xffffffff,%edx
je     13a3 <countNeighbors+0x2a3>
mov    %r15,%rbx
cmp    $0x50,%edx
je     13a3 <countNeighbors+0x2a3>
lea    (%rcx,%r11,1),%rbx
lea    (%rdi,%rbx,4),%rbx
mov    (%rbx),%ebx
mov    %ebx,-0x10(%rsp)
cmp    $0x19,%esi
je     135e <countNeighbors+0x25e>
mov    %r13,%r10
lea    0x1(%r11),%rbx
cmp    $0xffffffff,%ebx
je     13c9 <countNeighbors+0x2c9>
mov    %r15,%rbp
cmp    $0x50,%ebx
je     13c9 <countNeighbors+0x2c9>
add    %rcx,%rbx
lea    (%rdi,%rbx,4),%rbp
mov    0x0(%rbp),%r13d
add    $0x1,%r14
cmp    $0xffffffff,%r14d
je     14f3 <countNeighbors+0x3f3>
cmp    $0x19,%r14d
jne    140e <countNeighbors+0x30e>
mov    %rdi,%rcx
cmp    $0x50,%r8d
je     13f7 <countNeighbors+0x2f7>
mov    %r10,%rcx
cmp    $0xffffffff,%r8d
je     13f7 <countNeighbors+0x2f7>
lea    (%rdi,%r8,4),%rcx
mov    (%rcx),%r15d
jmp    144c <countNeighbors+0x34c>
lea    (%rdi,%r11,4),%r9
add    $0x1e04,%r9
mov    (%r9),%r13d
add    $0x1,%r14
mov    %r14,%rcx
shl    $0x4,%rcx
lea    (%rcx,%rcx,4),%rbp
lea    (%rdi,%rbp,4),%r12
lea    (%rdi,%rbp,4),%r9
add    $0x13c,%r9
lea    -0x1(%r11),%rbx
mov    %r9,%rcx
cmp    $0xffffffff,%ebx
je     1443 <countNeighbors+0x343>
mov    %r12,%rcx
cmp    $0x50,%ebx
je     1443 <countNeighbors+0x343>
add    %rbp,%rbx
lea    (%rdi,%rbx,4),%rcx
mov    (%rcx),%r15d
cmp    $0x19,%r14d
jne    1465 <countNeighbors+0x365>
mov    %rdi,%rcx
cmp    $0x50,%edx
je     1460 <countNeighbors+0x360>
mov    %r10,%rcx
cmp    $0xffffffff,%edx
je     1460 <countNeighbors+0x360>
lea    (%rdi,%r11,4),%rcx
mov    (%rcx),%r8d
jmp    1486 <countNeighbors+0x386>
mov    %r9,%rcx
cmp    $0xffffffff,%edx
je     147d <countNeighbors+0x37d>
mov    %r12,%rcx
cmp    $0x50,%edx
je     147d <countNeighbors+0x37d>
lea    (%r11,%rbp,1),%rcx
lea    (%rdi,%rcx,4),%rcx
mov    (%rcx),%r8d
cmp    $0x19,%r14d
jne    14a0 <countNeighbors+0x3a0>
add    $0x1,%r11
cmp    $0x50,%r11d
je     149b <countNeighbors+0x39b>
cmp    $0xffffffff,%r11d
jne    14b8 <countNeighbors+0x3b8>
mov    %r10,%r9
jmp    14bc <countNeighbors+0x3bc>
mov    %rdi,%r9
jmp    14bc <countNeighbors+0x3bc>
add    $0x1,%r11
cmp    $0xffffffff,%r11d
je     14bc <countNeighbors+0x3bc>
cmp    $0x50,%r11d
jne    14b5 <countNeighbors+0x3b5>
mov    %r12,%r9
jmp    14bc <countNeighbors+0x3bc>
add    %rbp,%r11
lea    (%rdi,%r11,4),%r9
mov    -0x8(%rsp),%ecx
add    -0x4(%rsp),%ecx
add    %ecx,%eax
add    -0xc(%rsp),%eax
add    -0x10(%rsp),%eax
add    %r13d,%eax
add    %r15d,%eax
add    %r8d,%eax
add    (%r9),%eax
lea    (%rsi,%rsi,4),%ecx
shl    $0x4,%ecx
add    %edx,%ecx
movslq %ecx,%rcx
sub    (%rdi,%rcx,4),%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r9,%rcx
test   %edx,%edx
je     150d <countNeighbors+0x40d>
mov    %r12,%rcx
cmp    $0x51,%edx
je     150d <countNeighbors+0x40d>
lea    (%rdi,%r11,4),%rcx
add    $0x1dfc,%rcx
mov    %r9,%rbp
cmp    $0xffffffff,%edx
je     1528 <countNeighbors+0x428>
mov    %r12,%rbp
cmp    $0x50,%edx
je     1528 <countNeighbors+0x428>
lea    (%rdi,%r11,4),%rbp
add    $0x1e00,%rbp
mov    (%rcx),%r15d
mov    0x0(%rbp),%r8d
cmp    $0xfffffffe,%edx
je     14bc <countNeighbors+0x3bc>
cmp    $0x4f,%edx
je     14b0 <countNeighbors+0x3b0>
lea    (%rdi,%r11,4),%r9
add    $0x1e04,%r9
jmp    14bc <countNeighbors+0x3bc>

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

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