void atovm(double *v, int n) {
  double *p0, *q0, *p, *q, *qq;
  double h, s;
  int i, j, k, mm;
  q0 = v + n * n - 1;
  *q0 = 1.;
  q0 -= n + 1;
  p0 = v + n * n - n - n - 1;
  for (i = n - 2, mm = 1; i >= 0; --i, p0 -= n + 1, q0 -= n + 1, ++mm) {
    if (i && *(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):
<atovm>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0xc(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movsd  0xecc(%rip),%xmm0
movsd  %xmm0,(%rax)
mov    -0xc(%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    -0x8(%rbp),%rax
mov    -0xc(%rbp),%ecx
imul   -0xc(%rbp),%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0xc(%rbp),%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xfffffffffffffff8,%rax
mov    %rax,-0x18(%rbp)
mov    -0xc(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x4c(%rbp)
movl   $0x1,-0x58(%rbp)
cmpl   $0x0,-0x4c(%rbp)
jl     1553 <atovm+0x453>
cmpl   $0x0,-0x4c(%rbp)
je     1472 <atovm+0x372>
mov    -0x18(%rbp),%rax
movsd  -0x8(%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    11d7 <atovm+0xd7>
jp     11d7 <atovm+0xd7>
jmp    1472 <atovm+0x372>
movl   $0x0,-0x50(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
movsd  0xe12(%rip),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    123b <atovm+0x13b>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x28(%rbp)
jmp    11f3 <atovm+0xf3>
mov    -0x18(%rbp),%rax
movsd  -0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  0xdaf(%rip),%xmm0
subsd  -0x40(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movl   $0x0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    12e6 <atovm+0x1e6>
movsd  -0x40(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x28(%rbp)
mulsd  (%rax),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0xc(%rbp),%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
jmp    1280 <atovm+0x180>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x30(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    146d <atovm+0x36d>
movl   $0x0,-0x50(%rbp)
mov    -0x30(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    138d <atovm+0x28d>
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x28(%rbp)
movsd  (%rax),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0xc(%rbp),%ecx
mov    -0x38(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
jmp    1331 <atovm+0x231>
movsd  -0x40(%rbp),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movl   $0x0,-0x50(%rbp)
mov    -0x30(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    1430 <atovm+0x330>
movsd  -0x48(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x28(%rbp)
movsd  (%rax),%xmm2
mov    -0x38(%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    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0xc(%rbp),%ecx
mov    -0x38(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
jmp    13be <atovm+0x2be>
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)
movsd  %xmm0,(%rax)
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    12fb <atovm+0x1fb>
jmp    14fd <atovm+0x3fd>
mov    -0x20(%rbp),%rax
movsd  0xb82(%rip),%xmm0
movsd  %xmm0,(%rax)
movl   $0x0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rax
movslq -0xc(%rbp),%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    14f8 <atovm+0x3f8>
mov    -0x28(%rbp),%rax
mov    %rax,%rcx
add    $0x8,%rcx
mov    %rcx,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x30(%rbp),%rax
xorps  %xmm0,%xmm0
movsd  %xmm0,(%rax)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
mov    -0xc(%rbp),%ecx
mov    -0x30(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x30(%rbp)
jmp    14a8 <atovm+0x3a8>
jmp    14fd <atovm+0x3fd>
jmp    1502 <atovm+0x402>
mov    -0x4c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x4c(%rbp)
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
mov    -0x18(%rbp),%rax
movslq %ecx,%rdx
xor    %ecx,%ecx
sub    %rdx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x18(%rbp)
mov    -0xc(%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    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    11a2 <atovm+0xa2>
pop    %rbp
ret

x86 assembly (clang, -O2):
<atovm>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x68,%rsp
mov    %esi,%ecx
imul   %ecx,%ecx
movabs $0x3ff0000000000000,%rax
mov    %rax,-0x8(%rdi,%rcx,8)
mov    %rsi,-0x58(%rsp)
cmp    $0x2,%esi
jl     17c0 <atovm+0x6c0>
lea    (%rdi,%rcx,8),%rbp
mov    -0x58(%rsp),%r8
mov    %r8d,%eax
not    %eax
movslq %eax,%r15
movslq %r8d,%r10
mov    %r10,%rdx
neg    %rdx
mov    %rbp,0x60(%rsp)
lea    0x0(,%rdx,8),%rax
add    %rbp,%rax
lea    -0x8(%rax,%rdx,8),%r9
lea    (%r15,%rcx,1),%rdx
lea    0x0(,%rdx,8),%rax
mov    $0x8,%ebx
mov    $0x8,%ebp
sub    %rax,%rbp
mov    %rbp,-0x30(%rsp)
mov    %r10,%r14
shl    $0x5,%r14
lea    (%r14,%rdx,8),%rdx
add    $0xfffffffffffffff8,%rdx
mov    %rdx,-0x38(%rsp)
lea    (%r10,%r10,2),%rdx
lea    -0x8(%rax,%rdx,8),%rax
mov    %rax,-0x40(%rsp)
lea    (%r15,%r10,2),%rdx
lea    -0x1(%rcx,%rdx,1),%rax
mov    %rax,-0x48(%rsp)
lea    (%r10,%r15,1),%rax
lea    0x0(,%rcx,8),%r13
mov    %r10,%rdx
shl    $0x4,%rdx
mov    %r13,%r11
sub    %rdx,%r11
lea    0x0(,%r15,8),%rdx
add    %r13,%rdx
sub    %rdx,%rbx
mov    %rbx,0x8(%rsp)
lea    (%rax,%rcx,1),%rbp
add    $0xfffffffffffffff8,%r11
lea    (%rcx,%rax,1),%rdx
add    $0xffffffffffffffff,%rdx
mov    %rdx,-0x50(%rsp)
lea    (%rdi,%rax,8),%rdx
mov    %rdx,0x20(%rsp)
shl    $0x3,%rax
mov    %rax,0x58(%rsp)
lea    (%r10,%r10,1),%rax
not    %rax
lea    (%rdi,%rax,8),%rax
mov    %rax,-0x20(%rsp)
lea    (%rdi,%rbp,8),%rdx
mov    %rdx,0x50(%rsp)
lea    -0x8(%rdi,%rcx,8),%rdx
lea    0x3(%r15,%rcx,1),%rcx
mov    %rcx,(%rsp)
mov    %r11,%rcx
xorpd  %xmm0,%xmm0
movsd  0xdca(%rip),%xmm1
movapd 0xdd2(%rip),%xmm2
add    $0xfffffffe,%r8d
lea    0x0(,%r15,8),%rbp
mov    %rbp,0x30(%rsp)
lea    0x0(,%r10,4),%rbp
lea    0x0(,%r10,8),%rax
mov    %rax,-0x60(%rsp)
mov    $0x1,%r12d
xor    %eax,%eax
mov    %rax,-0x8(%rsp)
xor    %eax,%eax
mov    %rax,-0x10(%rsp)
movl   $0x0,-0x80(%rsp)
mov    %rdi,0x40(%rsp)
mov    %r15,0x38(%rsp)
mov    %rbp,0x18(%rsp)
jmp    130a <atovm+0x20a>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
mov    0x38(%rsp),%r15
lea    (%r9,%r15,8),%r9
add    $0x1,%r12d
addl   $0x1,-0x80(%rsp)
mov    0x30(%rsp),%rax
sub    %rax,-0x30(%rsp)
add    %rax,-0x38(%rsp)
add    %rax,-0x40(%rsp)
add    %r15,-0x48(%rsp)
add    %r15,-0x50(%rsp)
mov    0x48(%rsp),%rcx
add    %rax,%rcx
add    %rax,-0x10(%rsp)
sub    %rax,-0x8(%rsp)
add    %rax,-0x20(%rsp)
sub    %rax,0x8(%rsp)
add    %r15,(%rsp)
cmp    -0x58(%rsp),%r12d
mov    0x40(%rsp),%rdi
mov    0x10(%rsp),%rdx
mov    -0x14(%rsp),%r8d
je     17c0 <atovm+0x6c0>
mov    %r8d,-0x78(%rsp)
mov    %r12d,%ebx
and    $0x3,%ebx
mov    %r12d,%eax
and    $0xfffffffc,%eax
mov    %eax,-0x7c(%rsp)
lea    (%rdx,%r15,8),%rdx
sub    $0x1,%r8d
mov    %r9,-0x28(%rsp)
mov    %rbx,-0x70(%rsp)
mov    %rcx,0x48(%rsp)
mov    %rdx,0x10(%rsp)
mov    %r8d,-0x14(%rsp)
jb     16c0 <atovm+0x5c0>
movsd  -0x8(%r9),%xmm3
ucomisd %xmm0,%xmm3
jne    1358 <atovm+0x258>
jnp    16c0 <atovm+0x5c0>
mov    %r12,-0x68(%rsp)
movapd %xmm1,%xmm4
subsd  %xmm3,%xmm4
movsd  %xmm4,(%rdx)
xorpd  %xmm2,%xmm3
mov    %rdx,%rax
mov    %r9,%r12
mov    -0x7c(%rsp),%r9d
mov    -0x50(%rsp),%r15
mov    -0x48(%rsp),%rbx
mov    -0x40(%rsp),%rdx
mov    -0x38(%rsp),%rsi
mov    -0x30(%rsp),%r11
cmpl   $0x3,-0x80(%rsp)
jb     1401 <atovm+0x301>
nopl   0x0(%rax,%rax,1)
movsd  (%rdi,%rcx,1),%xmm4
mulsd  %xmm3,%xmm4
movsd  %xmm4,(%rdi,%r15,8)
movsd  0x8(%rdi,%rcx,1),%xmm4
mulsd  %xmm3,%xmm4
movsd  %xmm4,(%rdi,%rbx,8)
movsd  0x10(%rdi,%rcx,1),%xmm4
mulsd  %xmm3,%xmm4
movsd  %xmm4,(%rdi,%rdx,1)
movsd  0x18(%rdi,%rcx,1),%xmm4
mulsd  %xmm3,%xmm4
movsd  %xmm4,(%rdi,%rsi,1)
sub    %r14,%r11
add    %r14,%rsi
add    %r14,%rdx
add    %rbp,%rbx
add    %rbp,%r15
add    $0x20,%rcx
add    $0xfffffffc,%r9d
jne    13a0 <atovm+0x2a0>
mov    %rdi,%rax
sub    %r11,%rax
add    %rdi,%rcx
mov    %rcx,%r12
mov    %rax,%rcx
testb  $0x3,-0x68(%rsp)
mov    -0x60(%rsp),%rbx
mov    -0x70(%rsp),%rax
je     1439 <atovm+0x339>
lea    (%rcx,%r10,8),%rcx
xor    %edx,%edx
nopl   0x0(%rax,%rax,1)
movsd  (%r12,%rdx,8),%xmm4
mulsd  %xmm3,%xmm4
movsd  %xmm4,(%rcx)
add    %rbx,%rcx
add    $0x1,%rdx
cmp    %edx,%eax
jne    1420 <atovm+0x320>
mov    -0x78(%rsp),%edi
add    $0x1,%edi
cmp    -0x58(%rsp),%edi
mov    -0x28(%rsp),%r9
mov    -0x68(%rsp),%r12
jge    12a0 <atovm+0x1a0>
mov    -0x8(%rsp),%rax
mov    -0x10(%rsp),%rcx
mov    %rcx,-0x78(%rsp)
mov    0x10(%rsp),%rsi
jmp    148e <atovm+0x38e>
nopw   0x0(%rax,%rax,1)
movsd  %xmm4,(%rsi)
add    $0x1,%edi
addq   $0x8,-0x78(%rsp)
mov    %r11,%rax
add    $0xfffffffffffffff8,%rax
cmp    -0x58(%rsp),%edi
je     12a0 <atovm+0x1a0>
mov    %rsi,0x28(%rsp)
lea    (%rsi,%r10,8),%r8
add    $0x8,%r8
xorpd  %xmm4,%xmm4
mov    %r8,%rdx
mov    %r9,%r15
cmpl   $0x3,-0x80(%rsp)
jb     156b <atovm+0x46b>
mov    -0x78(%rsp),%rcx
lea    (%rcx,%r13,1),%r12
xorpd  %xmm4,%xmm4
mov    -0x7c(%rsp),%ebx
mov    -0x20(%rsp),%r15
mov    0x58(%rsp),%r9
mov    0x20(%rsp),%rsi
mov    %r8,%rcx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movsd  (%rsi,%r12,1),%xmm5
mulsd  (%r15,%r13,1),%xmm5
addsd  %xmm4,%xmm5
lea    (%rcx,%r10,8),%r11
movsd  (%rcx,%r10,8),%xmm4
mulsd  0x8(%r15,%r13,1),%xmm4
addsd  %xmm5,%xmm4
movsd  (%r11,%r10,8),%xmm5
mulsd  0x10(%r15,%r13,1),%xmm5
lea    (%r11,%r10,8),%rcx
addsd  %xmm4,%xmm5
lea    (%rcx,%r10,8),%rbp
movsd  (%rcx,%r10,8),%xmm4
mulsd  0x18(%r15,%r13,1),%xmm4
addsd  %xmm5,%xmm4
lea    0x0(,%r10,8),%rcx
add    %rbp,%rcx
add    %r14,%rsi
add    %r14,%r9
add    $0x20,%r15
add    $0xfffffffc,%ebx
jne    14e0 <atovm+0x3e0>
mov    0x60(%rsp),%rdx
sub    %rax,%rdx
add    %r9,%rdx
add    %r13,%r15
mov    -0x28(%rsp),%r9
mov    0x18(%rsp),%rbp
mov    -0x60(%rsp),%rbx
mov    -0x68(%rsp),%r12
mov    %rax,%r11
test   $0x3,%r12b
mov    -0x70(%rsp),%rax
je     1599 <atovm+0x499>
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movsd  (%rdx),%xmm5
mulsd  (%r15,%rcx,8),%xmm5
addsd  %xmm5,%xmm4
add    %rbx,%rdx
add    $0x1,%rcx
cmp    %ecx,%eax
jne    1580 <atovm+0x480>
mulsd  %xmm3,%xmm4
cmpl   $0x3,-0x80(%rsp)
jae    15b0 <atovm+0x4b0>
mov    %r9,%rax
jmp    1671 <atovm+0x571>
nopl   0x0(%rax)
mov    -0x78(%rsp),%rax
lea    (%rax,%r13,1),%r15
mov    -0x7c(%rsp),%ebx
mov    -0x20(%rsp),%rax
mov    0x50(%rsp),%rcx
mov    0x20(%rsp),%r12
nopl   0x0(%rax)
movsd  (%rax,%r13,1),%xmm5
mulsd  %xmm4,%xmm5
addsd  (%r12,%r15,1),%xmm5
movsd  %xmm5,(%r8)
lea    (%r8,%r10,8),%rbp
movsd  0x8(%rax,%r13,1),%xmm5
mulsd  %xmm4,%xmm5
addsd  (%r8,%r10,8),%xmm5
movsd  %xmm5,(%r8,%r10,8)
lea    0x0(%rbp,%r10,8),%rdx
movsd  0x10(%rax,%r13,1),%xmm5
mulsd  %xmm4,%xmm5
addsd  0x0(%rbp,%r10,8),%xmm5
movsd  %xmm5,0x0(%rbp,%r10,8)
lea    (%rdx,%r10,8),%rbp
movsd  0x18(%rax,%r13,1),%xmm5
mulsd  %xmm4,%xmm5
addsd  (%rdx,%r10,8),%xmm5
movsd  %xmm5,(%rdx,%r10,8)
lea    0x0(,%r10,8),%r8
add    %rbp,%r8
add    %r14,%r12
add    %r14,%rcx
add    $0x20,%rax
add    $0xfffffffc,%ebx
jne    15d0 <atovm+0x4d0>
add    -0x78(%rsp),%rcx
add    %r13,%rax
mov    %rcx,%r8
mov    0x18(%rsp),%rbp
mov    -0x60(%rsp),%rbx
mov    -0x68(%rsp),%r12
mov    -0x70(%rsp),%rdx
mov    0x28(%rsp),%rsi
add    $0x8,%rsi
test   $0x3,%r12b
je     1470 <atovm+0x370>
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movsd  (%rax,%rcx,8),%xmm5
mulsd  %xmm4,%xmm5
addsd  (%r8),%xmm5
movsd  %xmm5,(%r8)
add    %rbx,%r8
add    $0x1,%rcx
cmp    %ecx,%edx
jne    1690 <atovm+0x590>
jmp    1470 <atovm+0x370>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movabs $0x3ff0000000000000,%rax
mov    %rax,(%rdx)
mov    %rdx,%rcx
cmpl   $0x3,-0x80(%rsp)
jb     1785 <atovm+0x685>
mov    (%rsp),%rdx
mov    0x8(%rsp),%r9
mov    -0x50(%rsp),%r15
mov    -0x48(%rsp),%rbx
mov    -0x40(%rsp),%rcx
mov    -0x38(%rsp),%rsi
mov    -0x30(%rsp),%r11
mov    -0x7c(%rsp),%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movq   $0x0,-0x18(%rdi,%rdx,8)
movq   $0x0,(%rdi,%r15,8)
movq   $0x0,-0x10(%rdi,%rdx,8)
movq   $0x0,(%rdi,%rbx,8)
movq   $0x0,-0x8(%rdi,%rdx,8)
movq   $0x0,(%rdi,%rcx,1)
movq   $0x0,(%rdi,%rdx,8)
movq   $0x0,(%rdi,%rsi,1)
sub    %r14,%r11
add    %r14,%rsi
add    %r14,%rcx
add    %rbp,%rbx
add    %rbp,%r15
add    $0xffffffffffffffe0,%r9
add    $0x4,%rdx
add    $0xfffffffc,%eax
jne    1710 <atovm+0x610>
mov    %rdi,%rdx
sub    %r11,%rdx
mov    %rdi,%rcx
sub    %r9,%rcx
mov    -0x28(%rsp),%r9
mov    -0x70(%rsp),%rbx
test   $0x3,%r12b
mov    -0x60(%rsp),%rdi
je     12a0 <atovm+0x1a0>
lea    (%rdx,%r10,8),%rdx
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
movq   $0x0,0x8(%rcx,%rax,8)
movq   $0x0,(%rdx)
add    %rdi,%rdx
add    $0x1,%rax
cmp    %eax,%ebx
jne    17a0 <atovm+0x6a0>
jmp    12a0 <atovm+0x1a0>
add    $0x68,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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