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;
  __builtin_prefetch(A0);
  __builtin_prefetch(A1);
  __builtin_prefetch(A0 + 8);
  __builtin_prefetch(A1 + 8);
  const int lda = 4;
  int k;
  double x_0, x_1, x_2, x_3, y_0 = 0, y_1 = 0, y_2 = 0, y_3 = 0, y_4 = 0,
                             y_5 = 0, y_6 = 0, y_7 = 0;
  __builtin_prefetch(A0 + 4 * lda);
  __builtin_prefetch(A1 + 4 * lda);
  __builtin_prefetch(A0 + 4 * lda + 8);
  __builtin_prefetch(A1 + 4 * lda + 8);
  x_0 = x[0];
  x_1 = x[1];
  x_2 = x[2];
  x_3 = x[3];
  y_0 += A0[0 + lda * 0] * x_0;
  y_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;
  __builtin_prefetch(A0 + 4 * lda);
  __builtin_prefetch(A1 + 4 * lda);
  __builtin_prefetch(A0 + 4 * lda + 8);
  __builtin_prefetch(A1 + 4 * lda + 8);
  x_0 = x[0];
  x_1 = x[1];
  x_2 = x[2];
  x_3 = x[3];
  y_0 += A0[0 + lda * 0] * x_0;
  y_1 += A0[1 + lda * 0] * x_0;
  y_2 += A0[2 + lda * 0] * x_0;
  y_3 += A0[3 + lda * 0] * x_0;
  y_4 += A1[0 + lda * 0] * x_0;
  y_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) {
    __builtin_prefetch(A0 + 4 * lda);
    __builtin_prefetch(A1 + 4 * lda);
    __builtin_prefetch(A0 + 4 * lda + 8);
    __builtin_prefetch(A1 + 4 * lda + 8);
    x_0 = x[0];
    x_1 = x[1];
    x_2 = x[2];
    x_3 = x[3];
    y_0 += A0[0 + lda * 0] * x_0;
    y_1 += A0[1 + lda * 0] * x_0;
    y_2 += A0[2 + lda * 0] * x_0;
    y_3 += A0[3 + lda * 0] * x_0;
    y_4 += A1[0 + lda * 0] * x_0;
    y_5 += A1[1 + lda * 0] * x_0;
    y_6 += A1[2 + lda * 0] * x_0;
    y_7 += A1[3 + lda * 0] * x_0;
    y_0 += A0[0 + lda * 1] * x_1;
    y_1 += A0[1 + lda * 1] * x_1;
    y_2 += A0[2 + lda * 1] * x_1;
    y_3 += A0[3 + lda * 1] * x_1;
    y_4 += A1[0 + lda * 1] * x_1;
    y_5 += A1[1 + lda * 1] * x_1;
    y_6 += A1[2 + lda * 1] * x_1;
    y_7 += A1[3 + lda * 1] * x_1;
    y_0 += A0[0 + lda * 2] * x_2;
    y_1 += A0[1 + lda * 2] * x_2;
    y_2 += A0[2 + lda * 2] * x_2;
    y_3 += A0[3 + lda * 2] * x_2;
    y_4 += A1[0 + lda * 2] * x_2;
    y_5 += A1[1 + lda * 2] * x_2;
    y_6 += A1[2 + lda * 2] * x_2;
    y_7 += A1[3 + lda * 2] * x_2;
    y_0 += A0[0 + lda * 3] * x_3;
    y_1 += A0[1 + lda * 3] * x_3;
    y_2 += A0[2 + lda * 3] * x_3;
    y_3 += A0[3 + lda * 3] * x_3;
    y_4 += A1[0 + lda * 3] * x_3;
    y_5 += A1[1 + lda * 3] * x_3;
    y_6 += A1[2 + lda * 3] * x_3;
    y_7 += A1[3 + lda * 3] * x_3;
    A0 += 4 * lda;
    A1 += 4 * lda;
    x += 4;
  }
  for (; k < kmax; k++) {
    x_0 = x[0];
    y_0 += A0[0 + lda * 0] * x_0;
    y_1 += A0[1 + lda * 0] * x_0;
    y_2 += A0[2 + lda * 0] * x_0;
    y_3 += A0[3 + lda * 0] * x_0;
    y_4 += A1[0 + lda * 0] * x_0;
    y_5 += A1[1 + lda * 0] * x_0;
    y_6 += A1[2 + lda * 0] * x_0;
    y_7 += A1[3 + lda * 0] * x_0;
    A0 += 1 * lda;
    A1 += 1 * lda;
    x += 1;
  }
  if (alg == 0) {
    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    2032 <kernel_dtrmv_u_n_8_lib4+0xf32>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
prefetcht0 (%rax)
mov    -0x38(%rbp),%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x38(%rbp),%rax
add    $0x40,%rax
prefetcht0 (%rax)
movl   $0x4,-0x3c(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x70(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  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    -0x10(%rbp),%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -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
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    1cca <kernel_dtrmv_u_n_8_lib4+0xbca>
mov    -0x10(%rbp),%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x38(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x38(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x38(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x38(%rbp)
mov    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x40(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x40(%rbp)
jmp    17b2 <kernel_dtrmv_u_n_8_lib4+0x6b2>
jmp    1ccf <kernel_dtrmv_u_n_8_lib4+0xbcf>
mov    -0x40(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1e30 <kernel_dtrmv_u_n_8_lib4+0xd30>
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    1ccf <kernel_dtrmv_u_n_8_lib4+0xbcf>
cmpl   $0x0,-0x2c(%rbp)
jne    1eba <kernel_dtrmv_u_n_8_lib4+0xdba>
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    2032 <kernel_dtrmv_u_n_8_lib4+0xf32>
cmpl   $0x1,-0x2c(%rbp)
jne    1f6b <kernel_dtrmv_u_n_8_lib4+0xe6b>
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    202d <kernel_dtrmv_u_n_8_lib4+0xf2d>
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
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    2032 <kernel_dtrmv_u_n_8_lib4+0xf32>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dtrmv_u_n_8_lib4>:
test   %edi,%edi
jle    1648 <kernel_dtrmv_u_n_8_lib4+0x548>
shl    $0x2,%edx
movslq %edx,%r10
prefetcht0 (%rsi)
prefetcht0 (%rsi,%r10,8)
prefetcht0 0x40(%rsi)
prefetcht0 0x40(%rsi,%r10,8)
prefetcht0 0x80(%rsi)
prefetcht0 0x80(%rsi,%r10,8)
prefetcht0 0xc0(%rsi)
prefetcht0 0xc0(%rsi,%r10,8)
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
prefetcht0 0x100(%rsi)
prefetcht0 0x100(%rsi,%r10,8)
prefetcht0 0x140(%rsi)
prefetcht0 0x140(%rsi,%r10,8)
movsd  0x20(%rcx),%xmm6
movsd  0x30(%rcx),%xmm9
movapd %xmm6,%xmm7
unpcklpd %xmm6,%xmm7
movupd 0x80(%rsi),%xmm1
movupd 0x90(%rsi),%xmm4
movupd 0xa0(%rsi),%xmm3
movupd 0xb0(%rsi),%xmm0
mulpd  %xmm7,%xmm1
addpd  %xmm2,%xmm1
mulpd  %xmm7,%xmm4
addpd  %xmm5,%xmm4
mulsd  0x80(%rsi,%r10,8),%xmm6
addsd  %xmm8,%xmm6
movsd  0x28(%rcx),%xmm5
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm3
addpd  %xmm1,%xmm3
mulpd  %xmm5,%xmm0
addpd  %xmm4,%xmm0
movq   %xmm6,%xmm1
movupd 0xa0(%rsi,%r10,8),%xmm4
movupd 0xc0(%rsi,%r10,8),%xmm6
movupd 0xe0(%rsi,%r10,8),%xmm10
movupd 0xf0(%rsi,%r10,8),%xmm2
mulpd  %xmm5,%xmm4
addpd  %xmm1,%xmm4
movupd 0xc0(%rsi),%xmm1
movapd %xmm9,%xmm5
unpcklpd %xmm9,%xmm5
mulpd  %xmm5,%xmm1
addpd  %xmm3,%xmm1
movupd 0xd0(%rsi),%xmm3
mulpd  %xmm5,%xmm3
addpd  %xmm0,%xmm3
mulpd  %xmm6,%xmm5
addpd  %xmm4,%xmm5
mulsd  0xd0(%rsi,%r10,8),%xmm9
addsd  %xmm8,%xmm9
movupd 0xe0(%rsi),%xmm11
movsd  0x38(%rcx),%xmm12
unpcklpd %xmm12,%xmm12
mulpd  %xmm12,%xmm11
addpd  %xmm1,%xmm11
movupd 0xf0(%rsi),%xmm13
mulpd  %xmm12,%xmm13
addpd  %xmm3,%xmm13
mulpd  %xmm12,%xmm10
addpd  %xmm5,%xmm10
movq   %xmm9,%xmm0
mulpd  %xmm2,%xmm12
addpd  %xmm0,%xmm12
add    $0x40,%rcx
cmp    $0xc,%edi
jb     14f9 <kernel_dtrmv_u_n_8_lib4+0x3f9>
lea    -0x3(%rdi),%r11d
lea    0x100(,%r10,8),%rax
mov    $0x8,%edx
nop
prefetcht0 0x180(%rsi)
prefetcht0 0x80(%rsi,%rax,1)
prefetcht0 0x1c0(%rsi)
prefetcht0 0xc0(%rsi,%rax,1)
movupd 0x100(%rsi),%xmm3
movupd 0x110(%rsi),%xmm2
movupd 0x120(%rsi),%xmm14
movupd 0x130(%rsi),%xmm9
movsd  (%rcx),%xmm4
movsd  0x8(%rcx),%xmm6
movsd  0x10(%rcx),%xmm7
movsd  0x18(%rcx),%xmm8
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm3
addpd  %xmm11,%xmm3
mulpd  %xmm4,%xmm2
addpd  %xmm13,%xmm2
movupd (%rsi,%rax,1),%xmm5
movupd 0x10(%rsi,%rax,1),%xmm0
movupd 0x20(%rsi,%rax,1),%xmm1
movupd 0x30(%rsi,%rax,1),%xmm11
mulpd  %xmm4,%xmm5
addpd  %xmm10,%xmm5
mulpd  %xmm4,%xmm0
addpd  %xmm12,%xmm0
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm14
addpd  %xmm3,%xmm14
mulpd  %xmm6,%xmm9
addpd  %xmm2,%xmm9
mulpd  %xmm6,%xmm1
addpd  %xmm5,%xmm1
mulpd  %xmm11,%xmm6
addpd  %xmm0,%xmm6
movupd 0x140(%rsi),%xmm5
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm5
addpd  %xmm14,%xmm5
movupd 0x150(%rsi),%xmm4
mulpd  %xmm7,%xmm4
addpd  %xmm9,%xmm4
movupd 0x40(%rsi,%rax,1),%xmm0
mulpd  %xmm7,%xmm0
addpd  %xmm1,%xmm0
movupd 0x50(%rsi,%rax,1),%xmm2
mulpd  %xmm7,%xmm2
addpd  %xmm6,%xmm2
movupd 0x160(%rsi),%xmm6
unpcklpd %xmm8,%xmm8
mulpd  %xmm8,%xmm6
movapd %xmm6,%xmm11
addpd  %xmm5,%xmm11
movupd 0x170(%rsi),%xmm7
mulpd  %xmm8,%xmm7
movapd %xmm7,%xmm13
addpd  %xmm4,%xmm13
movupd 0x60(%rsi,%rax,1),%xmm1
mulpd  %xmm8,%xmm1
movapd %xmm1,%xmm10
addpd  %xmm0,%xmm10
movupd 0x70(%rsi,%rax,1),%xmm3
mulpd  %xmm8,%xmm3
movapd %xmm3,%xmm12
addpd  %xmm2,%xmm12
add    $0x20,%rcx
add    $0x4,%edx
sub    $0xffffffffffffff80,%rsi
cmp    %r11d,%edx
jl     1320 <kernel_dtrmv_u_n_8_lib4+0x220>
addpd  %xmm2,%xmm3
addpd  %xmm0,%xmm1
addpd  %xmm4,%xmm7
addpd  %xmm5,%xmm6
mov    %edi,%edx
and    $0xfffffffc,%edx
lea    (%rsi,%r10,8),%rax
add    $0x100,%rax
add    $0x100,%rsi
movapd %xmm6,%xmm11
movapd %xmm7,%xmm13
movapd %xmm1,%xmm10
movapd %xmm3,%xmm12
cmp    %edi,%edx
jl     1513 <kernel_dtrmv_u_n_8_lib4+0x413>
cmp    $0x1,%r9d
je     15c3 <kernel_dtrmv_u_n_8_lib4+0x4c3>
test   %r9d,%r9d
jne    1606 <kernel_dtrmv_u_n_8_lib4+0x506>
movupd %xmm11,(%r8)
movupd %xmm13,0x10(%r8)
movupd %xmm10,0x20(%r8)
movupd %xmm12,0x30(%r8)
ret
lea    (%rsi,%r10,8),%rax
add    $0x100,%rax
add    $0x100,%rsi
mov    $0x8,%edx
cmp    %edi,%edx
jge    14ce <kernel_dtrmv_u_n_8_lib4+0x3ce>
sub    %edx,%edi
xor    %edx,%edx
nopw   0x0(%rax,%rax,1)
movapd %xmm12,%xmm6
movapd %xmm10,%xmm2
movapd %xmm13,%xmm1
movapd %xmm11,%xmm8
movupd (%rsi,%rdx,4),%xmm5
movupd 0x10(%rsi,%rdx,4),%xmm4
movsd  (%rcx,%rdx,1),%xmm0
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm5
movapd %xmm5,%xmm11
addpd  %xmm8,%xmm11
mulpd  %xmm0,%xmm4
movapd %xmm4,%xmm13
addpd  %xmm1,%xmm13
movupd (%rax,%rdx,4),%xmm7
movupd 0x10(%rax,%rdx,4),%xmm3
mulpd  %xmm0,%xmm7
movapd %xmm7,%xmm10
addpd  %xmm2,%xmm10
mulpd  %xmm0,%xmm3
movapd %xmm3,%xmm12
addpd  %xmm6,%xmm12
add    $0x8,%rdx
add    $0xffffffff,%edi
jne    1520 <kernel_dtrmv_u_n_8_lib4+0x420>
addpd  %xmm6,%xmm3
addpd  %xmm2,%xmm7
addpd  %xmm1,%xmm4
addpd  %xmm8,%xmm5
movapd %xmm5,%xmm11
movapd %xmm4,%xmm13
movapd %xmm7,%xmm10
movapd %xmm3,%xmm12
cmp    $0x1,%r9d
jne    14d8 <kernel_dtrmv_u_n_8_lib4+0x3d8>
movupd (%r8),%xmm0
movupd 0x10(%r8),%xmm1
movupd 0x20(%r8),%xmm2
movupd 0x30(%r8),%xmm3
addpd  %xmm0,%xmm11
movupd %xmm11,(%r8)
addpd  %xmm1,%xmm13
movupd %xmm13,0x10(%r8)
addpd  %xmm2,%xmm10
movupd %xmm10,0x20(%r8)
addpd  %xmm3,%xmm12
movupd %xmm12,0x30(%r8)
ret
movupd (%r8),%xmm0
movupd 0x10(%r8),%xmm1
movupd 0x20(%r8),%xmm2
movupd 0x30(%r8),%xmm3
subpd  %xmm11,%xmm0
movupd %xmm0,(%r8)
subpd  %xmm13,%xmm1
movupd %xmm1,0x10(%r8)
subpd  %xmm10,%xmm2
movupd %xmm2,0x20(%r8)
subpd  %xmm12,%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 %740
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
%37 = load double*, double** %8
%38 = bitcast double* %37 to i8*
%39 = load double*, double** %13
%40 = bitcast double* %39 to i8*
%41 = load double*, double** %8
%42 = getelementptr inbounds double, double* %41, i64 8
%43 = bitcast double* %42 to i8*
%44 = load double*, double** %13
%45 = getelementptr inbounds double, double* %44, i64 8
%46 = bitcast double* %45 to i8*
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
%47 = load double*, double** %8
%48 = getelementptr inbounds double, double* %47, i64 16
%49 = bitcast double* %48 to i8*
%50 = load double*, double** %13
%51 = getelementptr inbounds double, double* %50, i64 16
%52 = bitcast double* %51 to i8*
%53 = load double*, double** %8
%54 = getelementptr inbounds double, double* %53, i64 16
%55 = getelementptr inbounds double, double* %54, i64 8
%56 = bitcast double* %55 to i8*
%57 = load double*, double** %13
%58 = getelementptr inbounds double, double* %57, i64 16
%59 = getelementptr inbounds double, double* %58, i64 8
%60 = bitcast double* %59 to i8*
%61 = load double*, double** %10
%62 = getelementptr inbounds double, double* %61, i64 0
%63 = load double, double* %62
store double %63, double* %16
%64 = load double*, double** %10
%65 = getelementptr inbounds double, double* %64, i64 1
%66 = load double, double* %65
store double %66, double* %17
%67 = load double*, double** %10
%68 = getelementptr inbounds double, double* %67, i64 2
%69 = load double, double* %68
store double %69, double* %18
%70 = load double*, double** %10
%71 = getelementptr inbounds double, double* %70, i64 3
%72 = load double, double* %71
store double %72, double* %19
%73 = load double*, double** %8
%74 = getelementptr inbounds double, double* %73, i64 0
%75 = load double, double* %74
%76 = load double, double* %16
%77 = load double, double* %20
%78 = call double @llvm.fmuladd.f64(double %75, double %76, double %77)
store double %78, double* %20
%79 = load double*, double** %8
%80 = getelementptr inbounds double, double* %79, i64 4
%81 = load double, double* %80
%82 = load double, double* %17
%83 = load double, double* %20
%84 = call double @llvm.fmuladd.f64(double %81, double %82, double %83)
store double %84, double* %20
%85 = load double*, double** %8
%86 = getelementptr inbounds double, double* %85, i64 5
%87 = load double, double* %86
%88 = load double, double* %17
%89 = load double, double* %21
%90 = call double @llvm.fmuladd.f64(double %87, double %88, double %89)
store double %90, double* %21
%91 = load double*, double** %8
%92 = getelementptr inbounds double, double* %91, i64 8
%93 = load double, double* %92
%94 = load double, double* %18
%95 = load double, double* %20
%96 = call double @llvm.fmuladd.f64(double %93, double %94, double %95)
store double %96, double* %20
%97 = load double*, double** %8
%98 = getelementptr inbounds double, double* %97, i64 9
%99 = load double, double* %98
%100 = load double, double* %18
%101 = load double, double* %21
%102 = call double @llvm.fmuladd.f64(double %99, double %100, double %101)
store double %102, double* %21
%103 = load double*, double** %8
%104 = getelementptr inbounds double, double* %103, i64 10
%105 = load double, double* %104
%106 = load double, double* %18
%107 = load double, double* %22
%108 = call double @llvm.fmuladd.f64(double %105, double %106, double %107)
store double %108, double* %22
%109 = load double*, double** %8
%110 = getelementptr inbounds double, double* %109, i64 12
%111 = load double, double* %110
%112 = load double, double* %19
%113 = load double, double* %20
%114 = call double @llvm.fmuladd.f64(double %111, double %112, double %113)
store double %114, double* %20
%115 = load double*, double** %8
%116 = getelementptr inbounds double, double* %115, i64 13
%117 = load double, double* %116
%118 = load double, double* %19
%119 = load double, double* %21
%120 = call double @llvm.fmuladd.f64(double %117, double %118, double %119)
store double %120, double* %21
%121 = load double*, double** %8
%122 = getelementptr inbounds double, double* %121, i64 14
%123 = load double, double* %122
%124 = load double, double* %19
%125 = load double, double* %22
%126 = call double @llvm.fmuladd.f64(double %123, double %124, double %125)
store double %126, double* %22
%127 = load double*, double** %8
%128 = getelementptr inbounds double, double* %127, i64 15
%129 = load double, double* %128
%130 = load double, double* %19
%131 = load double, double* %23
%132 = call double @llvm.fmuladd.f64(double %129, double %130, double %131)
store double %132, double* %23
%133 = load double*, double** %8
%134 = getelementptr inbounds double, double* %133, i64 16
store double* %134, double** %8
%135 = load double*, double** %13
%136 = getelementptr inbounds double, double* %135, i64 16
store double* %136, double** %13
%137 = load double*, double** %10
%138 = getelementptr inbounds double, double* %137, i64 4
store double* %138, double** %10
%139 = load double*, double** %8
%140 = getelementptr inbounds double, double* %139, i64 16
%141 = bitcast double* %140 to i8*
%142 = load double*, double** %13
%143 = getelementptr inbounds double, double* %142, i64 16
%144 = bitcast double* %143 to i8*
%145 = load double*, double** %8
%146 = getelementptr inbounds double, double* %145, i64 16
%147 = getelementptr inbounds double, double* %146, i64 8
%148 = bitcast double* %147 to i8*
%149 = load double*, double** %13
%150 = getelementptr inbounds double, double* %149, i64 16
%151 = getelementptr inbounds double, double* %150, i64 8
%152 = bitcast double* %151 to i8*
%153 = load double*, double** %10
%154 = getelementptr inbounds double, double* %153, i64 0
%155 = load double, double* %154
store double %155, double* %16
%156 = load double*, double** %10
%157 = getelementptr inbounds double, double* %156, i64 1
%158 = load double, double* %157
store double %158, double* %17
%159 = load double*, double** %10
%160 = getelementptr inbounds double, double* %159, i64 2
%161 = load double, double* %160
store double %161, double* %18
%162 = load double*, double** %10
%163 = getelementptr inbounds double, double* %162, i64 3
%164 = load double, double* %163
store double %164, double* %19
%165 = load double*, double** %8
%166 = getelementptr inbounds double, double* %165, i64 0
%167 = load double, double* %166
%168 = load double, double* %16
%169 = load double, double* %20
%170 = call double @llvm.fmuladd.f64(double %167, double %168, double %169)
store double %170, double* %20
%171 = load double*, double** %8
%172 = getelementptr inbounds double, double* %171, i64 1
%173 = load double, double* %172
%174 = load double, double* %16
%175 = load double, double* %21
%176 = call double @llvm.fmuladd.f64(double %173, double %174, double %175)
store double %176, double* %21
%177 = load double*, double** %8
%178 = getelementptr inbounds double, double* %177, i64 2
%179 = load double, double* %178
%180 = load double, double* %16
%181 = load double, double* %22
%182 = call double @llvm.fmuladd.f64(double %179, double %180, double %181)
store double %182, double* %22
%183 = load double*, double** %8
%184 = getelementptr inbounds double, double* %183, i64 3
%185 = load double, double* %184
%186 = load double, double* %16
%187 = load double, double* %23
%188 = call double @llvm.fmuladd.f64(double %185, double %186, double %187)
store double %188, double* %23
%189 = load double*, double** %13
%190 = getelementptr inbounds double, double* %189, i64 0
%191 = load double, double* %190
%192 = load double, double* %16
%193 = load double, double* %24
%194 = call double @llvm.fmuladd.f64(double %191, double %192, double %193)
store double %194, double* %24
%195 = load double*, double** %8
%196 = getelementptr inbounds double, double* %195, i64 4
%197 = load double, double* %196
%198 = load double, double* %17
%199 = load double, double* %20
%200 = call double @llvm.fmuladd.f64(double %197, double %198, double %199)
store double %200, double* %20
%201 = load double*, double** %8
%202 = getelementptr inbounds double, double* %201, i64 5
%203 = load double, double* %202
%204 = load double, double* %17
%205 = load double, double* %21
%206 = call double @llvm.fmuladd.f64(double %203, double %204, double %205)
store double %206, double* %21
%207 = load double*, double** %8
%208 = getelementptr inbounds double, double* %207, i64 6
%209 = load double, double* %208
%210 = load double, double* %17
%211 = load double, double* %22
%212 = call double @llvm.fmuladd.f64(double %209, double %210, double %211)
store double %212, double* %22
%213 = load double*, double** %8
%214 = getelementptr inbounds double, double* %213, i64 7
%215 = load double, double* %214
%216 = load double, double* %17
%217 = load double, double* %23
%218 = call double @llvm.fmuladd.f64(double %215, double %216, double %217)
store double %218, double* %23
%219 = load double*, double** %13
%220 = getelementptr inbounds double, double* %219, i64 4
%221 = load double, double* %220
%222 = load double, double* %17
%223 = load double, double* %24
%224 = call double @llvm.fmuladd.f64(double %221, double %222, double %223)
store double %224, double* %24
%225 = load double*, double** %13
%226 = getelementptr inbounds double, double* %225, i64 5
%227 = load double, double* %226
%228 = load double, double* %17
%229 = load double, double* %25
%230 = call double @llvm.fmuladd.f64(double %227, double %228, double %229)
store double %230, double* %25
%231 = load double*, double** %8
%232 = getelementptr inbounds double, double* %231, i64 8
%233 = load double, double* %232
%234 = load double, double* %18
%235 = load double, double* %20
%236 = call double @llvm.fmuladd.f64(double %233, double %234, double %235)
store double %236, double* %20
%237 = load double*, double** %8
%238 = getelementptr inbounds double, double* %237, i64 9
%239 = load double, double* %238
%240 = load double, double* %18
%241 = load double, double* %21
%242 = call double @llvm.fmuladd.f64(double %239, double %240, double %241)
store double %242, double* %21
%243 = load double*, double** %8
%244 = getelementptr inbounds double, double* %243, i64 10
%245 = load double, double* %244
%246 = load double, double* %18
%247 = load double, double* %22
%248 = call double @llvm.fmuladd.f64(double %245, double %246, double %247)
store double %248, double* %22
%249 = load double*, double** %8
%250 = getelementptr inbounds double, double* %249, i64 11
%251 = load double, double* %250
%252 = load double, double* %18
%253 = load double, double* %23
%254 = call double @llvm.fmuladd.f64(double %251, double %252, double %253)
store double %254, double* %23
%255 = load double*, double** %13
%256 = getelementptr inbounds double, double* %255, i64 8
%257 = load double, double* %256
%258 = load double, double* %18
%259 = load double, double* %24
%260 = call double @llvm.fmuladd.f64(double %257, double %258, double %259)
store double %260, double* %24
%261 = load double*, double** %13
%262 = getelementptr inbounds double, double* %261, i64 9
%263 = load double, double* %262
%264 = load double, double* %18
%265 = load double, double* %25
%266 = call double @llvm.fmuladd.f64(double %263, double %264, double %265)
store double %266, double* %25
%267 = load double*, double** %13
%268 = getelementptr inbounds double, double* %267, i64 10
%269 = load double, double* %268
%270 = load double, double* %18
%271 = load double, double* %26
%272 = call double @llvm.fmuladd.f64(double %269, double %270, double %271)
store double %272, double* %26
%273 = load double*, double** %8
%274 = getelementptr inbounds double, double* %273, i64 12
%275 = load double, double* %274
%276 = load double, double* %19
%277 = load double, double* %20
%278 = call double @llvm.fmuladd.f64(double %275, double %276, double %277)
store double %278, double* %20
%279 = load double*, double** %8
%280 = getelementptr inbounds double, double* %279, i64 13
%281 = load double, double* %280
%282 = load double, double* %19
%283 = load double, double* %21
%284 = call double @llvm.fmuladd.f64(double %281, double %282, double %283)
store double %284, double* %21
%285 = load double*, double** %8
%286 = getelementptr inbounds double, double* %285, i64 14
%287 = load double, double* %286
%288 = load double, double* %19
%289 = load double, double* %22
%290 = call double @llvm.fmuladd.f64(double %287, double %288, double %289)
store double %290, double* %22
%291 = load double*, double** %8
%292 = getelementptr inbounds double, double* %291, i64 15
%293 = load double, double* %292
%294 = load double, double* %19
%295 = load double, double* %23
%296 = call double @llvm.fmuladd.f64(double %293, double %294, double %295)
store double %296, double* %23
%297 = load double*, double** %13
%298 = getelementptr inbounds double, double* %297, i64 12
%299 = load double, double* %298
%300 = load double, double* %19
%301 = load double, double* %24
%302 = call double @llvm.fmuladd.f64(double %299, double %300, double %301)
store double %302, double* %24
%303 = load double*, double** %13
%304 = getelementptr inbounds double, double* %303, i64 13
%305 = load double, double* %304
%306 = load double, double* %19
%307 = load double, double* %25
%308 = call double @llvm.fmuladd.f64(double %305, double %306, double %307)
store double %308, double* %25
%309 = load double*, double** %13
%310 = getelementptr inbounds double, double* %309, i64 14
%311 = load double, double* %310
%312 = load double, double* %19
%313 = load double, double* %26
%314 = call double @llvm.fmuladd.f64(double %311, double %312, double %313)
store double %314, double* %26
%315 = load double*, double** %13
%316 = getelementptr inbounds double, double* %315, i64 15
%317 = load double, double* %316
%318 = load double, double* %19
%319 = load double, double* %27
%320 = call double @llvm.fmuladd.f64(double %317, double %318, double %319)
store double %320, double* %27
%321 = load double*, double** %8
%322 = getelementptr inbounds double, double* %321, i64 16
store double* %322, double** %8
%323 = load double*, double** %13
%324 = getelementptr inbounds double, double* %323, i64 16
store double* %324, double** %13
%325 = load double*, double** %10
%326 = getelementptr inbounds double, double* %325, i64 4
store double* %326, double** %10
store i32 8, i32* %15
br label %327
327: ; preds = %557, %31
%328 = load i32, i32* %15
%329 = load i32, i32* %7
%330 = sub nsw i32 %329, 3
%331 = icmp slt i32 %328, %330
br i1 %331, label %332, label %560
332: ; preds = %327
%333 = load double*, double** %8
%334 = getelementptr inbounds double, double* %333, i64 16
%335 = bitcast double* %334 to i8*
%336 = load double*, double** %13
%337 = getelementptr inbounds double, double* %336, i64 16
%338 = bitcast double* %337 to i8*
%339 = load double*, double** %8
%340 = getelementptr inbounds double, double* %339, i64 16
%341 = getelementptr inbounds double, double* %340, i64 8
%342 = bitcast double* %341 to i8*
%343 = load double*, double** %13
%344 = getelementptr inbounds double, double* %343, i64 16
%345 = getelementptr inbounds double, double* %344, i64 8
%346 = bitcast double* %345 to i8*
%347 = load double*, double** %10
%348 = getelementptr inbounds double, double* %347, i64 0
%349 = load double, double* %348
store double %349, double* %16
%350 = load double*, double** %10
%351 = getelementptr inbounds double, double* %350, i64 1
%352 = load double, double* %351
store double %352, double* %17
%353 = load double*, double** %10
%354 = getelementptr inbounds double, double* %353, i64 2
%355 = load double, double* %354
store double %355, double* %18
%356 = load double*, double** %10
%357 = getelementptr inbounds double, double* %356, i64 3
%358 = load double, double* %357
store double %358, double* %19
%359 = load double*, double** %8
%360 = getelementptr inbounds double, double* %359, i64 0
%361 = load double, double* %360
%362 = load double, double* %16
%363 = load double, double* %20
%364 = call double @llvm.fmuladd.f64(double %361, double %362, double %363)
store double %364, double* %20
%365 = load double*, double** %8
%366 = getelementptr inbounds double, double* %365, i64 1
%367 = load double, double* %366
%368 = load double, double* %16
%369 = load double, double* %21
%370 = call double @llvm.fmuladd.f64(double %367, double %368, double %369)
store double %370, double* %21
%371 = load double*, double** %8
%372 = getelementptr inbounds double, double* %371, i64 2
%373 = load double, double* %372
%374 = load double, double* %16
%375 = load double, double* %22
%376 = call double @llvm.fmuladd.f64(double %373, double %374, double %375)
store double %376, double* %22
%377 = load double*, double** %8
%378 = getelementptr inbounds double, double* %377, i64 3
%379 = load double, double* %378
%380 = load double, double* %16
%381 = load double, double* %23
%382 = call double @llvm.fmuladd.f64(double %379, double %380, double %381)
store double %382, double* %23
%383 = load double*, double** %13
%384 = getelementptr inbounds double, double* %383, i64 0
%385 = load double, double* %384
%386 = load double, double* %16
%387 = load double, double* %24
%388 = call double @llvm.fmuladd.f64(double %385, double %386, double %387)
store double %388, double* %24
%389 = load double*, double** %13
%390 = getelementptr inbounds double, double* %389, i64 1
%391 = load double, double* %390
%392 = load double, double* %16
%393 = load double, double* %25
%394 = call double @llvm.fmuladd.f64(double %391, double %392, double %393)
store double %394, double* %25
%395 = load double*, double** %13
%396 = getelementptr inbounds double, double* %395, i64 2
%397 = load double, double* %396
%398 = load double, double* %16
%399 = load double, double* %26
%400 = call double @llvm.fmuladd.f64(double %397, double %398, double %399)
store double %400, double* %26
%401 = load double*, double** %13
%402 = getelementptr inbounds double, double* %401, i64 3
%403 = load double, double* %402
%404 = load double, double* %16
%405 = load double, double* %27
%406 = call double @llvm.fmuladd.f64(double %403, double %404, double %405)
store double %406, double* %27
%407 = load double*, double** %8
%408 = getelementptr inbounds double, double* %407, i64 4
%409 = load double, double* %408
%410 = load double, double* %17
%411 = load double, double* %20
%412 = call double @llvm.fmuladd.f64(double %409, double %410, double %411)
store double %412, double* %20
%413 = load double*, double** %8
%414 = getelementptr inbounds double, double* %413, i64 5
%415 = load double, double* %414
%416 = load double, double* %17
%417 = load double, double* %21
%418 = call double @llvm.fmuladd.f64(double %415, double %416, double %417)
store double %418, double* %21
%419 = load double*, double** %8
%420 = getelementptr inbounds double, double* %419, i64 6
%421 = load double, double* %420
%422 = load double, double* %17
%423 = load double, double* %22
%424 = call double @llvm.fmuladd.f64(double %421, double %422, double %423)
store double %424, double* %22
%425 = load double*, double** %8
%426 = getelementptr inbounds double, double* %425, i64 7
%427 = load double, double* %426
%428 = load double, double* %17
%429 = load double, double* %23
%430 = call double @llvm.fmuladd.f64(double %427, double %428, double %429)
store double %430, double* %23
%431 = load double*, double** %13
%432 = getelementptr inbounds double, double* %431, i64 4
%433 = load double, double* %432
%434 = load double, double* %17
%435 = load double, double* %24
%436 = call double @llvm.fmuladd.f64(double %433, double %434, double %435)
store double %436, double* %24
%437 = load double*, double** %13
%438 = getelementptr inbounds double, double* %437, i64 5
%439 = load double, double* %438
%440 = load double, double* %17
%441 = load double, double* %25
%442 = call double @llvm.fmuladd.f64(double %439, double %440, double %441)
store double %442, double* %25
%443 = load double*, double** %13
%444 = getelementptr inbounds double, double* %443, i64 6
%445 = load double, double* %444
%446 = load double, double* %17
%447 = load double, double* %26
%448 = call double @llvm.fmuladd.f64(double %445, double %446, double %447)
store double %448, double* %26
%449 = load double*, double** %13
%450 = getelementptr inbounds double, double* %449, i64 7
%451 = load double, double* %450
%452 = load double, double* %17
%453 = load double, double* %27
%454 = call double @llvm.fmuladd.f64(double %451, double %452, double %453)
store double %454, double* %27
%455 = load double*, double** %8
%456 = getelementptr inbounds double, double* %455, i64 8
%457 = load double, double* %456
%458 = load double, double* %18
%459 = load double, double* %20
%460 = call double @llvm.fmuladd.f64(double %457, double %458, double %459)
store double %460, double* %20
%461 = load double*, double** %8
%462 = getelementptr inbounds double, double* %461, i64 9
%463 = load double, double* %462
%464 = load double, double* %18
%465 = load double, double* %21
%466 = call double @llvm.fmuladd.f64(double %463, double %464, double %465)
store double %466, double* %21
%467 = load double*, double** %8
%468 = getelementptr inbounds double, double* %467, i64 10
%469 = load double, double* %468
%470 = load double, double* %18
%471 = load double, double* %22
%472 = call double @llvm.fmuladd.f64(double %469, double %470, double %471)
store double %472, double* %22
%473 = load double*, double** %8
%474 = getelementptr inbounds double, double* %473, i64 11
%475 = load double, double* %474
%476 = load double, double* %18
%477 = load double, double* %23
%478 = call double @llvm.fmuladd.f64(double %475, double %476, double %477)
store double %478, double* %23
%479 = load double*, double** %13
%480 = getelementptr inbounds double, double* %479, i64 8
%481 = load double, double* %480
%482 = load double, double* %18
%483 = load double, double* %24
%484 = call double @llvm.fmuladd.f64(double %481, double %482, double %483)
store double %484, double* %24
%485 = load double*, double** %13
%486 = getelementptr inbounds double, double* %485, i64 9
%487 = load double, double* %486
%488 = load double, double* %18
%489 = load double, double* %25
%490 = call double @llvm.fmuladd.f64(double %487, double %488, double %489)
store double %490, double* %25
%491 = load double*, double** %13
%492 = getelementptr inbounds double, double* %491, i64 10
%493 = load double, double* %492
%494 = load double, double* %18
%495 = load double, double* %26
%496 = call double @llvm.fmuladd.f64(double %493, double %494, double %495)
store double %496, double* %26
%497 = load double*, double** %13
%498 = getelementptr inbounds double, double* %497, i64 11
%499 = load double, double* %498
%500 = load double, double* %18
%501 = load double, double* %27
%502 = call double @llvm.fmuladd.f64(double %499, double %500, double %501)
store double %502, double* %27
%503 = load double*, double** %8
%504 = getelementptr inbounds double, double* %503, i64 12
%505 = load double, double* %504
%506 = load double, double* %19
%507 = load double, double* %20
%508 = call double @llvm.fmuladd.f64(double %505, double %506, double %507)
store double %508, double* %20
%509 = load double*, double** %8
%510 = getelementptr inbounds double, double* %509, i64 13
%511 = load double, double* %510
%512 = load double, double* %19
%513 = load double, double* %21
%514 = call double @llvm.fmuladd.f64(double %511, double %512, double %513)
store double %514, double* %21
%515 = load double*, double** %8
%516 = getelementptr inbounds double, double* %515, i64 14
%517 = load double, double* %516
%518 = load double, double* %19
%519 = load double, double* %22
%520 = call double @llvm.fmuladd.f64(double %517, double %518, double %519)
store double %520, double* %22
%521 = load double*, double** %8
%522 = getelementptr inbounds double, double* %521, i64 15
%523 = load double, double* %522
%524 = load double, double* %19
%525 = load double, double* %23
%526 = call double @llvm.fmuladd.f64(double %523, double %524, double %525)
store double %526, double* %23
%527 = load double*, double** %13
%528 = getelementptr inbounds double, double* %527, i64 12
%529 = load double, double* %528
%530 = load double, double* %19
%531 = load double, double* %24
%532 = call double @llvm.fmuladd.f64(double %529, double %530, double %531)
store double %532, double* %24
%533 = load double*, double** %13
%534 = getelementptr inbounds double, double* %533, i64 13
%535 = load double, double* %534
%536 = load double, double* %19
%537 = load double, double* %25
%538 = call double @llvm.fmuladd.f64(double %535, double %536, double %537)
store double %538, double* %25
%539 = load double*, double** %13
%540 = getelementptr inbounds double, double* %539, i64 14
%541 = load double, double* %540
%542 = load double, double* %19
%543 = load double, double* %26
%544 = call double @llvm.fmuladd.f64(double %541, double %542, double %543)
store double %544, double* %26
%545 = load double*, double** %13
%546 = getelementptr inbounds double, double* %545, i64 15
%547 = load double, double* %546
%548 = load double, double* %19
%549 = load double, double* %27
%550 = call double @llvm.fmuladd.f64(double %547, double %548, double %549)
store double %550, double* %27
%551 = load double*, double** %8
%552 = getelementptr inbounds double, double* %551, i64 16
store double* %552, double** %8
%553 = load double*, double** %13
%554 = getelementptr inbounds double, double* %553, i64 16
store double* %554, double** %13
%555 = load double*, double** %10
%556 = getelementptr inbounds double, double* %555, i64 4
store double* %556, double** %10
br label %557
557: ; preds = %332
%558 = load i32, i32* %15
%559 = add nsw i32 %558, 4
store i32 %559, i32* %15
br label %327
560: ; preds = %327
br label %561
561: ; preds = %623, %560
%562 = load i32, i32* %15
%563 = load i32, i32* %7
%564 = icmp slt i32 %562, %563
br i1 %564, label %565, label %626
565: ; preds = %561
%566 = load double*, double** %10
%567 = getelementptr inbounds double, double* %566, i64 0
%568 = load double, double* %567
store double %568, double* %16
%569 = load double*, double** %8
%570 = getelementptr inbounds double, double* %569, i64 0
%571 = load double, double* %570
%572 = load double, double* %16
%573 = load double, double* %20
%574 = call double @llvm.fmuladd.f64(double %571, double %572, double %573)
store double %574, double* %20
%575 = load double*, double** %8
%576 = getelementptr inbounds double, double* %575, i64 1
%577 = load double, double* %576
%578 = load double, double* %16
%579 = load double, double* %21
%580 = call double @llvm.fmuladd.f64(double %577, double %578, double %579)
store double %580, double* %21
%581 = load double*, double** %8
%582 = getelementptr inbounds double, double* %581, i64 2
%583 = load double, double* %582
%584 = load double, double* %16
%585 = load double, double* %22
%586 = call double @llvm.fmuladd.f64(double %583, double %584, double %585)
store double %586, double* %22
%587 = load double*, double** %8
%588 = getelementptr inbounds double, double* %587, i64 3
%589 = load double, double* %588
%590 = load double, double* %16
%591 = load double, double* %23
%592 = call double @llvm.fmuladd.f64(double %589, double %590, double %591)
store double %592, double* %23
%593 = load double*, double** %13
%594 = getelementptr inbounds double, double* %593, i64 0
%595 = load double, double* %594
%596 = load double, double* %16
%597 = load double, double* %24
%598 = call double @llvm.fmuladd.f64(double %595, double %596, double %597)
store double %598, double* %24
%599 = load double*, double** %13
%600 = getelementptr inbounds double, double* %599, i64 1
%601 = load double, double* %600
%602 = load double, double* %16
%603 = load double, double* %25
%604 = call double @llvm.fmuladd.f64(double %601, double %602, double %603)
store double %604, double* %25
%605 = load double*, double** %13
%606 = getelementptr inbounds double, double* %605, i64 2
%607 = load double, double* %606
%608 = load double, double* %16
%609 = load double, double* %26
%610 = call double @llvm.fmuladd.f64(double %607, double %608, double %609)
store double %610, double* %26
%611 = load double*, double** %13
%612 = getelementptr inbounds double, double* %611, i64 3
%613 = load double, double* %612
%614 = load double, double* %16
%615 = load double, double* %27
%616 = call double @llvm.fmuladd.f64(double %613, double %614, double %615)
store double %616, double* %27
%617 = load double*, double** %8
%618 = getelementptr inbounds double, double* %617, i64 4
store double* %618, double** %8
%619 = load double*, double** %13
%620 = getelementptr inbounds double, double* %619, i64 4
store double* %620, double** %13
%621 = load double*, double** %10
%622 = getelementptr inbounds double, double* %621, i64 1
store double* %622, double** %10
br label %623
623: ; preds = %565
%624 = load i32, i32* %15
%625 = add nsw i32 %624, 1
store i32 %625, i32* %15
br label %561
626: ; preds = %561
%627 = load i32, i32* %12
%628 = icmp eq i32 %627, 0
br i1 %628, label %629, label %654
629: ; preds = %626
%630 = load double, double* %20
%631 = load double*, double** %11
%632 = getelementptr inbounds double, double* %631, i64 0
store double %630, double* %632
%633 = load double, double* %21
%634 = load double*, double** %11
%635 = getelementptr inbounds double, double* %634, i64 1
store double %633, double* %635
%636 = load double, double* %22
%637 = load double*, double** %11
%638 = getelementptr inbounds double, double* %637, i64 2
store double %636, double* %638
%639 = load double, double* %23
%640 = load double*, double** %11
%641 = getelementptr inbounds double, double* %640, i64 3
store double %639, double* %641
%642 = load double, double* %24
%643 = load double*, double** %11
%644 = getelementptr inbounds double, double* %643, i64 4
store double %642, double* %644
%645 = load double, double* %25
%646 = load double*, double** %11
%647 = getelementptr inbounds double, double* %646, i64 5
store double %645, double* %647
%648 = load double, double* %26
%649 = load double*, double** %11
%650 = getelementptr inbounds double, double* %649, i64 6
store double %648, double* %650
%651 = load double, double* %27
%652 = load double*, double** %11
%653 = getelementptr inbounds double, double* %652, i64 7
store double %651, double* %653
br label %740
654: ; preds = %626
%655 = load i32, i32* %12
%656 = icmp eq i32 %655, 1
br i1 %656, label %657, label %698
657: ; preds = %654
%658 = load double, double* %20
%659 = load double*, double** %11
%660 = getelementptr inbounds double, double* %659, i64 0
%661 = load double, double* %660
%662 = fadd double %661, %658
store double %662, double* %660
%663 = load double, double* %21
%664 = load double*, double** %11
%665 = getelementptr inbounds double, double* %664, i64 1
%666 = load double, double* %665
%667 = fadd double %666, %663
store double %667, double* %665
%668 = load double, double* %22
%669 = load double*, double** %11
%670 = getelementptr inbounds double, double* %669, i64 2
%671 = load double, double* %670
%672 = fadd double %671, %668
store double %672, double* %670
%673 = load double, double* %23
%674 = load double*, double** %11
%675 = getelementptr inbounds double, double* %674, i64 3
%676 = load double, double* %675
%677 = fadd double %676, %673
store double %677, double* %675
%678 = load double, double* %24
%679 = load double*, double** %11
%680 = getelementptr inbounds double, double* %679, i64 4
%681 = load double, double* %680
%682 = fadd double %681, %678
store double %682, double* %680
%683 = load double, double* %25
%684 = load double*, double** %11
%685 = getelementptr inbounds double, double* %684, i64 5
%686 = load double, double* %685
%687 = fadd double %686, %683
store double %687, double* %685
%688 = load double, double* %26
%689 = load double*, double** %11
%690 = getelementptr inbounds double, double* %689, i64 6
%691 = load double, double* %690
%692 = fadd double %691, %688
store double %692, double* %690
%693 = load double, double* %27
%694 = load double*, double** %11
%695 = getelementptr inbounds double, double* %694, i64 7
%696 = load double, double* %695
%697 = fadd double %696, %693
store double %697, double* %695
br label %739
698: ; preds = %654
%699 = load double, double* %20
%700 = load double*, double** %11
%701 = getelementptr inbounds double, double* %700, i64 0
%702 = load double, double* %701
%703 = fsub double %702, %699
store double %703, double* %701
%704 = load double, double* %21
%705 = load double*, double** %11
%706 = getelementptr inbounds double, double* %705, i64 1
%707 = load double, double* %706
%708 = fsub double %707, %704
store double %708, double* %706
%709 = load double, double* %22
%710 = load double*, double** %11
%711 = getelementptr inbounds double, double* %710, i64 2
%712 = load double, double* %711
%713 = fsub double %712, %709
store double %713, double* %711
%714 = load double, double* %23
%715 = load double*, double** %11
%716 = getelementptr inbounds double, double* %715, i64 3
%717 = load double, double* %716
%718 = fsub double %717, %714
store double %718, double* %716
%719 = load double, double* %24
%720 = load double*, double** %11
%721 = getelementptr inbounds double, double* %720, i64 4
%722 = load double, double* %721
%723 = fsub double %722, %719
store double %723, double* %721
%724 = load double, double* %25
%725 = load double*, double** %11
%726 = getelementptr inbounds double, double* %725, i64 5
%727 = load double, double* %726
%728 = fsub double %727, %724
store double %728, double* %726
%729 = load double, double* %26
%730 = load double*, double** %11
%731 = getelementptr inbounds double, double* %730, i64 6
%732 = load double, double* %731
%733 = fsub double %732, %729
store double %733, double* %731
%734 = load double, double* %27
%735 = load double*, double** %11
%736 = getelementptr inbounds double, double* %735, i64 7
%737 = load double, double* %736
%738 = fsub double %737, %734
store double %738, double* %736
br label %739
739: ; preds = %698, %657
br label %740
740: ; preds = %30, %739, %629
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 %354, 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 = bitcast double* %1 to i8*
tail call void @llvm.prefetch.p0i8(i8* %12, i32 0, i32 3, i32 1)
%13 = bitcast double* %11 to i8*
tail call void @llvm.prefetch.p0i8(i8* %13, i32 0, i32 3, i32 1)
%14 = getelementptr inbounds double, double* %1, i64 8
%15 = bitcast double* %14 to i8*
tail call void @llvm.prefetch.p0i8(i8* %15, i32 0, i32 3, i32 1)
%16 = getelementptr inbounds double, double* %11, i64 8
%17 = bitcast double* %16 to i8*
tail call void @llvm.prefetch.p0i8(i8* %17, i32 0, i32 3, i32 1)
%18 = getelementptr inbounds double, double* %1, i64 16
%19 = bitcast double* %18 to i8*
tail call void @llvm.prefetch.p0i8(i8* %19, i32 0, i32 3, i32 1)
%20 = getelementptr inbounds double, double* %11, i64 16
%21 = bitcast double* %20 to i8*
tail call void @llvm.prefetch.p0i8(i8* %21, i32 0, i32 3, i32 1)
%22 = getelementptr inbounds double, double* %1, i64 24
%23 = bitcast double* %22 to i8*
tail call void @llvm.prefetch.p0i8(i8* %23, i32 0, i32 3, i32 1)
%24 = getelementptr inbounds double, double* %20, i64 8
%25 = bitcast double* %24 to i8*
tail call void @llvm.prefetch.p0i8(i8* %25, i32 0, i32 3, i32 1)
%26 = load double, double* %3
%27 = getelementptr inbounds double, double* %3, i64 1
%28 = load double, double* %27
%29 = getelementptr inbounds double, double* %3, i64 2
%30 = load double, double* %29
%31 = getelementptr inbounds double, double* %3, i64 3
%32 = load double, double* %31
%33 = load double, double* %1
%34 = tail call double @llvm.fmuladd.f64(double %33, double %26, double 0.000000e+00)
%35 = getelementptr inbounds double, double* %1, i64 4
%36 = bitcast double* %35 to <2 x double>*
%37 = load <2 x double>, <2 x double>* %36
%38 = insertelement <2 x double> poison, double %28, i64 0
%39 = shufflevector <2 x double> %38, <2 x double> poison, <2 x i32> zeroinitializer
%40 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %34, i64 0
%41 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %37, <2 x double> %39, <2 x double> %40)
%42 = bitcast double* %14 to <2 x double>*
%43 = load <2 x double>, <2 x double>* %42
%44 = insertelement <2 x double> poison, double %30, i64 0
%45 = shufflevector <2 x double> %44, <2 x double> poison, <2 x i32> zeroinitializer
%46 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %43, <2 x double> %45, <2 x double> %41)
%47 = getelementptr inbounds double, double* %1, i64 10
%48 = load double, double* %47
%49 = tail call double @llvm.fmuladd.f64(double %48, double %30, double 0.000000e+00)
%50 = getelementptr inbounds double, double* %1, i64 12
%51 = bitcast double* %50 to <2 x double>*
%52 = load <2 x double>, <2 x double>* %51
%53 = insertelement <2 x double> poison, double %32, i64 0
%54 = shufflevector <2 x double> %53, <2 x double> poison, <2 x i32> zeroinitializer
%55 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %52, <2 x double> %54, <2 x double> %46)
%56 = getelementptr inbounds double, double* %1, i64 14
%57 = bitcast double* %56 to <2 x double>*
%58 = load <2 x double>, <2 x double>* %57
%59 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %49, i64 0
%60 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %58, <2 x double> %54, <2 x double> %59)
%61 = getelementptr inbounds double, double* %3, i64 4
%62 = getelementptr inbounds double, double* %1, i64 32
%63 = bitcast double* %62 to i8*
tail call void @llvm.prefetch.p0i8(i8* %63, i32 0, i32 3, i32 1)
%64 = getelementptr inbounds double, double* %20, i64 16
%65 = bitcast double* %64 to i8*
tail call void @llvm.prefetch.p0i8(i8* %65, i32 0, i32 3, i32 1)
%66 = getelementptr inbounds double, double* %1, i64 40
%67 = bitcast double* %66 to i8*
tail call void @llvm.prefetch.p0i8(i8* %67, i32 0, i32 3, i32 1)
%68 = getelementptr inbounds double, double* %64, i64 8
%69 = bitcast double* %68 to i8*
tail call void @llvm.prefetch.p0i8(i8* %69, i32 0, i32 3, i32 1)
%70 = load double, double* %61
%71 = getelementptr inbounds double, double* %3, i64 5
%72 = load double, double* %71
%73 = getelementptr inbounds double, double* %3, i64 6
%74 = load double, double* %73
%75 = getelementptr inbounds double, double* %3, i64 7
%76 = load double, double* %75
%77 = bitcast double* %18 to <2 x double>*
%78 = load <2 x double>, <2 x double>* %77
%79 = insertelement <2 x double> poison, double %70, i64 0
%80 = shufflevector <2 x double> %79, <2 x double> poison, <2 x i32> zeroinitializer
%81 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %78, <2 x double> %80, <2 x double> %55)
%82 = getelementptr inbounds double, double* %1, i64 18
%83 = bitcast double* %82 to <2 x double>*
%84 = load <2 x double>, <2 x double>* %83
%85 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %84, <2 x double> %80, <2 x double> %60)
%86 = load double, double* %20
%87 = tail call double @llvm.fmuladd.f64(double %86, double %70, double 0.000000e+00)
%88 = getelementptr inbounds double, double* %1, i64 20
%89 = bitcast double* %88 to <2 x double>*
%90 = load <2 x double>, <2 x double>* %89
%91 = insertelement <2 x double> poison, double %72, i64 0
%92 = shufflevector <2 x double> %91, <2 x double> poison, <2 x i32> zeroinitializer
%93 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %90, <2 x double> %92, <2 x double> %81)
%94 = getelementptr inbounds double, double* %1, i64 22
%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> %92, <2 x double> %85)
%98 = getelementptr inbounds double, double* %20, i64 4
%99 = bitcast double* %98 to <2 x double>*
%100 = load <2 x double>, <2 x double>* %99
%101 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %87, i64 0
%102 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %100, <2 x double> %92, <2 x double> %101)
%103 = bitcast double* %22 to <2 x double>*
%104 = load <2 x double>, <2 x double>* %103
%105 = insertelement <2 x double> poison, double %74, i64 0
%106 = shufflevector <2 x double> %105, <2 x double> poison, <2 x i32> zeroinitializer
%107 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %104, <2 x double> %106, <2 x double> %93)
%108 = getelementptr inbounds double, double* %1, i64 26
%109 = bitcast double* %108 to <2 x double>*
%110 = load <2 x double>, <2 x double>* %109
%111 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %110, <2 x double> %106, <2 x double> %97)
%112 = bitcast double* %24 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> %106, <2 x double> %102)
%115 = getelementptr inbounds double, double* %20, i64 10
%116 = load double, double* %115
%117 = tail call double @llvm.fmuladd.f64(double %116, double %74, double 0.000000e+00)
%118 = getelementptr inbounds double, double* %1, i64 28
%119 = bitcast double* %118 to <2 x double>*
%120 = load <2 x double>, <2 x double>* %119
%121 = insertelement <2 x double> poison, double %76, i64 0
%122 = shufflevector <2 x double> %121, <2 x double> poison, <2 x i32> zeroinitializer
%123 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %120, <2 x double> %122, <2 x double> %107)
%124 = getelementptr inbounds double, double* %1, i64 30
%125 = bitcast double* %124 to <2 x double>*
%126 = load <2 x double>, <2 x double>* %125
%127 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %126, <2 x double> %122, <2 x double> %111)
%128 = getelementptr inbounds double, double* %20, i64 12
%129 = bitcast double* %128 to <2 x double>*
%130 = load <2 x double>, <2 x double>* %129
%131 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %130, <2 x double> %122, <2 x double> %114)
%132 = getelementptr inbounds double, double* %20, i64 14
%133 = bitcast double* %132 to <2 x double>*
%134 = load <2 x double>, <2 x double>* %133
%135 = insertelement <2 x double> <double poison, double 0.000000e+00>, double %117, i64 0
%136 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %134, <2 x double> %122, <2 x double> %135)
%137 = getelementptr inbounds double, double* %3, i64 8
%138 = add nsw i32 %0, -3
%139 = icmp ugt i32 %0, 11
br i1 %139, label %168, label %158
140: ; preds = %168
%141 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %206, <2 x double> %195, <2 x double> %176)
%142 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %224, <2 x double> %212, <2 x double> %141)
%143 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %242, <2 x double> %230, <2 x double> %142)
%144 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %260, <2 x double> %248, <2 x double> %143)
%145 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %202, <2 x double> %195, <2 x double> %175)
%146 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %220, <2 x double> %212, <2 x double> %145)
%147 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %238, <2 x double> %230, <2 x double> %146)
%148 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %256, <2 x double> %248, <2 x double> %147)
%149 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %199, <2 x double> %195, <2 x double> %174)
%150 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %216, <2 x double> %212, <2 x double> %149)
%151 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %234, <2 x double> %230, <2 x double> %150)
%152 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %252, <2 x double> %248, <2 x double> %151)
%153 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %193, <2 x double> %195, <2 x double> %173)
%154 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %210, <2 x double> %212, <2 x double> %153)
%155 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %228, <2 x double> %230, <2 x double> %154)
%156 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %246, <2 x double> %248, <2 x double> %155)
%157 = and i32 %0, -4
br label %158
158: ; preds = %140, %8
%159 = phi double* [ %137, %8 ], [ %262, %140 ]
%160 = phi double* [ %64, %8 ], [ %179, %140 ]
%161 = phi double* [ %62, %8 ], [ %177, %140 ]
%162 = phi i32 [ 8, %8 ], [ %157, %140 ]
%163 = phi <2 x double> [ %123, %8 ], [ %156, %140 ]
%164 = phi <2 x double> [ %127, %8 ], [ %152, %140 ]
%165 = phi <2 x double> [ %131, %8 ], [ %148, %140 ]
%166 = phi <2 x double> [ %136, %8 ], [ %144, %140 ]
%167 = icmp slt i32 %162, %0
br i1 %167, label %265, label %301
168: ; preds = %8, %168
%169 = phi i32 [ %263, %168 ], [ 8, %8 ]
%170 = phi double* [ %177, %168 ], [ %62, %8 ]
%171 = phi double* [ %179, %168 ], [ %64, %8 ]
%172 = phi double* [ %262, %168 ], [ %137, %8 ]
%173 = phi <2 x double> [ %249, %168 ], [ %123, %8 ]
%174 = phi <2 x double> [ %253, %168 ], [ %127, %8 ]
%175 = phi <2 x double> [ %257, %168 ], [ %131, %8 ]
%176 = phi <2 x double> [ %261, %168 ], [ %136, %8 ]
%177 = getelementptr inbounds double, double* %170, i64 16
%178 = bitcast double* %177 to i8*
tail call void @llvm.prefetch.p0i8(i8* %178, i32 0, i32 3, i32 1)
%179 = getelementptr inbounds double, double* %171, i64 16
%180 = bitcast double* %179 to i8*
tail call void @llvm.prefetch.p0i8(i8* %180, i32 0, i32 3, i32 1)
%181 = getelementptr inbounds double, double* %170, i64 24
%182 = bitcast double* %181 to i8*
tail call void @llvm.prefetch.p0i8(i8* %182, i32 0, i32 3, i32 1)
%183 = getelementptr inbounds double, double* %171, i64 24
%184 = bitcast double* %183 to i8*
tail call void @llvm.prefetch.p0i8(i8* %184, i32 0, i32 3, i32 1)
%185 = load double, double* %172
%186 = getelementptr inbounds double, double* %172, i64 1
%187 = load double, double* %186
%188 = getelementptr inbounds double, double* %172, i64 2
%189 = load double, double* %188
%190 = getelementptr inbounds double, double* %172, i64 3
%191 = load double, double* %190
%192 = bitcast double* %170 to <2 x double>*
%193 = load <2 x double>, <2 x double>* %192
%194 = insertelement <2 x double> poison, double %185, 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> %173)
%197 = getelementptr inbounds double, double* %170, i64 2
%198 = bitcast double* %197 to <2 x double>*
%199 = load <2 x double>, <2 x double>* %198
%200 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %199, <2 x double> %195, <2 x double> %174)
%201 = bitcast double* %171 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> %195, <2 x double> %175)
%204 = getelementptr inbounds double, double* %171, i64 2
%205 = bitcast double* %204 to <2 x double>*
%206 = load <2 x double>, <2 x double>* %205
%207 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %206, <2 x double> %195, <2 x double> %176)
%208 = getelementptr inbounds double, double* %170, i64 4
%209 = bitcast double* %208 to <2 x double>*
%210 = load <2 x double>, <2 x double>* %209
%211 = insertelement <2 x double> poison, double %187, i64 0
%212 = shufflevector <2 x double> %211, <2 x double> poison, <2 x i32> zeroinitializer
%213 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %210, <2 x double> %212, <2 x double> %196)
%214 = getelementptr inbounds double, double* %170, i64 6
%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> %212, <2 x double> %200)
%218 = getelementptr inbounds double, double* %171, i64 4
%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> %212, <2 x double> %203)
%222 = getelementptr inbounds double, double* %171, i64 6
%223 = bitcast double* %222 to <2 x double>*
%224 = load <2 x double>, <2 x double>* %223
%225 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %224, <2 x double> %212, <2 x double> %207)
%226 = getelementptr inbounds double, double* %170, i64 8
%227 = bitcast double* %226 to <2 x double>*
%228 = load <2 x double>, <2 x double>* %227
%229 = insertelement <2 x double> poison, double %189, i64 0
%230 = shufflevector <2 x double> %229, <2 x double> poison, <2 x i32> zeroinitializer
%231 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %228, <2 x double> %230, <2 x double> %213)
%232 = getelementptr inbounds double, double* %170, i64 10
%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> %230, <2 x double> %217)
%236 = getelementptr inbounds double, double* %171, i64 8
%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> %230, <2 x double> %221)
%240 = getelementptr inbounds double, double* %171, i64 10
%241 = bitcast double* %240 to <2 x double>*
%242 = load <2 x double>, <2 x double>* %241
%243 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %242, <2 x double> %230, <2 x double> %225)
%244 = getelementptr inbounds double, double* %170, i64 12
%245 = bitcast double* %244 to <2 x double>*
%246 = load <2 x double>, <2 x double>* %245
%247 = insertelement <2 x double> poison, double %191, i64 0
%248 = shufflevector <2 x double> %247, <2 x double> poison, <2 x i32> zeroinitializer
%249 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %246, <2 x double> %248, <2 x double> %231)
%250 = getelementptr inbounds double, double* %170, i64 14
%251 = bitcast double* %250 to <2 x double>*
%252 = load <2 x double>, <2 x double>* %251
%253 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %252, <2 x double> %248, <2 x double> %235)
%254 = getelementptr inbounds double, double* %171, i64 12
%255 = bitcast double* %254 to <2 x double>*
%256 = load <2 x double>, <2 x double>* %255
%257 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %256, <2 x double> %248, <2 x double> %239)
%258 = getelementptr inbounds double, double* %171, i64 14
%259 = bitcast double* %258 to <2 x double>*
%260 = load <2 x double>, <2 x double>* %259
%261 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %260, <2 x double> %248, <2 x double> %243)
%262 = getelementptr inbounds double, double* %172, i64 4
%263 = add nuw nsw i32 %169, 4
%264 = icmp slt i32 %263, %138
br i1 %264, label %168, label %140
265: ; preds = %158, %265
%266 = phi i32 [ %294, %265 ], [ %162, %158 ]
%267 = phi double* [ %291, %265 ], [ %161, %158 ]
%268 = phi double* [ %292, %265 ], [ %160, %158 ]
%269 = phi double* [ %293, %265 ], [ %159, %158 ]
%270 = phi <2 x double> [ %279, %265 ], [ %163, %158 ]
%271 = phi <2 x double> [ %283, %265 ], [ %164, %158 ]
%272 = phi <2 x double> [ %286, %265 ], [ %165, %158 ]
%273 = phi <2 x double> [ %290, %265 ], [ %166, %158 ]
%274 = load double, double* %269
%275 = bitcast double* %267 to <2 x double>*
%276 = load <2 x double>, <2 x double>* %275
%277 = insertelement <2 x double> poison, double %274, i64 0
%278 = shufflevector <2 x double> %277, <2 x double> poison, <2 x i32> zeroinitializer
%279 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %276, <2 x double> %278, <2 x double> %270)
%280 = getelementptr inbounds double, double* %267, i64 2
%281 = bitcast double* %280 to <2 x double>*
%282 = load <2 x double>, <2 x double>* %281
%283 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %282, <2 x double> %278, <2 x double> %271)
%284 = bitcast double* %268 to <2 x double>*
%285 = load <2 x double>, <2 x double>* %284
%286 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %285, <2 x double> %278, <2 x double> %272)
%287 = getelementptr inbounds double, double* %268, i64 2
%288 = bitcast double* %287 to <2 x double>*
%289 = load <2 x double>, <2 x double>* %288
%290 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %289, <2 x double> %278, <2 x double> %273)
%291 = getelementptr inbounds double, double* %267, i64 4
%292 = getelementptr inbounds double, double* %268, i64 4
%293 = getelementptr inbounds double, double* %269, i64 1
%294 = add nuw nsw i32 %266, 1
%295 = icmp eq i32 %294, %0
br i1 %295, label %296, label %265
296: ; preds = %265
%297 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %289, <2 x double> %278, <2 x double> %273)
%298 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %285, <2 x double> %278, <2 x double> %272)
%299 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %282, <2 x double> %278, <2 x double> %271)
%300 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %276, <2 x double> %278, <2 x double> %270)
br label %301
301: ; preds = %296, %158
%302 = phi <2 x double> [ %163, %158 ], [ %300, %296 ]
%303 = phi <2 x double> [ %164, %158 ], [ %299, %296 ]
%304 = phi <2 x double> [ %165, %158 ], [ %298, %296 ]
%305 = phi <2 x double> [ %166, %158 ], [ %297, %296 ]
switch i32 %5, label %334 [
i32 0, label %306
i32 1, label %314
]
306: ; preds = %301
%307 = bitcast double* %4 to <2 x double>*
store <2 x double> %302, <2 x double>* %307
%308 = getelementptr inbounds double, double* %4, i64 2
%309 = bitcast double* %308 to <2 x double>*
store <2 x double> %303, <2 x double>* %309
%310 = getelementptr inbounds double, double* %4, i64 4
%311 = bitcast double* %310 to <2 x double>*
store <2 x double> %304, <2 x double>* %311
%312 = getelementptr inbounds double, double* %4, i64 6
%313 = bitcast double* %312 to <2 x double>*
store <2 x double> %305, <2 x double>* %313
br label %354
314: ; preds = %301
%315 = bitcast double* %4 to <2 x double>*
%316 = load <2 x double>, <2 x double>* %315
%317 = fadd <2 x double> %302, %316
%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 = fadd <2 x double> %303, %321
%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 = fadd <2 x double> %304, %326
%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 = fadd <2 x double> %305, %331
%333 = bitcast double* %329 to <2 x double>*
store <2 x double> %332, <2 x double>* %333
br label %354
334: ; preds = %301
%335 = bitcast double* %4 to <2 x double>*
%336 = load <2 x double>, <2 x double>* %335
%337 = fsub <2 x double> %336, %302
%338 = bitcast double* %4 to <2 x double>*
store <2 x double> %337, <2 x double>* %338
%339 = getelementptr inbounds double, double* %4, i64 2
%340 = bitcast double* %339 to <2 x double>*
%341 = load <2 x double>, <2 x double>* %340
%342 = fsub <2 x double> %341, %303
%343 = bitcast double* %339 to <2 x double>*
store <2 x double> %342, <2 x double>* %343
%344 = getelementptr inbounds double, double* %4, i64 4
%345 = bitcast double* %344 to <2 x double>*
%346 = load <2 x double>, <2 x double>* %345
%347 = fsub <2 x double> %346, %304
%348 = bitcast double* %344 to <2 x double>*
store <2 x double> %347, <2 x double>* %348
%349 = getelementptr inbounds double, double* %4, i64 6
%350 = bitcast double* %349 to <2 x double>*
%351 = load <2 x double>, <2 x double>* %350
%352 = fsub <2 x double> %351, %305
%353 = bitcast double* %349 to <2 x double>*
store <2 x double> %352, <2 x double>* %353
br label %354
354: ; preds = %306, %334, %314, %6
ret void
}