void compute_color_line_STDEV(const unsigned char *const uncompressed,
                              int channels, float point[3],
                              float direction[3]) {
  const float inv_16 = 1.0f / 16.0f;
  int i;
  float sum_r = 0.0f, sum_g = 0.0f, sum_b = 0.0f;
  float sum_rr = 0.0f, sum_gg = 0.0f, sum_bb = 0.0f;
  float sum_rg = 0.0f, sum_rb = 0.0f, sum_gb = 0.0f;
  for (i = 0; i < 16 * channels; i += channels) {
    sum_r += uncompressed[i + 0];
    sum_rr += uncompressed[i + 0] * uncompressed[i + 0];
    sum_g += uncompressed[i + 1];
    sum_gg += uncompressed[i + 1] * uncompressed[i + 1];
    sum_b += uncompressed[i + 2];
    sum_bb += uncompressed[i + 2] * uncompressed[i + 2];
    sum_rg += uncompressed[i + 0] * uncompressed[i + 1];
    sum_rb += uncompressed[i + 0] * uncompressed[i + 2];
    sum_gb += uncompressed[i + 1] * uncompressed[i + 2];
  }
  sum_r *= inv_16;
  sum_g *= inv_16;
  sum_b *= inv_16;
  sum_rr -= 16.0f * sum_r * sum_r;
  sum_gg -= 16.0f * sum_g * sum_g;
  sum_bb -= 16.0f * sum_b * sum_b;
  sum_rg -= 16.0f * sum_r * sum_g;
  sum_rb -= 16.0f * sum_r * sum_b;
  sum_gb -= 16.0f * sum_g * sum_b;
  point[0] = sum_r;
  point[1] = sum_g;
  point[2] = sum_b;
  sum_r = 1.0f;
  sum_g = 2.718281828f;
  sum_b = 3.141592654f;
  direction[0] = sum_r * sum_rr + sum_g * sum_rg + sum_b * sum_rb;
  direction[1] = sum_r * sum_rg + sum_g * sum_gg + sum_b * sum_gb;
  direction[2] = sum_r * sum_rb + sum_g * sum_gb + sum_b * sum_bb;
  sum_r = direction[0];
  sum_g = direction[1];
  sum_b = direction[2];
  direction[0] = sum_r * sum_rr + sum_g * sum_rg + sum_b * sum_rb;
  direction[1] = sum_r * sum_rg + sum_g * sum_gg + sum_b * sum_gb;
  direction[2] = sum_r * sum_rb + sum_g * sum_gb + sum_b * sum_bb;
  sum_r = direction[0];
  sum_g = direction[1];
  sum_b = direction[2];
  direction[0] = sum_r * sum_rr + sum_g * sum_rg + sum_b * sum_rb;
  direction[1] = sum_r * sum_rg + sum_g * sum_gg + sum_b * sum_gb;
  direction[2] = sum_r * sum_rb + sum_g * sum_gb + sum_b * sum_bb;
}


