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


x86 assembly (clang, -O0):
<kernel_dtrmv_u_n_8_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
cmpl   $0x0,-0x4(%rbp)
jg     112d <kernel_dtrmv_u_n_8_lib4+0x2d>
jmp    1f5a <kernel_dtrmv_u_n_8_lib4+0xe5a>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
movl   $0x4,-0x3c(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
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  -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  0x40(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
movl   $0x8,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1bf2 <kernel_dtrmv_u_n_8_lib4+0xaf2>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x40(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x40(%rbp)
jmp    1716 <kernel_dtrmv_u_n_8_lib4+0x616>
jmp    1bf7 <kernel_dtrmv_u_n_8_lib4+0xaf7>
mov    -0x40(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1d58 <kernel_dtrmv_u_n_8_lib4+0xc58>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x10(%rbp)
mov    -0x38(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1bf7 <kernel_dtrmv_u_n_8_lib4+0xaf7>
cmpl   $0x0,-0x2c(%rbp)
jne    1de2 <kernel_dtrmv_u_n_8_lib4+0xce2>
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    1f5a <kernel_dtrmv_u_n_8_lib4+0xe5a>
cmpl   $0x1,-0x2c(%rbp)
jne    1e93 <kernel_dtrmv_u_n_8_lib4+0xd93>
movsd  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movsd  -0x70(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addsd  0x8(%rax),%xmm0
movsd  %xmm0,0x8(%rax)
movsd  -0x78(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addsd  0x10(%rax),%xmm0
movsd  %xmm0,0x10(%rax)
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addsd  0x18(%rax),%xmm0
movsd  %xmm0,0x18(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
addsd  0x20(%rax),%xmm0
movsd  %xmm0,0x20(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
addsd  0x28(%rax),%xmm0
movsd  %xmm0,0x28(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
addsd  0x30(%rax),%xmm0
movsd  %xmm0,0x30(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
addsd  0x38(%rax),%xmm0
movsd  %xmm0,0x38(%rax)
jmp    1f55 <kernel_dtrmv_u_n_8_lib4+0xe55>
movsd  -0x68(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x70(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rax)
movsd  -0x78(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rax)
movsd  -0x80(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rax)
movsd  -0x88(%rbp),%xmm1
ff
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rax)
movsd  -0x90(%rbp),%xmm1
ff
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x28(%rax)
movsd  -0x98(%rbp),%xmm1
ff
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x30(%rax)
movsd  -0xa0(%rbp),%xmm1
ff
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x38(%rax)
jmp    1f5a <kernel_dtrmv_u_n_8_lib4+0xe5a>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dtrmv_u_n_8_lib4>:
test   %edi,%edi
jle    15e8 <kernel_dtrmv_u_n_8_lib4+0x4e8>
shl    $0x2,%edx
movslq %edx,%rax
movsd  0x10(%rcx),%xmm0
movsd  (%rsi),%xmm2
mulsd  (%rcx),%xmm2
xorpd  %xmm8,%xmm8
addsd  %xmm8,%xmm2
movupd 0x20(%rsi),%xmm3
movsd  0x8(%rcx),%xmm4
unpcklpd %xmm4,%xmm4
mulpd  %xmm3,%xmm4
movq   %xmm2,%xmm2
addpd  %xmm4,%xmm2
movupd 0x40(%rsi),%xmm3
movapd %xmm0,%xmm4
unpcklpd %xmm0,%xmm4
mulpd  %xmm3,%xmm4
addpd  %xmm2,%xmm4
mulsd  0x50(%rsi),%xmm0
addsd  %xmm8,%xmm0
movupd 0x60(%rsi),%xmm2
movsd  0x18(%rcx),%xmm3
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm2
addpd  %xmm4,%xmm2
movupd 0x70(%rsi),%xmm5
movq   %xmm0,%xmm0
mulpd  %xmm3,%xmm5
addpd  %xmm0,%xmm5
movsd  0x20(%rcx),%xmm0
movsd  0x30(%rcx),%xmm4
movupd 0x80(%rsi),%xmm3
movapd %xmm0,%xmm6
unpcklpd %xmm0,%xmm6
mulpd  %xmm6,%xmm3
addpd  %xmm2,%xmm3
movupd 0x90(%rsi),%xmm2
mulpd  %xmm6,%xmm2
mulsd  0x80(%rsi,%rax,8),%xmm0
addpd  %xmm5,%xmm2
addsd  %xmm8,%xmm0
movupd 0xa0(%rsi),%xmm5
movsd  0x28(%rcx),%xmm6
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm5
addpd  %xmm3,%xmm5
movupd 0xb0(%rsi),%xmm3
mulpd  %xmm6,%xmm3
addpd  %xmm2,%xmm3
movq   %xmm0,%xmm0
movupd 0xa0(%rsi,%rax,8),%xmm7
movupd 0xc0(%rsi,%rax,8),%xmm1
movupd 0xe0(%rsi,%rax,8),%xmm11
movupd 0xf0(%rsi,%rax,8),%xmm2
mulpd  %xmm6,%xmm7
addpd  %xmm0,%xmm7
movupd 0xc0(%rsi),%xmm6
movapd %xmm4,%xmm0
unpcklpd %xmm4,%xmm0
mulpd  %xmm0,%xmm6
addpd  %xmm5,%xmm6
movupd 0xd0(%rsi),%xmm5
mulpd  %xmm0,%xmm5
addpd  %xmm3,%xmm5
mulpd  %xmm1,%xmm0
addpd  %xmm7,%xmm0
mulsd  0xd0(%rsi,%rax,8),%xmm4
addsd  %xmm8,%xmm4
movupd 0xe0(%rsi),%xmm12
movsd  0x38(%rcx),%xmm13
unpcklpd %xmm13,%xmm13
mulpd  %xmm13,%xmm12
addpd  %xmm6,%xmm12
movupd 0xf0(%rsi),%xmm14
mulpd  %xmm13,%xmm14
addpd  %xmm5,%xmm14
mulpd  %xmm13,%xmm11
addpd  %xmm0,%xmm11
movq   %xmm4,%xmm0
mulpd  %xmm2,%xmm13
addpd  %xmm0,%xmm13
add    $0x40,%rcx
cmp    $0xc,%edi
jb     1496 <kernel_dtrmv_u_n_8_lib4+0x396>
lea    -0x3(%rdi),%r10d
mov    $0x8,%edx
nopl   0x0(%rax)
movupd 0x100(%rsi),%xmm2
movupd 0x110(%rsi),%xmm1
movupd 0x120(%rsi),%xmm4
movupd 0x130(%rsi),%xmm9
movsd  (%rcx),%xmm3
movsd  0x8(%rcx),%xmm6
movsd  0x10(%rcx),%xmm10
movsd  0x18(%rcx),%xmm8
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm2
addpd  %xmm12,%xmm2
mulpd  %xmm3,%xmm1
addpd  %xmm14,%xmm1
movupd 0x100(%rsi,%rax,8),%xmm5
movupd 0x110(%rsi,%rax,8),%xmm7
movupd 0x120(%rsi,%rax,8),%xmm0
movupd 0x130(%rsi,%rax,8),%xmm12
mulpd  %xmm3,%xmm5
addpd  %xmm11,%xmm5
mulpd  %xmm3,%xmm7
addpd  %xmm13,%xmm7
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm4
addpd  %xmm2,%xmm4
mulpd  %xmm6,%xmm9
addpd  %xmm1,%xmm9
mulpd  %xmm6,%xmm0
addpd  %xmm5,%xmm0
mulpd  %xmm12,%xmm6
addpd  %xmm7,%xmm6
movupd 0x140(%rsi),%xmm5
unpcklpd %xmm10,%xmm10
mulpd  %xmm10,%xmm5
addpd  %xmm4,%xmm5
movupd 0x150(%rsi),%xmm4
mulpd  %xmm10,%xmm4
addpd  %xmm9,%xmm4
movupd 0x140(%rsi,%rax,8),%xmm7
mulpd  %xmm10,%xmm7
addpd  %xmm0,%xmm7
movupd 0x150(%rsi,%rax,8),%xmm2
mulpd  %xmm10,%xmm2
addpd  %xmm6,%xmm2
movupd 0x160(%rsi),%xmm6
unpcklpd %xmm8,%xmm8
mulpd  %xmm8,%xmm6
movapd %xmm6,%xmm12
addpd  %xmm5,%xmm12
movupd 0x170(%rsi),%xmm3
mulpd  %xmm8,%xmm3
movapd %xmm3,%xmm14
addpd  %xmm4,%xmm14
movupd 0x160(%rsi,%rax,8),%xmm1
mulpd  %xmm8,%xmm1
movapd %xmm1,%xmm11
addpd  %xmm7,%xmm11
movupd 0x170(%rsi,%rax,8),%xmm0
mulpd  %xmm8,%xmm0
movapd %xmm0,%xmm13
addpd  %xmm2,%xmm13
add    $0x20,%rcx
add    $0x4,%edx
sub    $0xffffffffffffff80,%rsi
cmp    %r10d,%edx
jl     12c0 <kernel_dtrmv_u_n_8_lib4+0x1c0>
addpd  %xmm2,%xmm0
addpd  %xmm7,%xmm1
addpd  %xmm4,%xmm3
addpd  %xmm5,%xmm6
mov    %edi,%edx
and    $0xfffffffc,%edx
lea    (%rsi,%rax,8),%rax
add    $0x100,%rax
add    $0x100,%rsi
movapd %xmm6,%xmm12
movapd %xmm3,%xmm14
movapd %xmm1,%xmm11
movapd %xmm0,%xmm13
cmp    %edi,%edx
jl     14b0 <kernel_dtrmv_u_n_8_lib4+0x3b0>
cmp    $0x1,%r9d
je     1563 <kernel_dtrmv_u_n_8_lib4+0x463>
test   %r9d,%r9d
jne    15a6 <kernel_dtrmv_u_n_8_lib4+0x4a6>
movupd %xmm12,(%r8)
movupd %xmm14,0x10(%r8)
movupd %xmm11,0x20(%r8)
movupd %xmm13,0x30(%r8)
ret
lea    (%rsi,%rax,8),%rax
add    $0x100,%rax
add    $0x100,%rsi
mov    $0x8,%edx
cmp    %edi,%edx
jge    146b <kernel_dtrmv_u_n_8_lib4+0x36b>
sub    %edx,%edi
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movapd %xmm13,%xmm6
movapd %xmm11,%xmm3
movapd %xmm14,%xmm2
movapd %xmm12,%xmm8
movupd (%rsi,%rdx,4),%xmm5
movupd 0x10(%rsi,%rdx,4),%xmm4
movsd  (%rcx,%rdx,1),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm5
movapd %xmm5,%xmm12
addpd  %xmm8,%xmm12
mulpd  %xmm1,%xmm4
movapd %xmm4,%xmm14
addpd  %xmm2,%xmm14
movupd (%rax,%rdx,4),%xmm7
movupd 0x10(%rax,%rdx,4),%xmm0
mulpd  %xmm1,%xmm7
movapd %xmm7,%xmm11
addpd  %xmm3,%xmm11
mulpd  %xmm1,%xmm0
movapd %xmm0,%xmm13
addpd  %xmm6,%xmm13
add    $0x8,%rdx
add    $0xffffffff,%edi
jne    14c0 <kernel_dtrmv_u_n_8_lib4+0x3c0>
addpd  %xmm6,%xmm0
addpd  %xmm3,%xmm7
addpd  %xmm2,%xmm4
addpd  %xmm8,%xmm5
movapd %xmm5,%xmm12
movapd %xmm4,%xmm14
movapd %xmm7,%xmm11
movapd %xmm0,%xmm13
cmp    $0x1,%r9d
jne    1475 <kernel_dtrmv_u_n_8_lib4+0x375>
movupd (%r8),%xmm0
movupd 0x10(%r8),%xmm1
movupd 0x20(%r8),%xmm2
movupd 0x30(%r8),%xmm3
addpd  %xmm0,%xmm12
movupd %xmm12,(%r8)
addpd  %xmm1,%xmm14
movupd %xmm14,0x10(%r8)
addpd  %xmm2,%xmm11
movupd %xmm11,0x20(%r8)
addpd  %xmm3,%xmm13
movupd %xmm13,0x30(%r8)
ret
movupd (%r8),%xmm0
movupd 0x10(%r8),%xmm1
movupd 0x20(%r8),%xmm2
movupd 0x30(%r8),%xmm3
subpd  %xmm12,%xmm0
movupd %xmm0,(%r8)
subpd  %xmm14,%xmm1
movupd %xmm1,0x10(%r8)
subpd  %xmm11,%xmm2
movupd %xmm2,0x20(%r8)
subpd  %xmm13,%xmm3
movupd %xmm3,0x30(%r8)
ret

LLVM IR (-O0):
define void @kernel_dtrmv_u_n_8_lib4(i32 %0, double* %1, i32 %2, double* %3, double* %4, i32 %5) {
%7 = alloca i32
%8 = alloca double*
%9 = alloca i32
%10 = alloca double*
%11 = alloca double*
%12 = alloca i32
%13 = alloca double*
%14 = alloca i32
%15 = alloca i32
%16 = alloca double
%17 = alloca double
%18 = alloca double
%19 = alloca double
%20 = alloca double
%21 = alloca double
%22 = alloca double
%23 = alloca double
%24 = alloca double
%25 = alloca double
%26 = alloca double
%27 = alloca double
store i32 %0, i32* %7
store double* %1, double** %8
store i32 %2, i32* %9
store double* %3, double** %10
store double* %4, double** %11
store i32 %5, i32* %12
%28 = load i32, i32* %7
%29 = icmp sle i32 %28, 0
br i1 %29, label %30, label %31
30: ; preds = %6
br label %688
31: ; preds = %6
%32 = load double*, double** %8
%33 = load i32, i32* %9
%34 = mul nsw i32 4, %33
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds double, double* %32, i64 %35
store double* %36, double** %13
store i32 4, i32* %14
store double 0.000000e+00, double* %20
store double 0.000000e+00, double* %21
store double 0.000000e+00, double* %22
store double 0.000000e+00, double* %23
store double 0.000000e+00, double* %24
store double 0.000000e+00, double* %25
store double 0.000000e+00, double* %26
store double 0.000000e+00, double* %27
%37 = load double*, double** %10
%38 = getelementptr inbounds double, double* %37, i64 0
%39 = load double, double* %38
store double %39, double* %16
%40 = load double*, double** %10
%41 = getelementptr inbounds double, double* %40, i64 1
%42 = load double, double* %41
store double %42, double* %17
%43 = load double*, double** %10
%44 = getelementptr inbounds double, double* %43, i64 2
%45 = load double, double* %44
store double %45, double* %18
%46 = load double*, double** %10
%47 = getelementptr inbounds double, double* %46, i64 3
%48 = load double, double* %47
store double %48, double* %19
%49 = load double*, double** %8
%50 = getelementptr inbounds double, double* %49, i64 0
%51 = load double, double* %50
%52 = load double, double* %16
%53 = load double, double* %20
%54 = call double @llvm.fmuladd.f64(double %51, double %52, double %53)
store double %54, double* %20
%55 = load double*, double** %8
%56 = getelementptr inbounds double, double* %55, i64 4
%57 = load double, double* %56
%58 = load double, double* %17
%59 = load double, double* %20
%60 = call double @llvm.fmuladd.f64(double %57, double %58, double %59)
store double %60, double* %20
%61 = load double*, double** %8
%62 = getelementptr inbounds double, double* %61, i64 5
%63 = load double, double* %62
%64 = load double, double* %17
%65 = load double, double* %21
%66 = call double @llvm.fmuladd.f64(double %63, double %64, double %65)
store double %66, double* %21
%67 = load double*, double** %8
%68 = getelementptr inbounds double, double* %67, i64 8
%69 = load double, double* %68
%70 = load double, double* %18
%71 = load double, double* %20
%72 = call double @llvm.fmuladd.f64(double %69, double %70, double %71)
store double %72, double* %20
%73 = load double*, double** %8
%74 = getelementptr inbounds double, double* %73, i64 9
%75 = load double, double* %74
%76 = load double, double* %18
%77 = load double, double* %21
%78 = call double @llvm.fmuladd.f64(double %75, double %76, double %77)
store double %78, double* %21
%79 = load double*, double** %8
%80 = getelementptr inbounds double, double* %79, i64 10
%81 = load double, double* %80
%82 = load double, double* %18
%83 = load double, double* %22
%84 = call double @llvm.fmuladd.f64(double %81, double %82, double %83)
store double %84, double* %22
%85 = load double*, double** %8
%86 = getelementptr inbounds double, double* %85, i64 12
%87 = load double, double* %86
%88 = load double, double* %19
%89 = load double, double* %20
%90 = call double @llvm.fmuladd.f64(double %87, double %88, double %89)
store double %90, double* %20
%91 = load double*, double** %8
%92 = getelementptr inbounds double, double* %91, i64 13
%93 = load double, double* %92
%94 = load double, double* %19
%95 = load double, double* %21
%96 = call double @llvm.fmuladd.f64(double %93, double %94, double %95)
store double %96, double* %21
%97 = load double*, double** %8
%98 = getelementptr inbounds double, double* %97, i64 14
%99 = load double, double* %98
%100 = load double, double* %19
%101 = load double, double* %22
%102 = call double @llvm.fmuladd.f64(double %99, double %100, double %101)
store double %102, double* %22
%103 = load double*, double** %8
%104 = getelementptr inbounds double, double* %103, i64 15
%105 = load double, double* %104
%106 = load double, double* %19
%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** %8
%110 = getelementptr inbounds double, double* %109, i64 16
store double* %110, double** %8
%111 = load double*, double** %13
%112 = getelementptr inbounds double, double* %111, i64 16
store double* %112, double** %13
%113 = load double*, double** %10
%114 = getelementptr inbounds double, double* %113, i64 4
store double* %114, double** %10
%115 = load double*, double** %10
%116 = getelementptr inbounds double, double* %115, i64 0
%117 = load double, double* %116
store double %117, double* %16
%118 = load double*, double** %10
%119 = getelementptr inbounds double, double* %118, i64 1
%120 = load double, double* %119
store double %120, double* %17
%121 = load double*, double** %10
%122 = getelementptr inbounds double, double* %121, i64 2
%123 = load double, double* %122
store double %123, double* %18
%124 = load double*, double** %10
%125 = getelementptr inbounds double, double* %124, i64 3
%126 = load double, double* %125
store double %126, double* %19
%127 = load double*, double** %8
%128 = getelementptr inbounds double, double* %127, i64 0
%129 = load double, double* %128
%130 = load double, double* %16
%131 = load double, double* %20
%132 = call double @llvm.fmuladd.f64(double %129, double %130, double %131)
store double %132, double* %20
%133 = load double*, double** %8
%134 = getelementptr inbounds double, double* %133, i64 1
%135 = load double, double* %134
%136 = load double, double* %16
%137 = load double, double* %21
%138 = call double @llvm.fmuladd.f64(double %135, double %136, double %137)
store double %138, double* %21
%139 = load double*, double** %8
%140 = getelementptr inbounds double, double* %139, i64 2
%141 = load double, double* %140
%142 = load double, double* %16
%143 = load double, double* %22
%144 = call double @llvm.fmuladd.f64(double %141, double %142, double %143)
store double %144, double* %22
%145 = load double*, double** %8
%146 = getelementptr inbounds double, double* %145, i64 3
%147 = load double, double* %146
%148 = load double, double* %16
%149 = load double, double* %23
%150 = call double @llvm.fmuladd.f64(double %147, double %148, double %149)
store double %150, double* %23
%151 = load double*, double** %13
%152 = getelementptr inbounds double, double* %151, i64 0
%153 = load double, double* %152
%154 = load double, double* %16
%155 = load double, double* %24
%156 = call double @llvm.fmuladd.f64(double %153, double %154, double %155)
store double %156, double* %24
%157 = load double*, double** %8
%158 = getelementptr inbounds double, double* %157, i64 4
%159 = load double, double* %158
%160 = load double, double* %17
%161 = load double, double* %20
%162 = call double @llvm.fmuladd.f64(double %159, double %160, double %161)
store double %162, double* %20
%163 = load double*, double** %8
%164 = getelementptr inbounds double, double* %163, i64 5
%165 = load double, double* %164
%166 = load double, double* %17
%167 = load double, double* %21
%168 = call double @llvm.fmuladd.f64(double %165, double %166, double %167)
store double %168, double* %21
%169 = load double*, double** %8
%170 = getelementptr inbounds double, double* %169, i64 6
%171 = load double, double* %170
%172 = load double, double* %17
%173 = load double, double* %22
%174 = call double @llvm.fmuladd.f64(double %171, double %172, double %173)
store double %174, double* %22
%175 = load double*, double** %8
%176 = getelementptr inbounds double, double* %175, i64 7
%177 = load double, double* %176
%178 = load double, double* %17
%179 = load double, double* %23
%180 = call double @llvm.fmuladd.f64(double %177, double %178, double %179)
store double %180, double* %23
%181 = load double*, double** %13
%182 = getelementptr inbounds double, double* %181, i64 4
%183 = load double, double* %182
%184 = load double, double* %17
%185 = load double, double* %24
%186 = call double @llvm.fmuladd.f64(double %183, double %184, double %185)
store double %186, double* %24
%187 = load double*, double** %13
%188 = getelementptr inbounds double, double* %187, i64 5
%189 = load double, double* %188
%190 = load double, double* %17
%191 = load double, double* %25
%192 = call double @llvm.fmuladd.f64(double %189, double %190, double %191)
store double %192, double* %25
%193 = load double*, double** %8
%194 = getelementptr inbounds double, double* %193, i64 8
%195 = load double, double* %194
%196 = load double, double* %18
%197 = load double, double* %20
%198 = call double @llvm.fmuladd.f64(double %195, double %196, double %197)
store double %198, double* %20
%199 = load double*, double** %8
%200 = getelementptr inbounds double, double* %199, i64 9
%201 = load double, double* %200
%202 = load double, double* %18
%203 = load double, double* %21
%204 = call double @llvm.fmuladd.f64(double %201, double %202, double %203)
store double %204, double* %21
%205 = load double*, double** %8
%206 = getelementptr inbounds double, double* %205, i64 10
%207 = load double, double* %206
%208 = load double, double* %18
%209 = load double, double* %22
%210 = call double @llvm.fmuladd.f64(double %207, double %208, double %209)
store double %210, double* %22
%211 = load double*, double** %8
%212 = getelementptr inbounds double, double* %211, i64 11
%213 = load double, double* %212
%214 = load double, double* %18
%215 = load double, double* %23
%216 = call double @llvm.fmuladd.f64(double %213, double %214, double %215)
store double %216, double* %23
%217 = load double*, double** %13
%218 = getelementptr inbounds double, double* %217, i64 8
%219 = load double, double* %218
%220 = load double, double* %18
%221 = load double, double* %24
%222 = call double @llvm.fmuladd.f64(double %219, double %220, double %221)
store double %222, double* %24
%223 = load double*, double** %13
%224 = getelementptr inbounds double, double* %223, i64 9
%225 = load double, double* %224
%226 = load double, double* %18
%227 = load double, double* %25
%228 = call double @llvm.fmuladd.f64(double %225, double %226, double %227)
store double %228, double* %25
%229 = load double*, double** %13
%230 = getelementptr inbounds double, double* %229, i64 10
%231 = load double, double* %230
%232 = load double, double* %18
%233 = load double, double* %26
%234 = call double @llvm.fmuladd.f64(double %231, double %232, double %233)
store double %234, double* %26
%235 = load double*, double** %8
%236 = getelementptr inbounds double, double* %235, i64 12
%237 = load double, double* %236
%238 = load double, double* %19
%239 = load double, double* %20
%240 = call double @llvm.fmuladd.f64(double %237, double %238, double %239)
store double %240, double* %20
%241 = load double*, double** %8
%242 = getelementptr inbounds double, double* %241, i64 13
%243 = load double, double* %242
%244 = load double, double* %19
%245 = load double, double* %21
%246 = call double @llvm.fmuladd.f64(double %243, double %244, double %245)
store double %246, double* %21
%247 = load double*, double** %8
%248 = getelementptr inbounds double, double* %247, i64 14
%249 = load double, double* %248
%250 = load double, double* %19
%251 = load double, double* %22
%252 = call double @llvm.fmuladd.f64(double %249, double %250, double %251)
store double %252, double* %22
%253 = load double*, double** %8
%254 = getelementptr inbounds double, double* %253, i64 15
%255 = load double, double* %254
%256 = load double, double* %19
%257 = load double, double* %23
%258 = call double @llvm.fmuladd.f64(double %255, double %256, double %257)
store double %258, double* %23
%259 = load double*, double** %13
%260 = getelementptr inbounds double, double* %259, i64 12
%261 = load double, double* %260
%262 = load double, double* %19
%263 = load double, double* %24
%264 = call double @llvm.fmuladd.f64(double %261, double %262, double %263)
store double %264, double* %24
%265 = load double*, double** %13
%266 = getelementptr inbounds double, double* %265, i64 13
%267 = load double, double* %266
%268 = load double, double* %19
%269 = load double, double* %25
%270 = call double @llvm.fmuladd.f64(double %267, double %268, double %269)
store double %270, double* %25
%271 = load double*, double** %13
%272 = getelementptr inbounds double, double* %271, i64 14
%273 = load double, double* %272
%274 = load double, double* %19
%275 = load double, double* %26
%276 = call double @llvm.fmuladd.f64(double %273, double %274, double %275)
store double %276, double* %26
%277 = load double*, double** %13
%278 = getelementptr inbounds double, double* %277, i64 15
%279 = load double, double* %278
%280 = load double, double* %19
%281 = load double, double* %27
%282 = call double @llvm.fmuladd.f64(double %279, double %280, double %281)
store double %282, double* %27
%283 = load double*, double** %8
%284 = getelementptr inbounds double, double* %283, i64 16
store double* %284, double** %8
%285 = load double*, double** %13
%286 = getelementptr inbounds double, double* %285, i64 16
store double* %286, double** %13
%287 = load double*, double** %10
%288 = getelementptr inbounds double, double* %287, i64 4
store double* %288, double** %10
store i32 8, i32* %15
br label %289
289: ; preds = %505, %31
%290 = load i32, i32* %15
%291 = load i32, i32* %7
%292 = sub nsw i32 %291, 3
%293 = icmp slt i32 %290, %292
br i1 %293, label %294, label %508
294: ; preds = %289
%295 = load double*, double** %10
%296 = getelementptr inbounds double, double* %295, i64 0
%297 = load double, double* %296
store double %297, double* %16
%298 = load double*, double** %10
%299 = getelementptr inbounds double, double* %298, i64 1
%300 = load double, double* %299
store double %300, double* %17
%301 = load double*, double** %10
%302 = getelementptr inbounds double, double* %301, i64 2
%303 = load double, double* %302
store double %303, double* %18
%304 = load double*, double** %10
%305 = getelementptr inbounds double, double* %304, i64 3
%306 = load double, double* %305
store double %306, double* %19
%307 = load double*, double** %8
%308 = getelementptr inbounds double, double* %307, i64 0
%309 = load double, double* %308
%310 = load double, double* %16
%311 = load double, double* %20
%312 = call double @llvm.fmuladd.f64(double %309, double %310, double %311)
store double %312, double* %20
%313 = load double*, double** %8
%314 = getelementptr inbounds double, double* %313, i64 1
%315 = load double, double* %314
%316 = load double, double* %16
%317 = load double, double* %21
%318 = call double @llvm.fmuladd.f64(double %315, double %316, double %317)
store double %318, double* %21
%319 = load double*, double** %8
%320 = getelementptr inbounds double, double* %319, i64 2
%321 = load double, double* %320
%322 = load double, double* %16
%323 = load double, double* %22
%324 = call double @llvm.fmuladd.f64(double %321, double %322, double %323)
store double %324, double* %22
%325 = load double*, double** %8
%326 = getelementptr inbounds double, double* %325, i64 3
%327 = load double, double* %326
%328 = load double, double* %16
%329 = load double, double* %23
%330 = call double @llvm.fmuladd.f64(double %327, double %328, double %329)
store double %330, double* %23
%331 = load double*, double** %13
%332 = getelementptr inbounds double, double* %331, i64 0
%333 = load double, double* %332
%334 = load double, double* %16
%335 = load double, double* %24
%336 = call double @llvm.fmuladd.f64(double %333, double %334, double %335)
store double %336, double* %24
%337 = load double*, double** %13
%338 = getelementptr inbounds double, double* %337, i64 1
%339 = load double, double* %338
%340 = load double, double* %16
%341 = load double, double* %25
%342 = call double @llvm.fmuladd.f64(double %339, double %340, double %341)
store double %342, double* %25
%343 = load double*, double** %13
%344 = getelementptr inbounds double, double* %343, i64 2
%345 = load double, double* %344
%346 = load double, double* %16
%347 = load double, double* %26
%348 = call double @llvm.fmuladd.f64(double %345, double %346, double %347)
store double %348, double* %26
%349 = load double*, double** %13
%350 = getelementptr inbounds double, double* %349, i64 3
%351 = load double, double* %350
%352 = load double, double* %16
%353 = load double, double* %27
%354 = call double @llvm.fmuladd.f64(double %351, double %352, double %353)
store double %354, double* %27
%355 = load double*, double** %8
%356 = getelementptr inbounds double, double* %355, i64 4
%357 = load double, double* %356
%358 = load double, double* %17
%359 = load double, double* %20
%360 = call double @llvm.fmuladd.f64(double %357, double %358, double %359)
store double %360, double* %20
%361 = load double*, double** %8
%362 = getelementptr inbounds double, double* %361, i64 5
%363 = load double, double* %362
%364 = load double, double* %17
%365 = load double, double* %21
%366 = call double @llvm.fmuladd.f64(double %363, double %364, double %365)
store double %366, double* %21
%367 = load double*, double** %8
%368 = getelementptr inbounds double, double* %367, i64 6
%369 = load double, double* %368
%370 = load double, double* %17
%371 = load double, double* %22
%372 = call double @llvm.fmuladd.f64(double %369, double %370, double %371)
store double %372, double* %22
%373 = load double*, double** %8
%374 = getelementptr inbounds double, double* %373, i64 7
%375 = load double, double* %374
%376 = load double, double* %17
%377 = load double, double* %23
%378 = call double @llvm.fmuladd.f64(double %375, double %376, double %377)
store double %378, double* %23
%379 = load double*, double** %13
%380 = getelementptr inbounds double, double* %379, i64 4
%381 = load double, double* %380
%382 = load double, double* %17
%383 = load double, double* %24
%384 = call double @llvm.fmuladd.f64(double %381, double %382, double %383)
store double %384, double* %24
%385 = load double*, double** %13
%386 = getelementptr inbounds double, double* %385, i64 5
%387 = load double, double* %386
%388 = load double, double* %17
%389 = load double, double* %25
%390 = call double @llvm.fmuladd.f64(double %387, double %388, double %389)
store double %390, double* %25
%391 = load double*, double** %13
%392 = getelementptr inbounds double, double* %391, i64 6
%393 = load double, double* %392
%394 = load double, double* %17
%395 = load double, double* %26
%396 = call double @llvm.fmuladd.f64(double %393, double %394, double %395)
store double %396, double* %26
%397 = load double*, double** %13
%398 = getelementptr inbounds double, double* %397, i64 7
%399 = load double, double* %398
%400 = load double, double* %17
%401 = load double, double* %27
%402 = call double @llvm.fmuladd.f64(double %399, double %400, double %401)
store double %402, double* %27
%403 = load double*, double** %8
%404 = getelementptr inbounds double, double* %403, i64 8
%405 = load double, double* %404
%406 = load double, double* %18
%407 = load double, double* %20
%408 = call double @llvm.fmuladd.f64(double %405, double %406, double %407)
store double %408, double* %20
%409 = load double*, double** %8
%410 = getelementptr inbounds double, double* %409, i64 9
%411 = load double, double* %410
%412 = load double, double* %18
%413 = load double, double* %21
%414 = call double @llvm.fmuladd.f64(double %411, double %412, double %413)
store double %414, double* %21
%415 = load double*, double** %8
%416 = getelementptr inbounds double, double* %415, i64 10
%417 = load double, double* %416
%418 = load double, double* %18
%419 = load double, double* %22
%420 = call double @llvm.fmuladd.f64(double %417, double %418, double %419)
store double %420, double* %22
%421 = load double*, double** %8
%422 = getelementptr inbounds double, double* %421, i64 11
%423 = load double, double* %422
%424 = load double, double* %18
%425 = load double, double* %23
%426 = call double @llvm.fmuladd.f64(double %423, double %424, double %425)
store double %426, double* %23
%427 = load double*, double** %13
%428 = getelementptr inbounds double, double* %427, i64 8
%429 = load double, double* %428
%430 = load double, double* %18
%431 = load double, double* %24
%432 = call double @llvm.fmuladd.f64(double %429, double %430, double %431)
store double %432, double* %24
%433 = load double*, double** %13
%434 = getelementptr inbounds double, double* %433, i64 9
%435 = load double, double* %434
%436 = load double, double* %18
%437 = load double, double* %25
%438 = call double @llvm.fmuladd.f64(double %435, double %436, double %437)
store double %438, double* %25
%439 = load double*, double** %13
%440 = getelementptr inbounds double, double* %439, i64 10
%441 = load double, double* %440
%442 = load double, double* %18
%443 = load double, double* %26
%444 = call double @llvm.fmuladd.f64(double %441, double %442, double %443)
store double %444, double* %26
%445 = load double*, double** %13
%446 = getelementptr inbounds double, double* %445, i64 11
%447 = load double, double* %446
%448 = load double, double* %18
%449 = load double, double* %27
%450 = call double @llvm.fmuladd.f64(double %447, double %448, double %449)
store double %450, double* %27
%451 = load double*, double** %8
%452 = getelementptr inbounds double, double* %451, i64 12
%453 = load double, double* %452
%454 = load double, double* %19
%455 = load double, double* %20
%456 = call double @llvm.fmuladd.f64(double %453, double %454, double %455)
store double %456, double* %20
%457 = load double*, double** %8
%458 = getelementptr inbounds double, double* %457, i64 13
%459 = load double, double* %458
%460 = load double, double* %19
%461 = load double, double* %21
%462 = call double @llvm.fmuladd.f64(double %459, double %460, double %461)
store double %462, double* %21
%463 = load double*, double** %8
%464 = getelementptr inbounds double, double* %463, i64 14
%465 = load double, double* %464
%466 = load double, double* %19
%467 = load double, double* %22
%468 = call double @llvm.fmuladd.f64(double %465, double %466, double %467)
store double %468, double* %22
%469 = load double*, double** %8
%470 = getelementptr inbounds double, double* %469, i64 15
%471 = load double, double* %470
%472 = load double, double* %19
%473 = load double, double* %23
%474 = call double @llvm.fmuladd.f64(double %471, double %472, double %473)
store double %474, double* %23
%475 = load double*, double** %13
%476 = getelementptr inbounds double, double* %475, i64 12
%477 = load double, double* %476
%478 = load double, double* %19
%479 = load double, double* %24
%480 = call double @llvm.fmuladd.f64(double %477, double %478, double %479)
store double %480, double* %24
%481 = load double*, double** %13
%482 = getelementptr inbounds double, double* %481, i64 13
%483 = load double, double* %482
%484 = load double, double* %19
%485 = load double, double* %25
%486 = call double @llvm.fmuladd.f64(double %483, double %484, double %485)
store double %486, double* %25
%487 = load double*, double** %13
%488 = getelementptr inbounds double, double* %487, i64 14
%489 = load double, double* %488
%490 = load double, double* %19
%491 = load double, double* %26
%492 = call double @llvm.fmuladd.f64(double %489, double %490, double %491)
store double %492, double* %26
%493 = load double*, double** %13
%494 = getelementptr inbounds double, double* %493, i64 15
%495 = load double, double* %494
%496 = load double, double* %19
%497 = load double, double* %27
%498 = call double @llvm.fmuladd.f64(double %495, double %496, double %497)
store double %498, double* %27
%499 = load double*, double** %8
%500 = getelementptr inbounds double, double* %499, i64 16
store double* %500, double** %8
%501 = load double*, double** %13
%502 = getelementptr inbounds double, double* %501, i64 16
store double* %502, double** %13
%503 = load double*, double** %10
%504 = getelementptr inbounds double, double* %503, i64 4
store double* %504, double** %10
br label %505
505: ; preds = %294
%506 = load i32, i32* %15
%507 = add nsw i32 %506, 4
store i32 %507, i32* %15
br label %289
508: ; preds = %289
br label %509
509: ; preds = %571, %508
%510 = load i32, i32* %15
%511 = load i32, i32* %7
%512 = icmp slt i32 %510, %511
br i1 %512, label %513, label %574
513: ; preds = %509
%514 = load double*, double** %10
%515 = getelementptr inbounds double, double* %514, i64 0
%516 = load double, double* %515
store double %516, double* %16
%517 = load double*, double** %8
%518 = getelementptr inbounds double, double* %517, i64 0
%519 = load double, double* %518
%520 = load double, double* %16
%521 = load double, double* %20
%522 = call double @llvm.fmuladd.f64(double %519, double %520, double %521)
store double %522, double* %20
%523 = load double*, double** %8
%524 = getelementptr inbounds double, double* %523, i64 1
%525 = load double, double* %524
%526 = load double, double* %16
%527 = load double, double* %21
%528 = call double @llvm.fmuladd.f64(double %525, double %526, double %527)
store double %528, double* %21
%529 = load double*, double** %8
%530 = getelementptr inbounds double, double* %529, i64 2
%531 = load double, double* %530
%532 = load double, double* %16
%533 = load double, double* %22
%534 = call double @llvm.fmuladd.f64(double %531, double %532, double %533)
store double %534, double* %22
%535 = load double*, double** %8
%536 = getelementptr inbounds double, double* %535, i64 3
%537 = load double, double* %536
%538 = load double, double* %16
%539 = load double, double* %23
%540 = call double @llvm.fmuladd.f64(double %537, double %538, double %539)
store double %540, double* %23
%541 = load double*, double** %13
%542 = getelementptr inbounds double, double* %541, i64 0
%543 = load double, double* %542
%544 = load double, double* %16
%545 = load double, double* %24
%546 = call double @llvm.fmuladd.f64(double %543, double %544, double %545)
store double %546, double* %24
%547 = load double*, double** %13
%548 = getelementptr inbounds double, double* %547, i64 1
%549 = load double, double* %548
%550 = load double, double* %16
%551 = load double, double* %25
%552 = call double @llvm.fmuladd.f64(double %549, double %550, double %551)
store double %552, double* %25
%553 = load double*, double** %13
%554 = getelementptr inbounds double, double* %553, i64 2
%555 = load double, double* %554
%556 = load double, double* %16
%557 = load double, double* %26
%558 = call double @llvm.fmuladd.f64(double %555, double %556, double %557)
store double %558, double* %26
%559 = load double*, double** %13
%560 = getelementptr inbounds double, double* %559, i64 3
%561 = load double, double* %560
%562 = load double, double* %16
%563 = load double, double* %27
%564 = call double @llvm.fmuladd.f64(double %561, double %562, double %563)
store double %564, double* %27
%565 = load double*, double** %8
%566 = getelementptr inbounds double, double* %565, i64 4
store double* %566, double** %8
%567 = load double*, double** %13
%568 = getelementptr inbounds double, double* %567, i64 4
store double* %568, double** %13
%569 = load double*, double** %10
%570 = getelementptr inbounds double, double* %569, i64 1
store double* %570, double** %10
br label %571
571: ; preds = %513
%572 = load i32, i32* %15
%573 = add nsw i32 %572, 1
store i32 %573, i32* %15
br label %509
574: ; preds = %509
%575 = load i32, i32* %12
%576 = icmp eq i32 %575, 0
br i1 %576, label %577, label %602
577: ; preds = %574
%578 = load double, double* %20
%579 = load double*, double** %11
%580 = getelementptr inbounds double, double* %579, i64 0
store double %578, double* %580
%581 = load double, double* %21
%582 = load double*, double** %11
%583 = getelementptr inbounds double, double* %582, i64 1
store double %581, double* %583
%584 = load double, double* %22
%585 = load double*, double** %11
%586 = getelementptr inbounds double, double* %585, i64 2
store double %584, double* %586
%587 = load double, double* %23
%588 = load double*, double** %11
%589 = getelementptr inbounds double, double* %588, i64 3
store double %587, double* %589
%590 = load double, double* %24
%591 = load double*, double** %11
%592 = getelementptr inbounds double, double* %591, i64 4
store double %590, double* %592
%593 = load double, double* %25
%594 = load double*, double** %11
%595 = getelementptr inbounds double, double* %594, i64 5
store double %593, double* %595
%596 = load double, double* %26
%597 = load double*, double** %11
%598 = getelementptr inbounds double, double* %597, i64 6
store double %596, double* %598
%599 = load double, double* %27
%600 = load double*, double** %11
%601 = getelementptr inbounds double, double* %600, i64 7
store double %599, double* %601
br label %688
602: ; preds = %574
%603 = load i32, i32* %12
%604 = icmp eq i32 %603, 1
br i1 %604, label %605, label %646
605: ; preds = %602
%606 = load double, double* %20
%607 = load double*, double** %11
%608 = getelementptr inbounds double, double* %607, i64 0
%609 = load double, double* %608
%610 = fadd double %609, %606
store double %610, double* %608
%611 = load double, double* %21
%612 = load double*, double** %11
%613 = getelementptr inbounds double, double* %612, i64 1
%614 = load double, double* %613
%615 = fadd double %614, %611
store double %615, double* %613
%616 = load double, double* %22
%617 = load double*, double** %11
%618 = getelementptr inbounds double, double* %617, i64 2
%619 = load double, double* %618
%620 = fadd double %619, %616
store double %620, double* %618
%621 = load double, double* %23
%622 = load double*, double** %11
%623 = getelementptr inbounds double, double* %622, i64 3
%624 = load double, double* %623
%625 = fadd double %624, %621
store double %625, double* %623
%626 = load double, double* %24
%627 = load double*, double** %11
%628 = getelementptr inbounds double, double* %627, i64 4
%629 = load double, double* %628
%630 = fadd double %629, %626
store double %630, double* %628
%631 = load double, double* %25
%632 = load double*, double** %11
%633 = getelementptr inbounds double, double* %632, i64 5
%634 = load double, double* %633
%635 = fadd double %634, %631
store double %635, double* %633
%636 = load double, double* %26
%637 = load double*, double** %11
%638 = getelementptr inbounds double, double* %637, i64 6
%639 = load double, double* %638
%640 = fadd double %639, %636
store double %640, double* %638
%641 = load double, double* %27
%642 = load double*, double** %11
%643 = getelementptr inbounds double, double* %642, i64 7
%644 = load double, double* %643
%645 = fadd double %644, %641
store double %645, double* %643
br label %687
646: ; preds = %602
%647 = load double, double* %20
%648 = load double*, double** %11
%649 = getelementptr inbounds double, double* %648, i64 0
%650 = load double, double* %649
%651 = fsub double %650, %647
store double %651, double* %649
%652 = load double, double* %21
%653 = load double*, double** %11
%654 = getelementptr inbounds double, double* %653, i64 1
%655 = load double, double* %654
%656 = fsub double %655, %652
store double %656, double* %654
%657 = load double, double* %22
%658 = load double*, double** %11
%659 = getelementptr inbounds double, double* %658, i64 2
%660 = load double, double* %659
%661 = fsub double %660, %657
store double %661, double* %659
%662 = load double, double* %23
%663 = load double*, double** %11
%664 = getelementptr inbounds double, double* %663, i64 3
%665 = load double, double* %664
%666 = fsub double %665, %662
store double %666, double* %664
%667 = load double, double* %24
%668 = load double*, double** %11
%669 = getelementptr inbounds double, double* %668, i64 4
%670 = load double, double* %669
%671 = fsub double %670, %667
store double %671, double* %669
%672 = load double, double* %25
%673 = load double*, double** %11
%674 = getelementptr inbounds double, double* %673, i64 5
%675 = load double, double* %674
%676 = fsub double %675, %672
store double %676, double* %674
%677 = load double, double* %26
%678 = load double*, double** %11
%679 = getelementptr inbounds double, double* %678, i64 6
%680 = load double, double* %679
%681 = fsub double %680, %677
store double %681, double* %679
%682 = load double, double* %27
%683 = load double*, double** %11
%684 = getelementptr inbounds double, double* %683, i64 7
%685 = load double, double* %684
%686 = fsub double %685, %682
store double %686, double* %684
br label %687
687: ; preds = %646, %605
br label %688
688: ; preds = %30, %687, %577
ret void
}

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