void kernel_dgemm_nt_4x4_vs_lib4(int km, int kn, int kmax, double *A, double *B,
                                 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[1 + bs * 0];
    b_2 = B[2 + bs * 0];
    b_3 = B[3 + bs * 0];
    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[0 + bs * 1];
    b_1 = B[1 + bs * 1];
    b_2 = B[2 + bs * 1];
    b_3 = B[3 + bs * 1];
    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[0 + bs * 2];
    b_1 = B[1 + bs * 2];
    b_2 = B[2 + bs * 2];
    b_3 = B[3 + bs * 2];
    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[0 + bs * 3];
    b_1 = B[1 + bs * 3];
    b_2 = B[2 + bs * 3];
    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 += 16;
  }
  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[1 + bs * 0];
    b_2 = B[2 + bs * 0];
    b_3 = B[3 + bs * 0];
    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 += 4;
  }
  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_nt_4x4_vs_lib4>:
push   %rbp
mov    %rsp,%rbp
sub    $0xf0,%rsp
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
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    %r9,-0x28(%rbp)
movl   $0x4,-0x2c(%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,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1c2e <kernel_dgemm_nt_4x4_vs_lib4+0xb2e>
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  0x8(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%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  0x20(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x38(%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  0x40(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x58(%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  0x60(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x70(%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    -0x20(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x30(%rbp)
jmp    11e5 <kernel_dgemm_nt_4x4_vs_lib4+0xe5>
jmp    1c33 <kernel_dgemm_nt_4x4_vs_lib4+0xb33>
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1ee7 <kernel_dgemm_nt_4x4_vs_lib4+0xde7>
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  0x8(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x18(%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    $0x20,%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1c33 <kernel_dgemm_nt_4x4_vs_lib4+0xb33>
cmpl   $0x0,0x18(%rbp)
jne    1f05 <kernel_dgemm_nt_4x4_vs_lib4+0xe05>
cmpl   $0x0,0x28(%rbp)
jne    1f00 <kernel_dgemm_nt_4x4_vs_lib4+0xe00>
jmp    243d <kernel_dgemm_nt_4x4_vs_lib4+0x133d>
jmp    2638 <kernel_dgemm_nt_4x4_vs_lib4+0x1538>
cmpl   $0x0,0x20(%rbp)
jne    2023 <kernel_dgemm_nt_4x4_vs_lib4+0xf23>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x150(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
jmp    2132 <kernel_dgemm_nt_4x4_vs_lib4+0x1032>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
cmpl   $0x1,0x18(%rbp)
jne    22b5 <kernel_dgemm_nt_4x4_vs_lib4+0x11b5>
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    2429 <kernel_dgemm_nt_4x4_vs_lib4+0x1329>
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
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,0x28(%rbp)
jne    2438 <kernel_dgemm_nt_4x4_vs_lib4+0x1338>
jmp    243d <kernel_dgemm_nt_4x4_vs_lib4+0x133d>
jmp    2638 <kernel_dgemm_nt_4x4_vs_lib4+0x1538>
cmpl   $0x4,-0x4(%rbp)
jl     255f <kernel_dgemm_nt_4x4_vs_lib4+0x145f>
movsd  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x58(%rax)
cmpl   $0x4,-0x8(%rbp)
jl     255a <kernel_dgemm_nt_4x4_vs_lib4+0x145a>
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0xf0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    2633 <kernel_dgemm_nt_4x4_vs_lib4+0x1533>
movsd  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
cmpl   $0x4,-0x8(%rbp)
jl     262e <kernel_dgemm_nt_4x4_vs_lib4+0x152e>
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
jmp    2633 <kernel_dgemm_nt_4x4_vs_lib4+0x1533>
jmp    2833 <kernel_dgemm_nt_4x4_vs_lib4+0x1733>
cmpl   $0x4,-0x8(%rbp)
jl     275a <kernel_dgemm_nt_4x4_vs_lib4+0x165a>
movsd  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x90(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xb0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x58(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     2755 <kernel_dgemm_nt_4x4_vs_lib4+0x1655>
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0xf0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    282e <kernel_dgemm_nt_4x4_vs_lib4+0x172e>
movsd  -0x78(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0x80(%rbp),%xmm0
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0x88(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x98(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xa0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xa8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     2829 <kernel_dgemm_nt_4x4_vs_lib4+0x1729>
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
jmp    282e <kernel_dgemm_nt_4x4_vs_lib4+0x172e>
jmp    2833 <kernel_dgemm_nt_4x4_vs_lib4+0x1733>
add    $0xf0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernel_dgemm_nt_4x4_vs_lib4>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
cmp    $0x4,%edx
jl     14c9 <kernel_dgemm_nt_4x4_vs_lib4+0x3c9>
lea    -0x3(%rdx),%r10d
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x60(%rsp)
xor    %eax,%eax
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x20(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x70(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x80(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x30(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x50(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x40(%rsp)
xorpd  %xmm5,%xmm5
nopw   0x0(%rax,%rax,1)
movupd (%rcx),%xmm9
movupd 0x10(%rcx),%xmm8
movupd 0x20(%rcx),%xmm1
movupd 0x30(%rcx),%xmm14
movupd (%r8),%xmm0
movapd %xmm0,%xmm2
movapd %xmm8,%xmm7
unpckhpd %xmm8,%xmm7
mulpd  %xmm0,%xmm7
movapd %xmm5,%xmm11
movapd %xmm8,%xmm5
unpcklpd %xmm8,%xmm5
mulpd  %xmm0,%xmm5
unpcklpd %xmm0,%xmm0
mulpd  %xmm9,%xmm0
addpd  -0x50(%rsp),%xmm0
unpckhpd %xmm2,%xmm2
mulpd  %xmm9,%xmm2
addpd  -0x70(%rsp),%xmm2
addpd  -0x20(%rsp),%xmm7
movsd  0x10(%r8),%xmm3
unpcklpd %xmm3,%xmm3
movapd %xmm9,%xmm4
mulpd  %xmm3,%xmm4
addpd  -0x80(%rsp),%xmm4
mulpd  %xmm8,%xmm3
addpd  -0x30(%rsp),%xmm3
movsd  0x18(%r8),%xmm6
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm9
addpd  -0x60(%rsp),%xmm9
addpd  -0x40(%rsp),%xmm5
mulpd  %xmm8,%xmm6
addpd  %xmm11,%xmm6
movupd 0x20(%r8),%xmm12
movapd %xmm12,%xmm8
movapd %xmm14,%xmm10
unpckhpd %xmm14,%xmm10
mulpd  %xmm12,%xmm10
movapd %xmm14,%xmm11
unpcklpd %xmm14,%xmm11
mulpd  %xmm12,%xmm11
unpcklpd %xmm12,%xmm12
mulpd  %xmm1,%xmm12
addpd  %xmm0,%xmm12
unpckhpd %xmm8,%xmm8
mulpd  %xmm1,%xmm8
addpd  %xmm2,%xmm8
addpd  %xmm7,%xmm10
movsd  0x30(%r8),%xmm2
unpcklpd %xmm2,%xmm2
movapd %xmm1,%xmm13
mulpd  %xmm2,%xmm13
addpd  %xmm4,%xmm13
mulpd  %xmm14,%xmm2
addpd  %xmm3,%xmm2
movsd  0x38(%r8),%xmm7
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm1
addpd  %xmm9,%xmm1
movapd %xmm1,%xmm15
mulpd  %xmm14,%xmm7
addpd  %xmm6,%xmm7
addpd  %xmm5,%xmm11
movupd 0x40(%rcx),%xmm5
movupd 0x50(%rcx),%xmm14
movupd 0x40(%r8),%xmm4
movapd %xmm4,%xmm6
movapd %xmm14,%xmm3
unpckhpd %xmm14,%xmm3
mulpd  %xmm4,%xmm3
movapd %xmm14,%xmm0
unpcklpd %xmm14,%xmm0
mulpd  %xmm4,%xmm0
unpcklpd %xmm4,%xmm4
mulpd  %xmm5,%xmm4
addpd  %xmm12,%xmm4
unpckhpd %xmm6,%xmm6
mulpd  %xmm5,%xmm6
addpd  %xmm8,%xmm6
addpd  %xmm10,%xmm3
movsd  0x50(%r8),%xmm9
unpcklpd %xmm9,%xmm9
movapd %xmm5,%xmm1
mulpd  %xmm9,%xmm1
addpd  %xmm13,%xmm1
mulpd  %xmm14,%xmm9
addpd  %xmm2,%xmm9
movsd  0x58(%r8),%xmm8
unpcklpd %xmm8,%xmm8
mulpd  %xmm8,%xmm5
addpd  %xmm15,%xmm5
movapd %xmm5,0x20(%rsp)
addpd  %xmm11,%xmm0
mulpd  %xmm14,%xmm8
addpd  %xmm7,%xmm8
movupd 0x60(%rcx),%xmm10
movupd 0x70(%rcx),%xmm7
movupd 0x60(%r8),%xmm2
movapd %xmm2,%xmm11
movapd %xmm7,%xmm12
unpckhpd %xmm7,%xmm12
mulpd  %xmm2,%xmm12
movapd %xmm7,%xmm15
unpcklpd %xmm7,%xmm15
mulpd  %xmm2,%xmm15
unpcklpd %xmm2,%xmm2
mulpd  %xmm10,%xmm2
unpckhpd %xmm11,%xmm11
mulpd  %xmm10,%xmm11
movsd  0x70(%r8),%xmm14
unpcklpd %xmm14,%xmm14
movapd %xmm10,%xmm5
mulpd  %xmm14,%xmm5
mulpd  %xmm7,%xmm14
movsd  0x78(%r8),%xmm13
unpcklpd %xmm13,%xmm13
mulpd  %xmm13,%xmm10
mulpd  %xmm7,%xmm13
movapd %xmm2,%xmm7
addpd  %xmm4,%xmm7
movapd %xmm7,-0x50(%rsp)
movapd %xmm11,-0x10(%rsp)
movapd %xmm11,%xmm7
addpd  %xmm6,%xmm7
movapd %xmm7,-0x70(%rsp)
movapd 0x20(%rsp),%xmm11
movapd %xmm12,%xmm7
addpd  %xmm3,%xmm7
movapd %xmm7,-0x20(%rsp)
movapd %xmm5,(%rsp)
addpd  %xmm1,%xmm5
movapd %xmm5,-0x80(%rsp)
movapd %xmm14,%xmm7
addpd  %xmm9,%xmm7
movapd %xmm7,-0x30(%rsp)
movapd %xmm10,0x10(%rsp)
movapd %xmm11,%xmm7
addpd  %xmm11,%xmm10
movapd %xmm10,-0x60(%rsp)
movapd %xmm13,%xmm5
addpd  %xmm8,%xmm5
movapd %xmm15,%xmm7
addpd  %xmm0,%xmm7
movapd %xmm7,-0x40(%rsp)
sub    $0xffffffffffffff80,%rcx
sub    $0xffffffffffffff80,%r8
add    $0x4,%eax
cmp    %r10d,%eax
jl     1170 <kernel_dgemm_nt_4x4_vs_lib4+0x70>
addpd  %xmm0,%xmm15
addpd  %xmm8,%xmm13
movapd 0x10(%rsp),%xmm0
addpd  %xmm11,%xmm0
addpd  %xmm9,%xmm14
movapd (%rsp),%xmm5
addpd  %xmm1,%xmm5
addpd  %xmm3,%xmm12
movapd -0x10(%rsp),%xmm7
addpd  %xmm6,%xmm7
addpd  %xmm4,%xmm2
mov    %edx,%eax
and    $0xfffffffc,%eax
movapd %xmm0,%xmm11
movapd %xmm12,%xmm10
movapd %xmm15,%xmm4
movapd %xmm14,%xmm3
movapd %xmm7,%xmm14
movapd %xmm5,%xmm1
movapd %xmm2,%xmm8
cmp    %edx,%eax
jl     14f8 <kernel_dgemm_nt_4x4_vs_lib4+0x3f8>
jmp    16a5 <kernel_dgemm_nt_4x4_vs_lib4+0x5a5>
xorpd  %xmm11,%xmm11
xor    %eax,%eax
xorpd  %xmm10,%xmm10
xorpd  %xmm14,%xmm14
xorpd  %xmm1,%xmm1
xorpd  %xmm3,%xmm3
xorpd  %xmm8,%xmm8
xorpd  %xmm4,%xmm4
xorpd  %xmm13,%xmm13
cmp    %edx,%eax
jge    16a5 <kernel_dgemm_nt_4x4_vs_lib4+0x5a5>
sub    %eax,%edx
xor    %eax,%eax
movapd %xmm11,%xmm15
movapd %xmm14,-0x10(%rsp)
movapd %xmm1,%xmm12
movapd %xmm4,%xmm14
movapd %xmm3,%xmm9
nopw   0x0(%rax,%rax,1)
movupd (%rcx,%rax,1),%xmm11
movupd 0x10(%rcx,%rax,1),%xmm0
movupd (%r8,%rax,1),%xmm5
movapd %xmm5,%xmm1
movapd %xmm0,%xmm2
movapd %xmm0,%xmm6
unpckhpd %xmm0,%xmm2
mulpd  %xmm5,%xmm2
movapd %xmm0,%xmm4
unpcklpd %xmm0,%xmm4
mulpd  %xmm5,%xmm4
unpcklpd %xmm5,%xmm5
mulpd  %xmm11,%xmm5
unpckhpd %xmm1,%xmm1
mulpd  %xmm11,%xmm1
movsd  0x10(%r8,%rax,1),%xmm7
unpcklpd %xmm7,%xmm7
movapd %xmm11,%xmm0
mulpd  %xmm7,%xmm0
mulpd  %xmm6,%xmm7
movapd %xmm6,%xmm3
movsd  0x18(%r8,%rax,1),%xmm6
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm11
mulpd  %xmm3,%xmm6
movapd %xmm13,-0x70(%rsp)
movapd %xmm14,-0x80(%rsp)
movapd %xmm8,%xmm13
movapd %xmm9,-0x60(%rsp)
movapd %xmm12,%xmm14
movapd -0x10(%rsp),%xmm9
movapd %xmm10,%xmm12
movapd %xmm15,%xmm8
movapd %xmm5,%xmm10
movapd %xmm13,-0x20(%rsp)
addpd  %xmm13,%xmm10
movapd %xmm1,%xmm3
movapd %xmm9,-0x30(%rsp)
addpd  %xmm9,%xmm3
movapd %xmm3,-0x10(%rsp)
movapd %xmm2,%xmm3
movapd %xmm12,-0x40(%rsp)
addpd  %xmm12,%xmm3
movapd %xmm0,%xmm12
movapd %xmm14,-0x50(%rsp)
addpd  %xmm14,%xmm12
movapd %xmm7,%xmm9
addpd  -0x60(%rsp),%xmm9
movapd %xmm11,%xmm15
movapd %xmm8,0x20(%rsp)
addpd  %xmm8,%xmm15
movapd %xmm10,%xmm8
movapd %xmm3,%xmm10
movapd %xmm6,%xmm13
addpd  -0x70(%rsp),%xmm13
movapd %xmm4,%xmm14
addpd  -0x80(%rsp),%xmm14
add    $0x20,%rax
add    $0xffffffff,%edx
jne    1520 <kernel_dgemm_nt_4x4_vs_lib4+0x420>
addpd  -0x80(%rsp),%xmm4
addpd  -0x70(%rsp),%xmm6
addpd  0x20(%rsp),%xmm11
addpd  -0x60(%rsp),%xmm7
addpd  -0x50(%rsp),%xmm0
addpd  -0x40(%rsp),%xmm2
addpd  -0x30(%rsp),%xmm1
addpd  -0x20(%rsp),%xmm5
movapd %xmm2,%xmm10
movapd %xmm1,%xmm14
movapd %xmm0,%xmm1
movapd %xmm7,%xmm3
movapd %xmm5,%xmm8
movapd %xmm6,%xmm13
mov    0x70(%rsp),%r11
cmpl   $0x0,0x78(%rsp)
je     1847 <kernel_dgemm_nt_4x4_vs_lib4+0x747>
movapd %xmm8,%xmm12
movapd %xmm1,(%rsp)
movapd %xmm3,-0x30(%rsp)
movapd %xmm4,-0x20(%rsp)
movapd %xmm14,%xmm8
movapd %xmm13,-0x70(%rsp)
movapd %xmm10,-0x80(%rsp)
movapd %xmm11,0x10(%rsp)
mov    %edi,-0x60(%rsp)
mov    %esi,-0x10(%rsp)
lea    0x70(%r9),%r10
lea    0x58(%r9),%rdi
lea    0x68(%r9),%r13
lea    0x38(%r9),%rbx
lea    0x60(%r9),%r15
lea    0x18(%r9),%rax
lea    0x48(%r9),%rbp
lea    0x30(%r9),%r8
lea    0x40(%r9),%r12
lea    0x10(%r9),%rcx
lea    0x20(%r9),%r14
cmpl   $0x0,0x80(%rsp)
mov    %r10,%rsi
cmove  %rdi,%rsi
lea    0x8(%r9),%rdx
movsd  (%rsi),%xmm9
mov    %r13,%rsi
cmove  %rbx,%rsi
movsd  0x78(%r9),%xmm0
movaps %xmm0,-0x40(%rsp)
movsd  (%rsi),%xmm10
mov    %r15,%rsi
cmove  %rax,%rsi
movsd  (%rsi),%xmm0
cmove  %r10,%rdi
movsd  (%rdi),%xmm15
movsd  0x50(%r9),%xmm4
mov    %rbp,%rsi
cmove  %r8,%rsi
movsd  (%rsi),%xmm1
movaps %xmm1,-0x50(%rsp)
mov    %r12,%rsi
cmove  %rcx,%rsi
cmove  %r13,%rbx
movsd  (%rsi),%xmm2
movsd  (%rbx),%xmm11
cmove  %rbp,%r8
movsd  (%r8),%xmm13
movsd  (%r9),%xmm5
mov    %r14,%rsi
cmove  %rdx,%rsi
movsd  0x28(%r9),%xmm14
movsd  (%rsi),%xmm1
cmove  %r15,%rax
movsd  (%rax),%xmm7
cmove  %r12,%rcx
movsd  (%rcx),%xmm6
cmove  %r14,%rdx
movsd  (%rdx),%xmm3
unpcklpd %xmm1,%xmm5
cmpl   $0x1,0x78(%rsp)
jne    1871 <kernel_dgemm_nt_4x4_vs_lib4+0x771>
addpd  %xmm5,%xmm12
unpcklpd %xmm14,%xmm3
addpd  %xmm3,%xmm8
movapd %xmm8,%xmm14
unpcklpd %xmm10,%xmm0
movapd -0x80(%rsp),%xmm10
addpd  %xmm0,%xmm10
unpcklpd %xmm13,%xmm6
movapd (%rsp),%xmm1
addpd  %xmm6,%xmm1
unpcklpd %xmm9,%xmm4
movapd -0x30(%rsp),%xmm3
addpd  %xmm4,%xmm3
unpcklpd %xmm11,%xmm7
movapd 0x10(%rsp),%xmm11
addpd  %xmm7,%xmm11
unpcklpd -0x50(%rsp),%xmm2
unpcklpd -0x40(%rsp),%xmm15
movapd -0x70(%rsp),%xmm13
addpd  %xmm15,%xmm13
movapd -0x20(%rsp),%xmm4
addpd  %xmm2,%xmm4
jmp    18ea <kernel_dgemm_nt_4x4_vs_lib4+0x7ea>
cmpl   $0x0,0x88(%rsp)
je     19bd <kernel_dgemm_nt_4x4_vs_lib4+0x8bd>
movapd %xmm3,%xmm6
unpckhpd %xmm3,%xmm6
movapd %xmm13,%xmm5
unpckhpd %xmm13,%xmm5
movapd %xmm8,%xmm0
jmp    191d <kernel_dgemm_nt_4x4_vs_lib4+0x81d>
subpd  %xmm12,%xmm5
unpcklpd %xmm14,%xmm3
subpd  %xmm8,%xmm3
unpcklpd %xmm10,%xmm0
subpd  -0x80(%rsp),%xmm0
unpcklpd %xmm13,%xmm6
subpd  (%rsp),%xmm6
unpcklpd %xmm9,%xmm4
subpd  -0x30(%rsp),%xmm4
unpcklpd %xmm11,%xmm7
subpd  0x10(%rsp),%xmm7
unpcklpd -0x50(%rsp),%xmm2
unpcklpd -0x40(%rsp),%xmm15
subpd  -0x70(%rsp),%xmm15
subpd  -0x20(%rsp),%xmm2
movapd %xmm7,%xmm11
movapd %xmm0,%xmm10
movapd %xmm3,%xmm14
movapd %xmm6,%xmm1
movapd %xmm4,%xmm3
movapd %xmm5,%xmm12
movapd %xmm2,%xmm4
movapd %xmm15,%xmm13
mov    -0x10(%rsp),%esi
mov    -0x60(%rsp),%edi
mov    0x88(%rsp),%eax
test   %eax,%eax
je     19b8 <kernel_dgemm_nt_4x4_vs_lib4+0x8b8>
movapd %xmm3,%xmm6
unpckhpd %xmm3,%xmm6
movapd %xmm13,%xmm5
unpckhpd %xmm13,%xmm5
movapd %xmm12,%xmm8
movapd %xmm12,%xmm0
unpckhpd %xmm14,%xmm0
movapd %xmm1,%xmm2
unpckhpd %xmm11,%xmm2
movsd  %xmm8,(%r11)
movsd  %xmm14,0x8(%r11)
movsd  %xmm1,0x10(%r11)
cmp    $0x4,%esi
jl     197e <kernel_dgemm_nt_4x4_vs_lib4+0x87e>
movsd  %xmm11,0x18(%r11)
movupd %xmm0,0x20(%r11)
movupd %xmm2,0x30(%r11)
movupd %xmm4,0x40(%r11)
movsd  %xmm3,0x50(%r11)
movsd  %xmm13,0x58(%r11)
cmp    $0x3,%edi
jle    1a68 <kernel_dgemm_nt_4x4_vs_lib4+0x968>
movapd %xmm10,%xmm11
shufpd $0x1,%xmm6,%xmm11
jmp    1a0a <kernel_dgemm_nt_4x4_vs_lib4+0x90a>
movupd %xmm0,0x20(%r11)
movlpd %xmm2,0x30(%r11)
movupd %xmm4,0x40(%r11)
movsd  %xmm3,0x50(%r11)
cmp    $0x3,%edi
jle    1a68 <kernel_dgemm_nt_4x4_vs_lib4+0x968>
mov    $0xe,%eax
mov    $0xd,%ecx
mov    $0xc,%edx
movapd %xmm10,%xmm11
jmp    1a56 <kernel_dgemm_nt_4x4_vs_lib4+0x956>
movapd %xmm12,%xmm8
movupd %xmm8,(%r11)
movlpd %xmm4,0x10(%r11)
cmp    $0x4,%edi
jl     1a25 <kernel_dgemm_nt_4x4_vs_lib4+0x925>
movlpd %xmm10,0x18(%r11)
movupd %xmm14,0x20(%r11)
unpckhpd %xmm10,%xmm4
movupd %xmm4,0x30(%r11)
movupd %xmm1,0x40(%r11)
movupd %xmm3,0x50(%r11)
cmp    $0x3,%esi
jle    1a68 <kernel_dgemm_nt_4x4_vs_lib4+0x968>
movapd %xmm11,%xmm10
shufpd $0x1,%xmm13,%xmm11
unpckhpd %xmm13,%xmm13
movapd %xmm13,%xmm5
movsd  %xmm10,0x60(%r11)
mov    $0xf,%eax
mov    $0xe,%ecx
mov    $0xd,%edx
movapd %xmm5,%xmm6
jmp    1a56 <kernel_dgemm_nt_4x4_vs_lib4+0x956>
movupd %xmm14,0x20(%r11)
movhpd %xmm4,0x30(%r11)
movupd %xmm1,0x40(%r11)
movlpd %xmm3,0x50(%r11)
cmp    $0x3,%esi
jle    1a68 <kernel_dgemm_nt_4x4_vs_lib4+0x968>
mov    $0xe,%eax
mov    $0xd,%ecx
mov    $0xc,%edx
movapd %xmm13,%xmm6
movlpd %xmm11,(%r11,%rdx,8)
movhpd %xmm11,(%r11,%rcx,8)
movsd  %xmm6,(%r11,%rax,8)
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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