void kernel_dgemv_n_8_lib4(int kmax, double *A0, int sda, double *x, double *y,
                           double *z, int alg) {
  if (kmax <= 0)
    return;
  double *A1 = A0 + 4 * sda;
  __builtin_prefetch(A0);
  __builtin_prefetch(A1);
  __builtin_prefetch(A0 + 8);
  __builtin_prefetch(A1 + 8);
  const int lda = 4;
  int k;
  double x_0, x_1, x_2, x_3, y_0 = 0, y_1 = 0, y_2 = 0, y_3 = 0, y_4 = 0,
                             y_5 = 0, y_6 = 0, y_7 = 0;
  k = 0;
  for (; k < kmax - 3; k += 4) {
    __builtin_prefetch(A0 + 4 * lda);
    __builtin_prefetch(A1 + 4 * lda);
    __builtin_prefetch(A0 + 4 * lda + 8);
    __builtin_prefetch(A1 + 4 * lda + 8);
    x_0 = x[0];
    x_1 = x[1];
    x_2 = x[2];
    x_3 = x[3];
    y_0 += A0[0 + lda * 0] * x_0;
    y_1 += A0[1 + lda * 0] * x_0;
    y_2 += A0[2 + lda * 0] * x_0;
    y_3 += A0[3 + lda * 0] * x_0;
    y_4 += A1[0 + lda * 0] * x_0;
    y_5 += A1[1 + lda * 0] * x_0;
    y_6 += A1[2 + lda * 0] * x_0;
    y_7 += A1[3 + lda * 0] * x_0;
    y_0 += A0[0 + lda * 1] * x_1;
    y_1 += A0[1 + lda * 1] * x_1;
    y_2 += A0[2 + lda * 1] * x_1;
    y_3 += A0[3 + lda * 1] * x_1;
    y_4 += A1[0 + lda * 1] * x_1;
    y_5 += A1[1 + lda * 1] * x_1;
    y_6 += A1[2 + lda * 1] * x_1;
    y_7 += A1[3 + lda * 1] * x_1;
    y_0 += A0[0 + lda * 2] * x_2;
    y_1 += A0[1 + lda * 2] * x_2;
    y_2 += A0[2 + lda * 2] * x_2;
    y_3 += A0[3 + lda * 2] * x_2;
    y_4 += A1[0 + lda * 2] * x_2;
    y_5 += A1[1 + lda * 2] * x_2;
    y_6 += A1[2 + lda * 2] * x_2;
    y_7 += A1[3 + lda * 2] * x_2;
    y_0 += A0[0 + lda * 3] * x_3;
    y_1 += A0[1 + lda * 3] * x_3;
    y_2 += A0[2 + lda * 3] * x_3;
    y_3 += A0[3 + lda * 3] * x_3;
    y_4 += A1[0 + lda * 3] * x_3;
    y_5 += A1[1 + lda * 3] * x_3;
    y_6 += A1[2 + lda * 3] * x_3;
    y_7 += A1[3 + lda * 3] * x_3;
    A0 += 4 * lda;
    A1 += 4 * lda;
    x += 4;
  }
  for (; k < kmax; k++) {
    x_0 = x[0];
    y_0 += A0[0 + lda * 0] * x_0;
    y_1 += A0[1 + lda * 0] * x_0;
    y_2 += A0[2 + lda * 0] * x_0;
    y_3 += A0[3 + lda * 0] * x_0;
    y_4 += A1[0 + lda * 0] * x_0;
    y_5 += A1[1 + lda * 0] * x_0;
    y_6 += A1[2 + lda * 0] * x_0;
    y_7 += A1[3 + lda * 0] * x_0;
    A0 += 1 * lda;
    A1 += 1 * lda;
    x += 1;
  }
  if (alg == 0) {
    z[0] = y_0;
    z[1] = y_1;
    z[2] = y_2;
    z[3] = y_3;
    z[4] = y_4;
    z[5] = y_5;
    z[6] = y_6;
    z[7] = y_7;
  } else if (alg == 1) {
    z[0] = y[0] + y_0;
    z[1] = y[1] + y_1;
    z[2] = y[2] + y_2;
    z[3] = y[3] + y_3;
    z[4] = y[4] + y_4;
    z[5] = y[5] + y_5;
    z[6] = y[6] + y_6;
    z[7] = y[7] + y_7;
  } else {
    z[0] = y[0] - y_0;
    z[1] = y[1] - y_1;
    z[2] = y[2] - y_2;
    z[3] = y[3] - y_3;
    z[4] = y[4] - y_4;
    z[5] = y[5] - y_5;
    z[6] = y[6] - y_6;
    z[7] = y[7] - y_7;
  }
}


