double cg_update_d(double *d, double *g, double beta, double *gnorm2,
                   long int n) {
  long int i, n5;
  double dnorm2, s, t;
  s = ((double)0);
  dnorm2 = ((double)0);
  n5 = n % 5;
  if (gnorm2 == 0) {
    for (i = 0; i < n5; i++) {
      t = g[i];
      t = -t + beta * d[i];
      d[i] = t;
      dnorm2 += t * t;
    }
    for (; i < n;) {
      t = g[i];
      t = -t + beta * d[i];
      d[i] = t;
      dnorm2 += t * t;
      i++;
      t = g[i];
      t = -t + beta * d[i];
      d[i] = t;
      dnorm2 += t * t;
      i++;
      t = g[i];
      t = -t + beta * d[i];
      d[i] = t;
      dnorm2 += t * t;
      i++;
      t = g[i];
      t = -t + beta * d[i];
      d[i] = t;
      dnorm2 += t * t;
      i++;
      t = g[i];
      t = -t + beta * d[i];
      d[i] = t;
      dnorm2 += t * t;
      i++;
    }
  } else {
    s = ((double)0);
    for (i = 0; i < n5; i++) {
      t = g[i];
      s += t * t;
      t = -t + beta * d[i];
      d[i] = t;
      dnorm2 += t * t;
    }
    for (; i < n;) {
      t = g[i];
      s += t * t;
      t = -t + beta * d[i];
      d[i] = t;
      dnorm2 += t * t;
      i++;
      t = g[i];
      s += t * t;
      t = -t + beta * d[i];
      d[i] = t;
      dnorm2 += t * t;
      i++;
      t = g[i];
      s += t * t;
      t = -t + beta * d[i];
      d[i] = t;
      dnorm2 += t * t;
      i++;
      t = g[i];
      s += t * t;
      t = -t + beta * d[i];
      d[i] = t;
      dnorm2 += t * t;
      i++;
      t = g[i];
      s += t * t;
      t = -t + beta * d[i];
      d[i] = t;
      dnorm2 += t * t;
      i++;
    }
    *gnorm2 = s;
  }
  return (dnorm2);
}


