double compute_variance(unsigned char *im, int stride, int x, int y) {
  int sum = 0.0;
  int sumsq = 0.0;
  int var;
  int i, j;
  for (i = 0; i < 13; ++i)
    for (j = 0; j < 13; ++j) {
      sum += im[(i + y - ((13 - 1) / 2)) * stride + (j + x - ((13 - 1) / 2))];
      sumsq +=
          im[(i + y - ((13 - 1) / 2)) * stride + (j + x - ((13 - 1) / 2))] *
          im[(i + y - ((13 - 1) / 2)) * stride + (j + x - ((13 - 1) / 2))];
    }
  var = sumsq * (13 * 13) - sum * sum;
  return (double)var;
}


x86 assembly (clang, -O0):
<compute_variance>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x24(%rbp)
cmpl   $0xd,-0x24(%rbp)
jge    11da <compute_variance+0xda>
movl   $0x0,-0x28(%rbp)
cmpl   $0xd,-0x28(%rbp)
jge    11c7 <compute_variance+0xc7>
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    -0x14(%rbp),%ecx
sub    $0x6,%ecx
imul   -0xc(%rbp),%ecx
mov    -0x28(%rbp),%edx
add    -0x10(%rbp),%edx
sub    $0x6,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
add    -0x18(%rbp),%eax
mov    %eax,-0x18(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x24(%rbp),%ecx
add    -0x14(%rbp),%ecx
sub    $0x6,%ecx
imul   -0xc(%rbp),%ecx
mov    -0x28(%rbp),%edx
add    -0x10(%rbp),%edx
sub    $0x6,%edx
add    %edx,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x8(%rbp),%rcx
mov    -0x24(%rbp),%edx
add    -0x14(%rbp),%edx
sub    $0x6,%edx
imul   -0xc(%rbp),%edx
mov    -0x28(%rbp),%esi
add    -0x10(%rbp),%esi
sub    $0x6,%esi
add    %esi,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
imul   %ecx,%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1137 <compute_variance+0x37>
jmp    11cc <compute_variance+0xcc>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1126 <compute_variance+0x26>
imul   $0xa9,-0x1c(%rbp),%eax
mov    -0x18(%rbp),%ecx
imul   -0x18(%rbp),%ecx
sub    %ecx,%eax
mov    %eax,-0x20(%rbp)
cvtsi2sdl -0x20(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<compute_variance>:
add    $0xfffffffa,%ecx
imul   %esi,%ecx
add    %edx,%ecx
xor    %eax,%eax
mov    $0xd,%r8d
xor    %r9d,%r9d
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
lea    -0x6(%rcx),%edx
movslq %edx,%rdx
movzbl (%rdi,%rdx,1),%r10d
add    %r10d,%eax
imul   %r10d,%r10d
add    %r9d,%r10d
lea    -0x5(%rcx),%edx
movslq %edx,%rdx
movzbl (%rdi,%rdx,1),%r9d
add    %r9d,%eax
imul   %r9d,%r9d
add    %r10d,%r9d
lea    -0x4(%rcx),%edx
movslq %edx,%rdx
movzbl (%rdi,%rdx,1),%r10d
add    %r10d,%eax
imul   %r10d,%r10d
add    %r9d,%r10d
lea    -0x3(%rcx),%edx
movslq %edx,%rdx
movzbl (%rdi,%rdx,1),%r9d
add    %r9d,%eax
imul   %r9d,%r9d
add    %r10d,%r9d
lea    -0x2(%rcx),%edx
movslq %edx,%rdx
movzbl (%rdi,%rdx,1),%r10d
add    %r10d,%eax
imul   %r10d,%r10d
add    %r9d,%r10d
lea    -0x1(%rcx),%edx
movslq %edx,%rdx
movzbl (%rdi,%rdx,1),%edx
add    %edx,%eax
imul   %edx,%edx
add    %r10d,%edx
movslq %ecx,%rcx
movzbl (%rdi,%rcx,1),%r9d
add    %r9d,%eax
imul   %r9d,%r9d
add    %edx,%r9d
lea    0x1(%rcx),%edx
movslq %edx,%rdx
movzbl (%rdi,%rdx,1),%r10d
add    %r10d,%eax
imul   %r10d,%r10d
add    %r9d,%r10d
lea    0x2(%rcx),%edx
movslq %edx,%rdx
movzbl (%rdi,%rdx,1),%r9d
add    %r9d,%eax
imul   %r9d,%r9d
add    %r10d,%r9d
lea    0x3(%rcx),%edx
movslq %edx,%rdx
movzbl (%rdi,%rdx,1),%r10d
add    %r10d,%eax
imul   %r10d,%r10d
add    %r9d,%r10d
lea    0x4(%rcx),%edx
movslq %edx,%rdx
movzbl (%rdi,%rdx,1),%r9d
add    %r9d,%eax
imul   %r9d,%r9d
add    %r10d,%r9d
lea    0x5(%rcx),%edx
movslq %edx,%rdx
movzbl (%rdi,%rdx,1),%r10d
add    %r10d,%eax
imul   %r10d,%r10d
add    %r9d,%r10d
lea    0x6(%rcx),%edx
movslq %edx,%rdx
movzbl (%rdi,%rdx,1),%r9d
add    %r9d,%eax
imul   %r9d,%r9d
add    %r10d,%r9d
add    %esi,%ecx
add    $0xffffffffffffffff,%r8
jne    1120 <compute_variance+0x20>
imul   $0xa9,%r9d,%ecx
imul   %eax,%eax
sub    %eax,%ecx
cvtsi2sd %ecx,%xmm0
ret

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

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