void kernel_dtrmv_u_t_8_lib4(int kmax, double *A, int sda, double *x, double *y,
                             int alg) {
  __builtin_prefetch(A);
  __builtin_prefetch(A + 8);
  __builtin_prefetch(A + 16);
  __builtin_prefetch(A + 24);
  const int lda = 4;
  const int bs = 4;
  int k;
  double x_0, x_1, x_2, x_3, y_0 = 0, y_1 = 0, y_2 = 0, y_3 = 0, y_4 = 0,
                             y_5 = 0, y_6 = 0, y_7 = 0;
  k = 0;
  for (; k < kmax - 3; k += 4) {
    __builtin_prefetch(A + sda * bs);
    __builtin_prefetch(A + sda * bs + 8);
    __builtin_prefetch(A + sda * bs + 16);
    __builtin_prefetch(A + sda * bs + 24);
    x_0 = x[0];
    x_1 = x[1];
    x_2 = x[2];
    x_3 = x[3];
    y_0 += A[0 + lda * 0] * x_0;
    y_1 += A[0 + lda * 1] * x_0;
    y_2 += A[0 + lda * 2] * x_0;
    y_3 += A[0 + lda * 3] * x_0;
    y_4 += A[0 + lda * 4] * x_0;
    y_5 += A[0 + lda * 5] * x_0;
    y_6 += A[0 + lda * 6] * x_0;
    y_7 += A[0 + lda * 7] * x_0;
    y_0 += A[1 + lda * 0] * x_1;
    y_1 += A[1 + lda * 1] * x_1;
    y_2 += A[1 + lda * 2] * x_1;
    y_3 += A[1 + lda * 3] * x_1;
    y_4 += A[1 + lda * 4] * x_1;
    y_5 += A[1 + lda * 5] * x_1;
    y_6 += A[1 + lda * 6] * x_1;
    y_7 += A[1 + lda * 7] * x_1;
    y_0 += A[2 + lda * 0] * x_2;
    y_1 += A[2 + lda * 1] * x_2;
    y_2 += A[2 + lda * 2] * x_2;
    y_3 += A[2 + lda * 3] * x_2;
    y_4 += A[2 + lda * 4] * x_2;
    y_5 += A[2 + lda * 5] * x_2;
    y_6 += A[2 + lda * 6] * x_2;
    y_7 += A[2 + lda * 7] * x_2;
    y_0 += A[3 + lda * 0] * x_3;
    y_1 += A[3 + lda * 1] * x_3;
    y_2 += A[3 + lda * 2] * x_3;
    y_3 += A[3 + lda * 3] * x_3;
    y_4 += A[3 + lda * 4] * x_3;
    y_5 += A[3 + lda * 5] * x_3;
    y_6 += A[3 + lda * 6] * x_3;
    y_7 += A[3 + lda * 7] * x_3;
    A += sda * bs;
    x += 4;
  }
  __builtin_prefetch(A + sda * bs);
  __builtin_prefetch(A + sda * bs + 8);
  __builtin_prefetch(A + sda * bs + 16);
  __builtin_prefetch(A + sda * bs + 24);
  x_0 = x[0];
  x_1 = x[1];
  x_2 = x[2];
  x_3 = x[3];
  y_0 += A[0 + lda * 0] * x_0;
  y_1 += A[0 + lda * 1] * x_0;
  y_2 += A[0 + lda * 2] * x_0;
  y_3 += A[0 + lda * 3] * x_0;
  y_4 += A[0 + lda * 4] * x_0;
  y_5 += A[0 + lda * 5] * x_0;
  y_6 += A[0 + lda * 6] * x_0;
  y_7 += A[0 + lda * 7] * x_0;
  y_1 += A[1 + lda * 1] * x_1;
  y_2 += A[1 + lda * 2] * x_1;
  y_3 += A[1 + lda * 3] * x_1;
  y_4 += A[1 + lda * 4] * x_1;
  y_5 += A[1 + lda * 5] * x_1;
  y_6 += A[1 + lda * 6] * x_1;
  y_7 += A[1 + lda * 7] * x_1;
  y_2 += A[2 + lda * 2] * x_2;
  y_3 += A[2 + lda * 3] * x_2;
  y_4 += A[2 + lda * 4] * x_2;
  y_5 += A[2 + lda * 5] * x_2;
  y_6 += A[2 + lda * 6] * x_2;
  y_7 += A[2 + lda * 7] * x_2;
  y_3 += A[3 + lda * 3] * x_3;
  y_4 += A[3 + lda * 4] * x_3;
  y_5 += A[3 + lda * 5] * x_3;
  y_6 += A[3 + lda * 6] * x_3;
  y_7 += A[3 + lda * 7] * x_3;
  A += sda * bs;
  x += 4;
  x_0 = x[0];
  x_1 = x[1];
  x_2 = x[2];
  x_3 = x[3];
  y_4 += A[0 + lda * 4] * x_0;
  y_5 += A[0 + lda * 5] * x_0;
  y_6 += A[0 + lda * 6] * x_0;
  y_7 += A[0 + lda * 7] * x_0;
  y_5 += A[1 + lda * 5] * x_1;
  y_6 += A[1 + lda * 6] * x_1;
  y_7 += A[1 + lda * 7] * x_1;
  y_6 += A[2 + lda * 6] * x_2;
  y_7 += A[2 + lda * 7] * x_2;
  y_7 += A[3 + lda * 7] * x_3;
  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_t_8_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x18,%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)
