void ldvmat(double *a, double *v, int n) {
  double *p0, *q0, *p, *q, *qq;
  double h, s;
  int i, j, k, mm;
  for (i = 0, mm = n * n, q = v; i < mm; ++i)
    *q++ = 0.;
  *v = 1.;
  q0 = v + n * n - 1;
  *q0 = 1.;
  q0 -= n + 1;
  p0 = a + n * n - n - n - 1;
  for (i = n - 2, mm = 1; i > 0; --i, p0 -= n + 1, q0 -= n + 1, ++mm) {
    if (*(p0 - 1) != 0.) {
      for (j = 0, p = p0, h = 1.; j < mm; ++j, ++p)
        h += *p * *p;
      h = *(p0 - 1);
      *q0 = 1. - h;
      for (j = 0, q = q0 + n, p = p0; j < mm; ++j, q += n)
        *q = -h * *p++;
      for (k = i + 1, q = q0 + 1; k < n; ++k) {
        for (j = 0, qq = q + n, p = p0, s = 0.; j < mm; ++j, qq += n)
          s += *qq * *p++;
        s *= h;
        for (j = 0, qq = q + n, p = p0; j < mm; ++j, qq += n)
          *qq -= s * *p++;
        *q++ = -s;
      }
    } else {
      *q0 = 1.;
      for (j = 0, p = q0 + 1, q = q0 + n; j < mm; ++j, q += n)
        *q = *p++ = 0.;
    }
  }
}


