int userHasNotWon(int board[20][20]) {
  int retVal = 0;
  for (int x = 0; x < 20; x++) {
    for (int y = 0; y < 20; y++) {
      if (board[x][y] == 1) {
        retVal = 1;
      }
    }
  }
  return retVal;
}


x86 assembly (clang, -O0):
<userHasNotWon>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
movl   $0x0,-0x10(%rbp)
cmpl   $0x14,-0x10(%rbp)
jge    117b <userHasNotWon+0x7b>
movl   $0x0,-0x14(%rbp)
cmpl   $0x14,-0x14(%rbp)
jge    1168 <userHasNotWon+0x68>
mov    -0x8(%rbp),%rax
movslq -0x10(%rbp),%rcx
imul   $0x50,%rcx,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rcx
cmpl   $0x1,(%rax,%rcx,4)
jne    1155 <userHasNotWon+0x55>
movl   $0x1,-0xc(%rbp)
jmp    115a <userHasNotWon+0x5a>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1127 <userHasNotWon+0x27>
jmp    116d <userHasNotWon+0x6d>
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1116 <userHasNotWon+0x16>
mov    -0xc(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<userHasNotWon>:
xor    %eax,%eax
mov    $0x10,%ecx
movdqa 0xef1(%rip),%xmm0
mov    $0x1,%r8d
cs nopw 0x0(%rax,%rax,1)
nop
mov    -0x10(%rdi,%rcx,1),%esi
mov    -0xc(%rdi,%rcx,1),%edx
cmp    $0x1,%esi
cmove  %esi,%eax
cmp    $0x1,%edx
mov    -0x8(%rdi,%rcx,1),%esi
cmove  %edx,%eax
cmp    $0x1,%esi
mov    -0x4(%rdi,%rcx,1),%edx
cmove  %esi,%eax
cmp    $0x1,%edx
movdqu 0x30(%rdi,%rcx,1),%xmm1
movdqu 0x20(%rdi,%rcx,1),%xmm2
movdqu 0x10(%rdi,%rcx,1),%xmm3
movdqu (%rdi,%rcx,1),%xmm4
pcmpeqd %xmm0,%xmm1
pcmpeqd %xmm0,%xmm2
packssdw %xmm1,%xmm2
pcmpeqd %xmm0,%xmm3
pcmpeqd %xmm0,%xmm4
packssdw %xmm3,%xmm4
packsswb %xmm2,%xmm4
pmovmskb %xmm4,%esi
cmove  %edx,%eax
test   %esi,%esi
cmovne %r8d,%eax
add    $0x50,%rcx
cmp    $0x650,%rcx
jne    1120 <userHasNotWon+0x20>
ret

LLVM IR (-O0):
define i32 @userHasNotWon([20 x i32]* %0) {
%2 = alloca [20 x i32]*
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
store [20 x i32]* %0, [20 x i32]** %2
store i32 0, i32* %3
store i32 0, i32* %4
br label %6
6: ; preds = %29, %1
%7 = load i32, i32* %4
%8 = icmp slt i32 %7, 20
br i1 %8, label %9, label %32
9: ; preds = %6
store i32 0, i32* %5
br label %10
10: ; preds = %25, %9
%11 = load i32, i32* %5
%12 = icmp slt i32 %11, 20
br i1 %12, label %13, label %28
13: ; preds = %10
%14 = load [20 x i32]*, [20 x i32]** %2
%15 = load i32, i32* %4
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds [20 x i32], [20 x i32]* %14, i64 %16
%18 = load i32, i32* %5
%19 = sext i32 %18 to i64
%20 = getelementptr inbounds [20 x i32], [20 x i32]* %17, i64 0, i64 %19
%21 = load i32, i32* %20
%22 = icmp eq i32 %21, 1
br i1 %22, label %23, label %24
23: ; preds = %13
store i32 1, i32* %3
br label %24
24: ; preds = %23, %13
br label %25
25: ; preds = %24
%26 = load i32, i32* %5
%27 = add nsw i32 %26, 1
store i32 %27, i32* %5
br label %10
28: ; preds = %10
br label %29
29: ; preds = %28
%30 = load i32, i32* %4
%31 = add nsw i32 %30, 1
store i32 %31, i32* %4
br label %6
32: ; preds = %6
%33 = load i32, i32* %3
ret i32 %33
}

LLVM IR (-O2):
define i32 @userHasNotWon([20 x i32]* nocapture %0) {
br label %2
2: ; preds = %1, %2
%3 = phi i64 [ 0, %1 ], [ %29, %2 ]
%4 = phi i32 [ 0, %1 ], [ %28, %2 ]
%5 = getelementptr inbounds [20 x i32], [20 x i32]* %0, i64 %3, i64 0
%6 = load i32, i32* %5
%7 = icmp eq i32 %6, 1
%8 = getelementptr inbounds [20 x i32], [20 x i32]* %0, i64 %3, i64 1
%9 = load i32, i32* %8
%10 = icmp eq i32 %9, 1
%11 = getelementptr inbounds [20 x i32], [20 x i32]* %0, i64 %3, i64 2
%12 = load i32, i32* %11
%13 = icmp eq i32 %12, 1
%14 = getelementptr inbounds [20 x i32], [20 x i32]* %0, i64 %3, i64 3
%15 = load i32, i32* %14
%16 = icmp eq i32 %15, 1
%17 = getelementptr inbounds [20 x i32], [20 x i32]* %0, i64 %3, i64 4
%18 = bitcast i32* %17 to <16 x i32>*
%19 = load <16 x i32>, <16 x i32>* %18
%20 = freeze <16 x i32> %19
%21 = icmp eq <16 x i32> %20, <i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
%22 = bitcast <16 x i1> %21 to i16
%23 = icmp ne i16 %22, 0
%24 = select i1 %23, i1 true, i1 %16
%25 = select i1 %24, i1 true, i1 %13
%26 = select i1 %25, i1 true, i1 %10
%27 = select i1 %26, i1 true, i1 %7
%28 = select i1 %27, i32 1, i32 %4
%29 = add nuw nsw i64 %3, 1
%30 = icmp eq i64 %29, 20
br i1 %30, label %31, label %2
31: ; preds = %2
ret i32 %28
}