void ZVaxpy33(int n, double y0[], double y1[], double y2[], double alpha[],
              double x0[], double x1[], double x2[]) {
  register double ar00, ar01, ar02, ar10, ar11, ar12, ar20, ar21, ar22;
  register double ai00, ai01, ai02, ai10, ai11, ai12, ai20, ai21, ai22;
  register double xr0i, xr1i, xr2i;
  register double xi0i, xi1i, xi2i;
  int ii;
  ar00 = alpha[0];
  ai00 = alpha[1];
  ar01 = alpha[2];
  ai01 = alpha[3];
  ar02 = alpha[4];
  ai02 = alpha[5];
  ar10 = alpha[6];
  ai10 = alpha[7];
  ar11 = alpha[8];
  ai11 = alpha[9];
  ar12 = alpha[10];
  ai12 = alpha[11];
  ar20 = alpha[12];
  ai20 = alpha[13];
  ar21 = alpha[14];
  ai21 = alpha[15];
  ar22 = alpha[16];
  ai22 = alpha[17];
  for (ii = 0; ii < n; ii++) {
    xr0i = x0[2 * ii];
    xi0i = x0[2 * ii + 1];
    xr1i = x1[2 * ii];
    xi1i = x1[2 * ii + 1];
    xr2i = x2[2 * ii];
    xi2i = x2[2 * ii + 1];
    y0[2 * ii] += (ar00 * xr0i - ai00 * xi0i) + (ar01 * xr1i - ai01 * xi1i) +
                  (ar02 * xr2i - ai02 * xi2i);
    y0[2 * ii + 1] += (ar00 * xi0i + ai00 * xr0i) +
                      (ar01 * xi1i + ai01 * xr1i) + (ar02 * xi2i + ai02 * xr2i);
    y1[2 * ii] += (ar10 * xr0i - ai10 * xi0i) + (ar11 * xr1i - ai11 * xi1i) +
                  (ar12 * xr2i - ai12 * xi2i);
    y1[2 * ii + 1] += (ar10 * xi0i + ai10 * xr0i) +
                      (ar11 * xi1i + ai11 * xr1i) + (ar12 * xi2i + ai12 * xr2i);
    y2[2 * ii] += (ar20 * xr0i - ai20 * xi0i) + (ar21 * xr1i - ai21 * xi1i) +
                  (ar22 * xr2i - ai22 * xi2i);
    y2[2 * ii + 1] += (ar20 * xi0i + ai20 * xr0i) +
                      (ar21 * xi1i + ai21 * xr1i) + (ar22 * xi2i + ai22 * xr2i);
  }
  return;
}


