void kernel_dgemm_nn_4x4_vs_lib4(int km, int kn, int kmax, double *A, double *B,
                                 int sdb, double *C, double *D, int alg, int tc,
                                 int td) {
  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_01 = 0, c_02 = 0, c_03 = 0, c_10 = 0, c_11 = 0, c_12 = 0,
      c_13 = 0, c_20 = 0, c_21 = 0, c_22 = 0, c_23 = 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_01 += a_0 * b_1;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_02 += a_0 * b_2;
    c_12 += a_1 * b_2;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_03 += a_0 * b_3;
    c_13 += a_1 * b_3;
    c_23 += a_2 * b_3;
    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_01 += a_0 * b_1;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_02 += a_0 * b_2;
    c_12 += a_1 * b_2;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_03 += a_0 * b_3;
    c_13 += a_1 * b_3;
    c_23 += a_2 * b_3;
    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_01 += a_0 * b_1;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_02 += a_0 * b_2;
    c_12 += a_1 * b_2;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_03 += a_0 * b_3;
    c_13 += a_1 * b_3;
    c_23 += a_2 * b_3;
    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_01 += a_0 * b_1;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_02 += a_0 * b_2;
    c_12 += a_1 * b_2;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_03 += a_0 * b_3;
    c_13 += a_1 * b_3;
    c_23 += a_2 * b_3;
    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_01 += a_0 * b_1;
    c_11 += a_1 * b_1;
    c_21 += a_2 * b_1;
    c_31 += a_3 * b_1;
    c_02 += a_0 * b_2;
    c_12 += a_1 * b_2;
    c_22 += a_2 * b_2;
    c_32 += a_3 * b_2;
    c_03 += a_0 * b_3;
    c_13 += a_1 * b_3;
    c_23 += a_2 * b_3;
    c_33 += a_3 * b_3;
    A += 4;
    B += 1;
  }
  double d_00, d_01, d_02, d_03, d_10, d_11, d_12, d_13, d_20, d_21, d_22, d_23,
      d_30, d_31, d_32, d_33;
  if (alg == 0) {
    if (td == 0) {
      goto store_n;
    } else {
      goto store_t;
    }
  } else {
    if (tc == 0) {
      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_01 = C[0 + bs * 1];
      d_11 = C[1 + bs * 1];
      d_21 = C[2 + bs * 1];
      d_31 = C[3 + bs * 1];
      d_02 = C[0 + bs * 2];
      d_12 = C[1 + bs * 2];
      d_22 = C[2 + bs * 2];
      d_32 = C[3 + bs * 2];
      d_03 = C[0 + bs * 3];
      d_13 = C[1 + bs * 3];
      d_23 = C[2 + bs * 3];
      d_33 = C[3 + bs * 3];
    } else {
      d_00 = C[0 + bs * 0];
      d_01 = C[1 + bs * 0];
      d_02 = C[2 + bs * 0];
      d_03 = C[3 + bs * 0];
      d_10 = C[0 + bs * 1];
      d_11 = C[1 + bs * 1];
      d_12 = C[2 + bs * 1];
      d_13 = C[3 + bs * 1];
      d_20 = C[0 + bs * 2];
      d_21 = C[1 + bs * 2];
      d_22 = C[2 + bs * 2];
      d_23 = C[3 + bs * 2];
      d_30 = C[0 + bs * 3];
      d_31 = C[1 + bs * 3];
      d_32 = C[2 + bs * 3];
      d_33 = C[3 + bs * 3];
    }
    if (alg == 1) {
      c_00 = d_00 + c_00;
      c_10 = d_10 + c_10;
      c_20 = d_20 + c_20;
      c_30 = d_30 + c_30;
      c_01 = d_01 + c_01;
      c_11 = d_11 + c_11;
      c_21 = d_21 + c_21;
      c_31 = d_31 + c_31;
      c_02 = d_02 + c_02;
      c_12 = d_12 + c_12;
      c_22 = d_22 + c_22;
      c_32 = d_32 + c_32;
      c_03 = d_03 + c_03;
      c_13 = d_13 + c_13;
      c_23 = d_23 + c_23;
      c_33 = d_33 + c_33;
    } else {
      c_00 = d_00 - c_00;
      c_10 = d_10 - c_10;
      c_20 = d_20 - c_20;
      c_30 = d_30 - c_30;
      c_01 = d_01 - c_01;
      c_11 = d_11 - c_11;
      c_21 = d_21 - c_21;
      c_31 = d_31 - c_31;
      c_02 = d_02 - c_02;
      c_12 = d_12 - c_12;
      c_22 = d_22 - c_22;
      c_32 = d_32 - c_32;
      c_03 = d_03 - c_03;
      c_13 = d_13 - c_13;
      c_23 = d_23 - c_23;
      c_33 = d_33 - c_33;
    }
    if (td == 0) {
      goto store_n;
    } else {
      goto store_t;
    }
  }
store_n:
  if (km >= 4) {
    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[0 + bs * 1] = c_01;
    D[1 + bs * 1] = c_11;
    D[2 + bs * 1] = c_21;
    D[3 + bs * 1] = c_31;
    D[0 + bs * 2] = c_02;
    D[1 + bs * 2] = c_12;
    D[2 + bs * 2] = c_22;
    D[3 + bs * 2] = c_32;
    if (kn >= 4) {
      D[0 + bs * 3] = c_03;
      D[1 + bs * 3] = c_13;
      D[2 + bs * 3] = c_23;
      D[3 + bs * 3] = c_33;
    }
  } else {
    D[0 + bs * 0] = c_00;
    D[1 + bs * 0] = c_10;
    D[2 + bs * 0] = c_20;
    D[0 + bs * 1] = c_01;
    D[1 + bs * 1] = c_11;
    D[2 + bs * 1] = c_21;
    D[0 + bs * 2] = c_02;
    D[1 + bs * 2] = c_12;
    D[2 + bs * 2] = c_22;
    if (kn >= 4) {
      D[0 + bs * 3] = c_03;
      D[1 + bs * 3] = c_13;
      D[2 + bs * 3] = c_23;
    }
  }
  return;
store_t:
  if (kn >= 4) {
    D[0 + bs * 0] = c_00;
    D[1 + bs * 0] = c_01;
    D[2 + bs * 0] = c_02;
    D[3 + bs * 0] = c_03;
    D[0 + bs * 1] = c_10;
    D[1 + bs * 1] = c_11;
    D[2 + bs * 1] = c_12;
    D[3 + bs * 1] = c_13;
    D[0 + bs * 2] = c_20;
    D[1 + bs * 2] = c_21;
    D[2 + bs * 2] = c_22;
    D[3 + bs * 2] = c_23;
    if (km >= 4) {
      D[0 + bs * 3] = c_30;
      D[1 + bs * 3] = c_31;
      D[2 + bs * 3] = c_32;
      D[3 + bs * 3] = c_33;
    }
  } else {
    D[0 + bs * 0] = c_00;
    D[1 + bs * 0] = c_01;
    D[2 + bs * 0] = c_02;
    D[0 + bs * 1] = c_10;
    D[1 + bs * 1] = c_11;
    D[2 + bs * 1] = c_12;
    D[0 + bs * 2] = c_20;
    D[1 + bs * 2] = c_21;
    D[2 + bs * 2] = c_22;
    if (km >= 4) {
      D[0 + bs * 3] = c_30;
      D[1 + bs * 3] = c_31;
      D[2 + bs * 3] = c_32;
    }
  }
  return;
}