mov    -0x10(%rbp),%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
add    $0xc0,%rax
prefetcht0 (%rax)
movl   $0x4,-0x30(%rbp)
movl   $0x4,-0x34(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x60(%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
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1705 <kernel_dtrmv_u_t_8_lib4+0x605>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xc0,%rax
prefetcht0 (%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x80(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xa0(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xc0(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xe0(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%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  0x48(%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  0x68(%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  0x88(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xa8(%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  0xc8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xe8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%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  0x50(%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  0x70(%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  0x90(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xb0(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xd0(%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  0xf0(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%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  0x58(%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  0x78(%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  0x98(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xb8(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xd8(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xf8(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x38(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x38(%rbp)
jmp    11a8 <kernel_dtrmv_u_t_8_lib4+0xa8>
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x40,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0x80,%rax
prefetcht0 (%rax)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
add    $0xc0,%rax
prefetcht0 (%rax)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x60(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x68(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x80(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xa0(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xc0(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xe0(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x28(%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  0x48(%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  0x68(%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  0x88(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xa8(%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  0xc8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xe8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x50(%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  0x70(%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  0x90(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xb0(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xd0(%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  0xf0(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x78(%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  0x98(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xb8(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xd8(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xf8(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x14(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x20(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x80(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movsd  0xa0(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xc0(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xe0(%rax),%xmm0
movsd  -0x40(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xa8(%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  0xc8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xe8(%rax),%xmm0
movsd  -0x48(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xd0(%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  0xf0(%rax),%xmm0
movsd  -0x50(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0xf8(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
cmpl   $0x0,-0x2c(%rbp)
jne    1dd5 <kernel_dtrmv_u_t_8_lib4+0xcd5>
movsd  -0x60(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x70(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x78(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
movsd  %xmm0,0x38(%rax)
jmp    1f47 <kernel_dtrmv_u_t_8_lib4+0xe47>
cmpl   $0x1,-0x2c(%rbp)
jne    1e83 <kernel_dtrmv_u_t_8_lib4+0xd83>
movsd  -0x60(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addsd  (%rax),%xmm0
movsd  %xmm0,(%rax)
movsd  -0x68(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addsd  0x8(%rax),%xmm0
movsd  %xmm0,0x8(%rax)
movsd  -0x70(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addsd  0x10(%rax),%xmm0
movsd  %xmm0,0x10(%rax)
movsd  -0x78(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addsd  0x18(%rax),%xmm0
movsd  %xmm0,0x18(%rax)
movsd  -0x80(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addsd  0x20(%rax),%xmm0
movsd  %xmm0,0x20(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
addsd  0x28(%rax),%xmm0
movsd  %xmm0,0x28(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
addsd  0x30(%rax),%xmm0
movsd  %xmm0,0x30(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x28(%rbp),%rax
addsd  0x38(%rax),%xmm0
movsd  %xmm0,0x38(%rax)
jmp    1f42 <kernel_dtrmv_u_t_8_lib4+0xe42>
movsd  -0x60(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,(%rax)
movsd  -0x68(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x8(%rax)
movsd  -0x70(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x10(%rax)
movsd  -0x78(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x18(%rax)
movsd  -0x80(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x20(%rax)
movsd  -0x88(%rbp),%xmm1
ff
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x28(%rax)
movsd  -0x90(%rbp),%xmm1
ff
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x30(%rax)
movsd  -0x98(%rbp),%xmm1
ff
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
subsd  %xmm1,%xmm0
movsd  %xmm0,0x38(%rax)
jmp    1f47 <kernel_dtrmv_u_t_8_lib4+0xe47>
add    $0x18,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dtrmv_u_t_8_lib4>:
prefetcht0 (%rsi)
prefetcht0 0x40(%rsi)
prefetcht0 0x80(%rsi)
prefetcht0 0xc0(%rsi)
shl    $0x2,%edx
movslq %edx,%r10
cmp    $0x4,%edi
jl     132f <kernel_dtrmv_u_t_8_lib4+0x22f>
add    $0xfffffffd,%edi
lea    0x0(,%r10,8),%r11
lea    0xc0(,%r10,8),%rax
xorpd  %xmm6,%xmm6
xor    %edx,%edx
xorpd  %xmm7,%xmm7
xorpd  %xmm12,%xmm12
xorpd  %xmm9,%xmm9
nopl   0x0(%rax,%rax,1)
prefetcht0 -0xc0(%rsi,%rax,1)
ff
prefetcht0 -0x80(%rsi,%rax,1)
prefetcht0 -0x40(%rsi,%rax,1)
prefetcht0 (%rsi,%rax,1)
movsd  0xc0(%rsi),%xmm5
movhpd 0xe0(%rsi),%xmm5
movsd  0x80(%rsi),%xmm3
movhpd 0xa0(%rsi),%xmm3
movsd  0x40(%rsi),%xmm14
movhpd 0x60(%rsi),%xmm14
movsd  (%rsi),%xmm13
movsd  0x8(%rsi),%xmm11
movsd  0x10(%rsi),%xmm1
movsd  0x18(%rsi),%xmm8
movhpd 0x20(%rsi),%xmm13
movsd  (%rcx),%xmm0
movsd  0x8(%rcx),%xmm4
movsd  0x10(%rcx),%xmm2
movsd  0x18(%rcx),%xmm10
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm13
addpd  %xmm6,%xmm13
mulpd  %xmm0,%xmm14
addpd  %xmm7,%xmm14
mulpd  %xmm0,%xmm3
addpd  %xmm12,%xmm3
movhpd 0x28(%rsi),%xmm11
mulpd  %xmm5,%xmm0
movsd  0x48(%rsi),%xmm5
movhpd 0x68(%rsi),%xmm5
addpd  %xmm9,%xmm0
movsd  0x88(%rsi),%xmm7
movhpd 0xa8(%rsi),%xmm7
movsd  0xc8(%rsi),%xmm6
movhpd 0xe8(%rsi),%xmm6
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm6
addpd  %xmm0,%xmm6
mulpd  %xmm4,%xmm7
addpd  %xmm3,%xmm7
mulpd  %xmm4,%xmm5
movsd  0xd0(%rsi),%xmm9
movhpd 0xf0(%rsi),%xmm9
addpd  %xmm14,%xmm5
movsd  0x90(%rsi),%xmm3
movhpd 0xb0(%rsi),%xmm3
mulpd  %xmm11,%xmm4
movsd  0x50(%rsi),%xmm0
movhpd 0x70(%rsi),%xmm0
addpd  %xmm13,%xmm4
movhpd 0x30(%rsi),%xmm1
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm1
addpd  %xmm4,%xmm1
mulpd  %xmm2,%xmm0
addpd  %xmm5,%xmm0
mulpd  %xmm2,%xmm3
addpd  %xmm7,%xmm3
movhpd 0x38(%rsi),%xmm8
mulpd  %xmm9,%xmm2
movsd  0x58(%rsi),%xmm5
movhpd 0x78(%rsi),%xmm5
addpd  %xmm6,%xmm2
movsd  0x98(%rsi),%xmm4
movhpd 0xb8(%rsi),%xmm4
movsd  0xd8(%rsi),%xmm11
movhpd 0xf8(%rsi),%xmm11
unpcklpd %xmm10,%xmm10
mulpd  %xmm10,%xmm11
movapd %xmm11,%xmm9
addpd  %xmm2,%xmm9
mulpd  %xmm10,%xmm4
movapd %xmm4,%xmm12
addpd  %xmm3,%xmm12
mulpd  %xmm10,%xmm5
movapd %xmm5,%xmm7
addpd  %xmm0,%xmm7
mulpd  %xmm8,%xmm10
movapd %xmm10,%xmm6
addpd  %xmm1,%xmm6
add    $0x20,%rcx
add    $0x4,%edx
add    %r11,%rsi
cmp    %edi,%edx
jl     1150 <kernel_dtrmv_u_t_8_lib4+0x50>
addpd  %xmm1,%xmm10
addpd  %xmm0,%xmm5
addpd  %xmm3,%xmm4
addpd  %xmm2,%xmm11
jmp    1341 <kernel_dtrmv_u_t_8_lib4+0x241>
xorpd  %xmm10,%xmm10
xorpd  %xmm5,%xmm5
xorpd  %xmm4,%xmm4
xorpd  %xmm11,%xmm11
prefetcht0 (%rsi,%r10,8)
prefetcht0 0x40(%rsi,%r10,8)
prefetcht0 0x80(%rsi,%r10,8)
prefetcht0 0xc0(%rsi,%r10,8)
movupd (%rcx),%xmm3
movupd 0x10(%rcx),%xmm13
movupd 0x20(%rcx),%xmm14
movupd 0x30(%rcx),%xmm8
movapd %xmm10,%xmm0
unpckhpd %xmm10,%xmm0
movsd  0x20(%rsi),%xmm6
mulsd  %xmm3,%xmm6
addsd  %xmm0,%xmm6
movapd %xmm5,%xmm0
unpckhpd %xmm5,%xmm0
movsd  0x60(%rsi),%xmm1
mulsd  %xmm3,%xmm1
addsd  %xmm0,%xmm1
movapd %xmm4,%xmm0
unpckhpd %xmm4,%xmm0
movsd  0xa0(%rsi),%xmm2
mulsd  %xmm3,%xmm2
addsd  %xmm0,%xmm2
movapd %xmm11,%xmm7
unpckhpd %xmm11,%xmm7
movsd  0xe0(%rsi),%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm7,%xmm0
movsd  (%rsi),%xmm12
movsd  0x40(%rsi),%xmm7
movsd  0x48(%rsi),%xmm15
movsd  0x50(%rsi),%xmm9
movhpd 0x28(%rsi),%xmm12
unpcklpd %xmm6,%xmm10
mulpd  %xmm3,%xmm12
addpd  %xmm10,%xmm12
movhpd 0x68(%rsi),%xmm7
unpcklpd %xmm1,%xmm5
mulpd  %xmm3,%xmm7
movsd  0x80(%rsi),%xmm1
movhpd 0xa8(%rsi),%xmm1
addpd  %xmm5,%xmm7
unpcklpd %xmm2,%xmm4
mulpd  %xmm3,%xmm1
addpd  %xmm4,%xmm1
movsd  0xc0(%rsi),%xmm2
movhpd 0xe8(%rsi),%xmm2
unpcklpd %xmm0,%xmm11
mulpd  %xmm3,%xmm2
addpd  %xmm11,%xmm2
movhpd 0x70(%rsi),%xmm15
shufpd $0x1,%xmm13,%xmm3
mulpd  %xmm3,%xmm15
addpd  %xmm7,%xmm15
movsd  0x88(%rsi),%xmm0
movhpd 0xb0(%rsi),%xmm0
mulpd  %xmm3,%xmm0
addpd  %xmm1,%xmm0
movsd  0xc8(%rsi),%xmm1
movhpd 0xf0(%rsi),%xmm1
mulpd  %xmm3,%xmm1
addpd  %xmm2,%xmm1
movhpd 0x78(%rsi),%xmm9
mulpd  %xmm13,%xmm9
addpd  %xmm15,%xmm9
movsd  0x90(%rsi),%xmm2
movhpd 0xb8(%rsi),%xmm2
mulpd  %xmm13,%xmm2
movsd  0xd0(%rsi),%xmm3
movhpd 0xf8(%rsi),%xmm3
addpd  %xmm0,%xmm2
mulpd  %xmm13,%xmm3
addpd  %xmm1,%xmm3
movsd  0x98(%rsi),%xmm0
movhpd 0xa0(%rsi,%r10,8),%xmm0
shufpd $0x1,%xmm14,%xmm13
mulpd  %xmm13,%xmm0
addpd  %xmm2,%xmm0
movsd  0xd8(%rsi),%xmm1
movhpd 0xe0(%rsi,%r10,8),%xmm1
mulpd  %xmm13,%xmm1
addpd  %xmm3,%xmm1
movsd  0x80(%rsi,%r10,8),%xmm3
movsd  0xc0(%rsi,%r10,8),%xmm4
movsd  0xc8(%rsi,%r10,8),%xmm5
movsd  0xd0(%rsi,%r10,8),%xmm2
movhpd 0xa8(%rsi,%r10,8),%xmm3
mulpd  %xmm14,%xmm3
addpd  %xmm0,%xmm3
movhpd 0xe8(%rsi,%r10,8),%xmm4
mulpd  %xmm14,%xmm4
addpd  %xmm1,%xmm4
movhpd 0xf0(%rsi,%r10,8),%xmm5
shufpd $0x1,%xmm8,%xmm14
mulpd  %xmm5,%xmm14
movhpd 0xf8(%rsi,%r10,8),%xmm2
addpd  %xmm4,%xmm14
mulpd  %xmm8,%xmm2
addpd  %xmm14,%xmm2
cmp    $0x1,%r9d
je     15ab <kernel_dtrmv_u_t_8_lib4+0x4ab>
test   %r9d,%r9d
jne    15ec <kernel_dtrmv_u_t_8_lib4+0x4ec>
movupd %xmm12,(%r8)
movupd %xmm9,0x10(%r8)
movupd %xmm3,0x20(%r8)
movupd %xmm2,0x30(%r8)
ret
movupd (%r8),%xmm0
movupd 0x10(%r8),%xmm1
movupd 0x20(%r8),%xmm4
movupd 0x30(%r8),%xmm5
addpd  %xmm0,%xmm12
movupd %xmm12,(%r8)
addpd  %xmm1,%xmm9
movupd %xmm9,0x10(%r8)
addpd  %xmm4,%xmm3
movupd %xmm3,0x20(%r8)
addpd  %xmm5,%xmm2
movupd %xmm2,0x30(%r8)
ret
movupd (%r8),%xmm0
movupd 0x10(%r8),%xmm1
movupd 0x20(%r8),%xmm4
movupd 0x30(%r8),%xmm5
subpd  %xmm12,%xmm0
movupd %xmm0,(%r8)
subpd  %xmm9,%xmm1
movupd %xmm1,0x10(%r8)
subpd  %xmm3,%xmm4
movupd %xmm4,0x20(%r8)
subpd  %xmm2,%xmm5
movupd %xmm5,0x30(%r8)
ret

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

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