short validLocationCount(short **grid, short validValue) {
  short i, j, count;
  count = 0;
  for (i = 0; i < (100 - 20 - 1); i++) {
    for (j = 0; j < ((31 + 5) - 5 - 2); j++) {
      if (grid[i][j] == validValue) {
        count++;
      }
    }
  }
  return count;
}


x86 assembly (clang, -O0):
<validLocationCount>:
push   %rbp
mov    %rsp,%rbp
mov    %si,%ax
mov    %rdi,-0x8(%rbp)
mov    %ax,-0xa(%rbp)
movw   $0x0,-0x10(%rbp)
movw   $0x0,-0xc(%rbp)
movswl -0xc(%rbp),%eax
cmp    $0x4f,%eax
jge    1195 <validLocationCount+0x95>
movw   $0x0,-0xe(%rbp)
movswl -0xe(%rbp),%eax
cmp    $0x1d,%eax
jge    117f <validLocationCount+0x7f>
mov    -0x8(%rbp),%rax
movswq -0xc(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movswq -0xe(%rbp),%rcx
movswl (%rax,%rcx,2),%eax
movswl -0xa(%rbp),%ecx
cmp    %ecx,%eax
jne    1169 <validLocationCount+0x69>
mov    -0x10(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x10(%rbp)
jmp    116e <validLocationCount+0x6e>
mov    -0xe(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0xe(%rbp)
jmp    112e <validLocationCount+0x2e>
jmp    1184 <validLocationCount+0x84>
mov    -0xc(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0xc(%rbp)
jmp    111b <validLocationCount+0x1b>
movswl -0x10(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<validLocationCount>:
push   %rbp
push   %rbx
movd   %esi,%xmm0
pshuflw $0x0,%xmm0,%xmm0
pshufd $0x0,%xmm0,%xmm1
xor    %ecx,%ecx
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    (%rdi,%rcx,8),%rbx
movdqu (%rbx),%xmm4
movdqu 0x10(%rbx),%xmm5
movdqu 0x20(%rbx),%xmm3
movq   0x30(%rbx),%xmm2
xor    %r8d,%r8d
cmp    %si,0x38(%rbx)
sete   %r8b
pcmpeqw %xmm1,%xmm5
pcmpeqw %xmm1,%xmm4
packsswb %xmm5,%xmm4
pmovmskb %xmm4,%edx
mov    %edx,%ebx
shr    %ebx
and    $0x5555,%ebx
sub    %ebx,%edx
mov    %edx,%ebx
and    $0x3333,%ebx
shr    $0x2,%edx
and    $0x3333,%edx
add    %ebx,%edx
mov    %edx,%ebx
shr    $0x4,%ebx
add    %edx,%ebx
and    $0xf0f,%ebx
mov    %ebx,%edx
shl    $0x8,%edx
add    %ebx,%edx
movzbl %dh,%ebp
pcmpeqw %xmm1,%xmm3
packsswb %xmm3,%xmm3
pmovmskb %xmm3,%edx
mov    %edx,%ebx
shr    %bl
and    $0x55,%bl
sub    %bl,%dl
mov    %edx,%ebx
and    $0x33,%bl
shr    $0x2,%dl
and    $0x33,%dl
add    %bl,%dl
mov    %edx,%ebx
shr    $0x4,%bl
add    %dl,%bl
and    $0xf,%bl
movzbl %bl,%edx
add    %ebp,%edx
pcmpeqw %xmm0,%xmm2
punpcklwd %xmm2,%xmm2
movmskps %xmm2,%ebp
mov    %ebp,%ebx
shr    %bl
and    $0x5,%bl
sub    %bl,%bpl
mov    %ebp,%ebx
and    $0x33,%bl
shr    $0x2,%bpl
and    $0x33,%bpl
add    %bl,%bpl
mov    %ebp,%ebx
shr    $0x4,%bl
add    %bpl,%bl
and    $0xf,%bl
movzbl %bl,%ebp
add    %edx,%ebp
add    %r8d,%ebp
add    %ebp,%eax
add    $0x1,%rcx
cmp    $0x4f,%rcx
jne    1120 <validLocationCount+0x20>
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define signext i16 @validLocationCount(i16** %0, i16 signext %1) {
%3 = alloca i16**
%4 = alloca i16
%5 = alloca i16
%6 = alloca i16
%7 = alloca i16
store i16** %0, i16*** %3
store i16 %1, i16* %4
store i16 0, i16* %7
store i16 0, i16* %5
br label %8
8: ; preds = %39, %2
%9 = load i16, i16* %5
%10 = sext i16 %9 to i32
%11 = icmp slt i32 %10, 79
br i1 %11, label %12, label %42
12: ; preds = %8
store i16 0, i16* %6
br label %13
13: ; preds = %35, %12
%14 = load i16, i16* %6
%15 = sext i16 %14 to i32
%16 = icmp slt i32 %15, 29
br i1 %16, label %17, label %38
17: ; preds = %13
%18 = load i16**, i16*** %3
%19 = load i16, i16* %5
%20 = sext i16 %19 to i64
%21 = getelementptr inbounds i16*, i16** %18, i64 %20
%22 = load i16*, i16** %21
%23 = load i16, i16* %6
%24 = sext i16 %23 to i64
%25 = getelementptr inbounds i16, i16* %22, i64 %24
%26 = load i16, i16* %25
%27 = sext i16 %26 to i32
%28 = load i16, i16* %4
%29 = sext i16 %28 to i32
%30 = icmp eq i32 %27, %29
br i1 %30, label %31, label %34
31: ; preds = %17
%32 = load i16, i16* %7
%33 = add i16 %32, 1
store i16 %33, i16* %7
br label %34
34: ; preds = %31, %17
br label %35
35: ; preds = %34
%36 = load i16, i16* %6
%37 = add i16 %36, 1
store i16 %37, i16* %6
br label %13
38: ; preds = %13
br label %39
39: ; preds = %38
%40 = load i16, i16* %5
%41 = add i16 %40, 1
store i16 %41, i16* %5
br label %8
42: ; preds = %8
%43 = load i16, i16* %7
ret i16 %43
}

LLVM IR (-O2):
define signext i16 @validLocationCount(i16** nocapture %0, i16 signext %1) {
%3 = insertelement <16 x i16> poison, i16 %1, i64 0
%4 = shufflevector <16 x i16> %3, <16 x i16> poison, <16 x i32> zeroinitializer
%5 = insertelement <8 x i16> poison, i16 %1, i64 0
%6 = shufflevector <8 x i16> %5, <8 x i16> poison, <8 x i32> zeroinitializer
%7 = insertelement <4 x i16> poison, i16 %1, i64 0
%8 = shufflevector <4 x i16> %7, <4 x i16> poison, <4 x i32> zeroinitializer
br label %9
9: ; preds = %2, %9
%10 = phi i64 [ 0, %2 ], [ %41, %9 ]
%11 = phi i16 [ 0, %2 ], [ %40, %9 ]
%12 = getelementptr inbounds i16*, i16** %0, i64 %10
%13 = load i16*, i16** %12
%14 = bitcast i16* %13 to <16 x i16>*
%15 = load <16 x i16>, <16 x i16>* %14
%16 = icmp eq <16 x i16> %15, %4
%17 = getelementptr inbounds i16, i16* %13, i64 16
%18 = bitcast i16* %17 to <8 x i16>*
%19 = load <8 x i16>, <8 x i16>* %18
%20 = icmp eq <8 x i16> %19, %6
%21 = getelementptr inbounds i16, i16* %13, i64 24
%22 = bitcast i16* %21 to <4 x i16>*
%23 = load <4 x i16>, <4 x i16>* %22
%24 = icmp eq <4 x i16> %23, %8
%25 = getelementptr inbounds i16, i16* %13, i64 28
%26 = load i16, i16* %25
%27 = icmp eq i16 %26, %1
%28 = zext i1 %27 to i16
%29 = bitcast <16 x i1> %16 to i16
%30 = call i16 @llvm.ctpop.i16(i16 %29)
%31 = bitcast <8 x i1> %20 to i8
%32 = call i8 @llvm.ctpop.i8(i8 %31)
%33 = zext i8 %32 to i16
%34 = add nuw nsw i16 %30, %33
%35 = bitcast <4 x i1> %24 to i4
%36 = call i4 @llvm.ctpop.i4(i4 %35)
%37 = zext i4 %36 to i16
%38 = add nuw nsw i16 %34, %37
%39 = add nuw nsw i16 %38, %28
%40 = add i16 %39, %11
%41 = add nuw nsw i64 %10, 1
%42 = icmp eq i64 %41, 79
br i1 %42, label %43, label %9
43: ; preds = %9
ret i16 %40
}