void kernel_dsymv_3_lib4(int kmax, double *A, int sda, double *x_n, double *y_n,
                         double *z_n, double *x_t, double *y_t, double *z_t,
                         int tri, int alg_n, int alg_t) {
  if (kmax <= 0)
    return;
  const int bs = 4;
  int k;
  double a_00, a_01, a_02, x_n_0, x_n_1, x_n_2, y_n_0, x_t_0, y_t_0, y_t_1,
      y_t_2;
  if (alg_n == 1) {
    x_n_0 = x_n[0];
    x_n_1 = x_n[1];
    x_n_2 = x_n[2];
  } else {
    x_n_0 = -x_n[0];
    x_n_1 = -x_n[1];
    x_n_2 = -x_n[2];
  }
  y_t_0 = 0;
  y_t_1 = 0;
  y_t_2 = 0;
  k = 0;
  if (tri == 1) {
    y_n_0 = y_n[0];
    x_t_0 = x_t[0];
    a_00 = A[0 + bs * 0];
    y_t_0 += a_00 * x_t_0;
    z_n[0] = y_n_0;
    y_n_0 = y_n[1];
    x_t_0 = x_t[1];
    a_00 = A[1 + bs * 0];
    a_01 = A[1 + bs * 1];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    y_t_1 += a_01 * x_t_0;
    z_n[1] = y_n_0;
    y_n_0 = y_n[2];
    x_t_0 = x_t[2];
    a_00 = A[2 + bs * 0];
    a_01 = A[2 + bs * 1];
    a_02 = A[2 + bs * 2];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    y_n_0 += a_01 * x_n_1;
    y_t_1 += a_01 * x_t_0;
    y_t_2 += a_02 * x_t_0;
    z_n[2] = y_n_0;
    if (kmax == 3)
      goto STORE_3;
    y_n_0 = y_n[3];
    x_t_0 = x_t[3];
    a_00 = A[3 + bs * 0];
    a_01 = A[3 + bs * 1];
    a_02 = A[3 + bs * 2];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    y_n_0 += a_01 * x_n_1;
    y_t_1 += a_01 * x_t_0;
    y_n_0 += a_02 * x_n_2;
    y_t_2 += a_02 * x_t_0;
    z_n[3] = y_n_0;
    if (kmax == 4)
      goto STORE_3;
    A += 4;
    y_n += 4;
    z_n += 4;
    x_t += 4;
    k += 4;
    A += (sda - 1) * bs;
  }
  for (; k < kmax - 3; k += bs) {
    y_n_0 = y_n[0];
    x_t_0 = x_t[0];
    a_00 = A[0 + bs * 0];
    a_01 = A[0 + bs * 1];
    a_02 = A[0 + bs * 2];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    y_n_0 += a_01 * x_n_1;
    y_t_1 += a_01 * x_t_0;
    y_n_0 += a_02 * x_n_2;
    y_t_2 += a_02 * x_t_0;
    z_n[0] = y_n_0;
    y_n_0 = y_n[1];
    x_t_0 = x_t[1];
    a_00 = A[1 + bs * 0];
    a_01 = A[1 + bs * 1];
    a_02 = A[1 + bs * 2];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    y_n_0 += a_01 * x_n_1;
    y_t_1 += a_01 * x_t_0;
    y_n_0 += a_02 * x_n_2;
    y_t_2 += a_02 * x_t_0;
    z_n[1] = y_n_0;
    y_n_0 = y_n[2];
    x_t_0 = x_t[2];
    a_00 = A[2 + bs * 0];
    a_01 = A[2 + bs * 1];
    a_02 = A[2 + bs * 2];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    y_n_0 += a_01 * x_n_1;
    y_t_1 += a_01 * x_t_0;
    y_n_0 += a_02 * x_n_2;
    y_t_2 += a_02 * x_t_0;
    z_n[2] = y_n_0;
    y_n_0 = y_n[3];
    x_t_0 = x_t[3];
    a_00 = A[3 + bs * 0];
    a_01 = A[3 + bs * 1];
    a_02 = A[3 + bs * 2];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    y_n_0 += a_01 * x_n_1;
    y_t_1 += a_01 * x_t_0;
    y_n_0 += a_02 * x_n_2;
    y_t_2 += a_02 * x_t_0;
    z_n[3] = y_n_0;
    A += sda * bs;
    y_n += 4;
    z_n += 4;
    x_t += 4;
  }
  for (; k < kmax; k++) {
    y_n_0 = y_n[0];
    x_t_0 = x_t[0];
    a_00 = A[0 + bs * 0];
    a_01 = A[0 + bs * 1];
    a_02 = A[0 + bs * 2];
    y_n_0 += a_00 * x_n_0;
    y_t_0 += a_00 * x_t_0;
    y_n_0 += a_01 * x_n_1;
    y_t_1 += a_01 * x_t_0;
    y_n_0 += a_02 * x_n_2;
    y_t_2 += a_02 * x_t_0;
    z_n[0] = y_n_0;
    A += 1;
    y_n += 1;
    z_n += 1;
    x_t += 1;
  }
STORE_3:
  if (alg_t == 1) {
    z_t[0] = y_t[0] + y_t_0;
    z_t[1] = y_t[1] + y_t_1;
    z_t[2] = y_t[2] + y_t_2;
  } else {
    z_t[0] = y_t[0] - y_t_0;
    z_t[1] = y_t[1] - y_t_1;
    z_t[2] = y_t[2] - y_t_2;
  }
}