x86 assembly (clang, -O0):
<ldvmat>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movl   $0x0,-0x54(%rbp)
mov    -0x14(%rbp),%eax
imul   -0x14(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x60(%rbp),%eax
jge    1158 <ldvmat+0x58>
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1128 <ldvmat+0x28>
mov    -0x10(%rbp),%rax
movsd  0xe9c(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
imul   -0x14(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
movsd  0xe6f(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x8(%rbp),%rax
mov    -0x14(%rbp),%ecx
imul   -0x14(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x14(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x14(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x54(%rbp)
movl   $0x1,-0x60(%rbp)
cmpl   $0x0,-0x54(%rbp)
jle    15a6 <ldvmat+0x4a6>
mov    -0x20(%rbp),%rax
movsd  -0x8(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    122a <ldvmat+0x12a>
jp     122a <ldvmat+0x12a>
jmp    14c5 <ldvmat+0x3c5>
movl   $0x0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x30(%rbp)
movsd  0xdbf(%rip),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x60(%rbp),%eax
jge    128e <ldvmat+0x18e>
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x30(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x30(%rbp)
jmp    1246 <ldvmat+0x146>
mov    -0x20(%rbp),%rax
movsd  -0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  0xd5c(%rip),%xmm0
subsd  -0x48(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x14(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x60(%rbp),%eax
jge    1339 <ldvmat+0x239>
movsd  -0x48(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x30(%rbp)
mulsd  (%rax),%xmm0
mov    -0x38(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x38(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
jmp    12d3 <ldvmat+0x1d3>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x38(%rbp)
mov    -0x5c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    14c0 <ldvmat+0x3c0>
movl   $0x0,-0x58(%rbp)
mov    -0x38(%rbp),%rax
movslq -0x14(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x60(%rbp),%eax
jge    13e0 <ldvmat+0x2e0>
mov    -0x40(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x30(%rbp)
movsd  (%rax),%xmm2
movsd  -0x50(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x40(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
jmp    1384 <ldvmat+0x284>
movsd  -0x48(%rbp),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x50(%rbp)
movl   $0x0,-0x58(%rbp)
mov    -0x38(%rbp),%rax
movslq -0x14(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
mov    -0x20(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x60(%rbp),%eax
jge    1483 <ldvmat+0x383>
movsd  -0x50(%rbp),%xmm0
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x30(%rbp)
movsd  (%rax),%xmm2
mov    -0x40(%rbp),%rax
movsd  (%rax),%xmm1
movq   %xmm0,%rcx
movabs $0x8000000000000000,%rdx
xor    %rdx,%rcx
movq   %rcx,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x40(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x40(%rbp)
jmp    1411 <ldvmat+0x311>
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x38(%rbp)
movsd  %xmm0,(%rax)
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    134e <ldvmat+0x24e>
jmp    1550 <ldvmat+0x450>
mov    -0x28(%rbp),%rax
movsd  0xb2f(%rip),%xmm0
movsd  %xmm0,(%rax)
movl   $0x0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x30(%rbp)
mov    -0x28(%rbp),%rax
movslq -0x14(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x58(%rbp),%eax
cmp    -0x60(%rbp),%eax
jge    154b <ldvmat+0x44b>
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x38(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
mov    -0x14(%rbp),%ecx
mov    -0x38(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
jmp    14fb <ldvmat+0x3fb>
jmp    1550 <ldvmat+0x450>
jmp    1555 <ldvmat+0x455>
mov    -0x54(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x54(%rbp)
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x14(%rbp),%ecx
add    $0x1,%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x60(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    11ff <ldvmat+0xff>
pop    %rbp
ret

x86 assembly (clang, -O2):
<ldvmat>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x108,%rsp
mov    %rsi,%rbx
mov    %rdi,%r15
mov    %rdx,%rax
mov    %rdx,0x8(%rsp)
imul   %eax,%eax
test   %eax,%eax
je     114c <ldvmat+0x3c>
mov    %eax,%ebp
lea    0x0(,%rbp,8),%rdx
mov    %rbx,%rdi
xor    %esi,%esi
call   1030 <memset@plt>
jmp    114e <ldvmat+0x3e>
xor    %ebp,%ebp
movabs $0x3ff0000000000000,%rax
mov    %rax,(%rbx)
mov    %rbx,0x48(%rsp)
mov    %rax,-0x8(%rbx,%rbp,8)
cmpl   $0x3,0x8(%rsp)
jl     1881 <ldvmat+0x771>
mov    0x8(%rsp),%r8
mov    %r8d,%eax
not    %eax
movslq %eax,%rsi
movslq %r8d,%rdx
mov    %rdx,%rax
neg    %rax
lea    (%r15,%rbp,8),%rcx
lea    (%rcx,%rax,8),%rcx
lea    (%rcx,%rax,8),%r12
add    $0xfffffffffffffff8,%r12
lea    0x0(%rbp,%rsi,1),%rax
lea    0x0(,%rax,8),%rdi
mov    $0x8,%r14d
mov    $0x8,%ecx
sub    %rdi,%rcx
mov    %rcx,0x78(%rsp)
lea    0x0(,%rsi,8),%rbx
mov    %rdx,%r11
shl    $0x5,%r11
lea    (%rdx,%rdx,2),%rcx
lea    (%rdi,%rcx,8),%rdi
add    $0xfffffffffffffff8,%rdi
mov    %rdi,0x70(%rsp)
lea    (%rdx,%rdx,1),%rdi
lea    0x0(,%rdx,2),%r9
add    %rbp,%r9
mov    %rbx,0xd8(%rsp)
lea    (%rbx,%rbp,8),%rbx
sub    %rbx,%r14
lea    (%rsi,%r9,1),%rbx
add    $0xffffffffffffffff,%rbx
mov    %rbx,0x68(%rsp)
add    %rsi,%r9
not    %rdi
lea    (%r15,%rdi,8),%rdi
mov    %rdi,0x38(%rsp)
lea    (%rdx,%rbp,1),%rdi
lea    (%rsi,%rdi,1),%rbx
add    $0xffffffffffffffff,%rbx
mov    %rbx,0x60(%rsp)
add    %rsi,%rdi
lea    (%r11,%rax,8),%rbx
add    $0xfffffffffffffff8,%rbx
mov    %rbx,0x58(%rsp)
mov    0x48(%rsp),%rbx
lea    (%rbx,%rax,8),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,0xc8(%rsp)
lea    0x0(,%rdx,4),%rax
add    %rbp,%rax
add    %rsi,%rax
lea    (%rbx,%rax,8),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,0xc0(%rsp)
add    %rbp,%rcx
add    %rsi,%rcx
lea    (%rbx,%rcx,8),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,0xb8(%rsp)
lea    -0x8(%rbx,%r9,8),%rax
mov    %rax,0xb0(%rsp)
lea    (%rdx,%rsi,1),%rax
lea    (%rbx,%rax,8),%rcx
mov    %rcx,0x88(%rsp)
shl    $0x3,%rax
mov    %rax,0x100(%rsp)
lea    (%rbx,%rbp,8),%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,0x28(%rsp)
lea    0x0(,%rbp,8),%r10
lea    0x3(%rbp,%rsi,1),%rax
mov    %rax,0x50(%rsp)
lea    (%rbx,%rbp,8),%rax
mov    %r14,%rbp
mov    %rax,0xf8(%rsp)
lea    -0x8(%rbx,%rdi,8),%rax
mov    %rax,0xa8(%rsp)
lea    (%rbx,%rdi,8),%rax
mov    %rax,0xf0(%rsp)
xorpd  %xmm0,%xmm0
movsd  0xd0a(%rip),%xmm1
movapd 0xd12(%rip),%xmm2
lea    -0x2(%r8),%eax
mov    %rax,0x30(%rsp)
lea    -0x1(%r8),%eax
mov    %eax,0x40(%rsp)
lea    0x0(,%rdx,4),%rax
mov    %rax,0xa0(%rsp)
lea    0x0(,%rdx,8),%r13
xor    %eax,%eax
mov    %rax,0x80(%rsp)
xor    %eax,%eax
mov    %rax,0x20(%rsp)
xor    %ecx,%ecx
mov    %r12,0xd0(%rsp)
mov    %r12,%r15
mov    $0x1,%r9d
mov    %rsi,0xe0(%rsp)
jmp    13d1 <ldvmat+0x2c1>
cs nopw 0x0(%rax,%rax,1)
nop
mov    0x30(%rsp),%rax
add    $0xffffffff,%eax
mov    %rax,0x30(%rsp)
mov    0xe0(%rsp),%rsi
lea    (%r15,%rsi,8),%r15
add    $0x1,%r9d
mov    (%rsp),%ecx
add    $0x1,%ecx
mov    0xd8(%rsp),%rax
sub    %rax,0x78(%rsp)
add    %rax,0x58(%rsp)
add    %rax,0x70(%rsp)
add    %rsi,0x68(%rsp)
add    %rsi,0x60(%rsp)
mov    0xe8(%rsp),%rbp
sub    %rax,%rbp
add    %rsi,0x50(%rsp)
add    %rax,0x20(%rsp)
sub    %rax,0x80(%rsp)
add    %rax,0x38(%rsp)
cmp    0x40(%rsp),%r9d
je     1881 <ldvmat+0x771>
mov    %r9d,%r8d
and    $0x3,%r8d
mov    %r15,%r14
mov    %r9d,%eax
and    $0xfffffffc,%eax
mov    0x28(%rsp),%r15
lea    (%r15,%rsi,8),%rsi
movsd  -0x8(%r14),%xmm3
ucomisd %xmm0,%xmm3
mov    %r9,0x18(%rsp)
mov    %ecx,(%rsp)
mov    %r14,0x10(%rsp)
mov    %rbp,0xe8(%rsp)
mov    %rsi,0x28(%rsp)
jne    1416 <ldvmat+0x306>
jnp    1780 <ldvmat+0x670>
movapd %xmm1,%xmm4
subsd  %xmm3,%xmm4
movsd  %xmm4,(%rsi)
xorpd  %xmm2,%xmm3
mov    %rsi,%r15
mov    %r14,%r12
mov    %eax,0x4(%rsp)
mov    %eax,%r9d
mov    0xd0(%rsp),%rax
mov    0xa8(%rsp),%rbp
mov    0xb0(%rsp),%rbx
mov    0xb8(%rsp),%rsi
mov    0xc0(%rsp),%rdi
mov    0xc8(%rsp),%r14
cmp    $0x3,%ecx
mov    0x20(%rsp),%rcx
jb     14d1 <ldvmat+0x3c1>
nopl   (%rax)
movsd  (%rax,%rcx,1),%xmm4
mulsd  %xmm3,%xmm4
movsd  %xmm4,0x0(%rbp,%rcx,1)
movsd  0x8(%rax,%rcx,1),%xmm4
mulsd  %xmm3,%xmm4
movsd  %xmm4,(%rbx,%rcx,1)
movsd  0x10(%rax,%rcx,1),%xmm4
mulsd  %xmm3,%xmm4
movsd  %xmm4,(%rsi,%rcx,1)
movsd  0x18(%rax,%rcx,1),%xmm4
mulsd  %xmm3,%xmm4
movsd  %xmm4,(%rdi,%rcx,1)
add    %r11,%r14
add    %r11,%rdi
add    %r11,%rsi
add    %r11,%rbx
add    %r11,%rbp
add    $0x20,%rax
add    $0xfffffffc,%r9d
jne    1470 <ldvmat+0x360>
add    %rcx,%r14
add    %rcx,%rax
mov    %r14,%r15
mov    %rax,%r12
mov    0x18(%rsp),%r9
test   $0x3,%r9b
je     150a <ldvmat+0x3fa>
lea    (%r15,%rdx,8),%rax
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%r12,%rsi,8),%xmm4
mulsd  %xmm3,%xmm4
movsd  %xmm4,(%rax)
add    %r13,%rax
add    $0x1,%rsi
cmp    %esi,%r8d
jne    14f0 <ldvmat+0x3e0>
mov    0x30(%rsp),%rax
lea    0x1(%rax),%ebx
cmp    0x8(%rsp),%ebx
mov    0x10(%rsp),%r15
jge    1360 <ldvmat+0x250>
mov    0x80(%rsp),%rbp
mov    0x20(%rsp),%r12
mov    0x28(%rsp),%rdi
jmp    1559 <ldvmat+0x449>
cs nopw 0x0(%rax,%rax,1)
nop
movsd  %xmm4,(%rdi)
add    $0x1,%ebx
add    $0x8,%r12
add    $0xfffffffffffffff8,%rbp
cmp    0x8(%rsp),%ebx
je     1360 <ldvmat+0x250>
mov    %rdi,0x90(%rsp)
lea    (%rdi,%rdx,8),%rsi
add    $0x8,%rsi
xorpd  %xmm4,%xmm4
mov    %rsi,%rcx
mov    %r15,%r14
mov    (%rsp),%edi
cmp    $0x3,%edi
mov    %rbp,0x98(%rsp)
jb     1644 <ldvmat+0x534>
mov    %ebx,0x44(%rsp)
lea    (%r10,%r12,1),%r14
xorpd  %xmm4,%xmm4
mov    0x4(%rsp),%edi
mov    0x38(%rsp),%r15
mov    0x100(%rsp),%rax
mov    0x88(%rsp),%rcx
mov    %rsi,%rbp
nop
movsd  (%rcx,%r14,1),%xmm5
mulsd  (%r15,%r10,1),%xmm5
addsd  %xmm4,%xmm5
lea    0x0(,%rdx,8),%r9
add    %rbp,%r9
movsd  0x0(%rbp,%rdx,8),%xmm4
mulsd  0x8(%r15,%r10,1),%xmm4
addsd  %xmm5,%xmm4
movsd  (%r9,%rdx,8),%xmm5
mulsd  0x10(%r15,%r10,1),%xmm5
lea    (%r9,%rdx,8),%rbp
addsd  %xmm4,%xmm5
lea    0x0(%rbp,%rdx,8),%rbx
movsd  0x0(%rbp,%rdx,8),%xmm4
mulsd  0x18(%r15,%r10,1),%xmm4
addsd  %xmm5,%xmm4
lea    (%rbx,%rdx,8),%rbp
add    %r11,%rcx
add    %r11,%rax
add    $0x20,%r15
add    $0xfffffffc,%edi
jne    15b0 <ldvmat+0x4a0>
mov    0xf8(%rsp),%rcx
mov    0x98(%rsp),%rbp
sub    %rbp,%rcx
add    %rax,%rcx
add    %r10,%r15
mov    0x18(%rsp),%r9
mov    (%rsp),%edi
mov    0x10(%rsp),%r14
mov    0x44(%rsp),%ebx
test   $0x3,%r9b
je     166a <ldvmat+0x55a>
xor    %eax,%eax
nopl   0x0(%rax)
movsd  (%rcx),%xmm5
mulsd  (%r15,%rax,8),%xmm5
addsd  %xmm5,%xmm4
add    %r13,%rcx
add    $0x1,%rax
cmp    %eax,%r8d
jne    1650 <ldvmat+0x540>
mulsd  %xmm3,%xmm4
cmp    $0x3,%edi
jae    1680 <ldvmat+0x570>
mov    %r14,%r15
mov    %r14,%rax
jmp    1730 <ldvmat+0x620>
xchg   %ax,%ax
mov    %ebx,%r14d
lea    (%r10,%r12,1),%r9
mov    0x4(%rsp),%ebp
mov    0x38(%rsp),%rax
mov    0xf0(%rsp),%rbx
mov    0x88(%rsp),%rcx
movsd  (%rax,%r10,1),%xmm5
mulsd  %xmm4,%xmm5
addsd  (%rcx,%r9,1),%xmm5
movsd  %xmm5,(%rsi)
lea    (%rsi,%rdx,8),%rdi
movsd  0x8(%rax,%r10,1),%xmm5
mulsd  %xmm4,%xmm5
addsd  (%rsi,%rdx,8),%xmm5
movsd  %xmm5,(%rsi,%rdx,8)
lea    (%rdi,%rdx,8),%rsi
movsd  0x10(%rax,%r10,1),%xmm5
mulsd  %xmm4,%xmm5
addsd  (%rdi,%rdx,8),%xmm5
movsd  %xmm5,(%rdi,%rdx,8)
lea    (%rsi,%rdx,8),%rdi
movsd  0x18(%rax,%r10,1),%xmm5
mulsd  %xmm4,%xmm5
addsd  (%rsi,%rdx,8),%xmm5
movsd  %xmm5,(%rsi,%rdx,8)
lea    (%rdi,%rdx,8),%rsi
add    %r11,%rcx
add    %r11,%rbx
add    $0x20,%rax
add    $0xfffffffc,%ebp
jne    16a0 <ldvmat+0x590>
add    %r12,%rbx
add    %r10,%rax
mov    %rbx,%rsi
mov    0x10(%rsp),%r15
mov    %r14d,%ebx
mov    0x98(%rsp),%rbp
mov    0x18(%rsp),%r9
mov    0x90(%rsp),%rdi
add    $0x8,%rdi
test   $0x3,%r9b
je     1540 <ldvmat+0x430>
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movsd  (%rax,%rcx,8),%xmm5
mulsd  %xmm4,%xmm5
addsd  (%rsi),%xmm5
movsd  %xmm5,(%rsi)
add    %r13,%rsi
add    $0x1,%rcx
cmp    %ecx,%r8d
jne    1750 <ldvmat+0x640>
jmp    1540 <ldvmat+0x430>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %r14,%r15
mov    %eax,%r12d
movabs $0x3ff0000000000000,%rax
mov    %rax,(%rsi)
mov    %rsi,%rbx
mov    %rsi,%rax
cmp    $0x3,%ecx
jb     1843 <ldvmat+0x733>
mov    0x50(%rsp),%rcx
mov    %rbp,%r9
mov    0x60(%rsp),%rsi
mov    0x68(%rsp),%rdi
mov    0x70(%rsp),%rbx
mov    0x58(%rsp),%rbp
mov    0x78(%rsp),%r14
mov    0x48(%rsp),%rax
mov    0xa0(%rsp),%r15
movq   $0x0,-0x18(%rax,%rcx,8)
movq   $0x0,(%rax,%rsi,8)
movq   $0x0,-0x10(%rax,%rcx,8)
movq   $0x0,(%rax,%rdi,8)
movq   $0x0,-0x8(%rax,%rcx,8)
movq   $0x0,(%rax,%rbx,1)
movq   $0x0,(%rax,%rcx,8)
movq   $0x0,(%rax,%rbp,1)
sub    %r11,%r14
add    %r11,%rbp
add    %r11,%rbx
add    %r15,%rdi
add    %r15,%rsi
add    $0xffffffffffffffe0,%r9
add    $0x4,%rcx
add    $0xfffffffc,%r12d
jne    17d0 <ldvmat+0x6c0>
mov    %rax,%rbx
sub    %r14,%rbx
sub    %r9,%rax
mov    0x18(%rsp),%r9
mov    0x10(%rsp),%r15
test   $0x3,%r9b
je     1360 <ldvmat+0x250>
lea    (%rbx,%rdx,8),%rcx
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movq   $0x0,0x8(%rax,%rsi,8)
movq   $0x0,(%rcx)
add    %r13,%rcx
add    $0x1,%rsi
cmp    %esi,%r8d
jne    1860 <ldvmat+0x750>
jmp    1360 <ldvmat+0x250>
add    $0x108,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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