void kernel_dsyrk_nn_4x4_lib4(int kmax, double *A, double *B, int sdb,
                              double *C, double *D, int alg) {
  const int bs = 4;
  int k;
  double a_0, a_1, a_2, a_3, b_0, b_1, b_2, b_3,
      c_00 = 0, c_10 = 0, c_11 = 0, c_20 = 0, c_21 = 0, c_22 = 0, c_30 = 0,
      c_31 = 0, c_32 = 0, c_33 = 0;
  for (k = 0; k < kmax - 3; k += 4) {
    a_0 = A[0 + bs * 0];
    a_1 = A[1 + bs * 0];
    a_2 = A[2 + bs * 0];
    a_3 = A[3 + bs * 0];
    b_0 = B[0 + bs * 0];
    b_1 = B[0 + bs * 1];
    b_2 = B[0 + bs * 2];
    b_3 = B[0 + bs * 3];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    a_0 = A[0 + bs * 1];
    a_1 = A[1 + bs * 1];
    a_2 = A[2 + bs * 1];
    a_3 = A[3 + bs * 1];
    b_0 = B[1 + bs * 0];
    b_1 = B[1 + bs * 1];
    b_2 = B[1 + bs * 2];
    b_3 = B[1 + bs * 3];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    a_0 = A[0 + bs * 2];
    a_1 = A[1 + bs * 2];
    a_2 = A[2 + bs * 2];
    a_3 = A[3 + bs * 2];
    b_0 = B[2 + bs * 0];
    b_1 = B[2 + bs * 1];
    b_2 = B[2 + bs * 2];
    b_3 = B[2 + bs * 3];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    a_0 = A[0 + bs * 3];
    a_1 = A[1 + bs * 3];
    a_2 = A[2 + bs * 3];
    a_3 = A[3 + bs * 3];
    b_0 = B[3 + bs * 0];
    b_1 = B[3 + bs * 1];
    b_2 = B[3 + bs * 2];
    b_3 = B[3 + bs * 3];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    A += 16;
    B += 4 * sdb;
  }
  for (; k < kmax; k++) {
    a_0 = A[0 + bs * 0];
    a_1 = A[1 + bs * 0];
    a_2 = A[2 + bs * 0];
    a_3 = A[3 + bs * 0];
    b_0 = B[0 + bs * 0];
    b_1 = B[0 + bs * 1];
    b_2 = B[0 + bs * 2];
    b_3 = B[0 + bs * 3];
    c_00 += a_0 * b_0;
    c_10 += a_1 * b_0;
    c_20 += a_2 * b_0;
    c_30 += a_3 * b_0;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_33 += a_3 * b_3;
    A += 4;
    B += 1;
  }
  double d_00, d_10, d_11, d_20, d_21, d_22, d_30, d_31, d_32, d_33;
  if (alg == 0) {
    D[0 + bs * 0] = c_00;
    D[1 + bs * 0] = c_10;
    D[2 + bs * 0] = c_20;
    D[3 + bs * 0] = c_30;
    D[1 + bs * 1] = c_11;
    D[2 + bs * 1] = c_21;
    D[3 + bs * 1] = c_31;
    D[2 + bs * 2] = c_22;
    D[3 + bs * 2] = c_32;
    D[3 + bs * 3] = c_33;
  } else {
    d_00 = C[0 + bs * 0];
    d_10 = C[1 + bs * 0];
    d_20 = C[2 + bs * 0];
    d_30 = C[3 + bs * 0];
    d_11 = C[1 + bs * 1];
    d_21 = C[2 + bs * 1];
    d_31 = C[3 + bs * 1];
    d_22 = C[2 + bs * 2];
    d_32 = C[3 + bs * 2];
    d_33 = C[3 + bs * 3];
    if (alg == 1) {
      d_00 += c_00;
      d_10 += c_10;
      d_20 += c_20;
      d_30 += c_30;
      d_11 += c_11;
      d_21 += c_21;
      d_31 += c_31;
      d_22 += c_22;
      d_32 += c_32;
      d_33 += c_33;
    } else {
      d_00 -= c_00;
      d_10 -= c_10;
      d_20 -= c_20;
      d_30 -= c_30;
      d_11 -= c_11;
      d_21 -= c_21;
      d_31 -= c_31;
      d_22 -= c_22;
      d_32 -= c_32;
      d_33 -= c_33;
    }
    D[0 + bs * 0] = d_00;
    D[1 + bs * 0] = d_10;
    D[2 + bs * 0] = d_20;
    D[3 + bs * 0] = d_30;
    D[1 + bs * 1] = d_11;
    D[2 + bs * 1] = d_21;
    D[3 + bs * 1] = d_31;
    D[2 + bs * 2] = d_22;
    D[3 + bs * 2] = d_32;
    D[3 + bs * 3] = d_33;
  }
}


