void kernel_dgemv_t_8_lib4(int kmax, double *A, int sda, double *x, double *y,
                           double *z, int alg) {
  if (kmax <= 0)
    return;
  const int lda = 4;
  const int bs = 4;
  int k, ka = kmax;
  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;
  __builtin_prefetch(A);
  __builtin_prefetch(A + 8);
  __builtin_prefetch(A + 16);
  __builtin_prefetch(A + 24);
  k = 0;
  for (; k < ka - bs + 1; k += bs) {
    __builtin_prefetch(A + sda * bs);
    __builtin_prefetch(A + sda * bs + 8);
    __builtin_prefetch(A + sda * bs + 16);
    __builtin_prefetch(A + sda * bs + 24);
    x_0 = x[0];
    x_1 = x[1];
    x_2 = x[2];
    x_3 = x[3];
    y_0 += A[0 + lda * 0] * x_0;
    y_1 += A[0 + lda * 1] * x_0;
    y_2 += A[0 + lda * 2] * x_0;
    y_3 += A[0 + lda * 3] * x_0;
    y_4 += A[0 + lda * 4] * x_0;
    y_5 += A[0 + lda * 5] * x_0;
    y_6 += A[0 + lda * 6] * x_0;
    y_7 += A[0 + lda * 7] * x_0;
    y_0 += A[1 + lda * 0] * x_1;
    y_1 += A[1 + lda * 1] * x_1;
    y_2 += A[1 + lda * 2] * x_1;
    y_3 += A[1 + lda * 3] * x_1;
    y_4 += A[1 + lda * 4] * x_1;
    y_5 += A[1 + lda * 5] * x_1;
    y_6 += A[1 + lda * 6] * x_1;
    y_7 += A[1 + lda * 7] * x_1;
    y_0 += A[2 + lda * 0] * x_2;
    y_1 += A[2 + lda * 1] * x_2;
    y_2 += A[2 + lda * 2] * x_2;
    y_3 += A[2 + lda * 3] * x_2;
    y_4 += A[2 + lda * 4] * x_2;
    y_5 += A[2 + lda * 5] * x_2;
    y_6 += A[2 + lda * 6] * x_2;
    y_7 += A[2 + lda * 7] * x_2;
    y_0 += A[3 + lda * 0] * x_3;
    y_1 += A[3 + lda * 1] * x_3;
    y_2 += A[3 + lda * 2] * x_3;
    y_3 += A[3 + lda * 3] * x_3;
    y_4 += A[3 + lda * 4] * x_3;
    y_5 += A[3 + lda * 5] * x_3;
    y_6 += A[3 + lda * 6] * x_3;
    y_7 += A[3 + lda * 7] * x_3;
    A += sda * bs;
    x += 4;
  }
  for (; k < ka; k++) {
    x_0 = x[0];
    y_0 += A[0 + lda * 0] * x_0;
    y_1 += A[0 + lda * 1] * x_0;
    y_2 += A[0 + lda * 2] * x_0;
    y_3 += A[0 + lda * 3] * x_0;
    y_4 += A[0 + lda * 4] * x_0;
    y_5 += A[0 + lda * 5] * x_0;
    y_6 += A[0 + lda * 6] * x_0;
    y_7 += A[0 + lda * 7] * x_0;
    A += 1;
    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_t_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_t_8_lib4+0x30>
jmp    1ac4 <kernel_dgemv_t_8_lib4+0x9c4>
movl   $0x4,-0x34(%rbp)
movl   $0x4,-0x38(%rbp)
mov    -0x4(%rbp),%eax
mov    %eax,-0x40(%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
mov    -0x10(%rbp),%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0xc0,%rax
prefetcht0 (%rax)
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    -0x40(%rbp),%ecx
sub    $0x4,%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    173b <kernel_dgemv_t_8_lib4+0x63b>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xc0,%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  0x20(%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  0x40(%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  0x60(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x80(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xa0(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xc0(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xe0(%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  0x8(%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  0x48(%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  0x68(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x88(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xa8(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xc8(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xe8(%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  0x10(%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  0x30(%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  0x70(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x90(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xb0(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xd0(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xf0(%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  0x18(%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  0x38(%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  0x58(%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    -0x10(%rbp),%rax
movsd  0x98(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xb8(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xd8(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xf8(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x3c(%rbp)
jmp    11c3 <kernel_dgemv_t_8_lib4+0xc3>
jmp    1740 <kernel_dgemv_t_8_lib4+0x640>
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    18a2 <kernel_dgemv_t_8_lib4+0x7a2>
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  0x20(%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  0x40(%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  0x60(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x80(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xa0(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xc0(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xe0(%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    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1740 <kernel_dgemv_t_8_lib4+0x640>
cmpl   $0x0,0x10(%rbp)
jne    192c <kernel_dgemv_t_8_lib4+0x82c>
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    1ac4 <kernel_dgemv_t_8_lib4+0x9c4>
cmpl   $0x1,0x10(%rbp)
jne    19fd <kernel_dgemv_t_8_lib4+0x8fd>
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    1abf <kernel_dgemv_t_8_lib4+0x9bf>
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    1ac4 <kernel_dgemv_t_8_lib4+0x9c4>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dgemv_t_8_lib4>:
test   %edi,%edi
jle    1577 <kernel_dgemv_t_8_lib4+0x477>
prefetcht0 (%rsi)
prefetcht0 0x40(%rsi)
prefetcht0 0x80(%rsi)
prefetcht0 0xc0(%rsi)
cmp    $0x4,%edi
jb     1343 <kernel_dgemv_t_8_lib4+0x243>
lea    -0x3(%rdi),%r10d
shl    $0x2,%edx
movslq %edx,%r11
lea    0xc0(,%r11,8),%rax
shl    $0x3,%r11
xorpd  %xmm10,%xmm10
xor    %edx,%edx
xorpd  %xmm11,%xmm11
xorpd  %xmm12,%xmm12
xorpd  %xmm6,%xmm6
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
prefetcht0 -0xc0(%rsi,%rax,1)
ff
prefetcht0 -0x80(%rsi,%rax,1)
prefetcht0 -0x40(%rsi,%rax,1)
prefetcht0 (%rsi,%rax,1)
movsd  (%rsi),%xmm3
movsd  0x8(%rsi),%xmm14
movsd  0x10(%rsi),%xmm4
movsd  0x18(%rsi),%xmm9
movhpd 0x20(%rsi),%xmm3
movsd  (%rcx),%xmm2
movsd  0x8(%rcx),%xmm0
movsd  0x10(%rcx),%xmm13
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm3
addpd  %xmm10,%xmm3
movsd  0x40(%rsi),%xmm5
movhpd 0x60(%rsi),%xmm5
mulpd  %xmm2,%xmm5
addpd  %xmm11,%xmm5
movsd  0x80(%rsi),%xmm7
movhpd 0xa0(%rsi),%xmm7
movsd  0x18(%rcx),%xmm8
mulpd  %xmm2,%xmm7
addpd  %xmm12,%xmm7
movsd  0xc0(%rsi),%xmm1
movhpd 0xe0(%rsi),%xmm1
mulpd  %xmm2,%xmm1
addpd  %xmm6,%xmm1
movhpd 0x28(%rsi),%xmm14
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm14
addpd  %xmm3,%xmm14
movsd  0x48(%rsi),%xmm3
movhpd 0x68(%rsi),%xmm3
mulpd  %xmm0,%xmm3
movsd  0x88(%rsi),%xmm6
movhpd 0xa8(%rsi),%xmm6
addpd  %xmm5,%xmm3
mulpd  %xmm0,%xmm6
addpd  %xmm7,%xmm6
movsd  0xc8(%rsi),%xmm2
movhpd 0xe8(%rsi),%xmm2
mulpd  %xmm0,%xmm2
addpd  %xmm1,%xmm2
movhpd 0x30(%rsi),%xmm4
unpcklpd %xmm13,%xmm13
mulpd  %xmm13,%xmm4
addpd  %xmm14,%xmm4
movsd  0x50(%rsi),%xmm7
movhpd 0x70(%rsi),%xmm7
mulpd  %xmm13,%xmm7
movsd  0x90(%rsi),%xmm5
movhpd 0xb0(%rsi),%xmm5
addpd  %xmm3,%xmm7
mulpd  %xmm13,%xmm5
addpd  %xmm6,%xmm5
movsd  0xd0(%rsi),%xmm0
movhpd 0xf0(%rsi),%xmm0
mulpd  %xmm13,%xmm0
addpd  %xmm2,%xmm0
movhpd 0x38(%rsi),%xmm9
unpcklpd %xmm8,%xmm8
mulpd  %xmm8,%xmm9
movapd %xmm9,%xmm10
addpd  %xmm4,%xmm10
movsd  0x58(%rsi),%xmm3
movhpd 0x78(%rsi),%xmm3
mulpd  %xmm8,%xmm3
movapd %xmm3,%xmm11
movsd  0x98(%rsi),%xmm2
movhpd 0xb8(%rsi),%xmm2
addpd  %xmm7,%xmm11
mulpd  %xmm8,%xmm2
movapd %xmm2,%xmm12
addpd  %xmm5,%xmm12
movsd  0xd8(%rsi),%xmm13
movhpd 0xf8(%rsi),%xmm13
mulpd  %xmm8,%xmm13
movapd %xmm13,%xmm6
addpd  %xmm0,%xmm6
add    $0x20,%rcx
add    $0x4,%edx
add    %r11,%rsi
cmp    %r10d,%edx
jl     1160 <kernel_dgemv_t_8_lib4+0x60>
addpd  %xmm0,%xmm13
addpd  %xmm5,%xmm2
addpd  %xmm7,%xmm3
addpd  %xmm4,%xmm9
mov    %edi,%edx
and    $0xfffffffc,%edx
jmp    1357 <kernel_dgemv_t_8_lib4+0x257>
xorpd  %xmm9,%xmm9
xor    %edx,%edx
xorpd  %xmm3,%xmm3
xorpd  %xmm2,%xmm2
xorpd  %xmm13,%xmm13
mov    0x8(%rsp),%eax
cmp    %edi,%edx
jge    142f <kernel_dgemv_t_8_lib4+0x32f>
sub    %edx,%edi
xor    %edx,%edx
nopw   0x0(%rax,%rax,1)
movapd %xmm13,%xmm4
movapd %xmm2,%xmm11
movapd %xmm3,%xmm10
movapd %xmm9,%xmm8
movsd  (%rsi,%rdx,8),%xmm5
movsd  0x40(%rsi,%rdx,8),%xmm6
movsd  0x80(%rsi,%rdx,8),%xmm7
movsd  0xc0(%rsi,%rdx,8),%xmm1
movhpd 0x20(%rsi,%rdx,8),%xmm5
movsd  (%rcx,%rdx,8),%xmm0
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm5
movapd %xmm5,%xmm9
addpd  %xmm8,%xmm9
movhpd 0x60(%rsi,%rdx,8),%xmm6
mulpd  %xmm0,%xmm6
movapd %xmm6,%xmm3
addpd  %xmm10,%xmm3
movhpd 0xa0(%rsi,%rdx,8),%xmm7
mulpd  %xmm0,%xmm7
movapd %xmm7,%xmm2
addpd  %xmm11,%xmm2
movhpd 0xe0(%rsi,%rdx,8),%xmm1
mulpd  %xmm0,%xmm1
movapd %xmm1,%xmm13
addpd  %xmm4,%xmm13
add    $0x1,%rdx
cmp    %edx,%edi
jne    1370 <kernel_dgemv_t_8_lib4+0x270>
addpd  %xmm4,%xmm1
addpd  %xmm11,%xmm7
addpd  %xmm10,%xmm6
addpd  %xmm8,%xmm5
movapd %xmm5,%xmm9
movapd %xmm6,%xmm3
movapd %xmm7,%xmm2
movapd %xmm1,%xmm13
cmp    $0x1,%eax
je     145d <kernel_dgemv_t_8_lib4+0x35d>
test   %eax,%eax
jne    14de <kernel_dgemv_t_8_lib4+0x3de>
movupd %xmm9,(%r9)
movupd %xmm3,0x10(%r9)
movupd %xmm2,0x20(%r9)
movlpd %xmm13,0x30(%r9)
unpckhpd %xmm13,%xmm13
jmp    1571 <kernel_dgemv_t_8_lib4+0x471>
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  %xmm3,%xmm0
movsd  %xmm0,0x10(%r9)
unpckhpd %xmm3,%xmm3
addsd  0x18(%r8),%xmm3
movsd  %xmm3,0x18(%r9)
movsd  0x20(%r8),%xmm0
addsd  %xmm2,%xmm0
movsd  %xmm0,0x20(%r9)
unpckhpd %xmm2,%xmm2
addsd  0x28(%r8),%xmm2
movsd  %xmm2,0x28(%r9)
movsd  0x30(%r8),%xmm0
addsd  %xmm13,%xmm0
movsd  %xmm0,0x30(%r9)
unpckhpd %xmm13,%xmm13
addsd  0x38(%r8),%xmm13
jmp    1571 <kernel_dgemv_t_8_lib4+0x471>
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  %xmm3,%xmm0
movsd  %xmm0,0x10(%r9)
movsd  0x18(%r8),%xmm0
unpckhpd %xmm3,%xmm3
subsd  %xmm3,%xmm0
movsd  %xmm0,0x18(%r9)
movsd  0x20(%r8),%xmm0
subsd  %xmm2,%xmm0
movsd  %xmm0,0x20(%r9)
movsd  0x28(%r8),%xmm0
unpckhpd %xmm2,%xmm2
subsd  %xmm2,%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_t_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 i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%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
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
%31 = load i32, i32* %8
%32 = icmp sle i32 %31, 0
br i1 %32, label %33, label %34
33: ; preds = %7
br label %505
34: ; preds = %7
store i32 4, i32* %15
store i32 4, i32* %16
%35 = load i32, i32* %8
store i32 %35, i32* %18
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 double 0.000000e+00, double* %30
%36 = load double*, double** %9
%37 = bitcast double* %36 to i8*
%38 = load double*, double** %9
%39 = getelementptr inbounds double, double* %38, i64 8
%40 = bitcast double* %39 to i8*
%41 = load double*, double** %9
%42 = getelementptr inbounds double, double* %41, i64 16
%43 = bitcast double* %42 to i8*
%44 = load double*, double** %9
%45 = getelementptr inbounds double, double* %44, i64 24
%46 = bitcast double* %45 to i8*
store i32 0, i32* %17
br label %47
47: ; preds = %292, %34
%48 = load i32, i32* %17
%49 = load i32, i32* %18
%50 = sub nsw i32 %49, 4
%51 = add nsw i32 %50, 1
%52 = icmp slt i32 %48, %51
br i1 %52, label %53, label %295
53: ; preds = %47
%54 = load double*, double** %9
%55 = load i32, i32* %10
%56 = mul nsw i32 %55, 4
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds double, double* %54, i64 %57
%59 = bitcast double* %58 to i8*
%60 = load double*, double** %9
%61 = load i32, i32* %10
%62 = mul nsw i32 %61, 4
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds double, double* %60, i64 %63
%65 = getelementptr inbounds double, double* %64, i64 8
%66 = bitcast double* %65 to i8*
%67 = load double*, double** %9
%68 = load i32, i32* %10
%69 = mul nsw i32 %68, 4
%70 = sext i32 %69 to i64
%71 = getelementptr inbounds double, double* %67, i64 %70
%72 = getelementptr inbounds double, double* %71, i64 16
%73 = bitcast double* %72 to i8*
%74 = load double*, double** %9
%75 = load i32, i32* %10
%76 = mul nsw i32 %75, 4
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds double, double* %74, i64 %77
%79 = getelementptr inbounds double, double* %78, i64 24
%80 = bitcast double* %79 to i8*
%81 = load double*, double** %11
%82 = getelementptr inbounds double, double* %81, i64 0
%83 = load double, double* %82
store double %83, double* %19
%84 = load double*, double** %11
%85 = getelementptr inbounds double, double* %84, i64 1
%86 = load double, double* %85
store double %86, double* %20
%87 = load double*, double** %11
%88 = getelementptr inbounds double, double* %87, i64 2
%89 = load double, double* %88
store double %89, double* %21
%90 = load double*, double** %11
%91 = getelementptr inbounds double, double* %90, i64 3
%92 = load double, double* %91
store double %92, double* %22
%93 = load double*, double** %9
%94 = getelementptr inbounds double, double* %93, i64 0
%95 = load double, double* %94
%96 = load double, double* %19
%97 = load double, double* %23
%98 = call double @llvm.fmuladd.f64(double %95, double %96, double %97)
store double %98, double* %23
%99 = load double*, double** %9
%100 = getelementptr inbounds double, double* %99, i64 4
%101 = load double, double* %100
%102 = load double, double* %19
%103 = load double, double* %24
%104 = call double @llvm.fmuladd.f64(double %101, double %102, double %103)
store double %104, double* %24
%105 = load double*, double** %9
%106 = getelementptr inbounds double, double* %105, i64 8
%107 = load double, double* %106
%108 = load double, double* %19
%109 = load double, double* %25
%110 = call double @llvm.fmuladd.f64(double %107, double %108, double %109)
store double %110, double* %25
%111 = load double*, double** %9
%112 = getelementptr inbounds double, double* %111, i64 12
%113 = load double, double* %112
%114 = load double, double* %19
%115 = load double, double* %26
%116 = call double @llvm.fmuladd.f64(double %113, double %114, double %115)
store double %116, double* %26
%117 = load double*, double** %9
%118 = getelementptr inbounds double, double* %117, i64 16
%119 = load double, double* %118
%120 = load double, double* %19
%121 = load double, double* %27
%122 = call double @llvm.fmuladd.f64(double %119, double %120, double %121)
store double %122, double* %27
%123 = load double*, double** %9
%124 = getelementptr inbounds double, double* %123, i64 20
%125 = load double, double* %124
%126 = load double, double* %19
%127 = load double, double* %28
%128 = call double @llvm.fmuladd.f64(double %125, double %126, double %127)
store double %128, double* %28
%129 = load double*, double** %9
%130 = getelementptr inbounds double, double* %129, i64 24
%131 = load double, double* %130
%132 = load double, double* %19
%133 = load double, double* %29
%134 = call double @llvm.fmuladd.f64(double %131, double %132, double %133)
store double %134, double* %29
%135 = load double*, double** %9
%136 = getelementptr inbounds double, double* %135, i64 28
%137 = load double, double* %136
%138 = load double, double* %19
%139 = load double, double* %30
%140 = call double @llvm.fmuladd.f64(double %137, double %138, double %139)
store double %140, double* %30
%141 = load double*, double** %9
%142 = getelementptr inbounds double, double* %141, i64 1
%143 = load double, double* %142
%144 = load double, double* %20
%145 = load double, double* %23
%146 = call double @llvm.fmuladd.f64(double %143, double %144, double %145)
store double %146, double* %23
%147 = load double*, double** %9
%148 = getelementptr inbounds double, double* %147, i64 5
%149 = load double, double* %148
%150 = load double, double* %20
%151 = load double, double* %24
%152 = call double @llvm.fmuladd.f64(double %149, double %150, double %151)
store double %152, double* %24
%153 = load double*, double** %9
%154 = getelementptr inbounds double, double* %153, i64 9
%155 = load double, double* %154
%156 = load double, double* %20
%157 = load double, double* %25
%158 = call double @llvm.fmuladd.f64(double %155, double %156, double %157)
store double %158, double* %25
%159 = load double*, double** %9
%160 = getelementptr inbounds double, double* %159, i64 13
%161 = load double, double* %160
%162 = load double, double* %20
%163 = load double, double* %26
%164 = call double @llvm.fmuladd.f64(double %161, double %162, double %163)
store double %164, double* %26
%165 = load double*, double** %9
%166 = getelementptr inbounds double, double* %165, i64 17
%167 = load double, double* %166
%168 = load double, double* %20
%169 = load double, double* %27
%170 = call double @llvm.fmuladd.f64(double %167, double %168, double %169)
store double %170, double* %27
%171 = load double*, double** %9
%172 = getelementptr inbounds double, double* %171, i64 21
%173 = load double, double* %172
%174 = load double, double* %20
%175 = load double, double* %28
%176 = call double @llvm.fmuladd.f64(double %173, double %174, double %175)
store double %176, double* %28
%177 = load double*, double** %9
%178 = getelementptr inbounds double, double* %177, i64 25
%179 = load double, double* %178
%180 = load double, double* %20
%181 = load double, double* %29
%182 = call double @llvm.fmuladd.f64(double %179, double %180, double %181)
store double %182, double* %29
%183 = load double*, double** %9
%184 = getelementptr inbounds double, double* %183, i64 29
%185 = load double, double* %184
%186 = load double, double* %20
%187 = load double, double* %30
%188 = call double @llvm.fmuladd.f64(double %185, double %186, double %187)
store double %188, double* %30
%189 = load double*, double** %9
%190 = getelementptr inbounds double, double* %189, i64 2
%191 = load double, double* %190
%192 = load double, double* %21
%193 = load double, double* %23
%194 = call double @llvm.fmuladd.f64(double %191, double %192, double %193)
store double %194, double* %23
%195 = load double*, double** %9
%196 = getelementptr inbounds double, double* %195, i64 6
%197 = load double, double* %196
%198 = load double, double* %21
%199 = load double, double* %24
%200 = call double @llvm.fmuladd.f64(double %197, double %198, double %199)
store double %200, double* %24
%201 = load double*, double** %9
%202 = getelementptr inbounds double, double* %201, i64 10
%203 = load double, double* %202
%204 = load double, double* %21
%205 = load double, double* %25
%206 = call double @llvm.fmuladd.f64(double %203, double %204, double %205)
store double %206, double* %25
%207 = load double*, double** %9
%208 = getelementptr inbounds double, double* %207, i64 14
%209 = load double, double* %208
%210 = load double, double* %21
%211 = load double, double* %26
%212 = call double @llvm.fmuladd.f64(double %209, double %210, double %211)
store double %212, double* %26
%213 = load double*, double** %9
%214 = getelementptr inbounds double, double* %213, i64 18
%215 = load double, double* %214
%216 = load double, double* %21
%217 = load double, double* %27
%218 = call double @llvm.fmuladd.f64(double %215, double %216, double %217)
store double %218, double* %27
%219 = load double*, double** %9
%220 = getelementptr inbounds double, double* %219, i64 22
%221 = load double, double* %220
%222 = load double, double* %21
%223 = load double, double* %28
%224 = call double @llvm.fmuladd.f64(double %221, double %222, double %223)
store double %224, double* %28
%225 = load double*, double** %9
%226 = getelementptr inbounds double, double* %225, i64 26
%227 = load double, double* %226
%228 = load double, double* %21
%229 = load double, double* %29
%230 = call double @llvm.fmuladd.f64(double %227, double %228, double %229)
store double %230, double* %29
%231 = load double*, double** %9
%232 = getelementptr inbounds double, double* %231, i64 30
%233 = load double, double* %232
%234 = load double, double* %21
%235 = load double, double* %30
%236 = call double @llvm.fmuladd.f64(double %233, double %234, double %235)
store double %236, double* %30
%237 = load double*, double** %9
%238 = getelementptr inbounds double, double* %237, i64 3
%239 = load double, double* %238
%240 = load double, double* %22
%241 = load double, double* %23
%242 = call double @llvm.fmuladd.f64(double %239, double %240, double %241)
store double %242, double* %23
%243 = load double*, double** %9
%244 = getelementptr inbounds double, double* %243, i64 7
%245 = load double, double* %244
%246 = load double, double* %22
%247 = load double, double* %24
%248 = call double @llvm.fmuladd.f64(double %245, double %246, double %247)
store double %248, double* %24
%249 = load double*, double** %9
%250 = getelementptr inbounds double, double* %249, i64 11
%251 = load double, double* %250
%252 = load double, double* %22
%253 = load double, double* %25
%254 = call double @llvm.fmuladd.f64(double %251, double %252, double %253)
store double %254, double* %25
%255 = load double*, double** %9
%256 = getelementptr inbounds double, double* %255, i64 15
%257 = load double, double* %256
%258 = load double, double* %22
%259 = load double, double* %26
%260 = call double @llvm.fmuladd.f64(double %257, double %258, double %259)
store double %260, double* %26
%261 = load double*, double** %9
%262 = getelementptr inbounds double, double* %261, i64 19
%263 = load double, double* %262
%264 = load double, double* %22
%265 = load double, double* %27
%266 = call double @llvm.fmuladd.f64(double %263, double %264, double %265)
store double %266, double* %27
%267 = load double*, double** %9
%268 = getelementptr inbounds double, double* %267, i64 23
%269 = load double, double* %268
%270 = load double, double* %22
%271 = load double, double* %28
%272 = call double @llvm.fmuladd.f64(double %269, double %270, double %271)
store double %272, double* %28
%273 = load double*, double** %9
%274 = getelementptr inbounds double, double* %273, i64 27
%275 = load double, double* %274
%276 = load double, double* %22
%277 = load double, double* %29
%278 = call double @llvm.fmuladd.f64(double %275, double %276, double %277)
store double %278, double* %29
%279 = load double*, double** %9
%280 = getelementptr inbounds double, double* %279, i64 31
%281 = load double, double* %280
%282 = load double, double* %22
%283 = load double, double* %30
%284 = call double @llvm.fmuladd.f64(double %281, double %282, double %283)
store double %284, double* %30
%285 = load i32, i32* %10
%286 = mul nsw i32 %285, 4
%287 = load double*, double** %9
%288 = sext i32 %286 to i64
%289 = getelementptr inbounds double, double* %287, i64 %288
store double* %289, double** %9
%290 = load double*, double** %11
%291 = getelementptr inbounds double, double* %290, i64 4
store double* %291, double** %11
br label %292
292: ; preds = %53
%293 = load i32, i32* %17
%294 = add nsw i32 %293, 4
store i32 %294, i32* %17
br label %47
295: ; preds = %47
br label %296
296: ; preds = %356, %295
%297 = load i32, i32* %17
%298 = load i32, i32* %18
%299 = icmp slt i32 %297, %298
br i1 %299, label %300, label %359
300: ; preds = %296
%301 = load double*, double** %11
%302 = getelementptr inbounds double, double* %301, i64 0
%303 = load double, double* %302
store double %303, double* %19
%304 = load double*, double** %9
%305 = getelementptr inbounds double, double* %304, i64 0
%306 = load double, double* %305
%307 = load double, double* %19
%308 = load double, double* %23
%309 = call double @llvm.fmuladd.f64(double %306, double %307, double %308)
store double %309, double* %23
%310 = load double*, double** %9
%311 = getelementptr inbounds double, double* %310, i64 4
%312 = load double, double* %311
%313 = load double, double* %19
%314 = load double, double* %24
%315 = call double @llvm.fmuladd.f64(double %312, double %313, double %314)
store double %315, double* %24
%316 = load double*, double** %9
%317 = getelementptr inbounds double, double* %316, i64 8
%318 = load double, double* %317
%319 = load double, double* %19
%320 = load double, double* %25
%321 = call double @llvm.fmuladd.f64(double %318, double %319, double %320)
store double %321, double* %25
%322 = load double*, double** %9
%323 = getelementptr inbounds double, double* %322, i64 12
%324 = load double, double* %323
%325 = load double, double* %19
%326 = load double, double* %26
%327 = call double @llvm.fmuladd.f64(double %324, double %325, double %326)
store double %327, double* %26
%328 = load double*, double** %9
%329 = getelementptr inbounds double, double* %328, i64 16
%330 = load double, double* %329
%331 = load double, double* %19
%332 = load double, double* %27
%333 = call double @llvm.fmuladd.f64(double %330, double %331, double %332)
store double %333, double* %27
%334 = load double*, double** %9
%335 = getelementptr inbounds double, double* %334, i64 20
%336 = load double, double* %335
%337 = load double, double* %19
%338 = load double, double* %28
%339 = call double @llvm.fmuladd.f64(double %336, double %337, double %338)
store double %339, double* %28
%340 = load double*, double** %9
%341 = getelementptr inbounds double, double* %340, i64 24
%342 = load double, double* %341
%343 = load double, double* %19
%344 = load double, double* %29
%345 = call double @llvm.fmuladd.f64(double %342, double %343, double %344)
store double %345, double* %29
%346 = load double*, double** %9
%347 = getelementptr inbounds double, double* %346, i64 28
%348 = load double, double* %347
%349 = load double, double* %19
%350 = load double, double* %30
%351 = call double @llvm.fmuladd.f64(double %348, double %349, double %350)
store double %351, double* %30
%352 = load double*, double** %9
%353 = getelementptr inbounds double, double* %352, i64 1
store double* %353, double** %9
%354 = load double*, double** %11
%355 = getelementptr inbounds double, double* %354, i64 1
store double* %355, double** %11
br label %356
356: ; preds = %300
%357 = load i32, i32* %17
%358 = add nsw i32 %357, 1
store i32 %358, i32* %17
br label %296
359: ; preds = %296
%360 = load i32, i32* %14
%361 = icmp eq i32 %360, 0
br i1 %361, label %362, label %387
362: ; preds = %359
%363 = load double, double* %23
%364 = load double*, double** %13
%365 = getelementptr inbounds double, double* %364, i64 0
store double %363, double* %365
%366 = load double, double* %24
%367 = load double*, double** %13
%368 = getelementptr inbounds double, double* %367, i64 1
store double %366, double* %368
%369 = load double, double* %25
%370 = load double*, double** %13
%371 = getelementptr inbounds double, double* %370, i64 2
store double %369, double* %371
%372 = load double, double* %26
%373 = load double*, double** %13
%374 = getelementptr inbounds double, double* %373, i64 3
store double %372, double* %374
%375 = load double, double* %27
%376 = load double*, double** %13
%377 = getelementptr inbounds double, double* %376, i64 4
store double %375, double* %377
%378 = load double, double* %28
%379 = load double*, double** %13
%380 = getelementptr inbounds double, double* %379, i64 5
store double %378, double* %380
%381 = load double, double* %29
%382 = load double*, double** %13
%383 = getelementptr inbounds double, double* %382, i64 6
store double %381, double* %383
%384 = load double, double* %30
%385 = load double*, double** %13
%386 = getelementptr inbounds double, double* %385, i64 7
store double %384, double* %386
br label %505
387: ; preds = %359
%388 = load i32, i32* %14
%389 = icmp eq i32 %388, 1
br i1 %389, label %390, label %447
390: ; preds = %387
%391 = load double*, double** %12
%392 = getelementptr inbounds double, double* %391, i64 0
%393 = load double, double* %392
%394 = load double, double* %23
%395 = fadd double %393, %394
%396 = load double*, double** %13
%397 = getelementptr inbounds double, double* %396, i64 0
store double %395, double* %397
%398 = load double*, double** %12
%399 = getelementptr inbounds double, double* %398, i64 1
%400 = load double, double* %399
%401 = load double, double* %24
%402 = fadd double %400, %401
%403 = load double*, double** %13
%404 = getelementptr inbounds double, double* %403, i64 1
store double %402, double* %404
%405 = load double*, double** %12
%406 = getelementptr inbounds double, double* %405, i64 2
%407 = load double, double* %406
%408 = load double, double* %25
%409 = fadd double %407, %408
%410 = load double*, double** %13
%411 = getelementptr inbounds double, double* %410, i64 2
store double %409, double* %411
%412 = load double*, double** %12
%413 = getelementptr inbounds double, double* %412, i64 3
%414 = load double, double* %413
%415 = load double, double* %26
%416 = fadd double %414, %415
%417 = load double*, double** %13
%418 = getelementptr inbounds double, double* %417, i64 3
store double %416, double* %418
%419 = load double*, double** %12
%420 = getelementptr inbounds double, double* %419, i64 4
%421 = load double, double* %420
%422 = load double, double* %27
%423 = fadd double %421, %422
%424 = load double*, double** %13
%425 = getelementptr inbounds double, double* %424, i64 4
store double %423, double* %425
%426 = load double*, double** %12
%427 = getelementptr inbounds double, double* %426, i64 5
%428 = load double, double* %427
%429 = load double, double* %28
%430 = fadd double %428, %429
%431 = load double*, double** %13
%432 = getelementptr inbounds double, double* %431, i64 5
store double %430, double* %432
%433 = load double*, double** %12
%434 = getelementptr inbounds double, double* %433, i64 6
%435 = load double, double* %434
%436 = load double, double* %29
%437 = fadd double %435, %436
%438 = load double*, double** %13
%439 = getelementptr inbounds double, double* %438, i64 6
store double %437, double* %439
%440 = load double*, double** %12
%441 = getelementptr inbounds double, double* %440, i64 7
%442 = load double, double* %441
%443 = load double, double* %30
%444 = fadd double %442, %443
%445 = load double*, double** %13
%446 = getelementptr inbounds double, double* %445, i64 7
store double %444, double* %446
br label %504
447: ; preds = %387
%448 = load double*, double** %12
%449 = getelementptr inbounds double, double* %448, i64 0
%450 = load double, double* %449
%451 = load double, double* %23
%452 = fsub double %450, %451
%453 = load double*, double** %13
%454 = getelementptr inbounds double, double* %453, i64 0
store double %452, double* %454
%455 = load double*, double** %12
%456 = getelementptr inbounds double, double* %455, i64 1
%457 = load double, double* %456
%458 = load double, double* %24
%459 = fsub double %457, %458
%460 = load double*, double** %13
%461 = getelementptr inbounds double, double* %460, i64 1
store double %459, double* %461
%462 = load double*, double** %12
%463 = getelementptr inbounds double, double* %462, i64 2
%464 = load double, double* %463
%465 = load double, double* %25
%466 = fsub double %464, %465
%467 = load double*, double** %13
%468 = getelementptr inbounds double, double* %467, i64 2
store double %466, double* %468
%469 = load double*, double** %12
%470 = getelementptr inbounds double, double* %469, i64 3
%471 = load double, double* %470
%472 = load double, double* %26
%473 = fsub double %471, %472
%474 = load double*, double** %13
%475 = getelementptr inbounds double, double* %474, i64 3
store double %473, double* %475
%476 = load double*, double** %12
%477 = getelementptr inbounds double, double* %476, i64 4
%478 = load double, double* %477
%479 = load double, double* %27
%480 = fsub double %478, %479
%481 = load double*, double** %13
%482 = getelementptr inbounds double, double* %481, i64 4
store double %480, double* %482
%483 = load double*, double** %12
%484 = getelementptr inbounds double, double* %483, i64 5
%485 = load double, double* %484
%486 = load double, double* %28
%487 = fsub double %485, %486
%488 = load double*, double** %13
%489 = getelementptr inbounds double, double* %488, i64 5
store double %487, double* %489
%490 = load double*, double** %12
%491 = getelementptr inbounds double, double* %490, i64 6
%492 = load double, double* %491
%493 = load double, double* %29
%494 = fsub double %492, %493
%495 = load double*, double** %13
%496 = getelementptr inbounds double, double* %495, i64 6
store double %494, double* %496
%497 = load double*, double** %12
%498 = getelementptr inbounds double, double* %497, i64 7
%499 = load double, double* %498
%500 = load double, double* %30
%501 = fsub double %499, %500
%502 = load double*, double** %13
%503 = getelementptr inbounds double, double* %502, i64 7
store double %501, double* %503
br label %504
504: ; preds = %447, %390
br label %505
505: ; preds = %33, %504, %362
ret void
}

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