void _inner_vec4_daxpy(double *y0, int incY, const double *a0, const double *a1,
                       const double *a2, const double *a3, const double *x0,
                       int incX, double alpha, int nRE) {
  register int i, ix;
  register double cf0, cf1, cf2, cf3;
  register double ytmp, t0, t1;
  ix = 0;
  cf0 = alpha * x0[ix];
  ix += incX;
  cf1 = alpha * x0[ix];
  ix += incX;
  cf2 = alpha * x0[ix];
  ix += incX;
  cf3 = alpha * x0[ix];
  for (i = 0; i < nRE - 3; i += 4) {
    ytmp = a0[0] * cf0;
    t0 = a1[0] * cf1;
    ytmp += t0;
    t1 = a2[0] * cf2;
    ytmp += t1;
    t0 = a3[0] * cf3;
    ytmp += t0;
    y0[0] += ytmp;
    y0 += incY;
    ytmp = a0[1] * cf0;
    t0 = a1[1] * cf1;
    ytmp += t0;
    t1 = a2[1] * cf2;
    ytmp += t1;
    t0 = a3[1] * cf3;
    ytmp += t0;
    y0[0] += ytmp;
    y0 += incY;
    ytmp = a0[2] * cf0;
    t0 = a1[2] * cf1;
    ytmp += t0;
    t1 = a2[2] * cf2;
    ytmp += t1;
    t0 = a3[2] * cf3;
    ytmp += t0;
    y0[0] += ytmp;
    y0 += incY;
    ytmp = a0[3] * cf0;
    t0 = a1[3] * cf1;
    ytmp += t0;
    t1 = a2[3] * cf2;
    ytmp += t1;
    t0 = a3[3] * cf3;
    ytmp += t0;
    y0[0] += ytmp;
    y0 += incY;
    a0 += 4;
    a1 += 4;
    a2 += 4;
    a3 += 4;
  }
  if (i == nRE)
    return;
  if (i < nRE - 1) {
    ytmp = a0[0] * cf0;
    t0 = a1[0] * cf1;
    ytmp += t0;
    t1 = a2[0] * cf2;
    ytmp += t1;
    t0 = a3[0] * cf3;
    ytmp += t0;
    y0[0] += ytmp;
    y0 += incY;
    ytmp = a0[1] * cf0;
    t0 = a1[1] * cf1;
    ytmp += t0;
    t1 = a2[1] * cf2;
    ytmp += t1;
    t0 = a3[1] * cf3;
    ytmp += t0;
    y0[0] += ytmp;
    y0 += incY;
    a0 += 2;
    a1 += 2;
    a2 += 2;
    a3 += 2;
    i += 2;
  }
  if (i < nRE) {
    ytmp = a0[0] * cf0;
    t0 = a1[0] * cf1;
    ytmp += t0;
    t1 = a2[0] * cf2;
    ytmp += t1;
    t0 = a3[0] * cf3;
    ytmp += t0;
    y0[0] += ytmp;
  }
}


