void kernel_strmv_u_t_4_lib8(int kmax, float *A, int sda, float *x, float *y,
                             int alg) {
  const int lda = 8;
  const int bs = 8;
  int k;
  float 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;
    x_0 = x[4];
    x_1 = x[5];
    x_2 = x[6];
    x_3 = x[7];
    y_0 += A[4 + lda * 0] * x_0;
    y_1 += A[4 + lda * 1] * x_0;
    y_2 += A[4 + lda * 2] * x_0;
    y_3 += A[4 + lda * 3] * x_0;
    y_0 += A[5 + lda * 0] * x_1;
    y_1 += A[5 + lda * 1] * x_1;
    y_2 += A[5 + lda * 2] * x_1;
    y_3 += A[5 + lda * 3] * x_1;
    y_0 += A[6 + lda * 0] * x_2;
    y_1 += A[6 + lda * 1] * x_2;
    y_2 += A[6 + lda * 2] * x_2;
    y_3 += A[6 + lda * 3] * x_2;
    y_0 += A[7 + lda * 0] * x_3;
    y_1 += A[7 + lda * 1] * x_3;
    y_2 += A[7 + lda * 2] * x_3;
    y_3 += A[7 + lda * 3] * x_3;
    A += sda * bs;
    x += 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_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;
  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_strmv_u_t_4_lib8>:
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   $0x8,-0x30(%rbp)
movl   $0x8,-0x34(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4c(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x50(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x58(%rbp)
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x7,%ecx
cmp    %ecx,%eax
jge    1600 <kernel_strmv_u_t_4_lib8+0x500>
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x20(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x4c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x50(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  0x40(%rax),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x54(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movss  0x60(%rax),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  -0x40(%rbp),%xmm2
movss  -0x4c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movss  0x24(%rax),%xmm0
movss  -0x40(%rbp),%xmm2
movss  -0x50(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  0x44(%rax),%xmm0
movss  -0x40(%rbp),%xmm2
movss  -0x54(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movss  0x64(%rax),%xmm0
movss  -0x40(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  -0x44(%rbp),%xmm2
movss  -0x4c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm0
movss  -0x44(%rbp),%xmm2
movss  -0x50(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  0x48(%rax),%xmm0
movss  -0x44(%rbp),%xmm2
movss  -0x54(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movss  0x68(%rax),%xmm0
movss  -0x44(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x4c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x50(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  0x4c(%rax),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x54(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movss  0x6c(%rax),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movss  0x10(%rax),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
movss  0x14(%rax),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movss  0x18(%rax),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x20(%rbp),%rax
movss  0x1c(%rax),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x4c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x50(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  0x50(%rax),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x54(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movss  0x70(%rax),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movss  0x14(%rax),%xmm0
movss  -0x40(%rbp),%xmm2
movss  -0x4c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movss  0x34(%rax),%xmm0
movss  -0x40(%rbp),%xmm2
movss  -0x50(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  0x54(%rax),%xmm0
movss  -0x40(%rbp),%xmm2
movss  -0x54(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movss  0x74(%rax),%xmm0
movss  -0x40(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm0
movss  -0x44(%rbp),%xmm2
movss  -0x4c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm0
movss  -0x44(%rbp),%xmm2
movss  -0x50(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  0x58(%rax),%xmm0
movss  -0x44(%rbp),%xmm2
movss  -0x54(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movss  0x78(%rax),%xmm0
movss  -0x44(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x4c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x50(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  0x5c(%rax),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x54(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movss  0x7c(%rax),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x14(%rbp),%ecx
shl    $0x3,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x2,%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_strmv_u_t_4_lib8+0x4f>
mov    -0x20(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x20(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x20(%rbp),%rax
movss  0xc(%rax),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x4c(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x50(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  0x40(%rax),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x54(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movss  0x60(%rax),%xmm0
movss  -0x3c(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movss  0x24(%rax),%xmm0
movss  -0x40(%rbp),%xmm2
movss  -0x50(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  0x44(%rax),%xmm0
movss  -0x40(%rbp),%xmm2
movss  -0x54(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movss  0x64(%rax),%xmm0
movss  -0x40(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movss  0x48(%rax),%xmm0
movss  -0x44(%rbp),%xmm2
movss  -0x54(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x54(%rbp)
mov    -0x10(%rbp),%rax
movss  0x68(%rax),%xmm0
movss  -0x44(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x10(%rbp),%rax
movss  0x6c(%rax),%xmm0
movss  -0x48(%rbp),%xmm2
movss  -0x58(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jne    17bc <kernel_strmv_u_t_4_lib8+0x6bc>
movss  -0x4c(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x54(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  -0x58(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movss  %xmm0,0xc(%rax)
jmp    1874 <kernel_strmv_u_t_4_lib8+0x774>
cmpl   $0x1,-0x2c(%rbp)
jne    1815 <kernel_strmv_u_t_4_lib8+0x715>
movss  -0x4c(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addss  (%rax),%xmm0
movss  %xmm0,(%rax)
movss  -0x50(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addss  0x4(%rax),%xmm0
movss  %xmm0,0x4(%rax)
movss  -0x54(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addss  0x8(%rax),%xmm0
movss  %xmm0,0x8(%rax)
movss  -0x58(%rbp),%xmm0
mov    -0x28(%rbp),%rax
addss  0xc(%rax),%xmm0
movss  %xmm0,0xc(%rax)
jmp    186f <kernel_strmv_u_t_4_lib8+0x76f>
movss  -0x4c(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movss  (%rax),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,(%rax)
movss  -0x50(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movss  0x4(%rax),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,0x4(%rax)
movss  -0x54(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movss  0x8(%rax),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,0x8(%rax)
movss  -0x58(%rbp),%xmm1
mov    -0x28(%rbp),%rax
movss  0xc(%rax),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,0xc(%rax)
jmp    1874 <kernel_strmv_u_t_4_lib8+0x774>
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_strmv_u_t_4_lib8>:
xorps  %xmm0,%xmm0
cmp    $0x8,%edi
jl     129a <kernel_strmv_u_t_4_lib8+0x19a>
add    $0xfffffff9,%edi
shl    $0x3,%edx
movslq %edx,%rax
shl    $0x2,%rax
xorps  %xmm3,%xmm3
xor    %edx,%edx
xchg   %ax,%ax
movss  0x60(%rsi),%xmm0
movss  0x40(%rsi),%xmm1
unpcklps %xmm0,%xmm1
movss  0x20(%rsi),%xmm0
movss  (%rsi),%xmm6
unpcklps %xmm0,%xmm6
movlhps %xmm1,%xmm6
movss  0x4(%rsi),%xmm7
movss  0x8(%rsi),%xmm4
movss  0xc(%rsi),%xmm8
movss  (%rcx),%xmm1
movss  0x4(%rcx),%xmm5
movss  0x8(%rcx),%xmm2
movss  0xc(%rcx),%xmm0
shufps $0x0,%xmm1,%xmm1
mulps  %xmm6,%xmm1
addps  %xmm3,%xmm1
movss  0x64(%rsi),%xmm3
movss  0x44(%rsi),%xmm6
unpcklps %xmm3,%xmm6
movss  0x24(%rsi),%xmm3
unpcklps %xmm3,%xmm7
movlhps %xmm6,%xmm7
shufps $0x0,%xmm5,%xmm5
mulps  %xmm7,%xmm5
addps  %xmm1,%xmm5
movss  0x68(%rsi),%xmm1
movss  0x48(%rsi),%xmm3
unpcklps %xmm1,%xmm3
movss  0x28(%rsi),%xmm1
unpcklps %xmm1,%xmm4
movlhps %xmm3,%xmm4
shufps $0x0,%xmm2,%xmm2
mulps  %xmm4,%xmm2
addps  %xmm5,%xmm2
movss  0x6c(%rsi),%xmm1
movss  0x4c(%rsi),%xmm3
unpcklps %xmm1,%xmm3
movss  0x2c(%rsi),%xmm1
unpcklps %xmm1,%xmm8
movlhps %xmm3,%xmm8
shufps $0x0,%xmm0,%xmm0
mulps  %xmm8,%xmm0
addps  %xmm2,%xmm0
movss  0x70(%rsi),%xmm1
movss  0x50(%rsi),%xmm2
unpcklps %xmm1,%xmm2
movss  0x30(%rsi),%xmm1
movss  0x10(%rsi),%xmm3
unpcklps %xmm1,%xmm3
movlhps %xmm2,%xmm3
movss  0x10(%rcx),%xmm1
shufps $0x0,%xmm1,%xmm1
mulps  %xmm3,%xmm1
addps  %xmm0,%xmm1
movss  0x74(%rsi),%xmm0
movss  0x54(%rsi),%xmm2
unpcklps %xmm0,%xmm2
movss  0x34(%rsi),%xmm0
movss  0x14(%rsi),%xmm3
unpcklps %xmm0,%xmm3
movlhps %xmm2,%xmm3
movss  0x14(%rcx),%xmm0
shufps $0x0,%xmm0,%xmm0
mulps  %xmm3,%xmm0
addps  %xmm1,%xmm0
movss  0x78(%rsi),%xmm1
movss  0x58(%rsi),%xmm2
unpcklps %xmm1,%xmm2
movss  0x38(%rsi),%xmm1
movss  0x18(%rsi),%xmm3
unpcklps %xmm1,%xmm3
movlhps %xmm2,%xmm3
movss  0x18(%rcx),%xmm1
shufps $0x0,%xmm1,%xmm1
mulps  %xmm3,%xmm1
addps  %xmm0,%xmm1
movss  0x7c(%rsi),%xmm0
movss  0x5c(%rsi),%xmm2
unpcklps %xmm0,%xmm2
movss  0x3c(%rsi),%xmm0
movss  0x1c(%rsi),%xmm3
unpcklps %xmm0,%xmm3
movlhps %xmm2,%xmm3
movss  0x1c(%rcx),%xmm0
shufps $0x0,%xmm0,%xmm0
mulps  %xmm3,%xmm0
movaps %xmm0,%xmm3
addps  %xmm1,%xmm3
add    $0x20,%rcx
add    $0x8,%edx
add    %rax,%rsi
cmp    %edi,%edx
jl     1120 <kernel_strmv_u_t_4_lib8+0x20>
addps  %xmm1,%xmm0
movups (%rcx),%xmm2
movaps %xmm0,%xmm1
shufps $0x55,%xmm0,%xmm1
movss  0x20(%rsi),%xmm3
mulss  %xmm2,%xmm3
addss  %xmm1,%xmm3
movaps %xmm0,%xmm1
shufps $0xff,%xmm0,%xmm1
movss  0x60(%rsi),%xmm5
mulss  %xmm2,%xmm5
addss  %xmm1,%xmm5
movss  0x64(%rsi),%xmm6
movss  (%rsi),%xmm1
movss  0x24(%rsi),%xmm4
unpcklps %xmm4,%xmm1
movss  0x40(%rsi),%xmm4
unpcklps %xmm6,%xmm4
movss  0x44(%rsi),%xmm6
movaps %xmm0,%xmm7
unpckhpd %xmm0,%xmm7
unpcklps %xmm5,%xmm7
mulps  %xmm2,%xmm4
addps  %xmm7,%xmm4
movss  0x68(%rsi),%xmm5
unpcklps %xmm5,%xmm6
movss  0x6c(%rsi),%xmm5
movss  0x48(%rsi),%xmm7
unpcklps %xmm5,%xmm7
movlhps %xmm7,%xmm1
mulps  %xmm2,%xmm1
shufps $0xe9,%xmm2,%xmm2
mulps  %xmm6,%xmm2
addps  %xmm4,%xmm2
movlhps %xmm0,%xmm3
shufps $0x42,%xmm2,%xmm3
addps  %xmm3,%xmm1
cmp    $0x1,%r9d
je     1332 <kernel_strmv_u_t_4_lib8+0x232>
test   %r9d,%r9d
jne    133e <kernel_strmv_u_t_4_lib8+0x23e>
movups %xmm1,(%r8)
ret
movups (%r8),%xmm0
addps  %xmm0,%xmm1
movups %xmm1,(%r8)
ret
movups (%r8),%xmm0
subps  %xmm1,%xmm0
movups %xmm0,(%r8)
ret

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

LLVM IR (-O2):
define void @kernel_strmv_u_t_4_lib8(i32 %0, float* %1, i32 %2, float* nocapture %3, float* nocapture %4, i32 %5) {
%7 = add nsw i32 %0, -7
%8 = icmp sgt i32 %0, 7
br i1 %8, label %9, label %164
9: ; preds = %6
%10 = shl nsw i32 %2, 3
%11 = sext i32 %10 to i64
br label %12
12: ; preds = %9, %12
%13 = phi i32 [ 0, %9 ], [ %153, %12 ]
%14 = phi float* [ %1, %9 ], [ %151, %12 ]
%15 = phi float* [ %3, %9 ], [ %152, %12 ]
%16 = phi <4 x float> [ zeroinitializer, %9 ], [ %150, %12 ]
%17 = load float, float* %15
%18 = getelementptr inbounds float, float* %15, i64 1
%19 = load float, float* %18
%20 = getelementptr inbounds float, float* %15, i64 2
%21 = load float, float* %20
%22 = getelementptr inbounds float, float* %15, i64 3
%23 = load float, float* %22
%24 = load float, float* %14
%25 = getelementptr inbounds float, float* %14, i64 8
%26 = load float, float* %25
%27 = getelementptr inbounds float, float* %14, i64 16
%28 = load float, float* %27
%29 = getelementptr inbounds float, float* %14, i64 24
%30 = load float, float* %29
%31 = insertelement <4 x float> poison, float %24, i64 0
%32 = insertelement <4 x float> %31, float %26, i64 1
%33 = insertelement <4 x float> %32, float %28, i64 2
%34 = insertelement <4 x float> %33, float %30, i64 3
%35 = insertelement <4 x float> poison, float %17, i64 0
%36 = shufflevector <4 x float> %35, <4 x float> poison, <4 x i32> zeroinitializer
%37 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %34, <4 x float> %36, <4 x float> %16)
%38 = getelementptr inbounds float, float* %14, i64 1
%39 = load float, float* %38
%40 = getelementptr inbounds float, float* %14, i64 9
%41 = load float, float* %40
%42 = getelementptr inbounds float, float* %14, i64 17
%43 = load float, float* %42
%44 = getelementptr inbounds float, float* %14, i64 25
%45 = load float, float* %44
%46 = insertelement <4 x float> poison, float %39, i64 0
%47 = insertelement <4 x float> %46, float %41, i64 1
%48 = insertelement <4 x float> %47, float %43, i64 2
%49 = insertelement <4 x float> %48, float %45, i64 3
%50 = insertelement <4 x float> poison, float %19, i64 0
%51 = shufflevector <4 x float> %50, <4 x float> poison, <4 x i32> zeroinitializer
%52 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %49, <4 x float> %51, <4 x float> %37)
%53 = getelementptr inbounds float, float* %14, i64 2
%54 = load float, float* %53
%55 = getelementptr inbounds float, float* %14, i64 10
%56 = load float, float* %55
%57 = getelementptr inbounds float, float* %14, i64 18
%58 = load float, float* %57
%59 = getelementptr inbounds float, float* %14, i64 26
%60 = load float, float* %59
%61 = insertelement <4 x float> poison, float %54, i64 0
%62 = insertelement <4 x float> %61, float %56, i64 1
%63 = insertelement <4 x float> %62, float %58, i64 2
%64 = insertelement <4 x float> %63, float %60, i64 3
%65 = insertelement <4 x float> poison, float %21, i64 0
%66 = shufflevector <4 x float> %65, <4 x float> poison, <4 x i32> zeroinitializer
%67 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %64, <4 x float> %66, <4 x float> %52)
%68 = getelementptr inbounds float, float* %14, i64 3
%69 = load float, float* %68
%70 = getelementptr inbounds float, float* %14, i64 11
%71 = load float, float* %70
%72 = getelementptr inbounds float, float* %14, i64 19
%73 = load float, float* %72
%74 = getelementptr inbounds float, float* %14, i64 27
%75 = load float, float* %74
%76 = insertelement <4 x float> poison, float %69, i64 0
%77 = insertelement <4 x float> %76, float %71, i64 1
%78 = insertelement <4 x float> %77, float %73, i64 2
%79 = insertelement <4 x float> %78, float %75, i64 3
%80 = insertelement <4 x float> poison, float %23, i64 0
%81 = shufflevector <4 x float> %80, <4 x float> poison, <4 x i32> zeroinitializer
%82 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %79, <4 x float> %81, <4 x float> %67)
%83 = getelementptr inbounds float, float* %15, i64 4
%84 = load float, float* %83
%85 = getelementptr inbounds float, float* %15, i64 5
%86 = load float, float* %85
%87 = getelementptr inbounds float, float* %15, i64 6
%88 = load float, float* %87
%89 = getelementptr inbounds float, float* %15, i64 7
%90 = load float, float* %89
%91 = getelementptr inbounds float, float* %14, i64 4
%92 = load float, float* %91
%93 = getelementptr inbounds float, float* %14, i64 12
%94 = load float, float* %93
%95 = getelementptr inbounds float, float* %14, i64 20
%96 = load float, float* %95
%97 = getelementptr inbounds float, float* %14, i64 28
%98 = load float, float* %97
%99 = insertelement <4 x float> poison, float %92, i64 0
%100 = insertelement <4 x float> %99, float %94, i64 1
%101 = insertelement <4 x float> %100, float %96, i64 2
%102 = insertelement <4 x float> %101, float %98, i64 3
%103 = insertelement <4 x float> poison, float %84, i64 0
%104 = shufflevector <4 x float> %103, <4 x float> poison, <4 x i32> zeroinitializer
%105 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %102, <4 x float> %104, <4 x float> %82)
%106 = getelementptr inbounds float, float* %14, i64 5
%107 = load float, float* %106
%108 = getelementptr inbounds float, float* %14, i64 13
%109 = load float, float* %108
%110 = getelementptr inbounds float, float* %14, i64 21
%111 = load float, float* %110
%112 = getelementptr inbounds float, float* %14, i64 29
%113 = load float, float* %112
%114 = insertelement <4 x float> poison, float %107, i64 0
%115 = insertelement <4 x float> %114, float %109, i64 1
%116 = insertelement <4 x float> %115, float %111, i64 2
%117 = insertelement <4 x float> %116, float %113, i64 3
%118 = insertelement <4 x float> poison, float %86, i64 0
%119 = shufflevector <4 x float> %118, <4 x float> poison, <4 x i32> zeroinitializer
%120 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %117, <4 x float> %119, <4 x float> %105)
%121 = getelementptr inbounds float, float* %14, i64 6
%122 = load float, float* %121
%123 = getelementptr inbounds float, float* %14, i64 14
%124 = load float, float* %123
%125 = getelementptr inbounds float, float* %14, i64 22
%126 = load float, float* %125
%127 = getelementptr inbounds float, float* %14, i64 30
%128 = load float, float* %127
%129 = insertelement <4 x float> poison, float %122, i64 0
%130 = insertelement <4 x float> %129, float %124, i64 1
%131 = insertelement <4 x float> %130, float %126, i64 2
%132 = insertelement <4 x float> %131, float %128, i64 3
%133 = insertelement <4 x float> poison, float %88, i64 0
%134 = shufflevector <4 x float> %133, <4 x float> poison, <4 x i32> zeroinitializer
%135 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %132, <4 x float> %134, <4 x float> %120)
%136 = getelementptr inbounds float, float* %14, i64 7
%137 = load float, float* %136
%138 = getelementptr inbounds float, float* %14, i64 15
%139 = load float, float* %138
%140 = getelementptr inbounds float, float* %14, i64 23
%141 = load float, float* %140
%142 = getelementptr inbounds float, float* %14, i64 31
%143 = load float, float* %142
%144 = insertelement <4 x float> poison, float %137, i64 0
%145 = insertelement <4 x float> %144, float %139, i64 1
%146 = insertelement <4 x float> %145, float %141, i64 2
%147 = insertelement <4 x float> %146, float %143, i64 3
%148 = insertelement <4 x float> poison, float %90, i64 0
%149 = shufflevector <4 x float> %148, <4 x float> poison, <4 x i32> zeroinitializer
%150 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %147, <4 x float> %149, <4 x float> %135)
%151 = getelementptr inbounds float, float* %14, i64 %11
%152 = getelementptr inbounds float, float* %15, i64 8
%153 = add nuw nsw i32 %13, 8
%154 = icmp slt i32 %153, %7
br i1 %154, label %12, label %155
155: ; preds = %12
%156 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %34, <4 x float> %36, <4 x float> %16)
%157 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %49, <4 x float> %51, <4 x float> %156)
%158 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %64, <4 x float> %66, <4 x float> %157)
%159 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %79, <4 x float> %81, <4 x float> %158)
%160 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %102, <4 x float> %104, <4 x float> %159)
%161 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %117, <4 x float> %119, <4 x float> %160)
%162 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %132, <4 x float> %134, <4 x float> %161)
%163 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %147, <4 x float> %149, <4 x float> %162)
br label %164
164: ; preds = %155, %6
%165 = phi float* [ %3, %6 ], [ %152, %155 ]
%166 = phi float* [ %1, %6 ], [ %151, %155 ]
%167 = phi <4 x float> [ zeroinitializer, %6 ], [ %163, %155 ]
%168 = bitcast float* %165 to <4 x float>*
%169 = load <4 x float>, <4 x float>* %168
%170 = load float, float* %166
%171 = getelementptr inbounds float, float* %166, i64 8
%172 = load float, float* %171
%173 = extractelement <4 x float> %169, i64 0
%174 = extractelement <4 x float> %167, i64 1
%175 = tail call float @llvm.fmuladd.f32(float %172, float %173, float %174)
%176 = getelementptr inbounds float, float* %166, i64 16
%177 = load float, float* %176
%178 = extractelement <4 x float> %167, i64 2
%179 = getelementptr inbounds float, float* %166, i64 24
%180 = load float, float* %179
%181 = extractelement <4 x float> %167, i64 3
%182 = tail call float @llvm.fmuladd.f32(float %180, float %173, float %181)
%183 = getelementptr inbounds float, float* %166, i64 9
%184 = load float, float* %183
%185 = getelementptr inbounds float, float* %166, i64 17
%186 = load float, float* %185
%187 = getelementptr inbounds float, float* %166, i64 25
%188 = load float, float* %187
%189 = insertelement <2 x float> poison, float %177, i64 0
%190 = insertelement <2 x float> %189, float %188, i64 1
%191 = shufflevector <4 x float> %169, <4 x float> undef, <2 x i32> <i32 0, i32 1>
%192 = insertelement <2 x float> poison, float %178, i64 0
%193 = insertelement <2 x float> %192, float %182, i64 1
%194 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %190, <2 x float> %191, <2 x float> %193)
%195 = getelementptr inbounds float, float* %166, i64 18
%196 = load float, float* %195
%197 = getelementptr inbounds float, float* %166, i64 26
%198 = load float, float* %197
%199 = insertelement <2 x float> poison, float %186, i64 0
%200 = insertelement <2 x float> %199, float %198, i64 1
%201 = shufflevector <4 x float> %169, <4 x float> undef, <2 x i32> <i32 1, i32 2>
%202 = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %200, <2 x float> %201, <2 x float> %194)
%203 = getelementptr inbounds float, float* %166, i64 27
%204 = load float, float* %203
%205 = insertelement <4 x float> poison, float %170, i64 0
%206 = insertelement <4 x float> %205, float %184, i64 1
%207 = insertelement <4 x float> %206, float %196, i64 2
%208 = insertelement <4 x float> %207, float %204, i64 3
%209 = insertelement <4 x float> %167, float %175, i64 1
%210 = shufflevector <2 x float> %202, <2 x float> poison, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
%211 = shufflevector <4 x float> %209, <4 x float> %210, <4 x i32> <i32 0, i32 1, i32 4, i32 5>
%212 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %208, <4 x float> %169, <4 x float> %211)
switch i32 %5, label %220 [
i32 0, label %213
i32 1, label %215
]
213: ; preds = %164
%214 = bitcast float* %4 to <4 x float>*
store <4 x float> %212, <4 x float>* %214
br label %225
215: ; preds = %164
%216 = bitcast float* %4 to <4 x float>*
%217 = load <4 x float>, <4 x float>* %216
%218 = fadd <4 x float> %212, %217
%219 = bitcast float* %4 to <4 x float>*
store <4 x float> %218, <4 x float>* %219
br label %225
220: ; preds = %164
%221 = bitcast float* %4 to <4 x float>*
%222 = load <4 x float>, <4 x float>* %221
%223 = fsub <4 x float> %222, %212
%224 = bitcast float* %4 to <4 x float>*
store <4 x float> %223, <4 x float>* %224
br label %225
225: ; preds = %215, %220, %213
ret void
}