void meandispersion_MME(double **x, int n, int p, double *mu, double *ltsigma) {
  int i, j, l, n_par = p * (p + 1) / 2, tmp_int[p];
  double tmp_double;
  for (i = 0; i < p; i++)
    mu[i] = 0.;
  for (i = 0; i < n; i++) {
    for (j = 0; j < p; j++)
      mu[j] += x[i][j];
  }
  for (j = 0; j < p; j++)
    mu[j] /= n;
  for (i = 0; i < n_par; i++)
    ltsigma[i] = 0.0;
  for (j = 0; j < p; j++)
    tmp_int[j] = j * (j + 1) / 2;
  for (i = 0; i < n; i++) {
    for (j = 0; j < p; j++) {
      for (l = 0; l <= j; l++)
        ltsigma[tmp_int[j] + l] += (x[i][j] - mu[j]) * (x[i][l] - mu[l]);
    }
  }
  if (n > 1) {
    tmp_double = (double)(n - p);
    for (j = 0; j < n_par; j++)
      ltsigma[j] /= tmp_double;
  }
}


x86 assembly (clang, -O0):
<meandispersion_MME>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    -0x10(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    %eax,%ecx
shr    $0x1f,%ecx
add    %ecx,%eax
sar    %eax
mov    %eax,-0x30(%rbp)
mov    -0x10(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0x38(%rbp)
lea    0xf(,%rax,4),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x50(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x40(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1189 <meandispersion_MME+0x89>
mov    -0x18(%rbp),%rax
movslq -0x24(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    115f <meandispersion_MME+0x5f>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11f7 <meandispersion_MME+0xf7>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    11e4 <meandispersion_MME+0xe4>
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11a3 <meandispersion_MME+0xa3>
jmp    11e9 <meandispersion_MME+0xe9>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1190 <meandispersion_MME+0x90>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    1233 <meandispersion_MME+0x133>
cvtsi2sdl -0xc(%rbp),%xmm1
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11fe <meandispersion_MME+0xfe>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1264 <meandispersion_MME+0x164>
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    123a <meandispersion_MME+0x13a>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    12a6 <meandispersion_MME+0x1a6>
mov    -0x28(%rbp),%eax
mov    -0x28(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%edx
mov    -0x50(%rbp),%rax
movslq -0x28(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    126b <meandispersion_MME+0x16b>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    137e <meandispersion_MME+0x27e>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x10(%rbp),%eax
jge    136b <meandispersion_MME+0x26b>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x28(%rbp),%eax
jg     1358 <meandispersion_MME+0x258>
mov    -0x50(%rbp),%rcx
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
movslq -0x28(%rbp),%rdx
movsd  (%rax,%rdx,8),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x28(%rbp),%rdx
subsd  (%rax,%rdx,8),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x24(%rbp),%rdx
mov    (%rax,%rdx,8),%rax
movslq -0x2c(%rbp),%rdx
movsd  (%rax,%rdx,8),%xmm2
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rdx
subsd  (%rax,%rdx,8),%xmm2
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rdx
mov    (%rcx,%rdx,4),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    12d3 <meandispersion_MME+0x1d3>
jmp    135d <meandispersion_MME+0x25d>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    12c0 <meandispersion_MME+0x1c0>
jmp    1370 <meandispersion_MME+0x270>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12ad <meandispersion_MME+0x1ad>
cmpl   $0x1,-0xc(%rbp)
jle    13d8 <meandispersion_MME+0x2d8>
mov    -0xc(%rbp),%eax
sub    -0x10(%rbp),%eax
cvtsi2sd %eax,%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    13d3 <meandispersion_MME+0x2d3>
movsd  -0x48(%rbp),%xmm1
mov    -0x20(%rbp),%rax
movslq -0x28(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    139e <meandispersion_MME+0x29e>
jmp    13d8 <meandispersion_MME+0x2d8>
mov    -0x38(%rbp),%rax
mov    %rax,%rsp
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<meandispersion_MME>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %r8,%r14
mov    %rcx,%rbx
mov    %esi,%r15d
mov    %rdi,-0x70(%rbp)
lea    0x1(%rdx),%eax
imul   %edx,%eax
mov    %eax,-0x2c(%rbp)
mov    %edx,%r12d
mov    %rsp,%rcx
lea    0xf(,%r12,4),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%rcx
mov    %rcx,-0x40(%rbp)
mov    %rcx,%rsp
mov    %rdx,-0x38(%rbp)
test   %edx,%edx
jle    116d <meandispersion_MME+0x5d>
lea    0x0(,%r12,8),%rdx
mov    %rbx,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
mov    -0x2c(%rbp),%eax
shr    $0x1f,%eax
mov    %rax,-0x50(%rbp)
mov    %r15d,%eax
mov    %rax,-0x78(%rbp)
mov    %r15d,-0x44(%rbp)
test   %r15d,%r15d
jle    1349 <meandispersion_MME+0x239>
lea    (%rbx,%r12,8),%r10
mov    %r12d,%r15d
and    $0xfffffffc,%r15d
lea    -0x4(%r15),%r9
mov    %r9,%r11
shr    $0x2,%r11
add    $0x1,%r11
mov    %r11,%r8
and    $0xfffffffffffffffe,%r8
mov    %r12d,%r13d
and    $0x3,%r13d
xor    %edx,%edx
jmp    11ce <meandispersion_MME+0xbe>
nopw   0x0(%rax,%rax,1)
add    $0x1,%rdx
cmp    -0x78(%rbp),%rdx
je     1349 <meandispersion_MME+0x239>
cmpl   $0x0,-0x38(%rbp)
jle    11c0 <meandispersion_MME+0xb0>
mov    -0x70(%rbp),%rax
mov    (%rax,%rdx,8),%rax
cmpl   $0x4,-0x38(%rbp)
jb     11f8 <meandispersion_MME+0xe8>
lea    (%rax,%r12,8),%rcx
cmp    %rbx,%rcx
jbe    1283 <meandispersion_MME+0x173>
cmp    %r10,%rax
jae    1283 <meandispersion_MME+0x173>
xor    %ecx,%ecx
mov    %rcx,%rsi
not    %rsi
add    %r12,%rsi
test   %r13,%r13
je     1229 <meandispersion_MME+0x119>
mov    %r13,%rdi
nopl   0x0(%rax,%rax,1)
movsd  (%rax,%rcx,8),%xmm0
addsd  (%rbx,%rcx,8),%xmm0
movsd  %xmm0,(%rbx,%rcx,8)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rdi
jne    1210 <meandispersion_MME+0x100>
cmp    $0x3,%rsi
jb     11c0 <meandispersion_MME+0xb0>
nop
movsd  (%rax,%rcx,8),%xmm0
addsd  (%rbx,%rcx,8),%xmm0
movsd  %xmm0,(%rbx,%rcx,8)
movsd  0x8(%rax,%rcx,8),%xmm0
addsd  0x8(%rbx,%rcx,8),%xmm0
movsd  %xmm0,0x8(%rbx,%rcx,8)
movsd  0x10(%rax,%rcx,8),%xmm0
addsd  0x10(%rbx,%rcx,8),%xmm0
movsd  %xmm0,0x10(%rbx,%rcx,8)
movsd  0x18(%rax,%rcx,8),%xmm0
addsd  0x18(%rbx,%rcx,8),%xmm0
movsd  %xmm0,0x18(%rbx,%rcx,8)
add    $0x4,%rcx
cmp    %rcx,%r12
jne    1230 <meandispersion_MME+0x120>
jmp    11c0 <meandispersion_MME+0xb0>
test   %r9,%r9
je     133f <meandispersion_MME+0x22f>
mov    %r8,%rsi
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movupd (%rax,%rcx,8),%xmm0
movupd 0x10(%rax,%rcx,8),%xmm1
movupd (%rbx,%rcx,8),%xmm2
addpd  %xmm0,%xmm2
movupd 0x10(%rbx,%rcx,8),%xmm0
addpd  %xmm1,%xmm0
movupd 0x20(%rbx,%rcx,8),%xmm1
movupd 0x30(%rbx,%rcx,8),%xmm3
movupd %xmm2,(%rbx,%rcx,8)
movupd %xmm0,0x10(%rbx,%rcx,8)
movupd 0x20(%rax,%rcx,8),%xmm0
addpd  %xmm1,%xmm0
movupd 0x30(%rax,%rcx,8),%xmm1
addpd  %xmm3,%xmm1
movupd %xmm0,0x20(%rbx,%rcx,8)
movupd %xmm1,0x30(%rbx,%rcx,8)
add    $0x8,%rcx
add    $0xfffffffffffffffe,%rsi
jne    12a0 <meandispersion_MME+0x190>
test   $0x1,%r11b
je     132e <meandispersion_MME+0x21e>
movupd (%rax,%rcx,8),%xmm0
movupd 0x10(%rax,%rcx,8),%xmm1
movupd (%rbx,%rcx,8),%xmm2
addpd  %xmm0,%xmm2
movupd 0x10(%rbx,%rcx,8),%xmm0
addpd  %xmm1,%xmm0
movupd %xmm2,(%rbx,%rcx,8)
movupd %xmm0,0x10(%rbx,%rcx,8)
mov    %r15,%rcx
cmp    %r12,%r15
je     11c0 <meandispersion_MME+0xb0>
jmp    11fa <meandispersion_MME+0xea>
xor    %ecx,%ecx
test   $0x1,%r11b
jne    1305 <meandispersion_MME+0x1f5>
jmp    132e <meandispersion_MME+0x21e>
mov    -0x50(%rbp),%rdi
add    -0x2c(%rbp),%edi
cmpl   $0x0,-0x38(%rbp)
mov    -0x44(%rbp),%r15d
jle    13f7 <meandispersion_MME+0x2e7>
xorps  %xmm0,%xmm0
cvtsi2sd %r15d,%xmm0
cmpl   $0x1,-0x38(%rbp)
jne    1370 <meandispersion_MME+0x260>
xor    %eax,%eax
jmp    13e0 <meandispersion_MME+0x2d0>
mov    %r12d,%eax
and    $0xfffffffe,%eax
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x2(%rax),%rdx
mov    %rdx,%rcx
shr    %rcx
add    $0x1,%rcx
test   %rdx,%rdx
je     17f8 <meandispersion_MME+0x6e8>
mov    %rcx,%rsi
and    $0xfffffffffffffffe,%rsi
xor    %edx,%edx
xchg   %ax,%ax
movupd (%rbx,%rdx,8),%xmm2
movupd 0x10(%rbx,%rdx,8),%xmm3
divpd  %xmm1,%xmm2
movupd %xmm2,(%rbx,%rdx,8)
divpd  %xmm1,%xmm3
movupd %xmm3,0x10(%rbx,%rdx,8)
add    $0x4,%rdx
add    $0xfffffffffffffffe,%rsi
jne    13a0 <meandispersion_MME+0x290>
test   $0x1,%cl
je     13db <meandispersion_MME+0x2cb>
movupd (%rbx,%rdx,8),%xmm2
divpd  %xmm1,%xmm2
movupd %xmm2,(%rbx,%rdx,8)
cmp    %r12,%rax
je     13f7 <meandispersion_MME+0x2e7>
movsd  (%rbx,%rax,8),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,(%rbx,%rax,8)
add    $0x1,%rax
cmp    %rax,%r12
jne    13e0 <meandispersion_MME+0x2d0>
sar    %edi
mov    %rdi,-0x50(%rbp)
cmpl   $0x2,-0x2c(%rbp)
mov    -0x40(%rbp),%r9
jl     1424 <meandispersion_MME+0x314>
mov    -0x50(%rbp),%rax
add    $0xffffffff,%eax
lea    0x8(,%rax,8),%rdx
mov    %r14,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
mov    -0x40(%rbp),%r9
cmpl   $0x0,-0x38(%rbp)
jle    1547 <meandispersion_MME+0x437>
cmpl   $0x8,-0x38(%rbp)
jae    143b <meandispersion_MME+0x32b>
xor    %eax,%eax
jmp    1530 <meandispersion_MME+0x420>
mov    %r12d,%eax
and    $0xfffffff8,%eax
lea    0x0(,%r12,4),%rcx
and    $0xffffffffffffffe0,%rcx
movaps 0xbac(%rip),%xmm0
movaps 0xbb5(%rip),%xmm4
movdqa 0xbbd(%rip),%xmm3
xor    %edx,%edx
movdqa 0xbc2(%rip),%xmm8
pcmpeqd %xmm9,%xmm9
movdqa 0xbc4(%rip),%xmm10
movdqa 0xbcb(%rip),%xmm12
movdqa 0xbd2(%rip),%xmm11
xchg   %ax,%ax
movdqa %xmm3,%xmm2
paddd  %xmm8,%xmm2
movaps %xmm4,%xmm1
shufps $0x88,%xmm0,%xmm1
movaps %xmm1,%xmm5
psubd  %xmm9,%xmm5
paddd  %xmm10,%xmm1
pshufd $0xf5,%xmm5,%xmm7
pmuludq %xmm3,%xmm5
pshufd $0xe8,%xmm5,%xmm5
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm7,%xmm6
pshufd $0xe8,%xmm6,%xmm6
punpckldq %xmm6,%xmm5
pshufd $0xf5,%xmm1,%xmm6
pmuludq %xmm2,%xmm1
pshufd $0xe8,%xmm1,%xmm1
pshufd $0xf5,%xmm2,%xmm2
pmuludq %xmm6,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm1
psrld  $0x1,%xmm5
psrld  $0x1,%xmm1
movdqa %xmm5,(%r9,%rdx,1)
movdqa %xmm1,0x10(%r9,%rdx,1)
paddq  %xmm12,%xmm4
paddq  %xmm12,%xmm0
paddd  %xmm11,%xmm3
add    $0x20,%rdx
cmp    %rdx,%rcx
jne    1490 <meandispersion_MME+0x380>
cmp    %r12,%rax
je     1547 <meandispersion_MME+0x437>
cs nopw 0x0(%rax,%rax,1)
nop
lea    0x1(%rax),%rcx
mov    %ecx,%edx
imul   %eax,%edx
shr    %edx
mov    %edx,(%r9,%rax,4)
mov    %rcx,%rax
cmp    %rcx,%r12
jne    1530 <meandispersion_MME+0x420>
test   %r15d,%r15d
jle    18a9 <meandispersion_MME+0x799>
lea    0x10(%r14),%rax
mov    %rax,-0x80(%rbp)
lea    0x8(%r14),%rax
mov    %rax,-0x88(%rbp)
xor    %eax,%eax
mov    %rax,-0x68(%rbp)
mov    %r14,-0x60(%rbp)
mov    %r12,-0x58(%rbp)
jmp    1599 <meandispersion_MME+0x489>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    -0x68(%rbp),%rcx
add    $0x1,%rcx
mov    %rcx,%rax
mov    %rcx,-0x68(%rbp)
cmp    -0x78(%rbp),%rcx
je     17c6 <meandispersion_MME+0x6b6>
cmpl   $0x0,-0x38(%rbp)
jle    1580 <meandispersion_MME+0x470>
mov    -0x70(%rbp),%rax
mov    -0x68(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
mov    $0x1,%edi
xor    %r15d,%r15d
jmp    15c9 <meandispersion_MME+0x4b9>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%rdi
cmp    %r12,%r15
je     1580 <meandispersion_MME+0x470>
mov    %r15,%rax
add    $0x1,%r15
movslq (%r9,%rax,4),%r11
cmp    $0x3,%rax
jae    15f0 <meandispersion_MME+0x4e0>
xor    %r10d,%r10d
jmp    1720 <meandispersion_MME+0x610>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
lea    (%rsi,%rax,8),%r13
add    $0x8,%r13
lea    0x8(%rbx,%rax,8),%r8
lea    (%rsi,%rax,8),%r9
lea    (%r14,%r15,8),%rcx
lea    (%r14,%r11,8),%rdx
lea    (%rcx,%r11,8),%r10
cmp    %r13,%rdx
setb   %cl
cmp    %r10,%rsi
setb   %r14b
cmp    %r10,%r9
setb   %r9b
cmp    %r8,%rdx
setb   %r12b
cmp    %rbx,%r10
seta   %r13b
lea    (%rbx,%rax,8),%rdx
cmp    %r10,%rdx
setb   %r8b
test   %r14b,%cl
jne    1700 <meandispersion_MME+0x5f0>
and    %r9b,%cl
jne    1700 <meandispersion_MME+0x5f0>
and    %r12b,%r13b
mov    -0x40(%rbp),%r9
jne    1711 <meandispersion_MME+0x601>
mov    $0x0,%r10d
and    %r8b,%r12b
mov    -0x60(%rbp),%r14
mov    -0x58(%rbp),%r12
jne    1720 <meandispersion_MME+0x610>
mov    %rdi,%rdx
and    $0xfffffffffffffffc,%rdx
mov    %r15,%r10
movsd  (%rsi,%rax,8),%xmm0
subsd  (%rbx,%rax,8),%xmm0
and    $0xfffffffffffffffc,%r10
unpcklpd %xmm0,%xmm0
mov    -0x80(%rbp),%rcx
lea    (%rcx,%r11,8),%r8
xor    %r13d,%r13d
nopw   0x0(%rax,%rax,1)
movupd (%rsi,%r13,8),%xmm1
movupd 0x10(%rsi,%r13,8),%xmm2
movupd (%rbx,%r13,8),%xmm3
subpd  %xmm3,%xmm1
movupd 0x10(%rbx,%r13,8),%xmm3
subpd  %xmm3,%xmm2
movupd -0x10(%r8,%r13,8),%xmm3
movupd (%r8,%r13,8),%xmm4
mulpd  %xmm0,%xmm1
addpd  %xmm3,%xmm1
mulpd  %xmm0,%xmm2
addpd  %xmm4,%xmm2
movupd %xmm1,-0x10(%r8,%r13,8)
movupd %xmm2,(%r8,%r13,8)
add    $0x4,%r13
cmp    %r13,%rdx
jne    16a0 <meandispersion_MME+0x590>
cmp    %r10,%r15
je     15c0 <meandispersion_MME+0x4b0>
jmp    1720 <meandispersion_MME+0x610>
xor    %r10d,%r10d
mov    -0x60(%rbp),%r14
mov    -0x58(%rbp),%r12
mov    -0x40(%rbp),%r9
jmp    1720 <meandispersion_MME+0x610>
xor    %r10d,%r10d
mov    -0x60(%rbp),%r14
mov    -0x58(%rbp),%r12
nopl   0x0(%rax)
mov    %r10,%rdx
test   $0x1,%dil
je     175a <meandispersion_MME+0x64a>
movsd  (%rsi,%rax,8),%xmm0
subsd  (%rbx,%rax,8),%xmm0
movsd  (%rsi,%r10,8),%xmm1
subsd  (%rbx,%r10,8),%xmm1
mulsd  %xmm0,%xmm1
lea    (%r10,%r11,1),%rdx
addsd  (%r14,%rdx,8),%xmm1
movsd  %xmm1,(%r14,%rdx,8)
mov    %r10,%rdx
or     $0x1,%rdx
cmp    %r10,%rax
je     15c0 <meandispersion_MME+0x4b0>
mov    -0x88(%rbp),%rcx
lea    (%rcx,%r11,8),%rcx
xchg   %ax,%ax
movsd  (%rsi,%rax,8),%xmm0
subsd  (%rbx,%rax,8),%xmm0
movsd  (%rsi,%rdx,8),%xmm1
subsd  (%rbx,%rdx,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  -0x8(%rcx,%rdx,8),%xmm1
movsd  %xmm1,-0x8(%rcx,%rdx,8)
movsd  (%rsi,%rax,8),%xmm0
subsd  (%rbx,%rax,8),%xmm0
movsd  0x8(%rsi,%rdx,8),%xmm1
subsd  0x8(%rbx,%rdx,8),%xmm1
mulsd  %xmm0,%xmm1
addsd  (%rcx,%rdx,8),%xmm1
movsd  %xmm1,(%rcx,%rdx,8)
add    $0x2,%rdx
cmp    %rdx,%rdi
jne    1770 <meandispersion_MME+0x660>
jmp    15c0 <meandispersion_MME+0x4b0>
mov    -0x44(%rbp),%eax
cmp    $0x2,%eax
jl     18a9 <meandispersion_MME+0x799>
cmpl   $0x2,-0x2c(%rbp)
jl     18a9 <meandispersion_MME+0x799>
sub    -0x38(%rbp),%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
mov    -0x50(%rbp),%rcx
mov    %ecx,%eax
cmp    $0x2,%ecx
jae    1808 <meandispersion_MME+0x6f8>
xor    %ecx,%ecx
jmp    1890 <meandispersion_MME+0x780>
xor    %edx,%edx
test   $0x1,%cl
jne    13cd <meandispersion_MME+0x2bd>
jmp    13db <meandispersion_MME+0x2cb>
mov    %eax,%ecx
and    $0xfffffffe,%ecx
movapd %xmm0,%xmm1
unpcklpd %xmm0,%xmm1
lea    -0x2(%rcx),%rsi
mov    %rsi,%rdx
shr    %rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     18b8 <meandispersion_MME+0x7a8>
mov    %rdx,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nop
movupd (%r14,%rsi,8),%xmm2
movupd 0x10(%r14,%rsi,8),%xmm3
divpd  %xmm1,%xmm2
movupd %xmm2,(%r14,%rsi,8)
divpd  %xmm1,%xmm3
movupd %xmm3,0x10(%r14,%rsi,8)
add    $0x4,%rsi
add    $0xfffffffffffffffe,%rdi
jne    1840 <meandispersion_MME+0x730>
test   $0x1,%dl
je     1881 <meandispersion_MME+0x771>
movupd (%r14,%rsi,8),%xmm2
divpd  %xmm1,%xmm2
movupd %xmm2,(%r14,%rsi,8)
cmp    %rax,%rcx
je     18a9 <meandispersion_MME+0x799>
cs nopw 0x0(%rax,%rax,1)
movsd  (%r14,%rcx,8),%xmm1
divsd  %xmm0,%xmm1
movsd  %xmm1,(%r14,%rcx,8)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1890 <meandispersion_MME+0x780>
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
xor    %esi,%esi
test   $0x1,%dl
jne    1871 <meandispersion_MME+0x761>
jmp    1881 <meandispersion_MME+0x771>

LLVM IR (-O0):
define void @meandispersion_MME(double** %0, i32 %1, i32 %2, double* %3, double* %4) {
%6 = alloca double**
%7 = alloca i32
%8 = alloca i32
%9 = alloca double*
%10 = alloca double*
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i8*
%16 = alloca i64
%17 = alloca double
store double** %0, double*** %6
store i32 %1, i32* %7
store i32 %2, i32* %8
store double* %3, double** %9
store double* %4, double** %10
%18 = load i32, i32* %8
%19 = load i32, i32* %8
%20 = add nsw i32 %19, 1
%21 = mul nsw i32 %18, %20
%22 = sdiv i32 %21, 2
store i32 %22, i32* %14
%23 = load i32, i32* %8
%24 = zext i32 %23 to i64
%25 = call i8* @llvm.stacksave()
store i8* %25, i8** %15
%26 = alloca i32, i64 %24
store i64 %24, i64* %16
store i32 0, i32* %11
br label %27
27: ; preds = %36, %5
%28 = load i32, i32* %11
%29 = load i32, i32* %8
%30 = icmp slt i32 %28, %29
br i1 %30, label %31, label %39
31: ; preds = %27
%32 = load double*, double** %9
%33 = load i32, i32* %11
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds double, double* %32, i64 %34
store double 0.000000e+00, double* %35
br label %36
36: ; preds = %31
%37 = load i32, i32* %11
%38 = add nsw i32 %37, 1
store i32 %38, i32* %11
br label %27
39: ; preds = %27
store i32 0, i32* %11
br label %40
40: ; preds = %69, %39
%41 = load i32, i32* %11
%42 = load i32, i32* %7
%43 = icmp slt i32 %41, %42
br i1 %43, label %44, label %72
44: ; preds = %40
store i32 0, i32* %12
br label %45
45: ; preds = %65, %44
%46 = load i32, i32* %12
%47 = load i32, i32* %8
%48 = icmp slt i32 %46, %47
br i1 %48, label %49, label %68
49: ; preds = %45
%50 = load double**, double*** %6
%51 = load i32, i32* %11
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds double*, double** %50, i64 %52
%54 = load double*, double** %53
%55 = load i32, i32* %12
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds double, double* %54, i64 %56
%58 = load double, double* %57
%59 = load double*, double** %9
%60 = load i32, i32* %12
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds double, double* %59, i64 %61
%63 = load double, double* %62
%64 = fadd double %63, %58
store double %64, double* %62
br label %65
65: ; preds = %49
%66 = load i32, i32* %12
%67 = add nsw i32 %66, 1
store i32 %67, i32* %12
br label %45
68: ; preds = %45
br label %69
69: ; preds = %68
%70 = load i32, i32* %11
%71 = add nsw i32 %70, 1
store i32 %71, i32* %11
br label %40
72: ; preds = %40
store i32 0, i32* %12
br label %73
73: ; preds = %86, %72
%74 = load i32, i32* %12
%75 = load i32, i32* %8
%76 = icmp slt i32 %74, %75
br i1 %76, label %77, label %89
77: ; preds = %73
%78 = load i32, i32* %7
%79 = sitofp i32 %78 to double
%80 = load double*, double** %9
%81 = load i32, i32* %12
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds double, double* %80, i64 %82
%84 = load double, double* %83
%85 = fdiv double %84, %79
store double %85, double* %83
br label %86
86: ; preds = %77
%87 = load i32, i32* %12
%88 = add nsw i32 %87, 1
store i32 %88, i32* %12
br label %73
89: ; preds = %73
store i32 0, i32* %11
br label %90
90: ; preds = %99, %89
%91 = load i32, i32* %11
%92 = load i32, i32* %14
%93 = icmp slt i32 %91, %92
br i1 %93, label %94, label %102
94: ; preds = %90
%95 = load double*, double** %10
%96 = load i32, i32* %11
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds double, double* %95, i64 %97
store double 0.000000e+00, double* %98
br label %99
99: ; preds = %94
%100 = load i32, i32* %11
%101 = add nsw i32 %100, 1
store i32 %101, i32* %11
br label %90
102: ; preds = %90
store i32 0, i32* %12
br label %103
103: ; preds = %116, %102
%104 = load i32, i32* %12
%105 = load i32, i32* %8
%106 = icmp slt i32 %104, %105
br i1 %106, label %107, label %119
107: ; preds = %103
%108 = load i32, i32* %12
%109 = load i32, i32* %12
%110 = add nsw i32 %109, 1
%111 = mul nsw i32 %108, %110
%112 = sdiv i32 %111, 2
%113 = load i32, i32* %12
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds i32, i32* %26, i64 %114
store i32 %112, i32* %115
br label %116
116: ; preds = %107
%117 = load i32, i32* %12
%118 = add nsw i32 %117, 1
store i32 %118, i32* %12
br label %103
119: ; preds = %103
store i32 0, i32* %11
br label %120
120: ; preds = %184, %119
%121 = load i32, i32* %11
%122 = load i32, i32* %7
%123 = icmp slt i32 %121, %122
br i1 %123, label %124, label %187
124: ; preds = %120
store i32 0, i32* %12
br label %125
125: ; preds = %180, %124
%126 = load i32, i32* %12
%127 = load i32, i32* %8
%128 = icmp slt i32 %126, %127
br i1 %128, label %129, label %183
129: ; preds = %125
store i32 0, i32* %13
br label %130
130: ; preds = %176, %129
%131 = load i32, i32* %13
%132 = load i32, i32* %12
%133 = icmp sle i32 %131, %132
br i1 %133, label %134, label %179
134: ; preds = %130
%135 = load double**, double*** %6
%136 = load i32, i32* %11
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds double*, double** %135, i64 %137
%139 = load double*, double** %138
%140 = load i32, i32* %12
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds double, double* %139, i64 %141
%143 = load double, double* %142
%144 = load double*, double** %9
%145 = load i32, i32* %12
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds double, double* %144, i64 %146
%148 = load double, double* %147
%149 = fsub double %143, %148
%150 = load double**, double*** %6
%151 = load i32, i32* %11
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds double*, double** %150, i64 %152
%154 = load double*, double** %153
%155 = load i32, i32* %13
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds double, double* %154, i64 %156
%158 = load double, double* %157
%159 = load double*, double** %9
%160 = load i32, i32* %13
%161 = sext i32 %160 to i64
%162 = getelementptr inbounds double, double* %159, i64 %161
%163 = load double, double* %162
%164 = fsub double %158, %163
%165 = load double*, double** %10
%166 = load i32, i32* %12
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds i32, i32* %26, i64 %167
%169 = load i32, i32* %168
%170 = load i32, i32* %13
%171 = add nsw i32 %169, %170
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds double, double* %165, i64 %172
%174 = load double, double* %173
%175 = call double @llvm.fmuladd.f64(double %149, double %164, double %174)
store double %175, double* %173
br label %176
176: ; preds = %134
%177 = load i32, i32* %13
%178 = add nsw i32 %177, 1
store i32 %178, i32* %13
br label %130
179: ; preds = %130
br label %180
180: ; preds = %179
%181 = load i32, i32* %12
%182 = add nsw i32 %181, 1
store i32 %182, i32* %12
br label %125
183: ; preds = %125
br label %184
184: ; preds = %183
%185 = load i32, i32* %11
%186 = add nsw i32 %185, 1
store i32 %186, i32* %11
br label %120
187: ; preds = %120
%188 = load i32, i32* %7
%189 = icmp sgt i32 %188, 1
br i1 %189, label %190, label %211
190: ; preds = %187
%191 = load i32, i32* %7
%192 = load i32, i32* %8
%193 = sub nsw i32 %191, %192
%194 = sitofp i32 %193 to double
store double %194, double* %17
store i32 0, i32* %12
br label %195
195: ; preds = %207, %190
%196 = load i32, i32* %12
%197 = load i32, i32* %14
%198 = icmp slt i32 %196, %197
br i1 %198, label %199, label %210
199: ; preds = %195
%200 = load double, double* %17
%201 = load double*, double** %10
%202 = load i32, i32* %12
%203 = sext i32 %202 to i64
%204 = getelementptr inbounds double, double* %201, i64 %203
%205 = load double, double* %204
%206 = fdiv double %205, %200
store double %206, double* %204
br label %207
207: ; preds = %199
%208 = load i32, i32* %12
%209 = add nsw i32 %208, 1
store i32 %209, i32* %12
br label %195
210: ; preds = %195
br label %211
211: ; preds = %210, %187
%212 = load i8*, i8** %15
ret void
}

LLVM IR (-O2):
define void @meandispersion_MME(double** nocapture %0, i32 %1, i32 %2, double* nocapture %3, double* nocapture %4) {
%6 = bitcast double* %4 to i8*
%7 = add nsw i32 %2, 1
%8 = mul nsw i32 %7, %2
%9 = sdiv i32 %8, 2
%10 = zext i32 %2 to i64
%11 = alloca i32, i64 %10
%12 = icmp sgt i32 %2, 0
br i1 %12, label %13, label %16
13: ; preds = %5
%14 = bitcast double* %3 to i8*
%15 = shl nuw nsw i64 %10, 3
br label %16
16: ; preds = %13, %5
%17 = icmp sgt i32 %1, 0
br i1 %17, label %18, label %122
18: ; preds = %16
%19 = zext i32 %1 to i64
%20 = getelementptr double, double* %3, i64 %10
%21 = and i64 %10, 4294967292
%22 = add nsw i64 %21, -4
%23 = lshr exact i64 %22, 2
%24 = add nuw nsw i64 %23, 1
%25 = icmp ult i32 %2, 4
%26 = and i64 %10, 4294967292
%27 = and i64 %24, 1
%28 = icmp eq i64 %22, 0
%29 = and i64 %24, 9223372036854775806
%30 = icmp eq i64 %27, 0
%31 = icmp eq i64 %26, %10
%32 = and i64 %10, 3
%33 = icmp eq i64 %32, 0
br label %34
34: ; preds = %18, %194
%35 = phi i64 [ 0, %18 ], [ %195, %194 ]
br i1 %12, label %36, label %194
36: ; preds = %34
%37 = getelementptr inbounds double*, double** %0, i64 %35
%38 = load double*, double** %37
br i1 %25, label %104, label %39
39: ; preds = %36
%40 = getelementptr double, double* %38, i64 %10
%41 = icmp ugt double* %40, %3
%42 = icmp ult double* %38, %20
%43 = and i1 %41, %42
br i1 %43, label %104, label %44
44: ; preds = %39
br i1 %28, label %84, label %45
45: ; preds = %44, %45
%46 = phi i64 [ %81, %45 ], [ 0, %44 ]
%47 = phi i64 [ %82, %45 ], [ 0, %44 ]
%48 = getelementptr inbounds double, double* %38, i64 %46
%49 = bitcast double* %48 to <2 x double>*
%50 = load <2 x double>, <2 x double>* %49
%51 = getelementptr inbounds double, double* %48, i64 2
%52 = bitcast double* %51 to <2 x double>*
%53 = load <2 x double>, <2 x double>* %52
%54 = getelementptr inbounds double, double* %3, i64 %46
%55 = bitcast double* %54 to <2 x double>*
%56 = load <2 x double>, <2 x double>* %55
%57 = getelementptr inbounds double, double* %54, i64 2
%58 = bitcast double* %57 to <2 x double>*
%59 = load <2 x double>, <2 x double>* %58
%60 = fadd <2 x double> %50, %56
%61 = fadd <2 x double> %53, %59
%62 = bitcast double* %54 to <2 x double>*
store <2 x double> %60, <2 x double>* %62
%63 = bitcast double* %57 to <2 x double>*
store <2 x double> %61, <2 x double>* %63
%64 = or i64 %46, 4
%65 = getelementptr inbounds double, double* %38, i64 %64
%66 = bitcast double* %65 to <2 x double>*
%67 = load <2 x double>, <2 x double>* %66
%68 = getelementptr inbounds double, double* %65, i64 2
%69 = bitcast double* %68 to <2 x double>*
%70 = load <2 x double>, <2 x double>* %69
%71 = getelementptr inbounds double, double* %3, i64 %64
%72 = bitcast double* %71 to <2 x double>*
%73 = load <2 x double>, <2 x double>* %72
%74 = getelementptr inbounds double, double* %71, i64 2
%75 = bitcast double* %74 to <2 x double>*
%76 = load <2 x double>, <2 x double>* %75
%77 = fadd <2 x double> %67, %73
%78 = fadd <2 x double> %70, %76
%79 = bitcast double* %71 to <2 x double>*
store <2 x double> %77, <2 x double>* %79
%80 = bitcast double* %74 to <2 x double>*
store <2 x double> %78, <2 x double>* %80
%81 = add nuw i64 %46, 8
%82 = add i64 %47, 2
%83 = icmp eq i64 %82, %29
br i1 %83, label %84, label %45
84: ; preds = %45, %44
%85 = phi i64 [ 0, %44 ], [ %81, %45 ]
br i1 %30, label %103, label %86
86: ; preds = %84
%87 = getelementptr inbounds double, double* %38, i64 %85
%88 = bitcast double* %87 to <2 x double>*
%89 = load <2 x double>, <2 x double>* %88
%90 = getelementptr inbounds double, double* %87, i64 2
%91 = bitcast double* %90 to <2 x double>*
%92 = load <2 x double>, <2 x double>* %91
%93 = getelementptr inbounds double, double* %3, i64 %85
%94 = bitcast double* %93 to <2 x double>*
%95 = load <2 x double>, <2 x double>* %94
%96 = getelementptr inbounds double, double* %93, i64 2
%97 = bitcast double* %96 to <2 x double>*
%98 = load <2 x double>, <2 x double>* %97
%99 = fadd <2 x double> %89, %95
%100 = fadd <2 x double> %92, %98
%101 = bitcast double* %93 to <2 x double>*
store <2 x double> %99, <2 x double>* %101
%102 = bitcast double* %96 to <2 x double>*
store <2 x double> %100, <2 x double>* %102
br label %103
103: ; preds = %84, %86
br i1 %31, label %194, label %104
104: ; preds = %39, %36, %103
%105 = phi i64 [ 0, %39 ], [ 0, %36 ], [ %26, %103 ]
%106 = xor i64 %105, -1
%107 = add nsw i64 %106, %10
br i1 %33, label %119, label %108
108: ; preds = %104, %108
%109 = phi i64 [ %116, %108 ], [ %105, %104 ]
%110 = phi i64 [ %117, %108 ], [ 0, %104 ]
%111 = getelementptr inbounds double, double* %38, i64 %109
%112 = load double, double* %111
%113 = getelementptr inbounds double, double* %3, i64 %109
%114 = load double, double* %113
%115 = fadd double %112, %114
store double %115, double* %113
%116 = add nuw nsw i64 %109, 1
%117 = add i64 %110, 1
%118 = icmp eq i64 %117, %32
br i1 %118, label %119, label %108
119: ; preds = %108, %104
%120 = phi i64 [ %105, %104 ], [ %116, %108 ]
%121 = icmp ult i64 %107, 3
br i1 %121, label %194, label %167
122: ; preds = %194, %16
br i1 %12, label %123, label %197
123: ; preds = %122
%124 = sitofp i32 %1 to double
%125 = icmp eq i32 %2, 1
br i1 %125, label %165, label %126
126: ; preds = %123
%127 = and i64 %10, 4294967294
%128 = insertelement <2 x double> poison, double %124, i64 0
%129 = shufflevector <2 x double> %128, <2 x double> poison, <2 x i32> zeroinitializer
%130 = add nsw i64 %127, -2
%131 = lshr exact i64 %130, 1
%132 = add nuw i64 %131, 1
%133 = and i64 %132, 1
%134 = icmp eq i64 %130, 0
br i1 %134, label %154, label %135
135: ; preds = %126
%136 = and i64 %132, -2
br label %137
137: ; preds = %137, %135
%138 = phi i64 [ 0, %135 ], [ %151, %137 ]
%139 = phi i64 [ 0, %135 ], [ %152, %137 ]
%140 = getelementptr inbounds double, double* %3, i64 %138
%141 = bitcast double* %140 to <2 x double>*
%142 = load <2 x double>, <2 x double>* %141
%143 = fdiv <2 x double> %142, %129
%144 = bitcast double* %140 to <2 x double>*
store <2 x double> %143, <2 x double>* %144
%145 = or i64 %138, 2
%146 = getelementptr inbounds double, double* %3, i64 %145
%147 = bitcast double* %146 to <2 x double>*
%148 = load <2 x double>, <2 x double>* %147
%149 = fdiv <2 x double> %148, %129
%150 = bitcast double* %146 to <2 x double>*
store <2 x double> %149, <2 x double>* %150
%151 = add nuw i64 %138, 4
%152 = add nuw i64 %139, 2
%153 = icmp eq i64 %152, %136
br i1 %153, label %154, label %137
154: ; preds = %137, %126
%155 = phi i64 [ 0, %126 ], [ %151, %137 ]
%156 = icmp eq i64 %133, 0
br i1 %156, label %163, label %157
157: ; preds = %154
%158 = getelementptr inbounds double, double* %3, i64 %155
%159 = bitcast double* %158 to <2 x double>*
%160 = load <2 x double>, <2 x double>* %159
%161 = fdiv <2 x double> %160, %129
%162 = bitcast double* %158 to <2 x double>*
store <2 x double> %161, <2 x double>* %162
br label %163
163: ; preds = %154, %157
%164 = icmp eq i64 %127, %10
br i1 %164, label %197, label %165
165: ; preds = %123, %163
%166 = phi i64 [ 0, %123 ], [ %127, %163 ]
br label %204
167: ; preds = %119, %167
%168 = phi i64 [ %192, %167 ], [ %120, %119 ]
%169 = getelementptr inbounds double, double* %38, i64 %168
%170 = load double, double* %169
%171 = getelementptr inbounds double, double* %3, i64 %168
%172 = load double, double* %171
%173 = fadd double %170, %172
store double %173, double* %171
%174 = add nuw nsw i64 %168, 1
%175 = getelementptr inbounds double, double* %38, i64 %174
%176 = load double, double* %175
%177 = getelementptr inbounds double, double* %3, i64 %174
%178 = load double, double* %177
%179 = fadd double %176, %178
store double %179, double* %177
%180 = add nuw nsw i64 %168, 2
%181 = getelementptr inbounds double, double* %38, i64 %180
%182 = load double, double* %181
%183 = getelementptr inbounds double, double* %3, i64 %180
%184 = load double, double* %183
%185 = fadd double %182, %184
store double %185, double* %183
%186 = add nuw nsw i64 %168, 3
%187 = getelementptr inbounds double, double* %38, i64 %186
%188 = load double, double* %187
%189 = getelementptr inbounds double, double* %3, i64 %186
%190 = load double, double* %189
%191 = fadd double %188, %190
store double %191, double* %189
%192 = add nuw nsw i64 %168, 4
%193 = icmp eq i64 %192, %10
br i1 %193, label %194, label %167
194: ; preds = %119, %167, %103, %34
%195 = add nuw nsw i64 %35, 1
%196 = icmp eq i64 %195, %19
br i1 %196, label %122, label %34
197: ; preds = %204, %163, %122
%198 = icmp sgt i32 %8, 1
br i1 %198, label %199, label %211
199: ; preds = %197
%200 = add nsw i32 %9, -1
%201 = zext i32 %200 to i64
%202 = shl nuw nsw i64 %201, 3
%203 = add nuw nsw i64 %202, 8
br label %211
204: ; preds = %165, %204
%205 = phi i64 [ %209, %204 ], [ %166, %165 ]
%206 = getelementptr inbounds double, double* %3, i64 %205
%207 = load double, double* %206
%208 = fdiv double %207, %124
store double %208, double* %206
%209 = add nuw nsw i64 %205, 1
%210 = icmp eq i64 %209, %10
br i1 %210, label %197, label %204
211: ; preds = %199, %197
br i1 %12, label %212, label %241
212: ; preds = %211
%213 = icmp ult i32 %2, 8
br i1 %213, label %239, label %214
214: ; preds = %212
%215 = and i64 %10, 4294967288
br label %216
216: ; preds = %216, %214
%217 = phi i64 [ 0, %214 ], [ %233, %216 ]
%218 = phi <4 x i64> [ <i64 0, i64 1, i64 2, i64 3>, %214 ], [ %234, %216 ]
%219 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %214 ], [ %235, %216 ]
%220 = add <4 x i32> %219, <i32 4, i32 4, i32 4, i32 4>
%221 = trunc <4 x i64> %218 to <4 x i32>
%222 = add <4 x i32> %221, <i32 1, i32 1, i32 1, i32 1>
%223 = trunc <4 x i64> %218 to <4 x i32>
%224 = add <4 x i32> %223, <i32 5, i32 5, i32 5, i32 5>
%225 = mul nsw <4 x i32> %222, %219
%226 = mul nsw <4 x i32> %224, %220
%227 = lshr <4 x i32> %225, <i32 1, i32 1, i32 1, i32 1>
%228 = lshr <4 x i32> %226, <i32 1, i32 1, i32 1, i32 1>
%229 = getelementptr inbounds i32, i32* %11, i64 %217
%230 = bitcast i32* %229 to <4 x i32>*
store <4 x i32> %227, <4 x i32>* %230
%231 = getelementptr inbounds i32, i32* %229, i64 4
%232 = bitcast i32* %231 to <4 x i32>*
store <4 x i32> %228, <4 x i32>* %232
%233 = add nuw i64 %217, 8
%234 = add <4 x i64> %218, <i64 8, i64 8, i64 8, i64 8>
%235 = add <4 x i32> %219, <i32 8, i32 8, i32 8, i32 8>
%236 = icmp eq i64 %233, %215
br i1 %236, label %237, label %216
237: ; preds = %216
%238 = icmp eq i64 %215, %10
br i1 %238, label %241, label %239
239: ; preds = %212, %237
%240 = phi i64 [ 0, %212 ], [ %215, %237 ]
br label %244
241: ; preds = %244, %237, %211
br i1 %17, label %242, label %446
242: ; preds = %241
%243 = zext i32 %1 to i64
br label %253
244: ; preds = %239, %244
%245 = phi i64 [ %246, %244 ], [ %240, %239 ]
%246 = add nuw nsw i64 %245, 1
%247 = trunc i64 %246 to i32
%248 = trunc i64 %245 to i32
%249 = mul nsw i32 %247, %248
%250 = lshr i32 %249, 1
%251 = getelementptr inbounds i32, i32* %11, i64 %245
store i32 %250, i32* %251
%252 = icmp eq i64 %246, %10
br i1 %252, label %241, label %244
253: ; preds = %242, %387
%254 = phi i64 [ 0, %242 ], [ %388, %387 ]
br i1 %12, label %255, label %387
255: ; preds = %253
%256 = getelementptr inbounds double*, double** %0, i64 %254
%257 = load double*, double** %256
br label %258
258: ; preds = %255, %383
%259 = phi i64 [ 0, %255 ], [ %384, %383 ]
%260 = phi i64 [ 1, %255 ], [ %385, %383 ]
%261 = add nuw i64 %259, 1
%262 = add nuw i64 %259, 1
%263 = getelementptr double, double* %257, i64 %262
%264 = getelementptr double, double* %3, i64 %262
%265 = getelementptr inbounds double, double* %257, i64 %259
%266 = getelementptr inbounds double, double* %3, i64 %259
%267 = getelementptr inbounds i32, i32* %11, i64 %259
%268 = load i32, i32* %267
%269 = sext i32 %268 to i64
%270 = icmp ult i64 %259, 3
br i1 %270, label %333, label %271
271: ; preds = %258
%272 = getelementptr double, double* %3, i64 %259
%273 = getelementptr double, double* %257, i64 %259
%274 = getelementptr double, double* %4, i64 %262
%275 = getelementptr double, double* %4, i64 %269
%276 = getelementptr double, double* %274, i64 %269
%277 = icmp ult double* %275, %263
%278 = icmp ult double* %257, %276
%279 = and i1 %277, %278
%280 = icmp ult double* %275, %263
%281 = icmp ult double* %273, %276
%282 = and i1 %280, %281
%283 = or i1 %279, %282
%284 = icmp ult double* %275, %264
%285 = icmp ugt double* %276, %3
%286 = and i1 %284, %285
%287 = or i1 %283, %286
%288 = icmp ult double* %275, %264
%289 = icmp ult double* %272, %276
%290 = and i1 %288, %289
%291 = or i1 %287, %290
br i1 %291, label %333, label %292
292: ; preds = %271
%293 = and i64 %261, -4
%294 = load double, double* %265
%295 = load double, double* %266
%296 = fsub double %294, %295
%297 = insertelement <2 x double> poison, double %296, i64 0
%298 = shufflevector <2 x double> %297, <2 x double> poison, <2 x i32> zeroinitializer
%299 = fsub double %294, %295
%300 = insertelement <2 x double> poison, double %299, i64 0
%301 = shufflevector <2 x double> %300, <2 x double> poison, <2 x i32> zeroinitializer
br label %302
302: ; preds = %302, %292
%303 = phi i64 [ 0, %292 ], [ %329, %302 ]
%304 = getelementptr inbounds double, double* %257, i64 %303
%305 = bitcast double* %304 to <2 x double>*
%306 = load <2 x double>, <2 x double>* %305
%307 = getelementptr inbounds double, double* %304, i64 2
%308 = bitcast double* %307 to <2 x double>*
%309 = load <2 x double>, <2 x double>* %308
%310 = getelementptr inbounds double, double* %3, i64 %303
%311 = bitcast double* %310 to <2 x double>*
%312 = load <2 x double>, <2 x double>* %311
%313 = getelementptr inbounds double, double* %310, i64 2
%314 = bitcast double* %313 to <2 x double>*
%315 = load <2 x double>, <2 x double>* %314
%316 = fsub <2 x double> %306, %312
%317 = fsub <2 x double> %309, %315
%318 = add nsw i64 %303, %269
%319 = getelementptr inbounds double, double* %4, i64 %318
%320 = bitcast double* %319 to <2 x double>*
%321 = load <2 x double>, <2 x double>* %320
%322 = getelementptr inbounds double, double* %319, i64 2
%323 = bitcast double* %322 to <2 x double>*
%324 = load <2 x double>, <2 x double>* %323
%325 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %298, <2 x double> %316, <2 x double> %321)
%326 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %301, <2 x double> %317, <2 x double> %324)
%327 = bitcast double* %319 to <2 x double>*
store <2 x double> %325, <2 x double>* %327
%328 = bitcast double* %322 to <2 x double>*
store <2 x double> %326, <2 x double>* %328
%329 = add nuw i64 %303, 4
%330 = icmp eq i64 %329, %293
br i1 %330, label %331, label %302
331: ; preds = %302
%332 = icmp eq i64 %261, %293
br i1 %332, label %383, label %333
333: ; preds = %271, %258, %331
%334 = phi i64 [ 0, %271 ], [ 0, %258 ], [ %293, %331 ]
%335 = and i64 %260, 1
%336 = icmp eq i64 %335, 0
br i1 %336, label %351, label %337
337: ; preds = %333
%338 = load double, double* %265
%339 = load double, double* %266
%340 = fsub double %338, %339
%341 = getelementptr inbounds double, double* %257, i64 %334
%342 = load double, double* %341
%343 = getelementptr inbounds double, double* %3, i64 %334
%344 = load double, double* %343
%345 = fsub double %342, %344
%346 = add nsw i64 %334, %269
%347 = getelementptr inbounds double, double* %4, i64 %346
%348 = load double, double* %347
%349 = tail call double @llvm.fmuladd.f64(double %340, double %345, double %348)
store double %349, double* %347
%350 = or i64 %334, 1
br label %351
351: ; preds = %337, %333
%352 = phi i64 [ %334, %333 ], [ %350, %337 ]
%353 = icmp eq i64 %259, %334
br i1 %353, label %383, label %354
354: ; preds = %351, %354
%355 = phi i64 [ %381, %354 ], [ %352, %351 ]
%356 = load double, double* %265
%357 = load double, double* %266
%358 = fsub double %356, %357
%359 = getelementptr inbounds double, double* %257, i64 %355
%360 = load double, double* %359
%361 = getelementptr inbounds double, double* %3, i64 %355
%362 = load double, double* %361
%363 = fsub double %360, %362
%364 = add nsw i64 %355, %269
%365 = getelementptr inbounds double, double* %4, i64 %364
%366 = load double, double* %365
%367 = tail call double @llvm.fmuladd.f64(double %358, double %363, double %366)
store double %367, double* %365
%368 = add nuw nsw i64 %355, 1
%369 = load double, double* %265
%370 = load double, double* %266
%371 = fsub double %369, %370
%372 = getelementptr inbounds double, double* %257, i64 %368
%373 = load double, double* %372
%374 = getelementptr inbounds double, double* %3, i64 %368
%375 = load double, double* %374
%376 = fsub double %373, %375
%377 = add nsw i64 %368, %269
%378 = getelementptr inbounds double, double* %4, i64 %377
%379 = load double, double* %378
%380 = tail call double @llvm.fmuladd.f64(double %371, double %376, double %379)
store double %380, double* %378
%381 = add nuw nsw i64 %355, 2
%382 = icmp eq i64 %381, %260
br i1 %382, label %383, label %354
383: ; preds = %351, %354, %331
%384 = add nuw nsw i64 %259, 1
%385 = add nuw nsw i64 %260, 1
%386 = icmp eq i64 %384, %10
br i1 %386, label %387, label %258
387: ; preds = %383, %253
%388 = add nuw nsw i64 %254, 1
%389 = icmp eq i64 %388, %243
br i1 %389, label %390, label %253
390: ; preds = %387
%391 = icmp sgt i32 %1, 1
br i1 %391, label %392, label %446
392: ; preds = %390
%393 = sub nsw i32 %1, %2
%394 = sitofp i32 %393 to double
br i1 %198, label %395, label %446
395: ; preds = %392
%396 = zext i32 %9 to i64
%397 = icmp ult i32 %9, 2
br i1 %397, label %437, label %398
398: ; preds = %395
%399 = and i64 %396, 4294967294
%400 = insertelement <2 x double> poison, double %394, i64 0
%401 = shufflevector <2 x double> %400, <2 x double> poison, <2 x i32> zeroinitializer
%402 = add nsw i64 %399, -2
%403 = lshr exact i64 %402, 1
%404 = add nuw i64 %403, 1
%405 = and i64 %404, 1
%406 = icmp eq i64 %402, 0
br i1 %406, label %426, label %407
407: ; preds = %398
%408 = and i64 %404, -2
br label %409
409: ; preds = %409, %407
%410 = phi i64 [ 0, %407 ], [ %423, %409 ]
%411 = phi i64 [ 0, %407 ], [ %424, %409 ]
%412 = getelementptr inbounds double, double* %4, i64 %410
%413 = bitcast double* %412 to <2 x double>*
%414 = load <2 x double>, <2 x double>* %413
%415 = fdiv <2 x double> %414, %401
%416 = bitcast double* %412 to <2 x double>*
store <2 x double> %415, <2 x double>* %416
%417 = or i64 %410, 2
%418 = getelementptr inbounds double, double* %4, i64 %417
%419 = bitcast double* %418 to <2 x double>*
%420 = load <2 x double>, <2 x double>* %419
%421 = fdiv <2 x double> %420, %401
%422 = bitcast double* %418 to <2 x double>*
store <2 x double> %421, <2 x double>* %422
%423 = add nuw i64 %410, 4
%424 = add nuw i64 %411, 2
%425 = icmp eq i64 %424, %408
br i1 %425, label %426, label %409
426: ; preds = %409, %398
%427 = phi i64 [ 0, %398 ], [ %423, %409 ]
%428 = icmp eq i64 %405, 0
br i1 %428, label %435, label %429
429: ; preds = %426
%430 = getelementptr inbounds double, double* %4, i64 %427
%431 = bitcast double* %430 to <2 x double>*
%432 = load <2 x double>, <2 x double>* %431
%433 = fdiv <2 x double> %432, %401
%434 = bitcast double* %430 to <2 x double>*
store <2 x double> %433, <2 x double>* %434
br label %435
435: ; preds = %426, %429
%436 = icmp eq i64 %399, %396
br i1 %436, label %446, label %437
437: ; preds = %395, %435
%438 = phi i64 [ 0, %395 ], [ %399, %435 ]
br label %439
439: ; preds = %437, %439
%440 = phi i64 [ %444, %439 ], [ %438, %437 ]
%441 = getelementptr inbounds double, double* %4, i64 %440
%442 = load double, double* %441
%443 = fdiv double %442, %394
store double %443, double* %441
%444 = add nuw nsw i64 %440, 1
%445 = icmp eq i64 %444, %396
br i1 %445, label %446, label %439
446: ; preds = %439, %435, %241, %392, %390
ret void
}