x86 assembly (clang, -O0):
<ZVaxpy33>:
push   %rbp
mov    %rsp,%rbp
sub    $0x78,%rsp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x80(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x88(%rax),%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movl   $0x0,-0xf4(%rbp)
mov    -0xf4(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    175c <ZVaxpy33+0x65c>
mov    -0x30(%rbp),%rax
mov    -0xf4(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x30(%rbp),%rax
mov    -0xf4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    0x10(%rbp),%rax
mov    -0xf4(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    0x10(%rbp),%rax
mov    -0xf4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
mov    0x18(%rbp),%rax
mov    -0xf4(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    0x18(%rbp),%rax
mov    -0xf4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0x80(%rbp),%xmm1
mulsd  -0xe0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  -0xd0(%rbp),%xmm3
ff
movsd  -0x88(%rbp),%xmm2
ff
mulsd  -0xe8(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  -0x48(%rbp),%xmm1
movsd  -0xd8(%rbp),%xmm3
ff
movsd  -0x90(%rbp),%xmm2
ff
mulsd  -0xf0(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0xf4(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x38(%rbp),%xmm0
movsd  -0xe0(%rbp),%xmm2
ff
movsd  -0x80(%rbp),%xmm1
mulsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x40(%rbp),%xmm1
movsd  -0xe8(%rbp),%xmm3
ff
movsd  -0x88(%rbp),%xmm2
ff
mulsd  -0xd0(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  -0x48(%rbp),%xmm1
movsd  -0xf0(%rbp),%xmm3
ff
movsd  -0x90(%rbp),%xmm2
ff
mulsd  -0xd8(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
mov    -0xf4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0x98(%rbp),%xmm1
ff
mulsd  -0xe0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x58(%rbp),%xmm1
movsd  -0xd0(%rbp),%xmm3
ff
movsd  -0xa0(%rbp),%xmm2
ff
mulsd  -0xe8(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  -0xd8(%rbp),%xmm3
ff
movsd  -0xa8(%rbp),%xmm2
ff
mulsd  -0xf0(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0xf4(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x50(%rbp),%xmm0
movsd  -0xe0(%rbp),%xmm2
ff
movsd  -0x98(%rbp),%xmm1
ff
mulsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x58(%rbp),%xmm1
movsd  -0xe8(%rbp),%xmm3
ff
movsd  -0xa0(%rbp),%xmm2
ff
mulsd  -0xd0(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  -0x60(%rbp),%xmm1
movsd  -0xf0(%rbp),%xmm3
ff
movsd  -0xa8(%rbp),%xmm2
ff
mulsd  -0xd8(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
mov    -0xf4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
movsd  -0xc8(%rbp),%xmm2
ff
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  -0xe0(%rbp),%xmm1
ff
movq   %xmm1,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  -0xd0(%rbp),%xmm3
ff
movsd  -0xb8(%rbp),%xmm2
ff
mulsd  -0xe8(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  -0x78(%rbp),%xmm1
movsd  -0xd8(%rbp),%xmm3
ff
movsd  -0xc0(%rbp),%xmm2
ff
mulsd  -0xf0(%rbp),%xmm2
ff
movq   %xmm2,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm2
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    -0xf4(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
movsd  -0x68(%rbp),%xmm0
movsd  -0xe0(%rbp),%xmm2
ff
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  -0x70(%rbp),%xmm1
movsd  -0xe8(%rbp),%xmm3
ff
movsd  -0xb8(%rbp),%xmm2
ff
mulsd  -0xd0(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
movsd  -0x78(%rbp),%xmm1
movsd  -0xf0(%rbp),%xmm3
ff
movsd  -0xc0(%rbp),%xmm2
ff
mulsd  -0xd8(%rbp),%xmm2
ff
mulsd  %xmm3,%xmm1
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
mov    -0xf4(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
addsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,(%rax,%rcx,8)
mov    -0xf4(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xf4(%rbp)
jmp    124a <ZVaxpy33+0x14a>
add    $0x78,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ZVaxpy33>:
sub    $0x38,%rsp
test   %edi,%edi
jle    13f7 <ZVaxpy33+0x2f7>
mov    0x48(%rsp),%r10
mov    0x40(%rsp),%r11
movsd  0x8(%r8),%xmm0
movsd  0x18(%r8),%xmm7
movsd  0x28(%r8),%xmm5
movsd  0x38(%r8),%xmm2
movsd  0x48(%r8),%xmm12
movsd  0x58(%r8),%xmm13
movsd  0x68(%r8),%xmm9
movapd %xmm9,-0x80(%rsp)
movsd  0x78(%r8),%xmm14
movsd  0x88(%r8),%xmm1
movaps %xmm1,-0x70(%rsp)
movapd 0xe9d(%rip),%xmm6
movapd %xmm0,%xmm1
xorpd  %xmm6,%xmm1
movapd %xmm7,%xmm4
xorpd  %xmm6,%xmm4
movapd %xmm5,%xmm3
xorpd  %xmm6,%xmm3
movapd %xmm2,%xmm11
xorpd  %xmm6,%xmm11
movapd %xmm12,%xmm10
xorpd  %xmm6,%xmm10
movapd %xmm13,%xmm8
xorpd  %xmm6,%xmm8
unpcklpd %xmm1,%xmm0
movapd %xmm0,0x20(%rsp)
movapd %xmm9,%xmm0
xorpd  %xmm6,%xmm0
unpcklpd %xmm4,%xmm7
movapd %xmm7,0x10(%rsp)
movapd %xmm14,%xmm9
xorpd  %xmm6,%xmm9
movapd -0x70(%rsp),%xmm7
xorpd  %xmm7,%xmm6
mov    %edi,%edi
unpcklpd %xmm3,%xmm5
movapd %xmm5,(%rsp)
movsd  (%r8),%xmm1
unpcklpd %xmm11,%xmm2
movapd %xmm2,-0x10(%rsp)
movsd  0x10(%r8),%xmm2
unpcklpd %xmm10,%xmm12
movapd %xmm12,-0x20(%rsp)
movsd  0x20(%r8),%xmm3
unpcklpd %xmm8,%xmm13
movapd %xmm13,-0x30(%rsp)
movsd  0x30(%r8),%xmm4
unpcklpd %xmm1,%xmm1
movapd %xmm1,-0x40(%rsp)
unpcklpd %xmm2,%xmm2
movapd %xmm2,-0x50(%rsp)
movlhps %xmm3,%xmm3
movaps %xmm3,-0x60(%rsp)
unpcklpd %xmm4,%xmm4
movapd -0x80(%rsp),%xmm15
unpcklpd %xmm0,%xmm15
movsd  0x40(%r8),%xmm5
unpcklpd %xmm5,%xmm5
unpcklpd %xmm9,%xmm14
movsd  0x50(%r8),%xmm0
unpcklpd %xmm0,%xmm0
movapd %xmm7,%xmm3
unpcklpd %xmm6,%xmm3
movsd  0x60(%r8),%xmm6
unpcklpd %xmm6,%xmm6
movsd  0x70(%r8),%xmm8
unpcklpd %xmm8,%xmm8
movsd  0x80(%r8),%xmm9
unpcklpd %xmm9,%xmm9
shl    $0x4,%rdi
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nop
movupd (%r9,%rax,1),%xmm13
movupd (%r11,%rax,1),%xmm11
movupd (%r10,%rax,1),%xmm10
movapd %xmm13,%xmm12
mulpd  0x20(%rsp),%xmm12
shufpd $0x1,%xmm12,%xmm12
movapd -0x40(%rsp),%xmm1
mulpd  %xmm13,%xmm1
addpd  %xmm12,%xmm1
movapd %xmm11,%xmm7
mulpd  0x10(%rsp),%xmm7
shufpd $0x1,%xmm7,%xmm7
movapd -0x50(%rsp),%xmm2
mulpd  %xmm11,%xmm2
addpd  %xmm7,%xmm2
addpd  %xmm1,%xmm2
movapd %xmm10,%xmm1
mulpd  (%rsp),%xmm1
shufpd $0x1,%xmm1,%xmm1
movapd -0x60(%rsp),%xmm7
mulpd  %xmm10,%xmm7
addpd  %xmm1,%xmm7
addpd  %xmm2,%xmm7
movupd (%rsi,%rax,1),%xmm1
addpd  %xmm7,%xmm1
movupd %xmm1,(%rsi,%rax,1)
movapd %xmm13,%xmm1
mulpd  -0x10(%rsp),%xmm1
shufpd $0x1,%xmm1,%xmm1
movapd %xmm4,%xmm2
mulpd  %xmm13,%xmm2
addpd  %xmm1,%xmm2
movapd %xmm11,%xmm1
mulpd  -0x20(%rsp),%xmm1
shufpd $0x1,%xmm1,%xmm1
movapd %xmm5,%xmm7
mulpd  %xmm11,%xmm7
addpd  %xmm1,%xmm7
addpd  %xmm2,%xmm7
movapd %xmm10,%xmm1
mulpd  -0x30(%rsp),%xmm1
shufpd $0x1,%xmm1,%xmm1
movapd %xmm0,%xmm2
mulpd  %xmm10,%xmm2
addpd  %xmm1,%xmm2
addpd  %xmm7,%xmm2
movupd (%rdx,%rax,1),%xmm1
addpd  %xmm2,%xmm1
movupd %xmm1,(%rdx,%rax,1)
movapd %xmm6,%xmm1
mulpd  %xmm13,%xmm1
mulpd  %xmm15,%xmm13
shufpd $0x1,%xmm13,%xmm13
addpd  %xmm1,%xmm13
movapd %xmm8,%xmm1
mulpd  %xmm11,%xmm1
mulpd  %xmm14,%xmm11
shufpd $0x1,%xmm11,%xmm11
addpd  %xmm1,%xmm11
addpd  %xmm13,%xmm11
movapd %xmm9,%xmm1
mulpd  %xmm10,%xmm1
mulpd  %xmm3,%xmm10
shufpd $0x1,%xmm10,%xmm10
addpd  %xmm1,%xmm10
addpd  %xmm11,%xmm10
movupd (%rcx,%rax,1),%xmm1
addpd  %xmm10,%xmm1
movupd %xmm1,(%rcx,%rax,1)
add    $0x10,%rax
cmp    %rax,%rdi
jne    1290 <ZVaxpy33+0x190>
add    $0x38,%rsp
ret

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

LLVM IR (-O2):
define void @ZVaxpy33(i32 %0, double* nocapture %1, double* nocapture %2, double* nocapture %3, double* nocapture %4, double* nocapture %5, double* nocapture %6, double* nocapture %7) {
%9 = getelementptr inbounds double, double* %4, i64 1
%10 = load double, double* %9
%11 = getelementptr inbounds double, double* %4, i64 3
%12 = load double, double* %11
%13 = getelementptr inbounds double, double* %4, i64 5
%14 = load double, double* %13
%15 = getelementptr inbounds double, double* %4, i64 7
%16 = load double, double* %15
%17 = getelementptr inbounds double, double* %4, i64 9
%18 = load double, double* %17
%19 = getelementptr inbounds double, double* %4, i64 11
%20 = load double, double* %19
%21 = getelementptr inbounds double, double* %4, i64 13
%22 = load double, double* %21
%23 = getelementptr inbounds double, double* %4, i64 15
%24 = load double, double* %23
%25 = getelementptr inbounds double, double* %4, i64 17
%26 = load double, double* %25
%27 = icmp sgt i32 %0, 0
br i1 %27, label %28, label %154
28: ; preds = %8
%29 = getelementptr inbounds double, double* %4, i64 16
%30 = load double, double* %29
%31 = getelementptr inbounds double, double* %4, i64 14
%32 = load double, double* %31
%33 = getelementptr inbounds double, double* %4, i64 12
%34 = load double, double* %33
%35 = getelementptr inbounds double, double* %4, i64 10
%36 = load double, double* %35
%37 = getelementptr inbounds double, double* %4, i64 8
%38 = load double, double* %37
%39 = getelementptr inbounds double, double* %4, i64 6
%40 = load double, double* %39
%41 = getelementptr inbounds double, double* %4, i64 4
%42 = load double, double* %41
%43 = getelementptr inbounds double, double* %4, i64 2
%44 = load double, double* %43
%45 = load double, double* %4
%46 = fneg double %10
%47 = fneg double %12
%48 = fneg double %14
%49 = fneg double %16
%50 = fneg double %18
%51 = fneg double %20
%52 = fneg double %22
%53 = fneg double %24
%54 = fneg double %26
%55 = zext i32 %0 to i64
%56 = insertelement <2 x double> poison, double %45, i64 0
%57 = shufflevector <2 x double> %56, <2 x double> poison, <2 x i32> zeroinitializer
%58 = insertelement <2 x double> poison, double %10, i64 0
%59 = insertelement <2 x double> %58, double %46, i64 1
%60 = insertelement <2 x double> poison, double %44, i64 0
%61 = shufflevector <2 x double> %60, <2 x double> poison, <2 x i32> zeroinitializer
%62 = insertelement <2 x double> poison, double %12, i64 0
%63 = insertelement <2 x double> %62, double %47, i64 1
%64 = insertelement <2 x double> poison, double %42, i64 0
%65 = shufflevector <2 x double> %64, <2 x double> poison, <2 x i32> zeroinitializer
%66 = insertelement <2 x double> poison, double %14, i64 0
%67 = insertelement <2 x double> %66, double %48, i64 1
%68 = insertelement <2 x double> poison, double %40, i64 0
%69 = shufflevector <2 x double> %68, <2 x double> poison, <2 x i32> zeroinitializer
%70 = insertelement <2 x double> poison, double %16, i64 0
%71 = insertelement <2 x double> %70, double %49, i64 1
%72 = insertelement <2 x double> poison, double %38, i64 0
%73 = shufflevector <2 x double> %72, <2 x double> poison, <2 x i32> zeroinitializer
%74 = insertelement <2 x double> poison, double %18, i64 0
%75 = insertelement <2 x double> %74, double %50, i64 1
%76 = insertelement <2 x double> poison, double %36, i64 0
%77 = shufflevector <2 x double> %76, <2 x double> poison, <2 x i32> zeroinitializer
%78 = insertelement <2 x double> poison, double %20, i64 0
%79 = insertelement <2 x double> %78, double %51, i64 1
%80 = insertelement <2 x double> poison, double %34, i64 0
%81 = shufflevector <2 x double> %80, <2 x double> poison, <2 x i32> zeroinitializer
%82 = insertelement <2 x double> poison, double %22, i64 0
%83 = insertelement <2 x double> %82, double %52, i64 1
%84 = insertelement <2 x double> poison, double %32, i64 0
%85 = shufflevector <2 x double> %84, <2 x double> poison, <2 x i32> zeroinitializer
%86 = insertelement <2 x double> poison, double %24, i64 0
%87 = insertelement <2 x double> %86, double %53, i64 1
%88 = insertelement <2 x double> poison, double %30, i64 0
%89 = shufflevector <2 x double> %88, <2 x double> poison, <2 x i32> zeroinitializer
%90 = insertelement <2 x double> poison, double %26, i64 0
%91 = insertelement <2 x double> %90, double %54, i64 1
br label %92
92: ; preds = %28, %92
%93 = phi i64 [ 0, %28 ], [ %152, %92 ]
%94 = shl nuw nsw i64 %93, 1
%95 = getelementptr inbounds double, double* %5, i64 %94
%96 = bitcast double* %95 to <2 x double>*
%97 = load <2 x double>, <2 x double>* %96
%98 = getelementptr inbounds double, double* %6, i64 %94
%99 = bitcast double* %98 to <2 x double>*
%100 = load <2 x double>, <2 x double>* %99
%101 = getelementptr inbounds double, double* %7, i64 %94
%102 = bitcast double* %101 to <2 x double>*
%103 = load <2 x double>, <2 x double>* %102
%104 = getelementptr inbounds double, double* %1, i64 %94
%105 = fmul <2 x double> %97, %59
%106 = shufflevector <2 x double> %105, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%107 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %57, <2 x double> %97, <2 x double> %106)
%108 = fmul <2 x double> %100, %63
%109 = shufflevector <2 x double> %108, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%110 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %61, <2 x double> %100, <2 x double> %109)
%111 = fadd <2 x double> %107, %110
%112 = fmul <2 x double> %103, %67
%113 = shufflevector <2 x double> %112, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%114 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %65, <2 x double> %103, <2 x double> %113)
%115 = fadd <2 x double> %111, %114
%116 = bitcast double* %104 to <2 x double>*
%117 = load <2 x double>, <2 x double>* %116
%118 = fadd <2 x double> %117, %115
%119 = bitcast double* %104 to <2 x double>*
store <2 x double> %118, <2 x double>* %119
%120 = getelementptr inbounds double, double* %2, i64 %94
%121 = fmul <2 x double> %97, %71
%122 = shufflevector <2 x double> %121, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%123 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %69, <2 x double> %97, <2 x double> %122)
%124 = fmul <2 x double> %100, %75
%125 = shufflevector <2 x double> %124, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%126 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %73, <2 x double> %100, <2 x double> %125)
%127 = fadd <2 x double> %123, %126
%128 = fmul <2 x double> %103, %79
%129 = shufflevector <2 x double> %128, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%130 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %77, <2 x double> %103, <2 x double> %129)
%131 = fadd <2 x double> %127, %130
%132 = bitcast double* %120 to <2 x double>*
%133 = load <2 x double>, <2 x double>* %132
%134 = fadd <2 x double> %131, %133
%135 = bitcast double* %120 to <2 x double>*
store <2 x double> %134, <2 x double>* %135
%136 = getelementptr inbounds double, double* %3, i64 %94
%137 = fmul <2 x double> %97, %83
%138 = shufflevector <2 x double> %137, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%139 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %81, <2 x double> %97, <2 x double> %138)
%140 = fmul <2 x double> %100, %87
%141 = shufflevector <2 x double> %140, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%142 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %85, <2 x double> %100, <2 x double> %141)
%143 = fadd <2 x double> %139, %142
%144 = fmul <2 x double> %103, %91
%145 = shufflevector <2 x double> %144, <2 x double> poison, <2 x i32> <i32 1, i32 0>
%146 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %89, <2 x double> %103, <2 x double> %145)
%147 = fadd <2 x double> %143, %146
%148 = bitcast double* %136 to <2 x double>*
%149 = load <2 x double>, <2 x double>* %148
%150 = fadd <2 x double> %147, %149
%151 = bitcast double* %136 to <2 x double>*
store <2 x double> %150, <2 x double>* %151
%152 = add nuw nsw i64 %93, 1
%153 = icmp eq i64 %152, %55
br i1 %153, label %154, label %92
154: ; preds = %92, %8
ret void
}