void kernel_dtrmv_u_t_4_lib4(int kmax, double *A, int sda, double *x, double *y,
                             int alg) {
  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;
  k = 0;
  for (; k < kmax - 7; k += 8) {
    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_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_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_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;
    A += sda * bs;
    x += 4;
    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_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_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_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;
    A += sda * bs;
    x += 4;
  }
  for (; k < kmax - 3; k += 4) {
    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_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_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_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;
    A += sda * bs;
    x += 4;
  }
  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_1 += A[1 + lda * 1] * x_1;
  y_2 += A[1 + lda * 2] * x_1;
  y_3 += A[1 + lda * 3] * x_1;
  y_2 += A[2 + lda * 2] * x_2;
  y_3 += A[2 + lda * 3] * x_2;
  y_3 += A[3 + lda * 3] * x_3;
  A += sda * bs;
  x += 4;
  if (alg == 0) {
    y[0] = y_0;
    y[1] = y_1;
    y[2] = y_2;
    y[3] = y_3;
  } else if (alg == 1) {
    y[0] += y_0;
    y[1] += y_1;
    y[2] += y_2;
    y[3] += y_3;
  } else {
    y[0] -= y_0;
    y[1] -= y_1;
    y[2] -= y_2;
    y[3] -= y_3;
  }
}