x86 assembly (clang, -O0):
<kernel_dsyrk_nn_4x4_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0x98,%rsp
mov    0x10(%rbp),%eax
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x4,-0x34(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
mov    -0x4(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    18d8 <kernel_dsyrk_nn_4x4_lib4+0x7d8>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x10(%rbp)
mov    -0x1c(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x18(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x18(%rbp)
mov    -0x38(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x38(%rbp)
jmp    119d <kernel_dsyrk_nn_4x4_lib4+0x9d>
jmp    18dd <kernel_dsyrk_nn_4x4_lib4+0x7dd>
mov    -0x38(%rbp),%eax
cmp    -0x4(%rbp),%eax
jge    1acb <kernel_dsyrk_nn_4x4_lib4+0x9cb>
mov    -0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%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  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x58(%rbp),%xmm0
movsd  -0x78(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
mov    -0x10(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x10(%rbp)
mov    -0x18(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x18(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    18dd <kernel_dsyrk_nn_4x4_lib4+0x7dd>
cmpl   $0x0,0x10(%rbp)
jne    1b80 <kernel_dsyrk_nn_4x4_lib4+0xa80>
movsd  -0x80(%rbp),%xmm0
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x58(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    1ee3 <kernel_dsyrk_nn_4x4_lib4+0xde3>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
cmpl   $0x1,0x10(%rbp)
jne    1d25 <kernel_dsyrk_nn_4x4_lib4+0xc25>
movsd  -0x80(%rbp),%xmm0
addsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
addsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
addsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
addsd  -0x100(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
addsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
addsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xa8(%rbp),%xmm0
ff
addsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm0
ff
addsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xc8(%rbp),%xmm0
ff
addsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x118(%rbp)
ff
jmp    1e3a <kernel_dsyrk_nn_4x4_lib4+0xd3a>
movsd  -0x80(%rbp),%xmm1
movsd  -0xd0(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x88(%rbp),%xmm1
ff
movsd  -0xd8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x98(%rbp),%xmm1
ff
movsd  -0xe8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0xb0(%rbp),%xmm1
ff
movsd  -0x100(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
movsd  -0xe0(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm1
ff
movsd  -0xf0(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0xb8(%rbp),%xmm1
ff
movsd  -0x108(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0xa8(%rbp),%xmm1
ff
movsd  -0xf8(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0xc0(%rbp),%xmm1
ff
movsd  -0x110(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0xc8(%rbp),%xmm1
ff
movsd  -0x118(%rbp),%xmm0
ff
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0xd0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x100(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xf0(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x108(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0xf8(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x110(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x58(%rax)
movsd  -0x118(%rbp),%xmm0
ff
mov    -0x30(%rbp),%rax
movsd  %xmm0,0x78(%rax)
add    $0x98,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dsyrk_nn_4x4_lib4>:
cmp    $0x4,%edi
jl     133c <kernel_dsyrk_nn_4x4_lib4+0x23c>
lea    -0x3(%rdi),%r10d
shl    $0x2,%ecx
movslq %ecx,%rcx
shl    $0x3,%rcx
xorpd  %xmm10,%xmm10
xor    %eax,%eax
xorpd  %xmm11,%xmm11
xorpd  %xmm12,%xmm12
xorpd  %xmm13,%xmm13
xorpd  %xmm3,%xmm3
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movupd (%rsi),%xmm7
movupd 0x10(%rsi),%xmm1
movupd 0x20(%rsi),%xmm14
movupd 0x30(%rsi),%xmm15
movsd  (%rdx),%xmm2
movsd  0x8(%rdx),%xmm0
movsd  0x10(%rdx),%xmm5
movsd  0x18(%rdx),%xmm8
unpcklpd %xmm2,%xmm2
movapd %xmm7,%xmm9
mulpd  %xmm2,%xmm9
addpd  %xmm10,%xmm9
mulpd  %xmm1,%xmm2
addpd  %xmm11,%xmm2
shufpd $0x1,%xmm1,%xmm7
movsd  0x20(%rdx),%xmm6
movapd %xmm6,%xmm4
unpcklpd %xmm6,%xmm4
mulpd  %xmm7,%xmm4
addpd  %xmm12,%xmm4
movsd  0x40(%rdx),%xmm7
unpcklpd %xmm7,%xmm7
mulpd  %xmm1,%xmm7
addpd  %xmm13,%xmm7
movhpd 0x60(%rdx),%xmm6
unpckhpd %xmm1,%xmm1
mulpd  %xmm1,%xmm6
addpd  %xmm3,%xmm6
unpcklpd %xmm0,%xmm0
movapd %xmm14,%xmm10
mulpd  %xmm0,%xmm10
addpd  %xmm9,%xmm10
mulpd  %xmm15,%xmm0
addpd  %xmm2,%xmm0
shufpd $0x1,%xmm15,%xmm14
movsd  0x28(%rdx),%xmm9
movapd %xmm9,%xmm2
unpcklpd %xmm9,%xmm2
mulpd  %xmm14,%xmm2
addpd  %xmm4,%xmm2
movsd  0x48(%rdx),%xmm3
unpcklpd %xmm3,%xmm3
mulpd  %xmm15,%xmm3
addpd  %xmm7,%xmm3
unpckhpd %xmm15,%xmm15
movhpd 0x68(%rdx),%xmm9
mulpd  %xmm15,%xmm9
addpd  %xmm6,%xmm9
movupd 0x40(%rsi),%xmm1
movupd 0x50(%rsi),%xmm4
unpcklpd %xmm5,%xmm5
movapd %xmm1,%xmm6
mulpd  %xmm5,%xmm6
addpd  %xmm10,%xmm6
mulpd  %xmm4,%xmm5
addpd  %xmm0,%xmm5
shufpd $0x1,%xmm4,%xmm1
movsd  0x30(%rdx),%xmm7
movapd %xmm7,%xmm0
unpcklpd %xmm7,%xmm0
mulpd  %xmm1,%xmm0
addpd  %xmm2,%xmm0
movsd  0x50(%rdx),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  %xmm4,%xmm1
addpd  %xmm3,%xmm1
movhpd 0x70(%rdx),%xmm7
unpckhpd %xmm4,%xmm4
mulpd  %xmm4,%xmm7
addpd  %xmm9,%xmm7
movupd 0x60(%rsi),%xmm2
movupd 0x70(%rsi),%xmm3
unpcklpd %xmm8,%xmm8
movapd %xmm2,%xmm9
mulpd  %xmm8,%xmm9
movapd %xmm9,%xmm10
addpd  %xmm6,%xmm10
mulpd  %xmm3,%xmm8
movapd %xmm8,%xmm11
addpd  %xmm5,%xmm11
shufpd $0x1,%xmm3,%xmm2
movsd  0x38(%rdx),%xmm14
movapd %xmm14,%xmm15
unpcklpd %xmm14,%xmm15
mulpd  %xmm2,%xmm15
movapd %xmm15,%xmm12
addpd  %xmm0,%xmm12
movsd  0x58(%rdx),%xmm2
unpcklpd %xmm2,%xmm2
mulpd  %xmm3,%xmm2
movapd %xmm2,%xmm13
addpd  %xmm1,%xmm13
unpckhpd %xmm3,%xmm3
movhpd 0x78(%rdx),%xmm14
mulpd  %xmm3,%xmm14
movapd %xmm14,%xmm3
addpd  %xmm7,%xmm3
sub    $0xffffffffffffff80,%rsi
add    $0x4,%eax
add    %rcx,%rdx
cmp    %r10d,%eax
jl     1140 <kernel_dsyrk_nn_4x4_lib4+0x40>
addpd  %xmm7,%xmm14
addpd  %xmm1,%xmm2
addpd  %xmm0,%xmm15
addpd  %xmm5,%xmm8
addpd  %xmm6,%xmm9
mov    %edi,%ecx
and    $0xfffffffc,%ecx
jmp    1356 <kernel_dsyrk_nn_4x4_lib4+0x256>
xorpd  %xmm9,%xmm9
xor    %ecx,%ecx
xorpd  %xmm8,%xmm8
xorpd  %xmm15,%xmm15
xorpd  %xmm2,%xmm2
xorpd  %xmm14,%xmm14
mov    0x8(%rsp),%eax
cmp    %edi,%ecx
jge    144b <kernel_dsyrk_nn_4x4_lib4+0x34b>
sub    %ecx,%edi
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
movapd %xmm14,%xmm1
movapd %xmm2,%xmm13
movapd %xmm15,%xmm12
movapd %xmm8,%xmm11
movapd %xmm9,%xmm10
movupd (%rsi),%xmm2
movupd 0x10(%rsi),%xmm7
movsd  (%rdx,%rcx,8),%xmm0
movsd  0x20(%rdx,%rcx,8),%xmm4
movsd  0x40(%rdx,%rcx,8),%xmm3
unpcklpd %xmm0,%xmm0
movapd %xmm2,%xmm6
mulpd  %xmm0,%xmm6
movapd %xmm6,%xmm9
addpd  %xmm10,%xmm9
mulpd  %xmm7,%xmm0
movapd %xmm0,%xmm8
addpd  %xmm11,%xmm8
shufpd $0x1,%xmm7,%xmm2
movapd %xmm4,%xmm5
unpcklpd %xmm4,%xmm5
mulpd  %xmm2,%xmm5
movapd %xmm5,%xmm15
addpd  %xmm12,%xmm15
unpcklpd %xmm3,%xmm3
mulpd  %xmm7,%xmm3
movapd %xmm3,%xmm2
addpd  %xmm13,%xmm2
unpckhpd %xmm7,%xmm7
movhpd 0x60(%rdx,%rcx,8),%xmm4
mulpd  %xmm7,%xmm4
movapd %xmm4,%xmm14
addpd  %xmm1,%xmm14
add    $0x1,%rcx
add    $0x20,%rsi
cmp    %ecx,%edi
jne    1370 <kernel_dsyrk_nn_4x4_lib4+0x270>
addpd  %xmm1,%xmm4
addpd  %xmm13,%xmm3
addpd  %xmm12,%xmm5
addpd  %xmm11,%xmm0
addpd  %xmm10,%xmm6
movapd %xmm6,%xmm9
movapd %xmm0,%xmm8
movapd %xmm5,%xmm15
movapd %xmm3,%xmm2
movapd %xmm4,%xmm14
test   %eax,%eax
je     14c9 <kernel_dsyrk_nn_4x4_lib4+0x3c9>
movupd (%r8),%xmm6
movupd 0x10(%r8),%xmm4
movupd 0x28(%r8),%xmm3
movsd  0x38(%r8),%xmm0
movupd 0x50(%r8),%xmm1
movsd  0x78(%r8),%xmm5
cmp    $0x1,%eax
jne    1495 <kernel_dsyrk_nn_4x4_lib4+0x395>
addpd  %xmm6,%xmm9
addpd  %xmm4,%xmm8
addpd  %xmm3,%xmm15
addpd  %xmm1,%xmm2
unpcklpd %xmm5,%xmm0
addpd  %xmm0,%xmm14
jmp    14c9 <kernel_dsyrk_nn_4x4_lib4+0x3c9>
subpd  %xmm9,%xmm6
subpd  %xmm8,%xmm4
subpd  %xmm15,%xmm3
subpd  %xmm2,%xmm1
unpcklpd %xmm5,%xmm0
subpd  %xmm14,%xmm0
movapd %xmm6,%xmm9
movapd %xmm4,%xmm8
movapd %xmm3,%xmm15
movapd %xmm1,%xmm2
movapd %xmm0,%xmm14
movupd %xmm9,(%r9)
movupd %xmm8,0x10(%r9)
movupd %xmm15,0x28(%r9)
movlpd %xmm14,0x38(%r9)
movupd %xmm2,0x50(%r9)
movhpd %xmm14,0x78(%r9)
ret

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

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