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) {
  if (kmax <= 0)
    return;
  const int bs = 4;
  int k;
  double a_0, a_1, a_2, a_3, b_0, b_1, b_2, b_3, 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;
  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];
  k = 0;
  for (; k < kmax - 3; k += 4) {
    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_0 = A[0 + bs * 4];
    a_1 = A[1 + bs * 4];
    a_2 = A[2 + bs * 4];
    a_3 = A[3 + bs * 4];
    b_0 = B[0 + bs * 4];
    b_1 = B[1 + bs * 4];
    b_2 = B[2 + bs * 4];
    b_3 = B[3 + bs * 4];
    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    $0x130,%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)
cmpl   $0x0,-0xc(%rbp)
jg     113c <kernel_dgemm_nt_4x4_vs_lib4+0x3c>
jmp    29f0 <kernel_dgemm_nt_4x4_vs_lib4+0x18f0>
movl   $0x4,-0x2c(%rbp)
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
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
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)
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0xc(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    1daf <kernel_dgemm_nt_4x4_vs_lib4+0xcaf>
mov    -0x18(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xf8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x118(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x100(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x120(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x108(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x128(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x110(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x130(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%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  -0x78(%rbp),%xmm0
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xf8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0x118(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0x100(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0x120(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x108(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x128(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x110(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x130(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x78(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x80(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
mov    -0x20(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xf8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x118(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x100(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x120(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x108(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x128(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x110(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x130(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%rbp)
ff
mov    -0x18(%rbp),%rax
movsd  0x80(%rax),%xmm0
movsd  %xmm0,-0x38(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x88(%rax),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x90(%rax),%xmm0
movsd  %xmm0,-0x48(%rbp)
mov    -0x18(%rbp),%rax
movsd  0x98(%rax),%xmm0
movsd  %xmm0,-0x50(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x80(%rax),%xmm0
movsd  %xmm0,-0x58(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x88(%rax),%xmm0
movsd  %xmm0,-0x60(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x90(%rax),%xmm0
movsd  %xmm0,-0x68(%rbp)
mov    -0x20(%rbp),%rax
movsd  0x98(%rax),%xmm0
movsd  %xmm0,-0x70(%rbp)
movsd  -0x78(%rbp),%xmm0
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0xf8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0x98(%rbp),%xmm2
ff
movsd  -0x118(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0x100(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0xa0(%rbp),%xmm2
ff
movsd  -0x120(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x108(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0xa8(%rbp),%xmm2
ff
movsd  -0x128(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x78(%rbp),%xmm0
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x80(%rbp),%xmm0
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x110(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x90(%rbp),%xmm0
ff
movsd  -0xb0(%rbp),%xmm2
ff
movsd  -0x130(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%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    1268 <kernel_dgemm_nt_4x4_vs_lib4+0x168>
jmp    1db4 <kernel_dgemm_nt_4x4_vs_lib4+0xcb4>
mov    -0x30(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    2074 <kernel_dgemm_nt_4x4_vs_lib4+0xf74>
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  -0xb8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xd8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0xf8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x58(%rbp),%xmm2
movsd  -0x118(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x118(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xc0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0xe0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe0(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x100(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x60(%rbp),%xmm2
movsd  -0x120(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x120(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xc8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xc8(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0xe8(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xe8(%rbp)
ff
movsd  -0x48(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x108(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x68(%rbp),%xmm2
movsd  -0x128(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x38(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xd0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x40(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0xf0(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0xf0(%rbp)
movsd  -0x48(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x110(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x50(%rbp),%xmm0
movsd  -0x70(%rbp),%xmm2
movsd  -0x130(%rbp),%xmm1
ff
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x130(%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    1db4 <kernel_dgemm_nt_4x4_vs_lib4+0xcb4>
cmpl   $0x0,0x18(%rbp)
jne    2092 <kernel_dgemm_nt_4x4_vs_lib4+0xf92>
cmpl   $0x0,0x28(%rbp)
jne    208d <kernel_dgemm_nt_4x4_vs_lib4+0xf8d>
jmp    25e2 <kernel_dgemm_nt_4x4_vs_lib4+0x14e2>
jmp    27e9 <kernel_dgemm_nt_4x4_vs_lib4+0x16e9>
cmpl   $0x0,0x20(%rbp)
jne    21b0 <kernel_dgemm_nt_4x4_vs_lib4+0x10b0>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x160(%rbp)
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x1b0(%rbp)
ff
jmp    22bf <kernel_dgemm_nt_4x4_vs_lib4+0x11bf>
mov    -0x28(%rbp),%rax
movsd  (%rax),%xmm0
movsd  %xmm0,-0x138(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x8(%rax),%xmm0
movsd  %xmm0,-0x140(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x10(%rax),%xmm0
movsd  %xmm0,-0x148(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x18(%rax),%xmm0
movsd  %xmm0,-0x150(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x20(%rax),%xmm0
movsd  %xmm0,-0x158(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x28(%rax),%xmm0
movsd  %xmm0,-0x160(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x30(%rax),%xmm0
movsd  %xmm0,-0x168(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x38(%rax),%xmm0
movsd  %xmm0,-0x170(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x40(%rax),%xmm0
movsd  %xmm0,-0x178(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x48(%rax),%xmm0
movsd  %xmm0,-0x180(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x50(%rax),%xmm0
movsd  %xmm0,-0x188(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x58(%rax),%xmm0
movsd  %xmm0,-0x190(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x60(%rax),%xmm0
movsd  %xmm0,-0x198(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x68(%rax),%xmm0
movsd  %xmm0,-0x1a0(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x70(%rax),%xmm0
movsd  %xmm0,-0x1a8(%rbp)
ff
mov    -0x28(%rbp),%rax
movsd  0x78(%rax),%xmm0
movsd  %xmm0,-0x1b0(%rbp)
ff
cmpl   $0x1,0x18(%rbp)
jne    244e <kernel_dgemm_nt_4x4_vs_lib4+0x134e>
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  -0x178(%rbp),%xmm0
addsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x198(%rbp),%xmm0
ff
addsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x118(%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  -0x180(%rbp),%xmm0
ff
addsd  -0x100(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x1a0(%rbp),%xmm0
ff
addsd  -0x120(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%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  -0x188(%rbp),%xmm0
ff
addsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x1a8(%rbp),%xmm0
ff
addsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
addsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
movsd  -0x170(%rbp),%xmm0
ff
addsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x190(%rbp),%xmm0
ff
addsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x1b0(%rbp),%xmm0
ff
addsd  -0x130(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
jmp    25ce <kernel_dgemm_nt_4x4_vs_lib4+0x14ce>
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  -0x178(%rbp),%xmm0
ff
subsd  -0xf8(%rbp),%xmm0
ff
movsd  %xmm0,-0xf8(%rbp)
ff
movsd  -0x198(%rbp),%xmm0
ff
subsd  -0x118(%rbp),%xmm0
ff
movsd  %xmm0,-0x118(%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  -0x180(%rbp),%xmm0
ff
subsd  -0x100(%rbp),%xmm0
ff
movsd  %xmm0,-0x100(%rbp)
ff
movsd  -0x1a0(%rbp),%xmm0
ff
subsd  -0x120(%rbp),%xmm0
ff
movsd  %xmm0,-0x120(%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  -0x188(%rbp),%xmm0
ff
subsd  -0x108(%rbp),%xmm0
ff
movsd  %xmm0,-0x108(%rbp)
ff
movsd  -0x1a8(%rbp),%xmm0
ff
subsd  -0x128(%rbp),%xmm0
ff
movsd  %xmm0,-0x128(%rbp)
ff
movsd  -0x150(%rbp),%xmm0
ff
subsd  -0xd0(%rbp),%xmm0
ff
movsd  %xmm0,-0xd0(%rbp)
ff
movsd  -0x170(%rbp),%xmm0
ff
subsd  -0xf0(%rbp),%xmm0
ff
movsd  %xmm0,-0xf0(%rbp)
ff
movsd  -0x190(%rbp),%xmm0
ff
subsd  -0x110(%rbp),%xmm0
ff
movsd  %xmm0,-0x110(%rbp)
ff
movsd  -0x1b0(%rbp),%xmm0
ff
subsd  -0x130(%rbp),%xmm0
ff
movsd  %xmm0,-0x130(%rbp)
ff
cmpl   $0x0,0x28(%rbp)
jne    25dd <kernel_dgemm_nt_4x4_vs_lib4+0x14dd>
jmp    25e2 <kernel_dgemm_nt_4x4_vs_lib4+0x14e2>
jmp    27e9 <kernel_dgemm_nt_4x4_vs_lib4+0x16e9>
cmpl   $0x4,-0x4(%rbp)
jl     270a <kernel_dgemm_nt_4x4_vs_lib4+0x160a>
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xf8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0x118(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x100(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0x120(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x108(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x128(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x58(%rax)
cmpl   $0x4,-0x8(%rbp)
jl     2705 <kernel_dgemm_nt_4x4_vs_lib4+0x1605>
movsd  -0xd0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xf0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x110(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0x130(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    27e4 <kernel_dgemm_nt_4x4_vs_lib4+0x16e4>
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xf8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0x100(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x108(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
cmpl   $0x4,-0x8(%rbp)
jl     27df <kernel_dgemm_nt_4x4_vs_lib4+0x16df>
movsd  -0xd0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0xf0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x110(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
jmp    27e4 <kernel_dgemm_nt_4x4_vs_lib4+0x16e4>
jmp    29f0 <kernel_dgemm_nt_4x4_vs_lib4+0x18f0>
cmpl   $0x4,-0x8(%rbp)
jl     2911 <kernel_dgemm_nt_4x4_vs_lib4+0x1811>
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0xd0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x18(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xf0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x38(%rax)
movsd  -0xf8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x100(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x108(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
movsd  -0x110(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x58(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     290c <kernel_dgemm_nt_4x4_vs_lib4+0x180c>
movsd  -0x118(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x120(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x128(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
movsd  -0x130(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x78(%rax)
jmp    29eb <kernel_dgemm_nt_4x4_vs_lib4+0x18eb>
movsd  -0xb8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,(%rax)
movsd  -0xc0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x8(%rax)
movsd  -0xc8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x10(%rax)
movsd  -0xd8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x20(%rax)
movsd  -0xe0(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x28(%rax)
movsd  -0xe8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x30(%rax)
movsd  -0xf8(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x40(%rax)
movsd  -0x100(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x48(%rax)
movsd  -0x108(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x50(%rax)
cmpl   $0x4,-0x4(%rbp)
jl     29e6 <kernel_dgemm_nt_4x4_vs_lib4+0x18e6>
movsd  -0x118(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x60(%rax)
movsd  -0x120(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x68(%rax)
movsd  -0x128(%rbp),%xmm0
ff
mov    0x10(%rbp),%rax
movsd  %xmm0,0x70(%rax)
jmp    29eb <kernel_dgemm_nt_4x4_vs_lib4+0x18eb>
jmp    29f0 <kernel_dgemm_nt_4x4_vs_lib4+0x18f0>
add    $0x130,%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    $0x28,%rsp
test   %edx,%edx
jle    1a6b <kernel_dgemm_nt_4x4_vs_lib4+0x96b>
cmp    $0x4,%edx
jb     14e3 <kernel_dgemm_nt_4x4_vs_lib4+0x3e3>
lea    -0x3(%rdx),%r10d
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x70(%rsp)
xor    %eax,%eax
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x20(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x50(%rsp)
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x10(%rsp)
xorpd  %xmm4,%xmm4
xorpd  %xmm0,%xmm0
movapd %xmm0,-0x30(%rsp)
xorpd  %xmm5,%xmm5
nopl   0x0(%rax,%rax,1)
movupd (%rcx),%xmm2
movapd %xmm4,%xmm1
movupd 0x10(%rcx),%xmm8
movupd 0x20(%rcx),%xmm7
movupd 0x30(%rcx),%xmm9
movupd (%r8),%xmm4
movapd %xmm4,%xmm12
movapd %xmm8,%xmm14
unpckhpd %xmm8,%xmm14
mulpd  %xmm4,%xmm14
movapd %xmm8,%xmm0
unpcklpd %xmm8,%xmm0
mulpd  %xmm4,%xmm0
unpcklpd %xmm4,%xmm4
mulpd  %xmm2,%xmm4
addpd  %xmm1,%xmm4
movupd 0x20(%r8),%xmm15
unpckhpd %xmm12,%xmm12
mulpd  %xmm2,%xmm12
addpd  (%rsp),%xmm12
addpd  -0x20(%rsp),%xmm14
movsd  0x10(%r8),%xmm3
unpcklpd %xmm3,%xmm3
movapd %xmm2,%xmm6
mulpd  %xmm3,%xmm6
addpd  -0x50(%rsp),%xmm6
mulpd  %xmm8,%xmm3
addpd  -0x10(%rsp),%xmm3
movsd  0x18(%r8),%xmm1
unpcklpd %xmm1,%xmm1
mulpd  %xmm1,%xmm2
addpd  -0x70(%rsp),%xmm2
movapd %xmm2,-0x80(%rsp)
addpd  -0x30(%rsp),%xmm0
mulpd  %xmm8,%xmm1
addpd  %xmm5,%xmm1
movupd 0x40(%rcx),%xmm8
movups 0x50(%rcx),%xmm2
movaps %xmm2,-0x60(%rsp)
movapd %xmm15,%xmm13
movapd %xmm9,%xmm10
unpckhpd %xmm9,%xmm10
mulpd  %xmm15,%xmm10
movapd %xmm9,%xmm2
unpcklpd %xmm9,%xmm2
mulpd  %xmm15,%xmm2
unpcklpd %xmm15,%xmm15
movapd %xmm7,%xmm5
mulpd  %xmm7,%xmm15
addpd  %xmm4,%xmm15
movupd 0x40(%r8),%xmm11
unpckhpd %xmm13,%xmm13
mulpd  %xmm7,%xmm13
addpd  %xmm12,%xmm13
addpd  %xmm14,%xmm10
movsd  0x30(%r8),%xmm4
unpcklpd %xmm4,%xmm4
movapd %xmm7,%xmm14
mulpd  %xmm4,%xmm14
addpd  %xmm6,%xmm14
mulpd  %xmm9,%xmm4
addpd  %xmm3,%xmm4
movsd  0x38(%r8),%xmm7
unpcklpd %xmm7,%xmm7
mulpd  %xmm7,%xmm5
addpd  -0x80(%rsp),%xmm5
mulpd  %xmm9,%xmm7
addpd  %xmm1,%xmm7
addpd  %xmm0,%xmm2
movups 0x60(%rcx),%xmm0
movaps %xmm0,-0x80(%rsp)
movups 0x70(%rcx),%xmm0
movaps %xmm0,-0x70(%rsp)
movapd %xmm11,%xmm6
movapd -0x60(%rsp),%xmm9
movapd %xmm9,%xmm3
unpckhpd %xmm9,%xmm3
mulpd  %xmm11,%xmm3
unpcklpd %xmm9,%xmm9
mulpd  %xmm11,%xmm9
movapd %xmm11,%xmm1
unpcklpd %xmm11,%xmm1
mulpd  %xmm8,%xmm1
addpd  %xmm15,%xmm1
movupd 0x60(%r8),%xmm11
unpckhpd %xmm6,%xmm6
mulpd  %xmm8,%xmm6
addpd  %xmm13,%xmm6
addpd  %xmm10,%xmm3
movsd  0x50(%r8),%xmm12
unpcklpd %xmm12,%xmm12
movapd %xmm8,%xmm0
mulpd  %xmm12,%xmm0
addpd  %xmm14,%xmm0
movapd -0x60(%rsp),%xmm13
mulpd  %xmm13,%xmm12
addpd  %xmm4,%xmm12
movsd  0x58(%r8),%xmm10
unpcklpd %xmm10,%xmm10
mulpd  %xmm10,%xmm8
addpd  %xmm5,%xmm8
movapd %xmm8,-0x40(%rsp)
addpd  %xmm2,%xmm9
mulpd  %xmm13,%xmm10
addpd  %xmm7,%xmm10
movapd %xmm11,%xmm14
movapd -0x70(%rsp),%xmm13
movapd %xmm13,%xmm2
unpckhpd %xmm13,%xmm2
mulpd  %xmm11,%xmm2
movapd %xmm13,%xmm8
unpcklpd %xmm13,%xmm8
mulpd  %xmm11,%xmm8
unpcklpd %xmm11,%xmm11
movapd -0x80(%rsp),%xmm4
mulpd  %xmm4,%xmm11
unpckhpd %xmm14,%xmm14
mulpd  %xmm4,%xmm14
movsd  0x70(%r8),%xmm7
unpcklpd %xmm7,%xmm7
movapd %xmm4,%xmm15
mulpd  %xmm7,%xmm15
mulpd  %xmm13,%xmm7
movapd %xmm13,%xmm5
movsd  0x78(%r8),%xmm13
unpcklpd %xmm13,%xmm13
mulpd  %xmm13,%xmm4
movapd %xmm4,-0x80(%rsp)
mulpd  %xmm5,%xmm13
sub    $0xffffffffffffff80,%rcx
add    $0x80,%r8
movapd %xmm11,%xmm4
addpd  %xmm1,%xmm4
movapd %xmm14,0x10(%rsp)
addpd  %xmm6,%xmm14
movapd %xmm14,(%rsp)
movapd %xmm2,%xmm5
addpd  %xmm3,%xmm5
movapd %xmm5,-0x20(%rsp)
movapd %xmm15,-0x60(%rsp)
addpd  %xmm0,%xmm15
movapd %xmm15,-0x50(%rsp)
movapd %xmm7,%xmm5
addpd  %xmm12,%xmm5
movapd %xmm5,-0x10(%rsp)
movapd -0x80(%rsp),%xmm5
addpd  -0x40(%rsp),%xmm5
movapd %xmm5,-0x70(%rsp)
movapd %xmm13,%xmm5
addpd  %xmm10,%xmm5
movapd %xmm8,%xmm14
addpd  %xmm9,%xmm14
movapd %xmm14,-0x30(%rsp)
add    $0x4,%eax
cmp    %r10d,%eax
jl     1170 <kernel_dgemm_nt_4x4_vs_lib4+0x70>
addpd  %xmm9,%xmm8
addpd  %xmm10,%xmm13
movapd -0x80(%rsp),%xmm10
addpd  -0x40(%rsp),%xmm10
addpd  %xmm12,%xmm7
movapd -0x60(%rsp),%xmm12
addpd  %xmm0,%xmm12
addpd  %xmm3,%xmm2
movapd 0x10(%rsp),%xmm9
addpd  %xmm6,%xmm9
addpd  %xmm1,%xmm11
mov    %edx,%eax
and    $0xfffffffc,%eax
movapd %xmm8,%xmm14
movapd %xmm11,%xmm8
cmp    %edx,%eax
jl     1513 <kernel_dgemm_nt_4x4_vs_lib4+0x413>
jmp    16be <kernel_dgemm_nt_4x4_vs_lib4+0x5be>
xorpd  %xmm10,%xmm10
xor    %eax,%eax
xorpd  %xmm2,%xmm2
xorpd  %xmm9,%xmm9
xorpd  %xmm12,%xmm12
xorpd  %xmm7,%xmm7
xorpd  %xmm8,%xmm8
xorpd  %xmm14,%xmm14
xorpd  %xmm13,%xmm13
cmp    %edx,%eax
jge    16be <kernel_dgemm_nt_4x4_vs_lib4+0x5be>
sub    %eax,%edx
xor    %eax,%eax
movapd %xmm10,%xmm3
movapd %xmm2,%xmm11
movapd %xmm9,%xmm10
movapd %xmm7,%xmm9
movapd %xmm12,-0x60(%rsp)
movapd %xmm8,%xmm15
nopw   0x0(%rax,%rax,1)
movupd (%rcx,%rax,1),%xmm12
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  %xmm12,%xmm5
unpckhpd %xmm1,%xmm1
mulpd  %xmm12,%xmm1
movsd  0x10(%r8,%rax,1),%xmm7
unpcklpd %xmm7,%xmm7
movapd %xmm12,%xmm0
mulpd  %xmm7,%xmm0
mulpd  %xmm6,%xmm7
movapd %xmm6,%xmm8
movsd  0x18(%r8,%rax,1),%xmm6
unpcklpd %xmm6,%xmm6
mulpd  %xmm6,%xmm12
mulpd  %xmm8,%xmm6
movapd %xmm13,-0x70(%rsp)
movapd %xmm14,-0x40(%rsp)
movapd %xmm15,%xmm13
movapd %xmm9,-0x80(%rsp)
movapd -0x60(%rsp),%xmm14
movapd %xmm10,%xmm9
movapd %xmm11,%xmm10
movapd %xmm3,-0x50(%rsp)
movapd %xmm5,%xmm15
movapd %xmm13,(%rsp)
addpd  %xmm13,%xmm15
movapd %xmm1,%xmm8
movapd %xmm9,-0x10(%rsp)
addpd  %xmm9,%xmm8
movapd %xmm2,%xmm11
movapd %xmm10,-0x20(%rsp)
addpd  %xmm10,%xmm11
movapd %xmm0,%xmm3
movapd %xmm14,-0x30(%rsp)
addpd  %xmm14,%xmm3
movapd %xmm3,-0x60(%rsp)
movapd %xmm7,%xmm9
addpd  -0x80(%rsp),%xmm9
movapd %xmm12,%xmm3
addpd  -0x50(%rsp),%xmm3
movapd %xmm6,%xmm13
addpd  -0x70(%rsp),%xmm13
movapd %xmm4,%xmm14
addpd  -0x40(%rsp),%xmm14
movapd %xmm8,%xmm10
add    $0x20,%rax
add    $0xffffffff,%edx
jne    1540 <kernel_dgemm_nt_4x4_vs_lib4+0x440>
addpd  -0x40(%rsp),%xmm4
addpd  -0x70(%rsp),%xmm6
addpd  -0x50(%rsp),%xmm12
addpd  -0x80(%rsp),%xmm7
addpd  -0x30(%rsp),%xmm0
addpd  -0x20(%rsp),%xmm2
addpd  -0x10(%rsp),%xmm1
addpd  (%rsp),%xmm5
movapd %xmm12,%xmm10
movapd %xmm1,%xmm9
movapd %xmm0,%xmm12
movapd %xmm5,%xmm8
movapd %xmm4,%xmm14
movapd %xmm6,%xmm13
mov    0x60(%rsp),%r11
cmpl   $0x0,0x68(%rsp)
je     1865 <kernel_dgemm_nt_4x4_vs_lib4+0x765>
movapd %xmm12,-0x60(%rsp)
movapd %xmm7,-0x20(%rsp)
movapd %xmm14,-0x10(%rsp)
movapd %xmm13,-0x50(%rsp)
movapd %xmm2,(%rsp)
movapd %xmm10,-0x80(%rsp)
mov    %edi,-0x40(%rsp)
mov    %esi,-0x70(%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,0x70(%rsp)
mov    %r10,%rsi
cmove  %rdi,%rsi
lea    0x8(%r9),%rdx
movsd  (%rsi),%xmm10
mov    %r13,%rsi
cmove  %rbx,%rsi
movsd  0x78(%r9),%xmm0
movaps %xmm0,-0x30(%rsp)
movsd  (%rsi),%xmm12
mov    %r15,%rsi
cmove  %rax,%rsi
movsd  (%rsi),%xmm2
cmove  %r10,%rdi
movsd  (%rdi),%xmm15
movsd  0x50(%r9),%xmm4
mov    %rbp,%rsi
cmove  %r8,%rsi
movsd  (%rsi),%xmm0
movaps %xmm0,0x10(%rsp)
mov    %r12,%rsi
cmove  %rcx,%rsi
cmove  %r13,%rbx
movsd  (%rsi),%xmm1
movsd  (%rbx),%xmm11
cmove  %rbp,%r8
movsd  (%r8),%xmm13
movsd  (%r9),%xmm5
mov    %r14,%rsi
cmove  %rdx,%rsi
movsd  0x28(%r9),%xmm14
movsd  (%rsi),%xmm0
cmove  %r15,%rax
movsd  (%rax),%xmm7
cmove  %r12,%rcx
movsd  (%rcx),%xmm6
cmove  %r14,%rdx
movsd  (%rdx),%xmm3
unpcklpd %xmm0,%xmm5
cmpl   $0x1,0x68(%rsp)
jne    18d4 <kernel_dgemm_nt_4x4_vs_lib4+0x7d4>
movapd %xmm8,%xmm0
addpd  %xmm5,%xmm0
unpcklpd %xmm14,%xmm3
addpd  %xmm3,%xmm9
unpcklpd %xmm12,%xmm2
movapd (%rsp),%xmm8
addpd  %xmm2,%xmm8
unpcklpd %xmm13,%xmm6
movapd -0x60(%rsp),%xmm12
addpd  %xmm6,%xmm12
unpcklpd %xmm10,%xmm4
movapd -0x20(%rsp),%xmm3
addpd  %xmm4,%xmm3
movapd %xmm8,%xmm2
movapd %xmm0,%xmm8
unpcklpd %xmm11,%xmm7
movapd -0x80(%rsp),%xmm10
addpd  %xmm7,%xmm10
movapd %xmm3,%xmm7
unpcklpd 0x10(%rsp),%xmm1
unpcklpd -0x30(%rsp),%xmm15
movapd -0x50(%rsp),%xmm13
addpd  %xmm15,%xmm13
movapd -0x10(%rsp),%xmm14
addpd  %xmm1,%xmm14
jmp    194a <kernel_dgemm_nt_4x4_vs_lib4+0x84a>
cmpl   $0x0,0x78(%rsp)
jne    195e <kernel_dgemm_nt_4x4_vs_lib4+0x85e>
movupd %xmm8,(%r11)
movlpd %xmm14,0x10(%r11)
cmp    $0x4,%edi
jl     1a28 <kernel_dgemm_nt_4x4_vs_lib4+0x928>
movlpd %xmm2,0x18(%r11)
movupd %xmm9,0x20(%r11)
unpckhpd %xmm2,%xmm14
movupd %xmm14,0x30(%r11)
movupd %xmm12,0x40(%r11)
movupd %xmm7,0x50(%r11)
cmp    $0x3,%esi
jle    1a6b <kernel_dgemm_nt_4x4_vs_lib4+0x96b>
movapd %xmm10,%xmm1
movapd %xmm10,%xmm0
shufpd $0x1,%xmm13,%xmm0
unpckhpd %xmm13,%xmm13
movapd %xmm13,%xmm5
movapd %xmm0,%xmm10
jmp    19da <kernel_dgemm_nt_4x4_vs_lib4+0x8da>
subpd  %xmm8,%xmm5
unpcklpd %xmm14,%xmm3
subpd  %xmm9,%xmm3
unpcklpd %xmm12,%xmm2
subpd  (%rsp),%xmm2
unpcklpd %xmm13,%xmm6
subpd  -0x60(%rsp),%xmm6
unpcklpd %xmm10,%xmm4
subpd  -0x20(%rsp),%xmm4
unpcklpd %xmm11,%xmm7
subpd  -0x80(%rsp),%xmm7
unpcklpd 0x10(%rsp),%xmm1
unpcklpd -0x30(%rsp),%xmm15
subpd  -0x50(%rsp),%xmm15
subpd  -0x10(%rsp),%xmm1
movapd %xmm7,%xmm10
movapd %xmm3,%xmm9
movapd %xmm6,%xmm12
movapd %xmm4,%xmm7
movapd %xmm5,%xmm8
movapd %xmm1,%xmm14
movapd %xmm15,%xmm13
mov    -0x70(%rsp),%esi
mov    -0x40(%rsp),%edi
mov    0x78(%rsp),%eax
test   %eax,%eax
je     1870 <kernel_dgemm_nt_4x4_vs_lib4+0x770>
movapd %xmm2,%xmm4
movapd %xmm7,%xmm0
unpckhpd %xmm7,%xmm0
movapd %xmm13,%xmm5
unpckhpd %xmm13,%xmm5
movapd %xmm8,%xmm1
unpckhpd %xmm9,%xmm1
movapd %xmm12,%xmm2
unpckhpd %xmm10,%xmm2
movsd  %xmm8,(%r11)
movsd  %xmm9,0x8(%r11)
movsd  %xmm12,0x10(%r11)
cmp    $0x4,%esi
jl     19f5 <kernel_dgemm_nt_4x4_vs_lib4+0x8f5>
movsd  %xmm10,0x18(%r11)
movupd %xmm1,0x20(%r11)
movupd %xmm2,0x30(%r11)
movupd %xmm14,0x40(%r11)
movsd  %xmm7,0x50(%r11)
movsd  %xmm13,0x58(%r11)
cmp    $0x3,%edi
jle    1a6b <kernel_dgemm_nt_4x4_vs_lib4+0x96b>
movapd %xmm4,%xmm1
movapd %xmm4,%xmm10
shufpd $0x1,%xmm0,%xmm10
movsd  %xmm1,0x60(%r11)
mov    $0xf,%eax
mov    $0xe,%ecx
mov    $0xd,%edx
movapd %xmm5,%xmm0
jmp    1a59 <kernel_dgemm_nt_4x4_vs_lib4+0x959>
movupd %xmm1,0x20(%r11)
movlpd %xmm2,0x30(%r11)
movupd %xmm14,0x40(%r11)
movsd  %xmm7,0x50(%r11)
cmp    $0x3,%edi
jle    1a6b <kernel_dgemm_nt_4x4_vs_lib4+0x96b>
mov    $0xe,%eax
mov    $0xd,%ecx
mov    $0xc,%edx
movapd %xmm4,%xmm10
jmp    1a59 <kernel_dgemm_nt_4x4_vs_lib4+0x959>
movupd %xmm9,0x20(%r11)
movhpd %xmm14,0x30(%r11)
movupd %xmm12,0x40(%r11)
movlpd %xmm7,0x50(%r11)
cmp    $0x3,%esi
jle    1a6b <kernel_dgemm_nt_4x4_vs_lib4+0x96b>
mov    $0xe,%eax
mov    $0xd,%ecx
mov    $0xc,%edx
movapd %xmm13,%xmm0
movlpd %xmm10,(%r11,%rdx,8)
movhpd %xmm10,(%r11,%rcx,8)
movsd  %xmm0,(%r11,%rax,8)
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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