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;
  k = 0;
  for (; k < ka - bs + 1; k += bs) {
    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) {
    y[0] = y_0;
    y[1] = y_1;
    y[2] = y_2;
    y[3] = y_3;
    y[4] = y_4;
    y[5] = y_5;
    y[6] = y_6;
    y[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    1a2c <kernel_dgemv_t_8_lib4+0x92c>
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
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
mov    -0x40(%rbp),%ecx
sub    $0x4,%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jge    16a3 <kernel_dgemv_t_8_lib4+0x5a3>
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    1197 <kernel_dgemv_t_8_lib4+0x97>
jmp    16a8 <kernel_dgemv_t_8_lib4+0x5a8>
mov    -0x3c(%rbp),%eax
cmp    -0x40(%rbp),%eax
jge    180a <kernel_dgemv_t_8_lib4+0x70a>
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)
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
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    16a8 <kernel_dgemv_t_8_lib4+0x5a8>
cmpl   $0x0,0x10(%rbp)
jne    1894 <kernel_dgemv_t_8_lib4+0x794>
movsd  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x70(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x78(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x38(%rax)
jmp    1a2c <kernel_dgemv_t_8_lib4+0x92c>
cmpl   $0x1,0x10(%rbp)
jne    1965 <kernel_dgemv_t_8_lib4+0x865>
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    1a27 <kernel_dgemv_t_8_lib4+0x927>
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    1a2c <kernel_dgemv_t_8_lib4+0x92c>
add    $0x20,%rsp
pop    %rbp
ret

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

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