x86 assembly (clang, -O0):
<compute_color_line_STDEV>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
movss  0xee5(%rip),%xmm0
movss  %xmm0,-0x24(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x3c(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x40(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
mov    -0xc(%rbp),%ecx
shl    $0x4,%ecx
cmp    %ecx,%eax
jge    131d <compute_color_line_STDEV+0x21d>
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
cvtsi2ss %eax,%xmm0
addss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0x0,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
imul   %ecx,%eax
cvtsi2ss %eax,%xmm0
addss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
cvtsi2ss %eax,%xmm0
addss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
imul   %ecx,%eax
cvtsi2ss %eax,%xmm0
addss  -0x3c(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
cvtsi2ss %eax,%xmm0
addss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
imul   %ecx,%eax
cvtsi2ss %eax,%xmm0
addss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0x1,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
imul   %ecx,%eax
cvtsi2ss %eax,%xmm0
addss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
imul   %ecx,%eax
cvtsi2ss %eax,%xmm0
addss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movzbl (%rax,%rcx,1),%eax
mov    -0x8(%rbp),%rcx
mov    -0x28(%rbp),%edx
add    $0x2,%edx
movslq %edx,%rdx
movzbl (%rcx,%rdx,1),%ecx
imul   %ecx,%eax
cvtsi2ss %eax,%xmm0
addss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0xc(%rbp),%eax
add    -0x28(%rbp),%eax
mov    %eax,-0x28(%rbp)
jmp    116f <compute_color_line_STDEV+0x6f>
movss  0xcdb(%rip),%xmm0
mulss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  0xcc9(%rip),%xmm0
mulss  -0x30(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  0xcb7(%rip),%xmm0
mulss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  0xcb5(%rip),%xmm0
mulss  -0x2c(%rbp),%xmm0
movss  -0x2c(%rbp),%xmm2
movss  -0x38(%rbp),%xmm1
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  0xc84(%rip),%xmm0
mulss  -0x30(%rbp),%xmm0
movss  -0x30(%rbp),%xmm2
movss  -0x3c(%rbp),%xmm1
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  0xc53(%rip),%xmm0
mulss  -0x34(%rbp),%xmm0
movss  -0x34(%rbp),%xmm2
movss  -0x40(%rbp),%xmm1
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x40(%rbp)
movss  0xc22(%rip),%xmm0
mulss  -0x2c(%rbp),%xmm0
movss  -0x30(%rbp),%xmm2
movss  -0x44(%rbp),%xmm1
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  0xbf1(%rip),%xmm0
mulss  -0x2c(%rbp),%xmm0
movss  -0x34(%rbp),%xmm2
movss  -0x48(%rbp),%xmm1
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x48(%rbp)
movss  0xbc0(%rip),%xmm0
mulss  -0x30(%rbp),%xmm0
movss  -0x34(%rbp),%xmm2
movss  -0x4c(%rbp),%xmm1
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x2c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x34(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  0xb62(%rip),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  0xb51(%rip),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  0xb40(%rip),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x2c(%rbp),%xmm1
movss  -0x38(%rbp),%xmm2
movss  -0x30(%rbp),%xmm0
mulss  -0x44(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x2c(%rbp),%xmm1
movss  -0x44(%rbp),%xmm2
movss  -0x30(%rbp),%xmm0
mulss  -0x3c(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x2c(%rbp),%xmm1
movss  -0x48(%rbp),%xmm2
movss  -0x30(%rbp),%xmm0
mulss  -0x4c(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
movss  -0x40(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,0x8(%rax)
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x20(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x2c(%rbp),%xmm1
movss  -0x38(%rbp),%xmm2
movss  -0x30(%rbp),%xmm0
mulss  -0x44(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x2c(%rbp),%xmm1
movss  -0x44(%rbp),%xmm2
movss  -0x30(%rbp),%xmm0
mulss  -0x3c(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x2c(%rbp),%xmm1
movss  -0x48(%rbp),%xmm2
movss  -0x30(%rbp),%xmm0
mulss  -0x4c(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
movss  -0x40(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,0x8(%rax)
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x20(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x20(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x2c(%rbp),%xmm1
movss  -0x38(%rbp),%xmm2
movss  -0x30(%rbp),%xmm0
mulss  -0x44(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
movss  -0x48(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x2c(%rbp),%xmm1
movss  -0x44(%rbp),%xmm2
movss  -0x30(%rbp),%xmm0
mulss  -0x3c(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
movss  -0x4c(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x2c(%rbp),%xmm1
movss  -0x48(%rbp),%xmm2
movss  -0x30(%rbp),%xmm0
mulss  -0x4c(%rbp),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
movss  -0x40(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movss  %xmm0,0x8(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<compute_color_line_STDEV>:
push   %rbp
push   %rbx
test   %esi,%esi
jle    11ee <compute_color_line_STDEV+0xee>
mov    %esi,%r8d
shl    $0x4,%esi
movslq %esi,%r9
pxor   %xmm8,%xmm8
xorps  %xmm12,%xmm12
xor    %r10d,%r10d
xorps  %xmm13,%xmm13
xorps  %xmm3,%xmm3
xorps  %xmm4,%xmm4
xorps  %xmm5,%xmm5
xorps  %xmm7,%xmm7
xorps  %xmm6,%xmm6
xorps  %xmm2,%xmm2
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%rdi,%r10,1),%esi
xorps  %xmm0,%xmm0
cvtsi2ss %esi,%xmm0
addss  %xmm0,%xmm6
mov    %esi,%eax
imul   %esi,%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
addss  %xmm0,%xmm7
movzwl 0x1(%rdi,%r10,1),%eax
movd   %eax,%xmm0
movzbl %al,%r11d
shr    $0x8,%eax
mov    %eax,%ebx
mov    %r11d,%ebp
imul   %esi,%ebp
imul   %eax,%esi
imul   %r11d,%eax
imul   %r11d,%r11d
xorps  %xmm1,%xmm1
cvtsi2ss %r11d,%xmm1
addss  %xmm1,%xmm5
punpcklbw %xmm8,%xmm0
punpcklwd %xmm8,%xmm0
cvtdq2ps %xmm0,%xmm0
imul   %ebx,%ebx
xorps  %xmm1,%xmm1
cvtsi2ss %ebx,%xmm1
addps  %xmm0,%xmm2
xorps  %xmm0,%xmm0
cvtsi2ss %ebp,%xmm0
addss  %xmm1,%xmm4
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
addss  %xmm0,%xmm3
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
addss  %xmm1,%xmm13
addss  %xmm0,%xmm12
add    %r8,%r10
cmp    %r9,%r10
jl     1140 <compute_color_line_STDEV+0x40>
mulss  0xe1b(%rip),%xmm6
mulps  0xe24(%rip),%xmm2
jmp    1208 <compute_color_line_STDEV+0x108>
xorps  %xmm2,%xmm2
xorps  %xmm6,%xmm6
xorps  %xmm7,%xmm7
xorps  %xmm5,%xmm5
xorps  %xmm4,%xmm4
xorps  %xmm3,%xmm3
xorps  %xmm13,%xmm13
xorps  %xmm12,%xmm12
movss  0xdf3(%rip),%xmm8
movaps %xmm6,%xmm9
mulss  %xmm8,%xmm9
movaps %xmm9,%xmm10
mulss  %xmm6,%xmm10
addss  %xmm7,%xmm10
movaps %xmm2,%xmm0
mulss  %xmm8,%xmm0
movaps %xmm9,%xmm7
movaps %xmm2,%xmm11
shufps $0x55,%xmm2,%xmm11
mulss  %xmm11,%xmm8
mulss  %xmm11,%xmm8
mulss  %xmm11,%xmm9
movss  %xmm6,(%rdx)
movss  %xmm2,0x4(%rdx)
movss  %xmm11,0x8(%rdx)
mulss  %xmm0,%xmm11
movaps %xmm0,%xmm6
mulss  %xmm2,%xmm6
addss  %xmm5,%xmm6
mulss  %xmm2,%xmm7
addss  %xmm4,%xmm8
addss  %xmm3,%xmm7
addss  %xmm13,%xmm9
addss  %xmm12,%xmm11
movss  0xd7e(%rip),%xmm1
movaps %xmm7,%xmm3
mulss  %xmm1,%xmm3
addss  %xmm10,%xmm3
movss  0xd6e(%rip),%xmm0
movaps %xmm9,%xmm2
mulss  %xmm0,%xmm2
addss  %xmm3,%xmm2
movaps %xmm6,%xmm3
mulss  %xmm1,%xmm3
addss  %xmm7,%xmm3
movaps %xmm11,%xmm4
mulss  %xmm0,%xmm4
addss  %xmm3,%xmm4
mulss  %xmm11,%xmm1
addss  %xmm9,%xmm1
mulss  %xmm8,%xmm0
addss  %xmm1,%xmm0
movaps %xmm7,%xmm1
mulss  %xmm4,%xmm1
movaps %xmm2,%xmm3
mulss  %xmm10,%xmm3
addss  %xmm1,%xmm3
movaps %xmm0,%xmm1
mulss  %xmm9,%xmm1
addss  %xmm3,%xmm1
movaps %xmm6,%xmm3
mulss  %xmm4,%xmm3
movaps %xmm2,%xmm5
mulss  %xmm7,%xmm5
addss  %xmm3,%xmm5
movaps %xmm0,%xmm3
mulss  %xmm11,%xmm3
addss  %xmm5,%xmm3
mulss  %xmm11,%xmm4
mulss  %xmm9,%xmm2
addss  %xmm4,%xmm2
mulss  %xmm8,%xmm0
addss  %xmm2,%xmm0
movaps %xmm1,%xmm2
mulss  %xmm7,%xmm2
mulss  %xmm3,%xmm7
mulss  %xmm1,%xmm10
addss  %xmm7,%xmm10
movaps %xmm0,%xmm4
mulss  %xmm9,%xmm4
addss  %xmm10,%xmm4
movss  %xmm4,(%rcx)
mulss  %xmm3,%xmm6
addss  %xmm2,%xmm6
movaps %xmm0,%xmm2
mulss  %xmm11,%xmm2
addss  %xmm6,%xmm2
movss  %xmm2,0x4(%rcx)
mulss  %xmm11,%xmm3
mulss  %xmm9,%xmm1
addss  %xmm3,%xmm1
mulss  %xmm8,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,0x8(%rcx)
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define void @compute_color_line_STDEV(i8* %0, i32 %1, float* %2, float* %3) {
%5 = alloca i8*
%6 = alloca i32
%7 = alloca float*
%8 = alloca float*
%9 = alloca float
%10 = alloca i32
%11 = alloca float
%12 = alloca float
%13 = alloca float
%14 = alloca float
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
store i8* %0, i8** %5
store i32 %1, i32* %6
store float* %2, float** %7
store float* %3, float** %8
store float 6.250000e-02, float* %9
store float 0.000000e+00, float* %11
store float 0.000000e+00, float* %12
store float 0.000000e+00, float* %13
store float 0.000000e+00, float* %14
store float 0.000000e+00, float* %15
store float 0.000000e+00, float* %16
store float 0.000000e+00, float* %17
store float 0.000000e+00, float* %18
store float 0.000000e+00, float* %19
store i32 0, i32* %10
br label %20
20: ; preds = %164, %4
%21 = load i32, i32* %10
%22 = load i32, i32* %6
%23 = mul nsw i32 16, %22
%24 = icmp slt i32 %21, %23
br i1 %24, label %25, label %168
25: ; preds = %20
%26 = load i8*, i8** %5
%27 = load i32, i32* %10
%28 = add nsw i32 %27, 0
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds i8, i8* %26, i64 %29
%31 = load i8, i8* %30
%32 = zext i8 %31 to i32
%33 = sitofp i32 %32 to float
%34 = load float, float* %11
%35 = fadd float %34, %33
store float %35, float* %11
%36 = load i8*, i8** %5
%37 = load i32, i32* %10
%38 = add nsw i32 %37, 0
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds i8, i8* %36, i64 %39
%41 = load i8, i8* %40
%42 = zext i8 %41 to i32
%43 = load i8*, i8** %5
%44 = load i32, i32* %10
%45 = add nsw i32 %44, 0
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds i8, i8* %43, i64 %46
%48 = load i8, i8* %47
%49 = zext i8 %48 to i32
%50 = mul nsw i32 %42, %49
%51 = sitofp i32 %50 to float
%52 = load float, float* %14
%53 = fadd float %52, %51
store float %53, float* %14
%54 = load i8*, i8** %5
%55 = load i32, i32* %10
%56 = add nsw i32 %55, 1
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds i8, i8* %54, i64 %57
%59 = load i8, i8* %58
%60 = zext i8 %59 to i32
%61 = sitofp i32 %60 to float
%62 = load float, float* %12
%63 = fadd float %62, %61
store float %63, float* %12
%64 = load i8*, i8** %5
%65 = load i32, i32* %10
%66 = add nsw i32 %65, 1
%67 = sext i32 %66 to i64
%68 = getelementptr inbounds i8, i8* %64, i64 %67
%69 = load i8, i8* %68
%70 = zext i8 %69 to i32
%71 = load i8*, i8** %5
%72 = load i32, i32* %10
%73 = add nsw i32 %72, 1
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds i8, i8* %71, i64 %74
%76 = load i8, i8* %75
%77 = zext i8 %76 to i32
%78 = mul nsw i32 %70, %77
%79 = sitofp i32 %78 to float
%80 = load float, float* %15
%81 = fadd float %80, %79
store float %81, float* %15
%82 = load i8*, i8** %5
%83 = load i32, i32* %10
%84 = add nsw i32 %83, 2
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds i8, i8* %82, i64 %85
%87 = load i8, i8* %86
%88 = zext i8 %87 to i32
%89 = sitofp i32 %88 to float
%90 = load float, float* %13
%91 = fadd float %90, %89
store float %91, float* %13
%92 = load i8*, i8** %5
%93 = load i32, i32* %10
%94 = add nsw i32 %93, 2
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds i8, i8* %92, i64 %95
%97 = load i8, i8* %96
%98 = zext i8 %97 to i32
%99 = load i8*, i8** %5
%100 = load i32, i32* %10
%101 = add nsw i32 %100, 2
%102 = sext i32 %101 to i64
%103 = getelementptr inbounds i8, i8* %99, i64 %102
%104 = load i8, i8* %103
%105 = zext i8 %104 to i32
%106 = mul nsw i32 %98, %105
%107 = sitofp i32 %106 to float
%108 = load float, float* %16
%109 = fadd float %108, %107
store float %109, float* %16
%110 = load i8*, i8** %5
%111 = load i32, i32* %10
%112 = add nsw i32 %111, 0
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i8, i8* %110, i64 %113
%115 = load i8, i8* %114
%116 = zext i8 %115 to i32
%117 = load i8*, i8** %5
%118 = load i32, i32* %10
%119 = add nsw i32 %118, 1
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds i8, i8* %117, i64 %120
%122 = load i8, i8* %121
%123 = zext i8 %122 to i32
%124 = mul nsw i32 %116, %123
%125 = sitofp i32 %124 to float
%126 = load float, float* %17
%127 = fadd float %126, %125
store float %127, float* %17
%128 = load i8*, i8** %5
%129 = load i32, i32* %10
%130 = add nsw i32 %129, 0
%131 = sext i32 %130 to i64
%132 = getelementptr inbounds i8, i8* %128, i64 %131
%133 = load i8, i8* %132
%134 = zext i8 %133 to i32
%135 = load i8*, i8** %5
%136 = load i32, i32* %10
%137 = add nsw i32 %136, 2
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds i8, i8* %135, i64 %138
%140 = load i8, i8* %139
%141 = zext i8 %140 to i32
%142 = mul nsw i32 %134, %141
%143 = sitofp i32 %142 to float
%144 = load float, float* %18
%145 = fadd float %144, %143
store float %145, float* %18
%146 = load i8*, i8** %5
%147 = load i32, i32* %10
%148 = add nsw i32 %147, 1
%149 = sext i32 %148 to i64
%150 = getelementptr inbounds i8, i8* %146, i64 %149
%151 = load i8, i8* %150
%152 = zext i8 %151 to i32
%153 = load i8*, i8** %5
%154 = load i32, i32* %10
%155 = add nsw i32 %154, 2
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds i8, i8* %153, i64 %156
%158 = load i8, i8* %157
%159 = zext i8 %158 to i32
%160 = mul nsw i32 %152, %159
%161 = sitofp i32 %160 to float
%162 = load float, float* %19
%163 = fadd float %162, %161
store float %163, float* %19
br label %164
164: ; preds = %25
%165 = load i32, i32* %6
%166 = load i32, i32* %10
%167 = add nsw i32 %166, %165
store i32 %167, i32* %10
br label %20
168: ; preds = %20
%169 = load float, float* %11
%170 = fmul float %169, 6.250000e-02
store float %170, float* %11
%171 = load float, float* %12
%172 = fmul float %171, 6.250000e-02
store float %172, float* %12
%173 = load float, float* %13
%174 = fmul float %173, 6.250000e-02
store float %174, float* %13
%175 = load float, float* %11
%176 = fmul float 1.600000e+01, %175
%177 = load float, float* %11
%178 = load float, float* %14
%179 = fneg float %176
%180 = call float @llvm.fmuladd.f32(float %179, float %177, float %178)
store float %180, float* %14
%181 = load float, float* %12
%182 = fmul float 1.600000e+01, %181
%183 = load float, float* %12
%184 = load float, float* %15
%185 = fneg float %182
%186 = call float @llvm.fmuladd.f32(float %185, float %183, float %184)
store float %186, float* %15
%187 = load float, float* %13
%188 = fmul float 1.600000e+01, %187
%189 = load float, float* %13
%190 = load float, float* %16
%191 = fneg float %188
%192 = call float @llvm.fmuladd.f32(float %191, float %189, float %190)
store float %192, float* %16
%193 = load float, float* %11
%194 = fmul float 1.600000e+01, %193
%195 = load float, float* %12
%196 = load float, float* %17
%197 = fneg float %194
%198 = call float @llvm.fmuladd.f32(float %197, float %195, float %196)
store float %198, float* %17
%199 = load float, float* %11
%200 = fmul float 1.600000e+01, %199
%201 = load float, float* %13
%202 = load float, float* %18
%203 = fneg float %200
%204 = call float @llvm.fmuladd.f32(float %203, float %201, float %202)
store float %204, float* %18
%205 = load float, float* %12
%206 = fmul float 1.600000e+01, %205
%207 = load float, float* %13
%208 = load float, float* %19
%209 = fneg float %206
%210 = call float @llvm.fmuladd.f32(float %209, float %207, float %208)
store float %210, float* %19
%211 = load float, float* %11
%212 = load float*, float** %7
%213 = getelementptr inbounds float, float* %212, i64 0
store float %211, float* %213
%214 = load float, float* %12
%215 = load float*, float** %7
%216 = getelementptr inbounds float, float* %215, i64 1
store float %214, float* %216
%217 = load float, float* %13
%218 = load float*, float** %7
%219 = getelementptr inbounds float, float* %218, i64 2
store float %217, float* %219
store float 1.000000e+00, float* %11
store float 0x4005BF0A80000000, float* %12
store float 0x400921FB60000000, float* %13
%220 = load float, float* %11
%221 = load float, float* %14
%222 = load float, float* %12
%223 = load float, float* %17
%224 = fmul float %222, %223
%225 = call float @llvm.fmuladd.f32(float %220, float %221, float %224)
%226 = load float, float* %13
%227 = load float, float* %18
%228 = call float @llvm.fmuladd.f32(float %226, float %227, float %225)
%229 = load float*, float** %8
%230 = getelementptr inbounds float, float* %229, i64 0
store float %228, float* %230
%231 = load float, float* %11
%232 = load float, float* %17
%233 = load float, float* %12
%234 = load float, float* %15
%235 = fmul float %233, %234
%236 = call float @llvm.fmuladd.f32(float %231, float %232, float %235)
%237 = load float, float* %13
%238 = load float, float* %19
%239 = call float @llvm.fmuladd.f32(float %237, float %238, float %236)
%240 = load float*, float** %8
%241 = getelementptr inbounds float, float* %240, i64 1
store float %239, float* %241
%242 = load float, float* %11
%243 = load float, float* %18
%244 = load float, float* %12
%245 = load float, float* %19
%246 = fmul float %244, %245
%247 = call float @llvm.fmuladd.f32(float %242, float %243, float %246)
%248 = load float, float* %13
%249 = load float, float* %16
%250 = call float @llvm.fmuladd.f32(float %248, float %249, float %247)
%251 = load float*, float** %8
%252 = getelementptr inbounds float, float* %251, i64 2
store float %250, float* %252
%253 = load float*, float** %8
%254 = getelementptr inbounds float, float* %253, i64 0
%255 = load float, float* %254
store float %255, float* %11
%256 = load float*, float** %8
%257 = getelementptr inbounds float, float* %256, i64 1
%258 = load float, float* %257
store float %258, float* %12
%259 = load float*, float** %8
%260 = getelementptr inbounds float, float* %259, i64 2
%261 = load float, float* %260
store float %261, float* %13
%262 = load float, float* %11
%263 = load float, float* %14
%264 = load float, float* %12
%265 = load float, float* %17
%266 = fmul float %264, %265
%267 = call float @llvm.fmuladd.f32(float %262, float %263, float %266)
%268 = load float, float* %13
%269 = load float, float* %18
%270 = call float @llvm.fmuladd.f32(float %268, float %269, float %267)
%271 = load float*, float** %8
%272 = getelementptr inbounds float, float* %271, i64 0
store float %270, float* %272
%273 = load float, float* %11
%274 = load float, float* %17
%275 = load float, float* %12
%276 = load float, float* %15
%277 = fmul float %275, %276
%278 = call float @llvm.fmuladd.f32(float %273, float %274, float %277)
%279 = load float, float* %13
%280 = load float, float* %19
%281 = call float @llvm.fmuladd.f32(float %279, float %280, float %278)
%282 = load float*, float** %8
%283 = getelementptr inbounds float, float* %282, i64 1
store float %281, float* %283
%284 = load float, float* %11
%285 = load float, float* %18
%286 = load float, float* %12
%287 = load float, float* %19
%288 = fmul float %286, %287
%289 = call float @llvm.fmuladd.f32(float %284, float %285, float %288)
%290 = load float, float* %13
%291 = load float, float* %16
%292 = call float @llvm.fmuladd.f32(float %290, float %291, float %289)
%293 = load float*, float** %8
%294 = getelementptr inbounds float, float* %293, i64 2
store float %292, float* %294
%295 = load float*, float** %8
%296 = getelementptr inbounds float, float* %295, i64 0
%297 = load float, float* %296
store float %297, float* %11
%298 = load float*, float** %8
%299 = getelementptr inbounds float, float* %298, i64 1
%300 = load float, float* %299
store float %300, float* %12
%301 = load float*, float** %8
%302 = getelementptr inbounds float, float* %301, i64 2
%303 = load float, float* %302
store float %303, float* %13
%304 = load float, float* %11
%305 = load float, float* %14
%306 = load float, float* %12
%307 = load float, float* %17
%308 = fmul float %306, %307
%309 = call float @llvm.fmuladd.f32(float %304, float %305, float %308)
%310 = load float, float* %13
%311 = load float, float* %18
%312 = call float @llvm.fmuladd.f32(float %310, float %311, float %309)
%313 = load float*, float** %8
%314 = getelementptr inbounds float, float* %313, i64 0
store float %312, float* %314
%315 = load float, float* %11
%316 = load float, float* %17
%317 = load float, float* %12
%318 = load float, float* %15
%319 = fmul float %317, %318
%320 = call float @llvm.fmuladd.f32(float %315, float %316, float %319)
%321 = load float, float* %13
%322 = load float, float* %19
%323 = call float @llvm.fmuladd.f32(float %321, float %322, float %320)
%324 = load float*, float** %8
%325 = getelementptr inbounds float, float* %324, i64 1
store float %323, float* %325
%326 = load float, float* %11
%327 = load float, float* %18
%328 = load float, float* %12
%329 = load float, float* %19
%330 = fmul float %328, %329
%331 = call float @llvm.fmuladd.f32(float %326, float %327, float %330)
%332 = load float, float* %13
%333 = load float, float* %16
%334 = call float @llvm.fmuladd.f32(float %332, float %333, float %331)
%335 = load float*, float** %8
%336 = getelementptr inbounds float, float* %335, i64 2
store float %334, float* %336
ret void
}

LLVM IR (-O2):
define void @compute_color_line_STDEV(i8* nocapture %0, i32 %1, float* nocapture writeonly %2, float* nocapture %3) {
%5 = icmp sgt i32 %1, 0
br i1 %5, label %6, label %58
6: ; preds = %4
%7 = shl nsw i32 %1, 4
%8 = zext i32 %1 to i64
%9 = sext i32 %7 to i64
br label %10
10: ; preds = %6, %10
%11 = phi i64 [ 0, %6 ], [ %53, %10 ]
%12 = phi float [ 0.000000e+00, %6 ], [ %52, %10 ]
%13 = phi float [ 0.000000e+00, %6 ], [ %49, %10 ]
%14 = phi float [ 0.000000e+00, %6 ], [ %46, %10 ]
%15 = phi float [ 0.000000e+00, %6 ], [ %43, %10 ]
%16 = phi float [ 0.000000e+00, %6 ], [ %36, %10 ]
%17 = phi float [ 0.000000e+00, %6 ], [ %27, %10 ]
%18 = phi float [ 0.000000e+00, %6 ], [ %24, %10 ]
%19 = phi <2 x float> [ zeroinitializer, %6 ], [ %40, %10 ]
%20 = getelementptr inbounds i8, i8* %0, i64 %11
%21 = load i8, i8* %20
%22 = zext i8 %21 to i32
%23 = uitofp i8 %21 to float
%24 = fadd float %18, %23
%25 = mul nuw nsw i32 %22, %22
%26 = sitofp i32 %25 to float
%27 = fadd float %17, %26
%28 = add nuw nsw i64 %11, 1
%29 = getelementptr inbounds i8, i8* %0, i64 %28
%30 = bitcast i8* %29 to <2 x i8>*
%31 = load <2 x i8>, <2 x i8>* %30
%32 = extractelement <2 x i8> %31, i64 0
%33 = zext i8 %32 to i32
%34 = mul nuw nsw i32 %33, %33
%35 = sitofp i32 %34 to float
%36 = fadd float %16, %35
%37 = extractelement <2 x i8> %31, i64 1
%38 = zext i8 %37 to i32
%39 = uitofp <2 x i8> %31 to <2 x float>
%40 = fadd <2 x float> %19, %39
%41 = mul nuw nsw i32 %38, %38
%42 = sitofp i32 %41 to float
%43 = fadd float %15, %42
%44 = mul nuw nsw i32 %33, %22
%45 = sitofp i32 %44 to float
%46 = fadd float %14, %45
%47 = mul nuw nsw i32 %38, %22
%48 = sitofp i32 %47 to float
%49 = fadd float %13, %48
%50 = mul nuw nsw i32 %38, %33
%51 = sitofp i32 %50 to float
%52 = fadd float %12, %51
%53 = add nuw nsw i64 %11, %8
%54 = icmp slt i64 %53, %9
br i1 %54, label %10, label %55
55: ; preds = %10
%56 = fmul float %24, 6.250000e-02
%57 = fmul <2 x float> %40, <float 6.250000e-02, float 6.250000e-02>
br label %58
58: ; preds = %55, %4
%59 = phi float [ 0.000000e+00, %4 ], [ %56, %55 ]
%60 = phi float [ 0.000000e+00, %4 ], [ %27, %55 ]
%61 = phi float [ 0.000000e+00, %4 ], [ %36, %55 ]
%62 = phi float [ 0.000000e+00, %4 ], [ %43, %55 ]
%63 = phi float [ 0.000000e+00, %4 ], [ %46, %55 ]
%64 = phi float [ 0.000000e+00, %4 ], [ %49, %55 ]
%65 = phi float [ 0.000000e+00, %4 ], [ %52, %55 ]
%66 = phi <2 x float> [ zeroinitializer, %4 ], [ %57, %55 ]
%67 = fmul float %59, -1.600000e+01
%68 = tail call float @llvm.fmuladd.f32(float %67, float %59, float %60)
%69 = extractelement <2 x float> %66, i64 0
%70 = fmul float %69, -1.600000e+01
%71 = tail call float @llvm.fmuladd.f32(float %70, float %69, float %61)
%72 = extractelement <2 x float> %66, i64 1
%73 = fmul float %72, -1.600000e+01
%74 = tail call float @llvm.fmuladd.f32(float %73, float %72, float %62)
%75 = tail call float @llvm.fmuladd.f32(float %67, float %69, float %63)
%76 = tail call float @llvm.fmuladd.f32(float %67, float %72, float %64)
%77 = tail call float @llvm.fmuladd.f32(float %70, float %72, float %65)
store float %59, float* %2
%78 = getelementptr inbounds float, float* %2, i64 1
store float %69, float* %78
%79 = getelementptr inbounds float, float* %2, i64 2
store float %72, float* %79
%80 = fmul float %75, 0x4005BF0A80000000
%81 = fadd float %68, %80
%82 = tail call float @llvm.fmuladd.f32(float %76, float 0x400921FB60000000, float %81)
%83 = fmul float %71, 0x4005BF0A80000000
%84 = fadd float %83, %75
%85 = tail call float @llvm.fmuladd.f32(float %77, float 0x400921FB60000000, float %84)
%86 = getelementptr inbounds float, float* %3, i64 1
%87 = fmul float %77, 0x4005BF0A80000000
%88 = fadd float %76, %87
%89 = tail call float @llvm.fmuladd.f32(float %74, float 0x400921FB60000000, float %88)
%90 = getelementptr inbounds float, float* %3, i64 2
%91 = fmul float %75, %85
%92 = tail call float @llvm.fmuladd.f32(float %82, float %68, float %91)
%93 = tail call float @llvm.fmuladd.f32(float %89, float %76, float %92)
%94 = fmul float %71, %85
%95 = tail call float @llvm.fmuladd.f32(float %82, float %75, float %94)
%96 = tail call float @llvm.fmuladd.f32(float %89, float %77, float %95)
%97 = fmul float %77, %85
%98 = tail call float @llvm.fmuladd.f32(float %82, float %76, float %97)
%99 = tail call float @llvm.fmuladd.f32(float %89, float %74, float %98)
%100 = fmul float %75, %96
%101 = tail call float @llvm.fmuladd.f32(float %93, float %68, float %100)
%102 = tail call float @llvm.fmuladd.f32(float %99, float %76, float %101)
store float %102, float* %3
%103 = fmul float %71, %96
%104 = tail call float @llvm.fmuladd.f32(float %93, float %75, float %103)
%105 = tail call float @llvm.fmuladd.f32(float %99, float %77, float %104)
store float %105, float* %86
%106 = fmul float %77, %96
%107 = tail call float @llvm.fmuladd.f32(float %93, float %76, float %106)
%108 = tail call float @llvm.fmuladd.f32(float %99, float %74, float %107)
store float %108, float* %90
ret void
}