x86 assembly (clang, -O0):
<kernel_dtrmv_u_t_4_lib4>:
push   %rbp
mov    %rsp,%rbp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
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)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x7,%ecx
cmp    %ecx,%eax
jge    1622 <kernel_dtrmv_u_t_4_lib4+0x522>
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  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  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  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    -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  (%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  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  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  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    -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    $0x8,%eax
mov    %eax,-0x38(%rbp)
jmp    114f <kernel_dtrmv_u_t_4_lib4+0x4f>
jmp    1627 <kernel_dtrmv_u_t_4_lib4+0x527>
mov    -0x38(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    18a0 <kernel_dtrmv_u_t_4_lib4+0x7a0>
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  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  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  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    -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    1627 <kernel_dtrmv_u_t_4_lib4+0x527>
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  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  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  0x78(%rax),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
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)
cmpl   $0x0,-0x2c(%rbp)
jne    1a80 <kernel_dtrmv_u_t_4_lib4+0x980>
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)
jmp    1b38 <kernel_dtrmv_u_t_4_lib4+0xa38>
cmpl   $0x1,-0x2c(%rbp)
jne    1ad9 <kernel_dtrmv_u_t_4_lib4+0x9d9>
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)
jmp    1b33 <kernel_dtrmv_u_t_4_lib4+0xa33>
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)
jmp    1b38 <kernel_dtrmv_u_t_4_lib4+0xa38>
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dtrmv_u_t_4_lib4>:
push   %rbp
push   %rbx
cmp    $0x8,%edi
jl     12e5 <kernel_dtrmv_u_t_4_lib4+0x1e5>
lea    -0x7(%rdi),%r11d
lea    0x0(,%rdx,4),%eax
cltq
mov    %rax,%r10
shl    $0x4,%r10
shl    $0x3,%rax
xorpd  %xmm6,%xmm6
xor    %ebp,%ebp
xorpd  %xmm4,%xmm4
nopl   (%rax)
mov    %rsi,%rbx
movsd  0x40(%rsi),%xmm10
movhpd 0x60(%rsi),%xmm10
movsd  (%rsi),%xmm7
movsd  0x8(%rsi),%xmm9
movsd  0x10(%rsi),%xmm1
movsd  0x18(%rsi),%xmm8
movhpd 0x20(%rsi),%xmm7
movsd  (%rcx),%xmm2
movsd  0x8(%rcx),%xmm5
movsd  0x10(%rcx),%xmm3
movsd  0x18(%rcx),%xmm0
unpcklpd %xmm2,%xmm2
mulpd  %xmm2,%xmm7
addpd  %xmm6,%xmm7
mulpd  %xmm10,%xmm2
addpd  %xmm4,%xmm2
movhpd 0x28(%rsi),%xmm9
movsd  0x48(%rsi),%xmm4
movhpd 0x68(%rsi),%xmm4
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm4
addpd  %xmm2,%xmm4
mulpd  %xmm9,%xmm5
addpd  %xmm7,%xmm5
movsd  0x50(%rsi),%xmm2
movhpd 0x70(%rsi),%xmm2
movhpd 0x30(%rsi),%xmm1
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm1
addpd  %xmm5,%xmm1
mulpd  %xmm2,%xmm3
addpd  %xmm4,%xmm3
movhpd 0x38(%rsi),%xmm8
movsd  0x58(%rsi),%xmm4
movhpd 0x78(%rsi),%xmm4
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm4
addpd  %xmm3,%xmm4
mulpd  %xmm8,%xmm0
addpd  %xmm1,%xmm0
lea    (%rsi,%rax,1),%rsi
movsd  0x40(%rbx,%rax,1),%xmm5
movhpd 0x60(%rbx,%rax,1),%xmm5
movsd  (%rbx,%rax,1),%xmm1
movsd  0x8(%rbx,%rax,1),%xmm6
movsd  0x10(%rbx,%rax,1),%xmm2
movhpd 0x20(%rbx,%rax,1),%xmm1
movsd  0x18(%rbx,%rax,1),%xmm3
movsd  0x20(%rcx),%xmm7
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm1
addpd  %xmm0,%xmm1
mulpd  %xmm5,%xmm7
movhpd 0x28(%rbx,%rax,1),%xmm6
addpd  %xmm4,%xmm7
movsd  0x48(%rbx,%rax,1),%xmm0
movhpd 0x68(%rbx,%rax,1),%xmm0
movsd  0x28(%rcx),%xmm4
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm0
addpd  %xmm7,%xmm0
mulpd  %xmm6,%xmm4
movsd  0x50(%rbx,%rax,1),%xmm6
movhpd 0x70(%rbx,%rax,1),%xmm6
addpd  %xmm1,%xmm4
movhpd 0x30(%rbx,%rax,1),%xmm2
movsd  0x30(%rcx),%xmm5
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm2
addpd  %xmm4,%xmm2
mulpd  %xmm6,%xmm5
addpd  %xmm0,%xmm5
movhpd 0x38(%rbx,%rax,1),%xmm3
movsd  0x58(%rbx,%rax,1),%xmm0
movhpd 0x78(%rbx,%rax,1),%xmm0
movsd  0x38(%rcx),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm0
movapd %xmm0,%xmm4
addpd  %xmm5,%xmm4
mulpd  %xmm3,%xmm1
movapd %xmm1,%xmm6
addpd  %xmm2,%xmm6
add    $0x40,%rcx
add    $0x8,%ebp
add    %rax,%rsi
cmp    %r11d,%ebp
jl     1130 <kernel_dtrmv_u_t_4_lib4+0x30>
add    %r10,%rbx
addpd  %xmm2,%xmm1
addpd  %xmm5,%xmm0
mov    %edi,%eax
and    $0xfffffff8,%eax
mov    %rbx,%rsi
jmp    12ef <kernel_dtrmv_u_t_4_lib4+0x1ef>
xorpd  %xmm1,%xmm1
xor    %eax,%eax
xorpd  %xmm0,%xmm0
add    $0xfffffffd,%edi
cmp    %edi,%eax
jge    13f5 <kernel_dtrmv_u_t_4_lib4+0x2f5>
shl    $0x2,%edx
movslq %edx,%rdx
shl    $0x3,%rdx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movsd  0x40(%rsi),%xmm10
movhpd 0x60(%rsi),%xmm10
movsd  (%rsi),%xmm6
movsd  0x8(%rsi),%xmm9
movsd  0x10(%rsi),%xmm2
movhpd 0x20(%rsi),%xmm6
movsd  0x18(%rsi),%xmm8
movsd  (%rcx),%xmm5
movsd  0x8(%rcx),%xmm7
movsd  0x10(%rcx),%xmm4
movsd  0x18(%rcx),%xmm3
unpcklpd %xmm5,%xmm5
mulpd  %xmm5,%xmm6
addpd  %xmm1,%xmm6
mulpd  %xmm10,%xmm5
addpd  %xmm0,%xmm5
movhpd 0x28(%rsi),%xmm9
movsd  0x48(%rsi),%xmm0
movhpd 0x68(%rsi),%xmm0
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm0
addpd  %xmm5,%xmm0
mulpd  %xmm9,%xmm7
movsd  0x50(%rsi),%xmm1
movhpd 0x70(%rsi),%xmm1
movhpd 0x30(%rsi),%xmm2
addpd  %xmm6,%xmm7
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm2
addpd  %xmm7,%xmm2
mulpd  %xmm1,%xmm4
addpd  %xmm0,%xmm4
movhpd 0x38(%rsi),%xmm8
movsd  0x58(%rsi),%xmm6
movhpd 0x78(%rsi),%xmm6
unpcklpd %xmm3,%xmm3
mulpd  %xmm3,%xmm6
movapd %xmm6,%xmm0
addpd  %xmm4,%xmm0
mulpd  %xmm8,%xmm3
movapd %xmm3,%xmm1
addpd  %xmm2,%xmm1
add    $0x20,%rcx
add    $0x4,%eax
add    %rdx,%rsi
cmp    %edi,%eax
jl     1310 <kernel_dtrmv_u_t_4_lib4+0x210>
addpd  %xmm2,%xmm3
addpd  %xmm4,%xmm6
movapd %xmm3,%xmm1
movapd %xmm6,%xmm0
movupd (%rcx),%xmm4
movupd 0x10(%rcx),%xmm8
movapd %xmm1,%xmm2
unpckhpd %xmm1,%xmm2
movsd  0x20(%rsi),%xmm6
mulsd  %xmm4,%xmm6
addsd  %xmm2,%xmm6
movapd %xmm0,%xmm2
unpckhpd %xmm0,%xmm2
movsd  0x60(%rsi),%xmm7
mulsd  %xmm4,%xmm7
addsd  %xmm2,%xmm7
movsd  (%rsi),%xmm3
movsd  0x40(%rsi),%xmm5
movsd  0x48(%rsi),%xmm9
movsd  0x50(%rsi),%xmm2
movhpd 0x28(%rsi),%xmm3
unpcklpd %xmm6,%xmm1
mulpd  %xmm4,%xmm3
addpd  %xmm1,%xmm3
movhpd 0x68(%rsi),%xmm5
unpcklpd %xmm7,%xmm0
mulpd  %xmm4,%xmm5
addpd  %xmm0,%xmm5
movhpd 0x70(%rsi),%xmm9
shufpd $0x1,%xmm8,%xmm4
mulpd  %xmm9,%xmm4
movhpd 0x78(%rsi),%xmm2
addpd  %xmm5,%xmm4
mulpd  %xmm8,%xmm2
addpd  %xmm4,%xmm2
cmp    $0x1,%r9d
je     149a <kernel_dtrmv_u_t_4_lib4+0x39a>
test   %r9d,%r9d
jne    14ba <kernel_dtrmv_u_t_4_lib4+0x3ba>
movupd %xmm3,(%r8)
movupd %xmm2,0x10(%r8)
jmp    14d8 <kernel_dtrmv_u_t_4_lib4+0x3d8>
movupd (%r8),%xmm0
movupd 0x10(%r8),%xmm1
addpd  %xmm0,%xmm3
movupd %xmm3,(%r8)
addpd  %xmm1,%xmm2
movupd %xmm2,0x10(%r8)
jmp    14d8 <kernel_dtrmv_u_t_4_lib4+0x3d8>
movupd (%r8),%xmm0
movupd 0x10(%r8),%xmm1
subpd  %xmm3,%xmm0
movupd %xmm0,(%r8)
subpd  %xmm2,%xmm1
movupd %xmm1,0x10(%r8)
pop    %rbx
pop    %rbp
ret