x86 assembly (clang, -O0):
<kernel_dgemv_n_8_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    0x10(%rbp),%eax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
cmpl   $0x0,-0x4(%rbp)
jg     1130 <kernel_dgemv_n_8_lib4+0x30>
jmp    1a66 <kernel_dgemv_n_8_lib4+0x966>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
prefetcht0 (%rax)
mov    -0x38(%rbp),%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x38(%rbp),%rax
add    $0x40,%rax
prefetcht0 (%rax)
movl   $0x4,-0x3c(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    16de <kernel_dgemv_n_8_lib4+0x5de>
mov    -0x10(%rbp),%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x40(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x40(%rbp)
jmp    11c6 <kernel_dgemv_n_8_lib4+0xc6>
jmp    16e3 <kernel_dgemv_n_8_lib4+0x5e3>
mov    -0x40(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1844 <kernel_dgemv_n_8_lib4+0x744>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x10(%rbp)
mov    -0x38(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    16e3 <kernel_dgemv_n_8_lib4+0x5e3>
cmpl   $0x0,0x10(%rbp)
jne    18ce <kernel_dgemv_n_8_lib4+0x7ce>
movsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x78(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x80(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x38(%rax)
jmp    1a66 <kernel_dgemv_n_8_lib4+0x966>
cmpl   $0x1,0x10(%rbp)
jne    199f <kernel_dgemv_n_8_lib4+0x89f>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
addsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
addsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
addsd  -0x78(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
addsd  -0x80(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
addsd  -0x98(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
addsd  -0xa0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x38(%rax)
jmp    1a61 <kernel_dgemv_n_8_lib4+0x961>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x68(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
subsd  -0x78(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
subsd  -0x80(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x20(%rax)
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
subsd  -0x90(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x28(%rax)
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
subsd  -0x98(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x30(%rax)
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
subsd  -0xa0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x38(%rax)
jmp    1a66 <kernel_dgemv_n_8_lib4+0x966>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dgemv_n_8_lib4>:
test   %edi,%edi
jle    14fd <kernel_dgemv_n_8_lib4+0x3fd>
shl    $0x2,%edx
movslq %edx,%r10
prefetcht0 (%rsi)
prefetcht0 (%rsi,%r10,8)
prefetcht0 0x40(%rsi)
prefetcht0 0x40(%rsi,%r10,8)
cmp    $0x4,%edi
jb     12da <kernel_dgemv_n_8_lib4+0x1da>
lea    -0x3(%rdi),%r11d
lea    0x0(,%r10,8),%rax
xorpd  %xmm3,%xmm3
xor    %edx,%edx
xorpd  %xmm2,%xmm2
xorpd  %xmm1,%xmm1
xorpd  %xmm0,%xmm0
nopw   0x0(%rax,%rax,1)
prefetcht0 0x80(%rsi)
prefetcht0 0x80(%rsi,%rax,1)
prefetcht0 0xc0(%rsi)
prefetcht0 0xc0(%rsi,%rax,1)
movupd (%rsi),%xmm5
movupd 0x10(%rsi),%xmm4
movupd 0x20(%rsi),%xmm7
movupd 0x30(%rsi),%xmm8
movsd  (%rcx),%xmm6
movsd  0x8(%rcx),%xmm14
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm5
addpd  %xmm3,%xmm5
mulpd  %xmm6,%xmm4
addpd  %xmm2,%xmm4
movupd (%rsi,%rax,1),%xmm2
movupd 0x10(%rsi,%rax,1),%xmm12
movupd 0x20(%rsi,%rax,1),%xmm11
movups 0x30(%rsi,%rax,1),%xmm3
movaps %xmm3,-0x18(%rsp)
mulpd  %xmm6,%xmm2
addpd  %xmm1,%xmm2
mulpd  %xmm6,%xmm12
addpd  %xmm0,%xmm12
unpcklpd %xmm14,%xmm14
movapd %xmm7,%xmm3
mulpd  %xmm14,%xmm3
addpd  %xmm5,%xmm3
movapd %xmm8,%xmm1
mulpd  %xmm14,%xmm1
addpd  %xmm4,%xmm1
mulpd  %xmm14,%xmm11
addpd  %xmm2,%xmm11
movupd 0x40(%rsi),%xmm5
movupd 0x50(%rsi),%xmm7
movupd 0x40(%rsi,%rax,1),%xmm4
movupd 0x50(%rsi,%rax,1),%xmm10
movupd 0x60(%rsi),%xmm9
movupd 0x70(%rsi),%xmm8
movupd 0x60(%rsi,%rax,1),%xmm15
movupd 0x70(%rsi,%rax,1),%xmm13
lea    0x80(%rsi),%rsi
mulpd  -0x18(%rsp),%xmm14
movsd  0x10(%rcx),%xmm0
addpd  %xmm12,%xmm14
movsd  0x18(%rcx),%xmm6
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm5
addpd  %xmm3,%xmm5
mulpd  %xmm0,%xmm7
addpd  %xmm1,%xmm7
mulpd  %xmm0,%xmm4
addpd  %xmm11,%xmm4
mulpd  %xmm0,%xmm10
addpd  %xmm14,%xmm10
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm9
movapd %xmm9,%xmm3
addpd  %xmm5,%xmm3
mulpd  %xmm6,%xmm8
movapd %xmm8,%xmm2
addpd  %xmm7,%xmm2
mulpd  %xmm6,%xmm15
movapd %xmm15,%xmm1
addpd  %xmm4,%xmm1
mulpd  %xmm6,%xmm13
movapd %xmm13,%xmm0
addpd  %xmm10,%xmm0
add    $0x20,%rcx
add    $0x4,%edx
cmp    %r11d,%edx
jl     1150 <kernel_dgemv_n_8_lib4+0x50>
addpd  %xmm10,%xmm13
addpd  %xmm4,%xmm15
addpd  %xmm7,%xmm8
addpd  %xmm5,%xmm9
mov    %edi,%edx
and    $0xfffffffc,%edx
lea    (%rsi,%r10,8),%rax
jmp    12f4 <kernel_dgemv_n_8_lib4+0x1f4>
lea    (%rsi,%r10,8),%rax
xorpd  %xmm9,%xmm9
xor    %edx,%edx
xorpd  %xmm8,%xmm8
xorpd  %xmm15,%xmm15
xorpd  %xmm13,%xmm13
mov    0x8(%rsp),%r10d
cmp    %edi,%edx
jge    13a9 <kernel_dgemv_n_8_lib4+0x2a9>
sub    %edx,%edi
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nop
movapd %xmm13,%xmm5
movapd %xmm15,%xmm4
movapd %xmm8,%xmm1
movapd %xmm9,%xmm10
movupd (%rsi,%rdx,4),%xmm3
movupd 0x10(%rsi,%rdx,4),%xmm2
movsd  (%rcx,%rdx,1),%xmm6
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm3
movapd %xmm3,%xmm9
addpd  %xmm10,%xmm9
mulpd  %xmm6,%xmm2
movapd %xmm2,%xmm8
addpd  %xmm1,%xmm8
movupd (%rax,%rdx,4),%xmm0
movupd 0x10(%rax,%rdx,4),%xmm7
mulpd  %xmm6,%xmm0
movapd %xmm0,%xmm15
addpd  %xmm4,%xmm15
mulpd  %xmm6,%xmm7
movapd %xmm7,%xmm13
addpd  %xmm5,%xmm13
add    $0x8,%rdx
add    $0xffffffff,%edi
jne    1310 <kernel_dgemv_n_8_lib4+0x210>
addpd  %xmm5,%xmm7
addpd  %xmm4,%xmm0
addpd  %xmm1,%xmm2
addpd  %xmm10,%xmm3
movapd %xmm3,%xmm9
movapd %xmm2,%xmm8
movapd %xmm0,%xmm15
movapd %xmm7,%xmm13
cmp    $0x1,%r10d
je     13d9 <kernel_dgemv_n_8_lib4+0x2d9>
test   %r10d,%r10d
jne    145e <kernel_dgemv_n_8_lib4+0x35e>
movupd %xmm9,(%r9)
movupd %xmm8,0x10(%r9)
movupd %xmm15,0x20(%r9)
movlpd %xmm13,0x30(%r9)
unpckhpd %xmm13,%xmm13
jmp    14f7 <kernel_dgemv_n_8_lib4+0x3f7>
movsd  (%r8),%xmm0
addsd  %xmm9,%xmm0
movsd  %xmm0,(%r9)
unpckhpd %xmm9,%xmm9
addsd  0x8(%r8),%xmm9
movsd  %xmm9,0x8(%r9)
movsd  0x10(%r8),%xmm0
addsd  %xmm8,%xmm0
movsd  %xmm0,0x10(%r9)
unpckhpd %xmm8,%xmm8
addsd  0x18(%r8),%xmm8
movsd  %xmm8,0x18(%r9)
movsd  0x20(%r8),%xmm0
addsd  %xmm15,%xmm0
movsd  %xmm0,0x20(%r9)
unpckhpd %xmm15,%xmm15
addsd  0x28(%r8),%xmm15
movsd  %xmm15,0x28(%r9)
movsd  0x30(%r8),%xmm0
addsd  %xmm13,%xmm0
movsd  %xmm0,0x30(%r9)
unpckhpd %xmm13,%xmm13
addsd  0x38(%r8),%xmm13
jmp    14f7 <kernel_dgemv_n_8_lib4+0x3f7>
movsd  (%r8),%xmm0
subsd  %xmm9,%xmm0
movsd  %xmm0,(%r9)
movsd  0x8(%r8),%xmm0
unpckhpd %xmm9,%xmm9
subsd  %xmm9,%xmm0
movsd  %xmm0,0x8(%r9)
movsd  0x10(%r8),%xmm0
subsd  %xmm8,%xmm0
movsd  %xmm0,0x10(%r9)
movsd  0x18(%r8),%xmm0
unpckhpd %xmm8,%xmm8
subsd  %xmm8,%xmm0
movsd  %xmm0,0x18(%r9)
movsd  0x20(%r8),%xmm0
subsd  %xmm15,%xmm0
movsd  %xmm0,0x20(%r9)
movsd  0x28(%r8),%xmm0
unpckhpd %xmm15,%xmm15
subsd  %xmm15,%xmm0
movsd  %xmm0,0x28(%r9)
movsd  0x30(%r8),%xmm0
subsd  %xmm13,%xmm0
movsd  %xmm0,0x30(%r9)
movsd  0x38(%r8),%xmm0
unpckhpd %xmm13,%xmm13
subsd  %xmm13,%xmm0
movapd %xmm0,%xmm13
movsd  %xmm13,0x38(%r9)
ret

LLVM IR (-O0):
define void @kernel_dgemv_n_8_lib4(i32 %0, double* %1, i32 %2, double* %3, double* %4, double* %5, i32 %6) {
%8 = alloca i32
%9 = alloca double*
%10 = alloca i32
%11 = alloca double*
%12 = alloca double*
%13 = alloca double*
%14 = alloca i32
%15 = alloca double*
%16 = alloca i32
%17 = alloca i32
%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
store i32 %0, i32* %8
store double* %1, double** %9
store i32 %2, i32* %10
store double* %3, double** %11
store double* %4, double** %12
store double* %5, double** %13
store i32 %6, i32* %14
%30 = load i32, i32* %8
%31 = icmp sle i32 %30, 0
br i1 %31, label %32, label %33
32: ; preds = %7
br label %494
33: ; preds = %7
%34 = load double*, double** %9
%35 = load i32, i32* %10
%36 = mul nsw i32 4, %35
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds double, double* %34, i64 %37
store double* %38, double** %15
%39 = load double*, double** %9
%40 = bitcast double* %39 to i8*
%41 = load double*, double** %15
%42 = bitcast double* %41 to i8*
%43 = load double*, double** %9
%44 = getelementptr inbounds double, double* %43, i64 8
%45 = bitcast double* %44 to i8*
%46 = load double*, double** %15
%47 = getelementptr inbounds double, double* %46, i64 8
%48 = bitcast double* %47 to i8*
store i32 4, i32* %16
store double 0.000000e+00, double* %22
store double 0.000000e+00, double* %23
store double 0.000000e+00, double* %24
store double 0.000000e+00, double* %25
store double 0.000000e+00, double* %26
store double 0.000000e+00, double* %27
store double 0.000000e+00, double* %28
store double 0.000000e+00, double* %29
store i32 0, i32* %17
br label %49
49: ; preds = %279, %33
%50 = load i32, i32* %17
%51 = load i32, i32* %8
%52 = sub nsw i32 %51, 3
%53 = icmp slt i32 %50, %52
br i1 %53, label %54, label %282
54: ; preds = %49
%55 = load double*, double** %9
%56 = getelementptr inbounds double, double* %55, i64 16
%57 = bitcast double* %56 to i8*
%58 = load double*, double** %15
%59 = getelementptr inbounds double, double* %58, i64 16
%60 = bitcast double* %59 to i8*
%61 = load double*, double** %9
%62 = getelementptr inbounds double, double* %61, i64 16
%63 = getelementptr inbounds double, double* %62, i64 8
%64 = bitcast double* %63 to i8*
%65 = load double*, double** %15
%66 = getelementptr inbounds double, double* %65, i64 16
%67 = getelementptr inbounds double, double* %66, i64 8
%68 = bitcast double* %67 to i8*
%69 = load double*, double** %11
%70 = getelementptr inbounds double, double* %69, i64 0
%71 = load double, double* %70
store double %71, double* %18
%72 = load double*, double** %11
%73 = getelementptr inbounds double, double* %72, i64 1
%74 = load double, double* %73
store double %74, double* %19
%75 = load double*, double** %11
%76 = getelementptr inbounds double, double* %75, i64 2
%77 = load double, double* %76
store double %77, double* %20
%78 = load double*, double** %11
%79 = getelementptr inbounds double, double* %78, i64 3
%80 = load double, double* %79
store double %80, double* %21
%81 = load double*, double** %9
%82 = getelementptr inbounds double, double* %81, i64 0
%83 = load double, double* %82
%84 = load double, double* %18
%85 = load double, double* %22
%86 = call double @llvm.fmuladd.f64(double %83, double %84, double %85)
store double %86, double* %22
%87 = load double*, double** %9
%88 = getelementptr inbounds double, double* %87, i64 1
%89 = load double, double* %88
%90 = load double, double* %18
%91 = load double, double* %23
%92 = call double @llvm.fmuladd.f64(double %89, double %90, double %91)
store double %92, double* %23
%93 = load double*, double** %9
%94 = getelementptr inbounds double, double* %93, i64 2
%95 = load double, double* %94
%96 = load double, double* %18
%97 = load double, double* %24
%98 = call double @llvm.fmuladd.f64(double %95, double %96, double %97)
store double %98, double* %24
%99 = load double*, double** %9
%100 = getelementptr inbounds double, double* %99, i64 3
%101 = load double, double* %100
%102 = load double, double* %18
%103 = load double, double* %25
%104 = call double @llvm.fmuladd.f64(double %101, double %102, double %103)
store double %104, double* %25
%105 = load double*, double** %15
%106 = getelementptr inbounds double, double* %105, i64 0
%107 = load double, double* %106
%108 = load double, double* %18
%109 = load double, double* %26
%110 = call double @llvm.fmuladd.f64(double %107, double %108, double %109)
store double %110, double* %26
%111 = load double*, double** %15
%112 = getelementptr inbounds double, double* %111, i64 1
%113 = load double, double* %112
%114 = load double, double* %18
%115 = load double, double* %27
%116 = call double @llvm.fmuladd.f64(double %113, double %114, double %115)
store double %116, double* %27
%117 = load double*, double** %15
%118 = getelementptr inbounds double, double* %117, i64 2
%119 = load double, double* %118
%120 = load double, double* %18
%121 = load double, double* %28
%122 = call double @llvm.fmuladd.f64(double %119, double %120, double %121)
store double %122, double* %28
%123 = load double*, double** %15
%124 = getelementptr inbounds double, double* %123, i64 3
%125 = load double, double* %124
%126 = load double, double* %18
%127 = load double, double* %29
%128 = call double @llvm.fmuladd.f64(double %125, double %126, double %127)
store double %128, double* %29
%129 = load double*, double** %9
%130 = getelementptr inbounds double, double* %129, i64 4
%131 = load double, double* %130
%132 = load double, double* %19
%133 = load double, double* %22
%134 = call double @llvm.fmuladd.f64(double %131, double %132, double %133)
store double %134, double* %22
%135 = load double*, double** %9
%136 = getelementptr inbounds double, double* %135, i64 5
%137 = load double, double* %136
%138 = load double, double* %19
%139 = load double, double* %23
%140 = call double @llvm.fmuladd.f64(double %137, double %138, double %139)
store double %140, double* %23
%141 = load double*, double** %9
%142 = getelementptr inbounds double, double* %141, i64 6
%143 = load double, double* %142
%144 = load double, double* %19
%145 = load double, double* %24
%146 = call double @llvm.fmuladd.f64(double %143, double %144, double %145)
store double %146, double* %24
%147 = load double*, double** %9
%148 = getelementptr inbounds double, double* %147, i64 7
%149 = load double, double* %148
%150 = load double, double* %19
%151 = load double, double* %25
%152 = call double @llvm.fmuladd.f64(double %149, double %150, double %151)
store double %152, double* %25
%153 = load double*, double** %15
%154 = getelementptr inbounds double, double* %153, i64 4
%155 = load double, double* %154
%156 = load double, double* %19
%157 = load double, double* %26
%158 = call double @llvm.fmuladd.f64(double %155, double %156, double %157)
store double %158, double* %26
%159 = load double*, double** %15
%160 = getelementptr inbounds double, double* %159, i64 5
%161 = load double, double* %160
%162 = load double, double* %19
%163 = load double, double* %27
%164 = call double @llvm.fmuladd.f64(double %161, double %162, double %163)
store double %164, double* %27
%165 = load double*, double** %15
%166 = getelementptr inbounds double, double* %165, i64 6
%167 = load double, double* %166
%168 = load double, double* %19
%169 = load double, double* %28
%170 = call double @llvm.fmuladd.f64(double %167, double %168, double %169)
store double %170, double* %28
%171 = load double*, double** %15
%172 = getelementptr inbounds double, double* %171, i64 7
%173 = load double, double* %172
%174 = load double, double* %19
%175 = load double, double* %29
%176 = call double @llvm.fmuladd.f64(double %173, double %174, double %175)
store double %176, double* %29
%177 = load double*, double** %9
%178 = getelementptr inbounds double, double* %177, i64 8
%179 = load double, double* %178
%180 = load double, double* %20
%181 = load double, double* %22
%182 = call double @llvm.fmuladd.f64(double %179, double %180, double %181)
store double %182, double* %22
%183 = load double*, double** %9
%184 = getelementptr inbounds double, double* %183, i64 9
%185 = load double, double* %184
%186 = load double, double* %20
%187 = load double, double* %23
%188 = call double @llvm.fmuladd.f64(double %185, double %186, double %187)
store double %188, double* %23
%189 = load double*, double** %9
%190 = getelementptr inbounds double, double* %189, i64 10
%191 = load double, double* %190
%192 = load double, double* %20
%193 = load double, double* %24
%194 = call double @llvm.fmuladd.f64(double %191, double %192, double %193)
store double %194, double* %24
%195 = load double*, double** %9
%196 = getelementptr inbounds double, double* %195, i64 11
%197 = load double, double* %196
%198 = load double, double* %20
%199 = load double, double* %25
%200 = call double @llvm.fmuladd.f64(double %197, double %198, double %199)
store double %200, double* %25
%201 = load double*, double** %15
%202 = getelementptr inbounds double, double* %201, i64 8
%203 = load double, double* %202
%204 = load double, double* %20
%205 = load double, double* %26
%206 = call double @llvm.fmuladd.f64(double %203, double %204, double %205)
store double %206, double* %26
%207 = load double*, double** %15
%208 = getelementptr inbounds double, double* %207, i64 9
%209 = load double, double* %208
%210 = load double, double* %20
%211 = load double, double* %27
%212 = call double @llvm.fmuladd.f64(double %209, double %210, double %211)
store double %212, double* %27
%213 = load double*, double** %15
%214 = getelementptr inbounds double, double* %213, i64 10
%215 = load double, double* %214
%216 = load double, double* %20
%217 = load double, double* %28
%218 = call double @llvm.fmuladd.f64(double %215, double %216, double %217)
store double %218, double* %28
%219 = load double*, double** %15
%220 = getelementptr inbounds double, double* %219, i64 11
%221 = load double, double* %220
%222 = load double, double* %20
%223 = load double, double* %29
%224 = call double @llvm.fmuladd.f64(double %221, double %222, double %223)
store double %224, double* %29
%225 = load double*, double** %9
%226 = getelementptr inbounds double, double* %225, i64 12
%227 = load double, double* %226
%228 = load double, double* %21
%229 = load double, double* %22
%230 = call double @llvm.fmuladd.f64(double %227, double %228, double %229)
store double %230, double* %22
%231 = load double*, double** %9
%232 = getelementptr inbounds double, double* %231, i64 13
%233 = load double, double* %232
%234 = load double, double* %21
%235 = load double, double* %23
%236 = call double @llvm.fmuladd.f64(double %233, double %234, double %235)
store double %236, double* %23
%237 = load double*, double** %9
%238 = getelementptr inbounds double, double* %237, i64 14
%239 = load double, double* %238
%240 = load double, double* %21
%241 = load double, double* %24
%242 = call double @llvm.fmuladd.f64(double %239, double %240, double %241)
store double %242, double* %24
%243 = load double*, double** %9
%244 = getelementptr inbounds double, double* %243, i64 15
%245 = load double, double* %244
%246 = load double, double* %21
%247 = load double, double* %25
%248 = call double @llvm.fmuladd.f64(double %245, double %246, double %247)
store double %248, double* %25
%249 = load double*, double** %15
%250 = getelementptr inbounds double, double* %249, i64 12
%251 = load double, double* %250
%252 = load double, double* %21
%253 = load double, double* %26
%254 = call double @llvm.fmuladd.f64(double %251, double %252, double %253)
store double %254, double* %26
%255 = load double*, double** %15
%256 = getelementptr inbounds double, double* %255, i64 13
%257 = load double, double* %256
%258 = load double, double* %21
%259 = load double, double* %27
%260 = call double @llvm.fmuladd.f64(double %257, double %258, double %259)
store double %260, double* %27
%261 = load double*, double** %15
%262 = getelementptr inbounds double, double* %261, i64 14
%263 = load double, double* %262
%264 = load double, double* %21
%265 = load double, double* %28
%266 = call double @llvm.fmuladd.f64(double %263, double %264, double %265)
store double %266, double* %28
%267 = load double*, double** %15
%268 = getelementptr inbounds double, double* %267, i64 15
%269 = load double, double* %268
%270 = load double, double* %21
%271 = load double, double* %29
%272 = call double @llvm.fmuladd.f64(double %269, double %270, double %271)
store double %272, double* %29
%273 = load double*, double** %9
%274 = getelementptr inbounds double, double* %273, i64 16
store double* %274, double** %9
%275 = load double*, double** %15
%276 = getelementptr inbounds double, double* %275, i64 16
store double* %276, double** %15
%277 = load double*, double** %11
%278 = getelementptr inbounds double, double* %277, i64 4
store double* %278, double** %11
br label %279
279: ; preds = %54
%280 = load i32, i32* %17
%281 = add nsw i32 %280, 4
store i32 %281, i32* %17
br label %49
282: ; preds = %49
br label %283
283: ; preds = %345, %282
%284 = load i32, i32* %17
%285 = load i32, i32* %8
%286 = icmp slt i32 %284, %285
br i1 %286, label %287, label %348
287: ; preds = %283
%288 = load double*, double** %11
%289 = getelementptr inbounds double, double* %288, i64 0
%290 = load double, double* %289
store double %290, double* %18
%291 = load double*, double** %9
%292 = getelementptr inbounds double, double* %291, i64 0
%293 = load double, double* %292
%294 = load double, double* %18
%295 = load double, double* %22
%296 = call double @llvm.fmuladd.f64(double %293, double %294, double %295)
store double %296, double* %22
%297 = load double*, double** %9
%298 = getelementptr inbounds double, double* %297, i64 1
%299 = load double, double* %298
%300 = load double, double* %18
%301 = load double, double* %23
%302 = call double @llvm.fmuladd.f64(double %299, double %300, double %301)
store double %302, double* %23
%303 = load double*, double** %9
%304 = getelementptr inbounds double, double* %303, i64 2
%305 = load double, double* %304
%306 = load double, double* %18
%307 = load double, double* %24
%308 = call double @llvm.fmuladd.f64(double %305, double %306, double %307)
store double %308, double* %24
%309 = load double*, double** %9
%310 = getelementptr inbounds double, double* %309, i64 3
%311 = load double, double* %310
%312 = load double, double* %18
%313 = load double, double* %25
%314 = call double @llvm.fmuladd.f64(double %311, double %312, double %313)
store double %314, double* %25
%315 = load double*, double** %15
%316 = getelementptr inbounds double, double* %315, i64 0
%317 = load double, double* %316
%318 = load double, double* %18
%319 = load double, double* %26
%320 = call double @llvm.fmuladd.f64(double %317, double %318, double %319)
store double %320, double* %26
%321 = load double*, double** %15
%322 = getelementptr inbounds double, double* %321, i64 1
%323 = load double, double* %322
%324 = load double, double* %18
%325 = load double, double* %27
%326 = call double @llvm.fmuladd.f64(double %323, double %324, double %325)
store double %326, double* %27
%327 = load double*, double** %15
%328 = getelementptr inbounds double, double* %327, i64 2
%329 = load double, double* %328
%330 = load double, double* %18
%331 = load double, double* %28
%332 = call double @llvm.fmuladd.f64(double %329, double %330, double %331)
store double %332, double* %28
%333 = load double*, double** %15
%334 = getelementptr inbounds double, double* %333, i64 3
%335 = load double, double* %334
%336 = load double, double* %18
%337 = load double, double* %29
%338 = call double @llvm.fmuladd.f64(double %335, double %336, double %337)
store double %338, double* %29
%339 = load double*, double** %9
%340 = getelementptr inbounds double, double* %339, i64 4
store double* %340, double** %9
%341 = load double*, double** %15
%342 = getelementptr inbounds double, double* %341, i64 4
store double* %342, double** %15
%343 = load double*, double** %11
%344 = getelementptr inbounds double, double* %343, i64 1
store double* %344, double** %11
br label %345
345: ; preds = %287
%346 = load i32, i32* %17
%347 = add nsw i32 %346, 1
store i32 %347, i32* %17
br label %283
348: ; preds = %283
%349 = load i32, i32* %14
%350 = icmp eq i32 %349, 0
br i1 %350, label %351, label %376
351: ; preds = %348
%352 = load double, double* %22
%353 = load double*, double** %13
%354 = getelementptr inbounds double, double* %353, i64 0
store double %352, double* %354
%355 = load double, double* %23
%356 = load double*, double** %13
%357 = getelementptr inbounds double, double* %356, i64 1
store double %355, double* %357
%358 = load double, double* %24
%359 = load double*, double** %13
%360 = getelementptr inbounds double, double* %359, i64 2
store double %358, double* %360
%361 = load double, double* %25
%362 = load double*, double** %13
%363 = getelementptr inbounds double, double* %362, i64 3
store double %361, double* %363
%364 = load double, double* %26
%365 = load double*, double** %13
%366 = getelementptr inbounds double, double* %365, i64 4
store double %364, double* %366
%367 = load double, double* %27
%368 = load double*, double** %13
%369 = getelementptr inbounds double, double* %368, i64 5
store double %367, double* %369
%370 = load double, double* %28
%371 = load double*, double** %13
%372 = getelementptr inbounds double, double* %371, i64 6
store double %370, double* %372
%373 = load double, double* %29
%374 = load double*, double** %13
%375 = getelementptr inbounds double, double* %374, i64 7
store double %373, double* %375
br label %494
376: ; preds = %348
%377 = load i32, i32* %14
%378 = icmp eq i32 %377, 1
br i1 %378, label %379, label %436
379: ; preds = %376
%380 = load double*, double** %12
%381 = getelementptr inbounds double, double* %380, i64 0
%382 = load double, double* %381
%383 = load double, double* %22
%384 = fadd double %382, %383
%385 = load double*, double** %13
%386 = getelementptr inbounds double, double* %385, i64 0
store double %384, double* %386
%387 = load double*, double** %12
%388 = getelementptr inbounds double, double* %387, i64 1
%389 = load double, double* %388
%390 = load double, double* %23
%391 = fadd double %389, %390
%392 = load double*, double** %13
%393 = getelementptr inbounds double, double* %392, i64 1
store double %391, double* %393
%394 = load double*, double** %12
%395 = getelementptr inbounds double, double* %394, i64 2
%396 = load double, double* %395
%397 = load double, double* %24
%398 = fadd double %396, %397
%399 = load double*, double** %13
%400 = getelementptr inbounds double, double* %399, i64 2
store double %398, double* %400
%401 = load double*, double** %12
%402 = getelementptr inbounds double, double* %401, i64 3
%403 = load double, double* %402
%404 = load double, double* %25
%405 = fadd double %403, %404
%406 = load double*, double** %13
%407 = getelementptr inbounds double, double* %406, i64 3
store double %405, double* %407
%408 = load double*, double** %12
%409 = getelementptr inbounds double, double* %408, i64 4
%410 = load double, double* %409
%411 = load double, double* %26
%412 = fadd double %410, %411
%413 = load double*, double** %13
%414 = getelementptr inbounds double, double* %413, i64 4
store double %412, double* %414
%415 = load double*, double** %12
%416 = getelementptr inbounds double, double* %415, i64 5
%417 = load double, double* %416
%418 = load double, double* %27
%419 = fadd double %417, %418
%420 = load double*, double** %13
%421 = getelementptr inbounds double, double* %420, i64 5
store double %419, double* %421
%422 = load double*, double** %12
%423 = getelementptr inbounds double, double* %422, i64 6
%424 = load double, double* %423
%425 = load double, double* %28
%426 = fadd double %424, %425
%427 = load double*, double** %13
%428 = getelementptr inbounds double, double* %427, i64 6
store double %426, double* %428
%429 = load double*, double** %12
%430 = getelementptr inbounds double, double* %429, i64 7
%431 = load double, double* %430
%432 = load double, double* %29
%433 = fadd double %431, %432
%434 = load double*, double** %13
%435 = getelementptr inbounds double, double* %434, i64 7
store double %433, double* %435
br label %493
436: ; preds = %376
%437 = load double*, double** %12
%438 = getelementptr inbounds double, double* %437, i64 0
%439 = load double, double* %438
%440 = load double, double* %22
%441 = fsub double %439, %440
%442 = load double*, double** %13
%443 = getelementptr inbounds double, double* %442, i64 0
store double %441, double* %443
%444 = load double*, double** %12
%445 = getelementptr inbounds double, double* %444, i64 1
%446 = load double, double* %445
%447 = load double, double* %23
%448 = fsub double %446, %447
%449 = load double*, double** %13
%450 = getelementptr inbounds double, double* %449, i64 1
store double %448, double* %450
%451 = load double*, double** %12
%452 = getelementptr inbounds double, double* %451, i64 2
%453 = load double, double* %452
%454 = load double, double* %24
%455 = fsub double %453, %454
%456 = load double*, double** %13
%457 = getelementptr inbounds double, double* %456, i64 2
store double %455, double* %457
%458 = load double*, double** %12
%459 = getelementptr inbounds double, double* %458, i64 3
%460 = load double, double* %459
%461 = load double, double* %25
%462 = fsub double %460, %461
%463 = load double*, double** %13
%464 = getelementptr inbounds double, double* %463, i64 3
store double %462, double* %464
%465 = load double*, double** %12
%466 = getelementptr inbounds double, double* %465, i64 4
%467 = load double, double* %466
%468 = load double, double* %26
%469 = fsub double %467, %468
%470 = load double*, double** %13
%471 = getelementptr inbounds double, double* %470, i64 4
store double %469, double* %471
%472 = load double*, double** %12
%473 = getelementptr inbounds double, double* %472, i64 5
%474 = load double, double* %473
%475 = load double, double* %27
%476 = fsub double %474, %475
%477 = load double*, double** %13
%478 = getelementptr inbounds double, double* %477, i64 5
store double %476, double* %478
%479 = load double*, double** %12
%480 = getelementptr inbounds double, double* %479, i64 6
%481 = load double, double* %480
%482 = load double, double* %28
%483 = fsub double %481, %482
%484 = load double*, double** %13
%485 = getelementptr inbounds double, double* %484, i64 6
store double %483, double* %485
%486 = load double*, double** %12
%487 = getelementptr inbounds double, double* %486, i64 7
%488 = load double, double* %487
%489 = load double, double* %29
%490 = fsub double %488, %489
%491 = load double*, double** %13
%492 = getelementptr inbounds double, double* %491, i64 7
store double %490, double* %492
br label %493
493: ; preds = %436, %379
br label %494
494: ; preds = %32, %493, %351
ret void
}

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