x86 assembly (clang, -O0):
<cg_update_d>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movsd  %xmm0,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
mov    $0x5,%ecx
cqto
idiv   %rcx
mov    %rdx,-0x38(%rbp)
cmpq   $0x0,-0x20(%rbp)
jne    14a8 <cg_update_d+0x3a8>
movq   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x38(%rbp),%rax
jge    11e8 <cg_update_d+0xe8>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    114e <cg_update_d+0x4e>
jmp    11ed <cg_update_d+0xed>
mov    -0x30(%rbp),%rax
cmp    -0x28(%rbp),%rax
jge    14a3 <cg_update_d+0x3a3>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    11ed <cg_update_d+0xed>
jmp    18c2 <cg_update_d+0x7c2>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
movq   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmp    -0x38(%rbp),%rax
jge    156e <cg_update_d+0x46e>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    14b8 <cg_update_d+0x3b8>
jmp    1573 <cg_update_d+0x473>
mov    -0x30(%rbp),%rax
cmp    -0x28(%rbp),%rax
jge    18b5 <cg_update_d+0x7b5>
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x48(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x50(%rbp),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
movsd  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
mov    -0x30(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x40(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1573 <cg_update_d+0x473>
movsd  -0x48(%rbp),%xmm0
mov    -0x20(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x40(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<cg_update_d>:
mov    %rdx,%r8
movabs $0x6666666666666667,%rdx
66 66 66
mov    %rcx,%rax
imul   %rdx
mov    %rdx,%rax
shr    $0x3f,%rax
sar    %rdx
add    %rax,%rdx
lea    (%rdx,%rdx,4),%rdx
mov    %rcx,%rax
sub    %rdx,%rax
test   %r8,%r8
je     125f <cg_update_d+0x15f>
test   %rax,%rax
jle    1353 <cg_update_d+0x253>
movsd  (%rsi),%xmm1
movsd  (%rdi),%xmm2
mulsd  %xmm0,%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,(%rdi)
unpcklpd %xmm1,%xmm2
mulpd  %xmm2,%xmm2
xorpd  %xmm1,%xmm1
addpd  %xmm2,%xmm1
cmp    $0x1,%rax
je     1359 <cg_update_d+0x259>
movsd  0x8(%rsi),%xmm2
movsd  0x8(%rdi),%xmm3
mulsd  %xmm0,%xmm3
subsd  %xmm2,%xmm3
movsd  %xmm3,0x8(%rdi)
unpcklpd %xmm2,%xmm3
mulpd  %xmm3,%xmm3
addpd  %xmm3,%xmm1
cmp    $0x2,%rax
je     1359 <cg_update_d+0x259>
movsd  0x10(%rsi),%xmm2
movsd  0x10(%rdi),%xmm3
mulsd  %xmm0,%xmm3
subsd  %xmm2,%xmm3
movsd  %xmm3,0x10(%rdi)
unpcklpd %xmm2,%xmm3
mulpd  %xmm3,%xmm3
addpd  %xmm3,%xmm1
cmp    $0x3,%rax
je     1359 <cg_update_d+0x259>
movsd  0x18(%rsi),%xmm2
movsd  0x18(%rdi),%xmm3
mulsd  %xmm0,%xmm3
subsd  %xmm2,%xmm3
movsd  %xmm3,0x18(%rdi)
unpcklpd %xmm2,%xmm3
mulpd  %xmm3,%xmm3
addpd  %xmm3,%xmm1
cmp    $0x4,%rax
je     1359 <cg_update_d+0x259>
movsd  0x20(%rsi),%xmm2
movsd  0x20(%rdi),%xmm3
mulsd  %xmm0,%xmm3
subsd  %xmm2,%xmm3
movsd  %xmm3,0x20(%rdi)
unpcklpd %xmm2,%xmm3
mulpd  %xmm3,%xmm3
addpd  %xmm1,%xmm3
movsd  0x28(%rsi),%xmm1
movsd  0x28(%rdi),%xmm2
mulsd  %xmm0,%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0x28(%rdi)
unpcklpd %xmm1,%xmm2
mulpd  %xmm2,%xmm2
addpd  %xmm3,%xmm2
movsd  0x30(%rsi),%xmm3
movsd  0x30(%rdi),%xmm1
mulsd  %xmm0,%xmm1
subsd  %xmm3,%xmm1
movsd  %xmm1,0x30(%rdi)
unpcklpd %xmm3,%xmm1
mulpd  %xmm1,%xmm1
addpd  %xmm2,%xmm1
jmp    1359 <cg_update_d+0x259>
test   %rax,%rax
jle    144e <cg_update_d+0x34e>
movsd  (%rdi),%xmm2
mulsd  %xmm0,%xmm2
subsd  (%rsi),%xmm2
movsd  %xmm2,(%rdi)
mulsd  %xmm2,%xmm2
xorpd  %xmm1,%xmm1
addsd  %xmm2,%xmm1
cmp    $0x1,%rax
je     14f7 <cg_update_d+0x3f7>
movsd  0x8(%rdi),%xmm2
mulsd  %xmm0,%xmm2
subsd  0x8(%rsi),%xmm2
movsd  %xmm2,0x8(%rdi)
mulsd  %xmm2,%xmm2
addsd  %xmm2,%xmm1
cmp    $0x2,%rax
je     14f7 <cg_update_d+0x3f7>
movsd  0x10(%rdi),%xmm2
mulsd  %xmm0,%xmm2
subsd  0x10(%rsi),%xmm2
movsd  %xmm2,0x10(%rdi)
mulsd  %xmm2,%xmm2
addsd  %xmm2,%xmm1
cmp    $0x3,%rax
je     14f7 <cg_update_d+0x3f7>
movsd  0x18(%rdi),%xmm2
mulsd  %xmm0,%xmm2
subsd  0x18(%rsi),%xmm2
movsd  %xmm2,0x18(%rdi)
mulsd  %xmm2,%xmm2
addsd  %xmm2,%xmm1
cmp    $0x4,%rax
je     14f7 <cg_update_d+0x3f7>
movsd  0x20(%rdi),%xmm2
mulsd  %xmm0,%xmm2
subsd  0x20(%rsi),%xmm2
movsd  %xmm2,0x20(%rdi)
mulsd  %xmm2,%xmm2
addsd  %xmm1,%xmm2
movsd  0x28(%rdi),%xmm3
mulsd  %xmm0,%xmm3
subsd  0x28(%rsi),%xmm3
movsd  %xmm3,0x28(%rdi)
mulsd  %xmm3,%xmm3
movsd  0x30(%rdi),%xmm1
mulsd  %xmm0,%xmm1
subsd  0x30(%rsi),%xmm1
addsd  %xmm2,%xmm3
movsd  %xmm1,0x30(%rdi)
mulsd  %xmm1,%xmm1
addsd  %xmm3,%xmm1
jmp    14f7 <cg_update_d+0x3f7>
xorpd  %xmm1,%xmm1
xor    %eax,%eax
cmp    %rcx,%rax
jge    1444 <cg_update_d+0x344>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsd  (%rsi,%rax,8),%xmm2
movsd  (%rdi,%rax,8),%xmm3
mulsd  %xmm0,%xmm3
subsd  %xmm2,%xmm3
movsd  %xmm3,(%rdi,%rax,8)
unpcklpd %xmm2,%xmm3
mulpd  %xmm3,%xmm3
addpd  %xmm1,%xmm3
movsd  0x8(%rsi,%rax,8),%xmm1
movsd  0x8(%rdi,%rax,8),%xmm2
mulsd  %xmm0,%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0x8(%rdi,%rax,8)
unpcklpd %xmm1,%xmm2
mulpd  %xmm2,%xmm2
addpd  %xmm3,%xmm2
movsd  0x10(%rsi,%rax,8),%xmm1
movsd  0x10(%rdi,%rax,8),%xmm3
mulsd  %xmm0,%xmm3
subsd  %xmm1,%xmm3
movsd  %xmm3,0x10(%rdi,%rax,8)
unpcklpd %xmm1,%xmm3
mulpd  %xmm3,%xmm3
addpd  %xmm2,%xmm3
movsd  0x18(%rsi,%rax,8),%xmm1
movsd  0x18(%rdi,%rax,8),%xmm2
mulsd  %xmm0,%xmm2
subsd  %xmm1,%xmm2
movsd  %xmm2,0x18(%rdi,%rax,8)
unpcklpd %xmm1,%xmm2
mulpd  %xmm2,%xmm2
addpd  %xmm3,%xmm2
movsd  0x20(%rsi,%rax,8),%xmm1
movsd  0x20(%rdi,%rax,8),%xmm3
mulsd  %xmm0,%xmm3
subsd  %xmm1,%xmm3
movsd  %xmm3,0x20(%rdi,%rax,8)
unpcklpd %xmm1,%xmm3
mulpd  %xmm3,%xmm3
movapd %xmm3,%xmm1
addpd  %xmm2,%xmm1
add    $0x5,%rax
cmp    %rcx,%rax
jl     1370 <cg_update_d+0x270>
addpd  %xmm2,%xmm3
movapd %xmm3,%xmm1
movhpd %xmm1,(%r8)
jmp    1500 <cg_update_d+0x400>
xorpd  %xmm1,%xmm1
xor    %eax,%eax
jmp    14f7 <cg_update_d+0x3f7>
nopl   0x0(%rax)
movsd  (%rdi,%rax,8),%xmm2
mulsd  %xmm0,%xmm2
subsd  (%rsi,%rax,8),%xmm2
movsd  %xmm2,(%rdi,%rax,8)
mulsd  %xmm2,%xmm2
addsd  %xmm1,%xmm2
movsd  0x8(%rdi,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
subsd  0x8(%rsi,%rax,8),%xmm1
movsd  %xmm1,0x8(%rdi,%rax,8)
mulsd  %xmm1,%xmm1
movsd  0x10(%rdi,%rax,8),%xmm3
mulsd  %xmm0,%xmm3
subsd  0x10(%rsi,%rax,8),%xmm3
addsd  %xmm2,%xmm1
movsd  %xmm3,0x10(%rdi,%rax,8)
mulsd  %xmm3,%xmm3
addsd  %xmm1,%xmm3
movsd  0x18(%rdi,%rax,8),%xmm2
mulsd  %xmm0,%xmm2
subsd  0x18(%rsi,%rax,8),%xmm2
movsd  %xmm2,0x18(%rdi,%rax,8)
mulsd  %xmm2,%xmm2
addsd  %xmm3,%xmm2
movsd  0x20(%rdi,%rax,8),%xmm1
mulsd  %xmm0,%xmm1
subsd  0x20(%rsi,%rax,8),%xmm1
movsd  %xmm1,0x20(%rdi,%rax,8)
mulsd  %xmm1,%xmm1
addsd  %xmm2,%xmm1
add    $0x5,%rax
cmp    %rcx,%rax
jl     1460 <cg_update_d+0x360>
movapd %xmm1,%xmm0
ret

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

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