x86 assembly (clang, -O0):
<_inner_vec4_daxpy>:
push   %rbp
mov    %rsp,%rbp
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movsd  %xmm0,-0x38(%rbp)
movl   $0x0,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    0x18(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    0x18(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    0x18(%rbp),%eax
add    -0x40(%rbp),%eax
mov    %eax,-0x40(%rbp)
movsd  -0x38(%rbp),%xmm0
mov    0x10(%rbp),%rax
movslq -0x40(%rbp),%rcx
mulsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x60(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    0x20(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1476 <_inner_vec4_daxpy+0x376>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0xc(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0xc(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x10(%rax),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0xc(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x18(%rax),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0xc(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x30(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x3c(%rbp)
jmp    11af <_inner_vec4_daxpy+0xaf>
mov    -0x3c(%rbp),%eax
cmp    0x20(%rbp),%eax
jne    1487 <_inner_vec4_daxpy+0x387>
jmp    169d <_inner_vec4_daxpy+0x59d>
mov    -0x3c(%rbp),%eax
mov    0x20(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    160b <_inner_vec4_daxpy+0x50b>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0xc(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  0x8(%rax),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
mov    -0xc(%rbp),%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
add    $0x10,%rax
mov    %rax,-0x30(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x20(%rbp),%eax
jge    169d <_inner_vec4_daxpy+0x59d>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x50(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x58(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x30(%rbp),%rax
movsd  (%rax),%xmm0
mulsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x70(%rbp),%xmm0
addsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
mov    -0x8(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<_inner_vec4_daxpy>:
push   %rbp
push   %r15
push   %r14
push   %rbx
movslq 0x30(%rsp),%rax
mov    0x38(%rsp),%r10d
mov    0x28(%rsp),%rbp
movsd  0x0(%rbp),%xmm1
mulsd  %xmm0,%xmm1
movsd  0x0(%rbp,%rax,8),%xmm2
mulsd  %xmm0,%xmm2
lea    (%rax,%rax,1),%ebx
movslq %ebx,%rbx
movsd  0x0(%rbp,%rbx,8),%xmm3
mulsd  %xmm0,%xmm3
lea    (%rax,%rax,2),%eax
cltq
mulsd  0x0(%rbp,%rax,8),%xmm0
xor    %ebp,%ebp
cmp    $0x4,%r10d
jl     1295 <_inner_vec4_daxpy+0x195>
lea    -0x3(%r10),%r14d
movslq %esi,%rbx
mov    %rbx,%r11
shl    $0x5,%r11
shl    $0x3,%rbx
xor    %r15d,%r15d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %rdi,%rax
movsd  (%rdx),%xmm4
mulsd  %xmm1,%xmm4
movsd  (%rcx),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  (%r8),%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm5,%xmm4
movsd  (%r9),%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm4,%xmm5
addsd  (%rdi),%xmm5
movsd  %xmm5,(%rdi)
movsd  0x8(%rdx),%xmm4
mulsd  %xmm1,%xmm4
movsd  0x8(%rcx),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x8(%r8),%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm5,%xmm4
movsd  0x8(%r9),%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm4,%xmm5
lea    (%rdi,%rbx,1),%rdi
addsd  (%rax,%rbx,1),%xmm5
movsd  %xmm5,(%rax,%rbx,1)
movsd  0x10(%rdx),%xmm4
mulsd  %xmm1,%xmm4
movsd  0x10(%rcx),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x10(%r8),%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm5,%xmm4
movsd  0x10(%r9),%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm4,%xmm5
addsd  (%rbx,%rdi,1),%xmm5
lea    (%rdi,%rbx,1),%rbp
movsd  %xmm5,(%rbx,%rdi,1)
movsd  0x18(%rdx),%xmm4
mulsd  %xmm1,%xmm4
movsd  0x18(%rcx),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x18(%r8),%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm5,%xmm4
movsd  0x18(%r9),%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm4,%xmm5
lea    (%rbx,%rbp,1),%rdi
addsd  (%rbx,%rbp,1),%xmm5
movsd  %xmm5,(%rbx,%rbp,1)
add    $0x20,%rdx
add    $0x20,%rcx
add    $0x20,%r8
add    $0x20,%r9
add    $0x4,%r15d
add    %rbx,%rdi
cmp    %r14d,%r15d
jl     1170 <_inner_vec4_daxpy+0x70>
add    %r11,%rax
mov    %r10d,%ebp
and    $0xfffffffc,%ebp
mov    %rax,%rdi
cmp    %r10d,%ebp
je     1365 <_inner_vec4_daxpy+0x265>
lea    -0x1(%r10),%eax
cmp    %eax,%ebp
jge    133a <_inner_vec4_daxpy+0x23a>
movsd  (%rdx),%xmm4
mulsd  %xmm1,%xmm4
movsd  (%rcx),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  (%r8),%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm5,%xmm4
movsd  (%r9),%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm4,%xmm5
addsd  (%rdi),%xmm5
movsd  %xmm5,(%rdi)
movslq %esi,%rax
movsd  0x8(%rdx),%xmm4
mulsd  %xmm1,%xmm4
movsd  0x8(%rcx),%xmm5
mulsd  %xmm2,%xmm5
addsd  %xmm4,%xmm5
movsd  0x8(%r8),%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm5,%xmm4
movsd  0x8(%r9),%xmm5
mulsd  %xmm0,%xmm5
addsd  %xmm4,%xmm5
addsd  (%rdi,%rax,8),%xmm5
lea    (%rdi,%rax,8),%rsi
movsd  %xmm5,(%rdi,%rax,8)
lea    (%rsi,%rax,8),%rdi
add    $0x10,%rdx
add    $0x10,%rcx
add    $0x10,%r8
add    $0x10,%r9
or     $0x2,%ebp
cmp    %r10d,%ebp
jge    1365 <_inner_vec4_daxpy+0x265>
mulsd  (%rdx),%xmm1
mulsd  (%rcx),%xmm2
mulsd  (%r8),%xmm3
addsd  %xmm1,%xmm2
addsd  %xmm2,%xmm3
mulsd  (%r9),%xmm0
addsd  %xmm3,%xmm0
addsd  (%rdi),%xmm0
movsd  %xmm0,(%rdi)
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

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