x86 assembly (clang, -O0):
<kernel_dgemm_nn_4x4_vs_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %rcx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
movl   $0x4,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x78(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
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
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1c3c <kernel_dgemm_nn_4x4_vs_lib4+0xb3c>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x18(%rbp)
mov    -0x24(%rbp),%ecx
shl    $0x2,%ecx
mov    -0x20(%rbp),%rax
movslq %ecx,%rcx
shl    $0x3,%rcx
add    %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
jmp    11e9 <kernel_dgemm_nn_4x4_vs_lib4+0xe9>
jmp    1c41 <kernel_dgemm_nn_4x4_vs_lib4+0xb41>
mov    -0x2c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1ef5 <kernel_dgemm_nn_4x4_vs_lib4+0xdf5>
mov    -0x18(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x78(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x98(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x80(%rbp),%xmm1
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xa0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x88(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xa8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x90(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xb0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
mov    -0x18(%rbp),%rax
add    $0x20,%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%rax
add    $0x8,%rax
mov    %rax,-0x20(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1c41 <kernel_dgemm_nn_4x4_vs_lib4+0xb41>
cmpl   $0x0,0x20(%rbp)
jne    1f13 <kernel_dgemm_nn_4x4_vs_lib4+0xe13>
cmpl   $0x0,0x30(%rbp)
jne    1f0e <kernel_dgemm_nn_4x4_vs_lib4+0xe0e>
jmp    244b <kernel_dgemm_nn_4x4_vs_lib4+0x134b>
jmp    2646 <kernel_dgemm_nn_4x4_vs_lib4+0x1546>
cmpl   $0x0,0x28(%rbp)
jne    2031 <kernel_dgemm_nn_4x4_vs_lib4+0xf31>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x130(%rbp)
mov    0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
jmp    2140 <kernel_dgemm_nn_4x4_vs_lib4+0x1040>
mov    0x10(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
mov    0x10(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
cmpl   $0x1,0x20(%rbp)
jne    22c3 <kernel_dgemm_nn_4x4_vs_lib4+0x11c3>
movsd  -0xf8(%rbp),%xmm0
ff
addsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x118(%rbp),%xmm0
ff
addsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x138(%rbp),%xmm0
ff
addsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x158(%rbp),%xmm0
ff
addsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
addsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x120(%rbp),%xmm0
ff
addsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
addsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
addsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
addsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
addsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
addsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x168(%rbp),%xmm0
ff
addsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
addsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
addsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
addsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
addsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
jmp    2437 <kernel_dgemm_nn_4x4_vs_lib4+0x1337>
movsd  -0xf8(%rbp),%xmm0
ff
subsd  -0x78(%rbp),%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x118(%rbp),%xmm0
ff
subsd  -0x98(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x138(%rbp),%xmm0
ff
subsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x158(%rbp),%xmm0
ff
subsd  -0xd8(%rbp),%xmm0
ff
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x100(%rbp),%xmm0
ff
subsd  -0x80(%rbp),%xmm0
movsd  %xmm0,-0x80(%rbp)
movsd  -0x120(%rbp),%xmm0
ff
subsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0x140(%rbp),%xmm0
ff
subsd  -0xc0(%rbp),%xmm0
ff
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x160(%rbp),%xmm0
ff
subsd  -0xe0(%rbp),%xmm0
ff
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x108(%rbp),%xmm0
ff
subsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x128(%rbp),%xmm0
ff
subsd  -0xa8(%rbp),%xmm0
ff
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0x148(%rbp),%xmm0
ff
subsd  -0xc8(%rbp),%xmm0
ff
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x168(%rbp),%xmm0
ff
subsd  -0xe8(%rbp),%xmm0
ff
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x110(%rbp),%xmm0
ff
subsd  -0x90(%rbp),%xmm0
ff
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x130(%rbp),%xmm0
ff
subsd  -0xb0(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
subsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
subsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
cmpl   $0x0,0x30(%rbp)
jne    2446 <kernel_dgemm_nn_4x4_vs_lib4+0x1346>
jmp    244b <kernel_dgemm_nn_4x4_vs_lib4+0x134b>
jmp    2646 <kernel_dgemm_nn_4x4_vs_lib4+0x1546>
cmpl   $0x4,-0x4(%rbp)
jl     256d <kernel_dgemm_nn_4x4_vs_lib4+0x146d>
movsd  -0x78(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x58(%rax)
cmpl   $0x4,-0x8(%rbp)
jl     2568 <kernel_dgemm_nn_4x4_vs_lib4+0x1468>
movsd  -0x90(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0xf0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    2641 <kernel_dgemm_nn_4x4_vs_lib4+0x1541>
movsd  -0x78(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x50(%rax)
cmpl   $0x4,-0x8(%rbp)
jl     263c <kernel_dgemm_nn_4x4_vs_lib4+0x153c>
movsd  -0x90(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x70(%rax)
jmp    2641 <kernel_dgemm_nn_4x4_vs_lib4+0x1541>
jmp    2841 <kernel_dgemm_nn_4x4_vs_lib4+0x1741>
cmpl   $0x4,-0x8(%rbp)
jl     2768 <kernel_dgemm_nn_4x4_vs_lib4+0x1668>
movsd  -0x78(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x58(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     2763 <kernel_dgemm_nn_4x4_vs_lib4+0x1663>
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0xf0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    283c <kernel_dgemm_nn_4x4_vs_lib4+0x173c>
movsd  -0x78(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x18(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x50(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     2837 <kernel_dgemm_nn_4x4_vs_lib4+0x1737>
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x18(%rbp),%rax
movsd  %xmm0,0x70(%rax)
jmp    283c <kernel_dgemm_nn_4x4_vs_lib4+0x173c>
jmp    2841 <kernel_dgemm_nn_4x4_vs_lib4+0x1741>
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dgemm_nn_4x4_vs_lib4>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
cmp    $0x4,%edx
jl     14fc <kernel_dgemm_nn_4x4_vs_lib4+0x3fc>
lea    -0x3(%rdx),%r10d
shl    $0x2,%r9d
movslq %r9d,%r9
shl    $0x3,%r9
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x60(%rsp)
xor    %eax,%eax
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x80(%rsp)
xorpd  %xmm10,%xmm10
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x70(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x40(%rsp)
xorpd  %xmm3,%xmm3
xorpd  %xmm2,%xmm2
xorpd  %xmm7,%xmm7
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movupd (%rcx),%xmm1
movupd 0x10(%rcx),%xmm12
movupd 0x20(%rcx),%xmm11
movsd  (%r8),%xmm15
movapd %xmm15,%xmm5
unpcklpd %xmm15,%xmm5
mulpd  %xmm1,%xmm5
addpd  %xmm3,%xmm5
movsd  0x20(%r8),%xmm3
unpcklpd %xmm3,%xmm15
unpcklpd %xmm3,%xmm3
mulpd  %xmm1,%xmm3
addpd  %xmm10,%xmm3
movsd  0x40(%r8),%xmm8
unpcklpd %xmm8,%xmm8
movapd %xmm1,%xmm14
mulpd  %xmm8,%xmm14
mulpd  %xmm12,%xmm8
movsd  0x60(%r8),%xmm4
unpcklpd %xmm4,%xmm4
mulpd  %xmm4,%xmm1
movapd %xmm1,%xmm6
movapd %xmm12,%xmm1
mulpd  %xmm12,%xmm4
unpckhpd %xmm12,%xmm12
mulpd  %xmm15,%xmm12
addpd  -0x80(%rsp),%xmm12
movupd 0x30(%rcx),%xmm9
addpd  -0x70(%rsp),%xmm14
movsd  0x8(%r8),%xmm13
addpd  -0x40(%rsp),%xmm8
movsd  0x10(%r8),%xmm0
movaps %xmm0,-0x70(%rsp)
addpd  -0x60(%rsp),%xmm6
movapd %xmm6,-0x50(%rsp)
unpcklpd %xmm1,%xmm1
mulpd  %xmm15,%xmm1
addpd  %xmm2,%xmm1
addpd  %xmm7,%xmm4
movapd %xmm13,%xmm0
unpcklpd %xmm13,%xmm0
mulpd  %xmm11,%xmm0
addpd  %xmm5,%xmm0
movsd  0x28(%r8),%xmm5
unpcklpd %xmm5,%xmm13
unpcklpd %xmm5,%xmm5
mulpd  %xmm11,%xmm5
addpd  %xmm3,%xmm5
movsd  0x48(%r8),%xmm15
unpcklpd %xmm15,%xmm15
movapd %xmm11,%xmm2
movapd %xmm11,%xmm3
mulpd  %xmm15,%xmm3
mulpd  %xmm9,%xmm15
movsd  0x68(%r8),%xmm10
unpcklpd %xmm10,%xmm10
mulpd  %xmm10,%xmm2
movapd %xmm9,%xmm11
mulpd  %xmm9,%xmm10
movapd %xmm9,%xmm7
unpckhpd %xmm9,%xmm7
mulpd  %xmm13,%xmm7
addpd  %xmm12,%xmm7
movsd  0x18(%r8),%xmm6
movaps %xmm6,-0x60(%rsp)
addpd  %xmm14,%xmm3
movapd %xmm3,-0x80(%rsp)
addpd  %xmm8,%xmm15
addpd  -0x50(%rsp),%xmm2
movapd %xmm2,%xmm6
unpcklpd %xmm9,%xmm11
addpd  %xmm4,%xmm10
mulpd  %xmm13,%xmm11
addpd  %xmm1,%xmm11
movupd 0x40(%rcx),%xmm2
movupd 0x50(%rcx),%xmm12
movapd -0x70(%rsp),%xmm3
movapd %xmm3,%xmm4
unpcklpd %xmm3,%xmm4
mulpd  %xmm2,%xmm4
addpd  %xmm0,%xmm4
movsd  0x30(%r8),%xmm1
unpcklpd %xmm1,%xmm3
movapd %xmm3,%xmm14
unpcklpd %xmm1,%xmm1
mulpd  %xmm2,%xmm1
addpd  %xmm5,%xmm1
movsd  0x50(%r8),%xmm0
unpcklpd %xmm0,%xmm0
movapd %xmm2,%xmm3
mulpd  %xmm0,%xmm3
mulpd  %xmm12,%xmm0
movsd  0x70(%r8),%xmm8
unpcklpd %xmm8,%xmm8
mulpd  %xmm8,%xmm2
movapd %xmm12,%xmm9
mulpd  %xmm12,%xmm8
unpckhpd %xmm12,%xmm12
movapd %xmm14,%xmm5
mulpd  %xmm14,%xmm12
addpd  %xmm7,%xmm12
addpd  -0x80(%rsp),%xmm3
movapd %xmm3,-0x50(%rsp)
addpd  %xmm15,%xmm0
addpd  %xmm6,%xmm2
movapd %xmm2,-0x30(%rsp)
unpcklpd %xmm9,%xmm9
mulpd  %xmm14,%xmm9
addpd  %xmm11,%xmm9
addpd  %xmm10,%xmm8
movupd 0x60(%rcx),%xmm10
movupd 0x70(%rcx),%xmm13
movapd -0x60(%rsp),%xmm7
movapd %xmm7,%xmm5
unpcklpd %xmm7,%xmm5
mulpd  %xmm10,%xmm5
movsd  0x38(%r8),%xmm6
unpcklpd %xmm6,%xmm7
unpcklpd %xmm6,%xmm6
mulpd  %xmm10,%xmm6
movsd  0x58(%r8),%xmm14
unpcklpd %xmm14,%xmm14
movapd %xmm10,%xmm2
mulpd  %xmm14,%xmm2
mulpd  %xmm13,%xmm14
movsd  0x78(%r8),%xmm11
unpcklpd %xmm11,%xmm11
mulpd  %xmm11,%xmm10
mulpd  %xmm13,%xmm11
movapd %xmm13,%xmm15
unpckhpd %xmm13,%xmm13
mulpd  %xmm7,%xmm13
unpcklpd %xmm15,%xmm15
mulpd  %xmm7,%xmm15
movapd %xmm5,%xmm3
addpd  %xmm4,%xmm3
movapd %xmm6,%xmm7
addpd  %xmm1,%xmm7
movapd %xmm7,(%rsp)
movapd %xmm13,%xmm7
addpd  %xmm12,%xmm7
movapd %xmm7,-0x80(%rsp)
movapd %xmm2,-0x20(%rsp)
addpd  -0x50(%rsp),%xmm2
movapd %xmm2,-0x70(%rsp)
movapd %xmm14,%xmm7
addpd  %xmm0,%xmm7
movapd %xmm7,-0x40(%rsp)
movapd %xmm10,-0x10(%rsp)
addpd  -0x30(%rsp),%xmm10
movapd %xmm10,-0x60(%rsp)
movapd (%rsp),%xmm10
movapd %xmm11,%xmm7
addpd  %xmm8,%xmm7
movapd %xmm15,%xmm2
addpd  %xmm9,%xmm2
sub    $0xffffffffffffff80,%rcx
add    $0x4,%eax
add    %r9,%r8
cmp    %r10d,%eax
jl     1170 <kernel_dgemm_nn_4x4_vs_lib4+0x70>
addpd  %xmm9,%xmm15
addpd  %xmm8,%xmm11
movapd -0x10(%rsp),%xmm10
addpd  -0x30(%rsp),%xmm10
addpd  %xmm0,%xmm14
movapd -0x20(%rsp),%xmm0
addpd  -0x50(%rsp),%xmm0
addpd  %xmm12,%xmm13
addpd  %xmm1,%xmm6
addpd  %xmm4,%xmm5
mov    %edx,%eax
and    $0xfffffffc,%eax
movapd %xmm13,%xmm12
movapd %xmm14,%xmm13
movapd %xmm0,%xmm4
movapd %xmm6,%xmm8
movapd %xmm15,%xmm6
movapd %xmm5,%xmm9
cmp    %edx,%eax
jl     152c <kernel_dgemm_nn_4x4_vs_lib4+0x42c>
jmp    170a <kernel_dgemm_nn_4x4_vs_lib4+0x60a>
xorpd  %xmm10,%xmm10
xor    %eax,%eax
xorpd  %xmm12,%xmm12
xorpd  %xmm8,%xmm8
xorpd  %xmm4,%xmm4
xorpd  %xmm13,%xmm13
xorpd  %xmm9,%xmm9
xorpd  %xmm6,%xmm6
xorpd  %xmm11,%xmm11
cmp    %edx,%eax
jge    170a <kernel_dgemm_nn_4x4_vs_lib4+0x60a>
sub    %eax,%edx
xor    %eax,%eax
movapd %xmm10,%xmm15
movapd %xmm11,%xmm14
movapd %xmm12,-0x60(%rsp)
movapd %xmm4,%xmm12
movapd %xmm8,%xmm10
movapd %xmm9,-0x70(%rsp)
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movupd (%rcx),%xmm1
movupd 0x10(%rcx),%xmm8
movsd  (%r8,%rax,8),%xmm5
movsd  0x20(%r8,%rax,8),%xmm4
movsd  0x40(%r8,%rax,8),%xmm2
movsd  0x60(%r8,%rax,8),%xmm0
movapd %xmm5,%xmm3
unpcklpd %xmm5,%xmm3
mulpd  %xmm1,%xmm3
unpcklpd %xmm4,%xmm5
movapd %xmm5,-0x80(%rsp)
unpcklpd %xmm4,%xmm4
mulpd  %xmm1,%xmm4
unpcklpd %xmm2,%xmm2
movapd %xmm1,%xmm5
mulpd  %xmm2,%xmm5
mulpd  %xmm8,%xmm2
unpcklpd %xmm0,%xmm0
mulpd  %xmm0,%xmm1
mulpd  %xmm8,%xmm0
movapd %xmm8,%xmm7
unpckhpd %xmm8,%xmm8
movapd %xmm10,%xmm9
movapd -0x80(%rsp),%xmm10
mulpd  %xmm10,%xmm8
unpcklpd %xmm7,%xmm7
mulpd  %xmm10,%xmm7
movapd %xmm14,-0x80(%rsp)
movapd %xmm6,-0x50(%rsp)
movapd -0x70(%rsp),%xmm10
movapd %xmm13,%xmm14
movapd %xmm12,%xmm13
movapd %xmm9,%xmm11
movapd -0x60(%rsp),%xmm12
movapd %xmm15,%xmm9
movapd %xmm3,%xmm6
movapd %xmm10,-0x30(%rsp)
addpd  %xmm10,%xmm6
movapd %xmm6,-0x70(%rsp)
movapd %xmm4,%xmm10
movapd %xmm11,-0x40(%rsp)
addpd  %xmm11,%xmm10
movapd %xmm8,%xmm6
movapd %xmm12,(%rsp)
addpd  %xmm12,%xmm6
movapd %xmm6,-0x60(%rsp)
movapd %xmm5,%xmm12
movapd %xmm13,-0x10(%rsp)
addpd  %xmm13,%xmm12
movapd %xmm2,%xmm13
movapd %xmm14,-0x20(%rsp)
addpd  %xmm14,%xmm13
movapd %xmm1,%xmm15
movapd %xmm9,0x10(%rsp)
addpd  %xmm9,%xmm15
movapd %xmm0,%xmm14
addpd  -0x80(%rsp),%xmm14
movapd %xmm7,%xmm6
movapd -0x50(%rsp),%xmm9
addpd  %xmm9,%xmm6
add    $0x1,%rax
add    $0x20,%rcx
cmp    %eax,%edx
jne    1560 <kernel_dgemm_nn_4x4_vs_lib4+0x460>
movapd %xmm9,%xmm11
addpd  %xmm9,%xmm7
addpd  -0x80(%rsp),%xmm0
addpd  0x10(%rsp),%xmm1
addpd  -0x20(%rsp),%xmm2
addpd  -0x10(%rsp),%xmm5
addpd  (%rsp),%xmm8
addpd  -0x40(%rsp),%xmm4
addpd  -0x30(%rsp),%xmm3
movapd %xmm1,%xmm10
movapd %xmm8,%xmm12
movapd %xmm4,%xmm8
movapd %xmm5,%xmm4
movapd %xmm2,%xmm13
movapd %xmm3,%xmm9
movapd %xmm7,%xmm6
movapd %xmm0,%xmm11
mov    0x68(%rsp),%r10
cmpl   $0x0,0x70(%rsp)
je     18a5 <kernel_dgemm_nn_4x4_vs_lib4+0x7a5>
movapd %xmm6,-0x40(%rsp)
movapd %xmm4,-0x20(%rsp)
movapd %xmm13,-0x30(%rsp)
movapd %xmm12,-0x60(%rsp)
movapd %xmm11,-0x50(%rsp)
movapd %xmm10,-0x10(%rsp)
mov    %edi,-0x70(%rsp)
mov    %esi,-0x80(%rsp)
mov    0x60(%rsp),%rdx
lea    0x70(%rdx),%r9
lea    0x58(%rdx),%rdi
lea    0x68(%rdx),%r12
lea    0x38(%rdx),%rax
lea    0x60(%rdx),%r14
lea    0x18(%rdx),%r13
lea    0x48(%rdx),%rbp
lea    0x30(%rdx),%r8
lea    0x40(%rdx),%r15
lea    0x10(%rdx),%rcx
lea    0x20(%rdx),%r11
cmpl   $0x0,0x78(%rsp)
mov    %r9,%rsi
cmove  %rdi,%rsi
lea    0x8(%rdx),%rbx
movsd  (%rsi),%xmm10
mov    %r12,%rsi
cmove  %rax,%rsi
movsd  0x78(%rdx),%xmm0
movaps %xmm0,(%rsp)
movsd  (%rsi),%xmm12
mov    %r14,%rsi
cmove  %r13,%rsi
movsd  (%rsi),%xmm4
cmove  %r9,%rdi
movsd  (%rdi),%xmm15
movsd  0x50(%rdx),%xmm3
mov    %rbp,%rsi
cmove  %r8,%rsi
movsd  (%rsi),%xmm0
movaps %xmm0,0x10(%rsp)
mov    %r15,%rsi
cmove  %rcx,%rsi
cmove  %r12,%rax
movsd  (%rsi),%xmm2
movsd  (%rax),%xmm11
cmove  %rbp,%r8
movsd  (%r8),%xmm13
movsd  (%rdx),%xmm5
mov    %r11,%rax
cmove  %rbx,%rax
movsd  0x28(%rdx),%xmm14
movsd  (%rax),%xmm0
cmove  %r14,%r13
movsd  0x0(%r13),%xmm7
cmove  %r15,%rcx
movsd  (%rcx),%xmm6
cmove  %r11,%rbx
movsd  (%rbx),%xmm1
unpcklpd %xmm0,%xmm5
cmpl   $0x1,0x70(%rsp)
jne    1917 <kernel_dgemm_nn_4x4_vs_lib4+0x817>
addpd  %xmm5,%xmm9
unpcklpd %xmm14,%xmm1
addpd  %xmm1,%xmm8
unpcklpd %xmm12,%xmm4
movapd -0x60(%rsp),%xmm12
addpd  %xmm4,%xmm12
unpcklpd %xmm13,%xmm6
movapd -0x20(%rsp),%xmm0
addpd  %xmm6,%xmm0
movapd %xmm0,%xmm4
unpcklpd %xmm10,%xmm3
movapd -0x30(%rsp),%xmm13
addpd  %xmm3,%xmm13
unpcklpd %xmm11,%xmm7
movapd -0x10(%rsp),%xmm10
addpd  %xmm7,%xmm10
unpcklpd 0x10(%rsp),%xmm2
unpcklpd (%rsp),%xmm15
movapd -0x50(%rsp),%xmm11
addpd  %xmm15,%xmm11
movapd -0x40(%rsp),%xmm6
addpd  %xmm2,%xmm6
jmp    1991 <kernel_dgemm_nn_4x4_vs_lib4+0x891>
cmpl   $0x0,0x80(%rsp)
jne    19a8 <kernel_dgemm_nn_4x4_vs_lib4+0x8a8>
movupd %xmm9,(%r10)
movlpd %xmm6,0x10(%r10)
cmp    $0x4,%edi
jl     1a6b <kernel_dgemm_nn_4x4_vs_lib4+0x96b>
movlpd %xmm12,0x18(%r10)
movupd %xmm8,0x20(%r10)
unpckhpd %xmm12,%xmm6
movupd %xmm6,0x30(%r10)
movupd %xmm4,0x40(%r10)
movupd %xmm13,0x50(%r10)
cmp    $0x3,%esi
jle    1aae <kernel_dgemm_nn_4x4_vs_lib4+0x9ae>
movapd %xmm10,%xmm12
movapd %xmm10,%xmm1
shufpd $0x1,%xmm11,%xmm1
unpckhpd %xmm11,%xmm11
movapd %xmm11,%xmm0
movapd %xmm1,%xmm10
jmp    1a1d <kernel_dgemm_nn_4x4_vs_lib4+0x91d>
subpd  %xmm9,%xmm5
unpcklpd %xmm14,%xmm1
subpd  %xmm8,%xmm1
unpcklpd %xmm12,%xmm4
subpd  -0x60(%rsp),%xmm4
unpcklpd %xmm13,%xmm6
subpd  -0x20(%rsp),%xmm6
unpcklpd %xmm10,%xmm3
subpd  -0x30(%rsp),%xmm3
unpcklpd %xmm11,%xmm7
subpd  -0x10(%rsp),%xmm7
unpcklpd 0x10(%rsp),%xmm2
unpcklpd (%rsp),%xmm15
subpd  -0x50(%rsp),%xmm15
subpd  -0x40(%rsp),%xmm2
movapd %xmm7,%xmm10
movapd %xmm4,%xmm12
movapd %xmm1,%xmm8
movapd %xmm6,%xmm4
movapd %xmm3,%xmm13
movapd %xmm5,%xmm9
movapd %xmm2,%xmm6
movapd %xmm15,%xmm11
mov    -0x80(%rsp),%esi
mov    -0x70(%rsp),%edi
mov    0x80(%rsp),%eax
test   %eax,%eax
je     18b3 <kernel_dgemm_nn_4x4_vs_lib4+0x7b3>
movapd %xmm13,%xmm1
unpckhpd %xmm13,%xmm1
movapd %xmm11,%xmm0
unpckhpd %xmm11,%xmm0
movapd %xmm9,%xmm2
unpckhpd %xmm8,%xmm2
movapd %xmm4,%xmm3
unpckhpd %xmm10,%xmm3
movsd  %xmm9,(%r10)
movsd  %xmm8,0x8(%r10)
movsd  %xmm4,0x10(%r10)
cmp    $0x4,%esi
jl     1a38 <kernel_dgemm_nn_4x4_vs_lib4+0x938>
movsd  %xmm10,0x18(%r10)
movupd %xmm2,0x20(%r10)
movupd %xmm3,0x30(%r10)
movupd %xmm6,0x40(%r10)
movsd  %xmm13,0x50(%r10)
movsd  %xmm11,0x58(%r10)
cmp    $0x3,%edi
jle    1aae <kernel_dgemm_nn_4x4_vs_lib4+0x9ae>
movapd %xmm12,%xmm10
shufpd $0x1,%xmm1,%xmm10
movsd  %xmm12,0x60(%r10)
mov    $0xf,%eax
mov    $0xe,%ecx
mov    $0xd,%edx
movapd %xmm0,%xmm1
jmp    1a9c <kernel_dgemm_nn_4x4_vs_lib4+0x99c>
movupd %xmm2,0x20(%r10)
movlpd %xmm3,0x30(%r10)
movupd %xmm6,0x40(%r10)
movsd  %xmm13,0x50(%r10)
cmp    $0x3,%edi
jle    1aae <kernel_dgemm_nn_4x4_vs_lib4+0x9ae>
mov    $0xe,%eax
mov    $0xd,%ecx
mov    $0xc,%edx
movapd %xmm12,%xmm10
jmp    1a9c <kernel_dgemm_nn_4x4_vs_lib4+0x99c>
movupd %xmm8,0x20(%r10)
movhpd %xmm6,0x30(%r10)
movupd %xmm4,0x40(%r10)
movlpd %xmm13,0x50(%r10)
cmp    $0x3,%esi
jle    1aae <kernel_dgemm_nn_4x4_vs_lib4+0x9ae>
mov    $0xe,%eax
mov    $0xd,%ecx
mov    $0xc,%edx
movapd %xmm11,%xmm1
movlpd %xmm10,(%r10,%rdx,8)
movhpd %xmm10,(%r10,%rcx,8)
movsd  %xmm1,(%r10,%rax,8)
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @kernel_dgemm_nn_4x4_vs_lib4(i32 %0, i32 %1, i32 %2, double* %3, double* %4, i32 %5, double* %6, double* %7, i32 %8, i32 %9, i32 %10) {
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca double*
%16 = alloca double*
%17 = alloca i32
%18 = alloca double*
%19 = alloca double*
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
%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
%45 = alloca double
%46 = alloca double
%47 = alloca double
%48 = alloca double
%49 = alloca double
%50 = alloca double
%51 = alloca double
%52 = alloca double
%53 = alloca double
%54 = alloca double
%55 = alloca double
%56 = alloca double
%57 = alloca double
%58 = alloca double
%59 = alloca double
%60 = alloca double
%61 = alloca double
%62 = alloca double
%63 = alloca double
%64 = alloca double
store i32 %0, i32* %12
store i32 %1, i32* %13
store i32 %2, i32* %14
store double* %3, double** %15
store double* %4, double** %16
store i32 %5, i32* %17
store double* %6, double** %18
store double* %7, double** %19
store i32 %8, i32* %20
store i32 %9, i32* %21
store i32 %10, i32* %22
store i32 4, i32* %23
store double 0.000000e+00, double* %33
store double 0.000000e+00, double* %34
store double 0.000000e+00, double* %35
store double 0.000000e+00, double* %36
store double 0.000000e+00, double* %37
store double 0.000000e+00, double* %38
store double 0.000000e+00, double* %39
store double 0.000000e+00, double* %40
store double 0.000000e+00, double* %41
store double 0.000000e+00, double* %42
store double 0.000000e+00, double* %43
store double 0.000000e+00, double* %44
store double 0.000000e+00, double* %45
store double 0.000000e+00, double* %46
store double 0.000000e+00, double* %47
store double 0.000000e+00, double* %48
store i32 0, i32* %24
br label %65
65: ; preds = %430, %11
%66 = load i32, i32* %24
%67 = load i32, i32* %14
%68 = sub nsw i32 %67, 3
%69 = icmp slt i32 %66, %68
br i1 %69, label %70, label %433
70: ; preds = %65
%71 = load double*, double** %15
%72 = getelementptr inbounds double, double* %71, i64 0
%73 = load double, double* %72
store double %73, double* %25
%74 = load double*, double** %15
%75 = getelementptr inbounds double, double* %74, i64 1
%76 = load double, double* %75
store double %76, double* %26
%77 = load double*, double** %15
%78 = getelementptr inbounds double, double* %77, i64 2
%79 = load double, double* %78
store double %79, double* %27
%80 = load double*, double** %15
%81 = getelementptr inbounds double, double* %80, i64 3
%82 = load double, double* %81
store double %82, double* %28
%83 = load double*, double** %16
%84 = getelementptr inbounds double, double* %83, i64 0
%85 = load double, double* %84
store double %85, double* %29
%86 = load double*, double** %16
%87 = getelementptr inbounds double, double* %86, i64 4
%88 = load double, double* %87
store double %88, double* %30
%89 = load double*, double** %16
%90 = getelementptr inbounds double, double* %89, i64 8
%91 = load double, double* %90
store double %91, double* %31
%92 = load double*, double** %16
%93 = getelementptr inbounds double, double* %92, i64 12
%94 = load double, double* %93
store double %94, double* %32
%95 = load double, double* %25
%96 = load double, double* %29
%97 = load double, double* %33
%98 = call double @llvm.fmuladd.f64(double %95, double %96, double %97)
store double %98, double* %33
%99 = load double, double* %26
%100 = load double, double* %29
%101 = load double, double* %37
%102 = call double @llvm.fmuladd.f64(double %99, double %100, double %101)
store double %102, double* %37
%103 = load double, double* %27
%104 = load double, double* %29
%105 = load double, double* %41
%106 = call double @llvm.fmuladd.f64(double %103, double %104, double %105)
store double %106, double* %41
%107 = load double, double* %28
%108 = load double, double* %29
%109 = load double, double* %45
%110 = call double @llvm.fmuladd.f64(double %107, double %108, double %109)
store double %110, double* %45
%111 = load double, double* %25
%112 = load double, double* %30
%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* %26
%116 = load double, double* %30
%117 = load double, double* %38
%118 = call double @llvm.fmuladd.f64(double %115, double %116, double %117)
store double %118, double* %38
%119 = load double, double* %27
%120 = load double, double* %30
%121 = load double, double* %42
%122 = call double @llvm.fmuladd.f64(double %119, double %120, double %121)
store double %122, double* %42
%123 = load double, double* %28
%124 = load double, double* %30
%125 = load double, double* %46
%126 = call double @llvm.fmuladd.f64(double %123, double %124, double %125)
store double %126, double* %46
%127 = load double, double* %25
%128 = load double, double* %31
%129 = load double, double* %35
%130 = call double @llvm.fmuladd.f64(double %127, double %128, double %129)
store double %130, double* %35
%131 = load double, double* %26
%132 = load double, double* %31
%133 = load double, double* %39
%134 = call double @llvm.fmuladd.f64(double %131, double %132, double %133)
store double %134, double* %39
%135 = load double, double* %27
%136 = load double, double* %31
%137 = load double, double* %43
%138 = call double @llvm.fmuladd.f64(double %135, double %136, double %137)
store double %138, double* %43
%139 = load double, double* %28
%140 = load double, double* %31
%141 = load double, double* %47
%142 = call double @llvm.fmuladd.f64(double %139, double %140, double %141)
store double %142, double* %47
%143 = load double, double* %25
%144 = load double, double* %32
%145 = load double, double* %36
%146 = call double @llvm.fmuladd.f64(double %143, double %144, double %145)
store double %146, double* %36
%147 = load double, double* %26
%148 = load double, double* %32
%149 = load double, double* %40
%150 = call double @llvm.fmuladd.f64(double %147, double %148, double %149)
store double %150, double* %40
%151 = load double, double* %27
%152 = load double, double* %32
%153 = load double, double* %44
%154 = call double @llvm.fmuladd.f64(double %151, double %152, double %153)
store double %154, double* %44
%155 = load double, double* %28
%156 = load double, double* %32
%157 = load double, double* %48
%158 = call double @llvm.fmuladd.f64(double %155, double %156, double %157)
store double %158, double* %48
%159 = load double*, double** %15
%160 = getelementptr inbounds double, double* %159, i64 4
%161 = load double, double* %160
store double %161, double* %25
%162 = load double*, double** %15
%163 = getelementptr inbounds double, double* %162, i64 5
%164 = load double, double* %163
store double %164, double* %26
%165 = load double*, double** %15
%166 = getelementptr inbounds double, double* %165, i64 6
%167 = load double, double* %166
store double %167, double* %27
%168 = load double*, double** %15
%169 = getelementptr inbounds double, double* %168, i64 7
%170 = load double, double* %169
store double %170, double* %28
%171 = load double*, double** %16
%172 = getelementptr inbounds double, double* %171, i64 1
%173 = load double, double* %172
store double %173, double* %29
%174 = load double*, double** %16
%175 = getelementptr inbounds double, double* %174, i64 5
%176 = load double, double* %175
store double %176, double* %30
%177 = load double*, double** %16
%178 = getelementptr inbounds double, double* %177, i64 9
%179 = load double, double* %178
store double %179, double* %31
%180 = load double*, double** %16
%181 = getelementptr inbounds double, double* %180, i64 13
%182 = load double, double* %181
store double %182, double* %32
%183 = load double, double* %25
%184 = load double, double* %29
%185 = load double, double* %33
%186 = call double @llvm.fmuladd.f64(double %183, double %184, double %185)
store double %186, double* %33
%187 = load double, double* %26
%188 = load double, double* %29
%189 = load double, double* %37
%190 = call double @llvm.fmuladd.f64(double %187, double %188, double %189)
store double %190, double* %37
%191 = load double, double* %27
%192 = load double, double* %29
%193 = load double, double* %41
%194 = call double @llvm.fmuladd.f64(double %191, double %192, double %193)
store double %194, double* %41
%195 = load double, double* %28
%196 = load double, double* %29
%197 = load double, double* %45
%198 = call double @llvm.fmuladd.f64(double %195, double %196, double %197)
store double %198, double* %45
%199 = load double, double* %25
%200 = load double, double* %30
%201 = load double, double* %34
%202 = call double @llvm.fmuladd.f64(double %199, double %200, double %201)
store double %202, double* %34
%203 = load double, double* %26
%204 = load double, double* %30
%205 = load double, double* %38
%206 = call double @llvm.fmuladd.f64(double %203, double %204, double %205)
store double %206, double* %38
%207 = load double, double* %27
%208 = load double, double* %30
%209 = load double, double* %42
%210 = call double @llvm.fmuladd.f64(double %207, double %208, double %209)
store double %210, double* %42
%211 = load double, double* %28
%212 = load double, double* %30
%213 = load double, double* %46
%214 = call double @llvm.fmuladd.f64(double %211, double %212, double %213)
store double %214, double* %46
%215 = load double, double* %25
%216 = load double, double* %31
%217 = load double, double* %35
%218 = call double @llvm.fmuladd.f64(double %215, double %216, double %217)
store double %218, double* %35
%219 = load double, double* %26
%220 = load double, double* %31
%221 = load double, double* %39
%222 = call double @llvm.fmuladd.f64(double %219, double %220, double %221)
store double %222, double* %39
%223 = load double, double* %27
%224 = load double, double* %31
%225 = load double, double* %43
%226 = call double @llvm.fmuladd.f64(double %223, double %224, double %225)
store double %226, double* %43
%227 = load double, double* %28
%228 = load double, double* %31
%229 = load double, double* %47
%230 = call double @llvm.fmuladd.f64(double %227, double %228, double %229)
store double %230, double* %47
%231 = load double, double* %25
%232 = load double, double* %32
%233 = load double, double* %36
%234 = call double @llvm.fmuladd.f64(double %231, double %232, double %233)
store double %234, double* %36
%235 = load double, double* %26
%236 = load double, double* %32
%237 = load double, double* %40
%238 = call double @llvm.fmuladd.f64(double %235, double %236, double %237)
store double %238, double* %40
%239 = load double, double* %27
%240 = load double, double* %32
%241 = load double, double* %44
%242 = call double @llvm.fmuladd.f64(double %239, double %240, double %241)
store double %242, double* %44
%243 = load double, double* %28
%244 = load double, double* %32
%245 = load double, double* %48
%246 = call double @llvm.fmuladd.f64(double %243, double %244, double %245)
store double %246, double* %48
%247 = load double*, double** %15
%248 = getelementptr inbounds double, double* %247, i64 8
%249 = load double, double* %248
store double %249, double* %25
%250 = load double*, double** %15
%251 = getelementptr inbounds double, double* %250, i64 9
%252 = load double, double* %251
store double %252, double* %26
%253 = load double*, double** %15
%254 = getelementptr inbounds double, double* %253, i64 10
%255 = load double, double* %254
store double %255, double* %27
%256 = load double*, double** %15
%257 = getelementptr inbounds double, double* %256, i64 11
%258 = load double, double* %257
store double %258, double* %28
%259 = load double*, double** %16
%260 = getelementptr inbounds double, double* %259, i64 2
%261 = load double, double* %260
store double %261, double* %29
%262 = load double*, double** %16
%263 = getelementptr inbounds double, double* %262, i64 6
%264 = load double, double* %263
store double %264, double* %30
%265 = load double*, double** %16
%266 = getelementptr inbounds double, double* %265, i64 10
%267 = load double, double* %266
store double %267, double* %31
%268 = load double*, double** %16
%269 = getelementptr inbounds double, double* %268, i64 14
%270 = load double, double* %269
store double %270, double* %32
%271 = load double, double* %25
%272 = load double, double* %29
%273 = load double, double* %33
%274 = call double @llvm.fmuladd.f64(double %271, double %272, double %273)
store double %274, double* %33
%275 = load double, double* %26
%276 = load double, double* %29
%277 = load double, double* %37
%278 = call double @llvm.fmuladd.f64(double %275, double %276, double %277)
store double %278, double* %37
%279 = load double, double* %27
%280 = load double, double* %29
%281 = load double, double* %41
%282 = call double @llvm.fmuladd.f64(double %279, double %280, double %281)
store double %282, double* %41
%283 = load double, double* %28
%284 = load double, double* %29
%285 = load double, double* %45
%286 = call double @llvm.fmuladd.f64(double %283, double %284, double %285)
store double %286, double* %45
%287 = load double, double* %25
%288 = load double, double* %30
%289 = load double, double* %34
%290 = call double @llvm.fmuladd.f64(double %287, double %288, double %289)
store double %290, double* %34
%291 = load double, double* %26
%292 = load double, double* %30
%293 = load double, double* %38
%294 = call double @llvm.fmuladd.f64(double %291, double %292, double %293)
store double %294, double* %38
%295 = load double, double* %27
%296 = load double, double* %30
%297 = load double, double* %42
%298 = call double @llvm.fmuladd.f64(double %295, double %296, double %297)
store double %298, double* %42
%299 = load double, double* %28
%300 = load double, double* %30
%301 = load double, double* %46
%302 = call double @llvm.fmuladd.f64(double %299, double %300, double %301)
store double %302, double* %46
%303 = load double, double* %25
%304 = load double, double* %31
%305 = load double, double* %35
%306 = call double @llvm.fmuladd.f64(double %303, double %304, double %305)
store double %306, double* %35
%307 = load double, double* %26
%308 = load double, double* %31
%309 = load double, double* %39
%310 = call double @llvm.fmuladd.f64(double %307, double %308, double %309)
store double %310, double* %39
%311 = load double, double* %27
%312 = load double, double* %31
%313 = load double, double* %43
%314 = call double @llvm.fmuladd.f64(double %311, double %312, double %313)
store double %314, double* %43
%315 = load double, double* %28
%316 = load double, double* %31
%317 = load double, double* %47
%318 = call double @llvm.fmuladd.f64(double %315, double %316, double %317)
store double %318, double* %47
%319 = load double, double* %25
%320 = load double, double* %32
%321 = load double, double* %36
%322 = call double @llvm.fmuladd.f64(double %319, double %320, double %321)
store double %322, double* %36
%323 = load double, double* %26
%324 = load double, double* %32
%325 = load double, double* %40
%326 = call double @llvm.fmuladd.f64(double %323, double %324, double %325)
store double %326, double* %40
%327 = load double, double* %27
%328 = load double, double* %32
%329 = load double, double* %44
%330 = call double @llvm.fmuladd.f64(double %327, double %328, double %329)
store double %330, double* %44
%331 = load double, double* %28
%332 = load double, double* %32
%333 = load double, double* %48
%334 = call double @llvm.fmuladd.f64(double %331, double %332, double %333)
store double %334, double* %48
%335 = load double*, double** %15
%336 = getelementptr inbounds double, double* %335, i64 12
%337 = load double, double* %336
store double %337, double* %25
%338 = load double*, double** %15
%339 = getelementptr inbounds double, double* %338, i64 13
%340 = load double, double* %339
store double %340, double* %26
%341 = load double*, double** %15
%342 = getelementptr inbounds double, double* %341, i64 14
%343 = load double, double* %342
store double %343, double* %27
%344 = load double*, double** %15
%345 = getelementptr inbounds double, double* %344, i64 15
%346 = load double, double* %345
store double %346, double* %28
%347 = load double*, double** %16
%348 = getelementptr inbounds double, double* %347, i64 3
%349 = load double, double* %348
store double %349, double* %29
%350 = load double*, double** %16
%351 = getelementptr inbounds double, double* %350, i64 7
%352 = load double, double* %351
store double %352, double* %30
%353 = load double*, double** %16
%354 = getelementptr inbounds double, double* %353, i64 11
%355 = load double, double* %354
store double %355, double* %31
%356 = load double*, double** %16
%357 = getelementptr inbounds double, double* %356, i64 15
%358 = load double, double* %357
store double %358, double* %32
%359 = load double, double* %25
%360 = load double, double* %29
%361 = load double, double* %33
%362 = call double @llvm.fmuladd.f64(double %359, double %360, double %361)
store double %362, double* %33
%363 = load double, double* %26
%364 = load double, double* %29
%365 = load double, double* %37
%366 = call double @llvm.fmuladd.f64(double %363, double %364, double %365)
store double %366, double* %37
%367 = load double, double* %27
%368 = load double, double* %29
%369 = load double, double* %41
%370 = call double @llvm.fmuladd.f64(double %367, double %368, double %369)
store double %370, double* %41
%371 = load double, double* %28
%372 = load double, double* %29
%373 = load double, double* %45
%374 = call double @llvm.fmuladd.f64(double %371, double %372, double %373)
store double %374, double* %45
%375 = load double, double* %25
%376 = load double, double* %30
%377 = load double, double* %34
%378 = call double @llvm.fmuladd.f64(double %375, double %376, double %377)
store double %378, double* %34
%379 = load double, double* %26
%380 = load double, double* %30
%381 = load double, double* %38
%382 = call double @llvm.fmuladd.f64(double %379, double %380, double %381)
store double %382, double* %38
%383 = load double, double* %27
%384 = load double, double* %30
%385 = load double, double* %42
%386 = call double @llvm.fmuladd.f64(double %383, double %384, double %385)
store double %386, double* %42
%387 = load double, double* %28
%388 = load double, double* %30
%389 = load double, double* %46
%390 = call double @llvm.fmuladd.f64(double %387, double %388, double %389)
store double %390, double* %46
%391 = load double, double* %25
%392 = load double, double* %31
%393 = load double, double* %35
%394 = call double @llvm.fmuladd.f64(double %391, double %392, double %393)
store double %394, double* %35
%395 = load double, double* %26
%396 = load double, double* %31
%397 = load double, double* %39
%398 = call double @llvm.fmuladd.f64(double %395, double %396, double %397)
store double %398, double* %39
%399 = load double, double* %27
%400 = load double, double* %31
%401 = load double, double* %43
%402 = call double @llvm.fmuladd.f64(double %399, double %400, double %401)
store double %402, double* %43
%403 = load double, double* %28
%404 = load double, double* %31
%405 = load double, double* %47
%406 = call double @llvm.fmuladd.f64(double %403, double %404, double %405)
store double %406, double* %47
%407 = load double, double* %25
%408 = load double, double* %32
%409 = load double, double* %36
%410 = call double @llvm.fmuladd.f64(double %407, double %408, double %409)
store double %410, double* %36
%411 = load double, double* %26
%412 = load double, double* %32
%413 = load double, double* %40
%414 = call double @llvm.fmuladd.f64(double %411, double %412, double %413)
store double %414, double* %40
%415 = load double, double* %27
%416 = load double, double* %32
%417 = load double, double* %44
%418 = call double @llvm.fmuladd.f64(double %415, double %416, double %417)
store double %418, double* %44
%419 = load double, double* %28
%420 = load double, double* %32
%421 = load double, double* %48
%422 = call double @llvm.fmuladd.f64(double %419, double %420, double %421)
store double %422, double* %48
%423 = load double*, double** %15
%424 = getelementptr inbounds double, double* %423, i64 16
store double* %424, double** %15
%425 = load i32, i32* %17
%426 = mul nsw i32 4, %425
%427 = load double*, double** %16
%428 = sext i32 %426 to i64
%429 = getelementptr inbounds double, double* %427, i64 %428
store double* %429, double** %16
br label %430
430: ; preds = %70
%431 = load i32, i32* %24
%432 = add nsw i32 %431, 4
store i32 %432, i32* %24
br label %65
433: ; preds = %65
br label %434
434: ; preds = %531, %433
%435 = load i32, i32* %24
%436 = load i32, i32* %14
%437 = icmp slt i32 %435, %436
br i1 %437, label %438, label %534
438: ; preds = %434
%439 = load double*, double** %15
%440 = getelementptr inbounds double, double* %439, i64 0
%441 = load double, double* %440
store double %441, double* %25
%442 = load double*, double** %15
%443 = getelementptr inbounds double, double* %442, i64 1
%444 = load double, double* %443
store double %444, double* %26
%445 = load double*, double** %15
%446 = getelementptr inbounds double, double* %445, i64 2
%447 = load double, double* %446
store double %447, double* %27
%448 = load double*, double** %15
%449 = getelementptr inbounds double, double* %448, i64 3
%450 = load double, double* %449
store double %450, double* %28
%451 = load double*, double** %16
%452 = getelementptr inbounds double, double* %451, i64 0
%453 = load double, double* %452
store double %453, double* %29
%454 = load double*, double** %16
%455 = getelementptr inbounds double, double* %454, i64 4
%456 = load double, double* %455
store double %456, double* %30
%457 = load double*, double** %16
%458 = getelementptr inbounds double, double* %457, i64 8
%459 = load double, double* %458
store double %459, double* %31
%460 = load double*, double** %16
%461 = getelementptr inbounds double, double* %460, i64 12
%462 = load double, double* %461
store double %462, double* %32
%463 = load double, double* %25
%464 = load double, double* %29
%465 = load double, double* %33
%466 = call double @llvm.fmuladd.f64(double %463, double %464, double %465)
store double %466, double* %33
%467 = load double, double* %26
%468 = load double, double* %29
%469 = load double, double* %37
%470 = call double @llvm.fmuladd.f64(double %467, double %468, double %469)
store double %470, double* %37
%471 = load double, double* %27
%472 = load double, double* %29
%473 = load double, double* %41
%474 = call double @llvm.fmuladd.f64(double %471, double %472, double %473)
store double %474, double* %41
%475 = load double, double* %28
%476 = load double, double* %29
%477 = load double, double* %45
%478 = call double @llvm.fmuladd.f64(double %475, double %476, double %477)
store double %478, double* %45
%479 = load double, double* %25
%480 = load double, double* %30
%481 = load double, double* %34
%482 = call double @llvm.fmuladd.f64(double %479, double %480, double %481)
store double %482, double* %34
%483 = load double, double* %26
%484 = load double, double* %30
%485 = load double, double* %38
%486 = call double @llvm.fmuladd.f64(double %483, double %484, double %485)
store double %486, double* %38
%487 = load double, double* %27
%488 = load double, double* %30
%489 = load double, double* %42
%490 = call double @llvm.fmuladd.f64(double %487, double %488, double %489)
store double %490, double* %42
%491 = load double, double* %28
%492 = load double, double* %30
%493 = load double, double* %46
%494 = call double @llvm.fmuladd.f64(double %491, double %492, double %493)
store double %494, double* %46
%495 = load double, double* %25
%496 = load double, double* %31
%497 = load double, double* %35
%498 = call double @llvm.fmuladd.f64(double %495, double %496, double %497)
store double %498, double* %35
%499 = load double, double* %26
%500 = load double, double* %31
%501 = load double, double* %39
%502 = call double @llvm.fmuladd.f64(double %499, double %500, double %501)
store double %502, double* %39
%503 = load double, double* %27
%504 = load double, double* %31
%505 = load double, double* %43
%506 = call double @llvm.fmuladd.f64(double %503, double %504, double %505)
store double %506, double* %43
%507 = load double, double* %28
%508 = load double, double* %31
%509 = load double, double* %47
%510 = call double @llvm.fmuladd.f64(double %507, double %508, double %509)
store double %510, double* %47
%511 = load double, double* %25
%512 = load double, double* %32
%513 = load double, double* %36
%514 = call double @llvm.fmuladd.f64(double %511, double %512, double %513)
store double %514, double* %36
%515 = load double, double* %26
%516 = load double, double* %32
%517 = load double, double* %40
%518 = call double @llvm.fmuladd.f64(double %515, double %516, double %517)
store double %518, double* %40
%519 = load double, double* %27
%520 = load double, double* %32
%521 = load double, double* %44
%522 = call double @llvm.fmuladd.f64(double %519, double %520, double %521)
store double %522, double* %44
%523 = load double, double* %28
%524 = load double, double* %32
%525 = load double, double* %48
%526 = call double @llvm.fmuladd.f64(double %523, double %524, double %525)
store double %526, double* %48
%527 = load double*, double** %15
%528 = getelementptr inbounds double, double* %527, i64 4
store double* %528, double** %15
%529 = load double*, double** %16
%530 = getelementptr inbounds double, double* %529, i64 1
store double* %530, double** %16
br label %531
531: ; preds = %438
%532 = load i32, i32* %24
%533 = add nsw i32 %532, 1
store i32 %533, i32* %24
br label %434
534: ; preds = %434
%535 = load i32, i32* %20
%536 = icmp eq i32 %535, 0
br i1 %536, label %537, label %542
537: ; preds = %534
%538 = load i32, i32* %22
%539 = icmp eq i32 %538, 0
br i1 %539, label %540, label %541
540: ; preds = %537
br label %749
541: ; preds = %537
br label %847
542: ; preds = %534
%543 = load i32, i32* %21
%544 = icmp eq i32 %543, 0
br i1 %544, label %545, label %594
545: ; preds = %542
%546 = load double*, double** %18
%547 = getelementptr inbounds double, double* %546, i64 0
%548 = load double, double* %547
store double %548, double* %49
%549 = load double*, double** %18
%550 = getelementptr inbounds double, double* %549, i64 1
%551 = load double, double* %550
store double %551, double* %53
%552 = load double*, double** %18
%553 = getelementptr inbounds double, double* %552, i64 2
%554 = load double, double* %553
store double %554, double* %57
%555 = load double*, double** %18
%556 = getelementptr inbounds double, double* %555, i64 3
%557 = load double, double* %556
store double %557, double* %61
%558 = load double*, double** %18
%559 = getelementptr inbounds double, double* %558, i64 4
%560 = load double, double* %559
store double %560, double* %50
%561 = load double*, double** %18
%562 = getelementptr inbounds double, double* %561, i64 5
%563 = load double, double* %562
store double %563, double* %54
%564 = load double*, double** %18
%565 = getelementptr inbounds double, double* %564, i64 6
%566 = load double, double* %565
store double %566, double* %58
%567 = load double*, double** %18
%568 = getelementptr inbounds double, double* %567, i64 7
%569 = load double, double* %568
store double %569, double* %62
%570 = load double*, double** %18
%571 = getelementptr inbounds double, double* %570, i64 8
%572 = load double, double* %571
store double %572, double* %51
%573 = load double*, double** %18
%574 = getelementptr inbounds double, double* %573, i64 9
%575 = load double, double* %574
store double %575, double* %55
%576 = load double*, double** %18
%577 = getelementptr inbounds double, double* %576, i64 10
%578 = load double, double* %577
store double %578, double* %59
%579 = load double*, double** %18
%580 = getelementptr inbounds double, double* %579, i64 11
%581 = load double, double* %580
store double %581, double* %63
%582 = load double*, double** %18
%583 = getelementptr inbounds double, double* %582, i64 12
%584 = load double, double* %583
store double %584, double* %52
%585 = load double*, double** %18
%586 = getelementptr inbounds double, double* %585, i64 13
%587 = load double, double* %586
store double %587, double* %56
%588 = load double*, double** %18
%589 = getelementptr inbounds double, double* %588, i64 14
%590 = load double, double* %589
store double %590, double* %60
%591 = load double*, double** %18
%592 = getelementptr inbounds double, double* %591, i64 15
%593 = load double, double* %592
store double %593, double* %64
br label %643
594: ; preds = %542
%595 = load double*, double** %18
%596 = getelementptr inbounds double, double* %595, i64 0
%597 = load double, double* %596
store double %597, double* %49
%598 = load double*, double** %18
%599 = getelementptr inbounds double, double* %598, i64 1
%600 = load double, double* %599
store double %600, double* %50
%601 = load double*, double** %18
%602 = getelementptr inbounds double, double* %601, i64 2
%603 = load double, double* %602
store double %603, double* %51
%604 = load double*, double** %18
%605 = getelementptr inbounds double, double* %604, i64 3
%606 = load double, double* %605
store double %606, double* %52
%607 = load double*, double** %18
%608 = getelementptr inbounds double, double* %607, i64 4
%609 = load double, double* %608
store double %609, double* %53
%610 = load double*, double** %18
%611 = getelementptr inbounds double, double* %610, i64 5
%612 = load double, double* %611
store double %612, double* %54
%613 = load double*, double** %18
%614 = getelementptr inbounds double, double* %613, i64 6
%615 = load double, double* %614
store double %615, double* %55
%616 = load double*, double** %18
%617 = getelementptr inbounds double, double* %616, i64 7
%618 = load double, double* %617
store double %618, double* %56
%619 = load double*, double** %18
%620 = getelementptr inbounds double, double* %619, i64 8
%621 = load double, double* %620
store double %621, double* %57
%622 = load double*, double** %18
%623 = getelementptr inbounds double, double* %622, i64 9
%624 = load double, double* %623
store double %624, double* %58
%625 = load double*, double** %18
%626 = getelementptr inbounds double, double* %625, i64 10
%627 = load double, double* %626
store double %627, double* %59
%628 = load double*, double** %18
%629 = getelementptr inbounds double, double* %628, i64 11
%630 = load double, double* %629
store double %630, double* %60
%631 = load double*, double** %18
%632 = getelementptr inbounds double, double* %631, i64 12
%633 = load double, double* %632
store double %633, double* %61
%634 = load double*, double** %18
%635 = getelementptr inbounds double, double* %634, i64 13
%636 = load double, double* %635
store double %636, double* %62
%637 = load double*, double** %18
%638 = getelementptr inbounds double, double* %637, i64 14
%639 = load double, double* %638
store double %639, double* %63
%640 = load double*, double** %18
%641 = getelementptr inbounds double, double* %640, i64 15
%642 = load double, double* %641
store double %642, double* %64
br label %643
643: ; preds = %594, %545
%644 = load i32, i32* %20
%645 = icmp eq i32 %644, 1
br i1 %645, label %646, label %695
646: ; preds = %643
%647 = load double, double* %49
%648 = load double, double* %33
%649 = fadd double %647, %648
store double %649, double* %33
%650 = load double, double* %53
%651 = load double, double* %37
%652 = fadd double %650, %651
store double %652, double* %37
%653 = load double, double* %57
%654 = load double, double* %41
%655 = fadd double %653, %654
store double %655, double* %41
%656 = load double, double* %61
%657 = load double, double* %45
%658 = fadd double %656, %657
store double %658, double* %45
%659 = load double, double* %50
%660 = load double, double* %34
%661 = fadd double %659, %660
store double %661, double* %34
%662 = load double, double* %54
%663 = load double, double* %38
%664 = fadd double %662, %663
store double %664, double* %38
%665 = load double, double* %58
%666 = load double, double* %42
%667 = fadd double %665, %666
store double %667, double* %42
%668 = load double, double* %62
%669 = load double, double* %46
%670 = fadd double %668, %669
store double %670, double* %46
%671 = load double, double* %51
%672 = load double, double* %35
%673 = fadd double %671, %672
store double %673, double* %35
%674 = load double, double* %55
%675 = load double, double* %39
%676 = fadd double %674, %675
store double %676, double* %39
%677 = load double, double* %59
%678 = load double, double* %43
%679 = fadd double %677, %678
store double %679, double* %43
%680 = load double, double* %63
%681 = load double, double* %47
%682 = fadd double %680, %681
store double %682, double* %47
%683 = load double, double* %52
%684 = load double, double* %36
%685 = fadd double %683, %684
store double %685, double* %36
%686 = load double, double* %56
%687 = load double, double* %40
%688 = fadd double %686, %687
store double %688, double* %40
%689 = load double, double* %60
%690 = load double, double* %44
%691 = fadd double %689, %690
store double %691, double* %44
%692 = load double, double* %64
%693 = load double, double* %48
%694 = fadd double %692, %693
store double %694, double* %48
br label %744
695: ; preds = %643
%696 = load double, double* %49
%697 = load double, double* %33
%698 = fsub double %696, %697
store double %698, double* %33
%699 = load double, double* %53
%700 = load double, double* %37
%701 = fsub double %699, %700
store double %701, double* %37
%702 = load double, double* %57
%703 = load double, double* %41
%704 = fsub double %702, %703
store double %704, double* %41
%705 = load double, double* %61
%706 = load double, double* %45
%707 = fsub double %705, %706
store double %707, double* %45
%708 = load double, double* %50
%709 = load double, double* %34
%710 = fsub double %708, %709
store double %710, double* %34
%711 = load double, double* %54
%712 = load double, double* %38
%713 = fsub double %711, %712
store double %713, double* %38
%714 = load double, double* %58
%715 = load double, double* %42
%716 = fsub double %714, %715
store double %716, double* %42
%717 = load double, double* %62
%718 = load double, double* %46
%719 = fsub double %717, %718
store double %719, double* %46
%720 = load double, double* %51
%721 = load double, double* %35
%722 = fsub double %720, %721
store double %722, double* %35
%723 = load double, double* %55
%724 = load double, double* %39
%725 = fsub double %723, %724
store double %725, double* %39
%726 = load double, double* %59
%727 = load double, double* %43
%728 = fsub double %726, %727
store double %728, double* %43
%729 = load double, double* %63
%730 = load double, double* %47
%731 = fsub double %729, %730
store double %731, double* %47
%732 = load double, double* %52
%733 = load double, double* %36
%734 = fsub double %732, %733
store double %734, double* %36
%735 = load double, double* %56
%736 = load double, double* %40
%737 = fsub double %735, %736
store double %737, double* %40
%738 = load double, double* %60
%739 = load double, double* %44
%740 = fsub double %738, %739
store double %740, double* %44
%741 = load double, double* %64
%742 = load double, double* %48
%743 = fsub double %741, %742
store double %743, double* %48
br label %744
744: ; preds = %695, %646
%745 = load i32, i32* %22
%746 = icmp eq i32 %745, 0
br i1 %746, label %747, label %748
747: ; preds = %744
br label %749
748: ; preds = %744
br label %847
749: ; preds = %747, %540
%750 = load i32, i32* %12
%751 = icmp sge i32 %750, 4
br i1 %751, label %752, label %805
752: ; preds = %749
%753 = load double, double* %33
%754 = load double*, double** %19
%755 = getelementptr inbounds double, double* %754, i64 0
store double %753, double* %755
%756 = load double, double* %37
%757 = load double*, double** %19
%758 = getelementptr inbounds double, double* %757, i64 1
store double %756, double* %758
%759 = load double, double* %41
%760 = load double*, double** %19
%761 = getelementptr inbounds double, double* %760, i64 2
store double %759, double* %761
%762 = load double, double* %45
%763 = load double*, double** %19
%764 = getelementptr inbounds double, double* %763, i64 3
store double %762, double* %764
%765 = load double, double* %34
%766 = load double*, double** %19
%767 = getelementptr inbounds double, double* %766, i64 4
store double %765, double* %767
%768 = load double, double* %38
%769 = load double*, double** %19
%770 = getelementptr inbounds double, double* %769, i64 5
store double %768, double* %770
%771 = load double, double* %42
%772 = load double*, double** %19
%773 = getelementptr inbounds double, double* %772, i64 6
store double %771, double* %773
%774 = load double, double* %46
%775 = load double*, double** %19
%776 = getelementptr inbounds double, double* %775, i64 7
store double %774, double* %776
%777 = load double, double* %35
%778 = load double*, double** %19
%779 = getelementptr inbounds double, double* %778, i64 8
store double %777, double* %779
%780 = load double, double* %39
%781 = load double*, double** %19
%782 = getelementptr inbounds double, double* %781, i64 9
store double %780, double* %782
%783 = load double, double* %43
%784 = load double*, double** %19
%785 = getelementptr inbounds double, double* %784, i64 10
store double %783, double* %785
%786 = load double, double* %47
%787 = load double*, double** %19
%788 = getelementptr inbounds double, double* %787, i64 11
store double %786, double* %788
%789 = load i32, i32* %13
%790 = icmp sge i32 %789, 4
br i1 %790, label %791, label %804
791: ; preds = %752
%792 = load double, double* %36
%793 = load double*, double** %19
%794 = getelementptr inbounds double, double* %793, i64 12
store double %792, double* %794
%795 = load double, double* %40
%796 = load double*, double** %19
%797 = getelementptr inbounds double, double* %796, i64 13
store double %795, double* %797
%798 = load double, double* %44
%799 = load double*, double** %19
%800 = getelementptr inbounds double, double* %799, i64 14
store double %798, double* %800
%801 = load double, double* %48
%802 = load double*, double** %19
%803 = getelementptr inbounds double, double* %802, i64 15
store double %801, double* %803
br label %804
804: ; preds = %791, %752
br label %846
805: ; preds = %749
%806 = load double, double* %33
%807 = load double*, double** %19
%808 = getelementptr inbounds double, double* %807, i64 0
store double %806, double* %808
%809 = load double, double* %37
%810 = load double*, double** %19
%811 = getelementptr inbounds double, double* %810, i64 1
store double %809, double* %811
%812 = load double, double* %41
%813 = load double*, double** %19
%814 = getelementptr inbounds double, double* %813, i64 2
store double %812, double* %814
%815 = load double, double* %34
%816 = load double*, double** %19
%817 = getelementptr inbounds double, double* %816, i64 4
store double %815, double* %817
%818 = load double, double* %38
%819 = load double*, double** %19
%820 = getelementptr inbounds double, double* %819, i64 5
store double %818, double* %820
%821 = load double, double* %42
%822 = load double*, double** %19
%823 = getelementptr inbounds double, double* %822, i64 6
store double %821, double* %823
%824 = load double, double* %35
%825 = load double*, double** %19
%826 = getelementptr inbounds double, double* %825, i64 8
store double %824, double* %826
%827 = load double, double* %39
%828 = load double*, double** %19
%829 = getelementptr inbounds double, double* %828, i64 9
store double %827, double* %829
%830 = load double, double* %43
%831 = load double*, double** %19
%832 = getelementptr inbounds double, double* %831, i64 10
store double %830, double* %832
%833 = load i32, i32* %13
%834 = icmp sge i32 %833, 4
br i1 %834, label %835, label %845
835: ; preds = %805
%836 = load double, double* %36
%837 = load double*, double** %19
%838 = getelementptr inbounds double, double* %837, i64 12
store double %836, double* %838
%839 = load double, double* %40
%840 = load double*, double** %19
%841 = getelementptr inbounds double, double* %840, i64 13
store double %839, double* %841
%842 = load double, double* %44
%843 = load double*, double** %19
%844 = getelementptr inbounds double, double* %843, i64 14
store double %842, double* %844
br label %845
845: ; preds = %835, %805
br label %846
846: ; preds = %845, %804
br label %945
847: ; preds = %748, %541
%848 = load i32, i32* %13
%849 = icmp sge i32 %848, 4
br i1 %849, label %850, label %903
850: ; preds = %847
%851 = load double, double* %33
%852 = load double*, double** %19
%853 = getelementptr inbounds double, double* %852, i64 0
store double %851, double* %853
%854 = load double, double* %34
%855 = load double*, double** %19
%856 = getelementptr inbounds double, double* %855, i64 1
store double %854, double* %856
%857 = load double, double* %35
%858 = load double*, double** %19
%859 = getelementptr inbounds double, double* %858, i64 2
store double %857, double* %859
%860 = load double, double* %36
%861 = load double*, double** %19
%862 = getelementptr inbounds double, double* %861, i64 3
store double %860, double* %862
%863 = load double, double* %37
%864 = load double*, double** %19
%865 = getelementptr inbounds double, double* %864, i64 4
store double %863, double* %865
%866 = load double, double* %38
%867 = load double*, double** %19
%868 = getelementptr inbounds double, double* %867, i64 5
store double %866, double* %868
%869 = load double, double* %39
%870 = load double*, double** %19
%871 = getelementptr inbounds double, double* %870, i64 6
store double %869, double* %871
%872 = load double, double* %40
%873 = load double*, double** %19
%874 = getelementptr inbounds double, double* %873, i64 7
store double %872, double* %874
%875 = load double, double* %41
%876 = load double*, double** %19
%877 = getelementptr inbounds double, double* %876, i64 8
store double %875, double* %877
%878 = load double, double* %42
%879 = load double*, double** %19
%880 = getelementptr inbounds double, double* %879, i64 9
store double %878, double* %880
%881 = load double, double* %43
%882 = load double*, double** %19
%883 = getelementptr inbounds double, double* %882, i64 10
store double %881, double* %883
%884 = load double, double* %44
%885 = load double*, double** %19
%886 = getelementptr inbounds double, double* %885, i64 11
store double %884, double* %886
%887 = load i32, i32* %12
%888 = icmp sge i32 %887, 4
br i1 %888, label %889, label %902
889: ; preds = %850
%890 = load double, double* %45
%891 = load double*, double** %19
%892 = getelementptr inbounds double, double* %891, i64 12
store double %890, double* %892
%893 = load double, double* %46
%894 = load double*, double** %19
%895 = getelementptr inbounds double, double* %894, i64 13
store double %893, double* %895
%896 = load double, double* %47
%897 = load double*, double** %19
%898 = getelementptr inbounds double, double* %897, i64 14
store double %896, double* %898
%899 = load double, double* %48
%900 = load double*, double** %19
%901 = getelementptr inbounds double, double* %900, i64 15
store double %899, double* %901
br label %902
902: ; preds = %889, %850
br label %944
903: ; preds = %847
%904 = load double, double* %33
%905 = load double*, double** %19
%906 = getelementptr inbounds double, double* %905, i64 0
store double %904, double* %906
%907 = load double, double* %34
%908 = load double*, double** %19
%909 = getelementptr inbounds double, double* %908, i64 1
store double %907, double* %909
%910 = load double, double* %35
%911 = load double*, double** %19
%912 = getelementptr inbounds double, double* %911, i64 2
store double %910, double* %912
%913 = load double, double* %37
%914 = load double*, double** %19
%915 = getelementptr inbounds double, double* %914, i64 4
store double %913, double* %915
%916 = load double, double* %38
%917 = load double*, double** %19
%918 = getelementptr inbounds double, double* %917, i64 5
store double %916, double* %918
%919 = load double, double* %39
%920 = load double*, double** %19
%921 = getelementptr inbounds double, double* %920, i64 6
store double %919, double* %921
%922 = load double, double* %41
%923 = load double*, double** %19
%924 = getelementptr inbounds double, double* %923, i64 8
store double %922, double* %924
%925 = load double, double* %42
%926 = load double*, double** %19
%927 = getelementptr inbounds double, double* %926, i64 9
store double %925, double* %927
%928 = load double, double* %43
%929 = load double*, double** %19
%930 = getelementptr inbounds double, double* %929, i64 10
store double %928, double* %930
%931 = load i32, i32* %12
%932 = icmp sge i32 %931, 4
br i1 %932, label %933, label %943
933: ; preds = %903
%934 = load double, double* %45
%935 = load double*, double** %19
%936 = getelementptr inbounds double, double* %935, i64 12
store double %934, double* %936
%937 = load double, double* %46
%938 = load double*, double** %19
%939 = getelementptr inbounds double, double* %938, i64 13
store double %937, double* %939
%940 = load double, double* %47
%941 = load double*, double** %19
%942 = getelementptr inbounds double, double* %941, i64 14
store double %940, double* %942
br label %943
943: ; preds = %933, %903
br label %944
944: ; preds = %943, %902
br label %945
945: ; preds = %944, %846
ret void
}

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