x86 assembly (clang, -O0):
<kernel_dsymv_3_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
cmpl   $0x0,-0x4(%rbp)
jg     1142 <kernel_dsymv_3_lib4+0x42>
jmp    1be9 <kernel_dsymv_3_lib4+0xae9>
movl   $0x4,-0x34(%rbp)
cmpl   $0x1,0x30(%rbp)
jne    1181 <kernel_dsymv_3_lib4+0x81>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    11ef <kernel_dsymv_3_lib4+0xef>
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  %xmm0,-0x68(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movl   $0x0,-0x38(%rbp)
cmpl   $0x1,0x28(%rbp)
jne    1574 <kernel_dsymv_3_lib4+0x474>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
cmpl   $0x3,-0x4(%rbp)
jne    1409 <kernel_dsymv_3_lib4+0x309>
jmp    1b48 <kernel_dsymv_3_lib4+0xa48>
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
cmpl   $0x4,-0x4(%rbp)
jne    1520 <kernel_dsymv_3_lib4+0x420>
jmp    1b48 <kernel_dsymv_3_lib4+0xa48>
mov    -0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x10(%rbp)
mov    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x30(%rbp)
mov    0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,0x10(%rbp)
mov    -0x38(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x38(%rbp)
mov    -0x14(%rbp),%ecx
sub    $0x1,%ecx
shl    $0x2,%ecx
mov    -0x10(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
jmp    1579 <kernel_dsymv_3_lib4+0x479>
mov    -0x38(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    19f0 <kernel_dsymv_3_lib4+0x8f0>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
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    -0x28(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x30(%rbp)
mov    0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,0x10(%rbp)
mov    -0x38(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x38(%rbp)
jmp    1579 <kernel_dsymv_3_lib4+0x479>
jmp    19f5 <kernel_dsymv_3_lib4+0x8f5>
mov    -0x38(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1b43 <kernel_dsymv_3_lib4+0xa43>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x70(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x50(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x70(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
mov    -0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x10(%rbp)
mov    -0x28(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x28(%rbp)
mov    -0x30(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x30(%rbp)
mov    0x10(%rbp),%rax
add    $0x8,%rax
mov    %rax,0x10(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    19f5 <kernel_dsymv_3_lib4+0x8f5>
jmp    1b48 <kernel_dsymv_3_lib4+0xa48>
cmpl   $0x1,0x38(%rbp)
jne    1ba0 <kernel_dsymv_3_lib4+0xaa0>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
addsd  -0x80(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
addsd  -0x88(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
addsd  -0x90(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
jmp    1be9 <kernel_dsymv_3_lib4+0xae9>
mov    0x18(%rbp),%rax
movsd  (%rax),%xmm0
subsd  -0x80(%rbp),%xmm0
mov    0x20(%rbp),%rax
movsd  %xmm0,(%rax)
mov    0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
subsd  -0x88(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x8(%rax)
mov    0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
subsd  -0x90(%rbp),%xmm0
ff
mov    0x20(%rbp),%rax
movsd  %xmm0,0x10(%rax)
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dsymv_3_lib4>:
test   %edi,%edi
jle    1521 <kernel_dsymv_3_lib4+0x421>
push   %rbx
mov    0x28(%rsp),%eax
cmpl   $0x1,0x30(%rsp)
movsd  (%rcx),%xmm10
jne    1121 <kernel_dsymv_3_lib4+0x21>
movupd 0x8(%rcx),%xmm11
jmp    1139 <kernel_dsymv_3_lib4+0x39>
movapd 0xed7(%rip),%xmm2
xorpd  %xmm2,%xmm10
movupd 0x8(%rcx),%xmm11
xorpd  %xmm2,%xmm11
mov    0x38(%rsp),%r10d
mov    0x18(%rsp),%r11
mov    0x10(%rsp),%rcx
cmp    $0x1,%eax
jne    11f7 <kernel_dsymv_3_lib4+0xf7>
movsd  (%r8),%xmm3
movsd  (%rsi),%xmm4
mulsd  (%rcx),%xmm4
xorpd  %xmm2,%xmm2
movsd  %xmm3,(%r9)
movsd  0x8(%rsi),%xmm3
movapd %xmm3,%xmm5
mulsd  %xmm10,%xmm5
addsd  0x8(%r8),%xmm5
movhpd 0x28(%rsi),%xmm3
addsd  %xmm2,%xmm4
movsd  0x8(%rcx),%xmm6
unpcklpd %xmm6,%xmm6
mulpd  %xmm3,%xmm6
movq   %xmm4,%xmm4
addpd  %xmm6,%xmm4
movsd  %xmm5,0x8(%r9)
movsd  0x10(%rcx),%xmm0
movsd  0x10(%rsi),%xmm6
movapd %xmm6,%xmm5
mulsd  %xmm10,%xmm5
addsd  0x10(%r8),%xmm5
movsd  0x30(%rsi),%xmm7
unpcklpd %xmm7,%xmm6
mulsd  %xmm11,%xmm7
addsd  %xmm5,%xmm7
movapd %xmm0,%xmm5
unpcklpd %xmm0,%xmm5
mulpd  %xmm6,%xmm5
mulsd  0x50(%rsi),%xmm0
addpd  %xmm4,%xmm5
addsd  %xmm2,%xmm0
movsd  %xmm7,0x10(%r9)
cmp    $0x3,%edi
jne    1206 <kernel_dsymv_3_lib4+0x106>
movapd %xmm0,%xmm3
jmp    14c3 <kernel_dsymv_3_lib4+0x3c3>
xorpd  %xmm4,%xmm4
xorpd  %xmm3,%xmm3
xor    %eax,%eax
jmp    1297 <kernel_dsymv_3_lib4+0x197>
movsd  0x18(%rcx),%xmm4
movsd  0x18(%rsi),%xmm9
movsd  0x38(%rsi),%xmm8
movsd  0x58(%rsi),%xmm3
movapd %xmm9,%xmm6
mulsd  %xmm10,%xmm6
addsd  0x18(%r8),%xmm6
unpcklpd %xmm8,%xmm9
movapd %xmm11,%xmm7
mulsd  %xmm8,%xmm7
addsd  %xmm6,%xmm7
movapd %xmm11,%xmm6
unpckhpd %xmm11,%xmm6
mulsd  %xmm3,%xmm6
mulsd  %xmm4,%xmm3
unpcklpd %xmm4,%xmm4
mulpd  %xmm9,%xmm4
addpd  %xmm5,%xmm4
addsd  %xmm7,%xmm6
addsd  %xmm0,%xmm3
movsd  %xmm6,0x18(%r9)
cmp    $0x4,%edi
je     14bf <kernel_dsymv_3_lib4+0x3bf>
add    $0x20,%r8
add    $0x20,%r9
add    $0x20,%rcx
lea    -0x4(,%rdx,4),%eax
cltq
lea    (%rsi,%rax,8),%rsi
add    $0x20,%rsi
mov    $0x4,%eax
lea    -0x3(%rdi),%ebx
movapd %xmm11,%xmm8
unpckhpd %xmm11,%xmm8
cmp    %ebx,%eax
jge    143e <kernel_dsymv_3_lib4+0x33e>
shl    $0x2,%edx
movslq %edx,%rdx
shl    $0x3,%rdx
cs nopw 0x0(%rax,%rax,1)
movsd  (%rcx),%xmm6
movsd  (%rsi),%xmm1
movsd  0x20(%rsi),%xmm0
movapd %xmm1,%xmm7
mulsd  %xmm10,%xmm7
addsd  (%r8),%xmm7
movsd  0x40(%rsi),%xmm5
unpcklpd %xmm0,%xmm1
mulsd  %xmm11,%xmm0
addsd  %xmm7,%xmm0
movapd %xmm5,%xmm7
mulsd  %xmm6,%xmm5
unpcklpd %xmm6,%xmm6
mulpd  %xmm1,%xmm6
addpd  %xmm4,%xmm6
mulsd  %xmm8,%xmm7
addsd  %xmm0,%xmm7
addsd  %xmm3,%xmm5
movsd  %xmm7,(%r9)
movsd  0x8(%rcx),%xmm0
movsd  0x8(%rsi),%xmm1
movsd  0x28(%rsi),%xmm4
movsd  0x48(%rsi),%xmm2
movapd %xmm1,%xmm7
mulsd  %xmm10,%xmm7
addsd  0x8(%r8),%xmm7
unpcklpd %xmm4,%xmm1
mulsd  %xmm11,%xmm4
addsd  %xmm7,%xmm4
movapd %xmm2,%xmm7
mulsd  %xmm0,%xmm2
unpcklpd %xmm0,%xmm0
mulpd  %xmm1,%xmm0
addpd  %xmm6,%xmm0
mulsd  %xmm8,%xmm7
addsd  %xmm4,%xmm7
addsd  %xmm5,%xmm2
movsd  %xmm7,0x8(%r9)
movsd  0x10(%rcx),%xmm5
movsd  0x10(%rsi),%xmm1
movsd  0x30(%rsi),%xmm4
movapd %xmm1,%xmm7
mulsd  %xmm10,%xmm7
addsd  0x10(%r8),%xmm7
movsd  0x50(%rsi),%xmm6
unpcklpd %xmm4,%xmm1
mulsd  %xmm11,%xmm4
addsd  %xmm7,%xmm4
movapd %xmm6,%xmm7
mulsd  %xmm5,%xmm6
unpcklpd %xmm5,%xmm5
mulpd  %xmm1,%xmm5
addpd  %xmm0,%xmm5
mulsd  %xmm8,%xmm7
addsd  %xmm4,%xmm7
addsd  %xmm2,%xmm6
movsd  %xmm7,0x10(%r9)
movsd  0x18(%rcx),%xmm7
movsd  0x18(%rsi),%xmm0
movsd  0x38(%rsi),%xmm1
movsd  0x58(%rsi),%xmm3
movapd %xmm0,%xmm4
mulsd  %xmm10,%xmm4
addsd  0x18(%r8),%xmm4
unpcklpd %xmm1,%xmm0
mulsd  %xmm11,%xmm1
addsd  %xmm4,%xmm1
movapd %xmm3,%xmm2
mulsd  %xmm7,%xmm3
unpcklpd %xmm7,%xmm7
mulpd  %xmm0,%xmm7
movapd %xmm7,%xmm4
addpd  %xmm5,%xmm4
mulsd  %xmm8,%xmm2
addsd  %xmm1,%xmm2
addsd  %xmm6,%xmm3
movsd  %xmm2,0x18(%r9)
add    $0x20,%r8
add    $0x20,%r9
add    $0x20,%rcx
add    $0x4,%eax
add    %rdx,%rsi
cmp    %ebx,%eax
jl     12c0 <kernel_dsymv_3_lib4+0x1c0>
addpd  %xmm5,%xmm7
movapd %xmm7,%xmm4
cmp    %edi,%eax
jge    14bf <kernel_dsymv_3_lib4+0x3bf>
sub    %eax,%edi
xor    %eax,%eax
nopw   0x0(%rax,%rax,1)
movapd %xmm4,%xmm6
movsd  (%rcx,%rax,8),%xmm5
movsd  (%rsi,%rax,8),%xmm0
movsd  0x20(%rsi,%rax,8),%xmm1
movsd  0x40(%rsi,%rax,8),%xmm2
movapd %xmm0,%xmm4
mulsd  %xmm10,%xmm4
addsd  (%r8,%rax,8),%xmm4
unpcklpd %xmm1,%xmm0
mulsd  %xmm11,%xmm1
addsd  %xmm4,%xmm1
movapd %xmm2,%xmm7
mulsd  %xmm5,%xmm2
unpcklpd %xmm5,%xmm5
mulpd  %xmm0,%xmm5
movapd %xmm5,%xmm4
addpd  %xmm6,%xmm4
mulsd  %xmm8,%xmm7
addsd  %xmm1,%xmm7
addsd  %xmm2,%xmm3
movsd  %xmm7,(%r9,%rax,8)
add    $0x1,%rax
cmp    %eax,%edi
jne    1450 <kernel_dsymv_3_lib4+0x350>
addpd  %xmm6,%xmm5
jmp    14c3 <kernel_dsymv_3_lib4+0x3c3>
movapd %xmm4,%xmm5
mov    0x20(%rsp),%rax
movsd  (%r11),%xmm0
cmp    $0x1,%r10d
jne    14f2 <kernel_dsymv_3_lib4+0x3f2>
addsd  %xmm5,%xmm0
movsd  %xmm0,(%rax)
unpckhpd %xmm5,%xmm5
addsd  0x8(%r11),%xmm5
movsd  %xmm5,0x8(%rax)
addsd  0x10(%r11),%xmm3
jmp    151b <kernel_dsymv_3_lib4+0x41b>
subsd  %xmm5,%xmm0
movsd  %xmm0,(%rax)
movsd  0x8(%r11),%xmm0
unpckhpd %xmm5,%xmm5
subsd  %xmm5,%xmm0
movsd  %xmm0,0x8(%rax)
movsd  0x10(%r11),%xmm0
subsd  %xmm3,%xmm0
movapd %xmm0,%xmm3
movsd  %xmm3,0x10(%rax)
pop    %rbx
ret

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

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