LLVM IR (-O0):
define void @kernel_dtrmv_u_t_4_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
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
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 i32 0, i32* %15
br label %24
24: ; preds = %260, %6
%25 = load i32, i32* %15
%26 = load i32, i32* %7
%27 = sub nsw i32 %26, 7
%28 = icmp slt i32 %25, %27
br i1 %28, label %29, label %263
29: ; preds = %24
%30 = load double*, double** %10
%31 = getelementptr inbounds double, double* %30, i64 0
%32 = load double, double* %31
store double %32, double* %16
%33 = load double*, double** %10
%34 = getelementptr inbounds double, double* %33, i64 1
%35 = load double, double* %34
store double %35, double* %17
%36 = load double*, double** %10
%37 = getelementptr inbounds double, double* %36, i64 2
%38 = load double, double* %37
store double %38, double* %18
%39 = load double*, double** %10
%40 = getelementptr inbounds double, double* %39, i64 3
%41 = load double, double* %40
store double %41, double* %19
%42 = load double*, double** %8
%43 = getelementptr inbounds double, double* %42, i64 0
%44 = load double, double* %43
%45 = load double, double* %16
%46 = load double, double* %20
%47 = call double @llvm.fmuladd.f64(double %44, double %45, double %46)
store double %47, double* %20
%48 = load double*, double** %8
%49 = getelementptr inbounds double, double* %48, i64 4
%50 = load double, double* %49
%51 = load double, double* %16
%52 = load double, double* %21
%53 = call double @llvm.fmuladd.f64(double %50, double %51, double %52)
store double %53, double* %21
%54 = load double*, double** %8
%55 = getelementptr inbounds double, double* %54, i64 8
%56 = load double, double* %55
%57 = load double, double* %16
%58 = load double, double* %22
%59 = call double @llvm.fmuladd.f64(double %56, double %57, double %58)
store double %59, double* %22
%60 = load double*, double** %8
%61 = getelementptr inbounds double, double* %60, i64 12
%62 = load double, double* %61
%63 = load double, double* %16
%64 = load double, double* %23
%65 = call double @llvm.fmuladd.f64(double %62, double %63, double %64)
store double %65, double* %23
%66 = load double*, double** %8
%67 = getelementptr inbounds double, double* %66, i64 1
%68 = load double, double* %67
%69 = load double, double* %17
%70 = load double, double* %20
%71 = call double @llvm.fmuladd.f64(double %68, double %69, double %70)
store double %71, double* %20
%72 = load double*, double** %8
%73 = getelementptr inbounds double, double* %72, i64 5
%74 = load double, double* %73
%75 = load double, double* %17
%76 = load double, double* %21
%77 = call double @llvm.fmuladd.f64(double %74, double %75, double %76)
store double %77, double* %21
%78 = load double*, double** %8
%79 = getelementptr inbounds double, double* %78, i64 9
%80 = load double, double* %79
%81 = load double, double* %17
%82 = load double, double* %22
%83 = call double @llvm.fmuladd.f64(double %80, double %81, double %82)
store double %83, double* %22
%84 = load double*, double** %8
%85 = getelementptr inbounds double, double* %84, i64 13
%86 = load double, double* %85
%87 = load double, double* %17
%88 = load double, double* %23
%89 = call double @llvm.fmuladd.f64(double %86, double %87, double %88)
store double %89, double* %23
%90 = load double*, double** %8
%91 = getelementptr inbounds double, double* %90, i64 2
%92 = load double, double* %91
%93 = load double, double* %18
%94 = load double, double* %20
%95 = call double @llvm.fmuladd.f64(double %92, double %93, double %94)
store double %95, double* %20
%96 = load double*, double** %8
%97 = getelementptr inbounds double, double* %96, i64 6
%98 = load double, double* %97
%99 = load double, double* %18
%100 = load double, double* %21
%101 = call double @llvm.fmuladd.f64(double %98, double %99, double %100)
store double %101, double* %21
%102 = load double*, double** %8
%103 = getelementptr inbounds double, double* %102, i64 10
%104 = load double, double* %103
%105 = load double, double* %18
%106 = load double, double* %22
%107 = call double @llvm.fmuladd.f64(double %104, double %105, double %106)
store double %107, double* %22
%108 = load double*, double** %8
%109 = getelementptr inbounds double, double* %108, i64 14
%110 = load double, double* %109
%111 = load double, double* %18
%112 = load double, double* %23
%113 = call double @llvm.fmuladd.f64(double %110, double %111, double %112)
store double %113, double* %23
%114 = load double*, double** %8
%115 = getelementptr inbounds double, double* %114, i64 3
%116 = load double, double* %115
%117 = load double, double* %19
%118 = load double, double* %20
%119 = call double @llvm.fmuladd.f64(double %116, double %117, double %118)
store double %119, double* %20
%120 = load double*, double** %8
%121 = getelementptr inbounds double, double* %120, i64 7
%122 = load double, double* %121
%123 = load double, double* %19
%124 = load double, double* %21
%125 = call double @llvm.fmuladd.f64(double %122, double %123, double %124)
store double %125, double* %21
%126 = load double*, double** %8
%127 = getelementptr inbounds double, double* %126, i64 11
%128 = load double, double* %127
%129 = load double, double* %19
%130 = load double, double* %22
%131 = call double @llvm.fmuladd.f64(double %128, double %129, double %130)
store double %131, double* %22
%132 = load double*, double** %8
%133 = getelementptr inbounds double, double* %132, i64 15
%134 = load double, double* %133
%135 = load double, double* %19
%136 = load double, double* %23
%137 = call double @llvm.fmuladd.f64(double %134, double %135, double %136)
store double %137, double* %23
%138 = load i32, i32* %9
%139 = mul nsw i32 %138, 4
%140 = load double*, double** %8
%141 = sext i32 %139 to i64
%142 = getelementptr inbounds double, double* %140, i64 %141
store double* %142, double** %8
%143 = load double*, double** %10
%144 = getelementptr inbounds double, double* %143, i64 4
store double* %144, double** %10
%145 = load double*, double** %10
%146 = getelementptr inbounds double, double* %145, i64 0
%147 = load double, double* %146
store double %147, double* %16
%148 = load double*, double** %10
%149 = getelementptr inbounds double, double* %148, i64 1
%150 = load double, double* %149
store double %150, double* %17
%151 = load double*, double** %10
%152 = getelementptr inbounds double, double* %151, i64 2
%153 = load double, double* %152
store double %153, double* %18
%154 = load double*, double** %10
%155 = getelementptr inbounds double, double* %154, i64 3
%156 = load double, double* %155
store double %156, double* %19
%157 = load double*, double** %8
%158 = getelementptr inbounds double, double* %157, i64 0
%159 = load double, double* %158
%160 = load double, double* %16
%161 = load double, double* %20
%162 = call double @llvm.fmuladd.f64(double %159, double %160, double %161)
store double %162, double* %20
%163 = load double*, double** %8
%164 = getelementptr inbounds double, double* %163, i64 4
%165 = load double, double* %164
%166 = load double, double* %16
%167 = load double, double* %21
%168 = call double @llvm.fmuladd.f64(double %165, double %166, double %167)
store double %168, double* %21
%169 = load double*, double** %8
%170 = getelementptr inbounds double, double* %169, i64 8
%171 = load double, double* %170
%172 = load double, double* %16
%173 = load double, double* %22
%174 = call double @llvm.fmuladd.f64(double %171, double %172, double %173)
store double %174, double* %22
%175 = load double*, double** %8
%176 = getelementptr inbounds double, double* %175, i64 12
%177 = load double, double* %176
%178 = load double, double* %16
%179 = load double, double* %23
%180 = call double @llvm.fmuladd.f64(double %177, double %178, double %179)
store double %180, double* %23
%181 = load double*, double** %8
%182 = getelementptr inbounds double, double* %181, i64 1
%183 = load double, double* %182
%184 = load double, double* %17
%185 = load double, double* %20
%186 = call double @llvm.fmuladd.f64(double %183, double %184, double %185)
store double %186, double* %20
%187 = load double*, double** %8
%188 = getelementptr inbounds double, double* %187, i64 5
%189 = load double, double* %188
%190 = load double, double* %17
%191 = load double, double* %21
%192 = call double @llvm.fmuladd.f64(double %189, double %190, double %191)
store double %192, double* %21
%193 = load double*, double** %8
%194 = getelementptr inbounds double, double* %193, i64 9
%195 = load double, double* %194
%196 = load double, double* %17
%197 = load double, double* %22
%198 = call double @llvm.fmuladd.f64(double %195, double %196, double %197)
store double %198, double* %22
%199 = load double*, double** %8
%200 = getelementptr inbounds double, double* %199, i64 13
%201 = load double, double* %200
%202 = load double, double* %17
%203 = load double, double* %23
%204 = call double @llvm.fmuladd.f64(double %201, double %202, double %203)
store double %204, double* %23
%205 = load double*, double** %8
%206 = getelementptr inbounds double, double* %205, i64 2
%207 = load double, double* %206
%208 = load double, double* %18
%209 = load double, double* %20
%210 = call double @llvm.fmuladd.f64(double %207, double %208, double %209)
store double %210, double* %20
%211 = load double*, double** %8
%212 = getelementptr inbounds double, double* %211, i64 6
%213 = load double, double* %212
%214 = load double, double* %18
%215 = load double, double* %21
%216 = call double @llvm.fmuladd.f64(double %213, double %214, double %215)
store double %216, double* %21
%217 = load double*, double** %8
%218 = getelementptr inbounds double, double* %217, i64 10
%219 = load double, double* %218
%220 = load double, double* %18
%221 = load double, double* %22
%222 = call double @llvm.fmuladd.f64(double %219, double %220, double %221)
store double %222, double* %22
%223 = load double*, double** %8
%224 = getelementptr inbounds double, double* %223, i64 14
%225 = load double, double* %224
%226 = load double, double* %18
%227 = load double, double* %23
%228 = call double @llvm.fmuladd.f64(double %225, double %226, double %227)
store double %228, double* %23
%229 = load double*, double** %8
%230 = getelementptr inbounds double, double* %229, i64 3
%231 = load double, double* %230
%232 = load double, double* %19
%233 = load double, double* %20
%234 = call double @llvm.fmuladd.f64(double %231, double %232, double %233)
store double %234, double* %20
%235 = load double*, double** %8
%236 = getelementptr inbounds double, double* %235, i64 7
%237 = load double, double* %236
%238 = load double, double* %19
%239 = load double, double* %21
%240 = call double @llvm.fmuladd.f64(double %237, double %238, double %239)
store double %240, double* %21
%241 = load double*, double** %8
%242 = getelementptr inbounds double, double* %241, i64 11
%243 = load double, double* %242
%244 = load double, double* %19
%245 = load double, double* %22
%246 = call double @llvm.fmuladd.f64(double %243, double %244, double %245)
store double %246, double* %22
%247 = load double*, double** %8
%248 = getelementptr inbounds double, double* %247, i64 15
%249 = load double, double* %248
%250 = load double, double* %19
%251 = load double, double* %23
%252 = call double @llvm.fmuladd.f64(double %249, double %250, double %251)
store double %252, double* %23
%253 = load i32, i32* %9
%254 = mul nsw i32 %253, 4
%255 = load double*, double** %8
%256 = sext i32 %254 to i64
%257 = getelementptr inbounds double, double* %255, i64 %256
store double* %257, double** %8
%258 = load double*, double** %10
%259 = getelementptr inbounds double, double* %258, i64 4
store double* %259, double** %10
br label %260
260: ; preds = %29
%261 = load i32, i32* %15
%262 = add nsw i32 %261, 8
store i32 %262, i32* %15
br label %24
263: ; preds = %24
br label %264
264: ; preds = %385, %263
%265 = load i32, i32* %15
%266 = load i32, i32* %7
%267 = sub nsw i32 %266, 3
%268 = icmp slt i32 %265, %267
br i1 %268, label %269, label %388
269: ; preds = %264
%270 = load double*, double** %10
%271 = getelementptr inbounds double, double* %270, i64 0
%272 = load double, double* %271
store double %272, double* %16
%273 = load double*, double** %10
%274 = getelementptr inbounds double, double* %273, i64 1
%275 = load double, double* %274
store double %275, double* %17
%276 = load double*, double** %10
%277 = getelementptr inbounds double, double* %276, i64 2
%278 = load double, double* %277
store double %278, double* %18
%279 = load double*, double** %10
%280 = getelementptr inbounds double, double* %279, i64 3
%281 = load double, double* %280
store double %281, double* %19
%282 = load double*, double** %8
%283 = getelementptr inbounds double, double* %282, i64 0
%284 = load double, double* %283
%285 = load double, double* %16
%286 = load double, double* %20
%287 = call double @llvm.fmuladd.f64(double %284, double %285, double %286)
store double %287, double* %20
%288 = load double*, double** %8
%289 = getelementptr inbounds double, double* %288, i64 4
%290 = load double, double* %289
%291 = load double, double* %16
%292 = load double, double* %21
%293 = call double @llvm.fmuladd.f64(double %290, double %291, double %292)
store double %293, double* %21
%294 = load double*, double** %8
%295 = getelementptr inbounds double, double* %294, i64 8
%296 = load double, double* %295
%297 = load double, double* %16
%298 = load double, double* %22
%299 = call double @llvm.fmuladd.f64(double %296, double %297, double %298)
store double %299, double* %22
%300 = load double*, double** %8
%301 = getelementptr inbounds double, double* %300, i64 12
%302 = load double, double* %301
%303 = load double, double* %16
%304 = load double, double* %23
%305 = call double @llvm.fmuladd.f64(double %302, double %303, double %304)
store double %305, double* %23
%306 = load double*, double** %8
%307 = getelementptr inbounds double, double* %306, i64 1
%308 = load double, double* %307
%309 = load double, double* %17
%310 = load double, double* %20
%311 = call double @llvm.fmuladd.f64(double %308, double %309, double %310)
store double %311, double* %20
%312 = load double*, double** %8
%313 = getelementptr inbounds double, double* %312, i64 5
%314 = load double, double* %313
%315 = load double, double* %17
%316 = load double, double* %21
%317 = call double @llvm.fmuladd.f64(double %314, double %315, double %316)
store double %317, double* %21
%318 = load double*, double** %8
%319 = getelementptr inbounds double, double* %318, i64 9
%320 = load double, double* %319
%321 = load double, double* %17
%322 = load double, double* %22
%323 = call double @llvm.fmuladd.f64(double %320, double %321, double %322)
store double %323, double* %22
%324 = load double*, double** %8
%325 = getelementptr inbounds double, double* %324, i64 13
%326 = load double, double* %325
%327 = load double, double* %17
%328 = load double, double* %23
%329 = call double @llvm.fmuladd.f64(double %326, double %327, double %328)
store double %329, double* %23
%330 = load double*, double** %8
%331 = getelementptr inbounds double, double* %330, i64 2
%332 = load double, double* %331
%333 = load double, double* %18
%334 = load double, double* %20
%335 = call double @llvm.fmuladd.f64(double %332, double %333, double %334)
store double %335, double* %20
%336 = load double*, double** %8
%337 = getelementptr inbounds double, double* %336, i64 6
%338 = load double, double* %337
%339 = load double, double* %18
%340 = load double, double* %21
%341 = call double @llvm.fmuladd.f64(double %338, double %339, double %340)
store double %341, double* %21
%342 = load double*, double** %8
%343 = getelementptr inbounds double, double* %342, i64 10
%344 = load double, double* %343
%345 = load double, double* %18
%346 = load double, double* %22
%347 = call double @llvm.fmuladd.f64(double %344, double %345, double %346)
store double %347, double* %22
%348 = load double*, double** %8
%349 = getelementptr inbounds double, double* %348, i64 14
%350 = load double, double* %349
%351 = load double, double* %18
%352 = load double, double* %23
%353 = call double @llvm.fmuladd.f64(double %350, double %351, double %352)
store double %353, double* %23
%354 = load double*, double** %8
%355 = getelementptr inbounds double, double* %354, i64 3
%356 = load double, double* %355
%357 = load double, double* %19
%358 = load double, double* %20
%359 = call double @llvm.fmuladd.f64(double %356, double %357, double %358)
store double %359, double* %20
%360 = load double*, double** %8
%361 = getelementptr inbounds double, double* %360, i64 7
%362 = load double, double* %361
%363 = load double, double* %19
%364 = load double, double* %21
%365 = call double @llvm.fmuladd.f64(double %362, double %363, double %364)
store double %365, double* %21
%366 = load double*, double** %8
%367 = getelementptr inbounds double, double* %366, i64 11
%368 = load double, double* %367
%369 = load double, double* %19
%370 = load double, double* %22
%371 = call double @llvm.fmuladd.f64(double %368, double %369, double %370)
store double %371, double* %22
%372 = load double*, double** %8
%373 = getelementptr inbounds double, double* %372, i64 15
%374 = load double, double* %373
%375 = load double, double* %19
%376 = load double, double* %23
%377 = call double @llvm.fmuladd.f64(double %374, double %375, double %376)
store double %377, double* %23
%378 = load i32, i32* %9
%379 = mul nsw i32 %378, 4
%380 = load double*, double** %8
%381 = sext i32 %379 to i64
%382 = getelementptr inbounds double, double* %380, i64 %381
store double* %382, double** %8
%383 = load double*, double** %10
%384 = getelementptr inbounds double, double* %383, i64 4
store double* %384, double** %10
br label %385
385: ; preds = %269
%386 = load i32, i32* %15
%387 = add nsw i32 %386, 4
store i32 %387, i32* %15
br label %264
388: ; preds = %264
%389 = load double*, double** %10
%390 = getelementptr inbounds double, double* %389, i64 0
%391 = load double, double* %390
store double %391, double* %16
%392 = load double*, double** %10
%393 = getelementptr inbounds double, double* %392, i64 1
%394 = load double, double* %393
store double %394, double* %17
%395 = load double*, double** %10
%396 = getelementptr inbounds double, double* %395, i64 2
%397 = load double, double* %396
store double %397, double* %18
%398 = load double*, double** %10
%399 = getelementptr inbounds double, double* %398, i64 3
%400 = load double, double* %399
store double %400, double* %19
%401 = load double*, double** %8
%402 = getelementptr inbounds double, double* %401, i64 0
%403 = load double, double* %402
%404 = load double, double* %16
%405 = load double, double* %20
%406 = call double @llvm.fmuladd.f64(double %403, double %404, double %405)
store double %406, double* %20
%407 = load double*, double** %8
%408 = getelementptr inbounds double, double* %407, i64 4
%409 = load double, double* %408
%410 = load double, double* %16
%411 = load double, double* %21
%412 = call double @llvm.fmuladd.f64(double %409, double %410, double %411)
store double %412, double* %21
%413 = load double*, double** %8
%414 = getelementptr inbounds double, double* %413, i64 8
%415 = load double, double* %414
%416 = load double, double* %16
%417 = load double, double* %22
%418 = call double @llvm.fmuladd.f64(double %415, double %416, double %417)
store double %418, double* %22
%419 = load double*, double** %8
%420 = getelementptr inbounds double, double* %419, i64 12
%421 = load double, double* %420
%422 = load double, double* %16
%423 = load double, double* %23
%424 = call double @llvm.fmuladd.f64(double %421, double %422, double %423)
store double %424, double* %23
%425 = load double*, double** %8
%426 = getelementptr inbounds double, double* %425, i64 5
%427 = load double, double* %426
%428 = load double, double* %17
%429 = load double, double* %21
%430 = call double @llvm.fmuladd.f64(double %427, double %428, double %429)
store double %430, double* %21
%431 = load double*, double** %8
%432 = getelementptr inbounds double, double* %431, i64 9
%433 = load double, double* %432
%434 = load double, double* %17
%435 = load double, double* %22
%436 = call double @llvm.fmuladd.f64(double %433, double %434, double %435)
store double %436, double* %22
%437 = load double*, double** %8
%438 = getelementptr inbounds double, double* %437, i64 13
%439 = load double, double* %438
%440 = load double, double* %17
%441 = load double, double* %23
%442 = call double @llvm.fmuladd.f64(double %439, double %440, double %441)
store double %442, double* %23
%443 = load double*, double** %8
%444 = getelementptr inbounds double, double* %443, i64 10
%445 = load double, double* %444
%446 = load double, double* %18
%447 = load double, double* %22
%448 = call double @llvm.fmuladd.f64(double %445, double %446, double %447)
store double %448, double* %22
%449 = load double*, double** %8
%450 = getelementptr inbounds double, double* %449, i64 14
%451 = load double, double* %450
%452 = load double, double* %18
%453 = load double, double* %23
%454 = call double @llvm.fmuladd.f64(double %451, double %452, double %453)
store double %454, double* %23
%455 = load double*, double** %8
%456 = getelementptr inbounds double, double* %455, i64 15
%457 = load double, double* %456
%458 = load double, double* %19
%459 = load double, double* %23
%460 = call double @llvm.fmuladd.f64(double %457, double %458, double %459)
store double %460, double* %23
%461 = load i32, i32* %9
%462 = mul nsw i32 %461, 4
%463 = load double*, double** %8
%464 = sext i32 %462 to i64
%465 = getelementptr inbounds double, double* %463, i64 %464
store double* %465, double** %8
%466 = load double*, double** %10
%467 = getelementptr inbounds double, double* %466, i64 4
store double* %467, double** %10
%468 = load i32, i32* %12
%469 = icmp eq i32 %468, 0
br i1 %469, label %470, label %483
470: ; preds = %388
%471 = load double, double* %20
%472 = load double*, double** %11
%473 = getelementptr inbounds double, double* %472, i64 0
store double %471, double* %473
%474 = load double, double* %21
%475 = load double*, double** %11
%476 = getelementptr inbounds double, double* %475, i64 1
store double %474, double* %476
%477 = load double, double* %22
%478 = load double*, double** %11
%479 = getelementptr inbounds double, double* %478, i64 2
store double %477, double* %479
%480 = load double, double* %23
%481 = load double*, double** %11
%482 = getelementptr inbounds double, double* %481, i64 3
store double %480, double* %482
br label %529
483: ; preds = %388
%484 = load i32, i32* %12
%485 = icmp eq i32 %484, 1
br i1 %485, label %486, label %507
486: ; preds = %483
%487 = load double, double* %20
%488 = load double*, double** %11
%489 = getelementptr inbounds double, double* %488, i64 0
%490 = load double, double* %489
%491 = fadd double %490, %487
store double %491, double* %489
%492 = load double, double* %21
%493 = load double*, double** %11
%494 = getelementptr inbounds double, double* %493, i64 1
%495 = load double, double* %494
%496 = fadd double %495, %492
store double %496, double* %494
%497 = load double, double* %22
%498 = load double*, double** %11
%499 = getelementptr inbounds double, double* %498, i64 2
%500 = load double, double* %499
%501 = fadd double %500, %497
store double %501, double* %499
%502 = load double, double* %23
%503 = load double*, double** %11
%504 = getelementptr inbounds double, double* %503, i64 3
%505 = load double, double* %504
%506 = fadd double %505, %502
store double %506, double* %504
br label %528
507: ; preds = %483
%508 = load double, double* %20
%509 = load double*, double** %11
%510 = getelementptr inbounds double, double* %509, i64 0
%511 = load double, double* %510
%512 = fsub double %511, %508
store double %512, double* %510
%513 = load double, double* %21
%514 = load double*, double** %11
%515 = getelementptr inbounds double, double* %514, i64 1
%516 = load double, double* %515
%517 = fsub double %516, %513
store double %517, double* %515
%518 = load double, double* %22
%519 = load double*, double** %11
%520 = getelementptr inbounds double, double* %519, i64 2
%521 = load double, double* %520
%522 = fsub double %521, %518
store double %522, double* %520
%523 = load double, double* %23
%524 = load double*, double** %11
%525 = getelementptr inbounds double, double* %524, i64 3
%526 = load double, double* %525
%527 = fsub double %526, %523
store double %527, double* %525
br label %528
528: ; preds = %507, %486
br label %529
529: ; preds = %528, %470
ret void
}

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